{"version":3,"sources":["app.js"],"names":["require","e","t","n","r","s","o","u","a","i","f","Error","code","l","exports","call","length","AppProperties","module","defaultLocale","serviceRoot","appVersion","svnRevision","buildDate","authProvider","allowStartTrial","allowMainPage","adobeDcClientId","baseUrl","freePlanLimits","currentLocale","appTitle","buildVersion","autoNavigateToSso","registrationWithoutBusinessUnitAllowed","enforcePasswordPolicies","enforcePasswordExpiration","sentryDsn","1","timeString2ms","b","split","cleanWord","word","replace","toLowerCase","clone","obj","copy","constructor","attr","hasOwnProperty","vttString","Promise","resolve","reject","current","sections","start","vttArray","forEach","line","index","indexOf","push","trimRight","pop","end","trimLeft","shift","part","regex","section","strs","results","map","reduce","cleanText","cleanArray","resultsArray","item","pair","key","time","undefined","words","2","EmbeddedReportTypeKey","3","PageMode_1","PersistedGridModelConfiguration","fromGridModel","gridModel","persisted","pageSize","gridColumns","sortEntries","sorting","filter","fieldName","nonPersistedFilterFields","angular","GridColumn","this","visible","alwaysVisible","fixedColumn","prototype","reverseVisibility","GridModel","loadEntitiesApi","entries","totalCount","totalCountRevised","requestsPageMode","PageMode","ENTRIES_AND_TOTAL_ESTIMATES","totalPageCount","currentPage","selectedPage","DEFAULT_PAGE_SIZE","isLoading","showSpinner","isTotalLoading","disablePagination","loadListeners","columnsListeners","pageSizeListeners","loadEntitiesFunction","setDefaultPageSize","setMaxPageSize","MAX_PAGE_SIZE","addSortEntry","sortEntry","addLoadingListener","listener","clearLoadListeners","splice","addColumnVisibilityListener","addPageSizeListener","loadPage","pageNumber","loadPageForFilter","loadWithDelay","timeoutUtils","uuid","_this","processWithDelay","loadCurrentPage","pageMode","startLoading","initialRequestsMode","then","result","Math","ceil","setDataFromServer","finally","latestRevisedTotalFilter","equals","calculateTotalPages","_i","_a","endLoading","loadRecordsCount","getPageSize","isNaN","recalculateVisibleColumnsCount","count","column","visibleColumnsCount","changeColumnVisibility","columnIndex","onColumnVisibilityChange","onChangePageSize","knownToUsTotalCount","totalPages","max","MAX_USER_PAGE_SIZE","./PageMode","4","HttpGridService","$http","apiUrl","params","enableCache","getItems","page","size","mode","addNoCache","get","data","sortBy","sortDir","cache","Date","getTime","grid","HttpGridHelper","createLoader","httpGridService","model","createLoaderWithCallback","callback","5","Notifier","success","getNotifierDisplayMethod","toastr","error","warning","errorWithRef","getHTMLNotifierDisplayMethod","toastrDisplayMethod","message","title","overrides","escapeHTML","commonError","response","status","responseData","msg","path","notifier","6","7","ReferencedObjectType","8","SortOrder","SortEntry","sortOrder","reverseOrder","ASC","DESC","asc","desc","9","MenuHelper_1","PageHeaderHelper_1","InfoRouter_1","UserService_1","AccessibilityController","$location","$anchorScroll","$window","infoRouter","userService","MenuHelper","setCurrentMenuItem","ACCESSIBILITY_LINK_KEY","PageHeader","set","header","update","getCurrentUserProfile","locale","scrollToCookieTables","hash","NAME","$inject","InfoRouter","UserService","../urls/InfoRouter","../users/UserService","../utils/MenuHelper","../utils/PageHeaderHelper","10","AIService_1","AIModule","service","AIService","./AIService","11","UrlService_1","url","generateSubtopics","courseId","subtopicsCount","topic","post","base","generateParagraph","generateSubparagraph","subtopic","generateQuote","generateQuestion","UrlService","../utils/UrlService","12","AppProperties_1","Event_1","VhsEmbeddedMaterialDirective_1","VhsEmbeddedBundleDirective_1","VhsSandboxDirective_1","VhsDownloadBundleDirective_1","RichTextEditorDirective_1","AuthModule_1","AuthService_1","LogOnController_1","AuthCoreModule_1","AuthManager_1","AuthRedirect_1","ComponentsModule_1","HttpModule_1","InfrastructureModule_1","Storage_1","MainModule_1","NewsModule_1","InfoModule_1","PersonalModule_1","StatisticsModule_1","MaterialsModule_1","ReferenceModule_1","SecurityModule_1","SettingsModule_1","UrlsModule_1","UrlServiceProvider_1","UsersModule_1","INotifier_1","BundlesModule_1","CoursesModule_1","FinancesModule_1","CommonModule_1","StorageModule_1","QuizzesModule_1","LogsModule_1","UtilsModule_1","MainRouter_1","NewsRouter_1","AuthRouter_1","ReferenceRouter_1","SystemSettingsRouter_1","CoursesRouter_1","StatisticsRouter_1","UsersRouter_1","MaterialsRouter_1","FinancesRouter_1","PersonalRouter_1","CommonRouter_1","QuizzesRouter_1","LogsRouter_1","HttpInterceptor_1","JobsModule_1","JobsRouter_1","CertificateTemplatesRouter_1","LearningPathsRouter_1","LearningPathsModule_1","AssessmentsModule_1","AssessmentsRouter_1","PoliciesModule_1","PoliciesRouter_1","NotificationTemplatesRouter_1","NotificationModule_1","BusinessUnitsModule_1","BusinessUnitsRouter_1","PaypalModule_1","PayPalRouter_1","CustomBrandingService_1","ImportExportModule_1","ImportRouter_1","ExportRouter_1","ExternalResourcesModule_1","ExternalResourcesRouter_1","AzureCognitiveServicesModule_1","VhsUserNoteDirective_1","HomeRouter_1","HomeModule_1","BrandingModule_1","AuthorizeNetModule_1","FreeEnrollmentModule_1","SlideTemplatesRouter_1","GamificationRouter_1","GamificationModule_1","AIModule_1","AzureWebchatBotframeworkModule_1","buildVersionNumber","moment","format","CommonModule","name","AuthModule","AuthCoreModule","UrlsModule","SecurityModule","InfrastructureModule","HttpModule","ComponentsModule","StatisticsModule","ReferenceModule","UsersModule","SettingsModule","LogsModule","JobsModule","MainModule","MaterialsModule","NewsModule","InfoModule","PersonalModule","BundlesModule","CoursesModule","LearningPathsModule","FinancesModule","StorageModule","QuizzesModule","UtilsModule","AssessmentsModule","PoliciesModule","BusinessUnitsModule","PayPalModule","NotificationModule","ImportExportModule","ExternalResourcesModule","AzureCognitiveServicesModule","AzureWebchatBotframeworkModule","HomeModule","BrandingModule","GamificationModule","AuthorizeNetModule","FreeEnrollmentModule","config","UrlServiceProvider","$routeProvider","$logProvider","$httpProvider","urlServiceProvider","debugEnabled","setServiceRoot","setBuildVersion","$get","when","CommonRouter","notFoundRoute","templateUrl","template","MainRouter","mainRoute","AuthRouter","logoutRoute","logonRoute","accessDeniedRoute","restorePasswordRoute","checkValidCodeRoute","createNewPasswordRoute","MaterialsRouter","indexRoute","indexPurchasedRoute","indexPurchasedOrderRoute","myDownloadsRoute","createRoute","playlistsRoute","playlistCreateRoute","playlistDetailsRoute","playlistEditRoute","materialRoute","updateRoute","relatedProductsUpdateRoute","permissionsUpdateRoute","StatisticsRouter","materialViewReportRoute","materialDownloadReportRoute","materialUploadReportRoute","powerBiReportRoute","PersonalRouter","certificatesRoute","creditsRoute","badgesRoute","purchasedOrdersRoute","subscriptionsRoute","newCommentsRoute","settingsRoute","supportRoute","calendarRoute","AssessmentsRouter","assessmentsRoute","assessmentDetailsRoute","FinancesRouter","productsCatalogRoute","productDetailsRoute","purchasedOrderRoute","nacePurchasedOrderRoute","purchasedProductRoute","orderProductsRoute","productEditRoute","referencedObjectProductEditRoute","productANetCommunicatorRoute","NewsRouter","newsSearchRoute","oneNewsCreateRoute","oneNewsRoute","oneNewsEditRoute","helpRoute","helpEditRoute","ExternalResourcesRouter","zoomRoute","aboutCompanyRoute","faqRoute","accessibilityRoute","ReferenceRouter","editRoute","UsersRouter","addRoute","currentProfileRoute","groupIndexRoute","groupAddRoute","groupEditRoute","groupManagePermissionsRoute","startTrialRoute","signUpRoute","mergeRoute","SystemSettingsRouter","commonSettingsRoute","storagePlacesIndexRoute","storagePlaceCreateRoute","storagePlaceEditRoute","systemSettingsRoute","systemBundleEditRoute","systemSettingsConfigurationRoute","systemSettingsBrandingRoute","systemSettingsMenuItemsVisibilityRoute","LogsRouter","systemLogsRoute","securityLogsRoute","GamificationRouter","badgeTemplatesRoute","badgeTemplateEditRoute","actionBadgesEditRoute","actionBadgesViewRoute","JobsRouter","jobsRoute","CoursesRouter","detailsRoute","reloadOnSearch","progressRoute","webinarRoute","iltRoute","discussionRoute","infoRoute","enrollmentDetailsRoute","enrollmentEditRoute","structureUpdateRoute","sectionUpdateRoute","bundleUpdateRoute","participationFormUpdateRoute","landingPageUpdateRoute","exportImportUpdateRoute","quizDetailsRoute","permissionsDelegationRoute","sectionDetailsRoute","surveyResultsRoute","flashcardResultsRoute","gamificationDetailRoute","LearningPathsRouter","participationFormFillRoute","QuizzesRouter","quizzesDetailsRoute","quizzesUpdateRoute","quizzesPassingRoute","quizzesIndexRoute","surveysDetailsRoute","surveysUpdateRoute","surveysPassingRoute","surveysIndexRoute","flashcardsDetailsRoute","flashcardsUpdateRoute","flashcardsPassingRoute","flashcardsIndexRoute","CertificateTemplatesRouter","PoliciesRouter","privacyPolicyRoute","cookiePolicyRoute","termsOfUseRoute","BusinessUnitsRouter","PayPalRouter","orderCancellationRoute","orderConfirmationRoute","NotificationTemplatesRouter","notificationTemplatesDetailRoute","notificationTemplatesEditRoute","ImportRouter","importRoute","ExportRouter","exportRoute","HomeRouter","homeCoursesRoute","homeLearningPathsRoute","homeMaterialsRoute","homeFlashcardsRoute","homeReportsRoute","administrationMenuRoute","administrationReportsRoute","authorMenuRoute","authorCoursesRoute","authorLearningPathsRoute","authorQuizzesRoute","authorSurveysRoute","authorFlashcardsRoute","authorMaterialsRoute","authorReportsRoute","participantsRoute","attendeeManagerCoursesRoute","attendeeManagerLearningPathsRoute","attendeeManagerReportsRoute","instructorCoursesRoute","instructorLearningPathsRoute","instructorReportsRoute","SlideTemplatesRouter","gameProgramsRoute","gameProgramEditRoute","gameProgramCreateRoute","otherwise","redirectTo","interceptors","HttpInterceptor","$provide","decorator","taRegisterTool","$rootScope","taOptions","taSelection","callExternalTaToolFunction","textAngular","deferred","event","restoreSelection","eventData","eventSourceButton","$","$element","callbackFunction","html","$editor","displayElements","text","trigger","wrapSelection","sel","range","window","getSelection","getRangeAt","rangeCount","deleteContents","el","document","createElement","innerHTML","node","lastNode","frag","createDocumentFragment","firstChild","appendChild","insertNode","cloneRange","setStartAfter","collapse","removeAllRanges","addRange","$broadcast","RichTextEditorController","TA_EMBEDDED_MATERIAL_BUTTON","commandKeyCode","iconclass","tooltiptext","action","Event","TA_SELECT_EMBEDDED_MATERIAL","TA_EMBEDDED_BUNDLE_BUTTON","TA_SELECT_EMBEDDED_BUNDLE","TA_SANDBOX_BUTTON","TA_SELECT_SANDBOX","TA_FULLSCREEN_BUTTON","TA_FULLSCREEN","TA_LOAD_FROM_TEMPLATE_BUTTON","TA_LOAD_FROM_TEMPLATE","TA_CONVERT_TO_NEW_TEMPLATE_BUTTON","TA_CONVERT_TO_NEW_TEMPLATE","TA_ADD_TIP_BUTTON","TA_ADD_TIP","TA_ADD_QUESTION_BUTTON","TA_ADD_QUESTION","TA_ADD_ASSESSMENT_BUTTON","TA_ADD_ASSESSMENT","TA_FONT_COLOR","display","fontColorModel","TA_BACKGROUND_FONT_COLOR","hex","me","rgb","backgroundColorModel","exec","parseInt","g","backgroundColorRGB","element","outerHTML","hasAttribute","getAttribute","setTimeout","TA_TOGGLE_BUTTON","TA_ADD_TOGGLE","TA_TOGGLE_CONTENT_BUTTON","TA_ADD_TOGGLE_CONTENT","TA_ADD_NOTE_FOR_PROGRESS_BUTTON","TA_ADD_NOTE_FOR_PROGRESS","TA_ADD_TABLE_BUTTON","TA_ADD_TABLE","onElementSelect","editorScope","finishEdit","updateTaBindtaTextElement","hidePopover","popover","css","container","popoverContainer","empty","tableEditGroup","addRowButton","on","preventDefault","colnums","find","children","allCols","x","newElem","parent","after","removeClass","off","addClass","addColButton","tbody","console","log","childNum","each","width","tableEditGroupRemoves","remRowButton","closest","remove","focus","activeElement","blur","remColButton","body","createTextRange","select","append","buttonGroup","fullButton","height","halfButton","quartButton","deleteGroup","childNodes","showPopover","TA_AI_CONTENT_GENERATION_BUTTON","TA_AI_CONTENT_GENERATION","keyMappings","testForKey","keyCode","ctrlKey","metaKey","shiftKey","altKey","which","toolbar","defaultTagAttributes","target","taCustomRenderers","$compile","$timeout","selector","VhsEmbeddedMaterialController","TA_ELEMENT_SELECTOR","customAttribute","renderLogic","TA_RENDER_FUNCTION","VhsEmbeddedBundleController","VhsSandboxController","VhsDownloadBundleController","VhsUserNoteDirectiveController","prop","match","run","AuthService","AuthManager","AuthRedirect","Storages","LOCAL_NAME","CustomBrandingService","$log","$q","$route","authApi","authManager","authRedirect","localStorage","authenticationPromise","original","reload","lastRoute","un","$on","apply","isInsideCoursePage","isHideMainBreadcrumbs","appVersionNumber","completeSsoIfNeeded","isAuthenticated","getToken","LogOnController","reloadApplicationForLocaleIfNeeded","restartAutoRefresh","restoreAvailable","restoreSessionOrClearToken","refreshToken","catch","isAutoSsoAvailable","startSsoExchange","redirectRequired","redirectToBUDomain","appIsInitialized","contains","put","onbeforeunload","returnValue","./INotifier","./ai/AIModule","./auth/AuthModule","./auth/AuthService","./auth/LogOnController","./authcore/AuthCoreModule","./authcore/AuthManager","./authcore/AuthRedirect","./branding/BrandingModule","./branding/CustomBrandingService","./bundles/BundlesModule","./businessUnits/BusinessUnitsModule","./common/CommonModule","./components/ComponentsModule","./components/VhsEmbeddedMaterialDirective","./components/models/Event","./components/richtext/RichTextEditorDirective","./components/richtext/VhsDownloadBundleDirective","./components/richtext/VhsEmbeddedBundleDirective","./components/richtext/VhsSandboxDirective","./components/richtext/VhsUserNoteDirective","./courses/CoursesModule","./external/ExternalResourcesModule","./finances/FinancesModule","./gamification/GamificationModule","./home/HomeModule","./http/HttpInterceptor","./http/HttpModule","./importExport/ImportExportModule","./info/InfoModule","./infrastructure/InfrastructureModule","./infrastructure/Storage","./integration/authorizenet/AuthorizeNetModule","./integration/azureCognitiveServices/AzureCognitiveServicesModule","./integration/azureWebchatBotframework/AzureWebchatBotframeworkModule","./integration/freeenrollment/FreeEnrollmentModule","./integration/paypal/PaypalModule","./jobs/JobsModule","./learningPaths/LearningPathsModule","./logs/LogsModule","./main/MainModule","./materials/MaterialsModule","./news/NewsModule","./notificationTemplates/NotificationModule","./personal/AssessmentsModule","./personal/PersonalModule","./policies/PoliciesModule","./quizzes/QuizzesModule","./reference/ReferenceModule","./security/SecurityModule","./settings/SettingsModule","./statistics/StatisticsModule","./storage/StorageModule","./urls/AssessmentsRouter","./urls/AuthRouter","./urls/BusinessUnitsRouter","./urls/CertificateTemplatesRouter","./urls/CommonRouter","./urls/CoursesRouter","./urls/ExportRouter","./urls/ExternalResourcesRouter","./urls/FinancesRouter","./urls/GamificationRouter","./urls/HomeRouter","./urls/ImportRouter","./urls/InfoRouter","./urls/JobsRouter","./urls/LearningPathsRouter","./urls/LogsRouter","./urls/MainRouter","./urls/MaterialsRouter","./urls/NewsRouter","./urls/NotificationTemplatesRouter","./urls/PayPalRouter","./urls/PersonalRouter","./urls/PoliciesRouter","./urls/QuizzesRouter","./urls/ReferenceRouter","./urls/SlideTemplatesRouter","./urls/StatisticsRouter","./urls/SystemSettingsRouter","./urls/UrlServiceProvider","./urls/UrlsModule","./urls/UsersRouter","./users/UsersModule","./utils/AppProperties","./utils/UtilsModule","13","IGridModel_1","AssessmentsService_1","SecurityService_1","IHttpGridService_1","AssessmentStatus_1","ResizeViewService_1","SortEntry_1","AssessmentsController","$scope","assessmentsService","assessmentsRouter","securityService","brandingService","rowShow","Map","disableRemoveButton","confirmationDialogText","AssessmentStatus","NEW","IN_SCORING","SCORED","demandAuthentication","demandSystemPermissions","systemPermissions","scoreAssessments","scoreAnyAssessments","ADMINISTRATION_MENU_KEY","assessmentsGridModel","viewType","resizeViewService","ResizeViewService","bind","setResizeViewType","unbind","getAssessmentDetailsUrl","id","assessmentDetailsUrl","search","openAssessment","assessment","selectedAssessment","redirectToAssessmentDetailUrl","isSorting","isSortingDesc","decodeAssessmentStatus","clearSearchForm","AssessmentsService","SecurityService","../IGridModel","../IHttpGridService","../SortEntry","../authcore/AuthManager","../branding/CustomBrandingService","../security/SecurityService","../urls/AssessmentsRouter","../utils/ResizeViewService","./AssessmentsService","./models/AssessmentStatus","14","BundleService_1","AssessmentsDetailsController","$routeParams","authService","coursesRouter","bundleService","isInitialized","questionScore","isQuestionScoreCalculated","disableLocationChange","redirected","assessmentId","confirmationDialogTextTemplate","assessmentScoringErrorDialogTextTemplate","correctShowAnswerMinimalScore","isEdit","ASSESSMENT_ID_PARAM","getQuizQuestionsPoints","totalPoints","getQuizQuestionResultCurrentPointsNumber","points","quizStartPoints","addParentLink","assessmentsUrl","assessmentResultsGridModel","initializePromise","all","getCurrentUser","loadAssessment","responses","currentUserId","startScoringAssessment","scorerId","showConfirmationDialog","forwardToAccessDenied","startAssessmentScoring","version","startedAssessment","redirectToBack","cancelChanges","oldStatus","oldScorerId","modal","scoreAssessment","updateQuizScores","scoreQuiz","showAssessmentScoringDialog","loadAudioResponseUrls","scorerName","backdrop","keyboard","show","assessmentScoringErrorDialogText","setScorer","showScoreToAllDialog","closePopup","elementId","setScoresToAllAnswers","comment","val","score","checkEmpty","controlElementId","removeAttr","loadBundle","bundleId","getBundle","bundle","assessmentsWithAudio","jsonData","JSON","parse","bundleFileKey","bundleFileUrl","filesMap","has","getUrlForAttachment","file","startEdit","Object","defineProperty","scoredPoints","getQuizQuestionPoints","questionId","assessments","enumerable","configurable","BundleService","../INotifier","../auth/AuthService","../authcore/AuthRedirect","../bundles/BundleService","../urls/CoursesRouter","15","$sce","assessmentVersion","param","getStatus","getScorerId","getScorerName","assessmentStatus","assessmentResults","ignore409","getNewAssementsForInstructor","getQuizQuestionsCount","16","17","LogOutController_1","RestorePasswordController_1","CreateNewPasswordController_1","CheckValidCodeController_1","controller","LogOutController","RestorePasswordController","CreateNewPasswordController","CheckValidCodeController","./../authcore/AuthCoreModule","./../infrastructure/InfrastructureModule","./../urls/UrlsModule","./AuthService","./CheckValidCodeController","./CreateNewPasswordController","./LogOnController","./LogOutController","./RestorePasswordController","18","authRouter","providers","restoreSessionPromisesMap","restoreSessionTimersMap","LOGGED_OFF","value","cancel","clear","getProviders","promise","defer","theResult","getProvidersByBU","businessUnitId","logOn","username","password","authenticate","grant_type","restoreSession","token","refresh_token","delete","method","headers","Content-Type","transformRequest","tokenResult","changeTokenInfo","savePrevToken","prevToken","getPrevToken","accessToken","logOff","saveToken","tokenType","expiresIn","issuedAt","receivedAt","utc","startAutoRefresh","disableAutoSso","fromDate","subtract","expirationDate","add","now","timeInterval","diff","createRestoreSessionTimer","restorePassword","logonName","createNewPassword","tryToAutoRefresh","MAX_RESTORE_ATTEMPTS","attemptNumber","TOKEN_REJECTED_RESPONSE","SESSION_RESTORE_FAILED","eraseRefreshToken","updateCurrentUser","user","updateCurrentUserFullName","fullName","checkValidCodeFromEmail","checkPassword","input","../authcore/Event","../urls/AuthRouter","./../authcore/AuthManager","./../utils/UrlService","19","disableButton","shortEmail","LOGON_PARAM_NAME","getShortEmail","logonUrl","shortingEmail","getUserEmailByLogonName","email","emailParts","charAt","codeValid","test","20","SettingsService_1","settingsService","minPasswordLength","confirmPassword","isCheckPassword","disableSaveButton","PASSWORD_TOKEN_PARAM_NAME","isCheck","isUnicodeValue","isRightPassword","showClosePassword","passwordElement","SettingsService","../settings/SettingsService","21","LogonProviderEnum_1","Moment_1","HomepageHelper_1","BusinessUnitsService_1","DialogService_1","SsoErrors_1","IGroup_1","usersRouter","businessUnitsService","dialogService","userApi","policiesRouter","LAST_USED_PROVIDER_STORAGE_KEY","LOCALE_CHANGED_BY_USER_STORAGE_KEY","noSso","autoSsoProviderAvailable","companyLink","isBuFreeAndFull","userLogon","providerKey","LogonProviderEnum","LOCAL","isActive","userInfo","firstName","lastName","newGroups","GroupEnum","REGISTERED_USERS","userLogons","isTermsOfUseAndPrivacyPolicyAccepted","isAllowSelfSignUp","inProgress","restore","errorLink","startForFreeLink","accessDenied","ACCESS_DENIED_PARAM_NAME","tokenExpired","TOKEN_EXPIRED_PARAM_NAME","logonRequired","LOGON_REQUIRED_PARAM_NAME","execDomain","RegExp","location","origin","domain","getBusinessUnitByDomain","loadProviders","freePlanChecker","BUSINESS_UNIT_ID_PARAM","autoSsoPromise","ssoDisabledInUrl","ssoDisabled","loadAvailableLocales","ssoErrorsInfo","getFailedSsoInfo","lastSsoFailedDate","Moment","isAfter","lastSsoDisabledDate","logonProviderKey","MERCADO_SSO","errorCode","SsoErrors","MERCADO_INVALID_TOKEN","confirm","hideCancelButton","MERCADO_COMPANY_NOT_FOUND","MERCADO_INVALID_TOKEN_SIGNATURE","BUSINESS_UNIT_REQUIRED","baseUrl_1","href","startTrialUrl","SELF_REGISTRATION_DISABLED","FULL_NAME_REQUIRED","EMAIL_REQUIRED","EMAIL_DUPLICATED","FREE_PLAN_IS_FULL","LOGON_NOT_ACTIVE","USER_NOT_ACTIVE","getInformationForCreateUser","newLocation","clearRedirection","isCustomDomainUrl","customDomain","updateProviders","initProviders","getCustomDomainFromUrl","internalProviders","externalProviders","localProviderAvailable","activeDirectoryLocalProviderAvailable","activeDirectorySsoProviderAvailable","provider","PERSONIFY_USERPASSWORD","LOCAL_OR_PERSONIFY","AD_LOCAL","AD_SSO","lastIndexOf","autoSsoProviders","autoSsoProvider","previousProvider","previousProviderExists","forwardToSso","forceNegotiation","enableAutoSso","forceSso","removeItem","businessUnits","getBUDomainName","domainAddress","checkExistenceOfDomainInAzure","getHomepage","homepage","returnAfterLogOn","HomepageHelper","getHomepageUrl","alert","showDynamicIpDialog","userLocale","changedByUser","setItem","changeApplicationLocaleInStorage","numeral","language","substr","logonWithLinkedinSso","LINKEDIN_SSO","logonWithMicrosoftSso","MICROSOFT_AD_SSO","logonWithFacebookSso","FACEBOOK_SSO","logonWithGoogleSso","GOOGLE_SSO","isLoginWithLinkedinAvailable","p","isLoginWithMicrosoftAvailable","isLoginWithFacebookAvailable","isLoginWithGoogleAvailable","getAvailableLocales","locales","localeChangedByUser","getItem","availableLocales","getCurrentStorageLocale","getBusinessUnitById","businessUnit","$event","createNewAccount","businessUnitIds","checkFreePlanOnBusinessUnit","isAvailableCreatingNewUserForFreePlan","evaluateSelfSignUp","selfSignup","substring","logonFound","j","demandNotAuthenticated","getBusinessUnitByIds","isAllow","buIdInvite","redirectToPrivacyPolicy","privacyPolicyUrl","open","redirectToTermsOfUse","termsOfUseUrl","buArray","Array","getBusinessUnitsWithFreePlan","addIpAddressRange","clearDynamicIpDialog","BusinessUnitsService","DialogService","../businessUnits/BusinessUnitsService","../components/dialog/DialogService","../infrastructure/Storage","../security/LogonProviderEnum","../security/SsoErrors","../urls/PoliciesRouter","../urls/UsersRouter","../users/models/IGroup","../utils/AppProperties","../utils/HomepageHelper","../utils/Moment","22","mainRouter","mainUrl","./../urls/MainRouter","23","checkValidCode","24","TokenStorage_1","TokenStorage","./AuthManager","./AuthRedirect","./TokenStorage","25","tokenStorage","ssoRedirectsInfo","autoSsoEnabled","hasToken","putPrevToken","checkPrevTokenExist","removePrevToken","eraseToken","GUEST_ID","LOGGED_ON","userId","findSsoProviders","ssoRedirectInfo","findSsoRedirectInfo","ssoFailed","saveSsoRedirectInfo","getUrlVars","completeSSOExchange","logonProvider","tokenInfo","hasErrorsForDisplay","clearTokenInfoFromUrl","forwardToLogOn","autoSsoMode","storeUrlBeforeAuthRedirect","isAutoSsoForProviderAvailable","automaticMode","targetProviderKey","lastAutoSsoDate","SSO_PROVIDERS_FOR_MANUAL_LOGON","SSO_RETRY_DELAY_SECONDS","lastSuccess","SSO_FAILED_RETRY_DELAY_SECONDS","vars","hashes","slice","info","userFullName","./Event","26","RedirectReason_1","sessionStorage","redirectToLogOn","reason","currentPath","currentUrl","KEY","native","RedirectReason","ACCESS_DENIED","TOKEN_EXPIRED","LOGON_REQUIRED","forwardToSpnego","accessDeniedUrl","homePageUrl","redirect","SESSION_NAME","./../infrastructure/Storage","./../urls/AuthRouter","./RedirectReason","27","28","29","storage","TOKEN_KEY","prevTokenInfo","PREV_TOKEN_KEY","30","BrandingEditMode","31","BrandingLogoType","32","BrandingService_1","BrandingThemesService_1","BrandingService","BrandingThemesService","../authcore/AuthCoreModule","../infrastructure/InfrastructureModule","../urls/UrlsModule","./BrandingService","./BrandingThemesService","./CustomBrandingService","33","$uploader","getSystemBrandingSettings","getCustomBrandingSettings","getSystemCustomCss","getCustomCss","getSystemBrandingLogos","type","getBrandingLogos","getSystemBrandingColors","getBrandingColors","updateSystemCustomCss","cssInput","updateCustomCss","updateSystemLogo","logoType","urlBuilder","upload","updateBusinessUnitLogo","saveSystemBrandingColors","mobileColor","barColor","mobileBarColor","saveBrandingColors","removeSystemSettingsBranding","removeBusinessUnitBranding","customBrandingId","deleteSystemCustomCss","deleteCustomCss","deleteSystemBrandingLogos","deleteBrandingLogos","removeSystemBrandingColors","brandingId","removeBrandingColors","updateSystemShareLogo","updateBusinessUnitShareLogo","getSystemShareLogo","getShareLogo","deleteSystemShareLogo","deleteShareLogo","34","getBrandingThemes","getSystemBrandingThemes","saveBrandingThemeAsCustom","customBrandingTheme","applyBrandingTheme","themeId","applySystemBrandingTheme","updateBusinessUnitBrandingTheme","updateSystemBrandingTheme","resetBrandingTheme","resetSystemBrandingTheme","35","changeCustomBranding","addEventListener","setHeaderColor","currentUser","setBrandingCss","setBrandingCustomCss","changeFavicon","innerWidth","customBranding","ieVersion","oldLink","querySelector","head","removeChild","ua","navigator","userAgent","rv","customFavicon","favicon","link","rel","getBarColor","brandingCssLink","newValue","clientBaseUrl","baseDomain","URL","hostname","getElementById","setAttribute","brandingCustomCssLink","36","loadSystemBundlePromise","loadFilesFilter","createFilesMap","getSystemBundle","systemBundle","updateBundleFromFiles","bundleInput","files","getUploadedFileToBundleByFileKey","fileKey","encodeURIComponent","removeAllBundleFiles","getImageFromUrl","imageUrl","responseType","37","SystemBunldeEditController_1","EditBundleDirective_1","SystemBundleEditController","directive","EditBundleDirectiveFactory","./BundleService","./SystemBunldeEditController","./components/EditBundleDirective","38","editReferenceData","ADMINISTRATION_SYSTEM_BUNDLE_MENU_KEY","39","UploadUtils_1","EditBundleController","uploadUtils","bundleFilesGridModel","addedFile","addedBundleFiles","removedBundleFiles","loadOnStartFileIdsChanged","vm","allowLoadAtStart","$watchCollection","bundleFile","elem","elementFromPoint","clientX","clientY","dropFromEditCourse","dropFromEditCourseNote","dataTransfer","dropEffect","$watch","oldValue","refreshBundleFiles","removeBundleFile","excludedBundleFileIds","getRemovedBundleFileIds","restoreBundleFile","cancelAddedBundleFile","cancelAllAddedBundleFiles","cancelAndRestoreAllBundleFiles","changeBundleFileLoadAtStartValue","loadAtStart","saveBundleFiles","createBundleFunction","removedBundleFileIds","relativePath","fileId","addedFiles","deletedFileIds","loadOnStartFilesChangedIds","fileUploadInfos","fileUploadInfo","uploadBundleByChunks","isHidedRemoveButton","removeBundleFiles","confirmButton","cancelButton","UploadUtils","restrict","attributes","transclude","scope","coursePermissions","../../IGridModel","../../IHttpGridService","../../INotifier","../../components/dialog/DialogService","../../utils/UploadUtils","../../utils/UrlService","../BundleService","40","BundleFileTypeEnum","BUNDLE_FILE_TYPE_ENUM_VALUES","JS","CSS","IMAGE","HTML","OTHER","41","PermissionsService_1","BusinessUnitsController","businessUnitRouter","permissionService","ADMINISTRATION_BUSINESS_UNITS_MENU_KEY","manageAnyBusinessUnit","configureBusinessUnitSettings","getSystemPermissions","preserveHeader","addActionLinkIf","getBUCreateUrl","buEntitiesGridModel","businessUnitSearchString","businessUnitSplitParam","getBUEditUrl","editUrl","activateEntityBU","entity","setActiveBusinessUnit","getIsActiveGridStyle","color","PermissionsService","../security/PermissionsService","../urls/BusinessUnitsRouter","./BusinessUnitsService","42","IReferenceEntitiesParams_1","ReferenceService_1","BrandingEditMode_1","NewsKey_1","BillingPlanService_1","CertificateService_1","NewsService_1","AuthorizeNetService_1","BusinessUnitsCreateEditController","authorizeNetService","referenceService","newsRouter","financesRouter","billingPlanService","certificateService","newsService","BU_GENERAL_DETAILS","BU_CUSTOM_BRANDING","BU_WEBINARS","BU_GOTOWEBINAR","BU_WEB_EX_INTEGRATION","BU_POWER_BI_INTEGRATION","BU_PAYMENT_METHODS","BU_PAY_PAL","BU_AUTHORIZE_NET","BU_CREDIT_TYPES","BU_SECURITY","BU_PARAMETERS","BU_ADOBE_API","BU_MENU_ITEMS","BU_ZOOM","BU_LRS","BU_SYSTEM_CONFIGURATION","BU_BILL_PLAN","BU_BILL_PLAN_NEWS_ID_PARAM","saveMap","isCreatePage","isDisableRemoveLink","isPreviewHidden","purchaseOrderContent","isPayPalConfigured","currentPaymentConfiguration","receiptTemplate","fileContentId","disabledSaveReceiptButton","isWebinarInstructorsShowed","isZoomInstructorsShowed","isTeamsInstructorsShowed","webinarInstructors","zoomInstructors","teamsInstructors","isAddRowVisible","showGoToWebinarSettings","showZoomSettings","showTeamsSettings","selectedOption","billPlans","aNetPostUrl","availableCreditTypes","businessUnitParameters","adobeCredentials","brandingMode","THEMES","news","isLoaded","ID_PARAM_NAME","businessUnitLevel","BU_LEVEL_PARAM_NAME","setTopMenuKey","getTemplateByLevel","getBusinessUnitSettings","domainName","getCompanyLink","linkForSelfRegistration","getLinkForSelfRegistration","getAdobeCredentials","adobeClientId","clientId","webinarInstructorsGridModel","zoomInstructorsGridModel","teamsInstructorsGridModel","setSaveFunctionsForBULevel","topMenuKey","getWebinarSettingByBusinessUnit","webinarSettings","getZoomSettings","zoomSettings","showEmbeddedZoom","getTeamsSettings","teamsSettings","getPayPalConfiguration","payPalConfiguration","linkForWebhook","getLinkForWebhook","getAuthorizeNetConfiguration","authorizeNetConfiguration","loginId","getReceiptTemplateByBUId","receiptFileTitle","fileTitle","getPowerBiConfiguration","powerBiConfiguration","getMenuItemsSettings","menuItemsSettings","showCatalog","showCourses","showMaterials","showQuizzes","showLearningPaths","showDiscussionBoard","showNews","homeLogoUrl","homeHelpUrl","homeAboutUsUrl","getSecurityConfiguration","securityConfiguration","getBillingPlans","isDefaultPlan","currentBillPlan","isCurrentPlan","planCode","aNetIframeCommunicator","getProductANetCommunicatorUrlByUrl","getAuthorizeNetEnvironmentType","envType","toUpperCase","bp","getFormToken","aNetToken","mainElement","currentCustomBillPlan","getNews","saveGeneralDetails","saveAccountGoToWebinar","saveZoomSettings","saveTeamsSettings","savePaymentConfiguration","savePowerBiConfiguration","saveMenuItemsSettings","updateBusinessUnitParameters","saveSecurityConfiguration","saveAdobeApiDetails","loadMenuItemsSettings","loadBusinessUnitParameters","isTopMenuActive","getChildReferenceUrl","childPages","getTemplateForInclude","templateLevel","indexUrl","save","saveFunc","create","deactivateEntity","getUrlByCompanyName","protocol","host","port","companyName","isShowDeactivateButton","predefined","isShowRemoveLinkButton","isDisableSaveButton","copyToClipboard","innerText","style","position","left","selected","execCommand","urlArrays","absUrl","showPurchaseOrderPreview","getPurchaseOrderPreview","parameters","downloadCertificate","hidePurchaseOrderPreview","saveWebinarSettingForBusinessUnit","clearPassword","getAvailableUsersUrl","getAvailableUsersUrlZoom","saveWebinarInstructorSettings","webinarInstructorSettingsSave","webinarAvailableUserId","webinarUsername","webinarPassword","clearInstructorSettingsForm","reloadWebinarInstructorsSelector","saveZoomInstructorSettings","zoomInstructorSettingsSave","zoomAvailableUserId","clearInstructorSettingsFormZoom","reloadZoomInstructorsSelector","saveTeamsInstructorSettings","teamsInstructorSettingsSave","teamsAvailableUserId","teamsUsername","teamsPassword","clearInstructorSettingsFormTeams","reloadTeamsInstructorsSelector","specialWebinarInstructor","specialZoomInstructor","specialTeamsInstructor","removeWebinarInstructorSettings","webinarInstructorSettingsId","removeInstructorSettings","removeZoomInstructorSettings","zoomInstructorSettingsId","removeTeamsInstructorSettings","teamsInstructorSettingsId","editWebinarInstructor","webinarInstructorSettings","userName","editZoomInstructor","zoomInstructorSettings","editTeamsInstructor","teamsInstructorSettings","cancelAddInstructor","cancelZoomAddInstructor","cancelTeamsAddInstructor","validateSaveForm","validateSaveFormZoom","validateSaveFormTeams","checkWebinarInstructorConnection","webinarInstructorId","checkWebinarConnection","isCheckPayPalDataButtonActive","updateMenuItemsSettings","savePayPalConfiguration","deleteAuthorizeNetConfiguration","newReceiptTemplateFile","saveReceiptTemplate","saveAuthorizeNetConfiguration","deletePayPalConfiguration","updatePayPalConfiguration","checkPayPalCorrectData","updateAuthorizeNetConfiguration","checkAuthorizeNetCorrectData","attachFile","$file","$error","updateReceiptTemplate","createReceiptTemplate","receiptTemplateId","uploadReceiptTemplate","getReceiptTemplate","deleteReceipt","deleteReceiptTemplate","cancelReceipt","updatePowerBiConfiguration","removeLink","regExp","copyCompanyLinkToClipboard","updateZoomSettings","checkZoomConnection","checkZoomInstructorConnection","zoomInstructorId","updateTeamsSettings","checkTeamsInstructorConnection","teamsInstructorId","updateSecurityConfiguration","setAdobeCredentials","onSelectorChange","setBrandingMode","getMenuItemsAvailabilitySettings","menuItemsAvailability","catalogGlobalVisibility","coursesGlobalVisibility","learningPathsGlobalVisibility","discussionBoardGlobalVisibility","materialsGlobalVisibility","quizzesGlobalVisibility","isAnyBUSettingEnabled","getBusinessUnitParameters","creditsList","creditTypes","loadCreditTypesAvailableForBusinessUnit","join","allowCreditsSelfReporting","getActiveReferenceEntitiesForSelector","ReferenceEntitiesParams","ssoAllowed","redirectToAuthorizeNetIntegrationHelp","helpUrl","NewsKey","HELP_AUTHORIZE_NET_PAYMENT_METHOD","redirectToPayPalIntegrationHelp","HELP_PAY_PAL_PAYMENT_METHOD","redirectToMSTeamsIntegrationHelp","HELP_MS_TEAMS_WEBINAR_TYPE","redirectToZoomIntegrationHelp","HELP_ZOOM","isMobileVersion","createBillingOrder","newPlan","selectedBillPlan","toString","checkNewPaymentId","transactionId","planId","createPaymentProfile","authorizeNetCallback","selectBillingPlan","cancelSubscription","updateSubscription","showFrequentlyAskedQuestions","hasClass","showUpdatePlanModal","planName","upgradeBillingPlan","price","cancellationBillingPlan","userRecords","AuthorizeNetService","ReferenceService","BillingPlanService","CertificateService","NewsService","../branding/BrandingEditMode","../certificates/CertificateService","../finances/BillingPlanService","../integration/authorizenet/AuthorizeNetService","../news/NewsService","../news/models/NewsKey","../reference/ReferenceService","../reference/models/IReferenceEntitiesParams","../urls/FinancesRouter","../urls/NewsRouter","../utils/UploadUtils","43","BusinessUnitsController_1","BusinessUnitsCreateEditController_1","../security/SecurityModule","./BusinessUnitsController","./BusinessUnitsCreateEditController","44","StringBuilder_1","getBusinessUnitsForSelector","getBusinessUnitsDeactivateForSelector","createBusinessUnitBundle","businessUnitVersion","createEditCustomBrandingSettings","createEditSystemBrandingSettings","visibilitySettings","updateSystemMenuItemsVisibilitySettings","getPayPalClientId","webinarSetting","webinarInstructorSettingId","getSystemMenuItemsSettings","zoomInstructorSettingId","getBusinessUnitTags","configuration","teamsInstructorSettingId","query","StringBuilder","interpolate","bu","build","getAdobeClientIdByDomain","isFreeBusinessUnitsFull","getAvailablePlaceForFreeBu","getAllBuDomains","../utils/StringBuilder","45","setActiveEntity","getCertificateTemplate","updateCertificateTemplate","certificateTemplate","createCertificateTemplate","uploadCertificateTemplate","certificateTemplateId","setActiveCertificateTemplate","reportType","stringify","addCertificateTemplateToCourse","courseCertificateTemplate","deleteCertificateTemplateFromCourse","getCertificateTemplatesForCourse","getCourseCertificateTemplates","updateCertificateTemplatesForCourse","certificateTemplates","getAvailableCertificateTemplatesForCourse","getAvailableCertificateTemplatesForBusinessUnit","getCoursesForCertificateTemplate","certificateId","getLearningPathCertificateTemplates","learningPathId","getAvailableCertificateTemplatesForLearningPath","updateCertificateTemplatesForLearningPath","sendEmailWithCertificate","rewardUuid","subject","46","CheckBusinessUnitId_1","ReferenceUtils_1","CommonFilterService_1","CertificatesController","certificateTemplatesRouter","permissionsApi","certificateApi","referenceUtils","commonFilterService","viewAnyLearningObject","viewCertificateTemplates","getPageHeaderName","certificatesGridModel","searchString","splitParam","manageAnyLearningObject","manageCertificateTemplates","getCertificateEditUrl","isEditAllowed","getEntityIsActiveProperty","BUSINESS_UNIT_ID_PROPERTY","allBusinessUnits","activateEntity","certificate","getActiveLinkState","hasUserSameBusinessUnits","CheckBusinessUnitId","searchKeyPress","saveSearchInput","searchInput","closeSearchInput","entityIdProperty","entityNameProperty","entityVersionProperty","entityIsActiveProperty","ReferenceUtils","CommonFilterService","../common/CommonFilterService","../reference/ReferenceUtils","../urls/CertificateTemplatesRouter","../utils/CheckBusinessUnitId","./CertificateService","47","CertificatesCreateEditController","MAX_CERTIFICATE_VALIDITY_PERIOD","errorsMap","certificateContent","certificateCourses","businessUnitSelected","hasAllBusinessUnits","dragoverEventHandler","dropCertificate","dropCertificateNote","CERTIFICATE_ID_PARAM","hasCertificateId","certificateFileTitle","getCertificateCourses","removeEventListener","saveCertificateTemplate","newCertificateTemplateFile","entityValid","hasFile","hasName","onBusinessUnitChange","buildErrorMessage","removeCertificate","getParameters","courseTitle","showCertificatePreview","getCertificatePreview","hideCertificatePreview","courses","course","checkNameFieldLength","48","CertificateTemplateType","49","MaterialType_1","SectionProgressStatus_1","SectionPassingType_1","QuizType_1","pageName","inputValue","pageStorage","getSearchInput","clearSearchInput","saveFilterValue","clearFilterValues","getFilterValues","saveTopStatus","topStatus","getTopStatus","openSearchInput","animate","opacity","padding","border","marginLeft","paddingLeft","paddingRight","visibility","showFilterDialog","showNotificationsDialog","applyGeneralFilter","subjectElements","toArray","subjectIds","subjectId","languageElements","languageIds","languageId","typeElements","typeIds","typeId","showExpiredElements","showExpired","checked","clearFilter","QuizType","QUIZ","SURVEY","FLASHCARD","updateGeneralFilter","referenceObject","isActiveFilter","applyStorageFilter","storageFilterValues","countActiveFilter","filterId","applyMaterialTopType","fileType","MaterialType","AUDIO","VIDEO","PHOTO","LINK","DOCUMENTS","calculateCourseProgress","courseSectionProgress","sectionProgressBySectionId","individualSectionProgress","sectionProgress","sectionId","_b","_c","sectionInHierarchyExtended","shownStatuses","SectionProgressStatus","COMPLETED","OPENED","courseSectionsWithProgress","countOfMandatoryCompleted","countOfMandatory","countOfElectiveCompleted","countOfOptional","countOfOptionalCompleted","_d","parentId","sectionPassingType","SectionPassingType","MANDATORY","ELECTIVE","OPTIONAL","../courses/models/SectionPassingType","../courses/models/SectionProgressStatus","../materials/models/MaterialType","../quizzes/models/QuizType","50","CourseProgressStatus_1","CommonHomeService","slidingStarted","slickParameters","autoplay","infinite","dots","variableWidth","slidesToShow","slidesToScroll","arrows","swipe","responsive","breakpoint","settings","swipeToSlide","getCourseStatus","courseProgressStatus","CourseProgressStatus","RESET","EXPIRED","FAILED","STARTED","NOT_STARTED","decodeCourseProgressStatus","isLearner","initializeHelperMethodsForSlick","learningPathEntries","openInProgressCard","click","currentCardNumber","slick","initSlick","initSlickWithFirstSlide","startCourse","lp","dependCourses","initializeSlick","learningPathsGridModel","lpItemsElement","not","openCard","updateTabindex","showAllLP","lpBlockElement","toggleBtnActiveClass","hideAllLP","lpPlans","toggleClass","indexPlanLp","isShowAllCards","learningPathElement","cardElement","getCourseDatesString","courseDates","endDate","toLocaleDateString","startDate","setPopupClasses","cards","getElementsByClassName","card","rec","getBoundingClientRect","popup","parentElement","right","clientWidth","getElementsByTagName","../courses/models/CourseProgressStatus","51","CommonNavigation_1","CommonService_1","CommonHomeService_1","CommonService","CommonNavigation","../common/CommonNavigation","./CommonFilterService","./CommonHomeService","./CommonService","52","commonRouter","fullScreenRegExp","newUrl","oldUrl","defaultPrevented","preventNavigationFromUrl","equalsIgnoreFullScreen","allowNavigation","BEFORE_NAVIGATION_UNLOAD","preventNavigation","_url","redirectToNotFound","notFoundUrl","firstUrl","secondUrl","./../INotifier","./../urls/CommonRouter","53","saveParticipationForm","objectId","objectType","participationForm","getParticipationForm","getLearningPathParticipationForms","getParticipationFormSpecified","updateURLParameter","paramVal","newAdditionalURL","tempArray","baseURL","additionalURL","temp","checkVersionUpdateIsRequired","getVersion","getClientRoot","Cache-Control","If-Modified-Since","withoutAuthorization","lastSlashIndex","54","55","ExpirationCache","timeout","store","removeURLParameter","removeAll","removeAllByKey","keys","keyStore","parameter","urlparts","prefix","pars","56","AcceptCookiesController","acceptCookiesExists","ACCEPT_COOKIES","redirectToCookiePolicy","cookiePolicyUrl","accept","acceptCookies","createdAt","AcceptCookiesDirectiveFactory","57","AutoFocusDirectiveFactory","58","AvatarController","hasPreviewUrlCanceled","defaultLogo","avatarVm","loadUser","listenerAvatarImage","preview","croppedImage","previewUrl","userProfile","avatarErrors","resetPreview","restorePreviewUrl","uploadFile","showCropperModal","showCropperModalAfterLoad","AvatarDirectiveFactory","59","BusinessUnitSelectorController","selectorVisible","modelProperty","referenceEntities","onSelectorVisible","BusinessUnitSelectorDirectiveFactory","disabled","required","elementName","nullable","fromDropdown","./../auth/AuthService","60","CertificateTemplateType_1","CertificatesEditableSelectorController","learningPath","currentUserBusinessUnits","errorWindow","editingCertificate","availableCertificateTemplates","setBusinessUnit","filterEducationItemCertificatesByBusinessUnit","educationItemId","loadAvailableCertificateTemplatesForEducationItem","educationItemCertificates","loadAvailableCertificateTemplates","removeEducationItemCertsFromAvailableCerts","editWindow","educationItemBusinessUnitId","c","containAutoCertificate","certificates","containsAuto","isAuto","MANUAL","AUTO","setAuto","setManual","changeType","sortByName","sort","addCertificateToEducationItemCertificatesFromAvailableCertificates","chosenCertificateId","chosenCertificateTemplate","newCertificate","removeCertFromAvailableCerts","addNewCertificateToEducationItemCertificates","ac","loadCertificates","clearForm","educationItemType","itemCertificate","certificateTemplateType","certificateTemplateName","isCertificateAddedToTheEducationItem","educationItemCertificate","removeCertificateFromEducationItem","certificateValidityPeriod","showCreateEditWindow","certificateBUId","chosenCertificateBUId","editCertificate","hideSaveEdit","some","CertificatesEditableSelectorDirectiveFactory","editable","../certificates/models/CertificateTemplateType","./../security/PermissionsService","61","AutofocusDirective_1","DateTimePickerDirective_1","GridConfigurationDirective_1","GridDirective_1","GridEmptyDirective_1","GridExternalConfiguration_1","GridPaginationDirective_1","LoginDirective_1","MultipleCheckboxSelectorDirective_1","PageHeaderDirective_1","VhsSelectAllDirective_1","ReferenceCheckboxSelectorDirective_1","ReferenceDropdownSelectorDirective_1","ReferenceDropdownEditableSelectorDirective_1","ReferenceMultipleSelectorDirective_1","TooltipDirective_1","VhsSearchDirective_1","PersonalMenuDirective_1","AvatarDirective_1","VhsVideoAudioDirective_1","VhsMaterialDirective_1","UsersAndGroupsSelectorDirective_1","SelectOptionsDisabledDirective_1","SelectPlaceholderDirective_1","UploadsStatusDirective_1","VhsThumbnailDirective_1","VhsMaterialEditingDirective_1","VhsCalendarFilterDirective_1","VhsSelectMaterialDirective_1","VhsSelectEmbeddedBundleDirective_1","VhsSelectSandboxDirective_1","RichTextBindDirective_1","LoadBundleFileDirective_1","FullScreenDirective_1","PageTitleDirective_1","EntitiesSelect2SelectorDirective_1","BusinessUnitSelectorDirective_1","CertificatesEditableSelectorDirective_1","VhsQuizImportExportDirective_1","UploadArchiveInCourseEditDirective_1","RichTextContentLoadingSynchronizer_1","MaxLengthFilter_1","ExplanationsDirective_1","DiscussionsDirective_1","SessionRestoreDirective_1","VhsParticipationFormEditingDirective_1","VhsParticipationFormFillingDirective_1","VhsLearningPathTopTabsDirective_1","VhsLearningPathCoursesList_1","VhsSelectLearningPathCoursesDirective_1","VhsQuizSurveyAnsweringDirective_1","ConfirmationDialogDirective_1","InputConfirmationDialogDirective_1","NotificationConfirmationDialogDirective_1","VhsQuizDetailsDirective_1","VhsCourseViewTopTabs_1","VhsCourseEditTopTabs_1","VhsVILTDirective_1","VhsImageCropperDirective_1","VhsIndividualCourseProgressDirective_1","VhsIndividualCourseProgressCertificatesDirective_1","VhsIndividualCourseProgressDetailsDirective_1","VhsIndividualParticipationInfoDirective_1","VhsOverallProgressDirective_1","VhsLearningPathOverallProgressDirective_1","VhsIndividualLearningPathProgressDirective_1","VhsIndividualLearningPathProgressCertificatesDirective_1","VhsIndividualLearningPathProgressDetailsDirective_1","VhsIndividualLearningPathParticipationInfoDirective_1","VhsAudioResponderDirective_1","VhsRecordRtcDirective_1","SecondsToTimeFilter_1","SkipToContentDirective_1","VhsEditableTemplateDirective_1","VhsLoadFromTemplateDirective_1","VhsConvertTemplateDirective_1","VhsAddBlockDirective_1","VhsTemplateService_1","VhsTemplateMenuDirective_1","VhsStickyDirective_1","AcceptCookiesDirective_1","VhsProductsListEditingDirective_1","VhsLearningPathEditTopTabs_1","VhsScaledAnswerQuestionDirective_1","VhsCoursePublishDirective_1","VhsMaterialEditTopTabsDirective_1","VhsCreditAssignmentDirective_1","VhsEditableUserCreditsDirective_1","VhsVersionChecker_1","VhsLearningSessionsTopTabs_1","VhsILTDirective_1","VhsMeetingCreateEditDirective_1","VhsWebinarCreateEditDirective_1","QuizViewTopTabs_1","VhsPurchaseDirective_1","VhsProductViewTopTabs_1","VhsProductItemDetails_1","VhsNotificationTemplateDirective_1","VhsNotificationTemplateEditDirective_1","VhsFillableFormDirective_1","VhsSystemSettingsTopTabs_1","VhsGroupEditTopTabs_1","VhsLearningPathControlsDirective_1","VhsHomeMenuDirective_1","UserAvatarDirective_1","VhsBrandingLogosEditing_1","VhsBrandingColorsEditing_1","VhsBrandingThemesEditing_1","VhsBrandingCssEditing_1","FillableFormDialogDirective_1","VhsSystemSettingsMenuItemsVisibilityDirective_1","VhsParticipantsDirective_1","VhsTeamsCreateEditDirective_1","VhsBrandingShareEditing_1","VhsBadgeTemplateDirective_1","VhsBadgeTemplateEdit_1","VhsMaterialCheckpointsDirective_1","VhsAddTableDirective_1","AIContentGenerationDirective_1","VhsReturnToOwnAccountDirective_1","VhsHotspotQuestionEditDirective_1","VhsHotspotQuestionAnsweringDirective_1","VhsHotspotQuestionExplanationDirective_1","VhsHelpBotDirective_1","RichTextContentLoadingSynchronizer","VhsTemplateService","StickyDirectiveFactory","DateTimePickerDirectiveFactory","TimePickerDirectiveFactory","GridConfigurationDirectiveFactory","GridDirectiveFactory","GridEmptyDirectiveFactory","GridExternalConfigurationFactory","GridPaginationDirectiveFactory","LoginDirectiveFactory","SessionRestoreDirectiveFactory","MultipleCheckboxSelectorDirectiveFactory","PageHeaderDirectiveFactory","LeftMainMenuDirectiveFactory","VhsSelectAllDirectiveFactory","ReferenceCheckboxSelectorDirectiveFactory","ReferenceDropdownSelectorDirectiveFactory","ReferenceDropdownEditableSelectorDirectiveFactory","ReferenceMultipleSelectorDirectiveFactory","TooltipDirectiveFactory","VhsSearchDirectiveFactory","PersonalMenuDirectiveFactory","NavigationPersonalMenuDirectiveFactory","LeftPersonalMenuDirectiveFactory","VhsBreadcrumbsDirectiveFactory","VhsVideoDirectiveFactory","VhsYoutubeVideoDirectiveFactory","VhsAudioDirectiveFactory","VhsMaterialDirectiveFactory","UsersAndGroupsSelectorDirectiveFactory","SelectOptionsDisabledDirectiveFactory","SelectPlaceholderDirectiveFactory","UploadsStatusDirectiveFactory","VhsThumbnailDirectiveFactory","VhsMaterialEditingDirectiveFactory","VhsParticipationFormEditingDirectiveFactory","VhsParticipationFormFillingDirectiveFactory","VhsEmbeddedMaterialDirectiveFactory","VhsCalendarFilterDirectiveFactory","VhsSelectMaterialDirectiveFactory","RichTextEditorDirectiveFactory","RichTextBindDirectiveFactory","VhsUserNoteDirectiveFactory","VhsEmbeddedBundleDirectiveFactory","VhsSelectEmbeddedBundleDirectiveFactory","VhsSelectSandboxDirectiveFactory","VhsLoadFromTemplateDirectiveFactory","VhsConvertTemplateDirectiveFactory","VhsSandboxDirectiveFactory","VhsDownloadBundleDirectiveFactory","LoadBundleFileDirectiveFactory","FullScreenDirectiveFactory","PageTitleDirectiveFactory","EntitiesSelect2SelectorDirectiveFactory","ExplanationsDirectiveFactory","DiscussionsDirectiveFactory","VhsLearningPathTopTabsDirectiveFactory","VhsLearningPathControlsDirectiveFactory","VhsLearningPathEditTopTabsDirectiveFactory","VhsLearningPathCoursesListDirectiveFactory","VhsSelectLearningPathCoursesDirectiveFactory","VhsQuizSurveyAnsweringDirectiveFactory","VhsQuizDetailsDirectiveFactory","VhsCourseViewTopTabsDirectiveFactory","VhsCourseEditTopTabsDirectiveFactory","VhsVILTDirectiveFactory","VhsImageCropperDirectiveFactory","ConfirmationDialogFactory","FillableFormDialogFactory","InputConfirmationDialogFactory","NotificationConfirmationDialogFactory","VhsIndividualCourseProgressDirectiveFactory","VhsIndividualParticipationInfoDirectiveFactory","VhsIndividualCourseProgressDetailsDirectiveFactory","VhsIndividualCourseProgressCertificatesDirectiveFactory","VhsOverallProgressDirectiveFactory","VhsIndividualLearningPathProgressDirectiveFactory","VhsIndividualLearningPathProgressDetailsDirectiveFactory","VhsIndividualLearningPathProgressCertificatesDirectiveFactory","VhsLearningPathOverallProgressDirectiveFactory","VhsIndividualLearningPathParticipationInfoDirectiveFactory","VhsRecordRtcDirectiveFactory","AudioResponderDirectiveFactory","SkipToContentDirectiveFactory","VhsEditableTemplateDirectiveFactory","VhsAddBlockDirectiveFactory","VhsTemplateMenuDirectiveFactory","VhsReturnToOwnAccountDirectiveFactory","VhsProductsListEditingDirectiveFactory","VhsScaledAnswerQuestionDirectiveFactory","VhsCoursePublishDirectiveFactory","VhsMaterialEditTopTabsDirectiveFactory","VhsCreditAssignmentDirectiveFactory","VhsEditableUserDirectiveFactory","VhsVersionCheckerFactory","VhsLearningSessionsTopTabsDirectiveFactory","VhsILTDirectiveFactory","VhsMeetingCreateEditDirectiveFactory","VhsWebinarCreateEditDirectiveFactory","VhsTeamsCreateEditDirectiveFactory","QuizViewTopTabsDirectiveFactory","VhsPurchaseDirectiveFactory","VhsProductViewTopTabsDirectiveFactory","VhsProductItemDetailsDirectiveFactory","VhsNotificationTemplateDirectiveFactory","VhsNotificationTemplateEditDirectiveFactory","VhsSystemSettingsTopTabsDirectiveFactory","VhsSystemSettingsMenuItemsVisibilityDirectiveFactory","VhsQuizImportExportDirectiveFactory","VhsFillableFormDirectiveFactory","UploadArchiveInCourseEditDirectiveFactory","VhsGroupEditTopTabsDirectiveFactory","VhsHomeMenuDirectiveFactory","VhsUserAvatarDirectiveFactory","VhsBrandingLogosEditingDirectiveFactory","VhsBrandingColorsEditingDirectiveFactory","VhsBrandingThemesEditingDirectiveFactory","VhsBrandingCssEditingDirectiveFactory","VhsBrandingShareEditingDirectiveFactory","VhsParticipantsDirectiveFactory","VhsBadgeTemplateDirectiveFactory","VhsBadgeTemplateEditDirectiveFactory","VhsMaterialCheckpointsDirectiveFactory","VhsAddTableDirectiveFactory","VhsHotspotQuestionEditDirectiveFactory","VhsHotspotQuestionAnsweringDirectiveFactory","VhsHotspotQuestionExplanationDirectiveFactory","VhsAIContentGenerationDirectiveFactory","VhsHelpBotDirectiveFactory","MaxLengthFilterFactory","SecondsToTimeFilterFactory","../policies/PoliciesModule","./../auth/AuthModule","./../components/dialog/ConfirmationDialogDirective","./../components/dialog/InputConfirmationDialogDirective","./../components/dialog/NotificationConfirmationDialogDirective","./../info/InfoModule","./../logs/LogsModule","./../main/MainModule","./../materials/MaterialsModule","./../news/NewsModule","./../reference/ReferenceModule","./../security/SecurityModule","./../storage/StorageModule","./AcceptCookiesDirective","./AutofocusDirective","./AvatarDirective","./BusinessUnitSelectorDirective","./CertificatesEditableSelectorDirective","./DateTimePickerDirective","./DiscussionsDirective","./EntitiesSelect2SelectorDirective","./ExplanationsDirective","./FullScreenDirective","./GridConfigurationDirective","./GridDirective","./GridEmptyDirective","./GridExternalConfiguration","./GridPaginationDirective","./LoadBundleFileDirective","./LoginDirective","./MaxLengthFilter","./MultipleCheckboxSelectorDirective","./PageHeaderDirective","./PageTitleDirective","./PersonalMenuDirective","./QuizViewTopTabs","./ReferenceCheckboxSelectorDirective","./ReferenceDropdownEditableSelectorDirective","./ReferenceDropdownSelectorDirective","./ReferenceMultipleSelectorDirective","./SecondsToTimeFilter","./SelectOptionsDisabledDirective","./SelectPlaceholderDirective","./SessionRestoreDirective","./SkipToContentDirective","./TooltipDirective","./UploadArchiveInCourseEditDirective","./UploadsStatusDirective","./UserAvatarDirective","./UsersAndGroupsSelectorDirective","./VhsAudioResponderDirective","./VhsBadgeTemplateDirective","./VhsBadgeTemplateEdit","./VhsCalendarFilterDirective","./VhsCourseEditTopTabs","./VhsCoursePublishDirective","./VhsCourseViewTopTabs","./VhsCreditAssignmentDirective","./VhsEditableTemplateDirective","./VhsEditableUserCreditsDirective","./VhsEmbeddedMaterialDirective","./VhsFillableFormDirective","./VhsGroupEditTopTabs","./VhsHelpBotDirective","./VhsHomeMenuDirective","./VhsILTDirective","./VhsImageCropperDirective","./VhsIndividualCourseProgressCertificatesDirective","./VhsIndividualCourseProgressDetailsDirective","./VhsIndividualCourseProgressDirective","./VhsIndividualLearningPathParticipationInfoDirective","./VhsIndividualLearningPathProgressCertificatesDirective","./VhsIndividualLearningPathProgressDetailsDirective","./VhsIndividualLearningPathProgressDirective","./VhsIndividualParticipationInfoDirective","./VhsLearningPathControlsDirective","./VhsLearningPathCoursesList","./VhsLearningPathEditTopTabs","./VhsLearningPathOverallProgressDirective","./VhsLearningPathTopTabsDirective","./VhsLearningSessionsTopTabs","./VhsMaterialCheckpointsDirective","./VhsMaterialDirective","./VhsMaterialEditTopTabsDirective","./VhsMaterialEditingDirective","./VhsMeetingCreateEditDirective","./VhsNotificationTemplateDirective","./VhsNotificationTemplateEditDirective","./VhsOverallProgressDirective","./VhsParticipantsDirective","./VhsParticipationFormEditingDirective","./VhsParticipationFormFillingDirective","./VhsProductItemDetails","./VhsProductViewTopTabs","./VhsProductsListEditingDirective","./VhsPurchaseDirective","./VhsQuizDetailsDirective","./VhsQuizImportExportDirective","./VhsQuizSurveyAnsweringDirective","./VhsRecordRtcDirective","./VhsReturnToOwnAccountDirective","./VhsScaledAnswerQuestionDirective","./VhsSearchDirective","./VhsSelectAllDirective","./VhsSelectLearningPathCoursesDirective","./VhsStickyDirective","./VhsSystemSettingsMenuItemsVisibilityDirective","./VhsSystemSettingsTopTabs","./VhsTeamsCreateEditDirective","./VhsTemplateMenuDirective","./VhsThumbnailDirective","./VhsVILTDirective","./VhsVersionChecker","./VhsVideoAudioDirective","./VhsWebinarCreateEditDirective","./branding/VhsBrandingColorsEditing","./branding/VhsBrandingCssEditing","./branding/VhsBrandingLogosEditing","./branding/VhsBrandingShareEditing","./branding/VhsBrandingThemesEditing","./dialog/DialogService","./dialog/FillableFormDialogDirective","./quizzes/VhsHotspotQuestionAnsweringDirective","./quizzes/VhsHotspotQuestionEditDirective","./quizzes/VhsHotspotQuestionExplanationDirective","./richtext/AIContentGenerationDirective","./richtext/RichTextBindDirective","./richtext/RichTextContentLoadingSynchronizer","./richtext/RichTextEditorDirective","./richtext/VhsAddBlockDirective","./richtext/VhsAddTableDirective","./richtext/VhsConvertTemplateDirective","./richtext/VhsDownloadBundleDirective","./richtext/VhsEmbeddedBundleDirective","./richtext/VhsLoadFromTemplateDirective","./richtext/VhsSandboxDirective","./richtext/VhsSelectEmbeddedBundleDirective","./richtext/VhsSelectMaterialDirective","./richtext/VhsSelectSandboxDirective","./richtext/VhsTemplateService","./richtext/VhsUserNoteDirective","62","minDate","maxDate","minDateValidation","maxDateValidation","ngModel","datetimepicker","pickTime","keyboardNavigation","navigation","toDate","destroy","$validators","modelValue","viewValue","isValid","$validate","min","isBefore","pickDate","63","ProgressService_1","CourseService_1","CourseDiscussionController_1","BadgesService_1","DiscussionsController","permissionsService","progressService","courseService","sessionStorageWrapper","badgesService","personalRouter","courseModules","disableActionButtons","rewards","threadId","demandCoursePermissions","view","loadCourseModules","loadUserProfile","threadsGridModel","setDefaultThreadsGridFilters","commentsGridModel","newComment","newReplyComment","editing","onThreadChange","thread","moduleId","onlyCommonThreads","clearFilters","reloadGridModels","currentThread","getThreadCreator","onThreadButtonPress","showCreateNewThreadDialog","showThreadRemovalDialog","removeThread","addThread","addCourseThread","newThread","notifyUserAfterReward","cancelAddThread","removeCourseThread","startThreadInlineEdit","editingThread","updateEditedThread","updateCourseThread","createNewReplyComment","reply","cancelNewReplyComment","cleanComment","addComment","addThreadComment","removeComment","removeThreadComment","getModules","getEntitiesUrl","CourseDiscussionController","MODULES_FILTER_URL","with","COURSE_ID_PARAM","currentUserProfile","getCourseThreadCreator","res","authorName","getImageForActivityBadge","badge","badgeKey","submitReward","rewardId","rewardToShow","ProgressService","CourseService","BadgesService","../courses/CourseDiscussionController","../courses/CourseService","../courses/ProgressService","../gamification/BadgesService","../urls/PersonalRouter","64","EntitiesSelect2SelectorController","referenceApi","modelId","selectedItems","infiniteScroll","numToAdd","currentItems","placeholder","DEFAULT_PLACEHOLDER","multiple","modelIds","forceLoadingFromServer","searchStringFilter","includedIds","loadEntitiesForSelector","setValues","referenceKey","nullableBusinessUnit","items","urlString","usersAndGroupsSelector","users","groups","isUser","onSelectCallback","ownerIds","onRemoveCallback","refreshItems","resetInfScroll","addMoreItems","activeEntities","./../reference/ReferenceService","./../reference/models/IReferenceEntitiesParams","65","ExplanationsController","questions","66","checkFullScreenFunction","$locationEvent","67","setIsConfigurable","68","TimeoutUtils_1","ObjectFieldResolver_1","ElementSortingInfo","order","mandatory","fromString","str","strParts","sortPath","GridController","gridUuid","hasConfiguration","hasChangesForTemplateReload","SORTABLE_HEADERS_CLASSES","SEARCH_ELEMENTS_SELECTOR","MAX_SORT_INDEX","MAX_SHOWN_PAGES","gridVm","parentScope","$parent","directiveScope","TimeoutUtils","init","modelPathInController","tableTemplate","gridContainer","tableContainer","TABLE_SELECTOR","ObjectFieldResolver","findForPath","collectGridColumns","loadColumnsConfigurationFromStorage","loadFilterFromStorage","addPredefinedSorting","addAutoSearchListeners","initDomElementsHandlers","processTemplate","addHeadersSortingHandlers","updateHeaderClasses","applyFilter","addSorting","findSortEntryInfo","resetSorting","foundIndex","goToPage","getPagesForPagination","pages","reverse","upColumnPosition","doUpdateColumnPosition","downColumnPosition","newPosition","currentColumnInPosition","findColumnByPosition","targetPosition","findColumnByIndex","fixColumnPositions","orderedColumns","o1","o2","round","persistedModel","persistedColumn","saveGridConfiguration","setHeaderClass","targetClasses","elClass","self","SORTABLE_HEADERS_SELECTOR","jQueryElement","sortString","TABLE_HEADERS_SELECTOR","th","columnExcluded","columnName","sortingInfo","resetSortingWithoutLoadCurrentPage","sortIndex","dblclick","predefinedSorting","sortFields","persistedSorting","predefinedSortingInfo","persistedIndex","addPredefinedSortingToModel","inputElement","func","keyup","change","cellsPositionsMap","processTableCellsInTemplate","TABLE_CELLS_IN_TEMPLATE_SELECTOR","TABLE_CELLS_IN_TEMPLATE_SELECTOR_FOR_REPEAT_START","TABLE_CELLS_IN_TEMPLATE_SELECTOR_FOR_REPEAT_END","contents","cells","positionsMap","cellsPositions","positionIndex","cellInPosition","eq","previousCell","insertAfter","td","gridModelPath","vhsGridUuid","vhsHasConfiguration","compile","templateAttributes","pre","trunsclude","./../IGridModel","./../SortEntry","./../utils/ObjectFieldResolver","./../utils/TimeoutUtils","69","vhsEmptyMessage","70","hidePageSizeSelector","71","72","BundleFileType_1","VhsLoadBundleFileController","processBundleFile","getHttpConfig","content","processFileContent","replaceWith","is","fileContent","globalEval","ignore404","../bundles/models/BundleFileType","73","Event_2","LoginController","quizzesRouter","materialsRouter","homeRouter","learningPathRouter","authenticated","updatePermissions","changeDataForMenu","getCalendarVisibility","calendarVisibility","analyticsData","vhsMenuMap","ANALYTICS_MENU_KEY","administrationData","permissions","redirectToLoginPage","isShowAnalytics","allowed","isShowAdministration","openTabletNavigationMenu","scrollTop","classList","closeTabletNavigationMenu","redirectToFreePlanPage","openHelpBot","HELP_BOT_OPEN_CLOSE","vhsMenuItemsVisibility","vhsMenuBuItemsVisibility","../urls/HomeRouter","../urls/LearningPathsRouter","../urls/MaterialsRouter","../urls/QuizzesRouter","./../authcore/Event","./../urls/PersonalRouter","./../urls/UsersRouter","./models/Event","74","tail","cutValue","75","MultipleCheckboxSelectorController","pushDataModel","entities","itemSelection","76","NotificationEventGroupKey","77","PageHeaderController","currentPageName","multipleActionsOnPanel","hasHistory","history","addMenuUpdateListener","PageHeaderHelper","addPageHeaderUpdateListener","saveHistory","VHS_SESSION_HISTORY_KEY","storedHistory","goBack","onMenuItemUpdate","newMenuItemKey","oldMenuItemKey","actionsPanelHtml","statusPanelHtml","lastIndex","MAX_HISTORY_DEPTH","onHeaderUpdate","pageHeader","preservePageName","preserveActionsPanel","actions","MULTIPLE_ACTIONS_LINK_TEMPLATE_START","MULTIPLE_ACTIONS_LINK_TEMPLATE_END","getTrustedHtml","preserveStatusPanel","statusPanel","./../utils/MenuHelper","./../utils/PageHeaderHelper","78","PageTitleController","./../utils/AppProperties","79","MenuConfiguratorService_1","PersonalMenuController","statisticsRouter","learningPathsRouter","systemSettingsRouter","logsRouter","jobsRouter","referenceRouter","menuConfiguratorService","slideTemplatesRouter","menu","currentTopMenu","currentMenuItemKey","currentMenuGroupKey","menuMap","menuItemMap","parentMap","breadcrumbs","referenceObjectLoaded","isAllCourseInsidePage","isInsideLearningPathPage","isInsideQuizPages","isInsideSurveyPages","isInsideFlashcardPages","isExternalAccount","isInsideGamesPages","isInsideCatalogPages","menuHelper","menuVM","isInsideLearningPath","systemAdministrator","isMenuHidden","loadMenuByRole","changeBodyCss","addResizeEventListener","loadReferenceData","getRedirectLogoUrlFromBUAndSystemSettings","getCurrentUserLocalLogon","logon","setImagesForActivityBadges","systemHomePage","recalculateBreadcrumbs","menuVisibility","getMenuItemsVisibilitySetting","menuItemsVisibilitySettings","loadMenu","businessUserRole","getCurrentUserBusinessRole","role","userBusinessRole","getRedirectLogoURL","redirectUrlLogoUrl","getRedirectHelpURL","redirectUrlHelpPage","getRedirectAboutUsURL","redirectAboutUsPage","menuItemsPromise","zoomPromise","getBUZoomVisibilitySetting","BUZoomVisibility","toggleMenuVisibility","menuByPermissions","fillMenuByPermissionsItemsArray","getAllHomeMenu","pos","personalAccount","fillPersonalAccountItems","isMenuFull","menuGroup","menuItem","k","menuItem2","faqUrl","FAQ_MENU_KEY","getCurrentMenuItemKey","getCurrentMenuGroupKey","breadcrumbsPageName","breadcrumbsParentName","parentName","breadcrumbsParentLink","parentLink","isInsideSpecificPage","updateIsInsideSpecificPages","updateIsInsideCourse","updateIsInsideLearningPath","isInsideSpecificPages","currentMenuItem","includeBreadcrumbsPageName","tempCurrentMenuItem","hasOwnHomeItem","previousUrl","dynamicUrl","parentMenu","HOME_INDEX_KEY","reloadIfNeeded","pathSplit","EDUCATION_COURSES_MENU_KEY","EDUCATION_QUIZZES_MENU_KEY","EDUCATION_SURVEYS_MENU_KEY","EDUCATION_FLASHCARDS_MENU_KEY","CATALOG_MENU_KEY","isHasNumberIntoPath","pathString","isNumeric","parseFloat","getColorForHeaderByWindowSize","headerColor","scroll","redirectToAboutUs","aboutCompanyUrl","redirectToMyProfile","settingsUrl","redirectToAccessibility","accessibilityUrl","getClassForMenu","EDUCATION_LEARNING_PATHS_MENU_KEY","getIconForLogout","getIconForMenu","STUDENTS_OFFERS_MENU_KEY","getHomeMenu","subjectPromise","getActiveReferenceEntities","referenceSubject","isArrayItemsEquals","courseTypesPromise","referenceType","languagesPromise","referenceLanguage","learningPathTypesPromise","referenceLearningPathType","getRedirectLogoUrl","getRedirectMenuPageUrl","changePathForPersonal","isShowMenuItem","menuGroupKey","EDUCATION_MATERIALS_MENU_KEY","first","second","getImageForBadge","badgeType","getImageBadge","imageName","badgeName","badges","tempRewards","MenuConfiguratorService","../urls/JobsRouter","../urls/MainRouter","../urls/SlideTemplatesRouter","../utils/MenuConfiguratorService","./../urls/CertificateTemplatesRouter","./../urls/CoursesRouter","./../urls/FinancesRouter","./../urls/InfoRouter","./../urls/LogsRouter","./../urls/MaterialsRouter","./../urls/NewsRouter","./../urls/QuizzesRouter","./../urls/ReferenceRouter","./../urls/StatisticsRouter","./../urls/SystemSettingsRouter","80","QuizService_1","QuizViewTopTabsController","quizService","INFO_TAB_KEY","EDIT_TAB_KEY","isShowDelete","quiz","isShowDeleteButton","deleteQuiz","quizId","allowEvent","getDependentCoursesFromQuizSurvey","dialogMessage","dialogTitle","quizType","today","expiredCourses","activeCourses","endDialogMessage","dispatchEvent","inactiveQuizSurvey","quizzesIndexUrl","surveysIndexUrl","flashcardsIndexUrl","updateUrl","surveysUpdateUrl","quizzesUpdateUrl","flashcardsUpdateUrl","detailUrl","surveysDetailsUrl","quizzesDetailsUrl","flashcardsDetailsUrl","QuizService","../quizzes/QuizService","81","ReferenceCheckboxSelectorController","referenceName","referenceFilter","referenceSorting","businessUnitFilter","isItemDisabled","referenceDisabledIds","initSelectAll","onReferenceEntitiesChange","availableReferenceEntities","countSelected","selectAll","clickSelectAll","./../reference/ReferenceUtils","82","ReferenceMaxLengthValidator_1","ReferenceRequiredAttributesGroupValidator_1","ReferenceIsRequiredValidator_1","ReferenceDropdownEditableSelectorController","changeCallback","referenceEntitiesMap","currentReferenceValidationErrorsMap","userBusinessUnits","currentReferenceEntity","showEditWindow","entityId","getReferenceEntity","currentReferenceMetadata","metadata","hasUserTheSameBusinesUnitsWithEntity","showCreateWindow","getEmptyReferenceEntity","saveEntity","updateReferenceEntity","createReferenceEntity","refreshEntitiesList","setActiveReferenceEntity","currentEntityValid","ReferenceMaxLengthValidator","valid","requiredAttributesGroup","ReferenceRequiredAttributesGroupValidator","ReferenceIsRequiredValidator","newEntity","newId","decodeTitle","hideEdit","../reference/validators/ReferenceIsRequiredValidator","../reference/validators/ReferenceMaxLengthValidator","../reference/validators/ReferenceRequiredAttributesGroupValidator","83","ReferenceRedirect_1","ReferenceDropdownSelectorController","referenceRedirect","redirectToNewReferenceItem","redirectToEditReferenceItem","referenceId","ReferenceRedirect","./../reference/ReferenceRedirect","84","ReferenceMultipleSelectorController","selectedIds","setModelIds","85","seconds","hours","minutes","floor","86","$parse","disableOptions","attribute","fnDisableIfTrue","options","locals","priority","expElements","selectOptionsDisabled","attrToWatch","disOptions","87","elem_1","setPlaceholder","88","SessionRestoreController","showRestoreSessionFailedMessage","trySessionRestore","hideRestoreSessionFailedMessage","89","SkipToContentController","skipToContent","90","TooltipController","makeTooltip","tooltip","91","UploadArchiveInCourseEditDirectiveController","bundleFilesSaving","archiveImportTargetDir","hasCourseId","courseIdStr","String","demandCoursePermissionsIf","edit","uploadArchiveToPath","archive","performArchiveUpload","targetDir","confirmationDialogMessage","showUploadInstructions","92","UploadsService_1","UploadsStatusController","$interval","uploadsService","currentlyUploadableFiles","showFiles","currentlyUploadableFilesFunc","getCurrentlyUploadableFiles","CURRENTLY_UPLOADABLE_FILES_DELAY","toggleFiles","UploadsService","./../storage/UploadsService","93","UserAvatarController","profilePhoto","$watchGroup","isReset","userAvatar","getLogoByUserId","logoUrl","94","SecuredObjectType_1","IPermission_1","UsersAndGroupsSelectorController","permissionsWithUsersAndGroups","userIds","groupIds","permissionSelected","selectedPermission","selectedPermissions","searchNameField","usersCompareFn","groupsCompareFn","groupsSelectorDisabled","isPermissionsDelegation","permissionsWithUsersAndGroupsModel","permissionsWithUsersAndGroup","isEditing","isUsersShowed","isGroupsShowed","currentAvailableUserIds","currentAvailableGroupIds","currentAvailableUserAndGroupIds","currentAvailableUsers","currentAvailableGroups","currentAvailableUsersAndGroups","currentSelectedUsers","currentSelectedGroups","currentSelectedUsersAndGroups","objectModel","objectModelProperty","currentExtUser","userAndGroupIds","group","currentAvailableUsersChangeCallback","currentAvailableGroupsChangeCallback","currentAvailableUsersAndGroupsChangeCallback","vhsRedesignMode","selectPermission","getCurrentUserId","moveItems","moveItemIds","getManagedUsersForSelector","usersMap","getManagedGroupsForSelector","groupsMap","edited","selectUsers","unselectUsers","selectGroups","unselectGroups","selectUsersAndGroups","onAssignPermissions","changeUserPermission","onChangeUserPermission","changeGroupPermission","disableUser","permission","SecuredObjectType","MATERIAL","ownerId","PLAYLIST","COURSE","excludedUserIds","getAvailableGroupsUrl","excludedGroupIds","permissionId","excludedAllUsersGroup","ALL_USERS_GROUP_ID","AllUsersPermissions","PERMISSIONS_IDS","getAvailableUsersAndGroupsUrl","currentUserIdModel","currentUserIdModelProperty","getCurrentUserName","currentUserNameModel","currentUserNameModelProperty","destination","destinationItem","getPermissionName","permissionName","vhsObjectModelType","decodePermissionName","removeUserPermissions","removeGroupPermissions","searchUserOrGroupByName","hidden","./../security/permissions/IPermission","./../security/permissions/SecuredObjectType","./../users/UserService","95","AudioResponderController","allowPause","vhsAllowPause","allowSaveRecording","vhsAllowSaveRecording","allowPlayback","vhsAllowPlayback","maxLength","vhsMaxLength","onCompleteRecordingCallback","vhsOnCompleteRecordingCallback","recordUrl","recordingInstructions","vhsRecordingInstructions","onBeforeRecordingStartedCallback","vhsOnBeforeRecordingStartedCallback","onPauseRecordingCallback","vhsOnPauseRecordingCallback","onStartRecordingCallback","vhsOnStartRecordingCallback","invokeCallback","blob","recordingPromise","vhsId","96","NotificationEventKey_1","BadgeTemplateScope_1","VhsBadgeTemplateDirectiveController","badgeService","gamificationRouter","visibleBUSelector","templateDetailsDeletionInProgress","badgeGridModel","getVisibleContent","visibleAllIfUserHaveMultiplyBU","convertIsActive","getLinkForEditBadgeTemplate","templateId","templateEditUrl","setActiveProperty","active","setActivePropertyHelper","badgeTemplate","removeBadgeTemplateDetails","notificationTemplateId","isEventHidden","eventKey","systemEvents","hiddenEvents","showRevertButton","BadgeTemplateScope","DEFAULT","BUSINESS_UNIT","hideActiveButton","SYSTEM","showDeactivateButton","isDisabledParent","getBadgeTemplateImgUrl","activityBadgeEventKey","../gamification/models/BadgeTemplateScope","../notificationTemplates/model/NotificationEventKey","../urls/GamificationRouter","97","VhsBadgeTemplateEditController","errorMessage","businessUnitName","subjectToolbar","badgeTemplateId","TEMPLATE_ID_PARAM","getBadgeTemplateDetailsById","badgeTemplateDetails","redirectIndexPageByBadgeType","inactiveProperty","saveTemplateDetails","templateDetails","eventId","nameTemplate","subjectTemplate","messageTemplate","isResetPreview","newImageSelected","saveBadgeTemplateDetails","redirectEditPageByBadgeType","badgesUrl","badgeTemplateDetailsId","98","VhsCalendarFilterController","registeredOrWaitlistedId","generateId","iltSessionId","viltSessionId","notAvailableForRegistrationId","searchStringId","characters","charactersLength","random","registeredOrWaitlisted","iltSession","viltSession","notAvailableForRegistration","99","VhsCourseEditTopTabsController","ABOUT_TAB_KEY","STRUCTURE_TAB_KEY","ENROLLMENTS_TAB_KEY","LANDING_PAGE_TAB_KEY","PARTICIPATION_FORM_TAB_KEY","ATTACHED_FILES_TAB_KEY","EXPORT_IMPORT_TAB_KEY","RELATED_PRODUCTS_TAB_KEY","NOTIFICATION_TEMPLATE_TAB_KEY","GAMIFICATION_TAB_KEY","currentTopEditPage","getCurrentTab","changeTopEditPath","redirectToUrl","structureUpdateUrl","enrollmentEditUrl","landingPageUpdateUrl","participationFormUpdateUrl","bundleUpdateUrl","exportImportUpdateUrl","relatedProductsUpdateUrl","notificationDetailsUrl","gamificationDetailsUrl","100","VhsCoursePublishDirectiveController","publishedCourse","publishedCourseModules","publishedCourseSections","publishedCourseSectionsMap","sourceCourse","sourceCourseModules","sourceCourseSections","sourceCourseSectionsMap","sectionPairs","isPublishingStarted","publishedCourseId","loadPublishedCourse","coursesGridModel","courseStatus","onChangeSourceCourse","sourceCourseId","moduleSections","sectionExt","selectableSection","publishedCourseSelectedSection","sourceCourseSelectedSection","loadSourceCourse","courseSelection","tmp","isValidDate","getFullPath","modules","parentsPath","getSectionsParents","getModuleById","parent_1","selectPublishedCourseSection","selectSourceCourseSection","makeSectionsPair","selectablePair","publishedCourseSection","sourceCourseSection","coursewideSortPath","publishedSectionIndex","sourceSectionIndex","selectSectionsPair","selectedSectionPair","removeSectionsPair","pairIndex","endDateText","startDateText","getModuleSections","calculateInitialMapping","publishCourse","mappedSectionPairs","sectionsPair","mappedSectionsPair","publishSectionId","sourceSectionId","onSuccessCallback","isFunction","redirectToCourseDetails","detailsUrl","newPublishedSections","publishedSection","typeKey","101","CourseILTService_1","ReferencedObjectType_1","PurchaseService_1","PersonalService_1","VhsCourseViewTopTabsController","personalService","courseILTService","purchaseService","COURSE_TAB_KEY","PROGRESS_TAB_KEY","DISCUSSION_TAB_KEY","LEARNERS_TAB","PERMISSIONS_DELEGATION_TAB_KEY","SURVEYS_TAB_KEY","ILT_TAB_KEY","WEBINARS_TAB_KEY","anyWebinarSectionsExists","anyILTSectionsExists","isActiveCourse","isUserAnInstructor","isUserATeacher","isUserASystemAdministrator","isUserAnAdministrator","courseCertificates","Number","getCourseProgress","loadCourseCertificates","getAnyWebinarSectionsExists","getAnyILTSectionsExists","getCourse","courseProgress","COURSE_PROGRESS_RECALCULATED","loadCourseProgress","isUserInstructor","isUserResponsibleTeacher","isUserSystemAdministrator","isUserAdministrator","setCourseStarted","goToFullScreenMode","isShowProgressTab","isCourseProgressStarted","isShowLearningSessionsTab","isShowSurveyResultsTab","manageCoursesAttendeesAny","viewOtherUsersProgress","isShowDiscussionsTab","accessToDiscussions","attendeeManagement","courseStarted","isShowRemoveTab","courseBusinessUnit","courseDetailsUrl","editCourseUrl","learningSessionsUrl","iltUrl","webinarsUrl","getAnySectionWebinar","deleteCourse","getReferencedObjectProductsList","products","getRelatedLearningPaths","checkUncompletedUsersCourse","getItemsFormattedString","product","description","formattedFunc","separator","getStartedCourseProgressUsersByCourse","countUsersUncompletedCourse","removePermissionAssignments","inactiveCourse","getUserCertificates","objectName","downloadCertificates","PersonalService","CourseILTService","PurchaseService","customActions","../ReferencedObjectType","../courses/CourseILTService","../finances/PurchaseService","../personal/PersonalService","102","VhsCreditAssignmentController","newAssignment","expireInDays","editingAssignments","compareCreditTypeFn","loadReferenceEntitiesPromise","loadReferenceEntities","educationItemCredits","alreadyUsedCreditTypeIds","creditTypeId","creditTypesIds","ct","creditsToDelete","ic","editCreditAssignment","creditAssignment","onChangeCallback","getCreditAssignment","removeCreditFromEducationItem","creditTypeName","assignmentIndex","ca","isDisabledAddingCreditToEducationItem","isCreditValueValid","isExpirationDateValid","safeAddCreditToEducationItem","addCreditToEducationItem","referencedObjectType","referencedObjectId","credit","availableIndex","assignment","isCreditValueGEMin","isCreditValueLEMax","isNumber","CREDIT_MIN_VALUE","CREDIT_MAX_VALUE","EXPIRE_IN_DAYS_MIN_VALUE","EXPIRE_IN_DAYS_MAX_VALUE","currentUserBusinessUnitIds","103","VhsEditableTemplateController","showEditor","toolbarIsReady","ADD_CONTENT_TOOLS","FONT_TOOLS","PARAGRAPH_TOOLS","STYLES_TOOLS","TOOLTIPS_TOOLS","OTHER_TOOLS","initInlineEditors","$modelValue","localModelValue","blocks","lines","currentTarget","targetContentElement","targetHeaderElement","htmlContent","generateToolbar","textContent","isPrintOnly","isOptional","applyStylesToText","addedImage","imgTagRx","substitutedLines","saveText","$setViewValue","onchange","saveHtml","104","VhsEditableUserCreditsController","newUserCredit","editingUserCreditsById","isAddNewCreditInProceed","isEditAvailable","hasEditUserPermission","isPersonalCreditsMode","userCreditsGridModel","editUser","isAllowedCreditsSelfReportingForUser","allow","searchCredits","receivedFrom","textToJavaDate","receivedFromText","receivedTo","receivedToText","isSearchDatesValid","endOf","startOf","deleteUserCredit","isDeletionInProceed","startEditUserCredit","receiptDateText","receiptDate","expirationDateText","saveEditedUserCredit","isEditSaveInProceed","updateUserCredit","updatedCredit","uploadUserCreditAttachment","attachment","entry","downloadUrl","fileName","cancelEditUserCredit","saveNewUserCredit","createUserCredit","userCredit","resetNewUserCredit","removeAttachment","isEditedRowValid","editedCredit","creditType","isDatesValid","externalObjectType","externalObjectId","objectDescription","exportUserCreditsToPdf","exportUserCredits","downloadGeneralTranscriptReport","showExternalCreditsHelpDialog","showCreditsEditButtons","addedBy","downloadAttachment","Blob","createObjectURL","urlService","isEditable","105","RandomUtils_1","ObjectTypeUtils_1","DomUtils_1","MaterialService_1","materialApi","materialSource","pdfExpanded","epubExpanded","enableDownload","vhsDownloadLink","materialId","richTextElementId","findRichTextElementId","richTextBindController","TA_FIND_RICH_TEXT_BIND_CONTROLLER","loadMaterialSourceInfo","loadMaterial","multimediaErrorCallback","sourceId","sourceType","getEmbeddedMaterial","material","multimediaSources","src","isMaterialYoutubeLink","isMaterialAwsLink","contentType","dataRes","isInlineView","materialType","MaterialTypeKeyEnum","isMaterialEmpty","fileStatus","isMaterialNotReady","isViewAllowed","materialLinks","ObjectTypeUtils","isYoutubeUrl","isAwsUrl","richEditor","DomUtils","findParentWithAttr","getEmbeddedMaterialSourceInfo","getEmbeddedMaterialSectionId","vhsMaterialSectionId","downloadCrossOriginBlob","TA_DIRECTIVE_HTML","RandomUtils","generateRandomId","endIdIndex","TA_COMPILE_AND_REPLACE_ELEMENT_FUNCTION","elementSelector","linkTitle","isDownloadLink","MaterialService","vhsLinkTitle","vhsPdfExpanded","vhsEpubExpanded","vhsEnableDownload","../materials/MaterialService","../utils/DomUtils","../utils/RandomUtils","./../materials/models/MaterialType","./../utils/ObjectTypeUtils","106","VhsFillableFormDirectiveController","isAddedView","viewerConfig","showAnnotationTools","showDownloadPDF","showPrintPDF","showPageControls","adobeDivId","adobeClientIdForBu","adobeDCView","AdobeDC","View","divId","previewFile","formUrl","metaData","formName","uniqueId","adobeViewer","getAPIs","apis","getZoomAPIs","setZoomLevel","registerCallback","Enum","CallbackType","SAVE_API","uint8Array","Uint8Array","numberArray","parentSave","ApiResponseCode","SUCCESS","autoSaveFrequency","enableFocusPolling","showSaveButton","107","VhsGroupEditTopTabsController","PERMISSIONS_TAB_KEY","groupId","108","AzureWebchatBotframeworkService_1","VhsHelpBotController","azureWebchatBotframeworkService","isOpen","onHelpBotOpen","closeHelpBot","getSettings","botname","AzureWebchatBotframeworkService","../integration/azureWebchatBotframework/AzureWebchatBotframeworkService","109","LearningPathService_1","UserRole_1","VhsHomeMenuController","learningPathService","materialService","currentMenuItemName","isHideHomeMenu","systemPermissionsPromise","routeBusinessRole","roleParam","setBusinessUnitRole","UserRole","LEARNER","getMenuConfiguration","menuConfiguration","getMenuByRole","hideMenuItems","ATTENDEE_MANAGER","hideMenuItemsForAttendee","homeMenuByPermission","HOME_COURSES_KEY","hasLearnerCourses","HOME_LEARNING_PATH_KEY","hasLearnerLearningPaths","HOME_MATERIALS_KEY","hasLearnerMaterials","HOME_FLASHCARDS_KEY","hasLearnerFlashcards","HOME_ATTENDEE_MANAGER_COURSES_KEY","HOME_ATTENDEE_MANAGER_LEARNING_PATHS_KEY","getHomeMenuByRole","changeAllowedForMenu","menuKey","isExistValue","redirectToPage","homeUrl","isPCVersion","LearningPathService","../learningPaths/LearningPathService","../users/models/UserRole","110","TimeZoneType_1","ILTSessionRegistrationStatus_1","ILTSessionAttendanceStatus_1","ILTSessionStatus_1","ILTSessionActionMode","VhsILTDirectiveController","timeZone","TimeZone","updateDataFromScope","loadSessionsList","getSessionsList","sessions","setUserInfo","upcomingSessionsExists","session","ILTSessionStatus","SCHEDULED","isSelfRegistrationAllowedAtLeastForAOne","allowSelfRegistration","isSelfReportingAllowedAtLeastForAOne","FINISHED","registrationStatus","ILTSessionRegistrationStatus","REGISTERED","allowSelfReporting","learnerIsRegisteredAtLeastForOne","learnerIsWaitlistedAtLeastForOne","IN_WAIT_LIST","checkRegisterOptions","isSeriesRegistrationEnabled","registrationMode","TO_THIS","modalSession","register","changeParticipantStatus","participantId","createParticipant","participant","$emit","COURSE_PROGRESS_SECTION_PROGRESS_RELOAD_PROGRESS","checkCancelRegistrationOptions","isCancelSeriesEnabled","cancelingMode","cancelRegistration","deleteParticipant","cancelRegistrationToAllSessionsInSeries","startSessionIdToDelete","TO_FOLLOWING","deleteParticipantsFromSeries","seriesId","changeSessionAttendance","newStatus","attendanceStatus","ILTSessionAttendanceStatus","ATTENDED","MISSED","successOperationMessage","changeParticipantAttendance","getTimeZoneOffset","localTime","timeZoneTime","toLocaleString","getTimezoneOffset","dateToTimeZoneDate","date","offset","getAbbreviation","abbreviation","getSectionHeaderMessage","ALLOWED","getSessionMessage","enableWaitlist","registrantsCount","maximumCapacity","isRegisterButtonVisible","isCancelButtonVisible","getIltSessionToRemovingFromSeries","isAttendControlVisible","getIltSessionsForSeries","registerToAllSessionsInTheSeries","iltSessions","iltSessionsIds","TO_ALL","createSeriesParticipants","every","../ilt/models/ILTSessionAttendanceStatus","../ilt/models/ILTSessionRegistrationStatus","../ilt/models/ILTSessionStatus","../webinars/models/TimeZoneType","111","VhsImageCropperDirectiveController","isScaledX","isScaledY","isModalVisible","isCropperExists","modalId","cropperDestroy","getFileExtension","initCropper","sourceImage","croppedFile","source","load","image","cropper","Cropper","aspectRatio","viewMode","cropperSaveButton","cropperSave","sourceImageName","fileExtension","scaleY","scaleX","moveLeft","move","moveRight","moveTop","moveBot","zoomIn","zoom","zoomOut","rotateLeft","rotate","rotateRight","cropperCrop","crop","cropperClear","btnRestore","reset","getCroppedCanvas","fillColor","toBlob","lastModifiedDate","112","VhsIndividualCourseProgressCertificatesController","isUserProgressLoading","isDisableButtons","certificateParameters","certificateType","apiApplicationUrl","domainsMap","sharedUrl","urlForFacebook","urlForLinkedIn","serial","tmpUrl","courseProgresses","selectedProgressId","userCertificates","selectedProgress","isViewUserCertificatesPermissionsGranted","isGenerateCertificatesPermissionsGranted","generateCoursesMyCertificates","generateCoursesOthersCertificates","downloadUserCertificate","removeUserCertificates","COURSE_PROGRESS_RELOAD_PROGRESS","downloadCourseTranscriptReport","courseProgressId","getCertificate","download","promises","downloadCertUrl","saveCertificateForUser","progressId","copyVerificationLink","getVerificationPage","splitedUrl","showShareDialog","sharedCertificate","trustAsResourceUrl","getLinkForLinkedIn","closeShareDialog","getDate","getExpirationDateForUrl","validTo","getFullYear","getMonth","validToDate","113","SectionType_1","QuizCorrectAnswersType_1","CourseDetailsUtils_1","QuizResultStatus_1","VhsIndividualCourseProgressDetailsController","courseSections","sectionProgresses","quizResults","sectionProgressAllowedStatuses","showQuizDetailsHeader","quizResultsPageSize","isShowQuizResult","isShowQuizResultModal","initializeGridModel","quizzesAreLoading","groupSectionProgresses","extendSectionsByProgress","removeInactiveSectionsWithoutProgress","recalculateProgressPercentage","progress","sectionInHierarchy","level","CourseDetailsUtils","calculateSectionCompletionPercentage","getTimeSpentForSection","timespent","totalTimeSpent","timeSpentMoment","getLastScore","quizResultId","SectionType","quizResultType","QuizCorrectAnswersType","PERCENTAGE","quizResultPercentage","quizResultPoints","showQuizResults","selectedQuizDetails","selectedQuizResultId","getIndividualQuizResults","quizResultsGridModel","getPage","pageIndex","hideQuizResults","selectedQuizDetailsInPopup","showQuizDetails","$apply","quizResultsForSection","correctAnswersCount","wrongAnswersCount","questionsToBeScoredCount","showQuizDetailsInPopupForQuizResult","quizResult","changeSectionStatus","selectedSectionProgress","INFORMATION","NOT_ALLOWED","SOS","INFORMATION_WITH_MANUAL_COMPLETION","WEBINAR","ILT","sectionProgressNewStatus","getUserInSectionProgressStatus","sectionTypeKey","SUBMITTED","onSaveSectionStatus","individualQuizResult","QuizResultStatus","resetSectionProgressStatus","completeSectionWithChildes","resetSectionWithChildesToInitial","isAnyChildSectionHasProgress","findAllChildren","child","concat","getSectionProgressCompletionDate","completionDate","isShowQuizDetails","acceptableNumberOfAttempts","showDetails","getIconByLevel","sectionLevel","getIndentForChildSection","decodeStatus","selectedUserFullName","../courses/CourseDetailsUtils","../courses/models/QuizCorrectAnswersType","../courses/models/SectionType","../quizzes/models/QuizResultStatus","114","VhsIndividualCourseProgressController","userProgresses","participationFormFields","showTab","tabName","115","LearningPathProgressService_1","VhsIndividualLearningPathParticipationInfoController","learningPathProgressService","controlButtonsDisabled","editingParticipationFormData","learningPathProgresses","learningPathPermissions","isEmptyForm","getKeyNameByKey","keyName","field","fieldKey","startParticipationFormEditing","cancelParticipationFormEditing","submitParticipationFormEditing","setParticipationFormData","LEARNING_PATH_PROGRESS_RELOAD_PROGRESS","LearningPathProgressService","../learningPaths/LearningPathProgressService","116","VhsIndividualLearningPathProgressCertificatesController","learningPathCertificates","generateLearningPathsMyCertificates","generateLearningPathsOthersCertificates","117","VhsIndividualLearningPathProgressDetailsController","learningPathCourses","courseProgressByCourseId","groupCourseProgresses","deactivateCourseProgress","completeCourseProgress","showCourseProgressDetails","args","LEARNING_PATH_PROGRESS_SHOW_COURSE_PROGRESS_DETAILS","decodeType","118","VhsIndividualLearningPathProgressController","onSelectedProgressChange","LEARNING_PATH_PROGRESS_CHANGE_PROGRESS_EXTERNALLY","getSelectedProgressStatus","deactivateLearningPathProgress","LEARNING_PATH_PROGRESS_RESET_PROGRESS","119","VhsIndividualParticipationInfoController","120","VhsLearningPathControlsController","commonService","isLearningPathLoaded","isParticipationFormSpecified","loadLearningPathPromises","loadLearningPath","learningPathProgress","loadLearningPathProgress","getLearningPathProgress","fillParticipationFormUrl","participationFormFillUrl","progressUrl","editLearningPathUrl","editParticipationFormUrl","attendeeManagementUrl","permissionsDelegationUrl","../common/CommonService","121","LearningPathCourseInclusionType_1","VhsLearningPathCoursesListController","courseInclusionTypeName","courseInclusionType","moveCourseUp","moveCourseDown","removeCourse","onRemoveCourse","changeCourseInclusionType","LearningPathCourseInclusionType","loadCourse","../learningPaths/models/LearningPathCourseInclusionType","122","VhsLearningPathEditTopTabsController","123","VhsLearningPathOverallProgressController","percentOfCompletedMandatoryCourses","percentOfCompletedElectiveCourses","countOfMandatoryCourses","countOfElectiveCourses","requiredElectiveCoursesNumber","countOfMandatoryCoursesCompleted","countOfElectiveCoursesCompleted","mandatoryCoursesNames","electiveCoursesNames","recalculateStatistics","numberOfElectiveCoursesToBeCompleted","124","VhsLearningPathTopTabsController","LEARNING_PATH_DETAILS_TOP_MENU_ITEM","FILL_PARTICIPATION_FORM_TOP_MENU_ITEM","LEARNING_PATH_PROGRESS_TOP_MENU_ITEM","EDIT_PARTICIPATION_FORM_TOP_MENU_ITEM","EDIT_LEARNING_PATH_TOP_MENU_ITEM","ATTENDEE_MANAGEMENT_TOP_MENU_ITEM","isLearningPathInUse","isLearningPathChanged","showUserProgress","showViewTypeControls","learningPathIdStr","demandLearningPathPermissions","getCountOfCourses","countOfCompletedMandatoryCourses","countOfCompletedElectiveCourses","setViewType","callbackSetViewType","isViewTypeSelected","callbackIsViewTypeSelected","isNewTopMenuActive","currentTopMenuItem","deactivateLearningPath","processLearningPathInUseWarningMessageIfNeed","isDeactivateButtonDisabled","LEARNING_PATH","getNumberOfUsersWithUncompletedProgress","numberOfUncompleted","confirmationMessage","125","VhsLearningSessionsTopTabsController","126","CheckpointType_1","NoAnswerEffectType_1","VideoPlayerLocalStorageKey_1","IMultimediaMaterialSettings_1","IntroService_1","VhsMaterialCheckpointsDirectiveController","introService","NEWS_ID","checkpoint","popupOpened","saveButtonIsActive","materialSettings","default","checkpoints","checkpointsArray","ch","evt","VideoPlayerLocalStorageKey","MATERIAL_KEY","SOURCE_KEY","POSTER_URL_KEY","TIMESTAMP_KEY","CONFIGURATION_KEY","CHECKPOINTS_KEY","SUBTITLES_TRACKS","SUBTITLES_CURRENT_TRACK","initCheckpointData","CheckpointType","BUTTON","typeName","changeTimeOfCheckpoint","timeString","timeToString","timeToAnswer","timeToAnswerString","buttonText","answers","isCorrect","noAnswerEffect","NoAnswerEffectType","JUMP_TO_TIME","timeToJumpIfUserDoesNotAnswer","timeToJumpIfUserDoesNotAnswerString","addNewCheckpoint","checkpointIndex","openPopup","validationBeforeSave","urlToRedirectIfUserDoesNotAnswer","saveCheckpoint","isRewindAllowed","deleteCheckpoint","idx","editCheckpoint","addNewAnswer","checkSaveButtonState","setCorrectAnswer","answer","removeAnswer","setCheckpointType","updateTime","timestamp","timeFromString","stringTime","parsedTime","changeTimeStringField","forms","timeField","duration","changeTimeToJump","timeToJumpField","changeTimeToAnswer","timeToAnswerField","ans","startIntro","introNumber","startEditMaterialPageIntro","redirectToHelpPage","IntroService","../info/IntroService","../materials/models/CheckpointType","../materials/models/IMultimediaMaterialSettings","../materials/models/NoAnswerEffectType","../materials/models/VideoPlayerLocalStorageKey","127","VhsMaterialController","isInitEpubArea","videoUUID","bookmarkName","goToBookmark","selectBookmark","selectedIndex","rendition","getInitData","setNewMultimediaSource","sendMessageToSentry","onPdfExpandClick","onEpubExpandClick","querySelectorAll","getEpubFrame","trustedUrl","getTrustedUrl","vhsMaterialEntity","book","ePub","renderTo","epubArea","flow","bookId","bookmarks","getBookmarks","navigate","selectNavigateOptions","$selected","removeAttribute","$options","includes","loaded","toc","docfrag","subchapter","option","label","showBookmarks","nextPage","next","prevPage","prev","removeBookmark","locations","generate","curLocationStart","currentLocation","bookmark","cfi","updateBookmarks","clearBookMarks","createBookmark","hasBookmark","emptyOption","mark","usersBookmarks","thisBookBookmarks","ub","filtered","createdMark","hasMark","makeId","vhsWidth","DEFAULT_WIDTH","vhsHeight","DEFAULT_HEIGHT","uuidForVideo","vhsSources","poster","vhsCourseId","vhsSectionId","subtitles","subtitlesUrl","languageName","currentTrack","vhsMaterialType","getVimeoLink","isPdfOrEpub","getMaterialExtension","saveProgressOfCurrentMaterial","video_callback","getProgressForMaterial","getSectionProgressExtensionForMaterialProgress","localStorageFilling","SECTION_KEY","bookmarkTextFieldIsFocused","extractVimeoUrl","Sentry","captureMessage","vhsErrorCallback","vhsDocumentDownloadOnclick","../utils/ObjectTypeUtils","128","VhsMaterialEditTopTabsController","129","ContentUtils_1","ActionLogService_1","ActionType_1","VhsMaterialEditingController","actionLogService","materialList","owners","fileList","selectedFiles","isErrorFormat","attachFormat","disabledSaveButton","disabledUploadButton","initializeMaterial","saveMaterial","dropFromCourse","dropFromCourseNote","materials","validity","validityText","MaterialTypeEnum","updateMaterial","createMaterial","createOrUpdateLink","createOrUpdateMaterial","createUpdateMaterialSuccessCallback","showErrorMessage","saveMaterialDeferred","saveMaterialPromise","promisesArray","createdMaterials","ContentUtils","checkFileExt","getFileExt","enableButton","callbackWhenFinished","needCallback","previewUploadUrl","PREVIEW_UPLOAD_URL_KEY","previewUploadMethod","PREVIEW_UPLOAD_METHOD_KEY","uploadMaterialByChunks","previewId","fileUploadUrl","FILE_UPLOAD_URL_KEY","fileUploadMethod","FILE_UPLOAD_METHOD_KEY","processSuccessCallback","setFileOrLinkType","uploadContentType","showUploadButton","onFilesUpload","currentMaterial","currentError","fileExt","MAP_FILE_EXTENSIONS_TO_MATERIAL_TYPES","getFileWithoutExt","findMaterialTypeByFileExtension","getDuration","enableButtonForLinkUpload","reupload","ActionType","MATERIAL_CREATION","loadPermissionsWithUsersAndGroups","securedObjectType","getAllObjectPermissionsWithUsersAndGroups","loadMaterialOwners","getUsersWithoutExcludedUsersForSelector","ownersMap","owner","materialIdStr","hasMaterialId","demandSystemPermissionsIf","addMaterial","demandMaterialPermissionsIf","materialPermissions","subjectName","ownerName","uploaderId","video","muted","preload","onloadedmetadata","ActionLogService","./../ReferencedObjectType","./../materials/MaterialService","./../security/SecurityService","./../statistics/ActionLogService","./../statistics/models/ActionType","./../utils/ContentUtils","./../utils/Moment","./../utils/UploadUtils","130","VhsMeetingCreateEditDirectiveController","newSession","viltSessionSections","isCreationModalShown","131","NotificationService_1","NotificationEventGroupKey_1","NotificationTemplatesScope_1","VhsNotificationTemplateController","notificationService","notificationTemplatesRouter","courseRouter","recipientListForRevert","recipientIds","ccRecipientListForRevert","businessUnitNameForRevert","notificationEventGroupKey","notificationType","notificationGridModel","isReferenceObject","recipient","isCourse","getLinkForEditNotificationTemplates","notificationEditUrl","recipientsTagsToArray","recipientsTags","notificationTemplate","deactivateCourseTemplate","removeNotificationTemplateDetails","NOTIFICATION_TEMPLATE_ID_PARAM","businessUnitIdForRevert","NOTIFICATION_BUSINESS_UNIT_PARAM","getNotificationTemplateDetailsForRevert","notificationTemplateDetailsForRevert","getUsageRecipientsTags","getUsageCCRecipientsTags","ccRecipientsTags","notificationConfirm","notificationTemplateDetails","recipientList","ccRecipientList","isAbleToRevert","notificationTemplateScope","notification","NotificationTemplatesScope","REFERENCE_ENTITY","disabledParent","NotificationService","../notificationTemplates/NotificationService","../notificationTemplates/model/NotificationTemplatesScope","../urls/NotificationTemplatesRouter","./NotificationEventGroupKey","132","VhsNotificationTemplateEditController","variable","getNotificationTemplateDetailsById","redirectIndexPageByNotificationType","getAvailableRecipientsTags","getVariableTags","variablesTags","SEPARATOR","addVariable","nodeName","thisElement","startPos","createTextNode","checkSendReminders","sendReminders","checkSendDelay","sendDelay","isEventReminder","notificationTemplateEventId","isEventDelayed","ccRecipients","referenceObjId","referenceObjType","saveNotificationTemplateDetails","redirectEditPageByNotificationType","reminders","delayedEvents","133","VhsOverallProgressController","percentOfCompletedOptionalModulesLabel","percentOfCompletedMandatoryModulesLabel","percentOfCompletedElectiveModulesLabel","requiredElectivesNumber","optionalModulesNames","mandatoryModulesNames","electiveModulesNames","updateSectionsStatuses","filterActiveAndWithProgressSections","resetSectionStatuses","getCountOfCompletedOptionalModulesLabel","getPercentCompletedModules","getCountOfCompletedMandatoryModulesLabel","getCountOfCompletedElectiveModulesLabel","getOverallCourseProgress","countHeadSections","getOverallCourseProgressLabel","completed","total","134","IVhsParticipantsController","participantsGridModel","modelType","PARTICIPANT_TYPE_COURSES","getUserGroupsForFilter","userGroups","isProgressPage","businessRole","isExistParticipantsInfo","isExist","isExistLearningPaths","INSTRUCTOR","initGroupOption","updateParticipantsObject","PARTICIPANTS_PARAM","PARTICIPANTS_GROUP_PARAM","arr","s_1","m","getProgressUrl","learnerId","progressUrlForUser","getShortObjectName","getFormatDate","startedFrom","startedOnText","startedTo","startedToText","completedFrom","completedOnText","completedTo","completedToText","learnerName","135","VhsParticipationFormEditingController","disableParticipationForm","reloadParticipationForm","forced","loadParticipationForm","loadRelatedParticipationForms","fields","$setPristine","appendEmptyField","onChangeFieldKey","trim","checkFields","appendField","unshift","field2","relatedParticipationForms","136","VhsParticipationFormFillingController","wantToSubmitParticipationForm","participationFormDataLoaded","participationFormSpecified","resultParticipationFormData","autoSubmitAllowed","showWantToSubmitOption","reloadParticipationFormData","initializeParticipationForm","loadParticipationFormDataPromises","submit","getParticipationFormData","participationFormData","getSourceParticipationFormData","sourceParticipationFormData","formField","isParticipationFormValid","requireAllFields","formValid","onSubmit","137","VhsProductItemDetailsController","learningPathCourse","138","VhsProductViewTopTabsController","isShowEditTab","isAllowedEditing","editProducts","productId","139","VhsProductsListEditingController","businessUnitService","isRecalculatePermissionsButtonDisabled","productsForRegistrationLink","reloadProductsList","containsRegistrationLink","getCourseVILTSections","vilt","sectionsForRegistration","getCourseILTSections","ilt","getCurrentBusinessUnitDomain","getLearningPathCourses","getCourseVILTSectionsByCourseIds","getCourseILTSectionsByCourseIds","saveProductsList","saveReferencedObjectProductsList","saveSuccessCallback","addNewProductId","newProductId","removeProductId","removedProductIdIndex","recalculateAllPurchasesPermissions","recalculateAll","recalculatePermissions","closeRecalculateDiolog","recalculateOnlySubscriptionsPermissions","isProductIdValid","openRegistrationLinksDialog","redirectProductPage","productInternalId","productDetailsUrl","copyPurchasePath","payment","currentBusinessUnitDomain","array","object","140","PayPalService_1","CourseDetailsController_1","FreeEnrollmentService_1","VhsPurchaseDirective","payPalService","freeEnrollmentService","enrollInProgress","closePurchaseModal","CourseDetailsController","PURCHASE_PARAMETER","loadProducts","getReferencedObjectRelatedProducts","checkout","selectedProduct","enrollForFree","resultPayPal","smartButtonsPaypal","onError","resultANet","aNetPreparing","resetANetToken","productANetCommunicatorUrl","createScript","parentNode","scriptElement","subscriptionPlanId","onload","showSubscriptionButtons","showButtons","paypal","Buttons","createSubscription","subscription","plan_id","subscriptionId","createSubscriptionPurchaseOrder","onApprove","deactivateMainContent","getNumberOfItemsInProduct","numberOfItemsInProduct","approveSubscription","subscriptionID","purchasedOrderId","purchasedProductUrl","activateMainContent","render","createOrder","createOrderSmart","orderID","confirmOrderSmart","mainLoadingElement","redirectToProduct","returnUrl","PayPalService","FreeEnrollmentService","../authcore/RedirectReason","../courses/CourseDetailsController","../integration/freeenrollment/FreeEnrollmentService","../integration/paypal/PayPalService","141","QuestionType_1","VhsQuizDetailsController","resultPoints","quizName","quizAnswerResults","currentQuiz","quizQuestions","questionsForShow","getQuiz","loadQuizResult","loadQuizQuestions","getAllQuizQuestionsForQuiz","quizTotalPoints","getAssessmentResults","question","searchAssessmentResults","assessmentResult","loadAnswerResults","audioResponses","qa","q","QuestionType","HOTSPOT_SINGLE_CHOICE","HOTSPOT_MULTIPLE_CHOICE","getBundleIdForQuizResult","clearQuizPoints","getQuizAnswerResultsForQuizResult","shortAnswer","answerText","answerIds","aId","grades","gradeEntry","answerId","grade","isAnyOfMatchingsQuestionType","matchingPoints","currentPointsNumber","pointsNumber","correctQuestions","totalQuestions","currentCorrectAnswersPercentage","isQuestionHasAnswer","getAnswerForQuestion","SHORT_ANSWER","SHORT_ANSWER_AUDIO_RESPONSE","SHORT_ANSWER_WITH_UPLOAD","FILLABLE_FORM","printQuizProgressStatistics","printUser","linkTags","styleSheets","vhsGridPagination","progressStatisticsQuestionsScroll","hide","printableContent","popupWin","write","close","ar","quizzesUrl","MATCHING_ANSWER","HIDING_OPTIONS_MATCHING_ANSWER","isFillInTheBlankQuestionType","FILL_IN_THE_BLANK","isMultipleChoiceMultipleAnswerQuestionType","MULTIPLE_CHOICE_MULTIPLE_ANSWER","isMultipleChoiceSingleAnswerQuestionType","MULTIPLE_CHOICE_SINGLE_ANSWER","isShortAnswerQuestionType","isShortAnswerAudioResponseQuestionType","isShortAnswerWithUploadQuestionType","isFillableFormQuestionType","isScaledAnswerQuestionType","SCALED_ANSWER","isHotspotSingleChoiceQuestionType","isHotspotMultipleChoiceQuestionType","getQuizResult","canViewOtherUserProgress","../quizzes/models/QuestionType","142","QuizImportExportService_1","PredefinedLanguagesUtils_1","IQuizImportExportErrorCode_1","VhsQuizImportExportDirectiveController","quizImportExportService","businessUnitVisible","areQuestionsTagsLoaded","oneQuestionAtATime","showCorrectAnswers","isQuiz","isChoiceQuestion","isSurvey","isFlashcard","questionOrder","isAbleToSave","ownerChangeCallback","defaultQuiz","correctAnswersType","generateFromBank","numberOfQuestions","showQuestionNumbers","requireAllAnswers","excludeCorrectlyAnsweredQuestions","PredefinedLanguagesUtils","determineRelatedLanguageId","loadQuestionsTags","loadBusinessUnits","percentageNumber","DOWNLOAD_TEMPLATE_LINK","getDownloadTemplateLink","DOWNLOAD_FLASHCARD_TEMPLATE_LINK","getDownloadFlashcardTemplateLink","updateImportType","QUIZ_SURVEY_IMPORT_UPDATE","onButtonTypeClick","isSelectDisabled","setBusinessUnitSelectorVisible","getQuestionsTags","questionsTags","tag","getOwnersUrl","isSaveAvailable","onGenerateFromBankChanged","questionsInAccordanceWithSequenceNumber","findErrors","quizRowList","isHasError","errorFlag","getErrorMessageByErrorCode","codeId","IQuizImportExportErrorCode","importQuizFromFile","getQuizRow","checkQuizWithChoiceType","importQuizRowList","openErrorDialog","correctAnswersNumber","PERCENTAGE_TYPE","createQuizFromFile","createdQuizId","getDownloadTemplateUrl","getDownloadFlashcardTemplateUrl","openModal","openFlashcardModal","cancelErrorDialog","typeOfCreation","summary","clearImportModal","QuizImportExportService","IsAbleToSave","../quizzes/QuizImportExportService","../quizzes/models/IQuizImportExportErrorCode","../security/permissions/SecuredObjectType","../utils/PredefinedLanguagesUtils","143","CourseBundleUtils_1","VhsQuizSurveyAnsweringController","commonNavigation","courseDetailsController","isQuizMode","showEdit","quizCurrentResult","lastQuizResult","quizPassing","quizCurrentQuestion","quizQuestionAnswered","quizEnded","disableCompleteQuizButton","disableAnswers","quizCompleted","disableSubmitCurrentQuestionAnswerButton","lmsQuizCompleteListeners","currentQiuzQuestions","isTagsSelectionMode","disableTagsSelectionButtons","isFileUploadsEnabled","checkFlashcard","showCardAgain","flashcardCurrentCardIndex","recursionDepth","onBeforeRecordingStartCallback","recordingStatus","isPaused","recordingPromises","saveFillableFormToBundle","prepareBundle","saveFillableForm","completeQuizButtonChecker","recordUrlForQuestionId","clearSectionQuizParameters","progressBundle","lastSectionInCourse","loadSection","loadSectionProgress","confirmStatistics","loadQuiz","getSectionQuiz","loadSectionResults","getQuizInfo","loadUserQuizResult","reloadUserQuizResult","getCurrentUserQuizResults","quizDuration","loadLastQuizResult","isQuizPassed","startQuiz","flashcardMode","currentQuestionsTags","selectedQuizTags","startQuizInternal","businessUnitTags","systemTags","currentQuizTags","loadBusinessUnitTags","loadSystemTags","loadCurrentQuizTags","getQuizForPassing","tags","submitTags","cancelTags","MAX_RECURSION_DEPTH","getIsQuizFilesUploadsEnabled","startQuizByUser","isMatchingQuestionType","optionEntities","curOptions","compliteResultId","quizCurrentQuestionIndex","quizCurrentQuestionIndexCount","flashcardNextRound","disabledStartButton","popUpMessage","afterStart","autofillQuestions","getAnswerResultByQuestionCode","getCurrentDate","serverTime","startTime","completeQuiz","quizWarningTimeoutId","stop","clearTimeout","selectQuizCurrentAnswer","getAnswersForCurrentMatching","selectedOptions","optionEntity","currentSelectableAnswers","op","changeOnMatchingAnswerSelecting","isQuizBranchingAllowed","getQuizNextQuestion","nextQuestionResults","quizQuestion","showAgain","submitQuizCurrentQuestionAnswer","cardKnowledgeStatus","answerResult","isHidingOptionsMatchingQuestionType","isFlashcardQuestionType","completeQuestionByUser","aFrom","aTo","a1","a2","indexForA1","indexForA2","curOption","attachedFileUrl","getUserQuizResult","resetRecorder","beforeQuizComplete","RECORDER_STOP_RECORD_EXTERNALLY","submitQuiz","afterCompleteQuiz","QUIZ_SURVEY_COMPLETED","loadingDialogId","confirmAndReturnDialogId","hideConfirmButton","completeQuizByUser","tempQuizQuestions","tempq","tempa","ta","answered","singeOrMultipleQuestionIsAnswered","hasUrlForSound","isAtLeastOneEmpty","PASSED","isAnyValidMatching","FLASH_CARD","isTooLongAnswerFor","shortAnswerMaxLength","hasShortAnswer","updateBundlePromise","prepareBundleFiles","bundleInputInfo","CourseBundleUtils","getPreparedBundleInputInfoFromBlob","recordName","updateBundleFromFile","getProgressBundleId","createProgressBundle","bundleFileKeyByFileId","addedFilesMap","uploadStatus","getUploadedFile","deleteFileFromBundleAfterUpdate","addedBundleFile","deleteFileAfterUploadFailure","isRecorderReset","isFileUploaded","onFileSelectAndUpload","prepareBundleFilesOnUpload","deleteFile","deleteFileFromQuestionIfExist","deleteAllFilesFromQuestion","fileDeleted","attachDeleted","fileIndex","filesAttached","fileAttachIndex","getSectionProgress","checkShortAnswerLength","decodeQuizSectionStatus","sectionStatus","getLastQuizResultStatus","sortedQuizResults","r1","r2","attempt","questionCode","showLastResultQuiz","lastQuizResultId","showModalWithFillableForm","confirmFillableForm","hideModalWithFillableForm","isFullWidthAnswer","isShowingQuestionExplanation","attemptsTaken","blockingProgressAfterFail","flipTheCard","setHidden","updateFlashcardPage","firstSideForSetHidden","firstSideForRemoveHidden","secondSideForSetHidden","secondSideForRemoveHidden","thirdSideForSetHidden","thirdSideForRemoveHidden","showExplanations","explanations","../storage/UploadsService","../utils/ContentUtils","../utils/CourseBundleUtils","144","VhsRecordRtcController","recordingTime","audioWidth","audioHeight","mediaConstraints","audio","doDrawLambda","WIDTH","canvas","HEIGHT","canvasContext","fillStyle","fillRect","isRecording","requestAnimationFrame","analyser","getByteFrequencyData","frequencyArray","lineWidth","strokeStyle","beginPath","sliceWidth","y","moveTo","lineTo","stroke","audioContext","isActiveStartRecordingButton","isActiveStopRecordingButton","isActivePauseRecordingButton","isActiveResumeRecordingButton","isActiveSaveRecordingButton","isDefined","vhsIsRecording","vhsRecordUrl","isRecordOnPause","getContext","onPauseRecording","onStopRecording","startRecording","mediaDevices","getUserMedia","stream","audioTracks","getAudioTracks","oninactive","mediaStream","AudioContext","audioStream","createMediaStreamSource","createAnalyser","connect","smoothingTimeConstant","fftSize","frequencyBinCount","recordRtcRecorder","RecordRTC","recorderType","StereoAudioRecorder","startTimer","recordingDeferred","onStartRecording","stopTimer","stopRecording","returnedPromise","toURL","getBlob","getTracks","resumeRecording","resumeTimer","pauseRecording","pauseTimer","onSaveRecording","msSaveOrOpenBlob","revokeObjectURL","clearInterval","timer","setInterval","145","VhsReturnToOwnAccountController","returnUserToOwnAccount","146","VhsScaledAnswerQuestionController","checker","VhsSearchController","147","searchVisible","fileFormat","doSubmit","FILE_FORMAT_PARAMETER","SEARCH_STRING_PARAMETER","MAIN_MENU_KEY","controllable","removeMenuUpdateListener","showFileFormat","isNavbarForm","148","VhsSelectAllController","isDisabled","targetElement","getCurrentState","refreshState","makeSelectAll","placeForSelectAll","clonedThisElement","ready","TIMER_MILLISECONDS","isDefaultPrevented","previousState","149","VhsSelectLearningPathCoursesController","excludedCourses","excludedCourseIds","getExcludedCourseIds","selectCourse","onCourseSelect","redirectionToPreviousPageIsNeeded","150","attrs","elementTopPosition","top","isFixed","shouldBeFixed","151","SystemSettingsMenuItemsVisibilityController","isBusinessUnitType","ADMINISTRATION_SYSTEM_SETTING_KEY","setType","editSystemConfiguration","loadAllSettings","getAllSystemProperties","allSettings","newsGlobalVisibility","hasPermission","systemSettingsUrl","../urls/SystemSettingsRouter","152","VhsSystemSettingsTopTabsController","CONFIGURATION_TAB_KEY","BRANDING_TAB_KEY","MENU_ITEMS_VISIBILITY_TAB_KEY","153","VhsTeamsCreateEditDirectiveController","currentUserIsConnected","isConnectedUserToTeams","timezone","getLocalDefaultTimezone","messageForUser","redirectToTeamsConnection","getTeamsRedirectUrl","154","VhsTemplateMenuController","$document","menuItems","rebuildMenu","locationWithoutHash","clearHash","anchor","155","vhsThumbnailModel","vhsThumbnailModelName","defaultMaterialPreviewUrl","materialTypeId","defaultMaterialTablePreviewUrl","defaultQuizPreviewUrl","contentTypeKey","156","VhsVILTDirectiveController","userVILTSessionParticipants","isAnyAvailableVILTSessionInSection","isDataLoading","viltSessionIsOngoing","courseBundle","loadCurrentUser","loadUserVILTSessionParticipants","getSessionsViltList","v","isAnyScheduledWebinars","getUserVILTSessionParticipants","dateToString","isVILTSessionParticipant","isAnySelfRegisterVILTSessions","w","isSelfRegistrationAllowed","getVILTSessionParticipantStatus","viltSessionParticipant","toJoinVILTSession","joinUrl","selfRegister","createParticipantMeeting","createParticipantTeams","createParticipantWebinar","showErrorNotification","cancelParticipantId","currentVILTSessionId","removeParticipantMeeting","removeParticipantTeams","removeParticipantWebinar","getAbbriviation","showMessageForJoiningToVILT","showMessageForRegisterOnVILT","getHelpTipForTeams","157","VhsVersionChecker","notificationContent","checkVersion","TIMEOUT","reloadTimeoutPromise","valueOf","RELOAD_TIMEOUT","cancelAutoReload","158","vttToJson","VhsVideoAudioController","errorCount","openTranscriptPane","onCueChange","newCue","activeTextTrack","cues","activeCuesIds","activeCues","vhsMaterialCallback","videoPosterId","vhsMaterialSettings","_playerIsPlaying","_playerCurrentTime","isVideoOrAudio","isYoutube","lang","vttUrl","sub","ajax","showTranscriptPane","_self","playerVideoTag","initPlayerSubtitles","videoJsPlayerId","videojsOptions","controls","flash","swf","loop","vhsPoster","techOrder","html5","nativeTextTracks","vhsInlineAudio","audioInlineOptions","bigPlayButton","vhsAutoPlay","controlBar","fullscreenToggle","videojs","mergeOptions","youtubeOptions","sources","youtube","ytControls","enablejsapi","showTranscriptButtonComponent","getComponent","registerComponent","extend","arguments","handleClick","buildCSSClass","createControlTextEl","button","player","videoJSPlayer","playerPosterTag","isAudio","textTrackList","textTracks","buildShowTranscriptButton","getChild","track","addChild","exitFullscreen","currentTime","hasStarted","paused","playerCurrentTime","$id","hideVideojsErrorMessage","GIVE_UP_AFTER_SO_MANY_ERRORS","canPlayType","MediaError","MEDIA_ERR_SRC_NOT_SUPPORTED","techName","setPlayerSources","reloadPlayer","setPlayerPoster","RETRY_TIME_INTERVAL","isArray","subtitlesLanguage","isCueActive","cue","VJSIsCueActive","cueId","getShadowRoot","shadowRoot","VJSRewindTo","rewindTo","milliseconds","pause","play","getDateFromSeconds","setSeconds","getDateFromMilliseconds","setMilliseconds","thisMultimediaSourceOpenInLocalStorage","openThisMaterial","CURRENT_CHECKPOINT_KEY","one","playerIsPlaying","posterImage","setSrc","toggleTranscriptPane","vtt-to-json","159","VhsWebinarCreateEditDirectiveController","160","VhsBrandingColorsEditing","isDeleteAvailable","loadBrandingColors","brandingColors","cancelBrandingColors","../../branding/BrandingService","../../security/PermissionsService","161","VhsBrandingCssEditing","loadCustomCss","customCss","saveBrandingCss","cancelBrandingCss","removeBrandingCss","162","BrandingLogoType_1","VhsBrandingLogosEditing","isLogoLoaded","isMobileLogoLoaded","isFaviconLoaded","loadBrandingLogos","setLoaded","LOGO","MOBILE_LOGO","FAVICON","brandingLogoType","brandingLogos","logoPreviewUrl","mobileLogoPreviewUrl","mobileLogoUrl","faviconPreviewUrl","faviconUrl","updateLogo","deleteLogo","logoPreview","mobileLogoPreview","faviconPreview","../../branding/BrandingLogoType","163","VhsBrandingShareEditing","loadShareLogo","164","VhsBrandingThemesEditing","brandingThemesService","brandingThemeCustomName","themeColorsHasBeenChanged","isSavingBrandingTheme","isApplyingTheme","themeSpecified","loadBrandingThemes","useBrandingThemes","loadBrandingSettings","brandingThemeId","setDefaultBrandingTheme","changeTheme","loadSystemBrandingThemes","loadSystemBrandingSettings","brandingTheme","brandingThemes","themeColorsChange","initiateThemeColors","availableThemeColors","theme","currentBrandingTheme","themeColors","textColors","colors","colorKey","themeColor","textColor","colorTextId","colorTextKey","colorTextValue","colorValue","initThemeColors","updateNameForSaveAsCustom","saveThemeAsCustom","newBrandingThemeId","useUpdatingBrandingThemes","isDisabledApplyTheme","isDisableSavingBrandingTheme","applyTheme","appliedBrandingTheme","cancelColorChanging","getColorKeyTextForHuman","colorText","../../branding/BrandingThemesService","../../businessUnits/BusinessUnitsService","165","ScopeUtils_1","ConfirmationDialogController","dialogId","titleId","registerConfirmation","$dialog","ScopeUtils","closeAndResolveReject","showAndWait","onConfirmed","confirmed","dialogShown","getDialogId","unregisterConfirmation","../../system/ScopeUtils","./DialogService","166","confirmationRegistry","inputConfirmationRegistry","notificationConfirmationRegistry","fillAbleFormRegistry","dialog","registerInputConfirmation","unregisterInputConfirmation","registerNotificationConfirmation","unregisterNotificationConfirmation","inputConfirm","getOwnPropertyNames","registerFillableFormConfirmation","unregisterFillableFormConfirmation","167","FillableFormDialogController","168","InputConfirmationDialogController","inputData","inputFormUrl","169","NotificationConfirmationDialogController","170","TA_ADD_REDBIRD","SANDBOX_REOPEN_POPUP","COURSE_TOGGLE_MENU_VISIBILITY","TA_LOCATION_CHANGE_START","NOTES_SERVICE_INITIALIZED","COURSE_PROGRESS_RESET_PROGRESS","COURSE_PROGRESS_CHANGE_PROGRESS_EXTERNALLY","171","HotspotQuestionUtils_1","VhsHotspotQuestionAnsweringController","selectedPoints","selectedPointsInImageCoordinates","loadShapesCount","canvasContainerWidth","tryInitCanvasScene","indexNumber","requestID","cancelAnimationFrame","canvasId","isInMove","isPointSelected","loadImage","initCanvas","canvasBackgroundLoaded","canvasBackground","Image","calculatePointsInCurrentCoordinates","mouseCoords","SceneUtils","getMouseCoords","pointWasSelected","isPointInside","dragging","movingStart","selectedPoint","SelectedPoint","centerX","centerY","addSelectedPoint","onSelectedPointsChanged","dX","dY","answerAreasCount","clearRect","drawImage","shapeDrawingMode","ShapeDrawingMode","SELECTED","ORDINARY","draw","clearSelection","clearAll","calculatePointsInImageCoordinates","serializePoints","scaleFactor","scaleSelectedPoint","shapes","../../quizzes/models/QuestionType","../../utils/HotspotQuestionUtils","172","ShapeType","VhsHotspotQuestionEditController","MIN_RECTANGLE_SIDE","MIN_CIRCLE_RADIUS","shapeType","questionType","checkShapesCount","onFileSelected","newFile","fileForm","resetDrawing","shapesInImageCoordinates","serializeShapes","isInDrawing","isShapeSelected","drawingRectangle","drawingCircle","drawingPolygon","selectDrawingShape","selectedShape","selectedShapeType","RECTANGLE","loadShapes","reader","FileReader","readAsDataURL","onloadend","calculateShapesInCurrentCoordinates","Rectangle","topLeftX","topLeftY","CIRCLE","Circle","POLYGON","Polygon","onShapesChanged","radius","sqrt","pow","abs","lastPoint","normalize","addShape","deleteSelectedShape","EDIT","calculateShapesInImageCoordinates","scaleShapes","shape","isQuestionValid","173","VhsHotspotQuestionExplanationController","correctPoints","wrongPoints","waitForElement","loadSelectedPoints","checkQuestionCorrect","CORRECT","WRONG","correctPointsInImageCoordinates","wrongPointsInImageCoordinates","observer","MutationObserver","mutations","disconnect","observe","childList","subtree","characterData","showStatus","174","ContentGenerationType","AIContentGenerationDirective","aiService","loadPopupContent","aiPromptText","contentGenerationType","selectedContentGenerationType","ARTICLE","isEventProcessable","lastEventData","richEditorParent","findParentWithClass","generateContent","generateCourseByTopic","QUOTE","generateQuoteByTopic","PARAGRAPH","generateParagraphByTopic","QUESTION","generateQuestionByTopic","generateArticlePromises","topics","article","modelChanged","quote","author","../../ai/AIService","../../utils/DomUtils","../models/Event","175","RichTextBindController","bundleApi","loadingSynchronizer","loadingContent","materialSourceType","materialSourceId","onRichTextChange","loadBundlePromise","stopPropagation","loadContent","waitContentLoadingDeferred","clearFilesInLocalStorage","getBundleFile","createFakeFile","ALLOW_FAKE_BUNDLE_FIlES_RETURN","publicStorage","loadBundleFromServer","loadContentSynchronized","loadDataPromise","waitForContentLoaded","ext","../../bundles/models/BundleFileType","../../utils/ContentUtils","../../utils/RandomUtils","./../../bundles/BundleService","./RichTextContentLoadingSynchronizer","176","richTextLoadersMap","forcedLoading","dataLoader","loadingData","loaderFunction","performLoadContent","callbacks","values","177","toggleFullscreen","allowBundles","allowEmbedMaterials","allowSandbox","allowLoadFromTemplate","allowAddingBlocks","allowUserNotes","allowAI","hideEditorButtons","allowFontColorBlock","doc","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","TA_TEXT_HIGHLIGHTER","178","BlockType","BlockContentType","VhsAddBlockController","blockHeader","blockBody","blockTypesEnum","blockContentTypesEnum","blockType","Tip","blockContentType","PLAIN_TEXT","showPopup","Question","Assessment","RICH_TEXT","Toggle","ToggleContent","Note","onBlockAdd","blockClass","179","VhsAddTableController","tableRows","tableColumns","onTableAdd","row","row_1","180","VhsConvertTemplateController","templateApi","convertTemplate","getTemplateContent","oldTemplate","newTemplate","parseHTML","oldVersion","getTemplateVersion","newVersion","runIntermediateConverters","migrateData","sourceLinesMap","buildLinesMap","targetLinesMap","sourceBlocksMap","buildBlocksMap","targetBlocksMap","target_2","block","from","to","converters","convertToV1","./VhsTemplateService","181","182","mobileString","DOWNLOAD_LINK_HTML_TEMPLATE","downloadIcon","basePath","replaceImagePaths","ex","EMBEDDED_MATERIALS_IN_CONTENT_SELECTOR","DOWNLOAD_BUNDLES_LINKS_SELECTOR","regexp","imageAttributes","../../utils/StringBuilder","../VhsEmbeddedMaterialDirective","183","VhsLoadFromTemplateController","184","showAsPopup","isExternalUrl","pageUrl","createIFrameAndWaitIt","adjustSandboxHeight","iframeLoadDeferred","targetCss","iframe","createIFrame","createModal","closeButton","FULL_SCREEN_PARAMETER","displayScormViaDomainAddress","parentInitialize","currentWidth","targetHeight","frame","scormData","API","initScormData","contentWindow","postMessage","event_id","strings","isLink","endKeyIndex","VhsSelectSandboxController","SANDBOX_AS_POPUP_CLASS","../../courses/CourseDetailsController","../../urls/AuthRouter","./VhsSelectSandboxDirective","185","VhsSelectEmbeddedBundleMaterialController","onBundleFileSelect","EMBEDDED_IMG_TA_HTML","EMBEDDED_BUNDLE_TA_HTML","icon","EMBEDDED_LINK_TA_HTML","EMBEDDED_STYLED_IMG_TA_HTML","EMBEDDED_IMG_TA_HTML_COURSES","../../bundles/BundleService","186","VhsSelectMaterialController","materialsGridModel","isNullableBusinessUnit","onMaterialSelect","asDownloadLink","selectedText","EMBEDDED_MATERIAL_DOWNLOAD_LINK_TA_HTML","EMBEDDED_MATERIAL_TA_HTML","hideButtonForExtensions","splitStr","extension","187","sandboxAsPopup","sandboxAsTinCan","urlIframe","bundleFileType","onSelect","onUrlEnter","getTinCanSCOParameters","staticResourceUrl","SANDBOX_TA_IMG_PATH","clearDataOnCloseDialog","../../utils/AppProperties","188","CourseStructureEditController_1","withCredentials","sectionInfo","findLessonInfo","replaceTemplatePlaceholderField","replaceAllWhitespaces","fieldValue","replaceTemplateBlockContent","$VM_NAME","CourseStructureEditController","editController","currentSection","selectedSection","parentSection","getSectionById","unit","courseName","unitName","splitTextByDelimiter","unitNumber","sectionName","sectionNumber","thumbnailUrl","lessonName","lessonNumber","printUnitAndSection","sectionLetter","printCourseAndGrade","targetElementIndex","delimeter","TEXT_DELIMITER_CHARACTER","../../courses/CourseStructureEditController","189","UserNotesService_1","userNotesService","isAvailable","noteMaxLength","textChanged","noteHeader","getNote","note","noteBody","originalBody","noteSavedBody","eventListener","saveUserNote","saveNote","discardUserNote","onTextChange","UserNotesService","../../courses/UserNotesService","190","ContentService_1","ContentModule","ContentService","./../common/CommonModule","./ContentService","191","getContentView","myObjectType","192","CourseBundleEditController","createCourseBundleFn","createCourseBundle","dir","setCoursePageHeaderBreadcrumbs","./CourseService","193","CourseCreateEditController","MAX_REQUIRED_ELECTIVES_NUMBER","MAX_COURSE_AVAILABILITY_COMPLETED","MAX_COURSE_AVAILABILITY_STARTED","isValidityInPerpetuity","isCourseLoaded","addCourses","externalCourse","currentUserName","courseAvailabilityCompleted","courseAvailabilityStarted","defaultDelay","COURSE_KEY","cancelCoursePreviews","updateSuccessCallback","err","cleanValidity","warnings","publish","hidePublishingModal","courseBreadcrumb","getDefaultModuleForCourse","getDefaultSectionForModule","courseHasNoOwners","checkCourseOwners","getMenuPathToCertificateTemplates","isValidExpirationDate","checkCropper","copyCourseId","./models/SectionType","194","CourseActionLogService_1","CourseActionType_1","CourseScormAdapter_1","EnrollmentSeatStatus_1","CourseScorm2004Adapter_1","AzureCognitiveServicesService_1","SlideService_1","GamificationService_1","courseActionLogService","azureCognitiveServicesService","slideService","gamificationService","DEFAULT_LEFT_MENU_MODULE","DEFAULT_INNER_MENU_ITEM","sectionsList","isSlideLoading","slideLoadingCounter","isSlideRemoving","isSlideBack","selectedModule","sectionMaterials","sectionMaterialsCache","nextSection","prevSection","materialLoaded","menuShow","showQuizInfoSection","showQuizResultsSection","showQuizStartSection","showLandingPageStartCourseButton","sectionStatusUpdatePromise","interactionsSavePromise","fullScreenMode","purchaseParameter","isModuleHiddenContentVisible","isCourseLeftMenuShown","sectionStatusUpdateViaLmsApiOnly","waitLmsTimeoutPromise","updateSectionProgressPromise","ERROR_INTERNET_DISCONNECTED","SUBMIT_SECTION_PROGRESS_RETRY_INTERVAL","relatedLearningPathsToStart","isDisableInfoWithManualCompletionInput","isSelfEnrollProceed","topTabsCustomActions","isPurchaseConfigured","showPurchaseWindow","runImmersiveReaderDisabled","showListMeetings","_lastHeight","_lastContentElementHeight","lastMaterialForStudyHeight","isLoadingStartCourse","isLoadingCourseData","audioFileUrl","disableNextButton","delayCounted","slideDeckIsFirst","isSlideShowStarted","leaveCoursePage","slideTemplatesBundleLoading","showANetButton","leftMenuModuleExpanded","leftMenuItem","initializeCourseProgress","loadSections","showParticipationForm","MODULE_PARAMETER","SECTION_PARAMETER","ANetTransactionId","ANET_TRANSACTION_ID_PARAM","checkPurchaseProcess","isPurchaseCourse","isSmartPurchaseCourse","checkANetTransaction","getCoursePermissions","demandViewCoursePermissions","coursePromises","loadProgressBundle","courseLoadPromise","loadCourseBundle","loadCourseStartPermission","getCourseStartPermission","loadModulesAndSections","loadModules","loadLandingPage","loadCourseEnrollmentConfig","loadCoursePurchaseConfigured","loadCourseEnrollmentInfo","loadRelatedLearningPathsToStart","menuItemKey","PERSONAL_ACCOUNT_EXPIRED_COURSES_MENU_KEY","checkCourseStartDate","isAvailableEnrollment","isAvailablePurchase","isSelfUnEnrollAvailable","bindTopTabsCustomActions","showPurchaseModal","changeLeftClosableButton","checkChangeHeightForMainContent","checkMaterialForStudyHeight","getExpirationDateForCourse","courseExpiredDate","expirationDateForStarted","logLocationChange","CHANGE_SECTION_PARAMETER","findSectionExtendedById","setLeftMenuItem","slideTemplatesBundle","slideTemplatesBundleText","slideDeckSectionId","logBeforeUnload","courseScormAdapter","CourseScormAdapter","CourseScorm2004Adapter","toggleCoursePageCssClassForBody","changeMainContentHeight","changeMaterialForStudyHeight","sectionsDepthLevel","MAX_VALUE","setLeftMenuModule","sectionsMap","selectedProductId","confirmOrder","getANetToken","elementWindow","elementMainContent","elementMaterials","updateLayoutForMaterials","SMART_PURCHASE_PARAMETER","setMenuItem","getCourseSections","modulesProgress","summaryPromises","sectionsInModuleCount","sectionSummaryPages","SECTION_SUMMARY_REQUEST_PAGE_SIZE","getSectionsByModule","summaryList","searchSectionResults","allowedSections","lastViewedSection","lastViewedSectionId","lastEditedExtendedSection","setMenuItems","sectionsInModule","getNextSection","changeBundleFilesDomain","composeRichTextFromLoadAtStartBundles","courseLoadAtStartBundlesText","getRichTextLoadedPromise","COURSE_LOAD_AT_START_BUNDLES_RICH_TEXT_ID","fileUrl","composeRichTextFromSlideBundle","cssFileKeys","jsFileKeys","sum","completionPercentage","audioFileId","audioFileKey","recalculateCourseProgress","isDateProper","isSame","showStartButton","leftModule","leftMenuModule","toggleModuleHiddenContentVisibility","toggleCourseLeftMenuVisibility","isMaterialsListOverflowPreviewPanel","materialsList","materialPreview","allMaterialsBlockTable","innerHeight","goToTheModule","saveProgressOfMultimediaMaterial","leftMenuItemType","SLIDE_DECK","SLIDE","slideTemplateCssFileKeys","slideTemplateJsFileKeys","loadSlideTemplatesBundle","newSection","SLIDE_CHANGE_DELAY","setLeftMenuItemInternal","initialize","sectionChangeDeferred","sectionChangePromise","sectionStatusUpdateDeferred","isSectionViewAllowed","resetLMSState","getPrevSection","onSectionChangePromises","isSelectedSectionTypeInfo","isSelectedSectionTypeInfoWithManualCompletion","loadSectionMaterials","richTextReadyPromise","SECTION_SUMMARY_RICH_TEXT_ID","openedSectionId","openedModuleId","setSectionStatusOpenedIfNeeded","LANDING_PAGE_RICH_TEXT_ID","slideElement","countDelayTime","delay","updateLastViewedSection","initEventOnClick","section_1","runSectionStatusUpdateDeferred","statusUpdatedPromise","newPromise","richTextId","findRichTextController","waitForContentLoad","resolveDeferredInAnyCase","unbindWatcher","initiatedBySco","setSectionStatusOpenedIfNeededInternal","setStatusOpenedRetry","viaLms","sectionForUpdate","findSection","logStatusChange","setSectionStatusOpened","mp","isCompleted","WAIT_LMS_INTERVAL","markSectionAsOpened","updatedSectionsProgress","updateSectionStatusesFromServerResults","getSectionsProgress","findNextSection","findModuleById","redirectToNextSection","findPrevSection","redirectToPrevSection","isLeftMenuModuleActive","isLeftMenuItemActive","isSelectedSectionTypeQuizOrSurveyOrFlashcard","isSelectedSectionTypeWebinar","isSelectedSectionTypeProblemSolution","PROBLEM_SOLUTION","isSelectedSectionTypeILT","isSelectedSectionTypeSlideDeckOrSlide","isSelectedListWebinar","isSelectedListMeeting","materialsCount","getSectionUploadedOrLinkMaterials","showMaterial","selectedMaterialId","isYoutubeLink","isVimeoLink","isAwsLink","contentTabElement","outerHeightAllMaterialsElements","outerHeight","isVimeoUrl","getMaterialTypeClass","materialTypeKey","getMaterialGlyphiconClassFromKey","COURSE_PROGRESS_ID_STORAGE_KEY","participationFormId","innerItem","unbindTopTabsCustomActions","redirectToSection","startWithParticipationForm","deinitializeParticipationForm","onChangeWantToSubmit","cancelParticipationForm","isLastSectionInCourse","getCertificateParameters","getLandingPage","landingPage","getRelatedLearningPathsToStart","learningPaths","hideMenu","templateName","leaveFullScreenMode","getModulePreviewImageBundle","MODULE_PREVIEW_IMAGE_BUNDLE_FILE_TEMPLATE","newPath","newSectionId","logSectionPathChange","logOldSectionId","logOldPath","logBeginSectionViewTimestamp","oldSectionId","oldLocationPath","newLocationPath","beginTimestamp","findSectionById","courseActionType","CourseActionType","SECTION_VIEW","endTimestamp","dataExtension","dataExtensionJSON","operationDate","findSectionLocally","setInfoWithManualCompletionSectionStatus","isSectionCompleted","resetInformationSectionStatusToAllowed","getUserProgress","downloadSectionAsPdf","getSectionPdfToken","isContentFromTemplate","isSectionPdfFileExist","sectionNameRegEx","getEnrollmentConfigurationForCourse","enrollmentConfig","getCourseEnrollmentSeatsForCurrentUser","getTotalUsedSeatsForCourse","resultArr","userEnrollmentInfo","courseSeatUsed","isAvailableToSelfEnroll","isEnrollmentConfigured","isEnableWaitlist","isAvailableByMaxEnrollments","isUserPending","isUserWaitlisted","isUserEnrolled","isPaymentInProcess","isAllowNewEnrollments","isAllowSelfEnrollments","isAvailableForCurrentDate","isNowAfterStartDate","isBeforeEndDate","seatStatus","EnrollmentSeatStatus","PENDING","isUserPendingPayment","PENDING_PAYMENT","WAITLISTED","ENROLLED","maxEnrollment","getEnrollmentErrorMessage","addIf","selfEnrollUser","enrollCurrentUserToCourse","getSupportLink","supportUrl","selfUnEnrollUser","unEnrollCurrentUserToCourse","checkBeforeSectionUncompleted","getReferencedObjectPurchaseConfigured","saveUserScormSessionData","scormSessionDataJson","suspendData","runImmersiveReader","getImmersiveReaderLaunchData","launchData","subdomain","chunks","mimeType","onExit","immersiveReaderExitCallback","uiZIndex","ImmersiveReader","launchAsync","isSectionParentForCurrent","sectionForCheck","sectionForIteration","getSectionLevel","isProgressSection","sectionEntry","topMenu","getClassForSection","openCloseProgressUnit","unitElement","parents","slideToggle","oldCourseProgressPercent","courseProgressPercent","getAllProgressesForCourseProgress","resultMap","progressPercent","BADGE_KEYS","isShowContentLearningGag","widthElement","offsetWidth","closeCourseProgressModal","getHeightCourseTitleBlock","showCheckConfirmationPopup","getSlideTemplateBundleId","completeLoadSlideTemplatesBundle","SLIDE_TEMPLATES_BUNDLE_RICH_TEXT_ID","sectionCompleted","delayInMs","thisSection","completeDelayCounting","StartStopSlideShow","images","hideEnlargedImageModal","img","slideTemplateCssFileKey","slideTemplateJsFileKey","isEnrollmentExpired","getAnetTokenAndOpenPurchase","isMobile","d","documentElement","sectionOfMaterialId","NaN","saveSectionProgressExtensionWithMaterialProgress","cause","hideScormPopup","CourseActionLogService","AzureCognitiveServicesService","SlideService","GamificationService","../common/Event","../components/models/Event","../components/richtext/RichTextContentLoadingSynchronizer","../components/richtext/VhsSelectEmbeddedBundleDirective","../gamification/GamificationService","../integration/azureCognitiveServices/AzureCognitiveServicesService","../slides/SlideService","../statistics/CourseActionLogService","../statistics/models/CourseActionType","./CourseDetailsUtils","./CourseScorm2004Adapter","./CourseScormAdapter","./ProgressService","./UserNotesService","./models/CourseProgressStatus","./models/EnrollmentSeatStatus","./models/SectionProgressStatus","195","findAllChildes","allSections","sec","completedStatuses","childrenCount","completedCount","childrenCompletionPercentage","childes","completedChildrenCount","currentModuleId","nextModuleId","findNextModuleId","prevModuleId","findPrevModuleId","prevModuleSections","sectionsFound","findParentOrSection","196","THREAD_ID_PARAM","loadCoursePromises","loadSystemPermissions","197","CourseExportImportEditController","importMode","scormVersion","scormOneOrganizationMode","archiveUploading","saveBundleArchive","updateBundleFromArchive","saveScormArchive","scormArchive","updateCourseFromScormArchive","downloadBundleArchive","downloadBundleArchiveToken","downloadCourseScormArchive","downloadCourseScormArchiveToken","198","GameLearningObjectActionService_1","RewardActionType_1","CourseGamificationDetailsController","routeParams","gameLearningObjectActionService","newReward","rewardToEdit","rewardTypes","radioResult","isBadgeTableVisible","editedRewardTypeDropdown","defaultPointsSubject","defaultPointsMessage","excludedBadges","badgeIds","rewardsGridModel","badgesGridModel","addToModel","showMessage","showDefaultMessage","addToEditModel","addBadge","selectedBadge","loadBadges","selectedBadgeImageUrl","showCreateModal","rewardType","getGameLearningObjectsBadgeIds","showEditModal","getReward","getBadge","openEditModal","closeEditModal","clearPopup","removeBadge","createReward","gameId","customMessageSubject","customMessageBody","RewardActionType","BADGE_COURSE_COMPLETED","POINT_COURSE_COMPLETED","POINTS_COURSE_COMPLETED","editReward","activate","deactivate","formatTypeString","clearSymbols","newBonusPoints","GameLearningObjectActionService","../gamification/GameLearningObjectActionService","../gamification/models/RewardActionType","199","ILTRepeatType_1","CourseILTController","MIN_CAPACITY","MAX_CAPACITY","ILT_SESSIONS_LIST_VIEW_MODE","ILT_SESSION_MANAGEMENT_VIEW_MODE","ILT_SESSIONS_SCHEDULING_MAX_COUNT","businessUnitCreate","instructorIds","timeOffset","iltRepeat","ILTRepeat","showSessionsList","iltSections","showSessionCreationDialog","currentDate","getLocationsByBusinessUnitId","autoRegistrationFromWaitlist","autoRegistration","calculateOffset","sessionStartDateText","sessionEndDateText","sessionRepeatType","ILTRepeatType","ONCE","sessionStartTimeText","setHours","getHours","setMinutes","sessionEndTimeText","showCreationEditingModal","showSessionEditingDialog","sessionId","getLocationsBySessionId","getSession","getSectionForSession","locationId","closeCreationEditingModal","cleanSession","isDataValid","start_time","end_time","two","tree","four","scheduleSession","seriesPromise","endOnDateLimit","scheduledSessions","DAILY","scheduledSessionsCount","WEEKLY","EVERY_WEEK_DAY","isWorkingWeekDay","createSeries","series","iltSessionsGridModel","updateSession","isoWeekday","getInstructorsUrl","selectedSession","showSessionManagement","registeredLearnersGridModel","ENTRIES_AND_TOTAL","waitlistedLearnersGridModel","availableLearnersGridModel","courseIsStarted","courseIsNotStarted","registerAvailableUser","reloadLearnersGrids","registerAllAvailableUsers","createAllParticipants","userNameSearchString","waitlistAvailableUser","waitlistAllAvailableUsers","registerWaitlistedParticipant","registerAllWaitlistedParticipants","changeParticipantsStatus","unregisterWaitlistedParticipant","unregisterAllWaitlistedParticipants","deleteAllParticipants","unregisterRegisteredParticipant","unregisterAllRegisteredParticipants","waitlistRegisteredParticipant","waitlistAllRegisteredParticipants","changeRegisteredSectionAttendance","isAbleToEdit","sessionBusinessUnitId","cancelSession","exportToPdf","getSessionLearnersReport","courseIsStartedChecker","courseIsNotStartedChecker","changeLocation","onCancel","../PageMode","../ilt/models/ILTRepeatType","./CourseILTService","200","getSeries","requestData","sessionParticipantId","requiredStatus","removeParticipantFromIltSessionsByCourseId","201","CourseInfoController","relatedLearningPaths","loadOwners","loadRelatedLearningPaths","getCourseOwners","isTabletVersion","202","CourseLandingPageEditController","reloadLandingPage","richText","landingPageForm","saveLandingPage","updateLandingPage","createLandingPage","203","CourseNotificationDetailsController","204","CourseNotificationDetailsEditController","205","CourseParticipationFormEditController","courseIsLoaded","206","CoursePermissionsDelegationController","DEFAULT_TOP_MENU_ITEM","permissionsDelegation","setTopMenu","getViewAndStartObjectPermissionsWithUsersAndGroups","updateViewAndStartCoursePermissions","207","TreeElementsInfoFiller_1","StatisticReportsService_1","EmbeddedReportTypeKey_1","CourseProgressController","statisticReportsService","courseUsers","selectedUserId","isOnlyActiveFilter","disableSelectButtons","userLogonSearchString","isCourseUsersLoading","selectedTypeScore","quizzes","includeNotStarted","PARTICIPANT_TYPE_LP","groupRouteParam","searchType","allowExport","isExportAllowed","getQuizzesForCourse","USER_ID_PARAM","includedUserIds","getUsers","getAllCourseSections","loadCourseParticipationFormFields","getProgressesForUser","loadSectionProgressesForCourseProgress","selectedUser","clearData","selectUser","loadAllProgressData","loadParticipationFormForProgress","selectUserOnButtonPressed","getCourseUsers","extendedUserInfo","getUsersOnButtonPressed","clearSearch","changeFilter","getAllSectionsInHierarchy","TreeElementsInfoFiller","fillHierarchyInfoWithMaxLevel","getAllCourseProgressesForUser","getAllSectionProgressesForCourseProgress","getCourseProgressParticipationForm","dataLoadingPromises","showPowerBiEmbeddedReport","generatePowerBiReportToken","GROUP_PROGRESS","embeddedReport","models","embedConfiguration","reportId","embedUrl","TokenType","Embed","filterPaneEnabled","filters","table","operator","powerBiReport","embed","powerBiReportFullScreen","fullscreen","exportCourseProgressCompletionStatusCsvReport","fromDateExport","toDateExport","exportCourseProgressCsvReport","exportCourseScoresCsvReport","typeScore","selectedQuizId","showExportModal","isExportCourseScorerModal","getSelectedProgress","StatisticReportsService","../EmbeddedReportTypeKey","../statistics/StatisticReportsService","../tree/TreeElementsInfoFiller","208","CourseRelatedProductsEditController","onProductsSaveSuccess","209","Initialize","LMSInitialize","Terminate","LMSFinish","GetValue","LMSGetValue","SetValue","LMSSetValue","Commit","LMSCommit","GetLastError","LMSGetLastError","GetErrorString","LMSGetErrorString","GetDiagnostic","LMSGetDiagnostic","210","courseController","storageWrapper","quizOrSurveyAnswering","SCORM_DATA_STORAGE_KEY","SCORM_TRUE","SCORM_FALSE","processScormMessage","functionName","LMSTerminate","saveScormData","allData","progressData","addition","cmi.core.lesson_mode","cmi.core.student_name","cmi.core.student_id","vhs.current_section.status","vhs.current_section.course_certificates","assign","getInteractionsCount","interactionsNumbers","interactionRegExp","saveInteractions","scormSessionData","maxScore","currentScore","correctAnswersPercentage","saveLessonStatus","checkStatusByVersion","completedLocaly","211","ExpirationCache_1","expCache","findCoursesByMaterial","getCourseForProduct","getCourseName","courseVersion","updateCourseRequiredElectivesNumber","createModule","updateModule","updateModuleHierarchy","createSection","updateSection","updateSectionName","updateSectionHierarchy","updateSections","getAvailableSectionsNoChildren","getSectionAllMaterials","getSectionMultimediaMaterialsFromSummary","deleteModule","moduleVersion","deleteSection","sectionVersion","getSectionSurvey","getSectionFlashcard","saveSectionAsPdf","viewCertificate","threadVersion","commentId","commentVersion","scormOrganizationsMode","createModuleStructureFromBundleFiles","selectedFileKeys","bundleFileKeys","createWebinar","webinar","ignore500","updateWebinar","webinarId","cancelWebinar","removeAllParticipantsWebinar","removeAllParticipantsWebinarWithoutCompleted","createAllParticipantWebinar","createAllParticipantWebinarWithoutCompleted","getCourseUsersForVILTSession","getCourseUsersWithoutCompletedStatusForVILTSession","getZoomWebinarConfigurationsInfo","getSectionForWebinar","getAttendiesCount","getAttendeesCount","createMeeting","meeting","updateMeeting","meetingId","cancelMeeting","removeAllParticipantsMeeting","removeAllParticipantsMeetingWithoutCompletedStatus","createAllParticipantMeeting","createAllParticipantMeetingWithoutCompletedStatus","getUserMeetingParticipants","getSectionForMeeting","getAttendiesCountMeeting","getMeetingSettings","getSettingsForExistingMeeting","getMyCoursesByIds","courseIds","createEnrollmentConfigurationForCourse","updated","updateEnrollmentConfigurationForCourse","deleteEnrollmentConfigurationForCourse","enrollUsersToCourse","userToEnrollIds","groupsToEnrollIds","addUsersToCourseWaitlist","deleteEnrollmentSeat","seatId","deleteEnrollmentSeatsByStatus","moveSeatToEnrolled","moveAllSeatsToEnrolled","moveSeatToWaitlist","moveAllSeatsToWaitlist","approveEnrollmentSeat","approveAllEnrollmentSeats","sendEmailtoActiveLearners","getSectionAndModuleIdsByILTSessionId","getSectionAndModuleIdsByVILTSessionId","isExistCourses","createTeamsMeeting","cancelTeamsEvent","teamsEventId","createAllParticipantTeams","createAllParticipantTeamsWithoutCompleted","removeAllParticipantsTeams","removeAllParticipantsTeamsWithoutCompleted","updateTeamsMeeting","getViltTeamsSessionParticipants","autoRegisterToAllSectionSessions","getVILTSessionsForCourse","getFullCourses","getSessionsViltListForCourses","autoRegisterToSectionSessionsBySectionId","autoRegisterToAllCourseSessions","autoRegisterToCourseSessions","saveAudioFileForSlide","removeAudioFileForSlide","updateAudioFile","getCourseIltSections","getSessionsIltList","getILTSessionsForCourse","getSessionsIltListForCourses","autoRegisterToAllSectionILTSessions","autoRegisterToILTSectionSessionsBySectionId","autoRegisterToAllCourseILTSessions","autoRegisterToCourseILTSessions","../common/ExpirationCache","212","LocationChangeHelper_1","Keys_1","SectionAccessRules_1","richTextContentLoadingSynchronizer","MODULE","SECTION","formIsDirty","sectionQuiz","sectionSurvey","sectionFlashcard","sectionVILTSession","availableSectionParent","isModuleEditing","isModuleUpdating","editingModule","isSectionEditing","editingSection","showMaterialCreationForm","disabledRemoveModuleButton","disabledRemoveSectionButton","isCourseInUse","isCourseChanged","limitNumberOfAttempts","numberOfAttempts","moduleFromBundleFilesInput","expandAll","slides","selectedSlideDeckSection","searchTagNameField","tagNamesList","removedSlides","replaceSlides","nothingChanged","isTemplateEditing","isSaveSectionAsPdfButtonDisabled","base64Map","audioFile","showAudio","showAudioFiles","hasMandatorySection","maxSectionsLength","showEditButtons","defaultTemplates","aiNumberOfSlides","blobToFileNew","theBlob","viewCourseUrl","collapseModulesWithTimeout","getSlideTemplates","getCourseInUse","bundleUrl","uploadMaterialsGridModel","availableQuizzesGridModel","availableSurveysGridModel","availableFlashcardsGridModel","audioFilesGridModel","LocationChangeHelper","isEnablePreventLocationChange","isCourseHasSections","isSectionsExist","materialIds","saveModulesHierarchy","showRecalculationMessage","processCourseInUseWarningMessageIfNeed","showCreationModal","creationKey","updatedSection","loadSectionsForModule","setLeftMenuModuleWithoutSaving","collapseModules","moduleElem","maxHeight","scrollHeight","onModuleButtonPress","updateEditedModule","onModuleNameEdit","moveSectionIfAvailable","newModuleId","oldIndex","oldModuleId","messageConfirmMoving","isSectionSlide","parentIndex","lastChild","getLastChildRecursively","lastChildOfParentIndex","isBetweenParentAndFirstChild","isBetweenTwoChildes","isSelectedHasOtherParent","prevSectionOnLevel","findPrevSectionOfSameLevel","calculateSortIndexInLevelOfSlide","calculateSortIndexInLevel","updateSectionsPromises","getSlidesForSlideDeck","RECURSION_DEPTH_LIMIT","isMovingBackward","prevLevelSection","insertIndex","prevLevelSections","arrIndex","liteSaveSection","isSectionBlockingChanged","isSectionSlideDeck","slideDeckSection","setSlideSectionActive","convertBase64InSummary","firstUpdate","addedIndices","styleString","replacement","realData","b64toBlob","replaceString","getBundleFileName","saveSection","summaryCopy","copiedSectionId","saveSectionText","loadSectionsForModuleText","isCourseHasMandatorySection","composeRichTextFromSlideTemplateBundle","b64Data","byteCharacters","atob","byteArrays","byteNumbers","charCodeAt","byteArray","onSectionButtonPress","updateEditedSection","onSectionNameEdit","showEditingModal","availableCurrentSectionParent","cleanEditingModal","startSectionInlineEdit","toggleMaterialCreationForm","callbackWhenMaterialCreated","addMaterialsToSection","addMaterialToSection","mat","removeMaterialFromSection","moveUp","objectToMove","setFormIsDirty","moveDown","isMoveUp","isMoveDown","setFormIsDirtyForSlideDeck","setUpBlockingProgressAfterFail","toggleLimitAcceptableNumberOfAttempts","onChangeNumberOfAttemptsField","reloadSection","isSelectedSectionTypeQuiz","isSelectedSectionTypeSurvey","isSelectedSectionTypeFlashcard","isSelectedSectionTypeSlideDeck","isSelectedSectionTypeSlide","recalculateSectionWithParentIndex","checkSlideDeck","loadSectionQuiz","loadSectionSurvey","loadSectionFlashcard","setCurrentSectionAccessRules","isSectionQuizOrSurveyOrFalshcard","isSectionWebinar","isSectionILT","isSectionIWMC","initBundleFilesGridModel","setSlidesVisibility","loadAvailableSectionParent","hideCurrentMaterial","parentSections","showRemovalModal","startModuleInlineEdit","addQuizToSection","removeQuizFromSection","addSurveyToSection","removeSurveyFromSection","addFlashcardToSection","removeFlashcardFromSection","cleanCreationModal","createModuleOrSection","creationPromise","setDefaultSectionAccessRules","setSectionSortIndex","getAudioFileUrl","removeModule","deleteSelectedModule","isModuleNotEmpty","removeSection","deleteSelectedSection","editSectionParent","createModuleKeyPress","Keys","ENTER","openModuleFromBundleFilesDialog","createModuleFromBundleFiles","sectionBeforeEdit","blockingNextSections","lockUntilPreviousSectionsRead","lockUntilOnePreviousSectionRead","currentSectionAccessRules","SectionAccessRules","CONCLUSION_INFO","SEQUENTIAL_LESSON_INFO","FREE_REIN_LESSON_INFO","MANDATORY_INTRO_INFO","INTERIM_ASSESSMENT_QUIZ","FORMATIVE_ASSESSMENT_QUIZ","SUMMATIVE_ASSESSMENT_QUIZ","PRE_ASSESSMENT_QUIZ","AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_SURVEY","AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_SURVEY","ALWAYS_AVAILABLE_SURVEY","AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_WEBINAR","AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_WEBINAR","REGISTRATION_ALWAYS_AVAILABLE_WEBINAR","AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_ILT","AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_ILT","REGISTRATION_ALWAYS_AVAILABLE_ILT","AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_FLASHCARD","AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_FLASHCARD","ALWAYS_AVAILABLE_FLASHCARD","CONCLUSION_SLIDE_DECK","SEQUENTIAL_LESSON_SLIDE_DECK","FREE_REIN_LESSON_SLIDE_DECK","MANDATORY_INTRO_SLIDE_DECK","onCurrentSectionAccessRulesChange","onCreditsChangeCallback","slideTemplates","slideTemplateHtml","slideTemplate","tagName","addSlide","slideDeckParentId","slideDeckParentName","defaultTemplate","slideTemplateId","findSlideInfoAndReplaceTemplatePlaceholderField","duplicateSlide","slideNumber","slideDeckTotalSlides","getParentSectionOfTheFirstLevel","slideInfo","moduleNumber","moduleName","slideDeckNumber","slideDeckName","slideDeckAbsoluteNumber","courseWideSortPath","courseWideSortPathForSearch","sectionForReturn","sectionInModule","isPresent","slide","removeSlide","searchSlidesByTagName","importSlides","removeAllSlide","addSlideSectionsFromAchieve","isArchive","removeAllSectionFromSlideDeck","focusOnElement","scrollIntoView","changeTab","bundleVersion","fileNamePrefix","blobToFile","showAudioFile","removeAudioFile","uploadAudioFile","showSelectAudioFileDialog","audioFilesSearchString","redirectToSlideDeckHelpPage","HELP_SLIDE_DECK","updateSlideNumberAndTotalSlides","replacePlaceholdersOfSlideNumberAndTotalSlides","openCloseSlideDeckSlideTemplates","openCloseSlideDeckAI","generateSlides","numberOfSlides","generateSubparagraphPromises","addSlidePromise","isInt","expandAllModules","../ai/AIService","../components/richtext/RichTextBindDirective","../components/richtext/VhsTemplateService","../utils/Keys","../utils/LocationChangeHelper","./models/SectionAccessRules","./models/SectionPassingType","213","ReportOptions_1","CourseSurveyResultsController","QUESTION_SUMMARIES","INDIVIDUAL_RESPONSES","SAResponsesPageSize","survey","selectedSurveyQuestions","selectedSurveyAnswerResults","diagramsData","isSurveyStatisticLoading","percentageDiagramOptions","getHorizontalBarDiagramOptions","axes","autoscale","xaxis","tickOptions","formatString","suffix","digitDiagramOptions","onResizeFunc","replot","surveyResultsGridModel","loadSurveyQuestions","surveyId","loadSurvey","getUrlForAttachmentSurvey","getSurveysForCourse","courseSurveys","onSelectorChangeCallback","getAllSurveyQuestions","surveyResultId","surveyResultIds","getQuizAnswerResults","resultId","surveyAnswerResult","questionList","isThereSurveyAnswerResultForQuestion","getBundleFileByKey","changeView","getQuizSurveyStatistics","surveyStatistics","createGridModels","prepareQuestionStatisticForDiagrams","answersStatistics","answeredPerc","weightedAverage","getChartDataForQuestion","getChartOptionsForQuestionType","shortAnswerText","SAResponsesGridModel","../statistics/utils/ReportOptions","214","CourseWebinarController","showManage","showRoster","courseUsersWithoutCompletedStatus","currentVILTSession","attendeesCount","isActiveLearners","schedulingInfo","showModalType","isCompletedTeamsAuth","viltSessionsGridModel","loadAttendeesCount","isWebinarConnectionEnable","isZoomConnectionEnable","isTeamsConnectionEnable","showViltSessionModal","showCreationModalMeeting","showCreationModalWebinar","showCreationModalTeams","updateAttendeesCount","registrants","attendees","scheduleOrUpdateWebinar","prepareDataForScheduleWebinar","finallyCallbackForScheduleWebinar","scheduleOrUpdateMeeting","scheduleOrUpdateTeamsMeeting","start_date","getTimeByTimezone","end_date","endTime","startDateInit","getTimeWithoutTimezone","endDateInit","commonPrepareDataForScheduleVilt","prepare_time","showCreationModalVILTSession","meetingSettings","showModalMeeting","manage","viltSessionParticipantGridModel","viewRoster","isWebinarRegistrant","isMeetingRegistrant","registerParticipantWebinar","showStartWindow","registerParticipantMeeting","registerParticipantTeams","unregisterParticipant","pId","unregisterParticipantMeeting","unregisterTeamsParticipant","registerAllParticipants","registerAllParticipantsMeeting","registerAllParticipantsForTeams","unregisterAllParticipants","unregisterAllParticipantsMeeting","unregisterAllParticipantsForTeams","five","meetingPassword","meetingPasscode","six","webinarBU","receiveAttendeeFromTeams","215","CoursesController","commonHomeService","SUBJECT_MODULE","COMPLEXITY_LEVEL_MODULE","LANGUAGE_MODULE","SOURCE_MODULE","STUDENT_MODULE","selectedItemInModule","notStartedStatus","inProgressStatus","completedStatus","coursesUrl","dummyArray","PURCHASED_ORDER","initDummyArray","updateGrid","getStorageFilters","applyTopStatus","updateTopStatus","toggleVhsPageHeaderVisibility","setSearch","searchCourse","isSearchItemActive","searchItem","isSearchItemHide","loadSearch","complexityLevel","courseStatusSessionList","getCourseStatusList","updateFilter","countActiveIncrement","pageViewMode","oldViewType","updateUserPageViewMode","Boolean","updatePageViewMode","onFilterChange","setCourseStatusFilter","statusList","getCourseProgressClass","getShortSummary","originalString","../common/CommonHomeService","216","CoursesController_1","CourseProgressController_1","CourseInfoController_1","CourseCreateEditController_1","CourseBundleEditController_1","CourseParticipationFormEditController_1","CourseLandingPageEditController_1","CourseExportImportEditController_1","QuizDetailsController_1","CoursePermissionsDelegationController_1","CertificatesCreateEditController_1","CertificatesController_1","CourseSurveyResultsController_1","CourseWebinarController_1","CourseRelatedProductsEditController_1","CourseILTController_1","EnrollmentCreateEditController_1","EnrollmentDetailsController_1","CourseNotificationDetailsController_1","CourseNotificationDetailsEditController_1","SlidesController_1","SlidesCreateEditController_1","SlidesBundleEditController_1","CourseGamificationDetailsController_1","QuizDetailsController","EnrollmentCreateEditController","EnrollmentDetailsController","SlidesController","SlidesCreateEditController","SlidesBundleEditController","../bundles/BundlesModule","../certificates/CertificatesController","../certificates/CertificatesCreateEditController","../gamification/GamificationModule","../notificationTemplates/NotificationModule","../slides/SlidesBundleEditController","../slides/SlidesController","../slides/SlidesCreateEditController","../statistics/StatisticsModule","./../quizzes/QuizzesModule","./CourseBundleEditController","./CourseCreateEditController","./CourseDetailsController","./CourseDiscussionController","./CourseExportImportEditController","./CourseGamificationDetailsController","./CourseILTController","./CourseInfoController","./CourseLandingPageEditController","./CourseNotificationDetailsController","./CourseNotificationDetailsEditController","./CourseParticipationFormEditController","./CoursePermissionsDelegationController","./CourseProgressController","./CourseRelatedProductsEditController","./CourseStructureEditController","./CourseSurveyResultsController","./CourseWebinarController","./CoursesController","./EnrollmentCreateEditController","./EnrollmentDetailsController","./QuizDetailsController","217","isApprovalRequiredDefaultValue","isAutoEnrollFromWaitlistDefaultValue","isSaveProceed","enrollConfig","isStartDateEnable","isEndDateEnable","initializeEnrollmentConfig","isApprovalRequirement","isAutoEnrollFromWaitlist","onStartDateCheckboxChange","onEndDateCheckboxChange","onChangeSelfEnrollments","onChangeWaitlist","isMinMaxValid","isMinValid","minEnrollment","isMaxValid","reloadEnrollment","isInit","deleteEnrollmentConfiguration","218","PAGE_SIZE","userIdsToEnroll","groupIdsToEnroll","userIdsToWaitlist","groupIdsToWaitlist","isDisableAllActionButtons","btnSendNotificationClicked","enrolledGridModel","enrolledGridModelWithoutCompletedUserStatus","waitlistedGridModel","pendingGridModel","getSeatsUsedCount","enrollUsers","enrollUsersDo","alreadyEnrolled","usersNames","successEnrolled","moved","showUserSelectorForEnroll","showGroupSelectorForEnroll","addUsersToWaitlist","showUserSelectorForWaitlist","showGroupSelectorForWaitlist","unEnrollUser","seat","isUpdateProceed","unEnrollAll","moveSeatToEnrolledDo","moveAllSeatsToEnrolledDo","approveEnrollment","enrolled","waitlisted","approveAllEnrollments","usedSeatCount","totalUsedSeats","toggleUserSelectorForEnroll","toggleGroupSelectorForEnroll","toggleUserSelectorForWaitlist","toggleGroupSelectorForWaitlist","showSendMailModal","clearEmailFields","closeSendMailModal","isPendingPayment","../components/richtext/RichTextEditorDirective","219","onlyActive","getCourseGroups","getCourseModulesProgress","getProgressForQuiz","requestConfig","userIdsFilter","groupIdsFilter","getSectionsStatistics","getCourseProgressStarted","getUserScormSessionData","interactionData","materialProgresses","220","quizNumber","COURSE_QUIZ_ID_PARAM","isQuizNumberOdd","221","222","223","224","225","226","227","228","229","ZoomController_1","ZoomController","./ZoomController","230","redirectToAccessDenied","buZoomVisibility","ZOOM_MENU_KEY","231","orderCreationInput","getMaxFreePlanUsers","232","CatalogController","SEARCH_STRING_KEY","SUBJECT_ID_KEY","COURSE_TYPE_ID_KEY","VIEW_TYPE_KEY","productsGridModel","searchProduct","courseTypeId","233","ContentModule_1","OrderProductsController_1","PurchasedOrderController_1","ProductEditController_1","CatalogController_1","ProductDetailsController_1","PurchasedProductController_1","ProductDetailsController","PurchasedOrderController","OrderProductsController","ProductEditController","PurchasedProductController","../common/CommonModule","../content/ContentModule","./BillingPlanService","./CatalogController","./OrderProductsController","./ProductDetailsController","./ProductEditController","./PurchaseService","./PurchasedOrderController","./PurchasedProductController","234","ORDER_ID_PARAM","PERSONAL_PURCHASED_ORDERS_MENU_KEY","orderProductsGridModel","materialUploadDate","uploadDate","getUrl","orderProduct","watchUrl","getThumbnailModelName","getMaterialTypeTitle","getThumbnail","235","disableCheckoutButton","isPurchased","profileSupportLink","accessObjects","viltAutoRegisterRequired","VILTSections","ILTSections","selectedVILTPage","paginatedVILTSessions","selectedILTPage","paginatedILTSessions","paymentOnly","showLabels","hasErrors","PRODUCT_ID_PARAM","COURSE_PARAMETER","VILT_SESSIONS_AUTO_REGISTER_REQUIRED","loadProduct","checkPurchasing","getProductPermissions","productPermission","getProduct","learningPathsCoursesMap","coursesMap","getEnrollmentConfigForCourses","onProductItemSelected","getType","productsCatalogUrl","LP_COURSE","getFormattedDate","isSelected","selectedCourse","selectedMaterial","selectedLearningPathCourse","selectedLearningPath","purchasingCallback","checkOrder","purchased","checkPurchasingPayPal","isANetConfigured","checkPurchasingAuthorizeNet","checkPurchasingFreeEnroll","enrollmentConfigured","VILTPromise","ILTPromise","lc","VILTSessionsToBuy","ILTSessionsToBuy","openAuthorizeNetDialog","orderApproveUrl","rc","viltRes","iltRes","goToVILTPage","goToILTPage","confirmFreeEnrollment","isBeforeToday","getToday","isMaterial","getProductSize","coursesEnrollNotAvailable","236","MIN_PRICE","MAX_PRICE","MIN_EXPIRATION","MAX_EXPIRATION","MIN_LIMIT","MAX_LIMIT","isSubscriptionProduct","OBJECT_TYPE_PARAM","OBJECT_ID_PARAM","demandProductPermissions","productPermissions","updateProduct","isMultiCard","multiCardLimit","keywords","subscriptionExpiration","notifierSuccess","getMaxLimit","limit","validateSubscriptionPlanId","isSubscription","redirectToSubscriptionSetupHelp","HELP_PAY_PAL_SUBSCRIPTIONS","237","obtainRightsForOrderProducts","productIds","getPurchasedProduct","purchasedProductId","selectPurchasedEntity","purchasedEntityId","startPurchasedLearningPathCourse","238","isPurchasedOrderProcessed","isPurchasedOrderProcessingFailed","purchaseOrderResults","processPurchaseOrder","orderProductsUrl","239","firstLoad","buttonStatusMap","PURCHASED_PRODUCT_ID_PARAM","loadPurchasedProduct","purchasedProduct","processPurchasedProductAfterLoad","onSelectPurchasedEntityButtonClick","purchasedEntityIdToSelect","multiCardUsed","onStartLpCourseButtonClick","previousTopic","previousCourse","parentLearningPath","goToPurchasedItem","purchasedItems","purchasedEntities","purchasedEntity","referencedObject","purchasedItem","productEntityId","getCoursesProgress","setProgressStatus","displayContinueButton","displayStartButton","displayViewButton","performAction","getLabel","240","ActivityBadgeEditController","isSystemAdministrator","ADMINISTRATION_BADGES_KEY","badgeId","BADGE_ID_PARAM","getActivityBadge","eventName","resetImage","newBadgeImage","editBadge","badgeBuId","updateActivityBadge","removeActivityBadgeImage","activateActivityBadge","deactivateActivityBadge","./BadgesService","241","BadgeTemplateEditController","242","BadgeTemplatesController","ADMINISTRATION_GAMIFICATION_MENU_KEY","243","BadgesController","showBusinessUnitSelector","activityBadgesGridModel","getBusinessUnitNameById","getRelatedGameLevelRewardsForBadge","getRelatedLearningObjForBadge","relatedItems","244","BadgesCreateEditController","accessToEdit","saveBadge","updateBadge","createBadge","removeBadgeImage","games","245","getImageUrl","getActivityBadgeImageUrl","badgeKeys","sendEmailWithBadge","parameterizedUrl","templateDetailsId","246","reward","247","GameProgramsController","loadPrograms","ADMINISTRATION_GAME_PROGRAMS_KEY","gamesGridModel","getActiveString","game","toggleActive","toggleGameActive","./GamificationService","248","GameProgramsCreateEditController","initialGameState","editedRewardMessageType","levelsToDelete","badgeSearchString","isRewardExist","isGameLoaded","PROGRAM_ID_PARAM","loadGame","newLevel","getGame","levels","getGameRewards","gameLevelId","getGameLevels","badgePreviewUrl","toggleMessage","showLevelMessage","togglePoints","showPointsMessage","saveNewLevel","pointsMessageBody","pointsMessageSubject","clearReward","saveEditedLevel","lvl","saveGame","clearEditedLevel","isGameUnique","deleteLevel","programsUrl","cancelGame","levelToEdit","showDefaultPointsMessage","editedMessageSubject","editedMessageBody","bonusPoints","levelMessageSubject","levelMessageBody","setMessageToDefault","badgeBeforeSave","chosenBadge","showDefaultBadgeMessage","showBadgeMessage","customBadgeMessageSubject","customBadgeMessageBody","saveReward","clearRewardOfType","clearNewLevel","oldData","toggleBadgeTable","setMessageToNone","clearChosenBadge","cancelRewardModalChanges","chooseLevel","badgeSearchKeyPress","getAwardTypeNotification","isBonus","getSecondMessage","249","BadgesController_1","BadgesCreateEditController_1","GameProgramsController_1","GameProgramsCreateEditController_1","ActivityBadgeEditController_1","BadgeTemplatesController_1","BadgeTemplateEditController_1","./ActivityBadgeEditController","./BadgeTemplateEditController","./BadgeTemplatesController","./BadgesController","./BadgesCreateEditController","./GameLearningObjectActionService","./GameProgramsController","./GameProgramsCreateEditController","250","saveLevel","createLevel","assignRewards","251","252","BADGE_LP_COMPLETED","POINTS_LP_COMPLETED","POINT_LP_COMPLETED","253","HomeController","redirectToHomePage","administrationMenuUrl","getInstructorLearningPathsCount","learningPathCount","instructorHomeUrl","participantsUrl","authorCoursesUrl","choseLearnerHomePage","learningPathsUrl","./models/UserRole","254","HomeService_1","HomeCoursesController_1","HomeLearningPathsController_1","HomeController_1","HomeAdministrationMenuController_1","HomeAdministrationReportsController_1","HomeAuthorCoursesController_1","HomeAuthorLearningPathsController_1","HomeAuthorQuizzesController_1","HomeAuthorSurveysController_1","HomeAuthorMaterialsController_1","HomeAuthorReportsController_1","HomeReportsController_1","HomeMaterialsController_1","HomeAttendeeManagerCoursesController_1","HomeAttendeeManagerLearningPathsController_1","HomeAttendeeManagerReportsController_1","HomeInstructorCoursesController_1","HomeInstructorLearningPathsController_1","HomeInstructorReportsController_1","HomeParticipantsController_1","HomeAuthorFlashcardsController_1","HomeFlashcardsController_1","HomeCoursesController","HomeLearningPathsController","HomeMaterialsController","HomeReportsController","HomeAdministrationMenuController","HomeAdministrationReportsController","HomeAuthorCoursesController","HomeAuthorLearningPathsController","HomeAuthorQuizzesController","HomeAuthorSurveysController","HomeAuthorFlashcardsController","HomeAuthorMaterialsController","HomeAuthorReportsControllerController","HomeAttendeeManagerCoursesController","HomeAttendeeManagerLearningPathsController","HomeAttendeeManagerReportsController","HomeInstructorCoursesController","HomeInstructorLearningPathsController","HomeInstructorReportsController","HomeParticipantsController","HomeFlashcardsController","HomeService","./HomeController","./HomeParticipantsController","./HomeService","./admininstration/HomeAdministrationMenuController","./admininstration/HomeAdministrationReportsController","./attendee/HomeAttendeeManagerCoursesController","./attendee/HomeAttendeeManagerLearningPathsController","./attendee/HomeAttendeeManagerReportsController","./author/HomeAuthorCoursesController","./author/HomeAuthorFlashcardsController","./author/HomeAuthorLearningPathsController","./author/HomeAuthorMaterialsController","./author/HomeAuthorQuizzesController","./author/HomeAuthorReportsController","./author/HomeAuthorSurveysController","./instructor/HomeInstructorCoursesController","./instructor/HomeInstructorLearningPathsController","./instructor/HomeInstructorReportsController","./learner/HomeCoursesController","./learner/HomeFlashcardsController","./learner/HomeLearningPathsController","./learner/HomeMaterialsController","./learner/HomeReportsController","255","NotificationsModalMenuItem_1","SocialService_1","socialService","notificationsModalMenu","NOTIFICATIONS_MODAL_ATTENDEE_MANAGER_MENU","currentNotificationsModalMenuItemName","getNotificationCountsForAttendee","ADMINISTRATOR","HOME_ATTENDEE_MANAGER_PARTICIPANTS_KEY","NOTIFICATIONS_MODAL_INSTRUCTOR_MENU","HOME_INSTRUCTOR_PARTICIPANTS_KEY","startAttendeeManagerHomePageIntro","getAttendeeManagerNotificationsCounts","attendeeManagerCounts","getInstructorNotificationsCounts","getNotificationsModalMenuItemName","notificationsModalMenu1","NotificationsModalMenuItem","DAY_COMMENTS","WEEK_COMMENTS","NEW_ASSESSMENTS","getNotificationsModalMenuItem","itemName","showNotificationModal","setCurrentNotificationsModalMenuItem","currentNotificationsModalMenuItem","getCommentsAndDiscussionForAttendeeManager","comments","getCommentsAndDiscussionForInstructor","newAssessments","redirectToDiscussion","discussionId","hideNotificationsModal","discussionUrl","getNotificationItemCount","dayCommentsCount","weekCommentsCount","newAssessmentsCount","redirectToAssessment","SocialService","../assessments/AssessmentsService","../social/SocialService","./models/NotificationsModalMenuItem","256","257","HOME_ADMINISTRATION_MENU_KEY","loadAdminHomeMenuItems","administrationMenu","getAdministrationMenu","getSubMenuHtml","allLinkItems","item_1","startAdministrationHomePageIntro","../../auth/AuthService","../../authcore/AuthManager","../../authcore/AuthRedirect","../../info/IntroService","../../settings/SettingsService","../../utils/MenuConfiguratorService","../../utils/MenuHelper","258","HOME_ADMINISTRATION_REPORTS_KEY","getInfoForAdmin","statistic","dailyStatistic","statisticPeriods","periodType","weeklyStatistic","monthlyStatistic","currentMonth","month","currentYear","../../statistics/StatisticReportsService","259","addToFavorites","favorite","removeFromFavorites","../../ReferencedObjectType","../../branding/CustomBrandingService","../../common/CommonFilterService","../../common/CommonHomeService","../../personal/PersonalService","../../social/SocialService","../../urls/CoursesRouter","../../users/UserService","../../utils/ResizeViewService","../models/NotificationsModalMenuItem","260","isLearningPathsLoaded","isInitSlick","http","getCompletedMandatoryCourses","coursesByLP","countCompletedCourses","countMandatoryCourses","getCompletedElectiveCourses","oldSearchViewType","startWindowWidth","../../courses/models/CourseProgressStatus","../../learningPaths/LearningPathService","../../learningPaths/models/LearningPathCourseInclusionType","../../urls/LearningPathsRouter","261","HOME_ATTENDEE_MANAGER_REPORTS_KEY","getInfoForAttendeeManager","calcHours","timeInMinutes","calcMinutesRemainder","262","HOME_AUTHOR_COURSES_KEY","demandUserBusinessRole","AUTHOR","startAuthorHomePageIntro","../../security/SecurityService","../../users/models/UserRole","263","HOME_AUTHOR_FLASHCARDS_KEY","quizzesGridModel","subjectNameAndTitle","searchQuiz","loadQuizDetails","importQuiz","../../components/models/Event","../../quizzes/models/QuizType","../../urls/QuizzesRouter","264","HOME_AUTHOR_LEARNING_PATH_KEY","getSubjectAndName","searchLearningPath","265","HOME_AUTHOR_MATERIALS_KEY","topType","subjectAndTopic","shown","updateTopType","getMaterialTypeName","../../materials/MaterialService","../../urls/MaterialsRouter","../../utils/ObjectTypeUtils","266","HOME_AUTHOR_QUIZZES_KEY","267","isLoadingStatistic","HOME_AUTHOR_REPORTS_KEY","getStatisticForAuthor","268","HOME_AUTHOR_SURVEYS_KEY","269","HOME_INSTRUCTOR_COURSES_KEY","startInstructorHomePageIntro","getCounts","getInstructorNotificationsNewCounts","instructorCounts","../../assessments/AssessmentsService","../../urls/AssessmentsRouter","270","HOME_INSTRUCTOR_LEARNING_PATHS_KEY","271","HOME_INSTRUCTOR_REPORTS_KEY","getInfoForInstructor","272","isCoursesLoaded","startLearnerHomePageIntro","getActiveStatusName","cert","windowElement","getShortCourseName","../../courses/CourseService","../../courses/ProgressService","273","274","kendo","learningPathStatus","isConfirmedLearningPaths","isDisableConfirmProgressButton","url_1","lpArray","progressStatus","learningPathProgressEntries","courseCopy","learningPathProgressId","progressStartDate","progressCompletedDate","confirmProgress","confirmLearningPathProgress","downloadUserCertificates","../../learningPaths/LearningPathProgressService","275","getUserPageViewMode","276","HOME_REPORTS_KEY","getInfoForLearner","277","278","279","request","VIEWS_URL_PREFIX","Authorization","utcOffset","responseError","rejection","Factory","./../authcore/AuthRedirect","./../authcore/RedirectReason","280","factory","./HttpInterceptor","281","282","283","284","285","ImportExportService_1","ExportController","importRouter","exportRouter","importExportService","IMPORT_TAB_KEY","EXPORT_TAB_KEY","importInformation","ADMINISTRATION_IMPORT_EXPORT_KEY","IMPORT_URL","EXPORT_URL","exportUsers","ImportExportService","../urls/ExportRouter","../urls/ImportRouter","./ImportExportService","286","ImportType","ResultType","ImportController","disableButtons","showModal","inputRecords","importInput","filteredInputRecords","importTypes","resultTypes","newCreditsList","newGroupsList","modificationGroups","isFreePlanBuFull","loadGroupsList","updateCreditsLists","loadUserGroupsForSelector","enableButtons","areButtonsDisabled","canBeNullable","predefinedValue","getRegisterInputs","totalLines","inactiveUsersCount","record","errorsCount","rightCount","importType","USERS","openImportModal","openInvalidFileModal","getCEInputs","CE","getAllInputs","newUsersCount","createUserFlag","countNewCe","ALL","saveUsers","rowInputs","getGroupsIdsFromSelectableList","credits","uploadUsers","getFreePlanMessage","saveCE","uploadCE","saveAll","uploadAll","userCount","creditCount","filterResults","ERROR","newCeCount","closeModal","openCEModal","isSaveButtonEnabled","isSaveAllButtonEnabled","maxFreePlanUsers","getGroupsForCurrentBu","getCECreditsForCurrentBu","addGroups","selectGroup","groupsIds","unselectGroup","287","ImportController_1","ExportController_1","./ExportController","./ImportController","288","FormData","businessUnitsId","289","AboutCompanyController","ABOUT_COMPANY_MENU_KEY","290","FAQController","291","AboutCompanyController_1","FAQController_1","AccessibilityController_1","../accessibility/AccessibilityController","./AboutCompanyController","./FAQController","./IntroService","292","introJsObject","exit","introJs","setOptions","steps","buildLearnerHomePageOptions","buildAdministrationPageOptions","buildInstructorHomePageOptions","buildAttendeeManagerHomePageOptions","buildAuthorHomePageOptions","buildEditMaterialPageFirstOptions","buildEditMaterialPageSecondOptions","buildEditMaterialPageThirdOptions","buildEditMaterialPageFourthOptions","isMobileView","getElementsByName","intro","isTablet","lessThenMin","smallDisplay","screen","293","EventService","listeners","registerListener","unregisterListener","notify","294","EventService_1","constant","SESSION","./EventService","./Storage","295","StorageWrapper","stringified","parseJSON","296","../../common/CommonModule","../../content/ContentModule","../../security/SecurityModule","../../urls/UrlsModule","./AuthorizeNetService","297","amount","298","./AzureCognitiveServicesService","299","300","./AzureWebchatBotframeworkService","301","302","./FreeEnrollmentService","303","freeEnrollmentOrder","304","PayPalOrderCancellationController","orderId","deleteOrder","../../urls/PayPalRouter","./PayPalService","305","PayPalOrderConfirmationController","../../urls/FinancesRouter","306","purchaseOrderId","getExpirationDateForSubscription","getPurchasedOrdersReport","307","PayPalOrderCancellationController_1","PayPalOrderConfirmationController_1","./PayPalOrderCancellationController","./PayPalOrderConfirmationController","308","SystemPropertyKey_1","JobsController","sortedAsc","jobsMapKeys","activeJobsGroup","needsToFeelMap","ADMINISTRATION_CRON_JOBS_KEY","jobsGridModel","instancesGridModel","searchingTask","startJob","job","interruptJob","ClearSearchingTask","sortJobsByName","localeCompare","jobsMap","loadAllJobs","jobsGroups","SystemPropertyKey","jobsGroupJson","jobsGroup","../settings/models/SystemPropertyKey","309","JobsController_1","./JobsController","310","CourseCompletionOrder_1","LearningPathCreateEditController","languageSelected","learningPathCoursesLoaded","hasMandatoryCourse","courseSequenceNumber","LEARNING_PATH_ID_PARAM","hasLearningPathId","demandLearningPathPermissionsIf","addLearningPaths","getLearningPathInUse","loadLearningPathCourses","courseCompletionOrder","CourseCompletionOrder","FREE","LEARNING_PATH_KEY","cancelLearningPathPreviews","learningPathBreadcrumb","allowedCountOfElectiveCourses","electiveCoursesCount","onLanguageChange","./LearningPathProgressService","./LearningPathService","./models/CourseCompletionOrder","./models/LearningPathCourseInclusionType","311","LearningPathDetailsController","loadData","loadProgress","isFavorite","312","LearningPathGamificationDetailsController","313","LearningPathParticipationFormEditController","314","LearningPathParticipationFormFillController","315","LearningPathPermissionsDelegationController","updateViewAndStartLearningPathPermissions","editLearningPath","316","LearningPathPermissionsEditController","permissionsLoaded","updateLearningPathPermissions","317","LearningPathProgressController","learningPathUsers","isLearningPathUsersLoading","selectedCourseCertificates","isUserCourseProgressLoaded","loadLearningPathParticipationFormFields","loadLearningPathProgressesForUser","loadCourseProgressesForLearningPathProgress","loadLearningPathCertificates","selectedCourseId","selectedCourseProgressId","showLearningPathCourseProgressDetails","loadAllSelectedCourseData","getLearningPathProgressesForUser","userLearningPathProgresses","getCourseProgressesForLearningPathProgress","userCoursesProgresses","getLearningPathUsers","searchCourseProgressResults","selectedCourseProgress","selectedUserName","getSelectedUserName","searchUserResults","loadDataPromises","loadParticipationFormForCourseProgress","loadUserCourseCertificates","selectedCourseSections","selectedCourseProgressSectionProgresses","selectedCourseUserCertificates","selectedCourseParticipationForm","selectedCourseParticipationFormFields","318","getLearningPathProgressForUser","319","LearningPathRelatedProductsEditController","320","getLearningPathCourseInputs","courseInputs","sequenceNumber","inclusionType","getMyLearningPathsByIds","learningPathIds","getAttendeeManagerLearningPathsCount","321","LearningPathsController","homeCommonService","isInitializedSlick","322","LearningPathsController_1","LearningPathCreateEditController_1","LearningPathDetailsController_1","LearningPathParticipationFormEditController_1","LearningPathParticipationFormFillController_1","LearningPathPermissionsDelegationController_1","LearningPathProgressController_1","LearningPathRelatedProductsEditController_1","LearningPathPermissionsEditController_1","LearningPathGamificationDetailsController_1","../courses/CoursesModule","./LearningPathCreateEditController","./LearningPathDetailsController","./LearningPathGamificationDetailsController","./LearningPathParticipationFormEditController","./LearningPathParticipationFormFillController","./LearningPathPermissionsDelegationController","./LearningPathPermissionsEditController","./LearningPathProgressController","./LearningPathRelatedProductsEditController","./LearningPathsController","323","324","325","SecurityLogStatusEnum","SECURITY_LOG_STATUS_ENUM_VALUES","FAILED_INVALID_CREDENTIALS","FAILED_UNKNOWN_CREDENTIALS","FAILED_ACCESS_DENIED","SecurityLogActionEnum","SECURITY_LOG_ACTION_ENUM_VALUES","AUTHENTICATION","LOGOUT","AUTHORIZATION","326","SystemLogSourceEnum","SYSTEM_LOG_SOURCE_ENUM_VALUES","SERVER","CLIENT","USER_REPORT","SystemLogLevelEnum","SYSTEM_LOG_LEVEL_ENUM_VALUES","WARN","INFO","DEBUG","327","SecurityLogController_1","SystemLogController_1","SecurityLogController","SystemLogController","./SecurityLogController","./SystemLogController","328","ISecurityLog_1","IUser_1","securityActionTypes","securityLogStatuses","actionsFilter","statusesFilter","ADMINISTRATION_SECURITY_LOGS_KEY","forDateFilter","DEFAULT_FORMAT","securityLogsGridModel","fillSecurityActionTypes","fillSecurityLogStatuses","dateValue","statuses","actionTypes","formatMessage","trustAsHtml","isGuestUser","PredefinedUsersEnum","GUEST","isSystemUser","../users/models/IUser","./../IHttpGridService","./ISecurityLog","329","ISystemLog_1","systemLogLevels","systemLogSources","levelsFilter","sourcesFilter","ADMINISTRATION_SYSTEM_LOGS_KEY","systemLogsGridModel","fillSystemActionTypes","fillSystemLogStatuses","getWidth","./ISystemLog","330","MainController","settingsApi","isMainPage","toggleTopMenuVisibility","getActiveReferenceEntitiesForSelectorWithoutParams","REFERENCE_NAME","subjectReferenceEntities","_$inject","searchBySubject","../auth/LogOnController","331","MainService_1","MainController_1","MainService","./MainController","./MainService","332","333","EditMaterialController","filteredFileList","isErrorFileFormat","hasSubtitlesUrlCanceled","dropFromEdit","dropFromEditPreview","previewField","dropFromEditNote","materialSubjectChangeCallback","materialLanguageChangeCallback","materialOwnerChangeCallback","MATERIAL_ID_PARAM","isMultipleUpload","isEditMode","currentUserLocale","loadLanguageName","subtitlesName","createMaterialSuccessCallback","redirectOrClearFields","updateMaterialFieldsBeforeUpload","subtitlesUploadUrl","SUBTITLES_UPLOAD_URL_KEY","subtitlesUploadMethod","SUBTITLES_UPLOAD_METHOD_KEY","subtitlesId","logMaterialCreation","updateMaterialSuccessCallback","uploadPromise","cancelMaterialPreviews","cancelMaterialSubtitles","cancelMaterialFiles","cleanFields","resetSubtitles","restoreSubtitlesUrl","onFileUploadEditMode","checkFilesForFormatError","onFilesUploadCreationMode","fillMaterialListFromFileList","uploadMaterial","showPreview","isMaterialFileStatusReady","isAudioOrVideo","isPhoto","isVimeo","youtubeMultimediaSources","stopVideoAndAudioOnHidePreview","getMaterialValidity","../statistics/ActionLogService","../statistics/models/ActionType","./MaterialService","./models/MaterialType","334","PlaylistService_1","MaterialController","financeRouter","playlistService","disabledRemoveButton","anchorComplete","relatedMaterialsViewLimit","loadPermissionsPromises","materialPermissionsPromise","getMaterialPermissions","viewMaterialComment","loadCommentsCount","getRelatedMaterials","resultRelated","relatedMaterials","relatedMaterialsCurrentLimit","scrollAnchor","getFileTypeName","MATERIAL_VIEW","savedUrl","getCommentsCount","commentsCount","changeMaterialRating","isLike","changeObjectRating","likesCount","dislikesCount","liked","disliked","replyComment","editMaterial","deleteMaterial","findQuizzesByMaterial","isMaterialPurchased","findPlaylistsByMaterial","playlists","playlist","createMaterialDownloadActionLog","MATERIAL_DOWNLOAD","back","changeAuthorSubscription","subscribe","cancelReply","loadMaterialPage","hideShowRestRelatedMaterials","toggleReplyMessages","num","PlaylistService","./../courses/CourseService","./../personal/PersonalService","./../social/SocialService","./../tree/TreeElementsInfoFiller","./PlaylistService","335","MaterialPermissionsEditController","isMaterialLoaded","demandMaterialPermissions","updateMaterialPermissions","enableSaveButton","336","MaterialRelatedProductsEditController","337","getPublicInfo","isResetSubtitles","isExistMaterials","338","SearchController_1","MaterialController_1","MyDownloadsController_1","EditMaterialController_1","PlaylistsController_1","PlaylistDetailsController_1","PlaylistEditController_1","SocialModule_1","MaterialRelatedProductsEditController_1","MaterialPermissionsEditController_1","SocialModule","SearchController","MyDownloadsController","PlaylistsController","PlaylistDetailsController","PlaylistEditController","./../courses/CoursesModule","./../personal/PersonalModule","./../social/SocialModule","./../users/UsersModule","./EditMaterialController","./MaterialController","./MaterialPermissionsEditController","./MaterialRelatedProductsEditController","./MyDownloadsController","./PlaylistDetailsController","./PlaylistEditController","./PlaylistsController","./SearchController","339","watch","340","playlistId","PLAYLIST_ID_PARAM","MY_LIBRARY_PLAYLISTS_MENU_KEY","loadPlaylist","PLAYLIST_VIEW","getMaterialGlyphiconClass","available","searchPlaylist","341","playlistMaterials","playlistIdStr","hasPlaylistId","demandPlaylistPermissionsIf","playlistPermissions","loadPlaylistMaterials","ownerFullName","userMaterialsGridModel","getMaterials","getValidity","playlistDetailsUrl","addMaterialToPlaylist","removeMaterialFromPlaylist","342","343","addPlaylists","playlistCreateUrl","playlistsGridModel","getLanguages","languages","languagesStr","searchPlaylists","344","searchQuery","materialsUrl","searchViewType","showUploadDateFilter","isSidebarFilterHidden","applyTopType","searchMaterial","dateFrom","dateFromText","dateTo","dateToText","showPuchaseHint","setSearchViewType","isSearchViewTypeSelected","toggleSidebarFilterVisibility","../components/VhsSearchDirective","345","346","IMultimediaMaterialSettings","347","348","349","VIDEO_PLAYER_KEY","PREV_MATERIAL_KEY","350","HelpDetailsController","ONE_NEWS_ID_PARAM","getHelpDetails","newsId","./NewsService","351","NewsEditController","newsType","NEWS_TYPE_PARAM","addNews","demandNewsPermissionsIf","newsPermissions","loadNews","ALL_NEWS_MENU_KEY","newsTypeLocal","oneNewsUrl","newsSearchUrl","redirectToHelpDetailsOrClearFields","fullText","352","NewsSearchController_1","OneNewsController_1","NewsEditController_1","HelpDetailsController_1","NewsSearchController","OneNewsController","./HelpDetailsController","./NewsEditController","./NewsSearchController","./OneNewsController","353","stringSearch","newsGridModel","checkSubscription","openOneNews","oneNewsId","checkNewsSubscription","changeNewsSubscription","selectMessageNotFound","stringNotFound","354","deleteNewsById","355","NEWS","deleteNews","356","357","NotificationController","ADMINISTRATION_NOTIFICATION_TEMPLATE_KEY","358","NotificationCreateEditController","359","NotificationController_1","NotificationCreateEditController_1","./NotificationController","./NotificationCreateEditController","./NotificationService","360","referenceObjectId","361","NotificationEventKey","U_RST_PSWD","U_CHNG_LCTN","U_TRL_RGSR_URS","U_TRL_RGSR_ADM","S_EXTRA_USERS_RMNDER","P_PRCHS_CNCLD","CR_TRFR_ERR_MGR","C_CERT_EXP_RMNDER","P_PRCHS_EXP_RMNDER","C_INCMPL_RMNDER","C_START_RMNDER","C_ENRLMT_PDAPPRV_MGR_RMNDER","C_EXPIRED_RMNDER","C_CMPL","362","363","AssessmentsController_1","AssessmentsDetailsController_1","../assessments/AssessmentsController","../assessments/AssessmentsDetailsController","../reference/ReferenceModule","../settings/SettingsModule","../users/UsersModule","364","CalendarEventTypeEnum_1","SessionTypeEnum_1","CalendarController","onResizeFunction","destroyKendoGrid","changeViewArray","initKendoGrid","scheduler","logic","searchFilter","checkBoxesFilter","courseCheckbox","CalendarEventTypeEnum","AVAILABLE_COURSE","iltSessionCheckbox","iltFilter","NOT_REGISTERED_SESSION","SessionTypeEnum","ILT_SESSION","registeredOrWaitlistedCheckbox","REGISTERED_SESSION","viltSessionCheckbox","vIltFilter","vILT_SESSION","notAvailableForRegistrationCheckbox","NOT_AVAILABLE_SESSION","dataSource","PERSONAL_ACCOUNT_CALENDAR_MENU_KEY","getCalendarEvents","events","eventType","sessionType","isAllDay","getMinutes","listOfToolbarElements","ui","Scheduler","views","viewsForKendo","showWorkHours","footer","workDayStart","workDayEnd","resources","dataColorField","dataValueField","moveStart","resizeStart","wrapper","kendoTooltip","occurrenceByUid","tooltipDescription","onSchedulerEventClick","getByUid","openFilterModal","leftWidth","offsetLeft","./PersonalService","./models/CalendarEventTypeEnum","./models/SessionTypeEnum","365","isEmailSendingInProgress","PERSONAL_ACCOUNT_COURSES_CERTIFICATES_MENU_KEY","loadLearningObject","getOrganizationIdForUrl","linkedinOrganizationId","showCreationEmailModal","verificationUrl","xhr","XMLHttpRequest","issuedByText","responseXML","certificateImage","send","address","366","CouponsController","PERSONAL_ACCOUNT_COUPONS_MENU_KEY","367","PERSONAL_ACCOUNT_COURSES_MENU_KEY","addCourseToFavorites","removeCourseFromFavorites","368","CreditsController","PERSONAL_ACCOUNT_CREDITS_MENU_KEY","369","ExpiredCoursesController","370","ExpiredLearningPathsController","PERSONAL_ACCOUNT_EXPIRED_LEARNING_PATHS_MENU_KEY","371","FavoritesController","MY_LIBRARY_FAVORITES_MENU_KEY","favoritesGridModel","isMaterialObject","isPlaylistObject","sourceName","isCourseObject","loadFavoritePage","referenceObjectType","getContentTypeTitle","favoriteId","favoriteType","getReferenceObjectTypeFromString","getRemoveMessage","searchFavorites","372","PERSONAL_ACCOUNT_LEARNING_PATHS_MENU_KEY","decodeLearningPathProgressStatus","373","MyBadgesController","PERSONAL_ACCOUNT_BADGES_MENU_KEY","rewardBadgesGridModel","getBadgeType","sharedBadge","badgeImageUrl","badgeImage","pathname","374","NewCommentsController","objectComments","PERSONAL_ACCOUNT_NEW_COMMENTS_MENU_KEY","disableGetCommentsButton","objectsWithCommentsGridModel","showComments","getUserCommentsForObject","getObjectRoute","getGlyphiconClass","getNewsGlyphiconClass","getTypeTitle","getReferenceObjectTypeTitle","getObjectRouteForComment","375","PersonalMainController","showCreateEditAvatar","showSearchInput","currentPageIndex","personalMenu","changeRouteEvent","updateCurrentPageIndex","getTemplateForPath","currentPageIndexInterval","376","FavoritesController_1","UploadsController_1","QuizzesController_1","SubscriptionsController_1","NewCommentsController_1","SupportController_1","CouponsController_1","SettingsController_1","ExpiredCoursesController_1","ExpiredLearningPathsController_1","PurchasedOrdersController_1","CreditsController_1","CalendarController_1","PersonalMainController_1","MyBadgesController_1","UploadsController","QuizzesController","SubscriptionsController","SupportController","SettingsController","PurchasedOrdersController","./CalendarController","./CertificatesController","./CouponsController","./CreditsController","./ExpiredCoursesController","./ExpiredLearningPathsController","./FavoritesController","./MyBadgesController","./NewCommentsController","./PersonalMainController","./PurchasedOrdersController","./QuizzesController","./SettingsController","./SubscriptionsController","./SupportController","./UploadsController","377","objectVersion","authorId","loadSubscriptions","changeSubscriptions","subscriptions","sendMessageToSupport","messageToSupport","378","PERSONAL_ACCOUNT_PLAYLISTS_MENU_KEY","playlistViewType","setPlaylistViewType","searchGridModelObjects","addPlaylistToFavorites","removePlaylistFromFavorites","379","purchasedOrdersGridModel","disabledCancelButton","purchaseOrder","380","PERSONAL_ACCOUNT_QUIZZES_MENU_KEY","QUIZ_RESULT_ID_PARAM","381","hasCreatedQuizzes","quizViewType","disableGetQuizResultsButton","hasUserCreatedQuizzes","createdQuizzesGridModel","passedQuizzesGridModel","setQuizViewType","getQuizDetailsUrl","getQuizResultUrl","quizDetailsUrl","isPassed","isSubmitted","isFailed","382","noAvailableRoles","isLoadingImage","rolesForUserEyes","PERSONAL_ACCOUNT_SETTINGS_MENU_KEY","newUserProfile","loadUserLogon","saveProfileSettings","updateCurrentUserProfile","cancelProfileSettings","deleteMyAccount","logoutUrl","isDeletionAllowed","isEverythingDisabled","getAvailableUserRolesForCurrentUser","roles","availableRoles","./../settings/SettingsService","./../users/models/IUser","383","PERSONAL_ACCOUNT_SUBSCRIPTIONS_MENU_KEY","subjectsIds","allNewsSubscription","studentsNewsSubscription","commentsSubscription","loadNotificationsFrequency","changeSubscriptionsSettings","changeUserNotificationFrequency","notificationFrequencyId","cancelSubscriptionsSettings","frequency","notificationsFrequency","384","PERSONAL_ACCOUNT_SUPPORT_MENU_KEY","385","PERSONAL_ACCOUNT_UPLOADS_MENU_KEY","uploadsGridModel","386","387","388","CookiePolicyController","POLICIES_COOKIE_POLICY_LINK_KEY","389","PrivacyPolicyController_1","CookiePolicyController_1","TermsOfUseController_1","PrivacyPolicyController","TermsOfUseController","./CookiePolicyController","./PrivacyPolicyController","./TermsOfUseController","390","POLICIES_PRIVACY_POLICY_LINK_KEY","391","POLICIES_TERMS_OF_USE_LINK_KEY","392","QuizController","isQuizLoading","QUIZ_ID_PARAM","getMenuItem","passingUrl","./QuizService","./models/QuizResultStatus","393","ScaledAnswerQuestionType_1","NextQuestionType_1","QuizEditController","NEXT_QUESTION_SEQUENCE_NUMBER","END_OF_THE_QUIZ_SEQUENCE_NUMBER","currentQuestion","currentAnswers","currentExplanations","isEditQuestion","matchingOptionsHidden","fillableFormShowingInPopUp","openLoadMaterials","questionTabName","loadQuestions","quizIdStr","hasQuizId","addQuizzes","demandQuizPermissionsIf","quizPermissions","getQuizPermissions","userPermissions","QUIZ_TYPE","explanation","answerType","clearCurrentQuestionFields","nextQuestionType","NextQuestionType","NEXT_QUESTION","nextQuestionSequenceNumber","blockSpaces","onFileUpload","attachedFileName","getQuizForEditing","tagsList","END_OF_THE_QUIZ","saveQuiz","started","cancelQuiz","hasShortOrFillFormAnswer","POINTS","writeIndexes","fillQuestionsTags","filterQuizExplanations","oldQuestion","newQuestion","uploadAttachedFile","copyQuiz","copySurvey","copyFlashcard","editQuestionIndex","isAllQuizQuestionsValid","isMatchingQuestionValid","isShortAnswerQuestionValid","isSingleChoiceQuestionValid","isMultipleChoiceQuestionValid","isFillInTheBlankQuestionValid","isFillableFormQuestionValid","isFlashcardValid","isScaleQuestionValid","isHotspotQuestionValid","materialName","currentQuestionValid","checkCurrentCorrectAnswer","editQuestion","setAnswerType","setAnswerSubtype","showAsPopUp","addAnswerToQuestion","removeAnswerFromQuestion","addQuestionToQuiz","removeQuestionFromQuiz","SPECIFIED_QUESTION","getQuizPointsSum","moveQuestionUp","questionToMove","oldSequenceNumber","newSequenceNumber","moveQuestionDown","objectArray","setCurrentQuestionType","clearCorrectAnswers","answerSubtype","setQuestionSubtype","changeMatchingType","RESPONSE_DEFAULT_MAX_TEXT_LENGTH","RESPONSE_DEFAULT_MAX_AUDIO_LENGTH","subtype","ScaledAnswerQuestionType","YES_NO","RECOMMENDED_3_ANSWERS","AGREE_5_ANSWERS","isScaledAnswerYesNoSubtype","isScaledAnswerRecommended3AnswersSubtype","isScaledAnswerAgree5AnswersSubtype","addMaterialToQuiz","loadMaterials","onAnswerNextQuestionChange","onQuestionNextQuestionChange","getCancelQuizHref","getCancelSurveyHref","getCancelFlashcardHref","downloadQuizAsCsv","getQuizCsvToken","changePercentage","increaseNumberOfQuestions","./QuizImportExportService","./models/NextQuestionType","./models/QuestionType","./models/QuizType","./models/ScaledAnswerQuestionType","394","quizRowInputList","395","QuizPassingController","disableCompleteButton","getUserQuizCurrentResult","selectCurrentAnswer","stopQuiz","qFrom","qTo","returnToQuizzesDetails","396","quizTags","quizResultVersion","getCourseQuizResults","courseProgressIds","getQuizQuestions","getSurveyQuestions","getQuizQuestionsForQuiz","isIncludeInactive","quizResultIds","getAssessmentResult","questionsIds","397","quizTypes","setTypeParameters","createUrl","getNotFoundMessage","calcTotalCount","398","QuizEditController_1","QuizController_1","QuizPassingController_1","./QuizController","./QuizEditController","./QuizPassingController","399","400","401","402","403","404","405","ReferenceController","SUBJECTS_TAB_KEY","LANGUAGES_TAB_KEY","LEARNING_PATH_TYPES_TAB_KEY","COURSE_TYPES_TAB_KEY","SOURCES_TAB_KEY","SOURCE_TYPES_TAB_KEY","COMPLEXITY_LEVELS_TAB_KEY","CREDIT_TYPES_TAB_KEY","LOCATION_TYPES_TAB_KEY","LOCATIONS_TAB_KEY","EQUIPMENTS_TAB_KEY","viewReferenceData","REFERENCE_NAME_PARAM","ADMINISTRATION_SYSTEM_DICTIONARIES_MENU_KEY","getReferenceName","referenceDefaultValues","REFERENCE_DEFAULT_VALUES_PARAM","REFERENCE_FILTER_PARAM","referenceAssociationFilters","REFERENCE_ASSOCIATION_FILTERS_PARAM","referenceEntitiesGridModel","referenceSearchString","referenceSplitParam","getReferenceMetadata","referenceMetadata","getReferenceEditUrl","getStringInBrowserFormat","isMetaLoaded","isInternal","isCurrentUserSystemAdministrator","decodeAttributes","./../utils/StringBuilder","./ReferenceService","./ReferenceUtils","406","ReferenceMinValueValidator_1","ReferenceEditController","REDIRECT_TO_EDIT_REFERENCE_ITEM_MESSAGE","getAndRemoveStorageUrl","REFERENCE_ID_PARAM","hasReferenceId","addReferenceData","referenceDefaultValuesMap","getReferenceDefaultValuesMap","referenceAssociationFiltersMap","getReferenceAssociationFiltersMap","referenceValidationErrorsMap","referenceEntity","fixInputReferenceEntityAttributes","selectorAttribute","systemName","getReferenceUsage","setDefaultReferenceEntityAttributesValues","redirectStorageUrl","changeFilterEmit","updateCreditTypesName","isNeedUpdateCreditTypesName","openUpdateCreditTypesNameDialog","ReferenceMinValueValidator","defaultValue","defaultValueParts","property","associationFilter","associationFilterParts","association","defaultAttributes","attrType","attrSysName","isTextAttributeType","isHtmlAttributeType","convertStringDefaultValue","isNumberAttributeType","convertNumberDefaultValue","isBooleanAttributeType","convertBooleanDefaultValue","isDateAttributeType","convertDateDefaultValue","isMoneyAttributeType","convertMoneyDefaultValue","isOneAssociationAttributeType","convertOneAssociationDefaultValue","isManyAssociationAttributeType","convertManyAssociationDefaultValue","uses","usedInList","typeTextCap","isShowSystemName","arg1","arg2","./ReferenceRedirect","./validators/ReferenceIsRequiredValidator","./validators/ReferenceMaxLengthValidator","./validators/ReferenceMinValueValidator","./validators/ReferenceRequiredAttributesGroupValidator","407","ReferenceController_1","ReferenceEditController_1","./ReferenceController","./ReferenceEditController","408","urls","409","referenceParams","createReferenceFilterParams","getHierarchicalReferenceEntities","referenceHierarchicalProperty","getEmptyReferenceEntityNoMetadata","getAssociationReferencesMetadata","creditName","creditId","./models/IReferenceEntitiesParams","410","getBusinessUnitIdProperty","getEntityIdProperty","meta","convertStringAttribute","convertNumberAttribute","convertBooleanAttribute","convertDateAttribute","convertMoneyAttribute","convertGroupAttribute","groupTemplate","childAttributes","templateParts","convertOneAssociationAttribute","associationEntity","getEntityNameByAttribute","convertOneAssociationAttributeForGrid","associationAttribute","convertOneAssociationAttributeToNumber","convertManyAssociationAttributeToNumbers","ids","validStringAttribute","validNumberAttribute","validBooleanAttribute","validDateAttribute","validMoneyAttribute","validOneAssociationAttribute","validManyAssociationAttribute","validAttribute","attributeType","isGroupAttributeType","isAndLogicalOperatorType","logicalOperatorType","isOrLogicalOperatorType","411","412","utils","validationErrorsMap","editableAttributes","isRequired","413","attrMaxLength","414","attrMinValue","minValue","415","entityByRequiredAttributesGroupValid","entityByRequiredAttributesValid","requiredAttributesGroups","requiredAttrsGroup","firstAttr","416","PERSONIFY_SSO","APTIFY_SSO","417","PermissionsRepository","permissionsCache","expirationCache","clearCache","CACHE_CLEAR_INTERVAL","getPermissionsForObject","force","expired","expiredFromTime","CACHE_EXPIRATION_TIME","418","PermissionsRepository_1","permissionsRepository","getSecuredObjectPermissions","getPlaylistPermissions","PRODUCT","getNewsPermissions","getLearningPathPermissions","./PermissionsRepository","./permissions/SecuredObjectType","419","./PermissionsService","./SecurityService","420","condition","forwardToAccessDeniedOrRedirectLogOn","demandPlaylistPermissions","demandProductPermissionsIf","demandQuizPermissions","demandNewsPermissions","421","422","SsoReasonType","423","VIEW_MATERIAL","DOWNLOAD_MATERIAL","VIEW_COURSE","VIEW_QUIZ","VIEW_PLAYLIST","VIEW_LEARNING_PATH","AllGroupsPermissions","SYSTEM_CONFIGURATION_EDIT","SYSTEM_STORAGE_PLACES_EDIT","SYSTEM_VIEW_SECURITY_LOG","SYSTEM_VIEW_SYSTEM_LOG","SYSTEM_MANAGE_CRON_JOBS","SYSTEM_MANAGE_ANY_BU","NULL_BU_ONLY_SYSTEM_PERMISSIONS_IDS","RolesSpecificPermissions","SYSTEM_MY_ANALYTICS_VIEW","SYSTEM_COURSES_DISCUSSIONS_ACCESS","SYSTEM_ASSESSMENT_SCORE","SYSTEM_ANY_LEARNING_OBJECT_MANAGE","learnerSpecificPermissions","instructorSpecificPermissions","attendeeManagerSpecificPermissions","authorSpecificPermissions","administratorSpecificPermissions","424","BADGE","425","CommonSettingsController","ADMINISTRATION_COMMON_SETTINGS_MENU_KEY","loadSettings","getSystemCommonSettings","saveSettings","./SettingsService","426","CommonSettingsController_1","StoragePlacesRegistryController_1","StoragePlaceEditController_1","SystemSettingsController_1","SystemBrandingController_1","StoragePlacesRegistryController","StoragePlaceEditController","SystemSettingsController","SystemBrandingController","./CommonSettingsController","./StoragePlaceEditController","./StoragePlacesRegistryController","./SystemBrandingController","./SystemSettingsController","427","getStoragePlaces","getStoragePlace","createStoragePlace","storagePlace","updateStoragePlace","setStoragePlaceActive","RESET_CURRENT_DATE_TIMEOUT_MS","getSystemProperty","systemPropertyId","setSystemProperty","428","StorageTypeEnum_1","externalUrl","connectionString","login","capacity","usedSpace","secured","availableStorageTypes","ADMINISTRATION_STORAGE_PLACES_MENU_KEY","storagePlaceId","StorageTypeEnum","storagePlaceEditUrl","storagePlacesIndexUrl","./models/StorageTypeEnum","429","editStoragePlaces","storagePlaceCreateUrl","storagePlacesGridModel","isUserAccessedToBusinessUnit","430","431","HomepageTypeEnum_1","settingsMapKeys","activeGroup","HomepageTypeEnum","LEARNING_PATHS","COURSES","MATERIALS","CATALOG","HOME","settingsMap","groupsJson","saveSetting","currentSettings","./models/HomepageTypeEnum","./models/SystemPropertyKey","432","433","434","DEFAULT_LOCALE","SUPPORT_EMAIL","SYSTEM_LOGS_LEVEL","SYSTEM_STORAGE_FILE_DUPLICATE","COURSE_SERTIFICATE_LAST_NUMBER","NOTIFICATIONS_COURSE_SECTION_COMPLETION_ENABLED","SYSTEM_PURCHASES_ORDER_DATE_FROM","SYSTEM_ENABLE_STORAGE_SNAPSHOTS","LOGO_HOME_PAGE","LEARNING_PATH_CERTIFICATE_LAST_NUMBER","LRS_LAST_PROCESSED_COURSE_ACTION_LOG_ID","LRS_LAST_PROCESSED_LEARNING_PATH_ACTION_LOG_ID","LRS_LAST_PROCESSED_USER_CREDIT_ID","ALLOWED_EMAILS","QUESTIONS_TAGS","ENABLE_FILE_UPLOADS_SHORT_ANSWER","DAYS_CERTIFICATE_EXPIRATION_NOTIFICATION","CERTIFICATE_EXPIRATION_NOTIFICATION_LAST_DATE","PURCHASE_EXPIRATION_NOTIFICATION_LAST_DATE","DAYS_COURSE_STATUS_EVENT_NOTIFICATION","COURSE_INCOMPLETION_NOTIFICATION_LAST_DATE","COURSE_EXPIRATION_NOTIFICATION_LAST_DATE","COURSE_START_NOTIFICATION_LAST_DATE","COURSE_APPROVAL_ENROLLMENT_SEAT_LAST_DATE","POWER_BI_EMBEDDED_REPORT_DEFAULT","POWER_BI_EMBEDDED_REPORT_GROUP_PROGRESS","BUSINESS_UNIT_LEVEL_CATALOG","EMBEDDED_REPORTS","EMAIL_LOGO_IMAGE_ID","USERS_ACTIVITY_REPORT_LAST_DATE","CALENDAR_VISIBILITY","BUSINESS_UNIT_LEVEL_COURSES","BUSINESS_UNIT_LEVEL_LEARNING_PATHS","BUSINESS_UNIT_LEVEL_DISCUSSION_BOARD","BUSINESS_UNIT_LEVEL_MATERIALS","BUSINESS_UNIT_LEVEL_QUIZZES","REDIRECT_URL_LOGO","REDIRECT_URL_HELP_PAGE","REDIRECT_ABOUT_US_PAGE","ALLOW_GLOBAL_USERS_TO_SELF_REPORT_TRAININGS_CREDITS","CERTIFICATE_EXPIRATION_REMINDER_LAST_DATE","ACTIVITY_LAST_PROCESSED_COURSE_ACTION_LOG_ID","ACTIVITY_COURSE_ACTION_LOGS_BATCH_SIZE","435","getSlideTemplate","updateSlideTemplate","createSlideTemplate","uploadSlideTemplate","setActiveSlideTemplate","uploadSlideTemplateThumbnail","createSlideTemplateRegistryBundle","getSlideTemplateBundleFiles","436","ADMINISTRATION_SLIDE_TEMPLATE_KEY","createSlideTemplateBundleFn","createSlideTemplateBundle","./SlideService","437","slidesGridModel","getSlideEditUrl","getBundleIds","bundleFileNameCSS","cssFileUrl","slideBundle","bundleFileNameJS","jsFileUrl","slideTemplateLoadAtStartBundlesText","hideIfMobileVersion","downloadFile","lastPageInSlideTemplates","438","slideContent","slideId","SLIDE_ID_PARAM","hasSlideId","slideFileTitle","bundleFileNames","bundleFileNameCSSList","bundleFileNameJSList","saveSlideTemplate","newSlideTemplateFile","slideTemplateThumbnail","removeSlideTemplate","fetch","setSlideTemplateBundleFileName","bundleFileName","containsBundleFileName","439","./SocialService","440","441","actionType","442","BaseReportController","regional","monthNames","monthNamesShort","dayNames","dayNamesShort","443","courseActionLog","444","__extends","__","BaseReportController_1","MaterialReportTarget_1","ReportGroupType_1","ReportWriters_1","ReportTargetNamesMaker_1","MaterialDownloadReportController","_super","lineDiagramsReportWriter","LineDiagramsReportWriter","groupType","ReportGroupType","DAYS","materialTypeIds","lineDiagramsReportData","lineDiagramsReportOptions","getLineDiagramsReportOptions","ANALYTICS_MATERIAL_DOWNLOAD_REPORT_MENU_KEY","viewAnalytics","reportTarget","MaterialReportTarget","OWNERS","reportTargetNamesMaker","OwnerNamesMaker","MATERIAL_TYPES","MaterialTypeNamesMaker","viewReportGroupByDays","refreshReport","viewReportGroupBy","viewReportGroupByWeeks","WEEKS","viewReportGroupByMonths","MONTHS","viewReportGroupByYears","YEARS","viewMaterialDownloadReport","report","make","markerOptions","reporting","isCurrentOwnersReportTarget","isCurrentMaterialTypesReportTarget","isCurrentSubjectsReportTarget","SUBJECTS","setCurrentOwnersReportTarget","setCurrentReportTarget","setCurrentMaterialTypesReportTarget","setCurrentSubjectsReportTarget","SubjectNamesMaker","./BaseReportController","./StatisticReportsService","./models/MaterialReportTarget","./models/ReportGroupType","./utils/ReportOptions","./utils/ReportTargetNamesMaker","./utils/ReportWriters","445","MaterialUploadReportController","ANALYTICS_MATERIAL_UPLOAD_REPORT_MENU_KEY","viewMaterialUploadReport","446","MaterialViewReportController","ANALYTICS_MATERIAL_VIEW_REPORT_MENU_KEY","viewMaterialViewReport","447","PowerBiReportController","isEmbeddedLink","REPORT_TYPE_KEY_PARAM","getConfiguratedPowerBiLink","frameUrl","fullScreen","../urls/StatisticsRouter","448","fillMissingDate","groupedValues","valueMap","newValues","getUnitOfTime","unixTime","449","MaterialViewReportController_1","MaterialDownloadReportController_1","MaterialUploadReportController_1","PowerBiReportController_1","./ActionLogService","./CourseActionLogService","./MaterialDownloadReportController","./MaterialUploadReportController","./MaterialViewReportController","./PowerBiReportController","450","451","452","453","454","reportName","legend","renderer","placement","rowSpacing","rendererOptions","seriesToggle","seriesToggleReplot","resetAxes","highlighter","yaxis","diagramName","customOpts","seriesColors","seriesDefaults","fill","barDirection","varyBarColor","barWidth","tooltipOffset","tooltipAxes","tooltipLocation","showGridline","labelRenderer","455","456","457","./UploadsService","458","queue","UPLOAD_PARALLEL_FILES","currentlyUploadableFilesMap","fileProgressFunc","uploaded","guid","cup","fileCompleteFunc","abortFunc","successFunc","errorFunc","uploadParallelFiles","FileAPI","cors","abort","cancelByKey","filterFiles","uploadOneFile","cuf","uploadMethod","chunkSize","KB","chunkUploadRetry","fileprogress","filecomplete","459","fn","phase","$root","$$phase","460","TreeElementState_1","fillHierarchyInfo","gridTreeElements","MAX_VISIBLE_LEVEL","maxVisibleLevel","initHierarchyElement","childrenOnLevels","lastElementsOnLevels","previousLevel","currentLevel","FIRST_LEVEL","isLastChild","state","TreeElementState","EXPANDED","COLLAPSED","expand","./models/TreeElementState","461","462","463","464","DEFAULT_BU_LEVEL","buLevel","generalUrl","generalRoute","brandingUrl","brandingRoute","menuItemsUrl","menuItemsRoute","subscriptionUrl","subscriptionRoute","465","466","467","ContentRouter","468","indexPurchasedOrderUrl","progressRouteUser","infoUrl","enrollmentDetailsUrl","MODULE_ID_PARAM","SECTION_ID_PARAM","surveyResultsUrl","469","470","zoomUrl","471","purchasedOrderUrl","nacePurchasedOrderUrl","productEditUrl","referencedObjectProductEditUrl","472","editProgramUrl","programId","createProgramUrl","actionBadgesEditUrl","actionBadgesViewUrl","toggleGameActiveUrl","templatesUrl","toggleActiveRoute","473","addRoleRouteParam","authorLearningPathsUrl","authorQuizzesUrl","authorSurveysUrl","authorFlashcardsUrl","authorMaterialsUrl","authorReportsUrl","flashcardsUrl","reportsUrl","authorMenuUrl","administrationReportsUrl","attendeeManagerHomeUrl","participantsTypeRoute","attendeeManagerCoursesUrl","attendeeManagerLearningPathsUrl","attendeeManagerReportsUrl","instructorCoursesUrl","instructorLearningPathsUrl","instructorReportsUrl","route","474","475","aboutProjectUrl","aboutProjectRoute","contactsUrl","contactsRoute","476","jobsUrl","477","permissionsUpdateUrl","478","systemLogsUrl","securityLogsUrl","479","480","myDownloadsUrl","playlistsUrl","playlistEditUrl","481","oneNewsEditUrl","oneNewsCreateUrl","helpEditUrl","482","483","orderCancellationUrl","orderConfirmationUrl","484","favoritesUrl","favoritesRoute","uploadsUrl","uploadsRoute","coursesRoute","learningPathsRoute","certificatesUrl","quizzesRoute","subscriptionsUrl","newCommentsUrl","couponsUrl","couponsRoute","expiredCoursesUrl","expiredCoursesRoute","expiredLearningPathsUrl","expiredLearningPathsRoute","purchasedOrdersUrl","creditsUrl","calendarUrl","485","486","stringBuilder","locationPath","generalSurveyUrlComponent","generalQuizUrlComponent","generalFlashcardUrlComponent","487","488","489","materialViewReportUrl","materialDownloadReportUrl","materialUploadReportUrl","powerBiReportUrl","490","commonSettingsUrl","STORAGE_PLACE_ID_PARAM","systemBundleEditUrl","491","492","ContentRouter_1","./AssessmentsRouter","./AuthRouter","./BusinessUnitsRouter","./CertificateTemplatesRouter","./CommonRouter","./ContentRouter","./CoursesRouter","./ExportRouter","./ExternalResourcesRouter","./FinancesRouter","./GamificationRouter","./HomeRouter","./ImportRouter","./InfoRouter","./JobsRouter","./LearningPathsRouter","./LogsRouter","./MainRouter","./MaterialsRouter","./NewsRouter","./NotificationTemplatesRouter","./PayPalRouter","./PersonalRouter","./PoliciesRouter","./QuizzesRouter","./ReferenceRouter","./SlideTemplatesRouter","./StatisticsRouter","./SystemSettingsRouter","./UrlServiceProvider","./UsersRouter","493","addUrl","signupUrl","currentProfileUrl","profileId","groupsIndexUrl","groupsAddUrl","groupEditUrl","GROUP_ID_PARAM","groupManagePermissionsUrl","mergeUrl","494","CurrentUserProfileController","usersApi","userRouter","USER_PROFILE_MENU_KEY","localeInfo","./UserService","./models/IUser","495","GroupEditController","usersService","permissionsIds","buallowed","showUsersNotInGroup","areDisallowedCoursesShown","areDisallowedLPsShown","selectAllToRemove","selectAllToAdd","selectedItemsIdsToRemove","selectedItemsIdsToAdd","sortProperty","reverseSorting","ADD_MODE","REMOVE_MODE","currentMode","searchInputToRemove","searchInputToAdd","tableTab","searchFocus","USERS_TAB_KEY","COURSES_TAB_KEY","LEARNING_PATHS_TAB_KEY","activeTabKey","onPermissionsChange","ADMINISTRATION_GROUPS_MENU_KEY","loadGroup","initGrids","setDisabledPermissions","getActiveGroupsEntities","disabledPermissionsIds","groupChangesWatcher","getGroup","getActiveGroupsNoChildren","getActiveGroups","groupsEntities","getUsersEmailAddresses","emailAddress","groupUsersGridModel","sendEmailGroupMembersNotification","updateGroup","createGroup","editGroup","setActiveGroupWithChildren","loadGroupUsers","loadGroupCourses","courseGridModel","loadGroupLPs","addUserGroupPermissions","usersIds","closeAddUsersToGroupModal","removeUserGroupsPermissions","notInGroupGridModel","removeAllItemsPermissions","removeFunc","removeCoursesPermissions","removeLearningPathsPermissions","isThereSomeSelected","disallowedCoursesGridModel","disallowedLearningPathsGridModel","isGridEmpty","showAllUsersNotInGroup","businessUnitsIdList","showModalUnavailabilityRoles","addCoursesPermissions","coursesIds","closeAddCoursesToGroupModal","addLearningPathsPermissions","lpIds","closeAddLearningPathsToGroupModal","lpId","learningPathsIds","showDisallowedCourses","showDisallowedLearningPaths","setSearchString","resetPagination","setActiveTab","tabKey","showAddItemsModal","showAddUsersToGroupModal","showAddCoursesToGroupModal","showAddLearningPathsToGroupModal","getAddItemsButtonName","selectItem","itemId","sortBySelected","isFormValid","../security/permissions/IPermission","496","GroupManagePermissionsController","manageGroupPermissions","updateGroupPermissions","497","GroupsController","groupsGridModel","getGroupEditUrl","activateGroup","498","UserEditController","ipAddressRanges","logonProviders","logonProvidersForAdd","groupById","userGroupList","ipAddressRange","editingIpAddressRange","showedIpAddressTab","userRole","unavailableRole","nextRoleByPriorityName","roleUnavailableMessage","nextRoleByPriorityMessage","userRoles","isLoadingLogonProvider","currentDynamicIP","ADMINISTRATION_USERS_MENU_KEY","createUser","loadAllowedBusinessUnits","loadGroups","loadLogonProviders","checkFreePlanForBU","loadRoles","changeLogonProvider","addUserLogon","cancelUserEdit","isDeactivationAllowed","dynamicIp","loadUserGroups","loadUserBusinessUnits","loadUserLogons","loadIpAddressRanges","loadGroupsOnCreate","loadGroupsOnEdit","onlyUniqueRoles","capitalizeFirstLetter","string","groupsList","getAvailableUserRoles","getGroups","userGroupsListForEditing","getUserGroups","getAllowedBusinessUnits","allowedBusinessUnits","recalculateAvailableLogonProviders","canBeRemoved","ADMIN","SYS_ADMINS","userGroup","getUserLogons","getUserBusinessUnits","localLogonProvider","businessUnitIdsWithFreePlan","resetPassword","generateRandomPassword","notifyCreated","setActive","safeGroupSelect","immutable","updateUserGroups","found","getLogonProviderName","removeUserLogon","logonIndex","isPasswordMatchedConfirmPassword","deleteAccount","loadCreditTypesAvailableForUser","forBusinessUnit","loadUserCreditTypes","getUserCreditTypes","updateUserCreditTypes","newCredits","getIpAddressRanges","clearIpAddressRangeForm","saveIpAddressRange","fromIp","toIp","isIPv6","updateIpAddressRange","saveDynamicIp","updateDynamicIp","cancelIpAddressRangeAdd","editIpAddressRange","removeIpAddressRange","ipAddressRangeId","enforceIpVerification","timeoutId","validateIpAddressRange","showModalDialog","isShowGroupLink","selectAllBU","selectDeselectBU","alphabet","passwordLength","rand","decodeLogonProvider","loginAsUser","loginAsThisUser","./models/IGroup","499","startTrial","companyDomain","mergeUsers","presentUserId","presentUserVersion","outdatedUserId","outdatedUserVersion","userUpdateInput","getGroupsWithoutExcludedGroupsForSelector","frequencyId","newCreditTypes","userCreditId","getUserCredit","500","UserSignupController","doCancel","./../security/LogonProviderEnum","501","SsoReasonType_1","UserStartTrialController","isLegalAgreementAccepted","signUpMode","redirectToAutoSso","proceedTrialAfterSsoExchange","encodedUserInfo","getUserInfo","logOnAfterRegistration","businessUnitSubscriptions","isDomainValid","redirectToLogin","START_TRIAL","base64String","externalUserId","../security/SsoReasonType","502","UsersListController","usersGridModel","getAddRoute","deactivateLink","pointer-events","503","UsersMergeController","presentUser","outdatedUser","outdatedUserChangeCallback","loadOutdatedUser","loadPresentUser","loadPresentUserLogons","loadOutdatedUserLogons","mergeAccounts","redirectToEditUser","504","CurrentUserProfileController_1","UserEditController_1","UserSignupController_1","UserStartTrialController_1","UsersListController_1","GroupsController_1","GroupEditController_1","UsersMergeController_1","GroupManagePermissionsController_1","./CurrentUserProfileController","./GroupEditController","./GroupManagePermissionsController","./GroupsController","./UserEditController","./UserSignupController","./UserStartTrialController","./UsersListController","./UsersMergeController","505","506","507","508","currentUserBUIds","509","mp3","mp4","mov","jpg","png","txt","docx","ppt","pptx","pdf","xls","xlsx","epub","zip","7z","510","./ContentUtils","./RandomUtils","511","sourceElement","targetClass","attrName","512","../settings/models/HomepageTypeEnum","513","SELECTED_POINT","context","arc","EXTERNAL_RADIUS","PI","INTERNAL_RADIUS","point","rect","setLineDash","closePath","exline","p1","p2","side","isIntersect","direction","onLine","l1","l2","dir1","dir2","dir3","dir4","scaledSelectedPoint","scaleRectangle","rectangle","scaledRectangle","scaleCircle","circle","scaledCircle","scalePolygon","polygon","scaledPolygon","scalePoint","shapesToSerialize","canvasCoords","514","ESCAPE","515","516","externalRouter","learnerMenuGroup","administratorMenuGroup","viewMyAnalytics","attendeeManagerGroup","HOME_ATTENDEE_MANAGER_USERS_KEY","viewUsers","instructorGroup","HOME_INSTRUCTOR_ASSESSMENTS_KEY","authorGroup","viewGroups","viewSystemLog","viewSecurityLog","editNotificationTemplates","ADMINISTRATION_LEARNING_CONTENT_MENU_KEY","ADMINISTRATION_TEMPLATE_KEY","ADMINISTRATION_CERTIFICATE_TEMPLATE_KEY","BUSINESS_UNIT_GENERAL_KEY","BUSINESS_UNIT_BRANDING_KEY","BUSINESS_UNIT_SUBSCRIPTION_KEY","BUSINESS_UNIT_MENU_ITEMS_KEY","ANALYTICS_POWER_BI_REPORT_MENU_KEY","ADMINISTRATION_PROGRESS_KEY","ADMINISTRATION_SYSTEM_MENU_KEY","manageCronJobs","ADMINISTRATION_LOGS_MENU_KEY","allowedForSystem","ADMINISTRATION_SUBJECTS_MENU_KEY","ADMINISTRATION_LANGUAGES_MENU_KEY","ADMINISTRATION_LEARNING_PATH_TYPES_MENU_KEY","ADMINISTRATION_COURSE_TYPES_MENU_KEY","ADMINISTRATION_SOURCES_MENU_KEY","ADMINISTRATION_SOURCE_TYPES_MENU_KEY","ADMINISTRATION_COMPLEXITY_LEVELS_MENU_KEY","ADMINISTRATION_CREDIT_TYPES_MENU_KEY","ADMINISTRATION_LOCATION_TYPES_MENU_KEY","ADMINISTRATION_LOCATIONS_MENU_KEY","ADMINISTRATION_EQUIPMENTS_MENU_KEY","ASSESSMENTS_MENU_KEY","PERSONAL_ACCOUNT_MENU_KEY","../urls/ExternalResourcesRouter","../urls/LogsRouter","../urls/ReferenceRouter","./AppProperties","./MenuHelper","517","updateMenuListeners","PROFILE_MENU_KEY","EDUCATION_MENU_KEY","MY_LIBRARY_MENU_KEY","ANALYTICS_MATERIAL_STATISTICS_MENU_KEY","ANALYTICS_UPLOADS_MENU_KEY","OPERATIONS_ACCOUNT_MANAGEMENT_MENU_KEY","NEWS_MENU_KEY","INFO_MENU_KEY","ABOUT_PROJECT_MENU_KEY","CONTACTS_MENU_KEY","HOME_ADMINISTRATION_INDEX_KEY","HOME_ATTENDEE_MANAGER_MENU_KEY","HOME_INSTRUCTOR_MENU_KEY","HOME_AUTHOR_MENU_KEY","518","unix","firstDate","secondDate","minIntervalInSeconds","519","paths","520","MaterialType_2","isNewObject","getReferencedObjectTypeAsString","getReferencedObjectTypeAsNumber","521","addActionLink","LINK_TEMPLATE","preserveLinks","updateHeader","newStr","STATUS_TEMPLATE","STATUS_WITH_TOOLTIP_TEMPLATE","headerInfo","pageHeaderListeners","removePageHeaderUpdateListener","522","DEFAULT_LANGUAGE_ID","ENGLISH_LANGUAGE_ID","FRENCH_LANGUAGE_ID","SPANISH_LANGUAGE_ID","523","fromCharCode","524","525","526","semaphores","checkNew","uid","handler","setByUid","semaphore","executeWithTimeout","$self","527","uploadLearningPathByChunks","LEARNING_PATH_PREVIEW_KEY","successUrl","abortUrl","errorUrl","MATERIAL_PREVIEW_KEY","uploadCourseByChunks","COURSE_PREVIEW_KEY","callbackFunc","BUNDLE_KEY","FILE_KEY","MATERIAL_SUBTITLES_KEY","MATERIAL_FILE_KEY","528","serviceUrl","UrlBuilder","appendQueryParam","cacheable","529","./MenuConfiguratorService","./UploadUtils","530","TimeZoneType","currentTimeZoneOffset","jan","jul","isSummerTime","minTimeOffsetDifference","defaultTimeZone","timezoneOffset"],"mappings":"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","file":"app.js","sourcesContent":["require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o {\n var current = {}\n var sections = []\n var start = false;\n var vttArray = vttString.split('\\n');\n vttArray.forEach((line, index) => {\n if (line.replace(/<\\/?[^>]+(>|$)/g, \"\") === \" \"){\n } else if (line.replace(/<\\/?[^>]+(>|$)/g, \"\") == \"\") {\n } else if (line.indexOf('-->') !== -1 ) {\n start = true;\n\n if (current.start) {\n sections.push(clone(current))\n }\n\n current = {\n start: timeString2ms(line.split(\"-->\")[0].trimRight().split(\" \").pop()),\n end: timeString2ms(line.split(\"-->\")[1].trimLeft().split(\" \").shift()),\n part: ''\n }\n } else if (line.replace(/<\\/?[^>]+(>|$)/g, \"\") === \"\"){\n } else if (line.replace(/<\\/?[^>]+(>|$)/g, \"\") === \" \"){\n } else {\n if (start){\n if (sections.length !== 0) {\n if (sections[sections.length - 1].part.replace(/<\\/?[^>]+(>|$)/g, \"\") === line.replace(/<\\/?[^>]+(>|$)/g, \"\")) {\n } else {\n if (current.part.length === 0) {\n current.part = line\n } else {\n current.part = `${current.part} ${line}`\n }\n // If it's the last line of the subtitles\n if (index === vttArray.length - 1) {\n sections.push(clone(current))\n }\n }\n } else {\n current.part = line\n sections.push(clone(current))\n current.part = ''\n }\n }\n }\n })\n\n current = []\n\n var regex = /(<([0-9:.>]+)>)/ig\n sections.forEach(section => {\n strs = section.part.split()\n var results = strs.map(function(s){\n return s.replace(regex, function(n){\n return n.split('').reduce(function(s,i){ return `==${n.replace(\"<\", \"\").replace(\">\", \"\")}` }, 0)\n })\n });\n cleanText = results[0].replace(/<\\/?[^>]+(>|$)/g, \"\");\n cleanArray = cleanText.split(\" \")\n resultsArray = [];\n cleanArray.forEach(function(item){\n if (item.indexOf('==') > -1) {\n var pair = item.split(\"==\")\n var key = pair[0]\n var value = pair[1]\n if(key == \"\" || key == \"##\") {\n return;\n }\n resultsArray.push({\n word: cleanWord(item.split(\"==\")[0]),\n time: timeString2ms(item.split(\"==\")[1]),\n })\n } else {\n resultsArray.push({\n word: cleanWord(item),\n time: undefined,\n })\n }\n })\n section.words = resultsArray;\n section.part = section.part.replace(/<\\/?[^>]+(>|$)/g, \"\")\n })\n resolve(sections);\n })\n}\n\n// helpers\n// http://codereview.stackexchange.com/questions/45335/milliseconds-to-time-string-time-string-to-milliseconds\nfunction timeString2ms(a,b){// time(HH:MM:SS.mss) // optimized\n return a=a.split('.'), // optimized\n b=a[1]*1||0, // optimized\n a=a[0].split(':'),\n b+(a[2]?a[0]*3600+a[1]*60+a[2]*1:a[1]?a[0]*60+a[1]*1:a[0]*1)*1e3 // optimized\n}\n\n// removes everything but characters and apostrophe and dash\nfunction cleanWord(word) {\n return word.replace(/[^0-9a-z'-]/gi, '').toLowerCase()\n}\n\nfunction clone(obj) {\n if (null == obj || \"object\" != typeof obj) return obj;\n var copy = obj.constructor();\n for (var attr in obj) {\n if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];\n }\n return copy;\n}\n\n\nmodule.exports = convertVttToJson;\n\n},{}],2:[function(require,module,exports){\n(function (EmbeddedReportTypeKey) {\r\n EmbeddedReportTypeKey[EmbeddedReportTypeKey[\"DEFAULT\"] = 0] = \"DEFAULT\";\r\n EmbeddedReportTypeKey[EmbeddedReportTypeKey[\"GROUP_PROGRESS\"] = 1] = \"GROUP_PROGRESS\";\r\n})(exports.EmbeddedReportTypeKey || (exports.EmbeddedReportTypeKey = {}));\r\nvar EmbeddedReportTypeKey = exports.EmbeddedReportTypeKey;\r\n},{}],3:[function(require,module,exports){\nvar PageMode_1 = require(\"./PageMode\");\r\nvar PersistedGridModelConfiguration = (function () {\r\n function PersistedGridModelConfiguration() {\r\n }\r\n PersistedGridModelConfiguration.fromGridModel = function (gridModel) {\r\n var persisted = new PersistedGridModelConfiguration();\r\n persisted.pageSize = gridModel.pageSize;\r\n persisted.gridColumns = gridModel.gridColumns;\r\n persisted.sortEntries = gridModel.sorting;\r\n persisted.filter = {};\r\n if (gridModel.filter) {\r\n for (var fieldName in gridModel.filter) {\r\n if (gridModel.filter.hasOwnProperty(fieldName) && gridModel.nonPersistedFilterFields.indexOf(fieldName) < 0) {\r\n persisted.filter[fieldName] = angular.copy(gridModel.filter[fieldName]);\r\n }\r\n }\r\n }\r\n return persisted;\r\n };\r\n return PersistedGridModelConfiguration;\r\n})();\r\nexports.PersistedGridModelConfiguration = PersistedGridModelConfiguration;\r\nvar GridColumn = (function () {\r\n function GridColumn() {\r\n this.visible = true;\r\n this.alwaysVisible = false;\r\n this.fixedColumn = false;\r\n }\r\n GridColumn.prototype.reverseVisibility = function () {\r\n this.visible = !this.visible;\r\n };\r\n return GridColumn;\r\n})();\r\nexports.GridColumn = GridColumn;\r\nvar GridModel = (function () {\r\n function GridModel(loadEntitiesApi) {\r\n this.entries = [];\r\n this.sorting = [];\r\n this.gridColumns = [];\r\n this.totalCount = 0;\r\n this.totalCountRevised = 0;\r\n this.requestsPageMode = PageMode_1.PageMode[PageMode_1.PageMode.ENTRIES_AND_TOTAL_ESTIMATES];\r\n this.totalPageCount = 1;\r\n this.currentPage = 0;\r\n this.selectedPage = 1;\r\n this.pageSize = GridModel.DEFAULT_PAGE_SIZE;\r\n this.filter = {};\r\n this.nonPersistedFilterFields = [\"searchString\"];\r\n this.isLoading = false;\r\n this.showSpinner = true;\r\n this.isTotalLoading = false;\r\n this.disablePagination = false;\r\n this.loadListeners = [];\r\n this.columnsListeners = [];\r\n this.pageSizeListeners = [];\r\n this.loadEntitiesFunction = loadEntitiesApi;\r\n }\r\n GridModel.prototype.setDefaultPageSize = function () {\r\n this.pageSize = GridModel.DEFAULT_PAGE_SIZE;\r\n return this;\r\n };\r\n GridModel.prototype.setMaxPageSize = function () {\r\n this.pageSize = GridModel.MAX_PAGE_SIZE;\r\n return this;\r\n };\r\n GridModel.prototype.addSortEntry = function (sortEntry) {\r\n this.sorting.push(sortEntry);\r\n return this;\r\n };\r\n GridModel.prototype.addLoadingListener = function (listener) {\r\n this.loadListeners.push(listener);\r\n };\r\n GridModel.prototype.clearLoadListeners = function () {\r\n this.loadListeners.splice(0, this.loadListeners.length);\r\n };\r\n GridModel.prototype.addColumnVisibilityListener = function (listener) {\r\n this.columnsListeners.push(listener);\r\n };\r\n GridModel.prototype.addPageSizeListener = function (listener) {\r\n this.pageSizeListeners.push(listener);\r\n };\r\n GridModel.prototype.loadPage = function (pageNumber) {\r\n this.loadPageForFilter(pageNumber, this.filter);\r\n };\r\n GridModel.prototype.loadWithDelay = function (timeoutUtils, uuid) {\r\n var _this = this;\r\n timeoutUtils.processWithDelay(uuid, function (a) { return _this.loadPage(0); }, 300);\r\n };\r\n GridModel.prototype.loadCurrentPage = function () {\r\n this.loadPageForFilter(this.currentPage, this.filter);\r\n };\r\n GridModel.prototype.loadPageForFilter = function (pageNumber, filter, pageMode) {\r\n var _this = this;\r\n this.disablePagination = true;\r\n this.isLoading = true;\r\n for (var i = 0; i < this.loadListeners.length; i++) {\r\n var listener = this.loadListeners[i];\r\n listener.startLoading();\r\n }\r\n this.currentPage = pageNumber;\r\n var initialRequestsMode = this.requestsPageMode;\r\n if (pageMode) {\r\n this.requestsPageMode = pageMode;\r\n }\r\n if (this.selectedPage !== pageNumber + 1) {\r\n this.selectedPage = pageNumber + 1;\r\n }\r\n this.filter = filter;\r\n this.loadEntitiesFunction(this)\r\n .then(function (result) {\r\n var maxPages = Math.ceil(result.totalCount / _this.pageSize);\r\n if (maxPages < _this.selectedPage) {\r\n _this.currentPage = 0;\r\n _this.selectedPage = 1;\r\n _this.loadEntitiesFunction(_this)\r\n .then(function (result) { return _this.setDataFromServer(result, filter); });\r\n }\r\n else {\r\n _this.setDataFromServer(result, filter);\r\n }\r\n })\r\n .finally(function () {\r\n _this.disablePagination = false;\r\n });\r\n if (pageMode) {\r\n this.requestsPageMode = initialRequestsMode;\r\n }\r\n };\r\n GridModel.prototype.setDataFromServer = function (result, filter) {\r\n this.totalCount = result.totalCount;\r\n if (result.pageMode !== \"TOTAL\") {\r\n this.entries = result.entries;\r\n this.pageMode = result.pageMode;\r\n }\r\n if (result.pageMode === \"ENTRIES_AND_TOTAL\" || result.pageMode === \"TOTAL\") {\r\n this.totalCountRevised = result.totalCount;\r\n this.latestRevisedTotalFilter = angular.copy(this.filter);\r\n this.isTotalLoading = false;\r\n }\r\n else if (result.pageMode === \"ENTRIES_AND_TOTAL_ESTIMATES\"\r\n && !angular.equals(filter, this.latestRevisedTotalFilter)) {\r\n this.totalCountRevised = null;\r\n this.latestRevisedTotalFilter = null;\r\n }\r\n this.calculateTotalPages();\r\n for (var _i = 0, _a = this.loadListeners; _i < _a.length; _i++) {\r\n var listener = _a[_i];\r\n listener.endLoading();\r\n }\r\n this.isLoading = false;\r\n };\r\n GridModel.prototype.loadRecordsCount = function () {\r\n var _this = this;\r\n this.latestRevisedTotalFilter = angular.copy(this.filter);\r\n this.isTotalLoading = true;\r\n var initialRequestsMode = this.requestsPageMode;\r\n this.requestsPageMode = \"TOTAL\";\r\n this.loadEntitiesFunction(this)\r\n .then(function (result) {\r\n _this.totalCount = result.totalCount;\r\n if (result.pageMode === \"TOTAL\") {\r\n _this.totalCountRevised = result.totalCount;\r\n }\r\n _this.isTotalLoading = false;\r\n _this.calculateTotalPages();\r\n });\r\n this.requestsPageMode = initialRequestsMode;\r\n };\r\n GridModel.prototype.getPageSize = function () {\r\n return this.pageSize && !isNaN(this.pageSize) ? this.pageSize : GridModel.DEFAULT_PAGE_SIZE;\r\n };\r\n GridModel.prototype.recalculateVisibleColumnsCount = function () {\r\n var count = 0;\r\n for (var i = 0; i < this.gridColumns.length; i++) {\r\n var column = this.gridColumns[i];\r\n if (column.alwaysVisible || column.visible) {\r\n count++;\r\n }\r\n }\r\n this.visibleColumnsCount = count;\r\n };\r\n GridModel.prototype.changeColumnVisibility = function (columnIndex) {\r\n var column = null;\r\n for (var i = 0; i < this.gridColumns.length; i++) {\r\n column = this.gridColumns[i];\r\n if (column.index == columnIndex) {\r\n break;\r\n }\r\n else {\r\n column = null;\r\n }\r\n }\r\n if (column != null) {\r\n column.reverseVisibility();\r\n this.recalculateVisibleColumnsCount();\r\n for (var i = 0; i < this.columnsListeners.length; i++) {\r\n this.columnsListeners[i].onColumnVisibilityChange(column);\r\n }\r\n }\r\n };\r\n GridModel.prototype.onChangePageSize = function () {\r\n for (var i = 0; i < this.pageSizeListeners.length; i++) {\r\n this.pageSizeListeners[i].onChangePageSize();\r\n }\r\n };\r\n GridModel.prototype.calculateTotalPages = function () {\r\n var knownToUsTotalCount = this.totalCountRevised ? this.totalCountRevised : this.totalCount;\r\n var totalPages = this.pageSize < 1 ? 1 : Math.ceil(knownToUsTotalCount / this.pageSize);\r\n this.totalPageCount = Math.max(totalPages || 0, 1);\r\n };\r\n GridModel.DEFAULT_PAGE_SIZE = 10;\r\n GridModel.MAX_USER_PAGE_SIZE = 5000;\r\n GridModel.MAX_PAGE_SIZE = 2147483647;\r\n return GridModel;\r\n})();\r\nexports.GridModel = GridModel;\r\n},{\"./PageMode\":6}],4:[function(require,module,exports){\nvar HttpGridService = (function () {\r\n function HttpGridService($http, apiUrl) {\r\n this.params = {};\r\n this.enableCache = false;\r\n this.$http = $http;\r\n this.apiUrl = apiUrl;\r\n }\r\n HttpGridService.prototype.getItems = function (page, size, mode, filter, sorting) {\r\n if (typeof filter !== \"undefined\") {\r\n for (var key in filter) {\r\n if (filter.hasOwnProperty(key)) {\r\n this.params[key + \"Filter\"] = filter[key];\r\n }\r\n }\r\n }\r\n if (typeof sorting !== \"undefined\") {\r\n this.params[\"sorting\"] = sorting;\r\n }\r\n if (!this.enableCache) {\r\n this.addNoCache();\r\n }\r\n this.page(page, size, mode);\r\n return this.$http.get(this.apiUrl, { params: this.params })\r\n .then(function (result) { return result.data; });\r\n };\r\n HttpGridService.prototype.page = function (page, pageSize, pageMode) {\r\n this.params[\"page\"] = page;\r\n this.params[\"pageSize\"] = pageSize;\r\n this.params[\"pageMode\"] = pageMode;\r\n return this;\r\n };\r\n HttpGridService.prototype.sorting = function (sortBy, sortDir) {\r\n this.params[\"sortBy\"] = sortBy;\r\n this.params[\"sortDir\"] = sortDir;\r\n return this;\r\n };\r\n HttpGridService.prototype.cache = function () {\r\n this.enableCache = true;\r\n return this;\r\n };\r\n HttpGridService.prototype.addNoCache = function () {\r\n this.params[\"no-cache\"] = new Date().getTime();\r\n return this;\r\n };\r\n HttpGridService.grid = function ($http, apiUrl) {\r\n return new HttpGridService($http, apiUrl);\r\n };\r\n return HttpGridService;\r\n})();\r\nexports.HttpGridService = HttpGridService;\r\nvar HttpGridHelper = (function () {\r\n function HttpGridHelper() {\r\n }\r\n HttpGridHelper.createLoader = function ($http, apiUrl) {\r\n var httpGridService = HttpGridService.grid($http, apiUrl);\r\n return function (model) { return httpGridService.getItems(model.currentPage, model.getPageSize(), model.requestsPageMode, model.filter, model.sorting); };\r\n };\r\n HttpGridHelper.createLoaderWithCallback = function ($http, apiUrl, callback) {\r\n var httpGridService = HttpGridService.grid($http, apiUrl);\r\n return function (model) { return httpGridService.getItems(model.currentPage, model.pageSize, model.filter, model.sorting)\r\n .then(function (result) { return callback(result); }); };\r\n };\r\n return HttpGridHelper;\r\n})();\r\nexports.HttpGridHelper = HttpGridHelper;\r\n},{}],5:[function(require,module,exports){\nvar Notifier = (function () {\r\n function Notifier() {\r\n this.success = this.getNotifierDisplayMethod(toastr.success);\r\n this.error = this.getNotifierDisplayMethod(toastr.error);\r\n this.warning = this.getNotifierDisplayMethod(toastr.warning);\r\n this.errorWithRef = this.getHTMLNotifierDisplayMethod(toastr.error);\r\n }\r\n Notifier.prototype.getNotifierDisplayMethod = function (toastrDisplayMethod) {\r\n return function (message, title, overrides) {\r\n if (message != undefined && title == undefined && overrides == undefined) {\r\n return toastrDisplayMethod(s.escapeHTML(message));\r\n }\r\n if (message != undefined && title != undefined && overrides == undefined) {\r\n return toastrDisplayMethod(s.escapeHTML(message), s.escapeHTML(title));\r\n }\r\n if (message != undefined && title != undefined && overrides != undefined) {\r\n return toastrDisplayMethod(s.escapeHTML(message), s.escapeHTML(title), overrides);\r\n }\r\n return undefined;\r\n };\r\n };\r\n Notifier.prototype.getHTMLNotifierDisplayMethod = function (toastrDisplayMethod) {\r\n return function (message, title, overrides) {\r\n if (message != undefined && title == undefined && overrides == undefined) {\r\n return toastrDisplayMethod(message);\r\n }\r\n if (message != undefined && title != undefined && overrides == undefined) {\r\n return toastrDisplayMethod(message, s.escapeHTML(title));\r\n }\r\n if (message != undefined && title != undefined && overrides != undefined) {\r\n return toastrDisplayMethod(message, s.escapeHTML(title), overrides);\r\n }\r\n return undefined;\r\n };\r\n };\r\n Notifier.prototype.commonError = function (response) {\r\n if (!response || response.status === 401 || response.status === 403\r\n || response.status === 404 || response.status === 500 ||\r\n (response.status === 409\r\n && (response.data.error === \"InvalidState\" || response.data.error === \"OptimisticLock\"))) {\r\n return;\r\n }\r\n var responseData = response.data;\r\n var msg = \"Server side error. Try to fix data and repeat operation.\";\r\n if (responseData && responseData.path && responseData.error) {\r\n msg += \": \" + responseData.message + \" \" + responseData.path;\r\n }\r\n else {\r\n if (responseData && responseData.error) {\r\n msg += \" \" + \"Error key: \" + responseData.error;\r\n }\r\n if (responseData && responseData.message) {\r\n msg += \" \" + \"Error message: \" + responseData.message;\r\n }\r\n }\r\n this.error(msg);\r\n };\r\n return Notifier;\r\n})();\r\nexports.Notifier = Notifier;\r\nexports.notifier = new Notifier();\r\n},{}],6:[function(require,module,exports){\n(function (PageMode) {\r\n PageMode[PageMode[\"ENTRIES_AND_TOTAL\"] = 0] = \"ENTRIES_AND_TOTAL\";\r\n PageMode[PageMode[\"ENTRIES_AND_TOTAL_ESTIMATES\"] = 1] = \"ENTRIES_AND_TOTAL_ESTIMATES\";\r\n PageMode[PageMode[\"ENTRIES\"] = 2] = \"ENTRIES\";\r\n PageMode[PageMode[\"TOTAL\"] = 3] = \"TOTAL\";\r\n})(exports.PageMode || (exports.PageMode = {}));\r\nvar PageMode = exports.PageMode;\r\n},{}],7:[function(require,module,exports){\n(function (ReferencedObjectType) {\r\n ReferencedObjectType[ReferencedObjectType[\"MATERIAL\"] = 0] = \"MATERIAL\";\r\n ReferencedObjectType[ReferencedObjectType[\"COURSE\"] = 1] = \"COURSE\";\r\n ReferencedObjectType[ReferencedObjectType[\"PLAYLIST\"] = 2] = \"PLAYLIST\";\r\n ReferencedObjectType[ReferencedObjectType[\"NEWS\"] = 3] = \"NEWS\";\r\n ReferencedObjectType[ReferencedObjectType[\"COMMENT\"] = 4] = \"COMMENT\";\r\n ReferencedObjectType[ReferencedObjectType[\"QUIZ\"] = 5] = \"QUIZ\";\r\n ReferencedObjectType[ReferencedObjectType[\"ASSESSMENT\"] = 6] = \"ASSESSMENT\";\r\n ReferencedObjectType[ReferencedObjectType[\"LEARNING_PATH\"] = 7] = \"LEARNING_PATH\";\r\n ReferencedObjectType[ReferencedObjectType[\"SECTION\"] = 8] = \"SECTION\";\r\n ReferencedObjectType[ReferencedObjectType[\"SESSION\"] = 9] = \"SESSION\";\r\n ReferencedObjectType[ReferencedObjectType[\"ILT_SESSION\"] = 10] = \"ILT_SESSION\";\r\n ReferencedObjectType[ReferencedObjectType[\"LP_COURSE\"] = 11] = \"LP_COURSE\";\r\n})(exports.ReferencedObjectType || (exports.ReferencedObjectType = {}));\r\nvar ReferencedObjectType = exports.ReferencedObjectType;\r\n},{}],8:[function(require,module,exports){\n(function (SortOrder) {\r\n SortOrder[SortOrder[\"ASC\"] = 0] = \"ASC\";\r\n SortOrder[SortOrder[\"DESC\"] = 1] = \"DESC\";\r\n})(exports.SortOrder || (exports.SortOrder = {}));\r\nvar SortOrder = exports.SortOrder;\r\nvar SortEntry = (function () {\r\n function SortEntry(fieldName, sortOrder) {\r\n this.fieldName = fieldName;\r\n this.sortOrder = sortOrder;\r\n }\r\n SortEntry.prototype.reverseOrder = function () {\r\n this.sortOrder = this.sortOrder == SortOrder.ASC ? SortOrder.DESC : SortOrder.ASC;\r\n };\r\n SortEntry.asc = function (fieldName) {\r\n return new SortEntry(fieldName, SortOrder.ASC);\r\n };\r\n SortEntry.desc = function (fieldName) {\r\n return new SortEntry(fieldName, SortOrder.DESC);\r\n };\r\n return SortEntry;\r\n})();\r\nexports.SortEntry = SortEntry;\r\n},{}],9:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar InfoRouter_1 = require(\"../urls/InfoRouter\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AccessibilityController = (function () {\r\n function AccessibilityController($location, $anchorScroll, $window, infoRouter, userService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$anchorScroll = $anchorScroll;\r\n this.$window = $window;\r\n this.infoRouter = infoRouter;\r\n this.userService = userService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ACCESSIBILITY_LINK_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Accessibility\").update();\r\n this.userService.getCurrentUserProfile().then(function (data) {\r\n _this.currentLocale = data.locale;\r\n });\r\n }\r\n AccessibilityController.prototype.scrollToCookieTables = function () {\r\n this.$location.hash('cookieTables');\r\n this.$anchorScroll();\r\n };\r\n AccessibilityController.NAME = \"info.AccessibilityController\";\r\n AccessibilityController.$inject = [\r\n \"$location\",\r\n \"$anchorScroll\",\r\n \"$window\",\r\n InfoRouter_1.InfoRouter.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return AccessibilityController;\r\n})();\r\nexports.AccessibilityController = AccessibilityController;\r\n},{\"../urls/InfoRouter\":475,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],10:[function(require,module,exports){\nvar AIService_1 = require(\"./AIService\");\r\nexports.AIModule = angular\r\n .module(\"ai\", [])\r\n .service(AIService_1.AIService.NAME, AIService_1.AIService);\r\n},{\"./AIService\":11}],11:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AIService = (function () {\r\n function AIService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n AIService.prototype.generateSubtopics = function (courseId, subtopicsCount, topic) {\r\n return this.$http.post(this.url.base(\"/api/ai/completions/subtopics\").service(), { courseId: courseId, subtopicsCount: subtopicsCount, topic: topic })\r\n .then(function (result) { return result.data; });\r\n };\r\n AIService.prototype.generateParagraph = function (courseId, topic) {\r\n return this.$http.post(this.url.base(\"/api/ai/completions/paragraph\").service(), { courseId: courseId, topic: topic })\r\n .then(function (result) { return result.data; });\r\n };\r\n AIService.prototype.generateSubparagraph = function (courseId, topic, subtopic) {\r\n return this.$http.post(this.url.base(\"/api/ai/completions/subparagraph\").service(), { courseId: courseId, topic: topic, subtopic: subtopic })\r\n .then(function (result) { return result.data; });\r\n };\r\n AIService.prototype.generateQuote = function (courseId, topic) {\r\n return this.$http.post(this.url.base(\"/api/ai/completions/quote\").service(), { courseId: courseId, topic: topic })\r\n .then(function (result) { return result.data; });\r\n };\r\n AIService.prototype.generateQuestion = function (courseId, topic) {\r\n return this.$http.post(this.url.base(\"/api/ai/completions/question\").service(), { courseId: courseId, topic: topic })\r\n .then(function (result) { return result.data; });\r\n };\r\n AIService.NAME = \"ai.AIService\";\r\n AIService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return AIService;\r\n})();\r\nexports.AIService = AIService;\r\n},{\"../utils/UrlService\":528}],12:[function(require,module,exports){\n/// \r\nvar AppProperties_1 = require(\"./utils/AppProperties\");\r\nvar Event_1 = require(\"./components/models/Event\");\r\nvar VhsEmbeddedMaterialDirective_1 = require(\"./components/VhsEmbeddedMaterialDirective\");\r\nvar VhsEmbeddedBundleDirective_1 = require(\"./components/richtext/VhsEmbeddedBundleDirective\");\r\nvar VhsSandboxDirective_1 = require(\"./components/richtext/VhsSandboxDirective\");\r\nvar VhsDownloadBundleDirective_1 = require(\"./components/richtext/VhsDownloadBundleDirective\");\r\nvar RichTextEditorDirective_1 = require(\"./components/richtext/RichTextEditorDirective\");\r\nvar AuthModule_1 = require(\"./auth/AuthModule\");\r\nvar AuthService_1 = require(\"./auth/AuthService\");\r\nvar LogOnController_1 = require(\"./auth/LogOnController\");\r\nvar AuthCoreModule_1 = require(\"./authcore/AuthCoreModule\");\r\nvar AuthManager_1 = require(\"./authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"./authcore/AuthRedirect\");\r\nvar ComponentsModule_1 = require(\"./components/ComponentsModule\");\r\nvar HttpModule_1 = require(\"./http/HttpModule\");\r\nvar InfrastructureModule_1 = require(\"./infrastructure/InfrastructureModule\");\r\nvar Storage_1 = require(\"./infrastructure/Storage\");\r\nvar MainModule_1 = require(\"./main/MainModule\");\r\nvar NewsModule_1 = require(\"./news/NewsModule\");\r\nvar InfoModule_1 = require(\"./info/InfoModule\");\r\nvar PersonalModule_1 = require(\"./personal/PersonalModule\");\r\nvar StatisticsModule_1 = require(\"./statistics/StatisticsModule\");\r\nvar MaterialsModule_1 = require(\"./materials/MaterialsModule\");\r\nvar ReferenceModule_1 = require(\"./reference/ReferenceModule\");\r\nvar SecurityModule_1 = require(\"./security/SecurityModule\");\r\nvar SettingsModule_1 = require(\"./settings/SettingsModule\");\r\nvar UrlsModule_1 = require(\"./urls/UrlsModule\");\r\nvar UrlServiceProvider_1 = require(\"./urls/UrlServiceProvider\");\r\nvar UsersModule_1 = require(\"./users/UsersModule\");\r\nvar INotifier_1 = require(\"./INotifier\");\r\nvar BundlesModule_1 = require(\"./bundles/BundlesModule\");\r\nvar CoursesModule_1 = require(\"./courses/CoursesModule\");\r\nvar FinancesModule_1 = require(\"./finances/FinancesModule\");\r\nvar CommonModule_1 = require(\"./common/CommonModule\");\r\nvar StorageModule_1 = require(\"./storage/StorageModule\");\r\nvar QuizzesModule_1 = require(\"./quizzes/QuizzesModule\");\r\nvar LogsModule_1 = require(\"./logs/LogsModule\");\r\nvar UtilsModule_1 = require(\"./utils/UtilsModule\");\r\nvar MainRouter_1 = require(\"./urls/MainRouter\");\r\nvar NewsRouter_1 = require(\"./urls/NewsRouter\");\r\nvar InfoRouter_1 = require(\"./urls/InfoRouter\");\r\nvar AuthRouter_1 = require(\"./urls/AuthRouter\");\r\nvar ReferenceRouter_1 = require(\"./urls/ReferenceRouter\");\r\nvar SystemSettingsRouter_1 = require(\"./urls/SystemSettingsRouter\");\r\nvar CoursesRouter_1 = require(\"./urls/CoursesRouter\");\r\nvar StatisticsRouter_1 = require(\"./urls/StatisticsRouter\");\r\nvar UsersRouter_1 = require(\"./urls/UsersRouter\");\r\nvar MaterialsRouter_1 = require(\"./urls/MaterialsRouter\");\r\nvar FinancesRouter_1 = require(\"./urls/FinancesRouter\");\r\nvar PersonalRouter_1 = require(\"./urls/PersonalRouter\");\r\nvar CommonRouter_1 = require(\"./urls/CommonRouter\");\r\nvar QuizzesRouter_1 = require(\"./urls/QuizzesRouter\");\r\nvar LogsRouter_1 = require(\"./urls/LogsRouter\");\r\nvar HttpInterceptor_1 = require(\"./http/HttpInterceptor\");\r\nvar JobsModule_1 = require(\"./jobs/JobsModule\");\r\nvar JobsRouter_1 = require(\"./urls/JobsRouter\");\r\nvar CertificateTemplatesRouter_1 = require(\"./urls/CertificateTemplatesRouter\");\r\nvar LearningPathsRouter_1 = require(\"./urls/LearningPathsRouter\");\r\nvar LearningPathsModule_1 = require(\"./learningPaths/LearningPathsModule\");\r\nvar AssessmentsModule_1 = require(\"./personal/AssessmentsModule\");\r\nvar AssessmentsRouter_1 = require(\"./urls/AssessmentsRouter\");\r\nvar PoliciesModule_1 = require(\"./policies/PoliciesModule\");\r\nvar PoliciesRouter_1 = require(\"./urls/PoliciesRouter\");\r\nvar NotificationTemplatesRouter_1 = require(\"./urls/NotificationTemplatesRouter\");\r\nvar NotificationModule_1 = require(\"./notificationTemplates/NotificationModule\");\r\nvar BusinessUnitsModule_1 = require(\"./businessUnits/BusinessUnitsModule\");\r\nvar BusinessUnitsRouter_1 = require(\"./urls/BusinessUnitsRouter\");\r\nvar PaypalModule_1 = require(\"./integration/paypal/PaypalModule\");\r\nvar PayPalRouter_1 = require(\"./urls/PayPalRouter\");\r\nvar CustomBrandingService_1 = require(\"./branding/CustomBrandingService\");\r\nvar ImportExportModule_1 = require(\"./importExport/ImportExportModule\");\r\nvar ImportRouter_1 = require(\"./urls/ImportRouter\");\r\nvar ExportRouter_1 = require(\"./urls/ExportRouter\");\r\nvar ExternalResourcesModule_1 = require(\"./external/ExternalResourcesModule\");\r\nvar ExternalResourcesRouter_1 = require(\"./urls/ExternalResourcesRouter\");\r\nvar AzureCognitiveServicesModule_1 = require(\"./integration/azureCognitiveServices/AzureCognitiveServicesModule\");\r\nvar VhsUserNoteDirective_1 = require(\"./components/richtext/VhsUserNoteDirective\");\r\nvar HomeRouter_1 = require(\"./urls/HomeRouter\");\r\nvar HomeModule_1 = require(\"./home/HomeModule\");\r\nvar BrandingModule_1 = require(\"./branding/BrandingModule\");\r\nvar AuthorizeNetModule_1 = require(\"./integration/authorizenet/AuthorizeNetModule\");\r\nvar FreeEnrollmentModule_1 = require(\"./integration/freeenrollment/FreeEnrollmentModule\");\r\nvar SlideTemplatesRouter_1 = require(\"./urls/SlideTemplatesRouter\");\r\nvar GamificationRouter_1 = require(\"./urls/GamificationRouter\");\r\nvar GamificationModule_1 = require(\"./gamification/GamificationModule\");\r\nvar AIModule_1 = require(\"./ai/AIModule\");\r\nvar AzureWebchatBotframeworkModule_1 = require(\"./integration/azureWebchatBotframework/AzureWebchatBotframeworkModule\");\r\nangular.module(\"vhs\", [\r\n \"ngRoute\",\r\n \"ngAnimate\",\r\n \"ngSanitize\",\r\n \"ngFileUpload\",\r\n \"ngNumeraljs\",\r\n \"ui.chart\",\r\n \"ui.select\",\r\n \"duScroll\",\r\n \"textAngular\",\r\n \"timer\",\r\n \"dndLists\",\r\n \"infinite-scroll\",\r\n CommonModule_1.CommonModule.name,\r\n AuthModule_1.AuthModule.name,\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n InfrastructureModule_1.InfrastructureModule.name,\r\n HttpModule_1.HttpModule.name,\r\n ComponentsModule_1.ComponentsModule.name,\r\n StatisticsModule_1.StatisticsModule.name,\r\n ReferenceModule_1.ReferenceModule.name,\r\n UsersModule_1.UsersModule.name,\r\n SettingsModule_1.SettingsModule.name,\r\n LogsModule_1.LogsModule.name,\r\n JobsModule_1.JobsModule.name,\r\n MainModule_1.MainModule.name,\r\n MaterialsModule_1.MaterialsModule.name,\r\n NewsModule_1.NewsModule.name,\r\n InfoModule_1.InfoModule.name,\r\n PersonalModule_1.PersonalModule.name,\r\n BundlesModule_1.BundlesModule.name,\r\n CoursesModule_1.CoursesModule.name,\r\n LearningPathsModule_1.LearningPathsModule.name,\r\n FinancesModule_1.FinancesModule.name,\r\n StorageModule_1.StorageModule.name,\r\n QuizzesModule_1.QuizzesModule.name,\r\n UtilsModule_1.UtilsModule.name,\r\n AssessmentsModule_1.AssessmentsModule.name,\r\n PoliciesModule_1.PoliciesModule.name,\r\n BusinessUnitsModule_1.BusinessUnitsModule.name,\r\n PaypalModule_1.PayPalModule.name,\r\n NotificationModule_1.NotificationModule.name,\r\n ImportExportModule_1.ImportExportModule.name,\r\n ExternalResourcesModule_1.ExternalResourcesModule.name,\r\n AzureCognitiveServicesModule_1.AzureCognitiveServicesModule.name,\r\n AzureWebchatBotframeworkModule_1.AzureWebchatBotframeworkModule.name,\r\n HomeModule_1.HomeModule.name,\r\n BrandingModule_1.BrandingModule.name,\r\n GamificationModule_1.GamificationModule.name,\r\n AuthorizeNetModule_1.AuthorizeNetModule.name,\r\n FreeEnrollmentModule_1.FreeEnrollmentModule.name,\r\n GamificationModule_1.GamificationModule.name,\r\n AuthorizeNetModule_1.AuthorizeNetModule.name,\r\n AIModule_1.AIModule.name\r\n]).config([\r\n \"$routeProvider\",\r\n \"$logProvider\",\r\n \"$httpProvider\",\r\n UrlServiceProvider_1.UrlServiceProvider.NAME,\r\n configuration\r\n]).config([\r\n \"$provide\",\r\n thirdPartyConfiguration\r\n]).run([\r\n \"$log\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$timeout\",\r\n '$route',\r\n '$location',\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n Storage_1.Storages.LOCAL_NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n run\r\n]);\r\nwindow.onbeforeunload = function (event) {\r\n if ($(\"#uploads-status\").length == 0)\r\n return;\r\n var message = \"Uploading of files will be canceled if you leave this page\";\r\n if (typeof event == \"undefined\") {\r\n event = window.event;\r\n }\r\n if (event) {\r\n event.returnValue = message;\r\n }\r\n return message;\r\n};\r\nfunction configuration($routeProvider, $logProvider, $httpProvider, urlServiceProvider) {\r\n $logProvider.debugEnabled(true);\r\n urlServiceProvider\r\n .setServiceRoot(AppProperties_1.AppProperties.serviceRoot)\r\n .setBuildVersion(AppProperties_1.AppProperties.buildVersion);\r\n var url = urlServiceProvider.$get();\r\n $routeProvider\r\n .when(CommonRouter_1.CommonRouter.notFoundRoute, { templateUrl: url.template(\"common/not-found.html\") })\r\n .when(MainRouter_1.MainRouter.mainRoute, { templateUrl: url.template(\"main/index.html\") })\r\n .when(AuthRouter_1.AuthRouter.logoutRoute, { templateUrl: url.template(\"auth/logout.html\") })\r\n .when(AuthRouter_1.AuthRouter.logonRoute, { templateUrl: url.template(\"auth/logon.html\") })\r\n .when(AuthRouter_1.AuthRouter.accessDeniedRoute, { templateUrl: url.template(\"auth/access-denied.html\") })\r\n .when(AuthRouter_1.AuthRouter.restorePasswordRoute, { templateUrl: url.template(\"auth/restore-password.html\") })\r\n .when(AuthRouter_1.AuthRouter.checkValidCodeRoute, { templateUrl: url.template(\"auth/check-valid-code.html\") })\r\n .when(AuthRouter_1.AuthRouter.createNewPasswordRoute, { templateUrl: url.template(\"auth/create-new-password.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.indexRoute, { templateUrl: url.template(\"materials/search.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.indexPurchasedRoute, { templateUrl: url.template(\"materials/search.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.indexPurchasedOrderRoute, { templateUrl: url.template(\"materials/search.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.myDownloadsRoute, { templateUrl: url.template(\"materials/myDownloads.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.createRoute, { templateUrl: url.template(\"materials/edit.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.playlistsRoute, { templateUrl: url.template(\"materials/playlists.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.playlistCreateRoute, { templateUrl: url.template(\"materials/playlistEdit.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.playlistDetailsRoute, { templateUrl: url.template(\"materials/playlistDetails.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.playlistEditRoute, { templateUrl: url.template(\"materials/playlistEdit.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.materialRoute, { templateUrl: url.template(\"materials/material.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.updateRoute, { templateUrl: url.template(\"materials/edit.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.relatedProductsUpdateRoute, { templateUrl: url.template(\"materials/materialRelatedProductsEdit.html\") })\r\n .when(MaterialsRouter_1.MaterialsRouter.permissionsUpdateRoute, { templateUrl: url.template(\"materials/materialPermissionsEdit.html\") })\r\n .when(StatisticsRouter_1.StatisticsRouter.materialViewReportRoute, { templateUrl: url.template(\"statistics/materialViewReport.html\") })\r\n .when(StatisticsRouter_1.StatisticsRouter.materialDownloadReportRoute, { templateUrl: url.template(\"statistics/materialDownloadReport.html\") })\r\n .when(StatisticsRouter_1.StatisticsRouter.materialUploadReportRoute, { templateUrl: url.template(\"statistics/materialUploadReport.html\") })\r\n .when(StatisticsRouter_1.StatisticsRouter.powerBiReportRoute, { templateUrl: url.template(\"statistics/powerBiReport.html\") })\r\n .when(PersonalRouter_1.PersonalRouter.certificatesRoute, { templateUrl: url.template(\"personal/mainPages.html\") })\r\n .when(PersonalRouter_1.PersonalRouter.creditsRoute, { templateUrl: url.template(\"personal/mainPages.html\") })\r\n .when(PersonalRouter_1.PersonalRouter.badgesRoute, { templateUrl: url.template(\"personal/mainPages.html\") })\r\n .when(PersonalRouter_1.PersonalRouter.purchasedOrdersRoute, { templateUrl: url.template(\"personal/mainPages.html\") })\r\n .when(PersonalRouter_1.PersonalRouter.subscriptionsRoute, { templateUrl: url.template(\"personal/mainPages.html\") })\r\n .when(PersonalRouter_1.PersonalRouter.newCommentsRoute, { templateUrl: url.template(\"personal/mainPages.html\") })\r\n .when(PersonalRouter_1.PersonalRouter.settingsRoute, { templateUrl: url.template(\"personal/mainPages.html\") })\r\n .when(PersonalRouter_1.PersonalRouter.supportRoute, { templateUrl: url.template(\"personal/mainPages.html\") })\r\n .when(PersonalRouter_1.PersonalRouter.calendarRoute, { templateUrl: url.template(\"personal/calendar.html\") })\r\n .when(AssessmentsRouter_1.AssessmentsRouter.assessmentsRoute, { templateUrl: url.template(\"assessments/assessments.html\") })\r\n .when(AssessmentsRouter_1.AssessmentsRouter.assessmentDetailsRoute, { templateUrl: url.template(\"assessments/assessmentDetails.html\") })\r\n .when(FinancesRouter_1.FinancesRouter.productsCatalogRoute, { templateUrl: url.template(\"finances/catalog.html\") })\r\n .when(FinancesRouter_1.FinancesRouter.productDetailsRoute, { templateUrl: url.template(\"finances/productDetails.html\") })\r\n .when(FinancesRouter_1.FinancesRouter.purchasedOrderRoute, { templateUrl: url.template(\"finances/purchasedOrder.html\") })\r\n .when(FinancesRouter_1.FinancesRouter.nacePurchasedOrderRoute, { templateUrl: url.template(\"finances/purchasedOrder.html\") })\r\n .when(FinancesRouter_1.FinancesRouter.purchasedProductRoute, { templateUrl: url.template(\"finances/purchasedProduct.html\") })\r\n .when(FinancesRouter_1.FinancesRouter.orderProductsRoute, { templateUrl: url.template(\"finances/orderProducts.html\") })\r\n .when(FinancesRouter_1.FinancesRouter.productEditRoute, { templateUrl: url.template(\"finances/productEdit.html\") })\r\n .when(FinancesRouter_1.FinancesRouter.referencedObjectProductEditRoute, { templateUrl: url.template(\"finances/productEdit.html\") })\r\n .when(FinancesRouter_1.FinancesRouter.productANetCommunicatorRoute, { templateUrl: url.template(\"finances/authorizeCommunicator.html\") })\r\n .when(NewsRouter_1.NewsRouter.newsSearchRoute, { templateUrl: url.template(\"news/allNews.html\") })\r\n .when(NewsRouter_1.NewsRouter.oneNewsCreateRoute, { templateUrl: url.template(\"news/edit.html\") })\r\n .when(NewsRouter_1.NewsRouter.oneNewsRoute, { templateUrl: url.template(\"news/oneNews.html\") })\r\n .when(NewsRouter_1.NewsRouter.oneNewsEditRoute, { templateUrl: url.template(\"news/edit.html\") })\r\n .when(NewsRouter_1.NewsRouter.helpRoute, { templateUrl: url.template(\"news/help.html\") })\r\n .when(NewsRouter_1.NewsRouter.helpEditRoute, { templateUrl: url.template(\"news/editHelp.html\") })\r\n .when(ExternalResourcesRouter_1.ExternalResourcesRouter.zoomRoute, { templateUrl: url.template(\"externalResources/zoom.html\") })\r\n .when(InfoRouter_1.InfoRouter.aboutCompanyRoute, { templateUrl: url.template(\"info/aboutCompany.html\") })\r\n .when(InfoRouter_1.InfoRouter.faqRoute, { templateUrl: url.template(\"info/faq.html\") })\r\n .when(InfoRouter_1.InfoRouter.accessibilityRoute, { templateUrl: url.template(\"accessibility/accessibility.html\") })\r\n .when(ReferenceRouter_1.ReferenceRouter.indexRoute, { templateUrl: url.template(\"reference/index.html\") })\r\n .when(ReferenceRouter_1.ReferenceRouter.editRoute, { templateUrl: url.template(\"reference/edit.html\") })\r\n .when(UsersRouter_1.UsersRouter.indexRoute, { templateUrl: url.template(\"users/index.html\") })\r\n .when(UsersRouter_1.UsersRouter.addRoute, { templateUrl: url.template(\"users/edit.html\") })\r\n .when(UsersRouter_1.UsersRouter.editRoute, { templateUrl: url.template(\"users/edit.html\") })\r\n .when(UsersRouter_1.UsersRouter.currentProfileRoute, { templateUrl: url.template(\"users/profile.html\") })\r\n .when(UsersRouter_1.UsersRouter.groupIndexRoute, { templateUrl: url.template(\"users/groups.html\") })\r\n .when(UsersRouter_1.UsersRouter.groupAddRoute, { templateUrl: url.template(\"users/groupEdit.html\") })\r\n .when(UsersRouter_1.UsersRouter.groupEditRoute, { templateUrl: url.template(\"users/groupEdit.html\") })\r\n .when(UsersRouter_1.UsersRouter.groupManagePermissionsRoute, { templateUrl: url.template(\"users/groupManagePermissions.html\") })\r\n .when(UsersRouter_1.UsersRouter.startTrialRoute, { templateUrl: url.template(\"users/startTrial.html\") })\r\n .when(UsersRouter_1.UsersRouter.signUpRoute, { templateUrl: url.template(\"users/startTrial.html\") })\r\n .when(UsersRouter_1.UsersRouter.mergeRoute, { templateUrl: url.template(\"users/merge.html\") })\r\n .when(SystemSettingsRouter_1.SystemSettingsRouter.commonSettingsRoute, { templateUrl: url.template(\"settings/commonSettings.html\") })\r\n .when(SystemSettingsRouter_1.SystemSettingsRouter.storagePlacesIndexRoute, { templateUrl: url.template(\"settings/storagePlacesIndex.html\") })\r\n .when(SystemSettingsRouter_1.SystemSettingsRouter.storagePlaceCreateRoute, { templateUrl: url.template(\"settings/storagePlaceEdit.html\") })\r\n .when(SystemSettingsRouter_1.SystemSettingsRouter.storagePlaceEditRoute, { templateUrl: url.template(\"settings/storagePlaceEdit.html\") })\r\n .when(SystemSettingsRouter_1.SystemSettingsRouter.systemSettingsRoute, { templateUrl: url.template(\"settings/systemSettings.html\") })\r\n .when(SystemSettingsRouter_1.SystemSettingsRouter.systemBundleEditRoute, { templateUrl: url.template(\"bundles/systemBundleEdit.html\") })\r\n .when(SystemSettingsRouter_1.SystemSettingsRouter.systemSettingsConfigurationRoute, { templateUrl: url.template(\"settings/systemSettings.html\") })\r\n .when(SystemSettingsRouter_1.SystemSettingsRouter.systemSettingsBrandingRoute, { templateUrl: url.template(\"settings/systemSettingsBranding.html\") })\r\n .when(SystemSettingsRouter_1.SystemSettingsRouter.systemSettingsMenuItemsVisibilityRoute, { templateUrl: url.template(\"settings/systemSettingsMenuItemsVisibility.html\") })\r\n .when(LogsRouter_1.LogsRouter.systemLogsRoute, { templateUrl: url.template(\"logs/system.html\") })\r\n .when(LogsRouter_1.LogsRouter.securityLogsRoute, { templateUrl: url.template(\"logs/security.html\") })\r\n .when(GamificationRouter_1.GamificationRouter.badgeTemplatesRoute, { templateUrl: url.template(\"gamification/badgeTemplates.html\") })\r\n .when(GamificationRouter_1.GamificationRouter.badgeTemplateEditRoute, { templateUrl: url.template(\"gamification/badgeTemplateEdit.html\") })\r\n .when(GamificationRouter_1.GamificationRouter.badgesRoute, { templateUrl: url.template(\"gamification/badges.html\") })\r\n .when(GamificationRouter_1.GamificationRouter.editRoute, { templateUrl: url.template(\"gamification/badgeCreateEdit.html\") })\r\n .when(GamificationRouter_1.GamificationRouter.actionBadgesEditRoute, { templateUrl: url.template(\"gamification/activityBadgeEdit.html\") })\r\n .when(GamificationRouter_1.GamificationRouter.actionBadgesViewRoute, { templateUrl: url.template(\"gamification/activityBadgeEdit.html\") })\r\n .when(GamificationRouter_1.GamificationRouter.createRoute, { templateUrl: url.template(\"gamification/badgeCreateEdit.html\") })\r\n .when(JobsRouter_1.JobsRouter.jobsRoute, { templateUrl: url.template(\"jobs/jobs.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.indexRoute, { templateUrl: url.template(\"courses/courses.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.indexPurchasedRoute, { templateUrl: url.template(\"courses/courses.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.indexPurchasedOrderRoute, { templateUrl: url.template(\"courses/courses.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.createRoute, { templateUrl: url.template(\"courses/courseCreateEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.detailsRoute, { templateUrl: url.template(\"courses/details.html\"), reloadOnSearch: false })\r\n .when(CoursesRouter_1.CoursesRouter.progressRoute, { templateUrl: url.template(\"courses/progress.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.webinarRoute, { templateUrl: url.template(\"courses/webinars.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.iltRoute, { templateUrl: url.template(\"courses/ilt.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.discussionRoute, { templateUrl: url.template(\"courses/courseDiscussion.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.infoRoute, { templateUrl: url.template(\"courses/info.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.enrollmentDetailsRoute, { templateUrl: url.template(\"courses/enrollmentDetails.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.updateRoute, { templateUrl: url.template(\"courses/courseCreateEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.enrollmentEditRoute, { templateUrl: url.template(\"courses/enrollmentCreateEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.structureUpdateRoute, { templateUrl: url.template(\"courses/courseStructureEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.sectionUpdateRoute, { templateUrl: url.template(\"courses/courseStructureEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.bundleUpdateRoute, { templateUrl: url.template(\"courses/courseBundleEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.participationFormUpdateRoute, { templateUrl: url.template(\"courses/courseParticipationFormEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.landingPageUpdateRoute, { templateUrl: url.template(\"courses/courseLandingPageEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.exportImportUpdateRoute, { templateUrl: url.template(\"courses/courseExportImportEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.relatedProductsUpdateRoute, { templateUrl: url.template(\"courses/courseRelatedProductsEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.quizDetailsRoute, { templateUrl: url.template(\"courses/quizDetails.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.permissionsDelegationRoute, { templateUrl: url.template(\"courses/coursePermissionsDelegation.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.sectionDetailsRoute, { templateUrl: url.template(\"courses/details.html\"), reloadOnSearch: false })\r\n .when(CoursesRouter_1.CoursesRouter.surveyResultsRoute, { templateUrl: url.template(\"courses/survey.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.flashcardResultsRoute, { templateUrl: url.template(\"courses/flashcard.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.gamificationDetailRoute, { templateUrl: url.template(\"courses/courseGamificationDetails.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.indexRoute, { templateUrl: url.template(\"learningPaths/learningPaths.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.indexPurchasedRoute, { templateUrl: url.template(\"learningPaths/learningPaths.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.indexPurchasedOrderRoute, { templateUrl: url.template(\"learningPaths/learningPaths.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.createRoute, { templateUrl: url.template(\"learningPaths/learningPathCreateEdit.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.updateRoute, { templateUrl: url.template(\"learningPaths/learningPathCreateEdit.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.detailsRoute, { templateUrl: url.template(\"learningPaths/details.html\"), reloadOnSearch: false })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.progressRoute, { templateUrl: url.template(\"learningPaths/learningPathProgress.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.participationFormUpdateRoute, { templateUrl: url.template(\"learningPaths/learningPathParticipationFormEdit.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.participationFormFillRoute, { templateUrl: url.template(\"learningPaths/learningPathParticipationFormFill.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.permissionsDelegationRoute, { templateUrl: url.template(\"learningPaths/learningPathPermissionsDelegation.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.relatedProductsUpdateRoute, { templateUrl: url.template(\"learningPaths/learningPathRelatedProductsEdit.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.permissionsUpdateRoute, { templateUrl: url.template(\"learningPaths/learningPathPermissionsEdit.html\") })\r\n .when(LearningPathsRouter_1.LearningPathsRouter.gamificationDetailRoute, { templateUrl: url.template(\"learningPaths/learningPathsGamificationDetails.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.createRoute, { templateUrl: url.template(\"quizzes/edit.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.quizzesDetailsRoute, { templateUrl: url.template(\"quizzes/details.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.quizzesUpdateRoute, { templateUrl: url.template(\"quizzes/edit.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.quizzesPassingRoute, { templateUrl: url.template(\"quizzes/quizPassing.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute, { templateUrl: url.template(\"quizzes/quizzes.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.surveysDetailsRoute, { templateUrl: url.template(\"quizzes/details.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.surveysUpdateRoute, { templateUrl: url.template(\"quizzes/edit.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.surveysPassingRoute, { templateUrl: url.template(\"quizzes/quizPassing.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.surveysIndexRoute, { templateUrl: url.template(\"quizzes/quizzes.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.flashcardsDetailsRoute, { templateUrl: url.template(\"quizzes/details.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.flashcardsUpdateRoute, { templateUrl: url.template(\"quizzes/edit.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.flashcardsPassingRoute, { templateUrl: url.template(\"quizzes/quizPassing.html\") })\r\n .when(QuizzesRouter_1.QuizzesRouter.flashcardsIndexRoute, { templateUrl: url.template(\"quizzes/quizzes.html\") })\r\n .when(CertificateTemplatesRouter_1.CertificateTemplatesRouter.indexRoute, { templateUrl: url.template(\"certificates/certificates.html\") })\r\n .when(CertificateTemplatesRouter_1.CertificateTemplatesRouter.editRoute, { templateUrl: url.template(\"certificates/certificateCreateEdit.html\") })\r\n .when(PoliciesRouter_1.PoliciesRouter.privacyPolicyRoute, { templateUrl: url.template(\"policies/privacyPolicy.html\") })\r\n .when(PoliciesRouter_1.PoliciesRouter.cookiePolicyRoute, { templateUrl: url.template(\"policies/cookiePolicy.html\") })\r\n .when(PoliciesRouter_1.PoliciesRouter.termsOfUseRoute, { templateUrl: url.template(\"policies/termsOfUse.html\") })\r\n .when(BusinessUnitsRouter_1.BusinessUnitsRouter.indexRoute, { templateUrl: url.template(\"businessUnits/businessUnits.html\") })\r\n .when(BusinessUnitsRouter_1.BusinessUnitsRouter.createRoute, { templateUrl: url.template(\"businessUnits/businessUnitsCreateEdit.html\") })\r\n .when(BusinessUnitsRouter_1.BusinessUnitsRouter.editRoute, { templateUrl: url.template(\"businessUnits/businessUnitsCreateEdit.html\") })\r\n .when(PayPalRouter_1.PayPalRouter.orderCancellationRoute, { templateUrl: url.template(\"integration/paypal/orderCancellation.html\") })\r\n .when(PayPalRouter_1.PayPalRouter.orderConfirmationRoute, { templateUrl: url.template(\"integration/paypal/orderConfirmation.html\") })\r\n .when(NotificationTemplatesRouter_1.NotificationTemplatesRouter.indexRoute, { templateUrl: url.template(\"notificationTemplates/notifications.html\") })\r\n .when(NotificationTemplatesRouter_1.NotificationTemplatesRouter.editRoute, { templateUrl: url.template(\"notificationTemplates/notificationCreateEdit.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.notificationTemplatesDetailRoute, { templateUrl: url.template(\"courses/courseNotificationDetails.html\") })\r\n .when(CoursesRouter_1.CoursesRouter.notificationTemplatesEditRoute, { templateUrl: url.template(\"courses/courseNotificationDetailsEdit.html\") })\r\n .when(ImportRouter_1.ImportRouter.importRoute, { templateUrl: url.template(\"importExport/import.html\") })\r\n .when(ExportRouter_1.ExportRouter.exportRoute, { templateUrl: url.template(\"importExport/export.html\") })\r\n .when(HomeRouter_1.HomeRouter.indexRoute, { templateUrl: url.template(\"home/index.html\") })\r\n .when(HomeRouter_1.HomeRouter.homeCoursesRoute, { templateUrl: url.template(\"home/learner/courses.html\") })\r\n .when(HomeRouter_1.HomeRouter.homeLearningPathsRoute, { templateUrl: url.template(\"home/learner/learningPaths.html\") })\r\n .when(HomeRouter_1.HomeRouter.homeMaterialsRoute, { templateUrl: url.template(\"home/learner/materials.html\") })\r\n .when(HomeRouter_1.HomeRouter.homeFlashcardsRoute, { templateUrl: url.template(\"home/learner/flashcards.html\") })\r\n .when(HomeRouter_1.HomeRouter.homeReportsRoute, { templateUrl: url.template(\"home/learner/reports.html\") })\r\n .when(HomeRouter_1.HomeRouter.administrationMenuRoute, { templateUrl: url.template(\"home/administration/administrationMenu.html\") })\r\n .when(HomeRouter_1.HomeRouter.administrationReportsRoute, { templateUrl: url.template(\"home/administration/administrationReports.html\") })\r\n .when(HomeRouter_1.HomeRouter.authorMenuRoute, { templateUrl: url.template(\"home/author/authorCourses.html\") })\r\n .when(HomeRouter_1.HomeRouter.authorCoursesRoute, { templateUrl: url.template(\"home/author/authorCourses.html\") })\r\n .when(HomeRouter_1.HomeRouter.authorLearningPathsRoute, { templateUrl: url.template(\"home/author/authorLearningPaths.html\") })\r\n .when(HomeRouter_1.HomeRouter.authorQuizzesRoute, { templateUrl: url.template(\"home/author/authorQuizzes.html\") })\r\n .when(HomeRouter_1.HomeRouter.authorSurveysRoute, { templateUrl: url.template(\"home/author/authorSurveys.html\") })\r\n .when(HomeRouter_1.HomeRouter.authorFlashcardsRoute, { templateUrl: url.template(\"home/author/authorFlashcards.html\") })\r\n .when(HomeRouter_1.HomeRouter.authorMaterialsRoute, { templateUrl: url.template(\"home/author/authorMaterials.html\") })\r\n .when(HomeRouter_1.HomeRouter.authorReportsRoute, { templateUrl: url.template(\"home/author/authorReports.html\") })\r\n .when(HomeRouter_1.HomeRouter.participantsRoute, { templateUrl: url.template(\"home/participants.html\") })\r\n .when(HomeRouter_1.HomeRouter.attendeeManagerCoursesRoute, { templateUrl: url.template(\"home/attendee/attendeeManagerCourses.html\") })\r\n .when(HomeRouter_1.HomeRouter.attendeeManagerLearningPathsRoute, { templateUrl: url.template(\"home/attendee/attendeeManagerLearningPaths.html\") })\r\n .when(HomeRouter_1.HomeRouter.attendeeManagerReportsRoute, { templateUrl: url.template(\"home/attendee/attendeeManagerReports.html\") })\r\n .when(HomeRouter_1.HomeRouter.instructorCoursesRoute, { templateUrl: url.template(\"home/instructor/instructorCourses.html\") })\r\n .when(HomeRouter_1.HomeRouter.instructorLearningPathsRoute, { templateUrl: url.template(\"home/instructor/instructorLearningPaths.html\") })\r\n .when(HomeRouter_1.HomeRouter.instructorReportsRoute, { templateUrl: url.template(\"home/instructor/instructorReports.html\") })\r\n .when(SlideTemplatesRouter_1.SlideTemplatesRouter.indexRoute, { templateUrl: url.template(\"slides/slides.html\") })\r\n .when(SlideTemplatesRouter_1.SlideTemplatesRouter.editRoute, { templateUrl: url.template(\"slides/slideCreateEdit.html\") })\r\n .when(SlideTemplatesRouter_1.SlideTemplatesRouter.bundleUpdateRoute, { templateUrl: url.template(\"slides/slidesBundleEdit.html\") })\r\n .when(GamificationRouter_1.GamificationRouter.gameProgramsRoute, { templateUrl: url.template(\"gamification/games.html\") })\r\n .when(GamificationRouter_1.GamificationRouter.gameProgramEditRoute, { templateUrl: url.template(\"gamification/gameCreateEdit.html\") })\r\n .when(GamificationRouter_1.GamificationRouter.gameProgramCreateRoute, { templateUrl: url.template(\"gamification/gameCreateEdit.html\") })\r\n .otherwise({ redirectTo: MainRouter_1.MainRouter.mainRoute });\r\n $httpProvider.interceptors.push(HttpInterceptor_1.HttpInterceptor.NAME);\r\n}\r\nfunction thirdPartyConfiguration($provide) {\r\n $provide.decorator('taOptions', ['taRegisterTool', '$rootScope', '$delegate', 'taSelection', function (taRegisterTool, $rootScope, taOptions, taSelection) {\r\n var callExternalTaToolFunction = function (textAngular, deferred, event, restoreSelection) {\r\n var eventData = {\r\n eventSourceButton: $(textAngular.$element),\r\n callbackFunction: function (html) {\r\n $(textAngular.$editor().displayElements.text[0]).trigger('focus');\r\n textAngular.$editor().wrapSelection('insertHTML', \"\", true);\r\n deferred.resolve();\r\n if (restoreSelection) {\r\n restoreSelection();\r\n }\r\n if (html) {\r\n var sel, range;\r\n sel = window.getSelection();\r\n if (sel.getRangeAt && sel.rangeCount) {\r\n range = sel.getRangeAt(0);\r\n range.deleteContents();\r\n var el = document.createElement(\"div\");\r\n el.innerHTML = html;\r\n var frag = document.createDocumentFragment(), node, lastNode;\r\n while ((node = el.firstChild)) {\r\n lastNode = frag.appendChild(node);\r\n }\r\n range.insertNode(frag);\r\n if (lastNode) {\r\n range = range.cloneRange();\r\n range.setStartAfter(lastNode);\r\n range.collapse(true);\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n }\r\n }\r\n deferred.resolve();\r\n }\r\n },\r\n textAngular: textAngular\r\n };\r\n $rootScope.$broadcast(event, eventData);\r\n return false;\r\n };\r\n var hexToRgb = function (hex) {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16)\r\n } : null;\r\n };\r\n var tableOnSelectAction = function (event, $element, editorScope) {\r\n var selectedElementsCount = $(\".tdSelected\").length;\r\n if (selectedElementsCount == 0) {\r\n setTimeout(function () {\r\n $(\"table\").off(\"click\", \"td\");\r\n setTimeout(function () {\r\n $(\"table\").on(\"click\", \"td\", function (event) {\r\n $(\".tdSelected\").removeClass(\"tdSelected\");\r\n $(this).addClass(\"tdSelected\");\r\n });\r\n }, 200);\r\n }, 200);\r\n return;\r\n }\r\n var finishEdit = function () {\r\n editorScope.updateTaBindtaTextElement();\r\n editorScope.hidePopover();\r\n };\r\n editorScope.displayElements.popover.css('width', '275px');\r\n var container = editorScope.displayElements.popoverContainer;\r\n container.empty();\r\n var tableEditGroup = angular.element('
');\r\n var addRowButton = angular.element('');\r\n addRowButton.on('click', function (event) {\r\n event.preventDefault();\r\n var tbody = $element;\r\n var colnums = tbody.find(\"tr:nth-child(1)\").children().length;\r\n var col = \" \";\r\n var allCols = \"\";\r\n for (var x = 0; x < colnums; x++) {\r\n allCols = allCols + col;\r\n }\r\n var newElem = \"\" + allCols + \"\";\r\n $(\".tdSelected\").parent().after(newElem);\r\n $(\".tdSelected\").removeClass(\"tdSelected\");\r\n setTimeout(function () {\r\n $(\"table\").off(\"click\", \"td\");\r\n setTimeout(function () {\r\n $(\"table\").on(\"click\", \"td\", function (event) {\r\n $(\".tdSelected\").removeClass(\"tdSelected\");\r\n $(this).addClass(\"tdSelected\");\r\n });\r\n }, 200);\r\n }, 200);\r\n finishEdit();\r\n });\r\n var addColButton = angular.element('');\r\n addColButton.on('click', function (event) {\r\n event.preventDefault();\r\n var tbody = $element;\r\n var col = \" \";\r\n console.log($(\".tdSelected\").index());\r\n var childNum = $(\".tdSelected\").index() + 1;\r\n tbody.find(\"tr\").each(function () {\r\n $(this).children(\":nth-child(\" + childNum + \")\").after(col);\r\n });\r\n var colnums = tbody.find(\"tr:nth-child(1)\").children().length;\r\n tbody.find(\"tr:first\").find(\"td\").each(function () {\r\n $(this).width(100 / colnums);\r\n });\r\n setTimeout(function () {\r\n $(\"table\").off(\"click\", \"td\");\r\n setTimeout(function () {\r\n $(\"table\").on(\"click\", \"td\", function (event) {\r\n $(\".tdSelected\").removeClass(\"tdSelected\");\r\n $(this).addClass(\"tdSelected\");\r\n });\r\n }, 200);\r\n }, 200);\r\n finishEdit();\r\n });\r\n var tableEditGroupRemoves = angular.element('
');\r\n var remRowButton = angular.element('');\r\n remRowButton.on('click', function (event) {\r\n event.preventDefault();\r\n var tbody = $element;\r\n var ourRow = $(\".tdSelected\").closest('tr');\r\n ourRow.remove();\r\n window.focus();\r\n if (document.activeElement) {\r\n document.activeElement.blur();\r\n }\r\n finishEdit();\r\n });\r\n var remColButton = angular.element('');\r\n remColButton.on('click', function (event) {\r\n event.preventDefault();\r\n var tbody = $element;\r\n var childNum = $(\".tdSelected\").index() + 1;\r\n tbody.find(\"tr\").each(function () {\r\n $(this).find(\"td:nth-child(\" + childNum + \")\").remove();\r\n });\r\n window.focus();\r\n if (document.activeElement) {\r\n document.activeElement.blur();\r\n }\r\n if (document.body.createTextRange) {\r\n var range = document.body.createTextRange();\r\n range.collapse();\r\n range.select();\r\n }\r\n else {\r\n document.getSelection().removeAllRanges();\r\n }\r\n finishEdit();\r\n });\r\n tableEditGroup.append(addRowButton);\r\n tableEditGroup.append(addColButton);\r\n tableEditGroupRemoves.append(remRowButton);\r\n tableEditGroupRemoves.append(remColButton);\r\n container.append(tableEditGroup);\r\n container.append(tableEditGroupRemoves);\r\n var buttonGroup = angular.element('
');\r\n var fullButton = angular.element('');\r\n fullButton.on('click', function (event) {\r\n event.preventDefault();\r\n $element.css({\r\n 'width': '100%',\r\n 'height': ''\r\n });\r\n finishEdit();\r\n });\r\n var halfButton = angular.element('');\r\n halfButton.on('click', function (event) {\r\n event.preventDefault();\r\n $element.css({\r\n 'width': '50%',\r\n 'height': ''\r\n });\r\n finishEdit();\r\n });\r\n var quartButton = angular.element('');\r\n quartButton.on('click', function (event) {\r\n event.preventDefault();\r\n $element.css({\r\n 'width': '25%',\r\n 'height': ''\r\n });\r\n finishEdit();\r\n });\r\n buttonGroup.append(quartButton);\r\n buttonGroup.append(halfButton);\r\n buttonGroup.append(fullButton);\r\n container.append(buttonGroup);\r\n var deleteGroup = angular.element('
');\r\n var remove = angular.element('');\r\n remove.on('click', function (event) {\r\n event.preventDefault();\r\n if (editorScope.displayElements.text[0].childNodes.length === 1) {\r\n $element.after(\"


\");\r\n }\r\n $element.remove();\r\n window.focus();\r\n if (document.activeElement) {\r\n document.activeElement.blur();\r\n }\r\n finishEdit();\r\n });\r\n deleteGroup.append(remove);\r\n container.append(deleteGroup);\r\n editorScope.showPopover($element);\r\n };\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_EMBEDDED_MATERIAL_BUTTON, {\r\n commandKeyCode: 'AddMaterial',\r\n iconclass: \"fa fa-file-video-o\",\r\n tooltiptext: \"Insert material\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_SELECT_EMBEDDED_MATERIAL, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_EMBEDDED_BUNDLE_BUTTON, {\r\n iconclass: \"fa fa-file-zip-o\",\r\n tooltiptext: \"Insert attached file\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_SELECT_EMBEDDED_BUNDLE, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_SANDBOX_BUTTON, {\r\n iconclass: \"fa fa-file-code-o\",\r\n tooltiptext: \"Insert external content\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_SELECT_SANDBOX, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_FULLSCREEN_BUTTON, {\r\n iconclass: \"fa fa-arrows-alt\",\r\n tooltiptext: \"Fullscreen mode\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_FULLSCREEN, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_LOAD_FROM_TEMPLATE_BUTTON, {\r\n iconclass: \"fa fa-cubes\",\r\n tooltiptext: \"Load from template\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_LOAD_FROM_TEMPLATE, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_CONVERT_TO_NEW_TEMPLATE_BUTTON, {\r\n iconclass: \"fa fa-refresh\",\r\n tooltiptext: \"Update from newer template\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_CONVERT_TO_NEW_TEMPLATE, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_ADD_TIP_BUTTON, {\r\n iconclass: \"fa fa-lightbulb-o\",\r\n tooltiptext: \"Add tooltip\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_ADD_TIP, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_ADD_QUESTION_BUTTON, {\r\n iconclass: \"fa fa-question-circle\",\r\n tooltiptext: \"Add question\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_ADD_QUESTION, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_ADD_ASSESSMENT_BUTTON, {\r\n iconclass: \"fa fa-comment-o\",\r\n tooltiptext: \"Add assessment\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_ADD_ASSESSMENT, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_FONT_COLOR, {\r\n display: \"
\\n\" +\r\n \"\\n\" +\r\n \"
\",\r\n tooltiptext: \"Font color\",\r\n action: function () {\r\n return this.$editor().wrapSelection('forecolor', this.fontColorModel);\r\n },\r\n fontColorModel: \"#000000\"\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_BACKGROUND_FONT_COLOR, {\r\n display: \"
\\n\" +\r\n \"\\n\" +\r\n \"
\",\r\n tooltiptext: \"Background color\",\r\n action: function () {\r\n var me = this;\r\n if (!this.$editor().wrapSelection) {\r\n setTimeout(function () {\r\n me.action(me.backgroundColorModel);\r\n }, 100);\r\n }\r\n else {\r\n var rgb = hexToRgb(me.backgroundColorModel);\r\n var backgroundColorRGB = \"background-color: rgb(\" + rgb.r + \", \" + rgb.g + \", \" + rgb.b + \");\";\r\n if (taSelection.getSelection().start.element.outerHTML !== undefined\r\n && (taSelection.getSelection().start.element.hasAttribute(\"style\")\r\n || taSelection.getSelection().end.element.hasAttribute(\"style\"))\r\n && (taSelection.getSelection().start.element.getAttribute(\"style\").indexOf(backgroundColorRGB) !== -1\r\n || taSelection.getSelection().end.element.getAttribute(\"style\").indexOf(backgroundColorRGB) !== -1)) {\r\n return this.$editor().wrapSelection('backColor', \"rgb(255, 255, 255)\");\r\n }\r\n else {\r\n return this.$editor().wrapSelection('backColor', me.backgroundColorModel);\r\n }\r\n }\r\n },\r\n backgroundColorModel: \"#ffff80\"\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_TOGGLE_BUTTON, {\r\n display: \"\",\r\n tooltiptext: \"Add toggle\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_ADD_TOGGLE, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_TOGGLE_CONTENT_BUTTON, {\r\n display: \"\",\r\n tooltiptext: \"Add toggle answer\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_ADD_TOGGLE_CONTENT, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_ADD_NOTE_FOR_PROGRESS_BUTTON, {\r\n iconclass: \"fa fa-pencil\",\r\n tooltiptext: \"Add note\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_ADD_NOTE_FOR_PROGRESS, restoreSelection);\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_ADD_TABLE_BUTTON, {\r\n iconclass: \"fa fa-table\",\r\n tooltiptext: \"Insert table\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_ADD_TABLE, restoreSelection);\r\n },\r\n onElementSelect: {\r\n element: 'table',\r\n action: tableOnSelectAction\r\n }\r\n });\r\n taRegisterTool(RichTextEditorDirective_1.RichTextEditorController.TA_AI_CONTENT_GENERATION_BUTTON, {\r\n display: \"\",\r\n tooltiptext: \"Insert AI generated content\",\r\n action: function (deferred, restoreSelection) {\r\n return callExternalTaToolFunction(this, deferred, Event_1.Event.TA_AI_CONTENT_GENERATION, restoreSelection);\r\n }\r\n });\r\n taOptions.keyMappings = [\r\n { commandKeyCode: 'TabKey',\r\n testForKey: function (event) {\r\n return false;\r\n }\r\n },\r\n { commandKeyCode: 'ShiftTabKey',\r\n testForKey: function (event) {\r\n if (event.keyCode = 9 && !event.ctrlKey && !event.metaKey && event.shiftKey && !event.altKey)\r\n return false;\r\n }\r\n },\r\n {\r\n commandKeyCode: 'AddMaterial',\r\n testForKey: function (event) {\r\n if (event.which == 77 && event.ctrlKey && !event.shiftKey && !event.altKey)\r\n return true;\r\n }\r\n }\r\n ];\r\n taOptions.toolbar = [\r\n [RichTextEditorDirective_1.RichTextEditorController.TA_EMBEDDED_MATERIAL_BUTTON, 'insertVideo', 'insertImage',\r\n RichTextEditorDirective_1.RichTextEditorController.TA_EMBEDDED_BUNDLE_BUTTON, 'insertLink',\r\n RichTextEditorDirective_1.RichTextEditorController.TA_SANDBOX_BUTTON, RichTextEditorDirective_1.RichTextEditorController.TA_LOAD_FROM_TEMPLATE_BUTTON,\r\n RichTextEditorDirective_1.RichTextEditorController.TA_CONVERT_TO_NEW_TEMPLATE_BUTTON, RichTextEditorDirective_1.RichTextEditorController.TA_ADD_TABLE_BUTTON,\r\n RichTextEditorDirective_1.RichTextEditorController.TA_AI_CONTENT_GENERATION_BUTTON],\r\n ['bold', 'italics', 'underline', 'strikeThrough', RichTextEditorDirective_1.RichTextEditorController.TA_FONT_COLOR,\r\n RichTextEditorDirective_1.RichTextEditorController.TA_BACKGROUND_FONT_COLOR],\r\n ['ul', 'ol', 'indent', 'outdent', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],\r\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote'],\r\n [RichTextEditorDirective_1.RichTextEditorController.TA_ADD_TIP_BUTTON, RichTextEditorDirective_1.RichTextEditorController.TA_ADD_QUESTION_BUTTON,\r\n RichTextEditorDirective_1.RichTextEditorController.TA_ADD_ASSESSMENT_BUTTON, RichTextEditorDirective_1.RichTextEditorController.TA_TOGGLE_BUTTON,\r\n RichTextEditorDirective_1.RichTextEditorController.TA_TOGGLE_CONTENT_BUTTON, RichTextEditorDirective_1.RichTextEditorController.TA_ADD_NOTE_FOR_PROGRESS_BUTTON],\r\n ['redo', 'undo', 'clear', RichTextEditorDirective_1.RichTextEditorController.TA_FULLSCREEN_BUTTON, 'html'],\r\n ];\r\n taOptions.defaultTagAttributes.a.target = '_blank';\r\n return taOptions;\r\n }]);\r\n $provide.decorator('taCustomRenderers', ['$delegate', '$compile', '$rootScope', '$timeout', function (taCustomRenderers, $compile, $rootScope, $timeout) {\r\n taCustomRenderers.push({\r\n selector: VhsEmbeddedMaterialDirective_1.VhsEmbeddedMaterialController.TA_ELEMENT_SELECTOR, customAttribute: '',\r\n renderLogic: function (element) {\r\n VhsEmbeddedMaterialDirective_1.VhsEmbeddedMaterialController.TA_RENDER_FUNCTION(element, $compile, $rootScope, $timeout);\r\n }\r\n });\r\n taCustomRenderers.push({\r\n selector: VhsEmbeddedBundleDirective_1.VhsEmbeddedBundleController.TA_ELEMENT_SELECTOR, customAttribute: '',\r\n renderLogic: function (element) {\r\n VhsEmbeddedBundleDirective_1.VhsEmbeddedBundleController.TA_RENDER_FUNCTION(element, $compile, $rootScope, $timeout);\r\n }\r\n });\r\n taCustomRenderers.push({\r\n selector: VhsSandboxDirective_1.VhsSandboxController.TA_ELEMENT_SELECTOR, customAttribute: '',\r\n renderLogic: function (element) {\r\n VhsSandboxDirective_1.VhsSandboxController.TA_RENDER_FUNCTION(element, $compile, $rootScope, $timeout);\r\n }\r\n });\r\n taCustomRenderers.push({\r\n selector: VhsDownloadBundleDirective_1.VhsDownloadBundleController.TA_ELEMENT_SELECTOR, customAttribute: '',\r\n renderLogic: function (element) {\r\n VhsDownloadBundleDirective_1.VhsDownloadBundleController.TA_RENDER_FUNCTION(element, $compile, $rootScope, $timeout);\r\n }\r\n });\r\n taCustomRenderers.push({\r\n selector: VhsUserNoteDirective_1.VhsUserNoteDirectiveController.TA_ELEMENT_SELECTOR, customAttribute: '',\r\n renderLogic: function (element) {\r\n VhsUserNoteDirective_1.VhsUserNoteDirectiveController.TA_RENDER_FUNCTION(element, $compile, $rootScope, $timeout);\r\n }\r\n });\r\n taCustomRenderers.push({\r\n selector: \"a\", customAttribute: '',\r\n renderLogic: function (element) {\r\n var href = element.prop(\"href\");\r\n if (href.match('section=\\\\d+.*\\\\&changeSection')) {\r\n element.attr(\"target\", \"_self\");\r\n }\r\n else {\r\n element.attr(\"target\", \"_blank\");\r\n }\r\n }\r\n });\r\n return taCustomRenderers;\r\n }]);\r\n}\r\nfunction run($log, $rootScope, $q, $timeout, $route, $location, authApi, authManager, authRedirect, localStorage) {\r\n var original = $location.path;\r\n $location.path = function (path, reload) {\r\n if (reload === false) {\r\n var lastRoute = $route.current;\r\n var un = $rootScope.$on('$locationChangeSuccess', function () {\r\n $route.current = lastRoute;\r\n un();\r\n });\r\n }\r\n return original.apply($location, [path]);\r\n };\r\n $rootScope.isInsideCoursePage = false;\r\n $rootScope.isHideMainBreadcrumbs = false;\r\n $rootScope.appVersionNumber = buildVersionNumber(AppProperties_1.AppProperties.appVersion, AppProperties_1.AppProperties.svnRevision, AppProperties_1.AppProperties.buildDate);\r\n var completedSso = authManager.completeSsoIfNeeded();\r\n var authenticationPromise;\r\n if (completedSso) {\r\n console.log(\"SSO is completed. Waiting for redirect...\");\r\n authenticationPromise = $q.reject(\"redirect\");\r\n }\r\n else if (authManager.isAuthenticated()) {\r\n var locale = authManager.getToken().locale && authManager.getToken().locale === AppProperties_1.AppProperties.currentLocale ?\r\n authManager.getToken().locale : AppProperties_1.AppProperties.currentLocale;\r\n if (!LogOnController_1.LogOnController.reloadApplicationForLocaleIfNeeded(locale, false)) {\r\n console.log(\"Is authenticated. Start refresh.\");\r\n authApi.restartAutoRefresh();\r\n authenticationPromise = $q.when(null);\r\n }\r\n else {\r\n console.log(\"Waiting for application reload for new locale \" + locale);\r\n authenticationPromise = $q.reject(\"redirect\");\r\n }\r\n }\r\n else if (authManager.restoreAvailable()) {\r\n console.log(\"Restore session\");\r\n authenticationPromise = authApi.restoreSessionOrClearToken(authManager.getToken().refreshToken)\r\n .catch(function () {\r\n if (authManager.isAutoSsoAvailable()) {\r\n return authManager.startSsoExchange(true);\r\n }\r\n else {\r\n return $q.when(null);\r\n }\r\n });\r\n }\r\n else if (authManager.isAutoSsoAvailable()) {\r\n console.log(\"Auto sso available\");\r\n authenticationPromise = authManager.startSsoExchange(true);\r\n }\r\n else if (authManager.redirectRequired()) {\r\n console.log(\"Redirect on BU domain\");\r\n authManager.redirectToBUDomain();\r\n }\r\n else {\r\n console.log(\"Go forward without authentication\");\r\n authenticationPromise = $q.when(null);\r\n }\r\n authenticationPromise\r\n .then(function () {\r\n $rootScope.appIsInitialized = true;\r\n var VERSION_STORAGE_KEY = \"vhs.application.version.number\";\r\n if (localStorage.contains(VERSION_STORAGE_KEY)\r\n && localStorage.get(VERSION_STORAGE_KEY) != AppProperties_1.AppProperties.buildVersion) {\r\n INotifier_1.notifier.warning(\"Application version has been updated since your last visit\");\r\n }\r\n localStorage.put(VERSION_STORAGE_KEY, AppProperties_1.AppProperties.buildVersion);\r\n })\r\n .finally(function () {\r\n $timeout(function () { return $rootScope.appIsInitialized = true; }, 3000);\r\n });\r\n}\r\nfunction buildVersionNumber(appVersion, svnRevision, buildDate) {\r\n var parsed = moment(buildDate, \"YYYYMMDDHHmm\");\r\n return appVersion + \".\" + svnRevision + \"; \" + parsed.format(\"YYYY-MM-DD HH:mm\");\r\n}\r\n},{\"./INotifier\":5,\"./ai/AIModule\":10,\"./auth/AuthModule\":17,\"./auth/AuthService\":18,\"./auth/LogOnController\":21,\"./authcore/AuthCoreModule\":24,\"./authcore/AuthManager\":25,\"./authcore/AuthRedirect\":26,\"./branding/BrandingModule\":32,\"./branding/CustomBrandingService\":35,\"./bundles/BundlesModule\":37,\"./businessUnits/BusinessUnitsModule\":43,\"./common/CommonModule\":51,\"./components/ComponentsModule\":61,\"./components/VhsEmbeddedMaterialDirective\":105,\"./components/models/Event\":170,\"./components/richtext/RichTextEditorDirective\":177,\"./components/richtext/VhsDownloadBundleDirective\":181,\"./components/richtext/VhsEmbeddedBundleDirective\":182,\"./components/richtext/VhsSandboxDirective\":184,\"./components/richtext/VhsUserNoteDirective\":189,\"./courses/CoursesModule\":216,\"./external/ExternalResourcesModule\":229,\"./finances/FinancesModule\":233,\"./gamification/GamificationModule\":249,\"./home/HomeModule\":254,\"./http/HttpInterceptor\":279,\"./http/HttpModule\":280,\"./importExport/ImportExportModule\":287,\"./info/InfoModule\":291,\"./infrastructure/InfrastructureModule\":294,\"./infrastructure/Storage\":295,\"./integration/authorizenet/AuthorizeNetModule\":296,\"./integration/azureCognitiveServices/AzureCognitiveServicesModule\":298,\"./integration/azureWebchatBotframework/AzureWebchatBotframeworkModule\":300,\"./integration/freeenrollment/FreeEnrollmentModule\":302,\"./integration/paypal/PaypalModule\":307,\"./jobs/JobsModule\":309,\"./learningPaths/LearningPathsModule\":322,\"./logs/LogsModule\":327,\"./main/MainModule\":331,\"./materials/MaterialsModule\":338,\"./news/NewsModule\":352,\"./notificationTemplates/NotificationModule\":359,\"./personal/AssessmentsModule\":363,\"./personal/PersonalModule\":376,\"./policies/PoliciesModule\":389,\"./quizzes/QuizzesModule\":398,\"./reference/ReferenceModule\":407,\"./security/SecurityModule\":419,\"./settings/SettingsModule\":426,\"./statistics/StatisticsModule\":449,\"./storage/StorageModule\":457,\"./urls/AssessmentsRouter\":462,\"./urls/AuthRouter\":463,\"./urls/BusinessUnitsRouter\":464,\"./urls/CertificateTemplatesRouter\":465,\"./urls/CommonRouter\":466,\"./urls/CoursesRouter\":468,\"./urls/ExportRouter\":469,\"./urls/ExternalResourcesRouter\":470,\"./urls/FinancesRouter\":471,\"./urls/GamificationRouter\":472,\"./urls/HomeRouter\":473,\"./urls/ImportRouter\":474,\"./urls/InfoRouter\":475,\"./urls/JobsRouter\":476,\"./urls/LearningPathsRouter\":477,\"./urls/LogsRouter\":478,\"./urls/MainRouter\":479,\"./urls/MaterialsRouter\":480,\"./urls/NewsRouter\":481,\"./urls/NotificationTemplatesRouter\":482,\"./urls/PayPalRouter\":483,\"./urls/PersonalRouter\":484,\"./urls/PoliciesRouter\":485,\"./urls/QuizzesRouter\":486,\"./urls/ReferenceRouter\":487,\"./urls/SlideTemplatesRouter\":488,\"./urls/StatisticsRouter\":489,\"./urls/SystemSettingsRouter\":490,\"./urls/UrlServiceProvider\":491,\"./urls/UrlsModule\":492,\"./urls/UsersRouter\":493,\"./users/UsersModule\":504,\"./utils/AppProperties\":\"AppProperties\",\"./utils/UtilsModule\":529}],13:[function(require,module,exports){\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar AssessmentsRouter_1 = require(\"../urls/AssessmentsRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar AssessmentsService_1 = require(\"./AssessmentsService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar AssessmentStatus_1 = require(\"./models/AssessmentStatus\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar SortEntry_1 = require(\"../SortEntry\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar AssessmentsController = (function () {\r\n function AssessmentsController($http, $location, $scope, $window, url, authManager, assessmentsService, assessmentsRouter, securityService, brandingService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.url = url;\r\n this.authManager = authManager;\r\n this.assessmentsService = assessmentsService;\r\n this.assessmentsRouter = assessmentsRouter;\r\n this.securityService = securityService;\r\n this.brandingService = brandingService;\r\n this.rowShow = new Map();\r\n this.disableRemoveButton = false;\r\n this.confirmationDialogText = \"User :user_name has already started the scoring of this assessment. Do you want to notify him and start scoring?\";\r\n this.status = [\r\n \"\",\r\n AssessmentStatus_1.AssessmentStatus[AssessmentStatus_1.AssessmentStatus.NEW],\r\n AssessmentStatus_1.AssessmentStatus[AssessmentStatus_1.AssessmentStatus.IN_SCORING],\r\n AssessmentStatus_1.AssessmentStatus[AssessmentStatus_1.AssessmentStatus.SCORED]\r\n ];\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.scoreAssessments || systemPermissions.scoreAnyAssessments; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Assessments\").update();\r\n this.assessmentsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/assessments\")));\r\n this.assessmentsGridModel.pageSize = 9;\r\n this.assessmentsGridModel.filter.status = this.status[1];\r\n this.assessmentsGridModel.addLoadingListener(this);\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n }\r\n AssessmentsController.prototype.getAssessmentDetailsUrl = function (id) {\r\n return this.assessmentsRouter.assessmentDetailsUrl(id);\r\n };\r\n AssessmentsController.prototype.startLoading = function () {\r\n };\r\n AssessmentsController.prototype.endLoading = function () {\r\n };\r\n AssessmentsController.prototype.search = function () {\r\n this.assessmentsGridModel.loadPage(0);\r\n };\r\n AssessmentsController.prototype.openAssessment = function (assessment) {\r\n this.selectedAssessment = assessment;\r\n this.redirectToAssessmentDetailUrl(assessment.id);\r\n };\r\n AssessmentsController.prototype.redirectToAssessmentDetailUrl = function (id) {\r\n if (id) {\r\n this.$location.path(this.assessmentsRouter.assessmentDetailsUrl(id));\r\n }\r\n else if (this.selectedAssessment) {\r\n this.$location.path(this.assessmentsRouter.assessmentDetailsUrl(this.selectedAssessment.id));\r\n }\r\n };\r\n AssessmentsController.prototype.isSorting = function (fieldName) {\r\n return this.assessmentsGridModel.sorting.filter(function (s) { return s.fieldName === fieldName; }).length > 0;\r\n };\r\n AssessmentsController.prototype.isSortingDesc = function (fieldName) {\r\n if (this.assessmentsGridModel.sorting) {\r\n var sortEntry = this.assessmentsGridModel.sorting.filter(function (s) { return s.fieldName === fieldName; }).pop();\r\n return sortEntry && sortEntry.sortOrder === SortEntry_1.SortOrder.DESC;\r\n }\r\n };\r\n AssessmentsController.prototype.decodeAssessmentStatus = function (status) {\r\n var result;\r\n switch (status) {\r\n case \"NEW\": {\r\n result = \"New\";\r\n break;\r\n }\r\n case \"IN_SCORING\": {\r\n result = \"In scoring\";\r\n break;\r\n }\r\n case \"SCORED\": {\r\n result = \"Scored\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n AssessmentsController.prototype.clearSearchForm = function () {\r\n this.assessmentsGridModel.filter = {};\r\n this.assessmentsGridModel.filter.status = this.status[1];\r\n };\r\n AssessmentsController.NAME = \"assessments.AssessmentsController\";\r\n AssessmentsController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n \"$scope\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AssessmentsService_1.AssessmentsService.NAME,\r\n AssessmentsRouter_1.AssessmentsRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return AssessmentsController;\r\n})();\r\nexports.AssessmentsController = AssessmentsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../SortEntry\":8,\"../authcore/AuthManager\":25,\"../branding/CustomBrandingService\":35,\"../security/SecurityService\":420,\"../urls/AssessmentsRouter\":462,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528,\"./AssessmentsService\":15,\"./models/AssessmentStatus\":16}],14:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar AssessmentsRouter_1 = require(\"../urls/AssessmentsRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar AssessmentsService_1 = require(\"./AssessmentsService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar AssessmentStatus_1 = require(\"./models/AssessmentStatus\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar AssessmentsDetailsController = (function () {\r\n function AssessmentsDetailsController($http, $location, $scope, $window, $routeParams, $q, url, authService, assessmentsService, assessmentsRouter, securityService, coursesRouter, authRedirect, bundleService, brandingService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.$routeParams = $routeParams;\r\n this.$q = $q;\r\n this.url = url;\r\n this.authService = authService;\r\n this.assessmentsService = assessmentsService;\r\n this.assessmentsRouter = assessmentsRouter;\r\n this.securityService = securityService;\r\n this.coursesRouter = coursesRouter;\r\n this.authRedirect = authRedirect;\r\n this.bundleService = bundleService;\r\n this.brandingService = brandingService;\r\n this.isLoading = false;\r\n this.isInitialized = true;\r\n this.questionScore = new Map();\r\n this.isQuestionScoreCalculated = false;\r\n this.disableRemoveButton = false;\r\n this.disableLocationChange = true;\r\n this.redirected = false;\r\n this.assessmentId = 0;\r\n this.confirmationDialogTextTemplate = \"User :user_name has already started the scoring of this assessment. Do you want to notify him and start scoring?\";\r\n this.assessmentScoringErrorDialogTextTemplate = \"User :user_name has started scoring of this assessment. Your scores and comments are reverted.\";\r\n this.correctShowAnswerMinimalScore = 50;\r\n this.isEdit = false;\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.scoreAssessments || systemPermissions.scoreAnyAssessments; });\r\n this.assessmentId = this.$routeParams[AssessmentsRouter_1.AssessmentsRouter.ASSESSMENT_ID_PARAM];\r\n this.assessmentsService.getQuizQuestionsPoints(this.assessmentId).then(function (result) {\r\n _this.totalPoints = result;\r\n });\r\n this.assessmentsService.getQuizQuestionResultCurrentPointsNumber(this.assessmentId).then(function (points) {\r\n _this.quizStartPoints = points;\r\n });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header(\"\" + this.assessmentId)\r\n .addParentLink(\"Assessments\", \"#\" + this.assessmentsRouter.assessmentsUrl())\r\n .update();\r\n this.assessmentResultsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/assessments/\" + this.assessmentId + \"/results\")));\r\n this.assessmentResultsGridModel.pageSize = 300;\r\n this.assessmentResultsGridModel.addLoadingListener(this);\r\n this.initializePromise = this.$q.all([\r\n authService.getCurrentUser(),\r\n this.loadAssessment()\r\n ])\r\n .then(function (responses) {\r\n _this.currentUserId = responses[0].id;\r\n var assessment = responses[1];\r\n if (assessment.status == AssessmentStatus_1.AssessmentStatus[AssessmentStatus_1.AssessmentStatus.SCORED]) {\r\n }\r\n else if (assessment.status == AssessmentStatus_1.AssessmentStatus[AssessmentStatus_1.AssessmentStatus.NEW]) {\r\n return _this.startScoringAssessment();\r\n }\r\n else if (assessment.status == AssessmentStatus_1.AssessmentStatus[AssessmentStatus_1.AssessmentStatus.IN_SCORING]) {\r\n if (assessment.scorerId != _this.currentUserId) {\r\n _this.showConfirmationDialog();\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n else {\r\n _this.disableLocationChange = false;\r\n _this.authRedirect.forwardToAccessDenied();\r\n }\r\n })\r\n .finally(function () {\r\n _this.isInitialized = true;\r\n _this.initializePromise = null;\r\n });\r\n }\r\n AssessmentsDetailsController.prototype.startScoringAssessment = function () {\r\n var _this = this;\r\n return this.assessmentsService.startAssessmentScoring(this.assessment.id, this.assessment.version)\r\n .then(function (startedAssessment) {\r\n _this.assessment = angular.copy(startedAssessment);\r\n if (_this.assessment.scorerId != _this.currentUserId) {\r\n _this.showConfirmationDialog();\r\n }\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.commonError(response);\r\n _this.redirectToBack();\r\n });\r\n };\r\n AssessmentsDetailsController.prototype.redirectToBack = function () {\r\n this.redirected = true;\r\n this.disableLocationChange = false;\r\n $('.modal-backdrop').remove();\r\n this.$location.url(this.assessmentsRouter.assessmentsUrl());\r\n };\r\n AssessmentsDetailsController.prototype.cancelChanges = function () {\r\n var _this = this;\r\n if (this.oldStatus && this.oldScorerId) {\r\n this.assessmentsService.cancelChanges(this.assessmentId, this.oldStatus, this.oldScorerId)\r\n .finally(function () {\r\n $(\"#replaceScorerConfirmationDialog\").modal(\"hide\");\r\n $('.modal-backdrop').remove();\r\n _this.redirectToBack();\r\n });\r\n }\r\n else {\r\n $(\"#replaceScorerConfirmationDialog\").modal(\"hide\");\r\n $('.modal-backdrop').remove();\r\n this.redirectToBack();\r\n }\r\n };\r\n AssessmentsDetailsController.prototype.scoreAssessment = function () {\r\n var _this = this;\r\n this.isLoading = true;\r\n var scorePromise = !this.isEdit\r\n ? this.assessmentsService.scoreQuiz(this.assessment.id, this.assessment.version, this.assessmentResultsGridModel.entries)\r\n : this.assessmentsService.updateQuizScores(this.assessment.id, this.assessment.version, this.assessmentResultsGridModel.entries);\r\n scorePromise\r\n .then(function (success) {\r\n INotifier_1.notifier.success(\"Assessment successfully scored\");\r\n _this.redirectToBack();\r\n })\r\n .catch(function (response) {\r\n if (response.data.error === \"InvalidState\" || response.data.error === \"OptimisticLock\"\r\n || response.data.error === \"error.assessment.already.scored\") {\r\n _this.loadAssessment()\r\n .then(function () {\r\n _this.showAssessmentScoringDialog();\r\n });\r\n return;\r\n }\r\n else {\r\n INotifier_1.notifier.commonError(response);\r\n }\r\n _this.redirectToBack();\r\n })\r\n .finally(function () {\r\n _this.isLoading = false;\r\n _this.isEdit = false;\r\n });\r\n };\r\n AssessmentsDetailsController.prototype.startLoading = function () {\r\n };\r\n AssessmentsDetailsController.prototype.endLoading = function () {\r\n var _this = this;\r\n if (this.initializePromise) {\r\n this.initializePromise.then(function () {\r\n _this.loadAudioResponseUrls();\r\n });\r\n }\r\n else {\r\n this.loadAudioResponseUrls();\r\n }\r\n };\r\n AssessmentsDetailsController.prototype.showConfirmationDialog = function () {\r\n this.confirmationDialogText = this.confirmationDialogTextTemplate\r\n .replace(':user_name', this.assessment.scorerName);\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#replaceScorerConfirmationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n AssessmentsDetailsController.prototype.showAssessmentScoringDialog = function () {\r\n this.assessmentScoringErrorDialogText = this.assessmentScoringErrorDialogTextTemplate\r\n .replace(':user_name', this.assessment.scorerName);\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#scoringErrorDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n AssessmentsDetailsController.prototype.setScorer = function () {\r\n var _this = this;\r\n this.oldStatus = this.assessment.status;\r\n this.oldScorerId = this.assessment.scorerId;\r\n return this.assessmentsService.setScorer(this.assessmentId)\r\n .then(function (result) {\r\n _this.assessment = angular.copy(result);\r\n return _this.assessment;\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.commonError(response);\r\n _this.redirectToBack();\r\n });\r\n };\r\n AssessmentsDetailsController.prototype.showScoreToAllDialog = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#scoreToAllDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n AssessmentsDetailsController.prototype.closePopup = function (elementId) {\r\n $(\"#\" + elementId).modal(\"hide\");\r\n };\r\n AssessmentsDetailsController.prototype.setScoresToAllAnswers = function () {\r\n this.assessmentResultsGridModel.entries.forEach(function (assessment) {\r\n assessment.comment = $('#globalComment').val();\r\n assessment.score = parseInt($('#globalScoreInput').val());\r\n });\r\n this.closePopup('scoreToAllDialog');\r\n };\r\n AssessmentsDetailsController.prototype.checkEmpty = function (controlElementId, elementId) {\r\n if ($('#' + controlElementId).val().length != 0) {\r\n $('#' + elementId).removeAttr('disabled');\r\n }\r\n else {\r\n $('#' + elementId).attr('disabled', 'disabled');\r\n }\r\n };\r\n AssessmentsDetailsController.prototype.loadAssessment = function () {\r\n var _this = this;\r\n return this.assessmentsService.get(this.assessmentId)\r\n .then(function (result) {\r\n _this.assessment = angular.copy(result);\r\n return _this.assessment;\r\n });\r\n };\r\n AssessmentsDetailsController.prototype.loadBundle = function (bundleId) {\r\n var _this = this;\r\n return this.bundleService.getBundle(bundleId)\r\n .then(function (bundle) {\r\n _this.bundle = bundle;\r\n return _this.bundle;\r\n });\r\n };\r\n AssessmentsDetailsController.prototype.loadAudioResponseUrls = function () {\r\n var _this = this;\r\n var assessmentsWithAudio = [];\r\n this.assessmentResultsGridModel.entries.forEach(function (e) {\r\n e.responseData = e.jsonData ? JSON.parse(e.jsonData) : null;\r\n if (e.responseData && e.responseData.bundleFileKey) {\r\n assessmentsWithAudio.push(e);\r\n }\r\n });\r\n if (this.assessment.bundleId) {\r\n this.loadBundle(this.assessment.bundleId)\r\n .then(function () {\r\n assessmentsWithAudio.forEach(function (e) {\r\n e.bundleFileUrl = _this.bundle.filesMap.has(e.responseData.bundleFileKey)\r\n ? _this.bundle.filesMap.get(e.responseData.bundleFileKey).url\r\n : null;\r\n });\r\n });\r\n }\r\n };\r\n AssessmentsDetailsController.prototype.getUrlForAttachment = function (file) {\r\n if (this.bundle) {\r\n return this.bundle.filesMap.has(file.bundleFileKey)\r\n ? this.bundle.filesMap.get(file.bundleFileKey).url\r\n : null;\r\n }\r\n return null;\r\n };\r\n AssessmentsDetailsController.prototype.startEdit = function () {\r\n this.isEdit = true;\r\n };\r\n Object.defineProperty(AssessmentsDetailsController.prototype, \"scoredPoints\", {\r\n get: function () {\r\n var _this = this;\r\n var scoredPoints = this.quizStartPoints;\r\n if (!this.isQuestionScoreCalculated && this.assessmentResultsGridModel.entries.length != 0) {\r\n this.isQuestionScoreCalculated = true;\r\n this.assessmentResultsGridModel.entries.forEach(function (assessment) {\r\n _this.assessmentsService.getQuizQuestionPoints(assessment.questionId).then(function (points) {\r\n _this.questionScore.set(assessment.questionId, points);\r\n });\r\n });\r\n }\r\n this.assessmentResultsGridModel.entries.forEach(function (assessments) {\r\n if (assessments.score >= _this.correctShowAnswerMinimalScore) {\r\n scoredPoints += _this.questionScore.get(assessments.questionId);\r\n }\r\n });\r\n return scoredPoints;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AssessmentsDetailsController.NAME = \"assessments.AssessmentDetailsController\";\r\n AssessmentsDetailsController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n \"$scope\",\r\n \"$window\",\r\n \"$routeParams\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AssessmentsService_1.AssessmentsService.NAME,\r\n AssessmentsRouter_1.AssessmentsRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n BundleService_1.BundleService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return AssessmentsDetailsController;\r\n})();\r\nexports.AssessmentsDetailsController = AssessmentsDetailsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthRedirect\":26,\"../branding/CustomBrandingService\":35,\"../bundles/BundleService\":36,\"../security/SecurityService\":420,\"../urls/AssessmentsRouter\":462,\"../urls/CoursesRouter\":468,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./AssessmentsService\":15,\"./models/AssessmentStatus\":16}],15:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AssessmentsService = (function () {\r\n function AssessmentsService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n }\r\n AssessmentsService.prototype.startAssessmentScoring = function (assessmentId, assessmentVersion) {\r\n return this.$http.put(this.url.base(\"/api/assessments/:assessmentId/startScoring?assessmentVersion=:assessmentVersion\")\r\n .param(\":assessmentId\", assessmentId)\r\n .param(\":assessmentVersion\", assessmentVersion).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.getStatus = function (assessmentId) {\r\n return this.$http.get(this.url.base(\"/api/assessments/:id/status\")\r\n .param(\":id\", assessmentId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.getScorerId = function (assessmentId) {\r\n return this.$http.get(this.url.base(\"/api/assessments/:id/scorer\")\r\n .param(\":id\", assessmentId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.getScorerName = function (assessmentId) {\r\n return this.$http.get(this.url.base(\"/api/assessments/:assessmentId/scorerName\")\r\n .param(\":assessmentId\", assessmentId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.cancelChanges = function (assessmentId, assessmentStatus, scorerId) {\r\n return this.$http.put(this.url.base(\"/api/assessments/:id/cancel?status=:status&scorer=:scorer\")\r\n .param(\":id\", assessmentId)\r\n .param(\":status\", assessmentStatus)\r\n .param(\":scorer\", scorerId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.updateQuizScores = function (assessmentId, assessmentVersion, assessmentResults) {\r\n var config = {\r\n ignore409: true\r\n };\r\n return this.$http.put(this.url.base(\"/api/assessments/:assessmentId/updateAssessmentResult?assessmentVersion=:assessmentVersion\")\r\n .param(\":assessmentId\", assessmentId)\r\n .param(\":assessmentVersion\", assessmentVersion)\r\n .service(), assessmentResults, config).then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.scoreQuiz = function (assessmentId, assessmentVersion, assessmentResults) {\r\n var config = {\r\n ignore409: true\r\n };\r\n return this.$http.put(this.url.base(\"/api/assessments/:assessmentId/assessmentResults?assessmentVersion=:assessmentVersion\")\r\n .param(\":assessmentId\", assessmentId)\r\n .param(\":assessmentVersion\", assessmentVersion)\r\n .service(), assessmentResults, config).then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.setScorer = function (assessmentId) {\r\n return this.$http.put(this.url.base(\"/api/assessments/:assessmentId/setScorer\")\r\n .param(\":assessmentId\", assessmentId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.get = function (assessmentId) {\r\n return this.$http.get(this.url.base(\"/api/assessments/:assessmentId\")\r\n .param(\":assessmentId\", assessmentId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.getNewAssementsForInstructor = function () {\r\n return this.$http.get(this.url.service(\"/api/assessments/instructorNew\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.getQuizQuestionsCount = function (assessmentId) {\r\n return this.$http.get(this.url.base(\"/api/assessments/:assessmentId/quizQuestionsCount\")\r\n .param(\":assessmentId\", assessmentId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.getQuizQuestionsPoints = function (assessmentId) {\r\n return this.$http.get(this.url.base(\"/api/assessments/:assessmentId/getQuizQuestionsPoints\")\r\n .param(\":assessmentId\", assessmentId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.getQuizQuestionPoints = function (questionId) {\r\n return this.$http.get(this.url.base(\"/api/assessments/:questionId/getQuizQuestionPoints\")\r\n .param(\":questionId\", questionId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.prototype.getQuizQuestionResultCurrentPointsNumber = function (assessmentId) {\r\n return this.$http.get(this.url.base(\"/api/assessments/:assessmentId/getQuizQuestionResultCurrentPointsNumber\")\r\n .param(\":assessmentId\", assessmentId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AssessmentsService.NAME = \"assessments.AssessmentsService\";\r\n AssessmentsService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return AssessmentsService;\r\n})();\r\nexports.AssessmentsService = AssessmentsService;\r\n},{\"../utils/UrlService\":528}],16:[function(require,module,exports){\n(function (AssessmentStatus) {\r\n AssessmentStatus[AssessmentStatus[\"NEW\"] = 0] = \"NEW\";\r\n AssessmentStatus[AssessmentStatus[\"IN_SCORING\"] = 1] = \"IN_SCORING\";\r\n AssessmentStatus[AssessmentStatus[\"SCORED\"] = 2] = \"SCORED\";\r\n})(exports.AssessmentStatus || (exports.AssessmentStatus = {}));\r\nvar AssessmentStatus = exports.AssessmentStatus;\r\n},{}],17:[function(require,module,exports){\nvar AuthService_1 = require(\"./AuthService\");\r\nvar LogOnController_1 = require(\"./LogOnController\");\r\nvar LogOutController_1 = require(\"./LogOutController\");\r\nvar RestorePasswordController_1 = require(\"./RestorePasswordController\");\r\nvar CreateNewPasswordController_1 = require(\"./CreateNewPasswordController\");\r\nvar AuthCoreModule_1 = require(\"./../authcore/AuthCoreModule\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nvar InfrastructureModule_1 = require(\"./../infrastructure/InfrastructureModule\");\r\nvar CheckValidCodeController_1 = require(\"./CheckValidCodeController\");\r\nexports.AuthModule = angular\r\n .module(\"auth\", [\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n InfrastructureModule_1.InfrastructureModule.name\r\n])\r\n .service(AuthService_1.AuthService.NAME, AuthService_1.AuthService)\r\n .controller(LogOutController_1.LogOutController.NAME, LogOutController_1.LogOutController)\r\n .controller(LogOnController_1.LogOnController.NAME, LogOnController_1.LogOnController)\r\n .controller(RestorePasswordController_1.RestorePasswordController.NAME, RestorePasswordController_1.RestorePasswordController)\r\n .controller(CreateNewPasswordController_1.CreateNewPasswordController.NAME, CreateNewPasswordController_1.CreateNewPasswordController)\r\n .controller(CheckValidCodeController_1.CheckValidCodeController.NAME, CheckValidCodeController_1.CheckValidCodeController);\r\n},{\"./../authcore/AuthCoreModule\":24,\"./../infrastructure/InfrastructureModule\":294,\"./../urls/UrlsModule\":492,\"./AuthService\":18,\"./CheckValidCodeController\":19,\"./CreateNewPasswordController\":20,\"./LogOnController\":21,\"./LogOutController\":22,\"./RestorePasswordController\":23}],18:[function(require,module,exports){\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar Event_1 = require(\"../authcore/Event\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar AuthService = (function () {\r\n function AuthService($timeout, $http, $q, $rootScope, authManager, authRouter, url) {\r\n var _this = this;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.$rootScope = $rootScope;\r\n this.authManager = authManager;\r\n this.authRouter = authRouter;\r\n this.url = url;\r\n this.providers = null;\r\n this.restoreSessionPromisesMap = new Map();\r\n this.restoreSessionTimersMap = new Map();\r\n $rootScope.$on(Event_1.Event.LOGGED_OFF, function () {\r\n console.log(\"Clear all restoreSession timers on LOGGED_OFF event\");\r\n _this.restoreSessionTimersMap.forEach(function (value, key) {\r\n _this.$timeout.cancel(value);\r\n });\r\n _this.restoreSessionTimersMap.clear();\r\n });\r\n }\r\n AuthService.prototype.getProviders = function () {\r\n var _this = this;\r\n if (this.providers) {\r\n var promise = this.$q.defer();\r\n promise.resolve(this.providers);\r\n return promise.promise;\r\n }\r\n return this.$http.get(this.url.service(\"/api/settings/common/logonproviders\"))\r\n .then(function (result) {\r\n var theResult = result.data;\r\n _this.providers = theResult;\r\n return theResult;\r\n });\r\n };\r\n AuthService.prototype.getProvidersByBU = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/settings/common/logonproviders/:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n AuthService.prototype.getCurrentUser = function () {\r\n var _this = this;\r\n if (this.authManager.getCurrentUser()) {\r\n return this.$q.when(this.authManager.getCurrentUser());\r\n }\r\n return this.$http.get(this.url.service(\"/api/security/user\"))\r\n .then(function (result) {\r\n _this.authManager.logOn(result.data);\r\n return result.data;\r\n });\r\n };\r\n AuthService.prototype.logOn = function (username, password) {\r\n return this.authenticate({ \"grant_type\": \"password\", \"username\": username, \"password\": password });\r\n };\r\n AuthService.prototype.restoreSession = function (token) {\r\n var _this = this;\r\n if (this.restoreSessionPromisesMap.has(token)) {\r\n return this.restoreSessionPromisesMap.get(token);\r\n }\r\n console.log(\"Session restore fired!\");\r\n this.restoreSessionPromisesMap.set(token, this.authenticate({ \"grant_type\": \"refresh_token\", \"refresh_token\": token })\r\n .finally(function () {\r\n _this.restoreSessionPromisesMap.delete(token);\r\n }));\r\n return this.restoreSessionPromisesMap.get(token);\r\n };\r\n AuthService.prototype.authenticate = function (params) {\r\n var _this = this;\r\n return this.$http({\r\n method: \"post\",\r\n url: this.url.service(\"/api/token\"),\r\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\r\n data: params,\r\n transformRequest: function (data) {\r\n return $.param(data);\r\n }\r\n }).then(function (tokenResult) {\r\n return _this.changeTokenInfo(tokenResult);\r\n });\r\n };\r\n AuthService.prototype.changeTokenInfo = function (tokenResult, savePrevToken) {\r\n var prevToken = this.authManager.getPrevToken();\r\n if (savePrevToken && !(prevToken && prevToken.accessToken && prevToken.accessToken.length > 0)) {\r\n this.authManager.savePrevToken();\r\n }\r\n this.authManager.logOff();\r\n this.authManager.saveToken(tokenResult && tokenResult.data ? {\r\n accessToken: tokenResult.data[\"access_token\"],\r\n refreshToken: tokenResult.data[\"refresh_token\"],\r\n tokenType: tokenResult.data[\"token_type\"],\r\n expiresIn: tokenResult.data[\"expires_in\"],\r\n issuedAt: tokenResult.data[\"issued_at\"],\r\n receivedAt: moment.utc().format(),\r\n locale: tokenResult.data[\"locale\"]\r\n } : tokenResult);\r\n this.startAutoRefresh();\r\n return this.getCurrentUser();\r\n };\r\n AuthService.prototype.logOff = function () {\r\n var _this = this;\r\n var refreshToken = this.authManager.getToken() ? this.authManager.getToken().refreshToken : null;\r\n this.authManager.disableAutoSso();\r\n return this.$http.post(this.url.service(\"/api/security/logOff\"), { refreshToken: refreshToken })\r\n .finally(function () {\r\n _this.authManager.logOff();\r\n });\r\n };\r\n AuthService.prototype.restartAutoRefresh = function () {\r\n var token = this.authManager.getToken();\r\n if (!token || !token.refreshToken) {\r\n return;\r\n }\r\n console.log(\"restartAutoRefresh\");\r\n var fromDate = moment.utc(token.issuedAt);\r\n if (token.receivedAt) {\r\n fromDate = fromDate.max(moment.utc(token.receivedAt).subtract(60, \"s\"));\r\n }\r\n var expirationDate = fromDate.add(token.expiresIn, \"s\");\r\n var now = moment.utc();\r\n var timeInterval = expirationDate.diff(now, \"s\") - 2 * 60;\r\n if (timeInterval < 0) {\r\n timeInterval = 0;\r\n }\r\n this.createRestoreSessionTimer(token.refreshToken, timeInterval);\r\n };\r\n AuthService.prototype.restorePassword = function (logonName) {\r\n return this.$http.post(this.url.service(\"/api/security/restore/password\"), { logonName: logonName });\r\n };\r\n AuthService.prototype.createNewPassword = function (code, password) {\r\n return this.$http.post(this.url.service(\"/api/security/create/new/password\"), { code: code, password: password });\r\n };\r\n AuthService.prototype.startAutoRefresh = function () {\r\n var token = this.authManager.getToken();\r\n if (this.restoreSessionTimersMap.has(token.refreshToken)) {\r\n return;\r\n }\r\n console.log(\"start auto refresh\");\r\n var timeInterval = token.expiresIn - 180;\r\n console.log(\"next restore at \" + moment().add(timeInterval, \"seconds\").format());\r\n this.createRestoreSessionTimer(token.refreshToken, Math.max(timeInterval, 30));\r\n };\r\n AuthService.prototype.tryToAutoRefresh = function () {\r\n var token = this.authManager.getToken();\r\n if (!token || !token.refreshToken) {\r\n return;\r\n }\r\n if (this.restoreSessionTimersMap.has(token.refreshToken)) {\r\n return;\r\n }\r\n this.createRestoreSessionTimer(token.refreshToken, 1, AuthService.MAX_RESTORE_ATTEMPTS);\r\n };\r\n AuthService.prototype.createRestoreSessionTimer = function (refreshToken, timeInterval, attemptNumber) {\r\n var _this = this;\r\n this.restoreSessionTimersMap.set(refreshToken, this.$timeout(function () {\r\n _this.restoreSessionTimersMap.delete(refreshToken);\r\n if (_this.authManager.getToken() && _this.authManager.getToken().refreshToken === refreshToken) {\r\n _this.restoreSessionOrClearToken(refreshToken)\r\n .catch(function (result) {\r\n if ((!result || !result.data || result.data.error !== AuthService.TOKEN_REJECTED_RESPONSE)\r\n && _this.authManager.getToken() && _this.authManager.getToken().refreshToken) {\r\n if (!attemptNumber || attemptNumber < AuthService.MAX_RESTORE_ATTEMPTS) {\r\n console.log(\"Try to repeat restore session request\");\r\n _this.createRestoreSessionTimer(_this.authManager.getToken().refreshToken, 20, attemptNumber ? attemptNumber + 1 : 1);\r\n }\r\n else {\r\n console.log(\"Notify user about session restore problems\");\r\n _this.$rootScope.$broadcast(Event_1.Event.SESSION_RESTORE_FAILED);\r\n }\r\n }\r\n });\r\n }\r\n }, timeInterval * 1000));\r\n };\r\n AuthService.prototype.restoreSessionOrClearToken = function (refreshToken) {\r\n var _this = this;\r\n return this.restoreSession(refreshToken)\r\n .catch(function (result) {\r\n console.log(\"Restore session rejected\");\r\n if (result && result.data && result.data.error === AuthService.TOKEN_REJECTED_RESPONSE\r\n && _this.authManager.getToken()\r\n && _this.authManager.getToken().refreshToken === refreshToken) {\r\n _this.authManager.eraseRefreshToken();\r\n }\r\n return _this.$q.reject(result);\r\n });\r\n };\r\n AuthService.prototype.updateCurrentUser = function (user) {\r\n this.authManager.updateCurrentUserFullName(user.fullName);\r\n };\r\n AuthService.prototype.checkValidCodeFromEmail = function (code) {\r\n return this.$http.get(this.url.base(\"/api/security/check/code/:code\")\r\n .param(\":code\", code)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n AuthService.prototype.checkPassword = function (password) {\r\n var match = password.match('(?=.*[0-9])(?=.*[!@#$%^&*])(?=.*[a-zA-Z])');\r\n return password.length >= 8\r\n && password.length < 100\r\n && match != null\r\n && match.input.length == password.length;\r\n };\r\n AuthService.NAME = \"auth.AuthService\";\r\n AuthService.TOKEN_REJECTED_RESPONSE = \"invalid_request\";\r\n AuthService.MAX_RESTORE_ATTEMPTS = 3;\r\n AuthService.$inject = [\r\n \"$timeout\",\r\n \"$http\",\r\n \"$q\",\r\n \"$rootScope\",\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return AuthService;\r\n})();\r\nexports.AuthService = AuthService;\r\n},{\"../authcore/Event\":27,\"../urls/AuthRouter\":463,\"./../authcore/AuthManager\":25,\"./../utils/UrlService\":528}],19:[function(require,module,exports){\nvar AuthService_1 = require(\"./AuthService\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar CheckValidCodeController = (function () {\r\n function CheckValidCodeController($routeParams, $location, $scope, authService, authRouter, url, userService) {\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$scope = $scope;\r\n this.authService = authService;\r\n this.authRouter = authRouter;\r\n this.url = url;\r\n this.userService = userService;\r\n this.code = null;\r\n this.disableButton = false;\r\n this.shortEmail = null;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(\"\");\r\n this.logonName = $location.search()[AuthRouter_1.AuthRouter.LOGON_PARAM_NAME];\r\n if (!this.logonName) {\r\n this.$location.url(this.authRouter.restorePassword());\r\n }\r\n else {\r\n this.getShortEmail();\r\n }\r\n }\r\n CheckValidCodeController.prototype.checkValidCodeFromEmail = function () {\r\n var _this = this;\r\n this.authService.checkValidCodeFromEmail(this.code)\r\n .then(function () {\r\n _this.$location.url(_this.authRouter.createNewPassword(_this.code));\r\n return;\r\n }).catch(function (response) {\r\n switch (response.data.error) {\r\n case \"error.password.restore.impossible\": {\r\n INotifier_1.notifier.error(\"Incorrect code or code expired. Try to restore the password again.\");\r\n _this.code = null;\r\n return;\r\n }\r\n }\r\n });\r\n };\r\n CheckValidCodeController.prototype.restorePassword = function () {\r\n this.$location.url(this.authRouter.restorePassword()).search(AuthRouter_1.AuthRouter.LOGON_PARAM_NAME, this.logonName);\r\n };\r\n CheckValidCodeController.prototype.cancel = function () {\r\n this.$location.url(this.authRouter.logonUrl());\r\n };\r\n CheckValidCodeController.prototype.getShortEmail = function () {\r\n var _this = this;\r\n if (this.logonName.indexOf(\"@\") > 0) {\r\n this.shortingEmail(this.logonName);\r\n }\r\n else {\r\n this.userService.getUserEmailByLogonName(this.logonName)\r\n .then(function (result) { return _this.shortingEmail(result); })\r\n .catch(function () { return _this.shortEmail = _this.logonName; });\r\n }\r\n };\r\n CheckValidCodeController.prototype.shortingEmail = function (email) {\r\n var emailParts = email.split(\"@\");\r\n if (emailParts[0].length > 3) {\r\n this.shortEmail = emailParts[0].charAt(0) + \"...\" + emailParts[0].charAt(emailParts[0].length - 1) + \"@\" + emailParts[1];\r\n }\r\n else {\r\n this.shortEmail = emailParts[0] + \"@\" + emailParts[1];\r\n }\r\n };\r\n CheckValidCodeController.prototype.codeValid = function (value) {\r\n var regexp = /^[0-9]{6}$/g;\r\n return regexp.test(value);\r\n };\r\n CheckValidCodeController.NAME = \"auth.CheckValidCodeController\";\r\n CheckValidCodeController.$inject = [\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$scope\",\r\n AuthService_1.AuthService.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n UrlService_1.UrlService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return CheckValidCodeController;\r\n})();\r\nexports.CheckValidCodeController = CheckValidCodeController;\r\n},{\"../INotifier\":5,\"../urls/AuthRouter\":463,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/UrlService\":528,\"./AuthService\":18}],20:[function(require,module,exports){\nvar AuthService_1 = require(\"./AuthService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar CreateNewPasswordController = (function () {\r\n function CreateNewPasswordController($routeParams, $location, authService, authRouter, settingsService) {\r\n var _this = this;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.authService = authService;\r\n this.authRouter = authRouter;\r\n this.settingsService = settingsService;\r\n this.minPasswordLength = UserService_1.UserService.minPasswordLength;\r\n this.password = null;\r\n this.confirmPassword = null;\r\n this.error = \"\";\r\n this.isCheckPassword = false;\r\n this.disableSaveButton = false;\r\n this.code = this.$routeParams[AuthRouter_1.AuthRouter.PASSWORD_TOKEN_PARAM_NAME];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(\"\");\r\n PageHeaderHelper_1.PageHeader.set().header(\"Create New Password\").update();\r\n this.settingsService.isCheckPassword()\r\n .then(function (isCheck) { return _this.isCheckPassword = isCheck; });\r\n }\r\n CreateNewPasswordController.prototype.createNewPassword = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n if (this.isCheckPassword && !this.authService.checkPassword(this.password) || this.isUnicodeValue(this.password)) {\r\n this.error = \"Password must contain at least 1 letter, 1 number, 1 special character from !@#$%^&* and must be 8 or more characters\";\r\n this.disableSaveButton = false;\r\n return;\r\n }\r\n this.authService.createNewPassword(this.code, this.password)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Password successfully changed\");\r\n _this.$location.url(_this.authRouter.logonUrl());\r\n }).catch(function (response) {\r\n switch (response.data.error) {\r\n case \"error.password.restore.impossible\": {\r\n INotifier_1.notifier.error(\"Incorrect code or code expired. Try to restore the password again.\");\r\n _this.$location.url(_this.authRouter.restorePassword());\r\n return;\r\n }\r\n case \"error.invalid.password\": {\r\n _this.error = \"Password must contain at least 1 letter, 1 number, 1 special character from !@#$%^&* and must be 8 or more characters\";\r\n return;\r\n }\r\n case \"error.password.duplicate\": {\r\n INotifier_1.notifier.error(\"Password must not be repeated\");\r\n return;\r\n }\r\n }\r\n }).finally(function () { return _this.disableSaveButton = false; });\r\n };\r\n CreateNewPasswordController.prototype.isRightPassword = function () {\r\n if (this.isCheckPassword && this.password) {\r\n return this.authService.checkPassword(this.password);\r\n }\r\n return true;\r\n };\r\n CreateNewPasswordController.prototype.showClosePassword = function (elementId) {\r\n var passwordElement = $(elementId);\r\n if (passwordElement.attr(\"type\") === \"password\") {\r\n passwordElement.attr(\"type\", \"text\");\r\n }\r\n else {\r\n passwordElement.attr(\"type\", \"password\");\r\n }\r\n };\r\n CreateNewPasswordController.prototype.isUnicodeValue = function (value) {\r\n var pattern = /^[\\x20-\\x7E]*$/;\r\n return !pattern.test(value);\r\n };\r\n CreateNewPasswordController.NAME = \"auth.CreateNewPasswordController\";\r\n CreateNewPasswordController.$inject = [\r\n \"$routeParams\",\r\n \"$location\",\r\n AuthService_1.AuthService.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n SettingsService_1.SettingsService.NAME\r\n ];\r\n return CreateNewPasswordController;\r\n})();\r\nexports.CreateNewPasswordController = CreateNewPasswordController;\r\n},{\"../INotifier\":5,\"../settings/SettingsService\":427,\"../urls/AuthRouter\":463,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./AuthService\":18}],21:[function(require,module,exports){\nvar AuthService_1 = require(\"./AuthService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar Storage_1 = require(\"../infrastructure/Storage\");\r\nvar LogonProviderEnum_1 = require(\"../security/LogonProviderEnum\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar HomepageHelper_1 = require(\"../utils/HomepageHelper\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar SsoErrors_1 = require(\"../security/SsoErrors\");\r\nvar IGroup_1 = require(\"../users/models/IGroup\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PoliciesRouter_1 = require(\"../urls/PoliciesRouter\");\r\nvar LogOnController = (function () {\r\n function LogOnController($timeout, $log, $q, $scope, authRedirect, authService, authManager, $location, $window, localStorage, authRouter, usersRouter, settingsService, businessUnitsService, dialogService, userApi, securityService, policiesRouter) {\r\n var _this = this;\r\n this.$timeout = $timeout;\r\n this.$log = $log;\r\n this.$q = $q;\r\n this.$scope = $scope;\r\n this.authRedirect = authRedirect;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.localStorage = localStorage;\r\n this.authRouter = authRouter;\r\n this.usersRouter = usersRouter;\r\n this.settingsService = settingsService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.dialogService = dialogService;\r\n this.userApi = userApi;\r\n this.securityService = securityService;\r\n this.policiesRouter = policiesRouter;\r\n this.LAST_USED_PROVIDER_STORAGE_KEY = \"vhs.application.logon.last.used.provider\";\r\n this.LOCALE_CHANGED_BY_USER_STORAGE_KEY = \"vhs.application.current.locale.changed.by.user\";\r\n this.noSso = true;\r\n this.autoSsoProviderAvailable = false;\r\n this.companyLink = null;\r\n this.isBuFreeAndFull = false;\r\n this.isCheckPassword = false;\r\n this.userLogon = {\r\n name: \"\",\r\n password: \"\",\r\n providerKey: LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL],\r\n isActive: true\r\n };\r\n this.userInfo = {\r\n firstName: \"\",\r\n lastName: \"\",\r\n isActive: true,\r\n newGroups: [IGroup_1.GroupEnum.REGISTERED_USERS],\r\n locale: null,\r\n userLogons: [this.userLogon]\r\n };\r\n this.minPasswordLength = UserService_1.UserService.minPasswordLength;\r\n this.isTermsOfUseAndPrivacyPolicyAccepted = false;\r\n this.isAllowSelfSignUp = false;\r\n this.code = null;\r\n this.shortEmail = null;\r\n this.inProgress = false;\r\n this.restore = false;\r\n this.error = null;\r\n this.errorLink = null;\r\n this.startForFreeLink = null;\r\n this.accessDenied = $location.search()[AuthRouter_1.AuthRouter.ACCESS_DENIED_PARAM_NAME];\r\n this.tokenExpired = $location.search()[AuthRouter_1.AuthRouter.TOKEN_EXPIRED_PARAM_NAME];\r\n this.logonRequired = $location.search()[AuthRouter_1.AuthRouter.LOGON_REQUIRED_PARAM_NAME];\r\n var execDomain = new RegExp(\"(?:https*:\\/\\/)[^/]*\", \"s\").exec(AppProperties_1.AppProperties.baseUrl);\r\n var baseUrl = execDomain != null ? execDomain[0] : \"\";\r\n if (this.$window.location.origin != baseUrl) {\r\n var domain = this.$window.location.origin.indexOf(\"http\") != -1 ?\r\n this.$window.location.origin.split(\"//\")[1].split(\".\")\r\n : this.$window.location.origin.split(\".\");\r\n this.businessUnitsService.getBusinessUnitByDomain(domain[0]).then(function (r) {\r\n r != \"\" ? _this.businessUnitId = r : _this.businessUnitId = null;\r\n _this.loadProviders();\r\n _this.freePlanChecker();\r\n });\r\n }\r\n else {\r\n this.businessUnitId = parseInt($location.search()[AuthRouter_1.AuthRouter.BUSINESS_UNIT_ID_PARAM]) || null;\r\n this.freePlanChecker();\r\n }\r\n var ssoDisabledInUrl = !!$location.search()[\"ssoDisabled\"];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(\"\");\r\n PageHeaderHelper_1.PageHeader.set().header(\"Core ACHIEVE - Log In\").update();\r\n this.settingsService.isCheckPassword()\r\n .then(function (isCheck) { return _this.isCheckPassword = isCheck; });\r\n this.ssoDisabled = ssoDisabledInUrl || !this.authManager.isAutoSsoAvailable();\r\n var autoSsoPromise;\r\n if (!this.ssoDisabled && this.authManager.isAutoSsoAvailable() && !this.authManager.isAuthenticated()) {\r\n autoSsoPromise = this.authManager.startSsoExchange(true);\r\n }\r\n else {\r\n autoSsoPromise = this.$q.when();\r\n }\r\n this.loadAvailableLocales();\r\n autoSsoPromise\r\n .then(function () {\r\n var ssoErrorsInfo = _this.authManager.getFailedSsoInfo();\r\n if (ssoErrorsInfo.length > 0) {\r\n _this.error = \"\";\r\n ssoErrorsInfo.forEach(function (value) {\r\n if (value.ssoDisabled &&\r\n (!value.lastSsoFailedDate || Moment_1.Moment.isAfter(value.lastSsoDisabledDate, value.lastSsoFailedDate))) {\r\n _this.error += \"Automatic login (SSO) is not supported\" + \". \";\r\n }\r\n else if (value.logonProviderKey === LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.MERCADO_SSO] && value.errorCode === SsoErrors_1.SsoErrors.MERCADO_INVALID_TOKEN) {\r\n _this.dialogService.confirm(\"The token is invalid, please contact your system administrator.\", {\r\n title: \"Login failed\",\r\n hideCancelButton: true\r\n });\r\n }\r\n else if (value.logonProviderKey === LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.MERCADO_SSO] && value.errorCode === SsoErrors_1.SsoErrors.MERCADO_COMPANY_NOT_FOUND) {\r\n _this.dialogService.confirm(\"The business unit does not exist, please contact your system administrator.\", {\r\n title: \"Login failed\",\r\n hideCancelButton: true\r\n });\r\n }\r\n else if (value.logonProviderKey === LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.MERCADO_SSO] && value.errorCode === SsoErrors_1.SsoErrors.MERCADO_INVALID_TOKEN_SIGNATURE) {\r\n _this.dialogService.confirm(\"The token signature is invalid, please contact your system administrator.\", {\r\n title: \"Login failed\",\r\n hideCancelButton: true\r\n });\r\n }\r\n else if (value.errorCode === SsoErrors_1.SsoErrors.BUSINESS_UNIT_REQUIRED) {\r\n var baseUrl_1 = _this.$window.location.href.split(\"#\")[0];\r\n _this.error += \"Account for this login was not found. Do you want to \";\r\n _this.startForFreeLink = baseUrl_1 + \"#\" + _this.usersRouter.startTrialUrl();\r\n _this.errorLink = \"start building your learning content for FREE?\";\r\n }\r\n else if (value.errorCode === SsoErrors_1.SsoErrors.SELF_REGISTRATION_DISABLED) {\r\n _this.error += \"Self registration disabled for this business unit\";\r\n }\r\n else if (value.errorCode === SsoErrors_1.SsoErrors.FULL_NAME_REQUIRED) {\r\n _this.error += \"Full name required\" + \". \";\r\n }\r\n else if (value.errorCode === SsoErrors_1.SsoErrors.EMAIL_REQUIRED) {\r\n _this.error += \"Email required\" + \". \";\r\n }\r\n else if (value.errorCode === SsoErrors_1.SsoErrors.EMAIL_DUPLICATED) {\r\n _this.error += \"Cannot create new user. User with this email already exist\" + \". \";\r\n }\r\n else if (value.errorCode === SsoErrors_1.SsoErrors.FREE_PLAN_IS_FULL) {\r\n _this.error += \"Active users limit reached\" + \". \";\r\n }\r\n else if (value.errorCode === SsoErrors_1.SsoErrors.LOGON_NOT_ACTIVE\r\n || value.errorCode === SsoErrors_1.SsoErrors.USER_NOT_ACTIVE) {\r\n _this.error += \"Your account is inactive\" + \". \";\r\n }\r\n else {\r\n _this.error += \"Automatic login (SSO) failed\" + \". \";\r\n }\r\n });\r\n }\r\n if (_this.authManager.restoreAvailable()) {\r\n _this.restoreSession();\r\n }\r\n else {\r\n _this.loadProviders();\r\n _this.getInformationForCreateUser();\r\n }\r\n })\r\n .catch(function () {\r\n _this.restore = true;\r\n })\r\n .finally(function () {\r\n _this.$scope.$on('$locationChangeStart', function (event, newLocation) {\r\n _this.authRedirect.clearRedirection();\r\n if (_this.$window.location.origin != baseUrl) {\r\n var domain = _this.$window.location.origin.indexOf(\"http\") != -1 ?\r\n _this.$window.location.origin.split(\"//\")[1].split(\".\")\r\n : _this.$window.location.origin.split(\".\");\r\n _this.businessUnitsService.getBusinessUnitByDomain(domain[0]).then(function (r) {\r\n r != \"\" ? _this.businessUnitId = r : _this.businessUnitId = null;\r\n _this.loadProviders();\r\n _this.freePlanChecker();\r\n });\r\n }\r\n else {\r\n _this.businessUnitId = parseInt($location.search()[AuthRouter_1.AuthRouter.BUSINESS_UNIT_ID_PARAM]) || null;\r\n _this.freePlanChecker();\r\n }\r\n });\r\n });\r\n }\r\n LogOnController.prototype.loadProviders = function () {\r\n var _this = this;\r\n if (this.isCustomDomainUrl()) {\r\n this.businessUnitsService.getBusinessUnitByDomain(this.customDomain)\r\n .then(function (r) {\r\n r != \"\" ? _this.businessUnitId = r : _this.businessUnitId = null;\r\n _this.updateProviders(_this.businessUnitId);\r\n });\r\n }\r\n else {\r\n this.updateProviders(this.businessUnitId);\r\n }\r\n };\r\n LogOnController.prototype.updateProviders = function (businessUnitId) {\r\n var _this = this;\r\n if (businessUnitId == null) {\r\n this.authService.getProviders()\r\n .then(function (result) { return _this.initProviders(result); });\r\n }\r\n else {\r\n this.authService.getProvidersByBU(businessUnitId)\r\n .then(function (result) { return _this.initProviders(result); });\r\n }\r\n };\r\n LogOnController.prototype.isCustomDomainUrl = function () {\r\n this.customDomain = this.authRouter.getCustomDomainFromUrl(this.$window.location);\r\n return this.customDomain && this.customDomain.length > 0;\r\n };\r\n LogOnController.prototype.initProviders = function (providers) {\r\n var _this = this;\r\n this.providers = providers;\r\n this.internalProviders = [];\r\n this.externalProviders = [];\r\n this.localProviderAvailable = false;\r\n this.activeDirectoryLocalProviderAvailable = false;\r\n this.activeDirectorySsoProviderAvailable = false;\r\n var ssoDisabled = !!this.$location.search()[\"ssoDisabled\"];\r\n angular.forEach(this.providers, function (provider) {\r\n if (provider.key === LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL] ||\r\n provider.key === LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.PERSONIFY_USERPASSWORD] ||\r\n provider.key === LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL_OR_PERSONIFY]) {\r\n _this.localProviderAvailable = true;\r\n switch (provider.key) {\r\n case LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL]: {\r\n _this.internalProviders.push({ key: provider.key, name: \"Internal users\" });\r\n break;\r\n }\r\n case LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.PERSONIFY_USERPASSWORD]: {\r\n _this.internalProviders.push({ key: provider.key, name: \"Personify User name/Password authentication\" });\r\n break;\r\n }\r\n case LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL_OR_PERSONIFY]: {\r\n _this.internalProviders.push({ key: provider.key, name: \"Local or Personify authentication\" });\r\n break;\r\n }\r\n }\r\n }\r\n else if (provider.key === LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.AD_LOCAL]) {\r\n _this.activeDirectoryLocalProviderAvailable = true;\r\n _this.internalProviders.push({ key: provider.key, name: \"ActiveDirectory users\" });\r\n }\r\n else if (provider.key === LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.AD_SSO]) {\r\n _this.activeDirectorySsoProviderAvailable = true;\r\n }\r\n if (provider.key.lastIndexOf(\"_SSO\") == provider.key.length - 4) {\r\n _this.noSso = false;\r\n }\r\n for (var _i = 0; _i < LogonProviderEnum_1.autoSsoProviders.length; _i++) {\r\n var autoSsoProvider = LogonProviderEnum_1.autoSsoProviders[_i];\r\n if (LogonProviderEnum_1.LogonProviderEnum[autoSsoProvider] == provider.key) {\r\n _this.autoSsoProviderAvailable = true;\r\n ssoDisabled = false || ssoDisabled;\r\n _this.externalProviders.push(provider);\r\n }\r\n }\r\n });\r\n if (this.internalProviders.length === 0) {\r\n this.providerKey = null;\r\n }\r\n if (this.internalProviders.length > 0 && (!this.externalProviders || this.externalProviders.length == 0)) {\r\n var previousProvider = null;\r\n try {\r\n previousProvider = this.localStorage.get(this.LAST_USED_PROVIDER_STORAGE_KEY);\r\n }\r\n catch (e) {\r\n }\r\n var previousProviderExists = false;\r\n if (previousProvider) {\r\n angular.forEach(this.internalProviders, function (provider) {\r\n if (provider.key == previousProvider) {\r\n previousProviderExists = true;\r\n }\r\n });\r\n }\r\n if (previousProvider && previousProviderExists) {\r\n this.providerKey = previousProvider;\r\n }\r\n else {\r\n this.providerKey = this.internalProviders[0].key;\r\n }\r\n }\r\n else {\r\n if (!ssoDisabled) {\r\n this.providerKey = this.externalProviders[0].key;\r\n this.authRedirect.forwardToSso(this.providerKey, this.businessUnitId);\r\n }\r\n else {\r\n this.providerKey = this.internalProviders[0].key;\r\n }\r\n }\r\n };\r\n LogOnController.prototype.forceNegotiation = function () {\r\n var _this = this;\r\n if (this.activeDirectorySsoProviderAvailable) {\r\n this.authManager.enableAutoSso();\r\n console.log(\"Try to SPNEGO (forced)\");\r\n this.restore = true;\r\n this.authManager.startSsoExchange(false, \"AD_SSO\")\r\n .finally(function () {\r\n _this.restore = false;\r\n });\r\n }\r\n };\r\n LogOnController.prototype.forceSso = function () {\r\n var _this = this;\r\n if (!this.noSso) {\r\n this.authManager.enableAutoSso();\r\n this.restore = true;\r\n this.authManager.startSsoExchange(false)\r\n .then(function () {\r\n _this.restore = false;\r\n });\r\n }\r\n };\r\n LogOnController.prototype.logOn = function () {\r\n var _this = this;\r\n this.error = \"\";\r\n this.inProgress = true;\r\n localStorage.removeItem(this.LOCALE_CHANGED_BY_USER_STORAGE_KEY);\r\n if (this.providerKey) {\r\n this.localStorage.put(this.LAST_USED_PROVIDER_STORAGE_KEY, this.providerKey);\r\n }\r\n this.authService.logOn(this.providerKey + \":\" + this.username, this.password).then(function (user) {\r\n if (user.businessUnits && user.businessUnits.length == 1) {\r\n _this.businessUnitsService.getBUDomainName(user.businessUnits[0]).then(function (result) {\r\n var domainAddress = result;\r\n if (domainAddress && _this.$window.location.href.indexOf(domainAddress) < 0) {\r\n _this.businessUnitsService.checkExistenceOfDomainInAzure(user.businessUnits[0]).then(function (result) {\r\n if (result) {\r\n var token = _this.authManager.getToken();\r\n domainAddress = domainAddress + \"/auth/logon?redirectRequired&token=\" + token.accessToken +\r\n \"&tokenType=\" + token.tokenType + \"&lifetimeSeconds=\" + token.expiresIn +\r\n \"&refreshToken=\" + token.refreshToken + \"&issuedAt=\" + token.issuedAt + \"&locale=\" + token.locale;\r\n _this.$window.location.replace(domainAddress);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n var locale = user.locale ? user.locale : AppProperties_1.AppProperties.currentLocale;\r\n if (!LogOnController.reloadApplicationForLocaleIfNeeded(locale, false)) {\r\n _this.authManager.enableAutoSso();\r\n _this.settingsService.getHomepage().then(function (homepage) {\r\n _this.authRedirect.returnAfterLogOn(false, HomepageHelper_1.HomepageHelper.getHomepageUrl(homepage));\r\n });\r\n }\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.password.should.be.reset\") {\r\n _this.$location.path(_this.authRouter.createNewPassword(response.data.message));\r\n alert(\"You have to change your password\");\r\n }\r\n _this.inProgress = false;\r\n if (response.data[\"error\"] === \"invalid_user\") {\r\n _this.error = \"Invalid login or password\";\r\n }\r\n else if (response.data[\"error\"] === \"logon_not_active\"\r\n || response.data[\"error\"] === \"user_not_active\") {\r\n _this.error = \"Your account is inactive\";\r\n }\r\n else if (response.data[\"error\"] === \"invalid_ip\") {\r\n _this.dialogService.confirm(\"Your location is different from the one we have on file. Please be sure to log in from your original location.\", {\r\n title: 'Login failed',\r\n hideCancelButton: true\r\n });\r\n }\r\n else if (response.data[\"error\"] === \"ip_changed\") {\r\n _this.showDynamicIpDialog();\r\n }\r\n else {\r\n _this.error = \"Query has failed: please contact your system administrator or help desk\";\r\n }\r\n });\r\n };\r\n LogOnController.prototype.restorePassword = function () {\r\n this.$location.url(this.authRouter.restorePassword()).search(AuthRouter_1.AuthRouter.LOGON_PARAM_NAME, this.username);\r\n };\r\n LogOnController.prototype.restoreSession = function () {\r\n var _this = this;\r\n var refreshToken = this.authManager.getToken().refreshToken;\r\n this.restore = true;\r\n this.authService.restoreSession(refreshToken).then(function (user) {\r\n var locale = user.locale ? user.locale : AppProperties_1.AppProperties.currentLocale;\r\n if (!LogOnController.reloadApplicationForLocaleIfNeeded(locale, false)) {\r\n _this.settingsService.getHomepage().then(function (homepage) {\r\n _this.authRedirect.returnAfterLogOn(false, HomepageHelper_1.HomepageHelper.getHomepageUrl(homepage));\r\n });\r\n }\r\n })\r\n .catch(function (response) {\r\n _this.restore = false;\r\n _this.authManager.logOff();\r\n _this.loadProviders();\r\n });\r\n };\r\n LogOnController.reloadApplicationForLocaleIfNeeded = function (userLocale, changedByUser) {\r\n if (changedByUser) {\r\n var LOCALE_CHANGED_BY_USER_STORAGE_KEY = \"vhs.application.current.locale.changed.by.user\";\r\n localStorage.setItem(LOCALE_CHANGED_BY_USER_STORAGE_KEY, \"true\");\r\n }\r\n if (AppProperties_1.AppProperties.currentLocale != userLocale) {\r\n LogOnController.changeApplicationLocaleInStorage(userLocale);\r\n numeral.language(userLocale.substr(0, 2));\r\n window.location.reload();\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n };\r\n LogOnController.changeApplicationLocaleInStorage = function (userLocale) {\r\n var LOCALE_STORAGE_KEY = \"vhs.application.current.locale\";\r\n localStorage.setItem(LOCALE_STORAGE_KEY, userLocale);\r\n };\r\n LogOnController.prototype.logonWithLinkedinSso = function () {\r\n if (!this.noSso) {\r\n this.authRedirect.forwardToSso(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LINKEDIN_SSO], this.businessUnitId);\r\n }\r\n };\r\n LogOnController.prototype.logonWithMicrosoftSso = function () {\r\n if (!this.noSso) {\r\n this.authRedirect.forwardToSso(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.MICROSOFT_AD_SSO], this.businessUnitId);\r\n }\r\n };\r\n LogOnController.prototype.logonWithFacebookSso = function () {\r\n if (!this.noSso) {\r\n this.authRedirect.forwardToSso(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.FACEBOOK_SSO], this.businessUnitId);\r\n }\r\n };\r\n LogOnController.prototype.logonWithGoogleSso = function () {\r\n if (!this.noSso) {\r\n this.authRedirect.forwardToSso(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.GOOGLE_SSO], this.businessUnitId);\r\n }\r\n };\r\n LogOnController.prototype.isLoginWithLinkedinAvailable = function () {\r\n return this.providers && this.providers.map(function (p) { return p.key; }).indexOf(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LINKEDIN_SSO]) != -1;\r\n };\r\n LogOnController.prototype.isLoginWithMicrosoftAvailable = function () {\r\n return this.providers && this.providers.map(function (p) { return p.key; }).indexOf(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.MICROSOFT_AD_SSO]) != -1;\r\n };\r\n LogOnController.prototype.isLoginWithFacebookAvailable = function () {\r\n return this.providers && this.providers.map(function (p) { return p.key; }).indexOf(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.FACEBOOK_SSO]) != -1;\r\n };\r\n LogOnController.prototype.isLoginWithGoogleAvailable = function () {\r\n return this.providers && this.providers.map(function (p) { return p.key; }).indexOf(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.GOOGLE_SSO]) != -1;\r\n };\r\n LogOnController.prototype.loadAvailableLocales = function () {\r\n var _this = this;\r\n this.settingsService.getAvailableLocales().then(function (locales) {\r\n var LOCALE_CHANGED_BY_USER_STORAGE_KEY = \"vhs.application.current.locale.changed.by.user\";\r\n var localeChangedByUser = localStorage.getItem(LOCALE_CHANGED_BY_USER_STORAGE_KEY);\r\n _this.availableLocales = locales;\r\n if (!!_this.businessUnitId && !_this.authManager.restoreAvailable()) {\r\n if (!!localeChangedByUser && localeChangedByUser === \"true\") {\r\n _this.defaultLocale = _this.getCurrentStorageLocale();\r\n }\r\n else {\r\n _this.businessUnitsService.getBusinessUnitById(_this.businessUnitId).then(function (businessUnit) {\r\n _this.defaultLocale = businessUnit.locale ? _this.availableLocales.filter(function (locale) { return locale.locale === businessUnit.locale; })[0] : _this.getCurrentStorageLocale();\r\n LogOnController.reloadApplicationForLocaleIfNeeded(_this.defaultLocale.locale, false);\r\n });\r\n }\r\n }\r\n else {\r\n _this.defaultLocale = _this.getCurrentStorageLocale();\r\n }\r\n });\r\n };\r\n LogOnController.prototype.getCurrentStorageLocale = function () {\r\n var LOCALE_STORAGE_KEY = \"vhs.application.current.locale\";\r\n if (this.availableLocales && this.availableLocales.length > 0) {\r\n return this.availableLocales.filter(function (l) { return l.locale == localStorage.getItem(LOCALE_STORAGE_KEY); })[0];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n LogOnController.prototype.reloadApplicationForLocaleIfNeeded = function (locale, changedByUser, $event) {\r\n $event.preventDefault();\r\n this.$timeout(function () { return LogOnController.reloadApplicationForLocaleIfNeeded(locale, changedByUser); }, 0);\r\n this.defaultLocale = this.getCurrentStorageLocale();\r\n };\r\n LogOnController.prototype.showClosePassword = function (elementId) {\r\n var passwordElement = $(elementId);\r\n if (passwordElement.attr(\"type\") === \"password\") {\r\n passwordElement.attr(\"type\", \"text\");\r\n }\r\n else {\r\n passwordElement.attr(\"type\", \"password\");\r\n }\r\n };\r\n LogOnController.prototype.createNewAccount = function () {\r\n var _this = this;\r\n localStorage.removeItem(this.LOCALE_CHANGED_BY_USER_STORAGE_KEY);\r\n if (!this.userInfo.businessUnitIds.length || this.confirmPassword !== this.userLogon.password) {\r\n return;\r\n }\r\n if (this.isCheckPassword && !this.authService.checkPassword(this.userLogon.password) || this.isUnicodeValue(this.userLogon.password)) {\r\n this.error = \"Password must contain at least 1 letter, 1 number, 1 special character from !@#$%^&* and must be 8 or more characters\";\r\n return;\r\n }\r\n this.businessUnitsService.checkFreePlanOnBusinessUnit(this.businessUnitId).then(function (result) {\r\n if (result) {\r\n _this.businessUnitsService.isAvailableCreatingNewUserForFreePlan(_this.businessUnitId).then(function (result) {\r\n if (result) {\r\n _this.evaluateSelfSignUp();\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Active users limit reached. Please contact your administrator.\");\r\n return;\r\n }\r\n });\r\n }\r\n else {\r\n _this.evaluateSelfSignUp();\r\n }\r\n });\r\n };\r\n LogOnController.prototype.evaluateSelfSignUp = function () {\r\n var _this = this;\r\n this.inProgress = true;\r\n this.confirmPassword = null;\r\n this.userInfo.locale = this.defaultLocale.locale;\r\n var promise = this.userApi.selfSignup(this.userInfo);\r\n promise.then(function () {\r\n _this.inProgress = false;\r\n var fullName = _this.userInfo.firstName + \" \" + _this.userInfo.lastName;\r\n INotifier_1.notifier.success(\"User '\" + fullName + \"' has been saved\");\r\n }).then(function (response) {\r\n _this.authService.logOn(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL] + \":\" + _this.userInfo.userLogons[0].name, _this.userInfo.userLogons[0].password)\r\n .then(function (user) {\r\n var locale = user.locale ? user.locale : AppProperties_1.AppProperties.currentLocale;\r\n if (!LogOnController.reloadApplicationForLocaleIfNeeded(locale, false)) {\r\n _this.authManager.enableAutoSso();\r\n _this.settingsService.getHomepage().then(function (homepage) {\r\n _this.authRedirect.returnAfterLogOn(false, HomepageHelper_1.HomepageHelper.getHomepageUrl(homepage));\r\n });\r\n }\r\n });\r\n }).catch(function (response) {\r\n _this.inProgress = false;\r\n if (response.status == 409 && response.data.error) {\r\n switch (response.data.error) {\r\n case \"error.user.duplicate.name\":\r\n _this.error = \"Full name \" + _this.userInfo.fullName + \" already exists\";\r\n break;\r\n case \"error.user.duplicate.email\":\r\n _this.error = \"Email \" + _this.userInfo.email + \" already exists\";\r\n break;\r\n case \"error.duplicate.logon.provider\":\r\n _this.error = \"Only one logon for each type is allowed\";\r\n break;\r\n case \"error.user.password.short\":\r\n _this.error = \"The length of password must be at least 8 characters\";\r\n break;\r\n case \"error.users.self.signup.string.login\":\r\n _this.error = \"Invalid user logon\";\r\n break;\r\n case \"error.invalid.password\":\r\n _this.error = \"Password must contain at least 1 letter, 1 number, 1 special character from !@#$%^&* and must be 8 or more characters\";\r\n break;\r\n default:\r\n if (response.data.error.indexOf(\"error.duplicate.login.for.provider.\") === 0) {\r\n var providerKey = response.data.error.substring(\"error.duplicate.login.for.provider.\".length);\r\n var logonFound = null;\r\n for (var j = 0; j < _this.userInfo.userLogons.length; j++) {\r\n if (_this.userInfo.userLogons[j].providerKey == providerKey) {\r\n logonFound = _this.userInfo.userLogons[j].name;\r\n break;\r\n }\r\n }\r\n if (logonFound) {\r\n _this.error = \"Username \" + logonFound + \" already exists\";\r\n }\r\n else {\r\n _this.error = \"Query has failed: please contact your system administrator or help desk\";\r\n }\r\n }\r\n else {\r\n _this.error = \"Query has failed: please contact your system administrator or help desk\";\r\n }\r\n }\r\n }\r\n INotifier_1.notifier.error(_this.error);\r\n });\r\n };\r\n LogOnController.prototype.getInformationForCreateUser = function () {\r\n var _this = this;\r\n this.securityService.demandNotAuthenticated();\r\n this.loadAvailableLocales();\r\n var execDomain = new RegExp(\"(?:https*:\\/\\/)[^/]*\", \"s\").exec(AppProperties_1.AppProperties.baseUrl);\r\n var baseUrl = execDomain != null ? execDomain[0] : \"\";\r\n if (this.$window.location.origin != baseUrl) {\r\n var domain = this.$window.location.origin.indexOf(\"http\") != -1 ?\r\n this.$window.location.origin.split(\"//\")[1].split(\".\")\r\n : this.$window.location.origin.split(\".\");\r\n this.businessUnitsService.getBusinessUnitByDomain(domain[0]).then(function (r) {\r\n r != \"\" ? _this.userInfo.businessUnitIds = [r] : _this.userInfo.businessUnitIds = [];\r\n _this.businessUnitsService.getBusinessUnitByIds(_this.userInfo.businessUnitIds)\r\n .then(function (isAllow) { return _this.isAllowSelfSignUp = isAllow; });\r\n });\r\n }\r\n else {\r\n var buIdInvite = this.$location.search()[AuthRouter_1.AuthRouter.BUSINESS_UNIT_ID_PARAM];\r\n if (buIdInvite != undefined && !isNaN(buIdInvite)) {\r\n this.userInfo.businessUnitIds = [parseInt(buIdInvite)];\r\n this.businessUnitsService.getBusinessUnitByIds(this.userInfo.businessUnitIds)\r\n .then(function (isAllow) {\r\n _this.isAllowSelfSignUp = isAllow;\r\n });\r\n }\r\n }\r\n };\r\n LogOnController.prototype.redirectToPrivacyPolicy = function () {\r\n var baseUrl = this.$window.location.href.split(\"#\")[0], url = baseUrl + \"#\" + this.policiesRouter.privacyPolicyUrl();\r\n this.$window.open(url);\r\n };\r\n LogOnController.prototype.redirectToTermsOfUse = function () {\r\n var baseUrl = this.$window.location.href.split(\"#\")[0], url = baseUrl + \"#\" + this.policiesRouter.termsOfUseUrl();\r\n this.$window.open(url);\r\n };\r\n LogOnController.prototype.isUnicodeValue = function (value) {\r\n var pattern = /^[\\x20-\\x7E]*$/;\r\n return !pattern.test(value);\r\n };\r\n LogOnController.prototype.freePlanChecker = function () {\r\n var _this = this;\r\n if (this.businessUnitId !== null) {\r\n var buArray = new Array();\r\n buArray.push(this.businessUnitId);\r\n this.businessUnitsService.getBusinessUnitsWithFreePlan(buArray)\r\n .then(function (result) {\r\n result.forEach(function (id) {\r\n _this.businessUnitsService.isAvailableCreatingNewUserForFreePlan(id)\r\n .then(function (data) {\r\n if (!data) {\r\n _this.isBuFreeAndFull = true;\r\n return;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n };\r\n LogOnController.prototype.checkValidCodeFromEmail = function () {\r\n var _this = this;\r\n this.authService.checkValidCodeFromEmail(this.code)\r\n .then(function () {\r\n _this.userApi.addIpAddressRange(_this.username).then(function () {\r\n _this.clearDynamicIpDialog();\r\n _this.logOn();\r\n });\r\n }).catch(function (response) {\r\n switch (response.data.error) {\r\n case \"error.password.restore.impossible\": {\r\n INotifier_1.notifier.error(\"Incorrect code or code expired.\");\r\n _this.code = null;\r\n return;\r\n }\r\n }\r\n });\r\n };\r\n LogOnController.prototype.getShortEmail = function () {\r\n var _this = this;\r\n if (this.username.indexOf(\"@\") > 0) {\r\n this.shortingEmail(this.username);\r\n }\r\n else {\r\n this.userApi.getUserEmailByLogonName(this.username)\r\n .then(function (result) { return _this.shortingEmail(result); })\r\n .catch(function () { return _this.shortEmail = _this.username; });\r\n }\r\n };\r\n LogOnController.prototype.shortingEmail = function (email) {\r\n var emailParts = email.split(\"@\");\r\n if (emailParts[0].length > 3) {\r\n this.shortEmail = emailParts[0].charAt(0) + \"...\" + emailParts[0].charAt(emailParts[0].length - 1) + \"@\" + emailParts[1];\r\n }\r\n else {\r\n this.shortEmail = emailParts[0] + \"@\" + emailParts[1];\r\n }\r\n };\r\n LogOnController.prototype.codeValid = function (value) {\r\n var regexp = /^[0-9]{6}$/g;\r\n return regexp.test(value);\r\n };\r\n LogOnController.prototype.showDynamicIpDialog = function () {\r\n this.getShortEmail();\r\n $('#changeIpModal').modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n LogOnController.prototype.clearDynamicIpDialog = function () {\r\n $(\"#changeIpModal\").modal(\"hide\");\r\n };\r\n LogOnController.prototype.isRightPassword = function () {\r\n if (this.isCheckPassword && this.userLogon.password) {\r\n return this.authService.checkPassword(this.userLogon.password);\r\n }\r\n return true;\r\n };\r\n LogOnController.NAME = \"auth.LogOnController\";\r\n LogOnController.$inject = [\r\n \"$timeout\",\r\n \"$log\",\r\n \"$q\",\r\n \"$scope\",\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n \"$location\",\r\n \"$window\",\r\n Storage_1.Storages.LOCAL_NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n UserService_1.UserService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PoliciesRouter_1.PoliciesRouter.NAME\r\n ];\r\n return LogOnController;\r\n})();\r\nexports.LogOnController = LogOnController;\r\n},{\"../INotifier\":5,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../businessUnits/BusinessUnitsService\":44,\"../components/dialog/DialogService\":166,\"../infrastructure/Storage\":295,\"../security/LogonProviderEnum\":416,\"../security/SecurityService\":420,\"../security/SsoErrors\":421,\"../settings/SettingsService\":427,\"../urls/AuthRouter\":463,\"../urls/PoliciesRouter\":485,\"../urls/UsersRouter\":493,\"../users/UserService\":499,\"../users/models/IGroup\":505,\"../utils/AppProperties\":\"AppProperties\",\"../utils/HomepageHelper\":512,\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"../utils/PageHeaderHelper\":521,\"./AuthService\":18}],22:[function(require,module,exports){\nvar AuthService_1 = require(\"./AuthService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar MainRouter_1 = require(\"./../urls/MainRouter\");\r\nvar LogOutController = (function () {\r\n function LogOutController(authApi, mainRouter, $location, $rootScope) {\r\n var _this = this;\r\n this.authApi = authApi;\r\n this.mainRouter = mainRouter;\r\n this.$location = $location;\r\n this.$rootScope = $rootScope;\r\n this.authApi.logOff()\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Logged Out\");\r\n _this.$location.url(_this.mainRouter.mainUrl());\r\n _this.$rootScope.isInsideCoursePage = false;\r\n });\r\n }\r\n LogOutController.NAME = \"auth.LogOutController\";\r\n LogOutController.$inject = [\r\n AuthService_1.AuthService.NAME,\r\n MainRouter_1.MainRouter.NAME,\r\n \"$location\",\r\n \"$rootScope\"\r\n ];\r\n return LogOutController;\r\n})();\r\nexports.LogOutController = LogOutController;\r\n},{\"../INotifier\":5,\"./../urls/MainRouter\":479,\"./AuthService\":18}],23:[function(require,module,exports){\nvar AuthService_1 = require(\"./AuthService\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar RestorePasswordController = (function () {\r\n function RestorePasswordController($location, authService, authRouter) {\r\n this.$location = $location;\r\n this.authService = authService;\r\n this.authRouter = authRouter;\r\n this.logonName = $location.search()[AuthRouter_1.AuthRouter.LOGON_PARAM_NAME];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(\"\");\r\n PageHeaderHelper_1.PageHeader.set().header(\"Restore Password\").update();\r\n }\r\n RestorePasswordController.prototype.restorePassword = function () {\r\n var _this = this;\r\n this.authService.restorePassword(this.logonName).then(function () {\r\n INotifier_1.notifier.success(\"The link has been sent to your email address. When you receive the email, click on the link inside to reset your password\");\r\n _this.$location.url(_this.authRouter.checkValidCode()).search(AuthRouter_1.AuthRouter.LOGON_PARAM_NAME, _this.logonName);\r\n }).catch(function (response) {\r\n switch (response.data.error) {\r\n case \"error.password.restore.impossible\": {\r\n var input = _this.logonName.length > 0 ? \"'\" + _this.logonName + \"'\" : \"\";\r\n INotifier_1.notifier.error(\"The login or email \" + input + \" you entered doesn't match our records. Please double-check and try again.\");\r\n return;\r\n }\r\n case \"error.logon.not.active\":\r\n case \"error.user.not.active\": {\r\n INotifier_1.notifier.error(\"Your account is inactive. Please contact your administrator\");\r\n return;\r\n }\r\n }\r\n });\r\n };\r\n RestorePasswordController.prototype.cancel = function () {\r\n this.$location.url(this.authRouter.logonUrl());\r\n };\r\n RestorePasswordController.prototype.isUnicodeValue = function (value) {\r\n var pattern = /^[\\x20-\\x7E]*$/;\r\n return !pattern.test(value);\r\n };\r\n RestorePasswordController.NAME = \"auth.RestorePasswordController\";\r\n RestorePasswordController.$inject = [\r\n \"$location\",\r\n AuthService_1.AuthService.NAME,\r\n AuthRouter_1.AuthRouter.NAME\r\n ];\r\n return RestorePasswordController;\r\n})();\r\nexports.RestorePasswordController = RestorePasswordController;\r\n},{\"../INotifier\":5,\"../urls/AuthRouter\":463,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./AuthService\":18}],24:[function(require,module,exports){\nvar TokenStorage_1 = require(\"./TokenStorage\");\r\nvar AuthRedirect_1 = require(\"./AuthRedirect\");\r\nvar AuthManager_1 = require(\"./AuthManager\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nvar InfrastructureModule_1 = require(\"./../infrastructure/InfrastructureModule\");\r\nexports.AuthCoreModule = angular\r\n .module(\"authcore\", [\r\n UrlsModule_1.UrlsModule.name,\r\n InfrastructureModule_1.InfrastructureModule.name\r\n])\r\n .service(TokenStorage_1.TokenStorage.NAME, TokenStorage_1.TokenStorage)\r\n .service(AuthRedirect_1.AuthRedirect.NAME, AuthRedirect_1.AuthRedirect)\r\n .service(AuthManager_1.AuthManager.NAME, AuthManager_1.AuthManager);\r\n},{\"./../infrastructure/InfrastructureModule\":294,\"./../urls/UrlsModule\":492,\"./AuthManager\":25,\"./AuthRedirect\":26,\"./TokenStorage\":29}],25:[function(require,module,exports){\nvar TokenStorage_1 = require(\"./TokenStorage\");\r\nvar AuthRedirect_1 = require(\"./AuthRedirect\");\r\nvar Storage_1 = require(\"../infrastructure/Storage\");\r\nvar Event_1 = require(\"./Event\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar LogonProviderEnum_1 = require(\"../security/LogonProviderEnum\");\r\nvar AuthManager = (function () {\r\n function AuthManager($rootScope, $location, $q, authRedirect, localStorage, tokenStorage) {\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$q = $q;\r\n this.authRedirect = authRedirect;\r\n this.localStorage = localStorage;\r\n this.tokenStorage = tokenStorage;\r\n this.userInfo = null;\r\n this.ssoRedirectsInfo = this.localStorage.get(\"vhs.application.sso.redirects.info\");\r\n if (!this.ssoRedirectsInfo) {\r\n this.ssoRedirectsInfo = {};\r\n }\r\n this.autoSsoEnabled = AppProperties_1.AppProperties.autoNavigateToSso;\r\n }\r\n AuthManager.prototype.isAuthenticated = function () {\r\n var token = this.tokenStorage.get();\r\n return token != null\r\n && token.accessToken\r\n && token.issuedAt\r\n && (moment.utc(token.issuedAt).add(token.expiresIn, \"s\").isAfter(moment.utc()) ||\r\n token.receivedAt && moment.utc(token.receivedAt).add(token.expiresIn, \"s\").isAfter(moment.utc()));\r\n };\r\n AuthManager.prototype.hasToken = function () {\r\n var token = this.tokenStorage.get();\r\n return token != null\r\n && token.accessToken != null\r\n && token.accessToken != \"\";\r\n };\r\n AuthManager.prototype.restoreAvailable = function () {\r\n var token = this.tokenStorage.get();\r\n return token != null\r\n && token.refreshToken != null\r\n && token.refreshToken != \"\";\r\n };\r\n AuthManager.prototype.getCurrentUser = function () {\r\n return this.userInfo;\r\n };\r\n AuthManager.prototype.getToken = function () {\r\n return this.tokenStorage.get();\r\n };\r\n AuthManager.prototype.saveToken = function (token) {\r\n this.tokenStorage.put(token);\r\n };\r\n AuthManager.prototype.savePrevToken = function () {\r\n this.tokenStorage.putPrevToken();\r\n };\r\n AuthManager.prototype.checkPrevTokenExist = function () {\r\n var prevToken = this.tokenStorage.getPrevToken();\r\n return prevToken && prevToken.accessToken && prevToken.accessToken.length > 0;\r\n };\r\n AuthManager.prototype.getPrevToken = function () {\r\n return this.tokenStorage.getPrevToken();\r\n };\r\n AuthManager.prototype.removePrevToken = function () {\r\n this.tokenStorage.removePrevToken();\r\n };\r\n AuthManager.prototype.eraseToken = function () {\r\n this.userInfo = null;\r\n var token = this.tokenStorage.get();\r\n if (token != null) {\r\n token.accessToken = null;\r\n this.tokenStorage.put(token);\r\n }\r\n };\r\n AuthManager.prototype.eraseRefreshToken = function () {\r\n var token = this.tokenStorage.get();\r\n if (token != null) {\r\n token.refreshToken = null;\r\n this.tokenStorage.put(token);\r\n }\r\n };\r\n AuthManager.prototype.logOn = function (user) {\r\n this.userInfo = user;\r\n if (this.userInfo.id != AuthManager.GUEST_ID) {\r\n this.$rootScope.$broadcast(Event_1.Event.LOGGED_ON);\r\n }\r\n };\r\n AuthManager.prototype.logOff = function () {\r\n this.tokenStorage.remove();\r\n var userId = this.userInfo ? this.userInfo.id : null;\r\n this.userInfo = null;\r\n if (userId != null && userId != AuthManager.GUEST_ID) {\r\n this.$rootScope.$broadcast(Event_1.Event.LOGGED_OFF);\r\n }\r\n };\r\n AuthManager.prototype.disableAutoSso = function () {\r\n this.autoSsoEnabled = false;\r\n };\r\n AuthManager.prototype.enableAutoSso = function () {\r\n this.autoSsoEnabled = AppProperties_1.AppProperties.autoNavigateToSso;\r\n for (var _i = 0, _a = AuthManager.findSsoProviders(); _i < _a.length; _i++) {\r\n var providerKey = _a[_i];\r\n var ssoRedirectInfo = this.findSsoRedirectInfo(providerKey);\r\n ssoRedirectInfo.ssoFailed = false;\r\n ssoRedirectInfo.ssoDisabled = false;\r\n this.saveSsoRedirectInfo();\r\n }\r\n };\r\n AuthManager.prototype.completeSsoIfNeeded = function () {\r\n if (!AuthManager.getUrlVars()[\"ssoDisabled\"]) {\r\n for (var _i = 0, _a = AuthManager.findSsoProviders(); _i < _a.length; _i++) {\r\n var providerKey = _a[_i];\r\n var completed = this.completeSSOExchange(providerKey);\r\n if (completed) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n AuthManager.prototype.completeSSOExchange = function (logonProvider) {\r\n var isEnabled = AppProperties_1.AppProperties.authProvider.split(\",\").indexOf(logonProvider) != -1;\r\n if (!isEnabled) {\r\n return false;\r\n }\r\n var tokenInfo = AuthManager.getUrlVars();\r\n if (logonProvider !== tokenInfo[\"ssoProvider\"]) {\r\n return false;\r\n }\r\n var ssoRedirectInfo = this.findSsoRedirectInfo(logonProvider);\r\n if (tokenInfo[\"accessDenied\"] && tokenInfo[\"ssoProvider\"] === LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.MERCADO_SSO]) {\r\n ssoRedirectInfo.ssoFailed = true;\r\n ssoRedirectInfo.lastSsoFailedDate = new Date();\r\n ssoRedirectInfo.hasErrorsForDisplay = true;\r\n ssoRedirectInfo.errorCode = tokenInfo[\"errorCode\"];\r\n this.saveSsoRedirectInfo();\r\n this.clearTokenInfoFromUrl();\r\n this.authRedirect.forwardToLogOn(true);\r\n return true;\r\n }\r\n if (tokenInfo[\"accessDenied\"]) {\r\n console.log(\"ACCESS DENIED by \" + logonProvider);\r\n ssoRedirectInfo.ssoFailed = true;\r\n ssoRedirectInfo.lastSsoFailedDate = new Date();\r\n ssoRedirectInfo.hasErrorsForDisplay = true;\r\n this.saveSsoRedirectInfo();\r\n this.clearTokenInfoFromUrl();\r\n if (tokenInfo[\"errorCode\"]) {\r\n ssoRedirectInfo.errorCode = tokenInfo[\"errorCode\"];\r\n }\r\n if (ssoRedirectInfo.autoSsoMode) {\r\n this.authRedirect.returnAfterLogOn(true);\r\n }\r\n else {\r\n this.authRedirect.forwardToLogOn(false);\r\n }\r\n return true;\r\n }\r\n if (tokenInfo[\"ssoDisabled\"]) {\r\n this.clearTokenInfoFromUrl();\r\n ssoRedirectInfo.ssoDisabled = true;\r\n ssoRedirectInfo.lastSsoDisabledDate = new Date();\r\n ssoRedirectInfo.hasErrorsForDisplay = true;\r\n this.saveSsoRedirectInfo();\r\n this.authRedirect.storeUrlBeforeAuthRedirect();\r\n this.authRedirect.returnAfterLogOn(true);\r\n return true;\r\n }\r\n ssoRedirectInfo.autoSsoMode = false;\r\n this.saveSsoRedirectInfo();\r\n if (!tokenInfo[\"token\"]) {\r\n return false;\r\n }\r\n this.saveToken({\r\n accessToken: tokenInfo[\"token\"],\r\n tokenType: tokenInfo[\"tokenType\"],\r\n refreshToken: tokenInfo[\"refreshToken\"],\r\n expiresIn: tokenInfo[\"lifetimeSeconds\"],\r\n issuedAt: tokenInfo[\"issuedAt\"],\r\n receivedAt: moment.utc().format(),\r\n locale: tokenInfo[\"locale\"]\r\n });\r\n if (tokenInfo[\"locale\"]) {\r\n var LOCALE_STORAGE_KEY = \"vhs.application.current.locale\";\r\n localStorage.setItem(LOCALE_STORAGE_KEY, tokenInfo[\"locale\"]);\r\n }\r\n this.clearTokenInfoFromUrl();\r\n this.authRedirect.returnAfterLogOn(true);\r\n return true;\r\n };\r\n AuthManager.prototype.isAutoSsoAvailable = function () {\r\n if (!this.autoSsoEnabled) {\r\n return false;\r\n }\r\n for (var _i = 0, _a = AuthManager.findSsoProviders(); _i < _a.length; _i++) {\r\n var providerKey = _a[_i];\r\n console.log(\"Check for provider \" + providerKey);\r\n if (this.isAutoSsoForProviderAvailable(providerKey)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n AuthManager.prototype.startSsoExchange = function (automaticMode, targetProviderKey) {\r\n console.log(AuthManager.getUrlVars()[\"ssoDisabled\"]);\r\n if (!(AuthManager.getUrlVars()[\"ssoDisabled\"] && automaticMode)) {\r\n for (var _i = 0, _a = AuthManager.findSsoProviders(); _i < _a.length; _i++) {\r\n var providerKey = _a[_i];\r\n if ((!targetProviderKey || targetProviderKey === providerKey)\r\n && this.isAutoSsoForProviderAvailable(providerKey)) {\r\n this.authRedirect.storeUrlBeforeAuthRedirect();\r\n var ssoRedirectInfo = this.findSsoRedirectInfo(providerKey);\r\n ssoRedirectInfo.autoSsoMode = automaticMode;\r\n ssoRedirectInfo.lastAutoSsoDate = new Date();\r\n this.saveSsoRedirectInfo();\r\n this.authRedirect.forwardToSso(providerKey);\r\n return this.$q.reject(\"redirect\");\r\n }\r\n }\r\n }\r\n return this.$q.when(null);\r\n };\r\n AuthManager.prototype.isAutoSsoForProviderAvailable = function (providerKey) {\r\n if (AuthManager.SSO_PROVIDERS_FOR_MANUAL_LOGON.indexOf(providerKey) != -1) {\r\n return false;\r\n }\r\n var ssoRedirectInfo = this.findSsoRedirectInfo(providerKey);\r\n if (!ssoRedirectInfo) {\r\n return false;\r\n }\r\n if (ssoRedirectInfo.autoSsoMode\r\n && !Moment_1.Moment.isAfter(new Date(), ssoRedirectInfo.lastAutoSsoDate, AuthManager.SSO_RETRY_DELAY_SECONDS)) {\r\n return false;\r\n }\r\n if (ssoRedirectInfo.ssoDisabled &&\r\n (ssoRedirectInfo.lastSuccess && !Moment_1.Moment.isAfter(ssoRedirectInfo.lastSuccess, ssoRedirectInfo.lastSsoDisabledDate, 0)\r\n || !ssoRedirectInfo.lastSuccess && !Moment_1.Moment.isAfter(new Date(), ssoRedirectInfo.lastSsoDisabledDate, AuthManager.SSO_FAILED_RETRY_DELAY_SECONDS))) {\r\n return false;\r\n }\r\n if (ssoRedirectInfo.ssoFailed && (ssoRedirectInfo.lastSuccess && !Moment_1.Moment.isAfter(ssoRedirectInfo.lastSuccess, ssoRedirectInfo.lastSsoFailedDate, 0)\r\n || !ssoRedirectInfo.lastSuccess && !Moment_1.Moment.isAfter(new Date(), ssoRedirectInfo.lastSsoFailedDate, AuthManager.SSO_FAILED_RETRY_DELAY_SECONDS))) {\r\n return false;\r\n }\r\n console.log(\"Auto SSO allowed for \" + providerKey);\r\n return true;\r\n };\r\n AuthManager.prototype.getFailedSsoInfo = function () {\r\n var result = [];\r\n for (var _i = 0, _a = AuthManager.findSsoProviders(); _i < _a.length; _i++) {\r\n var providerKey = _a[_i];\r\n var ssoRedirectInfo = this.findSsoRedirectInfo(providerKey);\r\n if (ssoRedirectInfo.hasErrorsForDisplay) {\r\n result.push(ssoRedirectInfo);\r\n ssoRedirectInfo.hasErrorsForDisplay = false;\r\n this.saveSsoRedirectInfo();\r\n }\r\n }\r\n return result;\r\n };\r\n AuthManager.getUrlVars = function () {\r\n var vars = {}, hash, hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');\r\n for (var i = 0; i < hashes.length; i++) {\r\n hash = hashes[i].split('=');\r\n vars[hash[0]] = hash[1];\r\n }\r\n return vars;\r\n };\r\n AuthManager.prototype.clearTokenInfoFromUrl = function () {\r\n this.$location.search(\"accessDenied\", null);\r\n this.$location.search(\"ssoDisabled\", null);\r\n this.$location.search(\"token\", null);\r\n this.$location.search(\"tokenType\", null);\r\n this.$location.search(\"refreshToken\", null);\r\n this.$location.search(\"lifetimeSeconds\", null);\r\n this.$location.search(\"issuedAt\", null);\r\n this.$location.search(\"locale\", null);\r\n this.$location.url(this.$location.path());\r\n };\r\n AuthManager.prototype.findSsoRedirectInfo = function (logonProviderKey) {\r\n if (this.ssoRedirectsInfo && this.ssoRedirectsInfo[logonProviderKey]) {\r\n return this.ssoRedirectsInfo[logonProviderKey];\r\n }\r\n var info = {\r\n logonProviderKey: logonProviderKey,\r\n autoSsoMode: false,\r\n lastSuccess: null,\r\n hasErrorsForDisplay: false,\r\n lastAutoSsoDate: null,\r\n ssoDisabled: false,\r\n lastSsoDisabledDate: null,\r\n ssoFailed: false,\r\n lastSsoFailedDate: null\r\n };\r\n this.ssoRedirectsInfo[logonProviderKey] = info;\r\n this.saveSsoRedirectInfo();\r\n return info;\r\n };\r\n AuthManager.prototype.saveSsoRedirectInfo = function () {\r\n this.localStorage.put(\"vhs.application.sso.redirects.info\", this.ssoRedirectsInfo);\r\n };\r\n AuthManager.findSsoProviders = function () {\r\n return AppProperties_1.AppProperties.authProvider.split(\",\").filter(function (value) { return value.indexOf(\"_SSO\") === value.length - 4; });\r\n };\r\n AuthManager.prototype.updateCurrentUserFullName = function (userFullName) {\r\n this.userInfo.fullName = userFullName;\r\n };\r\n AuthManager.prototype.redirectRequired = function () {\r\n return this.$location.url().indexOf('redirectRequired') >= 0;\r\n };\r\n AuthManager.prototype.redirectToBUDomain = function () {\r\n var tokenInfo = AuthManager.getUrlVars();\r\n this.saveToken({\r\n accessToken: tokenInfo[\"token\"],\r\n tokenType: tokenInfo[\"tokenType\"],\r\n refreshToken: tokenInfo[\"refreshToken\"],\r\n expiresIn: tokenInfo[\"lifetimeSeconds\"],\r\n issuedAt: tokenInfo[\"issuedAt\"],\r\n receivedAt: moment.utc().format(),\r\n locale: tokenInfo[\"locale\"]\r\n });\r\n this.clearTokenInfoFromUrl();\r\n this.authRedirect.returnAfterLogOn(true);\r\n };\r\n AuthManager.NAME = \"authcore.AuthManager\";\r\n AuthManager.GUEST_ID = 2;\r\n AuthManager.SSO_RETRY_DELAY_SECONDS = 30;\r\n AuthManager.SSO_FAILED_RETRY_DELAY_SECONDS = 300;\r\n AuthManager.SSO_PROVIDERS_FOR_MANUAL_LOGON = [\"LINKEDIN_SSO\", \"MICROSOFT_AD_SSO\", \"FACEBOOK_SSO\", \"GOOGLE_SSO\"];\r\n AuthManager.$inject = [\r\n \"$rootScope\",\r\n \"$location\",\r\n \"$q\",\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n Storage_1.Storages.LOCAL_NAME,\r\n TokenStorage_1.TokenStorage.NAME\r\n ];\r\n return AuthManager;\r\n})();\r\nexports.AuthManager = AuthManager;\r\n},{\"../infrastructure/Storage\":295,\"../security/LogonProviderEnum\":416,\"../utils/AppProperties\":\"AppProperties\",\"../utils/Moment\":518,\"./AuthRedirect\":26,\"./Event\":27,\"./TokenStorage\":29}],26:[function(require,module,exports){\nvar RedirectReason_1 = require(\"./RedirectReason\");\r\nvar Storage_1 = require(\"./../infrastructure/Storage\");\r\nvar AuthRouter_1 = require(\"./../urls/AuthRouter\");\r\nvar MainRouter_1 = require(\"./../urls/MainRouter\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar AuthRedirect = (function () {\r\n function AuthRedirect($location, $window, sessionStorage, authRouter, mainRouter, url) {\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.sessionStorage = sessionStorage;\r\n this.authRouter = authRouter;\r\n this.mainRouter = mainRouter;\r\n this.url = url;\r\n }\r\n AuthRedirect.prototype.redirectToLogOn = function (reason, businessUnitId) {\r\n console.log(\"Redirecting to Log On...\");\r\n var currentPath = this.$location.path();\r\n var currentUrl = this.$location.url();\r\n if (currentPath !== this.authRouter.logonUrl()) {\r\n console.log(\"Storing URL: \" + currentUrl);\r\n this.sessionStorage.put(AuthRedirect.KEY, currentUrl);\r\n }\r\n this.forwardToLogOn(false, reason, businessUnitId);\r\n };\r\n AuthRedirect.prototype.storeUrlBeforeAuthRedirect = function () {\r\n var currentUrl = this.$location.url();\r\n if (!this.sessionStorage.contains(AuthRedirect.KEY)\r\n && currentUrl.indexOf(this.authRouter.logonUrl()) === -1) {\r\n console.log(\"Storing URL: \" + currentUrl);\r\n this.sessionStorage.put(AuthRedirect.KEY, currentUrl);\r\n }\r\n };\r\n AuthRedirect.prototype.forwardToLogOn = function (native, reason, businessUnitId) {\r\n console.log(\"Forwarding to Log On...\");\r\n if (!native) {\r\n switch (reason) {\r\n case RedirectReason_1.RedirectReason.ACCESS_DENIED:\r\n this.$location.url(this.authRouter.logonUrl(businessUnitId)).search(AuthRouter_1.AuthRouter.ACCESS_DENIED_PARAM_NAME, true);\r\n break;\r\n case RedirectReason_1.RedirectReason.TOKEN_EXPIRED:\r\n this.$location.url(this.authRouter.logonUrl(businessUnitId)).search(AuthRouter_1.AuthRouter.TOKEN_EXPIRED_PARAM_NAME, true);\r\n break;\r\n case RedirectReason_1.RedirectReason.LOGON_REQUIRED:\r\n this.$location.url(this.authRouter.logonUrl(businessUnitId)).search(AuthRouter_1.AuthRouter.LOGON_REQUIRED_PARAM_NAME, true);\r\n break;\r\n default:\r\n this.$location.url(this.authRouter.logonUrl(businessUnitId));\r\n }\r\n }\r\n else {\r\n var baseUrl = this.$window.location.href.split(\"#\")[0];\r\n var url = baseUrl + \"#\" + this.authRouter.logonUrl(businessUnitId);\r\n console.log(\"URL: \" + url);\r\n this.$window.location.replace(url);\r\n this.$window.location.reload();\r\n }\r\n };\r\n AuthRedirect.prototype.forwardToSpnego = function () {\r\n console.log(\"Redirecting to SPNEGO...\");\r\n this.$window.location.href = this.url.service(\"/api/spnego/exchange\");\r\n };\r\n AuthRedirect.prototype.forwardToSso = function (providerKey, businessUnitId) {\r\n if (providerKey === \"AD_SSO\") {\r\n console.log(\"Redirecting to SPNEGO...\");\r\n this.$window.location.href = this.url.service(\"/api/spnego/exchange\");\r\n }\r\n else {\r\n console.log(\"Redirecting to \" + providerKey);\r\n if (businessUnitId) {\r\n this.$window.location.href = this.url.service(\"/api/sso/start?ssoProvider=\" + providerKey + \"&businessUnitId=\" + businessUnitId);\r\n }\r\n else {\r\n this.$window.location.href = this.url.service(\"/api/sso/start?ssoProvider=\" + providerKey);\r\n }\r\n }\r\n };\r\n AuthRedirect.prototype.forwardToAccessDenied = function () {\r\n console.log(\"Redirecting to Access Denied...\");\r\n this.$location.url(this.authRouter.accessDeniedUrl());\r\n };\r\n AuthRedirect.prototype.returnAfterLogOn = function (native, homePageUrl) {\r\n console.log(\"Returning after Log On...\");\r\n var redirect = this.sessionStorage.get(AuthRedirect.KEY);\r\n this.clearRedirection();\r\n redirect = redirect ? redirect : homePageUrl;\r\n if (!native) {\r\n console.log(\"$location.path('\" + redirect + \"')\");\r\n this.$location.url(redirect);\r\n }\r\n else {\r\n var baseUrl = this.$window.location.href.split(\"?\")[0];\r\n var url = baseUrl;\r\n if (url[url.length - 1] == '#')\r\n url = url + redirect;\r\n else\r\n url = url + \"#\" + redirect;\r\n console.log(\"$window.location.replace('\" + url + \"')\");\r\n this.$window.location.replace(url);\r\n this.$window.location.reload();\r\n }\r\n };\r\n AuthRedirect.prototype.clearRedirection = function () {\r\n this.sessionStorage.remove(AuthRedirect.KEY);\r\n };\r\n AuthRedirect.NAME = \"authcore.AuthRedirect\";\r\n AuthRedirect.KEY = \"auth-redirect\";\r\n AuthRedirect.$inject = [\r\n \"$location\",\r\n \"$window\",\r\n Storage_1.Storages.SESSION_NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n MainRouter_1.MainRouter.NAME,\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return AuthRedirect;\r\n})();\r\nexports.AuthRedirect = AuthRedirect;\r\n},{\"./../infrastructure/Storage\":295,\"./../urls/AuthRouter\":463,\"./../urls/MainRouter\":479,\"./../utils/UrlService\":528,\"./RedirectReason\":28}],27:[function(require,module,exports){\nvar Event = (function () {\r\n function Event() {\r\n }\r\n Event.LOGGED_ON = \"auth:loggedOn\";\r\n Event.LOGGED_OFF = \"auth:loggedOff\";\r\n Event.SESSION_RESTORE_FAILED = \"auth:sessionRestoreFailed\";\r\n return Event;\r\n})();\r\nexports.Event = Event;\r\n},{}],28:[function(require,module,exports){\n(function (RedirectReason) {\r\n RedirectReason[RedirectReason[\"ACCESS_DENIED\"] = 0] = \"ACCESS_DENIED\";\r\n RedirectReason[RedirectReason[\"TOKEN_EXPIRED\"] = 1] = \"TOKEN_EXPIRED\";\r\n RedirectReason[RedirectReason[\"LOGON_REQUIRED\"] = 2] = \"LOGON_REQUIRED\";\r\n})(exports.RedirectReason || (exports.RedirectReason = {}));\r\nvar RedirectReason = exports.RedirectReason;\r\n},{}],29:[function(require,module,exports){\nvar Storage_1 = require(\"./../infrastructure/Storage\");\r\nvar TokenStorage = (function () {\r\n function TokenStorage(storage) {\r\n this.storage = storage;\r\n this.tokenInfo = storage.get(TokenStorage.TOKEN_KEY);\r\n this.prevTokenInfo = storage.get(TokenStorage.PREV_TOKEN_KEY);\r\n }\r\n TokenStorage.prototype.get = function () {\r\n return this.tokenInfo;\r\n };\r\n TokenStorage.prototype.put = function (token) {\r\n this.tokenInfo = token;\r\n this.storage.put(TokenStorage.TOKEN_KEY, token);\r\n };\r\n TokenStorage.prototype.remove = function () {\r\n this.tokenInfo = null;\r\n this.storage.remove(TokenStorage.TOKEN_KEY);\r\n };\r\n TokenStorage.prototype.getPrevToken = function () {\r\n return this.prevTokenInfo;\r\n };\r\n TokenStorage.prototype.putPrevToken = function () {\r\n this.prevTokenInfo = this.tokenInfo;\r\n this.storage.put(TokenStorage.PREV_TOKEN_KEY, this.tokenInfo);\r\n };\r\n TokenStorage.prototype.removePrevToken = function () {\r\n this.prevTokenInfo = null;\r\n this.storage.remove(TokenStorage.PREV_TOKEN_KEY);\r\n };\r\n TokenStorage.NAME = \"authcore.TokenStorage\";\r\n TokenStorage.TOKEN_KEY = \"access-token\";\r\n TokenStorage.PREV_TOKEN_KEY = \"prev-access-token\";\r\n TokenStorage.$inject = [\r\n Storage_1.Storages.LOCAL_NAME\r\n ];\r\n return TokenStorage;\r\n})();\r\nexports.TokenStorage = TokenStorage;\r\n},{\"./../infrastructure/Storage\":295}],30:[function(require,module,exports){\n(function (BrandingEditMode) {\r\n BrandingEditMode[BrandingEditMode[\"THEMES\"] = 0] = \"THEMES\";\r\n BrandingEditMode[BrandingEditMode[\"LOGOS\"] = 1] = \"LOGOS\";\r\n BrandingEditMode[BrandingEditMode[\"CSS\"] = 2] = \"CSS\";\r\n BrandingEditMode[BrandingEditMode[\"COLORS\"] = 3] = \"COLORS\";\r\n BrandingEditMode[BrandingEditMode[\"SHARE\"] = 4] = \"SHARE\";\r\n})(exports.BrandingEditMode || (exports.BrandingEditMode = {}));\r\nvar BrandingEditMode = exports.BrandingEditMode;\r\n},{}],31:[function(require,module,exports){\n(function (BrandingLogoType) {\r\n BrandingLogoType[BrandingLogoType[\"LOGO\"] = 0] = \"LOGO\";\r\n BrandingLogoType[BrandingLogoType[\"MOBILE_LOGO\"] = 1] = \"MOBILE_LOGO\";\r\n BrandingLogoType[BrandingLogoType[\"FAVICON\"] = 2] = \"FAVICON\";\r\n})(exports.BrandingLogoType || (exports.BrandingLogoType = {}));\r\nvar BrandingLogoType = exports.BrandingLogoType;\r\n},{}],32:[function(require,module,exports){\nvar AuthCoreModule_1 = require(\"../authcore/AuthCoreModule\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar InfrastructureModule_1 = require(\"../infrastructure/InfrastructureModule\");\r\nvar CustomBrandingService_1 = require(\"./CustomBrandingService\");\r\nvar BrandingService_1 = require(\"./BrandingService\");\r\nvar BrandingThemesService_1 = require(\"./BrandingThemesService\");\r\nexports.BrandingModule = angular\r\n .module(\"branding\", [\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n InfrastructureModule_1.InfrastructureModule.name\r\n])\r\n .service(CustomBrandingService_1.CustomBrandingService.NAME, CustomBrandingService_1.CustomBrandingService)\r\n .service(BrandingService_1.BrandingService.NAME, BrandingService_1.BrandingService)\r\n .service(BrandingThemesService_1.BrandingThemesService.NAME, BrandingThemesService_1.BrandingThemesService);\r\n},{\"../authcore/AuthCoreModule\":24,\"../infrastructure/InfrastructureModule\":294,\"../urls/UrlsModule\":492,\"./BrandingService\":33,\"./BrandingThemesService\":34,\"./CustomBrandingService\":35}],33:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar BrandingService = (function () {\r\n function BrandingService($http, $uploader, url) {\r\n this.$http = $http;\r\n this.$uploader = $uploader;\r\n this.url = url;\r\n }\r\n BrandingService.prototype.getSystemBrandingSettings = function () {\r\n return this.$http.get(this.url.base(\"/api/branding/system\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.getCustomBrandingSettings = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/branding?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.getSystemCustomCss = function () {\r\n return this.$http.get(this.url.base(\"/api/branding/customCss/system\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.getCustomCss = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/branding/customCss?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.getSystemBrandingLogos = function (type) {\r\n return this.$http.get(this.url.base(\"/api/branding/logos/system\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.getBrandingLogos = function (businessUnitId, type) {\r\n return this.$http.get(this.url.base(\"/api/branding/logos?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.getSystemBrandingColors = function () {\r\n return this.$http.get(this.url.service(\"/api/branding/colors/system\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.getBrandingColors = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/branding/colors?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.updateSystemCustomCss = function (css) {\r\n var cssInput = {\r\n css: css\r\n };\r\n return this.$http.put(this.url.base(\"/api/branding/customCss/system\")\r\n .service(), cssInput)\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.updateCustomCss = function (businessUnitId, css) {\r\n var cssInput = {\r\n css: css\r\n };\r\n return this.$http.put(this.url.base(\"/api/branding/customCss?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service(), cssInput)\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.updateSystemLogo = function (logoType, file) {\r\n var urlBuilder = this.url.base(\"/api/branding/logos/system?logoType=:logoType\")\r\n .param(\":logoType\", logoType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n BrandingService.prototype.updateBusinessUnitLogo = function (businessUnitId, logoType, file) {\r\n var urlBuilder = this.url.base(\"/api/branding/logos?businessUnitId=:businessUnitId&logoType=:logoType\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .param(\":logoType\", logoType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n BrandingService.prototype.saveSystemBrandingColors = function (mobileColor, barColor, mobileBarColor) {\r\n var body = {\r\n mobileColor: mobileColor,\r\n barColor: barColor,\r\n mobileBarColor: mobileBarColor\r\n };\r\n return this.$http.put(this.url.service(\"/api/branding/colors/system\"), body)\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.saveBrandingColors = function (businessUnitId, mobileColor, barColor, mobileBarColor) {\r\n var body = {\r\n mobileColor: mobileColor,\r\n barColor: barColor,\r\n mobileBarColor: mobileBarColor\r\n };\r\n return this.$http.put(this.url.base(\"/api/branding/colors?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId).service(), body)\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.removeSystemSettingsBranding = function () {\r\n return this.$http.delete(this.url.base(\"/api/branding/system\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.removeBusinessUnitBranding = function (customBrandingId) {\r\n return this.$http.delete(this.url.base(\"/api/branding/:id\")\r\n .param(\":id\", customBrandingId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.deleteSystemCustomCss = function () {\r\n return this.$http.delete(this.url.base(\"/api/branding/customCss/system\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.deleteCustomCss = function (businessUnitId) {\r\n return this.$http.delete(this.url.base(\"/api/branding/customCss?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.deleteSystemBrandingLogos = function (logoType) {\r\n return this.$http.delete(this.url.base(\"/api/branding/logos/system?logoType=:logoType\")\r\n .param(\":logoType\", logoType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.deleteBrandingLogos = function (businessUnitId, logoType) {\r\n return this.$http.delete(this.url.base(\"/api/branding/logos?businessUnitId=:businessUnitId&logoType=:logoType\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .param(\":logoType\", logoType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.removeSystemBrandingColors = function (brandingId) {\r\n return this.$http.put(this.url.base(\"/api/branding/colors/system\")\r\n .param(\":brandingId\", brandingId).service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.removeBrandingColors = function (brandingId) {\r\n return this.$http.put(this.url.base(\"/api/branding/:id/colors\")\r\n .param(\":id\", brandingId).service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.updateSystemShareLogo = function (file) {\r\n var urlBuilder = this.url.base(\"/api/branding/shareLogo/system\");\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n BrandingService.prototype.updateBusinessUnitShareLogo = function (businessUnitId, file) {\r\n var urlBuilder = this.url.base(\"/api/branding/shareLogo?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n BrandingService.prototype.getSystemShareLogo = function (type) {\r\n return this.$http.get(this.url.base(\"/api/branding/shareLogo/system\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.getShareLogo = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/branding/shareLogo?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.deleteSystemShareLogo = function () {\r\n return this.$http.delete(this.url.base(\"/api/branding/shareLogo/system\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.prototype.deleteShareLogo = function (businessUnitId) {\r\n return this.$http.delete(this.url.base(\"/api/branding/shareLogo?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingService.NAME = \"branding.BrandingService\";\r\n BrandingService.$inject = [\r\n \"$http\",\r\n \"Upload\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return BrandingService;\r\n})();\r\nexports.BrandingService = BrandingService;\r\n},{\"../utils/UrlService\":528}],34:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar BrandingThemesService = (function () {\r\n function BrandingThemesService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n BrandingThemesService.prototype.getBrandingThemes = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/branding/themes/brandingThemes/businessUnit/:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingThemesService.prototype.getSystemBrandingThemes = function () {\r\n return this.$http.get(this.url.service(\"/api/branding/themes/brandingThemes/system\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingThemesService.prototype.saveBrandingThemeAsCustom = function (customBrandingTheme) {\r\n return this.$http.post(this.url.service(\"/api/branding/themes/brandingThemes/save\"), customBrandingTheme)\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingThemesService.prototype.applyBrandingTheme = function (businessUnitId, themeId) {\r\n return this.$http.put(this.url.base(\"/api/branding/themes/brandingThemes/apply/businessUnit/:businessUnitId?themeId=:themeId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .param(\":themeId\", themeId).service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingThemesService.prototype.applySystemBrandingTheme = function (themeId) {\r\n return this.$http.put(this.url.base(\"/api/branding/themes/brandingThemes/apply/system?themeId=:themeId\")\r\n .param(\":themeId\", themeId).service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingThemesService.prototype.updateBusinessUnitBrandingTheme = function (customBrandingTheme) {\r\n return this.$http.put(this.url.service(\"/api/branding/themes/brandingThemes/businessUnit/update\"), customBrandingTheme)\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingThemesService.prototype.updateSystemBrandingTheme = function (customBrandingTheme) {\r\n return this.$http.put(this.url.service(\"/api/branding/themes/brandingThemes/system/update\"), customBrandingTheme)\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingThemesService.prototype.resetBrandingTheme = function (businessUnitId) {\r\n return this.$http.delete(this.url.base(\"/api/branding/themes/brandingThemes/businessUnits/:businessUnitId\")\r\n .param(':businessUnitId', businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingThemesService.prototype.resetSystemBrandingTheme = function () {\r\n return this.$http.delete(this.url.base(\"/api/branding/themes/brandingThemes/system\").service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BrandingThemesService.NAME = \"branding.BrandingThemesService\";\r\n BrandingThemesService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return BrandingThemesService;\r\n})();\r\nexports.BrandingThemesService = BrandingThemesService;\r\n},{\"../utils/UrlService\":528}],35:[function(require,module,exports){\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar Event_1 = require(\"../authcore/Event\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar CustomBrandingService = (function () {\r\n function CustomBrandingService($http, $window, $rootScope, url, authService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$window = $window;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.authService = authService;\r\n this.changeCustomBranding();\r\n $rootScope.$on(Event_1.Event.LOGGED_ON, function () {\r\n _this.changeCustomBranding();\r\n });\r\n $rootScope.$on(Event_1.Event.LOGGED_OFF, function () {\r\n _this.changeCustomBranding();\r\n });\r\n $window.addEventListener(\"resize\", function () {\r\n _this.setHeaderColor();\r\n });\r\n }\r\n CustomBrandingService.prototype.changeCustomBranding = function () {\r\n var _this = this;\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.currentUser = angular.copy(user);\r\n _this.setBrandingCss();\r\n _this.setBrandingCustomCss();\r\n _this.setHeaderColor();\r\n _this.changeFavicon();\r\n });\r\n };\r\n CustomBrandingService.prototype.setHeaderColor = function () {\r\n if (this.$window.innerWidth < 992) {\r\n this.barColor = this.currentUser.customBranding.mobileBarColor;\r\n }\r\n else {\r\n this.barColor = this.currentUser.customBranding.barColor;\r\n }\r\n };\r\n CustomBrandingService.prototype.changeFavicon = function () {\r\n var oldLink = document.querySelector(\"link[rel*='icon']\");\r\n if (oldLink) {\r\n document.head.removeChild(oldLink);\r\n }\r\n var ieVersion;\r\n var ua = window.navigator.userAgent;\r\n var trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n var rv = ua.indexOf('rv:');\r\n ieVersion = parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\r\n }\r\n var customFavicon = this.currentUser.customBranding.favicon;\r\n var link = document.createElement('link');\r\n link.type = 'image/x-icon';\r\n link.rel = ieVersion ? 'icon' : 'shortcut icon';\r\n link.href = !customFavicon ? 'themes/default/img/favicon.ico?v=@@buildVersion' : customFavicon;\r\n document.head.appendChild(link);\r\n };\r\n CustomBrandingService.prototype.getBarColor = function () {\r\n return this.barColor;\r\n };\r\n CustomBrandingService.prototype.setBrandingCss = function () {\r\n var clientBaseUrl = AppProperties_1.AppProperties.baseUrl;\r\n var baseDomain = (new window.URL(clientBaseUrl)).hostname;\r\n if (this.$window.location.href.indexOf(baseDomain) != -1\r\n && this.currentUser && this.currentUser.businessUnits && this.currentUser.businessUnits.length == 1) {\r\n var brandingCssLink = document.getElementById('branding-css');\r\n var hrefValue = brandingCssLink.getAttribute('href');\r\n var newValue = AppProperties_1.AppProperties.serviceRoot + 'api/branding/branding.css' + '?businessUnitId=' + this.currentUser.businessUnits[0];\r\n if (hrefValue !== newValue) {\r\n brandingCssLink.setAttribute('href', newValue);\r\n }\r\n }\r\n else {\r\n var brandingCssLink = document.getElementById('branding-css');\r\n var hrefValue = brandingCssLink.getAttribute('href');\r\n var newValue = AppProperties_1.AppProperties.serviceRoot + 'api/branding/branding.css';\r\n if (hrefValue !== newValue) {\r\n brandingCssLink.setAttribute('href', newValue);\r\n }\r\n }\r\n };\r\n CustomBrandingService.prototype.setBrandingCustomCss = function () {\r\n var clientBaseUrl = AppProperties_1.AppProperties.baseUrl;\r\n var baseDomain = (new window.URL(clientBaseUrl)).hostname;\r\n if (this.$window.location.href.indexOf(baseDomain) != -1\r\n && this.currentUser && this.currentUser.businessUnits && this.currentUser.businessUnits.length == 1) {\r\n var brandingCustomCssLink = document.getElementById('branding-custom-css');\r\n var hrefValue = brandingCustomCssLink.getAttribute('href');\r\n var newValue = AppProperties_1.AppProperties.serviceRoot + 'api/branding/custom.css' + '?businessUnitId=' + this.currentUser.businessUnits[0];\r\n if (hrefValue !== newValue) {\r\n brandingCustomCssLink.setAttribute('href', newValue);\r\n }\r\n }\r\n else {\r\n var brandingCustomCssLink = document.getElementById('branding-custom-css');\r\n var hrefValue = brandingCustomCssLink.getAttribute('href');\r\n var newValue = AppProperties_1.AppProperties.serviceRoot + 'api/branding/custom.css';\r\n if (hrefValue !== newValue) {\r\n brandingCustomCssLink.setAttribute('href', newValue);\r\n }\r\n }\r\n };\r\n CustomBrandingService.NAME = \"branding.CustomBrandingService\";\r\n CustomBrandingService.$inject = [\r\n \"$http\",\r\n \"$window\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME\r\n ];\r\n return CustomBrandingService;\r\n})();\r\nexports.CustomBrandingService = CustomBrandingService;\r\n},{\"../auth/AuthService\":18,\"../authcore/Event\":27,\"../utils/AppProperties\":\"AppProperties\",\"../utils/UrlService\":528}],36:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar BundleService = (function () {\r\n function BundleService($http, $q, url) {\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.url = url;\r\n this.loadSystemBundlePromise = null;\r\n }\r\n BundleService.prototype.getBundle = function (bundleId, loadFilesFilter) {\r\n var _this = this;\r\n if (!loadFilesFilter) {\r\n loadFilesFilter = \"ALL\";\r\n }\r\n return this.$http.get(this.url.service(\"/api/bundles/\" + bundleId + \"?loadFilesFilter=\" + loadFilesFilter))\r\n .then(function (result) {\r\n var bundle = result.data;\r\n _this.createFilesMap(bundle);\r\n return result.data;\r\n });\r\n };\r\n BundleService.prototype.getSystemBundle = function () {\r\n var _this = this;\r\n if (this.systemBundle == undefined) {\r\n if (this.loadSystemBundlePromise) {\r\n return this.loadSystemBundlePromise;\r\n }\r\n else {\r\n this.loadSystemBundlePromise = this.getBundle(1, \"NONE\")\r\n .then(function (result) {\r\n _this.systemBundle = result;\r\n _this.loadSystemBundlePromise = null;\r\n return result;\r\n });\r\n return this.loadSystemBundlePromise;\r\n }\r\n }\r\n else {\r\n return this.$q.when(this.systemBundle);\r\n }\r\n };\r\n BundleService.prototype.updateBundleFromFiles = function (bundleInput) {\r\n var _this = this;\r\n return this.$http.put(this.url.base(\"/api/bundles/files\")\r\n .service(), bundleInput)\r\n .then(function (result) {\r\n var bundle = result.data[\"bundle\"];\r\n _this.createFilesMap(bundle);\r\n return result.data;\r\n });\r\n };\r\n BundleService.prototype.createFilesMap = function (bundle) {\r\n bundle.filesMap = new Map();\r\n bundle.files.forEach(function (file) {\r\n bundle.filesMap.set(file.key, file);\r\n });\r\n };\r\n BundleService.prototype.getUploadedFileToBundleByFileKey = function (bundleId, fileKey) {\r\n fileKey = encodeURIComponent(fileKey);\r\n return this.$http.get(this.url.service(\"/api/bundles/\" + bundleId + \"/uploads?fileKey=\" + fileKey))\r\n .then(function (result) { return result.data; });\r\n };\r\n BundleService.prototype.removeAllBundleFiles = function (bundleId) {\r\n return this.$http.delete(this.url.service(\"/api/bundles/\" + bundleId + \"/files\"))\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n BundleService.prototype.getImageFromUrl = function (imageUrl) {\r\n return this.$http.get(imageUrl, { responseType: 'blob' });\r\n };\r\n BundleService.NAME = \"bundle.BundleService\";\r\n BundleService.$inject = [\r\n \"$http\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return BundleService;\r\n})();\r\nexports.BundleService = BundleService;\r\n},{\"../utils/UrlService\":528}],37:[function(require,module,exports){\nvar BundleService_1 = require(\"./BundleService\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar SystemBunldeEditController_1 = require(\"./SystemBunldeEditController\");\r\nvar EditBundleDirective_1 = require(\"./components/EditBundleDirective\");\r\nexports.BundlesModule = angular\r\n .module(\"bundles\", [\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .service(BundleService_1.BundleService.NAME, BundleService_1.BundleService)\r\n .controller(SystemBunldeEditController_1.SystemBundleEditController.NAME, SystemBunldeEditController_1.SystemBundleEditController)\r\n .directive(\"vhsEditBundle\", EditBundleDirective_1.EditBundleDirectiveFactory);\r\n},{\"../urls/UrlsModule\":492,\"./BundleService\":36,\"./SystemBunldeEditController\":38,\"./components/EditBundleDirective\":39}],38:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar SystemBundleEditController = (function () {\r\n function SystemBundleEditController($scope, $http, securityService) {\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.securityService = securityService;\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.editReferenceData; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_BUNDLE_MENU_KEY);\r\n }\r\n SystemBundleEditController.NAME = \"bundles.SystemBundleEditController\";\r\n SystemBundleEditController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n SecurityService_1.SecurityService.NAME\r\n ];\r\n return SystemBundleEditController;\r\n})();\r\nexports.SystemBundleEditController = SystemBundleEditController;\r\n},{\"../security/SecurityService\":420,\"../utils/MenuHelper\":517}],39:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar BundleService_1 = require(\"../BundleService\");\r\nvar UploadUtils_1 = require(\"../../utils/UploadUtils\");\r\nvar DialogService_1 = require(\"../../components/dialog/DialogService\");\r\nvar EditBundleController = (function () {\r\n function EditBundleController($scope, $http, $location, url, uploadUtils, bundleService, dialogService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.url = url;\r\n this.uploadUtils = uploadUtils;\r\n this.bundleService = bundleService;\r\n this.dialogService = dialogService;\r\n this.isLoading = false;\r\n this.bundleFilesGridModel = null;\r\n this.addedFile = [];\r\n this.addedBundleFiles = [];\r\n this.removedBundleFiles = [];\r\n this.loadOnStartFileIdsChanged = [];\r\n $scope.vm = this;\r\n this.allowLoadAtStart = $scope.allowLoadAtStart || false;\r\n if (this.$scope.bundleId) {\r\n this.loadBundle(this.$scope.bundleId)\r\n .then(function () {\r\n _this.isInitialized = true;\r\n });\r\n }\r\n else {\r\n this.isInitialized = true;\r\n }\r\n this.$scope.$watchCollection(function () { return _this.addedFile; }, function (newValue) {\r\n if (newValue) {\r\n newValue.forEach(function (file) {\r\n var bundleFile = { file: file };\r\n _this.addedBundleFiles.push(bundleFile);\r\n });\r\n }\r\n });\r\n document.body.addEventListener('dragover', function (e) {\r\n e.preventDefault();\r\n var elem = document.elementFromPoint(e.clientX, e.clientY);\r\n var dropFromEditCourse = document.getElementById(\"dropFromEditCourse\");\r\n var dropFromEditCourseNote = document.getElementById(\"dropFromEditCourseNote\");\r\n e.dataTransfer.dropEffect = 'none';\r\n if (dropFromEditCourse == elem || dropFromEditCourseNote == elem) {\r\n e.dataTransfer.dropEffect = 'copy';\r\n }\r\n });\r\n if (!this.$scope.bundleId) {\r\n this.$scope.$watch(function () { return _this.$scope.bundleId; }, function (newValue, oldValue) {\r\n if (newValue) {\r\n _this.loadBundle(_this.$scope.bundleId);\r\n }\r\n });\r\n }\r\n }\r\n EditBundleController.prototype.refreshBundleFiles = function () {\r\n if (!this.bundleFilesGridModel)\r\n return;\r\n this.bundleFilesGridModel.loadPage(0);\r\n };\r\n EditBundleController.prototype.removeBundleFile = function (index) {\r\n this.removedBundleFiles.push(this.bundleFilesGridModel.entries[index]);\r\n this.bundleFilesGridModel.filter.excludedBundleFileIds = this.getRemovedBundleFileIds();\r\n this.bundleFilesGridModel.loadCurrentPage();\r\n };\r\n EditBundleController.prototype.restoreBundleFile = function (index) {\r\n this.removedBundleFiles.splice(index, 1);\r\n this.bundleFilesGridModel.filter.excludedBundleFileIds = this.getRemovedBundleFileIds();\r\n this.bundleFilesGridModel.loadCurrentPage();\r\n };\r\n EditBundleController.prototype.cancelAddedBundleFile = function (index) {\r\n this.addedBundleFiles.splice(index, 1);\r\n };\r\n EditBundleController.prototype.cancelAllAddedBundleFiles = function (index) {\r\n this.addedBundleFiles.splice(index, this.addedBundleFiles.length);\r\n };\r\n EditBundleController.prototype.cancelAndRestoreAllBundleFiles = function (index) {\r\n this.cancelAllAddedBundleFiles(index);\r\n this.removedBundleFiles.splice(index, this.removedBundleFiles.length);\r\n this.bundleFilesGridModel.filter.excludedBundleFileIds = this.getRemovedBundleFileIds();\r\n this.bundleFilesGridModel.loadCurrentPage();\r\n };\r\n EditBundleController.prototype.changeBundleFileLoadAtStartValue = function (bundleFile) {\r\n var index = this.loadOnStartFileIdsChanged.indexOf(bundleFile.id);\r\n if (index != -1) {\r\n this.loadOnStartFileIdsChanged.splice(index, 1);\r\n }\r\n else {\r\n this.loadOnStartFileIdsChanged.push(bundleFile.id);\r\n }\r\n bundleFile.loadAtStart = !bundleFile.loadAtStart;\r\n };\r\n EditBundleController.prototype.saveBundleFiles = function () {\r\n var _this = this;\r\n this.isLoading = true;\r\n if (!this.bundle) {\r\n if (this.$scope.createBundleFunction) {\r\n this.$scope.createBundleFunction()\r\n .then(function (result) {\r\n _this.bundle = result;\r\n _this.bundleFilesGridModel = _this.bundleFilesGridModel == null\r\n ? new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(_this.$http, _this.url.base(\"/api/bundles/:bundleId/files\").param(\":bundleId\", _this.bundle.id).service()))\r\n : _this.bundleFilesGridModel;\r\n _this.bundleFilesGridModel.filter.excludedBundleFileIds = [];\r\n _this.updateBundleFromFiles();\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"Incorrect configuration to create Bundle\");\r\n _this.isLoading = false;\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Incorrect configuration to create Bundle\");\r\n this.isLoading = false;\r\n }\r\n }\r\n else {\r\n this.updateBundleFromFiles();\r\n }\r\n };\r\n EditBundleController.prototype.loadBundle = function (bundleId) {\r\n var _this = this;\r\n return this.bundleService.getBundle(bundleId, \"LOADED_AT_START\").then(function (bundle) {\r\n _this.bundle = bundle;\r\n if (!_this.bundleFilesGridModel) {\r\n _this.bundleFilesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(_this.$http, _this.url.base(\"/api/bundles/:bundleId/files\").param(\":bundleId\", _this.bundle.id).service()));\r\n _this.bundleFilesGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n for (var i = 0; i < _this.bundleFilesGridModel.entries.length; i++) {\r\n var bundleFile = _this.bundleFilesGridModel.entries[i];\r\n if (_this.loadOnStartFileIdsChanged.indexOf(bundleFile.id) != -1) {\r\n bundleFile.loadAtStart = !bundleFile.loadAtStart;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n _this.bundleFilesGridModel.filter.excludedBundleFileIds = [];\r\n _this.bundleFilesGridModel.loadPage(0);\r\n }\r\n return _this.bundle;\r\n });\r\n };\r\n EditBundleController.prototype.getRemovedBundleFileIds = function () {\r\n var removedBundleFiles = [];\r\n this.removedBundleFiles.forEach(function (bundleFile) {\r\n removedBundleFiles.push(bundleFile.id);\r\n });\r\n return removedBundleFiles;\r\n };\r\n EditBundleController.prototype.updateBundleFromFiles = function () {\r\n var _this = this;\r\n var addedBundleFiles = [];\r\n var removedBundleFileIds = [];\r\n this.addedBundleFiles.forEach(function (bundleFile) {\r\n addedBundleFiles.push({\r\n name: bundleFile.file.name,\r\n type: bundleFile.file.type,\r\n size: bundleFile.file.size,\r\n path: bundleFile.relativePath\r\n });\r\n });\r\n this.removedBundleFiles.forEach(function (file) {\r\n removedBundleFileIds.push(file.fileId);\r\n });\r\n var bundleInput = {\r\n id: this.bundle.id,\r\n version: this.bundle.version,\r\n addedFiles: addedBundleFiles,\r\n deletedFileIds: removedBundleFileIds,\r\n loadOnStartFilesChangedIds: this.loadOnStartFileIdsChanged\r\n };\r\n this.bundleService.updateBundleFromFiles(bundleInput).then(function (result) {\r\n var addedBundleFiles = _this.addedBundleFiles;\r\n _this.addedBundleFiles = [];\r\n _this.bundle = result[\"bundle\"];\r\n _this.bundleFilesGridModel.loadPage(0);\r\n _this.removedBundleFiles = [];\r\n _this.loadOnStartFileIdsChanged = [];\r\n var fileUploadInfos = result[\"fileUploadInfos\"];\r\n for (var i = 0, j = 0; i < addedBundleFiles.length || j < fileUploadInfos.length; ++i, ++j) {\r\n var addedFile = addedBundleFiles[i].file;\r\n var fileUploadInfo = fileUploadInfos[j];\r\n _this.uploadUtils.uploadBundleByChunks(addedFile, fileUploadInfo.fileId, _this.bundle.id, fileUploadInfo.url, fileUploadInfo.method);\r\n }\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n }).finally(function () {\r\n _this.isLoading = false;\r\n });\r\n };\r\n EditBundleController.prototype.isHidedRemoveButton = function () {\r\n return this.bundleFilesGridModel.entries.length == 0 && this.removedBundleFiles.length == 0;\r\n };\r\n EditBundleController.prototype.removeBundleFiles = function () {\r\n var _this = this;\r\n if (this.bundle == undefined) {\r\n this.addedBundleFiles = [];\r\n }\r\n else {\r\n var bundleId = this.bundle.id;\r\n this.isLoading = true;\r\n this.dialogService.confirm(\"Do you want to remove all files\" + \"?\", {\r\n title: \"Removing\",\r\n confirmButton: \"Remove\",\r\n cancelButton: \"Cancel\"\r\n }).then(function () {\r\n _this.bundleService.removeAllBundleFiles(bundleId)\r\n .then(function (result) {\r\n _this.removedBundleFiles = [];\r\n _this.bundleFilesGridModel.entries = [];\r\n INotifier_1.notifier.success(\"All files were removed\");\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"An error occurred during remove files\");\r\n })\r\n .finally(function () {\r\n _this.isLoading = false;\r\n _this.bundleFilesGridModel.loadPage(0);\r\n });\r\n }, function () {\r\n _this.isLoading = false;\r\n });\r\n }\r\n };\r\n EditBundleController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n BundleService_1.BundleService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return EditBundleController;\r\n})();\r\nexports.EditBundleController = EditBundleController;\r\nfunction EditBundleDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n $scope.$on(\"$destroy\", function () {\r\n document.body.addEventListener('dragover', function (e) {\r\n e.dataTransfer.dropEffect = 'move';\r\n });\r\n });\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.scope = {\r\n bundleId: \"=?vhsBundleId\",\r\n createBundleFunction: \"=?vhsCreateBundleFunction\",\r\n allowLoadAtStart: \"=?vhsAllowLoadAtStart\",\r\n coursePermissions: \"=?vhsCoursePermissions\"\r\n };\r\n directive.controller = EditBundleController;\r\n directive.templateUrl = url.template(\"bundles/components/editBundle.html\");\r\n return directive;\r\n}\r\nexports.EditBundleDirectiveFactory = EditBundleDirectiveFactory;\r\nEditBundleDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../INotifier\":5,\"../../components/dialog/DialogService\":166,\"../../utils/UploadUtils\":527,\"../../utils/UrlService\":528,\"../BundleService\":36}],40:[function(require,module,exports){\n(function (BundleFileTypeEnum) {\r\n BundleFileTypeEnum[BundleFileTypeEnum[\"JS\"] = 1] = \"JS\";\r\n BundleFileTypeEnum[BundleFileTypeEnum[\"CSS\"] = 2] = \"CSS\";\r\n BundleFileTypeEnum[BundleFileTypeEnum[\"IMAGE\"] = 3] = \"IMAGE\";\r\n BundleFileTypeEnum[BundleFileTypeEnum[\"HTML\"] = 4] = \"HTML\";\r\n BundleFileTypeEnum[BundleFileTypeEnum[\"OTHER\"] = 5] = \"OTHER\";\r\n})(exports.BundleFileTypeEnum || (exports.BundleFileTypeEnum = {}));\r\nvar BundleFileTypeEnum = exports.BundleFileTypeEnum;\r\nexports.BUNDLE_FILE_TYPE_ENUM_VALUES = [\r\n BundleFileTypeEnum.JS,\r\n BundleFileTypeEnum.CSS,\r\n BundleFileTypeEnum.IMAGE,\r\n BundleFileTypeEnum.HTML,\r\n BundleFileTypeEnum.OTHER\r\n];\r\n},{}],41:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar BusinessUnitsRouter_1 = require(\"../urls/BusinessUnitsRouter\");\r\nvar BusinessUnitsService_1 = require(\"./BusinessUnitsService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar BusinessUnitsController = (function () {\r\n function BusinessUnitsController($http, $location, url, businessUnitRouter, businessUnitsService, permissionService, securityService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.url = url;\r\n this.businessUnitRouter = businessUnitRouter;\r\n this.businessUnitsService = businessUnitsService;\r\n this.permissionService = permissionService;\r\n this.securityService = securityService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_BUSINESS_UNITS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Business Units\").update();\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.manageAnyBusinessUnit || systemPermissions.configureBusinessUnitSettings; });\r\n this.permissionService.getSystemPermissions().then(function (systemPermissions) {\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader()\r\n .addActionLinkIf(systemPermissions.manageAnyBusinessUnit, '+ New', _this.getBUCreateUrl()).update();\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.buEntitiesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/businessUnits\").service()));\r\n this.buEntitiesGridModel.filter.businessUnitSearchString = \"\";\r\n this.buEntitiesGridModel.filter.businessUnitSplitParam = false;\r\n }\r\n BusinessUnitsController.prototype.getBUEditUrl = function (businessUnitId) {\r\n return this.businessUnitRouter.editUrl(businessUnitId);\r\n };\r\n BusinessUnitsController.prototype.getBUCreateUrl = function () {\r\n return this.businessUnitRouter.createRoute();\r\n };\r\n BusinessUnitsController.prototype.activateEntityBU = function (index, entity) {\r\n var _this = this;\r\n this.businessUnitsService.setActiveBusinessUnit(entity.id, entity.version, true).then(function (result) {\r\n _this.buEntitiesGridModel.entries[index] = result;\r\n });\r\n };\r\n BusinessUnitsController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n BusinessUnitsController.NAME = \"businessUnit.BusinessUnitsController\";\r\n BusinessUnitsController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n BusinessUnitsRouter_1.BusinessUnitsRouter.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SecurityService_1.SecurityService.NAME\r\n ];\r\n return BusinessUnitsController;\r\n})();\r\nexports.BusinessUnitsController = BusinessUnitsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/BusinessUnitsRouter\":464,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./BusinessUnitsService\":44}],42:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar BusinessUnitsRouter_1 = require(\"../urls/BusinessUnitsRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar BusinessUnitsService_1 = require(\"./BusinessUnitsService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar UploadUtils_1 = require(\"../utils/UploadUtils\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar IReferenceEntitiesParams_1 = require(\"../reference/models/IReferenceEntitiesParams\");\r\nvar ReferenceService_1 = require(\"../reference/ReferenceService\");\r\nvar BrandingEditMode_1 = require(\"../branding/BrandingEditMode\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar LogonProviderEnum_1 = require(\"../security/LogonProviderEnum\");\r\nvar NewsRouter_1 = require(\"../urls/NewsRouter\");\r\nvar NewsKey_1 = require(\"../news/models/NewsKey\");\r\nvar BillingPlanService_1 = require(\"../finances/BillingPlanService\");\r\nvar CertificateService_1 = require(\"../certificates/CertificateService\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar NewsService_1 = require(\"../news/NewsService\");\r\nvar AuthorizeNetService_1 = require(\"../integration/authorizenet/AuthorizeNetService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar BusinessUnitsCreateEditController = (function () {\r\n function BusinessUnitsCreateEditController($q, $http, $scope, $window, $routeParams, $location, url, businessUnitRouter, businessUnitsService, authorizeNetService, bundleService, uploadUtils, authManager, authService, permissionService, securityService, settingsService, referenceService, newsRouter, financesRouter, billingPlanService, certificateService, newsService) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$http = $http;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.url = url;\r\n this.businessUnitRouter = businessUnitRouter;\r\n this.businessUnitsService = businessUnitsService;\r\n this.authorizeNetService = authorizeNetService;\r\n this.bundleService = bundleService;\r\n this.uploadUtils = uploadUtils;\r\n this.authManager = authManager;\r\n this.authService = authService;\r\n this.permissionService = permissionService;\r\n this.securityService = securityService;\r\n this.settingsService = settingsService;\r\n this.referenceService = referenceService;\r\n this.newsRouter = newsRouter;\r\n this.financesRouter = financesRouter;\r\n this.billingPlanService = billingPlanService;\r\n this.certificateService = certificateService;\r\n this.newsService = newsService;\r\n this.BU_GENERAL_DETAILS = \"generalDetails\";\r\n this.BU_CUSTOM_BRANDING = \"customBranding\";\r\n this.BU_WEBINARS = \"webinars\";\r\n this.BU_GOTOWEBINAR = \"goToWebinar\";\r\n this.BU_WEB_EX_INTEGRATION = \"webExIntegration\";\r\n this.BU_POWER_BI_INTEGRATION = \"powerBIIntegration\";\r\n this.BU_PAYMENT_METHODS = \"paymentMethods\";\r\n this.BU_PAY_PAL = \"payPal\";\r\n this.BU_AUTHORIZE_NET = \"authorizeNet\";\r\n this.BU_CREDIT_TYPES = \"creditTypes\";\r\n this.BU_SECURITY = \"security\";\r\n this.BU_PARAMETERS = \"parameters\";\r\n this.BU_ADOBE_API = \"adobeApi\";\r\n this.BU_MENU_ITEMS = \"menuItems\";\r\n this.BU_ZOOM = \"zoom\";\r\n this.BU_LRS = \"lrs\";\r\n this.BU_SYSTEM_CONFIGURATION = \"systemConfiguration\";\r\n this.BU_BILL_PLAN = \"billPlan\";\r\n this.BU_BILL_PLAN_NEWS_ID_PARAM = 1014;\r\n this.saveMap = new Map();\r\n this.isCreatePage = false;\r\n this.disableSaveButton = false;\r\n this.isDisableRemoveLink = true;\r\n this.isPreviewHidden = false;\r\n this.purchaseOrderContent = \"\";\r\n this.isPayPalConfigured = false;\r\n this.currentPaymentConfiguration = \"\";\r\n this.receiptTemplate = { fileContentId: null };\r\n this.disabledSaveReceiptButton = false;\r\n this.isWebinarInstructorsShowed = true;\r\n this.isZoomInstructorsShowed = true;\r\n this.isTeamsInstructorsShowed = true;\r\n this.webinarInstructors = {};\r\n this.zoomInstructors = {};\r\n this.teamsInstructors = {};\r\n this.isAddRowVisible = false;\r\n this.companyLink = null;\r\n this.showGoToWebinarSettings = false;\r\n this.showZoomSettings = false;\r\n this.showTeamsSettings = false;\r\n this.selectedOption = \"\";\r\n this.systemPermissions = {};\r\n this.billPlans = new Array();\r\n this.aNetPostUrl = \"https://accept.authorize.net/payment/payment\";\r\n this.availableCreditTypes = [];\r\n this.businessUnitParameters = {};\r\n this.adobeCredentials = {};\r\n this.brandingMode = BrandingEditMode_1.BrandingEditMode[BrandingEditMode_1.BrandingEditMode.THEMES];\r\n this.news = {};\r\n this.isLoaded = false;\r\n this.freePlanLimits = AppProperties_1.AppProperties.freePlanLimits;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_BUSINESS_UNITS_MENU_KEY);\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.manageAnyBusinessUnit || systemPermissions.configureBusinessUnitSettings; });\r\n this.permissionService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadAvailableLocales();\r\n this.authService.getCurrentUser().then(function (result) { return _this.userId = result.id; });\r\n var businessUnitId = parseInt(this.$routeParams[BusinessUnitsRouter_1.BusinessUnitsRouter.ID_PARAM_NAME], 10);\r\n var businessUnitLevel = this.$routeParams[BusinessUnitsRouter_1.BusinessUnitsRouter.BU_LEVEL_PARAM_NAME];\r\n var hasBusinessUnitId = !isNaN(businessUnitId);\r\n if (hasBusinessUnitId) {\r\n this.businessUnitId = businessUnitId;\r\n this.businessUnitLevel = businessUnitLevel;\r\n this.setTopMenuKey(businessUnitLevel);\r\n this.getTemplateByLevel(businessUnitLevel);\r\n this.businessUnitsService.getBusinessUnitById(businessUnitId).then(function (result) {\r\n _this.businessUnit = result;\r\n PageHeaderHelper_1.PageHeader.set().header(result.name).update();\r\n _this.getBusinessUnitSettings();\r\n _this.loadProviders();\r\n _this.businessUnitsService.getBUDomainName(_this.businessUnitId).then(function (result) {\r\n _this.domainAddress = result;\r\n if (_this.businessUnit.domainName != null) {\r\n _this.companyLink = _this.getCompanyLink();\r\n }\r\n _this.linkForSelfRegistration = _this.getLinkForSelfRegistration();\r\n }).finally(function () {\r\n if (_this.domainAddress) {\r\n _this.businessUnitsService.getAdobeCredentials(_this.businessUnitId).then(function (result) {\r\n _this.adobeCredentials = angular.copy(result);\r\n if (_this.adobeCredentials) {\r\n _this.adobeClientId = _this.adobeCredentials.clientId;\r\n }\r\n });\r\n }\r\n });\r\n });\r\n this.webinarInstructorsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/businessUnits/webinar/instructors\")));\r\n this.webinarInstructorsGridModel.filter.businessUnitId = this.businessUnitId;\r\n this.webinarInstructorsGridModel.loadPage(0);\r\n this.zoomInstructorsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/businessUnits/zoom/instructors\")));\r\n this.zoomInstructorsGridModel.filter.businessUnitId = this.businessUnitId;\r\n this.zoomInstructorsGridModel.loadPage(0);\r\n this.teamsInstructorsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/businessUnits/teams/instructors\")));\r\n this.teamsInstructorsGridModel.filter.businessUnitId = this.businessUnitId;\r\n this.teamsInstructorsGridModel.loadPage(0);\r\n }\r\n else {\r\n this.isCreatePage = true;\r\n PageHeaderHelper_1.PageHeader.set().header(\"New business unit\").update();\r\n this.setTopMenuKey(this.BU_GENERAL_DETAILS);\r\n this.getTemplateByLevel(this.BU_GENERAL_DETAILS);\r\n }\r\n this.setSaveFunctionsForBULevel();\r\n }\r\n BusinessUnitsCreateEditController.prototype.getBusinessUnitSettings = function () {\r\n var _this = this;\r\n if (this.topMenuKey === this.BU_WEBINARS) {\r\n this.businessUnitsService.getWebinarSettingByBusinessUnit(this.businessUnitId)\r\n .then(function (result) {\r\n _this.webinarSettings = result;\r\n });\r\n this.businessUnitsService.getZoomSettings(this.businessUnitId).then(function (result) {\r\n if (result) {\r\n _this.zoomSettings = result;\r\n }\r\n else {\r\n _this.zoomSettings = {\r\n 'businessUnitId': _this.businessUnitId,\r\n 'showEmbeddedZoom': false\r\n };\r\n }\r\n });\r\n this.businessUnitsService.getTeamsSettings(this.businessUnitId).then(function (result) {\r\n if (result) {\r\n _this.teamsSettings = result;\r\n }\r\n else {\r\n _this.teamsSettings = {\r\n 'businessUnitId': _this.businessUnitId\r\n };\r\n }\r\n });\r\n }\r\n else if (this.topMenuKey === this.BU_PAYMENT_METHODS) {\r\n this.currentPaymentConfiguration = \"None\";\r\n this.businessUnitsService.getPayPalConfiguration(this.businessUnitId)\r\n .then(function (result) {\r\n _this.payPalConfiguration = result;\r\n _this.linkForWebhook = _this.getLinkForWebhook();\r\n if (result && result.clientId) {\r\n _this.currentPaymentConfiguration = _this.BU_PAY_PAL;\r\n }\r\n });\r\n this.businessUnitsService.getAuthorizeNetConfiguration(this.businessUnitId)\r\n .then(function (result) {\r\n _this.authorizeNetConfiguration = result;\r\n if (result && result.loginId) {\r\n _this.currentPaymentConfiguration = _this.BU_AUTHORIZE_NET;\r\n }\r\n });\r\n this.businessUnitsService.getReceiptTemplateByBUId(this.businessUnitId).then(function (receiptTemplate) {\r\n if (receiptTemplate) {\r\n _this.receiptTemplate = angular.copy(receiptTemplate);\r\n _this.receiptFileTitle = receiptTemplate.fileTitle;\r\n }\r\n });\r\n }\r\n else if (this.topMenuKey === this.BU_POWER_BI_INTEGRATION) {\r\n this.businessUnitsService.getPowerBiConfiguration(this.businessUnitId)\r\n .then(function (result) {\r\n if (!!result) {\r\n _this.powerBiConfiguration = result;\r\n _this.isDisableRemoveLink = false;\r\n }\r\n else {\r\n _this.powerBiConfiguration.link = null;\r\n }\r\n });\r\n }\r\n else if (this.topMenuKey == this.BU_MENU_ITEMS) {\r\n this.businessUnitsService.getMenuItemsSettings(this.businessUnitId).then(function (result) {\r\n if (result) {\r\n _this.menuItemsSettings = result;\r\n }\r\n else {\r\n _this.menuItemsSettings = { 'businessUnitId': _this.businessUnitId,\r\n 'showCatalog': false,\r\n 'showCourses': false,\r\n 'showMaterials': false,\r\n 'showQuizzes': false,\r\n 'showLearningPaths': false,\r\n 'showDiscussionBoard': false,\r\n 'showNews': false,\r\n 'homeLogoUrl': null,\r\n 'homeHelpUrl': null,\r\n 'homeAboutUsUrl': null };\r\n }\r\n });\r\n }\r\n else if (this.topMenuKey === this.BU_SECURITY) {\r\n this.businessUnitsService.getSecurityConfiguration(this.businessUnitId)\r\n .then(function (result) {\r\n _this.securityConfiguration = result;\r\n });\r\n }\r\n else if (this.topMenuKey == this.BU_BILL_PLAN) {\r\n this.billingPlanService.getBillingPlans(this.businessUnitId)\r\n .then(function (result) {\r\n _this.billPlans = result.filter(function (p) { return p.isDefaultPlan; });\r\n _this.currentBillPlan = _this.billPlans.filter(function (p) { return p.isCurrentPlan; })[0];\r\n if (_this.currentBillPlan && _this.currentBillPlan.planCode == \"FREE\") {\r\n _this.aNetIframeCommunicator = _this.financesRouter.getProductANetCommunicatorUrlByUrl(_this.$window.location.href);\r\n _this.businessUnitsService.getAuthorizeNetEnvironmentType(null).then(function (envType) {\r\n _this.aNetPostUrl = envType.toUpperCase() === \"SANDBOX\"\r\n ? \"https://test.authorize.net/payment/payment\"\r\n : \"https://accept.authorize.net/payment/payment\";\r\n _this.billPlans.forEach(function (bp) {\r\n if (bp.planCode != \"FREE\") {\r\n _this.billingPlanService.getFormToken(_this.aNetIframeCommunicator, _this.businessUnitId, bp.id).then(function (result) {\r\n bp.aNetToken = result;\r\n });\r\n var mainElement = document.querySelector(\"form#send_hptoken_\" + bp.planCode);\r\n if (mainElement) {\r\n mainElement.setAttribute(\"action\", _this.aNetPostUrl);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n _this.currentCustomBillPlan = result.filter(function (p) { return !p.isDefaultPlan && p.isCurrentPlan; })[0];\r\n }\r\n _this.isLoaded = true;\r\n _this.newsService.getNews(_this.BU_BILL_PLAN_NEWS_ID_PARAM).then(function (result) {\r\n angular.copy(result, _this.news);\r\n });\r\n });\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.setSaveFunctionsForBULevel = function () {\r\n var _this = this;\r\n this.saveMap.set(this.BU_GENERAL_DETAILS, function () { return _this.saveGeneralDetails(); });\r\n this.saveMap.set(this.BU_WEBINARS, function () {\r\n if (_this.showGoToWebinarSettings) {\r\n _this.saveAccountGoToWebinar();\r\n }\r\n else if (_this.showZoomSettings) {\r\n _this.saveZoomSettings();\r\n }\r\n else if (_this.showTeamsSettings) {\r\n _this.saveTeamsSettings();\r\n }\r\n });\r\n this.saveMap.set(this.BU_PAYMENT_METHODS, function () { return _this.savePaymentConfiguration(); });\r\n this.saveMap.set(this.BU_POWER_BI_INTEGRATION, function () { return _this.savePowerBiConfiguration(); });\r\n this.saveMap.set(this.BU_MENU_ITEMS, function () { return _this.saveMenuItemsSettings(); });\r\n this.saveMap.set(this.BU_PARAMETERS, function () { return _this.updateBusinessUnitParameters(); });\r\n this.saveMap.set(this.BU_SECURITY, function () { return _this.saveSecurityConfiguration(); });\r\n this.saveMap.set(this.BU_ADOBE_API, function () { return _this.saveAdobeApiDetails(); });\r\n };\r\n BusinessUnitsCreateEditController.prototype.setTopMenuKey = function (businessUnitLevel) {\r\n switch (businessUnitLevel) {\r\n case \"generalDetails\":\r\n case \"customBranding\":\r\n case \"webinars\":\r\n case \"webExIntegration\":\r\n case \"powerBIIntegration\":\r\n case \"paymentMethods\":\r\n case \"lrs\":\r\n case \"security\":\r\n case \"adobeApi\":\r\n case \"systemConfiguration\":\r\n this.topMenuKey = businessUnitLevel;\r\n break;\r\n case \"menuItems\":\r\n this.loadMenuItemsSettings();\r\n this.topMenuKey = businessUnitLevel;\r\n break;\r\n case \"parameters\":\r\n this.loadBusinessUnitParameters();\r\n this.topMenuKey = businessUnitLevel;\r\n break;\r\n case \"billPlan\":\r\n this.topMenuKey = businessUnitLevel;\r\n break;\r\n default:\r\n this.topMenuKey = this.BU_GENERAL_DETAILS;\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.topMenuKey == topMenuKey;\r\n };\r\n BusinessUnitsCreateEditController.prototype.getChildReferenceUrl = function (childPages) {\r\n return this.businessUnitId ? this.businessUnitRouter.editUrl(this.businessUnitId, childPages)\r\n : \"\";\r\n };\r\n BusinessUnitsCreateEditController.prototype.getTemplateForInclude = function (businessUnitLevel) {\r\n var templateLevel = this.getTemplateByLevel(businessUnitLevel);\r\n return this.url.template(templateLevel);\r\n };\r\n BusinessUnitsCreateEditController.prototype.redirectToBack = function () {\r\n this.businessUnitLevel === this.BU_PARAMETERS\r\n ? this.loadBusinessUnitParameters()\r\n : this.$location.url(this.businessUnitRouter.indexUrl());\r\n };\r\n BusinessUnitsCreateEditController.prototype.getTemplateByLevel = function (businessUnitLevel) {\r\n switch (businessUnitLevel) {\r\n case \"generalDetails\": return \"businessUnits/_general-details-bu.html\";\r\n case \"customBranding\": return \"businessUnits/_custom-branding-bu.html\";\r\n case \"webinars\": return \"businessUnits/_webinars-bu.html\";\r\n case \"webExIntegration\": return \"businessUnits/_webx-integration-bu.html\";\r\n case \"powerBIIntegration\": return \"businessUnits/_powerBI-integration-bu.html\";\r\n case \"paymentMethods\": return \"businessUnits/_paymentMethods-bu.html\";\r\n case \"menuItems\": return \"businessUnits/_menu-items-bu.html\";\r\n case \"lrs\": return \"businessUnits/_lrs-bu.html\";\r\n case \"systemConfiguration\": return \"businessUnits/_systemConfiguration-bu.html\";\r\n case \"parameters\": return \"businessUnits/_parameters.html\";\r\n case \"security\": return \"businessUnits/_security-bu.html\";\r\n case \"billPlan\": return \"businessUnits/_billPlan-bu.html\";\r\n case \"adobeApi\": return \"businessUnits/_adobe-api.html\";\r\n default: return \"businessUnits/_general-details-bu.html\";\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.save = function () {\r\n if (this.isCreatePage) {\r\n this.saveGeneralDetails();\r\n }\r\n else {\r\n var saveFunc = this.saveMap.get(this.businessUnitLevel);\r\n saveFunc();\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveGeneralDetails = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n if (this.isCreatePage) {\r\n this.businessUnitsService.create(this.businessUnit).then(function () {\r\n _this.redirectToBack();\r\n INotifier_1.notifier.success(\"Created\");\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Business unit already exists\");\r\n }).finally(function () {\r\n _this.disableSaveButton = false;\r\n });\r\n }\r\n else {\r\n if (this.providers && this.providers.length > 0) {\r\n this.businessUnit.providers = this.providers.filter(function (p) { return p.isActive; }).map(function (p) { return p.key; });\r\n }\r\n this.businessUnitsService.update(this.businessUnit).then(function (result) {\r\n _this.businessUnit = result;\r\n INotifier_1.notifier.success(\"Updated\");\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Business unit already exists\");\r\n }).finally(function () {\r\n _this.disableSaveButton = false;\r\n });\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.deactivateEntity = function () {\r\n var _this = this;\r\n this.businessUnitsService.setActiveBusinessUnit(this.businessUnit.id, this.businessUnit.version, false)\r\n .then(function () { return _this.redirectToBack(); });\r\n };\r\n BusinessUnitsCreateEditController.prototype.getUrlByCompanyName = function () {\r\n var url = this.$location.protocol() + \"://\" + this.$location.host() + \":\" + this.$location.port();\r\n return \"URL: \" + url + \"/\" + this.businessUnit.companyName + \"/client/app.html\";\r\n };\r\n BusinessUnitsCreateEditController.prototype.isShowDeactivateButton = function () {\r\n return this.businessUnit && !this.businessUnit.predefined && !this.isCreatePage && this.topMenuKey === this.BU_GENERAL_DETAILS\r\n && this.systemPermissions && this.systemPermissions.manageAnyBusinessUnit;\r\n };\r\n BusinessUnitsCreateEditController.prototype.isShowRemoveLinkButton = function () {\r\n return this.businessUnit && !this.isCreatePage && this.topMenuKey === this.BU_POWER_BI_INTEGRATION\r\n && this.systemPermissions && this.systemPermissions.configureBusinessUnitSettings;\r\n };\r\n BusinessUnitsCreateEditController.prototype.isDisableSaveButton = function () {\r\n if (this.systemPermissions) {\r\n return !this.systemPermissions.configureBusinessUnitSettings;\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.copyToClipboard = function (elementId) {\r\n var el = document.createElement('textarea');\r\n el.value = document.getElementById(elementId).innerText;\r\n el.setAttribute('readonly', '');\r\n el.style.position = 'absolute';\r\n el.style.left = '-9999px';\r\n document.body.appendChild(el);\r\n var selected = document.getSelection().rangeCount > 0\r\n ? document.getSelection().getRangeAt(0)\r\n : null;\r\n el.select();\r\n document.execCommand('copy');\r\n INotifier_1.notifier.success(\"The link has been copied to clipboard\");\r\n document.body.removeChild(el);\r\n if (selected) {\r\n document.getSelection().removeAllRanges();\r\n document.getSelection().addRange(selected);\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.getLinkForSelfRegistration = function () {\r\n var urlArrays = this.$location.absUrl().split(\"#\");\r\n return this.domainAddress == \"\" || this.domainAddress == null\r\n ? urlArrays[0] + \"#\" + (\"/auth/logon?BUid=\" + this.businessUnitId)\r\n : this.domainAddress + \"/auth/logon\";\r\n };\r\n BusinessUnitsCreateEditController.prototype.showPurchaseOrderPreview = function () {\r\n if (this.isPreviewHidden) {\r\n this.isPreviewHidden = false;\r\n }\r\n else {\r\n this.getPurchaseOrderPreview();\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.getPurchaseOrderPreview = function () {\r\n var _this = this;\r\n var parameters = {\r\n businessUnitId: this.businessUnitId,\r\n userId: this.userId\r\n };\r\n var reportType = 'PURCHASED_ORDERS_REPORT_PREVIEW';\r\n this.certificateService.downloadCertificate(parameters, reportType)\r\n .then(function (result) { return _this.purchaseOrderContent = \"\"; });\r\n };\r\n BusinessUnitsCreateEditController.prototype.hidePurchaseOrderPreview = function () {\r\n this.isPreviewHidden = true;\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveAccountGoToWebinar = function () {\r\n var _this = this;\r\n this.webinarSettings.businessUnitId = this.businessUnitId;\r\n this.businessUnitsService.saveWebinarSettingForBusinessUnit(this.webinarSettings)\r\n .then(function () {\r\n _this.clearPassword();\r\n INotifier_1.notifier.success(\"Settings for GoToWebinar has been saved\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.clearPassword = function () {\r\n if (this.webinarSettings && this.webinarSettings.username) {\r\n this.webinarSettings.password = \"\";\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.getAvailableUsersUrl = function () {\r\n var url = \"/api/businessUnits/webinar/availableInstructors?\";\r\n if (this.businessUnitId) {\r\n url += \"businessUnitId=\" + this.businessUnitId + \"&\";\r\n }\r\n return url;\r\n };\r\n BusinessUnitsCreateEditController.prototype.getAvailableUsersUrlZoom = function () {\r\n var url = \"/api/businessUnits/zoom/availableInstructors?\";\r\n if (this.businessUnitId) {\r\n url += \"businessUnitId=\" + this.businessUnitId + \"&\";\r\n }\r\n return url;\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveWebinarInstructorSettings = function () {\r\n var _this = this;\r\n var webinarInstructorSettingsSave = {};\r\n webinarInstructorSettingsSave.userId = this.webinarAvailableUserId;\r\n webinarInstructorSettingsSave.businessUnitId = this.businessUnitId;\r\n webinarInstructorSettingsSave.webinarUsername = this.webinarInstructors.webinarUsername;\r\n webinarInstructorSettingsSave.webinarPassword = this.webinarInstructors.webinarPassword;\r\n this.businessUnitsService.saveWebinarInstructorSettings(webinarInstructorSettingsSave)\r\n .then(function () {\r\n _this.isAddRowVisible = false;\r\n _this.webinarInstructorsGridModel.loadCurrentPage();\r\n _this.clearInstructorSettingsForm();\r\n _this.reloadWebinarInstructorsSelector();\r\n INotifier_1.notifier.success(\"Settings for GoToWebinar has been saved\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveZoomInstructorSettings = function () {\r\n var _this = this;\r\n var zoomInstructorSettingsSave = {};\r\n zoomInstructorSettingsSave.userId = this.zoomAvailableUserId;\r\n zoomInstructorSettingsSave.businessUnitId = this.businessUnitId;\r\n zoomInstructorSettingsSave.email = this.zoomInstructors.email;\r\n this.businessUnitsService.saveZoomInstructorSettings(zoomInstructorSettingsSave)\r\n .then(function () {\r\n _this.isAddRowVisible = false;\r\n _this.zoomInstructorsGridModel.loadCurrentPage();\r\n _this.clearInstructorSettingsFormZoom();\r\n _this.reloadZoomInstructorsSelector();\r\n INotifier_1.notifier.success(\"Zoom configuration successfully updated.\");\r\n }).catch(function (response) {\r\n if (response.data.message === \"Zoom settings must not be empty\") {\r\n INotifier_1.notifier.error(\"Zoom settings must not be empty\");\r\n }\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveTeamsInstructorSettings = function () {\r\n var _this = this;\r\n var teamsInstructorSettingsSave = {};\r\n teamsInstructorSettingsSave.userId = this.teamsAvailableUserId;\r\n teamsInstructorSettingsSave.businessUnitId = this.businessUnitId;\r\n teamsInstructorSettingsSave.teamsUsername = this.teamsInstructors.teamsUsername;\r\n teamsInstructorSettingsSave.teamsPassword = this.teamsInstructors.teamsPassword;\r\n this.businessUnitsService.saveTeamsInstructorSettings(teamsInstructorSettingsSave)\r\n .then(function () {\r\n _this.isAddRowVisible = false;\r\n _this.teamsInstructorsGridModel.loadCurrentPage();\r\n _this.clearInstructorSettingsFormTeams();\r\n _this.reloadTeamsInstructorsSelector();\r\n INotifier_1.notifier.success(\"Teams configuration successfully updated.\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.clearInstructorSettingsForm = function () {\r\n var _this = this;\r\n this.webinarInstructors.webinarUsername = \"\";\r\n this.webinarInstructors.webinarPassword = \"\";\r\n this.webinarAvailableUserId = undefined;\r\n this.specialWebinarInstructor = undefined;\r\n setTimeout(function () { return _this.isWebinarInstructorsShowed = true; }, 0);\r\n };\r\n BusinessUnitsCreateEditController.prototype.clearInstructorSettingsFormZoom = function () {\r\n var _this = this;\r\n this.zoomInstructors.email = \"\";\r\n this.zoomAvailableUserId = undefined;\r\n this.specialZoomInstructor = undefined;\r\n setTimeout(function () { return _this.isZoomInstructorsShowed = true; }, 0);\r\n };\r\n BusinessUnitsCreateEditController.prototype.clearInstructorSettingsFormTeams = function () {\r\n var _this = this;\r\n this.teamsInstructors.teamsUsername = \"\";\r\n this.teamsInstructors.teamsPassword = \"\";\r\n this.teamsAvailableUserId = undefined;\r\n this.specialTeamsInstructor = undefined;\r\n setTimeout(function () { return _this.isTeamsInstructorsShowed = true; }, 0);\r\n };\r\n BusinessUnitsCreateEditController.prototype.reloadWebinarInstructorsSelector = function () {\r\n var _this = this;\r\n this.isWebinarInstructorsShowed = false;\r\n setTimeout(function () { return _this.isWebinarInstructorsShowed = true; }, 0);\r\n };\r\n BusinessUnitsCreateEditController.prototype.reloadZoomInstructorsSelector = function () {\r\n var _this = this;\r\n this.isZoomInstructorsShowed = false;\r\n setTimeout(function () { return _this.isZoomInstructorsShowed = true; }, 0);\r\n };\r\n BusinessUnitsCreateEditController.prototype.reloadTeamsInstructorsSelector = function () {\r\n var _this = this;\r\n this.isTeamsInstructorsShowed = false;\r\n setTimeout(function () { return _this.isTeamsInstructorsShowed = true; }, 0);\r\n };\r\n BusinessUnitsCreateEditController.prototype.removeWebinarInstructorSettings = function (webinarInstructorSettingsId) {\r\n var _this = this;\r\n this.businessUnitsService.removeInstructorSettings(webinarInstructorSettingsId)\r\n .then(function () {\r\n _this.webinarInstructorsGridModel.loadCurrentPage();\r\n _this.reloadWebinarInstructorsSelector();\r\n INotifier_1.notifier.success(\"Selected organizer has been removed\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.removeZoomInstructorSettings = function (zoomInstructorSettingsId) {\r\n var _this = this;\r\n this.businessUnitsService.removeZoomInstructorSettings(zoomInstructorSettingsId)\r\n .then(function () {\r\n _this.zoomInstructorsGridModel.loadCurrentPage();\r\n _this.reloadZoomInstructorsSelector();\r\n INotifier_1.notifier.success(\"Selected organizer has been removed\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.removeTeamsInstructorSettings = function (teamsInstructorSettingsId) {\r\n var _this = this;\r\n this.businessUnitsService.removeTeamsInstructorSettings(teamsInstructorSettingsId)\r\n .then(function () {\r\n _this.teamsInstructorsGridModel.loadCurrentPage();\r\n _this.reloadTeamsInstructorsSelector();\r\n INotifier_1.notifier.success(\"Selected organizer has been removed\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.editWebinarInstructor = function (webinarInstructorSettings) {\r\n this.isAddRowVisible = false;\r\n this.isWebinarInstructorsShowed = false;\r\n this.webinarInstructors.webinarPassword = \"\";\r\n this.webinarInstructors.webinarUsername = webinarInstructorSettings.webinarUsername;\r\n this.specialWebinarInstructor = webinarInstructorSettings.userName;\r\n this.webinarAvailableUserId = webinarInstructorSettings.userId;\r\n };\r\n BusinessUnitsCreateEditController.prototype.editZoomInstructor = function (zoomInstructorSettings) {\r\n this.isAddRowVisible = false;\r\n this.isZoomInstructorsShowed = false;\r\n this.zoomInstructors.email = zoomInstructorSettings.email;\r\n this.specialZoomInstructor = zoomInstructorSettings.userName;\r\n this.zoomAvailableUserId = zoomInstructorSettings.userId;\r\n };\r\n BusinessUnitsCreateEditController.prototype.editTeamsInstructor = function (teamsInstructorSettings) {\r\n this.isAddRowVisible = false;\r\n this.isTeamsInstructorsShowed = false;\r\n this.teamsInstructors.teamsUsername = teamsInstructorSettings.teamsUsername;\r\n this.teamsInstructors.teamsPassword = \"\";\r\n this.specialTeamsInstructor = teamsInstructorSettings.userName;\r\n this.teamsAvailableUserId = teamsInstructorSettings.userId;\r\n };\r\n BusinessUnitsCreateEditController.prototype.cancelAddInstructor = function () {\r\n this.clearInstructorSettingsForm();\r\n this.isAddRowVisible = false;\r\n };\r\n BusinessUnitsCreateEditController.prototype.cancelZoomAddInstructor = function () {\r\n this.clearInstructorSettingsFormZoom();\r\n this.isAddRowVisible = false;\r\n };\r\n BusinessUnitsCreateEditController.prototype.cancelTeamsAddInstructor = function () {\r\n this.clearInstructorSettingsFormTeams();\r\n this.isAddRowVisible = false;\r\n };\r\n BusinessUnitsCreateEditController.prototype.validateSaveForm = function () {\r\n return !this.webinarAvailableUserId || !this.webinarInstructors\r\n || !this.webinarInstructors.webinarUsername || !this.webinarInstructors.webinarPassword;\r\n };\r\n BusinessUnitsCreateEditController.prototype.validateSaveFormZoom = function () {\r\n return !this.zoomAvailableUserId || !this.zoomInstructors || !this.zoomInstructors.email;\r\n };\r\n BusinessUnitsCreateEditController.prototype.validateSaveFormTeams = function () {\r\n return !this.teamsAvailableUserId || !this.teamsInstructors\r\n || !this.teamsInstructors.teamsUsername || !this.teamsInstructors.teamsPassword;\r\n };\r\n BusinessUnitsCreateEditController.prototype.checkWebinarInstructorConnection = function (webinarInstructorId) {\r\n this.businessUnitsService.checkWebinarInstructorConnection(webinarInstructorId)\r\n .then(function (result) {\r\n result ? INotifier_1.notifier.success(\"Connection is successful\") :\r\n INotifier_1.notifier.error(\"Connection failed\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.checkWebinarConnection = function () {\r\n if (!this.webinarSettings || !this.webinarSettings.businessUnitId) {\r\n INotifier_1.notifier.error(\"GoToWebinar account is not configured\");\r\n }\r\n else {\r\n this.businessUnitsService.checkWebinarConnection(this.businessUnitId)\r\n .then(function (result) {\r\n result ? INotifier_1.notifier.success(\"Connection is successful\") :\r\n INotifier_1.notifier.error(\"Connection failed\");\r\n });\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.isCheckPayPalDataButtonActive = function () {\r\n return this.isPayPalConfigured == true;\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveMenuItemsSettings = function () {\r\n var _this = this;\r\n this.businessUnitsService.updateMenuItemsSettings(this.businessUnitId, this.menuItemsSettings)\r\n .then(function (result) {\r\n _this.menuItemsSettings = angular.copy(result);\r\n INotifier_1.notifier.success(\"Menu items settings successfully updated.\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.savePaymentConfiguration = function () {\r\n if (this.currentPaymentConfiguration == this.BU_PAY_PAL) {\r\n this.savePayPalConfiguration();\r\n this.deleteAuthorizeNetConfiguration();\r\n if (this.newReceiptTemplateFile) {\r\n this.saveReceiptTemplate();\r\n }\r\n this.deleteAuthorizeNetConfiguration();\r\n }\r\n else if (this.currentPaymentConfiguration == this.BU_AUTHORIZE_NET) {\r\n this.saveAuthorizeNetConfiguration();\r\n this.deletePayPalConfiguration();\r\n if (this.newReceiptTemplateFile) {\r\n this.saveReceiptTemplate();\r\n }\r\n }\r\n else {\r\n this.deletePayPalConfiguration();\r\n this.deleteAuthorizeNetConfiguration();\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.savePayPalConfiguration = function () {\r\n var _this = this;\r\n this.businessUnitsService.updatePayPalConfiguration(this.businessUnitId, this.payPalConfiguration)\r\n .then(function (result) {\r\n _this.payPalConfiguration = angular.copy(result);\r\n INotifier_1.notifier.success(\"PayPal configuration successfully updated.\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.deletePayPalConfiguration = function () {\r\n var _this = this;\r\n if (this.payPalConfiguration && this.payPalConfiguration != {}) {\r\n this.businessUnitsService.deletePayPalConfiguration(this.businessUnitId)\r\n .then(function () {\r\n _this.payPalConfiguration = {};\r\n INotifier_1.notifier.success(\"PayPal configuration successfully updated.\");\r\n });\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.checkPayPalCorrectData = function () {\r\n this.businessUnitsService.checkPayPalCorrectData(this.businessUnitId).then(function (result) {\r\n result ? INotifier_1.notifier.success(\"Connection is successful\") : INotifier_1.notifier.error(\"Connection failed\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.getLinkForWebhook = function () {\r\n return this.url.base(\"/api/integration/paypal/webhooks\").service();\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveAuthorizeNetConfiguration = function () {\r\n var _this = this;\r\n this.businessUnitsService.updateAuthorizeNetConfiguration(this.businessUnitId, this.authorizeNetConfiguration)\r\n .then(function (result) {\r\n _this.authorizeNetConfiguration = angular.copy(result);\r\n INotifier_1.notifier.success(\"AuthorizeNet configuration successfully updated.\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.deleteAuthorizeNetConfiguration = function () {\r\n var _this = this;\r\n if (this.authorizeNetConfiguration && this.authorizeNetConfiguration != {}) {\r\n this.businessUnitsService.deleteAuthorizeNetConfiguration(this.businessUnitId)\r\n .then(function () {\r\n _this.authorizeNetConfiguration = {};\r\n INotifier_1.notifier.success(\"AuthorizeNet configuration successfully updated.\");\r\n });\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.checkAuthorizeNetCorrectData = function () {\r\n this.businessUnitsService.checkAuthorizeNetCorrectData(this.businessUnitId).then(function (result) {\r\n result ? INotifier_1.notifier.success(\"Connection is successful\") : INotifier_1.notifier.error(\"Connection failed\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.attachFile = function ($file) {\r\n if (this.newReceiptTemplateFile && !$file.$error)\r\n this.receiptFileTitle = this.newReceiptTemplateFile.name;\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveReceiptTemplate = function () {\r\n var _this = this;\r\n if (this.disabledSaveReceiptButton) {\r\n return;\r\n }\r\n this.disabledSaveReceiptButton = true;\r\n if (this.newReceiptTemplateFile) {\r\n this.receiptTemplate.fileContentId = null;\r\n this.receiptTemplate.fileTitle = this.newReceiptTemplateFile.name;\r\n }\r\n this.receiptTemplate.businessUnitId = this.businessUnitId;\r\n var call = this.receiptTemplate.id\r\n ? this.businessUnitsService.updateReceiptTemplate(this.receiptTemplate.id, this.receiptTemplate)\r\n : this.businessUnitsService.createReceiptTemplate(this.receiptTemplate);\r\n call.then(function (receiptTemplateId) {\r\n if (_this.newReceiptTemplateFile) {\r\n _this.businessUnitsService.uploadReceiptTemplate(receiptTemplateId, _this.newReceiptTemplateFile)\r\n .then(function () {\r\n _this.businessUnitsService.getReceiptTemplate(receiptTemplateId).then(function (receiptTemplate) {\r\n _this.receiptTemplate = angular.copy(receiptTemplate);\r\n _this.newReceiptTemplateFile = null;\r\n }).then(function () {\r\n _this.getPurchaseOrderPreview();\r\n });\r\n });\r\n }\r\n }).finally(function () {\r\n _this.disabledSaveReceiptButton = false;\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.deleteReceipt = function (id) {\r\n var _this = this;\r\n this.businessUnitsService.deleteReceiptTemplate(id)\r\n .then(function () {\r\n _this.receiptTemplate = { fileContentId: null };\r\n _this.cancelReceipt();\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.cancelReceipt = function () {\r\n this.newReceiptTemplateFile = null;\r\n if (this.receiptTemplate.fileContentId) {\r\n this.receiptFileTitle = this.receiptTemplate.fileTitle;\r\n }\r\n else {\r\n this.receiptFileTitle = null;\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.savePowerBiConfiguration = function () {\r\n var _this = this;\r\n this.businessUnitsService.updatePowerBiConfiguration(this.businessUnitId, this.powerBiConfiguration.link)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Embedded reports configuration successfully updated.\");\r\n _this.getBusinessUnitSettings();\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.removeLink = function () {\r\n var _this = this;\r\n this.businessUnitsService.removeLink(this.businessUnitId).then(function () {\r\n _this.isDisableRemoveLink = true;\r\n _this.getBusinessUnitSettings();\r\n INotifier_1.notifier.success(\"Link was successfully removed\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.getCompanyLink = function () {\r\n var regExp = new RegExp(\"(?:https*:\\/\\/)[^/]*\", \"s\").exec(this.domainAddress);\r\n if (regExp == null || this.domainAddress == null) {\r\n INotifier_1.notifier.error(\"Incorrect Domain Format\");\r\n }\r\n return regExp[0];\r\n };\r\n BusinessUnitsCreateEditController.prototype.copyCompanyLinkToClipboard = function () {\r\n var el = document.createElement('textarea');\r\n el.value = document.getElementById(\"companyLink\").innerText;\r\n el.setAttribute('readonly', '');\r\n el.style.position = 'absolute';\r\n el.style.left = '-9999px';\r\n document.body.appendChild(el);\r\n var selected = document.getSelection().rangeCount > 0\r\n ? document.getSelection().getRangeAt(0)\r\n : null;\r\n el.select();\r\n document.execCommand('copy');\r\n INotifier_1.notifier.success(\"The link has been copied to clipboard\");\r\n document.body.removeChild(el);\r\n if (selected) {\r\n document.getSelection().removeAllRanges();\r\n document.getSelection().addRange(selected);\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveZoomSettings = function () {\r\n var _this = this;\r\n this.businessUnitsService.updateZoomSettings(this.businessUnitId, this.zoomSettings)\r\n .then(function (result) {\r\n _this.zoomSettings = angular.copy(result);\r\n INotifier_1.notifier.success(\"Zoom configuration successfully updated.\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.checkZoomConnection = function () {\r\n if (!this.zoomSettings || !this.zoomSettings.businessUnitId) {\r\n INotifier_1.notifier.error(\"Zoom account is not configured\");\r\n }\r\n else {\r\n this.businessUnitsService.checkZoomConnection(this.businessUnitId)\r\n .then(function (result) {\r\n result ? INotifier_1.notifier.success(\"Connection is successful\") :\r\n INotifier_1.notifier.error(\"Connection failed\");\r\n });\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.checkZoomInstructorConnection = function (zoomInstructorId) {\r\n this.businessUnitsService.checkZoomInstructorConnection(zoomInstructorId)\r\n .then(function (result) {\r\n result ? INotifier_1.notifier.success(\"Connection is successful\") :\r\n INotifier_1.notifier.error(\"Connection failed\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveTeamsSettings = function () {\r\n var _this = this;\r\n this.businessUnitsService.updateTeamsSettings(this.businessUnitId, this.teamsSettings)\r\n .then(function (result) {\r\n _this.teamsSettings = angular.copy(result);\r\n INotifier_1.notifier.success(\"Teams configuration successfully updated.\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.checkTeamsInstructorConnection = function (teamsInstructorId) {\r\n this.businessUnitsService.checkTeamsInstructorConnection(teamsInstructorId)\r\n .then(function (result) {\r\n result ? INotifier_1.notifier.success(\"Connection is successful\") :\r\n INotifier_1.notifier.error(\"Connection failed\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveSecurityConfiguration = function () {\r\n var _this = this;\r\n this.businessUnitsService.updateSecurityConfiguration(this.businessUnitId, this.securityConfiguration)\r\n .then(function (result) {\r\n _this.securityConfiguration = angular.copy(result);\r\n INotifier_1.notifier.success(\"Security configuration successfully updated.\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.saveAdobeApiDetails = function () {\r\n var _this = this;\r\n this.adobeCredentials.businessUnitId = this.businessUnit.id;\r\n this.adobeCredentials.clientId = document.getElementById(\"titleField-id\").value;\r\n this.businessUnitsService.setAdobeCredentials(this.businessUnit.id, this.adobeCredentials)\r\n .then(function (result) {\r\n _this.securityConfiguration = angular.copy(result);\r\n INotifier_1.notifier.success(\"Adobe API configuration successfully updated\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.onSelectorChange = function () {\r\n if (this.selectedOption == \"goToWebinar\") {\r\n this.showZoomSettings = false;\r\n this.showGoToWebinarSettings = true;\r\n this.showTeamsSettings = false;\r\n }\r\n else if (this.selectedOption == \"zoom\") {\r\n this.showZoomSettings = true;\r\n this.showGoToWebinarSettings = false;\r\n this.showTeamsSettings = false;\r\n }\r\n else if (this.selectedOption == \"teams\") {\r\n this.showTeamsSettings = true;\r\n this.showZoomSettings = false;\r\n this.showGoToWebinarSettings = false;\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.setBrandingMode = function (brandingMode) {\r\n this.brandingMode = brandingMode;\r\n };\r\n BusinessUnitsCreateEditController.prototype.loadMenuItemsSettings = function () {\r\n var _this = this;\r\n return this.settingsService.getMenuItemsAvailabilitySettings().then(function (r) {\r\n _this.menuItemsAvailability = r;\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.catalogGlobalVisibility = function () {\r\n return this.menuItemsAvailability && this.menuItemsAvailability.showCatalog;\r\n };\r\n BusinessUnitsCreateEditController.prototype.coursesGlobalVisibility = function () {\r\n return this.menuItemsAvailability && this.menuItemsAvailability.showCourses;\r\n };\r\n BusinessUnitsCreateEditController.prototype.learningPathsGlobalVisibility = function () {\r\n return this.menuItemsAvailability && this.menuItemsAvailability.showLearningPaths;\r\n };\r\n BusinessUnitsCreateEditController.prototype.discussionBoardGlobalVisibility = function () {\r\n return this.menuItemsAvailability && this.menuItemsAvailability.showDiscussionBoard;\r\n };\r\n BusinessUnitsCreateEditController.prototype.materialsGlobalVisibility = function () {\r\n return this.menuItemsAvailability && this.menuItemsAvailability.showMaterials;\r\n };\r\n BusinessUnitsCreateEditController.prototype.quizzesGlobalVisibility = function () {\r\n return this.menuItemsAvailability && this.menuItemsAvailability.showQuizzes;\r\n };\r\n BusinessUnitsCreateEditController.prototype.isAnyBUSettingEnabled = function () {\r\n return this.menuItemsAvailability && this.systemPermissions.configureBusinessUnitSettings;\r\n };\r\n BusinessUnitsCreateEditController.prototype.loadBusinessUnitParameters = function () {\r\n var _this = this;\r\n return this.businessUnitsService.getBusinessUnitParameters(this.businessUnitId)\r\n .then(function (result) {\r\n _this.businessUnitParameters = result !== null ? angular.copy(result) : {};\r\n _this.creditsList = _this.businessUnitParameters.creditTypes && _this.businessUnitParameters.creditTypes.length > 0 ? _this.businessUnitParameters.creditTypes.split(\",\") : [];\r\n return _this.loadCreditTypesAvailableForBusinessUnit().then(function () {\r\n return _this.businessUnitParameters;\r\n });\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.updateBusinessUnitParameters = function () {\r\n var _this = this;\r\n this.businessUnitParameters.creditTypes = this.creditsList && this.creditsList.length > 0 ? this.creditsList.join(\",\") : \"\";\r\n this.businessUnitParameters.allowCreditsSelfReporting = this.businessUnit.allowCreditsSelfReporting;\r\n return this.businessUnitsService.updateBusinessUnitParameters(this.businessUnitId, this.businessUnitParameters)\r\n .then(function (result) {\r\n _this.businessUnitParameters = result;\r\n INotifier_1.notifier.success(\"Successfully saved\");\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.loadCreditTypesAvailableForBusinessUnit = function () {\r\n var _this = this;\r\n return this.referenceService.getActiveReferenceEntitiesForSelector(\"creditTypes\", new IReferenceEntitiesParams_1.ReferenceEntitiesParams(undefined, undefined, undefined, undefined, this.businessUnitId, false), null)\r\n .then(function (result) {\r\n _this.availableCreditTypes = result.map(function (i) { return i.name; });\r\n _this.creditsList = _this.creditsList.filter(function (s) { return _this.availableCreditTypes.indexOf(s) != -1; });\r\n return _this.availableCreditTypes;\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.loadProviders = function () {\r\n var _this = this;\r\n this.authService.getProviders()\r\n .then(function (result) { return _this.initProviders(result); });\r\n };\r\n BusinessUnitsCreateEditController.prototype.initProviders = function (providers) {\r\n var _this = this;\r\n this.providers = new Array();\r\n var ssoAllowed = false;\r\n providers.forEach(function (provider) {\r\n if (LogonProviderEnum_1.autoSsoProviders && LogonProviderEnum_1.autoSsoProviders.length > 0 &&\r\n LogonProviderEnum_1.autoSsoProviders.indexOf(LogonProviderEnum_1.LogonProviderEnum[provider.key]) > -1 && !ssoAllowed) {\r\n ssoAllowed = true;\r\n _this.providers.push({ key: \"EXTERNAL_ID_SSO\",\r\n name: \"SSO\",\r\n type: \"EXTERNAL\",\r\n isActive: _this.businessUnit.providers\r\n && _this.businessUnit.providers.length > 0\r\n && _this.businessUnit.providers.indexOf(\"EXTERNAL_ID_SSO\") > -1 });\r\n }\r\n else if (provider.type == \"EXTERNAL\") {\r\n provider.name = provider.name.replace(\"Login with \", \"\");\r\n provider.isActive = _this.businessUnit.providers\r\n && _this.businessUnit.providers.length > 0\r\n && _this.businessUnit.providers.indexOf(provider.key) > -1;\r\n _this.providers.push(provider);\r\n }\r\n });\r\n };\r\n BusinessUnitsCreateEditController.prototype.redirectToAuthorizeNetIntegrationHelp = function () {\r\n this.$window.open(this.$window.location.href.split('#')[0] + \"#\" + this.newsRouter.helpUrl(NewsKey_1.NewsKey.HELP_AUTHORIZE_NET_PAYMENT_METHOD), \"_blank\");\r\n };\r\n BusinessUnitsCreateEditController.prototype.redirectToPayPalIntegrationHelp = function () {\r\n this.$window.open(this.$window.location.href.split('#')[0] + \"#\" + this.newsRouter.helpUrl(NewsKey_1.NewsKey.HELP_PAY_PAL_PAYMENT_METHOD), \"_blank\");\r\n };\r\n BusinessUnitsCreateEditController.prototype.redirectToMSTeamsIntegrationHelp = function () {\r\n this.$window.open(this.$window.location.href.split('#')[0] + \"#\" + this.newsRouter.helpUrl(NewsKey_1.NewsKey.HELP_MS_TEAMS_WEBINAR_TYPE), \"_blank\");\r\n };\r\n BusinessUnitsCreateEditController.prototype.redirectToZoomIntegrationHelp = function () {\r\n this.$window.open(this.$window.location.href.split('#')[0] + \"#\" + this.newsRouter.helpUrl(NewsKey_1.NewsKey.HELP_ZOOM), \"_blank\");\r\n };\r\n BusinessUnitsCreateEditController.prototype.isMobileVersion = function () {\r\n return window.innerWidth <= 991;\r\n };\r\n BusinessUnitsCreateEditController.prototype.createBillingOrder = function (newPlan) {\r\n this.selectedBillPlan = newPlan;\r\n $(\"#authorizeNetModal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n setTimeout(function () {\r\n var element = document.getElementById(\"successCallback\");\r\n element.setAttribute(\"plan\", newPlan.id.toString());\r\n }, 1000);\r\n };\r\n BusinessUnitsCreateEditController.prototype.checkNewPaymentId = function () {\r\n var _this = this;\r\n var element = document.getElementById(\"successCallback\");\r\n var transactionId = element.getAttribute(\"value\");\r\n var planId = element.getAttribute(\"plan\");\r\n this.billingPlanService.createPaymentProfile(this.businessUnitId, transactionId, planId)\r\n .finally(function () { return _this.$window.location.reload(); });\r\n };\r\n BusinessUnitsCreateEditController.prototype.authorizeNetCallback = function () {\r\n var _this = this;\r\n setTimeout(function () { return _this.checkNewPaymentId(); }, 1000);\r\n };\r\n BusinessUnitsCreateEditController.prototype.selectBillingPlan = function (newPlan) {\r\n var _this = this;\r\n if (newPlan.planCode == \"FREE\") {\r\n this.billingPlanService.cancelSubscription(this.businessUnitId)\r\n .finally(function () { return _this.$window.location.reload(); });\r\n }\r\n else {\r\n this.billingPlanService.updateSubscription(this.businessUnitId, newPlan)\r\n .finally(function () { return _this.$window.location.reload(); });\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.showFrequentlyAskedQuestions = function () {\r\n if ($(\"#frequentlyAskedQuestions\").hasClass('hidden')) {\r\n $(\"#frequentlyAskedQuestions\").removeClass('hidden');\r\n }\r\n else {\r\n $(\"#frequentlyAskedQuestions\").addClass('hidden');\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.showUpdatePlanModal = function (newPlan) {\r\n this.selectedBillPlan = newPlan;\r\n if (newPlan.planName !== 'Free') {\r\n this.upgradeBillingPlan = this.currentBillPlan.price < newPlan.price;\r\n $(\"#updatePlanModal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n else {\r\n this.cancellationBillingPlan = this.currentBillPlan.userRecords <= 5;\r\n $(\"#cancellationPlanModal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n };\r\n BusinessUnitsCreateEditController.prototype.closePopup = function (elementId) {\r\n $(\"#\" + elementId).modal(\"hide\");\r\n };\r\n BusinessUnitsCreateEditController.prototype.loadAvailableLocales = function () {\r\n var _this = this;\r\n return this.settingsService.getAvailableLocales().then(function (locales) {\r\n _this.availableLocales = locales;\r\n });\r\n };\r\n BusinessUnitsCreateEditController.NAME = \"businessUnit.BusinessUnitsCreateEditController\";\r\n BusinessUnitsCreateEditController.$inject = [\r\n \"$q\",\r\n \"$http\",\r\n \"$scope\",\r\n \"$window\",\r\n \"$routeParams\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n BusinessUnitsRouter_1.BusinessUnitsRouter.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n AuthorizeNetService_1.AuthorizeNetService.NAME,\r\n BundleService_1.BundleService.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthService_1.AuthService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n ReferenceService_1.ReferenceService.NAME,\r\n NewsRouter_1.NewsRouter.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n BillingPlanService_1.BillingPlanService.NAME,\r\n CertificateService_1.CertificateService.NAME,\r\n NewsService_1.NewsService.NAME\r\n ];\r\n return BusinessUnitsCreateEditController;\r\n})();\r\nexports.BusinessUnitsCreateEditController = BusinessUnitsCreateEditController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../branding/BrandingEditMode\":30,\"../bundles/BundleService\":36,\"../certificates/CertificateService\":45,\"../finances/BillingPlanService\":231,\"../integration/authorizenet/AuthorizeNetService\":297,\"../news/NewsService\":354,\"../news/models/NewsKey\":356,\"../reference/ReferenceService\":409,\"../reference/models/IReferenceEntitiesParams\":411,\"../security/LogonProviderEnum\":416,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../settings/SettingsService\":427,\"../urls/BusinessUnitsRouter\":464,\"../urls/FinancesRouter\":471,\"../urls/NewsRouter\":481,\"../utils/AppProperties\":\"AppProperties\",\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UploadUtils\":527,\"../utils/UrlService\":528,\"./BusinessUnitsService\":44}],43:[function(require,module,exports){\nvar AuthCoreModule_1 = require(\"../authcore/AuthCoreModule\");\r\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar BusinessUnitsController_1 = require(\"./BusinessUnitsController\");\r\nvar BusinessUnitsCreateEditController_1 = require(\"./BusinessUnitsCreateEditController\");\r\nvar BusinessUnitsService_1 = require(\"./BusinessUnitsService\");\r\nexports.BusinessUnitsModule = angular\r\n .module(\"businessUnits\", [\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n])\r\n .service(BusinessUnitsService_1.BusinessUnitsService.NAME, BusinessUnitsService_1.BusinessUnitsService)\r\n .controller(BusinessUnitsController_1.BusinessUnitsController.NAME, BusinessUnitsController_1.BusinessUnitsController)\r\n .controller(BusinessUnitsCreateEditController_1.BusinessUnitsCreateEditController.NAME, BusinessUnitsCreateEditController_1.BusinessUnitsCreateEditController);\r\n},{\"../authcore/AuthCoreModule\":24,\"../security/SecurityModule\":419,\"../urls/UrlsModule\":492,\"./BusinessUnitsController\":41,\"./BusinessUnitsCreateEditController\":42,\"./BusinessUnitsService\":44}],44:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar BusinessUnitsService = (function () {\r\n function BusinessUnitsService($http, $sce, url, $uploader) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n this.$uploader = $uploader;\r\n }\r\n BusinessUnitsService.prototype.setActiveBusinessUnit = function (businessUnitId, version, isActive) {\r\n return this.$http.put(this.url.base(\"/api/businessUnits/:businessUnitId/active?isActive=:isActive&version=:version\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .param(\":version\", version)\r\n .param(\":isActive\", isActive).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.create = function (businessUnit) {\r\n return this.$http.post(this.url.service(\"/api/businessUnits\"), businessUnit)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.update = function (businessUnit) {\r\n return this.$http.put(this.url.service(\"/api/businessUnits\"), businessUnit)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getBusinessUnitById = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getBusinessUnitsForSelector = function () {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/forSelector\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getBusinessUnitsDeactivateForSelector = function () {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/deactivateForSelector\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.createBusinessUnitBundle = function (businessUnitId, businessUnitVersion) {\r\n return this.$http.post(this.url.base(\"/api/businessUnits/:businessUnitId/bundles?businessUnitVersion=:businessUnitVersion\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .param(\":businessUnitVersion\", businessUnitVersion)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.createEditCustomBrandingSettings = function (customBranding) {\r\n return this.$http.post(this.url.service(\"/api/businessUnits/customBranding\"), customBranding)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.createEditSystemBrandingSettings = function (customBranding) {\r\n return this.$http.post(this.url.service(\"/api/businessUnits/systemBranding\"), customBranding)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getPayPalConfiguration = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId/payPal\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getSecurityConfiguration = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId/security\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.updateSecurityConfiguration = function (businessUnitId, securityConfiguration) {\r\n return this.$http.put(this.url.base(\"/api/businessUnits/:businessUnitId/security\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service(), securityConfiguration)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.updateMenuItemsSettings = function (businessUnitId, visibilitySettings) {\r\n return this.$http.put(this.url.base(\"/api/businessUnits/:businessUnitId/menuItems\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service(), visibilitySettings)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.updateSystemMenuItemsVisibilitySettings = function (visibilitySettings) {\r\n return this.$http.put(this.url.service(\"/api/businessUnits/system/menuItems\"), visibilitySettings)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.updatePayPalConfiguration = function (businessUnitId, payPalConfiguration) {\r\n return this.$http.put(this.url.base(\"/api/businessUnits/:businessUnitId/payPal\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service(), payPalConfiguration)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.deletePayPalConfiguration = function (businessUnitId) {\r\n return this.$http.delete(this.url.base(\"/api/businessUnits/:businessUnitId/payPal\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getPayPalClientId = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/payPal/clientId?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", (businessUnitId != null) ? businessUnitId : \"\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getWebinarSettingByBusinessUnit = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId/webinar\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.saveWebinarSettingForBusinessUnit = function (webinarSetting) {\r\n return this.$http.post(this.url.service(\"/api/businessUnits/webinar\"), webinarSetting)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.saveWebinarInstructorSettings = function (webinarInstructorSettings) {\r\n return this.$http.post(this.url.service(\"/api/businessUnits/webinar/instructor\"), webinarInstructorSettings)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.removeInstructorSettings = function (webinarInstructorSettingId) {\r\n return this.$http.delete(this.url.base(\"/api/businessUnits/webinar/instructor/:webinarInstructorSettingId\")\r\n .param(\":webinarInstructorSettingId\", webinarInstructorSettingId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.checkWebinarInstructorConnection = function (webinarInstructorId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/webinar/instructor/:webinarInstructorId/checkConnection\")\r\n .param(\":webinarInstructorId\", webinarInstructorId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.checkWebinarConnection = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId/webinar/checkConnection\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.checkPayPalCorrectData = function (businessUnitId) {\r\n if (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId/payPal/checkConnection\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n }\r\n else {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/global/payPal/checkConnection\"))\r\n .then(function (result) { return result.data; });\r\n }\r\n };\r\n BusinessUnitsService.prototype.getPowerBiConfiguration = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId/powerbi\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getMenuItemsSettings = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"api/businessUnits/:businessUnitId/menuItems\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getSystemMenuItemsSettings = function () {\r\n return this.$http.get(this.url.service(\"api/businessUnits/system/menuItems\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.updatePowerBiConfiguration = function (businessUnitId, link) {\r\n return this.$http.put(this.url.base(\"/api/businessUnits/:businessUnitId/powerbi\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service(), { link: link })\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.removeLink = function (businessUnitId) {\r\n return this.$http.delete(this.url.base(\"/api/businessUnits/:businessUnitId/powerbi\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getZoomSettings = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"api/businessUnits/:businessUnitId/zoom\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.updateZoomSettings = function (businessUnitId, zoomSettings) {\r\n return this.$http.put(this.url.base(\"/api/businessUnits/:businessUnitId/zoom\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service(), zoomSettings)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.saveZoomInstructorSettings = function (zoomInstructorSettings) {\r\n return this.$http.post(this.url.service(\"/api/businessUnits/zoom/instructor\"), zoomInstructorSettings)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.removeZoomInstructorSettings = function (zoomInstructorSettingId) {\r\n return this.$http.delete(this.url.base(\"/api/businessUnits/zoom/instructor/:zoomInstructorSettingId\")\r\n .param(\":zoomInstructorSettingId\", zoomInstructorSettingId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.checkZoomInstructorConnection = function (zoomInstructorId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/zoom/instructor/:zoomInstructorId/checkConnection\")\r\n .param(\":zoomInstructorId\", zoomInstructorId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.checkZoomConnection = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId/zoom/checkConnection\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getBUDomainName = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"api/businessUnits/:businessUnitId/domain\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getBusinessUnitByDomain = function (domain) {\r\n return this.$http.get(this.url.base(\"api/businessUnits/:domain/businessUnit\")\r\n .param(\":domain\", domain)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getBusinessUnitParameters = function (businessUnitId) {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/\" + businessUnitId + \"/parameters\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.updateBusinessUnitParameters = function (businessUnitId, businessUnitParameters) {\r\n return this.$http.put(this.url.service(\"/api/businessUnits/\" + businessUnitId + \"/parameters\"), businessUnitParameters)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getBusinessUnitTags = function (businessUnitId) {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/\" + businessUnitId + \"/businessUnitsTags\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getAuthorizeNetConfiguration = function (businessUnitId) {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/\" + businessUnitId + \"/authorizeNet\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getAuthorizeNetEnvironmentType = function (businessUnitId) {\r\n if (businessUnitId != null) {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/\" + businessUnitId + \"/authorizeNet/environmentType\"))\r\n .then(function (result) { return result.data; });\r\n }\r\n else {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/global/authorizeNet/environmentType\"))\r\n .then(function (result) { return result.data; });\r\n }\r\n };\r\n BusinessUnitsService.prototype.updateAuthorizeNetConfiguration = function (businessUnitId, configuration) {\r\n return this.$http.put(this.url.base(\"/api/businessUnits/:businessUnitId/authorizeNet\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service(), configuration)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.deleteAuthorizeNetConfiguration = function (businessUnitId) {\r\n return this.$http.delete(this.url.base(\"/api/businessUnits/:businessUnitId/authorizeNet\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.checkAuthorizeNetCorrectData = function (businessUnitId) {\r\n if (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId/authorizeNet/checkConnection\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n }\r\n else {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/global/authorizeNet/checkConnection\"))\r\n .then(function (result) { return result.data; });\r\n }\r\n };\r\n BusinessUnitsService.prototype.getTeamsSettings = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"api/businessUnits/:businessUnitId/teams\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.updateTeamsSettings = function (businessUnitId, teamsSettings) {\r\n return this.$http.put(this.url.base(\"/api/businessUnits/:businessUnitId/teams\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service(), teamsSettings)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.saveTeamsInstructorSettings = function (teamsInstructorSettings) {\r\n return this.$http.post(this.url.service(\"/api/businessUnits/teams/instructor\"), teamsInstructorSettings)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.removeTeamsInstructorSettings = function (teamsInstructorSettingId) {\r\n return this.$http.delete(this.url.base(\"/api/businessUnits/teams/instructor/:teamsInstructorSettingId\")\r\n .param(\":teamsInstructorSettingId\", teamsInstructorSettingId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.checkTeamsInstructorConnection = function (teamsInstructorId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/teams/instructor/:teamsInstructorId/checkConnection\")\r\n .param(\":teamsInstructorId\", teamsInstructorId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getBusinessUnitByIds = function (businessUnitIds) {\r\n var query = StringBuilder_1.StringBuilder.interpolate(\"/api/businessUnits/isAllowSelfSignUp?\");\r\n businessUnitIds.forEach(function (bu) { return query.add(\"bu=\" + bu); });\r\n return this.$http.get(this.url.base(query.build()).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getAdobeCredentials = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId/adobeCredentials\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.setAdobeCredentials = function (businessUnitId, adobeCredentials) {\r\n return this.$http.post(this.url.base(\"/api/businessUnits/:businessUnitId/adobeCredentials\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service(), adobeCredentials)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getAdobeClientIdByDomain = function (domain) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/byDomain/:domain/adobeCredentials\")\r\n .param(\":domain\", domain)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getReceiptTemplate = function (id) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/receipt/:id\")\r\n .param(\":id\", id).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getReceiptTemplateByBUId = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/receipt/byBusinessUnit/:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.updateReceiptTemplate = function (id, receiptTemplate) {\r\n return this.$http.put(this.url.base(\"/api/businessUnits/receipt/:id\")\r\n .param(\":id\", id).service(), receiptTemplate)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.createReceiptTemplate = function (receiptTemplate) {\r\n return this.$http.post(this.url.base(\"/api/businessUnits/receipt\").service(), receiptTemplate)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.uploadReceiptTemplate = function (receiptTemplateId, file) {\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(this.url.base(\"/api/businessUnits/receipt/:id/upload\")\r\n .param(\":id\", receiptTemplateId))\r\n .service(),\r\n file: file\r\n });\r\n };\r\n BusinessUnitsService.prototype.deleteReceiptTemplate = function (id) {\r\n return this.$http.delete(this.url.base(\"/api/businessUnits/receipt/:id\")\r\n .param(\":id\", id)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.isAvailableCreatingNewUserForFreePlan = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/checkBusinessUnitCreateNewUser/:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getBusinessUnitsWithFreePlan = function (businessUnitIds) {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/freePlanBusinessUnits\"), { params: { businessUnitIds: businessUnitIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.isFreeBusinessUnitsFull = function (businessUnitIds) {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/isFreeBusinessUnitsFull\"), { params: { businessUnitIds: businessUnitIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getAvailablePlaceForFreeBu = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/getAvailablePlaceForFreeBu/:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.checkFreePlanOnBusinessUnit = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/checkFreePlanOnBusinessUnit/:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.checkExistenceOfDomainInAzure = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/:businessUnitId/checkDomain\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.prototype.getAllBuDomains = function () {\r\n return this.$http.get(this.url.base(\"/api/businessUnits/allDomains\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BusinessUnitsService.NAME = \"businessUnit.BusinessUnitsService\";\r\n BusinessUnitsService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME,\r\n \"Upload\"\r\n ];\r\n return BusinessUnitsService;\r\n})();\r\nexports.BusinessUnitsService = BusinessUnitsService;\r\n},{\"../utils/StringBuilder\":525,\"../utils/UrlService\":528}],45:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CertificateService = (function () {\r\n function CertificateService($http, $q, url, $uploader) {\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.url = url;\r\n this.$uploader = $uploader;\r\n }\r\n CertificateService.prototype.setActiveEntity = function (id, version, isActive) {\r\n return this.$http.put(this.url.base(\"/api/certificates/entity/:id?isActive=:isActive&version=:version\")\r\n .param(\":id\", id)\r\n .param(\":version\", version)\r\n .param(\":isActive\", isActive).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.getCertificateTemplate = function (id) {\r\n return this.$http.get(this.url.base(\"/api/certificates/:id\")\r\n .param(\":id\", id).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.updateCertificateTemplate = function (id, certificateTemplate) {\r\n return this.$http.put(this.url.base(\"/api/certificates/:id\")\r\n .param(\":id\", id).service(), certificateTemplate)\r\n .then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.createCertificateTemplate = function (certificateTemplate) {\r\n return this.$http.post(this.url.base(\"/api/certificates\").service(), certificateTemplate)\r\n .then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.uploadCertificateTemplate = function (certificateTemplateId, file) {\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(this.url.base(\"/api/certificates/:id/upload\")\r\n .param(\":id\", certificateTemplateId))\r\n .service(),\r\n file: file\r\n });\r\n };\r\n CertificateService.prototype.setActiveCertificateTemplate = function (id, isActive) {\r\n return this.$http.put(this.url.base(\"/api/certificates/:id/:isActive\")\r\n .param(\":id\", id)\r\n .param(\":isActive\", isActive)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.downloadCertificate = function (parameters, reportType) {\r\n var _this = this;\r\n return this.$http.post(this.url.base(\"/api/reports/downloadToken/:reportType\")\r\n .param(\":reportType\", reportType)\r\n .service(), {\r\n parameters: JSON.stringify(parameters)\r\n }).then(function (result) { return _this.url.base(\"/api/reports/download/:token\").param(\":token\", result.data.token).service(); });\r\n };\r\n CertificateService.prototype.addCertificateTemplateToCourse = function (courseCertificateTemplate) {\r\n return this.$http.post(this.url.base(\"/api/certificates/addCertificateTemplateToCourse\")\r\n .service(), courseCertificateTemplate)\r\n .then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.deleteCertificateTemplateFromCourse = function (certificateTemplateId, courseId) {\r\n return this.$http.delete(this.url.base(\"/api/certificates/deleteCertificateTemplateFromCourse?certificateTemplateId=:certificateTemplateId&courseId=:courseId\")\r\n .param(\":certificateTemplateId\", certificateTemplateId)\r\n .param(\":courseId\", courseId)\r\n .service()).then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.getCertificateTemplatesForCourse = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/certificates/course/:courseId/templates\")\r\n .param(\":courseId\", courseId)\r\n .service()).then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.getCourseCertificateTemplates = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/certificates/course/:courseId\")\r\n .param(\":courseId\", courseId)\r\n .service()).then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.updateCertificateTemplatesForCourse = function (courseId, certificateTemplates) {\r\n return this.$http.put(this.url.base(\"/api/certificates/course/:courseId/updateCertificateTemplates\")\r\n .param(\":courseId\", courseId)\r\n .service(), certificateTemplates)\r\n .then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.getAvailableCertificateTemplatesForCourse = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/certificates/course/:courseId/availableCertificateTemplates\")\r\n .param(\":courseId\", courseId)\r\n .service()).then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.getAvailableCertificateTemplatesForBusinessUnit = function (businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/certificates/businessUnit/availableCertificateTemplates?businessUnitId=:businessUnitId\")\r\n .param(\":businessUnitId\", businessUnitId ? businessUnitId : \"\")\r\n .service()).then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.getCoursesForCertificateTemplate = function (certificateId) {\r\n return this.$http.get(this.url.base(\"/api/certificates/:id/courses\")\r\n .param(\":id\", certificateId)\r\n .service()).then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.getLearningPathCertificateTemplates = function (learningPathId) {\r\n return this.$http.get(this.url.base(\"/api/certificates/learningPath/:learningPathId\")\r\n .param(\":learningPathId\", learningPathId)\r\n .service()).then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.getAvailableCertificateTemplatesForLearningPath = function (learningPathId) {\r\n return this.$http.get(this.url.base(\"/api/certificates/learningPath/:learningPathId/availableCertificateTemplates\")\r\n .param(\":learningPathId\", learningPathId)\r\n .service()).then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.updateCertificateTemplatesForLearningPath = function (learningPathId, certificateTemplates) {\r\n return this.$http.put(this.url.base(\"/api/certificates/learningPath/:learningPathId/updateCertificateTemplates\")\r\n .param(\":learningPathId\", learningPathId)\r\n .service(), certificateTemplates)\r\n .then(function (result) { return result.data; });\r\n };\r\n CertificateService.prototype.sendEmailWithCertificate = function (rewardUuid, message, subject, email) {\r\n return this.$http.post(this.url.service(\"/api/certificates/sendEmails\"), { rewardUuid: rewardUuid, message: message, subject: subject, email: email })\r\n .then(function (result) { return result.data; });\r\n };\r\n CertificateService.NAME = \"certificates.CertificateService\";\r\n CertificateService.$inject = [\r\n \"$http\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME,\r\n \"Upload\"\r\n ];\r\n return CertificateService;\r\n})();\r\nexports.CertificateService = CertificateService;\r\n},{\"../utils/UrlService\":528}],46:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar CertificateTemplatesRouter_1 = require(\"../urls/CertificateTemplatesRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar CertificateService_1 = require(\"./CertificateService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar CheckBusinessUnitId_1 = require(\"../utils/CheckBusinessUnitId\");\r\nvar ReferenceUtils_1 = require(\"../reference/ReferenceUtils\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar CertificatesController = (function () {\r\n function CertificatesController($http, $routeParams, $location, url, certificateTemplatesRouter, authManager, permissionsApi, bundleService, securityService, certificateApi, authService, referenceUtils, businessUnitsService, commonFilterService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.url = url;\r\n this.certificateTemplatesRouter = certificateTemplatesRouter;\r\n this.authManager = authManager;\r\n this.permissionsApi = permissionsApi;\r\n this.bundleService = bundleService;\r\n this.securityService = securityService;\r\n this.certificateApi = certificateApi;\r\n this.authService = authService;\r\n this.referenceUtils = referenceUtils;\r\n this.businessUnitsService = businessUnitsService;\r\n this.commonFilterService = commonFilterService;\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.viewAnyLearningObject || systemPermissions.viewCertificateTemplates; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(\"administration_certificateTemplates\");\r\n PageHeaderHelper_1.PageHeader.set().header(this.getPageHeaderName()).update();\r\n this.certificatesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/certificates\").service()));\r\n this.certificatesGridModel.filter.searchString = \"\";\r\n this.certificatesGridModel.filter.splitParam = false;\r\n this.permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n PageHeaderHelper_1.PageHeader.set().addActionLinkIf(p.manageAnyLearningObject || p.manageCertificateTemplates, '+ New', _this.getCertificateEditUrl(0))\r\n .preserveHeader()\r\n .update();\r\n });\r\n this.bundleService.getSystemBundle()\r\n .then(function (b) {\r\n _this.systemBundle = b;\r\n })\r\n .catch(function () {\r\n _this.systemBundle = { id: 1 };\r\n });\r\n authService.getCurrentUser().then(function (user) {\r\n _this.currentUser = user;\r\n });\r\n this.businessUnitsService.getBusinessUnitsDeactivateForSelector()\r\n .then(function (result) { return _this.businessUnits = result; });\r\n }\r\n CertificatesController.prototype.getCertificateEditUrl = function (id) {\r\n return this.certificateTemplatesRouter.editUrl(id);\r\n };\r\n CertificatesController.prototype.isEditAllowed = function (entity) {\r\n return (this.systemPermissions.manageAnyLearningObject || this.systemPermissions.manageCertificateTemplates)\r\n && this.getEntityIsActiveProperty(entity)\r\n && (!entity.hasOwnProperty(CertificatesController.BUSINESS_UNIT_ID_PROPERTY) ||\r\n this.authManager.getCurrentUser() && (this.authManager.getCurrentUser().allBusinessUnits\r\n || this.authManager.getCurrentUser().businessUnits.indexOf(entity[CertificatesController.BUSINESS_UNIT_ID_PROPERTY]) != -1));\r\n };\r\n CertificatesController.prototype.getEntityIsActiveProperty = function (entity) {\r\n return entity.isActive;\r\n };\r\n CertificatesController.prototype.activateEntity = function (index, certificate) {\r\n var _this = this;\r\n this.certificateApi.setActiveCertificateTemplate(certificate.id, true).then(function (result) {\r\n _this.certificatesGridModel.entries[index] = result;\r\n });\r\n };\r\n CertificatesController.prototype.getPageHeaderName = function () {\r\n return \"Certificate Templates\";\r\n };\r\n CertificatesController.prototype.getActiveLinkState = function (entity) {\r\n return this.getEntityIsActiveProperty(entity) ? \"Yes\" : \"No\";\r\n };\r\n CertificatesController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n CertificatesController.prototype.hasUserSameBusinessUnits = function (businessUnitId) {\r\n if (businessUnitId == null && this.currentUser.businessUnits != null) {\r\n return false;\r\n }\r\n return CheckBusinessUnitId_1.CheckBusinessUnitId.hasUserSameBusinessUnits(this.currentUser.businessUnits, businessUnitId);\r\n };\r\n CertificatesController.prototype.getBusinessUnitById = function (businessUnitId) {\r\n var result = null;\r\n if (businessUnitId != null) {\r\n result = this.businessUnits.filter(function (bu) { return bu.id == businessUnitId; })[0].name;\r\n }\r\n return result;\r\n };\r\n CertificatesController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(CertificatesController.NAME, this.searchInput);\r\n this.certificatesGridModel.filter.searchString = this.searchInput;\r\n this.certificatesGridModel.loadCurrentPage();\r\n };\r\n CertificatesController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(CertificatesController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.certificatesGridModel.filter.searchString = this.searchInput;\r\n this.certificatesGridModel.loadCurrentPage();\r\n }\r\n };\r\n CertificatesController.NAME = \"certificates.CertificatesController\";\r\n CertificatesController.BUSINESS_UNIT_ID_PROPERTY = \"businessUnitId\";\r\n CertificatesController.entityIdProperty = \"id\";\r\n CertificatesController.entityNameProperty = \"name\";\r\n CertificatesController.entityVersionProperty = \"version\";\r\n CertificatesController.entityIsActiveProperty = \"isActive\";\r\n CertificatesController.$inject = [\r\n \"$http\",\r\n \"$routeParams\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n CertificateTemplatesRouter_1.CertificateTemplatesRouter.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n BundleService_1.BundleService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CertificateService_1.CertificateService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n ReferenceUtils_1.ReferenceUtils.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME\r\n ];\r\n return CertificatesController;\r\n})();\r\nexports.CertificatesController = CertificatesController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../bundles/BundleService\":36,\"../businessUnits/BusinessUnitsService\":44,\"../common/CommonFilterService\":49,\"../reference/ReferenceUtils\":410,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CertificateTemplatesRouter\":465,\"../utils/CheckBusinessUnitId\":508,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./CertificateService\":45}],47:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar CertificateService_1 = require(\"./CertificateService\");\r\nvar CertificateTemplatesRouter_1 = require(\"../urls/CertificateTemplatesRouter\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CertificatesCreateEditController = (function () {\r\n function CertificatesCreateEditController($rootScope, $scope, $routeParams, $location, $timeout, $uploader, url, permissionsApi, authService, securityService, certificateTemplatesRouter, certificateApi) {\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$timeout = $timeout;\r\n this.$uploader = $uploader;\r\n this.url = url;\r\n this.permissionsApi = permissionsApi;\r\n this.authService = authService;\r\n this.securityService = securityService;\r\n this.certificateTemplatesRouter = certificateTemplatesRouter;\r\n this.certificateApi = certificateApi;\r\n this.MAX_CERTIFICATE_VALIDITY_PERIOD = 1000000;\r\n this.certificateTemplate = { name: null, fileContentId: null };\r\n this.disableSaveButton = false;\r\n this.errorsMap = new Map();\r\n this.certificateContent = \"\";\r\n this.certificateCourses = [];\r\n this.isPreviewHidden = false;\r\n this.businessUnitSelected = false;\r\n this.hasAllBusinessUnits = false;\r\n this.redirected = false;\r\n this.dragoverEventHandler = function (e) {\r\n e.preventDefault();\r\n var elem = document.elementFromPoint(e.clientX, e.clientY);\r\n var dropCertificate = document.getElementById(\"dropCertificate\");\r\n var dropCertificateNote = document.getElementById(\"dropCertificateNote\");\r\n e.dataTransfer.dropEffect = 'none';\r\n if (dropCertificate == elem || dropCertificateNote == elem) {\r\n e.dataTransfer.dropEffect = 'copy';\r\n }\r\n };\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.manageAnyLearningObject || systemPermissions.manageCertificateTemplates; });\r\n var certificateId = this.$routeParams[CertificateTemplatesRouter_1.CertificateTemplatesRouter.CERTIFICATE_ID_PARAM];\r\n var hasCertificateId = !isNaN(certificateId);\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(\"administration_certificateTemplates\");\r\n if (hasCertificateId) {\r\n this.certificateApi.getCertificateTemplate(certificateId).then(function (result) {\r\n _this.certificateTemplate = result;\r\n _this.certificateFileTitle = result.fileTitle;\r\n _this.getCertificateCourses();\r\n if (!result.id) {\r\n INotifier_1.notifier.error(\"Certificate template not found\");\r\n _this.redirectToBack();\r\n return;\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set().header(result.name).update();\r\n }\r\n _this.businessUnitSelected = true;\r\n });\r\n }\r\n else {\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n });\r\n PageHeaderHelper_1.PageHeader.set().header(\"New Certificate Template\").update();\r\n }\r\n document.body.addEventListener('dragover', this.dragoverEventHandler);\r\n $scope.$on(\"$destroy\", function () {\r\n document.body.removeEventListener('dragover', _this.dragoverEventHandler);\r\n });\r\n }\r\n CertificatesCreateEditController.prototype.redirectToBack = function () {\r\n this.redirected = true;\r\n this.$location.url(this.certificateTemplatesRouter.indexUrl());\r\n };\r\n CertificatesCreateEditController.prototype.saveCertificateTemplate = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n if (this.newCertificateTemplateFile) {\r\n this.certificateTemplate.fileContentId = null;\r\n this.certificateTemplate.fileTitle = this.newCertificateTemplateFile.name;\r\n }\r\n var call = this.certificateTemplate.id\r\n ? this.certificateApi.updateCertificateTemplate(this.certificateTemplate.id, this.certificateTemplate)\r\n : this.certificateApi.createCertificateTemplate(this.certificateTemplate);\r\n call.then(function (certificateTemplateId) {\r\n if (_this.newCertificateTemplateFile) {\r\n _this.certificateApi.uploadCertificateTemplate(certificateTemplateId, _this.newCertificateTemplateFile);\r\n }\r\n _this.redirectToBack();\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.name.duplicate\") {\r\n INotifier_1.notifier.error(\"Certificate template name must be unique\");\r\n }\r\n _this.disableSaveButton = false;\r\n });\r\n };\r\n CertificatesCreateEditController.prototype.deactivateEntity = function () {\r\n var _this = this;\r\n this.certificateApi.setActiveCertificateTemplate(this.certificateTemplate.id, false).then(function (result) {\r\n _this.redirectToBack();\r\n });\r\n };\r\n CertificatesCreateEditController.prototype.entityValid = function () {\r\n return this.hasFile() && this.hasName();\r\n };\r\n CertificatesCreateEditController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.businessUnitSelected = false;\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n };\r\n CertificatesCreateEditController.prototype.buildErrorMessage = function (title) {\r\n return \"Please specify a value for the field \\\"%1\\\"\".replace(\"%1\", title);\r\n };\r\n CertificatesCreateEditController.prototype.hasName = function () {\r\n if (!this.certificateTemplate.name) {\r\n this.errorsMap.set(\"name\", this.buildErrorMessage(\"name\"));\r\n return false;\r\n }\r\n return true;\r\n };\r\n CertificatesCreateEditController.prototype.hasFile = function () {\r\n if (!this.certificateFileTitle) {\r\n this.errorsMap.set(\"file\", this.buildErrorMessage(\"file\"));\r\n return false;\r\n }\r\n return true;\r\n };\r\n CertificatesCreateEditController.prototype.removeCertificate = function () {\r\n this.newCertificateTemplateFile = null;\r\n this.certificateFileTitle = null;\r\n this.certificateTemplate.fileContentId = null;\r\n this.certificateContent = null;\r\n };\r\n CertificatesCreateEditController.prototype.attachFile = function ($file) {\r\n if (this.newCertificateTemplateFile && !$file.$error)\r\n this.certificateFileTitle = this.newCertificateTemplateFile.name;\r\n };\r\n CertificatesCreateEditController.prototype.getParameters = function () {\r\n return {\r\n courseTitle: \"Biology\",\r\n userName: \"John Smith\",\r\n format: 'png',\r\n certificateTemplateId: this.certificateTemplate.id\r\n };\r\n };\r\n CertificatesCreateEditController.prototype.showCertificatePreview = function () {\r\n if (this.isPreviewHidden) {\r\n this.isPreviewHidden = false;\r\n }\r\n else {\r\n this.getCertificatePreview();\r\n }\r\n };\r\n CertificatesCreateEditController.prototype.getCertificatePreview = function () {\r\n var _this = this;\r\n var parameters = this.getParameters();\r\n var reportType = 'CERTIFICATE_PREVIEW';\r\n this.certificateApi.downloadCertificate(parameters, reportType)\r\n .then(function (result) { return _this.certificateContent = \"\"; });\r\n };\r\n CertificatesCreateEditController.prototype.hideCertificatePreview = function () {\r\n this.isPreviewHidden = true;\r\n };\r\n CertificatesCreateEditController.prototype.getCertificateCourses = function () {\r\n var _this = this;\r\n this.certificateApi.getCoursesForCertificateTemplate(this.certificateTemplate.id).then(function (courses) {\r\n courses.forEach(function (course) {\r\n _this.certificateCourses.push(course);\r\n });\r\n });\r\n };\r\n CertificatesCreateEditController.prototype.checkNameFieldLength = function () {\r\n if (this.certificateTemplate.name.length > 255) {\r\n this.disableSaveButton = true;\r\n }\r\n else {\r\n this.disableSaveButton = false;\r\n }\r\n };\r\n CertificatesCreateEditController.NAME = \"certificates.CertificatesCreateEditController\";\r\n CertificatesCreateEditController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$timeout\",\r\n PermissionsService_1.PermissionsService.NAME,\r\n \"Upload\",\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CertificateTemplatesRouter_1.CertificateTemplatesRouter.NAME,\r\n CertificateService_1.CertificateService.NAME\r\n ];\r\n return CertificatesCreateEditController;\r\n})();\r\nexports.CertificatesCreateEditController = CertificatesCreateEditController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CertificateTemplatesRouter\":465,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./CertificateService\":45}],48:[function(require,module,exports){\n(function (CertificateTemplateType) {\r\n CertificateTemplateType[CertificateTemplateType[\"AUTO\"] = 0] = \"AUTO\";\r\n CertificateTemplateType[CertificateTemplateType[\"MANUAL\"] = 1] = \"MANUAL\";\r\n})(exports.CertificateTemplateType || (exports.CertificateTemplateType = {}));\r\nvar CertificateTemplateType = exports.CertificateTemplateType;\r\n},{}],49:[function(require,module,exports){\nvar Storage_1 = require(\"../infrastructure/Storage\");\r\nvar MaterialType_1 = require(\"../materials/models/MaterialType\");\r\nvar SectionProgressStatus_1 = require(\"../courses/models/SectionProgressStatus\");\r\nvar SectionPassingType_1 = require(\"../courses/models/SectionPassingType\");\r\nvar QuizType_1 = require(\"../quizzes/models/QuizType\");\r\nvar CommonFilterService = (function () {\r\n function CommonFilterService(storage) {\r\n this.storage = storage;\r\n }\r\n CommonFilterService.prototype.saveSearchInput = function (pageName, inputValue) {\r\n var pageStorage = this.storage.get(pageName);\r\n if (!pageStorage) {\r\n pageStorage = {};\r\n }\r\n pageStorage['searchInput'] = inputValue;\r\n this.storage.put(pageName, pageStorage);\r\n };\r\n CommonFilterService.prototype.getSearchInput = function (pageName) {\r\n var pageStorage = this.storage.get(pageName);\r\n if (!pageStorage || !pageStorage['searchInput']) {\r\n return '';\r\n }\r\n return pageStorage['searchInput'];\r\n };\r\n CommonFilterService.prototype.clearSearchInput = function (pageName) {\r\n var pageStorage = this.storage.get(pageName);\r\n if (!pageStorage) {\r\n pageStorage = {};\r\n }\r\n pageStorage['searchInput'] = '';\r\n this.storage.put(pageName, pageStorage);\r\n };\r\n CommonFilterService.prototype.saveFilterValue = function (pageName, filter) {\r\n var pageStorage = this.storage.get(pageName);\r\n if (!pageStorage) {\r\n pageStorage = {};\r\n }\r\n if (!('filter' in pageStorage)) {\r\n pageStorage['filter'] = {};\r\n }\r\n !filter.value ? delete pageStorage['filter'][filter.id]\r\n : pageStorage['filter'][filter.id] = filter.value;\r\n this.storage.put(pageName, pageStorage);\r\n };\r\n CommonFilterService.prototype.clearFilterValues = function (pageName) {\r\n var pageStorage = this.storage.get(pageName);\r\n if (!pageStorage) {\r\n pageStorage = {};\r\n }\r\n pageStorage['filter'] = {};\r\n this.storage.put(pageName, pageStorage);\r\n };\r\n CommonFilterService.prototype.getFilterValues = function (pageName) {\r\n var pageStorage = this.storage.get(pageName);\r\n if (!pageStorage || !('filter' in pageStorage)) {\r\n return {};\r\n }\r\n return pageStorage['filter'];\r\n };\r\n CommonFilterService.prototype.saveTopStatus = function (pageName, topStatus) {\r\n var pageStorage = this.storage.get(pageName);\r\n if (!pageStorage) {\r\n pageStorage = {};\r\n }\r\n pageStorage['topStatus'] = topStatus;\r\n this.storage.put(pageName, pageStorage);\r\n };\r\n CommonFilterService.prototype.getTopStatus = function (pageName) {\r\n var pageStorage = this.storage.get(pageName);\r\n if (!pageStorage || !pageStorage['topStatus']) {\r\n return '';\r\n }\r\n return pageStorage['topStatus'];\r\n };\r\n CommonFilterService.prototype.openSearchInput = function () {\r\n $(\"#filter__open-search\").removeClass(\"close\");\r\n $(\"#filter__open-search\").addClass(\"open\");\r\n if (window.innerWidth < 325) {\r\n $(\"#filter__search\").animate({ width: \"0px\", opacity: \"0\", padding: \"0\" }, 200);\r\n $(\"#filter__open-search\").animate({ width: '145px', border: \"2px\", marginLeft: '0' }, 200);\r\n $(\"#filter__open-search input\").animate({ width: '125px', paddingLeft: '30px', paddingRight: '35px' }, 200);\r\n $(\"#filter__open-search .glyphicon.vhs-image.svg-search\").animate({ opacity: '1' }, 200);\r\n $(\"#filter__open-search #close-search-filter\").animate({ opacity: '1' }, 200);\r\n $(\".navbar-brand\").css({ visibility: 'hidden' });\r\n }\r\n else if (window.innerWidth < 768) {\r\n $(\"#filter__search\").animate({ width: \"0px\", opacity: \"0\", padding: \"0\" }, 200);\r\n $(\"#filter__open-search\").animate({ width: '190px', border: \"2px\", marginLeft: '0' }, 200);\r\n $(\"#filter__open-search input\").animate({ width: '170px', paddingLeft: '30px', paddingRight: '35px' }, 200);\r\n $(\"#filter__open-search .glyphicon.vhs-image.svg-search\").animate({ opacity: '1' }, 200);\r\n $(\"#filter__open-search #close-search-filter\").animate({ opacity: '1' }, 200);\r\n $(\".navbar-brand\").css({ visibility: 'hidden' });\r\n }\r\n else if (window.innerWidth < 992) {\r\n $(\"#filter__search\").animate({ width: \"0px\", opacity: \"0\", padding: \"0\" }, 200);\r\n $(\"#filter__open-search\").animate({ width: '250', border: \"2px\", marginLeft: '0' }, 200);\r\n $(\"#filter__open-search input\").animate({ width: '210px', paddingLeft: '30px', paddingRight: '35px' }, 200);\r\n $(\"#filter__open-search .glyphicon.vhs-image.svg-search\").animate({ opacity: '1' }, 200);\r\n $(\"#filter__open-search #close-search-filter\").animate({ opacity: '1' }, 200);\r\n }\r\n else {\r\n $(\"#filter__search\").animate({ width: \"0px\", opacity: \"0\", padding: \"0\" }, 200);\r\n $(\"#filter__open-search\").animate({ width: '220px', border: \"2px\", marginLeft: '0' }, 200);\r\n $(\"#filter__open-search input\").animate({ width: '200px', paddingLeft: '30px', paddingRight: '35px' }, 200);\r\n $(\"#filter__open-search .glyphicon.vhs-image.svg-search\").animate({ opacity: '1' }, 200);\r\n $(\"#filter__open-search #close-search-filter\").animate({ opacity: '1' }, 200);\r\n }\r\n };\r\n CommonFilterService.prototype.showFilterDialog = function (window) {\r\n var modal = $(\".filter-modal .modal-dialog\");\r\n modal.css('margin-right', 'auto');\r\n modal.css('margin-left', 'auto');\r\n };\r\n CommonFilterService.prototype.showNotificationsDialog = function (window) {\r\n var modal = $(\".notifications-modal .modal-dialog\");\r\n modal.css('margin-right', 'auto');\r\n modal.css('margin-left', 'auto');\r\n };\r\n CommonFilterService.prototype.closeSearchInput = function (pageName, window) {\r\n this.clearSearchInput(pageName);\r\n $(\"#filter__open-search\").removeClass(\"open\");\r\n $(\"#filter__open-search\").addClass(\"close\");\r\n $(\"#filter__open-search .glyphicon.vhs-image.svg-search\").animate({ opacity: '0' }, 200);\r\n $(\"#filter__open-search\").animate({ width: '0', border: \"0px\" }, 200);\r\n $(\"#filter__open-search input\").animate({ width: '0', paddingLeft: '0', paddingRight: '0' }, 200);\r\n $(\"#filter__open-search #close-search-filter\").animate({ opacity: '0' }, 200);\r\n if (window.innerWidth <= 991) {\r\n $(\"#filter__search\").animate({ width: \"42px\", opacity: \"1\", paddingLeft: \"0\", paddingRight: \"0\" }, 200);\r\n $(\".navbar-brand\").css({ visibility: 'visible' });\r\n }\r\n else {\r\n $(\"#filter__search\").animate({ width: \"109px\", opacity: \"1\", paddingLeft: \"15px\", paddingRight: \"15px\" }, 200);\r\n }\r\n };\r\n CommonFilterService.prototype.applyGeneralFilter = function (gridModel) {\r\n $(\"#filterModal\").modal(\"hide\");\r\n var subjectElements = $(\".active\").filter('[id^=\"subjects\"]').toArray();\r\n var subjectIds = [];\r\n if (subjectElements.length > 0) {\r\n subjectElements.forEach(function (element) {\r\n subjectIds.push(element.id.substring(element.id.indexOf(\"_\") + 1));\r\n });\r\n }\r\n gridModel.filter.subjectId = subjectIds;\r\n var languageElements = $(\".active\").filter('[id^=\"languages\"]').toArray();\r\n var languageIds = [];\r\n if (languageElements.length > 0) {\r\n languageElements.forEach(function (element) {\r\n languageIds.push(element.id.substring(element.id.indexOf(\"_\") + 1));\r\n });\r\n }\r\n gridModel.filter.languageId = languageIds;\r\n var typeElements = $(\".active\").filter('[id^=\"types\"]').toArray();\r\n var typeIds = [];\r\n if (typeElements.length > 0) {\r\n typeElements.forEach(function (element) {\r\n typeIds.push(element.id.substring(element.id.indexOf(\"_\") + 1));\r\n });\r\n gridModel.filter.typeId = typeIds;\r\n }\r\n var showExpiredElements = $(\"#show-expired-checkbox\");\r\n if (showExpiredElements != undefined && showExpiredElements.length > 0) {\r\n gridModel.filter.showExpired = showExpiredElements.toArray()[0].checked;\r\n }\r\n gridModel.loadCurrentPage();\r\n };\r\n CommonFilterService.prototype.clearFilter = function (pageName, gridModel) {\r\n this.clearFilterValues(pageName);\r\n $(\"#filterModal .vhs-filter-table__list-subject > li.active\").removeClass(\"active\");\r\n $(\"#filterModal .vhs-filter-table__list-type > li.active\").removeClass(\"active\");\r\n $(\"#filterModal .vhs-filter-table__list-language > li.active\").removeClass(\"active\");\r\n $(\"#filterModal\").modal(\"hide\");\r\n gridModel.filter.subjectId = null;\r\n if (!(gridModel.filter.typeId == QuizType_1.QuizType.QUIZ || gridModel.filter.typeId == QuizType_1.QuizType.SURVEY || gridModel.filter.typeId == QuizType_1.QuizType.FLASHCARD))\r\n gridModel.filter.typeId = null;\r\n gridModel.filter.languageId = null;\r\n gridModel.filter.showExpired = false;\r\n gridModel.loadPage(0);\r\n };\r\n CommonFilterService.prototype.updateGeneralFilter = function (type, referenceObject, pageName) {\r\n var element = $('#' + type + '_' + referenceObject.id);\r\n var isActiveFilter = element.hasClass('active');\r\n var filter = {\r\n id: type + '_' + referenceObject.id,\r\n value: !isActiveFilter\r\n };\r\n this.saveFilterValue(pageName, filter);\r\n isActiveFilter ? element.removeClass('active')\r\n : element.addClass('active');\r\n return isActiveFilter ? -1 : 1;\r\n };\r\n CommonFilterService.prototype.applyStorageFilter = function (storageFilterValues, gridModel) {\r\n var countActiveFilter = 0;\r\n var subjectIds = [];\r\n var typeIds = [];\r\n var languageIds = [];\r\n for (var filterId in storageFilterValues) {\r\n if (storageFilterValues.hasOwnProperty(filterId) && storageFilterValues[filterId]) {\r\n if (filterId.indexOf('subjects') !== -1) {\r\n subjectIds.push(filterId.substring(filterId.indexOf(\"_\") + 1));\r\n }\r\n if (filterId.indexOf('types') !== -1) {\r\n typeIds.push(filterId.substring(filterId.indexOf(\"_\") + 1));\r\n }\r\n if (filterId.indexOf('languages') !== -1) {\r\n languageIds.push(filterId.substring(filterId.indexOf(\"_\") + 1));\r\n }\r\n countActiveFilter++;\r\n }\r\n }\r\n gridModel.filter.languageId = languageIds;\r\n gridModel.filter.typeId = typeIds;\r\n gridModel.filter.subjectId = subjectIds;\r\n return countActiveFilter;\r\n };\r\n CommonFilterService.prototype.applyMaterialTopType = function (status, grid) {\r\n switch (status) {\r\n case 'ALL':\r\n grid.filter.fileType = null;\r\n break;\r\n case 'AUDIO':\r\n grid.filter.fileType = MaterialType_1.MaterialType.AUDIO;\r\n break;\r\n case 'VIDEO':\r\n grid.filter.fileType = MaterialType_1.MaterialType.VIDEO;\r\n break;\r\n case 'PHOTO':\r\n grid.filter.fileType = MaterialType_1.MaterialType.PHOTO;\r\n break;\r\n case 'LINK':\r\n grid.filter.fileType = MaterialType_1.MaterialType.LINK;\r\n break;\r\n case 'DOCUMENTS':\r\n grid.filter.fileType = MaterialType_1.MaterialType.DOCUMENTS;\r\n break;\r\n default:\r\n grid.filter.fileType = null;\r\n }\r\n };\r\n CommonFilterService.prototype.calculateCourseProgress = function (courseSectionProgress) {\r\n var result = new Map();\r\n var sectionProgressBySectionId = new Map();\r\n for (var _i = 0, _a = courseSectionProgress.individualSectionProgress; _i < _a.length; _i++) {\r\n var sectionProgress = _a[_i];\r\n sectionProgressBySectionId.set(sectionProgress.sectionId, sectionProgress);\r\n }\r\n for (var _b = 0, _c = courseSectionProgress.sectionInHierarchyExtended; _b < _c.length; _b++) {\r\n var section = _c[_b];\r\n var sectionProgress = sectionProgressBySectionId.get(section.section.id);\r\n section.section.status = sectionProgress ? sectionProgress.status : null;\r\n }\r\n var shownStatuses = [SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED], SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]];\r\n var courseSectionsWithProgress = courseSectionProgress.sectionInHierarchyExtended.filter(function (s) { return s.section.isActive\r\n || (!s.section.isActive && sectionProgressBySectionId.has(s.section.id)\r\n && shownStatuses.indexOf(sectionProgressBySectionId.get(s.section.id).status) >= 0); });\r\n var countOfMandatoryCompleted = 0;\r\n var countOfMandatory = 0;\r\n var countOfElectiveCompleted = 0;\r\n var countOfOptional = 0;\r\n var countOfOptionalCompleted = 0;\r\n for (var _d = 0; _d < courseSectionsWithProgress.length; _d++) {\r\n var section = courseSectionsWithProgress[_d];\r\n if (!section.section.parentId && section.section.sectionPassingType == SectionPassingType_1.SectionPassingType[SectionPassingType_1.SectionPassingType.MANDATORY]) {\r\n if (section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED] ||\r\n section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]) {\r\n countOfMandatoryCompleted++;\r\n }\r\n countOfMandatory++;\r\n }\r\n if ((!section.section.parentId && section.section.sectionPassingType == SectionPassingType_1.SectionPassingType[SectionPassingType_1.SectionPassingType.ELECTIVE])\r\n && (section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED] ||\r\n section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED])) {\r\n countOfElectiveCompleted++;\r\n }\r\n if (!section.section.parentId && section.section.sectionPassingType == SectionPassingType_1.SectionPassingType[SectionPassingType_1.SectionPassingType.OPTIONAL]) {\r\n if (section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED] ||\r\n section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]) {\r\n countOfOptionalCompleted++;\r\n }\r\n countOfOptional++;\r\n }\r\n }\r\n result.set('countOfMandatoryCompleted', countOfMandatoryCompleted);\r\n result.set('countOfMandatory', countOfMandatory);\r\n result.set('countOfElectiveCompleted', countOfElectiveCompleted);\r\n result.set('countOfOptional', countOfOptional);\r\n result.set('countOfOptionalCompleted', countOfOptionalCompleted);\r\n return result;\r\n };\r\n CommonFilterService.NAME = \"common.FilterService\";\r\n CommonFilterService.$inject = [\r\n Storage_1.Storages.SESSION_NAME\r\n ];\r\n return CommonFilterService;\r\n})();\r\nexports.CommonFilterService = CommonFilterService;\r\n},{\"../courses/models/SectionPassingType\":226,\"../courses/models/SectionProgressStatus\":227,\"../infrastructure/Storage\":295,\"../materials/models/MaterialType\":347,\"../quizzes/models/QuizType\":403}],50:[function(require,module,exports){\nvar CourseProgressStatus_1 = require(\"../courses/models/CourseProgressStatus\");\r\nvar CommonHomeService = (function () {\r\n function CommonHomeService($window) {\r\n this.$window = $window;\r\n this.slidingStarted = false;\r\n this.slickParameters = {\r\n autoplay: false,\r\n infinite: false,\r\n dots: false,\r\n variableWidth: true,\r\n slidesToShow: 2,\r\n slidesToScroll: 1,\r\n arrows: true,\r\n swipe: false,\r\n responsive: [\r\n {\r\n breakpoint: 991,\r\n settings: {\r\n slidesToShow: 1,\r\n swipe: true,\r\n swipeToSlide: true,\r\n }\r\n },\r\n {\r\n breakpoint: 575,\r\n settings: {\r\n slidesToShow: 1,\r\n swipe: true,\r\n swipeToSlide: true,\r\n }\r\n }\r\n ]\r\n };\r\n }\r\n CommonHomeService.prototype.getCourseStatus = function (course) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n return 'COMPLETED';\r\n }\r\n else if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.FAILED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.STARTED]) {\r\n return 'IN_PROGRESS';\r\n }\r\n else if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED]) {\r\n return 'NOT_STARTED';\r\n }\r\n else {\r\n return 'NOT_AVAILABLE';\r\n }\r\n };\r\n CommonHomeService.prototype.decodeCourseProgressStatus = function (status, isLearner) {\r\n var result;\r\n switch (status) {\r\n case \"NOT_AVAILABLE\": {\r\n result = \"Not available\";\r\n break;\r\n }\r\n case \"NOT_STARTED\": {\r\n result = \"New\";\r\n break;\r\n }\r\n case \"STARTED\": {\r\n result = \"In progress\";\r\n break;\r\n }\r\n case \"FAILED\": {\r\n result = \"Failed\";\r\n break;\r\n }\r\n case \"COMPLETED\": {\r\n result = \"Completed\";\r\n break;\r\n }\r\n case \"EXPIRED\": {\r\n result = \"Expired\";\r\n break;\r\n }\r\n case \"RESET\": {\r\n result = isLearner ? \"New\" : \"Permissions revoked\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n CommonHomeService.prototype.initializeHelperMethodsForSlick = function (learningPathEntries, openInProgressCard) {\r\n var _this = this;\r\n if ($(window).width() >= 992) {\r\n $('.lp__plans-items .slick-next').click(function () {\r\n var _this = this;\r\n if (!this.slidingStarted) {\r\n this.slidingStarted = true;\r\n $('.slick-prev:not(.slick-disabled)').closest('.lp__plans').find('.lp__plans-decor_prev').removeClass(\"disabled\");\r\n $('.slick-next.slick-disabled').closest('.lp__plans').find('.lp__plans-decor_next').addClass(\"disabled\");\r\n var currentCardNumber = $(this).closest('.lp__plans-items').find('.lp__plan.lp__plan_big').attr('data-target');\r\n $(this).closest('.lp__plans-items').find('.lp__plan').removeClass(\"lp__plan_big\");\r\n currentCardNumber = parseInt(currentCardNumber) + 1;\r\n setTimeout(function () { return $(_this).closest('.lp__plans-items').slick('slickGoTo', currentCardNumber - 1); }, 500);\r\n $(this).closest('.lp__plans-items').find(\"#lp__plan-\" + currentCardNumber).addClass(\"lp__plan_big\");\r\n setTimeout(function () { return _this.slidingStarted = false; }, 800);\r\n }\r\n });\r\n $('.lp__plans-items .slick-prev').click(function () {\r\n var _this = this;\r\n if (!this.slidingStarted) {\r\n this.slidingStarted = true;\r\n $('.slick-next:not(.slick-disabled)').closest('.lp__plans').find('.lp__plans-decor_next').removeClass(\"disabled\");\r\n $('.slick-prev.slick-disabled').closest('.lp__plans').find('.lp__plans-decor_prev').addClass(\"disabled\");\r\n var currentCardNumber = $(this).closest('.lp__plans-items').find('.lp__plan.lp__plan_big').attr('data-target');\r\n $(this).closest('.lp__plans-items').find('.lp__plan').removeClass(\"lp__plan_big\");\r\n currentCardNumber = parseInt(currentCardNumber) - 1;\r\n setTimeout(function () { return $(_this).closest('.lp__plans-items').slick('slickGoTo', currentCardNumber - 1); }, 500);\r\n $(this).closest('.lp__plans-items').find(\"#lp__plan-\" + currentCardNumber).addClass(\"lp__plan_big\");\r\n setTimeout(function () { return _this.slidingStarted = false; }, 1000);\r\n }\r\n });\r\n }\r\n if (openInProgressCard) {\r\n this.$window.addEventListener(\"resize\", function () { return _this.initSlick(learningPathEntries); });\r\n }\r\n else {\r\n this.$window.addEventListener(\"resize\", function () { return _this.initSlickWithFirstSlide(learningPathEntries); });\r\n }\r\n };\r\n CommonHomeService.prototype.initSlick = function (learningPathEntries) {\r\n if ($(window).width() >= 992) {\r\n for (var _i = 0; _i < learningPathEntries.length; _i++) {\r\n var lp = learningPathEntries[_i];\r\n var startCourse = 1;\r\n if (lp.dependCourses && lp.dependCourses.length > 0) {\r\n for (var i = 0; i < lp.dependCourses.length; i++) {\r\n var course = lp.dependCourses[i];\r\n if (this.getCourseStatus(course) === \"IN_PROGRESS\"\r\n || this.getCourseStatus(course) === \"NOT_STARTED\") {\r\n startCourse = i + 1;\r\n break;\r\n }\r\n }\r\n }\r\n $(\"#lp__category-\" + lp.id).find(\".lp__plan\").removeClass(\"lp__plan_big\");\r\n $(\"#lp__category-\" + lp.id + \" #lp__plan-\" + startCourse).addClass(\"lp__plan_big\");\r\n $(\"#lp__category-\" + lp.id + \" .lp__plans-items\").slick('slickGoTo', 0);\r\n if (startCourse > 5) {\r\n $('.slick-prev:not(.slick-disabled)').closest('.lp__plans').find('.lp__plans-decor_prev').removeClass(\"disabled\");\r\n }\r\n else {\r\n $('.slick-prev:not(.slick-disabled)').closest('.lp__plans').find('.lp__plans-decor_prev').removeClass(\"disabled\");\r\n $('.slick-next.slick-disabled').closest('.lp__plans').find('.lp__plans-decor_next').addClass(\"disabled\");\r\n }\r\n }\r\n }\r\n if ($(window).width() < 991) {\r\n for (var _a = 0; _a < learningPathEntries.length; _a++) {\r\n var lp = learningPathEntries[_a];\r\n $(\"#lp__category-\" + lp.id).find(\".lp__plan\").removeClass(\"lp__plan_big\");\r\n }\r\n }\r\n };\r\n CommonHomeService.prototype.initSlickWithFirstSlide = function (learningPathEntries) {\r\n if ($(window).width() >= 992) {\r\n for (var _i = 0; _i < learningPathEntries.length; _i++) {\r\n var lp = learningPathEntries[_i];\r\n $(\"#lp__category-\" + lp.id).find(\".lp__plan\").removeClass(\"lp__plan_big\");\r\n $(\"#lp__category-\" + lp.id + \" #lp__plan-1\").addClass(\"lp__plan_big\");\r\n $(\"#lp__category-\" + lp.id + \" .lp__plans-items\").slick('slickGoTo', 0);\r\n $('.slick-prev:not(.slick-disabled)').closest('.lp__plans').find('.lp__plans-decor_prev').removeClass(\"disabled\");\r\n $('.slick-next.slick-disabled').closest('.lp__plans').find('.lp__plans-decor_next').addClass(\"disabled\");\r\n }\r\n }\r\n if ($(window).width() < 991) {\r\n for (var _a = 0; _a < learningPathEntries.length; _a++) {\r\n var lp = learningPathEntries[_a];\r\n $(\"#lp__category-\" + lp.id).find(\".lp__plan\").removeClass(\"lp__plan_big\");\r\n }\r\n }\r\n };\r\n CommonHomeService.prototype.initializeSlick = function (learningPathsGridModel, openInProgressCard) {\r\n var _this = this;\r\n var lpItemsElement = $(\".lp__plans-items\");\r\n if (lpItemsElement.not('.slick-initialized').length > 0) {\r\n lpItemsElement.not('.slick-initialized').slick(this.slickParameters);\r\n }\r\n if (openInProgressCard) {\r\n this.initSlick(learningPathsGridModel.entries);\r\n }\r\n else {\r\n if ($(window).width() >= 992) {\r\n for (var _i = 0, _a = learningPathsGridModel.entries; _i < _a.length; _i++) {\r\n var lp = _a[_i];\r\n this.openCard(1, lp.id, false);\r\n }\r\n }\r\n }\r\n this.initializeHelperMethodsForSlick(learningPathsGridModel.entries, openInProgressCard);\r\n setTimeout(function () { return _this.updateTabindex(); }, 500);\r\n return true;\r\n };\r\n CommonHomeService.prototype.showAllLP = function (learningPathId) {\r\n var _this = this;\r\n var lpBlockElement = $(\"#lp__category-\" + learningPathId);\r\n this.toggleBtnActiveClass(learningPathId);\r\n lpBlockElement.addClass(\"lp__category_open\");\r\n lpBlockElement.find('.lp__plans-decor').addClass(\"disabled\");\r\n if ($(window).width() >= 992) {\r\n lpBlockElement.find('.lp__plan').addClass(\"lp__plan_big\");\r\n }\r\n if ($(window).width() < 575) {\r\n lpBlockElement.find('.lp__plan[data-target=' + 1 + ']').addClass(\"lp__plan_big\");\r\n }\r\n setTimeout(function () { return _this.updateTabindex(); }, 500);\r\n };\r\n CommonHomeService.prototype.hideAllLP = function (learningPathId) {\r\n var _this = this;\r\n var lpBlockElement = $(\"#lp__category-\" + learningPathId);\r\n this.toggleBtnActiveClass(learningPathId);\r\n lpBlockElement.find('.lp__plan').removeClass(\"lp__plan_big\");\r\n lpBlockElement.removeClass(\"lp__category_open\");\r\n lpBlockElement.find('.lp__plans-decor_next').removeClass(\"disabled\");\r\n if ($(window).width() >= 992) {\r\n lpBlockElement.find('.lp__plan[data-target=' + 1 + ']').addClass(\"lp__plan_big\");\r\n }\r\n if ($(window).width() < 575) {\r\n lpBlockElement.find('.lp__plan[data-target=' + 1 + ']').removeClass(\"lp__plan_big\");\r\n }\r\n setTimeout(function () { return _this.updateTabindex(); }, 500);\r\n };\r\n CommonHomeService.prototype.updateTabindex = function () {\r\n if ($(\".lp__plan-link\") && $(\".lp__plan-link\").length > 0) {\r\n var lpPlans = $(\".lp__plan-link\");\r\n for (var i = 0; i < lpPlans.length; i++) {\r\n lpPlans[i].setAttribute(\"tabindex\", \"0\");\r\n }\r\n }\r\n };\r\n CommonHomeService.prototype.toggleBtnActiveClass = function (learningPathId) {\r\n var element = $(\"#lp__category-\" + learningPathId);\r\n element.find('.lp__action').find('.btn').toggleClass(\"active\");\r\n element.find('.lp__plans-items').slick('slickGoTo', 0);\r\n };\r\n CommonHomeService.prototype.openCard = function (indexPlanLp, learningPathId, isShowAllCards) {\r\n var learningPathElement = $(\"#lp__category-\" + learningPathId);\r\n var cardElement = $(\"#lp__category-\" + learningPathId + \" #lp__plan-\" + indexPlanLp);\r\n if (!isShowAllCards) {\r\n var currentCardNumber = learningPathElement.find('.lp__plan.lp__plan_big').attr('data-target');\r\n setTimeout(function () {\r\n learningPathElement.find(\".lp__plans-items\").slick('slickGoTo', indexPlanLp - 1);\r\n $('.slick-prev:not(.slick-disabled)').closest('.lp__plans').find('.lp__plans-decor_prev').removeClass(\"disabled\");\r\n $('.slick-next.slick-disabled').closest('.lp__plans').find('.lp__plans-decor_next').addClass(\"disabled\");\r\n }, indexPlanLp - currentCardNumber > 1 ? 300 : 0);\r\n learningPathElement.find('.lp__plan').removeClass(\"lp__plan_big\");\r\n cardElement.addClass(\"lp__plan_big\");\r\n learningPathElement.find('.lp__action .btn').addClass(\"active\");\r\n learningPathElement.find('.lp__action .btn_close').removeClass(\"active\");\r\n }\r\n };\r\n CommonHomeService.prototype.getCourseDatesString = function (course) {\r\n var courseDates = new Map();\r\n if (course.endDate) {\r\n courseDates.set(\"endDate\", new Date(course.endDate).toLocaleDateString());\r\n }\r\n if (!course.endDate || course.startDate > Date.now()) {\r\n courseDates.set(\"startDate\", new Date(course.startDate).toLocaleDateString());\r\n }\r\n return courseDates;\r\n };\r\n CommonHomeService.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (rec.right + popup.clientWidth >= document.body.clientWidth) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n CommonHomeService.NAME = \"common.CommonHomeService\";\r\n CommonHomeService.$inject = [\r\n \"$window\"\r\n ];\r\n return CommonHomeService;\r\n})();\r\nexports.CommonHomeService = CommonHomeService;\r\n},{\"../courses/models/CourseProgressStatus\":222}],51:[function(require,module,exports){\nvar CommonNavigation_1 = require(\"../common/CommonNavigation\");\r\nvar CommonService_1 = require(\"./CommonService\");\r\nvar CommonFilterService_1 = require(\"./CommonFilterService\");\r\nvar CommonHomeService_1 = require(\"./CommonHomeService\");\r\nexports.CommonModule = angular\r\n .module(\"common\", [])\r\n .service(CommonService_1.CommonService.NAME, CommonService_1.CommonService)\r\n .service(CommonHomeService_1.CommonHomeService.NAME, CommonHomeService_1.CommonHomeService)\r\n .service(CommonFilterService_1.CommonFilterService.NAME, CommonFilterService_1.CommonFilterService)\r\n .service(CommonNavigation_1.CommonNavigation.NAME, CommonNavigation_1.CommonNavigation);\r\n},{\"../common/CommonNavigation\":52,\"./CommonFilterService\":49,\"./CommonHomeService\":50,\"./CommonService\":53}],52:[function(require,module,exports){\nvar CommonRouter_1 = require(\"./../urls/CommonRouter\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar Event_1 = require(\"./Event\");\r\nvar CommonNavigation = (function () {\r\n function CommonNavigation($location, $rootScope, $timeout, commonRouter) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$rootScope = $rootScope;\r\n this.$timeout = $timeout;\r\n this.commonRouter = commonRouter;\r\n this.fullScreenRegExp = new RegExp('[\\?&](fullScreen)((\\=false)|(\\=true))?$');\r\n $rootScope.$on('$locationChangeStart', function (event, newUrl, oldUrl) {\r\n $('body').removeClass('modal-open');\r\n if (!event.defaultPrevented) {\r\n if (!_this.preventNavigationFromUrl || !_this.equalsIgnoreFullScreen(oldUrl, _this.preventNavigationFromUrl)) {\r\n _this.allowNavigation();\r\n }\r\n else if (_this.preventNavigationFromUrl) {\r\n if (!_this.equalsIgnoreFullScreen(newUrl, _this.preventNavigationFromUrl)) {\r\n event.preventDefault();\r\n _this.$timeout(function () {\r\n INotifier_1.notifier.warning(\"You can't leave this page unless you complete or cancel the quiz (survey or flashcards)\");\r\n });\r\n }\r\n }\r\n else {\r\n _this.allowNavigation();\r\n }\r\n }\r\n });\r\n $(window).bind(\"beforeunload\", function (event) {\r\n _this.$rootScope.$broadcast(Event_1.Event.BEFORE_NAVIGATION_UNLOAD);\r\n if (_this.preventNavigationFromUrl && _this.preventNavigationFromUrl === window.location.href) {\r\n return \"You can't leave this page unless you complete or cancel the quiz (survey or flashcards)\";\r\n }\r\n });\r\n }\r\n CommonNavigation.prototype.allowNavigation = function () {\r\n this.preventNavigationFromUrl = null;\r\n };\r\n CommonNavigation.prototype.preventNavigation = function () {\r\n var _url = window.location.href;\r\n this.preventNavigationFromUrl = _url;\r\n };\r\n CommonNavigation.prototype.redirectToNotFound = function () {\r\n this.allowNavigation();\r\n this.$location.url(this.commonRouter.notFoundUrl());\r\n };\r\n CommonNavigation.prototype.equalsIgnoreFullScreen = function (firstUrl, secondUrl) {\r\n if (firstUrl == null || firstUrl == undefined || secondUrl == null || secondUrl == undefined) {\r\n return firstUrl === secondUrl;\r\n }\r\n var modifiedFirstUrl = firstUrl.replace(this.fullScreenRegExp, \"\");\r\n var modifiedSecondUrl = secondUrl.replace(this.fullScreenRegExp, \"\");\r\n return modifiedFirstUrl === modifiedSecondUrl;\r\n };\r\n CommonNavigation.NAME = \"common.CommonNavigation\";\r\n CommonNavigation.$inject = [\r\n \"$location\",\r\n \"$rootScope\",\r\n \"$timeout\",\r\n CommonRouter_1.CommonRouter.NAME\r\n ];\r\n return CommonNavigation;\r\n})();\r\nexports.CommonNavigation = CommonNavigation;\r\n},{\"./../INotifier\":5,\"./../urls/CommonRouter\":466,\"./Event\":54}],53:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar CommonService = (function () {\r\n function CommonService($http, $sce, $location, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.$location = $location;\r\n this.url = url;\r\n }\r\n CommonService.prototype.saveParticipationForm = function (objectId, objectType, version, participationForm) {\r\n return this.$http.put(this.url.base(\"/api/common/participationForm?objectId=:objectId&objectType=:objectType&version=:version\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectType\", objectType)\r\n .param(\":version\", version)\r\n .service(), participationForm)\r\n .then(function (result) { return result.data; });\r\n };\r\n CommonService.prototype.getParticipationForm = function (objectId, objectType) {\r\n return this.$http.get(this.url.base(\"/api/common/participationForm?objectId=:objectId&objectType=:objectType\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectType\", objectType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CommonService.prototype.getLearningPathParticipationForms = function (learningPathId) {\r\n return this.$http.get(this.url.base(\"/api/common/learningPathParticipationForms?learningPathId=:learningPathId\")\r\n .param(\":learningPathId\", learningPathId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CommonService.prototype.getParticipationFormSpecified = function (objectId, objectType) {\r\n return this.$http.get(this.url.service(\"/api/common/participationFormSpecified?objectId=\" + objectId + \"&objectType=\" + objectType))\r\n .then(function (result) { return result.data; });\r\n };\r\n CommonService.prototype.updateURLParameter = function (url, param, paramVal) {\r\n var newAdditionalURL = \"\";\r\n var tempArray = url.split(\"?\");\r\n var baseURL = tempArray[0];\r\n var additionalURL = tempArray[1];\r\n var temp = \"\";\r\n if (additionalURL) {\r\n tempArray = additionalURL.split(\"&\");\r\n for (var i = 0; i < tempArray.length; i++) {\r\n if (tempArray[i].split('=')[0] != param) {\r\n newAdditionalURL += temp + tempArray[i];\r\n temp = \"&\";\r\n }\r\n }\r\n }\r\n var rows_txt = temp + \"\" + param + \"=\" + paramVal;\r\n return baseURL + \"?\" + newAdditionalURL + rows_txt;\r\n };\r\n CommonService.prototype.checkVersionUpdateIsRequired = function () {\r\n return this.getVersion().then(function (result) {\r\n return result.buildVersion != AppProperties_1.AppProperties.buildVersion;\r\n });\r\n };\r\n CommonService.prototype.getVersion = function () {\r\n var headers = {\r\n 'Cache-Control': 'no-cache, no-store',\r\n 'If-Modified-Since': 'Sat, 1 Jan 2000 00:00:00 GMT'\r\n };\r\n var url = this.getClientRoot() + \"version.json\";\r\n var config = {\r\n headers: headers,\r\n withoutAuthorization: true\r\n };\r\n return this.$http.get(url, config).then(function (response) { return response.data; });\r\n };\r\n CommonService.prototype.getClientRoot = function () {\r\n var absUrl = this.$location.absUrl();\r\n var lastSlashIndex = this.$location.absUrl().match(/.+#/)[0].slice(0, -1).lastIndexOf(\"/\");\r\n return absUrl.slice(0, lastSlashIndex + 1);\r\n };\r\n CommonService.NAME = \"common.CommonService\";\r\n CommonService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return CommonService;\r\n})();\r\nexports.CommonService = CommonService;\r\n},{\"../utils/AppProperties\":\"AppProperties\",\"../utils/UrlService\":528}],54:[function(require,module,exports){\nvar Event = (function () {\r\n function Event() {\r\n }\r\n Event.BEFORE_NAVIGATION_UNLOAD = \"common:beforeUnload\";\r\n return Event;\r\n})();\r\nexports.Event = Event;\r\n},{}],55:[function(require,module,exports){\nvar ExpirationCache = (function () {\r\n function ExpirationCache(timeout) {\r\n if (timeout === void 0) { timeout = 60000; }\r\n this.store = new Map();\r\n this.timeout = timeout;\r\n }\r\n ExpirationCache.prototype.get = function (key) {\r\n key = this.removeURLParameter(key, \"no-cache\");\r\n return this.store.get(key);\r\n };\r\n ExpirationCache.prototype.put = function (key, val) {\r\n var _this = this;\r\n key = this.removeURLParameter(key, \"no-cache\");\r\n this.store.set(key, val);\r\n setTimeout(function () {\r\n _this.remove(key);\r\n }, this.timeout);\r\n };\r\n ExpirationCache.prototype.remove = function (key) {\r\n key = this.removeURLParameter(key, \"no-cache\");\r\n this.store.delete(key);\r\n };\r\n ExpirationCache.prototype.removeAll = function () {\r\n this.store = new Map();\r\n };\r\n ExpirationCache.prototype.removeAllByKey = function (key) {\r\n var _this = this;\r\n var keys = [];\r\n this.store.forEach(function (keyStore) {\r\n if (keyStore.indexOf(key) != -1) {\r\n keys.push(keyStore);\r\n }\r\n });\r\n keys.forEach(function (key) {\r\n _this.store.delete(key);\r\n });\r\n };\r\n ExpirationCache.prototype.delete = function () {\r\n };\r\n ExpirationCache.prototype.removeURLParameter = function (url, parameter) {\r\n var urlparts = url.split('?');\r\n if (urlparts.length >= 2) {\r\n var prefix = encodeURIComponent(parameter) + '=';\r\n var pars = urlparts[1].split(/[&;]/g);\r\n for (var i = pars.length; i-- > 0;) {\r\n if (pars[i].lastIndexOf(prefix, 0) !== -1) {\r\n pars.splice(i, 1);\r\n }\r\n }\r\n return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : '');\r\n }\r\n return url;\r\n };\r\n return ExpirationCache;\r\n})();\r\nexports.ExpirationCache = ExpirationCache;\r\n},{}],56:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PoliciesRouter_1 = require(\"../urls/PoliciesRouter\");\r\nvar Storage_1 = require(\"../infrastructure/Storage\");\r\nvar AcceptCookiesController = (function () {\r\n function AcceptCookiesController($scope, $location, $window, policiesRouter, localStorage) {\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.policiesRouter = policiesRouter;\r\n this.localStorage = localStorage;\r\n this.acceptCookiesExists = false;\r\n this.$scope.vm = this;\r\n var acceptCookies = this.localStorage.get(AcceptCookiesController.ACCEPT_COOKIES);\r\n if (acceptCookies) {\r\n this.acceptCookiesExists = true;\r\n }\r\n }\r\n AcceptCookiesController.prototype.redirectToCookiePolicy = function () {\r\n var baseUrl = this.$window.location.href.split(\"#\")[0], url = baseUrl + \"#\" + this.policiesRouter.cookiePolicyUrl();\r\n this.$window.open(url);\r\n };\r\n AcceptCookiesController.prototype.accept = function () {\r\n var acceptCookies = {};\r\n acceptCookies.createdAt = moment.utc().format();\r\n acceptCookies.domain = this.$window.location.hostname;\r\n this.localStorage.put(AcceptCookiesController.ACCEPT_COOKIES, acceptCookies);\r\n this.acceptCookiesExists = true;\r\n };\r\n AcceptCookiesController.ACCEPT_COOKIES = \"accept_cookies\";\r\n AcceptCookiesController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n \"$window\",\r\n PoliciesRouter_1.PoliciesRouter.NAME,\r\n Storage_1.Storages.LOCAL_NAME\r\n ];\r\n return AcceptCookiesController;\r\n})();\r\nfunction AcceptCookiesDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.scope = true;\r\n directive.controller = AcceptCookiesController;\r\n directive.templateUrl = url.template(\"components/accept-cookies.html\");\r\n return directive;\r\n}\r\nexports.AcceptCookiesDirectiveFactory = AcceptCookiesDirectiveFactory;\r\nAcceptCookiesDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../infrastructure/Storage\":295,\"../urls/PoliciesRouter\":485,\"./../utils/UrlService\":528}],57:[function(require,module,exports){\nfunction AutoFocusDirectiveFactory($timeout) {\r\n function link($scope, element) {\r\n $timeout(function () {\r\n element[0].focus();\r\n });\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link\r\n };\r\n}\r\nexports.AutoFocusDirectiveFactory = AutoFocusDirectiveFactory;\r\nAutoFocusDirectiveFactory.$inject = [\r\n \"$timeout\"\r\n];\r\n},{}],58:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AvatarController = (function () {\r\n function AvatarController($scope, $rootScope, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.userService = userService;\r\n this.hasPreviewUrlCanceled = false;\r\n this.defaultLogo = \"themes/default/img/demo/default_profile.png\";\r\n $scope.avatarVm = this;\r\n if (!!this.$scope.defaultLogo) {\r\n this.defaultLogo = this.$scope.defaultLogo;\r\n }\r\n this.loadUser();\r\n this.listenerAvatarImage();\r\n $scope.$watch('avatarVm.$scope.userId', function (value) {\r\n if (value) {\r\n _this.loadUser();\r\n }\r\n });\r\n $scope.$watch('avatarVm.preview', function (value) {\r\n if (_this.preview) {\r\n _this.$rootScope.$broadcast('avatar.update.img', _this.preview);\r\n }\r\n });\r\n $scope.$watch('avatarVm.croppedImage', function (value) {\r\n if (_this.croppedImage) {\r\n _this.$rootScope.$broadcast('avatar.update.img', _this.croppedImage);\r\n }\r\n });\r\n }\r\n AvatarController.prototype.listenerAvatarImage = function () {\r\n var _this = this;\r\n this.$rootScope.$on('avatar.update.img', function (event, previewUrl) {\r\n _this.preview = null;\r\n _this.userProfile.previewUrl = previewUrl;\r\n _this.$scope.avatarErrors = {};\r\n });\r\n };\r\n AvatarController.prototype.loadUser = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile()\r\n .then(function (user) {\r\n if (!_this.$scope.userId) {\r\n }\r\n else if (user.id != _this.$scope.userId) {\r\n _this.userService.get(_this.$scope.userId)\r\n .then(function (user) {\r\n _this.userProfile = user;\r\n });\r\n }\r\n else {\r\n _this.userProfile = user;\r\n }\r\n });\r\n };\r\n AvatarController.prototype.resetPreview = function () {\r\n this.preview = undefined;\r\n this.croppedImage = undefined;\r\n this.$scope.avatarErrors = {};\r\n if (this.userProfile.previewUrl) {\r\n this.userProfile.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n this.$rootScope.$broadcast('avatar.reset.img', undefined, undefined, true);\r\n };\r\n AvatarController.prototype.restorePreviewUrl = function () {\r\n this.preview = undefined;\r\n this.previewUrl = this.userProfile.previewUrl;\r\n this.croppedImage = undefined;\r\n this.hasPreviewUrlCanceled = false;\r\n };\r\n AvatarController.prototype.uploadFile = function () {\r\n $('#previewField').click();\r\n };\r\n AvatarController.prototype.showCropperModal = function () {\r\n $(\"#imageCropperModal\").modal(\"show\");\r\n };\r\n AvatarController.prototype.showCropperModalAfterLoad = function () {\r\n var _this = this;\r\n setTimeout(function () {\r\n _this.preview != undefined || _this.previewUrl != undefined\r\n ? _this.showCropperModal()\r\n : _this.showCropperModalAfterLoad();\r\n }, 100);\r\n };\r\n AvatarController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n UserService_1.UserService.NAME\r\n ];\r\n return AvatarController;\r\n})();\r\nexports.AvatarController = AvatarController;\r\nfunction AvatarDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/avatar.html\");\r\n directive.link = link;\r\n directive.scope = {\r\n userId: \"=?vhsUserId\",\r\n isEdit: \"=?vhsEdit\",\r\n defaultLogo: \"=?vhsDefaultLogo\",\r\n avatarErrors: \"=?avatarErrors\"\r\n };\r\n directive.controller = AvatarController;\r\n return directive;\r\n}\r\nexports.AvatarDirectiveFactory = AvatarDirectiveFactory;\r\nAvatarDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../users/UserService\":499,\"../utils/UrlService\":528}],59:[function(require,module,exports){\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar BusinessUnitSelectorController = (function () {\r\n function BusinessUnitSelectorController($scope, authService, businessUnitsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.authService = authService;\r\n this.businessUnitsService = businessUnitsService;\r\n $scope.vm = this;\r\n this.selectorVisible = false;\r\n this.authService.getCurrentUser().then(function (u) {\r\n _this.selectorVisible = true;\r\n _this.allBusinessUnits = u.allBusinessUnits;\r\n var filter = null;\r\n if (!u.allBusinessUnits) {\r\n filter = \"id:in:\";\r\n if (u.businessUnits.length > 1) {\r\n for (var i = 0; i < u.businessUnits.length; i++) {\r\n if (i > 0) {\r\n filter += \",\";\r\n }\r\n filter += u.businessUnits[i];\r\n }\r\n }\r\n else if (u.businessUnits.length == 1) {\r\n _this.selectorVisible = false;\r\n _this.$scope.model[_this.$scope.modelProperty] = u.businessUnits[0];\r\n if (_this.$scope.onSelectorChange) {\r\n _this.$scope.onSelectorChange();\r\n }\r\n }\r\n else {\r\n filter += \"-1\";\r\n }\r\n }\r\n if (_this.selectorVisible) {\r\n _this.businessUnitsService.getBusinessUnitsForSelector()\r\n .then(function (result) {\r\n _this.referenceEntities = result;\r\n if (_this.referenceEntities.length == 1 && !_this.allBusinessUnits) {\r\n _this.selectorVisible = false;\r\n _this.$scope.model[_this.$scope.modelProperty] = _this.referenceEntities[0].id;\r\n if (_this.$scope.onSelectorChange) {\r\n _this.$scope.onSelectorChange();\r\n }\r\n }\r\n else {\r\n _this.$scope.onSelectorVisible();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n BusinessUnitSelectorController.$inject = [\r\n \"$scope\",\r\n AuthService_1.AuthService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME\r\n ];\r\n return BusinessUnitSelectorController;\r\n})();\r\nexports.BusinessUnitSelectorController = BusinessUnitSelectorController;\r\nfunction BusinessUnitSelectorDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = BusinessUnitSelectorController;\r\n directive.scope = {\r\n model: \"=vhsModel\",\r\n modelProperty: \"=vhsModelProperty\",\r\n disabled: \"=?vhsDisabled\",\r\n required: \"=?vhsRequired\",\r\n elementName: \"@?vhsElementName\",\r\n nullable: \"=?vhsNullable\",\r\n onSelectorChange: \"&vhsOnChange\",\r\n onSelectorVisible: \"&vhsOnSelectorVisible\",\r\n fromDropdown: \"=?vhsFromDropdown\",\r\n };\r\n directive.templateUrl = url.template(\"components/business-unit-selector.html\");\r\n directive.transclude = true;\r\n return directive;\r\n}\r\nexports.BusinessUnitSelectorDirectiveFactory = BusinessUnitSelectorDirectiveFactory;\r\nBusinessUnitSelectorDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../businessUnits/BusinessUnitsService\":44,\"./../auth/AuthService\":18,\"./../utils/UrlService\":528}],60:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar CertificateService_1 = require(\"../certificates/CertificateService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar CertificateTemplateType_1 = require(\"../certificates/models/CertificateTemplateType\");\r\nvar CertificatesEditableSelectorController = (function () {\r\n function CertificatesEditableSelectorController($scope, $timeout, certificateApi, permissionsApi, authService, securityService, certificateService, $uploader, url) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.certificateApi = certificateApi;\r\n this.permissionsApi = permissionsApi;\r\n this.authService = authService;\r\n this.securityService = securityService;\r\n this.certificateService = certificateService;\r\n this.$uploader = $uploader;\r\n this.url = url;\r\n this.MAX_CERTIFICATE_VALIDITY_PERIOD = 1000000;\r\n this.learningPath = {};\r\n this.businessUnitSelected = false;\r\n this.hasAllBusinessUnits = false;\r\n this.currentUserBusinessUnits = [];\r\n this.errorWindow = false;\r\n this.certificateTemplate = { name: null, fileContentId: null };\r\n this.errorsMap = new Map();\r\n this.certificateContent = \"\";\r\n this.isPreviewHidden = false;\r\n this.disableSaveButton = false;\r\n this.redirected = false;\r\n this.editingCertificate = false;\r\n this.availableCertificateTemplates = [];\r\n $scope.vm = this;\r\n this.setBusinessUnit();\r\n this.filterEducationItemCertificatesByBusinessUnit();\r\n this.permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user.businessUnits, _this.currentUserBusinessUnits);\r\n var isEdit = !!$scope.educationItemId;\r\n if (!isEdit) {\r\n _this.loadAvailableCertificateTemplates()\r\n .then(function () {\r\n _this.removeEducationItemCertsFromAvailableCerts();\r\n });\r\n }\r\n else {\r\n _this.loadAvailableCertificateTemplatesForEducationItem(_this.$scope.educationItemCertificates);\r\n }\r\n });\r\n this.editWindow = false;\r\n }\r\n CertificatesEditableSelectorController.prototype.setBusinessUnit = function () {\r\n this.certificateTemplate.businessUnitId = this.$scope.educationItemBusinessUnitId;\r\n };\r\n CertificatesEditableSelectorController.prototype.filterEducationItemCertificatesByBusinessUnit = function () {\r\n var _this = this;\r\n this.$scope.educationItemCertificates = this.$scope.educationItemCertificates\r\n .filter(function (c) { return c.businessUnitId == _this.$scope.educationItemBusinessUnitId || c.businessUnitId == null; });\r\n };\r\n CertificatesEditableSelectorController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.businessUnitSelected = false;\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n };\r\n CertificatesEditableSelectorController.prototype.containAutoCertificate = function (certificates) {\r\n var _this = this;\r\n var containsAuto = false;\r\n if (certificates.length == 0) {\r\n return containsAuto;\r\n }\r\n certificates.forEach(function (certificate) {\r\n if (_this.isAuto(certificate)) {\r\n containsAuto = true;\r\n }\r\n });\r\n return containsAuto;\r\n };\r\n CertificatesEditableSelectorController.prototype.isAuto = function (certificate) {\r\n if (certificate.type == null || certificate.type == CertificateTemplateType_1.CertificateTemplateType.MANUAL) {\r\n return false;\r\n }\r\n return (certificate.type == CertificateTemplateType_1.CertificateTemplateType.AUTO || certificate.type.toString() == \"AUTO\");\r\n };\r\n CertificatesEditableSelectorController.prototype.setAuto = function (certificate) {\r\n this.$scope.educationItemCertificates.forEach(function (c) {\r\n if (c.id != certificate.id) {\r\n c.type = CertificateTemplateType_1.CertificateTemplateType.MANUAL;\r\n }\r\n else {\r\n certificate.type = CertificateTemplateType_1.CertificateTemplateType.AUTO;\r\n }\r\n });\r\n };\r\n CertificatesEditableSelectorController.prototype.setManual = function (certificate) {\r\n this.$scope.educationItemCertificates.forEach(function (c) {\r\n if (c.id == certificate.id) {\r\n c.type = CertificateTemplateType_1.CertificateTemplateType.MANUAL;\r\n }\r\n });\r\n };\r\n CertificatesEditableSelectorController.prototype.changeType = function (certificate) {\r\n this.isAuto(certificate) ? this.setManual(certificate) : this.setAuto(certificate);\r\n };\r\n CertificatesEditableSelectorController.prototype.sortByName = function (certificates) {\r\n certificates.sort(function (a, b) {\r\n if (a.name >= b.name)\r\n return 1;\r\n else\r\n return -1;\r\n });\r\n };\r\n CertificatesEditableSelectorController.prototype.addCertificateToEducationItemCertificatesFromAvailableCertificates = function (chosenCertificateId) {\r\n this.removeEducationItemCertsFromAvailableCerts();\r\n if (this.chosenCertificateTemplate && this.chosenCertificateTemplate.name != \"\") {\r\n var newCertificate = {};\r\n this.availableCertificateTemplates.forEach(function (certificate) {\r\n if (certificate.id == chosenCertificateId) {\r\n angular.copy(certificate, newCertificate);\r\n }\r\n });\r\n newCertificate.type = this.containAutoCertificate(this.$scope.educationItemCertificates) ? CertificateTemplateType_1.CertificateTemplateType.MANUAL : CertificateTemplateType_1.CertificateTemplateType.AUTO;\r\n this.$scope.educationItemCertificates.push(newCertificate);\r\n this.removeCertFromAvailableCerts(newCertificate);\r\n this.chosenCertificateTemplate = null;\r\n }\r\n };\r\n CertificatesEditableSelectorController.prototype.addNewCertificateToEducationItemCertificates = function (chosenCertificateId) {\r\n var newCertificate = {};\r\n this.availableCertificateTemplates.forEach(function (certificate) {\r\n if (certificate.id == parseInt(chosenCertificateId)) {\r\n angular.copy(certificate, newCertificate);\r\n }\r\n });\r\n if (newCertificate.name) {\r\n if (this.$scope.educationItemId == null) {\r\n this.$scope.educationItemCertificates = this.$scope.educationItemCertificates.filter(function (certificate) { return certificate.id != newCertificate.id; });\r\n }\r\n newCertificate.type = this.containAutoCertificate(this.$scope.educationItemCertificates) ? CertificateTemplateType_1.CertificateTemplateType.MANUAL : CertificateTemplateType_1.CertificateTemplateType.AUTO;\r\n this.$scope.educationItemCertificates.push(newCertificate);\r\n }\r\n this.removeEducationItemCertsFromAvailableCerts();\r\n this.removeCertFromAvailableCerts(newCertificate);\r\n this.chosenCertificateTemplate = null;\r\n };\r\n CertificatesEditableSelectorController.prototype.removeEducationItemCertsFromAvailableCerts = function () {\r\n var _this = this;\r\n this.$scope.educationItemCertificates.forEach(function (c) {\r\n _this.availableCertificateTemplates = _this.availableCertificateTemplates.filter(function (ac) { return ac.id != c.id; });\r\n });\r\n };\r\n CertificatesEditableSelectorController.prototype.removeCertFromAvailableCerts = function (certificate) {\r\n this.availableCertificateTemplates = this.availableCertificateTemplates.filter(function (ac) { return ac.id != certificate.id; });\r\n };\r\n CertificatesEditableSelectorController.prototype.saveCertificateTemplate = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n if (this.newCertificateTemplateFile) {\r\n this.certificateTemplate.fileContentId = null;\r\n this.certificateTemplate.fileTitle = this.newCertificateTemplateFile.name;\r\n }\r\n var call = this.certificateTemplate.id\r\n ? this.certificateApi.updateCertificateTemplate(this.certificateTemplate.id, this.certificateTemplate)\r\n : this.certificateApi.createCertificateTemplate(this.certificateTemplate);\r\n call.then(function (certificateTemplateId) {\r\n if (_this.newCertificateTemplateFile) {\r\n _this.certificateApi.uploadCertificateTemplate(certificateTemplateId, _this.newCertificateTemplateFile);\r\n }\r\n _this.editWindow = false;\r\n if (_this.$scope.educationItemId == null) {\r\n _this.loadAvailableCertificateTemplates()\r\n .then(function () {\r\n if (certificateTemplateId) {\r\n _this.addNewCertificateToEducationItemCertificates(certificateTemplateId);\r\n }\r\n });\r\n }\r\n else {\r\n _this.loadAvailableCertificateTemplatesForEducationItem(_this.$scope.educationItemCertificates)\r\n .then(function () {\r\n if (certificateTemplateId) {\r\n _this.addNewCertificateToEducationItemCertificates(certificateTemplateId);\r\n }\r\n });\r\n }\r\n })\r\n .finally(function () {\r\n if (_this.$scope.educationItemId == null) {\r\n _this.loadAvailableCertificateTemplates();\r\n }\r\n else {\r\n _this.loadCertificates();\r\n }\r\n _this.disableSaveButton = false;\r\n _this.clearForm();\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.name.duplicate\") {\r\n INotifier_1.notifier.error(\"Certificate template name must be unique\");\r\n }\r\n });\r\n };\r\n CertificatesEditableSelectorController.prototype.loadCertificates = function () {\r\n var _this = this;\r\n if (this.$scope.educationItemType == \"Course\") {\r\n this.certificateService.getCourseCertificateTemplates(this.$scope.educationItemId).then(function (certificates) {\r\n certificates.forEach(function (certificate) {\r\n _this.$scope.educationItemCertificates.forEach(function (itemCertificate) {\r\n if (itemCertificate.id == certificate.certificateTemplateId) {\r\n itemCertificate.type = certificate.certificateTemplateType;\r\n itemCertificate.name = certificate.certificateTemplateName;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n if (this.$scope.educationItemType == \"Learning Path\") {\r\n this.certificateService.getLearningPathCertificateTemplates(this.$scope.educationItemId).then(function (certificates) {\r\n certificates.forEach(function (certificate) {\r\n _this.$scope.educationItemCertificates.forEach(function (itemCertificate) {\r\n if (itemCertificate.id == certificate.certificateTemplateId) {\r\n itemCertificate.type = certificate.certificateTemplateType;\r\n itemCertificate.name = certificate.certificateTemplateName;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n };\r\n CertificatesEditableSelectorController.prototype.loadAvailableCertificateTemplatesForEducationItem = function (educationItemCertificates) {\r\n var _this = this;\r\n if (this.$scope.educationItemType == \"Course\") {\r\n return this.certificateService.getAvailableCertificateTemplatesForCourse(this.$scope.educationItemId).then(function (certificates) {\r\n _this.availableCertificateTemplates = [];\r\n var isCertificateAddedToTheEducationItem = false;\r\n certificates.forEach(function (certificate) {\r\n if (educationItemCertificates.length == 0 && _this.$scope.educationItemCertificates.length > 0) {\r\n angular.copy(_this.$scope.educationItemCertificates, educationItemCertificates);\r\n }\r\n if (educationItemCertificates.length > 0) {\r\n educationItemCertificates.forEach(function (educationItemCertificate) {\r\n if (certificate.id == educationItemCertificate.id) {\r\n isCertificateAddedToTheEducationItem = true;\r\n if (certificate.name != educationItemCertificate.name) {\r\n educationItemCertificate.name = certificate.name;\r\n }\r\n }\r\n });\r\n }\r\n if (!isCertificateAddedToTheEducationItem) {\r\n _this.availableCertificateTemplates.push(certificate);\r\n }\r\n if (_this.editingCertificate) {\r\n _this.$scope.educationItemCertificates.push(certificate);\r\n }\r\n isCertificateAddedToTheEducationItem = false;\r\n });\r\n _this.sortByName(_this.availableCertificateTemplates);\r\n });\r\n }\r\n if (this.$scope.educationItemType == \"Learning Path\") {\r\n return this.certificateService.getAvailableCertificateTemplatesForLearningPath(this.$scope.educationItemId).then(function (certificates) {\r\n _this.availableCertificateTemplates = [];\r\n var isCertificateAddedToTheEducationItem = false;\r\n certificates.forEach(function (certificate) {\r\n if (educationItemCertificates.length == 0 && _this.$scope.educationItemCertificates.length > 0) {\r\n angular.copy(_this.$scope.educationItemCertificates, educationItemCertificates);\r\n }\r\n if (educationItemCertificates.length > 0) {\r\n educationItemCertificates.forEach(function (educationItemCertificate) {\r\n if (certificate.id == educationItemCertificate.id) {\r\n isCertificateAddedToTheEducationItem = true;\r\n if (certificate.name != educationItemCertificate.name) {\r\n educationItemCertificate.name = certificate.name;\r\n }\r\n }\r\n });\r\n }\r\n if (!isCertificateAddedToTheEducationItem) {\r\n _this.availableCertificateTemplates.push(certificate);\r\n }\r\n isCertificateAddedToTheEducationItem = false;\r\n });\r\n _this.sortByName(_this.availableCertificateTemplates);\r\n });\r\n }\r\n };\r\n CertificatesEditableSelectorController.prototype.loadAvailableCertificateTemplates = function () {\r\n var _this = this;\r\n return this.certificateService.getAvailableCertificateTemplatesForBusinessUnit(this.$scope.educationItemBusinessUnitId).then(function (certificates) {\r\n _this.availableCertificateTemplates = [];\r\n certificates.forEach(function (certificate) {\r\n if (_this.chosenCertificateId != certificate.id) {\r\n _this.availableCertificateTemplates.push(certificate);\r\n }\r\n else {\r\n _this.$scope.educationItemCertificates.forEach(function (c) {\r\n if (c.id == certificate.id) {\r\n angular.copy(certificate, c);\r\n }\r\n });\r\n }\r\n });\r\n _this.sortByName(_this.availableCertificateTemplates);\r\n });\r\n };\r\n CertificatesEditableSelectorController.prototype.attachFile = function ($file) {\r\n if (this.newCertificateTemplateFile && !$file.$error)\r\n this.certificateFileTitle = this.newCertificateTemplateFile.name;\r\n };\r\n CertificatesEditableSelectorController.prototype.removeCertificate = function () {\r\n this.newCertificateTemplateFile = null;\r\n this.certificateFileTitle = null;\r\n this.certificateTemplate.fileContentId = null;\r\n this.certificateContent = null;\r\n };\r\n CertificatesEditableSelectorController.prototype.removeCertificateFromEducationItem = function (certificate) {\r\n this.editWindow = false;\r\n this.$scope.educationItemCertificates = this.$scope.educationItemCertificates.filter(function (c) { return c.id != certificate.id; });\r\n this.availableCertificateTemplates.push(certificate);\r\n this.sortByName(this.availableCertificateTemplates);\r\n };\r\n CertificatesEditableSelectorController.prototype.buildErrorMessage = function (title) {\r\n return \"Please specify a value for the field \\\"%1\\\"\".replace(\"%1\", title);\r\n };\r\n CertificatesEditableSelectorController.prototype.hasName = function () {\r\n if (!this.certificateTemplate.name) {\r\n this.errorsMap.set(\"name\", this.buildErrorMessage(\"name\"));\r\n return false;\r\n }\r\n return true;\r\n };\r\n CertificatesEditableSelectorController.prototype.hasFile = function () {\r\n if (!this.certificateFileTitle) {\r\n this.errorsMap.set(\"file\", this.buildErrorMessage(\"file\"));\r\n return false;\r\n }\r\n return true;\r\n };\r\n CertificatesEditableSelectorController.prototype.clearForm = function () {\r\n this.editWindow = false;\r\n this.certificateFileTitle = null;\r\n this.certificateTemplate.id = null;\r\n this.certificateTemplate.businessUnitId = null;\r\n this.certificateTemplate.certificateValidityPeriod = null;\r\n this.certificateTemplate.name = null;\r\n this.hasAllBusinessUnits = false;\r\n this.businessUnitSelected = false;\r\n this.editingCertificate = false;\r\n };\r\n CertificatesEditableSelectorController.prototype.showCreateEditWindow = function (certificateId, certificateBUId) {\r\n var _this = this;\r\n this.chosenCertificateBUId = certificateBUId;\r\n this.chosenCertificateId = certificateId;\r\n var hasCertificateId = !isNaN(certificateId);\r\n if (hasCertificateId) {\r\n this.certificateApi.getCertificateTemplate(certificateId).then(function (result) {\r\n _this.certificateTemplate = result;\r\n _this.certificateFileTitle = result.fileTitle;\r\n if (!result.id) {\r\n INotifier_1.notifier.error(\"Certificate template not found\");\r\n return;\r\n }\r\n _this.businessUnitSelected = true;\r\n });\r\n }\r\n else {\r\n this.clearForm();\r\n this.setBusinessUnit();\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n });\r\n }\r\n this.editWindow = true;\r\n };\r\n CertificatesEditableSelectorController.prototype.editCertificate = function (certificateId, certificateBUId) {\r\n this.editingCertificate = true;\r\n this.showCreateEditWindow(certificateId, certificateBUId);\r\n };\r\n CertificatesEditableSelectorController.prototype.hideSaveEdit = function () {\r\n var _this = this;\r\n return (this.currentUserBusinessUnits.length != 0) && (!this.currentUserBusinessUnits.some(function (bu) { return bu == _this.chosenCertificateBUId; })) && this.editingCertificate;\r\n };\r\n CertificatesEditableSelectorController.$inject = [\r\n \"$scope\",\r\n \"$timeout\",\r\n CertificateService_1.CertificateService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CertificateService_1.CertificateService.NAME,\r\n \"Upload\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return CertificatesEditableSelectorController;\r\n})();\r\nexports.CertificatesEditableSelectorController = CertificatesEditableSelectorController;\r\nfunction CertificatesEditableSelectorDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = CertificatesEditableSelectorController;\r\n directive.scope = {\r\n educationItemId: \"=vhsEducationItemId\",\r\n educationItemBusinessUnitId: \"=vhsEducationItemBusinessUnitId\",\r\n educationItemType: \"=vhsEducationItemType\",\r\n educationItemCertificates: \"=vhsEducationItemCertificates\",\r\n currentUserBusinessUnits: \"=vhsCurrentUserBusinessUnits\",\r\n editable: \"=?vhsEditable\",\r\n style: \"=?vhsStyle\",\r\n onSelectorChange: \"&vhsOnChange\"\r\n };\r\n directive.templateUrl = url.template(\"components/certificates-editable-selector.html\");\r\n directive.transclude = true;\r\n return directive;\r\n}\r\nexports.CertificatesEditableSelectorDirectiveFactory = CertificatesEditableSelectorDirectiveFactory;\r\nCertificatesEditableSelectorDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../certificates/CertificateService\":45,\"../certificates/models/CertificateTemplateType\":48,\"../security/SecurityService\":420,\"./../security/PermissionsService\":418,\"./../utils/UrlService\":528}],61:[function(require,module,exports){\nvar AutofocusDirective_1 = require(\"./AutofocusDirective\");\r\nvar DateTimePickerDirective_1 = require(\"./DateTimePickerDirective\");\r\nvar GridConfigurationDirective_1 = require(\"./GridConfigurationDirective\");\r\nvar GridDirective_1 = require(\"./GridDirective\");\r\nvar GridEmptyDirective_1 = require(\"./GridEmptyDirective\");\r\nvar GridExternalConfiguration_1 = require(\"./GridExternalConfiguration\");\r\nvar GridPaginationDirective_1 = require(\"./GridPaginationDirective\");\r\nvar LoginDirective_1 = require(\"./LoginDirective\");\r\nvar MultipleCheckboxSelectorDirective_1 = require(\"./MultipleCheckboxSelectorDirective\");\r\nvar PageHeaderDirective_1 = require(\"./PageHeaderDirective\");\r\nvar VhsSelectAllDirective_1 = require(\"./VhsSelectAllDirective\");\r\nvar ReferenceCheckboxSelectorDirective_1 = require(\"./ReferenceCheckboxSelectorDirective\");\r\nvar ReferenceDropdownSelectorDirective_1 = require(\"./ReferenceDropdownSelectorDirective\");\r\nvar ReferenceDropdownEditableSelectorDirective_1 = require(\"./ReferenceDropdownEditableSelectorDirective\");\r\nvar ReferenceMultipleSelectorDirective_1 = require(\"./ReferenceMultipleSelectorDirective\");\r\nvar TooltipDirective_1 = require(\"./TooltipDirective\");\r\nvar VhsSearchDirective_1 = require(\"./VhsSearchDirective\");\r\nvar PersonalMenuDirective_1 = require(\"./PersonalMenuDirective\");\r\nvar AvatarDirective_1 = require(\"./AvatarDirective\");\r\nvar VhsVideoAudioDirective_1 = require(\"./VhsVideoAudioDirective\");\r\nvar VhsMaterialDirective_1 = require(\"./VhsMaterialDirective\");\r\nvar UsersAndGroupsSelectorDirective_1 = require(\"./UsersAndGroupsSelectorDirective\");\r\nvar SelectOptionsDisabledDirective_1 = require(\"./SelectOptionsDisabledDirective\");\r\nvar SelectPlaceholderDirective_1 = require(\"./SelectPlaceholderDirective\");\r\nvar UploadsStatusDirective_1 = require(\"./UploadsStatusDirective\");\r\nvar VhsThumbnailDirective_1 = require(\"./VhsThumbnailDirective\");\r\nvar VhsMaterialEditingDirective_1 = require(\"./VhsMaterialEditingDirective\");\r\nvar VhsCalendarFilterDirective_1 = require(\"./VhsCalendarFilterDirective\");\r\nvar VhsEmbeddedBundleDirective_1 = require(\"./richtext/VhsEmbeddedBundleDirective\");\r\nvar VhsEmbeddedMaterialDirective_1 = require(\"./VhsEmbeddedMaterialDirective\");\r\nvar VhsSelectMaterialDirective_1 = require(\"./richtext/VhsSelectMaterialDirective\");\r\nvar VhsSelectEmbeddedBundleDirective_1 = require(\"./richtext/VhsSelectEmbeddedBundleDirective\");\r\nvar VhsSelectSandboxDirective_1 = require(\"./richtext/VhsSelectSandboxDirective\");\r\nvar VhsSandboxDirective_1 = require(\"./richtext/VhsSandboxDirective\");\r\nvar RichTextEditorDirective_1 = require(\"./richtext/RichTextEditorDirective\");\r\nvar RichTextBindDirective_1 = require(\"./richtext/RichTextBindDirective\");\r\nvar VhsUserNoteDirective_1 = require(\"./richtext/VhsUserNoteDirective\");\r\nvar VhsDownloadBundleDirective_1 = require(\"./richtext/VhsDownloadBundleDirective\");\r\nvar LoadBundleFileDirective_1 = require(\"./LoadBundleFileDirective\");\r\nvar FullScreenDirective_1 = require(\"./FullScreenDirective\");\r\nvar PageTitleDirective_1 = require(\"./PageTitleDirective\");\r\nvar EntitiesSelect2SelectorDirective_1 = require(\"./EntitiesSelect2SelectorDirective\");\r\nvar BusinessUnitSelectorDirective_1 = require(\"./BusinessUnitSelectorDirective\");\r\nvar CertificatesEditableSelectorDirective_1 = require(\"./CertificatesEditableSelectorDirective\");\r\nvar VhsQuizImportExportDirective_1 = require(\"./VhsQuizImportExportDirective\");\r\nvar UploadArchiveInCourseEditDirective_1 = require(\"./UploadArchiveInCourseEditDirective\");\r\nvar RichTextContentLoadingSynchronizer_1 = require(\"./richtext/RichTextContentLoadingSynchronizer\");\r\nvar AuthCoreModule_1 = require(\"./../authcore/AuthCoreModule\");\r\nvar AuthModule_1 = require(\"./../auth/AuthModule\");\r\nvar SecurityModule_1 = require(\"./../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nvar InfrastructureModule_1 = require(\"./../infrastructure/InfrastructureModule\");\r\nvar MainModule_1 = require(\"./../main/MainModule\");\r\nvar MaterialsModule_1 = require(\"./../materials/MaterialsModule\");\r\nvar NewsModule_1 = require(\"./../news/NewsModule\");\r\nvar InfoModule_1 = require(\"./../info/InfoModule\");\r\nvar ReferenceModule_1 = require(\"./../reference/ReferenceModule\");\r\nvar StorageModule_1 = require(\"./../storage/StorageModule\");\r\nvar LogsModule_1 = require(\"./../logs/LogsModule\");\r\nvar PoliciesModule_1 = require(\"../policies/PoliciesModule\");\r\nvar MaxLengthFilter_1 = require(\"./MaxLengthFilter\");\r\nvar ExplanationsDirective_1 = require(\"./ExplanationsDirective\");\r\nvar DiscussionsDirective_1 = require(\"./DiscussionsDirective\");\r\nvar SessionRestoreDirective_1 = require(\"./SessionRestoreDirective\");\r\nvar VhsParticipationFormEditingDirective_1 = require(\"./VhsParticipationFormEditingDirective\");\r\nvar VhsParticipationFormFillingDirective_1 = require(\"./VhsParticipationFormFillingDirective\");\r\nvar VhsLearningPathTopTabsDirective_1 = require(\"./VhsLearningPathTopTabsDirective\");\r\nvar VhsLearningPathCoursesList_1 = require(\"./VhsLearningPathCoursesList\");\r\nvar VhsSelectLearningPathCoursesDirective_1 = require(\"./VhsSelectLearningPathCoursesDirective\");\r\nvar VhsQuizSurveyAnsweringDirective_1 = require(\"./VhsQuizSurveyAnsweringDirective\");\r\nvar ConfirmationDialogDirective_1 = require(\"./../components/dialog/ConfirmationDialogDirective\");\r\nvar InputConfirmationDialogDirective_1 = require(\"./../components/dialog/InputConfirmationDialogDirective\");\r\nvar NotificationConfirmationDialogDirective_1 = require(\"./../components/dialog/NotificationConfirmationDialogDirective\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar VhsQuizDetailsDirective_1 = require(\"./VhsQuizDetailsDirective\");\r\nvar VhsCourseViewTopTabs_1 = require(\"./VhsCourseViewTopTabs\");\r\nvar VhsCourseEditTopTabs_1 = require(\"./VhsCourseEditTopTabs\");\r\nvar VhsVILTDirective_1 = require(\"./VhsVILTDirective\");\r\nvar VhsImageCropperDirective_1 = require(\"./VhsImageCropperDirective\");\r\nvar VhsIndividualCourseProgressDirective_1 = require(\"./VhsIndividualCourseProgressDirective\");\r\nvar VhsIndividualCourseProgressCertificatesDirective_1 = require(\"./VhsIndividualCourseProgressCertificatesDirective\");\r\nvar VhsIndividualCourseProgressDetailsDirective_1 = require(\"./VhsIndividualCourseProgressDetailsDirective\");\r\nvar VhsIndividualParticipationInfoDirective_1 = require(\"./VhsIndividualParticipationInfoDirective\");\r\nvar VhsOverallProgressDirective_1 = require(\"./VhsOverallProgressDirective\");\r\nvar VhsLearningPathOverallProgressDirective_1 = require(\"./VhsLearningPathOverallProgressDirective\");\r\nvar VhsIndividualLearningPathProgressDirective_1 = require(\"./VhsIndividualLearningPathProgressDirective\");\r\nvar VhsIndividualLearningPathProgressCertificatesDirective_1 = require(\"./VhsIndividualLearningPathProgressCertificatesDirective\");\r\nvar VhsIndividualLearningPathProgressDetailsDirective_1 = require(\"./VhsIndividualLearningPathProgressDetailsDirective\");\r\nvar VhsIndividualLearningPathParticipationInfoDirective_1 = require(\"./VhsIndividualLearningPathParticipationInfoDirective\");\r\nvar VhsAudioResponderDirective_1 = require(\"./VhsAudioResponderDirective\");\r\nvar VhsRecordRtcDirective_1 = require(\"./VhsRecordRtcDirective\");\r\nvar SecondsToTimeFilter_1 = require(\"./SecondsToTimeFilter\");\r\nvar SkipToContentDirective_1 = require(\"./SkipToContentDirective\");\r\nvar VhsEditableTemplateDirective_1 = require(\"./VhsEditableTemplateDirective\");\r\nvar VhsLoadFromTemplateDirective_1 = require(\"./richtext/VhsLoadFromTemplateDirective\");\r\nvar VhsConvertTemplateDirective_1 = require(\"./richtext/VhsConvertTemplateDirective\");\r\nvar VhsAddBlockDirective_1 = require(\"./richtext/VhsAddBlockDirective\");\r\nvar VhsTemplateService_1 = require(\"./richtext/VhsTemplateService\");\r\nvar VhsTemplateMenuDirective_1 = require(\"./VhsTemplateMenuDirective\");\r\nvar VhsStickyDirective_1 = require(\"./VhsStickyDirective\");\r\nvar AcceptCookiesDirective_1 = require(\"./AcceptCookiesDirective\");\r\nvar VhsProductsListEditingDirective_1 = require(\"./VhsProductsListEditingDirective\");\r\nvar VhsLearningPathEditTopTabs_1 = require(\"./VhsLearningPathEditTopTabs\");\r\nvar VhsScaledAnswerQuestionDirective_1 = require(\"./VhsScaledAnswerQuestionDirective\");\r\nvar VhsCoursePublishDirective_1 = require(\"./VhsCoursePublishDirective\");\r\nvar VhsMaterialEditTopTabsDirective_1 = require(\"./VhsMaterialEditTopTabsDirective\");\r\nvar VhsCreditAssignmentDirective_1 = require(\"./VhsCreditAssignmentDirective\");\r\nvar VhsEditableUserCreditsDirective_1 = require(\"./VhsEditableUserCreditsDirective\");\r\nvar VhsVersionChecker_1 = require(\"./VhsVersionChecker\");\r\nvar VhsLearningSessionsTopTabs_1 = require(\"./VhsLearningSessionsTopTabs\");\r\nvar VhsILTDirective_1 = require(\"./VhsILTDirective\");\r\nvar VhsMeetingCreateEditDirective_1 = require(\"./VhsMeetingCreateEditDirective\");\r\nvar VhsWebinarCreateEditDirective_1 = require(\"./VhsWebinarCreateEditDirective\");\r\nvar QuizViewTopTabs_1 = require(\"./QuizViewTopTabs\");\r\nvar VhsPurchaseDirective_1 = require(\"./VhsPurchaseDirective\");\r\nvar VhsProductViewTopTabs_1 = require(\"./VhsProductViewTopTabs\");\r\nvar VhsProductItemDetails_1 = require(\"./VhsProductItemDetails\");\r\nvar VhsNotificationTemplateDirective_1 = require(\"./VhsNotificationTemplateDirective\");\r\nvar VhsNotificationTemplateEditDirective_1 = require(\"./VhsNotificationTemplateEditDirective\");\r\nvar VhsFillableFormDirective_1 = require(\"./VhsFillableFormDirective\");\r\nvar VhsSystemSettingsTopTabs_1 = require(\"./VhsSystemSettingsTopTabs\");\r\nvar VhsGroupEditTopTabs_1 = require(\"./VhsGroupEditTopTabs\");\r\nvar VhsLearningPathControlsDirective_1 = require(\"./VhsLearningPathControlsDirective\");\r\nvar VhsHomeMenuDirective_1 = require(\"./VhsHomeMenuDirective\");\r\nvar UserAvatarDirective_1 = require(\"./UserAvatarDirective\");\r\nvar VhsBrandingLogosEditing_1 = require(\"./branding/VhsBrandingLogosEditing\");\r\nvar VhsBrandingColorsEditing_1 = require(\"./branding/VhsBrandingColorsEditing\");\r\nvar VhsBrandingThemesEditing_1 = require(\"./branding/VhsBrandingThemesEditing\");\r\nvar VhsBrandingCssEditing_1 = require(\"./branding/VhsBrandingCssEditing\");\r\nvar FillableFormDialogDirective_1 = require(\"./dialog/FillableFormDialogDirective\");\r\nvar VhsSystemSettingsMenuItemsVisibilityDirective_1 = require(\"./VhsSystemSettingsMenuItemsVisibilityDirective\");\r\nvar VhsParticipantsDirective_1 = require(\"./VhsParticipantsDirective\");\r\nvar VhsTeamsCreateEditDirective_1 = require(\"./VhsTeamsCreateEditDirective\");\r\nvar VhsBrandingShareEditing_1 = require(\"./branding/VhsBrandingShareEditing\");\r\nvar VhsBadgeTemplateDirective_1 = require(\"./VhsBadgeTemplateDirective\");\r\nvar VhsBadgeTemplateEdit_1 = require(\"./VhsBadgeTemplateEdit\");\r\nvar VhsMaterialCheckpointsDirective_1 = require(\"./VhsMaterialCheckpointsDirective\");\r\nvar VhsAddTableDirective_1 = require(\"./richtext/VhsAddTableDirective\");\r\nvar AIContentGenerationDirective_1 = require(\"./richtext/AIContentGenerationDirective\");\r\nvar VhsReturnToOwnAccountDirective_1 = require(\"./VhsReturnToOwnAccountDirective\");\r\nvar VhsHotspotQuestionEditDirective_1 = require(\"./quizzes/VhsHotspotQuestionEditDirective\");\r\nvar VhsHotspotQuestionAnsweringDirective_1 = require(\"./quizzes/VhsHotspotQuestionAnsweringDirective\");\r\nvar VhsHotspotQuestionExplanationDirective_1 = require(\"./quizzes/VhsHotspotQuestionExplanationDirective\");\r\nvar VhsHelpBotDirective_1 = require(\"./VhsHelpBotDirective\");\r\nexports.ComponentsModule = angular\r\n .module(\"components\", [\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n AuthModule_1.AuthModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n MainModule_1.MainModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n InfrastructureModule_1.InfrastructureModule.name,\r\n MaterialsModule_1.MaterialsModule.name,\r\n NewsModule_1.NewsModule.name,\r\n InfoModule_1.InfoModule.name,\r\n ReferenceModule_1.ReferenceModule.name,\r\n StorageModule_1.StorageModule.name,\r\n LogsModule_1.LogsModule.name,\r\n PoliciesModule_1.PoliciesModule.name\r\n])\r\n .service(RichTextContentLoadingSynchronizer_1.RichTextContentLoadingSynchronizer.NAME, RichTextContentLoadingSynchronizer_1.RichTextContentLoadingSynchronizer)\r\n .service(DialogService_1.DialogService.NAME, DialogService_1.DialogService)\r\n .service(VhsTemplateService_1.VhsTemplateService.NAME, VhsTemplateService_1.VhsTemplateService)\r\n .directive(\"autofocus\", AutofocusDirective_1.AutoFocusDirectiveFactory)\r\n .directive(\"sticky\", VhsStickyDirective_1.StickyDirectiveFactory)\r\n .directive(\"datePicker\", DateTimePickerDirective_1.DateTimePickerDirectiveFactory)\r\n .directive(\"timePicker\", DateTimePickerDirective_1.TimePickerDirectiveFactory)\r\n .directive(\"vhsGridConfiguration\", GridConfigurationDirective_1.GridConfigurationDirectiveFactory)\r\n .directive(\"vhsGrid\", GridDirective_1.GridDirectiveFactory)\r\n .directive(\"vhsGridEmpty\", GridEmptyDirective_1.GridEmptyDirectiveFactory)\r\n .directive(\"vhsGridExternalConfiguration\", GridExternalConfiguration_1.GridExternalConfigurationFactory)\r\n .directive(\"vhsGridPagination\", GridPaginationDirective_1.GridPaginationDirectiveFactory)\r\n .directive(\"login\", LoginDirective_1.LoginDirectiveFactory)\r\n .directive(\"vhsSessionRestore\", SessionRestoreDirective_1.SessionRestoreDirectiveFactory)\r\n .directive('multipleCheckboxSelector', MultipleCheckboxSelectorDirective_1.MultipleCheckboxSelectorDirectiveFactory)\r\n .directive(\"vhsPageHeader\", PageHeaderDirective_1.PageHeaderDirectiveFactory)\r\n .directive(\"vhsLeftMainMenu\", PersonalMenuDirective_1.LeftMainMenuDirectiveFactory)\r\n .directive('vhsSelectAll', VhsSelectAllDirective_1.VhsSelectAllDirectiveFactory)\r\n .directive('referenceCheckboxSelector', ReferenceCheckboxSelectorDirective_1.ReferenceCheckboxSelectorDirectiveFactory)\r\n .directive('referenceDropdownSelector', ReferenceDropdownSelectorDirective_1.ReferenceDropdownSelectorDirectiveFactory)\r\n .directive('referenceDropdownEditableSelector', ReferenceDropdownEditableSelectorDirective_1.ReferenceDropdownEditableSelectorDirectiveFactory)\r\n .directive('referenceMultipleSelector', ReferenceMultipleSelectorDirective_1.ReferenceMultipleSelectorDirectiveFactory)\r\n .directive(\"tooltip\", TooltipDirective_1.TooltipDirectiveFactory)\r\n .directive(\"vhsSearch\", VhsSearchDirective_1.VhsSearchDirectiveFactory)\r\n .directive(\"personalMenu\", PersonalMenuDirective_1.PersonalMenuDirectiveFactory)\r\n .directive(\"navigationPersonalMenu\", PersonalMenuDirective_1.NavigationPersonalMenuDirectiveFactory)\r\n .directive(\"leftPersonalMenu\", PersonalMenuDirective_1.LeftPersonalMenuDirectiveFactory)\r\n .directive(\"vhsBreadcrumbs\", PersonalMenuDirective_1.VhsBreadcrumbsDirectiveFactory)\r\n .directive(\"vhsVideo\", VhsVideoAudioDirective_1.VhsVideoDirectiveFactory)\r\n .directive(\"vhsYoutubeVideo\", VhsVideoAudioDirective_1.VhsYoutubeVideoDirectiveFactory)\r\n .directive(\"vhsAudio\", VhsVideoAudioDirective_1.VhsAudioDirectiveFactory)\r\n .directive(\"vhsMaterial\", VhsMaterialDirective_1.VhsMaterialDirectiveFactory)\r\n .directive(\"usersAndGroupsSelector\", UsersAndGroupsSelectorDirective_1.UsersAndGroupsSelectorDirectiveFactory)\r\n .directive(\"selectOptionsDisabled\", SelectOptionsDisabledDirective_1.SelectOptionsDisabledDirectiveFactory)\r\n .directive(\"selectPlaceholder\", SelectPlaceholderDirective_1.SelectPlaceholderDirectiveFactory)\r\n .directive(\"uploadsStatus\", UploadsStatusDirective_1.UploadsStatusDirectiveFactory)\r\n .directive(\"vhsThumbnail\", VhsThumbnailDirective_1.VhsThumbnailDirectiveFactory)\r\n .directive(\"vhsMaterialEditing\", VhsMaterialEditingDirective_1.VhsMaterialEditingDirectiveFactory)\r\n .directive(\"vhsParticipationFormEditing\", VhsParticipationFormEditingDirective_1.VhsParticipationFormEditingDirectiveFactory)\r\n .directive(\"vhsParticipationFormFilling\", VhsParticipationFormFillingDirective_1.VhsParticipationFormFillingDirectiveFactory)\r\n .directive(\"vhsEmbeddedMaterial\", VhsEmbeddedMaterialDirective_1.VhsEmbeddedMaterialDirectiveFactory)\r\n .directive(\"vhsCalendarFilter\", VhsCalendarFilterDirective_1.VhsCalendarFilterDirectiveFactory)\r\n .directive(\"vhsSelectMaterial\", VhsSelectMaterialDirective_1.VhsSelectMaterialDirectiveFactory)\r\n .directive(\"vhsRichTextEditor\", RichTextEditorDirective_1.RichTextEditorDirectiveFactory)\r\n .directive(\"vhsRichTextBind\", RichTextBindDirective_1.RichTextBindDirectiveFactory)\r\n .directive(\"vhsUserNote\", VhsUserNoteDirective_1.VhsUserNoteDirectiveFactory)\r\n .directive(\"vhsEmbeddedBundle\", VhsEmbeddedBundleDirective_1.VhsEmbeddedBundleDirectiveFactory)\r\n .directive(\"vhsSelectEmbeddedBundle\", VhsSelectEmbeddedBundleDirective_1.VhsSelectEmbeddedBundleDirectiveFactory)\r\n .directive(\"vhsSelectSandbox\", VhsSelectSandboxDirective_1.VhsSelectSandboxDirectiveFactory)\r\n .directive(\"vhsLoadFromTemplate\", VhsLoadFromTemplateDirective_1.VhsLoadFromTemplateDirectiveFactory)\r\n .directive(\"vhsConvertTemplate\", VhsConvertTemplateDirective_1.VhsConvertTemplateDirectiveFactory)\r\n .directive(\"vhsSandbox\", VhsSandboxDirective_1.VhsSandboxDirectiveFactory)\r\n .directive(\"vhsDownloadBundle\", VhsDownloadBundleDirective_1.VhsDownloadBundleDirectiveFactory)\r\n .directive(\"vhsLoadBundleFile\", LoadBundleFileDirective_1.LoadBundleFileDirectiveFactory)\r\n .directive(\"vhsFullScreen\", FullScreenDirective_1.FullScreenDirectiveFactory)\r\n .directive(\"vhsPageTitle\", PageTitleDirective_1.PageTitleDirectiveFactory)\r\n .directive(\"entitiesSelect2Selector\", EntitiesSelect2SelectorDirective_1.EntitiesSelect2SelectorDirectiveFactory)\r\n .directive(\"businessUnitSelector\", BusinessUnitSelectorDirective_1.BusinessUnitSelectorDirectiveFactory)\r\n .directive(\"explanations\", ExplanationsDirective_1.ExplanationsDirectiveFactory)\r\n .directive(\"vhsDiscussions\", DiscussionsDirective_1.DiscussionsDirectiveFactory)\r\n .directive(\"vhsLearningPathTopTabs\", VhsLearningPathTopTabsDirective_1.VhsLearningPathTopTabsDirectiveFactory)\r\n .directive(\"vhsLearningPathControls\", VhsLearningPathControlsDirective_1.VhsLearningPathControlsDirectiveFactory)\r\n .directive(\"vhsLearningPathEditTopTabs\", VhsLearningPathEditTopTabs_1.VhsLearningPathEditTopTabsDirectiveFactory)\r\n .directive(\"vhsLearningPathCoursesList\", VhsLearningPathCoursesList_1.VhsLearningPathCoursesListDirectiveFactory)\r\n .directive(\"vhsSelectLearningPathCourses\", VhsSelectLearningPathCoursesDirective_1.VhsSelectLearningPathCoursesDirectiveFactory)\r\n .directive(\"vhsQuizSurveyAnswering\", VhsQuizSurveyAnsweringDirective_1.VhsQuizSurveyAnsweringDirectiveFactory)\r\n .directive(\"vhsQuizDetails\", VhsQuizDetailsDirective_1.VhsQuizDetailsDirectiveFactory)\r\n .directive(\"vhsCourseViewTopTabs\", VhsCourseViewTopTabs_1.VhsCourseViewTopTabsDirectiveFactory)\r\n .directive(\"vhsCourseEditTopTabs\", VhsCourseEditTopTabs_1.VhsCourseEditTopTabsDirectiveFactory)\r\n .directive(\"vhsVilt\", VhsVILTDirective_1.VhsVILTDirectiveFactory)\r\n .directive(\"vhsImageCropper\", VhsImageCropperDirective_1.VhsImageCropperDirectiveFactory)\r\n .directive(\"certificatesEditableSelector\", CertificatesEditableSelectorDirective_1.CertificatesEditableSelectorDirectiveFactory)\r\n .directive(\"vhsConfirmationDialog\", ConfirmationDialogDirective_1.ConfirmationDialogFactory)\r\n .directive(\"vhsFillableFormDialog\", FillableFormDialogDirective_1.FillableFormDialogFactory)\r\n .directive(\"vhsInputConfirmationDialog\", InputConfirmationDialogDirective_1.InputConfirmationDialogFactory)\r\n .directive(\"vhsNotificationConfirmationDialog\", NotificationConfirmationDialogDirective_1.NotificationConfirmationDialogFactory)\r\n .directive(\"vhsIndividualCourseProgress\", VhsIndividualCourseProgressDirective_1.VhsIndividualCourseProgressDirectiveFactory)\r\n .directive(\"vhsIndividualParticipationInfo\", VhsIndividualParticipationInfoDirective_1.VhsIndividualParticipationInfoDirectiveFactory)\r\n .directive(\"vhsIndividualCourseProgressDetails\", VhsIndividualCourseProgressDetailsDirective_1.VhsIndividualCourseProgressDetailsDirectiveFactory)\r\n .directive(\"vhsIndividualCourseProgressCertificates\", VhsIndividualCourseProgressCertificatesDirective_1.VhsIndividualCourseProgressCertificatesDirectiveFactory)\r\n .directive(\"vhsOverallProgress\", VhsOverallProgressDirective_1.VhsOverallProgressDirectiveFactory)\r\n .directive(\"vhsIndividualLearningPathProgress\", VhsIndividualLearningPathProgressDirective_1.VhsIndividualLearningPathProgressDirectiveFactory)\r\n .directive(\"vhsIndividualLearningPathProgressDetails\", VhsIndividualLearningPathProgressDetailsDirective_1.VhsIndividualLearningPathProgressDetailsDirectiveFactory)\r\n .directive(\"vhsIndividualLearningPathProgressCertificates\", VhsIndividualLearningPathProgressCertificatesDirective_1.VhsIndividualLearningPathProgressCertificatesDirectiveFactory)\r\n .directive(\"vhsLearningPathOverallProgress\", VhsLearningPathOverallProgressDirective_1.VhsLearningPathOverallProgressDirectiveFactory)\r\n .directive(\"vhsIndividualLearningPathParticipationInfo\", VhsIndividualLearningPathParticipationInfoDirective_1.VhsIndividualLearningPathParticipationInfoDirectiveFactory)\r\n .directive(\"vhsRecordRtcAudio\", VhsRecordRtcDirective_1.VhsRecordRtcDirectiveFactory)\r\n .directive(\"vhsAudioResponder\", VhsAudioResponderDirective_1.AudioResponderDirectiveFactory)\r\n .directive(\"skipToContent\", SkipToContentDirective_1.SkipToContentDirectiveFactory)\r\n .directive(\"vhsEditableTemplate\", VhsEditableTemplateDirective_1.VhsEditableTemplateDirectiveFactory)\r\n .directive(\"vhsAddBlock\", VhsAddBlockDirective_1.VhsAddBlockDirectiveFactory)\r\n .directive(\"vhsTemplateMenu\", VhsTemplateMenuDirective_1.VhsTemplateMenuDirectiveFactory)\r\n .directive(\"acceptCookies\", AcceptCookiesDirective_1.AcceptCookiesDirectiveFactory)\r\n .directive(\"vhsReturnToOwnAccount\", VhsReturnToOwnAccountDirective_1.VhsReturnToOwnAccountDirectiveFactory)\r\n .directive(\"vhsProductsListEditing\", VhsProductsListEditingDirective_1.VhsProductsListEditingDirectiveFactory)\r\n .directive(\"vhsScaledAnswerQuestion\", VhsScaledAnswerQuestionDirective_1.VhsScaledAnswerQuestionDirectiveFactory)\r\n .directive(\"vhsCoursePublish\", VhsCoursePublishDirective_1.VhsCoursePublishDirectiveFactory)\r\n .directive(\"vhsMaterialEditTopTabs\", VhsMaterialEditTopTabsDirective_1.VhsMaterialEditTopTabsDirectiveFactory)\r\n .directive(\"vhsCreditAssignment\", VhsCreditAssignmentDirective_1.VhsCreditAssignmentDirectiveFactory)\r\n .directive(\"vhsEditableUserCredits\", VhsEditableUserCreditsDirective_1.VhsEditableUserDirectiveFactory)\r\n .directive(\"vhsVersionChecker\", VhsVersionChecker_1.VhsVersionCheckerFactory)\r\n .directive(\"vhsLearningSessionsTopTabs\", VhsLearningSessionsTopTabs_1.VhsLearningSessionsTopTabsDirectiveFactory)\r\n .directive(\"vhsIlt\", VhsILTDirective_1.VhsILTDirectiveFactory)\r\n .directive(\"vhsMeetingCreateEdit\", VhsMeetingCreateEditDirective_1.VhsMeetingCreateEditDirectiveFactory)\r\n .directive(\"vhsWebinarCreateEdit\", VhsWebinarCreateEditDirective_1.VhsWebinarCreateEditDirectiveFactory)\r\n .directive(\"vhsTeamsCreateEdit\", VhsTeamsCreateEditDirective_1.VhsTeamsCreateEditDirectiveFactory)\r\n .directive(\"vhsQuizTopTabs\", QuizViewTopTabs_1.QuizViewTopTabsDirectiveFactory)\r\n .directive(\"vhsPurchase\", VhsPurchaseDirective_1.VhsPurchaseDirectiveFactory)\r\n .directive(\"vhsProductViewTopTabs\", VhsProductViewTopTabs_1.VhsProductViewTopTabsDirectiveFactory)\r\n .directive(\"vhsProductItemDetails\", VhsProductItemDetails_1.VhsProductItemDetailsDirectiveFactory)\r\n .directive(\"vhsNotificationTemplate\", VhsNotificationTemplateDirective_1.VhsNotificationTemplateDirectiveFactory)\r\n .directive(\"vhsNotificationTemplateEdit\", VhsNotificationTemplateEditDirective_1.VhsNotificationTemplateEditDirectiveFactory)\r\n .directive(\"vhsSystemSettingsTopTabs\", VhsSystemSettingsTopTabs_1.VhsSystemSettingsTopTabsDirectiveFactory)\r\n .directive(\"vhsSystemSettingsMenuItemsVisibility\", VhsSystemSettingsMenuItemsVisibilityDirective_1.VhsSystemSettingsMenuItemsVisibilityDirectiveFactory)\r\n .directive(\"vhsQuizImportExport\", VhsQuizImportExportDirective_1.VhsQuizImportExportDirectiveFactory)\r\n .directive(\"avatar\", AvatarDirective_1.AvatarDirectiveFactory)\r\n .directive(\"vhsFillableForm\", VhsFillableFormDirective_1.VhsFillableFormDirectiveFactory)\r\n .directive(\"vhsUploadArchiveInCourseEdit\", UploadArchiveInCourseEditDirective_1.UploadArchiveInCourseEditDirectiveFactory)\r\n .directive(\"vhsGroupEditTopTabs\", VhsGroupEditTopTabs_1.VhsGroupEditTopTabsDirectiveFactory)\r\n .directive(\"vhsHomeMenu\", VhsHomeMenuDirective_1.VhsHomeMenuDirectiveFactory)\r\n .directive(\"vhsUserAvatar\", UserAvatarDirective_1.VhsUserAvatarDirectiveFactory)\r\n .directive(\"vhsBrandingLogosEditing\", VhsBrandingLogosEditing_1.VhsBrandingLogosEditingDirectiveFactory)\r\n .directive(\"vhsBrandingColorsEditing\", VhsBrandingColorsEditing_1.VhsBrandingColorsEditingDirectiveFactory)\r\n .directive(\"vhsBrandingThemesEditing\", VhsBrandingThemesEditing_1.VhsBrandingThemesEditingDirectiveFactory)\r\n .directive(\"vhsBrandingCssEditing\", VhsBrandingCssEditing_1.VhsBrandingCssEditingDirectiveFactory)\r\n .directive(\"vhsBrandingShareEditing\", VhsBrandingShareEditing_1.VhsBrandingShareEditingDirectiveFactory)\r\n .directive(\"vhsParticipants\", VhsParticipantsDirective_1.VhsParticipantsDirectiveFactory)\r\n .directive(\"vhsBadgeTemplate\", VhsBadgeTemplateDirective_1.VhsBadgeTemplateDirectiveFactory)\r\n .directive(\"vhsBadgeTemplateEdit\", VhsBadgeTemplateEdit_1.VhsBadgeTemplateEditDirectiveFactory)\r\n .directive(\"vhsMaterialCheckpoints\", VhsMaterialCheckpointsDirective_1.VhsMaterialCheckpointsDirectiveFactory)\r\n .directive(\"vhsAddTable\", VhsAddTableDirective_1.VhsAddTableDirectiveFactory)\r\n .directive(\"vhsHotspotQuestionEdit\", VhsHotspotQuestionEditDirective_1.VhsHotspotQuestionEditDirectiveFactory)\r\n .directive(\"vhsHotspotQuestionAnswering\", VhsHotspotQuestionAnsweringDirective_1.VhsHotspotQuestionAnsweringDirectiveFactory)\r\n .directive(\"vhsHotspotQuestionExplanation\", VhsHotspotQuestionExplanationDirective_1.VhsHotspotQuestionExplanationDirectiveFactory)\r\n .directive(\"vhsAiContentGeneration\", AIContentGenerationDirective_1.VhsAIContentGenerationDirectiveFactory)\r\n .directive(\"vhsHelpBot\", VhsHelpBotDirective_1.VhsHelpBotDirectiveFactory)\r\n .filter(\"maxLength\", MaxLengthFilter_1.MaxLengthFilterFactory)\r\n .filter(\"secondsToTime\", SecondsToTimeFilter_1.SecondsToTimeFilterFactory);\r\n},{\"../policies/PoliciesModule\":389,\"./../auth/AuthModule\":17,\"./../authcore/AuthCoreModule\":24,\"./../components/dialog/ConfirmationDialogDirective\":165,\"./../components/dialog/InputConfirmationDialogDirective\":168,\"./../components/dialog/NotificationConfirmationDialogDirective\":169,\"./../info/InfoModule\":291,\"./../infrastructure/InfrastructureModule\":294,\"./../logs/LogsModule\":327,\"./../main/MainModule\":331,\"./../materials/MaterialsModule\":338,\"./../news/NewsModule\":352,\"./../reference/ReferenceModule\":407,\"./../security/SecurityModule\":419,\"./../storage/StorageModule\":457,\"./../urls/UrlsModule\":492,\"./AcceptCookiesDirective\":56,\"./AutofocusDirective\":57,\"./AvatarDirective\":58,\"./BusinessUnitSelectorDirective\":59,\"./CertificatesEditableSelectorDirective\":60,\"./DateTimePickerDirective\":62,\"./DiscussionsDirective\":63,\"./EntitiesSelect2SelectorDirective\":64,\"./ExplanationsDirective\":65,\"./FullScreenDirective\":66,\"./GridConfigurationDirective\":67,\"./GridDirective\":68,\"./GridEmptyDirective\":69,\"./GridExternalConfiguration\":70,\"./GridPaginationDirective\":71,\"./LoadBundleFileDirective\":72,\"./LoginDirective\":73,\"./MaxLengthFilter\":74,\"./MultipleCheckboxSelectorDirective\":75,\"./PageHeaderDirective\":77,\"./PageTitleDirective\":78,\"./PersonalMenuDirective\":79,\"./QuizViewTopTabs\":80,\"./ReferenceCheckboxSelectorDirective\":81,\"./ReferenceDropdownEditableSelectorDirective\":82,\"./ReferenceDropdownSelectorDirective\":83,\"./ReferenceMultipleSelectorDirective\":84,\"./SecondsToTimeFilter\":85,\"./SelectOptionsDisabledDirective\":86,\"./SelectPlaceholderDirective\":87,\"./SessionRestoreDirective\":88,\"./SkipToContentDirective\":89,\"./TooltipDirective\":90,\"./UploadArchiveInCourseEditDirective\":91,\"./UploadsStatusDirective\":92,\"./UserAvatarDirective\":93,\"./UsersAndGroupsSelectorDirective\":94,\"./VhsAudioResponderDirective\":95,\"./VhsBadgeTemplateDirective\":96,\"./VhsBadgeTemplateEdit\":97,\"./VhsCalendarFilterDirective\":98,\"./VhsCourseEditTopTabs\":99,\"./VhsCoursePublishDirective\":100,\"./VhsCourseViewTopTabs\":101,\"./VhsCreditAssignmentDirective\":102,\"./VhsEditableTemplateDirective\":103,\"./VhsEditableUserCreditsDirective\":104,\"./VhsEmbeddedMaterialDirective\":105,\"./VhsFillableFormDirective\":106,\"./VhsGroupEditTopTabs\":107,\"./VhsHelpBotDirective\":108,\"./VhsHomeMenuDirective\":109,\"./VhsILTDirective\":110,\"./VhsImageCropperDirective\":111,\"./VhsIndividualCourseProgressCertificatesDirective\":112,\"./VhsIndividualCourseProgressDetailsDirective\":113,\"./VhsIndividualCourseProgressDirective\":114,\"./VhsIndividualLearningPathParticipationInfoDirective\":115,\"./VhsIndividualLearningPathProgressCertificatesDirective\":116,\"./VhsIndividualLearningPathProgressDetailsDirective\":117,\"./VhsIndividualLearningPathProgressDirective\":118,\"./VhsIndividualParticipationInfoDirective\":119,\"./VhsLearningPathControlsDirective\":120,\"./VhsLearningPathCoursesList\":121,\"./VhsLearningPathEditTopTabs\":122,\"./VhsLearningPathOverallProgressDirective\":123,\"./VhsLearningPathTopTabsDirective\":124,\"./VhsLearningSessionsTopTabs\":125,\"./VhsMaterialCheckpointsDirective\":126,\"./VhsMaterialDirective\":127,\"./VhsMaterialEditTopTabsDirective\":128,\"./VhsMaterialEditingDirective\":129,\"./VhsMeetingCreateEditDirective\":130,\"./VhsNotificationTemplateDirective\":131,\"./VhsNotificationTemplateEditDirective\":132,\"./VhsOverallProgressDirective\":133,\"./VhsParticipantsDirective\":134,\"./VhsParticipationFormEditingDirective\":135,\"./VhsParticipationFormFillingDirective\":136,\"./VhsProductItemDetails\":137,\"./VhsProductViewTopTabs\":138,\"./VhsProductsListEditingDirective\":139,\"./VhsPurchaseDirective\":140,\"./VhsQuizDetailsDirective\":141,\"./VhsQuizImportExportDirective\":142,\"./VhsQuizSurveyAnsweringDirective\":143,\"./VhsRecordRtcDirective\":144,\"./VhsReturnToOwnAccountDirective\":145,\"./VhsScaledAnswerQuestionDirective\":146,\"./VhsSearchDirective\":147,\"./VhsSelectAllDirective\":148,\"./VhsSelectLearningPathCoursesDirective\":149,\"./VhsStickyDirective\":150,\"./VhsSystemSettingsMenuItemsVisibilityDirective\":151,\"./VhsSystemSettingsTopTabs\":152,\"./VhsTeamsCreateEditDirective\":153,\"./VhsTemplateMenuDirective\":154,\"./VhsThumbnailDirective\":155,\"./VhsVILTDirective\":156,\"./VhsVersionChecker\":157,\"./VhsVideoAudioDirective\":158,\"./VhsWebinarCreateEditDirective\":159,\"./branding/VhsBrandingColorsEditing\":160,\"./branding/VhsBrandingCssEditing\":161,\"./branding/VhsBrandingLogosEditing\":162,\"./branding/VhsBrandingShareEditing\":163,\"./branding/VhsBrandingThemesEditing\":164,\"./dialog/DialogService\":166,\"./dialog/FillableFormDialogDirective\":167,\"./quizzes/VhsHotspotQuestionAnsweringDirective\":171,\"./quizzes/VhsHotspotQuestionEditDirective\":172,\"./quizzes/VhsHotspotQuestionExplanationDirective\":173,\"./richtext/AIContentGenerationDirective\":174,\"./richtext/RichTextBindDirective\":175,\"./richtext/RichTextContentLoadingSynchronizer\":176,\"./richtext/RichTextEditorDirective\":177,\"./richtext/VhsAddBlockDirective\":178,\"./richtext/VhsAddTableDirective\":179,\"./richtext/VhsConvertTemplateDirective\":180,\"./richtext/VhsDownloadBundleDirective\":181,\"./richtext/VhsEmbeddedBundleDirective\":182,\"./richtext/VhsLoadFromTemplateDirective\":183,\"./richtext/VhsSandboxDirective\":184,\"./richtext/VhsSelectEmbeddedBundleDirective\":185,\"./richtext/VhsSelectMaterialDirective\":186,\"./richtext/VhsSelectSandboxDirective\":187,\"./richtext/VhsTemplateService\":188,\"./richtext/VhsUserNoteDirective\":189}],62:[function(require,module,exports){\nvar Moment_1 = require(\"../utils/Moment\");\r\nfunction DateTimePickerDirectiveFactory() {\r\n function link($scope, element, attributes, ngModel, transclude) {\r\n element.datetimepicker({\r\n pickTime: false,\r\n language: \"en\",\r\n format: \"M/D/YYYY\",\r\n collapse: true,\r\n keyboardNavigation: attributes.navigation || true,\r\n maxDate: $scope.maxDateValidation ? moment($scope.maxDate).toDate() : null\r\n });\r\n element.bind(\"dp.change\", function () {\r\n element.trigger('input');\r\n });\r\n $scope.$watch(attributes.ngModel, function (value) {\r\n if (value) {\r\n element.trigger(\"change\");\r\n }\r\n });\r\n $scope.$on(\"$destroy\", function () { return element.datetimepicker().data('DateTimePicker').destroy(); });\r\n if ($scope.maxDateValidation) {\r\n ngModel.$validators[\"maxDate\"] = function (modelValue, viewValue) {\r\n if (!$scope.maxDate || !viewValue) {\r\n return true;\r\n }\r\n var max = moment($scope.maxDate);\r\n var value = Moment_1.Moment.parse(viewValue);\r\n return !max.isValid() || !value.isValid() || !value.isAfter(max);\r\n };\r\n $scope.$watch(\"maxDate\", function () {\r\n ngModel.$validate();\r\n });\r\n }\r\n if ($scope.minDateValidation) {\r\n ngModel.$validators[\"minDate\"] = function (modelValue, viewValue) {\r\n if (!$scope.minDate || !viewValue) {\r\n return true;\r\n }\r\n var min = moment($scope.minDate);\r\n var value = Moment_1.Moment.parse(viewValue);\r\n return !min.isValid() || !value.isValid() || !value.isBefore(min);\r\n };\r\n $scope.$watch(\"minDate\", function () {\r\n ngModel.$validate();\r\n });\r\n }\r\n }\r\n return {\r\n restrict: \"A\",\r\n require: \"?ngModel\",\r\n scope: {\r\n minDate: \"=?vhsMin\",\r\n maxDate: \"=?vhsMax\",\r\n minDateValidation: \"=?vhsMinDateValidation\",\r\n maxDateValidation: \"=?vhsMaxDateValidation\"\r\n },\r\n link: link\r\n };\r\n}\r\nexports.DateTimePickerDirectiveFactory = DateTimePickerDirectiveFactory;\r\nfunction TimePickerDirectiveFactory() {\r\n function link($scope, element, attributes, ngModel, transclude) {\r\n element.datetimepicker({\r\n pickDate: false,\r\n pickTime: true,\r\n language: \"en\",\r\n format: \"hh:mm a\",\r\n collapse: true,\r\n keyboardNavigation: attributes.navigation || true,\r\n maxDate: $scope.maxDateValidation ? moment($scope.maxDate).toDate() : null\r\n });\r\n element.bind(\"dp.change\", function () {\r\n element.trigger('input');\r\n });\r\n $scope.$watch(attributes.ngModel, function (value) {\r\n if (value) {\r\n element.trigger(\"change\");\r\n }\r\n });\r\n $scope.$on(\"$destroy\", function () { return element.datetimepicker().data('DateTimePicker').destroy(); });\r\n if ($scope.maxDateValidation) {\r\n ngModel.$validators[\"maxDate\"] = function (modelValue, viewValue) {\r\n if (!$scope.maxDate || !viewValue) {\r\n return true;\r\n }\r\n var max = moment($scope.maxDate);\r\n var value = Moment_1.Moment.parse(viewValue);\r\n return !max.isValid() || !value.isValid() || !value.isAfter(max);\r\n };\r\n $scope.$watch(\"maxDate\", function () {\r\n ngModel.$validate();\r\n });\r\n }\r\n if ($scope.minDateValidation) {\r\n ngModel.$validators[\"minDate\"] = function (modelValue, viewValue) {\r\n if (!$scope.minDate || !viewValue) {\r\n return true;\r\n }\r\n var min = moment($scope.minDate);\r\n var value = Moment_1.Moment.parse(viewValue);\r\n return !min.isValid() || !value.isValid() || !value.isBefore(min);\r\n };\r\n $scope.$watch(\"minDate\", function () {\r\n ngModel.$validate();\r\n });\r\n }\r\n }\r\n return {\r\n restrict: \"A\",\r\n require: \"?ngModel\",\r\n scope: {\r\n minDate: \"=?vhsMin\",\r\n maxDate: \"=?vhsMax\",\r\n minDateValidation: \"=?vhsMinDateValidation\",\r\n maxDateValidation: \"=?vhsMaxDateValidation\"\r\n },\r\n link: link\r\n };\r\n}\r\nexports.TimePickerDirectiveFactory = TimePickerDirectiveFactory;\r\n},{\"../utils/Moment\":518}],63:[function(require,module,exports){\nvar Storage_1 = require(\"../infrastructure/Storage\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar CourseDiscussionController_1 = require(\"../courses/CourseDiscussionController\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar BadgesService_1 = require(\"../gamification/BadgesService\");\r\nvar PersonalRouter_1 = require(\"../urls/PersonalRouter\");\r\nvar DiscussionsController = (function () {\r\n function DiscussionsController($scope, $rootScope, $http, $location, $anchorScroll, url, securityService, userService, authService, authManager, authRedirect, permissionsService, progressService, courseService, coursesRouter, sessionStorageWrapper, dialogService, badgesService, personalRouter) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$anchorScroll = $anchorScroll;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.permissionsService = permissionsService;\r\n this.progressService = progressService;\r\n this.courseService = courseService;\r\n this.coursesRouter = coursesRouter;\r\n this.sessionStorageWrapper = sessionStorageWrapper;\r\n this.dialogService = dialogService;\r\n this.badgesService = badgesService;\r\n this.personalRouter = personalRouter;\r\n this.currentUser = {};\r\n this.course = {};\r\n this.courseModules = [];\r\n this.disableActionButtons = false;\r\n this.rewards = [];\r\n $scope.vm = this;\r\n this.courseId = $scope.course.id;\r\n this.threadId = $scope.threadId;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.securityService\r\n .demandCoursePermissions(\"\" + this.courseId, function (coursePermissions) { return coursePermissions.view; });\r\n if (this.isAuthenticated) {\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.currentUser);\r\n });\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.previewUrl = user.previewUrl;\r\n });\r\n this.loadCourseModules();\r\n this.loadUserProfile();\r\n this.threadsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.base(\"/api/courses/:courseId/discussion/threads\").param(\":courseId\", this.courseId).service()));\r\n this.threadsGridModel.pageSize = 5;\r\n this.setDefaultThreadsGridFilters();\r\n this.threadsGridModel.addLoadingListener(this);\r\n this.commentsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.base(\"/api/courses/:courseId/discussion/threads/comments\").param(\":courseId\", this.courseId).service()));\r\n this.commentsGridModel.pageSize = 5;\r\n this.newComment = { text: \"\" };\r\n this.newReplyComment = { text: \"\" };\r\n }\r\n DiscussionsController.prototype.startLoading = function () {\r\n };\r\n DiscussionsController.prototype.endLoading = function () {\r\n this.threadsGridModel.entries.forEach(function (t) {\r\n t.editing = false;\r\n });\r\n if (this.threadId != null) {\r\n this.onThreadChange(this.threadsGridModel.entries[0]);\r\n this.threadId = null;\r\n this.threadsGridModel.filter.threadId = null;\r\n }\r\n var threadId = +localStorage.getItem('threadId');\r\n if (threadId) {\r\n localStorage.removeItem('threadId');\r\n var thread = this.threadsGridModel.entries.filter(function (t) { return t.id == threadId; })[0];\r\n if (thread) {\r\n this.onThreadChange(thread);\r\n }\r\n }\r\n };\r\n DiscussionsController.prototype.setDefaultThreadsGridFilters = function () {\r\n this.threadsGridModel.filter.searchString = \"\";\r\n this.threadsGridModel.filter.moduleId = null;\r\n this.threadsGridModel.filter.onlyCommonThreads = false;\r\n this.threadsGridModel.filter.threadId = this.threadId;\r\n };\r\n DiscussionsController.prototype.clearFilters = function () {\r\n this.setDefaultThreadsGridFilters();\r\n this.reloadGridModels();\r\n };\r\n DiscussionsController.prototype.reloadGridModels = function () {\r\n this.threadsGridModel.loadPage(0);\r\n this.currentThread = null;\r\n this.commentsGridModel.filter.thread = null;\r\n this.commentsGridModel.loadPage(0);\r\n };\r\n DiscussionsController.prototype.onThreadChange = function (thread) {\r\n this.currentThread = thread;\r\n this.getThreadCreator();\r\n this.newComment = { text: \"\" };\r\n this.newReplyComment = { text: \"\" };\r\n this.commentsGridModel.filter.thread = thread != null ? thread.id : null;\r\n this.commentsGridModel.loadCurrentPage();\r\n };\r\n DiscussionsController.prototype.onThreadButtonPress = function (thread, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.currentThread = thread;\r\n this.getThreadCreator();\r\n this.newComment = { text: \"\" };\r\n this.newReplyComment = { text: \"\" };\r\n this.commentsGridModel.filter.thread = thread != null ? thread.id : null;\r\n this.commentsGridModel.loadCurrentPage();\r\n }\r\n };\r\n DiscussionsController.prototype.showCreateNewThreadDialog = function () {\r\n $(\"#createNewThreadDialog\").modal(\"show\");\r\n };\r\n DiscussionsController.prototype.showThreadRemovalDialog = function (thread) {\r\n var _this = this;\r\n this.onThreadChange(thread);\r\n this.dialogService.confirm(\"Are you sure you want to remove this thread?\", {\r\n title: \"Thread removal\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n _this.removeThread();\r\n });\r\n };\r\n DiscussionsController.prototype.addThread = function () {\r\n var _this = this;\r\n this.courseService.addCourseThread(this.courseId, this.newThread).then(function (result) {\r\n INotifier_1.notifier.success(\"Thread has been saved\");\r\n _this.threadsGridModel.loadPage(0);\r\n _this.newThread = {};\r\n _this.badgesService.notifyUserAfterReward(Array(\"FST_DSC_TPC\")).then(function (result) {\r\n if (result.length > 0) {\r\n _this.$rootScope.$broadcast('notifyReward', result);\r\n }\r\n });\r\n });\r\n };\r\n DiscussionsController.prototype.cancelAddThread = function () {\r\n this.newThread = {};\r\n };\r\n DiscussionsController.prototype.removeThread = function () {\r\n var _this = this;\r\n this.disableActionButtons = true;\r\n this.courseService.removeCourseThread(this.courseId, this.currentThread.id, this.currentThread.version).then(function (result) {\r\n INotifier_1.notifier.success(\"Thread has been removed\");\r\n _this.disableActionButtons = false;\r\n _this.threadsGridModel.loadPage(0);\r\n _this.onThreadChange(null);\r\n });\r\n };\r\n DiscussionsController.prototype.startThreadInlineEdit = function (thread) {\r\n this.threadsGridModel.entries.forEach(function (t) {\r\n t.editing = false;\r\n });\r\n this.editingThread = {};\r\n thread.editing = true;\r\n angular.copy(thread, this.editingThread);\r\n };\r\n DiscussionsController.prototype.updateEditedThread = function () {\r\n var _this = this;\r\n if (this.editingThread.title) {\r\n this.disableActionButtons = true;\r\n this.courseService.updateCourseThread(this.courseId, this.editingThread).then(function (result) {\r\n _this.disableActionButtons = false;\r\n _this.editingThread = {};\r\n _this.threadsGridModel.loadCurrentPage();\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"Please specify thread name\");\r\n }\r\n };\r\n DiscussionsController.prototype.createNewReplyComment = function (parentId) {\r\n this.commentsGridModel.entries.forEach(function (c) {\r\n c.reply = c.id == parentId;\r\n });\r\n this.newReplyComment.parentId = parentId;\r\n };\r\n DiscussionsController.prototype.cancelNewReplyComment = function () {\r\n var _this = this;\r\n this.commentsGridModel.entries.forEach(function (c) {\r\n if (c.id == _this.newReplyComment.parentId) {\r\n c.reply = false;\r\n }\r\n });\r\n this.cleanComment(this.newReplyComment);\r\n };\r\n DiscussionsController.prototype.cleanComment = function (comment) {\r\n comment.text = \"\";\r\n comment.parentId = null;\r\n };\r\n DiscussionsController.prototype.addComment = function (reply) {\r\n var _this = this;\r\n this.disableActionButtons = true;\r\n this.courseService.addThreadComment(this.courseId, this.currentThread.id, reply ? this.newReplyComment : this.newComment).then(function (result) {\r\n _this.disableActionButtons = false;\r\n INotifier_1.notifier.success(\"Comment has been saved\");\r\n _this.commentsGridModel.loadPage(_this.commentsGridModel.totalPageCount - 1);\r\n _this.cleanComment(reply ? _this.newReplyComment : _this.newComment);\r\n _this.badgesService.notifyUserAfterReward(Array(\"FST_DSC_RPL\", \"TTH_DSC_DRPL\", \"TFTH_DSC_DRPL\", \"HTH_DSC_DRPL\")).then(function (result) {\r\n if (result.length > 0) {\r\n _this.$rootScope.$broadcast('notifyReward', result);\r\n }\r\n });\r\n });\r\n };\r\n DiscussionsController.prototype.removeComment = function (comment) {\r\n var _this = this;\r\n this.disableActionButtons = true;\r\n this.courseService.removeThreadComment(this.courseId, comment.id, comment.version).then(function (result) {\r\n INotifier_1.notifier.success(\"Comment has been removed\");\r\n _this.disableActionButtons = false;\r\n _this.commentsGridModel.loadCurrentPage();\r\n });\r\n };\r\n DiscussionsController.prototype.loadCourseModules = function () {\r\n var _this = this;\r\n this.courseService.getModules(this.courseId).then(function (result) {\r\n _this.courseModules = result;\r\n });\r\n };\r\n DiscussionsController.prototype.getEntitiesUrl = function (key) {\r\n switch (key) {\r\n case 'modules':\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CourseDiscussionController_1.CourseDiscussionController.MODULES_FILTER_URL)\r\n .with(':' + CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM, this.courseId.toString())\r\n .build();\r\n default:\r\n return null;\r\n }\r\n };\r\n DiscussionsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.currentUserProfile = u;\r\n });\r\n };\r\n DiscussionsController.prototype.getThreadCreator = function () {\r\n var _this = this;\r\n this.courseService.getCourseThreadCreator(this.currentThread.id).then(function (res) {\r\n _this.authorName = res.fullName;\r\n });\r\n };\r\n DiscussionsController.prototype.getImageForActivityBadge = function (badge) {\r\n if (badge) {\r\n if (!badge.fileId && badge.badgeKey) {\r\n return \"themes/default/img/actionBadges/\" + badge.badgeKey + \".png\";\r\n }\r\n return badge.previewUrl;\r\n }\r\n return '';\r\n };\r\n DiscussionsController.prototype.submitReward = function (rewardId) {\r\n var _this = this;\r\n $('.rewardNotification').addClass('rewardNotification-up');\r\n this.rewards = this.rewards.filter(function (r) { return r.id !== rewardId; });\r\n setTimeout(function () {\r\n if (_this.rewards.length > 0) {\r\n _this.rewardToShow = null;\r\n setTimeout(function () {\r\n $('.rewardNotification').removeClass('rewardNotification-up');\r\n _this.rewardToShow = _this.rewards[0];\r\n }, 500);\r\n }\r\n else {\r\n _this.rewardToShow = null;\r\n }\r\n }, 200);\r\n };\r\n DiscussionsController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$anchorScroll\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n Storage_1.Storages.SESSION_NAME,\r\n DialogService_1.DialogService.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n PersonalRouter_1.PersonalRouter.NAME\r\n ];\r\n return DiscussionsController;\r\n})();\r\nexports.DiscussionsController = DiscussionsController;\r\nfunction DiscussionsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.scope = {\r\n course: \"=vhsCourse\",\r\n threadId: \"=vhsThreadId\"\r\n };\r\n directive.controller = DiscussionsController;\r\n directive.templateUrl = url.template(\"components/discussions.html\");\r\n return directive;\r\n}\r\nexports.DiscussionsDirectiveFactory = DiscussionsDirectiveFactory;\r\nDiscussionsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../courses/CourseDiscussionController\":196,\"../courses/CourseService\":211,\"../courses/ProgressService\":219,\"../gamification/BadgesService\":245,\"../infrastructure/Storage\":295,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../urls/PersonalRouter\":484,\"../users/UserService\":499,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./dialog/DialogService\":166}],64:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ReferenceService_1 = require(\"./../reference/ReferenceService\");\r\nvar IReferenceEntitiesParams_1 = require(\"./../reference/models/IReferenceEntitiesParams\");\r\nvar EntitiesSelect2SelectorController = (function () {\r\n function EntitiesSelect2SelectorController($scope, $http, url, referenceApi) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.url = url;\r\n this.referenceApi = referenceApi;\r\n this.modelId = null;\r\n this.selectedItems = null;\r\n this.infiniteScroll = {\r\n numToAdd: 20,\r\n currentItems: 20\r\n };\r\n $scope.vm = this;\r\n this.placeholder = $scope.placeholder ? $scope.placeholder : EntitiesSelect2SelectorController.DEFAULT_PLACEHOLDER;\r\n if ($scope.multiple) {\r\n this.modelIds = $scope.model[$scope.modelProperty];\r\n }\r\n else {\r\n this.modelId = $scope.model[$scope.modelProperty];\r\n }\r\n if ($scope.forceLoadingFromServer == null || $scope.forceLoadingFromServer == undefined) {\r\n $scope.forceLoadingFromServer = false;\r\n }\r\n if ($scope.forceLoadingFromServer) {\r\n if ($scope.filter == null || $scope.filter == undefined) {\r\n $scope.filter = {};\r\n }\r\n if ($scope.filter.searchStringFilter == null || $scope.filter.searchStringFilter == undefined) {\r\n this.$scope.filter.searchStringFilter = \"\";\r\n }\r\n if ($scope.multiple) {\r\n this.$scope.filter.includedIds = this.modelIds ? this.modelIds : [];\r\n }\r\n else {\r\n this.$scope.filter.includedIds = this.modelId ? [this.modelId] : [];\r\n }\r\n this.selectedItems = this.$scope.multiple ? [] : null;\r\n }\r\n this.loadEntitiesForSelector()\r\n .finally(function () {\r\n if ($scope.forceLoadingFromServer) {\r\n _this.$scope.filter.includedIds = null;\r\n }\r\n });\r\n this.$scope.$watch(\"filter\", function (newValue, oldValue) {\r\n if (angular.equals(newValue, oldValue))\r\n return;\r\n _this.loadEntitiesForSelector();\r\n });\r\n this.$scope.$watch(\"activeEntities\", function (newValue, oldValue) {\r\n if (newValue == oldValue)\r\n return;\r\n _this.loadEntitiesForSelector();\r\n });\r\n this.$scope.$watch(\"model[modelProperty]\", function (newValue, oldValue) {\r\n if (angular.equals(newValue, oldValue) ||\r\n angular.equals(newValue, _this.$scope.multiple ? _this.modelIds : _this.modelId))\r\n return;\r\n if ($scope.forceLoadingFromServer) {\r\n if ($scope.multiple) {\r\n _this.$scope.filter.includedIds = _this.modelIds ? _this.modelIds : [];\r\n }\r\n else {\r\n _this.$scope.filter.includedIds = _this.modelId ? [_this.modelId] : [];\r\n }\r\n _this.loadEntitiesForSelector()\r\n .finally(function () {\r\n _this.$scope.filter.includedIds = null;\r\n _this.setValues();\r\n });\r\n }\r\n else {\r\n _this.setValues();\r\n }\r\n });\r\n }\r\n EntitiesSelect2SelectorController.prototype.loadEntitiesForSelector = function () {\r\n var _this = this;\r\n if (this.$scope.referenceKey != null || !this.$scope.forceLoadingFromServer) {\r\n this.selectedItems = this.$scope.multiple ? [] : null;\r\n }\r\n var promise;\r\n if (this.$scope.referenceKey != null) {\r\n var result = this.referenceApi.getActiveReferenceEntitiesForSelector(this.$scope.referenceKey, new IReferenceEntitiesParams_1.ReferenceEntitiesParams(null, null, undefined, undefined, this.$scope.filter, this.$scope.nullableBusinessUnit), null);\r\n promise = result.then(function (result) {\r\n _this.items = result;\r\n _this.items.forEach(function (item) {\r\n if (_this.$scope.multiple && _this.modelIds.indexOf(item.id) > -1) {\r\n if (_this.selectedItems.filter(function (i) { return i.id == item.id; }).length == 0) {\r\n _this.selectedItems.push(item);\r\n }\r\n }\r\n else if (!_this.$scope.multiple && _this.modelId == item.id) {\r\n _this.selectedItems = item;\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n var result = promise = this.$http.get(this.url.service(this.$scope.urlString), {\r\n params: this.$scope.filter\r\n });\r\n promise = result.then(function (result) {\r\n if (!!_this.$scope.usersAndGroupsSelector && _this.$scope.usersAndGroupsSelector) {\r\n var users = result.data[\"users\"];\r\n var groups = result.data[\"groups\"];\r\n users.forEach(function (u) { return u.isUser = true; });\r\n if (users.length > 0) {\r\n _this.items = users;\r\n groups.forEach(function (g) {\r\n g.isUser = false;\r\n _this.items.push(g);\r\n });\r\n }\r\n else {\r\n groups.forEach(function (g) { return g.isUser = false; });\r\n _this.items = groups;\r\n }\r\n }\r\n else {\r\n _this.items = result.data;\r\n }\r\n _this.items.forEach(function (item) {\r\n if (_this.$scope.multiple && _this.modelIds.indexOf(item.id) > -1) {\r\n if (_this.selectedItems.filter(function (i) { return i.id == item.id; }).length == 0) {\r\n _this.selectedItems.push(item);\r\n }\r\n }\r\n else if (!_this.$scope.multiple && _this.modelId == item.id) {\r\n _this.selectedItems = item;\r\n }\r\n });\r\n });\r\n }\r\n return promise;\r\n };\r\n EntitiesSelect2SelectorController.prototype.setValues = function () {\r\n var _this = this;\r\n if (this.$scope.multiple) {\r\n this.modelIds = this.$scope.model[this.$scope.modelProperty];\r\n }\r\n else {\r\n this.modelId = this.$scope.model[this.$scope.modelProperty];\r\n }\r\n this.selectedItems = this.$scope.multiple ? [] : null;\r\n this.items.forEach(function (item) {\r\n if (_this.$scope.multiple && _this.modelIds.indexOf(item.id) > -1) {\r\n if (_this.selectedItems.filter(function (i) { return i.id == item.id; }).length == 0) {\r\n _this.selectedItems.push(item);\r\n }\r\n }\r\n else if (!_this.$scope.multiple && _this.modelId == item.id) {\r\n _this.selectedItems = item;\r\n }\r\n });\r\n };\r\n EntitiesSelect2SelectorController.prototype.onSelectCallback = function (item, select) {\r\n if (this.$scope.multiple) {\r\n this.modelIds.push(item.id);\r\n this.$scope.model.ownerIds = this.modelIds;\r\n }\r\n else {\r\n this.selectedItems = item;\r\n this.$scope.model[this.$scope.modelProperty] = item.id;\r\n this.modelId = item.id;\r\n }\r\n var result = angular.copy(item);\r\n result.selected = true;\r\n this.$scope.onSelectorChange(result);\r\n };\r\n EntitiesSelect2SelectorController.prototype.onRemoveCallback = function (item, select) {\r\n if (this.$scope.multiple) {\r\n var index = this.modelIds.indexOf(item.id, 0);\r\n if (index > -1) {\r\n this.modelIds.splice(index, 1);\r\n this.$scope.model.ownerIds = this.modelIds;\r\n }\r\n }\r\n else {\r\n this.selectedItems = null;\r\n this.$scope.model[this.$scope.modelProperty] = null;\r\n this.modelId = null;\r\n }\r\n var result = angular.copy(item);\r\n if (result) {\r\n result.selected = false;\r\n }\r\n this.$scope.onSelectorChange(result);\r\n };\r\n EntitiesSelect2SelectorController.prototype.refreshItems = function (searchString) {\r\n if (!this.$scope.forceLoadingFromServer || this.$scope.referenceKey != null ||\r\n this.$scope.filter.searchStringFilter == searchString) {\r\n return;\r\n }\r\n this.$scope.filter.searchStringFilter = searchString;\r\n this.loadEntitiesForSelector();\r\n };\r\n EntitiesSelect2SelectorController.prototype.resetInfScroll = function () {\r\n this.infiniteScroll.currentItems = this.infiniteScroll.numToAdd;\r\n };\r\n EntitiesSelect2SelectorController.prototype.addMoreItems = function () {\r\n this.infiniteScroll.currentItems += this.infiniteScroll.numToAdd;\r\n };\r\n EntitiesSelect2SelectorController.DEFAULT_PLACEHOLDER = \"\";\r\n EntitiesSelect2SelectorController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n UrlService_1.UrlService.NAME,\r\n ReferenceService_1.ReferenceService.NAME\r\n ];\r\n return EntitiesSelect2SelectorController;\r\n})();\r\nexports.EntitiesSelect2SelectorController = EntitiesSelect2SelectorController;\r\nfunction EntitiesSelect2SelectorDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = EntitiesSelect2SelectorController;\r\n directive.scope = {\r\n urlString: \"=?vhsEntitiesUrl\",\r\n referenceKey: \"=?vhsReferenceKey\",\r\n filter: \"=?vhsFilter\",\r\n model: \"=vhsModel\",\r\n modelProperty: \"=vhsModelProperty\",\r\n multiple: \"=vhsMultiple\",\r\n disabled: \"=?vhsDisabled\",\r\n nullable: \"=vhsNullable\",\r\n activeEntities: \"=?vhsActiveEntities\",\r\n nullableBusinessUnit: \"=?vhsNullableBusinessUnit\",\r\n placeholder: \"=?vhsPlaceholder\",\r\n onSelectorChange: \"&vhsOnChange\",\r\n forceLoadingFromServer: \"=?vhsForceLoadingFromServer\",\r\n usersAndGroupsSelector: \"=?vhsUsersAndGroupsSelector\",\r\n };\r\n directive.templateUrl = url.template(\"components/entities-select2-selector.html\");\r\n directive.transclude = true;\r\n return directive;\r\n}\r\nexports.EntitiesSelect2SelectorDirectiveFactory = EntitiesSelect2SelectorDirectiveFactory;\r\nEntitiesSelect2SelectorDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../reference/ReferenceService\":409,\"./../reference/models/IReferenceEntitiesParams\":411,\"./../utils/UrlService\":528}],65:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar ExplanationsController = (function () {\r\n function ExplanationsController($scope) {\r\n this.$scope = $scope;\r\n $scope.vm = this;\r\n }\r\n ExplanationsController.$inject = [\r\n \"$scope\"\r\n ];\r\n return ExplanationsController;\r\n})();\r\nexports.ExplanationsController = ExplanationsController;\r\nfunction ExplanationsDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = ExplanationsController;\r\n directive.scope = {\r\n questions: \"=vhsQuestions\"\r\n };\r\n directive.templateUrl = url.template(\"components/explanations.html\");\r\n return directive;\r\n}\r\nexports.ExplanationsDirectiveFactory = ExplanationsDirectiveFactory;\r\nExplanationsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528}],66:[function(require,module,exports){\nfunction FullScreenDirectiveFactory($location, $rootScope) {\r\n var FULL_SCREEN_LOCATION_PARAM = \"fullScreen\";\r\n var FULL_SCREEN_CLASS = \"full-screen-view\";\r\n function link($scope, element, attributes, controller) {\r\n var checkFullScreenFunction = function () {\r\n if ($location.search()[FULL_SCREEN_LOCATION_PARAM] != undefined) {\r\n element.addClass(FULL_SCREEN_CLASS);\r\n }\r\n else {\r\n element.removeClass(FULL_SCREEN_CLASS);\r\n }\r\n };\r\n $rootScope.$on('$locationChangeSuccess', function ($locationEvent) {\r\n checkFullScreenFunction();\r\n });\r\n checkFullScreenFunction();\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link\r\n };\r\n return directive;\r\n}\r\nexports.FullScreenDirectiveFactory = FullScreenDirectiveFactory;\r\nFullScreenDirectiveFactory.$inject = [\r\n \"$location\",\r\n \"$rootScope\"\r\n];\r\n},{}],67:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nfunction GridConfigurationDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n controller.setIsConfigurable(true);\r\n $scope[\"_showPageSizeSelector\"] = true;\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/grid-configuration.html\");\r\n directive.link = link;\r\n directive.require = \"^vhsGrid\";\r\n return directive;\r\n}\r\nexports.GridConfigurationDirectiveFactory = GridConfigurationDirectiveFactory;\r\nGridConfigurationDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../utils/UrlService\":528}],68:[function(require,module,exports){\nvar SortEntry_1 = require(\"./../SortEntry\");\r\nvar Storage_1 = require(\"./../infrastructure/Storage\");\r\nvar TimeoutUtils_1 = require(\"./../utils/TimeoutUtils\");\r\nvar ObjectFieldResolver_1 = require(\"./../utils/ObjectFieldResolver\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar ElementSortingInfo = (function () {\r\n function ElementSortingInfo() {\r\n this.index = null;\r\n this.order = null;\r\n this.mandatory = false;\r\n }\r\n ElementSortingInfo.fromString = function (str) {\r\n var info = null;\r\n if (str) {\r\n var strParts = str.split(/[ ()]/g);\r\n info = new ElementSortingInfo();\r\n if (strParts.length > 0) {\r\n info.sortPath = strParts[0];\r\n }\r\n if (strParts.length > 1) {\r\n info.order = strParts[1] == \"asc\" ? SortEntry_1.SortOrder.ASC : SortEntry_1.SortOrder.DESC;\r\n }\r\n if (strParts.length > 2) {\r\n var index = strParts[2];\r\n if (index.charAt(0) == \"=\") {\r\n info.mandatory = true;\r\n index = index.substr(1);\r\n }\r\n info.index = +index;\r\n }\r\n }\r\n return info;\r\n };\r\n return ElementSortingInfo;\r\n})();\r\nvar GridController = (function () {\r\n function GridController($scope, $timeout, $compile, localStorage) {\r\n this.$timeout = $timeout;\r\n this.$compile = $compile;\r\n this.localStorage = localStorage;\r\n this.gridUuid = null;\r\n this.hasConfiguration = false;\r\n this.hasChangesForTemplateReload = false;\r\n this.SORTABLE_HEADERS_CLASSES = [\"sortable\", \"sortable-desc\", \"sortable-asc\", \"sortable-0\", \"sortable-1\", \"sortable-2\", \"sortable-3\"];\r\n this.SEARCH_ELEMENTS_SELECTOR = \"[data-vhs-auto-search] select,[data-vhs-auto-search] input\";\r\n this.MAX_SORT_INDEX = 3;\r\n this.MAX_SHOWN_PAGES = 5;\r\n $scope.gridVm = this;\r\n this.parentScope = $scope.$parent;\r\n this.directiveScope = $scope;\r\n this.timeoutUtils = new TimeoutUtils_1.TimeoutUtils();\r\n }\r\n GridController.prototype.init = function (element, modelPathInController, uuid, tableTemplate) {\r\n this.gridContainer = element;\r\n this.tableContainer = this.gridContainer.find(GridController.TABLE_SELECTOR);\r\n this.tableTemplate = tableTemplate;\r\n this.gridUuid = uuid ? uuid : \"grid_\" + new Date().getTime();\r\n if (typeof modelPathInController != 'undefined') {\r\n this.gridModel = ObjectFieldResolver_1.ObjectFieldResolver.findForPath(this.parentScope, modelPathInController);\r\n this.gridModel.addLoadingListener(this);\r\n this.gridModel.addColumnVisibilityListener(this);\r\n this.gridModel.addPageSizeListener(this);\r\n }\r\n this.collectGridColumns();\r\n this.loadColumnsConfigurationFromStorage();\r\n this.loadFilterFromStorage();\r\n this.addPredefinedSorting();\r\n this.addAutoSearchListeners();\r\n this.initDomElementsHandlers();\r\n this.processTemplate();\r\n this.gridModel.loadCurrentPage();\r\n };\r\n GridController.prototype.initDomElementsHandlers = function () {\r\n this.addHeadersSortingHandlers();\r\n this.updateHeaderClasses();\r\n };\r\n GridController.prototype.setIsConfigurable = function (hasConfiguration) {\r\n this.hasConfiguration = hasConfiguration;\r\n if (hasConfiguration) {\r\n this.processTemplate();\r\n }\r\n };\r\n GridController.prototype.applyFilter = function () {\r\n this.gridModel.loadWithDelay(this.timeoutUtils, this);\r\n };\r\n GridController.prototype.addSorting = function (fieldName) {\r\n var info = this.findSortEntryInfo(fieldName);\r\n var sortEntry = null;\r\n if (info != null) {\r\n sortEntry = info.sortEntry;\r\n }\r\n if (sortEntry == null) {\r\n sortEntry = SortEntry_1.SortEntry.asc(fieldName);\r\n this.gridModel.sorting.push(sortEntry);\r\n }\r\n else {\r\n sortEntry.reverseOrder();\r\n }\r\n this.gridModel.loadCurrentPage();\r\n return sortEntry;\r\n };\r\n GridController.prototype.resetSorting = function (fieldName) {\r\n var info = this.findSortEntryInfo(fieldName);\r\n var foundIndex = -1;\r\n if (info != null) {\r\n foundIndex = info.index;\r\n }\r\n if (foundIndex > -1) {\r\n this.gridModel.sorting.splice(foundIndex, 1);\r\n }\r\n this.gridModel.loadCurrentPage();\r\n };\r\n GridController.prototype.goToPage = function (pageNumber) {\r\n if (this.gridModel.totalPageCount < 10) {\r\n pageNumber = pageNumber % 10;\r\n }\r\n else if (pageNumber == -1) {\r\n pageNumber = null;\r\n }\r\n if (pageNumber == null) {\r\n }\r\n else if (this.gridModel.currentPage != pageNumber && pageNumber >= 0 && pageNumber < this.gridModel.totalPageCount) {\r\n this.gridModel.loadPage(pageNumber);\r\n }\r\n else if (pageNumber < 0 || pageNumber > this.gridModel.totalPageCount) {\r\n this.gridModel.loadPage(this.gridModel.currentPage);\r\n }\r\n else {\r\n this.gridModel.loadPage(this.gridModel.currentPage);\r\n }\r\n };\r\n GridController.prototype.getPagesForPagination = function () {\r\n var currentPage = this.gridModel.currentPage;\r\n var totalPages = this.gridModel.totalPageCount;\r\n var pages = [];\r\n for (var i = currentPage; i >= 0 && (currentPage - i) < this.MAX_SHOWN_PAGES; i--) {\r\n pages.push(i);\r\n }\r\n pages = pages.reverse();\r\n for (var i = currentPage + 1; i < totalPages && (i - currentPage) < this.MAX_SHOWN_PAGES; i++) {\r\n pages.push(i);\r\n }\r\n return pages;\r\n };\r\n GridController.prototype.startLoading = function () {\r\n if (this.gridModel.showSpinner) {\r\n this.gridContainer.addClass(\"loading\");\r\n }\r\n };\r\n GridController.prototype.endLoading = function () {\r\n if (this.gridModel.showSpinner) {\r\n this.gridContainer.removeClass(\"loading\");\r\n }\r\n };\r\n GridController.prototype.onColumnVisibilityChange = function (column) {\r\n if (this.hasConfiguration && column != null) {\r\n this.hasChangesForTemplateReload = true;\r\n this.processTemplate();\r\n }\r\n };\r\n GridController.prototype.upColumnPosition = function (column) {\r\n if (column && this.hasConfiguration) {\r\n if (column.position > 0) {\r\n this.doUpdateColumnPosition(column, column.position - 1);\r\n }\r\n }\r\n };\r\n GridController.prototype.downColumnPosition = function (column) {\r\n if (column && this.hasConfiguration) {\r\n if (column.position < this.gridModel.gridColumns.length - 1) {\r\n this.doUpdateColumnPosition(column, column.position + 1);\r\n }\r\n }\r\n };\r\n GridController.prototype.doUpdateColumnPosition = function (column, newPosition) {\r\n var currentColumnInPosition = this.findColumnByPosition(newPosition);\r\n if (currentColumnInPosition) {\r\n currentColumnInPosition.position = column.position;\r\n }\r\n column.position = newPosition;\r\n this.hasChangesForTemplateReload = true;\r\n this.processTemplate();\r\n };\r\n GridController.prototype.findColumnByPosition = function (targetPosition) {\r\n for (var i = 0; i < this.gridModel.gridColumns.length; i++) {\r\n var column = this.gridModel.gridColumns[i];\r\n if (column.position == targetPosition) {\r\n return column;\r\n }\r\n }\r\n };\r\n GridController.prototype.findColumnByIndex = function (columnIndex) {\r\n return this.gridModel.gridColumns[columnIndex];\r\n };\r\n GridController.prototype.fixColumnPositions = function () {\r\n var orderedColumns = [];\r\n for (var i = 0; i < this.gridModel.gridColumns.length; i++) {\r\n orderedColumns.push(this.gridModel.gridColumns[i]);\r\n }\r\n orderedColumns.sort(function (o1, o2) {\r\n if (o1.fixedColumn && o2.fixedColumn)\r\n return 0;\r\n if (o1.fixedColumn && !o2.fixedColumn)\r\n return 1;\r\n if (!o1.fixedColumn && o2.fixedColumn)\r\n return -1;\r\n if (!o1.position && !o2.position)\r\n return o1.index > o2.index ? 1 : -1;\r\n if (o1.position && !o2.position)\r\n return 1;\r\n if (!o1.position && o2.position)\r\n return -1;\r\n if (o1.position == o2.position) {\r\n return o1.index > o2.index ? 1 : -1;\r\n }\r\n return o1.position > o2.position ? 1 : -1;\r\n });\r\n for (var i = 0; i < orderedColumns.length; i++) {\r\n if (orderedColumns[i].position != i) {\r\n this.hasChangesForTemplateReload = true;\r\n }\r\n orderedColumns[i].position = i;\r\n }\r\n };\r\n GridController.prototype.onChangePageSize = function () {\r\n if (!this.gridModel.pageSize)\r\n return;\r\n if (isNaN(this.gridModel.pageSize)) {\r\n this.gridModel.pageSize = IGridModel_1.GridModel.DEFAULT_PAGE_SIZE;\r\n }\r\n if (this.gridModel.pageSize > IGridModel_1.GridModel.MAX_USER_PAGE_SIZE) {\r\n this.gridModel.pageSize = IGridModel_1.GridModel.MAX_USER_PAGE_SIZE;\r\n }\r\n this.gridModel.pageSize = Math.round(this.gridModel.pageSize);\r\n this.applyFilter();\r\n };\r\n GridController.prototype.loadColumnsConfigurationFromStorage = function () {\r\n if (this.gridModel) {\r\n var persistedModel = this.localStorage.get(this.gridUuid);\r\n if (persistedModel) {\r\n this.gridModel.pageSize = persistedModel.pageSize;\r\n if (!this.gridModel.pageSize || isNaN(this.gridModel.pageSize)) {\r\n this.gridModel.pageSize = IGridModel_1.GridModel.DEFAULT_PAGE_SIZE;\r\n }\r\n else {\r\n this.gridModel.pageSize = Math.round(this.gridModel.pageSize);\r\n }\r\n for (var i = 0; i < this.gridModel.gridColumns.length; i++) {\r\n var column = this.gridModel.gridColumns[i];\r\n for (var j = 0; j < persistedModel.gridColumns.length; j++) {\r\n var persistedColumn = persistedModel.gridColumns[j];\r\n if (persistedColumn.index == column.index) {\r\n if (column.visible != persistedColumn.visible) {\r\n this.hasChangesForTemplateReload = true;\r\n column.visible = persistedColumn.visible;\r\n }\r\n if (persistedColumn.position != undefined && persistedColumn.position != null\r\n && column.position != persistedColumn.position) {\r\n this.hasChangesForTemplateReload = true;\r\n column.position = persistedColumn.position;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n this.fixColumnPositions();\r\n this.gridModel.recalculateVisibleColumnsCount();\r\n }\r\n }\r\n };\r\n GridController.prototype.loadFilterFromStorage = function () {\r\n if (this.gridModel) {\r\n var persistedModel = this.localStorage.get(this.gridUuid);\r\n if (persistedModel) {\r\n for (var fieldName in persistedModel.filter) {\r\n if (persistedModel.filter.hasOwnProperty(fieldName) && this.gridModel.nonPersistedFilterFields.indexOf(fieldName) < 0) {\r\n this.gridModel.filter[fieldName] = angular.copy(persistedModel.filter[fieldName]);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n GridController.prototype.saveGridConfiguration = function () {\r\n this.localStorage.put(this.gridUuid, IGridModel_1.PersistedGridModelConfiguration.fromGridModel(this.gridModel));\r\n };\r\n GridController.prototype.findSortEntryInfo = function (fieldName) {\r\n for (var i = 0; i < this.gridModel.sorting.length; i++) {\r\n var sortEntry = this.gridModel.sorting[i];\r\n if (sortEntry.fieldName === fieldName) {\r\n return { sortEntry: sortEntry, index: i };\r\n }\r\n }\r\n return null;\r\n };\r\n GridController.prototype.setHeaderClass = function (targetClasses, element) {\r\n for (var i = 0; i < this.SORTABLE_HEADERS_CLASSES.length; i++) {\r\n var elClass = this.SORTABLE_HEADERS_CLASSES[i];\r\n if (targetClasses.indexOf(elClass) != -1) {\r\n element.addClass(elClass);\r\n }\r\n else {\r\n element.removeClass(elClass);\r\n }\r\n }\r\n };\r\n GridController.prototype.updateHeaderClasses = function () {\r\n var self = this;\r\n this.tableContainer.find(GridController.SORTABLE_HEADERS_SELECTOR).each(function (index, el) {\r\n var jQueryElement = $(el);\r\n var sortString = ElementSortingInfo.fromString(jQueryElement.attr('data-sortable')).sortPath;\r\n var info = self.findSortEntryInfo(sortString);\r\n var targetClasses = [];\r\n if (info != null) {\r\n if (info.index < self.MAX_SORT_INDEX) {\r\n targetClasses.push(\"sortable-\" + info.index);\r\n }\r\n targetClasses.push(info.sortEntry.sortOrder == SortEntry_1.SortOrder.ASC ? \"sortable-asc\" : \"sortable-desc\");\r\n }\r\n else {\r\n targetClasses.push(\"sortable\");\r\n }\r\n self.setHeaderClass(targetClasses, jQueryElement);\r\n });\r\n };\r\n GridController.prototype.collectGridColumns = function () {\r\n var self = this;\r\n this.tableContainer.find(GridController.TABLE_HEADERS_SELECTOR).each(function (index, th) {\r\n var el = $(th);\r\n var column = new IGridModel_1.GridColumn();\r\n column.index = index;\r\n column.position = index;\r\n column.visible = true;\r\n var columnExcluded = el.attr(\"data-column-always-visible\");\r\n var fixedColumn = el.attr(\"data-column-fixed\");\r\n if (columnExcluded != undefined) {\r\n column.alwaysVisible = true;\r\n }\r\n if (fixedColumn != undefined) {\r\n column.fixedColumn = true;\r\n }\r\n var columnName = el.attr(\"data-column-name\");\r\n if (columnName) {\r\n column.title = columnName;\r\n }\r\n else {\r\n column.title = el.text();\r\n }\r\n self.gridModel.gridColumns.push(column);\r\n });\r\n this.gridModel.recalculateVisibleColumnsCount();\r\n };\r\n GridController.prototype.addHeadersSortingHandlers = function () {\r\n var _this = this;\r\n this.tableContainer.find(GridController.SORTABLE_HEADERS_SELECTOR).each(function (index, th) {\r\n var el = $(th);\r\n var sortingInfo = ElementSortingInfo.fromString(el.attr(\"data-sortable\"));\r\n var sortString = sortingInfo.sortPath;\r\n el.click(function (event) {\r\n if (!event.shiftKey) {\r\n _this.resetSortingWithoutLoadCurrentPage(sortString);\r\n _this.updateHeaderClasses();\r\n }\r\n var sortEntry = _this.addSorting(sortString);\r\n var sortIndex = _this.gridModel.sorting.indexOf(sortEntry);\r\n var targetClasses = [];\r\n if (sortIndex < _this.MAX_SORT_INDEX) {\r\n targetClasses.push(\"sortable-\" + sortIndex);\r\n }\r\n targetClasses.push(sortEntry.sortOrder === SortEntry_1.SortOrder.ASC ? \"sortable-asc\" : \"sortable-desc\");\r\n _this.setHeaderClass(targetClasses, el);\r\n });\r\n if (!sortingInfo.mandatory) {\r\n el.dblclick(function (event) {\r\n _this.resetSorting(sortString);\r\n _this.updateHeaderClasses();\r\n });\r\n }\r\n });\r\n };\r\n GridController.prototype.resetSortingWithoutLoadCurrentPage = function (sortString) {\r\n if (this.gridModel.sorting.length != 0) {\r\n if (this.gridModel.sorting[0].fieldName != sortString) {\r\n var sorting = this.gridModel.sorting;\r\n sorting.splice(0, sorting.length);\r\n }\r\n }\r\n };\r\n GridController.prototype.addPredefinedSorting = function () {\r\n var predefinedSorting = [];\r\n var sortFields = [];\r\n this.tableContainer.find(GridController.SORTABLE_HEADERS_SELECTOR).each(function (index, th) {\r\n var el = $(th);\r\n var sortingInfo = ElementSortingInfo.fromString(el.attr('data-sortable'));\r\n sortFields.push(sortingInfo.sortPath);\r\n if (sortingInfo.order != null) {\r\n predefinedSorting.push(sortingInfo);\r\n }\r\n });\r\n predefinedSorting.sort(function (o1, o2) {\r\n if (o1.index == null && o2.index == null)\r\n return 0;\r\n if (o1.index != null && o2.index == null)\r\n return -1;\r\n if (o1.index == null && o2.index != null)\r\n return 1;\r\n if (o1.index > o2.index)\r\n return 1;\r\n if (o1.index < o2.index)\r\n return -1;\r\n return 0;\r\n });\r\n var persistedSorting = [];\r\n var persistedModel = this.localStorage.get(this.gridUuid);\r\n if (persistedModel && persistedModel.sortEntries) {\r\n for (var i = 0; i < persistedModel.sortEntries.length; i++) {\r\n if (sortFields.indexOf(persistedModel.sortEntries[i].fieldName) >= 0) {\r\n persistedSorting.push(persistedModel.sortEntries[i]);\r\n }\r\n }\r\n for (var i = predefinedSorting.length - 1; i >= 0; i--) {\r\n var predefinedSortingInfo = predefinedSorting[i];\r\n if (predefinedSortingInfo.mandatory) {\r\n var persistedIndex = -1;\r\n for (var j = 0; j < persistedSorting.length; j++) {\r\n if (persistedSorting[j].fieldName == predefinedSortingInfo.sortPath) {\r\n persistedIndex = j;\r\n break;\r\n }\r\n }\r\n if (persistedIndex >= 0) {\r\n predefinedSorting[i].order = persistedSorting[persistedIndex].sortOrder;\r\n persistedSorting.splice(persistedIndex, 1);\r\n }\r\n }\r\n else {\r\n predefinedSorting.splice(i, 1);\r\n }\r\n }\r\n for (var i = 0; i < persistedSorting.length; i++) {\r\n var sortingInfo = new ElementSortingInfo();\r\n sortingInfo.order = persistedSorting[i].sortOrder;\r\n sortingInfo.sortPath = persistedSorting[i].fieldName;\r\n predefinedSorting.push(sortingInfo);\r\n }\r\n }\r\n for (var i = 0; i < predefinedSorting.length; i++) {\r\n var sorting = predefinedSorting[i];\r\n this.addPredefinedSortingToModel(sorting.sortPath, sorting.order);\r\n }\r\n };\r\n GridController.prototype.addPredefinedSortingToModel = function (fieldName, sortOrder) {\r\n var sortEntry = new SortEntry_1.SortEntry(fieldName, sortOrder);\r\n if (this.findSortEntryInfo(fieldName) == null) {\r\n this.gridModel.sorting.push(sortEntry);\r\n }\r\n };\r\n GridController.prototype.addAutoSearchListeners = function () {\r\n var self = this;\r\n this.gridContainer.find(this.SEARCH_ELEMENTS_SELECTOR).each(function (index, el) {\r\n var inputElement = $(el);\r\n var func = function (event) {\r\n self.applyFilter();\r\n };\r\n switch (inputElement.prop(\"type\").toLowerCase()) {\r\n case 'checkbox':\r\n case 'radio':\r\n inputElement.click(func);\r\n break;\r\n case 'text':\r\n inputElement.keyup(func);\r\n break;\r\n default:\r\n inputElement.change(func);\r\n }\r\n });\r\n };\r\n GridController.prototype.processTemplate = function () {\r\n if (this.hasChangesForTemplateReload) {\r\n this.tableContainer.html(this.tableTemplate);\r\n var cellsPositionsMap = new Map();\r\n for (var i = 0; i < this.gridModel.gridColumns.length; i++) {\r\n var column = this.gridModel.gridColumns[i];\r\n cellsPositionsMap.set(column.position, column.index);\r\n }\r\n this.processTableCellsInTemplate(this.tableContainer.find(GridController.TABLE_HEADERS_SELECTOR), cellsPositionsMap);\r\n this.processTableCellsInTemplate(this.tableContainer.find(GridController.TABLE_CELLS_IN_TEMPLATE_SELECTOR), cellsPositionsMap);\r\n this.processTableCellsInTemplate(this.tableContainer.find(GridController.TABLE_CELLS_IN_TEMPLATE_SELECTOR_FOR_REPEAT_START), cellsPositionsMap);\r\n this.processTableCellsInTemplate(this.tableContainer.find(GridController.TABLE_CELLS_IN_TEMPLATE_SELECTOR_FOR_REPEAT_END), cellsPositionsMap);\r\n this.$compile(this.tableContainer.contents())(this.directiveScope);\r\n this.hasChangesForTemplateReload = false;\r\n this.initDomElementsHandlers();\r\n }\r\n };\r\n GridController.prototype.processTableCellsInTemplate = function (cells, positionsMap) {\r\n var _this = this;\r\n var hideColumnFunc = function (index, td) {\r\n var column = _this.findColumnByIndex(index);\r\n if (!column.fixedColumn && !column.visible) {\r\n $(td).remove();\r\n }\r\n };\r\n var cellsPositions = new Map();\r\n for (var position = 0; position < this.gridModel.gridColumns.length; position++) {\r\n var positionIndex = positionsMap.get(position);\r\n if (positionIndex != null) {\r\n var cellInPosition = cells.eq(positionIndex);\r\n cellsPositions.set(position, cellInPosition);\r\n }\r\n }\r\n for (var position = 0; position < this.gridModel.gridColumns.length; position++) {\r\n var cellInPosition = cellsPositions.get(position);\r\n var previousCell = position > 0 ? cellsPositions.get(position - 1) : null;\r\n if (previousCell) {\r\n $(cellInPosition).insertAfter($(previousCell));\r\n }\r\n }\r\n cells.each(hideColumnFunc);\r\n };\r\n GridController.TABLE_SELECTOR = \"table[data-vhs-table] \";\r\n GridController.SORTABLE_HEADERS_SELECTOR = \"tr th[data-sortable]\";\r\n GridController.TABLE_HEADERS_SELECTOR = \"thead tr th\";\r\n GridController.TABLE_CELLS_IN_TEMPLATE_SELECTOR = \"tbody tr[ng-repeat] td\";\r\n GridController.TABLE_CELLS_IN_TEMPLATE_SELECTOR_FOR_REPEAT_START = \"tbody tr[ng-repeat-start]:not([data-columns-always-visible]) td\";\r\n GridController.TABLE_CELLS_IN_TEMPLATE_SELECTOR_FOR_REPEAT_END = \"tbody tr[ng-repeat-end]:not([data-columns-always-visible]) td\";\r\n GridController.$inject = [\r\n \"$scope\",\r\n \"$timeout\",\r\n \"$compile\",\r\n Storage_1.Storages.LOCAL_NAME\r\n ];\r\n return GridController;\r\n})();\r\nexports.GridController = GridController;\r\nfunction GridDirectiveFactory() {\r\n var tableTemplate;\r\n function link($scope, element, attributes, controller, transclude) {\r\n element.addClass(\"grid-container\");\r\n controller.init(element, attributes.gridModelPath, attributes.vhsGridUuid, tableTemplate);\r\n if (attributes.vhsHasConfiguration) {\r\n controller.setIsConfigurable(true);\r\n }\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.compile = function compile(element, templateAttributes, transclude) {\r\n tableTemplate = $(element).find(GridController.TABLE_SELECTOR).html();\r\n return {\r\n pre: null,\r\n post: link\r\n };\r\n };\r\n directive.controller = GridController;\r\n directive.scope = true;\r\n directive.trunsclude = false;\r\n return directive;\r\n}\r\nexports.GridDirectiveFactory = GridDirectiveFactory;\r\n},{\"./../IGridModel\":3,\"./../SortEntry\":8,\"./../infrastructure/Storage\":295,\"./../utils/ObjectFieldResolver\":519,\"./../utils/TimeoutUtils\":526}],69:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nfunction GridEmptyDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n $scope[\"_emptyMessage\"] = attributes && attributes.vhsEmptyMessage\r\n ? attributes.vhsEmptyMessage\r\n : 'No records found';\r\n }\r\n var directive = {};\r\n directive.link = link;\r\n directive.restrict = \"A\";\r\n directive.replace = true;\r\n directive.templateUrl = url.template(\"components/grid-empty.html\");\r\n directive.require = \"^?vhsGrid\";\r\n return directive;\r\n}\r\nexports.GridEmptyDirectiveFactory = GridEmptyDirectiveFactory;\r\nGridEmptyDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../utils/UrlService\":528}],70:[function(require,module,exports){\nvar ObjectFieldResolver_1 = require(\"./../utils/ObjectFieldResolver\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nfunction GridExternalConfigurationFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n if (typeof attributes.gridModelPath != 'undefined') {\r\n var obj = ObjectFieldResolver_1.ObjectFieldResolver.findForPath($scope, attributes.gridModelPath);\r\n $scope[\"gridVm\"] = { gridModel: obj };\r\n $scope[\"_showPageSizeSelector\"] = !attributes.hidePageSizeSelector;\r\n }\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/grid-configuration.html\");\r\n directive.link = link;\r\n return directive;\r\n}\r\nexports.GridExternalConfigurationFactory = GridExternalConfigurationFactory;\r\nGridExternalConfigurationFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../utils/ObjectFieldResolver\":519,\"./../utils/UrlService\":528}],71:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nfunction GridPaginationDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/grid-pagination.html\");\r\n directive.require = \"^vhsGrid\";\r\n return directive;\r\n}\r\nexports.GridPaginationDirectiveFactory = GridPaginationDirectiveFactory;\r\nGridPaginationDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../utils/UrlService\":528}],72:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar BundleFileType_1 = require(\"../bundles/models/BundleFileType\");\r\nvar VhsLoadBundleFileController = (function () {\r\n function VhsLoadBundleFileController($scope, $http) {\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n }\r\n VhsLoadBundleFileController.prototype.init = function ($scope, element) {\r\n this.element = element;\r\n this.bundleFile = $scope.bundleFile;\r\n this.processBundleFile();\r\n };\r\n VhsLoadBundleFileController.prototype.processBundleFile = function () {\r\n var _this = this;\r\n if (!this.bundleFile || !this.bundleFile.url) {\r\n return;\r\n }\r\n if (this.bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.JS]) {\r\n return this.$http.get(this.bundleFile.url, this.getHttpConfig())\r\n .then(function (result) { return result.data; })\r\n .then(function (content) { return _this.processFileContent(content, _this.bundleFile); });\r\n }\r\n else if (this.bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.CSS]) {\r\n this.element.replaceWith(\"\");\r\n }\r\n else if (this.bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.IMAGE] && this.element.is('img')) {\r\n this.element.attr(\"src\", this.bundleFile.url);\r\n }\r\n else {\r\n console.log('Incorrect bundle file type for load: ' + this.bundleFile.type);\r\n }\r\n };\r\n VhsLoadBundleFileController.prototype.processFileContent = function (fileContent, bundleFile) {\r\n if (fileContent && bundleFile) {\r\n switch (bundleFile.type) {\r\n case BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.JS]:\r\n $.globalEval('\"use strict\";' + fileContent);\r\n break;\r\n }\r\n }\r\n };\r\n VhsLoadBundleFileController.prototype.getHttpConfig = function () {\r\n return { cache: true, withoutAuthorization: true, ignore404: true };\r\n };\r\n VhsLoadBundleFileController.$inject = [\r\n \"$scope\",\r\n \"$http\"\r\n ];\r\n return VhsLoadBundleFileController;\r\n})();\r\nexports.VhsLoadBundleFileController = VhsLoadBundleFileController;\r\nfunction LoadBundleFileDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"AE\",\r\n link: link,\r\n controller: VhsLoadBundleFileController,\r\n scope: {\r\n bundleFile: \"=vhsBundleFile\"\r\n }\r\n };\r\n return directive;\r\n}\r\nexports.LoadBundleFileDirectiveFactory = LoadBundleFileDirectiveFactory;\r\nLoadBundleFileDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../bundles/models/BundleFileType\":40,\"../utils/UrlService\":528}],73:[function(require,module,exports){\nvar AuthRouter_1 = require(\"./../urls/AuthRouter\");\r\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar Event_1 = require(\"./../authcore/Event\");\r\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar MainRouter_1 = require(\"./../urls/MainRouter\");\r\nvar PersonalRouter_1 = require(\"./../urls/PersonalRouter\");\r\nvar UsersRouter_1 = require(\"./../urls/UsersRouter\");\r\nvar QuizzesRouter_1 = require(\"../urls/QuizzesRouter\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar NewsRouter_1 = require(\"../urls/NewsRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar Event_2 = require(\"./models/Event\");\r\nvar LoginController = (function () {\r\n function LoginController($location, $scope, $window, $rootScope, authApi, mainRouter, authRouter, usersRouter, personalRouter, quizzesRouter, materialsRouter, newsRouter, coursesRouter, homeRouter, learningPathRouter, authManager, settingsService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.$rootScope = $rootScope;\r\n this.authApi = authApi;\r\n this.mainRouter = mainRouter;\r\n this.authRouter = authRouter;\r\n this.usersRouter = usersRouter;\r\n this.personalRouter = personalRouter;\r\n this.quizzesRouter = quizzesRouter;\r\n this.materialsRouter = materialsRouter;\r\n this.newsRouter = newsRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.homeRouter = homeRouter;\r\n this.learningPathRouter = learningPathRouter;\r\n this.authManager = authManager;\r\n this.settingsService = settingsService;\r\n this.freePlanLimits = AppProperties_1.AppProperties.freePlanLimits.toLowerCase() == \"true\";\r\n $scope.vm = this;\r\n this.authenticated = authManager.isAuthenticated();\r\n if (this.authenticated) {\r\n this.getCurrentUser();\r\n this.updatePermissions();\r\n this.changeDataForMenu();\r\n this.settingsService.getCalendarVisibility().then(function (result) {\r\n _this.calendarVisibility = result;\r\n });\r\n }\r\n $scope.$on(Event_1.Event.LOGGED_ON, function () {\r\n _this.authenticated = true;\r\n _this.getCurrentUser();\r\n _this.updatePermissions();\r\n _this.settingsService.getCalendarVisibility().then(function (result) {\r\n _this.calendarVisibility = result;\r\n });\r\n });\r\n $scope.$on(Event_1.Event.LOGGED_OFF, function () {\r\n _this.authenticated = false;\r\n _this.calendarVisibility = false;\r\n _this.systemPermissions = {};\r\n });\r\n $scope.$watch(\"vhsMenuMap\", function () {\r\n _this.analyticsData = _this.$scope.vhsMenuMap.get(MenuHelper_1.MenuHelper.ANALYTICS_MENU_KEY);\r\n _this.administrationData = _this.$scope.vhsMenuMap.get(MenuHelper_1.MenuHelper.ADMINISTRATION_MENU_KEY);\r\n });\r\n }\r\n LoginController.prototype.changeDataForMenu = function () {\r\n this.analyticsData = this.$scope.vhsMenuMap.get(MenuHelper_1.MenuHelper.ANALYTICS_MENU_KEY);\r\n this.administrationData = this.$scope.vhsMenuMap.get(MenuHelper_1.MenuHelper.ADMINISTRATION_MENU_KEY);\r\n };\r\n LoginController.prototype.getCurrentUser = function () {\r\n var _this = this;\r\n this.authApi.getCurrentUser().then(function (u) {\r\n _this.user = u;\r\n });\r\n };\r\n LoginController.prototype.updatePermissions = function () {\r\n var _this = this;\r\n this.authApi.getCurrentUser().then(function (u) {\r\n _this.systemPermissions = u.permissions;\r\n });\r\n };\r\n LoginController.prototype.redirectToLoginPage = function () {\r\n this.$location.url(this.authRouter.logonUrl());\r\n };\r\n LoginController.prototype.isShowAnalytics = function () {\r\n return this.analyticsData && this.analyticsData.items.length > 0\r\n && this.analyticsData.items.filter(function (item) { return item.allowed; }).length > 0;\r\n };\r\n LoginController.prototype.isShowAdministration = function () {\r\n return this.administrationData && this.administrationData.items.length > 0\r\n && this.administrationData.items.filter(function (item) { return item.allowed; }).length > 0;\r\n };\r\n LoginController.prototype.openTabletNavigationMenu = function () {\r\n $(\"#vhs-right-mobile-sidebar .panel-wrap .panel\").scrollTop(0);\r\n document.getElementById(\"vhs-right-mobile-sidebar\").classList.add(\"in\");\r\n $(\"body\").css(\"overflow\", \"hidden\");\r\n };\r\n LoginController.prototype.closeTabletNavigationMenu = function () {\r\n document.getElementById(\"vhs-right-mobile-sidebar\").classList.remove(\"in\");\r\n $(\"body\").css(\"overflow\", \"auto\");\r\n };\r\n LoginController.prototype.isCustomDomainUrl = function () {\r\n var customDomain = this.authRouter.getCustomDomainFromUrl(this.$window.location);\r\n return customDomain && customDomain.length > 0;\r\n };\r\n LoginController.prototype.redirectToFreePlanPage = function () {\r\n this.$location.url(this.usersRouter.startTrialUrl());\r\n };\r\n LoginController.prototype.openHelpBot = function () {\r\n this.$rootScope.$broadcast(Event_2.Event.HELP_BOT_OPEN_CLOSE);\r\n };\r\n LoginController.$inject = [\r\n \"$location\",\r\n \"$scope\",\r\n \"$window\",\r\n \"$rootScope\",\r\n AuthService_1.AuthService.NAME,\r\n MainRouter_1.MainRouter.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n PersonalRouter_1.PersonalRouter.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n NewsRouter_1.NewsRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n HomeRouter_1.HomeRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n SettingsService_1.SettingsService.NAME\r\n ];\r\n return LoginController;\r\n})();\r\nexports.LoginController = LoginController;\r\nfunction LoginDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/login.html\");\r\n directive.link = link;\r\n directive.scope = {\r\n vhsMenuMap: \"=?\",\r\n vhsMenuItemsVisibility: \"=?\",\r\n vhsMenuBuItemsVisibility: \"=?\",\r\n };\r\n directive.controller = LoginController;\r\n return directive;\r\n}\r\nexports.LoginDirectiveFactory = LoginDirectiveFactory;\r\nLoginDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../settings/SettingsService\":427,\"../urls/CoursesRouter\":468,\"../urls/HomeRouter\":473,\"../urls/LearningPathsRouter\":477,\"../urls/MaterialsRouter\":480,\"../urls/NewsRouter\":481,\"../urls/QuizzesRouter\":486,\"../utils/AppProperties\":\"AppProperties\",\"../utils/MenuHelper\":517,\"./../auth/AuthService\":18,\"./../authcore/AuthManager\":25,\"./../authcore/Event\":27,\"./../urls/AuthRouter\":463,\"./../urls/MainRouter\":479,\"./../urls/PersonalRouter\":484,\"./../urls/UsersRouter\":493,\"./../utils/UrlService\":528,\"./models/Event\":170}],74:[function(require,module,exports){\nfunction MaxLengthFilterFactory() {\r\n return function (value, max, tail) {\r\n if (!value)\r\n return '';\r\n max = parseInt(max, 10);\r\n if (!max)\r\n return value;\r\n if (value.length <= max)\r\n return value;\r\n var cutValue = value.substr(0, max);\r\n return '' + cutValue + (tail || ' …') + '';\r\n };\r\n}\r\nexports.MaxLengthFilterFactory = MaxLengthFilterFactory;\r\n},{}],75:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar MultipleCheckboxSelectorController = (function () {\r\n function MultipleCheckboxSelectorController($scope) {\r\n this.$scope = $scope;\r\n $scope.vm = this;\r\n this.pushDataModel();\r\n }\r\n MultipleCheckboxSelectorController.prototype.pushDataModel = function () {\r\n for (var i = 0; i < this.$scope.entities.length; ++i) {\r\n var entity = this.$scope.entities[i];\r\n entity[\"selected\"] = false;\r\n for (var j = 0; j < this.$scope.model.length; ++j) {\r\n var id = this.$scope.model[j];\r\n if (entity.id == id) {\r\n entity[\"selected\"] = true;\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n MultipleCheckboxSelectorController.prototype.itemSelection = function (entity) {\r\n for (var i = 0; i < this.$scope.model.length; ++i) {\r\n var id = this.$scope.model[i];\r\n if (id == entity.id) {\r\n this.$scope.model.splice(i, 1);\r\n return;\r\n }\r\n }\r\n this.$scope.model.push(entity.id);\r\n };\r\n MultipleCheckboxSelectorController.$inject = [\r\n \"$scope\"\r\n ];\r\n return MultipleCheckboxSelectorController;\r\n})();\r\nexports.MultipleCheckboxSelectorController = MultipleCheckboxSelectorController;\r\nfunction MultipleCheckboxSelectorDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = MultipleCheckboxSelectorController;\r\n directive.scope = {\r\n entities: \"=vhsEntities\",\r\n model: \"=vhsModel\"\r\n };\r\n directive.templateUrl = url.template(\"components/multiple-checkbox-selector.html\");\r\n directive.transclude = true;\r\n return directive;\r\n}\r\nexports.MultipleCheckboxSelectorDirectiveFactory = MultipleCheckboxSelectorDirectiveFactory;\r\nMultipleCheckboxSelectorDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../utils/UrlService\":528}],76:[function(require,module,exports){\n(function (NotificationEventGroupKey) {\r\n NotificationEventGroupKey[NotificationEventGroupKey[\"COURSE\"] = 0] = \"COURSE\";\r\n NotificationEventGroupKey[NotificationEventGroupKey[\"MATERIAL\"] = 1] = \"MATERIAL\";\r\n NotificationEventGroupKey[NotificationEventGroupKey[\"SYSTEM\"] = 2] = \"SYSTEM\";\r\n})(exports.NotificationEventGroupKey || (exports.NotificationEventGroupKey = {}));\r\nvar NotificationEventGroupKey = exports.NotificationEventGroupKey;\r\n},{}],77:[function(require,module,exports){\nvar Storage_1 = require(\"./../infrastructure/Storage\");\r\nvar Event_1 = require(\"./../authcore/Event\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar PageHeaderController = (function () {\r\n function PageHeaderController($scope, $sce, $location, sessionStorage) {\r\n var _this = this;\r\n this.$sce = $sce;\r\n this.$location = $location;\r\n this.sessionStorage = sessionStorage;\r\n this.currentPageName = \" \";\r\n this.multipleActionsOnPanel = false;\r\n this.hasHistory = false;\r\n this.history = [];\r\n $scope.vm = this;\r\n MenuHelper_1.MenuHelper.addMenuUpdateListener(this);\r\n PageHeaderHelper_1.PageHeaderHelper.addPageHeaderUpdateListener(this);\r\n $scope.$on(Event_1.Event.LOGGED_ON, function () {\r\n _this.history.splice(0, _this.history.length);\r\n _this.hasHistory = false;\r\n _this.saveHistory();\r\n });\r\n $scope.$on(Event_1.Event.LOGGED_OFF, function () {\r\n _this.history.splice(0, _this.history.length);\r\n _this.hasHistory = false;\r\n _this.saveHistory();\r\n });\r\n if (this.sessionStorage.contains(PageHeaderController.VHS_SESSION_HISTORY_KEY)) {\r\n var storedHistory = this.sessionStorage.get(PageHeaderController.VHS_SESSION_HISTORY_KEY);\r\n for (var i = 0; i < storedHistory.length; i++) {\r\n this.history.push(storedHistory[i]);\r\n }\r\n this.hasHistory = this.history.length > 1;\r\n }\r\n }\r\n PageHeaderController.prototype.goBack = function () {\r\n if (this.hasHistory) {\r\n this.history.pop();\r\n var target = this.history.pop();\r\n this.saveHistory();\r\n this.$location.url(target);\r\n }\r\n this.hasHistory = this.history.length > 1;\r\n };\r\n PageHeaderController.prototype.onMenuItemUpdate = function (newMenuItemKey, oldMenuItemKey) {\r\n this.currentPageName = \" \";\r\n this.actionsPanelHtml = \"\";\r\n this.statusPanelHtml = \"\";\r\n this.multipleActionsOnPanel = false;\r\n var lastIndex = this.history.length - 1;\r\n if (lastIndex < 0 || this.history[lastIndex] != this.$location.path()) {\r\n if (this.history.length > PageHeaderController.MAX_HISTORY_DEPTH) {\r\n this.history.splice(0, 1);\r\n }\r\n this.history.push(this.$location.path());\r\n this.hasHistory = this.history.length > 1;\r\n this.saveHistory();\r\n }\r\n };\r\n PageHeaderController.prototype.onHeaderUpdate = function (pageHeader) {\r\n if (!pageHeader.preservePageName) {\r\n this.currentPageName = pageHeader.pageName;\r\n }\r\n if (!pageHeader.preserveActionsPanel) {\r\n var html = \"\";\r\n this.multipleActionsOnPanel = false;\r\n if (pageHeader.actions.length == 1) {\r\n html = pageHeader.actions[0];\r\n }\r\n else if (pageHeader.actions.length > 0) {\r\n for (var i = 0; i < pageHeader.actions.length; i++) {\r\n html += PageHeaderController.MULTIPLE_ACTIONS_LINK_TEMPLATE_START + pageHeader.actions[i] + PageHeaderController.MULTIPLE_ACTIONS_LINK_TEMPLATE_END;\r\n }\r\n this.multipleActionsOnPanel = true;\r\n }\r\n this.actionsPanelHtml = this.$sce.getTrustedHtml(html);\r\n }\r\n if (!pageHeader.preserveStatusPanel) {\r\n this.statusPanelHtml = this.$sce.getTrustedHtml(pageHeader.statusPanel);\r\n }\r\n };\r\n PageHeaderController.prototype.saveHistory = function () {\r\n this.sessionStorage.put(PageHeaderController.VHS_SESSION_HISTORY_KEY, this.history);\r\n };\r\n PageHeaderController.MULTIPLE_ACTIONS_LINK_TEMPLATE_START = '
  • ';\r\n PageHeaderController.MULTIPLE_ACTIONS_LINK_TEMPLATE_END = '
  • ';\r\n PageHeaderController.VHS_SESSION_HISTORY_KEY = \"vhs_session_navigation_history\";\r\n PageHeaderController.MAX_HISTORY_DEPTH = 3;\r\n PageHeaderController.$inject = [\r\n \"$scope\",\r\n \"$sce\",\r\n \"$location\",\r\n Storage_1.Storages.SESSION_NAME\r\n ];\r\n return PageHeaderController;\r\n})();\r\nexports.PageHeaderController = PageHeaderController;\r\nfunction PageHeaderDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.scope = {};\r\n directive.controller = PageHeaderController;\r\n directive.templateUrl = url.template(\"components/page-header.html\");\r\n return directive;\r\n}\r\nexports.PageHeaderDirectiveFactory = PageHeaderDirectiveFactory;\r\nPageHeaderDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../authcore/Event\":27,\"./../infrastructure/Storage\":295,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528}],78:[function(require,module,exports){\nvar Storage_1 = require(\"./../infrastructure/Storage\");\r\nvar AppProperties_1 = require(\"./../utils/AppProperties\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar PageTitleController = (function () {\r\n function PageTitleController($scope, $sce, $location, sessionStorage) {\r\n this.$sce = $sce;\r\n this.$location = $location;\r\n this.sessionStorage = sessionStorage;\r\n this.currentPageName = AppProperties_1.AppProperties.appTitle;\r\n $scope.vm = this;\r\n PageHeaderHelper_1.PageHeaderHelper.addPageHeaderUpdateListener(this);\r\n }\r\n PageTitleController.prototype.onHeaderUpdate = function (pageHeader) {\r\n if (!pageHeader.preservePageName) {\r\n this.currentPageName = pageHeader.pageName;\r\n document.title = this.currentPageName ? this.currentPageName : AppProperties_1.AppProperties.appTitle;\r\n }\r\n };\r\n PageTitleController.$inject = [\r\n \"$scope\",\r\n \"$sce\",\r\n \"$location\",\r\n Storage_1.Storages.SESSION_NAME\r\n ];\r\n return PageTitleController;\r\n})();\r\nexports.PageTitleController = PageTitleController;\r\nfunction PageTitleDirectiveFactory() {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.controller = PageTitleController;\r\n return directive;\r\n}\r\nexports.PageTitleDirectiveFactory = PageTitleDirectiveFactory;\r\n},{\"./../infrastructure/Storage\":295,\"./../utils/AppProperties\":\"AppProperties\",\"./../utils/PageHeaderHelper\":521}],79:[function(require,module,exports){\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar Event_1 = require(\"./../authcore/Event\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar StatisticsRouter_1 = require(\"./../urls/StatisticsRouter\");\r\nvar FinancesRouter_1 = require(\"./../urls/FinancesRouter\");\r\nvar NewsRouter_1 = require(\"./../urls/NewsRouter\");\r\nvar InfoRouter_1 = require(\"./../urls/InfoRouter\");\r\nvar UsersRouter_1 = require(\"./../urls/UsersRouter\");\r\nvar CoursesRouter_1 = require(\"./../urls/CoursesRouter\");\r\nvar QuizzesRouter_1 = require(\"./../urls/QuizzesRouter\");\r\nvar PersonalRouter_1 = require(\"./../urls/PersonalRouter\");\r\nvar AssessmentsRouter_1 = require(\"../urls/AssessmentsRouter\");\r\nvar ReferenceRouter_1 = require(\"./../urls/ReferenceRouter\");\r\nvar CertificateTemplatesRouter_1 = require(\"./../urls/CertificateTemplatesRouter\");\r\nvar LogsRouter_1 = require(\"./../urls/LogsRouter\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar SystemSettingsRouter_1 = require(\"./../urls/SystemSettingsRouter\");\r\nvar MainRouter_1 = require(\"../urls/MainRouter\");\r\nvar JobsRouter_1 = require(\"../urls/JobsRouter\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar HomepageHelper_1 = require(\"../utils/HomepageHelper\");\r\nvar MenuConfiguratorService_1 = require(\"../utils/MenuConfiguratorService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar PoliciesRouter_1 = require(\"../urls/PoliciesRouter\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar ReferenceService_1 = require(\"../reference/ReferenceService\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar SlideTemplatesRouter_1 = require(\"../urls/SlideTemplatesRouter\");\r\nvar Event_2 = require(\"./models/Event\");\r\nvar PersonalMenuController = (function () {\r\n function PersonalMenuController($rootScope, $scope, $http, $location, $routeParams, $window, $q, authApi, permissionsApi, authManager, materialsRouter, statisticsRouter, financesRouter, newsRouter, infoRouter, usersRouter, coursesRouter, learningPathsRouter, quizzesRouter, personalRouter, systemSettingsRouter, logsRouter, jobsRouter, referenceRouter, mainRouter, certificateTemplatesRouter, settingsService, assessmentsRouter, menuConfiguratorService, policiesRouter, url, referenceService, homeRouter, authRouter, userService, businessUnitsService, slideTemplatesRouter) {\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$window = $window;\r\n this.$q = $q;\r\n this.authApi = authApi;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.materialsRouter = materialsRouter;\r\n this.statisticsRouter = statisticsRouter;\r\n this.financesRouter = financesRouter;\r\n this.newsRouter = newsRouter;\r\n this.infoRouter = infoRouter;\r\n this.usersRouter = usersRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.quizzesRouter = quizzesRouter;\r\n this.personalRouter = personalRouter;\r\n this.systemSettingsRouter = systemSettingsRouter;\r\n this.logsRouter = logsRouter;\r\n this.jobsRouter = jobsRouter;\r\n this.referenceRouter = referenceRouter;\r\n this.mainRouter = mainRouter;\r\n this.certificateTemplatesRouter = certificateTemplatesRouter;\r\n this.settingsService = settingsService;\r\n this.assessmentsRouter = assessmentsRouter;\r\n this.menuConfiguratorService = menuConfiguratorService;\r\n this.policiesRouter = policiesRouter;\r\n this.url = url;\r\n this.referenceService = referenceService;\r\n this.homeRouter = homeRouter;\r\n this.authRouter = authRouter;\r\n this.userService = userService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.slideTemplatesRouter = slideTemplatesRouter;\r\n this.menu = [];\r\n this.currentTopMenu = [];\r\n this.currentMenuItemKey = \"\";\r\n this.currentMenuGroupKey = \"\";\r\n this.menuMap = new Map();\r\n this.menuItemMap = new Map();\r\n this.parentMap = new Map();\r\n this.breadcrumbs = [];\r\n this.referenceObjectLoaded = false;\r\n this.countActiveFilter = 0;\r\n this.isInsideCoursePage = false;\r\n this.isAllCourseInsidePage = false;\r\n this.isInsideLearningPathPage = false;\r\n this.isInsideQuizPages = false;\r\n this.isInsideSurveyPages = false;\r\n this.isInsideFlashcardPages = false;\r\n this.isExternalAccount = false;\r\n this.isInsideGamesPages = false;\r\n this.isInsideCatalogPages = false;\r\n this.rewards = [];\r\n this.menuHelper = MenuHelper_1.MenuHelper;\r\n this.timeout = 0;\r\n $scope.menuVM = this;\r\n this.$rootScope.isInsideCoursePage = this.isInsideCoursePage;\r\n this.$rootScope.isInsideLearningPath = this.isInsideLearningPathPage;\r\n this.$rootScope.isInsideQuizPages = this.isInsideQuizPages;\r\n this.$rootScope.isInsideSurveyPages = this.isInsideSurveyPages;\r\n this.$rootScope.isInsideFlashcardPages = this.isInsideFlashcardPages;\r\n this.$rootScope.isInsideGamesPages = this.isInsideGamesPages;\r\n this.$rootScope.isInsideCatalogPages = this.isInsideCatalogPages;\r\n this.authenticated = authManager.isAuthenticated();\r\n this.systemAdministrator = authManager.getCurrentUser() && authManager.getCurrentUser().id === 1;\r\n this.hasAllBusinessUnits = authManager.getCurrentUser() && authManager.getCurrentUser().allBusinessUnits;\r\n this.isMenuHidden = true;\r\n this.loadMenuByRole();\r\n if (this.authenticated) {\r\n this.updatePermissions();\r\n this.settingsService.getCalendarVisibility().then(function (result) {\r\n _this.calendarVisibility = result;\r\n });\r\n }\r\n this.changeBodyCss();\r\n this.changeCustomBranding();\r\n this.addResizeEventListener();\r\n this.loadReferenceData();\r\n $scope.$on(Event_1.Event.LOGGED_ON, function () {\r\n _this.authenticated = true;\r\n settingsService.getCalendarVisibility().then(function (result) {\r\n _this.calendarVisibility = result;\r\n });\r\n _this.systemAdministrator = authManager.getCurrentUser() && authManager.getCurrentUser().id === 1;\r\n _this.hasAllBusinessUnits = authManager.getCurrentUser() && authManager.getCurrentUser().allBusinessUnits;\r\n _this.updatePermissions();\r\n _this.changeBodyCss();\r\n _this.changeCustomBranding();\r\n _this.getRedirectLogoUrlFromBUAndSystemSettings();\r\n _this.loadReferenceData();\r\n _this.userService.getCurrentUserLocalLogon().then(function (logon) {\r\n if (logon) {\r\n _this.isExternalAccount = false;\r\n }\r\n else {\r\n _this.isExternalAccount = true;\r\n }\r\n });\r\n });\r\n $scope.$on(Event_1.Event.LOGGED_OFF, function () {\r\n _this.referenceObjectLoaded = false;\r\n _this.authenticated = false;\r\n _this.systemAdministrator = false;\r\n _this.hasAllBusinessUnits = false;\r\n _this.systemPermissions = {};\r\n _this.menu.splice(0);\r\n _this.currentTopMenu.splice(0);\r\n _this.loadMenuByRole();\r\n _this.changeBodyCss();\r\n _this.changeCustomBranding();\r\n _this.getRedirectLogoUrlFromBUAndSystemSettings();\r\n _this.isExternalAccount = false;\r\n });\r\n $rootScope.$on(\"$routeChangeStart\", function () {\r\n _this.isMenuHidden = true;\r\n });\r\n $rootScope.$on(\"changeFilterEvent\", function () {\r\n _this.loadReferenceData();\r\n });\r\n this.$rootScope.$on('notifyReward', function (event, result) {\r\n if (result.some(function (badge) { return badge.badgeKey === \"C_CMPL\" || badge.badgeKey === \"LP_CMPL\"; })) {\r\n _this.timeout = 4000;\r\n }\r\n else {\r\n _this.timeout = 0;\r\n }\r\n setTimeout(function () {\r\n result.forEach(function (r) { return _this.rewards.push(r); });\r\n if (_this.rewards.length > 0) {\r\n _this.setImagesForActivityBadges(_this.rewards);\r\n _this.rewardToShow = _this.rewards[0];\r\n }\r\n }, _this.timeout);\r\n });\r\n MenuHelper_1.MenuHelper.addMenuUpdateListener(this);\r\n PageHeaderHelper_1.PageHeaderHelper.addPageHeaderUpdateListener(this);\r\n this.settingsService.getHomepage().then(function (homepage) {\r\n _this.systemHomePage = HomepageHelper_1.HomepageHelper.getHomepageUrl(homepage);\r\n _this.recalculateBreadcrumbs();\r\n });\r\n this.getRedirectLogoUrlFromBUAndSystemSettings();\r\n this.isExternalAccount = true;\r\n this.userService.getCurrentUserLocalLogon().then(function (logon) {\r\n if (logon) {\r\n _this.isExternalAccount = false;\r\n }\r\n });\r\n }\r\n PersonalMenuController.prototype.loadMenuByRole = function () {\r\n var _this = this;\r\n var menuVisibility = this.settingsService.getMenuItemsVisibilitySetting()\r\n .then(function (result) {\r\n _this.menuItemsVisibilitySettings = result;\r\n _this.loadMenu();\r\n });\r\n var businessUserRole = this.userService.getCurrentUserBusinessRole()\r\n .then(function (role) {\r\n _this.userBusinessRole = role;\r\n });\r\n this.$q.all([\r\n menuVisibility,\r\n businessUserRole,\r\n ]).then(function () {\r\n _this.loadMenu();\r\n });\r\n };\r\n PersonalMenuController.prototype.getRedirectLogoUrlFromBUAndSystemSettings = function () {\r\n var _this = this;\r\n this.authApi.getCurrentUser().then(function (user) {\r\n _this.settingsService.getRedirectLogoURL()\r\n .then(function (result) { return _this.redirectUrlLogoUrl = result; });\r\n _this.settingsService.getRedirectHelpURL()\r\n .then(function (result) { return _this.redirectUrlHelpPage = result; });\r\n _this.settingsService.getRedirectAboutUsURL()\r\n .then(function (result) { return _this.redirectAboutUsPage = result; });\r\n });\r\n };\r\n PersonalMenuController.prototype.updatePermissions = function () {\r\n var _this = this;\r\n this.authApi.getCurrentUser().then(function (user) {\r\n _this.systemPermissions = user.permissions;\r\n if (user.businessUnits != null) {\r\n _this.menuItemsVisibilitySettings = null;\r\n var menuItemsPromise = _this.settingsService.getMenuItemsVisibilitySetting()\r\n .then(function (data) { return _this.menuItemsVisibilitySettings = data; });\r\n var zoomPromise = _this.settingsService.getBUZoomVisibilitySetting(user.businessUnits)\r\n .then(function (data) {\r\n _this.BUZoomVisibility = data;\r\n });\r\n var businessUserRole = _this.userService.getCurrentUserBusinessRole()\r\n .then(function (role) {\r\n _this.userBusinessRole = role;\r\n });\r\n _this.$q.all([\r\n zoomPromise,\r\n menuItemsPromise,\r\n menuItemsPromise,\r\n businessUserRole\r\n ]).then(function () {\r\n _this.loadMenu();\r\n });\r\n }\r\n else {\r\n _this.BUZoomVisibility = null;\r\n _this.userService.getCurrentUserBusinessRole()\r\n .then(function (role) {\r\n _this.userBusinessRole = role;\r\n _this.loadMenu();\r\n });\r\n }\r\n });\r\n };\r\n PersonalMenuController.prototype.toggleMenuVisibility = function () {\r\n this.isMenuHidden = !this.isMenuHidden;\r\n };\r\n PersonalMenuController.prototype.loadMenu = function () {\r\n var menuByPermissions = this.menuConfiguratorService.fillMenuByPermissionsItemsArray(this.authenticated, this.systemPermissions, this.systemAdministrator, this.BUZoomVisibility, this.hasAllBusinessUnits, this.userBusinessRole, this.menuItemsVisibilitySettings);\r\n menuByPermissions.push.apply(menuByPermissions, this.menuConfiguratorService.getAllHomeMenu(this.authenticated, this.systemPermissions));\r\n menuByPermissions.filter(function (item, pos) {\r\n return menuByPermissions.indexOf(item) == pos;\r\n });\r\n var personalAccount = this.menuConfiguratorService.fillPersonalAccountItems(this.authenticated, this.systemPermissions);\r\n this.isMenuFull = menuByPermissions != null && personalAccount != null;\r\n this.menu.splice(0);\r\n for (var i = 0; i < menuByPermissions.length; i++) {\r\n this.menu.push(menuByPermissions[i]);\r\n }\r\n this.menuMap.clear();\r\n this.parentMap.clear();\r\n this.menuItemMap.clear();\r\n this.menuMap = new Map();\r\n for (var i = 0; i < this.menu.length; ++i) {\r\n var menuGroup = this.menu[i];\r\n this.menuMap.set(menuGroup.key, menuGroup);\r\n this.menuItemMap.set(menuGroup.key, menuGroup);\r\n for (var j = 0; j < menuGroup.items.length; ++j) {\r\n var menuItem = menuGroup.items[j];\r\n this.menuMap.set(menuItem.key, menuGroup);\r\n this.parentMap.set(menuItem.key, menuGroup);\r\n this.menuItemMap.set(menuItem.key, menuItem);\r\n for (var k = 0; k < menuItem.items.length; ++k) {\r\n var menuItem2 = menuItem.items[k];\r\n this.parentMap.set(menuItem2.key, menuItem);\r\n this.menuItemMap.set(menuItem2.key, menuItem2);\r\n }\r\n }\r\n }\r\n this.faqUrl = this.menuMap.get(MenuHelper_1.MenuHelper.FAQ_MENU_KEY).url;\r\n for (var i = 0; i < personalAccount.items.length; ++i) {\r\n var menuItem = personalAccount.items[i];\r\n this.parentMap.set(menuItem.key, personalAccount);\r\n this.menuItemMap.set(menuItem.key, menuItem);\r\n }\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n this.currentMenuGroupKey = this.getCurrentMenuGroupKey();\r\n };\r\n PersonalMenuController.prototype.getCurrentMenuGroupKey = function () {\r\n if (this.menuMap.has(MenuHelper_1.MenuHelper.getCurrentMenuItemKey())) {\r\n return this.menuMap.get(MenuHelper_1.MenuHelper.getCurrentMenuItemKey()).key;\r\n }\r\n else {\r\n return \"\";\r\n }\r\n };\r\n PersonalMenuController.prototype.onMenuItemUpdate = function (newMenuItemKey, oldMenuItemKey) {\r\n this.currentMenuItemKey = newMenuItemKey;\r\n this.currentMenuGroupKey = this.getCurrentMenuGroupKey();\r\n this.breadcrumbsPageName = '';\r\n this.recalculateBreadcrumbs();\r\n };\r\n PersonalMenuController.prototype.changeBodyCss = function () {\r\n if (this.authenticated) {\r\n $('body').removeClass('login');\r\n }\r\n else {\r\n $('body').addClass('login');\r\n }\r\n };\r\n PersonalMenuController.prototype.onHeaderUpdate = function (pageHeader) {\r\n this.breadcrumbsPageName = pageHeader.pageName;\r\n this.breadcrumbsParentName = pageHeader.parentName;\r\n this.breadcrumbsParentLink = pageHeader.parentLink;\r\n this.recalculateBreadcrumbs();\r\n };\r\n PersonalMenuController.prototype.isInsideSpecificPage = function () {\r\n return this.isInsideCoursePage || this.isInsideLearningPathPage;\r\n };\r\n PersonalMenuController.prototype.updateIsInsideSpecificPages = function () {\r\n this.updateIsInsideCourse();\r\n this.updateIsInsideLearningPath();\r\n this.$rootScope.isInsideSpecificPages = this.isInsideSpecificPage();\r\n };\r\n PersonalMenuController.prototype.recalculateBreadcrumbs = function () {\r\n this.updateIsInsideSpecificPages();\r\n var currentMenuItem = this.menuItemMap.get(this.currentMenuItemKey);\r\n if (!currentMenuItem) {\r\n this.breadcrumbs = null;\r\n return;\r\n }\r\n var hasOwnHomeItem = false;\r\n var includeBreadcrumbsPageName = true;\r\n var tempCurrentMenuItem = currentMenuItem;\r\n while (this.parentMap.has(tempCurrentMenuItem.key)) {\r\n tempCurrentMenuItem = this.parentMap.get(tempCurrentMenuItem.key);\r\n if (tempCurrentMenuItem.hasOwnHomeItem == true) {\r\n hasOwnHomeItem = true;\r\n }\r\n if (tempCurrentMenuItem.includeBreadcrumbsPageName == false) {\r\n includeBreadcrumbsPageName = false;\r\n }\r\n }\r\n var breadcrumbs = [];\r\n if ((this.breadcrumbsParentName == \"Failed to retrieve the course details\" || this.breadcrumbsParentName == \"Failed to retrieve the learning path details\") && this.breadcrumbsPageName) {\r\n this.breadcrumbsPageName = this.breadcrumbsParentName;\r\n this.breadcrumbsParentName = undefined;\r\n }\r\n if (this.breadcrumbsPageName && this.breadcrumbsPageName != \"\" && this.breadcrumbsPageName != currentMenuItem.name && includeBreadcrumbsPageName) {\r\n breadcrumbs.push({\r\n text: this.breadcrumbsPageName,\r\n url: null\r\n });\r\n if (this.breadcrumbsParentName) {\r\n breadcrumbs.push({\r\n text: this.breadcrumbsParentName,\r\n url: this.breadcrumbsParentLink\r\n });\r\n }\r\n }\r\n breadcrumbs.push({\r\n text: currentMenuItem.name,\r\n url: breadcrumbs.length > 0 ? currentMenuItem.url : null\r\n });\r\n while (this.parentMap.has(currentMenuItem.key)) {\r\n var previousUrl = currentMenuItem.url;\r\n currentMenuItem = this.parentMap.get(currentMenuItem.key);\r\n breadcrumbs.push({\r\n text: currentMenuItem.name,\r\n url: currentMenuItem.dynamicUrl ? previousUrl : currentMenuItem.url\r\n });\r\n }\r\n var parentMenu = this.parentMap.get(currentMenuItem.key);\r\n if ((parentMenu && parentMenu.key === MenuHelper_1.MenuHelper.HOME_INDEX_KEY)\r\n || currentMenuItem.key === MenuHelper_1.MenuHelper.HOME_INDEX_KEY || breadcrumbs.length === 1) {\r\n this.breadcrumbs = null;\r\n return;\r\n }\r\n this.breadcrumbs = breadcrumbs.reverse();\r\n };\r\n PersonalMenuController.prototype.reloadIfNeeded = function (menu) {\r\n if (menu === \"course\" && !!this.breadcrumbsParentLink) {\r\n this.$rootScope.$broadcast(\"reload.course.details\");\r\n }\r\n };\r\n PersonalMenuController.prototype.updateIsInsideCourse = function () {\r\n var path = this.$location.path();\r\n var pathSplit = path.substring(1, path.length - 1).split(\"/\");\r\n this.isInsideCoursePage = pathSplit[0] === MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY && !isNaN(+pathSplit[1]) && pathSplit.length === 2;\r\n this.isInsideQuizPages = pathSplit[0] === MenuHelper_1.MenuHelper.EDUCATION_QUIZZES_MENU_KEY;\r\n this.isInsideSurveyPages = pathSplit[0] === MenuHelper_1.MenuHelper.EDUCATION_SURVEYS_MENU_KEY;\r\n this.isInsideFlashcardPages = pathSplit[0] === MenuHelper_1.MenuHelper.EDUCATION_FLASHCARDS_MENU_KEY;\r\n this.isInsideGamesPages = pathSplit[1] === 'program';\r\n this.isInsideCatalogPages = pathSplit[0] === MenuHelper_1.MenuHelper.CATALOG_MENU_KEY;\r\n this.$rootScope.isInsideCoursePage = this.isInsideCoursePage;\r\n this.$rootScope.isInsideQuizPages = this.isInsideQuizPages;\r\n this.$rootScope.isInsideSurveyPages = this.isInsideSurveyPages;\r\n this.$rootScope.isInsideFlashcardPages = this.isInsideFlashcardPages;\r\n this.isAllCourseInsidePage = path.indexOf(CoursesRouter_1.CoursesRouter.indexRoute) >= 0;\r\n this.$rootScope.isAllCourseInsidePage = this.isAllCourseInsidePage;\r\n this.$rootScope.isInsideGamesPages = this.isInsideGamesPages;\r\n this.$rootScope.isInsideCatalogPages = this.isInsideCatalogPages;\r\n };\r\n PersonalMenuController.prototype.updateIsInsideLearningPath = function () {\r\n var path = this.$location.path();\r\n var pathSplit = path.substring(1, path.length).split(\"/\");\r\n var isHasNumberIntoPath = false;\r\n for (var _i = 0; _i < pathSplit.length; _i++) {\r\n var pathString = pathSplit[_i];\r\n if (this.isNumeric(pathString)) {\r\n isHasNumberIntoPath = true;\r\n break;\r\n }\r\n }\r\n this.isInsideLearningPathPage = (pathSplit.indexOf(\"learningPaths\") != -1 && isHasNumberIntoPath)\r\n || (pathSplit.indexOf(\"learningPaths\") != -1 && pathSplit.indexOf(\"create\") != -1);\r\n this.$rootScope.isInsideLearningPathPage = this.isInsideLearningPathPage;\r\n this.$rootScope.isHideMainBreadcrumbs = this.isInsideLearningPathPage;\r\n };\r\n PersonalMenuController.prototype.isNumeric = function (str) {\r\n if (typeof str != \"string\")\r\n return false;\r\n return !isNaN(str) &&\r\n !isNaN(parseFloat(str));\r\n };\r\n PersonalMenuController.prototype.addResizeEventListener = function () {\r\n var _this = this;\r\n this.$window.addEventListener(\"resize\", function () {\r\n _this.setHeaderColor();\r\n });\r\n };\r\n PersonalMenuController.prototype.changeCustomBranding = function () {\r\n var _this = this;\r\n this.authApi.getCurrentUser().then(function (user) {\r\n _this.currentUser = user;\r\n _this.getColorForHeaderByWindowSize();\r\n _this.changeFavicon();\r\n });\r\n };\r\n PersonalMenuController.prototype.getColorForHeaderByWindowSize = function () {\r\n var _this = this;\r\n angular.element(this.$window).bind('resize', function () {\r\n setTimeout(function () { return _this.setHeaderColor(); }, 300);\r\n });\r\n this.setHeaderColor();\r\n };\r\n PersonalMenuController.prototype.setHeaderColor = function () {\r\n if (this.currentUser.customBranding) {\r\n if (this.$window.innerWidth < 992) {\r\n this.headerColor = this.currentUser.customBranding.mobileColor;\r\n }\r\n else {\r\n this.headerColor = this.currentUser.customBranding.color;\r\n }\r\n this.$rootScope.headerColor = this.headerColor;\r\n }\r\n };\r\n PersonalMenuController.prototype.changeFavicon = function () {\r\n var oldLink = document.querySelector(\"link[rel*='icon']\");\r\n if (oldLink) {\r\n document.head.removeChild(oldLink);\r\n }\r\n var ieVersion;\r\n var ua = window.navigator.userAgent;\r\n var trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n var rv = ua.indexOf('rv:');\r\n ieVersion = parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\r\n }\r\n var customFavicon = this.currentUser.customBranding.favicon;\r\n var link = document.createElement('link');\r\n link.type = 'image/x-icon';\r\n link.rel = ieVersion ? 'icon' : 'shortcut icon';\r\n link.href = !customFavicon ? 'themes/default/img/favicon.ico?v=@@buildVersion' : customFavicon;\r\n document.head.appendChild(link);\r\n };\r\n PersonalMenuController.prototype.redirectToPrivacyPolicy = function () {\r\n this.$location.url(this.policiesRouter.privacyPolicyUrl());\r\n this.$window.scroll(0, 0);\r\n };\r\n PersonalMenuController.prototype.redirectToCookiePolicy = function () {\r\n this.$location.url(this.policiesRouter.cookiePolicyUrl());\r\n this.$window.scroll(0, 0);\r\n };\r\n PersonalMenuController.prototype.redirectToTermsOfUse = function () {\r\n this.$location.url(this.policiesRouter.termsOfUseUrl());\r\n this.$window.scroll(0, 0);\r\n };\r\n PersonalMenuController.prototype.redirectToAboutUs = function () {\r\n if (this.redirectAboutUsPage) {\r\n this.$window.open(this.redirectAboutUsPage, '_blank');\r\n }\r\n else {\r\n this.$location.url(this.infoRouter.aboutCompanyUrl());\r\n this.$window.scroll(0, 0);\r\n }\r\n };\r\n PersonalMenuController.prototype.redirectToMyProfile = function () {\r\n if (this.authManager.isAuthenticated()) {\r\n this.$location.url(this.personalRouter.settingsUrl());\r\n }\r\n else {\r\n this.$location.url(this.authRouter.logonUrl());\r\n }\r\n this.$window.scroll(0, 0);\r\n };\r\n PersonalMenuController.prototype.redirectToAccessibility = function () {\r\n this.$location.url(this.infoRouter.accessibilityUrl());\r\n this.$window.scroll(0, 0);\r\n };\r\n PersonalMenuController.prototype.getClassForMenu = function (key) {\r\n switch (key) {\r\n case MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY: {\r\n return \"vhs-image__course\";\r\n }\r\n case MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY: {\r\n return \"vhs-image__learning-path\";\r\n }\r\n case MenuHelper_1.MenuHelper.FAQ_MENU_KEY: {\r\n return \"vhs-image__help\";\r\n }\r\n case MenuHelper_1.MenuHelper.CATALOG_MENU_KEY: {\r\n return 'vhs-image__catalog';\r\n }\r\n case MenuHelper_1.MenuHelper.HOME_INDEX_KEY: {\r\n return 'vhs-image__home';\r\n }\r\n }\r\n return \"\";\r\n };\r\n PersonalMenuController.prototype.getIconForLogout = function () {\r\n return '\\n' +\r\n '\\n' +\r\n '';\r\n };\r\n PersonalMenuController.prototype.getIconForMenu = function (key) {\r\n switch (key) {\r\n case MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY: {\r\n return '\\n' +\r\n '\\n' +\r\n '';\r\n }\r\n case MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY: {\r\n return '\\n' +\r\n '\\n' +\r\n '';\r\n }\r\n case MenuHelper_1.MenuHelper.FAQ_MENU_KEY: {\r\n return '\\n' +\r\n '\\n' +\r\n '';\r\n }\r\n case MenuHelper_1.MenuHelper.CATALOG_MENU_KEY: {\r\n return ' Book ';\r\n }\r\n case MenuHelper_1.MenuHelper.HOME_INDEX_KEY: {\r\n return '\\n' +\r\n '\\n' +\r\n '';\r\n }\r\n case MenuHelper_1.MenuHelper.STUDENTS_OFFERS_MENU_KEY: {\r\n return '\\n' +\r\n '\\n' +\r\n '';\r\n }\r\n }\r\n return \"\";\r\n };\r\n PersonalMenuController.prototype.getHomeMenu = function () {\r\n return this.menuMap.get(MenuHelper_1.MenuHelper.HOME_INDEX_KEY);\r\n };\r\n PersonalMenuController.prototype.loadReferenceData = function () {\r\n var _this = this;\r\n var subjectPromise = this.referenceService.getActiveReferenceEntities('subjects', {})\r\n .then(function (result) {\r\n if (!_this.referenceSubject || _this.referenceSubject.length != result.entities.length || !_this.isArrayItemsEquals(_this.referenceSubject, result.entities)) {\r\n _this.referenceSubject = result.entities;\r\n }\r\n });\r\n var courseTypesPromise = this.referenceService.getActiveReferenceEntities('courseTypes', {})\r\n .then(function (result) {\r\n if (!_this.referenceType || _this.referenceType.length != result.entities.length || !_this.isArrayItemsEquals(_this.referenceType, result.entities)) {\r\n _this.referenceType = result.entities;\r\n }\r\n });\r\n var languagesPromise = this.referenceService.getActiveReferenceEntities('languages', {})\r\n .then(function (result) {\r\n if (!_this.referenceLanguage || _this.referenceLanguage.length != result.entities.length || !_this.isArrayItemsEquals(_this.referenceLanguage, result.entities)) {\r\n _this.referenceLanguage = result.entities;\r\n }\r\n });\r\n var learningPathTypesPromise = this.referenceService.getActiveReferenceEntities('learningPathTypes', {})\r\n .then(function (result) {\r\n if (!_this.referenceLearningPathType || _this.referenceLearningPathType.length != result.entities.length || !_this.isArrayItemsEquals(_this.referenceLearningPathType, result.entities)) {\r\n _this.referenceLearningPathType = result.entities;\r\n }\r\n });\r\n this.$q.all([\r\n subjectPromise,\r\n courseTypesPromise,\r\n languagesPromise,\r\n learningPathTypesPromise\r\n ]);\r\n };\r\n PersonalMenuController.prototype.getRedirectLogoUrl = function () {\r\n if (this.authManager.isAuthenticated()) {\r\n return !!this.redirectUrlLogoUrl ? this.redirectUrlLogoUrl : '#' + this.systemHomePage;\r\n }\r\n else {\r\n return '#' + this.authRouter.logonUrl();\r\n }\r\n };\r\n PersonalMenuController.prototype.getRedirectMenuPageUrl = function (menuGroup) {\r\n if (menuGroup.key === MenuHelper_1.MenuHelper.FAQ_MENU_KEY) {\r\n return !!this.redirectUrlHelpPage ? this.redirectUrlHelpPage : menuGroup.url;\r\n }\r\n else {\r\n return menuGroup.url ? menuGroup.url : '#/';\r\n }\r\n };\r\n PersonalMenuController.prototype.openTabletNavigationMenu = function () {\r\n $(\"#vhs-right-mobile-sidebar .panel-wrap .panel\").scrollTop(0);\r\n document.getElementById(\"vhs-right-mobile-sidebar\").classList.add(\"in\");\r\n $(\"body\").css(\"overflow\", \"hidden\");\r\n };\r\n PersonalMenuController.prototype.closeTabletNavigationMenu = function () {\r\n document.getElementById(\"vhs-right-mobile-sidebar\").classList.remove(\"in\");\r\n $(\"body\").css(\"overflow\", \"auto\");\r\n };\r\n PersonalMenuController.prototype.isShowAdministration = function () {\r\n if (this.menuMap && this.menuMap.get(this.menuHelper.ADMINISTRATION_MENU_KEY)) {\r\n return this.menuMap.get(this.menuHelper.ADMINISTRATION_MENU_KEY).items.filter(function (item) { return item.allowed; }).length > 0;\r\n }\r\n return false;\r\n };\r\n PersonalMenuController.prototype.isShowAnalytics = function () {\r\n if (this.menuMap && this.menuMap.get(this.menuHelper.ANALYTICS_MENU_KEY)) {\r\n return this.menuMap.get(this.menuHelper.ANALYTICS_MENU_KEY).items.filter(function (item) { return item.allowed; }).length > 0;\r\n }\r\n return false;\r\n };\r\n PersonalMenuController.prototype.changePathForPersonal = function (item) {\r\n this.currentMenuGroupKey = item.key;\r\n var path = item.url.substring(1, item.url.length);\r\n this.$rootScope.$broadcast('personal.change.route', path);\r\n };\r\n PersonalMenuController.prototype.isShowMenuItem = function (menuGroupKey) {\r\n return menuGroupKey !== this.menuHelper.EDUCATION_MATERIALS_MENU_KEY\r\n && menuGroupKey !== this.menuHelper.EDUCATION_QUIZZES_MENU_KEY\r\n && menuGroupKey !== this.menuHelper.EDUCATION_SURVEYS_MENU_KEY\r\n && menuGroupKey !== this.menuHelper.EDUCATION_FLASHCARDS_MENU_KEY;\r\n };\r\n PersonalMenuController.prototype.isArrayItemsEquals = function (first, second) {\r\n for (var i = 0; i < second.length; i++) {\r\n if (!first || first[i].id != second[i].id) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n PersonalMenuController.prototype.getImageForBadge = function (badge) {\r\n if (badge.badgeType == \"BADGE\") {\r\n return this.getImageBadge(badge);\r\n }\r\n else {\r\n if (!badge.previewUrl) {\r\n return \"themes/default/img/actionBadges/\" + badge.badgeKey + \".png\";\r\n }\r\n return badge.previewUrl;\r\n }\r\n };\r\n PersonalMenuController.prototype.getImageBadge = function (badge) {\r\n if (badge) {\r\n if (!badge.previewUrl && badge.badgeKey) {\r\n var imageName = badge.badgeName.split(' ').join('');\r\n switch (badge.badgeKey) {\r\n case \"C_CMPL\":\r\n imageName = \"CourseFinisher\";\r\n break;\r\n case \"LP_CMPL\":\r\n imageName = \"LearningPathFinisher\";\r\n break;\r\n }\r\n return \"themes/default/img/badges/\" + imageName + \".png\";\r\n }\r\n }\r\n return badge.previewUrl ? badge.previewUrl : '';\r\n };\r\n PersonalMenuController.prototype.setImagesForActivityBadges = function (badges) {\r\n var _this = this;\r\n badges.forEach(function (b) {\r\n b.previewUrl = _this.getImageForBadge(b);\r\n });\r\n };\r\n PersonalMenuController.prototype.submitReward = function (rewardId) {\r\n var _this = this;\r\n var tempRewards = this.rewards.filter(function (r) { return r.id !== rewardId; });\r\n if (tempRewards.length == 0) {\r\n $('.rewardNotification').addClass('rewardNotification-up');\r\n }\r\n setTimeout(function () {\r\n _this.rewards = tempRewards;\r\n if (_this.rewards.length > 0) {\r\n _this.rewardToShow = null;\r\n setTimeout(function () {\r\n $('.rewardNotification').removeClass('rewardNotification-down');\r\n _this.rewardToShow = _this.rewards[0];\r\n }, 0);\r\n }\r\n else {\r\n _this.rewardToShow = null;\r\n }\r\n }, 200);\r\n };\r\n PersonalMenuController.prototype.openHelpBot = function () {\r\n this.$rootScope.$broadcast(Event_2.Event.HELP_BOT_OPEN_CLOSE);\r\n };\r\n PersonalMenuController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$window\",\r\n \"$q\",\r\n AuthService_1.AuthService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n StatisticsRouter_1.StatisticsRouter.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n NewsRouter_1.NewsRouter.NAME,\r\n InfoRouter_1.InfoRouter.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n PersonalRouter_1.PersonalRouter.NAME,\r\n SystemSettingsRouter_1.SystemSettingsRouter.NAME,\r\n LogsRouter_1.LogsRouter.NAME,\r\n JobsRouter_1.JobsRouter.NAME,\r\n ReferenceRouter_1.ReferenceRouter.NAME,\r\n MainRouter_1.MainRouter.NAME,\r\n CertificateTemplatesRouter_1.CertificateTemplatesRouter.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n AssessmentsRouter_1.AssessmentsRouter.NAME,\r\n MenuConfiguratorService_1.MenuConfiguratorService.NAME,\r\n PoliciesRouter_1.PoliciesRouter.NAME,\r\n UrlService_1.UrlService.NAME,\r\n ReferenceService_1.ReferenceService.NAME,\r\n HomeRouter_1.HomeRouter.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n UserService_1.UserService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n SlideTemplatesRouter_1.SlideTemplatesRouter.NAME,\r\n ];\r\n return PersonalMenuController;\r\n})();\r\nfunction PersonalMenuDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.scope = true;\r\n directive.controller = PersonalMenuController;\r\n return directive;\r\n}\r\nexports.PersonalMenuDirectiveFactory = PersonalMenuDirectiveFactory;\r\nPersonalMenuDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\nfunction NavigationPersonalMenuDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/menu/navigation-personal-menu.html\");\r\n directive.link = link;\r\n directive.require = \"^personalMenu\";\r\n return directive;\r\n}\r\nexports.NavigationPersonalMenuDirectiveFactory = NavigationPersonalMenuDirectiveFactory;\r\nNavigationPersonalMenuDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\nfunction LeftPersonalMenuDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/menu/left-personal-menu.html\");\r\n directive.link = link;\r\n directive.require = \"^personalMenu\";\r\n return directive;\r\n}\r\nexports.LeftPersonalMenuDirectiveFactory = LeftPersonalMenuDirectiveFactory;\r\nLeftPersonalMenuDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\nfunction VhsBreadcrumbsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/vhs-breadcrumbs.html\");\r\n directive.link = link;\r\n directive.require = \"^personalMenu\";\r\n return directive;\r\n}\r\nexports.VhsBreadcrumbsDirectiveFactory = VhsBreadcrumbsDirectiveFactory;\r\nVhsBreadcrumbsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\nfunction LeftMainMenuDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/menu/left-main-menu.html\");\r\n directive.link = link;\r\n directive.require = \"^personalMenu\";\r\n return directive;\r\n}\r\nexports.LeftMainMenuDirectiveFactory = LeftMainMenuDirectiveFactory;\r\nLeftMainMenuDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../businessUnits/BusinessUnitsService\":44,\"../reference/ReferenceService\":409,\"../settings/SettingsService\":427,\"../urls/AssessmentsRouter\":462,\"../urls/AuthRouter\":463,\"../urls/HomeRouter\":473,\"../urls/JobsRouter\":476,\"../urls/LearningPathsRouter\":477,\"../urls/MainRouter\":479,\"../urls/PoliciesRouter\":485,\"../urls/SlideTemplatesRouter\":488,\"../users/UserService\":499,\"../utils/HomepageHelper\":512,\"../utils/MenuConfiguratorService\":516,\"./../auth/AuthService\":18,\"./../authcore/AuthManager\":25,\"./../authcore/Event\":27,\"./../security/PermissionsService\":418,\"./../urls/CertificateTemplatesRouter\":465,\"./../urls/CoursesRouter\":468,\"./../urls/FinancesRouter\":471,\"./../urls/InfoRouter\":475,\"./../urls/LogsRouter\":478,\"./../urls/MaterialsRouter\":480,\"./../urls/NewsRouter\":481,\"./../urls/PersonalRouter\":484,\"./../urls/QuizzesRouter\":486,\"./../urls/ReferenceRouter\":487,\"./../urls/StatisticsRouter\":489,\"./../urls/SystemSettingsRouter\":490,\"./../urls/UsersRouter\":493,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./models/Event\":170}],80:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar QuizzesRouter_1 = require(\"../urls/QuizzesRouter\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar QuizViewTopTabsController = (function () {\r\n function QuizViewTopTabsController($scope, $location, quizzesRouter, quizService, dialogService, permissionsService, authService, brandingService) {\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.quizzesRouter = quizzesRouter;\r\n this.quizService = quizService;\r\n this.dialogService = dialogService;\r\n this.permissionsService = permissionsService;\r\n this.authService = authService;\r\n this.brandingService = brandingService;\r\n this.INFO_TAB_KEY = \"info\";\r\n this.EDIT_TAB_KEY = \"edit\";\r\n this.isShowDelete = false;\r\n $scope.vm = this;\r\n this.quiz = $scope.quiz;\r\n this.isShowDeleteButton();\r\n }\r\n QuizViewTopTabsController.prototype.init = function ($scope, element) {\r\n };\r\n QuizViewTopTabsController.prototype.isShowDeleteButton = function () {\r\n var _this = this;\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n _this.authService.getCurrentUser().then(function (user) {\r\n if ((_this.quiz && _this.quiz.permissions && _this.quiz.permissions.delete) || (_this.systemPermissions.manageAnyLearningObject && user.allBusinessUnits)\r\n || (_this.systemPermissions.manageAnyLearningObject && !!user.businessUnits && user.businessUnits.indexOf(_this.quiz.businessUnitId) > -1)) {\r\n _this.isShowDelete = true;\r\n }\r\n });\r\n });\r\n };\r\n QuizViewTopTabsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.$scope.topMenuKey == topMenuKey;\r\n };\r\n QuizViewTopTabsController.prototype.deleteQuiz = function (quizId) {\r\n var _this = this;\r\n var allowEvent = new Event(\"allowNavigation\");\r\n this.quizService.getDependentCoursesFromQuizSurvey(quizId)\r\n .then(function (courses) {\r\n var dialogTitle = _this.quiz.quizType === \"QUIZ\" ?\r\n \"Delete quiz\" : _this.quiz.quizType === \"SURVEY\" ?\r\n \"Delete survey\"\r\n : \"Delete flashcard\";\r\n var dialogMessage;\r\n if (courses.length > 0) {\r\n var today = (new Date()).getTime();\r\n var expiredCourses = courses.filter(function (c) { return c.endDate && c.endDate <= today; });\r\n if (expiredCourses.length != courses.length) {\r\n dialogMessage = _this.quiz.quizType === \"QUIZ\" ?\r\n \"

    The quiz cannot be removed. It is used in the courses:

    \" : _this.quiz.quizType === \"SURVEY\" ?\r\n \"

    The survey cannot be removed. It is used in the courses:

    \"\r\n : \"

    The flashcard cannot be removed. It is used in the courses:

    \";\r\n var activeCourses = courses.filter(function (c) { return expiredCourses.indexOf(c) < 0; });\r\n for (var i = 0; i < activeCourses.length; i++) {\r\n var activeCourse = activeCourses[i];\r\n dialogMessage += \"

    \" + (i + 1) + \". \" + activeCourse.topic + \"

    \";\r\n }\r\n _this.dialogService.confirm(dialogMessage, {\r\n title: dialogTitle,\r\n hideCancelButton: true\r\n });\r\n }\r\n else {\r\n dialogMessage = _this.quiz.quizType === \"QUIZ\" ?\r\n \"

    This quiz will be removed from the system. It is used in the courses: :courses Continue?

    \" : _this.quiz.quizType === \"SURVEY\" ?\r\n \"

    This survey will be removed from the system. It is used in the courses: :courses Continue?

    \"\r\n : \"

    This flashcard will be removed from the system. It is used in the courses: :courses Continue?

    \";\r\n var endDialogMessage = dialogMessage.split(\":courses\")[1];\r\n dialogMessage = dialogMessage.split(\":courses\")[0];\r\n for (var i = 0; i < expiredCourses.length; i++) {\r\n var expiredCourse = expiredCourses[i];\r\n dialogMessage += \"

    \" + (i + 1) + \". \" + expiredCourse.topic + \"

    \";\r\n }\r\n dialogMessage += endDialogMessage;\r\n _this.dialogService.confirm(dialogMessage, {\r\n title: dialogTitle,\r\n hideCancelButton: false\r\n }).then(function () {\r\n window.dispatchEvent(allowEvent);\r\n _this.quizService.inactiveQuizSurvey(_this.quiz.id)\r\n .then(function () {\r\n var message = _this.quiz.quizType === \"QUIZ\" ?\r\n \"The quiz has been removed\" : _this.quiz.quizType === \"SURVEY\" ?\r\n \"The survey has been removed\"\r\n : \"The flashcard has been removed\";\r\n INotifier_1.notifier.success(message);\r\n if (_this.quiz.quizType === \"QUIZ\") {\r\n _this.$location.url(_this.quizzesRouter.quizzesIndexUrl());\r\n }\r\n else if (_this.quiz.quizType === \"SURVEY\") {\r\n _this.$location.url(_this.quizzesRouter.surveysIndexUrl());\r\n }\r\n else {\r\n _this.$location.url(_this.quizzesRouter.flashcardsIndexUrl());\r\n }\r\n });\r\n });\r\n }\r\n }\r\n else {\r\n dialogMessage = _this.quiz.quizType === \"QUIZ\" ?\r\n \"This quiz will be removed from the system. Continue?\" : _this.quiz.quizType === \"SURVEY\" ?\r\n \"This survey will be removed from the system. Continue?\"\r\n : \"This flashcard will be removed from the system. Continue?\";\r\n _this.dialogService.confirm(dialogMessage, {\r\n title: dialogTitle,\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n }).then(function () {\r\n window.dispatchEvent(allowEvent);\r\n _this.quizService.inactiveQuizSurvey(_this.quiz.id)\r\n .then(function () {\r\n var message = _this.quiz.quizType === \"QUIZ\" ?\r\n \"The quiz has been removed\" : _this.quiz.quizType === \"SURVEY\" ?\r\n \"The survey has been removed\"\r\n : \"The flashcard has been removed\";\r\n INotifier_1.notifier.success(message);\r\n if (_this.quiz.quizType === \"QUIZ\") {\r\n _this.$location.url(_this.quizzesRouter.quizzesIndexUrl());\r\n }\r\n else if (_this.quiz.quizType === \"SURVEY\") {\r\n _this.$location.url(_this.quizzesRouter.surveysIndexUrl());\r\n }\r\n else {\r\n _this.$location.url(_this.quizzesRouter.flashcardsIndexUrl());\r\n }\r\n });\r\n });\r\n }\r\n });\r\n };\r\n QuizViewTopTabsController.prototype.updateUrl = function (quizId) {\r\n if (this.$location.path().indexOf(QuizzesRouter_1.QuizzesRouter.surveysIndexRoute) !== -1) {\r\n return this.quizzesRouter.surveysUpdateUrl(quizId);\r\n }\r\n else if (this.$location.path().indexOf(QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute) !== -1) {\r\n return this.quizzesRouter.quizzesUpdateUrl(quizId);\r\n }\r\n else if (this.$location.path().indexOf(QuizzesRouter_1.QuizzesRouter.flashcardsIndexRoute) !== -1) {\r\n return this.quizzesRouter.flashcardsUpdateUrl(quizId);\r\n }\r\n };\r\n QuizViewTopTabsController.prototype.detailUrl = function (quizId) {\r\n if (this.$location.path().indexOf(QuizzesRouter_1.QuizzesRouter.surveysIndexRoute) !== -1) {\r\n return this.quizzesRouter.surveysDetailsUrl(quizId);\r\n }\r\n else if (this.$location.path().indexOf(QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute) !== -1) {\r\n return this.quizzesRouter.quizzesDetailsUrl(quizId);\r\n }\r\n else if (this.$location.path().indexOf(QuizzesRouter_1.QuizzesRouter.flashcardsIndexRoute) !== -1) {\r\n return this.quizzesRouter.flashcardsDetailsUrl(quizId);\r\n }\r\n };\r\n QuizViewTopTabsController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n QuizService_1.QuizService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return QuizViewTopTabsController;\r\n})();\r\nexports.QuizViewTopTabsController = QuizViewTopTabsController;\r\nfunction QuizViewTopTabsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: QuizViewTopTabsController,\r\n scope: {\r\n quiz: \"=vhsQuiz\",\r\n topMenuKey: \"=vhsTopMenuKey\",\r\n },\r\n templateUrl: url.template(\"components/vhs-quiz-top-tabs.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.QuizViewTopTabsDirectiveFactory = QuizViewTopTabsDirectiveFactory;\r\nQuizViewTopTabsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../branding/CustomBrandingService\":35,\"../quizzes/QuizService\":396,\"../security/PermissionsService\":418,\"../urls/QuizzesRouter\":486,\"../utils/UrlService\":528,\"./dialog/DialogService\":166}],81:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ReferenceService_1 = require(\"./../reference/ReferenceService\");\r\nvar ReferenceUtils_1 = require(\"./../reference/ReferenceUtils\");\r\nvar IReferenceEntitiesParams_1 = require(\"./../reference/models/IReferenceEntitiesParams\");\r\nvar ReferenceCheckboxSelectorController = (function () {\r\n function ReferenceCheckboxSelectorController($scope, referenceApi, referenceUtils) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.referenceApi = referenceApi;\r\n this.referenceUtils = referenceUtils;\r\n $scope.vm = this;\r\n this.referenceApi.getActiveReferenceEntitiesForSelector(this.$scope.referenceName, new IReferenceEntitiesParams_1.ReferenceEntitiesParams(this.$scope.referenceFilter, this.$scope.referenceSorting, undefined, undefined, this.$scope.businessUnitFilter, this.$scope.nullableBusinessUnit), null)\r\n .then(function (result) {\r\n _this.referenceEntities = result;\r\n _this.$scope.$watch(function () {\r\n return $scope.model[$scope.modelProperty];\r\n }, function (newValue) {\r\n _this.modelIds = $scope.model[$scope.modelProperty];\r\n _this.pushDataModel();\r\n });\r\n });\r\n }\r\n ReferenceCheckboxSelectorController.prototype.isItemDisabled = function (entity) {\r\n return this.$scope.referenceDisabledIds.filter(function (id) { return id == entity.id; }).length > 0;\r\n };\r\n ReferenceCheckboxSelectorController.prototype.pushDataModel = function () {\r\n for (var i = 0; i < this.referenceEntities.length; ++i) {\r\n var entity = this.referenceEntities[i];\r\n entity[\"selected\"] = false;\r\n for (var j = 0; j < this.modelIds.length; ++j) {\r\n var id = this.modelIds[j];\r\n if (entity.id == id) {\r\n entity[\"selected\"] = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.initSelectAll();\r\n };\r\n ReferenceCheckboxSelectorController.prototype.itemSelection = function (entity) {\r\n for (var i = 0; i < this.modelIds.length; ++i) {\r\n var id = this.modelIds[i];\r\n if (id == entity.id) {\r\n this.modelIds.splice(i, 1);\r\n this.$scope.onReferenceEntitiesChange();\r\n return;\r\n }\r\n }\r\n this.modelIds.push(entity.id);\r\n this.$scope.onReferenceEntitiesChange();\r\n };\r\n ReferenceCheckboxSelectorController.prototype.initSelectAll = function () {\r\n var _this = this;\r\n var availableReferenceEntities = this.referenceEntities.filter(function (entity) {\r\n return _this.$scope.referenceDisabledIds.filter(function (id) { return id == entity.id; }).length == 0;\r\n });\r\n var countSelected = 0;\r\n for (var _i = 0; _i < availableReferenceEntities.length; _i++) {\r\n var referenceEntity = availableReferenceEntities[_i];\r\n if (referenceEntity[\"selected\"]) {\r\n countSelected++;\r\n }\r\n }\r\n return this.selectAll = this.referenceEntities && countSelected == availableReferenceEntities.length;\r\n };\r\n ReferenceCheckboxSelectorController.prototype.clickSelectAll = function () {\r\n var _this = this;\r\n var availableReferenceEntities = this.referenceEntities.filter(function (entity) {\r\n return _this.$scope.referenceDisabledIds.filter(function (id) { return id == entity.id; }).length == 0;\r\n });\r\n if (!this.initSelectAll()) {\r\n for (var _i = 0; _i < availableReferenceEntities.length; _i++) {\r\n var entity = availableReferenceEntities[_i];\r\n if (this.modelIds.indexOf(entity.id) < 0) {\r\n this.itemSelection(entity);\r\n }\r\n }\r\n }\r\n else {\r\n for (var _a = 0; _a < availableReferenceEntities.length; _a++) {\r\n var entity = availableReferenceEntities[_a];\r\n if (this.modelIds.indexOf(entity.id) >= 0) {\r\n this.itemSelection(entity);\r\n }\r\n }\r\n }\r\n this.pushDataModel();\r\n this.initSelectAll();\r\n };\r\n ReferenceCheckboxSelectorController.$inject = [\r\n \"$scope\",\r\n ReferenceService_1.ReferenceService.NAME,\r\n ReferenceUtils_1.ReferenceUtils.NAME\r\n ];\r\n return ReferenceCheckboxSelectorController;\r\n})();\r\nexports.ReferenceCheckboxSelectorController = ReferenceCheckboxSelectorController;\r\nfunction ReferenceCheckboxSelectorDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = ReferenceCheckboxSelectorController;\r\n directive.scope = {\r\n referenceName: \"=vhsReferenceName\",\r\n referenceFilter: \"=?vhsReferenceFilter\",\r\n referenceDisabledIds: \"=?vhsReferenceDisabledIds\",\r\n referenceSorting: \"=?vhsReferenceSorting\",\r\n businessUnitFilter: \"=?vhsBusinessUnitFilter\",\r\n nullableBusinessUnit: \"=?vhsNullableBusinessUnit\",\r\n model: \"=vhsModel\",\r\n modelProperty: \"=vhsModelProperty\",\r\n disabled: \"=?vhsDisabled\",\r\n onReferenceEntitiesChange: \"=?vhsOnReferenceEntitiesChange\"\r\n };\r\n directive.templateUrl = url.template(\"components/reference-checkbox-selector.html\");\r\n directive.transclude = true;\r\n return directive;\r\n}\r\nexports.ReferenceCheckboxSelectorDirectiveFactory = ReferenceCheckboxSelectorDirectiveFactory;\r\nReferenceCheckboxSelectorDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../reference/ReferenceService\":409,\"./../reference/ReferenceUtils\":410,\"./../reference/models/IReferenceEntitiesParams\":411,\"./../utils/UrlService\":528}],82:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ReferenceService_1 = require(\"./../reference/ReferenceService\");\r\nvar IReferenceEntitiesParams_1 = require(\"./../reference/models/IReferenceEntitiesParams\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar ReferenceUtils_1 = require(\"../reference/ReferenceUtils\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar ReferenceMaxLengthValidator_1 = require(\"../reference/validators/ReferenceMaxLengthValidator\");\r\nvar ReferenceRequiredAttributesGroupValidator_1 = require(\"../reference/validators/ReferenceRequiredAttributesGroupValidator\");\r\nvar ReferenceIsRequiredValidator_1 = require(\"../reference/validators/ReferenceIsRequiredValidator\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar ReferenceDropdownEditableSelectorController = (function () {\r\n function ReferenceDropdownEditableSelectorController($scope, $timeout, referenceApi, permissionsApi, referenceUtils, authService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.referenceApi = referenceApi;\r\n this.permissionsApi = permissionsApi;\r\n this.referenceUtils = referenceUtils;\r\n this.authService = authService;\r\n this.disableSaveButton = false;\r\n this.businessUnitSelected = false;\r\n this.hasAllBusinessUnits = false;\r\n this.errorWindow = false;\r\n this.changeCallback = function (id) {\r\n _this.$scope.onSelectorChange(_this.referenceEntitiesMap.get(id));\r\n _this.editWindow = false;\r\n _this.errorWindow = false;\r\n };\r\n $scope.vm = this;\r\n this.permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n this.referenceApi.getActiveReferenceEntitiesForSelector(this.$scope.referenceName, new IReferenceEntitiesParams_1.ReferenceEntitiesParams(this.$scope.referenceFilter, this.$scope.referenceSorting, undefined, undefined, this.$scope.businessUnitFilter, this.$scope.nullableBusinessUnit), null).then(function (result) {\r\n _this.referenceEntities = result;\r\n _this.referenceEntitiesMap = new Map();\r\n _this.referenceEntities.forEach(function (entity) {\r\n _this.referenceEntitiesMap.set(entity.id, entity);\r\n });\r\n });\r\n this.editWindow = false;\r\n this.currentReferenceValidationErrorsMap = new Map();\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.userBusinessUnits = user.businessUnits;\r\n });\r\n }\r\n ReferenceDropdownEditableSelectorController.prototype.setBusinessUnit = function () {\r\n this.currentReferenceEntity[\"businessUnitId\"] = this.$scope.businessUnitFilter;\r\n this.businessUnitSelected = true;\r\n };\r\n ReferenceDropdownEditableSelectorController.prototype.showEditWindow = function (b, referenceName, entityId) {\r\n var _this = this;\r\n this.referenceApi.getReferenceEntity(referenceName, entityId).then(function (result) {\r\n _this.currentReferenceEntity = result.entity;\r\n _this.currentReferenceMetadata = result.metadata;\r\n _this.businessUnitSelected = true;\r\n if (_this.currentReferenceEntity[\"type\"]) {\r\n _this.currentReferenceEntity[\"type\"] = _this.currentReferenceEntity[\"type\"][\"id\"];\r\n }\r\n if (_this.referenceUtils.hasUserTheSameBusinesUnitsWithEntity(_this.userBusinessUnits, _this.currentReferenceEntity)) {\r\n _this.editWindow = b;\r\n }\r\n else {\r\n _this.errorWindow = true;\r\n _this.editWindow = false;\r\n }\r\n });\r\n };\r\n ReferenceDropdownEditableSelectorController.prototype.showCreateWindow = function (b, referenceName) {\r\n var _this = this;\r\n this.errorWindow = false;\r\n this.referenceApi.getEmptyReferenceEntity(referenceName).then(function (result) {\r\n _this.currentReferenceEntity = result.entity;\r\n _this.currentReferenceMetadata = result.metadata;\r\n _this.setBusinessUnit();\r\n });\r\n this.editWindow = b;\r\n };\r\n ReferenceDropdownEditableSelectorController.prototype.saveEntity = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n var referenceName = this.currentReferenceMetadata.key;\r\n var id = this.currentReferenceEntity[ReferenceUtils_1.ReferenceUtils.entityIdProperty];\r\n var call = id != null\r\n ? this.referenceApi.updateReferenceEntity(referenceName, id, this.currentReferenceEntity)\r\n : this.referenceApi.createReferenceEntity(referenceName, this.currentReferenceEntity);\r\n call.then(function (result) {\r\n _this.refreshEntitiesList();\r\n _this.editWindow = false;\r\n })\r\n .finally(function () {\r\n _this.disableSaveButton = false;\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.references.duplicate\") {\r\n INotifier_1.notifier.error(\"Referenced data element already exists\");\r\n }\r\n else {\r\n INotifier_1.notifier.commonError(response);\r\n }\r\n });\r\n };\r\n ReferenceDropdownEditableSelectorController.prototype.deactivateEntity = function () {\r\n var _this = this;\r\n var referenceName = this.currentReferenceMetadata.key;\r\n var id = this.currentReferenceEntity[ReferenceUtils_1.ReferenceUtils.entityIdProperty];\r\n var version = this.currentReferenceEntity[ReferenceUtils_1.ReferenceUtils.entityVersionProperty];\r\n this.referenceApi.setActiveReferenceEntity(referenceName, id, version, false).then(function (result) {\r\n _this.refreshEntitiesList();\r\n _this.editWindow = false;\r\n });\r\n };\r\n ReferenceDropdownEditableSelectorController.prototype.currentEntityValid = function () {\r\n this.currentReferenceValidationErrorsMap.clear();\r\n return new ReferenceMaxLengthValidator_1.ReferenceMaxLengthValidator(this.referenceUtils, this.currentReferenceEntity, this.currentReferenceMetadata, this.currentReferenceValidationErrorsMap)\r\n .valid()\r\n && (this.currentReferenceMetadata.requiredAttributesGroup\r\n ? new ReferenceRequiredAttributesGroupValidator_1.ReferenceRequiredAttributesGroupValidator(this.referenceUtils, this.currentReferenceEntity, this.currentReferenceMetadata, this.currentReferenceValidationErrorsMap)\r\n .valid()\r\n : new ReferenceIsRequiredValidator_1.ReferenceIsRequiredValidator(this.referenceUtils, this.currentReferenceEntity, this.currentReferenceMetadata, this.currentReferenceValidationErrorsMap)\r\n .valid());\r\n };\r\n ReferenceDropdownEditableSelectorController.prototype.refreshEntitiesList = function () {\r\n var _this = this;\r\n this.referenceEntitiesMap.clear();\r\n this.referenceApi.getActiveReferenceEntitiesForSelector(this.$scope.referenceName, new IReferenceEntitiesParams_1.ReferenceEntitiesParams(this.$scope.referenceFilter, this.$scope.referenceSorting, undefined, undefined, this.$scope.businessUnitFilter, this.$scope.nullableBusinessUnit), null).then(function (result) {\r\n _this.referenceEntities = result;\r\n _this.referenceEntitiesMap = new Map();\r\n _this.referenceEntities.forEach(function (entity) {\r\n _this.referenceEntitiesMap.set(entity.id, entity);\r\n });\r\n var newEntity = _this.referenceEntities\r\n .filter(function (entity) { return entity[ReferenceUtils_1.ReferenceUtils.entityNameProperty] === _this.currentReferenceEntity[ReferenceUtils_1.ReferenceUtils.entityNameProperty]; })[0];\r\n if (newEntity) {\r\n var newId = newEntity[ReferenceUtils_1.ReferenceUtils.entityIdProperty];\r\n _this.$scope.model[_this.$scope.modelProperty] = newId;\r\n }\r\n _this.disableSaveButton = false;\r\n });\r\n };\r\n ReferenceDropdownEditableSelectorController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.businessUnitSelected = false;\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n };\r\n ReferenceDropdownEditableSelectorController.prototype.decodeTitle = function (title) {\r\n var result = title;\r\n switch (title) {\r\n case \"Name\": {\r\n result = \"Name\";\r\n break;\r\n }\r\n case \"Source type\": {\r\n result = \"Source type\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n ReferenceDropdownEditableSelectorController.$inject = [\r\n \"$scope\",\r\n \"$timeout\",\r\n ReferenceService_1.ReferenceService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n ReferenceUtils_1.ReferenceUtils.NAME,\r\n AuthService_1.AuthService.NAME\r\n ];\r\n return ReferenceDropdownEditableSelectorController;\r\n})();\r\nexports.ReferenceDropdownEditableSelectorController = ReferenceDropdownEditableSelectorController;\r\nfunction ReferenceDropdownEditableSelectorDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = ReferenceDropdownEditableSelectorController;\r\n directive.scope = {\r\n referenceName: \"=vhsReferenceName\",\r\n referenceFilter: \"=?vhsReferenceFilter\",\r\n referenceSorting: \"=?vhsReferenceSorting\",\r\n businessUnitFilter: \"=?vhsBusinessUnitFilter\",\r\n nullableBusinessUnit: \"=?vhsNullableBusinessUnit\",\r\n model: \"=vhsModel\",\r\n modelProperty: \"=vhsModelProperty\",\r\n disabled: \"=?vhsDisabled\",\r\n required: \"=?vhsRequired\",\r\n elementName: \"@?vhsElementName\",\r\n nullable: \"=?vhsNullable\",\r\n placeholder: \"=?vhsPlaceholder\",\r\n editable: \"=?vhsEditable\",\r\n style: \"=?vhsStyle\",\r\n onSelectorChange: \"&vhsOnChange\",\r\n hideEdit: \"=?vhsHideEdit\"\r\n };\r\n directive.templateUrl = url.template(\"components/reference-dropdown-editable-selector.html\");\r\n return directive;\r\n}\r\nexports.ReferenceDropdownEditableSelectorDirectiveFactory = ReferenceDropdownEditableSelectorDirectiveFactory;\r\nReferenceDropdownEditableSelectorDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../reference/ReferenceUtils\":410,\"../reference/validators/ReferenceIsRequiredValidator\":412,\"../reference/validators/ReferenceMaxLengthValidator\":413,\"../reference/validators/ReferenceRequiredAttributesGroupValidator\":415,\"./../reference/ReferenceService\":409,\"./../reference/models/IReferenceEntitiesParams\":411,\"./../security/PermissionsService\":418,\"./../utils/UrlService\":528}],83:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ReferenceService_1 = require(\"./../reference/ReferenceService\");\r\nvar ReferenceRedirect_1 = require(\"./../reference/ReferenceRedirect\");\r\nvar IReferenceEntitiesParams_1 = require(\"./../reference/models/IReferenceEntitiesParams\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar ReferenceDropdownSelectorController = (function () {\r\n function ReferenceDropdownSelectorController($scope, referenceApi, referenceRedirect, permissionsApi, authManager) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.referenceApi = referenceApi;\r\n this.referenceRedirect = referenceRedirect;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.changeCallback = function (id) {\r\n _this.$scope.onSelectorChange(_this.referenceEntitiesMap.get(id));\r\n };\r\n $scope.vm = this;\r\n this.permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n if (!authManager.isAuthenticated()) {\r\n this.$scope.nullableBusinessUnit = true;\r\n }\r\n this.referenceApi.getActiveReferenceEntitiesForSelector(this.$scope.referenceName, new IReferenceEntitiesParams_1.ReferenceEntitiesParams(this.$scope.referenceFilter, this.$scope.referenceSorting, undefined, undefined, this.$scope.businessUnitFilter, this.$scope.nullableBusinessUnit), null).then(function (result) {\r\n _this.referenceEntities = result;\r\n _this.referenceEntitiesMap = new Map();\r\n _this.referenceEntities.forEach(function (entity) {\r\n _this.referenceEntitiesMap.set(entity.id, entity);\r\n });\r\n });\r\n }\r\n ReferenceDropdownSelectorController.prototype.redirectToNewReferenceItem = function () {\r\n this.referenceRedirect.redirectToEditReferenceItem(this.$scope.referenceName);\r\n };\r\n ReferenceDropdownSelectorController.prototype.redirectToEditReferenceItem = function (referenceId) {\r\n this.referenceRedirect.redirectToEditReferenceItem(this.$scope.referenceName, referenceId);\r\n };\r\n ReferenceDropdownSelectorController.$inject = [\r\n \"$scope\",\r\n ReferenceService_1.ReferenceService.NAME,\r\n ReferenceRedirect_1.ReferenceRedirect.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME\r\n ];\r\n return ReferenceDropdownSelectorController;\r\n})();\r\nexports.ReferenceDropdownSelectorController = ReferenceDropdownSelectorController;\r\nfunction ReferenceDropdownSelectorDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = ReferenceDropdownSelectorController;\r\n directive.scope = {\r\n referenceName: \"=vhsReferenceName\",\r\n referenceFilter: \"=?vhsReferenceFilter\",\r\n referenceSorting: \"=?vhsReferenceSorting\",\r\n businessUnitFilter: \"=?vhsBusinessUnitFilter\",\r\n nullableBusinessUnit: \"=?vhsNullableBusinessUnit\",\r\n model: \"=vhsModel\",\r\n modelProperty: \"=vhsModelProperty\",\r\n disabled: \"=?vhsDisabled\",\r\n required: \"=?vhsRequired\",\r\n elementName: \"@?vhsElementName\",\r\n nullable: \"=?vhsNullable\",\r\n placeholder: \"=?vhsPlaceholder\",\r\n editable: \"=?vhsEditable\",\r\n style: \"=?vhsStyle\",\r\n onSelectorChange: \"&vhsOnChange\"\r\n };\r\n directive.templateUrl = url.template(\"components/reference-dropdown-selector.html\");\r\n return directive;\r\n}\r\nexports.ReferenceDropdownSelectorDirectiveFactory = ReferenceDropdownSelectorDirectiveFactory;\r\nReferenceDropdownSelectorDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../authcore/AuthManager\":25,\"./../reference/ReferenceRedirect\":408,\"./../reference/ReferenceService\":409,\"./../reference/models/IReferenceEntitiesParams\":411,\"./../security/PermissionsService\":418,\"./../utils/UrlService\":528}],84:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar IReferenceEntitiesParams_1 = require(\"./../reference/models/IReferenceEntitiesParams\");\r\nvar ReferenceUtils_1 = require(\"./../reference/ReferenceUtils\");\r\nvar ReferenceService_1 = require(\"./../reference/ReferenceService\");\r\nvar ReferenceMultipleSelectorController = (function () {\r\n function ReferenceMultipleSelectorController($scope, referenceApi, referenceUtils) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.referenceApi = referenceApi;\r\n this.referenceUtils = referenceUtils;\r\n $scope.vm = this;\r\n this.selectedIds = angular.copy(this.$scope.model[this.$scope.modelProperty]);\r\n this.$scope.$watch(function () { return _this.$scope.model[_this.$scope.modelProperty]; }, function () {\r\n _this.selectedIds = angular.copy(_this.$scope.model[_this.$scope.modelProperty]);\r\n _this.setModelIds(_this.selectedIds);\r\n });\r\n this.referenceApi.getActiveReferenceEntitiesForSelector(this.$scope.referenceName, new IReferenceEntitiesParams_1.ReferenceEntitiesParams(this.$scope.referenceFilter, this.$scope.referenceSorting, undefined, undefined, this.$scope.businessUnitFilter, this.$scope.nullableBusinessUnit), null)\r\n .then(function (result) {\r\n _this.referenceEntities = result;\r\n });\r\n }\r\n ReferenceMultipleSelectorController.prototype.setModelIds = function (selectedIds) {\r\n this.$scope.model[this.$scope.modelProperty].splice(0, this.$scope.model[this.$scope.modelProperty].length);\r\n for (var i = 0; i < selectedIds.length; ++i) {\r\n this.$scope.model[this.$scope.modelProperty].push(selectedIds[i]);\r\n }\r\n };\r\n ReferenceMultipleSelectorController.$inject = [\r\n \"$scope\",\r\n ReferenceService_1.ReferenceService.NAME,\r\n ReferenceUtils_1.ReferenceUtils.NAME\r\n ];\r\n return ReferenceMultipleSelectorController;\r\n})();\r\nexports.ReferenceMultipleSelectorController = ReferenceMultipleSelectorController;\r\nfunction ReferenceMultipleSelectorDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = ReferenceMultipleSelectorController;\r\n directive.scope = {\r\n referenceName: \"=vhsReferenceName\",\r\n referenceFilter: \"=?vhsReferenceFilter\",\r\n referenceSorting: \"=?vhsReferenceSorting\",\r\n businessUnitFilter: \"=?vhsBusinessUnitFilter\",\r\n nullableBusinessUnit: \"=?vhsNullableBusinessUnit\",\r\n model: \"=vhsModel\",\r\n modelProperty: \"=vhsModelProperty\",\r\n disabled: \"=?vhsDisabled\"\r\n };\r\n directive.templateUrl = url.template(\"components/reference-multiple-selector.html\");\r\n directive.transclude = true;\r\n return directive;\r\n}\r\nexports.ReferenceMultipleSelectorDirectiveFactory = ReferenceMultipleSelectorDirectiveFactory;\r\nReferenceMultipleSelectorDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../reference/ReferenceService\":409,\"./../reference/ReferenceUtils\":410,\"./../reference/models/IReferenceEntitiesParams\":411,\"./../utils/UrlService\":528}],85:[function(require,module,exports){\nfunction SecondsToTimeFilterFactory() {\r\n return function (seconds) {\r\n if (!seconds)\r\n return '';\r\n var result = {\r\n hours: 0,\r\n minutes: 0,\r\n seconds: 0\r\n };\r\n result.hours = Math.floor(seconds / 3600);\r\n seconds = seconds - result.hours * 3600;\r\n result.minutes = Math.floor(seconds / 60);\r\n seconds = seconds - result.minutes * 60;\r\n result.seconds = seconds;\r\n var str = '';\r\n str = result.hours ? str + result.hours + \":\" : str;\r\n str = str + (\"0\" + result.minutes).slice(-2) + \":\" + (\"0\" + result.seconds).slice(-2);\r\n return str;\r\n };\r\n}\r\nexports.SecondsToTimeFilterFactory = SecondsToTimeFilterFactory;\r\n},{}],86:[function(require,module,exports){\nSelectOptionsDisabledDirectiveFactory.$inject = [\r\n \"$parse\"\r\n];\r\nfunction SelectOptionsDisabledDirectiveFactory($parse) {\r\n function disableOptions($scope, attribute, element, data, fnDisableIfTrue) {\r\n var options = element.find(\"option\");\r\n for (var pos = 0, index = 0; pos < options.length; pos++) {\r\n var elem = angular.element(options[pos]);\r\n if (elem.val() != \"\") {\r\n var locals = {};\r\n locals[attribute] = data[index];\r\n elem.attr(\"disabled\", fnDisableIfTrue($scope, locals));\r\n index++;\r\n }\r\n }\r\n }\r\n function link($scope, element, attributes) {\r\n var expElements = attributes.selectOptionsDisabled.match(/^\\s*(.+)\\s+for\\s+(.+)\\s+in\\s+(.+)?\\s*/);\r\n var attrToWatch = expElements[3];\r\n var fnDisableIfTrue = $parse(expElements[1]);\r\n $scope.$watch(attrToWatch, function (newValue) {\r\n if (newValue) {\r\n disableOptions($scope, expElements[2], element, newValue, fnDisableIfTrue);\r\n }\r\n }, true);\r\n $scope.$watch(attributes.ngModel, function (newValue) {\r\n var disOptions = $parse(attrToWatch)($scope);\r\n if (newValue) {\r\n disableOptions($scope, expElements[2], element, disOptions, fnDisableIfTrue);\r\n }\r\n });\r\n }\r\n var directive = {};\r\n directive.priority = 0;\r\n directive.require = 'ngModel';\r\n directive.link = link;\r\n return directive;\r\n}\r\nexports.SelectOptionsDisabledDirectiveFactory = SelectOptionsDisabledDirectiveFactory;\r\n},{}],87:[function(require,module,exports){\nSelectPlaceholderDirectiveFactory.$inject = [];\r\nfunction SelectPlaceholderDirectiveFactory() {\r\n function setPlaceholder(element) {\r\n var options = element.find(\"option:selected\");\r\n var elem = angular.element(options[0]);\r\n if (elem.val() == \"\") {\r\n element.removeClass(\"simple-text-color\");\r\n element.addClass(\"placeholder-color\");\r\n }\r\n else {\r\n element.removeClass(\"placeholder-color\");\r\n element.addClass(\"simple-text-color\");\r\n }\r\n options = element.find(\"option\");\r\n for (var pos = 0; pos < options.length; pos++) {\r\n var elem_1 = angular.element(options[pos]);\r\n if (elem_1.val() != \"\") {\r\n elem_1.addClass(\"simple-text-color\");\r\n }\r\n else {\r\n elem_1.addClass(\"placeholder-color\");\r\n }\r\n }\r\n }\r\n function link($scope, element, attributes) {\r\n $scope.$watch(attributes.ngModel, function () {\r\n setPlaceholder(element);\r\n });\r\n }\r\n var directive = {};\r\n directive.priority = 0;\r\n directive.require = ['ngModel'];\r\n directive.link = link;\r\n return directive;\r\n}\r\nexports.SelectPlaceholderDirectiveFactory = SelectPlaceholderDirectiveFactory;\r\n},{}],88:[function(require,module,exports){\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar Event_1 = require(\"../authcore/Event\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SessionRestoreController = (function () {\r\n function SessionRestoreController($location, $scope, authApi, authManager) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$scope = $scope;\r\n this.authApi = authApi;\r\n this.authManager = authManager;\r\n this.showRestoreSessionFailedMessage = false;\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.LOGGED_ON, function () {\r\n _this.showRestoreSessionFailedMessage = false;\r\n });\r\n $scope.$on(Event_1.Event.LOGGED_OFF, function () {\r\n _this.showRestoreSessionFailedMessage = false;\r\n });\r\n $scope.$on(Event_1.Event.SESSION_RESTORE_FAILED, function () {\r\n _this.showRestoreSessionFailedMessage = true;\r\n });\r\n }\r\n SessionRestoreController.prototype.trySessionRestore = function () {\r\n this.authApi.tryToAutoRefresh();\r\n this.showRestoreSessionFailedMessage = false;\r\n };\r\n SessionRestoreController.prototype.hideRestoreSessionFailedMessage = function () {\r\n this.showRestoreSessionFailedMessage = false;\r\n };\r\n SessionRestoreController.$inject = [\r\n \"$location\",\r\n \"$scope\",\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n ];\r\n return SessionRestoreController;\r\n})();\r\nexports.SessionRestoreController = SessionRestoreController;\r\nfunction SessionRestoreDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/session-restore.html\");\r\n directive.link = link;\r\n directive.scope = true;\r\n directive.controller = SessionRestoreController;\r\n return directive;\r\n}\r\nexports.SessionRestoreDirectiveFactory = SessionRestoreDirectiveFactory;\r\nSessionRestoreDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../authcore/Event\":27,\"../utils/UrlService\":528}],89:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar SkipToContentController = (function () {\r\n function SkipToContentController($location, $scope, $anchorScroll) {\r\n this.$location = $location;\r\n this.$scope = $scope;\r\n this.$anchorScroll = $anchorScroll;\r\n this.$scope.vm = this;\r\n }\r\n SkipToContentController.prototype.skipToContent = function () {\r\n this.$location.hash('mainContent');\r\n this.$anchorScroll();\r\n };\r\n SkipToContentController.$inject = [\r\n \"$location\",\r\n \"$scope\",\r\n \"$anchorScroll\"\r\n ];\r\n return SkipToContentController;\r\n})();\r\nfunction SkipToContentDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.scope = true;\r\n directive.controller = SkipToContentController;\r\n directive.templateUrl = url.template(\"components/skip-to-content.html\");\r\n return directive;\r\n}\r\nexports.SkipToContentDirectiveFactory = SkipToContentDirectiveFactory;\r\nSkipToContentDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../utils/UrlService\":528}],90:[function(require,module,exports){\nvar TooltipController = (function () {\r\n function TooltipController($timeout) {\r\n this.$timeout = $timeout;\r\n }\r\n TooltipController.prototype.makeTooltip = function (element) {\r\n this.$timeout(function (a) { return element.tooltip(); }, 0, false);\r\n };\r\n TooltipController.$inject = [\r\n \"$timeout\"\r\n ];\r\n return TooltipController;\r\n})();\r\nfunction TooltipDirectiveFactory() {\r\n function link($scope, element, attributes, controller, transclude) {\r\n controller.makeTooltip(element);\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.controller = TooltipController;\r\n directive.scope = true;\r\n directive.trunsclude = false;\r\n return directive;\r\n}\r\nexports.TooltipDirectiveFactory = TooltipDirectiveFactory;\r\n},{}],91:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar UploadArchiveInCourseEditDirectiveController = (function () {\r\n function UploadArchiveInCourseEditDirectiveController($scope, $uploader, $routeParams, courseService, coursesRouter, securityService, bundleService, url) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$uploader = $uploader;\r\n this.$routeParams = $routeParams;\r\n this.courseService = courseService;\r\n this.coursesRouter = coursesRouter;\r\n this.securityService = securityService;\r\n this.bundleService = bundleService;\r\n this.url = url;\r\n this.bundleFilesSaving = false;\r\n this.archiveImportTargetDir = \"\";\r\n $scope.vm = this;\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var hasCourseId = this.courseId != null;\r\n var courseIdStr = String(this.courseId);\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(hasCourseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n if (this.$scope.bundleId) {\r\n this.loadBundle(this.$scope.bundleId).then(function () {\r\n _this.isInitialized = true;\r\n });\r\n }\r\n if (!this.$scope.bundleId) {\r\n this.$scope.$watch(function () { return _this.$scope.bundleId; }, function (newValue, oldValue) {\r\n if (newValue) {\r\n _this.loadBundle(_this.$scope.bundleId);\r\n }\r\n });\r\n }\r\n }\r\n UploadArchiveInCourseEditDirectiveController.prototype.uploadArchiveToPath = function () {\r\n var _this = this;\r\n if (!this.archive) {\r\n return;\r\n }\r\n this.bundleFilesSaving = true;\r\n if (!this.bundle) {\r\n if (this.$scope.createBundleFunction) {\r\n this.$scope.createBundleFunction()\r\n .then(function (result) {\r\n _this.bundle = result;\r\n _this.$scope.bundleId = result.id;\r\n return _this.performArchiveUpload();\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"Incorrect configuration to create Bundle\");\r\n }).finally(function () {\r\n _this.bundleFilesSaving = false;\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Incorrect configuration to create Bundle\");\r\n }\r\n }\r\n else {\r\n this.performArchiveUpload()\r\n .finally(function () {\r\n _this.bundleFilesSaving = false;\r\n });\r\n }\r\n };\r\n UploadArchiveInCourseEditDirectiveController.prototype.performArchiveUpload = function () {\r\n var _this = this;\r\n var targetDir = this.archiveImportTargetDir || \"\";\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: this.url.base('/api/bundles/course/:bundleId/archive?bundleVersion=:bundleVersion&targetDir=:targetDir&courseId=:courseId')\r\n .param(\":bundleId\", this.$scope.bundleId)\r\n .param(\":bundleVersion\", this.bundle.version)\r\n .param(\":targetDir\", targetDir)\r\n .param(\":courseId\", this.courseId)\r\n .service(),\r\n file: this.archive\r\n }).success(function () {\r\n _this.confirmationDialogMessage = \"The archive was successfully imported\";\r\n _this.showConfirmationDialog();\r\n }).error(function () {\r\n _this.confirmationDialogMessage = \"An error occurred during archive import\";\r\n _this.showConfirmationDialog();\r\n });\r\n };\r\n UploadArchiveInCourseEditDirectiveController.prototype.loadBundle = function (bundleId) {\r\n var _this = this;\r\n return this.bundleService.getBundle(bundleId, \"LOADED_AT_START\").then(function (bundle) {\r\n _this.bundle = bundle;\r\n return _this.bundle;\r\n });\r\n };\r\n UploadArchiveInCourseEditDirectiveController.prototype.showUploadInstructions = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#uploadInstructionsDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n UploadArchiveInCourseEditDirectiveController.prototype.showConfirmationDialog = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#dialogMessage\").html(this.confirmationDialogMessage);\r\n $(\"#confirmationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n UploadArchiveInCourseEditDirectiveController.$inject = [\r\n \"$scope\",\r\n \"Upload\",\r\n \"$routeParams\",\r\n CourseService_1.CourseService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n BundleService_1.BundleService.NAME,\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return UploadArchiveInCourseEditDirectiveController;\r\n})();\r\nexports.UploadArchiveInCourseEditDirectiveController = UploadArchiveInCourseEditDirectiveController;\r\nfunction UploadArchiveInCourseEditDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: UploadArchiveInCourseEditDirectiveController,\r\n scope: {\r\n bundleId: \"=?vhsBundleId\",\r\n createBundleFunction: \"=?vhsCreateBundleFunction\"\r\n },\r\n templateUrl: url.template(\"components/upload-archive-in-course-edit.html\"),\r\n };\r\n}\r\nexports.UploadArchiveInCourseEditDirectiveFactory = UploadArchiveInCourseEditDirectiveFactory;\r\nUploadArchiveInCourseEditDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../bundles/BundleService\":36,\"../courses/CourseService\":211,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/UrlService\":528}],92:[function(require,module,exports){\nvar UploadsService_1 = require(\"./../storage/UploadsService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar UploadsStatusController = (function () {\r\n function UploadsStatusController($scope, $interval, uploadsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$interval = $interval;\r\n this.uploadsService = uploadsService;\r\n this.currentlyUploadableFiles = [];\r\n this.showFiles = true;\r\n this.currentlyUploadableFilesFunc = function () {\r\n _this.currentlyUploadableFiles = _this.uploadsService.getCurrentlyUploadableFiles();\r\n };\r\n this.$scope.vm = this;\r\n this.$interval(this.currentlyUploadableFilesFunc, UploadsStatusController.CURRENTLY_UPLOADABLE_FILES_DELAY);\r\n }\r\n UploadsStatusController.prototype.cancel = function (file) {\r\n this.uploadsService.cancel(file);\r\n };\r\n UploadsStatusController.prototype.toggleFiles = function () {\r\n this.showFiles = !this.showFiles;\r\n };\r\n UploadsStatusController.CURRENTLY_UPLOADABLE_FILES_DELAY = 1000;\r\n UploadsStatusController.$inject = [\r\n \"$scope\",\r\n \"$interval\",\r\n UploadsService_1.UploadsService.NAME\r\n ];\r\n return UploadsStatusController;\r\n})();\r\nUploadsStatusDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\nfunction UploadsStatusDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.scope = true;\r\n directive.controller = UploadsStatusController;\r\n directive.templateUrl = url.template(\"components/uploads-status.html\");\r\n return directive;\r\n}\r\nexports.UploadsStatusDirectiveFactory = UploadsStatusDirectiveFactory;\r\n},{\"./../storage/UploadsService\":458,\"./../utils/UrlService\":528}],93:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar UserAvatarController = (function () {\r\n function UserAvatarController($scope, url, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.url = url;\r\n this.userService = userService;\r\n this.isInitialized = false;\r\n $scope.avatarVm = this;\r\n this.profilePhoto = this.$scope.profilePhoto;\r\n this.isInitialized = true;\r\n this.$scope.$watchGroup([\r\n \"userId\"\r\n ], (function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.userId = _this.$scope.userId;\r\n _this.loadUser();\r\n }));\r\n this.loadUser();\r\n this.listenerAvatarImage();\r\n }\r\n UserAvatarController.prototype.listenerAvatarImage = function () {\r\n var _this = this;\r\n this.$scope.$on('avatar.upload.img', function (event, preview, isReset) {\r\n if (!preview && !isReset) {\r\n }\r\n else if (preview) {\r\n _this.userAvatar.previewUrl = preview;\r\n }\r\n else {\r\n _this.userAvatar.previewUrl = undefined;\r\n }\r\n });\r\n };\r\n UserAvatarController.prototype.loadUser = function () {\r\n var _this = this;\r\n if (this.profilePhoto == null) {\r\n if (!this.userId) {\r\n this.userService.getCurrentUserProfile()\r\n .then(function (user) {\r\n _this.userAvatar = user;\r\n });\r\n }\r\n else {\r\n this.userService.getLogoByUserId(this.userId)\r\n .then(function (logoUrl) {\r\n _this.userAvatar = {\r\n previewUrl: logoUrl\r\n };\r\n });\r\n }\r\n }\r\n };\r\n UserAvatarController.$inject = [\r\n \"$scope\",\r\n UrlService_1.UrlService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return UserAvatarController;\r\n})();\r\nexports.UserAvatarController = UserAvatarController;\r\nfunction VhsUserAvatarDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.templateUrl = url.template(\"components/user-avatar.html\");\r\n directive.link = link;\r\n directive.scope = {\r\n userId: \"=?vhsUserId\",\r\n profilePhoto: \"=?vhsProfilePhoto\"\r\n };\r\n directive.controller = UserAvatarController;\r\n return directive;\r\n}\r\nexports.VhsUserAvatarDirectiveFactory = VhsUserAvatarDirectiveFactory;\r\nVhsUserAvatarDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../users/UserService\":499,\"../utils/UrlService\":528}],94:[function(require,module,exports){\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar SecuredObjectType_1 = require(\"./../security/permissions/SecuredObjectType\");\r\nvar IPermission_1 = require(\"./../security/permissions/IPermission\");\r\nvar UsersAndGroupsSelectorController = (function () {\r\n function UsersAndGroupsSelectorController($scope, $q, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.userService = userService;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.users = [];\r\n this.groups = [];\r\n this.userIds = [];\r\n this.groupIds = [];\r\n this.isLoaded = false;\r\n this.permissionSelected = false;\r\n this.selectedPermission = {};\r\n this.selectedPermissions = [];\r\n this.searchNameField = null;\r\n this.usersCompareFn = function (first, second) {\r\n if (first.name > second.name) {\r\n return 1;\r\n }\r\n else if (first.name < second.name) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n };\r\n this.groupsCompareFn = function (first, second) {\r\n if (first.name > second.name) {\r\n return 1;\r\n }\r\n else if (first.name < second.name) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n };\r\n $scope.vm = this;\r\n $scope.groupsSelectorDisabled = $scope.groupsSelectorDisabled ? $scope.groupsSelectorDisabled : false;\r\n this.$scope.disabled = this.$scope.disabled != null\r\n ? this.$scope.disabled\r\n : false;\r\n this.$scope.isPermissionsDelegation = true;\r\n this.permissionsWithUsersAndGroups = this.$scope.permissionsWithUsersAndGroupsModel;\r\n this.permissionsWithUsersAndGroups.forEach(function (permissionsWithUsersAndGroup) {\r\n permissionsWithUsersAndGroup.isEditing = false;\r\n permissionsWithUsersAndGroup.isUsersShowed = true;\r\n permissionsWithUsersAndGroup.isGroupsShowed = true;\r\n permissionsWithUsersAndGroup.currentAvailableUserIds = [];\r\n permissionsWithUsersAndGroup.currentAvailableGroupIds = [];\r\n permissionsWithUsersAndGroup.currentAvailableUserAndGroupIds = [];\r\n permissionsWithUsersAndGroup.currentAvailableUsers = [];\r\n permissionsWithUsersAndGroup.currentAvailableGroups = [];\r\n permissionsWithUsersAndGroup.currentAvailableUsersAndGroups = [];\r\n permissionsWithUsersAndGroup.currentSelectedUsers = [];\r\n permissionsWithUsersAndGroup.currentSelectedGroups = [];\r\n permissionsWithUsersAndGroup.currentSelectedUsersAndGroups = [];\r\n var currentUser = _this.getCurrentUser();\r\n if (!_this.$scope.objectModel[_this.$scope.objectModelProperty].id && currentUser.id && currentUser.name) {\r\n var currentExtUser = currentUser;\r\n currentExtUser.disabled = true;\r\n permissionsWithUsersAndGroup.users.push(currentExtUser);\r\n permissionsWithUsersAndGroup.users.sort(_this.usersCompareFn);\r\n }\r\n permissionsWithUsersAndGroup.userAndGroupIds = [];\r\n permissionsWithUsersAndGroup.userIds = [];\r\n permissionsWithUsersAndGroup.users.forEach(function (user) {\r\n if (_this.userIds.indexOf(user.id) === -1) {\r\n _this.userIds.push(user.id);\r\n _this.users.push(user);\r\n }\r\n permissionsWithUsersAndGroup.userIds.push(user.id);\r\n permissionsWithUsersAndGroup.userAndGroupIds.push(user.id);\r\n });\r\n permissionsWithUsersAndGroup.groupIds = [];\r\n permissionsWithUsersAndGroup.groups.forEach(function (group) {\r\n if (_this.groupIds.indexOf(group.id) === -1) {\r\n _this.groupIds.push(group.id);\r\n _this.groups.push(group);\r\n }\r\n permissionsWithUsersAndGroup.groupIds.push(group.id);\r\n permissionsWithUsersAndGroup.userAndGroupIds.push(group.id);\r\n });\r\n permissionsWithUsersAndGroup.currentAvailableUsersChangeCallback = function (selected, id, name) {\r\n if (selected) {\r\n permissionsWithUsersAndGroup.currentAvailableUsers.push({ id: id, name: name });\r\n }\r\n else {\r\n for (var i = 0; i < permissionsWithUsersAndGroup.currentAvailableUsers.length; ++i) {\r\n var currentAvailableUser = permissionsWithUsersAndGroup.currentAvailableUsers[i];\r\n if (currentAvailableUser.id === id) {\r\n permissionsWithUsersAndGroup.currentAvailableUsers.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n permissionsWithUsersAndGroup.currentAvailableGroupsChangeCallback = function (selected, id, name) {\r\n if (selected) {\r\n permissionsWithUsersAndGroup.currentAvailableGroups.push({ id: id, name: name });\r\n }\r\n else {\r\n for (var i = 0; i < permissionsWithUsersAndGroup.currentAvailableGroups.length; ++i) {\r\n var currentAvailableGroup = permissionsWithUsersAndGroup.currentAvailableGroups[i];\r\n if (currentAvailableGroup.id === id) {\r\n permissionsWithUsersAndGroup.currentAvailableGroups.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n permissionsWithUsersAndGroup.currentAvailableUsersAndGroupsChangeCallback = function (selected, id, name, isUser) {\r\n if (selected) {\r\n if (isUser) {\r\n permissionsWithUsersAndGroup.currentAvailableUsers.push({ id: id, name: name });\r\n }\r\n else {\r\n permissionsWithUsersAndGroup.currentAvailableGroups.push({ id: id, name: name });\r\n }\r\n }\r\n else {\r\n if (isUser) {\r\n for (var i = 0; i < permissionsWithUsersAndGroup.currentAvailableUsers.length; ++i) {\r\n var currentAvailableUser = permissionsWithUsersAndGroup.currentAvailableUsers[i];\r\n if (currentAvailableUser.id === id) {\r\n permissionsWithUsersAndGroup.currentAvailableUsers.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < permissionsWithUsersAndGroup.currentAvailableGroups.length; ++i) {\r\n var currentAvailableGroup = permissionsWithUsersAndGroup.currentAvailableGroups[i];\r\n if (currentAvailableGroup.id === id) {\r\n permissionsWithUsersAndGroup.currentAvailableGroups.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n });\r\n if (this.$scope.vhsRedesignMode) {\r\n this.permissionsWithUsersAndGroups[0].isEditing = true;\r\n this.selectPermission(this.permissionsWithUsersAndGroups[0]);\r\n }\r\n this.$scope.$watch(function ($scope) { return _this.$scope.vm.getCurrentUserId(); }, function (newValue, oldValue) {\r\n if (newValue != oldValue) {\r\n _this.permissionsWithUsersAndGroups.forEach(function (p) {\r\n p.isUsersShowed = false;\r\n var currentUser = _this.getCurrentUser();\r\n UsersAndGroupsSelectorController.moveItems([currentUser], p.users);\r\n UsersAndGroupsSelectorController.moveItemIds([currentUser], p.userIds);\r\n for (var i = 0; i < p.users.length; ++i) {\r\n var u = p.users[i];\r\n if (u.id === oldValue) {\r\n p.users.splice(i, 1);\r\n break;\r\n }\r\n }\r\n p.userIds.splice(p.userIds.indexOf(oldValue), 1);\r\n p.currentAvailableUserIds = [];\r\n p.currentAvailableUsers = [];\r\n p.currentSelectedUsers = [];\r\n p.users.sort(_this.usersCompareFn);\r\n setTimeout(function () { return p.isUsersShowed = true; }, 0);\r\n });\r\n }\r\n });\r\n if (this.$scope.isPermissionsDelegation) {\r\n this.userService.getManagedUsersForSelector(this.$scope.businessUnitFilter).then(function (users) {\r\n var usersMap = new Map();\r\n users.forEach(function (user) { return usersMap.set(user.id, user); });\r\n _this.permissionsWithUsersAndGroups.forEach(function (permissionsWithUsersAndGroup) {\r\n for (var j = permissionsWithUsersAndGroup.users.length - 1; j >= 0; j--) {\r\n if (!usersMap.has(permissionsWithUsersAndGroup.users[j].id)) {\r\n permissionsWithUsersAndGroup.users.splice(j, 1);\r\n }\r\n }\r\n });\r\n });\r\n this.userService.getManagedGroupsForSelector(this.$scope.businessUnitFilter).then(function (groups) {\r\n var groupsMap = new Map();\r\n groups.forEach(function (group) { return groupsMap.set(group.id, group); });\r\n _this.permissionsWithUsersAndGroups.forEach(function (permissionsWithUsersAndGroup) {\r\n for (var j = permissionsWithUsersAndGroup.groups.length - 1; j >= 0; j--) {\r\n if (!groupsMap.has(permissionsWithUsersAndGroup.groups[j].id)) {\r\n permissionsWithUsersAndGroup.groups.splice(j, 1);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n this.isLoaded = true;\r\n }\r\n UsersAndGroupsSelectorController.prototype.editing = function (p) {\r\n p.isEditing = true;\r\n };\r\n UsersAndGroupsSelectorController.prototype.edited = function (p) {\r\n p.isEditing = false;\r\n };\r\n UsersAndGroupsSelectorController.prototype.selectUsers = function (p) {\r\n p.isUsersShowed = false;\r\n UsersAndGroupsSelectorController.moveItems(p.currentAvailableUsers, p.users);\r\n UsersAndGroupsSelectorController.moveItemIds(p.currentAvailableUsers, p.userIds);\r\n p.currentAvailableUserIds = [];\r\n p.currentAvailableUsers = [];\r\n p.users.sort(this.usersCompareFn);\r\n setTimeout(function () { return p.isUsersShowed = true; }, 0);\r\n };\r\n UsersAndGroupsSelectorController.prototype.unselectUsers = function (p) {\r\n p.isUsersShowed = false;\r\n p.currentSelectedUsers.forEach(function (user) {\r\n p.users.splice(p.users.indexOf(user), 1);\r\n p.userIds.splice(p.userIds.indexOf(user.id), 1);\r\n });\r\n p.currentSelectedUsers = [];\r\n setTimeout(function () { return p.isUsersShowed = true; }, 0);\r\n };\r\n UsersAndGroupsSelectorController.prototype.selectGroups = function (p) {\r\n p.isGroupsShowed = false;\r\n UsersAndGroupsSelectorController.moveItems(p.currentAvailableGroups, p.groups);\r\n UsersAndGroupsSelectorController.moveItemIds(p.currentAvailableGroups, p.groupIds);\r\n p.currentAvailableGroupIds = [];\r\n p.currentAvailableGroups = [];\r\n p.groups.sort(this.groupsCompareFn);\r\n setTimeout(function () { return p.isGroupsShowed = true; }, 0);\r\n };\r\n UsersAndGroupsSelectorController.prototype.unselectGroups = function (p) {\r\n p.isGroupsShowed = false;\r\n p.currentSelectedGroups.forEach(function (group) {\r\n p.groups.splice(p.groups.indexOf(group), 1);\r\n p.groupIds.splice(p.groupIds.indexOf(group.id), 1);\r\n });\r\n p.currentSelectedGroups = [];\r\n setTimeout(function () { return p.isGroupsShowed = true; }, 0);\r\n };\r\n UsersAndGroupsSelectorController.prototype.selectUsersAndGroups = function () {\r\n var _this = this;\r\n if (this.selectedPermissions.length > 0) {\r\n var currentAvailableUserIds = this.selectedPermission.currentAvailableUsers;\r\n var currentAvailableUsers = this.selectedPermission.currentAvailableUsers;\r\n var currentAvailableGroupIds = this.selectedPermission.currentAvailableGroups;\r\n var currentAvailableGroups = this.selectedPermission.currentAvailableGroups;\r\n this.selectedPermissions.forEach(function (p) {\r\n UsersAndGroupsSelectorController.moveItems(currentAvailableUserIds, p.users);\r\n UsersAndGroupsSelectorController.moveItemIds(currentAvailableUsers, p.userIds);\r\n UsersAndGroupsSelectorController.moveItems(currentAvailableGroupIds, p.groups);\r\n UsersAndGroupsSelectorController.moveItemIds(currentAvailableGroups, p.groupIds);\r\n p.currentAvailableUserIds = [];\r\n p.currentAvailableUsers = [];\r\n p.currentAvailableGroupIds = [];\r\n p.currentAvailableGroups = [];\r\n p.users.sort(_this.usersCompareFn);\r\n p.groups.sort(_this.groupsCompareFn);\r\n p.isEditing = false;\r\n p.users.forEach(function (user) {\r\n if (_this.userIds.indexOf(user.id) === -1) {\r\n _this.userIds.push(user.id);\r\n _this.users.push(user);\r\n }\r\n });\r\n p.groups.forEach(function (group) {\r\n if (_this.groupIds.indexOf(group.id) === -1) {\r\n _this.groupIds.push(group.id);\r\n _this.groups.push(group);\r\n }\r\n });\r\n });\r\n this.selectedPermissions = [];\r\n this.selectedPermission = null;\r\n this.permissionSelected = false;\r\n this.$scope.onAssignPermissions();\r\n }\r\n };\r\n UsersAndGroupsSelectorController.prototype.changeUserPermission = function (p, user) {\r\n if (p.userIds.indexOf(user.id) === -1) {\r\n UsersAndGroupsSelectorController.moveItems([user], p.users);\r\n UsersAndGroupsSelectorController.moveItemIds([user], p.userIds);\r\n }\r\n else {\r\n p.users.splice(p.users.indexOf(user), 1);\r\n p.userIds.splice(p.userIds.indexOf(user.id), 1);\r\n }\r\n this.$scope.onChangeUserPermission();\r\n };\r\n UsersAndGroupsSelectorController.prototype.changeGroupPermission = function (p, group) {\r\n if (p.groupIds.indexOf(group.id) === -1) {\r\n UsersAndGroupsSelectorController.moveItems([group], p.groups);\r\n UsersAndGroupsSelectorController.moveItemIds([group], p.groupIds);\r\n }\r\n else {\r\n p.groups.splice(p.groups.indexOf(group), 1);\r\n p.groupIds.splice(p.groupIds.indexOf(group.id), 1);\r\n }\r\n this.$scope.onChangeUserPermission();\r\n };\r\n UsersAndGroupsSelectorController.prototype.disableUser = function (user, p) {\r\n switch (p.permission.type) {\r\n case SecuredObjectType_1.SecuredObjectType.MATERIAL.name.toUpperCase():\r\n var material = this.$scope.objectModel[this.$scope.objectModelProperty];\r\n return material.ownerId == user.id;\r\n case SecuredObjectType_1.SecuredObjectType.PLAYLIST.name.toUpperCase():\r\n var playlist = this.$scope.objectModel[this.$scope.objectModelProperty];\r\n return playlist.ownerId == user.id;\r\n case SecuredObjectType_1.SecuredObjectType.COURSE.name.toUpperCase():\r\n var course = this.$scope.objectModel[this.$scope.objectModelProperty];\r\n return course.ownerIds.indexOf(user.id) != -1;\r\n case SecuredObjectType_1.SecuredObjectType.QUIZ.name.toUpperCase():\r\n var quiz = this.$scope.objectModel[this.$scope.objectModelProperty];\r\n return quiz.ownerId == user.id;\r\n }\r\n return false;\r\n };\r\n UsersAndGroupsSelectorController.prototype.getAvailableUsersUrl = function (businessUnit, excludedUserIds) {\r\n var url = this.$scope.isPermissionsDelegation\r\n ? \"/api/userSelector/managedUsers?\"\r\n : \"/api/userSelector/users?\";\r\n if (businessUnit) {\r\n url += \"businessUnitId=\" + businessUnit + \"&\";\r\n }\r\n if (excludedUserIds && excludedUserIds.length > 0) {\r\n excludedUserIds.forEach(function (id) { return url += \"excludedUserIds=\" + id + \"&\"; });\r\n }\r\n return url;\r\n };\r\n UsersAndGroupsSelectorController.prototype.getAvailableGroupsUrl = function (businessUnit, excludedGroupIds, permissionId) {\r\n var url = this.$scope.isPermissionsDelegation\r\n ? \"/api/userSelector/managedGroups?\"\r\n : \"/api/userSelector/groups?\";\r\n if (businessUnit) {\r\n url += \"businessUnitId=\" + businessUnit + \"&\";\r\n }\r\n var excludedAllUsersGroup = false;\r\n if (excludedGroupIds && excludedGroupIds.length > 0) {\r\n excludedGroupIds.forEach(function (id) {\r\n url += \"excludedGroupIds=\" + id + \"&\";\r\n if (!excludedAllUsersGroup) {\r\n excludedAllUsersGroup = id === UsersAndGroupsSelectorController.ALL_USERS_GROUP_ID;\r\n }\r\n });\r\n }\r\n if (!excludedAllUsersGroup && IPermission_1.AllUsersPermissions.PERMISSIONS_IDS.indexOf(permissionId) === -1) {\r\n url += \"excludedGroupIds=\" + UsersAndGroupsSelectorController.ALL_USERS_GROUP_ID + \"&\";\r\n }\r\n return url;\r\n };\r\n UsersAndGroupsSelectorController.prototype.getAvailableUsersAndGroupsUrl = function (businessUnit, excludedUserIds, excludedGroupIds) {\r\n var url = this.$scope.isPermissionsDelegation\r\n ? \"/api/userSelector/managedUsersAndGroups?\"\r\n : \"/api/userSelector/usersAndGroups?\";\r\n if (businessUnit) {\r\n url += \"businessUnitId=\" + businessUnit + \"&\";\r\n }\r\n if (excludedUserIds && excludedUserIds.length > 0) {\r\n excludedUserIds.forEach(function (id) { return url += \"excludedUserIds=\" + id + \"&\"; });\r\n }\r\n var excludedAllUsersGroup = false;\r\n if (excludedGroupIds && excludedGroupIds.length > 0) {\r\n excludedGroupIds.forEach(function (id) {\r\n url += \"excludedGroupIds=\" + id + \"&\";\r\n if (!excludedAllUsersGroup) {\r\n excludedAllUsersGroup = id === UsersAndGroupsSelectorController.ALL_USERS_GROUP_ID;\r\n }\r\n });\r\n }\r\n return url;\r\n };\r\n UsersAndGroupsSelectorController.prototype.getCurrentUserId = function () {\r\n return this.$scope.currentUserIdModel && this.$scope.currentUserIdModelProperty\r\n ? this.$scope.currentUserIdModel[this.$scope.currentUserIdModelProperty]\r\n : null;\r\n };\r\n UsersAndGroupsSelectorController.prototype.getCurrentUserName = function () {\r\n return this.$scope.currentUserNameModel && this.$scope.currentUserNameModelProperty\r\n ? this.$scope.currentUserNameModel[this.$scope.currentUserNameModelProperty]\r\n : null;\r\n };\r\n UsersAndGroupsSelectorController.prototype.getCurrentUser = function () {\r\n return {\r\n id: this.getCurrentUserId(),\r\n name: this.getCurrentUserName()\r\n };\r\n };\r\n UsersAndGroupsSelectorController.moveItems = function (items, destination) {\r\n items.forEach(function (item) {\r\n var destinationIds = destination.map(function (destinationItem) {\r\n return destinationItem.id;\r\n });\r\n var index = destinationIds.indexOf(item.id);\r\n if (index === -1) {\r\n destination.push(item);\r\n }\r\n });\r\n };\r\n UsersAndGroupsSelectorController.moveItemIds = function (items, destination) {\r\n items.forEach(function (item) {\r\n var index = destination.indexOf(item.id);\r\n if (index === -1) {\r\n destination.push(item.id);\r\n }\r\n });\r\n };\r\n UsersAndGroupsSelectorController.prototype.getPermissionName = function (permissionName) {\r\n if (!!this.$scope.vhsObjectModelType && this.$scope.vhsObjectModelType === 'SURVEY') {\r\n return permissionName.replace('quiz', 'survey');\r\n }\r\n else if (!!this.$scope.vhsObjectModelType && this.$scope.vhsObjectModelType === 'FLASHCARD') {\r\n return permissionName.replace('quiz', 'flashcard');\r\n }\r\n return permissionName;\r\n };\r\n UsersAndGroupsSelectorController.prototype.decodePermissionName = function (name) {\r\n var result = name;\r\n switch (name) {\r\n case \"View the material\": {\r\n result = \"View\";\r\n break;\r\n }\r\n case \"Edit the material\": {\r\n result = \"Edit\";\r\n break;\r\n }\r\n case \"Remove the material\": {\r\n result = \"Remove the material\";\r\n break;\r\n }\r\n case \"Download the material\": {\r\n result = \"Download the material\";\r\n break;\r\n }\r\n case \"Comment the material\": {\r\n result = \"Comment the material\";\r\n break;\r\n }\r\n case \"Use this material in courses\": {\r\n result = \"Use this material in courses\";\r\n break;\r\n }\r\n case \"View the course\": {\r\n result = \"View the course\";\r\n break;\r\n }\r\n case \"Edit the course\": {\r\n result = \"Edit the course\";\r\n break;\r\n }\r\n case \"Course Attendees management\": {\r\n result = \"Course Attendees management\";\r\n break;\r\n }\r\n case \"Start the course\": {\r\n result = \"Start the course\";\r\n break;\r\n }\r\n case \"View Learning Path\": {\r\n result = \"View Learning Path\";\r\n break;\r\n }\r\n case \"Start Learning Path\": {\r\n result = \"Start Learning Path\";\r\n break;\r\n }\r\n case \"Assess (put marks for) the quiz\": {\r\n result = \"Assess (put marks for) the quiz\";\r\n break;\r\n }\r\n case \"View the quiz\": {\r\n result = \"View the quiz\";\r\n break;\r\n }\r\n case \"Edit the quiz\": {\r\n result = \"Edit the quiz\";\r\n break;\r\n }\r\n case \"Remove the quiz\": {\r\n result = \"Remove the quiz\";\r\n break;\r\n }\r\n case \"Use in courses\": {\r\n result = \"Use in courses\";\r\n break;\r\n }\r\n case \"Assess (put marks for) the survey\": {\r\n result = \"Assess (put marks for) the survey\";\r\n break;\r\n }\r\n case \"View the survey\": {\r\n result = \"View the survey\";\r\n break;\r\n }\r\n case \"Edit the survey\": {\r\n result = \"Edit the survey\";\r\n break;\r\n }\r\n case \"Remove the survey\": {\r\n result = \"Remove the survey\";\r\n break;\r\n }\r\n case \"Assess (put marks for) the flashcard\": {\r\n result = \"Assess (put marks for) the flashcard\";\r\n break;\r\n }\r\n case \"View the flashcard\": {\r\n result = \"View the flashcard\";\r\n break;\r\n }\r\n case \"Edit the flashcard\": {\r\n result = \"Edit the flashcard\";\r\n break;\r\n }\r\n case \"Remove the flashcard\": {\r\n result = \"Remove the flashcard\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n UsersAndGroupsSelectorController.prototype.selectPermission = function (permission) {\r\n if (permission.isEditing) {\r\n this.selectedPermissions.push(permission);\r\n this.selectedPermission = this.selectedPermissions[0];\r\n this.permissionSelected = true;\r\n }\r\n else {\r\n this.selectedPermissions.splice(this.selectedPermissions.indexOf(permission), 1);\r\n if (this.selectedPermissions.length > 0) {\r\n this.selectedPermission = this.selectedPermissions[0];\r\n this.permissionSelected = true;\r\n }\r\n else {\r\n this.selectedPermission = null;\r\n this.permissionSelected = false;\r\n }\r\n }\r\n };\r\n UsersAndGroupsSelectorController.prototype.removeUserPermissions = function (user) {\r\n this.permissionsWithUsersAndGroups.forEach(function (p) {\r\n if (p.userIds.indexOf(user.id) >= 0) {\r\n p.users.splice(p.users.indexOf(user), 1);\r\n p.userIds.splice(p.userIds.indexOf(user.id), 1);\r\n }\r\n });\r\n this.users.splice(this.users.indexOf(user), 1);\r\n this.userIds.splice(this.userIds.indexOf(user.id), 1);\r\n this.$scope.onAssignPermissions();\r\n };\r\n UsersAndGroupsSelectorController.prototype.removeGroupPermissions = function (group) {\r\n this.permissionsWithUsersAndGroups.forEach(function (p) {\r\n if (p.groupIds.indexOf(group.id) >= 0) {\r\n p.groups.splice(p.groups.indexOf(group), 1);\r\n p.groupIds.splice(p.groupIds.indexOf(group.id), 1);\r\n }\r\n });\r\n this.groups.splice(this.groups.indexOf(group), 1);\r\n this.groupIds.splice(this.groupIds.indexOf(group.id), 1);\r\n this.$scope.onAssignPermissions();\r\n };\r\n UsersAndGroupsSelectorController.prototype.searchUserOrGroupByName = function () {\r\n var _this = this;\r\n if (this.searchNameField != null && this.searchNameField != \"\") {\r\n this.users.forEach(function (user) {\r\n user.hidden = user.name.toLowerCase().indexOf(_this.searchNameField.toLowerCase()) < 0;\r\n });\r\n this.groups.forEach(function (group) {\r\n group.hidden = group.name.toLowerCase().indexOf(_this.searchNameField.toLowerCase()) < 0;\r\n });\r\n }\r\n else {\r\n this.users.forEach(function (user) {\r\n user.hidden = false;\r\n });\r\n this.groups.forEach(function (group) {\r\n group.hidden = false;\r\n });\r\n }\r\n return true;\r\n };\r\n UsersAndGroupsSelectorController.ALL_USERS_GROUP_ID = 1;\r\n UsersAndGroupsSelectorController.$inject = [\r\n \"$scope\",\r\n \"$q\",\r\n UserService_1.UserService.NAME\r\n ];\r\n return UsersAndGroupsSelectorController;\r\n})();\r\nexports.UsersAndGroupsSelectorController = UsersAndGroupsSelectorController;\r\nUsersAndGroupsSelectorDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\nfunction UsersAndGroupsSelectorDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = UsersAndGroupsSelectorController;\r\n directive.scope = {\r\n objectModel: \"=vhsObjectModel\",\r\n objectModelProperty: \"=vhsObjectModelProperty\",\r\n currentUserIdModel: \"=?vhsCurrentUserIdModel\",\r\n currentUserIdModelProperty: \"=?vhsCurrentUserIdModelProperty\",\r\n currentUserNameModel: \"=?vhsCurrentUserNameModel\",\r\n currentUserNameModelProperty: \"=?vhsCurrentUserNameModelProperty\",\r\n permissionsWithUsersAndGroupsModel: \"=vhsPermissionsWithUsersAndGroupsModel\",\r\n businessUnitFilter: \"=?vhsBusinessUnitFilter\",\r\n disabled: \"=?vhsDisabled\",\r\n isPermissionsDelegation: \"@?vhsIsPermissionsDelegation\",\r\n groupsSelectorDisabled: \"=?vhsGroupsSelectorDisabled\",\r\n vhsObjectModelType: \"=?vhsObjectModelType\",\r\n vhsRedesignMode: \"=?vhsRedesignMode\",\r\n onAssignPermissions: \"&vhsOnAssignPermissions\",\r\n onChangeUserPermission: \"&vhsOnChangeUserPermission\",\r\n };\r\n directive.templateUrl = url.template(\"components/users-and-groups-selector.html\");\r\n directive.transclude = true;\r\n return directive;\r\n}\r\nexports.UsersAndGroupsSelectorDirectiveFactory = UsersAndGroupsSelectorDirectiveFactory;\r\n},{\"./../security/permissions/IPermission\":423,\"./../security/permissions/SecuredObjectType\":424,\"./../users/UserService\":499,\"./../utils/UrlService\":528}],95:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AudioResponderController = (function () {\r\n function AudioResponderController($scope, $parse) {\r\n this.$scope = $scope;\r\n this.$parse = $parse;\r\n $scope.vm = this;\r\n this.allowPause = this.$scope.vhsAllowPause;\r\n this.allowSaveRecording = this.$scope.vhsAllowSaveRecording;\r\n this.allowPlayback = this.$scope.vhsAllowPlayback;\r\n this.maxLength = this.$scope.vhsMaxLength;\r\n this.onCompleteRecordingCallback = this.$scope.vhsOnCompleteRecordingCallback;\r\n this.recordUrl = \"\";\r\n this.recordingInstructions = this.$scope.vhsRecordingInstructions;\r\n this.onBeforeRecordingStartedCallback = this.$scope.vhsOnBeforeRecordingStartedCallback;\r\n this.onPauseRecordingCallback = this.$scope.vhsOnPauseRecordingCallback;\r\n this.onStartRecordingCallback = this.$scope.vhsOnStartRecordingCallback;\r\n }\r\n AudioResponderController.prototype.init = function ($scope) {\r\n };\r\n AudioResponderController.prototype.invokeCallback = function (blob, recordingPromise) {\r\n return this.$parse(this.$scope.vhsOnCompleteRecordingCallback)(this.$scope.$parent, { blob: blob, recordingPromise: recordingPromise });\r\n };\r\n ;\r\n AudioResponderController.$inject = [\r\n \"$scope\",\r\n \"$parse\"\r\n ];\r\n return AudioResponderController;\r\n})();\r\nexports.AudioResponderController = AudioResponderController;\r\nfunction AudioResponderDirectiveFactory(url) {\r\n function link($scope, controller) {\r\n controller.init($scope);\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.controller = AudioResponderController;\r\n directive.scope = {\r\n vhsId: \"=?\",\r\n vhsAllowPause: \"=?\",\r\n vhsAllowSaveRecording: \"=?\",\r\n vhsAllowPlayback: \"=?\",\r\n vhsMaxLength: \"=?\",\r\n vhsOnCompleteRecordingCallback: \"@\",\r\n vhsRecordingInstructions: \"=?\",\r\n vhsOnBeforeRecordingStartedCallback: \"=?\",\r\n vhsOnPauseRecordingCallback: \"=?\",\r\n vhsOnStartRecordingCallback: \"=?\",\r\n };\r\n directive.templateUrl = url.template(\"components/vhs-audio-responder.html\");\r\n return directive;\r\n}\r\nexports.AudioResponderDirectiveFactory = AudioResponderDirectiveFactory;\r\nAudioResponderDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528}],96:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar NotificationEventKey_1 = require(\"../notificationTemplates/model/NotificationEventKey\");\r\nvar BadgesService_1 = require(\"../gamification/BadgesService\");\r\nvar GamificationRouter_1 = require(\"../urls/GamificationRouter\");\r\nvar BadgeTemplateScope_1 = require(\"../gamification/models/BadgeTemplateScope\");\r\nvar VhsBadgeTemplateDirectiveController = (function () {\r\n function VhsBadgeTemplateDirectiveController($scope, $http, $location, url, authService, badgeService, gamificationRouter, dialogService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.url = url;\r\n this.authService = authService;\r\n this.badgeService = badgeService;\r\n this.gamificationRouter = gamificationRouter;\r\n this.dialogService = dialogService;\r\n this.hasAllBusinessUnits = false;\r\n this.visibleBUSelector = false;\r\n this.templateDetailsDeletionInProgress = false;\r\n $scope.vm = this;\r\n this.badgeGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/badges/templates\")\r\n .service()));\r\n this.badgeGridModel.filter.businessUnitId = null;\r\n this.badgeGridModel.filter.event = \"\";\r\n this.visibleBUSelector = true;\r\n this.authService.getCurrentUser()\r\n .then(function (user) {\r\n _this.user = user;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n if (!_this.hasAllBusinessUnits) {\r\n _this.badgeGridModel.filter.businessUnitId = user.businessUnits[0];\r\n }\r\n })\r\n .then(function () {\r\n _this.badgeGridModel.loadPage(0);\r\n });\r\n }\r\n VhsBadgeTemplateDirectiveController.prototype.getVisibleContent = function () {\r\n var visibleAllIfUserHaveMultiplyBU = false;\r\n if (!this.hasAllBusinessUnits && this.badgeGridModel.filter.businessUnitId\r\n || !this.hasAllBusinessUnits && this.user && this.user.businessUnits && this.user.businessUnits.length === 1\r\n || this.hasAllBusinessUnits) {\r\n visibleAllIfUserHaveMultiplyBU = true;\r\n }\r\n return visibleAllIfUserHaveMultiplyBU;\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.convertIsActive = function (isActive) {\r\n return isActive != undefined\r\n ? isActive ? 'Yes' : 'No'\r\n : undefined;\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.getLinkForEditBadgeTemplate = function (templateId) {\r\n this.$location.url(this.gamificationRouter.templateEditUrl(templateId, this.badgeGridModel.filter.businessUnitId));\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.onBusinessUnitChange = function () {\r\n this.badgeGridModel.loadPage(0);\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.setActiveProperty = function (index, badge, active) {\r\n var _this = this;\r\n if (!active) {\r\n this.dialogService.confirm(\"Badge will be deactivated. Continue?\", {\r\n title: \"Deactivate\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n _this.setActivePropertyHelper(index, badge, active);\r\n });\r\n }\r\n else {\r\n this.setActivePropertyHelper(index, badge, active);\r\n }\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.setActivePropertyHelper = function (index, badgeTemplate, active) {\r\n var _this = this;\r\n this.badgeService.setActiveProperty(badgeTemplate.id, badgeTemplate.version, active, this.badgeGridModel.filter.businessUnitId)\r\n .then(function (result) {\r\n _this.badgeGridModel.entries[index] = result;\r\n });\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.removeBadgeTemplateDetails = function (notificationTemplateId) {\r\n var _this = this;\r\n this.badgeService.removeBadgeTemplateDetails(notificationTemplateId)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Badge template has been removed\");\r\n _this.badgeGridModel.loadPage(0);\r\n setTimeout(function () { return _this.templateDetailsDeletionInProgress = false; }, 8);\r\n });\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.isEventHidden = function (eventKey) {\r\n return NotificationEventKey_1.systemEvents.indexOf(eventKey) != -1 && (!this.hasAllBusinessUnits || this.badgeGridModel.filter.businessUnitId)\r\n || NotificationEventKey_1.hiddenEvents.indexOf(eventKey) != -1;\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.showRevertButton = function (badgeTemplate) {\r\n return badgeTemplate.isActive\r\n && badgeTemplate.scope != BadgeTemplateScope_1.BadgeTemplateScope[BadgeTemplateScope_1.BadgeTemplateScope.DEFAULT]\r\n && (this.badgeGridModel.filter.businessUnitId == null || badgeTemplate.scope == BadgeTemplateScope_1.BadgeTemplateScope[BadgeTemplateScope_1.BadgeTemplateScope.BUSINESS_UNIT]);\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.hideActiveButton = function (badgeTemplate) {\r\n var self = badgeTemplate.scope == this.badgeGridModel.filter.businessUnitId != null && badgeTemplate.scope == BadgeTemplateScope_1.BadgeTemplateScope[BadgeTemplateScope_1.BadgeTemplateScope.BUSINESS_UNIT]\r\n || this.badgeGridModel.filter.businessUnitId == null && badgeTemplate.scope == BadgeTemplateScope_1.BadgeTemplateScope[BadgeTemplateScope_1.BadgeTemplateScope.SYSTEM];\r\n return !self || badgeTemplate.isActive;\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.showDeactivateButton = function (badgeTemplate) {\r\n return badgeTemplate.isActive && (!badgeTemplate.isDisabledParent || badgeTemplate.scope == BadgeTemplateScope_1.BadgeTemplateScope[BadgeTemplateScope_1.BadgeTemplateScope.DEFAULT]);\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.change = function () {\r\n this.badgeGridModel.loadPage(0);\r\n };\r\n VhsBadgeTemplateDirectiveController.prototype.getBadgeTemplateImgUrl = function (badgeTemplate) {\r\n return badgeTemplate.previewUrl ? badgeTemplate.previewUrl : \"themes/default/img/actionBadges/\" + badgeTemplate.activityBadgeEventKey + \".png\";\r\n };\r\n VhsBadgeTemplateDirectiveController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n GamificationRouter_1.GamificationRouter.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return VhsBadgeTemplateDirectiveController;\r\n})();\r\nexports.VhsBadgeTemplateDirectiveController = VhsBadgeTemplateDirectiveController;\r\nfunction VhsBadgeTemplateDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsBadgeTemplateDirectiveController,\r\n scope: {},\r\n templateUrl: url.template(\"components/vhs-badge-template.html\")\r\n };\r\n}\r\nexports.VhsBadgeTemplateDirectiveFactory = VhsBadgeTemplateDirectiveFactory;\r\nVhsBadgeTemplateDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../gamification/BadgesService\":245,\"../gamification/models/BadgeTemplateScope\":251,\"../notificationTemplates/model/NotificationEventKey\":361,\"../urls/GamificationRouter\":472,\"../utils/UrlService\":528,\"./dialog/DialogService\":166}],97:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar BadgesService_1 = require(\"../gamification/BadgesService\");\r\nvar GamificationRouter_1 = require(\"../urls/GamificationRouter\");\r\nvar UploadUtils_1 = require(\"../utils/UploadUtils\");\r\nvar BadgeTemplateScope_1 = require(\"../gamification/models/BadgeTemplateScope\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar VhsBadgeTemplateEditController = (function () {\r\n function VhsBadgeTemplateEditController($scope, $location, $routeParams, $uploader, $q, url, uploadUtils, badgesService, authManager, authRedirect, gamificationRouter, dialogService, businessUnitsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$uploader = $uploader;\r\n this.$q = $q;\r\n this.url = url;\r\n this.uploadUtils = uploadUtils;\r\n this.badgesService = badgesService;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.gamificationRouter = gamificationRouter;\r\n this.dialogService = dialogService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.errorMessage = \"\";\r\n this.businessUnitName = \"All\";\r\n this.subjectToolbar = [[]];\r\n this.toolbar = [[]];\r\n this.hasPreviewUrlCanceled = false;\r\n $scope.vm = this;\r\n this.badgeTemplateId = $routeParams[GamificationRouter_1.GamificationRouter.TEMPLATE_ID_PARAM];\r\n this.businessUnitId = $routeParams[GamificationRouter_1.GamificationRouter.BUSINESS_UNIT_ID_PARAM];\r\n if (!this.authManager.isAuthenticated()) {\r\n authRedirect.redirectToLogOn();\r\n }\r\n if (this.badgeTemplateId) {\r\n var scope = BadgeTemplateScope_1.BadgeTemplateScope[BadgeTemplateScope_1.BadgeTemplateScope.SYSTEM];\r\n if (this.businessUnitId != null) {\r\n scope = BadgeTemplateScope_1.BadgeTemplateScope[BadgeTemplateScope_1.BadgeTemplateScope.BUSINESS_UNIT];\r\n }\r\n if (this.businessUnitId != null) {\r\n this.businessUnitsService.getBusinessUnitById(this.businessUnitId).then(function (result) {\r\n _this.businessUnitName = result.name;\r\n });\r\n }\r\n this.badgesService.getBadgeTemplateDetailsById(this.badgeTemplateId, scope)\r\n .then(function (result) {\r\n _this.badgeTemplateDetails = result;\r\n _this.previewUrl = _this.badgeTemplateDetails.previewUrl ? _this.badgeTemplateDetails.previewUrl : null;\r\n });\r\n }\r\n else {\r\n this.redirectIndexPageByBadgeType();\r\n }\r\n }\r\n VhsBadgeTemplateEditController.prototype.inactiveProperty = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Notification will be deactivated. Continue?\", {\r\n title: \"Deactivate\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n _this.badgesService.setActiveProperty(_this.badgeTemplateDetails.id, _this.badgeTemplateDetails.version, false)\r\n .then(function () {\r\n _this.redirectIndexPageByBadgeType();\r\n });\r\n });\r\n };\r\n VhsBadgeTemplateEditController.prototype.saveTemplateDetails = function () {\r\n var _this = this;\r\n var templateDetails = {};\r\n this.errorMessage = \"\";\r\n var hasPreviewUrlCanceled = this.hasPreviewUrlCanceled;\r\n this.hasPreviewUrlCanceled = false;\r\n var preview = this.croppedImage == undefined ? this.preview : this.croppedImage;\r\n templateDetails.id = this.badgeTemplateDetails.id;\r\n templateDetails.businessUnitId = this.badgeTemplateDetails.businessUnitId ? this.badgeTemplateDetails.businessUnitId : this.businessUnitId;\r\n templateDetails.eventId = this.badgeTemplateDetails.eventId;\r\n templateDetails.nameTemplate = this.badgeTemplateDetails.name;\r\n templateDetails.subjectTemplate = this.badgeTemplateDetails.subject;\r\n templateDetails.messageTemplate = this.badgeTemplateDetails.message;\r\n templateDetails.isResetPreview = hasPreviewUrlCanceled;\r\n templateDetails.newImageSelected = preview != null;\r\n this.badgesService.saveBadgeTemplateDetails(templateDetails)\r\n .then(function (result) {\r\n _this.badgeTemplateDetails = result;\r\n var upload;\r\n if (preview != null) {\r\n upload = _this.upload(preview, _this.badgeTemplateDetails.id, \"preview\").catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n }\r\n if (response.data.error == \"error.preview.type\") {\r\n INotifier_1.notifier.error(\"Invalid file format: please select a file with .jpg or .png extension\");\r\n }\r\n });\r\n }\r\n else {\r\n upload = _this.$q.when();\r\n }\r\n upload.then(function () {\r\n _this.redirectIndexPageByBadgeType();\r\n INotifier_1.notifier.success(\"Badge template has been saved\");\r\n });\r\n });\r\n };\r\n VhsBadgeTemplateEditController.prototype.removeBadgeTemplateDetails = function () {\r\n var _this = this;\r\n this.badgesService.removeBadgeTemplateDetails(this.badgeTemplateDetails.id)\r\n .then(function () {\r\n _this.redirectIndexPageByBadgeType();\r\n INotifier_1.notifier.success(\"Badge template has been removed\");\r\n });\r\n };\r\n VhsBadgeTemplateEditController.prototype.disableSaveButton = function () {\r\n return !this.badgeTemplateDetails.subject || !this.badgeTemplateDetails.message;\r\n };\r\n VhsBadgeTemplateEditController.prototype.redirectEditPageByBadgeType = function (templateId, businessUnitId) {\r\n switch (this.$scope.badgeType) {\r\n case \"main\":\r\n this.$location.url(this.gamificationRouter.templateEditUrl(templateId, businessUnitId));\r\n break;\r\n }\r\n };\r\n VhsBadgeTemplateEditController.prototype.redirectIndexPageByBadgeType = function () {\r\n switch (this.$scope.badgeType) {\r\n case \"main\":\r\n this.$location.url(this.gamificationRouter.badgesUrl());\r\n break;\r\n }\r\n };\r\n VhsBadgeTemplateEditController.prototype.resetPreview = function () {\r\n if (this.preview) {\r\n this.preview = undefined;\r\n }\r\n if (this.previewUrl) {\r\n this.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n if (this.croppedImage) {\r\n this.croppedImage = undefined;\r\n }\r\n };\r\n VhsBadgeTemplateEditController.prototype.showCropperModalAfterLoad = function () {\r\n var _this = this;\r\n setTimeout(function () {\r\n _this.preview != undefined || _this.previewUrl != undefined\r\n ? _this.showCropperModal()\r\n : _this.showCropperModalAfterLoad();\r\n }, 100);\r\n };\r\n VhsBadgeTemplateEditController.prototype.showCropperModal = function () {\r\n $(\"#imageCropperModal\").modal(\"show\");\r\n };\r\n VhsBadgeTemplateEditController.prototype.restorePreviewUrl = function () {\r\n this.preview = undefined;\r\n this.previewUrl = this.badgeTemplateDetails.previewUrl;\r\n this.croppedImage = undefined;\r\n this.hasPreviewUrlCanceled = false;\r\n };\r\n VhsBadgeTemplateEditController.prototype.upload = function (file, badgeTemplateDetailsId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/badges/templates/upload?badgeTemplateDetailsId=:badgeTemplateDetailsId&fileType=:fileType\")\r\n .param(\":badgeTemplateDetailsId\", badgeTemplateDetailsId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n VhsBadgeTemplateEditController.prototype.getBadgeTemplateImgUrl = function () {\r\n return \"themes/default/img/actionBadges/\" + this.badgeTemplateDetails.badgeKey + \".png\";\r\n };\r\n VhsBadgeTemplateEditController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"Upload\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n GamificationRouter_1.GamificationRouter.NAME,\r\n DialogService_1.DialogService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME\r\n ];\r\n return VhsBadgeTemplateEditController;\r\n})();\r\nexports.VhsBadgeTemplateEditController = VhsBadgeTemplateEditController;\r\nfunction VhsBadgeTemplateEditDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsBadgeTemplateEditController,\r\n scope: {\r\n badgeType: \"@\"\r\n },\r\n templateUrl: url.template(\"components/vhs-badge-template-edit.html\")\r\n };\r\n}\r\nexports.VhsBadgeTemplateEditDirectiveFactory = VhsBadgeTemplateEditDirectiveFactory;\r\nVhsBadgeTemplateEditDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../businessUnits/BusinessUnitsService\":44,\"../gamification/BadgesService\":245,\"../gamification/models/BadgeTemplateScope\":251,\"../urls/GamificationRouter\":472,\"../utils/UploadUtils\":527,\"../utils/UrlService\":528,\"./dialog/DialogService\":166}],98:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar VhsCalendarFilterController = (function () {\r\n function VhsCalendarFilterController($scope) {\r\n this.$scope = $scope;\r\n $scope.vm = this;\r\n this.registeredOrWaitlistedId = this.generateId();\r\n this.courseId = this.generateId();\r\n this.iltSessionId = this.generateId();\r\n this.viltSessionId = this.generateId();\r\n this.notAvailableForRegistrationId = this.generateId();\r\n this.searchStringId = this.generateId();\r\n }\r\n VhsCalendarFilterController.prototype.generateId = function () {\r\n var result = '';\r\n var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n var charactersLength = characters.length;\r\n for (var i = 0; i < 10; i++) {\r\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n }\r\n return result;\r\n };\r\n VhsCalendarFilterController.$inject = [\r\n \"$scope\"\r\n ];\r\n return VhsCalendarFilterController;\r\n})();\r\nexports.VhsCalendarFilterController = VhsCalendarFilterController;\r\nfunction VhsCalendarFilterDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsCalendarFilterController,\r\n scope: {\r\n registeredOrWaitlisted: \"=vhsRegisteredOrWaitlisted\",\r\n iltSession: \"=vhsIltSession\",\r\n viltSession: \"=vhsViltSession\",\r\n notAvailableForRegistration: \"=vhsNotAvailableForRegistration\",\r\n course: \"=vhsCourse\",\r\n searchString: \"=vhsSearchString\",\r\n filter: \"=vhsFilter\",\r\n clearFilter: \"=vhsClearFilter\"\r\n },\r\n templateUrl: url.template(\"components/vhs-calendar-filter.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsCalendarFilterDirectiveFactory = VhsCalendarFilterDirectiveFactory;\r\nVhsCalendarFilterDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528}],99:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar VhsCourseEditTopTabsController = (function () {\r\n function VhsCourseEditTopTabsController($scope, $location, coursesRouter) {\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.coursesRouter = coursesRouter;\r\n this.ABOUT_TAB_KEY = \"about\";\r\n this.STRUCTURE_TAB_KEY = \"structure\";\r\n this.ENROLLMENTS_TAB_KEY = \"enrollments\";\r\n this.LANDING_PAGE_TAB_KEY = \"landingPage\";\r\n this.PARTICIPATION_FORM_TAB_KEY = \"participationForm\";\r\n this.ATTACHED_FILES_TAB_KEY = \"attachedFiles\";\r\n this.EXPORT_IMPORT_TAB_KEY = \"exportImport\";\r\n this.RELATED_PRODUCTS_TAB_KEY = \"relatedProducts\";\r\n this.NOTIFICATION_TEMPLATE_TAB_KEY = \"notificationTemplates\";\r\n this.GAMIFICATION_TAB_KEY = \"gamification\";\r\n $scope.vm = this;\r\n this.currentTopEditPage = this.getCurrentTab();\r\n }\r\n VhsCourseEditTopTabsController.prototype.init = function ($scope, element) {\r\n };\r\n VhsCourseEditTopTabsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.$scope.topMenuKey == topMenuKey;\r\n };\r\n VhsCourseEditTopTabsController.prototype.changeTopEditPath = function () {\r\n this.redirectToUrl(this.currentTopEditPage);\r\n };\r\n VhsCourseEditTopTabsController.prototype.redirectToUrl = function (url) {\r\n this.$location.url(url);\r\n };\r\n VhsCourseEditTopTabsController.prototype.getCurrentTab = function () {\r\n switch (this.$scope.topMenuKey) {\r\n case this.ABOUT_TAB_KEY:\r\n return this.coursesRouter.updateUrl(this.$scope.courseId);\r\n case this.STRUCTURE_TAB_KEY:\r\n return this.coursesRouter.structureUpdateUrl(this.$scope.courseId);\r\n case this.ENROLLMENTS_TAB_KEY:\r\n return this.coursesRouter.enrollmentEditUrl(this.$scope.courseId);\r\n case this.LANDING_PAGE_TAB_KEY:\r\n return this.coursesRouter.landingPageUpdateUrl(this.$scope.courseId);\r\n case this.PARTICIPATION_FORM_TAB_KEY:\r\n return this.coursesRouter.participationFormUpdateUrl(this.$scope.courseId);\r\n case this.ATTACHED_FILES_TAB_KEY:\r\n return this.coursesRouter.bundleUpdateUrl(this.$scope.courseId);\r\n case this.EXPORT_IMPORT_TAB_KEY:\r\n return this.coursesRouter.exportImportUpdateUrl(this.$scope.courseId);\r\n case this.RELATED_PRODUCTS_TAB_KEY:\r\n return this.coursesRouter.relatedProductsUpdateUrl(this.$scope.courseId);\r\n case this.NOTIFICATION_TEMPLATE_TAB_KEY:\r\n return this.coursesRouter.notificationDetailsUrl(this.$scope.courseId);\r\n case this.GAMIFICATION_TAB_KEY:\r\n return this.coursesRouter.gamificationDetailsUrl(this.$scope.courseId);\r\n default:\r\n return this.coursesRouter.updateUrl(this.$scope.courseId);\r\n }\r\n };\r\n VhsCourseEditTopTabsController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return VhsCourseEditTopTabsController;\r\n})();\r\nexports.VhsCourseEditTopTabsController = VhsCourseEditTopTabsController;\r\nfunction VhsCourseEditTopTabsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsCourseEditTopTabsController,\r\n scope: {\r\n courseId: \"=vhsCourseId\",\r\n topMenuKey: \"=vhsTopMenuKey\",\r\n systemPermissions: \"=vhsSystemPermissions\"\r\n },\r\n templateUrl: url.template(\"components/vhs-course-edit-top-tabs.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsCourseEditTopTabsDirectiveFactory = VhsCourseEditTopTabsDirectiveFactory;\r\nVhsCourseEditTopTabsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../urls/CoursesRouter\":468,\"../utils/UrlService\":528}],100:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar VhsCoursePublishDirectiveController = (function () {\r\n function VhsCoursePublishDirectiveController($scope, $http, $location, url, courseService, coursesRouter) {\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.url = url;\r\n this.courseService = courseService;\r\n this.coursesRouter = coursesRouter;\r\n this.publishedCourse = {};\r\n this.publishedCourseModules = [];\r\n this.publishedCourseSections = [];\r\n this.publishedCourseSectionsMap = new Map();\r\n this.sourceCourse = {};\r\n this.sourceCourseModules = [];\r\n this.sourceCourseSections = [];\r\n this.sourceCourseSectionsMap = new Map();\r\n this.sectionPairs = [];\r\n this.isPublishingStarted = false;\r\n $scope.vm = this;\r\n this.publishedCourseId = $scope.publishedCourseId;\r\n this.loadPublishedCourse();\r\n this.coursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/courses/search/all?excludedCourseIds=\" + this.publishedCourseId)));\r\n this.coursesGridModel.filter.courseStatus = \"NOT_STARTED,IN_PROGRESS,COMPLETED\";\r\n this.coursesGridModel.pageSize = 5;\r\n this.coursesGridModel.loadCurrentPage();\r\n }\r\n VhsCoursePublishDirectiveController.prototype.onChangeSourceCourse = function (course) {\r\n var _this = this;\r\n this.sourceCourseId = course.id;\r\n if (this.sourceCourseId && this.sourceCourseId != this.publishedCourseId) {\r\n this.publishedCourseSections = [];\r\n this.publishedCourseSectionsMap.forEach(function (moduleSections) {\r\n moduleSections.forEach(function (sectionExt) {\r\n var selectableSection = angular.copy(sectionExt);\r\n selectableSection.selected = false;\r\n _this.publishedCourseSections.push(selectableSection);\r\n });\r\n });\r\n this.sourceCourseModules = [];\r\n this.sourceCourseSections = [];\r\n this.sourceCourseSectionsMap.clear();\r\n this.publishedCourseSelectedSection = null;\r\n this.sourceCourseSelectedSection = null;\r\n this.sectionPairs = [];\r\n this.loadSourceCourse();\r\n }\r\n };\r\n VhsCoursePublishDirectiveController.prototype.courseSelection = function (course) {\r\n var topic = course.topic;\r\n if (topic.length > 65) {\r\n var tmp = topic.split('');\r\n topic = '';\r\n for (var i = 0; i < 65; i++) {\r\n topic += tmp[i];\r\n }\r\n topic += ' ...';\r\n }\r\n if (course.endDate != null && course.endDate < Date.now()) {\r\n return topic + ' (' + Moment_1.Moment.isValidDate(course.endDate) + ')';\r\n }\r\n return topic;\r\n };\r\n VhsCoursePublishDirectiveController.prototype.getFullPath = function (selectableSection, modules, sections) {\r\n var parentsPath = '';\r\n this.getSectionsParents(selectableSection, sections).forEach(function (str) { return parentsPath += ' / ' + str; });\r\n return this.getModuleById(selectableSection.section.moduleId, modules).name + parentsPath;\r\n };\r\n VhsCoursePublishDirectiveController.prototype.getModuleById = function (moduleId, modules) {\r\n return modules.filter(function (module) { return module.id === moduleId; })[0];\r\n };\r\n VhsCoursePublishDirectiveController.prototype.getSectionsParents = function (selectableSection, sections) {\r\n var result = [];\r\n if (selectableSection.parentId != null) {\r\n var parent_1 = sections.filter(function (section) { return section.id == selectableSection.parentId; })[0];\r\n while (parent_1) {\r\n result.push(parent_1.section.name);\r\n if (parent_1.parentId != null) {\r\n parent_1 = sections.filter(function (section) { return section.id == parent_1.parentId; })[0];\r\n }\r\n else\r\n parent_1 = null;\r\n }\r\n result.push(selectableSection.section.name);\r\n return result;\r\n }\r\n else {\r\n result.push(selectableSection.section.name);\r\n return result;\r\n }\r\n };\r\n VhsCoursePublishDirectiveController.prototype.selectPublishedCourseSection = function (selectableSection) {\r\n if (!selectableSection.selected) {\r\n this.publishedCourseSections.forEach(function (section) { return section.selected = false; });\r\n selectableSection.selected = true;\r\n this.publishedCourseSelectedSection = selectableSection;\r\n }\r\n else {\r\n selectableSection.selected = false;\r\n this.publishedCourseSelectedSection = null;\r\n }\r\n };\r\n VhsCoursePublishDirectiveController.prototype.selectSourceCourseSection = function (selectableSection) {\r\n if (!selectableSection.selected) {\r\n this.sourceCourseSections.forEach(function (section) { return section.selected = false; });\r\n selectableSection.selected = true;\r\n this.sourceCourseSelectedSection = selectableSection;\r\n }\r\n else {\r\n selectableSection.selected = false;\r\n this.sourceCourseSelectedSection = null;\r\n }\r\n };\r\n VhsCoursePublishDirectiveController.prototype.makeSectionsPair = function () {\r\n var selectablePair = {};\r\n selectablePair.publishedCourseSection = this.publishedCourseSelectedSection;\r\n selectablePair.sourceCourseSection = this.sourceCourseSelectedSection;\r\n selectablePair.selected = false;\r\n this.sectionPairs.push(selectablePair);\r\n this.sectionPairs.sort(function (a, b) {\r\n if (a.sourceCourseSection.section.coursewideSortPath < b.sourceCourseSection.section.coursewideSortPath) {\r\n return -1;\r\n }\r\n else if (a.sourceCourseSection.section.coursewideSortPath > b.sourceCourseSection.section.coursewideSortPath) {\r\n return 1;\r\n }\r\n else\r\n return 0;\r\n });\r\n var publishedSectionIndex = this.publishedCourseSections.indexOf(this.publishedCourseSelectedSection);\r\n if (publishedSectionIndex !== -1) {\r\n this.publishedCourseSections.splice(publishedSectionIndex, 1);\r\n }\r\n var sourceSectionIndex = this.sourceCourseSections.indexOf(this.sourceCourseSelectedSection);\r\n if (sourceSectionIndex !== -1) {\r\n this.sourceCourseSections.splice(sourceSectionIndex, 1);\r\n }\r\n this.publishedCourseSelectedSection = null;\r\n this.sourceCourseSelectedSection = null;\r\n };\r\n VhsCoursePublishDirectiveController.prototype.selectSectionsPair = function (selectablePair) {\r\n if (!selectablePair.selected) {\r\n this.sectionPairs.forEach(function (pair) { return pair.selected = false; });\r\n selectablePair.selected = true;\r\n this.selectedSectionPair = selectablePair;\r\n }\r\n else {\r\n selectablePair.selected = false;\r\n this.selectedSectionPair = null;\r\n }\r\n };\r\n VhsCoursePublishDirectiveController.prototype.removeSectionsPair = function () {\r\n var publishedCourseSection = angular.copy(this.selectedSectionPair.publishedCourseSection);\r\n var sourceCourseSection = angular.copy(this.selectedSectionPair.sourceCourseSection);\r\n publishedCourseSection.selected = false;\r\n sourceCourseSection.selected = false;\r\n this.publishedCourseSections.push(publishedCourseSection);\r\n this.sourceCourseSections.push(sourceCourseSection);\r\n this.publishedCourseSections.sort(function (a, b) {\r\n if (a.section.coursewideSortPath < b.section.coursewideSortPath) {\r\n return -1;\r\n }\r\n else if (a.section.coursewideSortPath > b.section.coursewideSortPath) {\r\n return 1;\r\n }\r\n else\r\n return 0;\r\n });\r\n this.sourceCourseSections.sort(function (a, b) {\r\n if (a.section.coursewideSortPath < b.section.coursewideSortPath) {\r\n return -1;\r\n }\r\n else if (a.section.coursewideSortPath > b.section.coursewideSortPath) {\r\n return 1;\r\n }\r\n else\r\n return 0;\r\n });\r\n var pairIndex = this.sectionPairs.indexOf(this.selectedSectionPair);\r\n if (pairIndex !== -1) {\r\n this.sectionPairs.splice(pairIndex, 1);\r\n }\r\n this.selectedSectionPair = null;\r\n };\r\n VhsCoursePublishDirectiveController.prototype.loadPublishedCourse = function () {\r\n var _this = this;\r\n this.courseService.get(this.publishedCourseId).then(function (result) {\r\n angular.copy(result, _this.publishedCourse);\r\n _this.publishedCourse.endDateText = Moment_1.Moment.isValidDate(result.endDate);\r\n _this.publishedCourse.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n _this.courseService.getModules(_this.publishedCourseId).then(function (result) {\r\n angular.copy(result, _this.publishedCourseModules);\r\n _this.publishedCourseModules.forEach(function (module) {\r\n _this.courseService.getModuleSections(_this.publishedCourseId, module.id).then(function (result) {\r\n _this.publishedCourseSectionsMap.set(module.id, result);\r\n result.forEach(function (sectionExt) {\r\n var selectableSection = angular.copy(sectionExt);\r\n selectableSection.selected = false;\r\n _this.publishedCourseSections.push(selectableSection);\r\n });\r\n }).then(function () { return _this.publishedCourseSections.sort(function (a, b) {\r\n if (a.section.coursewideSortPath < b.section.coursewideSortPath) {\r\n return -1;\r\n }\r\n else if (a.section.coursewideSortPath > b.section.coursewideSortPath) {\r\n return 1;\r\n }\r\n else\r\n return 0;\r\n }); });\r\n });\r\n });\r\n });\r\n };\r\n VhsCoursePublishDirectiveController.prototype.loadSourceCourse = function () {\r\n var _this = this;\r\n this.courseService.get(this.sourceCourseId).then(function (result) {\r\n angular.copy(result, _this.sourceCourse);\r\n _this.sourceCourse.endDateText = Moment_1.Moment.isValidDate(result.endDate);\r\n _this.sourceCourse.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n _this.courseService.getModules(_this.sourceCourseId).then(function (result) {\r\n angular.copy(result, _this.sourceCourseModules);\r\n _this.sourceCourseModules.forEach(function (module) {\r\n _this.courseService.getModuleSections(_this.sourceCourseId, module.id).then(function (result) {\r\n _this.sourceCourseSectionsMap.set(module.id, result);\r\n result.forEach(function (sectionExt) {\r\n var selectableSection = angular.copy(sectionExt);\r\n selectableSection.selected = false;\r\n _this.sourceCourseSections.push(selectableSection);\r\n });\r\n _this.calculateInitialMapping();\r\n });\r\n });\r\n });\r\n });\r\n };\r\n VhsCoursePublishDirectiveController.prototype.publishCourse = function () {\r\n var _this = this;\r\n var mappedSectionPairs = [];\r\n this.sectionPairs.forEach(function (sectionsPair) {\r\n var mappedSectionsPair = {};\r\n mappedSectionsPair.publishSectionId = sectionsPair.publishedCourseSection.id;\r\n mappedSectionsPair.sourceSectionId = sectionsPair.sourceCourseSection.id;\r\n mappedSectionPairs.push(mappedSectionsPair);\r\n });\r\n this.isPublishingStarted = true;\r\n INotifier_1.notifier.warning(\"Publishing of the course started. Published course page will open automatically when process is complete. Do not leave the current page.\");\r\n this.courseService.publishCourse(this.publishedCourseId, this.sourceCourseId, mappedSectionPairs)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(\"The course was successfully published\");\r\n if (_this.$scope.onSuccessCallback && angular.isFunction(_this.$scope.onSuccessCallback)) {\r\n _this.$scope.onSuccessCallback();\r\n }\r\n _this.redirectToCourseDetails();\r\n })\r\n .finally(function () { return _this.isPublishingStarted = false; });\r\n };\r\n VhsCoursePublishDirectiveController.prototype.redirectToCourseDetails = function () {\r\n this.$location.url(this.coursesRouter.detailsUrl(this.publishedCourseId));\r\n };\r\n VhsCoursePublishDirectiveController.prototype.calculateInitialMapping = function () {\r\n var _this = this;\r\n var newPublishedSections = [];\r\n this.publishedCourseSections.forEach(function (publishedSection) {\r\n var sourceSectionIndex = -1;\r\n for (var i = 0; i < _this.sourceCourseSections.length; i++) {\r\n if (_this.sourceCourseSections[i].section.name === publishedSection.section.name\r\n && _this.sourceCourseSections[i].section.typeKey == publishedSection.section.typeKey) {\r\n sourceSectionIndex = i;\r\n break;\r\n }\r\n }\r\n if (sourceSectionIndex != -1) {\r\n var selectablePair = {};\r\n selectablePair.publishedCourseSection = publishedSection;\r\n selectablePair.sourceCourseSection = _this.sourceCourseSections[sourceSectionIndex];\r\n selectablePair.selected = false;\r\n _this.sectionPairs.push(selectablePair);\r\n _this.sectionPairs.sort(function (a, b) {\r\n if (a.sourceCourseSection.section.coursewideSortPath < b.sourceCourseSection.section.coursewideSortPath) {\r\n return -1;\r\n }\r\n else if (a.sourceCourseSection.section.coursewideSortPath > b.sourceCourseSection.section.coursewideSortPath) {\r\n return 1;\r\n }\r\n else\r\n return 0;\r\n });\r\n _this.sourceCourseSections.splice(sourceSectionIndex, 1);\r\n }\r\n else {\r\n newPublishedSections.push(publishedSection);\r\n }\r\n });\r\n this.publishedCourseSections = newPublishedSections;\r\n this.publishedCourseSections.sort(function (a, b) {\r\n if (a.section.coursewideSortPath < b.section.coursewideSortPath) {\r\n return -1;\r\n }\r\n else if (a.section.coursewideSortPath > b.section.coursewideSortPath) {\r\n return 1;\r\n }\r\n else\r\n return 0;\r\n });\r\n this.sourceCourseSections.sort(function (a, b) {\r\n if (a.section.coursewideSortPath < b.section.coursewideSortPath) {\r\n return -1;\r\n }\r\n else if (a.section.coursewideSortPath > b.section.coursewideSortPath) {\r\n return 1;\r\n }\r\n else\r\n return 0;\r\n });\r\n };\r\n VhsCoursePublishDirectiveController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return VhsCoursePublishDirectiveController;\r\n})();\r\nexports.VhsCoursePublishDirectiveController = VhsCoursePublishDirectiveController;\r\nfunction VhsCoursePublishDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsCoursePublishDirectiveController,\r\n scope: {\r\n publishedCourseId: \"=?vhsPublishedCourseId\",\r\n onSuccessCallback: \"&?vhsOnSuccess\"\r\n },\r\n templateUrl: url.template(\"components/vhs-course-publish.html\")\r\n };\r\n}\r\nexports.VhsCoursePublishDirectiveFactory = VhsCoursePublishDirectiveFactory;\r\nVhsCoursePublishDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../courses/CourseService\":211,\"../urls/CoursesRouter\":468,\"../utils/Moment\":518,\"../utils/UrlService\":528}],101:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar CourseProgressStatus_1 = require(\"../courses/models/CourseProgressStatus\");\r\nvar CourseILTService_1 = require(\"../courses/CourseILTService\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar PurchaseService_1 = require(\"../finances/PurchaseService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar PersonalService_1 = require(\"../personal/PersonalService\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar VhsCourseViewTopTabsController = (function () {\r\n function VhsCourseViewTopTabsController($scope, $location, $routeParams, $window, personalService, coursesRouter, progressService, courseILTService, courseService, userService, dialogService, authService, securityService, brandingService, purchaseService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$window = $window;\r\n this.personalService = personalService;\r\n this.coursesRouter = coursesRouter;\r\n this.progressService = progressService;\r\n this.courseILTService = courseILTService;\r\n this.courseService = courseService;\r\n this.userService = userService;\r\n this.dialogService = dialogService;\r\n this.authService = authService;\r\n this.securityService = securityService;\r\n this.brandingService = brandingService;\r\n this.purchaseService = purchaseService;\r\n this.COURSE_TAB_KEY = \"course\";\r\n this.INFO_TAB_KEY = \"info\";\r\n this.PROGRESS_TAB_KEY = \"progress\";\r\n this.DISCUSSION_TAB_KEY = \"discussion\";\r\n this.EDIT_TAB_KEY = \"edit\";\r\n this.LEARNERS_TAB = \"learners\";\r\n this.PERMISSIONS_DELEGATION_TAB_KEY = \"permissionsDelegation\";\r\n this.SURVEYS_TAB_KEY = \"surveys\";\r\n this.ILT_TAB_KEY = \"ilt\";\r\n this.WEBINARS_TAB_KEY = \"webinars\";\r\n this.isInitialized = false;\r\n this.anyWebinarSectionsExists = false;\r\n this.anyILTSectionsExists = false;\r\n this.isActiveCourse = false;\r\n this.isUserAnInstructor = false;\r\n this.isUserATeacher = false;\r\n this.isUserASystemAdministrator = false;\r\n this.isUserAnAdministrator = false;\r\n this.course = {};\r\n this.courseCertificates = [];\r\n $scope.vm = this;\r\n this.courseId = Number($routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM]);\r\n this.getCourseProgress();\r\n this.loadCourseCertificates();\r\n this.getAnyWebinarSectionsExists();\r\n this.getAnyILTSectionsExists();\r\n this.getCourse();\r\n authService.getCurrentUser()\r\n .then(function (u) {\r\n _this.user = u;\r\n });\r\n this.courseService.get(this.$scope.courseId)\r\n .then(function (course) {\r\n _this.$scope.courseProgress.status = course.courseProgressStatus;\r\n });\r\n this.$scope.$on(Event_1.Event.COURSE_PROGRESS_RECALCULATED, function (event) {\r\n _this.loadCourseProgress();\r\n });\r\n this.userService.isUserInstructor(this.courseId)\r\n .then(function (result) {\r\n return _this.isUserAnInstructor = result;\r\n });\r\n this.userService.isUserResponsibleTeacher(this.courseId)\r\n .then(function (result) {\r\n return _this.isUserATeacher = result;\r\n });\r\n this.userService.isUserSystemAdministrator()\r\n .then(function (result) {\r\n return _this.isUserASystemAdministrator = result;\r\n });\r\n this.userService.isUserAdministrator(this.courseId)\r\n .then(function (result) {\r\n return _this.isUserAnAdministrator = result;\r\n });\r\n }\r\n VhsCourseViewTopTabsController.prototype.getCourseProgress = function () {\r\n var _this = this;\r\n if (this.$scope.courseProgress !== null && this.$scope.courseProgress !== undefined) {\r\n this.courseProgress = this.$scope.courseProgress;\r\n this.setCourseStarted();\r\n this.isInitialized = true;\r\n }\r\n else {\r\n this.loadCourseProgress()\r\n .then(function () {\r\n _this.setCourseStarted();\r\n _this.isInitialized = true;\r\n });\r\n }\r\n };\r\n VhsCourseViewTopTabsController.prototype.init = function ($scope, element) {\r\n };\r\n VhsCourseViewTopTabsController.prototype.goToFullScreenMode = function () {\r\n if (this.$scope.goToFullScreenMode !== null && this.$scope.goToFullScreenMode !== undefined) {\r\n this.$scope.goToFullScreenMode();\r\n }\r\n };\r\n VhsCourseViewTopTabsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.$scope.topMenuKey == topMenuKey;\r\n };\r\n VhsCourseViewTopTabsController.prototype.isShowProgressTab = function () {\r\n return (this.isCourseProgressStarted() || this.$scope.coursePermissions)\r\n && this.$scope.isAuthenticated || this.$scope.topMenuKey == this.PROGRESS_TAB_KEY;\r\n };\r\n VhsCourseViewTopTabsController.prototype.isShowLearningSessionsTab = function () {\r\n return this.$scope.topMenuKey == this.ILT_TAB_KEY\r\n || this.$scope.topMenuKey == this.WEBINARS_TAB_KEY\r\n || (this.$scope.isAuthenticated && this.isUserATeacher || this.$scope.isAuthenticated && this.isUserAnInstructor || this.$scope.isAuthenticated && this.isUserASystemAdministrator || this.$scope.isAuthenticated && this.isUserAnAdministrator)\r\n && (this.anyWebinarSectionsExists || this.anyILTSectionsExists);\r\n };\r\n VhsCourseViewTopTabsController.prototype.isShowSurveyResultsTab = function () {\r\n return this.$scope.isAuthenticated && (this.$scope.systemPermissions && this.$scope.systemPermissions.manageCoursesAttendeesAny\r\n || this.$scope.coursePermissions && this.$scope.coursePermissions.viewOtherUsersProgress)\r\n || this.$scope.topMenuKey == this.SURVEYS_TAB_KEY;\r\n };\r\n VhsCourseViewTopTabsController.prototype.isShowDiscussionsTab = function () {\r\n return this.$scope.coursePermissions && this.$scope.coursePermissions.accessToDiscussions\r\n && (this.$scope.coursePermissions.attendeeManagement || this.courseStarted || this.$scope.coursePermissions.view)\r\n || this.$scope.topMenuKey == this.DISCUSSION_TAB_KEY;\r\n };\r\n VhsCourseViewTopTabsController.prototype.isShowRemoveTab = function () {\r\n return this.$scope.systemPermissions && this.$scope.systemPermissions.manageAnyLearningObject && this.isActiveCourse\r\n && (!!this.courseBusinessUnit || (!!this.user && this.user.allBusinessUnits));\r\n };\r\n VhsCourseViewTopTabsController.prototype.courseDetailsUrl = function () {\r\n if (this.$scope.courseDetailsUrl != null && this.$scope.courseDetailsUrl != undefined) {\r\n return this.$scope.courseDetailsUrl();\r\n }\r\n return this.coursesRouter.detailsUrl(this.$scope.courseId);\r\n };\r\n VhsCourseViewTopTabsController.prototype.editCourseUrl = function () {\r\n if (this.$scope.editCourseUrl != null && this.$scope.editCourseUrl != undefined) {\r\n return this.$scope.editCourseUrl();\r\n }\r\n return this.coursesRouter.updateUrl(this.$scope.courseId);\r\n };\r\n VhsCourseViewTopTabsController.prototype.learningSessionsUrl = function () {\r\n if (this.$scope.topMenuKey == this.ILT_TAB_KEY) {\r\n return this.coursesRouter.iltUrl(this.$scope.courseId);\r\n }\r\n else if (this.$scope.topMenuKey == this.WEBINARS_TAB_KEY) {\r\n return this.coursesRouter.webinarsUrl(this.$scope.courseId);\r\n }\r\n else if (this.anyILTSectionsExists) {\r\n return this.coursesRouter.iltUrl(this.$scope.courseId);\r\n }\r\n else {\r\n return this.coursesRouter.webinarsUrl(this.$scope.courseId);\r\n }\r\n };\r\n VhsCourseViewTopTabsController.prototype.loadCourseProgress = function () {\r\n var _this = this;\r\n return this.progressService.getCourseProgress(this.$scope.courseId)\r\n .then(function (result) {\r\n _this.courseProgress = result;\r\n _this.loadCourseCertificates();\r\n })\r\n .catch(function () {\r\n _this.courseProgress = null;\r\n });\r\n };\r\n VhsCourseViewTopTabsController.prototype.setCourseStarted = function () {\r\n this.courseStarted = this.courseProgress && this.courseProgress.status != CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED];\r\n };\r\n VhsCourseViewTopTabsController.prototype.getAnyWebinarSectionsExists = function () {\r\n var _this = this;\r\n this.progressService.getAnySectionWebinar(this.$scope.courseId)\r\n .then(function (result) {\r\n _this.anyWebinarSectionsExists = result;\r\n });\r\n };\r\n VhsCourseViewTopTabsController.prototype.getAnyILTSectionsExists = function () {\r\n var _this = this;\r\n this.courseILTService.getAnyILTSectionsExists(this.$scope.courseId)\r\n .then(function (result) {\r\n _this.anyILTSectionsExists = result;\r\n });\r\n };\r\n VhsCourseViewTopTabsController.prototype.isCourseProgressStarted = function () {\r\n return this.$scope.courseProgress\r\n ? this.$scope.courseProgress.status != CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED]\r\n : this.courseStarted;\r\n };\r\n VhsCourseViewTopTabsController.prototype.deleteCourse = function () {\r\n var _this = this;\r\n this.purchaseService.getReferencedObjectProductsList(this.$scope.courseId, ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]).then(function (products) {\r\n if (products.length == 0) {\r\n _this.courseService.getRelatedLearningPaths(_this.$scope.courseId)\r\n .then(function (learningPath) {\r\n var dialogMessage;\r\n var dialogTitle = \"Delete course\";\r\n if (!!learningPath && learningPath.length > 0) {\r\n dialogMessage = \"

    The course cannot be removed. It is used in the learning paths:

    \";\r\n for (var i = 0; i < learningPath.length; i++) {\r\n var course = learningPath[i];\r\n dialogMessage += \"

    \" + (i + 1) + \". \" + course.name + \"

    \";\r\n }\r\n _this.dialogService.confirm(dialogMessage, {\r\n title: dialogTitle,\r\n hideCancelButton: true\r\n });\r\n }\r\n else {\r\n _this.checkUncompletedUsersCourse(dialogTitle);\r\n }\r\n });\r\n }\r\n else {\r\n var formattedFunc = function (product, index) {\r\n return \"

    \" + (index + 1) + \". \" + product.name + \". \" + (product.description == null ? \"\" : product.description) + \"

    \";\r\n };\r\n var message = StringBuilder_1.StringBuilder.interpolate(\"

    The course cannot be removed. It contains the following products::products

    \")\r\n .with(\":products\", _this.getItemsFormattedString(products, formattedFunc, \"\\n\"))\r\n .build();\r\n _this.dialogService.confirm(message, {\r\n title: \"Delete course\",\r\n hideCancelButton: true\r\n });\r\n }\r\n });\r\n };\r\n VhsCourseViewTopTabsController.prototype.getItemsFormattedString = function (items, formattedFunc, separator) {\r\n var result = \"\";\r\n items.forEach(function (item, index) {\r\n result += formattedFunc(item, index) + separator;\r\n });\r\n return result;\r\n };\r\n VhsCourseViewTopTabsController.prototype.checkUncompletedUsersCourse = function (dialogTitle) {\r\n var _this = this;\r\n this.progressService.getStartedCourseProgressUsersByCourse(this.$scope.courseId)\r\n .then(function (countUsersUncompletedCourse) {\r\n var dialogMessage;\r\n var options;\r\n if (!!countUsersUncompletedCourse && countUsersUncompletedCourse > 0) {\r\n dialogMessage = StringBuilder_1.StringBuilder.interpolate(\"There are :countUsersUncompletedCourse users who have started course and will be unable to complete it. You can check list of users on Progress tab. Remove course?\")\r\n .with(\":countUsersUncompletedCourse\", countUsersUncompletedCourse)\r\n .build();\r\n options = {\r\n title: dialogTitle,\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n };\r\n }\r\n else {\r\n dialogMessage = \"This course will be removed from the system. Continue?\";\r\n options = {\r\n title: dialogTitle,\r\n };\r\n }\r\n _this.dialogService.confirm(dialogMessage, options).then(function () {\r\n _this.dialogService.confirm('Do you want to remove permissions?', {\r\n title: 'Remove permissions',\r\n confirmButton: 'Yes',\r\n cancelButton: 'No'\r\n })\r\n .then(function () {\r\n _this.courseService.removePermissionAssignments(_this.$scope.courseId);\r\n _this.courseService.inactiveCourse(_this.$scope.courseId)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"The course has been removed\");\r\n _this.$location.url(_this.coursesRouter.indexUrl());\r\n });\r\n }).catch(function () {\r\n _this.courseService.inactiveCourse(_this.$scope.courseId)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"The course has been removed\");\r\n _this.$location.url(_this.coursesRouter.indexUrl());\r\n });\r\n });\r\n });\r\n });\r\n };\r\n VhsCourseViewTopTabsController.prototype.getCourse = function () {\r\n var _this = this;\r\n this.courseService.get(this.$scope.courseId)\r\n .then(function (course) {\r\n _this.isActiveCourse = course.active;\r\n _this.courseBusinessUnit = course.businessUnitId;\r\n _this.course = angular.copy(course);\r\n if (!course.active) {\r\n if (_this.$scope.systemPermissions && !_this.$scope.systemPermissions.manageAnyLearningObject\r\n && !!_this.$scope.systemPermissions.viewAnyLearningObject) {\r\n INotifier_1.notifier.error(\"This course has been removed from the system\");\r\n _this.$location.url(_this.coursesRouter.indexUrl());\r\n }\r\n _this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.manageAnyLearningObject || systemPermissions.viewAnyLearningObject; });\r\n }\r\n });\r\n };\r\n VhsCourseViewTopTabsController.prototype.loadCourseCertificates = function () {\r\n var _this = this;\r\n if (this.courseProgress && this.courseProgress.id) {\r\n return this.courseService.getUserCertificates(this.courseId, this.courseProgress.id).then(function (result) {\r\n _this.courseCertificates.splice(0);\r\n result.forEach(function (c) {\r\n _this.courseCertificates.push({\r\n id: c.certificateId,\r\n name: c.objectName\r\n });\r\n });\r\n });\r\n }\r\n };\r\n VhsCourseViewTopTabsController.prototype.downloadCertificates = function () {\r\n var _this = this;\r\n this.courseCertificates.forEach(function (c) {\r\n return _this.personalService.downloadCertificate(c.id).then(function (result) { return _this.$window.open(result); });\r\n });\r\n };\r\n VhsCourseViewTopTabsController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$window\",\r\n PersonalService_1.PersonalService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n CourseILTService_1.CourseILTService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n UserService_1.UserService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n PurchaseService_1.PurchaseService.NAME\r\n ];\r\n return VhsCourseViewTopTabsController;\r\n})();\r\nexports.VhsCourseViewTopTabsController = VhsCourseViewTopTabsController;\r\nfunction VhsCourseViewTopTabsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsCourseViewTopTabsController,\r\n scope: {\r\n courseId: \"=vhsCourseId\",\r\n courseProgress: \"=?vhsCourseProgress\",\r\n isAuthenticated: \"=vhsIsAuthenticated\",\r\n coursePermissions: \"=vhsCoursePermissions\",\r\n systemPermissions: \"=vhsSystemPermissions\",\r\n topMenuKey: \"=vhsTopMenuKey\",\r\n goToFullScreenMode: \"=?vhsGoToFullScreenMode\",\r\n courseDetailsUrl: \"=?vhsCourseDetailsUrl\",\r\n editCourseUrl: \"=?vhsEditCourseUrl\",\r\n customActions: \"=?vhsCustomActions\"\r\n },\r\n templateUrl: url.template(\"components/vhs-course-view-top-tabs.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsCourseViewTopTabsDirectiveFactory = VhsCourseViewTopTabsDirectiveFactory;\r\nVhsCourseViewTopTabsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../auth/AuthService\":18,\"../branding/CustomBrandingService\":35,\"../courses/CourseILTService\":200,\"../courses/CourseService\":211,\"../courses/ProgressService\":219,\"../courses/models/CourseProgressStatus\":222,\"../finances/PurchaseService\":237,\"../personal/PersonalService\":377,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../users/UserService\":499,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./dialog/DialogService\":166,\"./models/Event\":170}],102:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar IReferenceEntitiesParams_1 = require(\"../reference/models/IReferenceEntitiesParams\");\r\nvar ReferenceService_1 = require(\"../reference/ReferenceService\");\r\nvar VhsCreditAssignmentController = (function () {\r\n function VhsCreditAssignmentController($scope, $q, referenceService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.referenceService = referenceService;\r\n this.availableCreditTypes = [];\r\n this.newAssignment = {\r\n expireInDays: null\r\n };\r\n this.editingAssignments = new Map();\r\n this.compareCreditTypeFn = function (first, second) {\r\n if (first.name > second.name) {\r\n return 1;\r\n }\r\n else if (first.name < second.name) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n };\r\n $scope.vm = this;\r\n this.loadReferenceEntitiesPromise = this.loadReferenceEntities()\r\n .finally(function () { return _this.loadReferenceEntitiesPromise = null; });\r\n this.$scope.$watchGroup([\r\n \"educationItemId\",\r\n \"educationItemType\",\r\n \"educationItemCredits\",\r\n \"educationItemBusinessUnitId\"\r\n ], function (newValue, oldValue) {\r\n if (newValue == oldValue) {\r\n return;\r\n }\r\n if (newValue[0] != oldValue[0]\r\n || newValue[1] != oldValue[1]) {\r\n _this.newAssignment = { expireInDays: null };\r\n }\r\n _this.newAssignment = { expireInDays: null };\r\n _this.$q.when(_this.loadReferenceEntitiesPromise)\r\n .then(function () {\r\n _this.loadReferenceEntitiesPromise = _this.loadReferenceEntities()\r\n .finally(function () { return _this.loadReferenceEntitiesPromise = null; });\r\n });\r\n });\r\n }\r\n VhsCreditAssignmentController.prototype.loadReferenceEntities = function () {\r\n var _this = this;\r\n return this.referenceService.getActiveReferenceEntitiesForSelector(\"creditTypes\", new IReferenceEntitiesParams_1.ReferenceEntitiesParams(undefined, undefined, undefined, undefined, this.$scope.educationItemBusinessUnitId, undefined), null)\r\n .then(function (creditTypes) {\r\n if (!_this.$scope.educationItemCredits) {\r\n _this.$scope.educationItemCredits = [];\r\n }\r\n var alreadyUsedCreditTypeIds = _this.$scope.educationItemCredits.map(function (i) { return i.creditTypeId; });\r\n _this.availableCreditTypes = creditTypes.filter(function (i) { return alreadyUsedCreditTypeIds.indexOf(i.id) == -1; });\r\n var creditTypesIds = creditTypes.map(function (ct) { return ct.id; });\r\n var creditsToDelete = [];\r\n _this.$scope.educationItemCredits.forEach(function (ic) {\r\n if (creditTypesIds.indexOf(ic.creditTypeId) === -1) {\r\n creditsToDelete.push(ic);\r\n }\r\n });\r\n creditsToDelete.forEach(function (ct) {\r\n _this.$scope.educationItemCredits.splice(_this.$scope.educationItemCredits.indexOf(ct), 1);\r\n });\r\n return creditTypes;\r\n });\r\n };\r\n VhsCreditAssignmentController.prototype.editCreditAssignment = function (creditAssignment) {\r\n if (creditAssignment.isEditing) {\r\n creditAssignment.isEditing = false;\r\n var index = this.$scope.educationItemCredits.map(function (a) { return a.id; }).indexOf(creditAssignment.id);\r\n this.$scope.educationItemCredits[index] = this.editingAssignments.get(creditAssignment.id);\r\n this.editingAssignments.delete(creditAssignment.id);\r\n if (this.$scope.onChangeCallback) {\r\n this.$scope.onChangeCallback();\r\n }\r\n }\r\n else {\r\n this.editingAssignments.set(creditAssignment.id, angular.copy(creditAssignment));\r\n creditAssignment.isEditing = true;\r\n }\r\n };\r\n VhsCreditAssignmentController.prototype.getCreditAssignment = function (creditAssignment) {\r\n if (!creditAssignment.isEditing) {\r\n return creditAssignment;\r\n }\r\n else {\r\n return this.editingAssignments.get(creditAssignment.id);\r\n }\r\n };\r\n VhsCreditAssignmentController.prototype.removeCreditFromEducationItem = function (creditAssignment) {\r\n this.availableCreditTypes.push({\r\n id: creditAssignment.creditTypeId,\r\n name: creditAssignment.creditTypeName\r\n });\r\n var assignmentIndex = this.$scope.educationItemCredits\r\n .map(function (ca) { return ca.creditTypeId; })\r\n .indexOf(creditAssignment.creditTypeId);\r\n this.$scope.educationItemCredits.splice(assignmentIndex, 1);\r\n this.availableCreditTypes.sort(this.compareCreditTypeFn);\r\n if (this.$scope.onChangeCallback) {\r\n this.$scope.onChangeCallback();\r\n }\r\n };\r\n VhsCreditAssignmentController.prototype.isDisabledAddingCreditToEducationItem = function () {\r\n return !this.newAssignment.creditTypeId || !this.isCreditValueValid(this.newAssignment)\r\n || !this.isExpirationDateValid(this.newAssignment);\r\n };\r\n VhsCreditAssignmentController.prototype.safeAddCreditToEducationItem = function () {\r\n if (!this.isDisabledAddingCreditToEducationItem()) {\r\n this.addCreditToEducationItem();\r\n }\r\n };\r\n VhsCreditAssignmentController.prototype.addCreditToEducationItem = function () {\r\n var _this = this;\r\n this.$scope.educationItemCredits.push({\r\n referencedObjectType: this.$scope.educationItemType,\r\n referencedObjectId: this.$scope.educationItemId,\r\n creditTypeId: this.newAssignment.creditTypeId,\r\n creditTypeName: this.availableCreditTypes.filter(function (i) { return i.id === _this.newAssignment.creditTypeId; }).pop().name,\r\n credit: this.newAssignment.credit,\r\n expireInDays: this.newAssignment.expireInDays\r\n });\r\n var availableIndex = this.availableCreditTypes.map(function (i) { return i.id; }).indexOf(this.newAssignment.creditTypeId);\r\n this.availableCreditTypes.splice(availableIndex, 1);\r\n this.newAssignment = {\r\n expireInDays: null\r\n };\r\n if (this.$scope.onChangeCallback) {\r\n this.$scope.onChangeCallback();\r\n }\r\n };\r\n VhsCreditAssignmentController.prototype.isCreditValueValid = function (assignment) {\r\n return this.isCreditValueGEMin(assignment) && this.isCreditValueLEMax(assignment);\r\n };\r\n VhsCreditAssignmentController.prototype.isCreditValueGEMin = function (assignment) {\r\n return angular.isNumber(assignment.credit)\r\n && assignment.credit >= VhsCreditAssignmentController.CREDIT_MIN_VALUE;\r\n };\r\n VhsCreditAssignmentController.prototype.isCreditValueLEMax = function (assignment) {\r\n return angular.isNumber(assignment.credit)\r\n && assignment.credit <= VhsCreditAssignmentController.CREDIT_MAX_VALUE;\r\n };\r\n VhsCreditAssignmentController.prototype.isExpirationDateValid = function (assignment) {\r\n return (assignment.expireInDays === null)\r\n || angular.isNumber(assignment.expireInDays)\r\n && assignment.expireInDays >= VhsCreditAssignmentController.EXPIRE_IN_DAYS_MIN_VALUE\r\n && assignment.expireInDays <= VhsCreditAssignmentController.EXPIRE_IN_DAYS_MAX_VALUE;\r\n };\r\n VhsCreditAssignmentController.EXPIRE_IN_DAYS_MIN_VALUE = 1;\r\n VhsCreditAssignmentController.EXPIRE_IN_DAYS_MAX_VALUE = 1000000;\r\n VhsCreditAssignmentController.CREDIT_MAX_VALUE = 999.99;\r\n VhsCreditAssignmentController.CREDIT_MIN_VALUE = 0;\r\n VhsCreditAssignmentController.$inject = [\r\n \"$scope\",\r\n \"$q\",\r\n ReferenceService_1.ReferenceService.NAME\r\n ];\r\n return VhsCreditAssignmentController;\r\n})();\r\nexports.VhsCreditAssignmentController = VhsCreditAssignmentController;\r\nfunction VhsCreditAssignmentDirectiveFactory(url) {\r\n return {\r\n restrict: \"A\",\r\n controller: VhsCreditAssignmentController,\r\n scope: {\r\n educationItemId: \"=vhsEducationItemId\",\r\n educationItemType: \"=vhsEducationItemType\",\r\n educationItemBusinessUnitId: \"=?vhsEducationItemBusinessUnitId\",\r\n educationItemCredits: \"=vhsEducationItemCredits\",\r\n currentUserBusinessUnitIds: \"=vhsCurrentUserBusinessUnitIds\",\r\n onChangeCallback: \"&vhsOnChange\"\r\n },\r\n templateUrl: url.template(\"components/vhs-credit-assignment.html\"),\r\n transclude: true\r\n };\r\n}\r\nexports.VhsCreditAssignmentDirectiveFactory = VhsCreditAssignmentDirectiveFactory;\r\nVhsCreditAssignmentDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../reference/ReferenceService\":409,\"../reference/models/IReferenceEntitiesParams\":411,\"../utils/UrlService\":528}],103:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar RichTextEditorDirective_1 = require(\"./richtext/RichTextEditorDirective\");\r\nvar VhsEditableTemplateController = (function () {\r\n function VhsEditableTemplateController($rootScope, $scope, $timeout) {\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.showEditor = false;\r\n this.toolbarIsReady = false;\r\n this.isInitialized = false;\r\n this.ADD_CONTENT_TOOLS = \"['\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_EMBEDDED_MATERIAL_BUTTON + \"', 'insertVideo', 'insertImage', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_EMBEDDED_BUNDLE_BUTTON + \"', 'insertLink', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_SANDBOX_BUTTON + \"', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_LOAD_FROM_TEMPLATE_BUTTON + \"', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_CONVERT_TO_NEW_TEMPLATE_BUTTON + \"', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_ADD_TABLE_BUTTON + \"', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_AI_CONTENT_GENERATION_BUTTON + \"'],\";\r\n this.FONT_TOOLS = \"['bold', 'italics', 'underline', 'strikeThrough', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_FONT_COLOR + \"', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_BACKGROUND_FONT_COLOR + \"'],\";\r\n this.PARAGRAPH_TOOLS = \"['ul', 'ol', 'indent', 'outdent', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],\";\r\n this.STYLES_TOOLS = \"['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote'],\";\r\n this.TOOLTIPS_TOOLS = \"['\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_ADD_TIP_BUTTON + \"', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_ADD_QUESTION_BUTTON + \"', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_ADD_ASSESSMENT_BUTTON + \"', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_TOGGLE_BUTTON + \"', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_TOGGLE_CONTENT_BUTTON + \"', '\" +\r\n RichTextEditorDirective_1.RichTextEditorController.TA_ADD_NOTE_FOR_PROGRESS_BUTTON + \"'],\";\r\n this.OTHER_TOOLS = \"['redo', 'undo', 'clear', '\" + RichTextEditorDirective_1.RichTextEditorController.TA_FULLSCREEN_BUTTON + \"', 'html'],\";\r\n $scope.vm = this;\r\n }\r\n VhsEditableTemplateController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n this.element = element;\r\n this.ngModel = this.element.controller(\"ngModel\");\r\n this.$timeout(function () {\r\n _this.initInlineEditors();\r\n });\r\n $scope.$watch(function () { return _this.ngModel.$modelValue; }, function (value) {\r\n if (_this.localModelValue !== value) {\r\n _this.localModelValue = value;\r\n _this.isInitialized = false;\r\n _this.$timeout(function () {\r\n _this.isInitialized = true;\r\n _this.$timeout(function () { return _this.initInlineEditors(); }, 0);\r\n }, 0);\r\n }\r\n });\r\n };\r\n VhsEditableTemplateController.prototype.initInlineEditors = function () {\r\n var _this = this;\r\n var blocks = this.element.find(\".editable-block > .block-content\");\r\n var lines = this.element.find(\".editable-line\");\r\n blocks.on(\"click\", function (e) {\r\n _this.target = e.currentTarget.parentElement;\r\n _this.targetContentElement = e.currentTarget;\r\n _this.targetHeaderElement = $(_this.target).children(\".block-header\").get(0);\r\n _this.header = _this.targetHeaderElement ? _this.targetHeaderElement.innerText : \"slide editor\";\r\n _this.htmlContent = _this.targetContentElement.innerHTML;\r\n _this.isActive = !_this.target.classList.contains(\"inactive\");\r\n _this.generateToolbar(_this.target.classList);\r\n _this.element.find(\".modal.block-editor\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n });\r\n lines.on(\"click\", function (e) {\r\n _this.target = e.currentTarget;\r\n _this.textContent = _this.target.innerText;\r\n _this.isPrintOnly = _this.target.classList.contains(\"print-only\");\r\n _this.isOptional = _this.target.parentElement.classList.contains(\"optional\") || _this.isPrintOnly;\r\n _this.isActive = !_this.target.parentElement.classList.contains(\"inactive\") && !_this.isPrintOnly;\r\n _this.element.find(\".modal.line-editor\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n });\r\n };\r\n VhsEditableTemplateController.prototype.generateToolbar = function (classList) {\r\n this.toolbarIsReady = false;\r\n this.toolbar = \"[\";\r\n this.toolbar += this.ADD_CONTENT_TOOLS + this.FONT_TOOLS + this.PARAGRAPH_TOOLS + this.STYLES_TOOLS + this.TOOLTIPS_TOOLS + this.OTHER_TOOLS;\r\n if (this.toolbar[this.toolbar.length - 1] === \",\") {\r\n this.toolbar = this.toolbar.slice(0, -1);\r\n }\r\n this.toolbar += \"]\";\r\n this.toolbarIsReady = true;\r\n };\r\n VhsEditableTemplateController.prototype.applyStylesToText = function () {\r\n var _this = this;\r\n var imgTagRx = //gi;\r\n var substitutedLines = [];\r\n var addedImage;\r\n while ((addedImage = imgTagRx.exec(this.htmlContent)) != null) {\r\n substitutedLines.push(addedImage[0]);\r\n }\r\n substitutedLines.map(function (line) {\r\n _this.htmlContent = _this.htmlContent.replace(line, line.slice(0, -2) + ' style=\"width: 100%\"/>');\r\n });\r\n };\r\n VhsEditableTemplateController.prototype.saveText = function () {\r\n this.showEditor = false;\r\n this.target.innerText = this.textContent;\r\n if (this.isActive) {\r\n this.target.parentElement.classList.remove(\"inactive\");\r\n }\r\n else {\r\n this.target.parentElement.classList.add(\"inactive\");\r\n }\r\n this.textContent = null;\r\n this.target = null;\r\n this.isActive = null;\r\n this.isOptional = null;\r\n this.localModelValue = this.element.find(\".editable-template-content-area\").html();\r\n this.ngModel.$setViewValue(this.localModelValue);\r\n if (this.$scope.onchange) {\r\n this.$scope.onchange();\r\n }\r\n };\r\n VhsEditableTemplateController.prototype.saveHtml = function () {\r\n this.showEditor = false;\r\n this.targetContentElement.innerHTML = this.htmlContent;\r\n if (this.isActive) {\r\n this.target.classList.remove(\"inactive\");\r\n }\r\n else {\r\n this.target.classList.add(\"inactive\");\r\n }\r\n this.htmlContent = null;\r\n this.target = null;\r\n this.targetContentElement = null;\r\n this.header = null;\r\n this.isActive = null;\r\n this.toolbar = \"\";\r\n this.toolbarIsReady = false;\r\n this.localModelValue = this.element.find(\".editable-template-content-area\").html();\r\n this.ngModel.$setViewValue(this.localModelValue);\r\n if (this.$scope.onchange) {\r\n this.$scope.onchange();\r\n }\r\n };\r\n VhsEditableTemplateController.prototype.cancel = function () {\r\n this.showEditor = false;\r\n this.htmlContent = this.textContent = null;\r\n this.toolbar = \"\";\r\n this.toolbarIsReady = false;\r\n this.target = null;\r\n };\r\n VhsEditableTemplateController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$timeout\"\r\n ];\r\n return VhsEditableTemplateController;\r\n})();\r\nexports.VhsEditableTemplateController = VhsEditableTemplateController;\r\nfunction VhsEditableTemplateDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsEditableTemplateController,\r\n scope: {\r\n onchange: \"&vhsOnchange\",\r\n bundleId: \"@?vhsBundleId\",\r\n businessUnitId: \"@?vhsBusinessUnitId\",\r\n courseId: \"=?vhsCourseId\"\r\n },\r\n transclude: false,\r\n templateUrl: url.template(\"components/vhs-editable-template.html\")\r\n };\r\n return directive;\r\n}\r\nexports.VhsEditableTemplateDirectiveFactory = VhsEditableTemplateDirectiveFactory;\r\nVhsEditableTemplateDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528,\"./richtext/RichTextEditorDirective\":177}],104:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SortEntry_1 = require(\"../SortEntry\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar PersonalRouter_1 = require(\"../urls/PersonalRouter\");\r\nvar VhsEditableUserCreditsController = (function () {\r\n function VhsEditableUserCreditsController($scope, $http, $window, $location, url, authService, userService, progressService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$window = $window;\r\n this.$location = $location;\r\n this.url = url;\r\n this.authService = authService;\r\n this.userService = userService;\r\n this.progressService = progressService;\r\n this.newUserCredit = {};\r\n this.editingUserCreditsById = new Map();\r\n this.isAddNewCreditInProceed = false;\r\n this.isAddRowVisible = false;\r\n this.isEditAvailable = false;\r\n this.hasEditUserPermission = false;\r\n this.allowCreditsSelfReporting = false;\r\n this.isPersonalCreditsMode = false;\r\n $scope.vm = this;\r\n this.userCreditsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/users/\" + this.$scope.userId + \"/credits\")));\r\n this.authService.getCurrentUser()\r\n .then(function (user) {\r\n _this.currentUser = user;\r\n _this.hasEditUserPermission = _this.currentUser.permissions.editUser;\r\n if ($location.url().indexOf(PersonalRouter_1.PersonalRouter.creditsRoute) > -1) {\r\n _this.isPersonalCreditsMode = true;\r\n }\r\n }).then(function () {\r\n userService.isAllowedCreditsSelfReportingForUser(_this.currentUser.id)\r\n .then(function (allow) {\r\n _this.isEditAvailable = _this.isPersonalCreditsMode ? allow : _this.hasEditUserPermission;\r\n });\r\n });\r\n }\r\n VhsEditableUserCreditsController.prototype.searchCredits = function () {\r\n this.userCreditsGridModel.filter.receivedFrom = Moment_1.Moment.textToJavaDate(this.userCreditsGridModel.filter.receivedFromText);\r\n this.userCreditsGridModel.filter.receivedTo = Moment_1.Moment.textToJavaDate(this.userCreditsGridModel.filter.receivedToText);\r\n this.userCreditsGridModel.loadPage(0);\r\n };\r\n VhsEditableUserCreditsController.prototype.isSearchDatesValid = function () {\r\n return !this.userCreditsGridModel.filter.receivedFromText || !this.userCreditsGridModel.filter.receivedToText\r\n || this.userCreditsGridModel.filter.receivedFromText && this.userCreditsGridModel.filter.receivedToText\r\n && Moment_1.Moment.parse(this.userCreditsGridModel.filter.receivedToText).endOf(\"day\")\r\n .isAfter(Moment_1.Moment.parse(this.userCreditsGridModel.filter.receivedFromText).startOf('day'));\r\n };\r\n VhsEditableUserCreditsController.prototype.deleteUserCredit = function (credit) {\r\n var _this = this;\r\n credit.isDeletionInProceed = true;\r\n this.userService.deleteUserCredit(this.$scope.userId, credit.id)\r\n .then(function (result) {\r\n if (_this.userCreditsGridModel.entries.length == 1 && _this.userCreditsGridModel.currentPage > 0) {\r\n _this.userCreditsGridModel.loadPage(_this.userCreditsGridModel.currentPage - 1);\r\n }\r\n else {\r\n _this.userCreditsGridModel.loadCurrentPage();\r\n }\r\n })\r\n .catch(function (reject) { return credit.isDeletionInProceed = false; });\r\n };\r\n VhsEditableUserCreditsController.prototype.startEditUserCredit = function (credit) {\r\n credit.receiptDateText = Moment_1.Moment.isValidDate(credit.receiptDate);\r\n credit.expirationDateText = Moment_1.Moment.isValidDate(credit.expirationDate);\r\n this.editingUserCreditsById.set(credit.id, angular.copy(credit));\r\n credit.isEditing = true;\r\n };\r\n VhsEditableUserCreditsController.prototype.saveEditedUserCredit = function (credit) {\r\n var _this = this;\r\n var edited = this.editingUserCreditsById.get(credit.id);\r\n edited.receiptDate = Moment_1.Moment.textToJavaDate(edited.receiptDateText);\r\n edited.expirationDate = Moment_1.Moment.textToJavaDate(edited.expirationDateText);\r\n credit.isEditSaveInProceed = true;\r\n this.userService.updateUserCredit(this.$scope.userId, edited.id, edited)\r\n .then(function (updatedCredit) {\r\n _this.userService.uploadUserCreditAttachment(edited.id, edited.attachment).then(function (response) {\r\n _this.userCreditsGridModel.entries.forEach(function (entry) {\r\n if (entry.id === edited.id) {\r\n entry.downloadUrl = response.downloadUrl;\r\n entry.fileName = response.fileName;\r\n }\r\n });\r\n });\r\n var index = _this.userCreditsGridModel.entries.map(function (e) { return e.id; }).indexOf(updatedCredit.id);\r\n _this.userCreditsGridModel.entries[index] = updatedCredit;\r\n _this.userCreditsGridModel.entries.sort(function (first, second) { return second.receiptDate - first.receiptDate; });\r\n INotifier_1.notifier.success(\"Successfully saved\");\r\n })\r\n .finally(function () { return credit.isEditSaveInProceed = false; });\r\n credit.isEditing = false;\r\n this.editingUserCreditsById.delete(credit.id);\r\n };\r\n VhsEditableUserCreditsController.prototype.cancelEditUserCredit = function (credit) {\r\n credit.isEditing = false;\r\n this.editingUserCreditsById.delete(credit.id);\r\n };\r\n VhsEditableUserCreditsController.prototype.saveNewUserCredit = function () {\r\n var _this = this;\r\n this.newUserCredit.receiptDate = Moment_1.Moment.textToJavaDate(this.newUserCredit.receiptDateText);\r\n this.newUserCredit.expirationDate = Moment_1.Moment.textToJavaDate(this.newUserCredit.expirationDateText);\r\n this.isAddNewCreditInProceed = true;\r\n this.userService.createUserCredit(this.$scope.userId, this.newUserCredit)\r\n .then(function (userCredit) {\r\n if (_this.newUserCredit.attachment) {\r\n _this.userService.uploadUserCreditAttachment(userCredit.id, _this.newUserCredit.attachment).then(function (response) {\r\n _this.userCreditsGridModel.entries.forEach(function (entry) {\r\n if (entry.id === userCredit.id) {\r\n entry.downloadUrl = response.downloadUrl;\r\n entry.fileName = response.fileName;\r\n }\r\n });\r\n });\r\n }\r\n _this.userCreditsGridModel.entries.push(userCredit);\r\n _this.userCreditsGridModel.entries.sort(function (first, second) { return second.receiptDate - first.receiptDate; });\r\n _this.resetNewUserCredit();\r\n _this.isAddRowVisible = false;\r\n INotifier_1.notifier.success(\"Successfully saved\");\r\n })\r\n .finally(function () { return _this.isAddNewCreditInProceed = false; });\r\n };\r\n VhsEditableUserCreditsController.prototype.resetNewUserCredit = function () {\r\n this.isAddRowVisible = false;\r\n this.newUserCredit = {};\r\n };\r\n VhsEditableUserCreditsController.prototype.removeAttachment = function (userCredit) {\r\n userCredit.attachment = null;\r\n userCredit.downloadUrl = null;\r\n userCredit.fileId = null;\r\n userCredit.fileName = null;\r\n };\r\n VhsEditableUserCreditsController.prototype.isEditedRowValid = function (credit) {\r\n var isValid = false;\r\n var editedCredit = credit.isEditing\r\n ? this.editingUserCreditsById.get(credit.id)\r\n : this.newUserCredit;\r\n if (credit.referencedObjectType) {\r\n isValid = !!editedCredit.creditType && this.isDatesValid(editedCredit) && this.isCreditValueValid(editedCredit);\r\n }\r\n else {\r\n isValid = !!editedCredit.creditType && !!editedCredit.externalObjectType && (!!editedCredit.externalObjectId || this.isPersonalCreditsMode)\r\n && !!editedCredit.objectName && (!!editedCredit.objectDescription || this.isPersonalCreditsMode) && this.isDatesValid(editedCredit)\r\n && this.isCreditValueValid(editedCredit);\r\n }\r\n return isValid;\r\n };\r\n VhsEditableUserCreditsController.prototype.isDatesValid = function (credit) {\r\n var receiptDate = Moment_1.Moment.parse(credit.receiptDateText);\r\n return receiptDate.isValid() && this.isExpirationDateValid(credit);\r\n };\r\n VhsEditableUserCreditsController.prototype.isExpirationDateValid = function (credit) {\r\n var expirationDate = credit.expirationDateText ? Moment_1.Moment.parse(credit.expirationDateText) : undefined;\r\n return !expirationDate || expirationDate && expirationDate.isValid() && Moment_1.Moment.parse(credit.receiptDateText).isBefore(expirationDate);\r\n };\r\n VhsEditableUserCreditsController.prototype.isCreditValueValid = function (assignment) {\r\n return this.isCreditValueGEMin(assignment) && this.isCreditValueLEMax(assignment);\r\n };\r\n VhsEditableUserCreditsController.prototype.isCreditValueGEMin = function (assignment) {\r\n return angular.isNumber(assignment.credit)\r\n && assignment.credit >= VhsEditableUserCreditsController.CREDIT_MIN_VALUE;\r\n };\r\n VhsEditableUserCreditsController.prototype.isCreditValueLEMax = function (assignment) {\r\n return angular.isNumber(assignment.credit)\r\n && assignment.credit <= VhsEditableUserCreditsController.CREDIT_MAX_VALUE;\r\n };\r\n VhsEditableUserCreditsController.prototype.exportUserCreditsToPdf = function () {\r\n var _this = this;\r\n var parameters = {\r\n userId: this.$scope.userId,\r\n receivedFrom: Moment_1.Moment.textToJavaDate(this.userCreditsGridModel.filter.receivedFromText),\r\n receivedTo: Moment_1.Moment.textToJavaDate(this.userCreditsGridModel.filter.receivedToText),\r\n sortEntries: this.userCreditsGridModel.sorting\r\n };\r\n this.userService.exportUserCredits(parameters)\r\n .then(function (downloadUrl) { return _this.$window.open(downloadUrl); });\r\n };\r\n VhsEditableUserCreditsController.prototype.downloadGeneralTranscriptReport = function () {\r\n var _this = this;\r\n var parameters = {\r\n userId: this.$scope.userId\r\n };\r\n this.progressService.downloadGeneralTranscriptReport(parameters)\r\n .then(function (result) {\r\n _this.$window.open(result);\r\n });\r\n };\r\n VhsEditableUserCreditsController.prototype.isSorting = function (fieldName) {\r\n return this.userCreditsGridModel.sorting.filter(function (s) { return s.fieldName === fieldName; }).length > 0;\r\n };\r\n VhsEditableUserCreditsController.prototype.isSortingDesc = function (fieldName) {\r\n if (this.userCreditsGridModel.sorting) {\r\n var sortEntry = this.userCreditsGridModel.sorting.filter(function (s) { return s.fieldName === fieldName; }).pop();\r\n return sortEntry && sortEntry.sortOrder === SortEntry_1.SortOrder.DESC;\r\n }\r\n };\r\n VhsEditableUserCreditsController.prototype.showExternalCreditsHelpDialog = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#externalCreditsHelpDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n VhsEditableUserCreditsController.prototype.showCreditsEditButtons = function (userCredit) {\r\n return this.isPersonalCreditsMode && userCredit.addedBy === this.currentUser.id\r\n || !this.isPersonalCreditsMode;\r\n };\r\n VhsEditableUserCreditsController.prototype.downloadAttachment = function (userCredit) {\r\n this.$http.get(userCredit.downloadUrl, {\r\n responseType: 'blob'\r\n }).then(function (r) {\r\n var blob = new Blob([r.data], { type: r.data.type });\r\n var link = document.createElement('a');\r\n link.href = URL.createObjectURL(blob);\r\n link.id = \"tempBlobLink\";\r\n link.target = \"_blank\";\r\n link.setAttribute('download', userCredit.fileName);\r\n link.click();\r\n link.remove();\r\n });\r\n };\r\n VhsEditableUserCreditsController.CREDIT_MAX_VALUE = 999.99;\r\n VhsEditableUserCreditsController.CREDIT_MIN_VALUE = 0;\r\n VhsEditableUserCreditsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$window\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n UserService_1.UserService.NAME,\r\n ProgressService_1.ProgressService.NAME\r\n ];\r\n return VhsEditableUserCreditsController;\r\n})();\r\nexports.VhsEditableUserCreditsController = VhsEditableUserCreditsController;\r\nfunction VhsEditableUserDirectiveFactory(urlService) {\r\n return {\r\n restrict: \"A\",\r\n controller: VhsEditableUserCreditsController,\r\n scope: {\r\n userId: \"=vhsUserId\",\r\n isEditable: \"=?vhsEditable\"\r\n },\r\n templateUrl: urlService.template(\"components/vhs-editable-user-credits.html\")\r\n };\r\n}\r\nexports.VhsEditableUserDirectiveFactory = VhsEditableUserDirectiveFactory;\r\nVhsEditableUserDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../SortEntry\":8,\"../auth/AuthService\":18,\"../courses/ProgressService\":219,\"../urls/PersonalRouter\":484,\"../users/UserService\":499,\"../utils/Moment\":518,\"../utils/UrlService\":528}],105:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar MaterialType_1 = require(\"./../materials/models/MaterialType\");\r\nvar ObjectTypeUtils_1 = require(\"./../utils/ObjectTypeUtils\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar DomUtils_1 = require(\"../utils/DomUtils\");\r\nvar MaterialService_1 = require(\"../materials/MaterialService\");\r\nvar VhsEmbeddedMaterialController = (function () {\r\n function VhsEmbeddedMaterialController($scope, $rootScope, $timeout, $http, materialApi) {\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n this.materialApi = materialApi;\r\n this.materialSource = {};\r\n this.pdfExpanded = true;\r\n this.epubExpanded = true;\r\n this.enableDownload = true;\r\n $scope.vm = this;\r\n $scope.vhsDownloadLink = ($scope.vhsDownloadLink == null || $scope.vhsDownloadLink == undefined) ?\r\n false : $scope.vhsDownloadLink;\r\n }\r\n VhsEmbeddedMaterialController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n this.materialId = parseInt($scope.id);\r\n this.element = element;\r\n var eventData = {\r\n richTextElementId: this.findRichTextElementId(),\r\n richTextBindController: null\r\n };\r\n this.$rootScope.$broadcast(Event_1.Event.TA_FIND_RICH_TEXT_BIND_CONTROLLER, eventData);\r\n this.richTextBindController = eventData.richTextBindController;\r\n this.loadMaterialSourceInfo().then(function (r) { _this.loadMaterial(_this.materialId); });\r\n };\r\n VhsEmbeddedMaterialController.prototype.multimediaErrorCallback = function (code, message) {\r\n return this.loadMaterial(this.materialId);\r\n };\r\n VhsEmbeddedMaterialController.prototype.loadMaterial = function (materialId) {\r\n var _this = this;\r\n if (!!this.materialSource.sourceId && !!this.materialSource.sourceType) {\r\n return this.materialApi.getEmbeddedMaterial(this.materialId, this.materialSource.sourceId, this.materialSource.sourceType)\r\n .then(function (result) {\r\n if (result) {\r\n _this.material = angular.copy(result);\r\n _this.multimediaSources = [{\r\n src: _this.isMaterialYoutubeLink() || _this.isMaterialAwsLink() ? _this.material.link : (_this.material.downloadUrl || ''),\r\n type: _this.isMaterialYoutubeLink() ? \"video/youtube\" : (_this.isMaterialAwsLink() ? \"video/mp4\" : _this.material.contentType),\r\n dataRes: ''\r\n }];\r\n _this.isInlineView = true;\r\n if (_this.isMaterialYoutubeLink()) {\r\n _this.materialType = 'YOUTUBE';\r\n _this.isInlineView = false;\r\n }\r\n else if (_this.isMaterialAwsLink()) {\r\n _this.materialType = 'VIDEO';\r\n _this.isInlineView = false;\r\n }\r\n else {\r\n _this.materialType = _this.material.typeKey;\r\n if (_this.materialType == MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.VIDEO] ||\r\n _this.materialType == MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.AUDIO]) {\r\n _this.isInlineView = false;\r\n }\r\n }\r\n _this.isMaterialEmpty = _this.material.id && _this.material.typeKey !== MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.LINK] &&\r\n (!_this.material.fileStatus || _this.material.fileStatus === 'EMPTY');\r\n _this.isMaterialNotReady = !_this.isMaterialEmpty && _this.material.id && _this.material.typeKey !== MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.LINK] &&\r\n _this.material.fileStatus && _this.material.fileStatus !== 'EMPTY' && _this.material.fileStatus !== 'READY';\r\n _this.isViewAllowed = _this.material.link !== '' && !_this.isMaterialEmpty && !_this.isMaterialNotReady;\r\n var materialLinks = angular.element('.download-link-icon').find('#' + materialId);\r\n if (materialLinks) {\r\n var downloadIcon = materialLinks.parent();\r\n var iconLink = downloadIcon.find('.download-link-icon-a');\r\n iconLink.attr(\"href\", _this.material.downloadUrl);\r\n }\r\n return _this.material;\r\n }\r\n else {\r\n _this.isViewAllowed = false;\r\n return null;\r\n }\r\n })\r\n .catch(function (response) {\r\n _this.material = null;\r\n return _this.material;\r\n });\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n VhsEmbeddedMaterialController.prototype.isMaterialYoutubeLink = function () {\r\n if (!this.material) {\r\n return undefined;\r\n }\r\n return this.material && this.material.typeKey == MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.LINK] && ObjectTypeUtils_1.ObjectTypeUtils.isYoutubeUrl(this.material.link);\r\n };\r\n VhsEmbeddedMaterialController.prototype.isMaterialAwsLink = function () {\r\n if (!this.material) {\r\n return undefined;\r\n }\r\n return this.material && this.material.typeKey == MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.LINK] && ObjectTypeUtils_1.ObjectTypeUtils.isAwsUrl(this.material.link);\r\n };\r\n VhsEmbeddedMaterialController.prototype.findRichTextElementId = function () {\r\n var richEditor = DomUtils_1.DomUtils.findParentWithAttr(this.element, \"vhs-rich-text-bind\");\r\n if (!richEditor) {\r\n richEditor = DomUtils_1.DomUtils.findParentWithAttr(this.element, \"ta-bind\");\r\n }\r\n return richEditor ? richEditor.attr('id') : null;\r\n };\r\n VhsEmbeddedMaterialController.prototype.loadMaterialSourceInfo = function () {\r\n var _this = this;\r\n if (!this.richTextBindController) {\r\n console.log('RichTextBind Controller not found!');\r\n return;\r\n }\r\n var promise = this.richTextBindController.getEmbeddedMaterialSourceInfo()\r\n .then(function (result) {\r\n _this.materialSource = angular.copy(result);\r\n _this.richTextBindController.getEmbeddedMaterialSectionId()\r\n .then(function (id) {\r\n _this.vhsMaterialSectionId = id;\r\n });\r\n });\r\n return promise;\r\n };\r\n VhsEmbeddedMaterialController.prototype.downloadCrossOriginBlob = function () {\r\n var _this = this;\r\n if (this.material.downloadUrl.search(\"filename\") > 0) {\r\n return this.$http.get(this.material.downloadUrl, {\r\n responseType: 'blob'\r\n }).then(function (r) {\r\n var blob = new Blob([r.data], { type: r.data.type });\r\n var link = document.createElement('a');\r\n link.href = URL.createObjectURL(blob);\r\n link.id = \"tempBlobLink\";\r\n link.target = \"_blank\";\r\n link.setAttribute('download', _this.material.downloadUrl.split(\"filename=\")[1]);\r\n link.click();\r\n link.remove();\r\n });\r\n }\r\n };\r\n VhsEmbeddedMaterialController.TA_ELEMENT_SELECTOR = \"p.ta-vhs-embedded-material,a.ta-vhs-embedded-material\";\r\n VhsEmbeddedMaterialController.TA_DIRECTIVE_HTML = \"
    \";\r\n VhsEmbeddedMaterialController.TA_RENDER_FUNCTION = function (element, $compile, $rootScope, $timeout) {\r\n var id = RandomUtils_1.RandomUtils.generateRandomId('vhsEmbeddedMaterial_');\r\n var materialId = element.attr('id');\r\n var endIdIndex = materialId ? materialId.indexOf(\"__\") : -1;\r\n if (endIdIndex >= 0) {\r\n materialId = materialId.substring(0, endIdIndex);\r\n }\r\n try {\r\n if (isNaN(parseInt(materialId))) {\r\n materialId = null;\r\n }\r\n }\r\n catch (e) {\r\n materialId = null;\r\n }\r\n if (materialId) {\r\n if (element.is(\"a\")) {\r\n element.replaceWith(\"\");\r\n }\r\n else {\r\n element.replaceWith(\"
    \");\r\n }\r\n $timeout(function () {\r\n VhsEmbeddedMaterialController.TA_COMPILE_AND_REPLACE_ELEMENT_FUNCTION('#' + id, materialId, element.text(), $compile, $rootScope);\r\n }, 0);\r\n }\r\n else {\r\n element.replaceWith(\"\");\r\n }\r\n };\r\n VhsEmbeddedMaterialController.TA_COMPILE_AND_REPLACE_ELEMENT_FUNCTION = function (elementSelector, materialId, linkTitle, $compile, $scope) {\r\n var isDownloadLink = $(elementSelector).is('span');\r\n $(elementSelector).replaceWith($compile(StringBuilder_1.StringBuilder.interpolate(VhsEmbeddedMaterialController.TA_DIRECTIVE_HTML)\r\n .with(\":materialId\", materialId)\r\n .with(\":isDownloadLink\", isDownloadLink)\r\n .with(\":linkTitle\", linkTitle)\r\n .build())($scope));\r\n };\r\n VhsEmbeddedMaterialController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$timeout\",\r\n \"$http\",\r\n MaterialService_1.MaterialService.NAME\r\n ];\r\n return VhsEmbeddedMaterialController;\r\n})();\r\nexports.VhsEmbeddedMaterialController = VhsEmbeddedMaterialController;\r\nfunction VhsEmbeddedMaterialDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"AE\",\r\n link: link,\r\n controller: VhsEmbeddedMaterialController,\r\n scope: {\r\n id: \"@?\",\r\n vhsDownloadLink: \"=?\",\r\n vhsLinkTitle: \"@?\",\r\n vhsPdfExpanded: \"=?\",\r\n vhsEpubExpanded: \"=?\",\r\n vhsEnableDownload: \"=?\"\r\n },\r\n templateUrl: url.template(\"components/vhs-embedded-material.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsEmbeddedMaterialDirectiveFactory = VhsEmbeddedMaterialDirectiveFactory;\r\nVhsEmbeddedMaterialDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../materials/MaterialService\":337,\"../utils/DomUtils\":511,\"../utils/RandomUtils\":523,\"../utils/StringBuilder\":525,\"./../materials/models/MaterialType\":347,\"./../utils/ObjectTypeUtils\":520,\"./../utils/UrlService\":528,\"./models/Event\":170}],106:[function(require,module,exports){\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar VhsFillableFormDirectiveController = (function () {\r\n function VhsFillableFormDirectiveController($scope, $location, quizService, businessUnitsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.quizService = quizService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.isAddedView = false;\r\n this.isInitialized = false;\r\n this.viewerConfig = {\r\n showAnnotationTools: false,\r\n showDownloadPDF: false,\r\n showPrintPDF: false,\r\n showPageControls: true\r\n };\r\n $scope.vm = this;\r\n this.adobeDivId = RandomUtils_1.RandomUtils.generateRandomId(\"adobe-dc-view-\");\r\n this.$scope.$watch(\"questionId\", function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.init(_this.$scope, _this.element);\r\n });\r\n }\r\n VhsFillableFormDirectiveController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n element[0].innerHTML = element[0].innerHTML.replace(\":adobe-dc-view\", this.adobeDivId);\r\n this.element = element;\r\n this.businessUnitsService.getAdobeClientIdByDomain(this.$location.absUrl().split('/')[2].split(':')[0])\r\n .then(function (result) {\r\n _this.adobeClientIdForBu = result;\r\n }).finally(function () {\r\n var adobeDCView = new window.AdobeDC.View({\r\n clientId: _this.adobeClientIdForBu ? _this.adobeClientIdForBu : AppProperties_1.AppProperties.adobeDcClientId,\r\n divId: _this.adobeDivId\r\n });\r\n var previewFilePromise = adobeDCView.previewFile({\r\n content: {\r\n location: {\r\n url: _this.$scope.formUrl\r\n }\r\n },\r\n metaData: {\r\n fileName: _this.$scope.formName ? _this.$scope.formName : \"Fillable form\",\r\n uniqueId: _this.adobeDivId\r\n }\r\n }, _this.viewerConfig);\r\n previewFilePromise.then(function (adobeViewer) {\r\n adobeViewer.getAPIs().then(function (apis) {\r\n apis.getZoomAPIs().setZoomLevel(1)\r\n .then(function (result) { return console.log(result); })\r\n .catch(function (error) { return console.log(error); });\r\n });\r\n });\r\n var saveOptions = {\r\n autoSaveFrequency: 0,\r\n enableFocusPolling: false,\r\n showSaveButton: true\r\n };\r\n adobeDCView.registerCallback(window.AdobeDC.View.Enum.CallbackType.SAVE_API, function (metaData, content, options) {\r\n var uint8Array = new Uint8Array(content);\r\n var numberArray = Array();\r\n uint8Array.forEach(function (b) {\r\n numberArray.push(b);\r\n });\r\n var data = {\r\n content: numberArray,\r\n fileName: metaData.fileName,\r\n contentType: \"application/pdf\"\r\n };\r\n _this.$scope.parentSave(data, _this.$scope.questionId);\r\n return new window.Promise(function (resolve, reject) {\r\n resolve({\r\n code: window.AdobeDC.View.Enum.ApiResponseCode.SUCCESS,\r\n data: {\r\n metaData: { fileName: metaData.fileName }\r\n }\r\n });\r\n });\r\n }, saveOptions);\r\n });\r\n };\r\n VhsFillableFormDirectiveController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n QuizService_1.QuizService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME\r\n ];\r\n return VhsFillableFormDirectiveController;\r\n})();\r\nexports.VhsFillableFormDirectiveController = VhsFillableFormDirectiveController;\r\nfunction VhsFillableFormDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsFillableFormDirectiveController,\r\n scope: {\r\n formUrl: \"=formUrl\",\r\n formName: \"=?formName\",\r\n questionId: \"=questionId\",\r\n parentSave: \"=savingMethod\"\r\n },\r\n templateUrl: url.template(\"components/vhs-fillable-form.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsFillableFormDirectiveFactory = VhsFillableFormDirectiveFactory;\r\nVhsFillableFormDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../businessUnits/BusinessUnitsService\":44,\"../quizzes/QuizService\":396,\"../utils/AppProperties\":\"AppProperties\",\"../utils/RandomUtils\":523,\"../utils/UrlService\":528}],107:[function(require,module,exports){\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar VhsGroupEditTopTabsController = (function () {\r\n function VhsGroupEditTopTabsController($scope, usersRouter) {\r\n this.$scope = $scope;\r\n this.usersRouter = usersRouter;\r\n this.EDIT_TAB_KEY = \"edit\";\r\n this.PERMISSIONS_TAB_KEY = \"permissions\";\r\n $scope.vm = this;\r\n }\r\n VhsGroupEditTopTabsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.$scope.topMenuKey == topMenuKey;\r\n };\r\n VhsGroupEditTopTabsController.$inject = [\r\n \"$scope\",\r\n UsersRouter_1.UsersRouter.NAME\r\n ];\r\n return VhsGroupEditTopTabsController;\r\n})();\r\nexports.VhsGroupEditTopTabsController = VhsGroupEditTopTabsController;\r\nfunction VhsGroupEditTopTabsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsGroupEditTopTabsController,\r\n scope: {\r\n groupId: \"=vhsGroupId\",\r\n topMenuKey: \"=vhsTopMenuKey\",\r\n systemPermissions: \"=vhsSystemPermissions\"\r\n },\r\n templateUrl: url.template(\"components/vhs-group-edit-top-tabs.html\"),\r\n };\r\n}\r\nexports.VhsGroupEditTopTabsDirectiveFactory = VhsGroupEditTopTabsDirectiveFactory;\r\nVhsGroupEditTopTabsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../urls/UsersRouter\":493,\"../utils/UrlService\":528}],108:[function(require,module,exports){\nvar Event_1 = require(\"./models/Event\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AzureWebchatBotframeworkService_1 = require(\"../integration/azureWebchatBotframework/AzureWebchatBotframeworkService\");\r\nvar VhsHelpBotController = (function () {\r\n function VhsHelpBotController($scope, url, azureWebchatBotframeworkService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.url = url;\r\n this.azureWebchatBotframeworkService = azureWebchatBotframeworkService;\r\n this.isOpen = false;\r\n this.isInitialized = false;\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.HELP_BOT_OPEN_CLOSE, function () {\r\n _this.isOpen = !_this.isOpen;\r\n _this.onHelpBotOpen();\r\n });\r\n }\r\n VhsHelpBotController.prototype.init = function ($scope, element) {\r\n this.element = element;\r\n };\r\n VhsHelpBotController.prototype.closeHelpBot = function () {\r\n this.isOpen = false;\r\n };\r\n VhsHelpBotController.prototype.onHelpBotOpen = function () {\r\n var _this = this;\r\n if (!this.isInitialized) {\r\n this.azureWebchatBotframeworkService.getSettings().then(function (settings) {\r\n document.getElementById(\"chat\").src = \"https://webchat.botframework.com/embed/\"\r\n + settings.botname + \"?t=\" + settings.token;\r\n _this.isInitialized = true;\r\n });\r\n }\r\n };\r\n VhsHelpBotController.$inject = [\r\n \"$scope\",\r\n UrlService_1.UrlService.NAME,\r\n AzureWebchatBotframeworkService_1.AzureWebchatBotframeworkService.NAME\r\n ];\r\n return VhsHelpBotController;\r\n})();\r\nexports.VhsHelpBotController = VhsHelpBotController;\r\nfunction VhsHelpBotDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsHelpBotController,\r\n scope: {},\r\n templateUrl: url.template(\"components/vhs-help-bot.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsHelpBotDirectiveFactory = VhsHelpBotDirectiveFactory;\r\nVhsHelpBotDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../integration/azureWebchatBotframework/AzureWebchatBotframeworkService\":301,\"../utils/UrlService\":528,\"./models/Event\":170}],109:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar MenuConfiguratorService_1 = require(\"../utils/MenuConfiguratorService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar LearningPathService_1 = require(\"../learningPaths/LearningPathService\");\r\nvar MaterialService_1 = require(\"../materials/MaterialService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar UserRole_1 = require(\"../users/models/UserRole\");\r\nvar VhsHomeMenuController = (function () {\r\n function VhsHomeMenuController($scope, $location, authManager, menuConfiguratorService, courseService, learningPathService, materialService, userService, authRedirect, permissionsApi) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.authManager = authManager;\r\n this.menuConfiguratorService = menuConfiguratorService;\r\n this.courseService = courseService;\r\n this.learningPathService = learningPathService;\r\n this.materialService = materialService;\r\n this.userService = userService;\r\n this.authRedirect = authRedirect;\r\n this.permissionsApi = permissionsApi;\r\n this.currentMenuItemKey = \"\";\r\n this.currentMenuItemName = \"\";\r\n this.isHideHomeMenu = true;\r\n $scope.vm = this;\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n var systemPermissionsPromise = this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.routeBusinessRole = $location.search()[HomeRouter_1.HomeRouter.roleParam];\r\n if (this.routeBusinessRole !== undefined) {\r\n systemPermissionsPromise.then(function () {\r\n _this.setBusinessUnitRole(_this.routeBusinessRole);\r\n });\r\n }\r\n else {\r\n this.userService.getCurrentUserBusinessRole()\r\n .then(function (role) {\r\n if (role !== \"LEARNER\" && _this.$location.path() === HomeRouter_1.HomeRouter.homeCoursesRoute) {\r\n _this.isHideHomeMenu = false;\r\n }\r\n systemPermissionsPromise.then(function () {\r\n _this.setBusinessUnitRole(role);\r\n });\r\n });\r\n }\r\n }\r\n else {\r\n if ($location.search()[CoursesRouter_1.CoursesRouter.LOGON_REQUIRED]) {\r\n authRedirect.redirectToLogOn();\r\n }\r\n }\r\n }\r\n VhsHomeMenuController.prototype.init = function ($scope, element) {\r\n };\r\n VhsHomeMenuController.prototype.setBusinessUnitRole = function (role) {\r\n var _this = this;\r\n this.userBusinessRole = role;\r\n if (this.userBusinessRole === UserRole_1.UserRole[UserRole_1.UserRole.LEARNER]) {\r\n this.userService.getMenuConfiguration(UserRole_1.UserRole[UserRole_1.UserRole.LEARNER]).then(function (result) {\r\n var menuConfiguration = result;\r\n _this.getMenuByRole();\r\n _this.hideMenuItems(menuConfiguration);\r\n });\r\n }\r\n else if (this.userBusinessRole === UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER]) {\r\n if (this.systemPermissions.manageAnyBusinessUnit) {\r\n this.getMenuByRole();\r\n }\r\n else {\r\n this.userService.getMenuConfiguration(UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER]).then(function (result) {\r\n var menuConfiguration = result;\r\n _this.getMenuByRole();\r\n _this.hideMenuItemsForAttendee(menuConfiguration);\r\n });\r\n }\r\n }\r\n else {\r\n this.getMenuByRole();\r\n }\r\n };\r\n VhsHomeMenuController.prototype.hideMenuItems = function (menuConfiguration) {\r\n this.homeMenuByPermission.items.forEach(function (item) {\r\n if (item.key === MenuHelper_1.MenuHelper.HOME_COURSES_KEY) {\r\n item.allowed = menuConfiguration.hasLearnerCourses;\r\n }\r\n if (item.key === MenuHelper_1.MenuHelper.HOME_LEARNING_PATH_KEY) {\r\n item.allowed = menuConfiguration.hasLearnerLearningPaths;\r\n }\r\n if (item.key === MenuHelper_1.MenuHelper.HOME_MATERIALS_KEY) {\r\n item.allowed = menuConfiguration.hasLearnerMaterials;\r\n }\r\n if (item.key === MenuHelper_1.MenuHelper.HOME_FLASHCARDS_KEY) {\r\n item.allowed = menuConfiguration.hasLearnerFlashcards;\r\n }\r\n });\r\n };\r\n VhsHomeMenuController.prototype.hideMenuItemsForAttendee = function (menuConfiguration) {\r\n this.homeMenuByPermission.items.forEach(function (item) {\r\n if (item.key === MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_COURSES_KEY) {\r\n item.allowed = menuConfiguration.hasLearnerCourses;\r\n }\r\n if (item.key === MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_LEARNING_PATHS_KEY) {\r\n item.allowed = menuConfiguration.hasLearnerLearningPaths;\r\n }\r\n });\r\n };\r\n VhsHomeMenuController.prototype.getMenuByRole = function () {\r\n var _this = this;\r\n this.homeMenuByPermission = this.menuConfiguratorService.getHomeMenuByRole(this.authManager.isAuthenticated(), this.userBusinessRole, this.systemPermissions);\r\n var menuGroup = this.homeMenuByPermission.items.filter(function (item) { return item.key === _this.currentMenuItemKey; }).pop();\r\n if (menuGroup) {\r\n this.currentMenuItemName = menuGroup.name;\r\n }\r\n };\r\n VhsHomeMenuController.prototype.changeAllowedForMenu = function (menuKey, isExistValue) {\r\n this.homeMenuByPermission.items.forEach(function (item) {\r\n if (item.key === menuKey && isExistValue === false) {\r\n item.allowed = false;\r\n }\r\n });\r\n };\r\n VhsHomeMenuController.prototype.redirectToPage = function (homeUrl) {\r\n if (!homeUrl) {\r\n this.$location.url('/');\r\n return;\r\n }\r\n homeUrl = homeUrl.replace(\"#\", \"\");\r\n if (this.routeBusinessRole) {\r\n homeUrl += \"?\" + HomeRouter_1.HomeRouter.roleParam + \"=\" + this.routeBusinessRole;\r\n }\r\n this.$location.url(homeUrl);\r\n };\r\n VhsHomeMenuController.prototype.isPCVersion = function () {\r\n return window.innerWidth > 768;\r\n };\r\n VhsHomeMenuController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n AuthManager_1.AuthManager.NAME,\r\n MenuConfiguratorService_1.MenuConfiguratorService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n MaterialService_1.MaterialService.NAME,\r\n UserService_1.UserService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return VhsHomeMenuController;\r\n})();\r\nexports.VhsHomeMenuController = VhsHomeMenuController;\r\nfunction VhsHomeMenuDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsHomeMenuController,\r\n scope: {},\r\n templateUrl: url.template(\"components/vhs-home-menu.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsHomeMenuDirectiveFactory = VhsHomeMenuDirectiveFactory;\r\nVhsHomeMenuDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../courses/CourseService\":211,\"../learningPaths/LearningPathService\":320,\"../materials/MaterialService\":337,\"../security/PermissionsService\":418,\"../urls/CoursesRouter\":468,\"../urls/HomeRouter\":473,\"../users/UserService\":499,\"../users/models/UserRole\":507,\"../utils/MenuConfiguratorService\":516,\"../utils/MenuHelper\":517,\"../utils/UrlService\":528}],110:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar TimeZoneType_1 = require(\"../webinars/models/TimeZoneType\");\r\nvar CourseILTService_1 = require(\"../courses/CourseILTService\");\r\nvar ILTSessionRegistrationStatus_1 = require(\"../ilt/models/ILTSessionRegistrationStatus\");\r\nvar ILTSessionAttendanceStatus_1 = require(\"../ilt/models/ILTSessionAttendanceStatus\");\r\nvar ILTSessionStatus_1 = require(\"../ilt/models/ILTSessionStatus\");\r\nvar SectionProgressStatus_1 = require(\"../courses/models/SectionProgressStatus\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\n(function (ILTSessionActionMode) {\r\n ILTSessionActionMode[ILTSessionActionMode[\"TO_THIS\"] = 0] = \"TO_THIS\";\r\n ILTSessionActionMode[ILTSessionActionMode[\"TO_FOLLOWING\"] = 1] = \"TO_FOLLOWING\";\r\n ILTSessionActionMode[ILTSessionActionMode[\"TO_ALL\"] = 2] = \"TO_ALL\";\r\n})(exports.ILTSessionActionMode || (exports.ILTSessionActionMode = {}));\r\nvar ILTSessionActionMode = exports.ILTSessionActionMode;\r\nvar VhsILTDirectiveController = (function () {\r\n function VhsILTDirectiveController($http, $scope, url, courseILTService, dialogService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$scope = $scope;\r\n this.url = url;\r\n this.courseILTService = courseILTService;\r\n this.dialogService = dialogService;\r\n this.timeZone = TimeZoneType_1.TimeZone;\r\n this.isLoaded = false;\r\n this.ILTSessionActionMode = ILTSessionActionMode;\r\n $scope.vm = this;\r\n this.updateDataFromScope();\r\n $scope.$watchGroup([\r\n \"courseProgress\",\r\n \"section\"\r\n ], function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.updateDataFromScope();\r\n });\r\n }\r\n VhsILTDirectiveController.prototype.updateDataFromScope = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n this.courseProgress = angular.copy(this.$scope.courseProgress);\r\n this.section = angular.copy(this.$scope.section);\r\n this.loadSessionsList()\r\n .then(function () {\r\n _this.isLoaded = true;\r\n });\r\n };\r\n VhsILTDirectiveController.prototype.loadSessionsList = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n return this.courseILTService.getSessionsList(this.section.courseId, this.section.id)\r\n .then(function (sessions) {\r\n _this.sessions = angular.copy(sessions);\r\n _this.setUserInfo();\r\n return _this.sessions;\r\n });\r\n };\r\n VhsILTDirectiveController.prototype.setUserInfo = function () {\r\n this.upcomingSessionsExists = this.sessions.some(function (session) { return session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]; });\r\n this.isSelfRegistrationAllowedAtLeastForAOne = this.sessions.some(function (session) {\r\n return session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && session.allowSelfRegistration;\r\n });\r\n this.isSelfReportingAllowedAtLeastForAOne = this.sessions.some(function (session) {\r\n return (session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED] || session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.FINISHED])\r\n && session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED]\r\n && session.allowSelfReporting;\r\n });\r\n this.learnerIsRegisteredAtLeastForOne = this.sessions.some(function (session) {\r\n return session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED];\r\n });\r\n this.learnerIsWaitlistedAtLeastForOne = this.sessions.some(function (session) {\r\n return session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST];\r\n });\r\n };\r\n VhsILTDirectiveController.prototype.checkRegisterOptions = function (session) {\r\n if (!this.isSeriesRegistrationEnabled(session))\r\n this.register(session);\r\n else {\r\n this.registrationMode = ILTSessionActionMode.TO_THIS;\r\n this.modalSession = session;\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#seriesRegistrationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n };\r\n VhsILTDirectiveController.prototype.register = function (session) {\r\n var _this = this;\r\n this.isLoaded = false;\r\n var promise;\r\n if (session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST]) {\r\n promise = this.courseILTService.changeParticipantStatus(this.$scope.courseProgress.courseId, session.id, session.participantId, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED], true);\r\n }\r\n else {\r\n promise = this.courseILTService.createParticipant(this.$scope.courseProgress.courseId, session.id, this.$scope.courseProgress.userId, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED], true);\r\n }\r\n promise\r\n .then(function (participant) {\r\n if (participant.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED]) {\r\n INotifier_1.notifier.success(\"You have been registered\");\r\n }\r\n else if (participant.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST]) {\r\n INotifier_1.notifier.warning(\"Registration capacity is reached. You have been added to the waitlist\");\r\n }\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_SECTION_PROGRESS_RELOAD_PROGRESS);\r\n });\r\n };\r\n VhsILTDirectiveController.prototype.checkCancelRegistrationOptions = function (session) {\r\n if (!this.isCancelSeriesEnabled(session))\r\n this.cancelRegistration(session);\r\n else {\r\n this.modalSession = session;\r\n this.cancelingMode = ILTSessionActionMode.TO_THIS;\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#cancelSeriesRegistrationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n };\r\n VhsILTDirectiveController.prototype.cancelRegistration = function (session) {\r\n var _this = this;\r\n this.dialogService.confirm(\"You may not be able to join this session.\", {\r\n title: \"Are you sure?\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n _this.isLoaded = false;\r\n _this.courseILTService.deleteParticipant(_this.$scope.courseProgress.courseId, session.id, session.participantId)\r\n .then(function () {\r\n INotifier_1.notifier.warning(\"You have been unregistered\");\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_SECTION_PROGRESS_RELOAD_PROGRESS);\r\n });\r\n });\r\n };\r\n VhsILTDirectiveController.prototype.cancelRegistrationToAllSessionsInSeries = function () {\r\n var _this = this;\r\n if (this.cancelingMode != ILTSessionActionMode.TO_THIS) {\r\n var startSessionIdToDelete = this.cancelingMode == ILTSessionActionMode.TO_FOLLOWING ? this.modalSession.id : null;\r\n this.dialogService.confirm(\"You may not be able to join sessions from this series\", {\r\n title: \"Are you sure?\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n _this.isLoaded = false;\r\n _this.courseILTService.deleteParticipantsFromSeries(_this.$scope.courseProgress.courseId, _this.modalSession.seriesId, startSessionIdToDelete, _this.$scope.courseProgress.userId)\r\n .then(function () {\r\n INotifier_1.notifier.warning(\"You have been unregistered\");\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_SECTION_PROGRESS_RELOAD_PROGRESS);\r\n });\r\n });\r\n }\r\n else\r\n this.cancelRegistration(this.modalSession);\r\n this.cancelingMode = ILTSessionActionMode.TO_THIS;\r\n };\r\n VhsILTDirectiveController.prototype.changeSessionAttendance = function (session) {\r\n var _this = this;\r\n var newStatus = session.attendanceStatus != ILTSessionAttendanceStatus_1.ILTSessionAttendanceStatus[ILTSessionAttendanceStatus_1.ILTSessionAttendanceStatus.ATTENDED]\r\n ? ILTSessionAttendanceStatus_1.ILTSessionAttendanceStatus[ILTSessionAttendanceStatus_1.ILTSessionAttendanceStatus.ATTENDED]\r\n : ILTSessionAttendanceStatus_1.ILTSessionAttendanceStatus[ILTSessionAttendanceStatus_1.ILTSessionAttendanceStatus.MISSED];\r\n var successOperationMessage = session.attendanceStatus != ILTSessionAttendanceStatus_1.ILTSessionAttendanceStatus[ILTSessionAttendanceStatus_1.ILTSessionAttendanceStatus.ATTENDED]\r\n ? \"You confirmed your attendance\"\r\n : \"You confirmed your absence\";\r\n this.isLoaded = false;\r\n this.courseILTService.changeParticipantAttendance(this.$scope.courseProgress.courseId, session.id, session.participantId, newStatus)\r\n .then(function () {\r\n INotifier_1.notifier.success(successOperationMessage);\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_SECTION_PROGRESS_RELOAD_PROGRESS);\r\n });\r\n };\r\n VhsILTDirectiveController.prototype.getTimeZoneOffset = function (timeZone) {\r\n var now = new Date();\r\n var localTime = Math.floor((now.getTime() / 1000)) * 1000;\r\n var timeZoneTime = new Date(now.toLocaleString(\"en-US\", { timeZone: timeZone })).getTime();\r\n return now.getTimezoneOffset() * 60000 + (localTime - timeZoneTime);\r\n };\r\n VhsILTDirectiveController.prototype.dateToTimeZoneDate = function (timeZone, date) {\r\n var _this = this;\r\n var offset;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == timeZone) {\r\n offset = _this.getTimeZoneOffset(t.value);\r\n }\r\n });\r\n return (date + new Date().getTimezoneOffset() * 60000 - offset);\r\n };\r\n VhsILTDirectiveController.prototype.getAbbreviation = function (timeZone) {\r\n var abbreviation;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == timeZone) {\r\n abbreviation = t.abbreviation;\r\n }\r\n });\r\n return abbreviation;\r\n };\r\n VhsILTDirectiveController.prototype.getSectionHeaderMessage = function () {\r\n if (this.$scope.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED]) {\r\n if (this.upcomingSessionsExists) {\r\n if (this.learnerIsRegisteredAtLeastForOne) {\r\n if (this.isSelfReportingAllowedAtLeastForAOne) {\r\n return \"You are registered for the session(s). Please submit your attendance after the session.\";\r\n }\r\n else {\r\n return \"You are registered for the session(s). Instructor will submit your attendance.\";\r\n }\r\n }\r\n else {\r\n if (this.isSelfRegistrationAllowedAtLeastForAOne) {\r\n return \"Upcoming sessions are scheduled. Please press button Register for registration.\";\r\n }\r\n else {\r\n return \"Self-registration for upcoming session(s) isn't allowed. You will receive notification email when course administrator registers you.\";\r\n }\r\n }\r\n }\r\n else {\r\n return \"You have already attended the session.\";\r\n }\r\n }\r\n if (this.$scope.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.STARTED]) {\r\n if (this.isSelfReportingAllowedAtLeastForAOne) {\r\n return \"You are registered for the session(s). Please submit your attendance after the session.\";\r\n }\r\n else {\r\n return \"You are registered for the session(s). Instructor will submit your attendance.\";\r\n }\r\n }\r\n if ((this.$scope.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED]\r\n || this.$scope.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.FAILED])\r\n && !this.upcomingSessionsExists) {\r\n return \"There are no available sessions at the moment. You will receive notification email when a new session is scheduled.\";\r\n }\r\n if (this.$scope.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED]\r\n || this.$scope.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.FAILED]) {\r\n if (this.learnerIsWaitlistedAtLeastForOne) {\r\n return \"Upcoming sessions are scheduled. You have been added to waitlist for the session(s).\";\r\n }\r\n else if (this.isSelfRegistrationAllowedAtLeastForAOne) {\r\n return \"Upcoming sessions are scheduled. Please press button Register for registration.\";\r\n }\r\n else {\r\n return \"Self-registration for upcoming session(s) isn't allowed. You will receive notification email when course administrator registers you.\";\r\n }\r\n }\r\n };\r\n VhsILTDirectiveController.prototype.getSessionMessage = function (session) {\r\n if (session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && !session.allowSelfRegistration\r\n && (session.registrationStatus == null\r\n || session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST])) {\r\n return \"Self - registration is N/A\";\r\n }\r\n if (session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && session.allowSelfRegistration\r\n && (session.registrationStatus == null\r\n || session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST])\r\n && !session.enableWaitlist\r\n && session.registrantsCount >= session.maximumCapacity) {\r\n return \"Registration is closed. Session capacity is reached\";\r\n }\r\n if (session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && session.allowSelfRegistration\r\n && session.registrationStatus == null\r\n && session.enableWaitlist\r\n && session.maximumCapacity && session.registrantsCount >= session.maximumCapacity) {\r\n return \"Session capacity is reached. You will be added to the waitlist\";\r\n }\r\n if (session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST]) {\r\n return \"You are in the waitlist\";\r\n }\r\n if (session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED]\r\n && !session.allowSelfReporting\r\n && !session.allowSelfRegistration) {\r\n return \"You are registered\";\r\n }\r\n return null;\r\n };\r\n VhsILTDirectiveController.prototype.isRegisterButtonVisible = function (session) {\r\n return session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && session.allowSelfRegistration\r\n && (session.registrationStatus == null\r\n || session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST])\r\n && (session.maximumCapacity == null || session.maximumCapacity == undefined\r\n || session.registrantsCount < session.maximumCapacity || session.enableWaitlist && session.registrationStatus == null);\r\n };\r\n VhsILTDirectiveController.prototype.isCancelButtonVisible = function (session) {\r\n return session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && (session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST]\r\n || session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED])\r\n && session.allowSelfRegistration;\r\n };\r\n VhsILTDirectiveController.prototype.isCancelSeriesEnabled = function (session) {\r\n return session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && (session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST]\r\n || session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED])\r\n && session.allowSelfRegistration && this.getIltSessionToRemovingFromSeries(session).length > 0;\r\n };\r\n VhsILTDirectiveController.prototype.isAttendControlVisible = function (session) {\r\n return (session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED] || session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.FINISHED])\r\n && session.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED]\r\n && session.allowSelfReporting;\r\n };\r\n VhsILTDirectiveController.prototype.isSeriesRegistrationEnabled = function (session) {\r\n if (session.seriesId != null\r\n && session.allowSelfRegistration\r\n && session.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && session.registrationStatus == null\r\n && (session.maximumCapacity == null || session.maximumCapacity == undefined\r\n || session.registrantsCount < session.maximumCapacity))\r\n return this.getIltSessionsForSeries(session) != null;\r\n else\r\n return false;\r\n };\r\n VhsILTDirectiveController.prototype.registerToAllSessionsInTheSeries = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n if (this.registrationMode != ILTSessionActionMode.TO_THIS) {\r\n var promise;\r\n var iltSessions = this.getIltSessionsForSeries(this.modalSession);\r\n var iltSessionsIds = [];\r\n if (iltSessions != null && iltSessions.length > 0) {\r\n iltSessions.forEach(function (result) {\r\n if (_this.registrationMode == ILTSessionActionMode.TO_FOLLOWING && result.startDate >= _this.modalSession.startDate\r\n || _this.registrationMode == ILTSessionActionMode.TO_ALL) {\r\n iltSessionsIds.push(result.id);\r\n }\r\n });\r\n promise = this.courseILTService.createSeriesParticipants(this.$scope.courseProgress.courseId, this.modalSession.seriesId, this.$scope.courseProgress.userId, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED], true, iltSessionsIds);\r\n promise\r\n .then(function (participant) {\r\n INotifier_1.notifier.success(\"You have been registered to all sessions in the series\");\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_SECTION_PROGRESS_RELOAD_PROGRESS);\r\n });\r\n }\r\n }\r\n else\r\n this.register(this.modalSession);\r\n this.registrationMode = ILTSessionActionMode.TO_THIS;\r\n };\r\n VhsILTDirectiveController.prototype.getIltSessionsForSeries = function (session) {\r\n var iltSessions = this.sessions.filter(function (result) { return result.seriesId == session.seriesId\r\n && session.seriesId != null\r\n && result.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && result.registrationStatus != ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED]; });\r\n if (iltSessions.length > 0 && iltSessions.every(function (result) { return result.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && result.registrationStatus == null\r\n && (result.maximumCapacity == null || result.maximumCapacity == undefined\r\n || result.registrantsCount < result.maximumCapacity); }))\r\n return iltSessions;\r\n else\r\n return null;\r\n };\r\n VhsILTDirectiveController.prototype.getIltSessionToRemovingFromSeries = function (session) {\r\n return this.sessions.filter(function (result) { return result.seriesId == session.seriesId\r\n && session.seriesId != null\r\n && result.status == ILTSessionStatus_1.ILTSessionStatus[ILTSessionStatus_1.ILTSessionStatus.SCHEDULED]\r\n && (result.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED]\r\n || result.registrationStatus == ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST])\r\n && result.startDate > session.startDate; });\r\n };\r\n VhsILTDirectiveController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 767;\r\n };\r\n VhsILTDirectiveController.$inject = [\r\n \"$http\",\r\n \"$scope\",\r\n UrlService_1.UrlService.NAME,\r\n CourseILTService_1.CourseILTService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return VhsILTDirectiveController;\r\n})();\r\nexports.VhsILTDirectiveController = VhsILTDirectiveController;\r\nfunction VhsILTDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsILTDirectiveController,\r\n scope: {\r\n courseProgress: \"=vhsCourseProgress\",\r\n section: \"=vhsSection\"\r\n },\r\n templateUrl: url.template(\"components/vhs-ilt.html\")\r\n };\r\n}\r\nexports.VhsILTDirectiveFactory = VhsILTDirectiveFactory;\r\nVhsILTDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../courses/CourseILTService\":200,\"../courses/models/SectionProgressStatus\":227,\"../ilt/models/ILTSessionAttendanceStatus\":282,\"../ilt/models/ILTSessionRegistrationStatus\":283,\"../ilt/models/ILTSessionStatus\":284,\"../utils/UrlService\":528,\"../webinars/models/TimeZoneType\":530,\"./dialog/DialogService\":166,\"./models/Event\":170}],111:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar VhsImageCropperDirectiveController = (function () {\r\n function VhsImageCropperDirectiveController($scope, $window, url, bundleService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.url = url;\r\n this.bundleService = bundleService;\r\n this.isScaledX = false;\r\n this.isScaledY = false;\r\n this.isModalVisible = false;\r\n this.isCropperExists = false;\r\n $scope.vm = this;\r\n $('#' + this.$scope.modalId).on('shown.bs.modal', function () {\r\n if (_this.isCropperExists) {\r\n _this.cropperDestroy();\r\n }\r\n _this.isModalVisible = true;\r\n _this.getFileExtension();\r\n _this.initCropper();\r\n });\r\n $('#' + this.$scope.modalId).on('hide.bs.modal', function () {\r\n _this.isModalVisible = false;\r\n _this.cropperDestroy();\r\n });\r\n this.$scope.$watch(\"sourceImage\", function (newValue, oldValue) {\r\n if (oldValue != newValue && _this.$scope.sourceImage != undefined && _this.isModalVisible) {\r\n _this.$scope.croppedFile = undefined;\r\n var source = _this.$scope.sourceImage;\r\n if (typeof _this.$scope.sourceImage === 'string') {\r\n source = bundleService.getImageFromUrl(_this.$scope.sourceImage);\r\n }\r\n $(\"#cropperArea\").attr(\"src\", URL.createObjectURL(source)).load(function () {\r\n _this.cropperDestroy();\r\n _this.getFileExtension();\r\n _this.initCropper();\r\n });\r\n }\r\n else if (_this.$scope.sourceImage == undefined && _this.isCropperExists) {\r\n _this.cropperDestroy();\r\n }\r\n });\r\n }\r\n VhsImageCropperDirectiveController.prototype.initCropper = function () {\r\n this.isCropperExists = true;\r\n var image = document.getElementById(\"cropperArea\");\r\n this.cropper = new Cropper(image, {\r\n aspectRatio: this.$scope.aspectRatio,\r\n modal: true,\r\n viewMode: 0\r\n });\r\n };\r\n VhsImageCropperDirectiveController.prototype.cropperSaveButton = function () {\r\n this.cropperSave();\r\n $(\"#imageCropperModal\").modal(\"hide\");\r\n };\r\n VhsImageCropperDirectiveController.prototype.getFileExtension = function () {\r\n var sourceImageName;\r\n if (typeof this.$scope.sourceImage === \"string\") {\r\n sourceImageName = this.$scope.sourceImage.indexOf(\"?\") > 0\r\n ? this.$scope.sourceImage.substring(0, this.$scope.sourceImage.indexOf(\"?\"))\r\n : sourceImageName = this.$scope.sourceImage;\r\n }\r\n else {\r\n sourceImageName = this.$scope.sourceImage.name;\r\n }\r\n if (sourceImageName.split(\".\").pop() == \"jpg\") {\r\n this.fileExtension = \"jpeg\";\r\n }\r\n else {\r\n this.fileExtension = sourceImageName.split(\".\").pop();\r\n }\r\n };\r\n VhsImageCropperDirectiveController.prototype.scaleY = function () {\r\n if (!this.isScaledY) {\r\n this.cropper.scaleY(-1);\r\n }\r\n else {\r\n this.cropper.scaleY(1);\r\n }\r\n this.isScaledY = !this.isScaledY;\r\n };\r\n VhsImageCropperDirectiveController.prototype.scaleX = function () {\r\n if (!this.isScaledX) {\r\n this.cropper.scaleX(-1);\r\n }\r\n else {\r\n this.cropper.scaleX(1);\r\n }\r\n this.isScaledX = !this.isScaledX;\r\n };\r\n VhsImageCropperDirectiveController.prototype.moveLeft = function () {\r\n this.cropper.move(-10, 0);\r\n };\r\n VhsImageCropperDirectiveController.prototype.moveRight = function () {\r\n this.cropper.move(10, 0);\r\n };\r\n VhsImageCropperDirectiveController.prototype.moveTop = function () {\r\n this.cropper.move(0, -10);\r\n };\r\n VhsImageCropperDirectiveController.prototype.moveBot = function () {\r\n this.cropper.move(0, 10);\r\n };\r\n VhsImageCropperDirectiveController.prototype.zoomIn = function () {\r\n this.cropper.zoom(0.1);\r\n };\r\n VhsImageCropperDirectiveController.prototype.zoomOut = function () {\r\n this.cropper.zoom(-0.1);\r\n };\r\n VhsImageCropperDirectiveController.prototype.rotateLeft = function () {\r\n this.cropper.rotate(-45);\r\n };\r\n VhsImageCropperDirectiveController.prototype.rotateRight = function () {\r\n this.cropper.rotate(45);\r\n };\r\n VhsImageCropperDirectiveController.prototype.cropperCrop = function () {\r\n this.cropper.crop();\r\n };\r\n VhsImageCropperDirectiveController.prototype.cropperClear = function () {\r\n this.cropper.clear();\r\n };\r\n VhsImageCropperDirectiveController.prototype.btnRestore = function () {\r\n this.cropper.reset();\r\n };\r\n VhsImageCropperDirectiveController.prototype.cropperSave = function () {\r\n var _this = this;\r\n this.cropper.getCroppedCanvas({\r\n fillColor: '#fff'\r\n }).toBlob(function (result) {\r\n result.lastModifiedDate = new Date();\r\n if (_this.$scope.sourceImage.name) {\r\n result.name = _this.$scope.sourceImage.name;\r\n }\r\n else {\r\n result.name = _this.$scope.sourceImage.indexOf(\"?\") > 0\r\n ? _this.$scope.sourceImage.substring(_this.$scope.sourceImage.lastIndexOf(\"/\") + 1, _this.$scope.sourceImage.indexOf(\"?\"))\r\n : _this.$scope.sourceImage.substring(_this.$scope.sourceImage.lastIndexOf(\"/\") + 1);\r\n }\r\n _this.$scope.croppedFile = result;\r\n }, 'image/jpeg', 1);\r\n };\r\n VhsImageCropperDirectiveController.prototype.cropperDestroy = function () {\r\n this.isCropperExists = false;\r\n this.cropper.destroy();\r\n };\r\n VhsImageCropperDirectiveController.$inject = [\r\n \"$scope\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n BundleService_1.BundleService.NAME\r\n ];\r\n return VhsImageCropperDirectiveController;\r\n})();\r\nexports.VhsImageCropperDirectiveController = VhsImageCropperDirectiveController;\r\nfunction VhsImageCropperDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsImageCropperDirectiveController,\r\n scope: {\r\n aspectRatio: \"=vhsAspectRatio\",\r\n sourceImage: \"=?vhsSourceImage\",\r\n croppedFile: \"=?vhsCroppedImage\",\r\n modalId: \"=vhsModalId\"\r\n },\r\n templateUrl: url.template(\"components/vhs-image-cropper.html\")\r\n };\r\n}\r\nexports.VhsImageCropperDirectiveFactory = VhsImageCropperDirectiveFactory;\r\nVhsImageCropperDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../bundles/BundleService\":36,\"../utils/UrlService\":528}],112:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PersonalService_1 = require(\"../personal/PersonalService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar VhsIndividualCourseProgressCertificatesController = (function () {\r\n function VhsIndividualCourseProgressCertificatesController($scope, $q, $window, $sce, personalService, courseService, progressService, dialogService, businessUnitsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.$window = $window;\r\n this.$sce = $sce;\r\n this.personalService = personalService;\r\n this.courseService = courseService;\r\n this.progressService = progressService;\r\n this.dialogService = dialogService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.isUserProgressLoading = false;\r\n this.isDisableButtons = true;\r\n this.certificateParameters = {\r\n format: 'pdf',\r\n certificateType: 'completion'\r\n };\r\n this.apiApplicationUrl = '';\r\n this.domainsMap = null;\r\n this.sharedUrl = '';\r\n this.urlForFacebook = '';\r\n this.urlForLinkedIn = '';\r\n this.$scope.vm = this;\r\n this.serial = RandomUtils_1.RandomUtils.generateRandomId(\"\");\r\n this.updateDataFromScope();\r\n var tmpUrl = AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[1].split('.');\r\n this.businessUnitsService.getAllBuDomains().then(function (res) {\r\n _this.domainsMap = res;\r\n });\r\n this.apiApplicationUrl = (tmpUrl.length == 3 && tmpUrl[0].indexOf('vhs-test') === -1 ? tmpUrl[tmpUrl.length - 2] + '.' + tmpUrl[tmpUrl.length - 1] : tmpUrl.join('.')) + 'api/';\r\n this.$scope.$watchGroup([\"courseProgresses\", \"userCertificates\", \"courseCertificates\"], function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.updateDataFromScope();\r\n });\r\n }\r\n VhsIndividualCourseProgressCertificatesController.prototype.updateDataFromScope = function () {\r\n var _this = this;\r\n this.course = this.$scope.course;\r\n this.courseProgresses = this.$scope.courseProgresses;\r\n this.selectedProgressId = this.$scope.selectedProgressId;\r\n this.systemPermissions = this.$scope.systemPermissions;\r\n this.currentUser = this.$scope.currentUser;\r\n this.courseCertificates = this.$scope.courseCertificates;\r\n if (this.courseCertificates.length > 0) {\r\n this.certificateParameters.certificateId = this.courseCertificates[0].id;\r\n }\r\n if (this.$scope.userCertificates && !angular.equals(this.$scope.userCertificates, this.userCertificates)) {\r\n this.isDisableButtons = false;\r\n }\r\n this.userCertificates = this.$scope.userCertificates;\r\n if (this.courseProgresses && this.courseProgresses.length > 0) {\r\n this.selectedProgress = this.courseProgresses.filter(function (p) { return p.id === _this.selectedProgressId; }).pop();\r\n }\r\n this.isUserProgressLoading = false;\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.isViewUserCertificatesPermissionsGranted = function () {\r\n return this.selectedProgress && (this.currentUser.id == this.selectedProgress.userId\r\n || this.course.permissions.viewOtherUsersProgress);\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.isGenerateCertificatesPermissionsGranted = function () {\r\n return this.systemPermissions && this.selectedProgress && ((this.systemPermissions.generateCoursesMyCertificates && this.currentUser.id == this.selectedProgress.userId)\r\n || this.systemPermissions.generateCoursesOthersCertificates && this.currentUser.id != this.selectedProgress.userId);\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.downloadUserCertificate = function (id) {\r\n var _this = this;\r\n this.personalService.downloadCertificate(id).then(function (result) { return _this.$window.open(result); });\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.removeUserCertificates = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Do you want to remove the certificates?\", {\r\n title: \"Remove certificates\"\r\n }).then(function () {\r\n _this.isDisableButtons = true;\r\n _this.courseService.removeUserCertificates(_this.course.id, _this.selectedProgressId).then(function (result) {\r\n INotifier_1.notifier.success(\"User certificates have been removed\");\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_RELOAD_PROGRESS);\r\n _this.isUserProgressLoading = true;\r\n });\r\n });\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.downloadCourseTranscriptReport = function () {\r\n var _this = this;\r\n var parameters = {\r\n userId: this.courseProgresses.filter(function (p) { return p.id == _this.selectedProgressId; })[0].userId,\r\n courseId: this.course.id,\r\n courseProgressId: this.selectedProgressId\r\n };\r\n this.progressService.downloadCourseTranscriptReport(parameters)\r\n .then(function (result) {\r\n _this.$window.open(result);\r\n });\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.getCertificate = function (download) {\r\n var _this = this;\r\n var parameters = this.getParameters();\r\n if (download) {\r\n this.isDisableButtons = true;\r\n this.$q.all([\r\n this.courseService.downloadCertificate(parameters)\r\n ])\r\n .then(function (promises) {\r\n var downloadCertUrl = promises[0];\r\n _this.$window.open(downloadCertUrl);\r\n })\r\n .finally(function () {\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_RELOAD_PROGRESS);\r\n });\r\n }\r\n else {\r\n parameters.format = 'png';\r\n this.courseService.downloadCertificate(parameters)\r\n .then(function (result) {\r\n _this.certificateContent = \"\";\r\n return result;\r\n });\r\n }\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.saveCertificateForUser = function () {\r\n var _this = this;\r\n this.isDisableButtons = true;\r\n return this.courseService.saveCertificateForUser(this.getParameters()).then(function (result) {\r\n INotifier_1.notifier.success(\"The certificate has been successfully saved\");\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_RELOAD_PROGRESS);\r\n return result;\r\n });\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.getParameters = function () {\r\n return {\r\n courseId: this.course.id,\r\n userId: this.selectedProgress.userId,\r\n progressId: this.selectedProgress.id,\r\n certificateId: this.certificateParameters.certificateId,\r\n format: this.certificateParameters.format,\r\n certificateType: this.certificateParameters.certificateType\r\n };\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.copyVerificationLink = function (certificate) {\r\n var text = this.getVerificationPage(certificate);\r\n var elem = document.createElement(\"textarea\");\r\n document.body.appendChild(elem);\r\n elem.value = \"\" + text;\r\n elem.select();\r\n document.execCommand(\"copy\");\r\n document.body.removeChild(elem);\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.getVerificationPage = function (certificate) {\r\n if (this.domainsMap !== null) {\r\n var splitedUrl = AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[1].split('.');\r\n var domain = splitedUrl.length === 3 ? splitedUrl[0] + '.' : '';\r\n if (this.domainsMap && certificate.businessUnitId && this.domainsMap[certificate.businessUnitId]) {\r\n domain = this.domainsMap[certificate.businessUnitId] + '.';\r\n }\r\n return AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[0] + '//' + domain + (this.apiApplicationUrl.indexOf(\"vhs-test\") !== -1 && domain ? this.apiApplicationUrl.replace(splitedUrl[0] + '.', '') : this.apiApplicationUrl) + (\"verification/certificate/\" + certificate.uuid);\r\n }\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.showShareDialog = function (certificate) {\r\n this.sharedCertificate = certificate;\r\n this.sharedUrl = this.getVerificationPage(certificate);\r\n this.urlForFacebook = this.$sce.trustAsResourceUrl(\"https://www.facebook.com/plugins/share_button.php?href=\" + (this.sharedUrl + '?latest') + \"&layout=button&size=large&width=77&height=28&appId\");\r\n this.getLinkForLinkedIn();\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#shareDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.closeShareDialog = function () {\r\n this.sharedCertificate = null;\r\n this.sharedUrl = \"\";\r\n this.urlForFacebook = \"\";\r\n this.urlForLinkedIn = \"\";\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.getDate = function (date) {\r\n return new Date(date);\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.getExpirationDateForUrl = function (date) {\r\n if (!date) {\r\n return '';\r\n }\r\n var validTo = new Date(date);\r\n return '&expirationYear=' + validTo.getFullYear() + '&expirationMonth=' + validTo.getMonth();\r\n };\r\n VhsIndividualCourseProgressCertificatesController.prototype.getLinkForLinkedIn = function () {\r\n var _this = this;\r\n var businessUnitId = this.sharedCertificate.businessUnitId ? this.sharedCertificate.businessUnitId : 1;\r\n this.businessUnitsService.getBusinessUnitById(businessUnitId).then(function (businessUnit) {\r\n _this.urlForLinkedIn = 'https://www.linkedin.com/profile/add?startTask=CERTIFICATION_NAME&name='\r\n + _this.sharedCertificate.title + '&organizationName=' + businessUnit.name + '&issueYear='\r\n + _this.getDate(_this.sharedCertificate.receiptDate).getFullYear() + '&issueMonth='\r\n + _this.getDate(_this.sharedCertificate.receiptDate).getMonth() + _this.getExpirationDateForUrl(_this.sharedCertificate.validToDate)\r\n + '&certUrl=' + _this.sharedUrl;\r\n });\r\n };\r\n VhsIndividualCourseProgressCertificatesController.$inject = [\r\n \"$scope\",\r\n \"$q\",\r\n \"$window\",\r\n \"$sce\",\r\n PersonalService_1.PersonalService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME\r\n ];\r\n return VhsIndividualCourseProgressCertificatesController;\r\n})();\r\nexports.VhsIndividualCourseProgressCertificatesController = VhsIndividualCourseProgressCertificatesController;\r\nfunction VhsIndividualCourseProgressCertificatesDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsIndividualCourseProgressCertificatesController,\r\n scope: {\r\n course: \"=\",\r\n courseProgresses: \"=\",\r\n selectedProgressId: \"=\",\r\n systemPermissions: \"=\",\r\n currentUser: \"=\",\r\n courseCertificates: \"=\",\r\n userCertificates: \"=\",\r\n },\r\n templateUrl: url.template(\"components/vhs-individual-course-progress-certificates.html\")\r\n };\r\n}\r\nexports.VhsIndividualCourseProgressCertificatesDirectiveFactory = VhsIndividualCourseProgressCertificatesDirectiveFactory;\r\nVhsIndividualCourseProgressCertificatesDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../businessUnits/BusinessUnitsService\":44,\"../courses/CourseService\":211,\"../courses/ProgressService\":219,\"../personal/PersonalService\":377,\"../utils/AppProperties\":\"AppProperties\",\"../utils/RandomUtils\":523,\"../utils/UrlService\":528,\"./dialog/DialogService\":166,\"./models/Event\":170}],113:[function(require,module,exports){\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SectionProgressStatus_1 = require(\"../courses/models/SectionProgressStatus\");\r\nvar SectionType_1 = require(\"../courses/models/SectionType\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar QuizCorrectAnswersType_1 = require(\"../courses/models/QuizCorrectAnswersType\");\r\nvar CourseDetailsUtils_1 = require(\"../courses/CourseDetailsUtils\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar QuizResultStatus_1 = require(\"../quizzes/models/QuizResultStatus\");\r\nvar VhsIndividualCourseProgressDetailsController = (function () {\r\n function VhsIndividualCourseProgressDetailsController($http, $scope, $q, $timeout, progressService, quizService, dialogService, urlService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.$timeout = $timeout;\r\n this.progressService = progressService;\r\n this.quizService = quizService;\r\n this.dialogService = dialogService;\r\n this.urlService = urlService;\r\n this.courseSections = [];\r\n this.sectionProgresses = [];\r\n this.sectionProgressBySectionId = new Map();\r\n this.quizResults = [];\r\n this.sectionProgressAllowedStatuses = [];\r\n this.isDisableButtons = true;\r\n this.showQuizDetailsHeader = false;\r\n this.quizResultsPageSize = 5;\r\n this.rowShow = new Map();\r\n this.isShowQuizResult = false;\r\n this.isShowQuizResultModal = false;\r\n this.$scope.vm = this;\r\n this.updateDataFromScope();\r\n this.initializeGridModel();\r\n this.$scope.$watchGroup([\r\n \"selectedProgressId\",\r\n \"courseProgresses\",\r\n \"sectionProgresses\"\r\n ], (function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.updateDataFromScope();\r\n }));\r\n $(\"#quizResultsDialog\").on(\"hidden.bs.modal\", function (e) {\r\n _this.isShowQuizResultModal = false;\r\n });\r\n this.quizzesAreLoading = this.$scope.quizzesAreLoading;\r\n }\r\n VhsIndividualCourseProgressDetailsController.prototype.updateDataFromScope = function () {\r\n var _this = this;\r\n this.course = this.$scope.course;\r\n this.courseProgresses = this.$scope.courseProgresses;\r\n this.courseSections = this.$scope.courseSections;\r\n this.sectionProgresses = this.$scope.sectionProgresses;\r\n this.selectedProgressId = this.$scope.selectedProgressId;\r\n this.systemPermissions = this.$scope.systemPermissions;\r\n this.coursePermissions = this.$scope.coursePermissions;\r\n this.groupSectionProgresses();\r\n this.extendSectionsByProgress();\r\n this.removeInactiveSectionsWithoutProgress();\r\n this.recalculateProgressPercentage();\r\n if (!this.sectionProgresses) {\r\n this.isDisableButtons = true;\r\n }\r\n if (this.courseSections && this.sectionProgresses) {\r\n this.isDisableButtons = false;\r\n }\r\n if (this.courseProgresses && this.courseProgresses.length > 0) {\r\n this.selectedProgress = this.courseProgresses.filter(function (p) { return p.id === _this.selectedProgressId; }).pop();\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.groupSectionProgresses = function () {\r\n this.sectionProgressBySectionId.clear();\r\n if (this.sectionProgresses) {\r\n for (var _i = 0, _a = this.sectionProgresses; _i < _a.length; _i++) {\r\n var sectionProgress = _a[_i];\r\n this.sectionProgressBySectionId.set(sectionProgress.sectionId, sectionProgress);\r\n }\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.extendSectionsByProgress = function () {\r\n var _this = this;\r\n if (this.courseSections && this.sectionProgressBySectionId) {\r\n this.courseSections.forEach(function (s) {\r\n s.progress = _this.sectionProgressBySectionId.get(s.section.id);\r\n s.section.status = s.progress ? s.progress.status : null;\r\n });\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.removeInactiveSectionsWithoutProgress = function () {\r\n var _this = this;\r\n var shownStatuses = [SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED], SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]];\r\n if (!!this.courseSections) {\r\n this.courseSections = this.courseSections.filter(function (s) { return s.section.isActive\r\n || (!s.section.isActive && _this.sectionProgressBySectionId.has(s.section.id)\r\n && shownStatuses.indexOf(_this.sectionProgressBySectionId.get(s.section.id).status) >= 0); });\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.recalculateProgressPercentage = function () {\r\n var _this = this;\r\n if (this.courseSections)\r\n this.courseSections.forEach(function (sectionInHierarchy, index) {\r\n if (sectionInHierarchy.level === 1) {\r\n CourseDetailsUtils_1.CourseDetailsUtils.calculateSectionCompletionPercentage(index, _this.courseSections);\r\n }\r\n });\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.getTimeSpentForSection = function (sectionId) {\r\n var timespent = \"Not Started\";\r\n var progress = this.sectionProgressBySectionId.get(sectionId);\r\n if (progress && progress.totalTimeSpent) {\r\n var timeSpentMoment = moment(progress.totalTimeSpent).utc();\r\n var hours = timeSpentMoment.get(\"hours\");\r\n var minutes = timeSpentMoment.get(\"minutes\");\r\n var seconds = timeSpentMoment.get(\"seconds\");\r\n timespent = \"\";\r\n timespent += hours > 0 ? hours + \" h \" : \"\";\r\n timespent += minutes > 0 ? minutes + \" m \" : \"\";\r\n timespent += seconds > 0 ? seconds + \" s \" : \"\";\r\n }\r\n return timespent;\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.getLastScore = function (sectionId) {\r\n if (this.sectionProgressBySectionId) {\r\n var progress = this.sectionProgressBySectionId.get(sectionId);\r\n if (progress && progress.quizResultId && progress.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.QUIZ]) {\r\n return progress.quizResultType === QuizCorrectAnswersType_1.QuizCorrectAnswersType[QuizCorrectAnswersType_1.QuizCorrectAnswersType.PERCENTAGE]\r\n ? String(progress.quizResultPercentage)\r\n : String(progress.quizResultPoints);\r\n }\r\n else {\r\n return \"\";\r\n }\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.showQuizResults = function (sectionId) {\r\n var _this = this;\r\n if (this.selectedQuizDetails && this.selectedQuizDetails.sectionId == sectionId) {\r\n this.isShowQuizResult = false;\r\n this.selectedQuizDetails = null;\r\n this.selectedQuizResultId = null;\r\n this.$scope.quizzesAreLoading = false;\r\n }\r\n this.isShowQuizResultModal = true;\r\n this.progressService.getIndividualQuizResults(this.course.id, this.selectedProgressId, sectionId)\r\n .then(function (result) {\r\n _this.quizResults = result.filter(function (a) { return a.status != null; });\r\n _this.quizResultsGridModel.loadPage(0);\r\n $(\"#quizResultsDialog\").modal({\r\n show: true,\r\n backdrop: true\r\n });\r\n });\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.initializeGridModel = function () {\r\n var _this = this;\r\n this.quizResultsGridModel = new IGridModel_1.GridModel(function (gridModel) {\r\n gridModel.pageSize = _this.quizResultsPageSize;\r\n var page = _this.getPage(gridModel.currentPage, gridModel.pageSize);\r\n return _this.$q.when(page);\r\n });\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.getPage = function (pageIndex, pageSize) {\r\n var start = pageIndex * pageSize;\r\n var result = this.quizResults.slice(start, start + pageSize);\r\n var totalCount = this.quizResults.length;\r\n return { entries: result, totalCount: totalCount, pageMode: \"ENTRIES_AND_TOTAL_ESTIMATES\" };\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.hideQuizResults = function () {\r\n $(\"#quizResultsDialog\").modal(\"hide\");\r\n this.selectedQuizDetailsInPopup = null;\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.showQuizDetails = function (sectionId) {\r\n var _this = this;\r\n this.$scope.quizzesAreLoading = true;\r\n var func = function (event, data) {\r\n _this.$timeout(function () {\r\n _this.$scope.quizzesAreLoading = false;\r\n _this.$scope.$apply();\r\n });\r\n };\r\n this.$scope.$on('quizzesAreLoaded', func);\r\n if (this.selectedQuizDetails && this.selectedQuizDetails.sectionId == sectionId) {\r\n this.isShowQuizResult = false;\r\n this.selectedQuizDetails = null;\r\n this.selectedQuizResultId = null;\r\n this.$scope.quizzesAreLoading = false;\r\n }\r\n else {\r\n this.isShowQuizResult = true;\r\n this.selectedQuizResultId = null;\r\n this.selectedQuizDetails = this.sectionProgressBySectionId.get(sectionId);\r\n if (this.selectedQuizDetails && this.selectedQuizDetails.quizResultId) {\r\n if (this.course.permissions.viewOtherUsersProgress || this.course.permissions.view) {\r\n this.progressService.getIndividualQuizResults(this.course.id, this.selectedProgressId, sectionId)\r\n .then(function (quizResultsForSection) {\r\n if (quizResultsForSection) {\r\n for (var i = quizResultsForSection.length - 1; i >= 0; i--) {\r\n var quiz = quizResultsForSection[i];\r\n if (quiz.correctAnswersCount + quiz.wrongAnswersCount + quiz.questionsToBeScoredCount > 0) {\r\n _this.selectedQuizResultId = quizResultsForSection[i].id;\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.showQuizDetailsInPopupForQuizResult = function (quizResult) {\r\n if (this.selectedQuizDetailsInPopup && quizResult && this.selectedQuizDetailsInPopup.id === quizResult.id) {\r\n this.selectedQuizDetailsInPopup = null;\r\n }\r\n else {\r\n this.selectedQuizDetailsInPopup = quizResult;\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.changeSectionStatus = function (sectionId) {\r\n this.sectionProgressAllowedStatuses = null;\r\n if (this.selectedSectionProgress && this.selectedSectionProgress.sectionId === sectionId) {\r\n this.selectedSectionProgress = null;\r\n }\r\n else {\r\n this.selectedSectionProgress = this.sectionProgressBySectionId.get(sectionId);\r\n if (this.selectedSectionProgress.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]) {\r\n this.sectionProgressAllowedStatuses = [\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED,\r\n value: \"not allowed\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.ALLOWED,\r\n value: \"allowed\"\r\n },\r\n { key: SectionProgressStatus_1.SectionProgressStatus.OPENED, value: \"opened\" }\r\n ];\r\n }\r\n else if (this.selectedSectionProgress.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.QUIZ]) {\r\n this.sectionProgressAllowedStatuses = [\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED,\r\n value: \"not allowed\"\r\n },\r\n { key: SectionProgressStatus_1.SectionProgressStatus.ALLOWED, value: \"allowed\" },\r\n { key: SectionProgressStatus_1.SectionProgressStatus.FAILED, value: \"failed\" },\r\n { key: SectionProgressStatus_1.SectionProgressStatus.SOS, value: \"failed NM att.\" },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.COMPLETED,\r\n value: \"completed\"\r\n }\r\n ];\r\n }\r\n else if (this.selectedSectionProgress.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION_WITH_MANUAL_COMPLETION]) {\r\n this.sectionProgressAllowedStatuses = [\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED,\r\n value: \"not allowed\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.ALLOWED,\r\n value: \"allowed\"\r\n },\r\n { key: SectionProgressStatus_1.SectionProgressStatus.OPENED, value: \"opened\" }\r\n ];\r\n }\r\n else if (this.selectedSectionProgress.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.SURVEY]) {\r\n this.sectionProgressAllowedStatuses = [\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED,\r\n value: \"not allowed\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.ALLOWED,\r\n value: \"allowed\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.COMPLETED,\r\n value: \"completed\"\r\n }\r\n ];\r\n }\r\n else if (this.selectedSectionProgress.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR]) {\r\n this.sectionProgressAllowedStatuses = [\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED,\r\n value: \"not allowed\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.ALLOWED,\r\n value: \"allowed\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.COMPLETED,\r\n value: \"attended\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.STARTED,\r\n value: \"registered\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.FAILED,\r\n value: \"missed\"\r\n }\r\n ];\r\n }\r\n else if (this.selectedSectionProgress.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.ILT]) {\r\n this.sectionProgressAllowedStatuses = [\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED,\r\n value: \"not allowed\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.ALLOWED,\r\n value: \"allowed\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.STARTED,\r\n value: \"registered\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.COMPLETED,\r\n value: \"attended\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.FAILED,\r\n value: \"missed\"\r\n }\r\n ];\r\n }\r\n else if (this.selectedSectionProgress.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD]) {\r\n this.sectionProgressAllowedStatuses = [\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED,\r\n value: \"not allowed\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.ALLOWED,\r\n value: \"allowed\"\r\n },\r\n {\r\n key: SectionProgressStatus_1.SectionProgressStatus.COMPLETED,\r\n value: \"completed\"\r\n }\r\n ];\r\n }\r\n this.sectionProgressNewStatus = SectionProgressStatus_1.SectionProgressStatus[this.selectedSectionProgress.status];\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.getUserInSectionProgressStatus = function (status, sectionTypeKey) {\r\n if (status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED]) {\r\n if (sectionTypeKey === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]) {\r\n return \"not allowed\";\r\n }\r\n else {\r\n return \"not allowed\";\r\n }\r\n }\r\n else if (status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED]) {\r\n if (sectionTypeKey === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]) {\r\n return \"allowed\";\r\n }\r\n else {\r\n return \"allowed\";\r\n }\r\n }\r\n else if (status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]) {\r\n return \"opened\";\r\n }\r\n else if (status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.STARTED]) {\r\n if (sectionTypeKey === SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR]) {\r\n return \"registered\";\r\n }\r\n else if (sectionTypeKey === SectionType_1.SectionType[SectionType_1.SectionType.ILT]) {\r\n return \"registered\";\r\n }\r\n else {\r\n return \"started\";\r\n }\r\n }\r\n else if (status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.SUBMITTED]) {\r\n return \"submitted\";\r\n }\r\n else if (status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.FAILED]) {\r\n if (sectionTypeKey === SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR]) {\r\n return \"missed\";\r\n }\r\n else if (sectionTypeKey === SectionType_1.SectionType[SectionType_1.SectionType.ILT]) {\r\n return \"missed\";\r\n }\r\n else {\r\n return \"failed\";\r\n }\r\n }\r\n else if (status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.SOS]) {\r\n return \"failed NM att.\";\r\n }\r\n else if (status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED]) {\r\n if (sectionTypeKey === SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR]) {\r\n return \"attended\";\r\n }\r\n else if (sectionTypeKey === SectionType_1.SectionType[SectionType_1.SectionType.ILT]) {\r\n return \"attended\";\r\n }\r\n else {\r\n return \"completed\";\r\n }\r\n }\r\n else {\r\n return \"N/A\";\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.onSaveSectionStatus = function () {\r\n var _this = this;\r\n if (this.sectionProgressNewStatus === SectionProgressStatus_1.SectionProgressStatus[this.selectedSectionProgress.status]) {\r\n INotifier_1.notifier.warning(\"You are trying to set the same status!\");\r\n return;\r\n }\r\n if (this.selectedSectionProgress.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.QUIZ]) {\r\n this.progressService.getIndividualQuizResults(this.course.id, this.selectedProgressId, this.selectedSectionProgress.sectionId)\r\n .then(function (result) {\r\n var individualQuizResult = result.filter(function (quizResults) { return quizResults.id === _this.selectedSectionProgress.quizResultId; }).pop();\r\n if (SectionProgressStatus_1.SectionProgressStatus[_this.sectionProgressNewStatus] === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED] &&\r\n !!individualQuizResult && (individualQuizResult.status === QuizResultStatus_1.QuizResultStatus[QuizResultStatus_1.QuizResultStatus.SUBMITTED] || individualQuizResult.status === QuizResultStatus_1.QuizResultStatus[QuizResultStatus_1.QuizResultStatus.FAILED])) {\r\n var options;\r\n var dialogMessage = \"Previous quiz attempt will be deleted. Continue?\";\r\n options = {\r\n title: \"Change status\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"Cancel\"\r\n };\r\n _this.dialogService.confirm(dialogMessage, options).then(function () {\r\n _this.resetSectionProgressStatus();\r\n });\r\n }\r\n else {\r\n _this.resetSectionProgressStatus();\r\n }\r\n });\r\n }\r\n else {\r\n this.resetSectionProgressStatus();\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.resetSectionProgressStatus = function () {\r\n var _this = this;\r\n this.isDisableButtons = true;\r\n this.progressService.resetSectionProgressStatus(this.course.id, this.selectedSectionProgress.sectionId, SectionProgressStatus_1.SectionProgressStatus[this.sectionProgressNewStatus], this.selectedProgressId).then(function (result) {\r\n INotifier_1.notifier.success(\"Section status successfully changed!\");\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_RELOAD_PROGRESS);\r\n });\r\n this.selectedSectionProgress = null;\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.completeSectionWithChildes = function (sectionId) {\r\n var _this = this;\r\n this.isDisableButtons = true;\r\n this.sectionProgressAllowedStatuses = null;\r\n this.selectedSectionProgress = null;\r\n this.progressService.completeSectionWithChildes(this.course.id, sectionId, this.selectedProgressId)\r\n .then(function () { return _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_RELOAD_PROGRESS); });\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.resetSectionWithChildesToInitial = function (sectionId) {\r\n var _this = this;\r\n this.isDisableButtons = true;\r\n this.sectionProgressAllowedStatuses = null;\r\n this.selectedSectionProgress = null;\r\n this.progressService.resetSectionWithChildesToInitial(this.course.id, sectionId, this.selectedProgressId)\r\n .then(function () { return _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_RELOAD_PROGRESS); });\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.isAnyChildSectionHasProgress = function (parentId) {\r\n var sections = this.findAllChildren(parentId);\r\n for (var _i = 0; _i < sections.length; _i++) {\r\n var section = sections[_i];\r\n var progress = this.sectionProgressBySectionId.get(section.section.id);\r\n if (progress != null\r\n && progress.status !== SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED]\r\n && progress.status !== SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.findAllChildren = function (parentId) {\r\n var result = [];\r\n var parent = this.courseSections.filter(function (s) { return s.section.id === parentId; }).pop();\r\n if (parent.children && parent.children.length > 0) {\r\n for (var _i = 0, _a = parent.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n if (child.children && child.children.length > 0) {\r\n result = result.concat(this.findAllChildren(child.section.id));\r\n }\r\n else {\r\n result.push(child);\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.getSectionProgressCompletionDate = function (section) {\r\n var sectionProgress = this.sectionProgressBySectionId.get(section.id);\r\n return sectionProgress ? sectionProgress.completionDate : null;\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.isShowQuizDetails = function (quizResult) {\r\n var section = this.courseSections.filter(function (section) { return section.section.id === quizResult.sectionId; })[0];\r\n return section.section.acceptableNumberOfAttempts <= 0 || this.coursePermissions.viewOtherUsersProgress;\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.showDetails = function (index, keyCode) {\r\n if ((keyCode == 13 || !keyCode) && this.isShowQuizResult === false && this.isShowQuizResultModal === false) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.getIconByLevel = function (sectionLevel) {\r\n if (sectionLevel === 1) {\r\n return '\\n' +\r\n '\\n' +\r\n '';\r\n }\r\n else if (sectionLevel === 2) {\r\n return '\\n' +\r\n '\\n' +\r\n '';\r\n }\r\n else if (sectionLevel === 3) {\r\n return '\\n' +\r\n '\\n' +\r\n '';\r\n }\r\n else if (sectionLevel >= 4) {\r\n return '\\n' +\r\n '\\n' +\r\n '';\r\n }\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.getIndentForChildSection = function (sectionLevel) {\r\n var result;\r\n if (sectionLevel === 0) {\r\n result = 0;\r\n }\r\n else if (sectionLevel === 1) {\r\n result = 7 * sectionLevel;\r\n }\r\n else if (sectionLevel > 1) {\r\n result = (7 * sectionLevel) + 16;\r\n }\r\n return result + 'px';\r\n };\r\n VhsIndividualCourseProgressDetailsController.prototype.decodeStatus = function (status) {\r\n var result = status;\r\n switch (status) {\r\n case \"PASSED\": {\r\n result = \"PASSED\";\r\n break;\r\n }\r\n case \"FAILED\": {\r\n result = \"FAILED\";\r\n break;\r\n }\r\n case \"SUBMITTED\": {\r\n result = \"SUBMITTED\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n VhsIndividualCourseProgressDetailsController.$inject = [\r\n \"$http\",\r\n \"$scope\",\r\n \"$q\",\r\n \"$timeout\",\r\n ProgressService_1.ProgressService.NAME,\r\n QuizService_1.QuizService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return VhsIndividualCourseProgressDetailsController;\r\n})();\r\nexports.VhsIndividualCourseProgressDetailsController = VhsIndividualCourseProgressDetailsController;\r\nfunction VhsIndividualCourseProgressDetailsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsIndividualCourseProgressDetailsController,\r\n scope: {\r\n course: \"=\",\r\n courseProgresses: \"=\",\r\n courseSections: \"=\",\r\n sectionProgresses: \"=\",\r\n selectedProgressId: \"=\",\r\n systemPermissions: \"=\",\r\n coursePermissions: \"=\",\r\n selectedUserFullName: \"=\",\r\n quizzesAreLoading: \"=\"\r\n },\r\n templateUrl: url.template(\"components/vhs-individual-course-progress-details.html\")\r\n };\r\n}\r\nexports.VhsIndividualCourseProgressDetailsDirectiveFactory = VhsIndividualCourseProgressDetailsDirectiveFactory;\r\nVhsIndividualCourseProgressDetailsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../IGridModel\":3,\"../INotifier\":5,\"../courses/CourseDetailsUtils\":195,\"../courses/ProgressService\":219,\"../courses/models/QuizCorrectAnswersType\":224,\"../courses/models/SectionProgressStatus\":227,\"../courses/models/SectionType\":228,\"../quizzes/QuizService\":396,\"../quizzes/models/QuizResultStatus\":402,\"../utils/UrlService\":528,\"./dialog/DialogService\":166,\"./models/Event\":170}],114:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar VhsIndividualCourseProgressController = (function () {\r\n function VhsIndividualCourseProgressController($scope, $http, progressService, quizService, dialogService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.progressService = progressService;\r\n this.quizService = quizService;\r\n this.dialogService = dialogService;\r\n this.isInitialized = false;\r\n this.courseSections = [];\r\n this.sectionProgresses = [];\r\n $scope.vm = this;\r\n this.updateDataFromScope();\r\n this.viewType = \"progressDetails\";\r\n this.isInitialized = true;\r\n this.$scope.$watchGroup([\r\n \"course\",\r\n \"courseSections\",\r\n \"userProgresses\",\r\n \"selectedProgressId\",\r\n \"sectionProgresses\",\r\n \"participationForm\",\r\n \"currentUser\",\r\n \"userCertificates\"\r\n ], (function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.updateDataFromScope();\r\n }));\r\n }\r\n VhsIndividualCourseProgressController.prototype.updateDataFromScope = function () {\r\n var _this = this;\r\n this.course = this.$scope.course;\r\n this.courseSections = this.$scope.courseSections;\r\n this.userProgresses = this.$scope.userProgresses;\r\n this.selectedProgressId = this.$scope.selectedProgressId;\r\n this.sectionProgresses = this.$scope.sectionProgresses;\r\n this.systemPermissions = this.$scope.systemPermissions;\r\n this.coursePermissions = this.course.permissions;\r\n this.currentUser = this.$scope.currentUser;\r\n this.courseCertificates = this.$scope.courseCertificates;\r\n this.userCertificates = this.$scope.userCertificates;\r\n this.participationForm = this.$scope.participationForm;\r\n this.participationFormFields = this.$scope.participationFormFields;\r\n if (this.userProgresses && this.userProgresses.length) {\r\n this.selectedProgress = this.userProgresses.filter(function (p) { return p.id === _this.selectedProgressId; }).pop();\r\n }\r\n };\r\n VhsIndividualCourseProgressController.prototype.showTab = function (tabName) {\r\n this.viewType = tabName;\r\n };\r\n VhsIndividualCourseProgressController.prototype.isMobileVersion = function () {\r\n return window.innerWidth <= 767;\r\n };\r\n VhsIndividualCourseProgressController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n ProgressService_1.ProgressService.NAME,\r\n QuizService_1.QuizService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return VhsIndividualCourseProgressController;\r\n})();\r\nexports.VhsIndividualCourseProgressController = VhsIndividualCourseProgressController;\r\nfunction VhsIndividualCourseProgressDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsIndividualCourseProgressController,\r\n scope: {\r\n course: \"=\",\r\n courseSections: \"=\",\r\n userProgresses: \"=\",\r\n selectedProgressId: \"=\",\r\n sectionProgresses: \"=\",\r\n participationForm: \"=\",\r\n participationFormFields: \"=\",\r\n systemPermissions: \"=\",\r\n currentUser: \"=\",\r\n courseCertificates: \"=\",\r\n userCertificates: \"=\",\r\n selectedUserFullName: \"=\",\r\n quizzesAreLoading: \"=\"\r\n },\r\n templateUrl: url.template(\"components/vhs-individual-course-progress.html\")\r\n };\r\n}\r\nexports.VhsIndividualCourseProgressDirectiveFactory = VhsIndividualCourseProgressDirectiveFactory;\r\nVhsIndividualCourseProgressDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../courses/ProgressService\":219,\"../quizzes/QuizService\":396,\"../utils/UrlService\":528,\"./dialog/DialogService\":166}],115:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar LearningPathProgressService_1 = require(\"../learningPaths/LearningPathProgressService\");\r\nvar VhsIndividualLearningPathParticipationInfoController = (function () {\r\n function VhsIndividualLearningPathParticipationInfoController($scope, learningPathProgressService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.learningPathProgressService = learningPathProgressService;\r\n this.isEditing = false;\r\n this.controlButtonsDisabled = false;\r\n this.editingParticipationFormData = {};\r\n $scope.vm = this;\r\n this.updateDataFromScope();\r\n this.$scope.$watch(\"participationForm\", (function (newValue, oldValue) {\r\n if (newValue == oldValue) {\r\n return;\r\n }\r\n _this.updateDataFromScope();\r\n }));\r\n }\r\n VhsIndividualLearningPathParticipationInfoController.prototype.updateDataFromScope = function () {\r\n this.learningPathId = this.$scope.learningPathId;\r\n this.learningPathProgresses = this.$scope.learningPathProgresses;\r\n this.selectedProgressId = this.$scope.selectedProgressId;\r\n this.participationForm = this.$scope.participationForm;\r\n this.participationFormFields = this.$scope.participationFormFields;\r\n this.learningPathPermissions = this.$scope.learningPathPermissions;\r\n this.systemPermissions = this.$scope.systemPermissions;\r\n };\r\n VhsIndividualLearningPathParticipationInfoController.prototype.isEmptyForm = function () {\r\n return this.participationForm !== null && this.participationForm !== undefined && Object.keys(this.participationForm).length === 0;\r\n };\r\n VhsIndividualLearningPathParticipationInfoController.prototype.getKeyNameByKey = function (key) {\r\n var keyName = key;\r\n if (this.participationFormFields && this.participationFormFields.length) {\r\n var field = this.participationFormFields.filter(function (f) { return f.fieldKey === key; }).pop();\r\n keyName = field ? field.name : key;\r\n }\r\n return keyName;\r\n };\r\n VhsIndividualLearningPathParticipationInfoController.prototype.startParticipationFormEditing = function () {\r\n var _this = this;\r\n this.participationFormFields.forEach(function (field) {\r\n _this.editingParticipationFormData[field.fieldKey] = _this.participationForm[field.fieldKey];\r\n });\r\n Object.keys(this.participationForm).forEach(function (key) {\r\n if (_this.participationFormFields.filter(function (f) { return f.fieldKey === key; }).length == 0) {\r\n _this.editingParticipationFormData[key] = _this.participationForm[key];\r\n }\r\n });\r\n this.isEditing = true;\r\n };\r\n VhsIndividualLearningPathParticipationInfoController.prototype.cancelParticipationFormEditing = function () {\r\n this.editingParticipationFormData = {};\r\n this.isEditing = false;\r\n };\r\n VhsIndividualLearningPathParticipationInfoController.prototype.submitParticipationFormEditing = function () {\r\n var _this = this;\r\n this.controlButtonsDisabled = true;\r\n this.learningPathProgressService.setParticipationFormData(this.learningPathId, this.selectedProgressId, this.editingParticipationFormData)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Participation Form data have been successfully updated\");\r\n _this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_RELOAD_PROGRESS);\r\n _this.editingParticipationFormData = {};\r\n _this.isEditing = false;\r\n })\r\n .finally(function () {\r\n _this.controlButtonsDisabled = false;\r\n });\r\n };\r\n VhsIndividualLearningPathParticipationInfoController.$inject = [\r\n \"$scope\",\r\n LearningPathProgressService_1.LearningPathProgressService.NAME\r\n ];\r\n return VhsIndividualLearningPathParticipationInfoController;\r\n})();\r\nexports.VhsIndividualLearningPathParticipationInfoController = VhsIndividualLearningPathParticipationInfoController;\r\nfunction VhsIndividualLearningPathParticipationInfoDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsIndividualLearningPathParticipationInfoController,\r\n scope: {\r\n learningPathId: \"=vhsLearningPathId\",\r\n learningPathProgresses: \"=vhsLearningPathProgresses\",\r\n selectedProgressId: \"=vhsSelectedProgressId\",\r\n participationForm: \"=vhsParticipationForm\",\r\n participationFormFields: \"=vhsParticipationFormFields\",\r\n learningPathPermissions: \"=vhsLearningPathPermissions\",\r\n systemPermissions: \"=vhsSystemPermissions\",\r\n },\r\n templateUrl: url.template(\"components/vhs-individual-learning-path-participation-info.html\")\r\n };\r\n}\r\nexports.VhsIndividualLearningPathParticipationInfoDirectiveFactory = VhsIndividualLearningPathParticipationInfoDirectiveFactory;\r\nVhsIndividualLearningPathParticipationInfoDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../learningPaths/LearningPathProgressService\":318,\"../utils/UrlService\":528,\"./models/Event\":170}],116:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PersonalService_1 = require(\"../personal/PersonalService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar LearningPathService_1 = require(\"../learningPaths/LearningPathService\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar VhsIndividualLearningPathProgressCertificatesController = (function () {\r\n function VhsIndividualLearningPathProgressCertificatesController($scope, $q, $window, $sce, personalService, learningPathService, dialogService, businessUnitsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.$window = $window;\r\n this.$sce = $sce;\r\n this.personalService = personalService;\r\n this.learningPathService = learningPathService;\r\n this.dialogService = dialogService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.isUserProgressLoading = false;\r\n this.isDisableButtons = true;\r\n this.certificateParameters = {\r\n format: 'pdf',\r\n certificateType: 'completion'\r\n };\r\n this.apiApplicationUrl = '';\r\n this.domainsMap = null;\r\n this.sharedUrl = '';\r\n this.urlForFacebook = '';\r\n this.urlForLinkedIn = '';\r\n this.$scope.vm = this;\r\n this.serial = RandomUtils_1.RandomUtils.generateRandomId(\"\");\r\n this.updateDataFromScope();\r\n var tmpUrl = AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[1].split('.');\r\n this.businessUnitsService.getAllBuDomains().then(function (res) {\r\n _this.domainsMap = res;\r\n });\r\n this.apiApplicationUrl = (tmpUrl.length == 3 && tmpUrl[0].indexOf('vhs-test') === -1 ? tmpUrl[tmpUrl.length - 2] + '.' + tmpUrl[tmpUrl.length - 1] : tmpUrl.join('.')) + 'api/';\r\n this.$scope.$watchGroup([\r\n \"learningPathProgresses\",\r\n \"userCertificates\",\r\n \"learningPathCertificates\"\r\n ], function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.updateDataFromScope();\r\n });\r\n }\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.updateDataFromScope = function () {\r\n var _this = this;\r\n this.learningPath = this.$scope.learningPath;\r\n this.learningPathProgresses = this.$scope.learningPathProgresses;\r\n this.selectedProgressId = this.$scope.selectedProgressId;\r\n this.systemPermissions = this.$scope.systemPermissions;\r\n this.currentUser = this.$scope.currentUser;\r\n this.learningPathCertificates = this.$scope.learningPathCertificates;\r\n if (this.learningPathCertificates.length > 0) {\r\n this.certificateParameters.certificateId = this.learningPathCertificates[0].id;\r\n }\r\n if (this.$scope.userCertificates && !angular.equals(this.$scope.userCertificates, this.userCertificates)) {\r\n this.isDisableButtons = false;\r\n }\r\n this.userCertificates = this.$scope.userCertificates;\r\n if (this.learningPathProgresses && this.learningPathProgresses.length > 0) {\r\n this.selectedProgress = this.learningPathProgresses.filter(function (p) { return p.id === _this.selectedProgressId; }).pop();\r\n }\r\n this.isUserProgressLoading = false;\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.isViewUserCertificatesPermissionsGranted = function () {\r\n return this.selectedProgress && (this.currentUser.id == this.selectedProgress.userId\r\n || this.learningPath.permissions.viewOtherUsersProgress);\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.isGenerateCertificatesPermissionsGranted = function () {\r\n return this.systemPermissions && this.selectedProgress && ((this.systemPermissions.generateLearningPathsMyCertificates && this.currentUser.id == this.selectedProgress.userId)\r\n || this.systemPermissions.generateLearningPathsOthersCertificates && this.currentUser.id != this.selectedProgress.userId);\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.downloadUserCertificate = function (id) {\r\n var _this = this;\r\n this.personalService.downloadCertificate(id).then(function (result) { return _this.$window.open(result); });\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.removeUserCertificates = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Do you want to remove the certificates?\", {\r\n title: \"Remove certificates\"\r\n }).then(function () {\r\n _this.isDisableButtons = true;\r\n _this.learningPathService.removeUserCertificates(_this.learningPath.id, _this.selectedProgressId).then(function (result) {\r\n INotifier_1.notifier.success(\"User certificates have been removed\");\r\n _this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_RELOAD_PROGRESS);\r\n _this.isUserProgressLoading = true;\r\n });\r\n });\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.getCertificate = function (download) {\r\n var _this = this;\r\n var parameters = this.getParameters();\r\n if (download) {\r\n this.isDisableButtons = true;\r\n this.$q.all([\r\n this.learningPathService.downloadCertificate(parameters)\r\n ])\r\n .then(function (promises) {\r\n var downloadCertUrl = promises[0];\r\n _this.$window.open(downloadCertUrl);\r\n })\r\n .finally(function () {\r\n _this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_RELOAD_PROGRESS);\r\n });\r\n }\r\n else {\r\n parameters.format = 'png';\r\n this.learningPathService.downloadCertificate(parameters)\r\n .then(function (result) {\r\n _this.certificateContent = \"\";\r\n return result;\r\n });\r\n }\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.saveCertificateForUser = function () {\r\n var _this = this;\r\n this.isDisableButtons = true;\r\n return this.learningPathService.saveCertificateForUser(this.getParameters()).then(function (result) {\r\n INotifier_1.notifier.success(\"The certificate has been successfully saved\");\r\n _this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_RELOAD_PROGRESS);\r\n return result;\r\n });\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.getParameters = function () {\r\n return {\r\n learningPathId: this.learningPath.id,\r\n userId: this.selectedProgress.userId,\r\n progressId: this.selectedProgress.id,\r\n certificateId: this.certificateParameters.certificateId,\r\n format: this.certificateParameters.format,\r\n certificateType: this.certificateParameters.certificateType\r\n };\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.copyVerificationLink = function (certificate) {\r\n var text = this.getVerificationPage(certificate);\r\n var elem = document.createElement(\"textarea\");\r\n document.body.appendChild(elem);\r\n elem.value = \"\" + text;\r\n elem.select();\r\n document.execCommand(\"copy\");\r\n document.body.removeChild(elem);\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.getVerificationPage = function (certificate) {\r\n if (this.domainsMap !== null) {\r\n var splitedUrl = AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[1].split('.');\r\n var domain = splitedUrl.length === 3 ? splitedUrl[0] + '.' : '';\r\n if (this.domainsMap && certificate.businessUnitId && this.domainsMap[certificate.businessUnitId]) {\r\n domain = this.domainsMap[certificate.businessUnitId] + '.';\r\n }\r\n return AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[0] + '//' + domain + (this.apiApplicationUrl.indexOf(\"vhs-test\") !== -1 && domain ? this.apiApplicationUrl.replace(splitedUrl[0] + '.', '') : this.apiApplicationUrl) + (\"verification/certificate/\" + certificate.uuid);\r\n }\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.showShareDialog = function (certificate) {\r\n this.sharedCertificate = certificate;\r\n this.sharedUrl = this.getVerificationPage(certificate);\r\n this.urlForFacebook = this.$sce.trustAsResourceUrl(\"https://www.facebook.com/plugins/share_button.php?href=\" + (this.sharedUrl + '?latest') + \"&layout=button&size=large&width=77&height=28&appId\");\r\n this.getLinkForLinkedIn();\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#shareDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.closeShareDialog = function () {\r\n this.sharedCertificate = null;\r\n this.sharedUrl = \"\";\r\n this.urlForFacebook = \"\";\r\n this.urlForLinkedIn = \"\";\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.getDate = function (date) {\r\n return new Date(date);\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.getExpirationDateForUrl = function (date) {\r\n if (!date) {\r\n return '';\r\n }\r\n var validTo = new Date(date);\r\n return '&expirationYear=' + validTo.getFullYear() + '&expirationMonth=' + validTo.getMonth();\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.prototype.getLinkForLinkedIn = function () {\r\n var _this = this;\r\n var businessUnitId = this.sharedCertificate.businessUnitId ? this.sharedCertificate.businessUnitId : 1;\r\n this.businessUnitsService.getBusinessUnitById(businessUnitId).then(function (businessUnit) {\r\n _this.urlForLinkedIn = 'https://www.linkedin.com/profile/add?startTask=CERTIFICATION_NAME&name='\r\n + _this.sharedCertificate.title + '&organizationName=' + businessUnit.name + '&issueYear='\r\n + _this.getDate(_this.sharedCertificate.receiptDate).getFullYear() + '&issueMonth='\r\n + _this.getDate(_this.sharedCertificate.receiptDate).getMonth() + _this.getExpirationDateForUrl(_this.sharedCertificate.validToDate)\r\n + '&certUrl=' + _this.sharedUrl;\r\n });\r\n };\r\n VhsIndividualLearningPathProgressCertificatesController.$inject = [\r\n \"$scope\",\r\n \"$q\",\r\n \"$window\",\r\n \"$sce\",\r\n PersonalService_1.PersonalService.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME\r\n ];\r\n return VhsIndividualLearningPathProgressCertificatesController;\r\n})();\r\nexports.VhsIndividualLearningPathProgressCertificatesController = VhsIndividualLearningPathProgressCertificatesController;\r\nfunction VhsIndividualLearningPathProgressCertificatesDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsIndividualLearningPathProgressCertificatesController,\r\n scope: {\r\n learningPath: \"=vhsLearningPath\",\r\n learningPathProgresses: \"=vhsLearningPathProgresses\",\r\n selectedProgressId: \"=vhsSelectedProgressId\",\r\n systemPermissions: \"=vhsSystemPermissions\",\r\n currentUser: \"=vhsCurrentUser\",\r\n learningPathCertificates: \"=vhsLearningPathCertificates\",\r\n userCertificates: \"=vhsUserCertificates\",\r\n },\r\n templateUrl: url.template(\"components/vhs-individual-learning-path-progress-certificates.html\")\r\n };\r\n}\r\nexports.VhsIndividualLearningPathProgressCertificatesDirectiveFactory = VhsIndividualLearningPathProgressCertificatesDirectiveFactory;\r\nVhsIndividualLearningPathProgressCertificatesDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../businessUnits/BusinessUnitsService\":44,\"../learningPaths/LearningPathService\":320,\"../personal/PersonalService\":377,\"../utils/AppProperties\":\"AppProperties\",\"../utils/RandomUtils\":523,\"../utils/UrlService\":528,\"./dialog/DialogService\":166,\"./models/Event\":170}],117:[function(require,module,exports){\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar VhsIndividualLearningPathProgressDetailsController = (function () {\r\n function VhsIndividualLearningPathProgressDetailsController($scope, $q, progressService, dialogService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.progressService = progressService;\r\n this.dialogService = dialogService;\r\n this.learningPathCourses = [];\r\n this.courseProgresses = [];\r\n this.courseProgressByCourseId = new Map();\r\n this.isDisableButtons = true;\r\n this.rowShow = new Map();\r\n this.$scope.vm = this;\r\n this.updateDataFromScope();\r\n this.$scope.$watchGroup([\r\n \"selectedProgressId\",\r\n \"learningPathProgresses\",\r\n \"courseProgresses\"\r\n ], (function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.updateDataFromScope();\r\n }));\r\n }\r\n VhsIndividualLearningPathProgressDetailsController.prototype.updateDataFromScope = function () {\r\n var _this = this;\r\n this.learningPath = this.$scope.learningPath;\r\n this.learningPathProgresses = this.$scope.learningPathProgresses;\r\n this.learningPathCourses = this.$scope.learningPathCourses;\r\n this.courseProgresses = this.$scope.courseProgresses;\r\n this.selectedProgressId = this.$scope.selectedProgressId;\r\n this.systemPermissions = this.$scope.systemPermissions;\r\n this.learningPathPermissions = this.$scope.learningPathPermissions;\r\n this.groupCourseProgresses();\r\n if (!this.courseProgresses) {\r\n this.isDisableButtons = true;\r\n }\r\n if (this.learningPathCourses && this.courseProgresses) {\r\n this.isDisableButtons = false;\r\n }\r\n if (this.learningPathProgresses && this.learningPathProgresses.length > 0) {\r\n this.selectedProgress = this.learningPathProgresses.filter(function (p) { return p.id === _this.selectedProgressId; }).pop();\r\n }\r\n };\r\n VhsIndividualLearningPathProgressDetailsController.prototype.groupCourseProgresses = function () {\r\n this.courseProgressByCourseId.clear();\r\n if (this.courseProgresses) {\r\n for (var _i = 0, _a = this.courseProgresses; _i < _a.length; _i++) {\r\n var courseProgress = _a[_i];\r\n this.courseProgressByCourseId.set(courseProgress.courseId, courseProgress);\r\n }\r\n }\r\n };\r\n VhsIndividualLearningPathProgressDetailsController.prototype.deactivateCourseProgress = function (courseId, courseProgressId) {\r\n var _this = this;\r\n this.isDisableButtons = true;\r\n this.dialogService.confirm(\"Do you want to deactivate user progress on this course?\", {\r\n title: \"Deactivate user progress\"\r\n }).then(function () {\r\n _this.progressService.deactivateCourseProgress(courseId, courseProgressId)\r\n .then(function () {\r\n _this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_RELOAD_PROGRESS);\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.commonError(response);\r\n })\r\n .finally(function () {\r\n _this.isDisableButtons = false;\r\n });\r\n }, function () {\r\n _this.isDisableButtons = false;\r\n });\r\n };\r\n VhsIndividualLearningPathProgressDetailsController.prototype.completeCourseProgress = function (courseId, courseProgressId) {\r\n var _this = this;\r\n this.isDisableButtons = true;\r\n this.dialogService.confirm(\"Do you want to complete user progress on this course?\", {\r\n title: \"Complete user progress\"\r\n }).then(function () {\r\n _this.progressService.completeCourseProgress(courseId, courseProgressId)\r\n .then(function () {\r\n _this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_RELOAD_PROGRESS);\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.commonError(response);\r\n })\r\n .finally(function () {\r\n _this.isDisableButtons = false;\r\n });\r\n }, function () {\r\n _this.isDisableButtons = false;\r\n });\r\n };\r\n VhsIndividualLearningPathProgressDetailsController.prototype.showCourseProgressDetails = function (courseId, courseProgressId) {\r\n var args = {\r\n courseId: courseId,\r\n courseProgressId: courseProgressId\r\n };\r\n this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_SHOW_COURSE_PROGRESS_DETAILS, args);\r\n };\r\n VhsIndividualLearningPathProgressDetailsController.prototype.showDetails = function (index, keyCode) {\r\n if ((this.courseProgressByCourseId.get(index).active\r\n || (this.courseProgressByCourseId.get(index).active && this.courseProgressByCourseId.get(index).status != 'COMPLETED'))\r\n && (keyCode == 13 || !keyCode)) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n VhsIndividualLearningPathProgressDetailsController.prototype.decodeType = function (type) {\r\n var result = type;\r\n switch (type) {\r\n case \"Mandatory\": {\r\n result = \"Mandatory\";\r\n break;\r\n }\r\n case \"Elective\": {\r\n result = \"Elective\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n VhsIndividualLearningPathProgressDetailsController.$inject = [\r\n \"$scope\",\r\n \"$q\",\r\n ProgressService_1.ProgressService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return VhsIndividualLearningPathProgressDetailsController;\r\n})();\r\nexports.VhsIndividualLearningPathProgressDetailsController = VhsIndividualLearningPathProgressDetailsController;\r\nfunction VhsIndividualLearningPathProgressDetailsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsIndividualLearningPathProgressDetailsController,\r\n scope: {\r\n learningPath: \"=vhsLearningPath\",\r\n learningPathProgresses: \"=vhsLearningPathProgresses\",\r\n learningPathCourses: \"=vhsLearningPathCourses\",\r\n courseProgresses: \"=vhsCourseProgresses\",\r\n selectedProgressId: \"=vhsSelectedProgressId\",\r\n systemPermissions: \"=vhsSystemPermissions\",\r\n learningPathPermissions: \"=vhsLearningPathPermissions\"\r\n },\r\n templateUrl: url.template(\"components/vhs-individual-learning-path-progress-details.html\")\r\n };\r\n}\r\nexports.VhsIndividualLearningPathProgressDetailsDirectiveFactory = VhsIndividualLearningPathProgressDetailsDirectiveFactory;\r\nVhsIndividualLearningPathProgressDetailsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../courses/ProgressService\":219,\"../utils/UrlService\":528,\"./dialog/DialogService\":166,\"./models/Event\":170}],118:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar LearningPathProgressService_1 = require(\"../learningPaths/LearningPathProgressService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar VhsIndividualLearningPathProgressController = (function () {\r\n function VhsIndividualLearningPathProgressController($scope, dialogService, learningPathProgressService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.dialogService = dialogService;\r\n this.learningPathProgressService = learningPathProgressService;\r\n this.isInitialized = false;\r\n $scope.vm = this;\r\n this.viewType = \"progressDetails\";\r\n this.updateDataFromScope();\r\n this.isInitialized = true;\r\n this.$scope.$watchGroup([\r\n \"learningPath\",\r\n \"learningPathCourses\",\r\n \"userProgresses\",\r\n \"selectedProgressId\",\r\n \"courseProgresses\",\r\n \"participationForm\",\r\n \"currentUser\",\r\n \"userCertificates\"\r\n ], (function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.updateDataFromScope();\r\n }));\r\n }\r\n VhsIndividualLearningPathProgressController.prototype.updateDataFromScope = function () {\r\n var _this = this;\r\n this.learningPath = this.$scope.learningPath;\r\n this.learningPathCourses = this.$scope.learningPathCourses;\r\n this.userProgresses = this.$scope.userProgresses;\r\n this.selectedProgressId = this.$scope.selectedProgressId;\r\n this.courseProgresses = this.$scope.courseProgresses;\r\n this.systemPermissions = this.$scope.systemPermissions;\r\n this.currentUser = this.$scope.currentUser;\r\n this.participationForm = this.$scope.participationForm;\r\n this.participationFormFields = this.$scope.participationFormFields;\r\n this.learningPathCertificates = this.$scope.learningPathCertificates;\r\n this.userCertificates = this.$scope.userCertificates;\r\n if (this.userProgresses && this.userProgresses.length) {\r\n this.selectedProgress = this.userProgresses.filter(function (p) { return p.id === _this.selectedProgressId; }).pop();\r\n }\r\n };\r\n VhsIndividualLearningPathProgressController.prototype.onSelectedProgressChange = function () {\r\n this.courseProgresses = null;\r\n this.userCertificates = null;\r\n this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_CHANGE_PROGRESS_EXTERNALLY, { selectedProgressId: this.selectedProgressId });\r\n };\r\n VhsIndividualLearningPathProgressController.prototype.showTab = function (tabName) {\r\n this.viewType = tabName;\r\n };\r\n VhsIndividualLearningPathProgressController.prototype.getSelectedProgressStatus = function () {\r\n return this.selectedProgress ? this.selectedProgress.status : \"\";\r\n };\r\n VhsIndividualLearningPathProgressController.prototype.deactivateLearningPathProgress = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Do you want to deactivate user progress on this learning path?\", {\r\n title: \"Deactivate user progress?\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n _this.learningPathProgressService.deactivateLearningPathProgress(_this.learningPath.id, _this.selectedProgress.id)\r\n .then(function () {\r\n _this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_RESET_PROGRESS);\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.commonError(response);\r\n });\r\n });\r\n };\r\n VhsIndividualLearningPathProgressController.$inject = [\r\n \"$scope\",\r\n DialogService_1.DialogService.NAME,\r\n LearningPathProgressService_1.LearningPathProgressService.NAME\r\n ];\r\n return VhsIndividualLearningPathProgressController;\r\n})();\r\nexports.VhsIndividualLearningPathProgressController = VhsIndividualLearningPathProgressController;\r\nfunction VhsIndividualLearningPathProgressDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsIndividualLearningPathProgressController,\r\n scope: {\r\n learningPath: \"=vhsLearningPath\",\r\n learningPathCourses: \"=vhsLearningPathCourses\",\r\n userProgresses: \"=vhsUserProgresses\",\r\n selectedProgressId: \"=vhsSelectedProgressId\",\r\n courseProgresses: \"=vhsCourseProgresses\",\r\n systemPermissions: \"=vhsSystemPermissions\",\r\n participationForm: \"=vhsParticipationForm\",\r\n participationFormFields: \"=vhsParticipationFormFields\",\r\n currentUser: \"=vhsCurrentUser\",\r\n learningPathCertificates: \"=vhsLearningPathCertificates\",\r\n userCertificates: \"=vhsUserCertificates\"\r\n },\r\n templateUrl: url.template(\"components/vhs-individual-learning-path-progress.html\")\r\n };\r\n}\r\nexports.VhsIndividualLearningPathProgressDirectiveFactory = VhsIndividualLearningPathProgressDirectiveFactory;\r\nVhsIndividualLearningPathProgressDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../learningPaths/LearningPathProgressService\":318,\"../utils/UrlService\":528,\"./dialog/DialogService\":166,\"./models/Event\":170}],119:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar VhsIndividualParticipationInfoController = (function () {\r\n function VhsIndividualParticipationInfoController($scope, $window, courseService, progressService, permissionsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.courseService = courseService;\r\n this.progressService = progressService;\r\n this.permissionsService = permissionsService;\r\n this.isEditing = false;\r\n this.controlButtonsDisabled = false;\r\n this.editingParticipationFormData = {};\r\n $scope.vm = this;\r\n this.updateDataFromScope();\r\n this.$scope.$watch(\"participationForm\", (function (newValue, oldValue) {\r\n if (newValue == oldValue) {\r\n return;\r\n }\r\n _this.updateDataFromScope();\r\n }));\r\n }\r\n VhsIndividualParticipationInfoController.prototype.updateDataFromScope = function () {\r\n this.courseId = this.$scope.courseId;\r\n this.courseProgresses = this.$scope.courseProgresses;\r\n this.selectedProgressId = this.$scope.selectedProgressId;\r\n this.coursePermissions = this.$scope.coursePermissions;\r\n this.systemPermissions = this.$scope.systemPermissions;\r\n this.participationForm = this.$scope.participationForm;\r\n this.participationFormFields = this.$scope.participationFormFields;\r\n };\r\n VhsIndividualParticipationInfoController.prototype.isEmptyForm = function () {\r\n return this.participationForm !== null && this.participationForm !== undefined && Object.keys(this.participationForm).length === 0;\r\n };\r\n VhsIndividualParticipationInfoController.prototype.getKeyNameByKey = function (key) {\r\n var keyName = key;\r\n if (this.participationFormFields && this.participationFormFields.length) {\r\n var field = this.participationFormFields.filter(function (f) { return f.fieldKey === key; }).pop();\r\n keyName = field ? field.name : key;\r\n }\r\n return keyName;\r\n };\r\n VhsIndividualParticipationInfoController.prototype.startParticipationFormEditing = function () {\r\n var _this = this;\r\n this.participationFormFields.forEach(function (field) {\r\n _this.editingParticipationFormData[field.fieldKey] = _this.participationForm[field.fieldKey];\r\n });\r\n Object.keys(this.participationForm).forEach(function (key) {\r\n if (_this.participationFormFields.filter(function (f) { return f.fieldKey === key; }).length == 0) {\r\n _this.editingParticipationFormData[key] = _this.participationForm[key];\r\n }\r\n });\r\n this.isEditing = true;\r\n };\r\n VhsIndividualParticipationInfoController.prototype.cancelParticipationFormEditing = function () {\r\n this.editingParticipationFormData = {};\r\n this.isEditing = false;\r\n };\r\n VhsIndividualParticipationInfoController.prototype.submitParticipationFormEditing = function () {\r\n var _this = this;\r\n this.controlButtonsDisabled = true;\r\n this.progressService.setParticipationFormData(this.courseId, this.selectedProgressId, this.editingParticipationFormData)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Participation Form data have been successfully updated\");\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_RELOAD_PROGRESS);\r\n _this.editingParticipationFormData = {};\r\n _this.isEditing = false;\r\n })\r\n .finally(function () {\r\n _this.controlButtonsDisabled = false;\r\n });\r\n };\r\n VhsIndividualParticipationInfoController.$inject = [\r\n \"$scope\",\r\n \"$window\",\r\n CourseService_1.CourseService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n ];\r\n return VhsIndividualParticipationInfoController;\r\n})();\r\nexports.VhsIndividualParticipationInfoController = VhsIndividualParticipationInfoController;\r\nfunction VhsIndividualParticipationInfoDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsIndividualParticipationInfoController,\r\n scope: {\r\n courseId: \"=\",\r\n courseProgresses: \"=\",\r\n selectedProgressId: \"=\",\r\n participationForm: \"=\",\r\n participationFormFields: \"=\",\r\n coursePermissions: \"=\",\r\n systemPermissions: \"=\",\r\n },\r\n templateUrl: url.template(\"components/vhs-individual-participation-info.html\")\r\n };\r\n}\r\nexports.VhsIndividualParticipationInfoDirectiveFactory = VhsIndividualParticipationInfoDirectiveFactory;\r\nVhsIndividualParticipationInfoDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../courses/CourseService\":211,\"../courses/ProgressService\":219,\"../security/PermissionsService\":418,\"../utils/UrlService\":528,\"./models/Event\":170}],120:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar CommonService_1 = require(\"../common/CommonService\");\r\nvar LearningPathService_1 = require(\"../learningPaths/LearningPathService\");\r\nvar LearningPathProgressService_1 = require(\"../learningPaths/LearningPathProgressService\");\r\nvar VhsLearningPathControlsController = (function () {\r\n function VhsLearningPathControlsController($scope, $q, $location, learningPathsRouter, commonService, learningPathService, learningPathProgressService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.$location = $location;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.commonService = commonService;\r\n this.learningPathService = learningPathService;\r\n this.learningPathProgressService = learningPathProgressService;\r\n this.isLearningPathLoaded = false;\r\n $scope.vm = this;\r\n if ($scope.isParticipationFormSpecified == null) {\r\n this.commonService.getParticipationFormSpecified(this.$scope.learningPathId, 'LEARNING_PATH')\r\n .then(function (result) {\r\n _this.$scope.isParticipationFormSpecified = (result === true);\r\n });\r\n }\r\n var loadLearningPathPromises = [];\r\n if ($scope.learningPath == null) {\r\n loadLearningPathPromises.push(this.loadLearningPath());\r\n }\r\n if ($scope.learningPathProgress == null) {\r\n loadLearningPathPromises.push(this.loadLearningPathProgress());\r\n }\r\n if ($scope.isParticipationFormSpecified == null) {\r\n loadLearningPathPromises.push(this.commonService.getParticipationFormSpecified(this.$scope.learningPathId, 'LEARNING_PATH')\r\n .then(function (result) {\r\n _this.$scope.isParticipationFormSpecified = (result === true);\r\n }));\r\n }\r\n $q.all(loadLearningPathPromises)\r\n .then(function () {\r\n _this.isLearningPathLoaded = true;\r\n });\r\n }\r\n VhsLearningPathControlsController.prototype.loadLearningPath = function () {\r\n var _this = this;\r\n return this.learningPathService.get(this.$scope.learningPathId)\r\n .then(function (learningPath) {\r\n _this.$scope.learningPath = angular.copy(learningPath);\r\n return _this.$scope.learningPath;\r\n });\r\n };\r\n VhsLearningPathControlsController.prototype.loadLearningPathProgress = function () {\r\n var _this = this;\r\n return this.learningPathProgressService.getLearningPathProgress(this.$scope.learningPathId)\r\n .then(function (learningPathProgress) {\r\n _this.$scope.learningPathProgress = angular.copy(learningPathProgress);\r\n return _this.$scope.learningPathProgress;\r\n });\r\n };\r\n VhsLearningPathControlsController.prototype.detailsUrl = function () {\r\n return this.learningPathsRouter.detailsUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathControlsController.prototype.fillParticipationFormUrl = function () {\r\n return this.learningPathsRouter.participationFormFillUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathControlsController.prototype.progressUrl = function () {\r\n return this.learningPathsRouter.progressUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathControlsController.prototype.editLearningPathUrl = function () {\r\n return this.learningPathsRouter.updateUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathControlsController.prototype.editParticipationFormUrl = function () {\r\n return this.learningPathsRouter.participationFormUpdateUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathControlsController.prototype.attendeeManagementUrl = function () {\r\n return this.learningPathsRouter.permissionsDelegationUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathControlsController.$inject = [\r\n \"$scope\",\r\n \"$q\",\r\n \"$location\",\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n CommonService_1.CommonService.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n LearningPathProgressService_1.LearningPathProgressService.NAME\r\n ];\r\n return VhsLearningPathControlsController;\r\n})();\r\nexports.VhsLearningPathControlsController = VhsLearningPathControlsController;\r\nfunction VhsLearningPathControlsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsLearningPathControlsController,\r\n scope: {\r\n learningPathId: \"=vhsLearningPathId\",\r\n learningPath: \"=?vhsLearningPath\",\r\n learningPathProgress: \"=?vhsLearningPathProgress\",\r\n isParticipationFormSpecified: \"=?vhsParticipationFormSpecified\"\r\n },\r\n templateUrl: url.template(\"components/vhs-learning-path-controls.html\")\r\n };\r\n}\r\nexports.VhsLearningPathControlsDirectiveFactory = VhsLearningPathControlsDirectiveFactory;\r\nVhsLearningPathControlsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../common/CommonService\":53,\"../learningPaths/LearningPathProgressService\":318,\"../learningPaths/LearningPathService\":320,\"../urls/LearningPathsRouter\":477,\"../utils/UrlService\":528}],121:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar LearningPathCourseInclusionType_1 = require(\"../learningPaths/models/LearningPathCourseInclusionType\");\r\nvar VhsLearningPathCoursesListController = (function () {\r\n function VhsLearningPathCoursesListController($scope, $location, coursesRouter) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.coursesRouter = coursesRouter;\r\n $scope.vm = this;\r\n $scope.learningPathCourses.forEach(function (c) { return c.courseInclusionTypeName = _this.decodeType(c.courseInclusionType); });\r\n }\r\n VhsLearningPathCoursesListController.prototype.moveCourseUp = function (index) {\r\n if (index <= 0 || index >= this.$scope.learningPathCourses.length) {\r\n return;\r\n }\r\n var tmp = this.$scope.learningPathCourses[index - 1];\r\n this.$scope.learningPathCourses[index - 1] = this.$scope.learningPathCourses[index];\r\n this.$scope.learningPathCourses[index] = tmp;\r\n };\r\n VhsLearningPathCoursesListController.prototype.moveCourseDown = function (index) {\r\n if (index < 0 || index >= this.$scope.learningPathCourses.length - 1) {\r\n return;\r\n }\r\n var tmp = this.$scope.learningPathCourses[index + 1];\r\n this.$scope.learningPathCourses[index + 1] = this.$scope.learningPathCourses[index];\r\n this.$scope.learningPathCourses[index] = tmp;\r\n };\r\n VhsLearningPathCoursesListController.prototype.removeCourse = function (index) {\r\n if (this.$scope.onRemoveCourse) {\r\n this.$scope.onRemoveCourse(this.$scope.learningPathCourses[index]);\r\n }\r\n this.$scope.learningPathCourses.splice(index, 1);\r\n };\r\n VhsLearningPathCoursesListController.prototype.changeCourseInclusionType = function (course) {\r\n if (course.courseInclusionType == LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.MANDATORY]) {\r\n course.courseInclusionType = LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.ELECTIVE];\r\n }\r\n else {\r\n course.courseInclusionType = LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.MANDATORY];\r\n }\r\n course.courseInclusionTypeName = this.decodeType(course.courseInclusionType);\r\n this.$scope.$emit('changeCourseInclusionType');\r\n };\r\n VhsLearningPathCoursesListController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n VhsLearningPathCoursesListController.prototype.decodeType = function (type) {\r\n var result = type;\r\n switch (type.toLowerCase()) {\r\n case \"mandatory\": {\r\n result = \"Mandatory\";\r\n break;\r\n }\r\n case \"elective\": {\r\n result = \"Elective\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n VhsLearningPathCoursesListController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return VhsLearningPathCoursesListController;\r\n})();\r\nexports.VhsLearningPathCoursesListController = VhsLearningPathCoursesListController;\r\nfunction VhsLearningPathCoursesListDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsLearningPathCoursesListController,\r\n scope: {\r\n learningPath: \"=\",\r\n learningPathCourses: \"=\",\r\n onRemoveCourse: \"=?\"\r\n },\r\n templateUrl: url.template(\"components/vhs-learning-path-courses-list.html\")\r\n };\r\n}\r\nexports.VhsLearningPathCoursesListDirectiveFactory = VhsLearningPathCoursesListDirectiveFactory;\r\nVhsLearningPathCoursesListDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../learningPaths/models/LearningPathCourseInclusionType\":324,\"../urls/CoursesRouter\":468,\"../utils/UrlService\":528}],122:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar VhsLearningPathEditTopTabsController = (function () {\r\n function VhsLearningPathEditTopTabsController($scope, learningPathsRouter) {\r\n this.$scope = $scope;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.ABOUT_TAB_KEY = \"about\";\r\n this.RELATED_PRODUCTS_TAB_KEY = \"relatedProducts\";\r\n this.PERMISSIONS_TAB_KEY = \"permissions\";\r\n this.GAMIFICATION_TAB_KEY = \"gamification\";\r\n $scope.vm = this;\r\n }\r\n VhsLearningPathEditTopTabsController.prototype.init = function ($scope, element) {\r\n };\r\n VhsLearningPathEditTopTabsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.$scope.topMenuKey == topMenuKey;\r\n };\r\n VhsLearningPathEditTopTabsController.$inject = [\r\n \"$scope\",\r\n LearningPathsRouter_1.LearningPathsRouter.NAME\r\n ];\r\n return VhsLearningPathEditTopTabsController;\r\n})();\r\nexports.VhsLearningPathEditTopTabsController = VhsLearningPathEditTopTabsController;\r\nfunction VhsLearningPathEditTopTabsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsLearningPathEditTopTabsController,\r\n scope: {\r\n learningPathId: \"=vhsLearningPathId\",\r\n topMenuKey: \"=vhsTopMenuKey\"\r\n },\r\n templateUrl: url.template(\"components/vhs-learning-path-edit-top-tabs.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsLearningPathEditTopTabsDirectiveFactory = VhsLearningPathEditTopTabsDirectiveFactory;\r\nVhsLearningPathEditTopTabsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../urls/LearningPathsRouter\":477,\"../utils/UrlService\":528}],123:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar LearningPathCourseInclusionType_1 = require(\"../learningPaths/models/LearningPathCourseInclusionType\");\r\nvar CourseProgressStatus_1 = require(\"../courses/models/CourseProgressStatus\");\r\nvar VhsLearningPathOverallProgressController = (function () {\r\n function VhsLearningPathOverallProgressController($scope) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.percentOfCompletedMandatoryCourses = 0;\r\n this.percentOfCompletedElectiveCourses = 0;\r\n this.countOfMandatoryCourses = 0;\r\n this.countOfElectiveCourses = 0;\r\n this.requiredElectiveCoursesNumber = 0;\r\n this.countOfMandatoryCoursesCompleted = 0;\r\n this.countOfElectiveCoursesCompleted = 0;\r\n this.mandatoryCoursesNames = [];\r\n this.electiveCoursesNames = [];\r\n this.$scope.vm = this;\r\n this.learningPath = this.$scope.learningPath;\r\n this.learningPathCourses = this.$scope.learningPathCourses;\r\n this.courseProgresses = this.$scope.courseProgresses;\r\n this.recalculateStatistics();\r\n this.$scope.$watchCollection(\"courseProgresses\", (function (newValue, oldValue) {\r\n if (newValue == oldValue) {\r\n return;\r\n }\r\n _this.courseProgresses = _this.$scope.courseProgresses;\r\n if (_this.courseProgresses) {\r\n _this.recalculateStatistics();\r\n }\r\n }));\r\n }\r\n VhsLearningPathOverallProgressController.prototype.recalculateStatistics = function () {\r\n this.countOfMandatoryCourses = 0;\r\n this.countOfElectiveCourses = 0;\r\n this.countOfMandatoryCoursesCompleted = 0;\r\n this.countOfElectiveCoursesCompleted = 0;\r\n this.requiredElectiveCoursesNumber = this.learningPath.numberOfElectiveCoursesToBeCompleted;\r\n this.mandatoryCoursesNames = [];\r\n this.electiveCoursesNames = [];\r\n for (var _i = 0, _a = this.learningPathCourses; _i < _a.length; _i++) {\r\n var course = _a[_i];\r\n var courseProgress = null;\r\n for (var _b = 0, _c = this.courseProgresses; _b < _c.length; _b++) {\r\n var progress = _c[_b];\r\n if (progress.courseId == course.id) {\r\n courseProgress = progress;\r\n break;\r\n }\r\n }\r\n if (course.courseInclusionType == LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.MANDATORY]) {\r\n this.mandatoryCoursesNames.push(course.topic);\r\n this.countOfMandatoryCourses += 1;\r\n if (courseProgress != null && courseProgress.status == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n this.countOfMandatoryCoursesCompleted += 1;\r\n }\r\n }\r\n else if (course.courseInclusionType == LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.ELECTIVE]) {\r\n this.electiveCoursesNames.push(course.topic);\r\n this.countOfElectiveCourses += 1;\r\n if (courseProgress != null && courseProgress.status == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n this.countOfElectiveCoursesCompleted += 1;\r\n }\r\n }\r\n }\r\n this.percentOfCompletedMandatoryCourses = (this.countOfMandatoryCourses > 0)\r\n ? Math.round(this.countOfMandatoryCoursesCompleted / this.countOfMandatoryCourses * 100) : 0;\r\n this.percentOfCompletedElectiveCourses = (this.countOfElectiveCourses > 0)\r\n ? Math.round(this.countOfElectiveCoursesCompleted / this.countOfElectiveCourses * 100) : 0;\r\n };\r\n VhsLearningPathOverallProgressController.$inject = [\r\n \"$scope\"\r\n ];\r\n return VhsLearningPathOverallProgressController;\r\n})();\r\nexports.VhsLearningPathOverallProgressController = VhsLearningPathOverallProgressController;\r\nfunction VhsLearningPathOverallProgressDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsLearningPathOverallProgressController,\r\n scope: {\r\n learningPath: \"=vhsLearningPath\",\r\n learningPathCourses: \"=vhsLearningPathCourses\",\r\n courseProgresses: \"=vhsCourseProgresses\"\r\n },\r\n templateUrl: url.template(\"components/vhs-learning-path-overall-progress.html\")\r\n };\r\n}\r\nexports.VhsLearningPathOverallProgressDirectiveFactory = VhsLearningPathOverallProgressDirectiveFactory;\r\nVhsLearningPathOverallProgressDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../courses/models/CourseProgressStatus\":222,\"../learningPaths/models/LearningPathCourseInclusionType\":324,\"../utils/UrlService\":528}],124:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar LearningPathProgressService_1 = require(\"../learningPaths/LearningPathProgressService\");\r\nvar LearningPathService_1 = require(\"../learningPaths/LearningPathService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar CommonService_1 = require(\"../common/CommonService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar PurchaseService_1 = require(\"../finances/PurchaseService\");\r\nvar VhsLearningPathTopTabsController = (function () {\r\n function VhsLearningPathTopTabsController($scope, $q, $location, authManager, authService, securityService, learningPathsRouter, learningPathService, learningPathProgressService, commonService, brandingService, dialogService, purchaseService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.$location = $location;\r\n this.authManager = authManager;\r\n this.authService = authService;\r\n this.securityService = securityService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.learningPathService = learningPathService;\r\n this.learningPathProgressService = learningPathProgressService;\r\n this.commonService = commonService;\r\n this.brandingService = brandingService;\r\n this.dialogService = dialogService;\r\n this.purchaseService = purchaseService;\r\n this.LEARNING_PATH_DETAILS_TOP_MENU_ITEM = \"LEARNING_PATH_DETAILS\";\r\n this.FILL_PARTICIPATION_FORM_TOP_MENU_ITEM = \"FILL_PARTICIPATION_FORM\";\r\n this.LEARNING_PATH_PROGRESS_TOP_MENU_ITEM = \"LEARNING_PATH_PROGRESS\";\r\n this.EDIT_PARTICIPATION_FORM_TOP_MENU_ITEM = \"EDIT_PARTICIPATION_FORM\";\r\n this.EDIT_LEARNING_PATH_TOP_MENU_ITEM = \"EDIT_LEARNING_PATH\";\r\n this.ATTENDEE_MANAGEMENT_TOP_MENU_ITEM = \"ATTENDEE_MANAGEMENT\";\r\n this.isLearningPathLoaded = false;\r\n this.isLearningPathInUse = false;\r\n this.isLearningPathChanged = false;\r\n $scope.vm = this;\r\n $scope.showUserProgress = $scope.showUserProgress || false;\r\n $scope.showViewTypeControls = $scope.showViewTypeControls || false;\r\n if (this.$scope.learningPathId) {\r\n var learningPathIdStr = String(this.$scope.learningPathId);\r\n this.securityService\r\n .demandLearningPathPermissions(learningPathIdStr, function (learningPathPermissions) { return learningPathPermissions.view; });\r\n var loadLearningPathPromises = [];\r\n if ($scope.learningPath == null || $scope.learningPath == undefined) {\r\n loadLearningPathPromises.push(this.loadLearningPath());\r\n }\r\n if ($scope.learningPathProgress == null || $scope.learningPathProgress == undefined) {\r\n loadLearningPathPromises.push(this.loadLearningPathProgress());\r\n }\r\n if ($scope.isParticipationFormSpecified == null || $scope.isParticipationFormSpecified == undefined) {\r\n loadLearningPathPromises.push(this.commonService.getParticipationFormSpecified(this.$scope.learningPathId, 'LEARNING_PATH')\r\n .then(function (result) {\r\n _this.$scope.isParticipationFormSpecified = (result === true);\r\n }));\r\n }\r\n $q.all(loadLearningPathPromises)\r\n .then(function () {\r\n _this.isLearningPathLoaded = true;\r\n });\r\n }\r\n }\r\n VhsLearningPathTopTabsController.prototype.loadLearningPath = function () {\r\n var _this = this;\r\n return this.learningPathService.get(this.$scope.learningPathId)\r\n .then(function (learningPath) {\r\n _this.$scope.learningPath = angular.copy(learningPath);\r\n return _this.$scope.learningPath;\r\n });\r\n };\r\n VhsLearningPathTopTabsController.prototype.loadLearningPathProgress = function () {\r\n var _this = this;\r\n return this.learningPathProgressService.getLearningPathProgress(this.$scope.learningPathId)\r\n .then(function (learningPathProgress) {\r\n _this.$scope.learningPathProgress = angular.copy(learningPathProgress);\r\n return _this.$scope.learningPathProgress;\r\n });\r\n };\r\n VhsLearningPathTopTabsController.prototype.getCountOfCourses = function () {\r\n var result;\r\n if (this.$scope.learningPath.numberOfElectiveCoursesToBeCompleted) {\r\n result = StringBuilder_1.StringBuilder.interpolate(\"Completed courses: :completedMandatoryCourses of :allMandatoryCourses Mandatory, :completedElectiveCourses of :numberOfElectiveCoursesToBeCompleted Elective\")\r\n .with(\":completedMandatoryCourses\", this.$scope.learningPathProgress.countOfCompletedMandatoryCourses)\r\n .with(\":allMandatoryCourses\", this.$scope.learningPathProgress.countOfMandatoryCourses)\r\n .with(\":completedElectiveCourses\", this.$scope.learningPathProgress.countOfCompletedElectiveCourses)\r\n .with(\":numberOfElectiveCoursesToBeCompleted\", this.$scope.learningPath.numberOfElectiveCoursesToBeCompleted)\r\n .build();\r\n }\r\n else {\r\n result = StringBuilder_1.StringBuilder.interpolate(\"Completed courses: :completedMandatoryCourses of :allMandatoryCourses Mandatory\")\r\n .with(\":completedMandatoryCourses\", this.$scope.learningPathProgress.countOfCompletedMandatoryCourses)\r\n .with(\":allMandatoryCourses\", this.$scope.learningPathProgress.countOfMandatoryCourses)\r\n .build();\r\n }\r\n return result;\r\n };\r\n VhsLearningPathTopTabsController.prototype.setViewType = function (viewType) {\r\n this.$scope.callbackSetViewType({ viewType: viewType });\r\n };\r\n VhsLearningPathTopTabsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.$scope.callbackIsViewTypeSelected({ viewType: viewType });\r\n };\r\n VhsLearningPathTopTabsController.prototype.isNewTopMenuActive = function () {\r\n return this.$scope.currentTopMenuItem == this.LEARNING_PATH_DETAILS_TOP_MENU_ITEM ||\r\n this.$scope.currentTopMenuItem == this.FILL_PARTICIPATION_FORM_TOP_MENU_ITEM ||\r\n this.$scope.currentTopMenuItem == this.LEARNING_PATH_PROGRESS_TOP_MENU_ITEM ||\r\n this.$scope.currentTopMenuItem == this.EDIT_PARTICIPATION_FORM_TOP_MENU_ITEM ||\r\n this.$scope.currentTopMenuItem == this.EDIT_LEARNING_PATH_TOP_MENU_ITEM ||\r\n this.$scope.currentTopMenuItem == this.ATTENDEE_MANAGEMENT_TOP_MENU_ITEM;\r\n };\r\n VhsLearningPathTopTabsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.$scope.currentTopMenuItem == topMenuKey;\r\n };\r\n VhsLearningPathTopTabsController.prototype.detailsUrl = function () {\r\n return this.learningPathsRouter.detailsUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathTopTabsController.prototype.fillParticipationFormUrl = function () {\r\n return this.learningPathsRouter.participationFormFillUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathTopTabsController.prototype.progressUrl = function () {\r\n return this.learningPathsRouter.progressUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathTopTabsController.prototype.editLearningPathUrl = function () {\r\n return this.learningPathsRouter.updateUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathTopTabsController.prototype.editParticipationFormUrl = function () {\r\n return this.learningPathsRouter.participationFormUpdateUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathTopTabsController.prototype.attendeeManagementUrl = function () {\r\n return this.learningPathsRouter.permissionsDelegationUrl(this.$scope.learningPathId);\r\n };\r\n VhsLearningPathTopTabsController.prototype.deactivateLearningPath = function () {\r\n var _this = this;\r\n this.processLearningPathInUseWarningMessageIfNeed();\r\n this.$scope.isDeactivateButtonDisabled = true;\r\n this.purchaseService.getReferencedObjectProductsList(this.$scope.learningPathId, ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LEARNING_PATH]).then(function (products) {\r\n if (products.length == 0) {\r\n _this.learningPathProgressService.getNumberOfUsersWithUncompletedProgress(_this.$scope.learningPathId)\r\n .then(function (numberOfUncompleted) {\r\n var confirmationMessage;\r\n if (numberOfUncompleted > 0) {\r\n confirmationMessage = StringBuilder_1.StringBuilder.interpolate(\"There are :numberOfUncompleted users who have started learning path and will be unable to complete it. You can check list of users on Progress tab.\")\r\n .with(\":numberOfUncompleted\", numberOfUncompleted)\r\n .build();\r\n }\r\n else {\r\n confirmationMessage = StringBuilder_1.StringBuilder.interpolate(\"This learning path will be removed from the system. Continue?\")\r\n .build();\r\n }\r\n _this.dialogService.confirm(confirmationMessage, {\r\n title: \"Remove learning path\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n }).then(function () {\r\n _this.dialogService.confirm('Do you want to remove permissions?', {\r\n title: 'Remove permissions',\r\n confirmButton: 'Yes',\r\n cancelButton: 'No'\r\n }).then(function () {\r\n _this.learningPathService.removePermissionAssignments(_this.$scope.learningPathId);\r\n _this.learningPathService.deactivateLearningPath(_this.$scope.learningPathId)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Learning path has been successfully removed\");\r\n _this.$location.url(_this.learningPathsRouter.indexUrl());\r\n })\r\n .finally(function () {\r\n _this.$scope.isDeactivateButtonDisabled = false;\r\n });\r\n }).catch(function () {\r\n _this.learningPathService.deactivateLearningPath(_this.$scope.learningPathId)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Learning path has been successfully removed\");\r\n _this.$location.url(_this.learningPathsRouter.indexUrl());\r\n }).finally(function () {\r\n _this.$scope.isDeactivateButtonDisabled = false;\r\n });\r\n });\r\n }).catch(function () {\r\n _this.$scope.isDeactivateButtonDisabled = false;\r\n });\r\n })\r\n .catch(function () {\r\n _this.$scope.isDeactivateButtonDisabled = false;\r\n });\r\n }\r\n else {\r\n var formattedFunc = function (product, index) {\r\n return \"

    \" + (index + 1) + \". \" + product.name + \". \" + (product.description == null ? \"\" : product.description) + \"

    \";\r\n };\r\n var message = StringBuilder_1.StringBuilder.interpolate(\"

    The learning path cannot be removed. It contains the following products::products

    \")\r\n .with(\":products\", _this.getItemsFormattedString(products, formattedFunc, \"\\n\"))\r\n .build();\r\n _this.dialogService.confirm(message, {\r\n title: \"Remove learning path\",\r\n hideCancelButton: true\r\n });\r\n }\r\n });\r\n };\r\n VhsLearningPathTopTabsController.prototype.getItemsFormattedString = function (items, formattedFunc, separator) {\r\n var result = \"\";\r\n items.forEach(function (item, index) {\r\n result += formattedFunc(item, index) + separator;\r\n });\r\n return result;\r\n };\r\n VhsLearningPathTopTabsController.prototype.processLearningPathInUseWarningMessageIfNeed = function () {\r\n if (this.isLearningPathInUse) {\r\n INotifier_1.notifier.warning(\"The changes can cause problems in passing the learning path by users who had already started it\");\r\n this.isLearningPathChanged = true;\r\n }\r\n };\r\n VhsLearningPathTopTabsController.$inject = [\r\n \"$scope\",\r\n \"$q\",\r\n \"$location\",\r\n AuthManager_1.AuthManager.NAME,\r\n AuthService_1.AuthService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n LearningPathProgressService_1.LearningPathProgressService.NAME,\r\n CommonService_1.CommonService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n PurchaseService_1.PurchaseService.NAME\r\n ];\r\n return VhsLearningPathTopTabsController;\r\n})();\r\nexports.VhsLearningPathTopTabsController = VhsLearningPathTopTabsController;\r\nfunction VhsLearningPathTopTabsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsLearningPathTopTabsController,\r\n scope: {\r\n learningPathId: \"=\",\r\n learningPath: \"=?\",\r\n isDeactivateButtonDisabled: \"=?\",\r\n isLearningPathInUse: \"=?\",\r\n isLearningPathChanged: \"=?\",\r\n learningPathProgress: \"=?\",\r\n isParticipationFormSpecified: \"=?vhsParticipationFormSpecified\",\r\n currentTopMenuItem: \"=\",\r\n showUserProgress: \"=?\",\r\n showViewTypeControls: \"=?\",\r\n callbackSetViewType: \"&?\",\r\n callbackIsViewTypeSelected: \"&?\",\r\n },\r\n templateUrl: url.template(\"components/vhs-learning-path-top-tabs.html\")\r\n };\r\n}\r\nexports.VhsLearningPathTopTabsDirectiveFactory = VhsLearningPathTopTabsDirectiveFactory;\r\nVhsLearningPathTopTabsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../branding/CustomBrandingService\":35,\"../common/CommonService\":53,\"../finances/PurchaseService\":237,\"../learningPaths/LearningPathProgressService\":318,\"../learningPaths/LearningPathService\":320,\"../security/SecurityService\":420,\"../urls/LearningPathsRouter\":477,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./dialog/DialogService\":166}],125:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar VhsLearningSessionsTopTabsController = (function () {\r\n function VhsLearningSessionsTopTabsController($scope, $location, coursesRouter) {\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.coursesRouter = coursesRouter;\r\n this.ILT_TAB_KEY = \"ilt\";\r\n this.WEBINARS_TAB_KEY = \"webinars\";\r\n this.isInitialized = false;\r\n $scope.vm = this;\r\n this.isInitialized = true;\r\n this.currentTopEditPage = this.getCurrentTab();\r\n }\r\n VhsLearningSessionsTopTabsController.prototype.init = function ($scope, element) {\r\n };\r\n VhsLearningSessionsTopTabsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.$scope.topMenuKey == topMenuKey;\r\n };\r\n VhsLearningSessionsTopTabsController.prototype.changeTopEditPath = function () {\r\n this.redirectToUrl(this.currentTopEditPage);\r\n };\r\n VhsLearningSessionsTopTabsController.prototype.redirectToUrl = function (url) {\r\n this.$location.url(url);\r\n };\r\n VhsLearningSessionsTopTabsController.prototype.getCurrentTab = function () {\r\n switch (this.$scope.topMenuKey) {\r\n case this.ILT_TAB_KEY:\r\n return this.coursesRouter.iltUrl(this.$scope.courseId);\r\n case this.WEBINARS_TAB_KEY:\r\n return this.coursesRouter.webinarsUrl(this.$scope.courseId);\r\n default:\r\n return this.coursesRouter.iltUrl(this.$scope.courseId);\r\n }\r\n };\r\n VhsLearningSessionsTopTabsController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return VhsLearningSessionsTopTabsController;\r\n})();\r\nexports.VhsLearningSessionsTopTabsController = VhsLearningSessionsTopTabsController;\r\nfunction VhsLearningSessionsTopTabsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsLearningSessionsTopTabsController,\r\n scope: {\r\n courseId: \"=vhsCourseId\",\r\n topMenuKey: \"=vhsTopMenuKey\"\r\n },\r\n templateUrl: url.template(\"components/vhs-learning-sessions-top-tabs.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsLearningSessionsTopTabsDirectiveFactory = VhsLearningSessionsTopTabsDirectiveFactory;\r\nVhsLearningSessionsTopTabsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../urls/CoursesRouter\":468,\"../utils/UrlService\":528}],126:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CheckpointType_1 = require(\"../materials/models/CheckpointType\");\r\nvar NoAnswerEffectType_1 = require(\"../materials/models/NoAnswerEffectType\");\r\nvar VideoPlayerLocalStorageKey_1 = require(\"../materials/models/VideoPlayerLocalStorageKey\");\r\nvar IMultimediaMaterialSettings_1 = require(\"../materials/models/IMultimediaMaterialSettings\");\r\nvar IntroService_1 = require(\"../info/IntroService\");\r\nvar NewsRouter_1 = require(\"../urls/NewsRouter\");\r\nvar VhsMaterialCheckpointsDirectiveController = (function () {\r\n function VhsMaterialCheckpointsDirectiveController($window, $scope, $location, newsRouter, introService) {\r\n var _this = this;\r\n this.$window = $window;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.newsRouter = newsRouter;\r\n this.introService = introService;\r\n this.NEWS_ID = 1020;\r\n this.checkpoint = {};\r\n this.popupOpened = false;\r\n this.saveButtonIsActive = true;\r\n this.materialSettings = new IMultimediaMaterialSettings_1.default();\r\n $scope.vm = this;\r\n if (this.$scope.material.checkpoints) {\r\n var checkpoints = JSON.parse(this.$scope.material.checkpoints);\r\n this.$scope.material.checkpointsArray = [];\r\n checkpoints.forEach(function (ch) { return _this.$scope.material.checkpointsArray.push(ch); });\r\n }\r\n this.$scope.$on(\"setNewMultimediaSource\", function (evt, materialSettings) {\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.MATERIAL_KEY, materialSettings.materialId);\r\n });\r\n this.materialSettings.materialId = this.$scope.material.id ? this.$scope.material.id.toString() : null;\r\n this.materialSettings.$scope = this.$scope;\r\n localStorage.removeItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.MATERIAL_KEY);\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SOURCE_KEY, this.$scope.material.downloadUrl);\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.POSTER_URL_KEY, this.$scope.material.previewUrl);\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.TIMESTAMP_KEY, '0');\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.CONFIGURATION_KEY, '{\"canShowForwardRewindButtons\":true, \"autoplay\": false}');\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.CHECKPOINTS_KEY, '{}');\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SUBTITLES_TRACKS, \"\");\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SUBTITLES_CURRENT_TRACK, \"\");\r\n }\r\n VhsMaterialCheckpointsDirectiveController.prototype.initCheckpointData = function (checkpoint) {\r\n this.checkpoint.type = CheckpointType_1.CheckpointType.BUTTON;\r\n this.checkpoint.typeName = CheckpointType_1.CheckpointType[0].toLowerCase();\r\n this.checkpoint.time = 0;\r\n if (this.$scope.material.checkpointsArray && this.$scope.material.checkpointsArray.length > 0) {\r\n this.checkpoint.time = this.$scope.material.checkpointsArray[this.$scope.material.checkpointsArray.length - 1].time;\r\n this.changeTimeOfCheckpoint();\r\n }\r\n this.checkpoint.timeString = this.timeToString(this.checkpoint.time);\r\n this.checkpoint.timeToAnswer = 30;\r\n this.checkpoint.timeToAnswerString = this.timeToString(this.checkpoint.timeToAnswer);\r\n this.checkpoint.buttonText = 'Continue';\r\n this.checkpoint.answers = Array({ text: 'yes', isCorrect: true }, { text: 'no', isCorrect: false });\r\n this.checkpoint.noAnswerEffect = NoAnswerEffectType_1.NoAnswerEffectType.JUMP_TO_TIME;\r\n this.checkpoint.timeToJumpIfUserDoesNotAnswer = 0;\r\n this.checkpoint.timeToJumpIfUserDoesNotAnswerString = this.timeToString(this.checkpoint.timeToJumpIfUserDoesNotAnswer);\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.addNewCheckpoint = function () {\r\n this.checkpoint = {};\r\n this.checkpointIndex = null;\r\n this.initCheckpointData(this.checkpoint);\r\n this.openPopup();\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.validationBeforeSave = function () {\r\n if (this.checkpoint.type === CheckpointType_1.CheckpointType.BUTTON) {\r\n this.checkpoint.answers = null;\r\n }\r\n else {\r\n this.checkpoint.buttonText = 'Continue';\r\n }\r\n if (this.checkpoint.noAnswerEffect === NoAnswerEffectType_1.NoAnswerEffectType.JUMP_TO_TIME) {\r\n this.checkpoint.urlToRedirectIfUserDoesNotAnswer = null;\r\n }\r\n else {\r\n this.checkpoint.timeToJumpIfUserDoesNotAnswer = null;\r\n }\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.saveCheckpoint = function () {\r\n if (!this.$scope.material.checkpointsArray) {\r\n this.$scope.material.checkpointsArray = new Array();\r\n }\r\n this.validationBeforeSave();\r\n if (this.$scope.material.checkpointsArray && this.$scope.material.checkpointsArray.length === 0) {\r\n this.$scope.material.isRewindAllowed = false;\r\n }\r\n if (this.checkpointIndex != null && this.checkpointIndex != undefined) {\r\n this.$scope.material.checkpointsArray[this.checkpointIndex] = this.checkpoint;\r\n }\r\n else {\r\n this.$scope.material.checkpointsArray.push(this.checkpoint);\r\n }\r\n var checkpointsArray = this.$scope.material.checkpointsArray;\r\n this.$scope.material.checkpointsArray = checkpointsArray.sort(function (a, b) { return (a.time - b.time); });\r\n this.closePopup();\r\n this.$scope.material.checkpointsArray.forEach(function (ch) { return delete ch[\"hashKey\"]; });\r\n this.$scope.material.checkpoints = JSON.stringify(this.$scope.material.checkpointsArray);\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.deleteCheckpoint = function (checkpoint) {\r\n var idx = this.$scope.material.checkpointsArray.indexOf(checkpoint);\r\n if (idx > -1) {\r\n this.$scope.material.checkpointsArray.splice(idx, 1);\r\n }\r\n this.$scope.material.checkpointsArray.forEach(function (ch) { return delete ch[\"hashKey\"]; });\r\n this.$scope.material.checkpoints = JSON.stringify(this.$scope.material.checkpointsArray);\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.editCheckpoint = function (checkpoint, index) {\r\n this.checkpoint = angular.copy(checkpoint);\r\n this.checkpointIndex = index;\r\n this.changeTimeOfCheckpoint();\r\n this.openPopup();\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.addNewAnswer = function () {\r\n if (!this.checkpoint.answers) {\r\n this.checkpoint.answers = new Array();\r\n }\r\n this.checkpoint.answers.push({});\r\n if (this.checkpoint.answers && this.checkpoint.answers.filter(function (ch) { return ch.isCorrect; }).length == 0) {\r\n this.checkpoint.answers[0].isCorrect = true;\r\n }\r\n this.checkSaveButtonState();\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.setCorrectAnswer = function (answer) {\r\n this.checkpoint.answers.filter(function (a) { return a.isCorrect; }).forEach(function (a) { return a.isCorrect = false; });\r\n answer.isCorrect = true;\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.removeAnswer = function (answer) {\r\n this.checkpoint.answers.splice(this.checkpoint.answers.indexOf(answer), 1);\r\n if (answer.isCorrect && this.checkpoint.answers && this.checkpoint.answers.length > 0) {\r\n this.checkpoint.answers[0].isCorrect = true;\r\n }\r\n this.checkSaveButtonState();\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.setCheckpointType = function (type) {\r\n this.checkpoint.type = type;\r\n this.checkpoint.typeName = CheckpointType_1.CheckpointType[type].toLowerCase();\r\n this.checkSaveButtonState();\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.updateTime = function () {\r\n var timestamp = localStorage.getItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.TIMESTAMP_KEY);\r\n if (timestamp && timestamp.length > 0) {\r\n this.checkpoint.time = parseInt(timestamp);\r\n this.checkpoint.timeString = this.timeToString(this.checkpoint.time);\r\n }\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.changeTimeOfCheckpoint = function () {\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.TIMESTAMP_KEY, this.checkpoint.time.toString());\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.timeToString = function (seconds) {\r\n var result = {\r\n hours: 0,\r\n minutes: 0,\r\n seconds: 0\r\n };\r\n result.hours = Math.floor(seconds / 3600);\r\n seconds = seconds - result.hours * 3600;\r\n result.minutes = Math.floor(seconds / 60);\r\n seconds = seconds - result.minutes * 60;\r\n result.seconds = seconds;\r\n var str = '';\r\n str = (\"0\" + result.hours).slice(-2) + \":\" + (\"0\" + result.minutes).slice(-2) + \":\" + (\"0\" + result.seconds).slice(-2);\r\n return str;\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.timeFromString = function (stringTime) {\r\n var seconds = 0;\r\n var parsedTime = stringTime.split(':');\r\n seconds += 3600 * parseInt(parsedTime[0]);\r\n seconds += 60 * parseInt(parsedTime[1]);\r\n seconds += parseInt(parsedTime[2]);\r\n return seconds;\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.changeTimeStringField = function () {\r\n if (!document.forms['checkpoint_form'].timeField.$error && this.checkpoint.timeString && this.checkpoint.timeString.length > 0) {\r\n var seconds = this.timeFromString(this.checkpoint.timeString);\r\n this.checkpoint.time = seconds < 0 ? 0 :\r\n seconds > this.$scope.material.duration ? this.$scope.material.duration :\r\n seconds;\r\n this.checkpoint.timeString = this.timeToString(this.checkpoint.time);\r\n this.changeTimeToJump();\r\n }\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.changeTimeToJump = function () {\r\n if (!document.forms['checkpoint_form'].timeToJumpField.$error\r\n && this.checkpoint.timeToJumpIfUserDoesNotAnswerString\r\n && this.checkpoint.timeToJumpIfUserDoesNotAnswerString.length > 0) {\r\n var seconds = this.timeFromString(this.checkpoint.timeToJumpIfUserDoesNotAnswerString);\r\n this.checkpoint.timeToJumpIfUserDoesNotAnswer = this.checkpoint.time - seconds < 0 ? this.checkpoint.time : seconds;\r\n this.checkpoint.timeToJumpIfUserDoesNotAnswerString = this.timeToString(this.checkpoint.timeToJumpIfUserDoesNotAnswer);\r\n }\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.changeTimeToAnswer = function () {\r\n if (!document.forms['checkpoint_form'].timeToAnswerField.$error\r\n && this.checkpoint.timeToAnswerString\r\n && this.checkpoint.timeToAnswerString.length > 0) {\r\n this.checkpoint.timeToAnswer = this.timeFromString(this.checkpoint.timeToAnswerString);\r\n this.checkpoint.timeToAnswer = this.checkpoint.timeToAnswer > 1800 ? 1800 : this.checkpoint.timeToAnswer;\r\n this.checkpoint.timeToAnswerString = this.timeToString(this.checkpoint.timeToAnswer);\r\n }\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.checkSaveButtonState = function () {\r\n this.saveButtonIsActive = this.checkpoint.answers && this.checkpoint.answers.length > 0\r\n && this.checkpoint.answers.filter(function (ans) { return !(ans.text && ans.text.length > 0); }).length == 0;\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.openPopup = function () {\r\n $(\"#createEditCheckpoint\").modal(\"show\");\r\n this.popupOpened = true;\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.closePopup = function () {\r\n this.popupOpened = false;\r\n localStorage.removeItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.MATERIAL_KEY);\r\n $(\"#createEditCheckpoint\").modal(\"toggle\");\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.startIntro = function (introNumber) {\r\n this.introService.startEditMaterialPageIntro(introNumber);\r\n };\r\n VhsMaterialCheckpointsDirectiveController.prototype.redirectToHelpPage = function () {\r\n var baseUrl = this.$window.location.href.split(\"#\")[0], url = baseUrl + \"#\" + this.newsRouter.helpUrl(this.NEWS_ID);\r\n this.$window.open(url, '_blank');\r\n };\r\n VhsMaterialCheckpointsDirectiveController.$inject = [\r\n \"$window\",\r\n \"$scope\",\r\n \"$location\",\r\n NewsRouter_1.NewsRouter.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return VhsMaterialCheckpointsDirectiveController;\r\n})();\r\nexports.VhsMaterialCheckpointsDirectiveController = VhsMaterialCheckpointsDirectiveController;\r\nfunction VhsMaterialCheckpointsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsMaterialCheckpointsDirectiveController,\r\n scope: {\r\n material: \"=material\",\r\n file: \"=file\"\r\n },\r\n templateUrl: url.template(\"components/material-checkpoints.html\"),\r\n };\r\n}\r\nexports.VhsMaterialCheckpointsDirectiveFactory = VhsMaterialCheckpointsDirectiveFactory;\r\nVhsMaterialCheckpointsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../info/IntroService\":292,\"../materials/models/CheckpointType\":345,\"../materials/models/IMultimediaMaterialSettings\":346,\"../materials/models/NoAnswerEffectType\":348,\"../materials/models/VideoPlayerLocalStorageKey\":349,\"../urls/NewsRouter\":481,\"../utils/UrlService\":528}],127:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar VideoPlayerLocalStorageKey_1 = require(\"../materials/models/VideoPlayerLocalStorageKey\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar IMultimediaMaterialSettings_1 = require(\"../materials/models/IMultimediaMaterialSettings\");\r\nvar ObjectTypeUtils_1 = require(\"../utils/ObjectTypeUtils\");\r\nvar VhsMaterialController = (function () {\r\n function VhsMaterialController($scope, $timeout, $sce, $http, authManager, permissionsService, progressService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.$sce = $sce;\r\n this.$http = $http;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.progressService = progressService;\r\n this.isInitEpubArea = false;\r\n this.videoUUID = \"\";\r\n this.materialSettings = new IMultimediaMaterialSettings_1.default();\r\n this.bookmarkName = \"\";\r\n this.goToBookmark = function () {\r\n var index = _this.selectBookmark.selectedIndex, url = _this.selectBookmark.options[index].getAttribute(\"ref\");\r\n _this.rendition.display(url);\r\n };\r\n $scope.vm = this;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.userId = this.authManager.getCurrentUser().id.toString();\r\n if (this.isAuthenticated) {\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.$scope.$watch(\"vhsMaterialEntity\", (function (newValue, oldValue) {\r\n _this.getInitData();\r\n }));\r\n this.$scope.$on(\"setNewMultimediaSource\", function (evt, materialSettings) {\r\n try {\r\n _this.setNewMultimediaSource(materialSettings);\r\n }\r\n catch (e) {\r\n _this.sendMessageToSentry(\"Error in open video or audio: \" + e.message);\r\n }\r\n });\r\n }\r\n VhsMaterialController.prototype.onPdfExpandClick = function () {\r\n this.pdfExpanded = !this.pdfExpanded;\r\n };\r\n VhsMaterialController.prototype.onEpubExpandClick = function () {\r\n this.epubExpanded = !this.epubExpanded;\r\n if (!this.epubExpanded) {\r\n var controls = angular.element(document.querySelectorAll('.epub-controls'));\r\n controls.attr('style', 'display: none');\r\n }\r\n else {\r\n var controls = angular.element(document.querySelectorAll('.epub-controls'));\r\n controls.removeAttr('style');\r\n }\r\n if (this.isInitEpubArea == false) {\r\n if (!(this.rendition == null)) {\r\n this.rendition.destroy();\r\n }\r\n this.getEpubFrame();\r\n }\r\n };\r\n VhsMaterialController.prototype.getEpubFrame = function () {\r\n var trustedUrl = this.getTrustedUrl(this.$scope.vhsMaterialEntity.downloadUrl);\r\n this.book = window.ePub(trustedUrl != null ? trustedUrl.toString() : null);\r\n this.rendition = this.book.renderTo(this.epubArea, {\r\n flow: \"paginated\",\r\n width: \"100%\",\r\n height: \"100%\"\r\n });\r\n this.rendition.display();\r\n this.bookId = JSON.stringify(this.$scope.vhsMaterialEntity.id);\r\n this.bookmarks = this.getBookmarks();\r\n this.navigate(this.book);\r\n };\r\n VhsMaterialController.prototype.navigate = function (book) {\r\n var _this = this;\r\n this.rendition.on(\"rendered\", function (section) {\r\n if (section) {\r\n _this.section = section;\r\n _this.selectNavigateOptions = document.getElementById(\"toc\");\r\n var $selected = _this.selectNavigateOptions.querySelector(\"option[selected]\");\r\n if ($selected) {\r\n $selected.removeAttribute(\"selected\");\r\n }\r\n var $options = _this.selectNavigateOptions.querySelectorAll(\"option\");\r\n for (var i = 0; i < $options.length; ++i) {\r\n var selected = $options[i].getAttribute(\"ref\").includes(section.href);\r\n if (selected) {\r\n $options[i].setAttribute(\"selected\", \"\");\r\n }\r\n }\r\n }\r\n });\r\n book.loaded.navigation.then(function (toc) {\r\n _this.selectNavigateOptions = document.getElementById(\"toc\");\r\n var docfrag = document.createDocumentFragment();\r\n if (!_this.selectNavigateOptions.firstChild) {\r\n toc.forEach(function (subchapter) {\r\n var option = document.createElement(\"option\");\r\n option.textContent = subchapter.label;\r\n option.setAttribute(\"ref\", subchapter.href);\r\n docfrag.appendChild(option);\r\n });\r\n _this.selectNavigateOptions.appendChild(docfrag);\r\n }\r\n _this.selectNavigateOptions.onchange = function () {\r\n var index = _this.selectNavigateOptions.selectedIndex, url = _this.selectNavigateOptions.options[index].getAttribute(\"ref\");\r\n _this.rendition.display(url);\r\n return false;\r\n };\r\n }).then(function () {\r\n _this.showBookmarks();\r\n });\r\n };\r\n VhsMaterialController.prototype.nextPage = function () {\r\n if (!!this.selectBookmark) {\r\n this.selectBookmark.selectedIndex = 0;\r\n }\r\n this.rendition.next();\r\n };\r\n VhsMaterialController.prototype.prevPage = function () {\r\n if (!!this.selectBookmark) {\r\n this.selectBookmark.selectedIndex = 0;\r\n }\r\n this.rendition.prev();\r\n };\r\n VhsMaterialController.prototype.removeBookmark = function () {\r\n this.book.locations.generate();\r\n this.selectBookmark = document.getElementById(\"bookmark\");\r\n if (this.bookmarks == null) {\r\n this.bookmarks = [];\r\n }\r\n var curLocationStart = this.rendition.currentLocation().start;\r\n var bookmark = {\r\n name: this.selectBookmark.value,\r\n cfi: curLocationStart.cfi\r\n };\r\n for (var i = 0; i < this.bookmarks.length; i++) {\r\n if (this.bookmarks[i].cfi === bookmark.cfi) {\r\n this.bookmarks.splice(i, 1);\r\n }\r\n }\r\n this.updateBookmarks();\r\n this.showBookmarks();\r\n };\r\n VhsMaterialController.prototype.clearBookMarks = function () {\r\n this.bookmarks = [];\r\n this.updateBookmarks();\r\n this.showBookmarks();\r\n };\r\n VhsMaterialController.prototype.createBookmark = function () {\r\n this.book.locations.generate();\r\n this.selectBookmark = document.getElementById(\"bookmark\");\r\n if (this.bookmarks == null) {\r\n this.bookmarks = [];\r\n }\r\n var curLocationStart = this.rendition.currentLocation().start;\r\n var bookmark = {\r\n bookId: this.bookId,\r\n name: this.bookmarkName,\r\n cfi: curLocationStart.cfi\r\n };\r\n if (!this.hasBookmark(bookmark)) {\r\n this.bookmarks.push(bookmark);\r\n }\r\n this.updateBookmarks();\r\n this.showBookmarks();\r\n this.selectBookmark.onchange = this.goToBookmark;\r\n this.bookmarkName = \"\";\r\n };\r\n VhsMaterialController.prototype.showBookmarks = function () {\r\n if (!(this.bookmarks == null)) {\r\n this.selectBookmark = document.getElementById(\"bookmark\");\r\n var docfrag = document.createDocumentFragment();\r\n var emptyOption = document.createElement(\"option\");\r\n emptyOption.textContent = \"Choose bookmark\";\r\n emptyOption.id = \"empty_option\";\r\n emptyOption.disabled = true;\r\n emptyOption.selected = true;\r\n emptyOption.style.display = \"none\";\r\n docfrag.appendChild(emptyOption);\r\n this.bookmarks.forEach(function (mark) {\r\n var option = document.createElement(\"option\");\r\n option.textContent = mark.name;\r\n option.setAttribute(\"ref\", mark.cfi);\r\n option.setAttribute(\"class\", String(mark.page));\r\n docfrag.appendChild(option);\r\n });\r\n while (this.selectBookmark != null && this.selectBookmark.firstChild) {\r\n this.selectBookmark.removeChild(this.selectBookmark.firstChild);\r\n }\r\n this.selectBookmark.appendChild(docfrag);\r\n this.selectBookmark.onchange = this.goToBookmark;\r\n }\r\n };\r\n VhsMaterialController.prototype.updateBookmarks = function () {\r\n var _this = this;\r\n var usersBookmarks = JSON.parse(localStorage.getItem(this.userId));\r\n if (usersBookmarks != null) {\r\n var thisBookBookmarks = usersBookmarks.filter(function (ub) { return ub.bookId == _this.bookId; });\r\n usersBookmarks = usersBookmarks.filter(function (ub) { return ub.bookId != _this.bookId; });\r\n if (thisBookBookmarks.length > this.bookmarks.length) {\r\n thisBookBookmarks = thisBookBookmarks.filter(function (ub) { return _this.bookmarks.map(function (b) { return b.cfi; }).indexOf(ub.cfi) >= 0; });\r\n }\r\n else if (this.bookmarks.length > thisBookBookmarks.length) {\r\n thisBookBookmarks = this.bookmarks.filter(function (b) { return usersBookmarks.map(function (ub) { return ub.cfi; }).indexOf(b.cfi) < 0; });\r\n }\r\n thisBookBookmarks.forEach(function (b) { return usersBookmarks.push(b); });\r\n localStorage.setItem(this.userId, JSON.stringify(usersBookmarks));\r\n }\r\n else {\r\n localStorage.setItem(this.userId, JSON.stringify(this.bookmarks));\r\n }\r\n };\r\n VhsMaterialController.prototype.getBookmarks = function () {\r\n var _this = this;\r\n var bookmarks = JSON.parse(localStorage.getItem(this.userId));\r\n var filtered = bookmarks;\r\n if (bookmarks != null) {\r\n filtered = bookmarks.filter(function (b) { return b.bookId === _this.bookId; });\r\n }\r\n return filtered;\r\n };\r\n VhsMaterialController.prototype.hasBookmark = function (createdMark) {\r\n var hasMark = false;\r\n this.bookmarks.forEach(function (mark) {\r\n if (mark.name === createdMark.name && mark.cfi === createdMark.cfi) {\r\n hasMark = true;\r\n }\r\n });\r\n return hasMark;\r\n };\r\n VhsMaterialController.prototype.getTrustedUrl = function (src) {\r\n return this.$sce.trustAsResourceUrl(src);\r\n };\r\n VhsMaterialController.prototype.makeId = function () {\r\n var result = '';\r\n var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n var charactersLength = characters.length;\r\n for (var i = 0; i < 10; i++) {\r\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n }\r\n return result;\r\n };\r\n VhsMaterialController.prototype.getInitData = function () {\r\n this.width = this.$scope.vhsWidth != null ? this.$scope.vhsWidth : VhsMaterialController.DEFAULT_WIDTH;\r\n this.height = this.$scope.vhsHeight != null ? this.$scope.vhsHeight : VhsMaterialController.DEFAULT_HEIGHT;\r\n this.pdfExpanded = this.$scope.vhsPdfExpanded != null ? this.$scope.vhsPdfExpanded : false;\r\n this.epubExpanded = this.$scope.vhsEpubExpanded != null ? this.$scope.vhsEpubExpanded : false;\r\n this.enableDownload = this.$scope.vhsEnableDownload != null ? this.$scope.vhsEnableDownload : true;\r\n this.epubArea = this.makeId();\r\n this.isInitEpubArea = false;\r\n this.videoUUID = this.uuidForVideo(this.$scope.vhsMaterialEntity.id);\r\n this.materialSettings.$scope = this.$scope;\r\n this.materialSettings.source = this.$scope.vhsSources[0].src;\r\n this.materialSettings.poster = this.$scope.vhsMaterialEntity.previewUrl;\r\n this.materialSettings.materialId = this.videoUUID;\r\n this.materialSettings.courseId = this.$scope.vhsCourseId ? this.$scope.vhsCourseId.sourceId.toString() : \"\";\r\n this.materialSettings.sectionId = this.$scope.vhsSectionId ? this.$scope.vhsSectionId.toString() : \"\";\r\n this.materialSettings.subtitles = new Array();\r\n if (this.$scope.vhsMaterialEntity.subtitlesUrl) {\r\n this.materialSettings.subtitles.push({\r\n label: this.$scope.vhsMaterialEntity.languageName,\r\n url: this.$scope.vhsMaterialEntity.subtitlesUrl\r\n });\r\n }\r\n this.materialSettings.currentTrack = this.$scope.vhsMaterialEntity.languageName;\r\n this.materialSettings.checkpoints = this.$scope.vhsMaterialEntity.checkpoints;\r\n this.materialSettings.isRewindAllowed = this.$scope.vhsMaterialEntity.isRewindAllowed;\r\n if (this.epubExpanded === true) {\r\n this.getEpubFrame();\r\n }\r\n if (this.$scope.vhsMaterialType === 'VIMEO') {\r\n this.getVimeoLink();\r\n }\r\n };\r\n VhsMaterialController.prototype.isPdfOrEpub = function () {\r\n return this.$scope.vhsMaterialEntity.contentType == \"application/pdf\" || this.$scope.vhsMaterialEntity.contentType == \"application/epub+zip\";\r\n };\r\n VhsMaterialController.prototype.getMaterialExtension = function () {\r\n if (this.$scope.vhsMaterialEntity.fileName) {\r\n return \".\" + this.$scope.vhsMaterialEntity.fileName.split(\".\").pop();\r\n }\r\n return \"\";\r\n };\r\n VhsMaterialController.prototype.uuidForVideo = function (materialId) {\r\n return RandomUtils_1.RandomUtils.generateRandomId(materialId + \"_\");\r\n };\r\n VhsMaterialController.prototype.saveProgressOfCurrentMaterial = function () {\r\n var video_callback = document.getElementById('video-player-callback');\r\n if (video_callback) {\r\n video_callback.click();\r\n }\r\n };\r\n VhsMaterialController.prototype.getProgressForMaterial = function (materialId, courseId, sectionId) {\r\n var _this = this;\r\n return this.progressService.getCourseProgress(parseInt(courseId))\r\n .then(function (courseProgress) {\r\n return _this.progressService.getSectionProgressExtensionForMaterialProgress(parseInt(courseId), courseProgress.id, parseInt(sectionId), parseInt(materialId));\r\n });\r\n };\r\n VhsMaterialController.prototype.setNewMultimediaSource = function (materialSettings) {\r\n var _this = this;\r\n this.localStorageFilling(new IMultimediaMaterialSettings_1.default());\r\n this.$timeout(function () {\r\n _this.$timeout(function () {\r\n if (materialSettings.courseId.length > 0 && materialSettings.sectionId.length > 0) {\r\n _this.getProgressForMaterial(materialSettings.materialId, materialSettings.courseId, localStorage.getItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SECTION_KEY))\r\n .then(function (result) {\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.TIMESTAMP_KEY, result[0].timestamp.toString());\r\n })\r\n .catch(function () {\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.TIMESTAMP_KEY, '0');\r\n })\r\n .finally(function () {\r\n _this.localStorageFilling(materialSettings);\r\n });\r\n }\r\n else {\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.TIMESTAMP_KEY, '0');\r\n _this.localStorageFilling(materialSettings);\r\n }\r\n }, 200);\r\n }, 1000);\r\n };\r\n VhsMaterialController.prototype.localStorageFilling = function (materialSettings) {\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SOURCE_KEY, materialSettings.source);\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.MATERIAL_KEY, materialSettings.materialId);\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.CHECKPOINTS_KEY, materialSettings.checkpoints);\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.POSTER_URL_KEY, materialSettings.poster);\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.CONFIGURATION_KEY, \"{\\\"canShowForwardRewindButtons\\\":\" + materialSettings.isRewindAllowed + \", \\\"autoplay\\\": true}\");\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SUBTITLES_TRACKS, JSON.stringify(materialSettings.subtitles));\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SUBTITLES_CURRENT_TRACK, materialSettings.currentTrack);\r\n };\r\n VhsMaterialController.prototype.bookmarkTextFieldIsFocused = function () {\r\n return document.getElementById(\"newBookmarkField\") === document.activeElement;\r\n };\r\n VhsMaterialController.prototype.downloadCrossOriginBlob = function () {\r\n var _this = this;\r\n if (this.$scope.vhsMaterialEntity.downloadUrl.search(\"filename\") > 0) {\r\n return this.$http.get(this.$scope.vhsMaterialEntity.downloadUrl, {\r\n responseType: 'blob'\r\n }).then(function (r) {\r\n var blob = new Blob([r.data], { type: r.data.type });\r\n var link = document.createElement('a');\r\n link.href = URL.createObjectURL(blob);\r\n link.id = \"tempBlobLink\";\r\n link.target = \"_blank\";\r\n link.setAttribute('download', _this.$scope.vhsMaterialEntity.downloadUrl.split(\"filename=\")[1]);\r\n link.click();\r\n link.remove();\r\n });\r\n }\r\n };\r\n VhsMaterialController.prototype.getVimeoLink = function () {\r\n var _this = this;\r\n setTimeout(function () {\r\n var link = 'https://player.vimeo.com/video/' + ObjectTypeUtils_1.ObjectTypeUtils.extractVimeoUrl(_this.$scope.vhsMaterialEntity.link);\r\n var elem = document.getElementById('iframe-vimeo');\r\n elem.setAttribute('src', link);\r\n }, 0);\r\n };\r\n VhsMaterialController.prototype.sendMessageToSentry = function (message) {\r\n try {\r\n window.Sentry.captureMessage(message);\r\n }\r\n catch (e) {\r\n console.log('Unable to send Sentry message.');\r\n }\r\n };\r\n VhsMaterialController.DEFAULT_WIDTH = '100%';\r\n VhsMaterialController.DEFAULT_HEIGHT = '300px';\r\n VhsMaterialController.$inject = [\r\n \"$scope\",\r\n \"$timeout\",\r\n \"$sce\",\r\n \"$http\",\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n ProgressService_1.ProgressService.NAME\r\n ];\r\n return VhsMaterialController;\r\n})();\r\nexports.VhsMaterialController = VhsMaterialController;\r\nfunction VhsMaterialDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.controller = VhsMaterialController;\r\n directive.scope = {\r\n vhsId: \"=?\",\r\n vhsMaterialEntity: \"=\",\r\n vhsMaterialType: \"=\",\r\n vhsSources: \"=\",\r\n vhsCourseId: \"=?\",\r\n vhsSectionId: \"=?\",\r\n vhsWidth: \"=?\",\r\n vhsHeight: \"=?\",\r\n vhsPdfExpanded: \"=?\",\r\n vhsEpubExpanded: \"=?\",\r\n vhsEnableDownload: \"=?\",\r\n vhsErrorCallback: \"&?\",\r\n vhsDocumentDownloadOnclick: \"&?\"\r\n };\r\n directive.templateUrl = url.template(\"components/vhs-material.html\");\r\n return directive;\r\n}\r\nexports.VhsMaterialDirectiveFactory = VhsMaterialDirectiveFactory;\r\nVhsMaterialDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../authcore/AuthManager\":25,\"../courses/ProgressService\":219,\"../materials/models/IMultimediaMaterialSettings\":346,\"../materials/models/VideoPlayerLocalStorageKey\":349,\"../security/PermissionsService\":418,\"../utils/ObjectTypeUtils\":520,\"../utils/RandomUtils\":523,\"./../utils/UrlService\":528}],128:[function(require,module,exports){\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar VhsMaterialEditTopTabsController = (function () {\r\n function VhsMaterialEditTopTabsController($scope, materialsRouter) {\r\n this.$scope = $scope;\r\n this.materialsRouter = materialsRouter;\r\n this.ABOUT_TAB_KEY = \"about\";\r\n this.RELATED_PRODUCTS_TAB_KEY = \"relatedProducts\";\r\n this.PERMISSIONS_TAB_KEY = \"permissions\";\r\n $scope.vm = this;\r\n }\r\n VhsMaterialEditTopTabsController.prototype.init = function ($scope, element) {\r\n };\r\n VhsMaterialEditTopTabsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.$scope.topMenuKey == topMenuKey;\r\n };\r\n VhsMaterialEditTopTabsController.$inject = [\r\n \"$scope\",\r\n MaterialsRouter_1.MaterialsRouter.NAME\r\n ];\r\n return VhsMaterialEditTopTabsController;\r\n})();\r\nexports.VhsMaterialEditTopTabsController = VhsMaterialEditTopTabsController;\r\nfunction VhsMaterialEditTopTabsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsMaterialEditTopTabsController,\r\n scope: {\r\n materialId: \"=vhsMaterialId\",\r\n topMenuKey: \"=vhsTopMenuKey\"\r\n },\r\n templateUrl: url.template(\"components/vhs-material-edit-top-tabs.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsMaterialEditTopTabsDirectiveFactory = VhsMaterialEditTopTabsDirectiveFactory;\r\nVhsMaterialEditTopTabsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../urls/MaterialsRouter\":480,\"../utils/UrlService\":528}],129:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar UploadUtils_1 = require(\"./../utils/UploadUtils\");\r\nvar UploadsService_1 = require(\"./../storage/UploadsService\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar Moment_1 = require(\"./../utils/Moment\");\r\nvar ContentUtils_1 = require(\"./../utils/ContentUtils\");\r\nvar ActionLogService_1 = require(\"./../statistics/ActionLogService\");\r\nvar ActionType_1 = require(\"./../statistics/models/ActionType\");\r\nvar SecuredObjectType_1 = require(\"./../security/permissions/SecuredObjectType\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar MaterialType_1 = require(\"./../materials/models/MaterialType\");\r\nvar MaterialService_1 = require(\"./../materials/MaterialService\");\r\nvar VhsMaterialEditingController = (function () {\r\n function VhsMaterialEditingController($q, $scope, $http, $uploader, permissionsService, userService, securityService, authService, url, actionLogService, uploadUtils, materialService) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$uploader = $uploader;\r\n this.permissionsService = permissionsService;\r\n this.userService = userService;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.url = url;\r\n this.actionLogService = actionLogService;\r\n this.uploadUtils = uploadUtils;\r\n this.materialService = materialService;\r\n this.material = {};\r\n this.materialList = [];\r\n this.owners = [];\r\n this.fileList = [];\r\n this.selectedFiles = false;\r\n this.isErrorFormat = false;\r\n this.permissionsWithUsersAndGroups = [];\r\n $scope.vm = this;\r\n this.attachFormat = \"\";\r\n this.disabledSaveButton = true;\r\n this.disabledUploadButton = false;\r\n $(window).on(\"initializeMaterial\", function (event) {\r\n _this.initializeMaterial();\r\n });\r\n document.body.addEventListener('submit', function (e) {\r\n $scope.vm.saveMaterial($scope.vm.materialList, $scope.vm.permissionsWithUsersAndGroups);\r\n });\r\n document.body.addEventListener('dragover', function (e) {\r\n e.preventDefault();\r\n var elem = document.elementFromPoint(e.clientX, e.clientY);\r\n var dropFromCourse = document.getElementById(\"dropFromCourse\");\r\n var dropFromCourseNote = document.getElementById(\"dropFromCourseNote\");\r\n e.dataTransfer.dropEffect = 'none';\r\n if (dropFromCourse == elem || dropFromCourseNote == elem) {\r\n e.dataTransfer.dropEffect = 'copy';\r\n }\r\n });\r\n this.initializeMaterial();\r\n }\r\n VhsMaterialEditingController.prototype.saveMaterial = function (materials, permissionsWithUsersAndGroups) {\r\n this.disabledSaveButton = true;\r\n this.disabledUploadButton = true;\r\n this.material.validity = Moment_1.Moment.textToJavaDate(this.material.validityText);\r\n this.material.typeKey = MaterialType_1.MaterialTypeEnum[this.material.typeId];\r\n if (this.material.id) {\r\n this.updateMaterial(materials, permissionsWithUsersAndGroups, this.preview);\r\n }\r\n else {\r\n this.createMaterial(materials, permissionsWithUsersAndGroups, this.preview);\r\n }\r\n };\r\n VhsMaterialEditingController.prototype.createMaterial = function (materials, permissionsWithUsersAndGroups, preview) {\r\n var _this = this;\r\n if (this.material.typeId === MaterialType_1.MaterialTypeEnum.LINK) {\r\n this.createOrUpdateLink(this.material, permissionsWithUsersAndGroups, preview, 'create');\r\n }\r\n else {\r\n this.createOrUpdateMaterial(materials, permissionsWithUsersAndGroups, preview, 'create');\r\n }\r\n setTimeout(function () { return _this.initializeMaterial(); }, 2000);\r\n };\r\n VhsMaterialEditingController.prototype.updateMaterial = function (materials, permissionsWithUsersAndGroups, preview) {\r\n if (this.material.typeId === MaterialType_1.MaterialTypeEnum.LINK) {\r\n this.createOrUpdateLink(this.material, permissionsWithUsersAndGroups, preview, 'update');\r\n }\r\n else {\r\n this.createOrUpdateMaterial(materials, permissionsWithUsersAndGroups, preview, 'update');\r\n }\r\n };\r\n VhsMaterialEditingController.prototype.createOrUpdateLink = function (material, permissionsWithUsersAndGroups, preview, mode) {\r\n var _this = this;\r\n var promise;\r\n if (mode === 'create') {\r\n promise = this.materialService.create(material);\r\n }\r\n else if (mode === 'update') {\r\n promise = this.materialService.update(material, false, false);\r\n }\r\n promise.then(function (result) {\r\n _this.createUpdateMaterialSuccessCallback(result, null, preview, true);\r\n }).catch(function (response) {\r\n _this.showErrorMessage(response);\r\n });\r\n };\r\n VhsMaterialEditingController.prototype.createOrUpdateMaterial = function (materials, permissionsWithUsersAndGroups, preview, mode) {\r\n var _this = this;\r\n var saveMaterialDeferred = this.$q.defer();\r\n saveMaterialDeferred.resolve();\r\n var saveMaterialPromise = saveMaterialDeferred.promise;\r\n var promisesArray = [];\r\n var createdMaterials = [];\r\n angular.forEach(materials, function (material, index) {\r\n saveMaterialPromise = saveMaterialPromise.then(function () {\r\n var file = _this.fileList[index];\r\n if (ContentUtils_1.ContentUtils.checkFileExt(material.typeId, ContentUtils_1.ContentUtils.getFileExt(file.name))) {\r\n var promise;\r\n if (mode === 'create') {\r\n promise = _this.materialService.create(material, file, preview);\r\n }\r\n else if (mode === 'update') {\r\n promise = _this.materialService.update(material, false, false, file, preview);\r\n }\r\n promisesArray.push(promise);\r\n promise.then(function (result) {\r\n _this.createUpdateMaterialSuccessCallback(result, file, preview, false);\r\n createdMaterials.push(_this.material);\r\n }).catch(function (response) {\r\n _this.showErrorMessage(response);\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to upload this file: please check whether the file format is valid\");\r\n return _this.$q.when(null);\r\n }\r\n });\r\n if (index == materials.length - 1) {\r\n saveMaterialPromise.then(function () {\r\n _this.enableButton();\r\n _this.$q.all(promisesArray).then(function () { return _this.$scope.callbackWhenFinished({ materials: createdMaterials }); });\r\n });\r\n }\r\n });\r\n };\r\n VhsMaterialEditingController.prototype.createUpdateMaterialSuccessCallback = function (material, file, preview, needCallback) {\r\n this.material = angular.copy(material[UploadsService_1.UploadsService.MATERIAL_KEY]);\r\n if (preview) {\r\n var previewUploadUrl = material[UploadsService_1.UploadsService.PREVIEW_UPLOAD_URL_KEY];\r\n var previewUploadMethod = material[UploadsService_1.UploadsService.PREVIEW_UPLOAD_METHOD_KEY];\r\n this.uploadUtils.uploadMaterialByChunks(preview, this.material.previewId, this.material.id, previewUploadUrl, previewUploadMethod, this.material.title);\r\n }\r\n if (file) {\r\n var fileUploadUrl = material[UploadsService_1.UploadsService.FILE_UPLOAD_URL_KEY];\r\n var fileUploadMethod = material[UploadsService_1.UploadsService.FILE_UPLOAD_METHOD_KEY];\r\n this.uploadUtils.uploadMaterialByChunks(file, this.material.fileId, this.material.id, fileUploadUrl, fileUploadMethod, this.material.title);\r\n }\r\n this.processSuccessCallback(this.material.id, needCallback);\r\n };\r\n VhsMaterialEditingController.prototype.showErrorMessage = function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n };\r\n VhsMaterialEditingController.prototype.setFileOrLinkType = function () {\r\n this.selectedFiles = false;\r\n this.isErrorFormat = false;\r\n if (this.uploadContentType === 1) {\r\n this.material.typeId = MaterialType_1.MaterialTypeEnum.AUDIO;\r\n this.showUploadButton = true;\r\n }\r\n else {\r\n this.material.typeId = MaterialType_1.MaterialTypeEnum.LINK;\r\n this.showUploadButton = false;\r\n this.fileList = [];\r\n this.materialList = [];\r\n }\r\n };\r\n VhsMaterialEditingController.prototype.onFilesUpload = function () {\r\n var _this = this;\r\n var currentError = this.isErrorFormat;\r\n this.isErrorFormat = false;\r\n if (this.fileList) {\r\n if (this.fileList.length > 0) {\r\n var currentMaterial;\r\n this.materialList = [];\r\n this.fileList.forEach(function (file) {\r\n currentMaterial = {};\r\n var fileExt = ContentUtils_1.ContentUtils.getFileExt(file.name.toLowerCase());\r\n if (!ContentUtils_1.ContentUtils.MAP_FILE_EXTENSIONS_TO_MATERIAL_TYPES[fileExt]) {\r\n currentError = true;\r\n }\r\n angular.copy(_this.material, currentMaterial);\r\n currentMaterial.title = ContentUtils_1.ContentUtils.getFileWithoutExt(file.name);\r\n currentMaterial.typeId = ContentUtils_1.ContentUtils.findMaterialTypeByFileExtension(fileExt);\r\n if (currentMaterial.typeId === MaterialType_1.MaterialTypeKeyEnum.AUDIO || currentMaterial.typeId === MaterialType_1.MaterialTypeKeyEnum.VIDEO) {\r\n currentMaterial.isRewindAllowed = true;\r\n }\r\n _this.materialList.push(currentMaterial);\r\n });\r\n this.fileList.map(function (file, index) {\r\n _this.getDuration(file).then(function (duration) {\r\n _this.materialList[index].duration = duration;\r\n });\r\n });\r\n this.enableButton();\r\n this.uploadContentType = 1;\r\n this.material.typeId = MaterialType_1.MaterialTypeEnum.AUDIO;\r\n this.showUploadButton = true;\r\n this.selectedFiles = true;\r\n this.isErrorFormat = currentError;\r\n }\r\n }\r\n };\r\n VhsMaterialEditingController.prototype.enableButton = function () {\r\n this.disabledSaveButton = false;\r\n this.disabledUploadButton = false;\r\n };\r\n VhsMaterialEditingController.prototype.enableButtonForLinkUpload = function () {\r\n this.disabledSaveButton = false;\r\n };\r\n VhsMaterialEditingController.prototype.upload = function (file, materialId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/materials/upload?materialId=:materialId&fileType=:fileType\")\r\n .param(\":materialId\", materialId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n VhsMaterialEditingController.prototype.reupload = function () {\r\n this.fileName = (this.showUploadButton) ? this.material.fileName : \"\";\r\n this.showUploadButton = !this.showUploadButton;\r\n this.file = undefined;\r\n };\r\n VhsMaterialEditingController.prototype.processSuccessCallback = function (materialId, needCallback) {\r\n this.actionLogService.create(materialId, ReferencedObjectType_1.ReferencedObjectType.MATERIAL, ActionType_1.ActionType.MATERIAL_CREATION);\r\n INotifier_1.notifier.success(\"The material has been saved\");\r\n if (needCallback) {\r\n if (this.$scope.callbackWhenFinished) {\r\n this.$scope.callbackWhenFinished({ materials: [this.material] });\r\n }\r\n else {\r\n console.log('Callback not defined');\r\n }\r\n }\r\n };\r\n VhsMaterialEditingController.prototype.loadPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var _this = this;\r\n this.permissionsService.getAllObjectPermissionsWithUsersAndGroups(securedObjectType, objectId).then(function (result) {\r\n _this.permissionsWithUsersAndGroups = result;\r\n });\r\n };\r\n VhsMaterialEditingController.prototype.loadMaterial = function () {\r\n var _this = this;\r\n var promise = this.materialService.get(this.material.id);\r\n promise.then(function (result) {\r\n _this.material = angular.copy(result);\r\n _this.material.validityText = Moment_1.Moment.isValidDate(result.validity);\r\n _this.fileName = result.fileName;\r\n if (!result.link) {\r\n _this.uploadContentType = 1;\r\n }\r\n else {\r\n _this.uploadContentType = 2;\r\n }\r\n if (_this.material.typeId != MaterialType_1.MaterialTypeEnum.LINK) {\r\n _this.showUploadButton = !_this.material.fileId;\r\n }\r\n _this.multimediaSources = [{\r\n src: _this.material.downloadUrl || '',\r\n type: _this.material.contentType,\r\n dataRes: ''\r\n }];\r\n _this.loadMaterialOwners();\r\n });\r\n return promise;\r\n };\r\n VhsMaterialEditingController.prototype.loadMaterialOwners = function () {\r\n var _this = this;\r\n var promise = this.userService.getUsersWithoutExcludedUsersForSelector(this.material.businessUnitId);\r\n promise.then(function (result) {\r\n _this.owners = angular.copy(result);\r\n _this.ownersMap = new Map();\r\n _this.owners.forEach(function (owner) {\r\n _this.ownersMap.set(owner.id, owner);\r\n });\r\n });\r\n return promise;\r\n };\r\n VhsMaterialEditingController.prototype.initializeMaterial = function () {\r\n var _this = this;\r\n this.uploadContentType = 1;\r\n this.material = {};\r\n this.materialList = [];\r\n this.selectedFiles = false;\r\n this.isErrorFormat = false;\r\n var materialIdStr = String(this.material.id);\r\n var hasMaterialId = !!this.material.id;\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissionsIf(!hasMaterialId, function (systemPermissions) { return systemPermissions.addMaterial; })\r\n .demandMaterialPermissionsIf(hasMaterialId, materialIdStr, function (materialPermissions) { return materialPermissions.edit; });\r\n this.file = undefined;\r\n this.preview = undefined;\r\n this.disabledUploadButton = false;\r\n this.showUploadButton = true;\r\n if (hasMaterialId) {\r\n this.showUploadButton = false;\r\n this.loadMaterial();\r\n this.enableButtonForLinkUpload();\r\n this.disabledSaveButton = false;\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.MATERIAL, materialIdStr);\r\n }\r\n else {\r\n if (this.$scope.course) {\r\n this.material.subjectId = this.$scope.course.subjectId;\r\n this.material.subjectName = this.$scope.course.subjectName;\r\n this.material.topic = this.$scope.course.topic;\r\n this.material.languageId = this.$scope.course.languageId;\r\n this.material.languageName = this.$scope.course.languageName;\r\n this.material.ownerId = this.$scope.course.ownerIds[0];\r\n this.material.ownerName = (this.material.ownerId) ? '...' : '';\r\n this.material.typeId = MaterialType_1.MaterialTypeEnum.VIDEO;\r\n this.material.typeName = \"Video\";\r\n this.material.typeKey = 'VIDEO';\r\n this.material.businessUnitId = this.$scope.course.businessUnitId;\r\n this.material.validity = this.$scope.course.endDate;\r\n this.material.isRewindAllowed = true;\r\n }\r\n this.loadMaterialOwners();\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.material.uploaderId = user.id;\r\n });\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.MATERIAL);\r\n this.disabledSaveButton = true;\r\n }\r\n };\r\n VhsMaterialEditingController.prototype.getDuration = function (file) {\r\n try {\r\n var url = URL.createObjectURL(file);\r\n return this.$q(function (resolve) {\r\n var video = document.createElement(\"video\");\r\n video.muted = true;\r\n var source = document.createElement(\"source\");\r\n source.src = url;\r\n video.preload = \"metadata\";\r\n video.appendChild(source);\r\n video.onloadedmetadata = function () {\r\n resolve(video.duration);\r\n };\r\n });\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n };\r\n VhsMaterialEditingController.$inject = [\r\n \"$q\",\r\n \"$scope\",\r\n \"$http\",\r\n \"Upload\",\r\n PermissionsService_1.PermissionsService.NAME,\r\n UserService_1.UserService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n ActionLogService_1.ActionLogService.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n MaterialService_1.MaterialService.NAME\r\n ];\r\n return VhsMaterialEditingController;\r\n})();\r\nexports.VhsMaterialEditingController = VhsMaterialEditingController;\r\nfunction VhsMaterialEditingDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n $scope.$on(\"$destroy\", function () {\r\n document.body.addEventListener('dragover', function (e) {\r\n e.dataTransfer.dropEffect = 'move';\r\n });\r\n });\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsMaterialEditingController,\r\n scope: {\r\n course: \"=\",\r\n callbackWhenFinished: \"&?\"\r\n },\r\n templateUrl: url.template(\"components/vhs-material-editing.html\")\r\n };\r\n}\r\nexports.VhsMaterialEditingDirectiveFactory = VhsMaterialEditingDirectiveFactory;\r\nVhsMaterialEditingDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../INotifier\":5,\"./../ReferencedObjectType\":7,\"./../auth/AuthService\":18,\"./../materials/MaterialService\":337,\"./../materials/models/MaterialType\":347,\"./../security/PermissionsService\":418,\"./../security/SecurityService\":420,\"./../security/permissions/SecuredObjectType\":424,\"./../statistics/ActionLogService\":441,\"./../statistics/models/ActionType\":450,\"./../storage/UploadsService\":458,\"./../users/UserService\":499,\"./../utils/ContentUtils\":509,\"./../utils/Moment\":518,\"./../utils/UploadUtils\":527,\"./../utils/UrlService\":528}],130:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar TimeZoneType_1 = require(\"../webinars/models/TimeZoneType\");\r\nvar VhsMeetingCreateEditDirectiveController = (function () {\r\n function VhsMeetingCreateEditDirectiveController($scope, url) {\r\n this.$scope = $scope;\r\n this.url = url;\r\n this.timeZone = TimeZoneType_1.TimeZone;\r\n $scope.vm = this;\r\n }\r\n VhsMeetingCreateEditDirectiveController.$inject = [\r\n \"$scope\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return VhsMeetingCreateEditDirectiveController;\r\n})();\r\nexports.VhsMeetingCreateEditDirectiveController = VhsMeetingCreateEditDirectiveController;\r\nfunction VhsMeetingCreateEditDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsMeetingCreateEditDirectiveController,\r\n scope: {\r\n newSession: \"=\",\r\n viltSessionSections: \"=\",\r\n currentUser: \"=\",\r\n isCreationModalShown: \"=\",\r\n course: \"=\"\r\n },\r\n templateUrl: url.template(\"components/vhs-meeting-create-edit.html\")\r\n };\r\n}\r\nexports.VhsMeetingCreateEditDirectiveFactory = VhsMeetingCreateEditDirectiveFactory;\r\nVhsMeetingCreateEditDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528,\"../webinars/models/TimeZoneType\":530}],131:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar NotificationTemplatesRouter_1 = require(\"../urls/NotificationTemplatesRouter\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar NotificationService_1 = require(\"../notificationTemplates/NotificationService\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar NotificationEventGroupKey_1 = require(\"./NotificationEventGroupKey\");\r\nvar NotificationEventKey_1 = require(\"../notificationTemplates/model/NotificationEventKey\");\r\nvar NotificationTemplatesScope_1 = require(\"../notificationTemplates/model/NotificationTemplatesScope\");\r\nvar VhsNotificationTemplateController = (function () {\r\n function VhsNotificationTemplateController($scope, $http, $location, url, authService, notificationService, notificationTemplatesRouter, courseRouter, courseService, dialogService, $routeParams) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.url = url;\r\n this.authService = authService;\r\n this.notificationService = notificationService;\r\n this.notificationTemplatesRouter = notificationTemplatesRouter;\r\n this.courseRouter = courseRouter;\r\n this.courseService = courseService;\r\n this.dialogService = dialogService;\r\n this.$routeParams = $routeParams;\r\n this.hasAllBusinessUnits = false;\r\n this.visibleBUSelector = false;\r\n this.templateDetailsDeletionInProgress = false;\r\n this.recipientListForRevert = { recipientIds: [] };\r\n this.ccRecipientListForRevert = { recipientIds: [] };\r\n this.businessUnitNameForRevert = \"All\";\r\n $scope.vm = this;\r\n this.notificationEventGroupKey = NotificationEventGroupKey_1.NotificationEventGroupKey[$scope.notificationType.toUpperCase()];\r\n if (this.notificationEventGroupKey == NotificationEventGroupKey_1.NotificationEventGroupKey.COURSE) {\r\n this.notificationGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/notificationTemplates?eventKey=:eventKey\")\r\n .param(\":eventKey\", NotificationEventGroupKey_1.NotificationEventGroupKey[this.notificationEventGroupKey])\r\n .service()));\r\n }\r\n else {\r\n this.notificationGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/notificationTemplates\")\r\n .service()));\r\n }\r\n this.notificationGridModel.filter.businessUnitId = null;\r\n this.notificationGridModel.filter.isReferenceObject = null;\r\n this.notificationGridModel.filter.event = \"\";\r\n this.notificationGridModel.filter.recipient = \"\";\r\n this.$scope.notificationType;\r\n if (!!$scope.courseId) {\r\n this.isCourse = true;\r\n this.visibleBUSelector = false;\r\n this.notificationGridModel.filter.isReferenceObject = $scope.courseId;\r\n this.courseService.get($scope.courseId)\r\n .then(function (course) {\r\n _this.course = angular.copy(course);\r\n });\r\n }\r\n else {\r\n this.isCourse = false;\r\n this.visibleBUSelector = true;\r\n }\r\n this.authService.getCurrentUser()\r\n .then(function (user) {\r\n _this.user = user;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n if (!_this.hasAllBusinessUnits && !_this.isCourse) {\r\n _this.notificationGridModel.filter.businessUnitId = user.businessUnits[0];\r\n }\r\n })\r\n .then(function () {\r\n _this.notificationGridModel.loadPage(0);\r\n });\r\n }\r\n VhsNotificationTemplateController.prototype.getVisibleContent = function () {\r\n var visibleAllIfUserHaveMultiplyBU = false;\r\n if (!this.hasAllBusinessUnits && this.notificationGridModel.filter.businessUnitId\r\n || !this.hasAllBusinessUnits && this.isCourse && this.course && this.user.businessUnits.indexOf(this.course.businessUnitId) != -1\r\n || !this.hasAllBusinessUnits && this.user && this.user.businessUnits && this.user.businessUnits.length === 1\r\n || this.hasAllBusinessUnits) {\r\n visibleAllIfUserHaveMultiplyBU = true;\r\n }\r\n return visibleAllIfUserHaveMultiplyBU;\r\n };\r\n VhsNotificationTemplateController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n VhsNotificationTemplateController.prototype.convertIsActive = function (isActive) {\r\n return isActive != undefined\r\n ? isActive ? 'Yes' : 'No'\r\n : undefined;\r\n };\r\n VhsNotificationTemplateController.prototype.getLinkForEditNotificationTemplates = function (templateId) {\r\n switch (this.notificationEventGroupKey) {\r\n case NotificationEventGroupKey_1.NotificationEventGroupKey.SYSTEM:\r\n this.$location.url(this.notificationTemplatesRouter.editUrl(templateId, this.notificationGridModel.filter.businessUnitId));\r\n break;\r\n case NotificationEventGroupKey_1.NotificationEventGroupKey.COURSE:\r\n this.$location.url(this.courseRouter.notificationEditUrl(templateId, this.$scope.courseId, this.notificationGridModel.filter.businessUnitId));\r\n break;\r\n }\r\n };\r\n VhsNotificationTemplateController.prototype.recipientsTagsToArray = function (recipientsTags) {\r\n return recipientsTags\r\n ? this.user.allBusinessUnits\r\n ? recipientsTags.split(\",\")\r\n : recipientsTags.split(\",\").filter(function (value) { return value != \"Global admins\"; })\r\n : [];\r\n };\r\n VhsNotificationTemplateController.prototype.onBusinessUnitChange = function () {\r\n this.notificationGridModel.loadPage(0);\r\n };\r\n VhsNotificationTemplateController.prototype.setActiveProperty = function (index, notificationTemplate, active) {\r\n var _this = this;\r\n if (!active) {\r\n this.dialogService.confirm(\"Notification will be deactivated. Continue?\", {\r\n title: \"Deactivate\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n if (_this.isCourse) {\r\n _this.notificationService.deactivateCourseTemplate(notificationTemplate.id, _this.$scope.courseId, ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE])\r\n .then(function () { return _this.notificationGridModel.loadPage(0); });\r\n }\r\n else {\r\n _this.setActivePropertyHelper(index, notificationTemplate, active);\r\n }\r\n });\r\n }\r\n else {\r\n this.setActivePropertyHelper(index, notificationTemplate, active);\r\n }\r\n };\r\n VhsNotificationTemplateController.prototype.setActivePropertyHelper = function (index, notificationTemplate, active) {\r\n var _this = this;\r\n this.notificationService.setActiveProperty(notificationTemplate.id, notificationTemplate.version, active, this.notificationGridModel.filter.businessUnitId, this.$scope.courseId)\r\n .then(function (result) {\r\n _this.notificationGridModel.entries[index] = result;\r\n });\r\n };\r\n VhsNotificationTemplateController.prototype.removeNotificationTemplateDetails = function (notificationTemplateId) {\r\n var _this = this;\r\n this.notificationTemplateId = this.$routeParams[NotificationTemplatesRouter_1.NotificationTemplatesRouter.NOTIFICATION_TEMPLATE_ID_PARAM];\r\n this.businessUnitIdForRevert = this.$routeParams[NotificationTemplatesRouter_1.NotificationTemplatesRouter.NOTIFICATION_BUSINESS_UNIT_PARAM];\r\n if (notificationTemplateId) {\r\n this.notificationService.getNotificationTemplateDetailsForRevert(notificationTemplateId)\r\n .then(function (result) {\r\n _this.notificationTemplateDetailsForRevert = result;\r\n if (result.businessUnitId) {\r\n _this.businessUnitNameForRevert = result.businessUnitName;\r\n }\r\n _this.notificationService.getUsageRecipientsTags(result.id)\r\n .then(function (recipientsTags) {\r\n if (recipientsTags && recipientsTags.length !== 0) {\r\n _this.recipientListForRevert.recipientIds = recipientsTags;\r\n }\r\n });\r\n _this.notificationService.getUsageCCRecipientsTags(result.id)\r\n .then(function (ccRecipientsTags) {\r\n if (ccRecipientsTags && ccRecipientsTags.length !== 0) {\r\n _this.ccRecipientListForRevert.recipientIds = ccRecipientsTags;\r\n }\r\n });\r\n _this.dialogService.notificationConfirm({\r\n title: \"Revert to default\",\r\n hideCancelButton: false,\r\n notificationTemplateDetails: _this.notificationTemplateDetailsForRevert,\r\n recipientList: _this.recipientListForRevert,\r\n ccRecipientList: _this.ccRecipientListForRevert\r\n })\r\n .then(function () {\r\n _this.notificationService.removeNotificationTemplateDetails(notificationTemplateId).then(function () {\r\n INotifier_1.notifier.success(\"Notification template has been removed\");\r\n _this.notificationGridModel.loadPage(0);\r\n });\r\n });\r\n });\r\n }\r\n else {\r\n this.$location.url(this.notificationTemplatesRouter.indexUrl());\r\n }\r\n };\r\n VhsNotificationTemplateController.prototype.isAbleToRevert = function (notificationTemplate) {\r\n if (notificationTemplate.notificationTemplateScope !== 'DEFAULT') {\r\n if (this.notificationEventGroupKey == NotificationEventGroupKey_1.NotificationEventGroupKey.SYSTEM)\r\n if (this.notificationGridModel.filter.businessUnitId == undefined) {\r\n return notificationTemplate.notificationTemplateScope == \"SYSTEM\";\r\n }\r\n else {\r\n return notificationTemplate.notificationTemplateScope == \"BUSINESS_UNIT\";\r\n }\r\n else if (this.notificationEventGroupKey == NotificationEventGroupKey_1.NotificationEventGroupKey.COURSE) {\r\n return notificationTemplate.notificationTemplateScope == \"REFERENCE_ENTITY\";\r\n }\r\n }\r\n };\r\n VhsNotificationTemplateController.prototype.isEventHidden = function (eventKey) {\r\n return NotificationEventKey_1.systemEvents.indexOf(eventKey) != -1 && (!this.hasAllBusinessUnits || this.isCourse || this.notificationGridModel.filter.businessUnitId)\r\n || NotificationEventKey_1.hiddenEvents.indexOf(eventKey) != -1;\r\n };\r\n VhsNotificationTemplateController.prototype.showRevertButton = function (notification) {\r\n return notification.active\r\n && notification.notificationTemplateScope != NotificationTemplatesScope_1.NotificationTemplatesScope[NotificationTemplatesScope_1.NotificationTemplatesScope.DEFAULT]\r\n && (this.$scope.courseId == null || notification.notificationTemplateScope == NotificationTemplatesScope_1.NotificationTemplatesScope[NotificationTemplatesScope_1.NotificationTemplatesScope.REFERENCE_ENTITY])\r\n && (this.notificationGridModel.filter.businessUnitId == null || notification.notificationTemplateScope == NotificationTemplatesScope_1.NotificationTemplatesScope[NotificationTemplatesScope_1.NotificationTemplatesScope.BUSINESS_UNIT]);\r\n };\r\n VhsNotificationTemplateController.prototype.hideActiveButton = function (notification) {\r\n var self = this.$scope.courseId != null && notification.notificationTemplateScope == NotificationTemplatesScope_1.NotificationTemplatesScope[NotificationTemplatesScope_1.NotificationTemplatesScope.REFERENCE_ENTITY]\r\n || this.notificationGridModel.filter.businessUnitId != null && notification.notificationTemplateScope == NotificationTemplatesScope_1.NotificationTemplatesScope[NotificationTemplatesScope_1.NotificationTemplatesScope.BUSINESS_UNIT]\r\n || this.$scope.courseId == null && this.notificationGridModel.filter.businessUnitId == null && notification.notificationTemplateScope == NotificationTemplatesScope_1.NotificationTemplatesScope[NotificationTemplatesScope_1.NotificationTemplatesScope.SYSTEM];\r\n return !self || notification.active;\r\n };\r\n VhsNotificationTemplateController.prototype.showDeactivateButton = function (notification) {\r\n return notification.active && (!notification.disabledParent || notification.notificationTemplateScope == NotificationTemplatesScope_1.NotificationTemplatesScope[NotificationTemplatesScope_1.NotificationTemplatesScope.DEFAULT]);\r\n };\r\n VhsNotificationTemplateController.prototype.change = function () {\r\n this.notificationGridModel.loadPage(0);\r\n };\r\n VhsNotificationTemplateController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n NotificationService_1.NotificationService.NAME,\r\n NotificationTemplatesRouter_1.NotificationTemplatesRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n \"$routeParams\"\r\n ];\r\n return VhsNotificationTemplateController;\r\n})();\r\nexports.VhsNotificationTemplateController = VhsNotificationTemplateController;\r\nfunction VhsNotificationTemplateDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsNotificationTemplateController,\r\n scope: {\r\n notificationType: \"@\",\r\n courseId: \"=?\"\r\n },\r\n templateUrl: url.template(\"components/vhs-notification-template.html\")\r\n };\r\n}\r\nexports.VhsNotificationTemplateDirectiveFactory = VhsNotificationTemplateDirectiveFactory;\r\nVhsNotificationTemplateDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../auth/AuthService\":18,\"../courses/CourseService\":211,\"../notificationTemplates/NotificationService\":360,\"../notificationTemplates/model/NotificationEventKey\":361,\"../notificationTemplates/model/NotificationTemplatesScope\":362,\"../urls/CoursesRouter\":468,\"../urls/NotificationTemplatesRouter\":482,\"../utils/UrlService\":528,\"./NotificationEventGroupKey\":76,\"./dialog/DialogService\":166}],132:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar RichTextEditorDirective_1 = require(\"./richtext/RichTextEditorDirective\");\r\nvar NotificationTemplatesRouter_1 = require(\"../urls/NotificationTemplatesRouter\");\r\nvar NotificationService_1 = require(\"../notificationTemplates/NotificationService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar NotificationEventKey_1 = require(\"../notificationTemplates/model/NotificationEventKey\");\r\nvar VhsNotificationTemplateEditController = (function () {\r\n function VhsNotificationTemplateEditController($scope, $location, $routeParams, notificationService, authManager, authRedirect, notificationTemplatesRouter, courseRouter, dialogService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.notificationService = notificationService;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.notificationTemplatesRouter = notificationTemplatesRouter;\r\n this.courseRouter = courseRouter;\r\n this.dialogService = dialogService;\r\n this.errorMessage = \"\";\r\n this.recipientList = { recipientIds: [] };\r\n this.ccRecipientList = { recipientIds: [] };\r\n this.businessUnitName = \"All\";\r\n this.toolbar = [[], ['bold', 'italics', 'underline', 'strikeThrough', RichTextEditorDirective_1.RichTextEditorController.TA_FONT_COLOR, RichTextEditorDirective_1.RichTextEditorController.TA_BACKGROUND_FONT_COLOR],\r\n ['ul', 'ol', 'indent', 'outdent', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],\r\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote'], [],\r\n ['redo', 'undo', 'clear', RichTextEditorDirective_1.RichTextEditorController.TA_FULLSCREEN_BUTTON, 'html']];\r\n this.recipientListForRevert = { recipientIds: [] };\r\n this.ccRecipientListForRevert = { recipientIds: [] };\r\n this.businessUnitNameForRevert = \"All\";\r\n this.variable = \"\";\r\n $scope.vm = this;\r\n this.notificationTemplateId = $routeParams[NotificationTemplatesRouter_1.NotificationTemplatesRouter.NOTIFICATION_TEMPLATE_ID_PARAM];\r\n this.businessUnitId = $routeParams[NotificationTemplatesRouter_1.NotificationTemplatesRouter.NOTIFICATION_BUSINESS_UNIT_PARAM];\r\n if (!this.authManager.isAuthenticated()) {\r\n authRedirect.redirectToLogOn();\r\n }\r\n if (this.notificationTemplateId) {\r\n this.notificationService.getNotificationTemplateDetailsById(this.notificationTemplateId)\r\n .then(function (result) {\r\n _this.notificationTemplateDetails = result;\r\n if (result.businessUnitId) {\r\n _this.businessUnitName = result.businessUnitName;\r\n }\r\n _this.notificationService.getUsageRecipientsTags(result.id)\r\n .then(function (recipientsTags) {\r\n if (recipientsTags && recipientsTags.length !== 0) {\r\n _this.recipientList.recipientIds = recipientsTags;\r\n }\r\n });\r\n _this.notificationService.getUsageCCRecipientsTags(result.id)\r\n .then(function (ccRecipientsTags) {\r\n if (ccRecipientsTags && ccRecipientsTags.length !== 0) {\r\n _this.ccRecipientList.recipientIds = ccRecipientsTags;\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n this.redirectIndexPageByNotificationType();\r\n }\r\n }\r\n VhsNotificationTemplateEditController.prototype.getAvailableRecipientsTags = function () {\r\n return \"/api/notificationTemplates/\" + this.notificationTemplateDetails.id + \"/available/recipients\";\r\n };\r\n VhsNotificationTemplateEditController.prototype.inactiveProperty = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Notification will be deactivated. Continue?\", {\r\n title: \"Deactivate\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n if (!!_this.$scope.courseId) {\r\n _this.notificationService.deactivateCourseTemplate(_this.notificationTemplateDetails.id, _this.$scope.courseId, ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE])\r\n .then(function () { return _this.redirectIndexPageByNotificationType(); });\r\n }\r\n else {\r\n _this.notificationService.setActiveProperty(_this.notificationTemplateDetails.id, _this.notificationTemplateDetails.version, false)\r\n .then(function () {\r\n _this.redirectIndexPageByNotificationType();\r\n });\r\n }\r\n });\r\n };\r\n VhsNotificationTemplateEditController.prototype.getVariableTags = function () {\r\n return this.notificationTemplateDetails.variablesTags.split(VhsNotificationTemplateEditController.SEPARATOR);\r\n };\r\n VhsNotificationTemplateEditController.prototype.addVariable = function () {\r\n if (this.variable) {\r\n this.variable = '${' + this.variable + '}';\r\n if (document.activeElement.nodeName == 'INPUT') {\r\n this.thisElement = angular.element($('#subjectField'));\r\n $(this.thisElement).focus();\r\n var startPos = $(this.thisElement).prop('selectionStart');\r\n var value = $(this.thisElement).val();\r\n var newValue = value.substring(0, startPos) + this.variable + value.substring(startPos, value.length);\r\n this.variable = '';\r\n $(this.thisElement).val(newValue);\r\n }\r\n else {\r\n var sel, range;\r\n sel = window.getSelection();\r\n if (sel.getRangeAt && sel.rangeCount) {\r\n range = sel.getRangeAt(0);\r\n range.insertNode(document.createTextNode(this.variable));\r\n this.variable = '';\r\n return sel.getRangeAt(0);\r\n }\r\n }\r\n }\r\n };\r\n VhsNotificationTemplateEditController.prototype.checkSendReminders = function () {\r\n function check(item) {\r\n return item <= 90 && item > 0 && item[0] !== '0';\r\n }\r\n var sendReminders = (this.notificationTemplateDetails.sendReminders).split(VhsNotificationTemplateEditController.SEPARATOR);\r\n var pattern = /^[1-9][0-9]*(,[1-9][0-9]*){0,13}$/;\r\n if (sendReminders.length > 14 || !pattern.test(this.notificationTemplateDetails.sendReminders)) {\r\n this.errorMessage = String(\"The field can consist of 1 to :count numbers separated by a comma\").replace(\":count\", \"13\");\r\n return true;\r\n }\r\n if (!sendReminders.every(check)) {\r\n this.errorMessage = \"You can enter integers from 1 to 90\";\r\n return true;\r\n }\r\n this.notificationTemplateDetails.sendReminders = sendReminders.sort(function (a, b) {\r\n return parseInt(a) - parseInt(b);\r\n }).filter(function (item, index) { return sendReminders.indexOf(item) === index; })\r\n .join(VhsNotificationTemplateEditController.SEPARATOR);\r\n return false;\r\n };\r\n VhsNotificationTemplateEditController.prototype.checkSendDelay = function () {\r\n if (this.notificationTemplateDetails.sendDelay < 0 || this.notificationTemplateDetails.sendDelay > 100) {\r\n this.errorMessage = \"You can enter integers from 1 to 100\";\r\n return true;\r\n }\r\n return false;\r\n };\r\n VhsNotificationTemplateEditController.prototype.saveTemplateDetails = function () {\r\n var _this = this;\r\n var templateDetails = {};\r\n if (this.isEventReminder(this.notificationTemplateDetails.notificationTemplateEventId) && this.checkSendReminders()) {\r\n return;\r\n }\r\n if (this.isEventDelayed(this.notificationTemplateDetails.notificationTemplateEventId) && this.checkSendDelay()) {\r\n return;\r\n }\r\n this.errorMessage = \"\";\r\n templateDetails.id = this.notificationTemplateDetails.id;\r\n templateDetails.businessUnitId = this.notificationTemplateDetails.businessUnitId ? this.notificationTemplateDetails.businessUnitId : this.businessUnitId;\r\n templateDetails.notificationTemplateEventId = this.notificationTemplateDetails.notificationTemplateEventId;\r\n templateDetails.recipientsTags = this.recipientList.recipientIds;\r\n templateDetails.ccRecipients = this.ccRecipientList.recipientIds;\r\n templateDetails.subjectTemplate = this.notificationTemplateDetails.subjectTemplate;\r\n templateDetails.messageTemplate = this.notificationTemplateDetails.messageTemplate;\r\n templateDetails.sendReminders = this.notificationTemplateDetails.sendReminders;\r\n templateDetails.sendDelay = this.notificationTemplateDetails.sendDelay;\r\n if (!!this.$scope.courseId) {\r\n templateDetails.referenceObjId = this.$scope.courseId;\r\n templateDetails.referenceObjType = ReferencedObjectType_1.ReferencedObjectType.COURSE;\r\n }\r\n this.notificationService.saveNotificationTemplateDetails(templateDetails)\r\n .then(function (result) {\r\n _this.notificationTemplateDetails = result;\r\n _this.redirectEditPageByNotificationType(result.id, result.businessUnitId);\r\n INotifier_1.notifier.success(\"Notification template has been saved\");\r\n });\r\n };\r\n VhsNotificationTemplateEditController.prototype.removeNotificationTemplateDetails = function () {\r\n var _this = this;\r\n if (this.notificationTemplateId) {\r\n this.notificationService.getNotificationTemplateDetailsForRevert(this.notificationTemplateId)\r\n .then(function (result) {\r\n _this.notificationTemplateDetailsForRevert = result;\r\n if (result.businessUnitId) {\r\n _this.businessUnitNameForRevert = result.businessUnitName;\r\n }\r\n _this.notificationService.getUsageRecipientsTags(result.id)\r\n .then(function (recipientsTags) {\r\n if (recipientsTags && recipientsTags.length !== 0) {\r\n _this.recipientListForRevert.recipientIds = recipientsTags;\r\n }\r\n });\r\n _this.notificationService.getUsageCCRecipientsTags(result.id)\r\n .then(function (ccRecipientsTags) {\r\n if (ccRecipientsTags && ccRecipientsTags.length !== 0) {\r\n _this.ccRecipientListForRevert.recipientIds = ccRecipientsTags;\r\n }\r\n });\r\n _this.dialogService.notificationConfirm({\r\n title: \"Revert to default\",\r\n hideCancelButton: false,\r\n notificationTemplateDetails: _this.notificationTemplateDetailsForRevert,\r\n recipientList: _this.recipientListForRevert,\r\n ccRecipientList: _this.ccRecipientListForRevert\r\n })\r\n .then(function () {\r\n _this.notificationService.removeNotificationTemplateDetails(_this.notificationTemplateId).then(function () {\r\n _this.redirectIndexPageByNotificationType();\r\n INotifier_1.notifier.success(\"Notification template has been removed\");\r\n });\r\n });\r\n });\r\n }\r\n else {\r\n this.$location.url(this.notificationTemplatesRouter.indexUrl());\r\n }\r\n };\r\n VhsNotificationTemplateEditController.prototype.disableSaveButton = function () {\r\n return !this.notificationTemplateDetails.subjectTemplate || !this.notificationTemplateDetails.messageTemplate\r\n || this.recipientList.recipientIds.length === 0\r\n || !this.notificationTemplateDetails.sendReminders && this.isEventReminder(this.notificationTemplateDetails.notificationTemplateEventId);\r\n };\r\n VhsNotificationTemplateEditController.prototype.redirectEditPageByNotificationType = function (templateId, businessUnitId) {\r\n switch (this.$scope.notificationType) {\r\n case \"main\":\r\n this.$location.url(this.notificationTemplatesRouter.editUrl(templateId, businessUnitId));\r\n break;\r\n case \"course\":\r\n this.$location.url(this.courseRouter.notificationEditUrl(templateId, this.$scope.courseId, businessUnitId));\r\n break;\r\n }\r\n };\r\n VhsNotificationTemplateEditController.prototype.redirectIndexPageByNotificationType = function () {\r\n switch (this.$scope.notificationType) {\r\n case \"main\":\r\n this.$location.url(this.notificationTemplatesRouter.indexUrl());\r\n break;\r\n case \"course\":\r\n this.$location.url(this.courseRouter.notificationDetailsUrl(this.$scope.courseId));\r\n break;\r\n }\r\n };\r\n VhsNotificationTemplateEditController.prototype.isEventReminder = function (eventId) {\r\n return NotificationEventKey_1.reminders.indexOf(eventId) != -1;\r\n };\r\n VhsNotificationTemplateEditController.prototype.isEventDelayed = function (eventId) {\r\n return NotificationEventKey_1.delayedEvents.indexOf(eventId) != -1;\r\n };\r\n VhsNotificationTemplateEditController.NAME = \"notificationTemplates.NotificationCreateEditController\";\r\n VhsNotificationTemplateEditController.SEPARATOR = \",\";\r\n VhsNotificationTemplateEditController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n \"$routeParams\",\r\n NotificationService_1.NotificationService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n NotificationTemplatesRouter_1.NotificationTemplatesRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return VhsNotificationTemplateEditController;\r\n})();\r\nexports.VhsNotificationTemplateEditController = VhsNotificationTemplateEditController;\r\nfunction VhsNotificationTemplateEditDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsNotificationTemplateEditController,\r\n scope: {\r\n notificationType: \"@\",\r\n courseId: \"=?\",\r\n },\r\n templateUrl: url.template(\"components/vhs-notification-template-edit.html\")\r\n };\r\n}\r\nexports.VhsNotificationTemplateEditDirectiveFactory = VhsNotificationTemplateEditDirectiveFactory;\r\nVhsNotificationTemplateEditDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../notificationTemplates/NotificationService\":360,\"../notificationTemplates/model/NotificationEventKey\":361,\"../urls/CoursesRouter\":468,\"../urls/NotificationTemplatesRouter\":482,\"../utils/UrlService\":528,\"./dialog/DialogService\":166,\"./richtext/RichTextEditorDirective\":177}],133:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SectionPassingType_1 = require(\"../courses/models/SectionPassingType\");\r\nvar SectionProgressStatus_1 = require(\"../courses/models/SectionProgressStatus\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar VhsOverallProgressController = (function () {\r\n function VhsOverallProgressController($scope) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.courseSectionsWithProgress = [];\r\n this.sectionProgressBySectionId = new Map();\r\n this.percentOfCompletedOptionalModulesLabel = 0;\r\n this.percentOfCompletedMandatoryModulesLabel = 0;\r\n this.percentOfCompletedElectiveModulesLabel = 0;\r\n this.countOfOptional = 0;\r\n this.countOfMandatory = 0;\r\n this.requiredElectivesNumber = 0;\r\n this.countOfOptionalCompleted = 0;\r\n this.countOfMandatoryCompleted = 0;\r\n this.countOfElectiveCompleted = 0;\r\n this.optionalModulesNames = [];\r\n this.mandatoryModulesNames = [];\r\n this.electiveModulesNames = [];\r\n this.$scope.vm = this;\r\n this.course = this.$scope.course;\r\n this.viewMode = this.$scope.viewMode;\r\n this.courseSections = this.$scope.courseSections;\r\n this.requiredElectivesNumber = this.course.requiredElectivesNumber;\r\n if (this.viewMode === \"progress\") {\r\n this.sectionProgresses = this.$scope.sectionProgresses;\r\n if (this.sectionProgresses) {\r\n this.groupSectionProgresses();\r\n this.updateSectionsStatuses();\r\n this.filterActiveAndWithProgressSections();\r\n }\r\n this.$scope.$watchCollection(\"sectionProgresses\", (function (newValue, oldValue) {\r\n if (newValue == oldValue) {\r\n return;\r\n }\r\n _this.sectionProgresses = _this.$scope.sectionProgresses;\r\n if (_this.sectionProgresses) {\r\n _this.groupSectionProgresses();\r\n _this.updateSectionsStatuses();\r\n _this.filterActiveAndWithProgressSections();\r\n }\r\n else {\r\n _this.resetSectionStatuses();\r\n }\r\n }));\r\n }\r\n else if (this.viewMode === \"course\") {\r\n this.courseSectionsWithProgress = this.courseSections;\r\n }\r\n }\r\n VhsOverallProgressController.prototype.groupSectionProgresses = function () {\r\n for (var _i = 0, _a = this.sectionProgresses; _i < _a.length; _i++) {\r\n var sectionProgress = _a[_i];\r\n this.sectionProgressBySectionId.set(sectionProgress.sectionId, sectionProgress);\r\n }\r\n };\r\n VhsOverallProgressController.prototype.updateSectionsStatuses = function () {\r\n for (var _i = 0, _a = this.courseSections; _i < _a.length; _i++) {\r\n var section = _a[_i];\r\n var sectionProgress = this.sectionProgressBySectionId.get(section.section.id);\r\n section.section.status = sectionProgress ? sectionProgress.status : null;\r\n }\r\n };\r\n VhsOverallProgressController.prototype.resetSectionStatuses = function () {\r\n for (var _i = 0, _a = this.courseSections; _i < _a.length; _i++) {\r\n var section = _a[_i];\r\n section.section.status = null;\r\n }\r\n this.sectionProgressBySectionId.clear();\r\n };\r\n VhsOverallProgressController.prototype.filterActiveAndWithProgressSections = function () {\r\n var _this = this;\r\n var shownStatuses = [SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED], SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]];\r\n this.courseSectionsWithProgress = this.courseSections.filter(function (s) { return s.section.isActive\r\n || (!s.section.isActive && _this.sectionProgressBySectionId.has(s.section.id)\r\n && shownStatuses.indexOf(_this.sectionProgressBySectionId.get(s.section.id).status) >= 0); });\r\n };\r\n VhsOverallProgressController.prototype.getCountOfCompletedOptionalModulesLabel = function () {\r\n var countOfOptionalCompleted = 0;\r\n var countOfOptional = 0;\r\n this.optionalModulesNames = [];\r\n for (var _i = 0, _a = this.courseSectionsWithProgress; _i < _a.length; _i++) {\r\n var section = _a[_i];\r\n if (!section.section.parentId && section.section.sectionPassingType == SectionPassingType_1.SectionPassingType[SectionPassingType_1.SectionPassingType.OPTIONAL]) {\r\n if (section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED] ||\r\n section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]) {\r\n countOfOptionalCompleted++;\r\n }\r\n countOfOptional++;\r\n this.optionalModulesNames.push(section.section.name);\r\n }\r\n }\r\n this.percentOfCompletedOptionalModulesLabel = this.getPercentCompletedModules(countOfOptionalCompleted, countOfOptional);\r\n this.countOfOptionalCompleted = countOfOptionalCompleted;\r\n this.countOfOptional = countOfOptional;\r\n return StringBuilder_1.StringBuilder.interpolate(\":completedCount of :allModulesCount\")\r\n .with(\":completedCount\", countOfOptionalCompleted)\r\n .with(\":allModulesCount\", countOfOptional)\r\n .build();\r\n };\r\n VhsOverallProgressController.prototype.getCountOfCompletedMandatoryModulesLabel = function () {\r\n var countOfMandatoryCompleted = 0;\r\n var countOfMandatory = 0;\r\n this.mandatoryModulesNames = [];\r\n for (var _i = 0, _a = this.courseSectionsWithProgress; _i < _a.length; _i++) {\r\n var section = _a[_i];\r\n if (!section.section.parentId && section.section.sectionPassingType == SectionPassingType_1.SectionPassingType[SectionPassingType_1.SectionPassingType.MANDATORY]) {\r\n if (section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED] ||\r\n section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]) {\r\n countOfMandatoryCompleted++;\r\n }\r\n countOfMandatory++;\r\n this.mandatoryModulesNames.push(section.section.name);\r\n }\r\n }\r\n this.percentOfCompletedMandatoryModulesLabel = this.getPercentCompletedModules(countOfMandatoryCompleted, countOfMandatory);\r\n this.countOfMandatoryCompleted = countOfMandatoryCompleted;\r\n this.countOfMandatory = countOfMandatory;\r\n return StringBuilder_1.StringBuilder.interpolate(\":completedCount of :allModulesCount\")\r\n .with(\":completedCount\", countOfMandatoryCompleted)\r\n .with(\":allModulesCount\", countOfMandatory)\r\n .build();\r\n };\r\n VhsOverallProgressController.prototype.getCountOfCompletedElectiveModulesLabel = function () {\r\n var countOfElectiveCompleted = 0;\r\n var countOfElective = 0;\r\n this.electiveModulesNames = [];\r\n for (var _i = 0, _a = this.courseSectionsWithProgress; _i < _a.length; _i++) {\r\n var section = _a[_i];\r\n if (!section.section.parentId && section.section.sectionPassingType == SectionPassingType_1.SectionPassingType[SectionPassingType_1.SectionPassingType.ELECTIVE]) {\r\n if (section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED] ||\r\n section.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]) {\r\n countOfElectiveCompleted++;\r\n }\r\n countOfElective++;\r\n this.electiveModulesNames.push(section.section.name);\r\n }\r\n }\r\n this.percentOfCompletedElectiveModulesLabel = this.getPercentCompletedModules(countOfElectiveCompleted, this.requiredElectivesNumber);\r\n this.countOfElectiveCompleted = countOfElectiveCompleted;\r\n return StringBuilder_1.StringBuilder.interpolate(\":completedCount of :allModulesCount\")\r\n .with(\":completedCount\", countOfElectiveCompleted)\r\n .with(\":allModulesCount\", this.requiredElectivesNumber)\r\n .build();\r\n };\r\n VhsOverallProgressController.prototype.getOverallCourseProgress = function () {\r\n if (this.courseSections.length == 0) {\r\n return 0;\r\n }\r\n else if ((this.requiredElectivesNumber + this.countOfMandatory) === 0) {\r\n var countHeadSections = this.courseSections.filter(function (section) { return !section.parentId; }).length;\r\n return Math.round((this.countOfElectiveCompleted + this.countOfOptionalCompleted) / countHeadSections * 100);\r\n }\r\n return Math.round((Math.min(this.countOfElectiveCompleted, this.requiredElectivesNumber)\r\n + this.countOfMandatoryCompleted) / (this.requiredElectivesNumber + this.countOfMandatory) * 100);\r\n };\r\n VhsOverallProgressController.prototype.getOverallCourseProgressLabel = function () {\r\n return StringBuilder_1.StringBuilder.interpolate(\":completedCount of :allModulesCount\")\r\n .with(\":completedCount\", (this.countOfMandatoryCompleted + (Math.min(this.countOfElectiveCompleted, this.requiredElectivesNumber))))\r\n .with(\":allModulesCount\", (this.countOfMandatory + this.requiredElectivesNumber))\r\n .build();\r\n };\r\n VhsOverallProgressController.prototype.getPercentCompletedModules = function (completed, total) {\r\n var result = 0;\r\n if (total === 0) {\r\n result = 100;\r\n }\r\n else {\r\n if (completed && total)\r\n result = Math.round((completed / total) * 100);\r\n if (result > 100)\r\n result = 100;\r\n }\r\n return result;\r\n };\r\n VhsOverallProgressController.$inject = [\r\n \"$scope\"\r\n ];\r\n return VhsOverallProgressController;\r\n})();\r\nexports.VhsOverallProgressController = VhsOverallProgressController;\r\nfunction VhsOverallProgressDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsOverallProgressController,\r\n scope: {\r\n course: \"=\",\r\n courseSections: \"=\",\r\n sectionProgresses: \"=?\",\r\n viewMode: \"@\"\r\n },\r\n templateUrl: url.template(\"components/vhs-overall-progress.html\")\r\n };\r\n}\r\nexports.VhsOverallProgressDirectiveFactory = VhsOverallProgressDirectiveFactory;\r\nVhsOverallProgressDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../courses/models/SectionPassingType\":226,\"../courses/models/SectionProgressStatus\":227,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528}],134:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CommonService_1 = require(\"../common/CommonService\");\r\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar LearningPathService_1 = require(\"../learningPaths/LearningPathService\");\r\nvar UserRole_1 = require(\"../users/models/UserRole\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar IVhsParticipantsController = (function () {\r\n function IVhsParticipantsController($scope, $http, $location, url, commonService, usersRouter, homeRouter, coursesRouter, learningPathRouter, authApi, userService, courseService, learningPathService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.url = url;\r\n this.commonService = commonService;\r\n this.usersRouter = usersRouter;\r\n this.homeRouter = homeRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathRouter = learningPathRouter;\r\n this.authApi = authApi;\r\n this.userService = userService;\r\n this.courseService = courseService;\r\n this.learningPathService = learningPathService;\r\n $scope.vm = this;\r\n this.$scope.participantsGridModel.filter.status = \"\";\r\n authApi.getCurrentUser().then(function (user) {\r\n _this.currentUserBusinessUnitIds = user.businessUnits;\r\n });\r\n if (this.$scope.modelId) {\r\n if (this.$scope.modelType === HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES) {\r\n this.courseService.get(this.$scope.modelId).then(function (course) {\r\n _this.userService.getUserGroupsForFilter(course.businessUnitId).then(function (groups) { return _this.userGroups = groups; });\r\n });\r\n }\r\n else {\r\n this.learningPathService.get(this.$scope.modelId).then(function (learningPath) {\r\n _this.userService.getUserGroupsForFilter(learningPath.businessUnitId).then(function (groups) {\r\n _this.userGroups = groups;\r\n });\r\n });\r\n }\r\n }\r\n else {\r\n if (this.$scope.modelType === HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES) {\r\n this.userService.getUserGroupsForFilter(null).then(function (groups) {\r\n return _this.userGroups = groups;\r\n });\r\n }\r\n else {\r\n this.userService.getUserGroupsForFilter(null).then(function (groups) {\r\n _this.userGroups = groups;\r\n });\r\n }\r\n }\r\n if (!this.$scope.isProgressPage) {\r\n userService.getCurrentUserBusinessRole()\r\n .then(function (businessRole) {\r\n if (businessRole === UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER]) {\r\n learningPathService.isExistParticipantsInfo(\"attendeeManager\")\r\n .then(function (isExist) {\r\n _this.isExistLearningPaths = isExist;\r\n if (!_this.isExistLearningPaths) {\r\n _this.$scope.modelType = HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES;\r\n }\r\n });\r\n }\r\n else if (businessRole === UserRole_1.UserRole[UserRole_1.UserRole.INSTRUCTOR]) {\r\n learningPathService.isExistParticipantsInfo(\"instructor\")\r\n .then(function (isExist) {\r\n _this.isExistLearningPaths = isExist;\r\n if (!_this.isExistLearningPaths) {\r\n _this.$scope.modelType = HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n IVhsParticipantsController.prototype.initGroupOption = function () {\r\n if ($('#groupFilterSelect').children('option:first-child').is(':selected')) {\r\n $(\"#groupFilterSelect option:checked\").css(\"opacity\", \"0.6\");\r\n $(\"#groupFilterSelect\").css(\"opacity\", \"0.6\");\r\n $(\"#groupFilterSelect option:not(:checked)\").css(\"opacity\", \"0.6\");\r\n }\r\n else {\r\n $(\"#groupFilterSelect option:checked\").css(\"opacity\", \"\");\r\n $(\"#groupFilterSelect\").css(\"opacity\", \"\");\r\n $(\"#groupFilterSelect option:not(:checked)\").css(\"opacity\", \"\");\r\n }\r\n };\r\n IVhsParticipantsController.prototype.updateParticipantsObject = function () {\r\n var path = this.commonService.updateURLParameter(this.$location.path(), HomeRouter_1.HomeRouter.PARTICIPANTS_PARAM, this.$scope.modelType);\r\n if (this.$scope.isProgressPage) {\r\n path = this.commonService.updateURLParameter(path, HomeRouter_1.HomeRouter.PARTICIPANTS_GROUP_PARAM, 1);\r\n }\r\n this.$location.url(path);\r\n };\r\n IVhsParticipantsController.prototype.hasUserSameBusinessUnits = function (arr) {\r\n if (this.currentUserBusinessUnitIds) {\r\n var s_1 = false;\r\n this.currentUserBusinessUnitIds.forEach(function (n) {\r\n if (!s_1) {\r\n s_1 = arr.some(function (m) { return m === n; });\r\n }\r\n });\r\n return s_1;\r\n }\r\n return true;\r\n };\r\n IVhsParticipantsController.prototype.getProgressUrl = function (objectId, learnerId) {\r\n if (this.$scope.modelType === HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES) {\r\n return this.coursesRouter.progressUrlForUser(objectId, learnerId);\r\n }\r\n else {\r\n return this.learningPathRouter.progressUrlForUser(objectId, learnerId);\r\n }\r\n };\r\n IVhsParticipantsController.prototype.getShortObjectName = function (name) {\r\n return name.length > 40 ? name.substring(0, 40) + '...' : name;\r\n };\r\n IVhsParticipantsController.prototype.getFormatDate = function (date) {\r\n if (date == null) {\r\n return \"\";\r\n }\r\n return Moment_1.Moment.isValidDate(date);\r\n };\r\n IVhsParticipantsController.prototype.applyFilter = function () {\r\n this.$scope.participantsGridModel.filter.startedFrom = Moment_1.Moment.textToJavaDate(this.$scope.participantsGridModel.filter.startedOnText);\r\n this.$scope.participantsGridModel.filter.startedTo = Moment_1.Moment.textToJavaDate(this.$scope.participantsGridModel.filter.startedToText);\r\n this.$scope.participantsGridModel.filter.completedFrom = Moment_1.Moment.textToJavaDate(this.$scope.participantsGridModel.filter.completedOnText);\r\n this.$scope.participantsGridModel.filter.completedTo = Moment_1.Moment.textToJavaDate(this.$scope.participantsGridModel.filter.completedToText);\r\n this.initGroupOption();\r\n this.$scope.participantsGridModel.loadCurrentPage();\r\n };\r\n IVhsParticipantsController.prototype.clearFilters = function () {\r\n this.$scope.participantsGridModel.filter.learnerName = null;\r\n this.$scope.participantsGridModel.filter.objectName = null;\r\n this.$scope.participantsGridModel.filter.startedOnText = null;\r\n this.$scope.participantsGridModel.filter.startedToText = null;\r\n this.$scope.participantsGridModel.filter.completedOnText = null;\r\n this.$scope.participantsGridModel.filter.completedToText = null;\r\n this.$scope.participantsGridModel.filter.startedFrom = null;\r\n this.$scope.participantsGridModel.filter.startedTo = null;\r\n this.$scope.participantsGridModel.filter.completedFrom = null;\r\n this.$scope.participantsGridModel.filter.completedTo = null;\r\n this.$scope.participantsGridModel.filter.status = null;\r\n this.$scope.participantsGridModel.filter.group = null;\r\n this.$scope.participantsGridModel.loadPage(0);\r\n $(\"#groupFilterSelect option:checked\").css(\"opacity\", \"0.6\");\r\n $(\"#groupFilterSelect\").css(\"opacity\", \"0.6\");\r\n $(\"#groupFilterSelect option:not(:checked)\").css(\"opacity\", \"0.6\");\r\n };\r\n IVhsParticipantsController.prototype.decodeStatus = function (status) {\r\n var result = status;\r\n switch (status) {\r\n case \"NOT_STARTED\": {\r\n result = \"NOT_STARTED\";\r\n break;\r\n }\r\n case \"STARTED\": {\r\n result = \"STARTED\";\r\n break;\r\n }\r\n case \"COMPLETED\": {\r\n result = \"COMPLETED\";\r\n break;\r\n }\r\n case \"EXPIRED\": {\r\n result = \"COMPLETED\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n IVhsParticipantsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n CommonService_1.CommonService.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n HomeRouter_1.HomeRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n AuthService_1.AuthService.NAME,\r\n UserService_1.UserService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n LearningPathService_1.LearningPathService.NAME\r\n ];\r\n return IVhsParticipantsController;\r\n})();\r\nexports.IVhsParticipantsController = IVhsParticipantsController;\r\nfunction VhsParticipantsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: IVhsParticipantsController,\r\n scope: {\r\n participantsGridModel: \"=vhsParticipantsGridModel\",\r\n modelType: \"=vhsModelType\",\r\n modelId: \"=?vhsModelId\",\r\n isProgressPage: \"=?vhsProgressPage\"\r\n },\r\n templateUrl: url.template(\"components/vhs-participants.html\")\r\n };\r\n}\r\nexports.VhsParticipantsDirectiveFactory = VhsParticipantsDirectiveFactory;\r\nVhsParticipantsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../auth/AuthService\":18,\"../common/CommonService\":53,\"../courses/CourseService\":211,\"../learningPaths/LearningPathService\":320,\"../urls/CoursesRouter\":468,\"../urls/HomeRouter\":473,\"../urls/LearningPathsRouter\":477,\"../urls/UsersRouter\":493,\"../users/UserService\":499,\"../users/models/UserRole\":507,\"../utils/Moment\":518,\"../utils/UrlService\":528}],135:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CommonService_1 = require(\"../common/CommonService\");\r\nvar VhsParticipationFormEditingController = (function () {\r\n function VhsParticipationFormEditingController($scope, commonService) {\r\n this.$scope = $scope;\r\n this.commonService = commonService;\r\n this.isParticipationFormSpecified = false;\r\n this.disableParticipationForm = false;\r\n $scope.vm = this;\r\n this.reloadParticipationForm();\r\n }\r\n VhsParticipationFormEditingController.prototype.reloadParticipationForm = function (forced) {\r\n if (forced || !this.participationForm) {\r\n if (this.$scope.objectId) {\r\n this.loadParticipationForm();\r\n if (this.$scope.objectType == 'LEARNING_PATH') {\r\n this.loadRelatedParticipationForms();\r\n }\r\n }\r\n else {\r\n this.participationForm = { fields: [] };\r\n this.$scope['participationFormForm'].$setPristine();\r\n }\r\n }\r\n };\r\n VhsParticipationFormEditingController.prototype.saveParticipationForm = function () {\r\n var _this = this;\r\n if (this.$scope.objectId) {\r\n this.disableParticipationForm = true;\r\n this.commonService.saveParticipationForm(this.$scope.objectId, this.$scope.objectType, this.$scope.version, this.participationForm)\r\n .then(function (result) {\r\n _this.participationForm = angular.copy(result);\r\n _this.isParticipationFormSpecified = _this.participationForm.fields.length > 0;\r\n INotifier_1.notifier.success(\"Participation form fields have been saved\");\r\n _this.appendEmptyField();\r\n _this.$scope['participationFormForm'].$setPristine();\r\n })\r\n .then(function () {\r\n if (_this.$scope.objectType == 'LEARNING_PATH') {\r\n _this.loadRelatedParticipationForms();\r\n }\r\n })\r\n .finally(function () {\r\n _this.disableParticipationForm = false;\r\n });\r\n }\r\n };\r\n VhsParticipationFormEditingController.prototype.onChangeFieldKey = function () {\r\n if (this.participationForm.fields[this.participationForm.fields.length - 1].fieldKey.trim().length > 0) {\r\n this.appendEmptyField();\r\n }\r\n this.checkFields();\r\n };\r\n VhsParticipationFormEditingController.prototype.appendField = function (key, name) {\r\n this.participationForm.fields.unshift({ fieldKey: key, name: name, errorCode: null });\r\n this.checkFields();\r\n };\r\n VhsParticipationFormEditingController.prototype.appendEmptyField = function () {\r\n this.participationForm.fields.push({ fieldKey: \"\", name: \"\", errorCode: null });\r\n };\r\n VhsParticipationFormEditingController.prototype.checkFields = function () {\r\n var _this = this;\r\n this.participationForm.fields.forEach(function (field) {\r\n field.errorCode = null;\r\n _this.participationForm.errorCode = null;\r\n });\r\n this.participationForm.fields.forEach(function (field) {\r\n _this.participationForm.fields.forEach(function (field2) {\r\n if (field && field2 && field !== field2 && field.fieldKey.toLowerCase() === field2.fieldKey.toLowerCase() && field.fieldKey.length > 0) {\r\n field.errorCode = \"not-unique\";\r\n _this.participationForm.errorCode = \"not-unique\";\r\n }\r\n });\r\n });\r\n };\r\n VhsParticipationFormEditingController.prototype.loadParticipationForm = function () {\r\n var _this = this;\r\n return this.commonService.getParticipationForm(this.$scope.objectId, this.$scope.objectType)\r\n .then(function (result) {\r\n _this.participationForm = angular.copy(result);\r\n _this.isParticipationFormSpecified = _this.participationForm.fields.length > 0;\r\n _this.appendEmptyField();\r\n _this.$scope['participationFormForm'].$setPristine();\r\n return _this.participationForm;\r\n });\r\n };\r\n VhsParticipationFormEditingController.prototype.loadRelatedParticipationForms = function () {\r\n var _this = this;\r\n return this.commonService.getLearningPathParticipationForms(this.$scope.objectId)\r\n .then(function (result) {\r\n return _this.relatedParticipationForms = angular.copy(result);\r\n });\r\n };\r\n VhsParticipationFormEditingController.$inject = [\r\n \"$scope\",\r\n CommonService_1.CommonService.NAME\r\n ];\r\n return VhsParticipationFormEditingController;\r\n})();\r\nexports.VhsParticipationFormEditingController = VhsParticipationFormEditingController;\r\nfunction VhsParticipationFormEditingDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsParticipationFormEditingController,\r\n scope: {\r\n objectId: \"=\",\r\n version: \"=\",\r\n objectType: \"=\"\r\n },\r\n templateUrl: url.template(\"components/vhs-participation-form-editing.html\")\r\n };\r\n}\r\nexports.VhsParticipationFormEditingDirectiveFactory = VhsParticipationFormEditingDirectiveFactory;\r\nVhsParticipationFormEditingDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../common/CommonService\":53,\"../utils/UrlService\":528}],136:[function(require,module,exports){\nvar CommonService_1 = require(\"../common/CommonService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar VhsParticipationFormFillingController = (function () {\r\n function VhsParticipationFormFillingController($scope, $q, commonService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.commonService = commonService;\r\n this.wantToSubmitParticipationForm = true;\r\n this.participationFormDataLoaded = false;\r\n this.participationFormSpecified = false;\r\n this.resultParticipationFormData = {};\r\n $scope.vm = this;\r\n $scope.autoSubmitAllowed = $scope.autoSubmitAllowed != null && $scope.autoSubmitAllowed != undefined\r\n ? $scope.autoSubmitAllowed : false;\r\n $scope.showWantToSubmitOption = $scope.showWantToSubmitOption != null && $scope.showWantToSubmitOption != undefined\r\n ? $scope.showWantToSubmitOption : true;\r\n this.participationFormDataLoaded = false;\r\n this.reloadParticipationFormData()\r\n .then(function () {\r\n _this.initializeParticipationForm();\r\n _this.participationFormDataLoaded = true;\r\n });\r\n }\r\n VhsParticipationFormFillingController.prototype.reloadParticipationFormData = function () {\r\n var _this = this;\r\n var loadParticipationFormDataPromises = [];\r\n loadParticipationFormDataPromises.push(this.commonService.getParticipationForm(this.$scope.objectId, this.$scope.objectType)\r\n .then(function (result) {\r\n _this.participationForm = angular.copy(result);\r\n _this.participationFormSpecified = _this.participationForm.fields.length > 0;\r\n if (!_this.participationFormSpecified && _this.$scope.autoSubmitAllowed) {\r\n _this.submit();\r\n }\r\n }));\r\n if (this.$scope.getParticipationFormData) {\r\n loadParticipationFormDataPromises.push(this.$scope.getParticipationFormData()\r\n .then(function (participationFormData) {\r\n _this.participationFormData = angular.copy(participationFormData);\r\n }));\r\n }\r\n if (this.$scope.getSourceParticipationFormData) {\r\n loadParticipationFormDataPromises.push(this.$scope.getSourceParticipationFormData()\r\n .then(function (sourceParticipationFormData) {\r\n _this.sourceParticipationFormData = angular.copy(sourceParticipationFormData);\r\n }));\r\n }\r\n return this.$q.all(loadParticipationFormDataPromises);\r\n };\r\n VhsParticipationFormFillingController.prototype.initializeParticipationForm = function () {\r\n var _this = this;\r\n this.resultParticipationFormData = {};\r\n this.participationForm.fields.forEach(function (formField) {\r\n _this.resultParticipationFormData[formField.fieldKey] = \"\";\r\n });\r\n if (this.participationFormData) {\r\n this.participationForm.fields.forEach(function (formField) {\r\n if (_this.participationFormData[formField.fieldKey]) {\r\n _this.resultParticipationFormData[formField.fieldKey] = _this.participationFormData[formField.fieldKey];\r\n }\r\n });\r\n }\r\n if (this.sourceParticipationFormData) {\r\n this.participationForm.fields.forEach(function (formField) {\r\n for (var learningPathId in _this.sourceParticipationFormData) {\r\n if (_this.sourceParticipationFormData.hasOwnProperty(learningPathId)\r\n && _this.sourceParticipationFormData[learningPathId] != null\r\n && _this.sourceParticipationFormData[learningPathId] != undefined\r\n && _this.sourceParticipationFormData[learningPathId][formField.fieldKey]\r\n && _this.resultParticipationFormData[formField.fieldKey] == \"\") {\r\n _this.resultParticipationFormData[formField.fieldKey]\r\n = _this.sourceParticipationFormData[learningPathId][formField.fieldKey];\r\n }\r\n }\r\n });\r\n }\r\n };\r\n VhsParticipationFormFillingController.prototype.isParticipationFormValid = function () {\r\n var _this = this;\r\n if (this.wantToSubmitParticipationForm && this.$scope.requireAllFields) {\r\n var formValid = true;\r\n this.participationForm.fields.forEach(function (field) {\r\n if (_this.resultParticipationFormData[field.fieldKey] == \"\") {\r\n formValid = false;\r\n }\r\n });\r\n return formValid;\r\n }\r\n else {\r\n return true;\r\n }\r\n };\r\n VhsParticipationFormFillingController.prototype.submit = function () {\r\n var _this = this;\r\n if (this.$scope.onSubmit) {\r\n this.participationFormDataLoaded = false;\r\n this.$scope.onSubmit(this.wantToSubmitParticipationForm ? this.resultParticipationFormData : null)\r\n .then(function () {\r\n _this.reloadParticipationFormData()\r\n .then(function () {\r\n _this.initializeParticipationForm();\r\n _this.participationFormDataLoaded = true;\r\n });\r\n });\r\n }\r\n };\r\n VhsParticipationFormFillingController.$inject = [\r\n \"$scope\",\r\n \"$q\",\r\n CommonService_1.CommonService.NAME\r\n ];\r\n return VhsParticipationFormFillingController;\r\n})();\r\nexports.VhsParticipationFormFillingController = VhsParticipationFormFillingController;\r\nfunction VhsParticipationFormFillingDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsParticipationFormFillingController,\r\n scope: {\r\n objectId: \"=\",\r\n objectType: \"=\",\r\n requireAllFields: \"=\",\r\n showWantToSubmitOption: \"=?\",\r\n getParticipationFormData: \"=?\",\r\n getSourceParticipationFormData: \"=?\",\r\n onSubmit: \"=?\",\r\n autoSubmitAllowed: \"=?\"\r\n },\r\n templateUrl: url.template(\"components/vhs-participation-form-filling.html\")\r\n };\r\n}\r\nexports.VhsParticipationFormFillingDirectiveFactory = VhsParticipationFormFillingDirectiveFactory;\r\nVhsParticipationFormFillingDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../common/CommonService\":53,\"../utils/UrlService\":528}],137:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar VhsProductItemDetailsController = (function () {\r\n function VhsProductItemDetailsController($scope) {\r\n this.$scope = $scope;\r\n $scope.vm = this;\r\n }\r\n VhsProductItemDetailsController.$inject = [\r\n \"$scope\"\r\n ];\r\n return VhsProductItemDetailsController;\r\n})();\r\nexports.VhsProductItemDetailsController = VhsProductItemDetailsController;\r\nfunction VhsProductItemDetailsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsProductItemDetailsController,\r\n scope: {\r\n material: \"=?vhsMaterialItem\",\r\n course: \"=?vhsCourseItem\",\r\n learningPath: \"=?vhsLearningPathItem\",\r\n learningPathCourse: \"=?vhsLearningPathCourseItem\"\r\n },\r\n templateUrl: url.template(\"components/vhs-product-item-details.html\")\r\n };\r\n}\r\nexports.VhsProductItemDetailsDirectiveFactory = VhsProductItemDetailsDirectiveFactory;\r\nVhsProductItemDetailsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528}],138:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar VhsProductViewTopTabsController = (function () {\r\n function VhsProductViewTopTabsController($scope, brandingService, financesRouter) {\r\n this.$scope = $scope;\r\n this.brandingService = brandingService;\r\n this.financesRouter = financesRouter;\r\n this.INFO_TAB_KEY = \"info\";\r\n this.EDIT_TAB_KEY = \"edit\";\r\n $scope.vm = this;\r\n }\r\n VhsProductViewTopTabsController.prototype.init = function ($scope, element) {\r\n };\r\n VhsProductViewTopTabsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.$scope.topMenuKey == topMenuKey;\r\n };\r\n VhsProductViewTopTabsController.prototype.isShowEditTab = function () {\r\n return this.$scope.isAuthenticated && this.$scope.isAllowedEditing\r\n && (this.$scope.topMenuKey == this.EDIT_TAB_KEY\r\n || this.$scope.systemPermissions\r\n && (this.$scope.systemPermissions.manageAnyLearningObject || this.$scope.systemPermissions.editProducts));\r\n };\r\n VhsProductViewTopTabsController.$inject = [\r\n \"$scope\",\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME\r\n ];\r\n return VhsProductViewTopTabsController;\r\n})();\r\nexports.VhsProductViewTopTabsController = VhsProductViewTopTabsController;\r\nfunction VhsProductViewTopTabsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsProductViewTopTabsController,\r\n scope: {\r\n productId: \"=vhsProductId\",\r\n isAuthenticated: \"=vhsIsAuthenticated\",\r\n systemPermissions: \"=vhsSystemPermissions\",\r\n topMenuKey: \"=vhsTopMenuKey\",\r\n isAllowedEditing: \"=vhsIsAllowedEditing\"\r\n },\r\n templateUrl: url.template(\"components/vhs-product-view-top-tabs.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsProductViewTopTabsDirectiveFactory = VhsProductViewTopTabsDirectiveFactory;\r\nVhsProductViewTopTabsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../branding/CustomBrandingService\":35,\"../urls/FinancesRouter\":471,\"../utils/UrlService\":528}],139:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar PurchaseService_1 = require(\"../finances/PurchaseService\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar LearningPathService_1 = require(\"../learningPaths/LearningPathService\");\r\nvar VhsProductsListEditingController = (function () {\r\n function VhsProductsListEditingController($scope, $location, purchaseService, dialogService, financesRouter, courseService, learningPathService, businessUnitService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.purchaseService = purchaseService;\r\n this.dialogService = dialogService;\r\n this.financesRouter = financesRouter;\r\n this.courseService = courseService;\r\n this.learningPathService = learningPathService;\r\n this.businessUnitService = businessUnitService;\r\n this.isRecalculatePermissionsButtonDisabled = false;\r\n this.products = [];\r\n this.productsForRegistrationLink = [];\r\n $scope.vm = this;\r\n this.reloadProductsList();\r\n if (this.$scope.objectType == \"COURSE\") {\r\n this.courseService.getRelatedLearningPaths(this.$scope.objectId).then(function (result) {\r\n result.forEach(function (lp) {\r\n _this.purchaseService.getReferencedObjectProductsList(lp.id, \"LEARNING_PATH\")\r\n .then(function (products) {\r\n var tmp = products;\r\n for (var _i = 0; _i < tmp.length; _i++) {\r\n var t = tmp[_i];\r\n if (!_this.containsRegistrationLink(_this.productsForRegistrationLink, t)) {\r\n _this.productsForRegistrationLink.push(t);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n this.courseService.getCourseVILTSections(this.$scope.objectId).then(function (vilt) {\r\n _this.sectionsForRegistration = vilt;\r\n _this.courseService.getCourseILTSections(_this.$scope.objectId).then(function (ilt) {\r\n (_a = _this.sectionsForRegistration).push.apply(_a, ilt);\r\n var _a;\r\n });\r\n });\r\n this.courseService.get(this.$scope.objectId).then(function (result) {\r\n _this.course = result;\r\n _this.getCurrentBusinessUnitDomain();\r\n });\r\n }\r\n else if (this.$scope.objectType == \"LEARNING_PATH\") {\r\n this.learningPathService.get(this.$scope.objectId).then(function (result) {\r\n _this.learningPath = result;\r\n _this.getCurrentBusinessUnitDomain();\r\n });\r\n this.learningPathService.getLearningPathCourses(this.$scope.objectId).then(function (result) {\r\n var courses = result.map(function (r) { return r.id; });\r\n _this.courseService.getCourseVILTSectionsByCourseIds(courses).then(function (vilt) {\r\n _this.sectionsForRegistration = vilt;\r\n _this.courseService.getCourseILTSectionsByCourseIds(courses).then(function (ilt) {\r\n (_a = _this.sectionsForRegistration).push.apply(_a, ilt);\r\n var _a;\r\n });\r\n });\r\n });\r\n }\r\n else {\r\n this.getCurrentBusinessUnitDomain();\r\n }\r\n }\r\n VhsProductsListEditingController.prototype.reloadProductsList = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n this.purchaseService.getReferencedObjectProductsList(this.$scope.objectId, this.$scope.objectType)\r\n .then(function (products) {\r\n _this.products = angular.copy(products);\r\n _this.productsForRegistrationLink = products;\r\n _this.isLoaded = true;\r\n });\r\n };\r\n VhsProductsListEditingController.prototype.saveProductsList = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n this.purchaseService.saveReferencedObjectProductsList(this.$scope.objectId, this.$scope.version, this.$scope.objectType, this.products.map(function (p) { return p.productId; }))\r\n .then(function (products) {\r\n _this.products = angular.copy(products);\r\n _this.productsForRegistrationLink = products;\r\n _this.courseService.getRelatedLearningPaths(_this.$scope.objectId).then(function (result) {\r\n result.forEach(function (lp) {\r\n _this.purchaseService.getReferencedObjectProductsList(lp.id, \"LEARNING_PATH\")\r\n .then(function (products) {\r\n var tmp = products;\r\n for (var _i = 0; _i < tmp.length; _i++) {\r\n var t = tmp[_i];\r\n if (!_this.containsRegistrationLink(_this.productsForRegistrationLink, t)) {\r\n _this.productsForRegistrationLink.push(t);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n })\r\n .then(function () {\r\n return _this.$scope.saveSuccessCallback();\r\n })\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Products list has been successfully updated\");\r\n _this.isLoaded = true;\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.product.id.not.unique\") {\r\n INotifier_1.notifier.error(\"Products identifiers not unique\");\r\n }\r\n else if (response.data.error == \"error.product.id.exceed.max.length\") {\r\n INotifier_1.notifier.error(\"Products identifiers are too long\");\r\n }\r\n else if (response.data.error == \"error.product.already.in.use\") {\r\n INotifier_1.notifier.error(\"Product identifier already in use\");\r\n }\r\n else if (response.data.error == \"error.invalid.product.id\") {\r\n var dialogMessage = \"

    Your product ID can only have:

    \";\r\n dialogMessage += \"
    • 4-50 characters without spaces
    • \";\r\n dialogMessage += \"
    • Uppercase or lowercase letters
    • \";\r\n dialogMessage += \"
    • Numbers
    • \";\r\n dialogMessage += \"
    • These special characters _~.-
    \";\r\n _this.dialogService.confirm(dialogMessage, {\r\n title: \"Invalid product identifier\",\r\n confirmButton: \"Ok\",\r\n hideCancelButton: true\r\n });\r\n }\r\n }).finally(function () {\r\n _this.isLoaded = true;\r\n });\r\n };\r\n VhsProductsListEditingController.prototype.addNewProductId = function () {\r\n if (this.newProductId == null) {\r\n INotifier_1.notifier.warning(\"Incorrect product id\");\r\n return;\r\n }\r\n for (var _i = 0, _a = this.products; _i < _a.length; _i++) {\r\n var product = _a[_i];\r\n if (product.productId.toLowerCase() === this.newProductId.toLowerCase()) {\r\n INotifier_1.notifier.warning(\"Duplicate product id\");\r\n return;\r\n }\r\n }\r\n this.products.push({ productId: this.newProductId });\r\n this.newProductId = null;\r\n };\r\n VhsProductsListEditingController.prototype.removeProductId = function (removedProductIdIndex) {\r\n this.products.splice(removedProductIdIndex, 1);\r\n };\r\n VhsProductsListEditingController.prototype.recalculateAllPurchasesPermissions = function () {\r\n var _this = this;\r\n this.isRecalculatePermissionsButtonDisabled = true;\r\n this.recalculateAll = true;\r\n var creationPromise;\r\n creationPromise = this.purchaseService.recalculatePermissions(this.$scope.objectId, this.$scope.objectType, this.recalculateAll).then(function () {\r\n INotifier_1.notifier.success(\"Permissions were successfully recalculated\");\r\n }).finally(function () {\r\n _this.closeRecalculateDiolog();\r\n _this.isRecalculatePermissionsButtonDisabled = false;\r\n });\r\n };\r\n VhsProductsListEditingController.prototype.recalculateOnlySubscriptionsPermissions = function () {\r\n var _this = this;\r\n this.isRecalculatePermissionsButtonDisabled = true;\r\n this.recalculateAll = false;\r\n var creationPromise;\r\n creationPromise = this.purchaseService.recalculatePermissions(this.$scope.objectId, this.$scope.objectType, this.recalculateAll).then(function () {\r\n INotifier_1.notifier.success(\"Permissions were successfully recalculated\");\r\n }).finally(function () {\r\n _this.closeRecalculateDiolog();\r\n _this.isRecalculatePermissionsButtonDisabled = false;\r\n });\r\n };\r\n VhsProductsListEditingController.prototype.closeRecalculateDiolog = function () {\r\n $(\"#RecalculateDiolog\").modal('hide');\r\n };\r\n VhsProductsListEditingController.prototype.recalculatePermissions = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#RecalculateDiolog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n VhsProductsListEditingController.prototype.isProductIdValid = function (productId) {\r\n return productId.length <= 127;\r\n };\r\n VhsProductsListEditingController.prototype.openRegistrationLinksDialog = function () {\r\n var _this = this;\r\n if (this.$scope.objectType == \"COURSE\") {\r\n this.courseService.getCourseVILTSections(this.$scope.objectId).then(function (vilt) {\r\n _this.sectionsForRegistration = vilt;\r\n _this.courseService.getCourseILTSections(_this.$scope.objectId).then(function (ilt) {\r\n (_a = _this.sectionsForRegistration).push.apply(_a, ilt);\r\n $(\"#RegistrationLinksDialog\").modal('show');\r\n var _a;\r\n });\r\n });\r\n }\r\n else if (this.$scope.objectType == \"LEARNING_PATH\") {\r\n this.learningPathService.getLearningPathCourses(this.$scope.objectId).then(function (result) {\r\n var courses = result.map(function (r) { return r.id; });\r\n _this.courseService.getCourseVILTSectionsByCourseIds(courses).then(function (vilt) {\r\n _this.sectionsForRegistration = vilt;\r\n _this.courseService.getCourseILTSectionsByCourseIds(courses).then(function (ilt) {\r\n (_a = _this.sectionsForRegistration).push.apply(_a, ilt);\r\n $(\"#RegistrationLinksDialog\").modal('show');\r\n var _a;\r\n });\r\n });\r\n });\r\n }\r\n };\r\n VhsProductsListEditingController.prototype.redirectProductPage = function (productInternalId) {\r\n var _this = this;\r\n $(\"#RegistrationLinksDialog\").modal('hide');\r\n setTimeout(function () { return _this.$location.url(_this.financesRouter.productDetailsUrl(productInternalId)); }, 0);\r\n };\r\n VhsProductsListEditingController.prototype.copyPurchasePath = function (payment, productId, courseId, sectionId) {\r\n var text = this.currentBusinessUnitDomain + (\"/catalog/\" + productId);\r\n if (payment && sectionId) {\r\n text += \"?payment=TRUE&course=\" + courseId + \"§ion=\" + sectionId;\r\n }\r\n else if (payment) {\r\n text += \"?payment=TRUE&course=\" + courseId;\r\n }\r\n var elem = document.createElement(\"textarea\");\r\n payment ? document.querySelector('#RegistrationLinksDialog').appendChild(elem) : document.body.appendChild(elem);\r\n elem.value = \"\" + text;\r\n elem.select();\r\n document.execCommand(\"copy\");\r\n if (!payment) {\r\n document.body.removeChild(elem);\r\n }\r\n else {\r\n document.querySelector('#RegistrationLinksDialog').removeChild(elem);\r\n }\r\n };\r\n VhsProductsListEditingController.prototype.getCurrentBusinessUnitDomain = function () {\r\n var _this = this;\r\n if (!this.currentBusinessUnitDomain) {\r\n if ((this.course && this.course.businessUnitId) || (this.learningPath && this.learningPath.businessUnitId)) {\r\n var businessUnitId = this.course ? this.course.businessUnitId : this.learningPath.businessUnitId;\r\n this.businessUnitService.getBUDomainName(businessUnitId).then(function (result) {\r\n if (result) {\r\n _this.currentBusinessUnitDomain = \"\" + result;\r\n }\r\n else {\r\n _this.currentBusinessUnitDomain = _this.$location.absUrl().split(\"#\")[0] + \"#\";\r\n }\r\n });\r\n }\r\n else {\r\n this.currentBusinessUnitDomain = this.$location.absUrl().split(\"#\")[0] + \"#\";\r\n }\r\n }\r\n else {\r\n this.currentBusinessUnitDomain = this.$location.absUrl().split(\"#\")[0] + \"#\";\r\n }\r\n };\r\n VhsProductsListEditingController.prototype.containsRegistrationLink = function (array, object) {\r\n for (var _i = 0; _i < array.length; _i++) {\r\n var a = array[_i];\r\n if (a.productInternalId === object.productInternalId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n VhsProductsListEditingController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n PurchaseService_1.PurchaseService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME\r\n ];\r\n return VhsProductsListEditingController;\r\n})();\r\nexports.VhsProductsListEditingController = VhsProductsListEditingController;\r\nfunction VhsProductsListEditingDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsProductsListEditingController,\r\n scope: {\r\n objectId: \"=vhsObjectId\",\r\n version: \"=vhsVersion\",\r\n objectType: \"=vhsObjectType\",\r\n saveSuccessCallback: \"=vhsSaveSuccessCallback\",\r\n systemPermissions: \"=vhsSystemPermissions\"\r\n },\r\n templateUrl: url.template(\"components/vhs-products-list-editing.html\")\r\n };\r\n}\r\nexports.VhsProductsListEditingDirectiveFactory = VhsProductsListEditingDirectiveFactory;\r\nVhsProductsListEditingDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../businessUnits/BusinessUnitsService\":44,\"../courses/CourseService\":211,\"../finances/PurchaseService\":237,\"../learningPaths/LearningPathService\":320,\"../urls/FinancesRouter\":471,\"../utils/UrlService\":528,\"./dialog/DialogService\":166}],140:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PurchaseService_1 = require(\"../finances/PurchaseService\");\r\nvar PayPalService_1 = require(\"../integration/paypal/PayPalService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar RedirectReason_1 = require(\"../authcore/RedirectReason\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar CourseDetailsController_1 = require(\"../courses/CourseDetailsController\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar FreeEnrollmentService_1 = require(\"../integration/freeenrollment/FreeEnrollmentService\");\r\nvar AuthorizeNetService_1 = require(\"../integration/authorizenet/AuthorizeNetService\");\r\nvar VhsPurchaseDirective = (function () {\r\n function VhsPurchaseDirective($scope, $window, $location, authManager, authRedirect, url, purchaseService, payPalService, businessUnitsService, financesRouter, dialogService, freeEnrollmentService, authorizeNetService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.$location = $location;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.url = url;\r\n this.purchaseService = purchaseService;\r\n this.payPalService = payPalService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.financesRouter = financesRouter;\r\n this.dialogService = dialogService;\r\n this.freeEnrollmentService = freeEnrollmentService;\r\n this.authorizeNetService = authorizeNetService;\r\n this.isLoaded = false;\r\n this.enrollInProgress = false;\r\n this.closePurchaseModal = (function () {\r\n _this.$location.search(CourseDetailsController_1.CourseDetailsController.PURCHASE_PARAMETER, null).replace();\r\n $(\"#purchaseDialog\").modal('hide');\r\n $('.modal-backdrop').remove();\r\n });\r\n $scope.vm = this;\r\n this.loadProducts().then(function () { return _this.isLoaded = true; });\r\n }\r\n VhsPurchaseDirective.prototype.loadProducts = function () {\r\n var _this = this;\r\n return this.purchaseService.getReferencedObjectRelatedProducts(this.$scope.objectId, this.$scope.objectType)\r\n .then(function (products) {\r\n _this.products = angular.copy(products);\r\n return _this.products;\r\n });\r\n };\r\n VhsPurchaseDirective.prototype.checkout = function () {\r\n var _this = this;\r\n localStorage.setItem('aNetProductId', '' + this.selectedProduct.id);\r\n if (this.selectedProduct.price === 0) {\r\n this.enrollForFree();\r\n }\r\n else {\r\n this.businessUnitsService.checkPayPalCorrectData(this.selectedProduct.businessUnitId)\r\n .then(function (resultPayPal) {\r\n if (resultPayPal) {\r\n _this.smartButtonsPaypal()\r\n .catch(function (result) {\r\n if (result.data.error === \"error.order.creation.failed.used\") {\r\n INotifier_1.notifier.error(\"All seats are already taken.\");\r\n }\r\n INotifier_1.notifier.error(\"Incorrect system purchase settings. Please contact your administrator.\");\r\n if (_this.$scope.onError) {\r\n _this.$scope.onError();\r\n }\r\n });\r\n }\r\n _this.businessUnitsService.checkAuthorizeNetCorrectData(_this.selectedProduct.businessUnitId)\r\n .then(function (resultANet) {\r\n if (resultANet) {\r\n _this.aNetPreparing();\r\n _this.authorizeNetService.getToken(_this.selectedProduct.businessUnitId, _this.selectedProduct.price, _this.aNetIframeCommunicator, _this.selectedProduct.id).then(function (result) {\r\n _this.aNetToken = result;\r\n _this.businessUnitsService.getAuthorizeNetEnvironmentType(_this.selectedProduct.businessUnitId)\r\n .then(function (config) {\r\n var url = config.toUpperCase() === \"SANDBOX\"\r\n ? \"https://test.authorize.net/payment/payment\"\r\n : \"https://accept.authorize.net/payment/payment\";\r\n var mainElement = document.forms['send_hptoken'];\r\n mainElement.setAttribute(\"action\", url);\r\n mainElement.submit();\r\n });\r\n });\r\n }\r\n });\r\n });\r\n }\r\n };\r\n VhsPurchaseDirective.prototype.resetANetToken = function () {\r\n this.aNetToken = null;\r\n };\r\n VhsPurchaseDirective.prototype.aNetPreparing = function () {\r\n var baseDomain = this.$window.location.href.split(\"://\")[0] + \"://\" + this.$window.location.href.split(\"://\")[1].split(\"/\")[0];\r\n if (this.$window.location.href.indexOf(\"client\") > 0) {\r\n baseDomain += \"/client\";\r\n }\r\n else if (this.$window.location.href.indexOf(\"app.html\") > 0) {\r\n baseDomain += \"/app.html\";\r\n }\r\n this.aNetIframeCommunicator = baseDomain + this.financesRouter.productANetCommunicatorUrl();\r\n };\r\n VhsPurchaseDirective.prototype.smartButtonsPaypal = function () {\r\n var _this = this;\r\n return this.businessUnitsService.getPayPalClientId(this.selectedProduct.businessUnitId)\r\n .then(function (result) {\r\n _this.createScript(result);\r\n _this.clientId = result;\r\n });\r\n };\r\n VhsPurchaseDirective.prototype.createScript = function (clientId) {\r\n var _this = this;\r\n if (document.getElementById(\"paypal_script\")) {\r\n var element = document.getElementById(\"paypal_script\");\r\n element.parentNode.removeChild(element);\r\n }\r\n var scriptElement = document.createElement(\"script\");\r\n scriptElement.id = \"paypal_script\";\r\n if (!!this.selectedProduct.subscriptionPlanId) {\r\n scriptElement.src = \"https://www.paypal.com/sdk/js?client-id=\" + clientId + \"&vault=true&intent=subscription\";\r\n document.body.appendChild(scriptElement);\r\n scriptElement.onload = function () {\r\n _this.showSubscriptionButtons();\r\n };\r\n }\r\n else {\r\n scriptElement.src = \"https://www.paypal.com/sdk/js?client-id=\" + clientId;\r\n document.body.appendChild(scriptElement);\r\n scriptElement.onload = function () {\r\n _this.showButtons();\r\n };\r\n }\r\n };\r\n VhsPurchaseDirective.prototype.showSubscriptionButtons = function () {\r\n var _this = this;\r\n paypal.Buttons({\r\n style: {\r\n label: 'subscribe'\r\n },\r\n createSubscription: function (data, actions) {\r\n var response = actions.subscription.create({\r\n 'plan_id': _this.selectedProduct.subscriptionPlanId\r\n });\r\n response.then(function (subscriptionId) {\r\n _this.payPalService.createSubscriptionPurchaseOrder(_this.selectedProduct.id, subscriptionId);\r\n });\r\n return response;\r\n },\r\n onApprove: function (data, actions) {\r\n _this.deactivateMainContent();\r\n _this.purchaseService.getNumberOfItemsInProduct(_this.selectedProduct.id).then(function (numberOfItemsInProduct) {\r\n if (numberOfItemsInProduct > 1) {\r\n return _this.payPalService.approveSubscription(_this.selectedProduct.id, data.subscriptionID)\r\n .then(function (purchasedOrderId) {\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(purchasedOrderId));\r\n }).catch(function () {\r\n _this.dialogService.confirm(\"1\", {\r\n title: \"Warning\",\r\n hideCancelButton: true\r\n });\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n }\r\n else {\r\n return _this.payPalService.approveSubscription(_this.selectedProduct.id, data.subscriptionID)\r\n .then(function (purchasedOrderId) {\r\n _this.$window.location.reload();\r\n }).catch(function () {\r\n _this.dialogService.confirm(\"1\", {\r\n title: \"Warning\",\r\n hideCancelButton: true\r\n });\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n }\r\n });\r\n },\r\n onError: function (error) {\r\n _this.activateMainContent();\r\n INotifier_1.notifier.error(\"Failed to purchase product. Please contact support.\");\r\n }\r\n }).render('#paypal-button-container');\r\n };\r\n VhsPurchaseDirective.prototype.showButtons = function () {\r\n var _this = this;\r\n return paypal.Buttons({\r\n createOrder: function () {\r\n return _this.payPalService.createOrderSmart(_this.selectedProduct.id);\r\n },\r\n onApprove: function (data, actions) {\r\n _this.deactivateMainContent();\r\n var s = JSON.stringify({\r\n orderID: data.orderID\r\n });\r\n _this.closePurchaseModal();\r\n _this.purchaseService.getNumberOfItemsInProduct(_this.selectedProduct.id).then(function (numberOfItemsInProduct) {\r\n if (numberOfItemsInProduct > 1) {\r\n return _this.payPalService.confirmOrderSmart(s).then(function (purchasedOrderId) {\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(purchasedOrderId));\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Your credit card or PayPal account has not been charged. Please try again\");\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n }\r\n else {\r\n return _this.payPalService.confirmOrderSmart(s).then(function (purchasedOrderId) {\r\n _this.$window.location.reload();\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Your credit card or PayPal account has not been charged. Please try again\");\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n }\r\n });\r\n },\r\n onError: function (error) {\r\n _this.activateMainContent();\r\n INotifier_1.notifier.error(\"Your credit card or PayPal account has not been charged. Please try again\");\r\n }\r\n }).render('#paypal-button-container');\r\n };\r\n VhsPurchaseDirective.prototype.deactivateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.add(\"hidden\");\r\n mainLoadingElement.classList.remove(\"hidden\");\r\n };\r\n VhsPurchaseDirective.prototype.activateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.remove(\"hidden\");\r\n mainLoadingElement.classList.add(\"hidden\");\r\n };\r\n VhsPurchaseDirective.prototype.redirectToLogOn = function () {\r\n this.authRedirect.redirectToLogOn(RedirectReason_1.RedirectReason.LOGON_REQUIRED, this.products[0].businessUnitId);\r\n this.closePurchaseModal();\r\n };\r\n VhsPurchaseDirective.prototype.redirectToProduct = function (productId) {\r\n this.closePurchaseModal();\r\n this.$location.url(this.financesRouter.productDetailsUrl(productId));\r\n };\r\n VhsPurchaseDirective.prototype.enrollForFree = function () {\r\n var _this = this;\r\n this.enrollInProgress = true;\r\n var businessUnitId = this.selectedProduct.businessUnitId;\r\n var productId = this.selectedProduct.id;\r\n var returnUrl = \"\";\r\n this.freeEnrollmentService.createOrder({ businessUnitId: businessUnitId, productId: productId, returnUrl: returnUrl })\r\n .then(function (productId) {\r\n _this.closePurchaseModal();\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(productId));\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"Incorrect system purchase settings. Please contact your administrator.\");\r\n })\r\n .finally(function () {\r\n _this.enrollInProgress = false;\r\n });\r\n };\r\n VhsPurchaseDirective.$inject = [\r\n \"$scope\",\r\n \"$window\",\r\n \"$location\",\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PurchaseService_1.PurchaseService.NAME,\r\n PayPalService_1.PayPalService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n DialogService_1.DialogService.NAME,\r\n FreeEnrollmentService_1.FreeEnrollmentService.NAME,\r\n AuthorizeNetService_1.AuthorizeNetService.NAME\r\n ];\r\n return VhsPurchaseDirective;\r\n})();\r\nexports.VhsPurchaseDirective = VhsPurchaseDirective;\r\nfunction VhsPurchaseDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsPurchaseDirective,\r\n scope: {\r\n objectId: \"=vhsObjectId\",\r\n objectType: \"=vhsObjectType\",\r\n onError: \"=?vhsOnError\"\r\n },\r\n templateUrl: url.template(\"components/vhs-purchase.html\")\r\n };\r\n}\r\nexports.VhsPurchaseDirectiveFactory = VhsPurchaseDirectiveFactory;\r\nVhsPurchaseDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../authcore/RedirectReason\":28,\"../businessUnits/BusinessUnitsService\":44,\"../courses/CourseDetailsController\":194,\"../finances/PurchaseService\":237,\"../integration/authorizenet/AuthorizeNetService\":297,\"../integration/freeenrollment/FreeEnrollmentService\":303,\"../integration/paypal/PayPalService\":306,\"../urls/FinancesRouter\":471,\"../utils/UrlService\":528,\"./dialog/DialogService\":166}],141:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PersonalRouter_1 = require(\"../urls/PersonalRouter\");\r\nvar QuizzesRouter_1 = require(\"../urls/QuizzesRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar QuestionType_1 = require(\"../quizzes/models/QuestionType\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar VhsQuizDetailsController = (function () {\r\n function VhsQuizDetailsController($scope, $http, $location, $routeParams, url, securityService, quizService, quizzesRouter, personalRouter, bundleService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.quizService = quizService;\r\n this.quizzesRouter = quizzesRouter;\r\n this.personalRouter = personalRouter;\r\n this.bundleService = bundleService;\r\n this.redirected = false;\r\n this.quizId = 0;\r\n this.totalPoints = 0;\r\n this.resultPoints = 0;\r\n this.quizName = '';\r\n this.quizAnswerResults = [];\r\n this.currentQuiz = {};\r\n this.quizQuestions = [];\r\n this.questionsForShow = [];\r\n $scope.vm = this;\r\n this.showQuizDetailsHeader = (this.$scope.showQuizDetailsHeader != null\r\n && this.$scope.showQuizDetailsHeader != undefined) ? this.$scope.showQuizDetailsHeader : false;\r\n $scope.$watch(\"quizResultId\", function (value) {\r\n _this.quizResultId = value;\r\n _this.getQuiz();\r\n });\r\n }\r\n VhsQuizDetailsController.prototype.getQuiz = function () {\r\n var _this = this;\r\n this.quizService.getQuiz(this.quizResultId).then(function (quiz) {\r\n if (_this.$routeParams[\"quizId\"]) {\r\n angular.copy(quiz, _this.currentQuiz);\r\n }\r\n _this.quiz = quiz;\r\n _this.quizId = quiz.id;\r\n _this.loadQuizResult();\r\n _this.loadQuizQuestions();\r\n });\r\n };\r\n VhsQuizDetailsController.prototype.loadQuizQuestions = function () {\r\n var _this = this;\r\n this.quizService.getAllQuizQuestionsForQuiz(this.quizId, true).then(function (quizQuestions) {\r\n _this.quizTotalPoints = 0;\r\n quizQuestions.forEach(function (quiz) { return _this.quizTotalPoints += quiz.points; });\r\n angular.copy(quizQuestions, _this.quizQuestions);\r\n _this.quizService.getAssessmentResults(_this.quizResultId, _this.quizQuestions.map(function (quiz) { return quiz.id; }))\r\n .then(function (assessmentResults) {\r\n if (assessmentResults == null || assessmentResults.length == 0) {\r\n return;\r\n }\r\n _this.quizQuestions.forEach(function (question) {\r\n var searchAssessmentResults = assessmentResults.filter(function (assessmentResult) { return assessmentResult.questionId === question.id; });\r\n var assessmentResult = searchAssessmentResults.length > 0 ? searchAssessmentResults[0] : null;\r\n if (assessmentResult != null) {\r\n question.score = assessmentResult.score;\r\n if (assessmentResult.comment) {\r\n question.comment = assessmentResult.comment;\r\n }\r\n }\r\n });\r\n });\r\n _this.loadAnswerResults()\r\n .then(function () {\r\n var audioResponses = _this.quizAnswerResults\r\n .filter(function (qa) { return _this.quizQuestions.some(function (q) { return q.id == qa.questionId\r\n && q.type !== QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE]\r\n && q.type !== QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_MULTIPLE_CHOICE]; }); })\r\n .filter(function (qa) { return !!qa.jsonData; });\r\n if (audioResponses.length > 0) {\r\n _this.quizService.getBundleIdForQuizResult(_this.quizId, _this.quizResultId)\r\n .then(function (bundleId) {\r\n if (bundleId) {\r\n _this.loadAudioResponseUrls(bundleId, audioResponses);\r\n }\r\n else {\r\n console.log(\"bundle for this quiz result was not found\");\r\n }\r\n });\r\n }\r\n _this.quizAnswerResults\r\n .filter(function (qa) { return _this.quizQuestions.some(function (q) { return q.id == qa.questionId\r\n && (q.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE]\r\n || q.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_MULTIPLE_CHOICE]); }); })\r\n .filter(function (qa) { return !!qa.jsonData; })\r\n .forEach(function (qa) {\r\n var question = _this.quizQuestions.filter(function (q) { return q.id == qa.questionId; })[0];\r\n question.responseData = JSON.parse(qa.jsonData);\r\n });\r\n });\r\n });\r\n };\r\n VhsQuizDetailsController.prototype.loadAnswerResults = function () {\r\n var _this = this;\r\n this.clearQuizPoints();\r\n return this.quizService.getQuizAnswerResultsForQuizResult(this.quizResultId).then(function (result) {\r\n angular.copy(result, _this.quizAnswerResults);\r\n for (var i = 0; i < _this.quizAnswerResults.length; i++) {\r\n var question = _this.quizQuestions.filter(function (q) { return q.id == _this.quizAnswerResults[i].questionId; })[0];\r\n var answer = _this.quizAnswerResults[i];\r\n question.isCorrect = _this.quizAnswerResults[i].isCorrect;\r\n _this.totalPoints += question.points;\r\n question.shortAnswer = answer.answerText;\r\n question.responseData = answer.responseData;\r\n question.answers.forEach(function (a) {\r\n if (answer.answerIds.filter(function (aId) { return aId == a.id; }).length > 0) {\r\n a.selected = true;\r\n }\r\n else {\r\n a.selected = false;\r\n }\r\n answer.grades.forEach(function (gradeEntry) {\r\n if (gradeEntry.answerId == a.id) {\r\n a.grade = gradeEntry.grade;\r\n }\r\n });\r\n });\r\n if (_this.isAnyOfMatchingsQuestionType(question)) {\r\n var matchingPoints = _this.quizAnswerResults[i].grades.filter(function (g) { return g.grade > 0; }).length;\r\n question.points = matchingPoints * question.points / question.answers.length;\r\n question.answers.forEach(function (a) {\r\n a.option = \"\";\r\n a.isCorrect = false;\r\n answer.grades.forEach(function (g) {\r\n if (g.answerId == a.id) {\r\n a.isCorrect = g.grade > 0;\r\n a.option = g.option;\r\n }\r\n });\r\n });\r\n }\r\n _this.questionsForShow.push(question);\r\n }\r\n _this.currentPointsNumber = _this.quizResult.currentPointsNumber || _this.quizResult.currentPointsNumber === 0 ?\r\n _this.quizResult.currentPointsNumber : _this.quizResult.pointsNumber;\r\n _this.totalPoints = _this.quizResult.currentPointsNumber || _this.quizResult.currentPointsNumber === 0 ?\r\n _this.totalPoints : _this.quizTotalPoints;\r\n _this.correctQuestions = 0;\r\n result.forEach(function (item) {\r\n if (!_this.isAnyOfMatchingsQuestionType(item)) {\r\n _this.totalQuestions++;\r\n if (item.isCorrect)\r\n _this.correctQuestions++;\r\n }\r\n else {\r\n _this.correctQuestions += item.grades.filter(function (g) { return g.grade > 0; }).length;\r\n }\r\n });\r\n _this.totalQuestions = result.length;\r\n _this.currentCorrectAnswersPercentage = Math.round(_this.correctQuestions * 100 / _this.totalQuestions);\r\n })\r\n .finally(function () {\r\n _this.$scope.$emit('quizzesAreLoaded', false);\r\n });\r\n };\r\n VhsQuizDetailsController.prototype.isQuestionHasAnswer = function (question) {\r\n var answer = this.getAnswerForQuestion(question);\r\n if (question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER]) {\r\n return answer && !!answer.answerText;\r\n }\r\n else if (question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE]) {\r\n return answer && !!answer.jsonData;\r\n }\r\n else if (question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD]) {\r\n return answer && (!!answer.answerText || !!answer.jsonData);\r\n }\r\n else if (question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM]) {\r\n return !!question.responseData.bundleFileKey;\r\n }\r\n else {\r\n return !!answer;\r\n }\r\n };\r\n VhsQuizDetailsController.prototype.printQuizProgressStatistics = function (divId) {\r\n var printUser = \"\";\r\n var printGroup = \"\";\r\n var html = \"\";\r\n var fullName = this.$scope.selectedUserFullName;\r\n if (fullName !== undefined) {\r\n fullName = fullName.split(\"(\")[0];\r\n html = '
    :labelUser:userName
    ';\r\n printUser = StringBuilder_1.StringBuilder.interpolate(html)\r\n .with(\":labelUser\", \"User name: \")\r\n .with(\":userName\", fullName)\r\n .build();\r\n }\r\n var linkTagTemplate = '';\r\n var linkTags = [];\r\n for (var i = 0; i < document.styleSheets.length; i++) {\r\n if (document.styleSheets[i].href) {\r\n linkTags.push(StringBuilder_1.StringBuilder.interpolate(linkTagTemplate)\r\n .with(\":styleSheetHref\", document.styleSheets[i].href)\r\n .build());\r\n }\r\n }\r\n var node = angular.element(document.querySelector(divId));\r\n var vhsGridPagination = angular.element(document.querySelector('#vhsGridPagination'));\r\n var progressStatisticsQuestionsScroll = angular.element(document.querySelectorAll('.progress-statistics-questions-scroll'));\r\n progressStatisticsQuestionsScroll.attr('class', '');\r\n vhsGridPagination.hide();\r\n var printableContent = node.html();\r\n printableContent = printableContent.replace(\"quiz-item quiz-item__last-result\", \"quiz-item quiz-item__last-result quiz-item__printable\");\r\n progressStatisticsQuestionsScroll.attr('class', 'progress-statistics-questions-scroll');\r\n vhsGridPagination.show();\r\n var popupWin = window.open('', '_blank');\r\n popupWin.document.open();\r\n popupWin.document.write('');\r\n linkTags.forEach(function (l) {\r\n popupWin.document.write(l);\r\n });\r\n popupWin.document.write('');\r\n popupWin.document.write('' + printUser + printGroup + printableContent + '');\r\n popupWin.document.close();\r\n };\r\n VhsQuizDetailsController.prototype.getAnswerForQuestion = function (question) {\r\n return this.quizAnswerResults.filter(function (ar) { return ar.questionId === question.id; }).pop();\r\n };\r\n VhsQuizDetailsController.prototype.clearQuizPoints = function () {\r\n this.resultPoints = 0;\r\n this.totalPoints = 0;\r\n this.questionsForShow = [];\r\n };\r\n VhsQuizDetailsController.prototype.redirectToBack = function () {\r\n this.redirected = true;\r\n return this.$location.url(this.personalRouter.quizzesUrl()).absUrl();\r\n };\r\n VhsQuizDetailsController.prototype.isAnyOfMatchingsQuestionType = function (question) {\r\n return question && (question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MATCHING_ANSWER] ||\r\n question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HIDING_OPTIONS_MATCHING_ANSWER]);\r\n };\r\n VhsQuizDetailsController.prototype.isFillInTheBlankQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILL_IN_THE_BLANK];\r\n };\r\n VhsQuizDetailsController.prototype.isMultipleChoiceMultipleAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_MULTIPLE_ANSWER];\r\n };\r\n VhsQuizDetailsController.prototype.isMultipleChoiceSingleAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER];\r\n };\r\n VhsQuizDetailsController.prototype.isShortAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER];\r\n };\r\n VhsQuizDetailsController.prototype.isShortAnswerAudioResponseQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE];\r\n };\r\n VhsQuizDetailsController.prototype.isShortAnswerWithUploadQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD];\r\n };\r\n VhsQuizDetailsController.prototype.isFillableFormQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM];\r\n };\r\n VhsQuizDetailsController.prototype.isScaledAnswerQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER];\r\n };\r\n VhsQuizDetailsController.prototype.isHotspotSingleChoiceQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE];\r\n };\r\n VhsQuizDetailsController.prototype.isHotspotMultipleChoiceQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_MULTIPLE_CHOICE];\r\n };\r\n VhsQuizDetailsController.prototype.loadBundle = function (bundleId) {\r\n var _this = this;\r\n return this.bundleService.getBundle(bundleId)\r\n .then(function (bundle) {\r\n _this.bundle = bundle;\r\n return _this.bundle;\r\n });\r\n };\r\n VhsQuizDetailsController.prototype.loadAudioResponseUrls = function (bundleId, audioResponses) {\r\n var _this = this;\r\n this.loadBundle(bundleId)\r\n .then(function () {\r\n audioResponses.forEach(function (r) {\r\n r.responseData = JSON.parse(r.jsonData);\r\n if (r.responseData) {\r\n r.bundleFileUrl = _this.bundle.filesMap.has(r.responseData.bundleFileKey)\r\n ? _this.bundle.filesMap.get(r.responseData.bundleFileKey).url\r\n : null;\r\n }\r\n });\r\n });\r\n };\r\n VhsQuizDetailsController.prototype.loadQuizResult = function () {\r\n var _this = this;\r\n return this.quizService.getQuizResult(this.quizId, this.quizResultId, this.$scope.courseId)\r\n .then(function (result) { return _this.quizResult = result; });\r\n };\r\n VhsQuizDetailsController.prototype.getUrlForAttachment = function (file) {\r\n if (this.bundle) {\r\n return this.bundle.filesMap.has(file.bundleFileKey)\r\n ? this.bundle.filesMap.get(file.bundleFileKey).url\r\n : null;\r\n }\r\n return null;\r\n };\r\n VhsQuizDetailsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n QuizService_1.QuizService.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n PersonalRouter_1.PersonalRouter.NAME,\r\n BundleService_1.BundleService.NAME\r\n ];\r\n return VhsQuizDetailsController;\r\n})();\r\nexports.VhsQuizDetailsController = VhsQuizDetailsController;\r\nfunction VhsQuizDetailsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsQuizDetailsController,\r\n scope: {\r\n quizResultId: \"=\",\r\n showQuizDetailsHeader: \"=?vhsShowQuizDetailsHeader\",\r\n courseId: \"=?vhsCourseId\",\r\n quizTotalPoints: \"=?quizTotalPoints\",\r\n canViewOtherUserProgress: \"=?viewOtherUserProgress\",\r\n selectedUserFullName: \"=\"\r\n },\r\n templateUrl: url.template(\"components/vhs-quiz-details.html\")\r\n };\r\n}\r\nexports.VhsQuizDetailsDirectiveFactory = VhsQuizDetailsDirectiveFactory;\r\nVhsQuizDetailsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../bundles/BundleService\":36,\"../quizzes/QuizService\":396,\"../quizzes/models/QuestionType\":401,\"../security/SecurityService\":420,\"../urls/PersonalRouter\":484,\"../urls/QuizzesRouter\":486,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528}],142:[function(require,module,exports){\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar QuizImportExportService_1 = require(\"../quizzes/QuizImportExportService\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar PredefinedLanguagesUtils_1 = require(\"../utils/PredefinedLanguagesUtils\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar QuizCorrectAnswersType_1 = require(\"../courses/models/QuizCorrectAnswersType\");\r\nvar QuizzesRouter_1 = require(\"../urls/QuizzesRouter\");\r\nvar IQuizImportExportErrorCode_1 = require(\"../quizzes/models/IQuizImportExportErrorCode\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar QuestionType_1 = require(\"../quizzes/models/QuestionType\");\r\nvar VhsQuizImportExportDirectiveController = (function () {\r\n function VhsQuizImportExportDirectiveController($timeout, $scope, $rootScope, $location, dialogService, $routeParams, permissionsService, businessUnitsService, authService, settingsService, quizImportExportService, quizzesRouter) {\r\n var _this = this;\r\n this.$timeout = $timeout;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.dialogService = dialogService;\r\n this.$routeParams = $routeParams;\r\n this.permissionsService = permissionsService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.authService = authService;\r\n this.settingsService = settingsService;\r\n this.quizImportExportService = quizImportExportService;\r\n this.quizzesRouter = quizzesRouter;\r\n this.quiz = {};\r\n this.businessUnits = [];\r\n this.businessUnitVisible = false;\r\n this.businessUnitSelected = false;\r\n this.hasAllBusinessUnits = false;\r\n this.areQuestionsTagsLoaded = false;\r\n this.oneQuestionAtATime = false;\r\n this.showCorrectAnswers = false;\r\n this.isResetPreview = false;\r\n this.isQuiz = true;\r\n this.isChoiceQuestion = false;\r\n this.isSurvey = false;\r\n this.isFlashcard = false;\r\n this.hasPreviewUrlCanceled = false;\r\n this.questionOrder = false;\r\n this.disabledSaveButton = false;\r\n this.isAbleToSave = false;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.ownerChangeCallback = function (selected, name) {\r\n _this.quiz.ownerName = selected ? name : null;\r\n };\r\n $scope.vm = this;\r\n this.defaultQuiz = {\r\n questions: [],\r\n correctAnswersType: 'PERCENTAGE',\r\n generateFromBank: false,\r\n numberOfQuestions: null,\r\n oneQuestionAtATime: false,\r\n showCorrectAnswers: true,\r\n showQuestionNumbers: true,\r\n requireAllAnswers: false,\r\n excludeCorrectlyAnsweredQuestions: false\r\n };\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.defaultQuiz.ownerId = user.id;\r\n _this.defaultQuiz.ownerName = user.fullName;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n if (user.allBusinessUnits || user.businessUnits.length > 1) {\r\n _this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.QUIZ);\r\n }\r\n _this.defaultQuiz.languageId = PredefinedLanguagesUtils_1.PredefinedLanguagesUtils.determineRelatedLanguageId(user.locale);\r\n _this.user = user;\r\n angular.copy(_this.defaultQuiz, _this.quiz);\r\n });\r\n this.loadQuestionsTags();\r\n this.loadBusinessUnits();\r\n this.percentageNumber = 70;\r\n this.DOWNLOAD_TEMPLATE_LINK = this.getDownloadTemplateLink();\r\n this.DOWNLOAD_FLASHCARD_TEMPLATE_LINK = this.getDownloadFlashcardTemplateLink();\r\n setTimeout(function () {\r\n _this.updateImportType();\r\n });\r\n this.$rootScope.$on(Event_1.Event.QUIZ_SURVEY_IMPORT_UPDATE, function () {\r\n _this.updateImportType();\r\n });\r\n $(\"#cancelButton\").on(\"click\", function (e) {\r\n _this.clearForm();\r\n });\r\n $(\"#closeButton\").on(\"click\", function (e) {\r\n _this.clearForm();\r\n });\r\n }\r\n VhsQuizImportExportDirectiveController.prototype.updateImportType = function () {\r\n if (this.$location.path().indexOf(QuizzesRouter_1.QuizzesRouter.surveysIndexRoute) >= 0) {\r\n this.onButtonTypeClick('SURVEY');\r\n }\r\n else if (this.$location.path().indexOf(QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute) >= 0) {\r\n this.onButtonTypeClick('QUIZ');\r\n }\r\n else if (this.$location.path().indexOf(QuizzesRouter_1.QuizzesRouter.flashcardsIndexRoute) >= 0) {\r\n this.onButtonTypeClick('FLASHCARD');\r\n }\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.isSelectDisabled = function () {\r\n if (this.businessUnits == undefined || this.businessUnits.length == 0) {\r\n return true;\r\n }\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.loadBusinessUnits = function () {\r\n var _this = this;\r\n this.businessUnitsService.getBusinessUnitsForSelector().then(function (result) {\r\n _this.businessUnits = result;\r\n });\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.setBusinessUnitSelectorVisible = function () {\r\n this.businessUnitVisible = true;\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.businessUnitSelected = false;\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.QUIZ);\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.loadPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var _this = this;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.permissionsService.getAllObjectPermissionsWithUsersAndGroups(securedObjectType, objectId).then(function (result) {\r\n _this.permissionsWithUsersAndGroups = result;\r\n });\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.loadQuestionsTags = function () {\r\n var _this = this;\r\n this.settingsService.getQuestionsTags(null)\r\n .then(function (questionsTags) {\r\n _this.questionsTags = questionsTags.split(\",\")\r\n .filter(function (tag) { return tag != undefined && tag != null && tag.length > 0; });\r\n _this.areQuestionsTagsLoaded = true;\r\n });\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.resetPreview = function () {\r\n if (this.preview) {\r\n this.preview = undefined;\r\n }\r\n else if (this.previewUrl) {\r\n this.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n this.isResetPreview = true;\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.getOwnersUrl = function (businessUnitId) {\r\n var baseUrl = \"/api/userSelector/users\";\r\n return businessUnitId\r\n ? StringBuilder_1.StringBuilder.interpolate(baseUrl + \"?businessUnitId=:businessUnitId\")\r\n .with(\":businessUnitId\", businessUnitId)\r\n .build()\r\n : baseUrl;\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.isSaveAvailable = function () {\r\n return this.isAbleToSave = this.file != null && this.quiz.subjectId != null && this.quiz.languageId != null && this.quiz.ownerId != null;\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.onGenerateFromBankChanged = function () {\r\n if (this.quiz.generateFromBank == true) {\r\n this.quiz.numberOfQuestions = 1;\r\n this.quiz.correctAnswersType = QuizCorrectAnswersType_1.QuizCorrectAnswersType[QuizCorrectAnswersType_1.QuizCorrectAnswersType.PERCENTAGE];\r\n this.quiz.questionsInAccordanceWithSequenceNumber = false;\r\n this.questionOrder = !this.quiz.questionsInAccordanceWithSequenceNumber;\r\n }\r\n else if (this.quiz.generateFromBank == false) {\r\n this.quiz.numberOfQuestions = null;\r\n if (this.isFlashcard) {\r\n this.quiz.excludeCorrectlyAnsweredQuestions = false;\r\n }\r\n }\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.findErrors = function (quizRowList) {\r\n var isHasError = false;\r\n quizRowList.forEach(function (value) {\r\n if (value.errorFlag == true) {\r\n isHasError = true;\r\n }\r\n });\r\n return isHasError;\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.getErrorMessageByErrorCode = function (codeId) {\r\n return IQuizImportExportErrorCode_1.IQuizImportExportErrorCode[codeId];\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.importQuizFromFile = function () {\r\n var _this = this;\r\n if (this.isSaveAvailable()) {\r\n this.deactivateMainContent();\r\n this.quizImportExportService.getQuizRow(this.file, this.isQuiz ? 'Quiz' : this.isSurvey ? 'Survey' : \"Flashcard\").then(function (result) {\r\n _this.activateMainContent();\r\n if (result.length != 0 || result.length != null) {\r\n _this.isChoiceQuestion = _this.checkQuizWithChoiceType(result);\r\n if (_this.findErrors(result)) {\r\n _this.importQuizRowList = result;\r\n _this.openErrorDialog();\r\n return;\r\n }\r\n _this.quiz.correctAnswersNumber = _this.quiz.correctAnswersType == VhsQuizImportExportDirectiveController.PERCENTAGE_TYPE ? _this.percentageNumber : _this.pointsNumber;\r\n _this.quiz.quizType = _this.isQuiz ? \"QUIZ\" : _this.isSurvey ? \"SURVEY\" : \"FLASHCARD\";\r\n _this.quiz.questionsInAccordanceWithSequenceNumber = !_this.questionOrder;\r\n _this.deactivateMainContent();\r\n if (_this.isQuiz) {\r\n result = result.filter(function (res) { return res.type.toString() != QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER]; });\r\n }\r\n if (_this.isFlashcard) {\r\n _this.quiz.oneQuestionAtATime = true;\r\n _this.quiz.showCorrectAnswers = false;\r\n }\r\n _this.quizImportExportService.createQuizFromFile(result, _this.quiz).then(function (createdQuizId) {\r\n _this.activateMainContent();\r\n if (createdQuizId == null) {\r\n INotifier_1.notifier.error(\"File structure is invalid or unknown encoding was provided. Accepted encodings are: UTF-8, ansi.\");\r\n return;\r\n }\r\n _this.file = null;\r\n INotifier_1.notifier.success(_this.isQuiz ? \"Quiz successfully added\" : _this.isSurvey ? \"Survey successfully added\" : \"Flashcard successfully added\");\r\n _this.$location.url(_this.isQuiz ? _this.quizzesRouter.quizzesUpdateUrl(createdQuizId) : _this.isSurvey\r\n ? _this.quizzesRouter.surveysUpdateUrl(createdQuizId) : _this.quizzesRouter.flashcardsUpdateUrl(createdQuizId));\r\n $(\".close\").click();\r\n });\r\n $('body').removeClass('modal-open');\r\n $('.modal-backdrop').remove();\r\n }\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"File structure is invalid or unknown encoding was provided. Accepted encodings are: UTF-8, ansi.\");\r\n }).finally(function () {\r\n $('#infoDialog').modal('hide');\r\n $('#infoFlashcardDialog').modal('hide');\r\n $('body').removeClass('modal-open');\r\n $('.modal-backdrop').remove();\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Check correctness of entered data\");\r\n }\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.getDownloadTemplateLink = function () {\r\n return this.quizImportExportService.getDownloadTemplateUrl();\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.getDownloadFlashcardTemplateLink = function () {\r\n return this.quizImportExportService.getDownloadFlashcardTemplateUrl();\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.openModal = function () {\r\n $(\"#infoDialog\").modal(\"toggle\");\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.openFlashcardModal = function () {\r\n $(\"#infoFlashcardDialog\").modal(\"toggle\");\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.cancelErrorDialog = function () {\r\n $(\"#errorDialog\").removeClass(\"in\");\r\n $(\"#errorDialog\").css('display', 'none');\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.openErrorDialog = function () {\r\n $(\"#errorDialog\").addClass(\"in\");\r\n $(\"#errorDialog\").css('display', 'block');\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.onButtonTypeClick = function (typeOfCreation) {\r\n if (typeOfCreation == 'QUIZ') {\r\n this.isQuiz = true;\r\n this.isSurvey = false;\r\n this.isFlashcard = false;\r\n }\r\n else if (typeOfCreation == 'SURVEY') {\r\n this.isQuiz = false;\r\n this.isSurvey = true;\r\n this.isFlashcard = false;\r\n this.quiz.showCorrectAnswers = false;\r\n }\r\n else if (typeOfCreation == 'FLASHCARD') {\r\n this.isQuiz = false;\r\n this.isSurvey = false;\r\n this.isFlashcard = true;\r\n this.quiz.questionsInAccordanceWithSequenceNumber = false;\r\n this.questionOrder = !this.quiz.questionsInAccordanceWithSequenceNumber;\r\n }\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.clearForm = function () {\r\n this.file = undefined;\r\n this.quiz.businessUnitId = undefined;\r\n this.quiz.subjectId = undefined;\r\n this.quiz.languageId = PredefinedLanguagesUtils_1.PredefinedLanguagesUtils.determineRelatedLanguageId(this.user.locale);\r\n this.quiz.ownerId = this.user.id;\r\n this.quiz.summary = undefined;\r\n this.quiz.oneQuestionAtATime = false;\r\n this.quiz.generateFromBank = false;\r\n this.quiz.showCorrectAnswers = true;\r\n this.quiz.excludeCorrectlyAnsweredQuestions = false;\r\n this.quiz.showQuestionNumbers = true;\r\n this.quiz.requireAllAnswers = false;\r\n this.questionOrder = false;\r\n this.quiz.numberOfQuestions = null;\r\n $(\"#inputFormUrl\").scrollTop(0);\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.checkQuizWithChoiceType = function (quizRowList) {\r\n var result = false;\r\n quizRowList.forEach(function (value) {\r\n if (value.type == null) {\r\n result = false;\r\n }\r\n else if (value.type.toString() == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_MULTIPLE_ANSWER] || value.type.toString() == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER].toString()) {\r\n result = true;\r\n }\r\n });\r\n return result;\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.deactivateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.add(\"hidden\");\r\n mainLoadingElement.classList.remove(\"hidden\");\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.activateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.remove(\"hidden\");\r\n mainLoadingElement.classList.add(\"hidden\");\r\n };\r\n VhsQuizImportExportDirectiveController.prototype.clearImportModal = function () {\r\n this.file = null;\r\n angular.copy(this.defaultQuiz, this.quiz);\r\n };\r\n VhsQuizImportExportDirectiveController.PERCENTAGE_TYPE = \"PERCENTAGE\";\r\n VhsQuizImportExportDirectiveController.$inject = [\r\n \"$timeout\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$location\",\r\n DialogService_1.DialogService.NAME,\r\n \"$routeParams\",\r\n PermissionsService_1.PermissionsService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n QuizImportExportService_1.QuizImportExportService.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME\r\n ];\r\n return VhsQuizImportExportDirectiveController;\r\n})();\r\nexports.VhsQuizImportExportDirectiveController = VhsQuizImportExportDirectiveController;\r\nfunction VhsQuizImportExportDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"EA\",\r\n link: link,\r\n controller: VhsQuizImportExportDirectiveController,\r\n scope: {\r\n IsAbleToSave: \"=?vhsIsAbleToSave\",\r\n file: \"=?vhsImportFile\",\r\n quiz: \"=?vhsImportQuiz\"\r\n },\r\n templateUrl: url.template(\"components/import-quiz-template.html\"),\r\n };\r\n}\r\nexports.VhsQuizImportExportDirectiveFactory = VhsQuizImportExportDirectiveFactory;\r\nVhsQuizImportExportDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../businessUnits/BusinessUnitsService\":44,\"../courses/models/QuizCorrectAnswersType\":224,\"../quizzes/QuizImportExportService\":394,\"../quizzes/models/IQuizImportExportErrorCode\":399,\"../quizzes/models/QuestionType\":401,\"../security/PermissionsService\":418,\"../security/permissions/SecuredObjectType\":424,\"../settings/SettingsService\":427,\"../urls/QuizzesRouter\":486,\"../utils/PredefinedLanguagesUtils\":522,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./dialog/DialogService\":166,\"./models/Event\":170}],143:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar CommonNavigation_1 = require(\"../common/CommonNavigation\");\r\nvar QuestionType_1 = require(\"../quizzes/models/QuestionType\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar QuizResultStatus_1 = require(\"../quizzes/models/QuizResultStatus\");\r\nvar QuizzesRouter_1 = require(\"../urls/QuizzesRouter\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar CourseBundleUtils_1 = require(\"../utils/CourseBundleUtils\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar UploadUtils_1 = require(\"../utils/UploadUtils\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar ContentUtils_1 = require(\"../utils/ContentUtils\");\r\nvar UploadsService_1 = require(\"../storage/UploadsService\");\r\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar BusinessUnitsService_1 = require('../businessUnits/BusinessUnitsService');\r\nvar VhsQuizSurveyAnsweringController = (function () {\r\n function VhsQuizSurveyAnsweringController($scope, $q, $http, $uploader, $rootScope, $routeParams, $timeout, permissionsService, userService, securityService, authService, url, courseService, quizService, settingsService, commonNavigation, quizzesRouter, courseDetailsController, dialogService, bundleService, uploadUtils, progressService, uploadsService, businessUnitsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.$http = $http;\r\n this.$uploader = $uploader;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.permissionsService = permissionsService;\r\n this.userService = userService;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.url = url;\r\n this.courseService = courseService;\r\n this.quizService = quizService;\r\n this.settingsService = settingsService;\r\n this.commonNavigation = commonNavigation;\r\n this.quizzesRouter = quizzesRouter;\r\n this.courseDetailsController = courseDetailsController;\r\n this.dialogService = dialogService;\r\n this.bundleService = bundleService;\r\n this.uploadUtils = uploadUtils;\r\n this.progressService = progressService;\r\n this.uploadsService = uploadsService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.course = {};\r\n this.isQuizMode = false;\r\n this.showEdit = true;\r\n this.quiz = {};\r\n this.quizResults = [];\r\n this.quizCurrentResult = {};\r\n this.lastQuizResult = {};\r\n this.quizPassing = false;\r\n this.quizCurrentQuestion = {};\r\n this.quizQuestionAnswered = false;\r\n this.quizEnded = false;\r\n this.disableCompleteQuizButton = false;\r\n this.disableAnswers = false;\r\n this.quizCompleted = false;\r\n this.disableSubmitCurrentQuestionAnswerButton = false;\r\n this.lmsQuizCompleteListeners = [];\r\n this.currentQiuzQuestions = [];\r\n this.isTagsSelectionMode = false;\r\n this.disableTagsSelectionButtons = false;\r\n this.isFileUploadsEnabled = false;\r\n this.checkFlashcard = false;\r\n this.showCardAgain = false;\r\n this.flashcardCurrentCardIndex = 0;\r\n this.quizzesAreLoading = false;\r\n this.recursionDepth = 0;\r\n this.dragoverEventHandler = function (e) {\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = 'none';\r\n if (!_this.isFileUploadsEnabled) {\r\n return;\r\n }\r\n var dropAreaElements = document.querySelectorAll(\".file-upload div[ngf-drop], .file-upload div[ngf-drop] span\");\r\n dropAreaElements.forEach(function (elem) {\r\n if (elem == e.target) {\r\n e.dataTransfer.dropEffect = 'copy';\r\n }\r\n });\r\n };\r\n this.onBeforeRecordingStartCallback = function (recordingStatus) {\r\n return _this.$q.when(null);\r\n };\r\n this.onPauseRecordingCallback = function (isPaused) {\r\n };\r\n this.onStartRecordingCallback = function (recordingPromise) {\r\n _this.recordingPromises.push(recordingPromise);\r\n return recordingPromise;\r\n };\r\n this.saveFillableFormToBundle = function (data, questionId) {\r\n if (_this.courseId && _this.courseProgressId) {\r\n _this.prepareBundle().then(function (bundle) {\r\n _this.quizService.saveFillableForm(_this.quizId, questionId, bundle.id, _this.courseId, data)\r\n .then(function (jsonData) {\r\n if (!_this.quiz.oneQuestionAtATime) {\r\n var question = _this.quiz.questions.filter(function (q) { return q.id == questionId; })[0];\r\n question.responseData = jsonData;\r\n }\r\n else {\r\n _this.quizCurrentQuestion.responseData = jsonData;\r\n }\r\n _this.completeQuizButtonChecker();\r\n INotifier_1.notifier.success(\"Fillable form saved successfully\");\r\n })\r\n .catch(function (e) {\r\n INotifier_1.notifier.warning(\"Fillable form cannot be saved, while quiz is not a part of a course\");\r\n });\r\n }).catch(function (e) {\r\n INotifier_1.notifier.warning(\"Fillable form cannot be saved, while quiz is not a part of a course\");\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"Fillable form cannot be saved, while quiz is not a part of a course\");\r\n }\r\n };\r\n $scope.vm = this;\r\n this.recordingPromises = [];\r\n this.recordUrlForQuestionId = new Map();\r\n if ($scope.section) {\r\n this.clearSectionQuizParameters();\r\n this.courseProgressId = this.$scope.courseProgressId;\r\n this.progressBundle = this.$scope.progressBundle;\r\n this.lastSectionInCourse = this.$scope.lastSectionInCourse;\r\n $scope.$watch(\"section\", function (value) {\r\n _this.section = value;\r\n _this.courseId = _this.section.courseId;\r\n _this.moduleId = _this.section.moduleId;\r\n _this.courseService.get(_this.courseId).then(function (result) { return angular.copy(result, _this.course); });\r\n if (_this.sectionId != _this.section.id) {\r\n _this.sectionId = _this.section.id;\r\n _this.loadSection(_this.section.id)\r\n .then(function () {\r\n return _this.loadSectionProgress();\r\n });\r\n _this.confirmStatistics();\r\n }\r\n });\r\n }\r\n if ($scope.quizId) {\r\n $scope.$watch(\"quizId\", function (value) {\r\n _this.quizId = Number(value);\r\n _this.loadQuiz(_this.quizId);\r\n _this.isQuizMode = true;\r\n _this.confirmStatistics();\r\n });\r\n }\r\n document.body.addEventListener('dragover', this.dragoverEventHandler);\r\n $scope.$on(\"$destroy\", function () {\r\n document.body.removeEventListener('dragover', _this.dragoverEventHandler);\r\n });\r\n }\r\n VhsQuizSurveyAnsweringController.prototype.loadSection = function (sectionId) {\r\n var _this = this;\r\n return this.courseService.getSectionQuiz(this.courseId, this.moduleId, sectionId).then(function (result) {\r\n angular.copy(result, _this.quiz);\r\n _this.quizId = _this.quiz.id;\r\n if (_this.quiz.id) {\r\n return _this.loadSectionResults(_this.quiz.id, _this.section.id);\r\n }\r\n return result;\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.loadQuiz = function (quizId) {\r\n var _this = this;\r\n return this.quizService.getQuizInfo(this.quizId).then(function (q) {\r\n angular.copy(q, _this.quiz);\r\n _this.loadUserQuizResult(quizId);\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.reloadUserQuizResult = function (quizId) {\r\n var _this = this;\r\n this.quizService.getCurrentUserQuizResults(quizId, \"QUIZ\").then(function (result) {\r\n angular.copy(result, _this.quizResults);\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.loadUserQuizResult = function (quizId) {\r\n var _this = this;\r\n this.quizService.getCurrentUserQuizResults(quizId, \"QUIZ\").then(function (result) {\r\n angular.copy(result, _this.quizResults);\r\n _this.quizDuration = null;\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.loadSectionResults = function (quizId, sectionId) {\r\n var _this = this;\r\n return this.quizService.getCurrentUserQuizResults(quizId, \"COURSE\", sectionId, this.courseProgressId).then(function (result) {\r\n angular.copy(result, _this.quizResults);\r\n _this.loadCourseCertificates();\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.loadLastQuizResult = function (quizId) {\r\n var _this = this;\r\n return this.quizService.getCurrentUserQuizResults(quizId, \"COURSE\", this.sectionId, this.courseProgressId).then(function (result) {\r\n angular.copy(result, _this.quizResults);\r\n angular.copy(result[result.length - 1], _this.lastQuizResult);\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.loadCourseCertificates = function () {\r\n if (this.lastSectionInCourse && this.isQuizPassed()) {\r\n return this.courseDetailsController.loadCourseCertificates();\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isQuiz = function () {\r\n return this.quiz.quizType == \"QUIZ\";\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isSurvey = function () {\r\n return this.quiz.quizType == \"SURVEY\";\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isFlashcard = function () {\r\n return this.quiz.quizType == \"FLASHCARD\";\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.startQuiz = function (flashcardMode) {\r\n var _this = this;\r\n if (!this.quizzesAreLoading) {\r\n this.quizzesAreLoading = true;\r\n this.loadQuestionsTags(this.quizId)\r\n .then(function () {\r\n if (_this.questionsTags.length > 0 && _this.currentQuestionsTags.length > 0) {\r\n _this.selectedQuizTags = [];\r\n _this.disableTagsSelectionButtons = false;\r\n _this.isTagsSelectionMode = true;\r\n }\r\n else {\r\n if (flashcardMode) {\r\n _this.startQuizInternal(flashcardMode);\r\n }\r\n else {\r\n _this.startQuizInternal();\r\n }\r\n }\r\n })\r\n .catch(function () { return _this.quizzesAreLoading = false; });\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.loadQuestionsTags = function (quizId) {\r\n var _this = this;\r\n var businessUnitTags = [];\r\n var systemTags = [];\r\n var currentQuizTags = [];\r\n var loadBusinessUnitTags = this.quiz.businessUnitId\r\n ? this.businessUnitsService.getBusinessUnitTags(this.quiz.businessUnitId)\r\n .then(function (questionsTags) {\r\n businessUnitTags = questionsTags.split(\",\")\r\n .filter(function (tag) { return tag != undefined && tag.length > 0; });\r\n return businessUnitTags;\r\n })\r\n : this.$q.when(null);\r\n var loadSystemTags = this.settingsService.getQuestionsTags(quizId)\r\n .then(function (questionsTags) {\r\n systemTags = questionsTags.split(\",\")\r\n .filter(function (tag) { return tag != undefined && tag.length > 0; });\r\n return systemTags;\r\n });\r\n var loadCurrentQuizTags = this.quizService.getQuizForPassing(this.quizId, null)\r\n .then(function (quiz) {\r\n quiz.questions.forEach(function (question) {\r\n currentQuizTags.push.apply(currentQuizTags, (question.tags != null && question.tags != undefined && question.tags.length > 0)\r\n ? question.tags.split(\",\")\r\n : []);\r\n });\r\n return currentQuizTags;\r\n });\r\n return this.$q.all([\r\n loadBusinessUnitTags,\r\n loadSystemTags,\r\n loadCurrentQuizTags\r\n ]).then(function () {\r\n _this.questionsTags = [];\r\n _this.currentQuestionsTags = [];\r\n businessUnitTags.forEach(function (t) { return _this.questionsTags.push(t); });\r\n systemTags.forEach(function (t) {\r\n if (_this.questionsTags.indexOf(t) == -1) {\r\n _this.questionsTags.push(t);\r\n }\r\n });\r\n currentQuizTags.forEach(function (t) {\r\n if (_this.currentQuestionsTags.indexOf(t) == -1) {\r\n _this.currentQuestionsTags.push(t);\r\n }\r\n });\r\n return _this.questionsTags;\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.submitTags = function () {\r\n this.disableTagsSelectionButtons = true;\r\n this.startQuizInternal();\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.cancelTags = function () {\r\n this.isTagsSelectionMode = false;\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.startQuizInternal = function (flashcardMode) {\r\n var _this = this;\r\n if (!this.quizPassing && this.recursionDepth < VhsQuizSurveyAnsweringController.MAX_RECURSION_DEPTH) {\r\n this.recursionDepth++;\r\n this.showEdit = false;\r\n this.disableCompleteQuizButton = true;\r\n this.disableSubmitCurrentQuestionAnswerButton = true;\r\n this.settingsService.getIsQuizFilesUploadsEnabled()\r\n .then(function (result) { return _this.isFileUploadsEnabled = result; });\r\n this.quizService.startQuizByUser(this.quizId, \"QUIZ\", this.selectedQuizTags && this.selectedQuizTags.length > 0 ? this.selectedQuizTags : null, null, null, null, flashcardMode)\r\n .then(function (result) {\r\n _this.recursionDepth = 0;\r\n _this.quizService.getQuizForPassing(_this.quizId, result.id).then(function (q) {\r\n angular.copy(q, _this.quiz);\r\n angular.copy(result, _this.quizCurrentResult);\r\n _this.quiz.questions.forEach(function (question) {\r\n if (_this.isMatchingQuestionType(question)) {\r\n question.optionEntities = [];\r\n var curOptions = question.options;\r\n for (var i = 0; i < curOptions.length; i++) {\r\n question.optionEntities.push({ id: i, text: curOptions[i] });\r\n }\r\n }\r\n });\r\n _this.compliteResultId = result.id;\r\n _this.disableCompleteQuizButton = !_this.quiz.oneQuestionAtATime;\r\n _this.disableSubmitCurrentQuestionAnswerButton = false;\r\n _this.quizPassing = _this.$scope.quizPassing = true;\r\n _this.isTagsSelectionMode = false;\r\n angular.copy(_this.quiz.questions[0], _this.quizCurrentQuestion);\r\n _this.quizCurrentQuestionIndex = 0;\r\n _this.quizCurrentQuestionIndexCount = 0;\r\n _this.commonNavigation.preventNavigation();\r\n _this.quizCurrentResult.answers = [];\r\n _this.quizDuration = null;\r\n });\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.start.quiz.no.questions\") {\r\n INotifier_1.notifier.warning(\"You have already answered on all questions in that quiz\");\r\n }\r\n else if (response.data.error == \"error.no.suitable.questions\") {\r\n INotifier_1.notifier.warning(\"No suitable question found to display\");\r\n }\r\n else if (response.data.error == \"optimistic.locking.failed.catched\") {\r\n _this.startQuizInternal(flashcardMode);\r\n }\r\n _this.isTagsSelectionMode = false;\r\n _this.quizzesAreLoading = false;\r\n })\r\n .finally(function () { return _this.quizzesAreLoading = false; });\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.start = function (flashcardNextRound) {\r\n if (this.disabledStartButton) {\r\n return;\r\n }\r\n this.disabledStartButton = true;\r\n if (this.quiz.popUpMessage) {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#startQuizPopUp\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n else {\r\n this.afterStart(flashcardNextRound);\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.afterStart = function (flashcardNextRound) {\r\n var _this = this;\r\n if (!this.quizPassing && this.recursionDepth < VhsQuizSurveyAnsweringController.MAX_RECURSION_DEPTH) {\r\n this.recursionDepth++;\r\n this.showEdit = false;\r\n this.quizzesAreLoading = true;\r\n this.disableCompleteQuizButton = true;\r\n this.disableSubmitCurrentQuestionAnswerButton = true;\r\n this.settingsService.getIsQuizFilesUploadsEnabled()\r\n .then(function (result) { return _this.isFileUploadsEnabled = result; });\r\n this.quizService.startQuizByUser(this.quiz.id, \"COURSE\", null, this.courseId, this.section.id, this.courseProgressId, flashcardNextRound)\r\n .then(function (result) {\r\n _this.recursionDepth = 0;\r\n _this.quizService.getQuizForPassing(_this.quiz.id, result.id, _this.courseId).then(function (q) {\r\n angular.copy(q, _this.quiz);\r\n angular.copy(result, _this.quizCurrentResult);\r\n _this.quiz.questions.forEach(function (question) {\r\n if (_this.isMatchingQuestionType(question)) {\r\n question.optionEntities = [];\r\n var curOptions = question.options;\r\n for (var i = 0; i < curOptions.length; i++) {\r\n question.optionEntities.push({ id: i, text: curOptions[i] });\r\n }\r\n }\r\n });\r\n _this.disableCompleteQuizButton = !_this.quiz.oneQuestionAtATime;\r\n _this.disableSubmitCurrentQuestionAnswerButton = false;\r\n _this.quizPassing = _this.$scope.quizPassing = true;\r\n angular.copy(_this.quiz.questions[0], _this.quizCurrentQuestion);\r\n _this.quizCurrentQuestionIndex = 0;\r\n _this.quizCurrentQuestionIndexCount = 0;\r\n _this.commonNavigation.preventNavigation();\r\n _this.quizCurrentResult.answers = [];\r\n _this.quizzesAreLoading = false;\r\n if (_this.course.autofillQuestions == true &&\r\n _this.quizCurrentQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER]) {\r\n _this.getAnswerResultByQuestionCode();\r\n }\r\n if (_this.quiz.duration != null) {\r\n _this.settingsService.getCurrentDate()\r\n .then(function (serverTime) {\r\n _this.quizDuration = Math.round(_this.quiz.duration - Math.max(serverTime - result.startTime, 0) / 1000);\r\n if (_this.quizDuration != null && _this.quizDuration < 0) {\r\n _this.completeQuiz();\r\n }\r\n else if (_this.quizDuration != null) {\r\n _this.quizWarningTimeoutId = window.setTimeout(function () {\r\n INotifier_1.notifier.warning(\"You have 1 minute remaining\");\r\n }, (_this.quizDuration - 60) * 1000);\r\n _this.$scope.$broadcast('timer-set-countdown', _this.quizDuration);\r\n _this.$scope.$broadcast('timer-start');\r\n }\r\n });\r\n }\r\n else {\r\n _this.quizDuration = null;\r\n }\r\n _this.disabledStartButton = false;\r\n });\r\n })\r\n .catch(function (response) {\r\n _this.disabledStartButton = false;\r\n if (response.data.error == \"error.start.quiz.no.questions\") {\r\n INotifier_1.notifier.warning(\"You have already answered on all questions in that quiz\");\r\n }\r\n else if (response.data.error == \"error.no.suitable.questions\") {\r\n INotifier_1.notifier.warning(\"No suitable question found to display\");\r\n }\r\n else if (response.data.error == \"optimistic.locking.failed.catched\") {\r\n _this.afterStart(flashcardNextRound);\r\n }\r\n }).finally(function () {\r\n });\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.stop = function (confirm) {\r\n var _this = this;\r\n if (this.quizDuration != null && !confirm) {\r\n var isQuiz = this.isQuiz();\r\n this.dialogService.confirm(isQuiz ? \"Are you sure you want to cancel the quiz? When the timer is expired, the 'Failed' result will be saved.\" :\r\n \"Are you sure you want to cancel the survey? When the timer is expired, your answers will be saved.\", {\r\n title: isQuiz ? \"Cancel the quiz\" :\r\n \"Cancel the survey\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n _this.stop(true);\r\n });\r\n }\r\n else {\r\n clearTimeout(this.quizWarningTimeoutId);\r\n this.quizPassing = this.$scope.quizPassing = false;\r\n this.showEdit = true;\r\n this.quizQuestionAnswered = false;\r\n this.quiz.questions.forEach(function (q) {\r\n q.answers.forEach(function (a) { return a.selected = false; });\r\n });\r\n this.commonNavigation.allowNavigation();\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.selectQuizCurrentAnswer = function (question, answer) {\r\n question.answers.forEach(function (a) {\r\n a.selected = false;\r\n });\r\n answer.selected = true;\r\n this.completeQuizButtonChecker();\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.getAnswersForCurrentMatching = function (question, answer) {\r\n var selectedOptions = question && question.answers ? question.answers.filter(function (a) { return a.optionEntity && a.id != answer.id; }).map(function (a) { return a.optionEntity.id; }) : null;\r\n var currentSelectableAnswers = selectedOptions ? question.optionEntities.filter(function (op) { return selectedOptions.indexOf(op.id) == -1; }) : question.optionEntities;\r\n currentSelectableAnswers.sort(function (a, b) {\r\n return a.text.toLowerCase() <= b.text.toLowerCase() ? -1 : 1;\r\n });\r\n return currentSelectableAnswers;\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.changeOnMatchingAnswerSelecting = function (question, answer) {\r\n if (answer.optionEntity) {\r\n if (this.quiz.questions.indexOf(question) > -1) {\r\n this.quiz.questions[this.quiz.questions.indexOf(question)]\r\n .answers[question.answers.indexOf(answer)].option = answer.optionEntity.text;\r\n }\r\n else {\r\n question.answers[question.answers.indexOf(answer)].option = answer.optionEntity.text;\r\n }\r\n }\r\n else {\r\n question.answers[question.answers.indexOf(answer)].option = \"\";\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isQuizBranchingAllowed = function () {\r\n return this.quiz.oneQuestionAtATime && this.quiz.questionsInAccordanceWithSequenceNumber\r\n && !this.quiz.generateFromBank && !this.quiz.excludeCorrectlyAnsweredQuestions && !this.isFlashcard();\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.getQuizNextQuestion = function () {\r\n var _this = this;\r\n if (this.isQuizBranchingAllowed()) {\r\n this.quizService.getQuizForPassing(this.quiz.id, this.quizCurrentResult.id, this.courseId)\r\n .then(function (q) {\r\n var nextQuestionResults = q.questions.filter(function (question) {\r\n return _this.quiz.questions.filter(function (quizQuestion) { return quizQuestion.id == question.id; }).length == 0;\r\n });\r\n _this.quizCurrentQuestionIndex = q.questions.indexOf(nextQuestionResults[0]);\r\n angular.copy(q, _this.quiz);\r\n _this.quiz.questions.forEach(function (question) {\r\n if (_this.isMatchingQuestionType(question)) {\r\n question.optionEntities = [];\r\n var curOptions = question.options;\r\n for (var i = 0; i < curOptions.length; i++) {\r\n question.optionEntities.push({ id: i, text: curOptions[i] });\r\n }\r\n }\r\n });\r\n _this.quizQuestionAnswered = false;\r\n angular.copy(_this.quiz.questions[_this.quizCurrentQuestionIndex], _this.quizCurrentQuestion);\r\n });\r\n }\r\n else {\r\n this.quizQuestionAnswered = false;\r\n this.quizCurrentQuestionIndex += 1;\r\n this.quizCurrentQuestionIndexCount += 1;\r\n if (this.showCardAgain && this.quizCurrentQuestionIndexCount === this.quiz.questions.length) {\r\n var cards = this.quiz.questions.filter(function (q) { return q.showAgain; });\r\n var count = 0;\r\n this.flashcardCurrentCardIndex = this.flashcardCurrentCardIndex < cards.length ? this.flashcardCurrentCardIndex : 0;\r\n this.quiz.questions.forEach(function (q) {\r\n if (q.id === cards[_this.flashcardCurrentCardIndex].id) {\r\n _this.quizCurrentQuestionIndex = count;\r\n q.showAgain = false;\r\n _this.showCardAgain = cards.length > 1;\r\n }\r\n count++;\r\n });\r\n this.flashcardCurrentCardIndex += 1;\r\n this.quizCurrentQuestionIndexCount -= 1;\r\n }\r\n angular.copy(this.quiz.questions[this.quizCurrentQuestionIndex], this.quizCurrentQuestion);\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.submitQuizCurrentQuestionAnswer = function (cardKnowledgeStatus) {\r\n var _this = this;\r\n this.disableSubmitCurrentQuestionAnswerButton = true;\r\n this.quizCurrentResult.answerText = this.quizCurrentQuestion.shortAnswer;\r\n this.quizCurrentResult.responseData = this.quizCurrentQuestion.responseData;\r\n var answerResult = {\r\n quizResultId: this.quizCurrentResult.id,\r\n questionId: this.quizCurrentQuestion.id,\r\n answerIds: this.isScaledAnswerQuestionType(this.quizCurrentQuestion)\r\n ? this.quizCurrentQuestion.answers.filter(function (a) { return a.grade != null && a.grade != undefined; }).map(function (a) { return a.id; })\r\n : (this.isMatchingQuestionType(this.quizCurrentQuestion) || this.isHidingOptionsMatchingQuestionType(this.quizCurrentQuestion)\r\n ? this.quizCurrentQuestion.answers.filter(function (a) { return a.option != null && a.option != undefined; }).map(function (a) { return a.id; })\r\n : this.quizCurrentQuestion.answers.filter(function (a) { return a.selected; }).map(function (a) { return a.id; })),\r\n grades: this.isScaledAnswerQuestionType(this.quizCurrentQuestion)\r\n ? this.quizCurrentQuestion.answers.filter(function (a) { return a.grade != null && a.grade != undefined; }).map(function (a) {\r\n return { answerId: a.id, grade: a.grade, option: null };\r\n })\r\n : (this.isMatchingQuestionType(this.quizCurrentQuestion) || this.isHidingOptionsMatchingQuestionType(this.quizCurrentQuestion)\r\n ? this.quizCurrentQuestion.answers.filter(function (a) { return a.option != null && a.option != undefined; }).map(function (a) {\r\n return { answerId: a.id, grade: null, option: a.option };\r\n })\r\n : null),\r\n answerText: this.isFlashcardQuestionType(this.quizCurrentQuestion) ? cardKnowledgeStatus : this.quizCurrentResult.answerText,\r\n jsonData: !!this.quizCurrentResult.responseData ? JSON.stringify(this.quizCurrentResult.responseData) : null\r\n };\r\n if (this.isFlashcard() && cardKnowledgeStatus === \"I don't know this card\" && !this.quiz.generateFromBank) {\r\n this.quiz.questions[this.quizCurrentQuestionIndex].showAgain = true;\r\n this.showCardAgain = true;\r\n }\r\n if (this.recursionDepth < VhsQuizSurveyAnsweringController.MAX_RECURSION_DEPTH) {\r\n this.recursionDepth++;\r\n this.quizService.completeQuestionByUser(this.quizCurrentResult.quizId, this.quizCurrentResult.id, this.quizCurrentResult.version, this.quizCurrentQuestion.id, answerResult, this.courseId).then(function (q) {\r\n _this.recursionDepth = 0;\r\n _this.quizCurrentQuestion.answers.forEach(function (aFrom) {\r\n q.answers.forEach(function (aTo) {\r\n if (aFrom.id === aTo.id) {\r\n aTo.selected = aFrom.selected;\r\n }\r\n });\r\n });\r\n q.answers.sort(function (a1, a2) {\r\n var indexForA1;\r\n var indexForA2;\r\n _this.quizCurrentQuestion.answers.forEach(function (a) {\r\n if (a.id === a1.id) {\r\n indexForA1 = _this.quizCurrentQuestion.answers.indexOf(a);\r\n }\r\n if (a.id === a2.id) {\r\n indexForA2 = _this.quizCurrentQuestion.answers.indexOf(a);\r\n }\r\n });\r\n return indexForA1 - indexForA2;\r\n });\r\n q.shortAnswer = _this.quizCurrentQuestion.shortAnswer;\r\n q.responseData = _this.quizCurrentQuestion.responseData;\r\n if (_this.isFillInTheBlankQuestionType(q)) {\r\n q.answers.forEach(function (a) {\r\n if (q.shortAnswer && a.text && q.shortAnswer.toLowerCase() == a.text.toLowerCase()) {\r\n q.isCorrect = true;\r\n }\r\n });\r\n }\r\n if (_this.isMatchingQuestionType(_this.quizCurrentQuestion)\r\n || _this.isHidingOptionsMatchingQuestionType(_this.quizCurrentQuestion)) {\r\n q.answers.forEach(function (a) {\r\n var curOption = _this.quizCurrentQuestion.answers.filter(function (ans) { return ans.id == a.id; })[0].option;\r\n a.isCorrect = a.option && curOption && a.option.toLowerCase() == curOption.toLowerCase();\r\n a.option = curOption;\r\n });\r\n }\r\n if (_this.isHotspotSingleChoiceQuestionType(_this.quizCurrentQuestion) || _this.isHotspotMultipleChoiceQuestionType(_this.quizCurrentQuestion)) {\r\n q.responseData = _this.quizCurrentQuestion.responseData;\r\n q.attachedFileUrl = _this.quizCurrentQuestion.attachedFileUrl;\r\n }\r\n angular.copy(q, _this.quizCurrentQuestion);\r\n if (_this.isQuiz() || _this.isSurvey()) {\r\n _this.quizQuestionAnswered = true;\r\n }\r\n return _this.quizService.getUserQuizResult(_this.quizCurrentResult.quizId, _this.quizCurrentResult.id).then(function (result) {\r\n angular.copy(result, _this.quizCurrentResult);\r\n _this.disableSubmitCurrentQuestionAnswerButton = false;\r\n if (_this.quiz.oneQuestionAtATime\r\n && (!_this.quiz.showCorrectAnswers\r\n || _this.quizCurrentQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE]\r\n || _this.quizCurrentQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER]\r\n || _this.quizCurrentQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD])\r\n && _this.quizCurrentResult.status && !_this.showCardAgain) {\r\n _this.completeQuiz();\r\n return;\r\n }\r\n if (_this.quiz.oneQuestionAtATime && _this.quiz.showCorrectAnswers && _this.quizCurrentResult.status) {\r\n _this.disableCompleteQuizButton = false;\r\n }\r\n if (_this.quiz.oneQuestionAtATime\r\n && (!_this.quiz.showCorrectAnswers\r\n || _this.quizCurrentQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE]\r\n || _this.quizCurrentQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER]\r\n || _this.quizCurrentQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD])\r\n && (!_this.quizCurrentResult.status || _this.showCardAgain)) {\r\n if (_this.isShortAnswerAudioResponseQuestionType(_this.quizCurrentQuestion)) {\r\n _this.resetRecorder();\r\n }\r\n _this.checkFlashcard = false;\r\n _this.getQuizNextQuestion();\r\n return;\r\n }\r\n if (_this.quiz.oneQuestionAtATime && _this.section.acceptableNumberOfAttempts != -1 && !_this.course.permissions.viewOtherUsersProgress\r\n && (_this.quiz.showCorrectAnswers\r\n && _this.quizCurrentQuestion.type != QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE]\r\n && _this.quizCurrentQuestion.type != QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER]\r\n && _this.quizCurrentQuestion.type != QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD])) {\r\n if (!_this.quizCurrentResult.status) {\r\n _this.getQuizNextQuestion();\r\n }\r\n else if (_this.quizCurrentResult.status) {\r\n _this.completeQuiz();\r\n }\r\n }\r\n });\r\n })\r\n .catch(function (response) {\r\n if (response && response.data && response.data.error) {\r\n if (response.data.error == \"optimistic.locking.failed.catched\"\r\n || response.data.error == \"stale.object.state\") {\r\n _this.quizCompleted = false;\r\n _this.submitQuizCurrentQuestionAnswer(cardKnowledgeStatus);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.beforeQuizComplete = function () {\r\n var _this = this;\r\n if (this.recordingPromises.length > 0) {\r\n this.$scope.$broadcast(Event_1.Event.RECORDER_STOP_RECORD_EXTERNALLY);\r\n this.$q.all(this.recordingPromises)\r\n .then(function (results) {\r\n _this.recordingPromises.splice(0);\r\n _this.completeQuiz();\r\n })\r\n .catch(function (reject) {\r\n console.log(\"An error while save audio response\", reject);\r\n });\r\n }\r\n else {\r\n this.completeQuiz();\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.submitQuiz = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#submitQuizDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.completeQuiz = function () {\r\n var _this = this;\r\n this.quizCompleted = true;\r\n this.disableAnswers = true;\r\n clearTimeout(this.quizWarningTimeoutId);\r\n this.quizQuestionAnswered = false;\r\n this.disableCompleteQuizButton = true;\r\n if (this.quiz.oneQuestionAtATime) {\r\n this.disableAnswers = false;\r\n this.quizEnded = true;\r\n this.quizCompleted = false;\r\n this.loadLastQuizResult(this.quizId).then(function () {\r\n _this.afterCompleteQuiz();\r\n _this.$rootScope.$broadcast(Event_1.Event.QUIZ_SURVEY_COMPLETED);\r\n });\r\n }\r\n else {\r\n this.quizzesAreLoading = true;\r\n this.quiz.questions.forEach(function (question) {\r\n var result = {\r\n quizResultId: question.id,\r\n questionId: question.id,\r\n answerIds: _this.isScaledAnswerQuestionType(question)\r\n ? question.answers.filter(function (a) { return a.grade != null && a.grade != undefined; }).map(function (a) { return a.id; })\r\n : (_this.isMatchingQuestionType(question) || _this.isHidingOptionsMatchingQuestionType(question)\r\n ? question.answers.filter(function (a) { return a.option != null && a.option != undefined; }).map(function (a) { return a.id; })\r\n : question.answers.filter(function (a) { return a.selected; }).map(function (a) { return a.id; })),\r\n grades: _this.isScaledAnswerQuestionType(question)\r\n ? question.answers.filter(function (a) { return a.grade != null && a.grade != undefined; }).map(function (a) {\r\n return { answerId: a.id, grade: a.grade, option: null };\r\n })\r\n : (_this.isMatchingQuestionType(question) || _this.isHidingOptionsMatchingQuestionType(question)\r\n ? question.answers.filter(function (a) { return a.option != null && a.option != undefined; }).map(function (a) {\r\n return { answerId: a.id, grade: null, option: a.option };\r\n })\r\n : null),\r\n answerText: question.shortAnswer,\r\n jsonData: !!question.responseData ? JSON.stringify(question.responseData) : null\r\n };\r\n _this.quizCurrentResult.answers.push(result);\r\n });\r\n if (this.quiz.questions.length >= 200) {\r\n this.loadingDialogId = this.dialogService.confirmAndReturnDialogId(\"Loading...\", {\r\n title: \"Please, wait\",\r\n hideCancelButton: true,\r\n hideConfirmButton: true\r\n });\r\n }\r\n if (this.recursionDepth < VhsQuizSurveyAnsweringController.MAX_RECURSION_DEPTH) {\r\n this.recursionDepth++;\r\n this.quizService.completeQuizByUser(this.quizCurrentResult, this.courseId).then(function (quiz) {\r\n _this.loadLastQuizResult(_this.quizId).then(function () {\r\n _this.recursionDepth = 0;\r\n var tempQuizQuestions = [];\r\n angular.copy(_this.quiz.questions, tempQuizQuestions);\r\n quiz.questions.forEach(function (q) {\r\n if (q.type != QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER]) {\r\n if (!_this.isMatchingQuestionType(q) && !_this.isHidingOptionsMatchingQuestionType(q)) {\r\n q.answers.forEach(function (a) {\r\n tempQuizQuestions.forEach(function (tempq) {\r\n if (q.id == tempq.id && q.quizId == tempq.quizId) {\r\n tempq.answers.forEach(function (tempa) {\r\n if (a.id == tempa.id && a.questionId == tempa.questionId && tempa.selected) {\r\n a.selected = tempa.selected;\r\n if (a.isCorrect) {\r\n q.isCorrect = true;\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n if (_this.isMatchingQuestionType(q) || _this.isHidingOptionsMatchingQuestionType(q)) {\r\n var tempq = tempQuizQuestions.filter(function (t) { return t.id == q.id; })[0];\r\n q.answers.forEach(function (a) {\r\n var tempa = tempq.answers.filter(function (ta) { return ta.id == a.id; })[0];\r\n a.isCorrect = a.option && tempa.option && (a.option.toLowerCase() == tempa.option.toLowerCase());\r\n a.option = tempa.option;\r\n });\r\n q.isCorrect = true;\r\n q.answers.forEach(function (a) {\r\n if (!a.isCorrect) {\r\n q.isCorrect = false;\r\n }\r\n });\r\n }\r\n if (_this.isFillInTheBlankQuestionType(q)) {\r\n if (tempQuizQuestions && tempQuizQuestions.length > 0) {\r\n var tempq = tempQuizQuestions.filter(function (t) { return t.id == q.id; })[0];\r\n q.shortAnswer = tempq.shortAnswer;\r\n q.answers.forEach(function (a) {\r\n if (q.shortAnswer && a.text && q.shortAnswer.toLowerCase() == a.text.toLowerCase()) {\r\n q.isCorrect = true;\r\n }\r\n });\r\n }\r\n }\r\n if (_this.isHotspotSingleChoiceQuestionType(q) || _this.isHotspotMultipleChoiceQuestionType(q)) {\r\n tempQuizQuestions.forEach(function (tempq) {\r\n if (q.id == tempq.id && q.quizId == tempq.quizId) {\r\n q.responseData = tempq.responseData;\r\n q.attachedFileUrl = tempq.attachedFileUrl;\r\n }\r\n });\r\n }\r\n }\r\n });\r\n angular.copy(quiz.questions, _this.currentQiuzQuestions);\r\n _this.afterCompleteQuiz();\r\n });\r\n }).catch(function (response) {\r\n if (response && response.data && response.data.error) {\r\n if (response.data.error == \"optimistic.locking.failed.catched\") {\r\n _this.quizCompleted = false;\r\n _this.completeQuiz();\r\n }\r\n }\r\n }).finally(function () {\r\n _this.quizCompleted = false;\r\n if (_this.isQuizMode || _this.isSurvey()) {\r\n _this.confirmStatistics();\r\n }\r\n _this.$rootScope.$broadcast(Event_1.Event.QUIZ_SURVEY_COMPLETED);\r\n });\r\n }\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.completeQuizButtonChecker = function () {\r\n var _this = this;\r\n this.disableCompleteQuizButton = true;\r\n if (!this.quiz.oneQuestionAtATime && !this.quiz.requireAllAnswers) {\r\n this.quiz.questions.forEach(function (q) {\r\n if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER]) {\r\n if (q.shortAnswer != null && q.shortAnswer != undefined && q.shortAnswer.length > 0) {\r\n _this.disableCompleteQuizButton = false;\r\n return;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD]) {\r\n if (!!q.responseData || (!!q.shortAnswer && q.shortAnswer.length > 0)) {\r\n _this.disableCompleteQuizButton = false;\r\n return;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILL_IN_THE_BLANK]) {\r\n if (q.shortAnswer && q.shortAnswer.length > 0) {\r\n _this.disableCompleteQuizButton = false;\r\n return;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MATCHING_ANSWER]\r\n || q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HIDING_OPTIONS_MATCHING_ANSWER]) {\r\n q.answers.forEach(function (answer) {\r\n if (answer.option && answer.option.length > 0) {\r\n _this.disableCompleteQuizButton = false;\r\n return;\r\n }\r\n });\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM]) {\r\n if (q.responseData) {\r\n _this.disableCompleteQuizButton = false;\r\n return;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE]) {\r\n if (_this.recordUrlForQuestionId.size > 0) {\r\n if (_this.recordUrlForQuestionId.has(q.id)) {\r\n _this.disableCompleteQuizButton = false;\r\n }\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER]) {\r\n if (q.answers.filter(function (a) { return a.grade == 0 || a.grade == 1; }).length > 0) {\r\n _this.disableCompleteQuizButton = false;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE] || q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_MULTIPLE_CHOICE]) {\r\n if (q.responseData) {\r\n _this.disableCompleteQuizButton = false;\r\n return;\r\n }\r\n }\r\n else {\r\n q.answers.forEach(function (a) {\r\n if (a.selected) {\r\n _this.disableCompleteQuizButton = false;\r\n return;\r\n }\r\n });\r\n }\r\n });\r\n this.disableCompleteQuizButton = this.disableCompleteQuizButton || this.recordingPromises.length > 0;\r\n }\r\n if (this.quiz.requireAllAnswers && !this.quiz.oneQuestionAtATime) {\r\n var answered = 0;\r\n this.quiz.questions.forEach(function (q) {\r\n if ((q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER] || q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD]) && q.shortAnswer != undefined) {\r\n if (q.shortAnswer.length > 0) {\r\n answered++;\r\n return;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER] || q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_MULTIPLE_ANSWER]) {\r\n var singeOrMultipleQuestionIsAnswered = false;\r\n q.answers.forEach(function (s) {\r\n if (s.selected && !singeOrMultipleQuestionIsAnswered) {\r\n singeOrMultipleQuestionIsAnswered = true;\r\n }\r\n });\r\n if (singeOrMultipleQuestionIsAnswered) {\r\n answered++;\r\n return;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE]) {\r\n if (_this.recordUrlForQuestionId.size > 0) {\r\n var hasUrlForSound = false;\r\n if (_this.recordUrlForQuestionId.has(q.id) && !hasUrlForSound) {\r\n hasUrlForSound = true;\r\n }\r\n if (hasUrlForSound) {\r\n answered++;\r\n }\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MATCHING_ANSWER]\r\n || q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HIDING_OPTIONS_MATCHING_ANSWER]) {\r\n var isAtLeastOneEmpty = false;\r\n q.answers.forEach(function (answer) {\r\n if (answer.option == null || answer.option == undefined || answer.option.length == 0) {\r\n isAtLeastOneEmpty = true;\r\n return;\r\n }\r\n });\r\n if (!isAtLeastOneEmpty) {\r\n answered++;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILL_IN_THE_BLANK]) {\r\n if (q.shortAnswer && q.shortAnswer.length > 0) {\r\n answered++;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM]) {\r\n if (q.responseData) {\r\n answered++;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER]) {\r\n if (q.answers.filter(function (a) { return a.grade == undefined; }).length == 0) {\r\n answered++;\r\n }\r\n }\r\n else if (q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE] || q.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_MULTIPLE_CHOICE]) {\r\n if (q.responseData) {\r\n answered++;\r\n }\r\n }\r\n });\r\n if (this.quiz.questions.length <= answered) {\r\n this.disableCompleteQuizButton = false;\r\n }\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.confirmStatistics = function () {\r\n this.quizEnded = false;\r\n this.currentQiuzQuestions = [];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.afterCompleteQuiz = function () {\r\n var _this = this;\r\n if (this.loadingDialogId != undefined) {\r\n $(\"#\" + this.loadingDialogId).modal('hide');\r\n }\r\n this.showEdit = true;\r\n this.commonNavigation.allowNavigation();\r\n this.disableCompleteQuizButton = false;\r\n this.quiz.questions.forEach(function (q) {\r\n q.answers.forEach(function (a) { return a.selected = false; });\r\n });\r\n this.$scope.$broadcast('timer-clear');\r\n this.quizDuration = null;\r\n this.quizEnded = true;\r\n this.quizPassing = this.$scope.quizPassing = false;\r\n this.disableAnswers = false;\r\n if (!this.isQuizMode) {\r\n this.loadSection(this.section.id)\r\n .then(function () { return _this.quizzesAreLoading = false; })\r\n .then(function () { return _this.loadCourseCertificates(); })\r\n .then(function () {\r\n if (_this.lmsQuizCompleteListeners) {\r\n for (var i = 0; i < _this.lmsQuizCompleteListeners.length; i++) {\r\n try {\r\n _this.lmsQuizCompleteListeners[i]();\r\n }\r\n catch (e) {\r\n }\r\n }\r\n _this.lmsQuizCompleteListeners = [];\r\n }\r\n })\r\n .then(function () { return _this.loadSectionProgress(); });\r\n }\r\n else {\r\n this.reloadUserQuizResult(this.quizId);\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.clearSectionQuizParameters = function () {\r\n this.quiz = {};\r\n this.quizResults = [];\r\n this.quizCurrentResult = {};\r\n this.lastQuizResult = {};\r\n this.quizPassing = this.$scope.quizPassing = false;\r\n this.showEdit = true;\r\n this.commonNavigation.allowNavigation();\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isQuizPassed = function () {\r\n var passedResults = this.quizResults.filter(function (p) { return p.status == QuizResultStatus_1.QuizResultStatus.PASSED; });\r\n return passedResults.length > 0;\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isFillableFormQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isFillInTheBlankQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILL_IN_THE_BLANK];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isAnyValidMatching = function (question) {\r\n var answered = question.answers.filter(function (a) { return a.option != null && a.option != \"\" && a.option != undefined; });\r\n return (answered && (this.quiz.requireAllAnswers ?\r\n answered.length == question.answers.length : answered.length > 0));\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isMatchingQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MATCHING_ANSWER];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isHidingOptionsMatchingQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HIDING_OPTIONS_MATCHING_ANSWER];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isMultipleChoiceMultipleAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_MULTIPLE_ANSWER];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isMultipleChoiceSingleAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isShortAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isShortAnswerAudioResponseQuestionType = function (question) {\r\n return question.type && question.type.toString() == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isShortAnswerWithUploadQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isScaledAnswerQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isFlashcardQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.FLASH_CARD];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isHotspotSingleChoiceQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isHotspotMultipleChoiceQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_MULTIPLE_CHOICE];\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isTooLongAnswerFor = function (question) {\r\n if (question.shortAnswer) {\r\n return question.shortAnswer.length >= question.shortAnswerMaxLength;\r\n }\r\n return false;\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.hasShortAnswer = function () {\r\n return this.quiz.questions.some(function (question) { return question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER]; });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.onCompleteRecordingCallback = function (blob, recordingPromise, question) {\r\n var _this = this;\r\n this.recordUrlForQuestionId.set(question.id, URL.createObjectURL(blob));\r\n if (!this.updateBundlePromise) {\r\n this.updateBundlePromise = this.prepareBundleFiles(blob, recordingPromise, question);\r\n this.recordingPromises.splice(this.recordingPromises.indexOf(recordingPromise), 1);\r\n this.updateBundlePromise.finally(function () {\r\n _this.updateBundlePromise = null;\r\n });\r\n return this.updateBundlePromise;\r\n }\r\n else {\r\n return this.updateBundlePromise\r\n .then(function () {\r\n _this.recordingPromises.splice(_this.recordingPromises.indexOf(recordingPromise), 1);\r\n return _this.updateBundlePromise = _this.prepareBundleFiles(blob, recordingPromise, question);\r\n })\r\n .finally(function () {\r\n _this.updateBundlePromise = null;\r\n });\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.prepareBundleFiles = function (blob, recordingPromise, question) {\r\n var _this = this;\r\n if (this.section) {\r\n return this.prepareBundle()\r\n .then(function (bundle) {\r\n _this.progressBundle = bundle;\r\n var bundleInputInfo = CourseBundleUtils_1.CourseBundleUtils.getPreparedBundleInputInfoFromBlob(_this.progressBundle.id, _this.progressBundle.version, blob, \"quiz-audio\");\r\n if (question) {\r\n question.responseData = {\r\n type: blob.type,\r\n bundleFileKey: bundleInputInfo.recordName,\r\n bundleFileUrl: bundleInputInfo.recordUrl\r\n };\r\n return _this.updateBundleFromFile(bundleInputInfo);\r\n }\r\n else {\r\n console.log(\"Question for recorded audio was not found.\");\r\n return _this.$q.when(null);\r\n }\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n _this.recordUrlForQuestionId.delete(question.id);\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n });\r\n }\r\n else {\r\n console.log(\"Section or Progress Bundle are not defined.\");\r\n return this.$q.when(null);\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.prepareBundle = function () {\r\n var _this = this;\r\n if (!this.progressBundle) {\r\n return this.progressService.getProgressBundleId(this.courseId, this.courseProgressId)\r\n .then(function (id) {\r\n if (!id) {\r\n return _this.progressService.createProgressBundle(_this.courseId, _this.courseProgressId)\r\n .then(function (id) {\r\n return _this.bundleService.getBundle(id, \"ALL\")\r\n .then(function (bundle) { return bundle; });\r\n });\r\n }\r\n else {\r\n return _this.bundleService.getBundle(id, \"ALL\")\r\n .then(function (bundle) { return bundle; });\r\n }\r\n });\r\n }\r\n else {\r\n return this.$q.when(this.progressBundle);\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.updateBundleFromFiles = function (bundleInputInfo) {\r\n var _this = this;\r\n this.disableCompleteQuizButton = this.disableSubmitCurrentQuestionAnswerButton = true;\r\n return this.bundleService.updateBundleFromFiles(bundleInputInfo.bundleInput)\r\n .then(function (result) {\r\n var fileUploadInfos = result[\"fileUploadInfos\"];\r\n var bundleFileKeyByFileId = result[\"bundleFileKeyByFileId\"];\r\n fileUploadInfos.forEach(function (addedFile) {\r\n var fileKey = bundleFileKeyByFileId[addedFile.fileId];\r\n var uploadCallback = function (uploadStatus) { return _this.getUploadedFile(_this.progressBundle, fileKey, uploadStatus); };\r\n var file = bundleInputInfo.addedFilesMap[fileKey];\r\n _this.uploadUtils.uploadBundleByChunks(file, addedFile.fileId, _this.progressBundle.id, addedFile.url, addedFile.method, uploadCallback);\r\n });\r\n bundleInputInfo.bundleInput.deletedFileIds.forEach(function (fileId) { return _this.deleteFileFromBundleAfterUpdate(fileId); });\r\n return result;\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.completeQuizButtonChecker();\r\n _this.disableSubmitCurrentQuestionAnswerButton = false;\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.updateBundleFromFile = function (bundleInputInfo) {\r\n var _this = this;\r\n this.disableCompleteQuizButton = this.disableSubmitCurrentQuestionAnswerButton = true;\r\n return this.bundleService.updateBundleFromFiles(bundleInputInfo.bundleInput)\r\n .then(function (result) {\r\n var fileUploadInfos = result[\"fileUploadInfos\"];\r\n var fileUploadInfo = fileUploadInfos[0];\r\n var addedFile = bundleInputInfo.addedBundleFile.file;\r\n var uploadCallback = function (uploadStatus) { return _this.getUploadedFile(_this.progressBundle, addedFile.name, uploadStatus); };\r\n _this.uploadUtils.uploadBundleByChunks(addedFile, fileUploadInfo.fileId, _this.progressBundle.id, fileUploadInfo.url, fileUploadInfo.method, uploadCallback);\r\n return result;\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.completeQuizButtonChecker();\r\n _this.disableSubmitCurrentQuestionAnswerButton = false;\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.getUploadedFile = function (bundle, fileKey, uploadStatus) {\r\n switch (uploadStatus) {\r\n case \"SUCCESS\": {\r\n this.getUploadedFileToBundleByFileKey(bundle.id, fileKey)\r\n .then(function (file) {\r\n if (bundle.filesMap.has(fileKey)) {\r\n var bundleFile = bundle.filesMap.get(fileKey);\r\n if (!bundleFile.url && file.url) {\r\n bundleFile.url = file.url;\r\n }\r\n }\r\n else {\r\n bundle.files.push(file);\r\n bundle.filesMap.set(fileKey, file);\r\n }\r\n });\r\n INotifier_1.notifier.success(\"The record has been successfully uploaded\");\r\n break;\r\n }\r\n case \"ABORT\": {\r\n this.deleteFileAfterUploadFailure(fileKey);\r\n INotifier_1.notifier.error(\"Uploading of the record has been canceled\");\r\n break;\r\n }\r\n case \"ERROR\": {\r\n this.deleteFileAfterUploadFailure(fileKey);\r\n INotifier_1.notifier.error(\"Uploading of the record has failed\");\r\n break;\r\n }\r\n case \"ERROR_ON_POST\": {\r\n this.deleteFileAfterUploadFailure(fileKey);\r\n INotifier_1.notifier.error(\"Uploading of the record has failed\");\r\n break;\r\n }\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.getUploadedFileToBundleByFileKey = function (bundleId, fileKey) {\r\n return this.bundleService.getUploadedFileToBundleByFileKey(bundleId, fileKey);\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.resetRecorder = function () {\r\n var _this = this;\r\n this.isRecorderReset = true;\r\n this.$timeout(function () { return _this.isRecorderReset = false; }, 0, false);\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isFileUploaded = function (question, file) {\r\n return this.progressBundle && this.progressBundle.filesMap.has(file.bundleFileKey);\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.onFileSelectAndUpload = function (question) {\r\n var _this = this;\r\n if (question.fileList && question.fileList.length) {\r\n if (question.fileList && question.fileList.length) {\r\n this.$q.when(this.updateBundlePromise)\r\n .then(function () {\r\n _this.updateBundlePromise = _this.prepareBundleFilesOnUpload(question);\r\n return _this.updateBundlePromise;\r\n })\r\n .finally(function () {\r\n _this.updateBundlePromise = null;\r\n });\r\n }\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.deleteFile = function (question, file) {\r\n var _this = this;\r\n var bundleFileKey = file.bundleFileKey;\r\n this.deleteFileFromQuestionIfExist(question, bundleFileKey);\r\n if (this.isFileUploaded(question, file)) {\r\n var fileId = this.progressBundle.filesMap.get(bundleFileKey).fileId;\r\n var bundleInput = {\r\n id: this.progressBundle.id,\r\n version: this.progressBundle.version,\r\n addedFiles: [],\r\n deletedFileIds: [fileId]\r\n };\r\n var bundleInputInfo = { bundleInput: bundleInput };\r\n this.$q.when(this.updateBundlePromise)\r\n .then(function () {\r\n _this.updateBundlePromise = _this.updateBundleFromFiles(bundleInputInfo);\r\n return _this.updateBundlePromise;\r\n })\r\n .finally(function () {\r\n _this.updateBundlePromise = null;\r\n });\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.deleteFileAfterUploadFailure = function (fileKey) {\r\n if (this.quiz.oneQuestionAtATime) {\r\n this.deleteFileFromQuestionIfExist(this.quizCurrentQuestion, fileKey);\r\n }\r\n else {\r\n for (var _i = 0, _a = this.quiz.questions; _i < _a.length; _i++) {\r\n var question = _a[_i];\r\n if (this.deleteFileFromQuestionIfExist(question, fileKey)) {\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.deleteAllFilesFromQuestion = function (question) {\r\n var _this = this;\r\n if (!!question.fileList && question.fileList.length > 0) {\r\n question.fileList.forEach(function (f) {\r\n _this.deleteFileFromQuestionIfExist(question, f.bundleFileKey);\r\n });\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.deleteFileFromQuestionIfExist = function (question, fileKey) {\r\n var fileDeleted = false;\r\n var attachDeleted = false;\r\n if (question.fileList && question.fileList.length) {\r\n var fileIndex = question.fileList.map(function (f) { return f.bundleFileKey; }).indexOf(fileKey);\r\n if (fileIndex != -1) {\r\n question.fileList.splice(fileIndex, 1);\r\n fileDeleted = true;\r\n }\r\n }\r\n if (question.responseData && question.responseData.filesAttached) {\r\n var fileAttachIndex = question.responseData.filesAttached\r\n .map(function (f) { return f.bundleFileKey; })\r\n .indexOf(fileKey);\r\n if (fileAttachIndex != -1) {\r\n question.responseData.filesAttached.splice(fileAttachIndex, 1);\r\n if (question.responseData.filesAttached.length == 0) {\r\n question.responseData = null;\r\n }\r\n attachDeleted = true;\r\n }\r\n }\r\n else if (question.responseData) {\r\n question.responseData = null;\r\n this.recordUrlForQuestionId.delete(question.id);\r\n this.completeQuizButtonChecker();\r\n }\r\n return fileDeleted && attachDeleted;\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.deleteFileFromBundleAfterUpdate = function (fileId) {\r\n if (this.progressBundle) {\r\n var file = this.progressBundle.files.filter(function (file) { return file.fileId === fileId; }).pop();\r\n if (file) {\r\n this.progressBundle.files.splice(this.progressBundle.files.indexOf(file), 1);\r\n this.progressBundle.filesMap.delete(file.key);\r\n }\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.prepareBundleFilesOnUpload = function (question) {\r\n var _this = this;\r\n if (this.section) {\r\n return this.prepareBundle()\r\n .then(function (bundle) {\r\n _this.progressBundle = bundle;\r\n var bundleInputInfo = {};\r\n bundleInputInfo.addedFilesMap = {};\r\n var addedFiles = [];\r\n if (question) {\r\n question.fileList.forEach(function (file) {\r\n var bundleFileKey = RandomUtils_1.RandomUtils.generateRandomId(\"quiz-upload\") + \".\" + ContentUtils_1.ContentUtils.getFileExt(file.name);\r\n addedFiles.push({\r\n name: bundleFileKey,\r\n type: file.type,\r\n size: file.size,\r\n path: \"\"\r\n });\r\n bundleInputInfo.addedFilesMap[bundleFileKey] = file;\r\n file.bundleFileKey = bundleFileKey;\r\n if (question) {\r\n if (!question.responseData) {\r\n question.responseData = { filesAttached: [] };\r\n }\r\n question.responseData.filesAttached.push({\r\n type: file.type,\r\n bundleFileKey: bundleFileKey,\r\n bundleFileUrl: URL.createObjectURL(file)\r\n });\r\n }\r\n });\r\n bundleInputInfo.bundleInput = {\r\n id: bundle.id,\r\n version: bundle.version,\r\n addedFiles: addedFiles,\r\n deletedFileIds: []\r\n };\r\n return _this.updateBundleFromFiles(bundleInputInfo);\r\n }\r\n else {\r\n console.log(\"Question for uploading file was not found.\");\r\n return _this.$q.when(null);\r\n }\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n _this.deleteAllFilesFromQuestion(question);\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n });\r\n }\r\n else {\r\n console.log(\"Section or Progress Bundle are not defined.\");\r\n question.fileList.splice(0);\r\n return this.$q.when(null);\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.loadSectionProgress = function () {\r\n var _this = this;\r\n return this.progressService.getSectionProgress(this.courseId, this.courseProgressId, this.sectionId)\r\n .then(function (sectionProgress) {\r\n _this.sectionProgress = sectionProgress;\r\n return _this.sectionProgress;\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.checkShortAnswerLength = function (question) {\r\n if (question.shortAnswer.length > question.shortAnswerMaxLength) {\r\n question.shortAnswer = question.shortAnswer.slice(0, question.shortAnswerMaxLength);\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.decodeQuizSectionStatus = function (sectionStatus) {\r\n var result;\r\n if (sectionStatus === 'COMPLETED') {\r\n result = \"Completed\";\r\n }\r\n else if (sectionStatus === 'FAILED' || sectionStatus === 'SOS') {\r\n result = \"Failed\";\r\n }\r\n else if (sectionStatus === 'SUBMITTED') {\r\n result = \"Submitted for assessment\";\r\n }\r\n return result;\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.getLastQuizResultStatus = function () {\r\n if (this.quizResults && this.quizResults.length > 0) {\r\n var sortedQuizResults = this.quizResults.sort(function (r1, r2) { return r1.attempt - r2.attempt; });\r\n return sortedQuizResults[sortedQuizResults.length - 1].status.toString();\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.getAnswerResultByQuestionCode = function () {\r\n var _this = this;\r\n return this.quiz.questions.forEach(function (question) {\r\n return _this.quizService.getAnswerResultByQuestionCode(_this.courseProgressId, question.questionCode)\r\n .then(function (result) { return question.shortAnswer = result; });\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.showLastResultQuiz = function () {\r\n var _this = this;\r\n this.progressService.getIndividualQuizResults(this.course.id, this.courseProgressId, this.sectionId)\r\n .then(function (quizResultsForSection) {\r\n if (quizResultsForSection) {\r\n var selectedQuizResultId;\r\n for (var i = quizResultsForSection.length - 1; i >= 0; i--) {\r\n var quiz = quizResultsForSection[i];\r\n if (quiz.correctAnswersCount + quiz.wrongAnswersCount + quiz.questionsToBeScoredCount > 0) {\r\n selectedQuizResultId = quizResultsForSection[i].id;\r\n break;\r\n }\r\n }\r\n if (selectedQuizResultId) {\r\n _this.dialogService.confirm(\"\", {\r\n title: \"Last result\",\r\n hideCancelButton: true,\r\n hideConfirmButton: true,\r\n type: \"quiz\",\r\n course: _this.course,\r\n lastQuizResultId: selectedQuizResultId\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"Don't have not null attempt\");\r\n }\r\n }\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.showModalWithFillableForm = function (question) {\r\n // let dialog = $(\"#fillableFormModal\"+questionId);\r\n // dialog.modal(\"show\");\r\n this.dialogService.confirmFillableForm({\r\n question: question,\r\n saveFillableFormToBundle: this.saveFillableFormToBundle\r\n });\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.hideModalWithFillableForm = function (questionId) {\r\n var dialog = $(\"#fillableFormModal\" + questionId);\r\n dialog.modal(\"hide\");\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isFullWidthAnswer = function (question) {\r\n return (this.isShortAnswerQuestionType(question) || this.isShortAnswerWithUploadQuestionType(question))\r\n || this.isFillInTheBlankQuestionType(question)\r\n || (this.isMatchingQuestionType(question) || this.isHidingOptionsMatchingQuestionType(question));\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.isShowingQuestionExplanation = function () {\r\n return (!this.isQuizMode && !this.isSurvey() && this.sectionProgress && this.sectionProgress.attemptsTaken\r\n && this.section.acceptableNumberOfAttempts - this.sectionProgress.attemptsTaken <= 0\r\n && this.section.blockingProgressAfterFail && this.sectionProgress.status != 'SOS'\r\n && this.section.acceptableNumberOfAttempts != -1)\r\n || (!this.isQuiz() && !this.isQuizMode)\r\n || ((!this.isQuizMode || (!this.quizPassing && this.isQuizMode)) && this.section.status === 'SOS');\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.flipTheCard = function () {\r\n var _this = this;\r\n if (!this.checkFlashcard) {\r\n this.checkFlashcard = true;\r\n }\r\n if ($(\".flashcard_front\").hasClass(\"flashcard_flip\")) {\r\n $(\".flashcard_front\").removeClass(\"flashcard_flip\");\r\n }\r\n else {\r\n $(\".flashcard_front\").addClass(\"flashcard_flip\");\r\n }\r\n if ($(\"#frontSideTitle\").hasClass(\"hidden\")) {\r\n this.$timeout(function () {\r\n $(\"#frontSideClickToFlip\").removeClass(\"flashcard_clickToFlip-label\");\r\n _this.setHidden(\"backSideTitle\", \"frontSideTitle\", \"backSideBody\", \"frontSideBody\", \"backSideLabel\", \"frontSideLabel\");\r\n }, 250);\r\n }\r\n else {\r\n this.$timeout(function () {\r\n $(\"#frontSideClickToFlip\").addClass(\"flashcard_clickToFlip-label\");\r\n _this.setHidden(\"frontSideTitle\", \"backSideTitle\", \"frontSideBody\", \"backSideBody\", \"frontSideLabel\", \"backSideLabel\");\r\n }, 250);\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.updateFlashcardPage = function () {\r\n if ($(\"#frontSideTitle\").hasClass(\"hidden\")) {\r\n $(\".flashcard_front\").removeClass(\"flashcard_flip\");\r\n $(\"#frontSideClickToFlip\").removeClass(\"flashcard_clickToFlip-label\");\r\n this.setHidden(\"backSideTitle\", \"frontSideTitle\", \"backSideBody\", \"frontSideBody\", \"backSideLabel\", \"frontSideLabel\");\r\n this.checkFlashcard = false;\r\n }\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.setHidden = function (firstSideForSetHidden, firstSideForRemoveHidden, secondSideForSetHidden, secondSideForRemoveHidden, thirdSideForSetHidden, thirdSideForRemoveHidden) {\r\n $(\"#\" + firstSideForSetHidden).addClass(\"hidden\");\r\n $(\"#\" + secondSideForSetHidden).addClass(\"hidden\");\r\n $(\"#\" + thirdSideForSetHidden).addClass(\"hidden\");\r\n $(\"#\" + firstSideForRemoveHidden).removeClass(\"hidden\");\r\n $(\"#\" + secondSideForRemoveHidden).removeClass(\"hidden\");\r\n $(\"#\" + thirdSideForRemoveHidden).removeClass(\"hidden\");\r\n };\r\n VhsQuizSurveyAnsweringController.prototype.showExplanations = function () {\r\n return this.section == undefined && this.quiz.oneQuestionAtATime && this.quizCurrentQuestion.explanations && this.quizCurrentQuestion.explanations.length > 0 && this.quizQuestionAnswered\r\n || this.quizQuestionAnswered && this.quizCurrentQuestion.id\r\n && this.quizCurrentQuestion.explanations && this.quizCurrentQuestion.explanations.length > 0\r\n && this.section.acceptableNumberOfAttempts - this.sectionProgress.attemptsTaken <= 0\r\n && (this.section.acceptableNumberOfAttempts != -1 && this.course.permissions.viewOtherUsersProgress && this.quiz.showCorrectAnswers\r\n || this.section.acceptableNumberOfAttempts == -1 && this.quiz.showCorrectAnswers);\r\n };\r\n VhsQuizSurveyAnsweringController.MAX_RECURSION_DEPTH = 3;\r\n VhsQuizSurveyAnsweringController.$inject = [\r\n \"$scope\",\r\n \"$q\",\r\n \"$http\",\r\n \"Upload\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$timeout\",\r\n PermissionsService_1.PermissionsService.NAME,\r\n UserService_1.UserService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n QuizService_1.QuizService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n CommonNavigation_1.CommonNavigation.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n CommonNavigation_1.CommonNavigation.NAME,\r\n DialogService_1.DialogService.NAME,\r\n BundleService_1.BundleService.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n UploadsService_1.UploadsService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME\r\n ];\r\n return VhsQuizSurveyAnsweringController;\r\n})();\r\nexports.VhsQuizSurveyAnsweringController = VhsQuizSurveyAnsweringController;\r\nfunction VhsQuizSurveyAnsweringDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsQuizSurveyAnsweringController,\r\n scope: {\r\n courseProgressId: \"=?\",\r\n section: \"=?\",\r\n lastSectionInCourse: \"=?\",\r\n quizId: \"=\",\r\n progressBundle: \"=?\",\r\n quizPassing: \"=?\"\r\n },\r\n templateUrl: url.template(\"components/vhs-quiz-survey-answering.html\")\r\n };\r\n}\r\nexports.VhsQuizSurveyAnsweringDirectiveFactory = VhsQuizSurveyAnsweringDirectiveFactory;\r\nVhsQuizSurveyAnsweringDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../bundles/BundleService\":36,\"../businessUnits/BusinessUnitsService\":44,\"../common/CommonNavigation\":52,\"../courses/CourseService\":211,\"../courses/ProgressService\":219,\"../quizzes/QuizService\":396,\"../quizzes/models/QuestionType\":401,\"../quizzes/models/QuizResultStatus\":402,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../settings/SettingsService\":427,\"../storage/UploadsService\":458,\"../urls/QuizzesRouter\":486,\"../users/UserService\":499,\"../utils/ContentUtils\":509,\"../utils/CourseBundleUtils\":510,\"../utils/RandomUtils\":523,\"../utils/UploadUtils\":527,\"../utils/UrlService\":528,\"./dialog/DialogService\":166,\"./models/Event\":170}],144:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar Event_1 = require(\"./models/Event\");\r\nvar VhsRecordRtcController = (function () {\r\n function VhsRecordRtcController($scope, $parse, $q) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$parse = $parse;\r\n this.$q = $q;\r\n this.recordingTime = null;\r\n this.maxLength = null;\r\n this.audioWidth = 450;\r\n this.audioHeight = 30;\r\n this.mediaConstraints = {\r\n audio: true,\r\n video: false\r\n };\r\n this.doDrawLambda = function () {\r\n var WIDTH = _this.canvas.width;\r\n var HEIGHT = _this.canvas.height;\r\n _this.canvasContext.fillStyle = 'rgb(200, 200, 200)';\r\n _this.canvasContext.fillRect(0, 0, WIDTH, HEIGHT);\r\n if (_this.isRecording) {\r\n requestAnimationFrame(_this.doDrawLambda);\r\n }\r\n else {\r\n return;\r\n }\r\n _this.analyser.getByteFrequencyData(_this.frequencyArray);\r\n _this.canvasContext.lineWidth = 1;\r\n _this.canvasContext.strokeStyle = 'rgb(0, 0, 0)';\r\n _this.canvasContext.beginPath();\r\n var sliceWidth = WIDTH * 1.0 / _this.frequencyArray.length;\r\n var x = 0;\r\n for (var i = 0; i < _this.frequencyArray.length; i++) {\r\n var v = _this.frequencyArray[i] / 128.0;\r\n var y = v * HEIGHT / 2;\r\n if (i === 0) {\r\n _this.canvasContext.moveTo(x, HEIGHT - y);\r\n }\r\n else {\r\n _this.canvasContext.lineTo(x, HEIGHT - y);\r\n }\r\n x += sliceWidth;\r\n }\r\n _this.canvasContext.stroke();\r\n };\r\n $scope.vm = this;\r\n this.$scope.$on(\"$destroy\", function () {\r\n if (_this.audioContext) {\r\n _this.audioContext.close();\r\n }\r\n });\r\n }\r\n VhsRecordRtcController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n this.element = element;\r\n this.allowPause = this.$scope.vhsAllowPause;\r\n this.allowSaveRecording = this.$scope.vhsAllowSaveRecording;\r\n this.allowPlayback = this.$scope.vhsAllowPlayback;\r\n this.maxLength = this.$scope.vhsMaxLength;\r\n this.isActiveStartRecordingButton = true;\r\n this.isActiveStopRecordingButton = false;\r\n this.isActivePauseRecordingButton = false;\r\n this.isActiveResumeRecordingButton = false;\r\n this.isActiveSaveRecordingButton = false;\r\n this.isRecording = angular.isDefined(this.$scope.vhsIsRecording) ? this.$scope.vhsIsRecording : false;\r\n this.recordUrl = angular.isDefined(this.$scope.vhsRecordUrl) ? this.$scope.vhsRecordUrl : \"\";\r\n this.isRecordOnPause = false;\r\n this.canvas = element.find('canvas.audioCanvas')[0];\r\n this.canvasContext = this.canvas.getContext('2d');\r\n this.onBeforeRecordingStartedCallback = this.$scope.vhsOnBeforeRecordingStartedCallback;\r\n this.onPauseRecordingCallback = this.$scope.vhsOnPauseRecordingCallback;\r\n if (this.onBeforeRecordingStartedCallback && this.onPauseRecordingCallback) {\r\n this.$scope.$on(\"pauseRecordingEvent\", function () {\r\n _this.onPauseRecording();\r\n });\r\n }\r\n this.$scope.$on(Event_1.Event.RECORDER_STOP_RECORD_EXTERNALLY, function () { return _this.onStopRecording(); });\r\n };\r\n VhsRecordRtcController.prototype.startRecording = function () {\r\n var _this = this;\r\n window.navigator.mediaDevices.getUserMedia(this.mediaConstraints)\r\n .then(function (stream) {\r\n var audioTracks = stream.getAudioTracks();\r\n console.log('Got stream with constraints:', _this.mediaConstraints);\r\n console.log('Using audio device: ' + audioTracks[0].label);\r\n stream.oninactive = function () {\r\n console.log('Stream ended');\r\n };\r\n _this.mediaStream = stream;\r\n _this.audioContext = new AudioContext();\r\n var audioStream = _this.audioContext.createMediaStreamSource(stream);\r\n _this.analyser = _this.audioContext.createAnalyser();\r\n audioStream.connect(_this.analyser);\r\n _this.analyser.smoothingTimeConstant = 0.7;\r\n _this.analyser.fftSize = 2048;\r\n _this.frequencyArray = new Uint8Array(_this.analyser.frequencyBinCount);\r\n _this.isActiveStartRecordingButton = false;\r\n _this.isActiveStopRecordingButton = true;\r\n _this.isActivePauseRecordingButton = true;\r\n _this.isActiveResumeRecordingButton = false;\r\n _this.isActiveSaveRecordingButton = false;\r\n _this.recordRtcRecorder = new RecordRTC(_this.mediaStream, {\r\n type: 'audio',\r\n recorderType: StereoAudioRecorder\r\n });\r\n _this.recordRtcRecorder.startRecording();\r\n _this.isRecording = true;\r\n _this.$scope.vhsIsRecording = _this.isRecording;\r\n _this.recordUrl = \"\";\r\n _this.$scope.vhsRecordUrl = _this.recordUrl;\r\n _this.doDrawLambda();\r\n _this.startTimer();\r\n })\r\n .then(function () {\r\n if (_this.onBeforeRecordingStartedCallback) {\r\n _this.onBeforeRecordingStartedCallback(true);\r\n }\r\n })\r\n .then(function () {\r\n _this.recordingDeferred = _this.$q.defer();\r\n return _this.$scope.vhsOnStartRecordingCallback(_this.recordingDeferred.promise);\r\n })\r\n .catch(function (error) {\r\n console.log('navigator.getUserMedia error: ', error);\r\n });\r\n };\r\n VhsRecordRtcController.prototype.onStartRecording = function () {\r\n var _this = this;\r\n if (this.isRecording) {\r\n return;\r\n }\r\n if (this.onBeforeRecordingStartedCallback) {\r\n var promise = this.onBeforeRecordingStartedCallback();\r\n promise.then(function () {\r\n _this.startRecording();\r\n }, function () {\r\n });\r\n }\r\n else {\r\n this.startRecording();\r\n }\r\n };\r\n VhsRecordRtcController.prototype.onStopRecording = function () {\r\n var _this = this;\r\n this.isActiveStartRecordingButton = true;\r\n this.isActiveStopRecordingButton = false;\r\n this.isActivePauseRecordingButton = false;\r\n this.isActiveResumeRecordingButton = false;\r\n this.isActiveSaveRecordingButton = true;\r\n this.isRecording = false;\r\n this.$scope.vhsIsRecording = this.isRecording;\r\n this.isRecordOnPause = false;\r\n this.stopTimer();\r\n this.recordRtcRecorder.stopRecording(function () {\r\n _this.recordUrl = _this.recordRtcRecorder.toURL();\r\n _this.$scope.vhsRecordUrl = _this.recordUrl;\r\n var returnedPromise;\r\n returnedPromise = _this.$parse(_this.$scope.vhsOnCompleteRecordingCallback)(_this.$scope.$parent, {\r\n blob: _this.recordRtcRecorder.getBlob(),\r\n recordingPromise: _this.recordingDeferred.promise\r\n });\r\n if (returnedPromise) {\r\n returnedPromise.then(function () { return _this.recordingDeferred.resolve(_this.recordRtcRecorder.getBlob()); });\r\n }\r\n else {\r\n _this.recordingDeferred.resolve(_this.recordRtcRecorder.getBlob());\r\n }\r\n _this.mediaStream.getTracks().forEach(function (t) {\r\n t.stop();\r\n });\r\n });\r\n };\r\n VhsRecordRtcController.prototype.onPauseRecording = function () {\r\n if (this.isRecordOnPause) {\r\n this.recordRtcRecorder.resumeRecording();\r\n this.isRecordOnPause = false;\r\n if (this.onPauseRecordingCallback) {\r\n this.onPauseRecordingCallback(false);\r\n }\r\n this.resumeTimer();\r\n }\r\n else {\r\n this.recordRtcRecorder.pauseRecording();\r\n this.isRecordOnPause = true;\r\n if (this.onPauseRecordingCallback) {\r\n this.onPauseRecordingCallback(true);\r\n }\r\n this.pauseTimer();\r\n }\r\n };\r\n ;\r\n VhsRecordRtcController.prototype.onSaveRecording = function () {\r\n var blob = this.recordRtcRecorder.getBlob();\r\n if (window.Blob && window.navigator.msSaveOrOpenBlob) {\r\n window.navigator.msSaveOrOpenBlob(blob, 'record.' + 'wav');\r\n }\r\n else {\r\n var url = URL.createObjectURL(blob);\r\n var a = document.createElement('a');\r\n document.body.appendChild(a);\r\n a.style = 'display: none';\r\n a.href = url;\r\n a.download = 'record.' + \"wav\";\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n }\r\n };\r\n VhsRecordRtcController.prototype.startTimer = function () {\r\n this.recordingTime = 0;\r\n this.resumeTimer();\r\n };\r\n VhsRecordRtcController.prototype.stopTimer = function () {\r\n this.pauseTimer();\r\n this.recordingTime = null;\r\n };\r\n VhsRecordRtcController.prototype.pauseTimer = function () {\r\n clearInterval(this.timer);\r\n };\r\n VhsRecordRtcController.prototype.resumeTimer = function () {\r\n var _this = this;\r\n this.timer = setInterval(function () {\r\n _this.recordingTime++;\r\n if (_this.recordingTime >= _this.maxLength) {\r\n _this.onStopRecording();\r\n }\r\n }, 1000);\r\n };\r\n VhsRecordRtcController.$inject = [\r\n \"$scope\",\r\n \"$parse\",\r\n \"$q\"\r\n ];\r\n return VhsRecordRtcController;\r\n})();\r\nexports.VhsRecordRtcController = VhsRecordRtcController;\r\nfunction VhsRecordRtcDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.controller = VhsRecordRtcController;\r\n directive.scope = {\r\n vhsId: \"=?\",\r\n vhsAllowPause: \"=?\",\r\n vhsAllowSaveRecording: \"=?\",\r\n vhsAllowPlayback: \"=?\",\r\n vhsMaxLength: \"=?\",\r\n vhsOnCompleteRecordingCallback: \"@?\",\r\n vhsIsRecording: \"=?\",\r\n vhsRecordUrl: \"=?\",\r\n vhsOnBeforeRecordingStartedCallback: \"=?\",\r\n vhsOnPauseRecordingCallback: \"=?\",\r\n vhsOnStartRecordingCallback: \"=?\"\r\n };\r\n directive.templateUrl = url.template(\"components/vhs-record-rtc-audio.html\");\r\n return directive;\r\n}\r\nexports.VhsRecordRtcDirectiveFactory = VhsRecordRtcDirectiveFactory;\r\nVhsRecordRtcDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528,\"./models/Event\":170}],145:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar VhsReturnToOwnAccountController = (function () {\r\n function VhsReturnToOwnAccountController($scope, $location, $window, authApi, authManager) {\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.authApi = authApi;\r\n this.authManager = authManager;\r\n this.$scope.vm = this;\r\n }\r\n VhsReturnToOwnAccountController.prototype.returnUserToOwnAccount = function () {\r\n var _this = this;\r\n var token = this.authManager.getPrevToken();\r\n this.authManager.removePrevToken();\r\n this.authApi.changeTokenInfo(token, false)\r\n .then(function () {\r\n _this.$location.path('/');\r\n });\r\n };\r\n VhsReturnToOwnAccountController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n \"$window\",\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n ];\r\n return VhsReturnToOwnAccountController;\r\n})();\r\nfunction VhsReturnToOwnAccountDirectiveFactory(url) {\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.scope = true;\r\n directive.controller = VhsReturnToOwnAccountController;\r\n directive.templateUrl = url.template(\"components/vhs-return-to-own-account.html\");\r\n return directive;\r\n}\r\nexports.VhsReturnToOwnAccountDirectiveFactory = VhsReturnToOwnAccountDirectiveFactory;\r\nVhsReturnToOwnAccountDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../utils/UrlService\":528}],146:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar VhsSearchDirective_1 = require(\"./VhsSearchDirective\");\r\nvar VhsScaledAnswerQuestionController = (function () {\r\n function VhsScaledAnswerQuestionController($scope) {\r\n this.$scope = $scope;\r\n $scope.vm = this;\r\n }\r\n VhsScaledAnswerQuestionController.$inject = [\r\n \"$scope\"\r\n ];\r\n return VhsScaledAnswerQuestionController;\r\n})();\r\nexports.VhsScaledAnswerQuestionController = VhsScaledAnswerQuestionController;\r\nfunction VhsScaledAnswerQuestionDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.scope = {\r\n question: \"=vhsQuestion\",\r\n answers: \"=vhsAnswers\",\r\n preview: \"=vhsPreview\",\r\n checker: \"=vhsChecker\"\r\n };\r\n directive.controller = VhsSearchDirective_1.VhsSearchController;\r\n directive.templateUrl = url.template(\"components/vhs-scaled-answer-question.html\");\r\n return directive;\r\n}\r\nexports.VhsScaledAnswerQuestionDirectiveFactory = VhsScaledAnswerQuestionDirectiveFactory;\r\nVhsScaledAnswerQuestionDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528,\"./VhsSearchDirective\":147}],147:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar VhsSearchController = (function () {\r\n function VhsSearchController($scope, $rootScope, $location, materialsRouter) {\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.materialsRouter = materialsRouter;\r\n this.searchVisible = true;\r\n MenuHelper_1.MenuHelper.addMenuUpdateListener(this);\r\n $scope.vm = this;\r\n if (!this.$rootScope[\"__vhsSearchInfo\"]) {\r\n this.$rootScope[\"__vhsSearchInfo\"] = {\r\n fileFormat: \"\",\r\n searchString: \"\"\r\n };\r\n }\r\n }\r\n VhsSearchController.prototype.doSubmit = function () {\r\n this.$location.url(this.materialsRouter.indexUrl())\r\n .search(VhsSearchController.FILE_FORMAT_PARAMETER, this.$rootScope[\"__vhsSearchInfo\"].fileFormat)\r\n .search(VhsSearchController.SEARCH_STRING_PARAMETER, this.$rootScope[\"__vhsSearchInfo\"].searchString);\r\n this.$rootScope[\"__vhsSearchInfo\"] = {\r\n fileFormat: \"\",\r\n searchString: \"\"\r\n };\r\n };\r\n VhsSearchController.prototype.onMenuItemUpdate = function (newMenuItemKey, oldMenuItemKey) {\r\n if ((newMenuItemKey == MenuHelper_1.MenuHelper.MAIN_MENU_KEY || newMenuItemKey == MenuHelper_1.MenuHelper.EDUCATION_MATERIALS_MENU_KEY || newMenuItemKey == \"\") && this.$scope.controllable) {\r\n this.searchVisible = false;\r\n }\r\n else {\r\n this.searchVisible = true;\r\n }\r\n };\r\n VhsSearchController.FILE_FORMAT_PARAMETER = \"fileFormat\";\r\n VhsSearchController.SEARCH_STRING_PARAMETER = \"searchString\";\r\n VhsSearchController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$location\",\r\n MaterialsRouter_1.MaterialsRouter.NAME\r\n ];\r\n return VhsSearchController;\r\n})();\r\nexports.VhsSearchController = VhsSearchController;\r\nfunction VhsSearchDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n $scope.$on(\"$destroy\", function () { return MenuHelper_1.MenuHelper.removeMenuUpdateListener(controller); });\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.scope = {\r\n controllable: \"=?vhsControllable\",\r\n showFileFormat: \"=?vhsShowFileFormat\",\r\n isNavbarForm: \"=?vhsIsNavbarForm\"\r\n };\r\n directive.controller = VhsSearchController;\r\n directive.templateUrl = url.template(\"components/vhs-search.html\");\r\n return directive;\r\n}\r\nexports.VhsSearchDirectiveFactory = VhsSearchDirectiveFactory;\r\nVhsSearchDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../urls/MaterialsRouter\":480,\"./../utils/MenuHelper\":517,\"./../utils/UrlService\":528}],148:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar VhsSelectAllController = (function () {\r\n function VhsSelectAllController($timeout) {\r\n this.$timeout = $timeout;\r\n }\r\n VhsSelectAllController.prototype.isDisabled = function () {\r\n var result = !this.targetElement || $(this.targetElement).prop('disabled');\r\n $(this.thisElement).prop('disabled', result);\r\n return result;\r\n };\r\n VhsSelectAllController.prototype.getCurrentState = function () {\r\n var total = this.targetElement.find('option').length;\r\n var selected = this.targetElement.find('option:selected').length;\r\n return (selected == total && total > 0);\r\n };\r\n VhsSelectAllController.prototype.refreshState = function () {\r\n try {\r\n $(this.thisElement).prop('checked', this.getCurrentState());\r\n this.isDisabled();\r\n }\r\n catch (e) {\r\n }\r\n };\r\n VhsSelectAllController.prototype.makeSelectAll = function (element, $scope) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n $scope[\"refreshState\"] = (function () {\r\n _this.refreshState;\r\n });\r\n this.thisElement = $(element).find('input');\r\n var placeForSelectAll = $(element).find('.place-for-select-all');\r\n if (placeForSelectAll) {\r\n var clonedThisElement = this.thisElement.clone();\r\n placeForSelectAll.append(clonedThisElement);\r\n }\r\n this.targetElement = $(element).find('select');\r\n this.isDisabled();\r\n $(document).ready(function () {\r\n $scope.$watch('option', function () {\r\n _this.refreshState();\r\n _this.$timeout(function () {\r\n _this.refreshState();\r\n }, VhsSelectAllController.TIMER_MILLISECONDS);\r\n });\r\n $(document).ready(function () {\r\n _this.refreshState();\r\n });\r\n $(document).on('click', 'button', null, function () {\r\n setTimeout(function () {\r\n _this.refreshState();\r\n }, VhsSelectAllController.TIMER_MILLISECONDS);\r\n });\r\n $(_this.targetElement).change(function () {\r\n _this.refreshState();\r\n });\r\n $(_this.targetElement).on('change', 'option', [], function () {\r\n _this.refreshState();\r\n });\r\n $(document).on('change', '.select-all', function (event) {\r\n if (_this.isDisabled() || event.isDefaultPrevented()) {\r\n event.preventDefault();\r\n _this.refreshState();\r\n return;\r\n }\r\n var options = _this.targetElement.find('option');\r\n var previousState = _this.getCurrentState();\r\n for (var i = 0; i < options.length; i++) {\r\n if ($(options[i]).prop('selected') != !previousState) {\r\n $(options[i]).prop('selected', !previousState);\r\n $(options[i]).trigger('change');\r\n }\r\n }\r\n if (!_this.isDisabled()) {\r\n _this.thisElement.blur();\r\n _this.targetElement.focus();\r\n }\r\n });\r\n });\r\n };\r\n VhsSelectAllController.TIMER_MILLISECONDS = 1000;\r\n VhsSelectAllController.$inject = [\r\n \"$timeout\"\r\n ];\r\n return VhsSelectAllController;\r\n})();\r\nfunction VhsSelectAllDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller, transclude) {\r\n controller.makeSelectAll(element, $scope);\r\n }\r\n var directive = {};\r\n directive.restrict = 'A';\r\n directive.link = link;\r\n directive.controller = [\"$timeout\", VhsSelectAllController];\r\n directive.scope = {};\r\n directive.templateUrl = url.template('components/vhs-select-all.html');\r\n directive.transclude = true;\r\n return directive;\r\n}\r\nexports.VhsSelectAllDirectiveFactory = VhsSelectAllDirectiveFactory;\r\nVhsSelectAllDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"./../utils/UrlService\":528}],149:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar VhsSelectLearningPathCoursesController = (function () {\r\n function VhsSelectLearningPathCoursesController($scope, $http, $location, url, coursesRouter) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.url = url;\r\n this.coursesRouter = coursesRouter;\r\n $scope.vm = this;\r\n this.coursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/learningPaths/search/courses/available\")));\r\n this.coursesGridModel.pageSize = 10;\r\n this.coursesGridModel.filter.businessUnitId = this.$scope.businessUnitId;\r\n this.coursesGridModel.filter.languageId = this.$scope.languageId;\r\n if (this.$scope.excludedCourses) {\r\n this.coursesGridModel.filter.excludedCourseIds = this.getExcludedCourseIds(this.$scope.excludedCourses);\r\n }\r\n this.$scope.$watchCollection(\"excludedCourses\", function (newValue) {\r\n if (newValue) {\r\n _this.coursesGridModel.filter.excludedCourseIds = _this.getExcludedCourseIds(newValue);\r\n _this.coursesGridModel.loadCurrentPage();\r\n }\r\n });\r\n }\r\n VhsSelectLearningPathCoursesController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n VhsSelectLearningPathCoursesController.prototype.selectCourse = function (course) {\r\n if (this.$scope.onCourseSelect) {\r\n var redirectionToPreviousPageIsNeeded = this.coursesGridModel.currentPage > 0\r\n && this.coursesGridModel.entries.length == 1;\r\n this.$scope.onCourseSelect(course);\r\n if (redirectionToPreviousPageIsNeeded) {\r\n this.coursesGridModel.currentPage = this.coursesGridModel.currentPage - 1;\r\n }\r\n }\r\n };\r\n VhsSelectLearningPathCoursesController.prototype.getExcludedCourseIds = function (courses) {\r\n var result = [];\r\n courses.forEach(function (course) { return result.push(course.id); });\r\n return result;\r\n };\r\n VhsSelectLearningPathCoursesController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return VhsSelectLearningPathCoursesController;\r\n})();\r\nexports.VhsSelectLearningPathCoursesController = VhsSelectLearningPathCoursesController;\r\nfunction VhsSelectLearningPathCoursesDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsSelectLearningPathCoursesController,\r\n scope: {\r\n businessUnitId: \"=?vhsBusinessUnitId\",\r\n languageId: \"=?vhsLanguageId\",\r\n onCourseSelect: \"=?vhsOnCourseSelect\",\r\n excludedCourses: \"=?vhsExcludedCourses\"\r\n },\r\n templateUrl: url.template(\"components/vhs-select-learning-path-courses.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsSelectLearningPathCoursesDirectiveFactory = VhsSelectLearningPathCoursesDirectiveFactory;\r\nVhsSelectLearningPathCoursesDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../urls/CoursesRouter\":468,\"../utils/UrlService\":528}],150:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nfunction StickyDirectiveFactory(url) {\r\n var STICKY_CLASS = \"sticky\";\r\n var TOP_OFFSET = 0;\r\n function link(scope, element, attrs) {\r\n var elementTopPosition = element.offset().top;\r\n $(window).scroll(function () {\r\n var isFixed = element.hasClass(STICKY_CLASS);\r\n var breakpoint = elementTopPosition - TOP_OFFSET;\r\n var shouldBeFixed = $(window).scrollTop() >= breakpoint;\r\n if (shouldBeFixed && !isFixed) {\r\n element.css('width', element.innerWidth() + 'px');\r\n element.css('top', TOP_OFFSET);\r\n element.addClass(STICKY_CLASS);\r\n }\r\n if (!shouldBeFixed && isFixed) {\r\n element.css('top', '');\r\n element.css('width', '');\r\n element.removeClass(STICKY_CLASS);\r\n }\r\n });\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link\r\n };\r\n}\r\nexports.StickyDirectiveFactory = StickyDirectiveFactory;\r\nStickyDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528}],151:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar SystemSettingsRouter_1 = require(\"../urls/SystemSettingsRouter\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SystemSettingsMenuItemsVisibilityController = (function () {\r\n function SystemSettingsMenuItemsVisibilityController($scope, $location, securityService, businessUnitService, settingsService, systemSettingsRouter) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.securityService = securityService;\r\n this.businessUnitService = businessUnitService;\r\n this.settingsService = settingsService;\r\n this.systemSettingsRouter = systemSettingsRouter;\r\n this.isBusinessUnitType = false;\r\n this.disableSaveButton = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_SETTING_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Menu items visibility\").update();\r\n $scope.vm = this;\r\n this.setType();\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.editSystemConfiguration; });\r\n if (!this.isBusinessUnitType) {\r\n this.businessUnitService.getSystemMenuItemsSettings().then(function (result) {\r\n _this.menuItemsVisibilitySettings = result;\r\n });\r\n }\r\n else {\r\n this.businessUnitService.getMenuItemsSettings(this.$scope.businessUnitId)\r\n .then(function (result) {\r\n _this.menuItemsVisibilitySettings = result;\r\n });\r\n this.loadAllSettings();\r\n }\r\n }\r\n SystemSettingsMenuItemsVisibilityController.prototype.loadAllSettings = function () {\r\n var _this = this;\r\n return this.settingsService.getAllSystemProperties().then(function (r) {\r\n _this.allSettings = r;\r\n });\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.catalogGlobalVisibility = function () {\r\n if (this.isBusinessUnitType) {\r\n return this.allSettings.filter(function (s) { return s.name === \"BUSINESS_UNIT_LEVEL_CATALOG\" && s.value === \"true\"; }).length > 0;\r\n }\r\n return true;\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.coursesGlobalVisibility = function () {\r\n if (this.isBusinessUnitType) {\r\n return this.allSettings.filter(function (s) { return s.name === \"BUSINESS_UNIT_LEVEL_COURSES\" && s.value === \"true\"; }).length > 0;\r\n }\r\n return true;\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.learningPathsGlobalVisibility = function () {\r\n if (this.isBusinessUnitType) {\r\n return this.allSettings.filter(function (s) { return s.name === \"BUSINESS_UNIT_LEVEL_LEARNING_PATHS\" && s.value === \"true\"; }).length > 0;\r\n }\r\n return true;\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.discussionBoardGlobalVisibility = function () {\r\n if (this.isBusinessUnitType) {\r\n return this.allSettings.filter(function (s) { return s.name === \"BUSINESS_UNIT_LEVEL_DISCUSSION_BOARD\" && s.value === \"true\"; }).length > 0;\r\n }\r\n return true;\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.materialsGlobalVisibility = function () {\r\n if (this.isBusinessUnitType) {\r\n return this.allSettings.filter(function (s) { return s.name === \"BUSINESS_UNIT_LEVEL_MATERIALS\" && s.value === \"true\"; }).length > 0;\r\n }\r\n return true;\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.quizzesGlobalVisibility = function () {\r\n if (this.isBusinessUnitType) {\r\n return this.allSettings.filter(function (s) { return s.name === \"BUSINESS_UNIT_LEVEL_QUIZZES\" && s.value === \"true\"; }).length > 0;\r\n }\r\n return true;\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.newsGlobalVisibility = function () {\r\n if (this.isBusinessUnitType) {\r\n return this.allSettings.filter(function (s) { return s.name === \"BUSINESS_UNIT_LEVEL_NEWS\" && s.value === \"true\"; }).length > 0;\r\n }\r\n return true;\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.hasPermission = function () {\r\n if (this.isBusinessUnitType) {\r\n return this.isAnyBUSettingEnabled();\r\n }\r\n return true;\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.isAnyBUSettingEnabled = function () {\r\n return this.allSettings.filter(function (s) {\r\n return s.name === \"BUSINESS_UNIT_LEVEL_CATALOG\" && s.value === \"true\"\r\n || s.name === \"BUSINESS_UNIT_LEVEL_COURSES\" && s.value === \"true\"\r\n || s.name === \"BUSINESS_UNIT_LEVEL_LEARNING_PATHS\" && s.value === \"true\"\r\n || s.name === \"BUSINESS_UNIT_LEVEL_DISCUSSION_BOARD\" && s.value === \"true\"\r\n || s.name === \"BUSINESS_UNIT_LEVEL_MATERIALS\" && s.value === \"true\"\r\n || s.name === \"BUSINESS_UNIT_LEVEL_QUIZZES\" && s.value === \"true\";\r\n }).length > 0;\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.save = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n this.businessUnitService.updateSystemMenuItemsVisibilitySettings(this.menuItemsVisibilitySettings)\r\n .then(function (result) {\r\n _this.menuItemsVisibilitySettings = angular.copy(result);\r\n INotifier_1.notifier.success(\"Menu items visibility settings successfully updated.\");\r\n })\r\n .finally(function () {\r\n _this.disableSaveButton = false;\r\n });\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.setType = function () {\r\n this.isBusinessUnitType = !!this.$scope.businessUnitId;\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.redirectToBack = function () {\r\n this.$location.url(this.systemSettingsRouter.systemSettingsUrl());\r\n };\r\n SystemSettingsMenuItemsVisibilityController.prototype.init = function ($scope, element) {\r\n };\r\n SystemSettingsMenuItemsVisibilityController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n SecurityService_1.SecurityService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n SystemSettingsRouter_1.SystemSettingsRouter.NAME\r\n ];\r\n return SystemSettingsMenuItemsVisibilityController;\r\n})();\r\nexports.SystemSettingsMenuItemsVisibilityController = SystemSettingsMenuItemsVisibilityController;\r\nfunction VhsSystemSettingsMenuItemsVisibilityDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: SystemSettingsMenuItemsVisibilityController,\r\n scope: {\r\n businessUnitId: \"=vhsBusinessUnitId\",\r\n },\r\n templateUrl: url.template(\"components/vhs-system-settings-menu-items-visibility.html\")\r\n };\r\n return directive;\r\n}\r\nexports.VhsSystemSettingsMenuItemsVisibilityDirectiveFactory = VhsSystemSettingsMenuItemsVisibilityDirectiveFactory;\r\nVhsSystemSettingsMenuItemsVisibilityDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../businessUnits/BusinessUnitsService\":44,\"../security/SecurityService\":420,\"../settings/SettingsService\":427,\"../urls/SystemSettingsRouter\":490,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528}],152:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SystemSettingsRouter_1 = require(\"../urls/SystemSettingsRouter\");\r\nvar VhsSystemSettingsTopTabsController = (function () {\r\n function VhsSystemSettingsTopTabsController($scope, systemSettingsRouter) {\r\n this.$scope = $scope;\r\n this.systemSettingsRouter = systemSettingsRouter;\r\n this.CONFIGURATION_TAB_KEY = \"configurations\";\r\n this.BRANDING_TAB_KEY = \"branding\";\r\n this.MENU_ITEMS_VISIBILITY_TAB_KEY = \"menuItemsVisibility\";\r\n $scope.vm = this;\r\n }\r\n VhsSystemSettingsTopTabsController.prototype.init = function ($scope, element) {\r\n };\r\n VhsSystemSettingsTopTabsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.$scope.topMenuKey == topMenuKey;\r\n };\r\n VhsSystemSettingsTopTabsController.$inject = [\r\n \"$scope\",\r\n SystemSettingsRouter_1.SystemSettingsRouter.NAME\r\n ];\r\n return VhsSystemSettingsTopTabsController;\r\n})();\r\nexports.VhsSystemSettingsTopTabsController = VhsSystemSettingsTopTabsController;\r\nfunction VhsSystemSettingsTopTabsDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsSystemSettingsTopTabsController,\r\n scope: {\r\n topMenuKey: \"=vhsTopMenuKey\"\r\n },\r\n templateUrl: url.template(\"components/vhs-systems-settings-top-tabs.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsSystemSettingsTopTabsDirectiveFactory = VhsSystemSettingsTopTabsDirectiveFactory;\r\nVhsSystemSettingsTopTabsDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../urls/SystemSettingsRouter\":490,\"../utils/UrlService\":528}],153:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar TimeZoneType_1 = require(\"../webinars/models/TimeZoneType\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar VhsTeamsCreateEditDirectiveController = (function () {\r\n function VhsTeamsCreateEditDirectiveController($scope, url, courseService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.url = url;\r\n this.courseService = courseService;\r\n this.timeZone = TimeZoneType_1.TimeZone;\r\n this.currentUserIsConnected = false;\r\n this.isLoading = false;\r\n $scope.vm = this;\r\n this.isLoading = true;\r\n this.courseService.isConnectedUserToTeams(this.$scope.course.id)\r\n .then(function (body) {\r\n _this.currentUserIsConnected = body.success;\r\n _this.$scope.newSession.timezone = TimeZoneType_1.getLocalDefaultTimezone();\r\n })\r\n .catch(function (error) {\r\n if (error && error.data && error.data.messageForUser) {\r\n INotifier_1.notifier.error(error.data.messageForUser);\r\n }\r\n })\r\n .finally(function () { return _this.isLoading = false; });\r\n }\r\n VhsTeamsCreateEditDirectiveController.prototype.redirectToTeamsConnection = function () {\r\n this.courseService.getTeamsRedirectUrl(this.$scope.course.id)\r\n .then(function (url) { return document.location.href = url; });\r\n };\r\n VhsTeamsCreateEditDirectiveController.$inject = [\r\n \"$scope\",\r\n UrlService_1.UrlService.NAME,\r\n CourseService_1.CourseService.NAME\r\n ];\r\n return VhsTeamsCreateEditDirectiveController;\r\n})();\r\nexports.VhsTeamsCreateEditDirectiveController = VhsTeamsCreateEditDirectiveController;\r\nfunction VhsTeamsCreateEditDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsTeamsCreateEditDirectiveController,\r\n scope: {\r\n newSession: \"=\",\r\n viltSessionSections: \"=\",\r\n currentUser: \"=\",\r\n isCreationModalShown: \"=\",\r\n course: \"=\"\r\n },\r\n templateUrl: url.template(\"components/vhs-teams-create-edit.html\")\r\n };\r\n}\r\nexports.VhsTeamsCreateEditDirectiveFactory = VhsTeamsCreateEditDirectiveFactory;\r\nVhsTeamsCreateEditDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../courses/CourseService\":211,\"../utils/UrlService\":528,\"../webinars/models/TimeZoneType\":530}],154:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar VhsTemplateMenuController = (function () {\r\n function VhsTemplateMenuController($rootScope, $scope, $document, $location) {\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.$document = $document;\r\n this.$location = $location;\r\n this.menuItems = [];\r\n $scope.vm = this;\r\n this.$scope.$on('$locationChangeStart', function (event, newLocation) {\r\n _this.rebuildMenu();\r\n });\r\n this.rebuildMenu();\r\n }\r\n VhsTemplateMenuController.prototype.locationWithoutHash = function () {\r\n var url = this.$location.absUrl();\r\n var hash = this.$location.hash();\r\n if (hash) {\r\n hash = \"#\" + hash;\r\n url = url.substr(0, url.length - hash.length);\r\n }\r\n return url;\r\n };\r\n VhsTemplateMenuController.prototype.clearHash = function () {\r\n this.$location.hash('');\r\n };\r\n VhsTemplateMenuController.prototype.init = function ($scope, element) {\r\n this.element = element;\r\n this.rebuildMenu();\r\n };\r\n VhsTemplateMenuController.prototype.rebuildMenu = function () {\r\n var _this = this;\r\n this.url = this.locationWithoutHash();\r\n var template = this.$document.find(\".vhs-template\");\r\n this.menuItems = [];\r\n if (template && template[0]) {\r\n var entries = template[0].getElementsByClassName(\"template-menu-entry\");\r\n Array.prototype.forEach.call(entries, function (e) {\r\n if (!e.classList.contains(\"inactive\")) {\r\n if (e.getElementsByClassName(\"template-menu-text\").item(0) &&\r\n e.getElementsByClassName(\"template-menu-anchor\").item(0)) {\r\n var text = e.getElementsByClassName(\"template-menu-text\").item(0).innerText;\r\n var anchor = \"#\" + e.getElementsByClassName(\"template-menu-anchor\").item(0).id;\r\n _this.menuItems.push({ text: text, anchor: anchor });\r\n }\r\n }\r\n });\r\n }\r\n };\r\n VhsTemplateMenuController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$document\",\r\n \"$location\"\r\n ];\r\n return VhsTemplateMenuController;\r\n})();\r\nexports.VhsTemplateMenuController = VhsTemplateMenuController;\r\nfunction VhsTemplateMenuDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsTemplateMenuController,\r\n scope: {},\r\n transclude: false,\r\n templateUrl: url.template(\"components/vhs-template-menu.html\")\r\n };\r\n return directive;\r\n}\r\nexports.VhsTemplateMenuDirectiveFactory = VhsTemplateMenuDirectiveFactory;\r\nVhsTemplateMenuDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528}],155:[function(require,module,exports){\nvar MaterialType_1 = require(\"./../materials/models/MaterialType\");\r\nvar AppProperties_1 = require(\"./../utils/AppProperties\");\r\nfunction VhsThumbnailDirectiveFactory() {\r\n function link($scope, element) {\r\n if (!$scope.vhsThumbnailModel.previewUrl || $scope.vhsThumbnailModel.previewUrl.indexOf('themes/default/img/thumbnail-') !== -1\r\n || $scope.vhsThumbnailModel.previewUrl.indexOf('themes/default/img/icons/thumbnail-') !== -1\r\n || $scope.vhsThumbnailModel.previewUrl.indexOf('themes/default/img/icons/material/thumbnail-') !== -1) {\r\n element.parent('div').removeClass('preview-background').addClass('default-preview');\r\n element.hasClass('card__material-image') ? element.removeClass('card__material-image') : null;\r\n }\r\n if (!$scope.vhsThumbnailModelName) {\r\n $scope.vhsThumbnailModel.previewUrl = $scope.vhsThumbnailModel.previewUrl ||\r\n (\"themes/default/img/thumbnail-\" +\r\n ($scope.vhsThumbnailModel.contentTypeKey || $scope.vhsThumbnailModel.typeKey) +\r\n \".png?v=\" + AppProperties_1.AppProperties.buildVersion).toLowerCase();\r\n }\r\n else {\r\n var defaultMaterialPreviewUrl = (\"themes/default/img/icons/material/thumbnail-material-\"\r\n + MaterialType_1.MaterialTypeEnum[$scope.vhsThumbnailModel.materialTypeId || $scope.vhsThumbnailModel.typeId] +\r\n \".svg?v=\" + AppProperties_1.AppProperties.buildVersion).toLowerCase();\r\n var defaultMaterialTablePreviewUrl = (\"themes/default/img/icons/material/thumbnail-table-material-\"\r\n + MaterialType_1.MaterialTypeEnum[$scope.vhsThumbnailModel.materialTypeId || $scope.vhsThumbnailModel.typeId] +\r\n \".svg?v=\" + AppProperties_1.AppProperties.buildVersion).toLowerCase();\r\n switch ($scope.vhsThumbnailModelName) {\r\n case 'COURSE': {\r\n $scope.vhsThumbnailModel.previewUrl = $scope.vhsThumbnailModel.previewUrl ||\r\n (\"themes/default/img/icons/thumbnail-\" + $scope.vhsThumbnailModelName + \".svg?v=\" + AppProperties_1.AppProperties.buildVersion).toLowerCase();\r\n element.css('background-image', 'url(' + $scope.vhsThumbnailModel.previewUrl + ')');\r\n break;\r\n }\r\n case 'MATERIAL': {\r\n $scope.vhsThumbnailModel.previewUrl = $scope.vhsThumbnailModel.previewUrl || defaultMaterialPreviewUrl;\r\n break;\r\n }\r\n case 'MATERIAL_RELATED_DEFAULT': {\r\n $scope.vhsThumbnailModel.previewUrl = defaultMaterialPreviewUrl;\r\n break;\r\n }\r\n case 'MATERIAL_CARD': {\r\n var previewUrl = $scope.vhsThumbnailModel.previewUrl || defaultMaterialPreviewUrl;\r\n element.css('background-image', 'url(' + previewUrl + ')');\r\n break;\r\n }\r\n case 'MATERIAL_PLAY': {\r\n var previewUrl = $scope.vhsThumbnailModel.previewUrl || defaultMaterialPreviewUrl;\r\n element.attr('src', '' + previewUrl);\r\n break;\r\n }\r\n case 'MATERIAL_TABLE': {\r\n var previewUrl = $scope.vhsThumbnailModel.previewUrl || defaultMaterialTablePreviewUrl;\r\n element.attr('src', '' + previewUrl);\r\n break;\r\n }\r\n case 'MATERIAL_DEFAULT': {\r\n element.parent('div').removeClass('preview-background').addClass('default-preview');\r\n element.css('background-image', 'url(' + defaultMaterialPreviewUrl + ')');\r\n break;\r\n }\r\n case 'MATERIAL_DEFAULT_TABLE': {\r\n $scope.vhsThumbnailModel.previewUrl = defaultMaterialPreviewUrl;\r\n element.attr('src', '' + defaultMaterialTablePreviewUrl);\r\n break;\r\n }\r\n case 'QUIZ': {\r\n var defaultQuizPreviewUrl = (\"themes/default/img/icons/quiz/thumbnail-\" + $scope.vhsThumbnailModel.quizType.toLowerCase() + \".svg?v=\" + AppProperties_1.AppProperties.buildVersion).toLowerCase();\r\n var previewUrl = $scope.vhsThumbnailModel.previewUrl || defaultQuizPreviewUrl;\r\n element.css('background-image', 'url(' + previewUrl + ')');\r\n break;\r\n }\r\n case 'ADMIN_MENU': {\r\n element.parent('div').removeClass('preview-background').addClass('default-preview');\r\n element.attr('style', 'background-image: url(' + $scope.vhsThumbnailModel.previewUrl + '); background-size: 50%!important;');\r\n break;\r\n }\r\n default: {\r\n $scope.vhsThumbnailModel.previewUrl = $scope.vhsThumbnailModel.previewUrl ||\r\n (\"themes/default/img/thumbnail-\" + $scope.vhsThumbnailModelName + \".png?v=\" + AppProperties_1.AppProperties.buildVersion).toLowerCase();\r\n element.css('background-image', 'url(' + $scope.vhsThumbnailModel.previewUrl + ')');\r\n (\"themes/default/img/thumbnail-\" + $scope.vhsThumbnailModelName + \".png?v=\" + AppProperties_1.AppProperties.buildVersion).toLowerCase();\r\n }\r\n }\r\n }\r\n }\r\n return {\r\n priority: 1,\r\n restrict: \"A\",\r\n scope: {\r\n vhsThumbnailModel: \"=\",\r\n vhsThumbnailModelName: \"=?\"\r\n },\r\n link: link\r\n };\r\n}\r\nexports.VhsThumbnailDirectiveFactory = VhsThumbnailDirectiveFactory;\r\n},{\"./../materials/models/MaterialType\":347,\"./../utils/AppProperties\":\"AppProperties\"}],156:[function(require,module,exports){\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar TimeZoneType_1 = require(\"../webinars/models/TimeZoneType\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar DialogService_1 = require(\"./dialog/DialogService\");\r\nvar VhsVILTDirectiveController = (function () {\r\n function VhsVILTDirectiveController($scope, $http, $uploader, $rootScope, $routeParams, $window, permissionsService, userService, securityService, authService, url, courseService, dialogService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$uploader = $uploader;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.$window = $window;\r\n this.permissionsService = permissionsService;\r\n this.userService = userService;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.url = url;\r\n this.courseService = courseService;\r\n this.dialogService = dialogService;\r\n this.userVILTSessionParticipants = [];\r\n this.isAnyAvailableVILTSessionInSection = false;\r\n this.currentUser = {};\r\n this.isDataLoading = false;\r\n this.timeZone = TimeZoneType_1.TimeZone;\r\n this.viltSessionIsOngoing = false;\r\n $scope.vm = this;\r\n if ($scope.section) {\r\n this.courseProgressId = this.$scope.courseProgressId;\r\n this.courseBundle = this.$scope.courseBundle;\r\n this.lastSectionInCourse = this.$scope.lastSectionInCourse;\r\n $scope.$watch(\"section\", function (value) {\r\n _this.isDataLoading = true;\r\n _this.section = value;\r\n _this.courseId = _this.section.courseId;\r\n _this.moduleId = _this.section.moduleId;\r\n _this.loadCurrentUser();\r\n _this.loadUserVILTSessionParticipants();\r\n _this.courseService.getSessionsViltList(_this.section.courseId, _this.section.id)\r\n .then(function (result) {\r\n _this.sessions = angular.copy(result);\r\n _this.viltSessionIsOngoing = _this.sessions.some(function (v) { return (v.status === \"ONGOING\"); });\r\n _this.isAnyScheduledWebinars();\r\n _this.isDataLoading = false;\r\n });\r\n });\r\n }\r\n }\r\n VhsVILTDirectiveController.prototype.loadCurrentUser = function () {\r\n var _this = this;\r\n return this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.currentUser);\r\n });\r\n };\r\n VhsVILTDirectiveController.prototype.loadUserVILTSessionParticipants = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseService.getUserVILTSessionParticipants(this.courseId, this.section.id).then(function (result) {\r\n angular.copy(result, _this.userVILTSessionParticipants);\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n VhsVILTDirectiveController.prototype.isAnyScheduledWebinars = function () {\r\n this.isAnyAvailableVILTSessionInSection = this.sessions.some(function (v) { return (v.status === \"SCHEDULED\" || v.status === \"ONGOING\"); });\r\n };\r\n VhsVILTDirectiveController.prototype.dateToString = function (time) {\r\n return new Date(time).toLocaleString();\r\n };\r\n VhsVILTDirectiveController.prototype.isVILTSessionParticipant = function (viltSessionId) {\r\n return this.userVILTSessionParticipants.some(function (p) { return (p.viltSessionId === viltSessionId); });\r\n };\r\n VhsVILTDirectiveController.prototype.isAnySelfRegisterVILTSessions = function () {\r\n return this.sessions.some(function (w) { return w.isSelfRegistrationAllowed; });\r\n };\r\n VhsVILTDirectiveController.prototype.getVILTSessionParticipantStatus = function (viltSessionId) {\r\n var _this = this;\r\n var viltSessionParticipant = this.userVILTSessionParticipants.filter(function (p) { return p.viltSessionId == viltSessionId && p.userId == _this.currentUser.id; })[0];\r\n return viltSessionParticipant === undefined ? \"\" : viltSessionParticipant.status;\r\n };\r\n VhsVILTDirectiveController.prototype.toJoinVILTSession = function (viltSessionId) {\r\n var joinUrl = \"\";\r\n this.userVILTSessionParticipants.forEach(function (p) {\r\n if (p.viltSessionId === viltSessionId) {\r\n joinUrl = p.joinUrl;\r\n }\r\n });\r\n window.open(joinUrl);\r\n };\r\n VhsVILTDirectiveController.prototype.selfRegister = function (viltSessionId, provider) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n var participant = {};\r\n participant.userId = this.currentUser.id;\r\n var func;\r\n if (provider == 'ZOOM') {\r\n func = this.courseService.createParticipantMeeting(this.courseId, viltSessionId, participant);\r\n }\r\n else if (provider == 'TEAMS') {\r\n func = this.courseService.createParticipantTeams(this.courseId, viltSessionId, participant);\r\n }\r\n else {\r\n func = this.courseService.createParticipantWebinar(this.courseId, viltSessionId, participant);\r\n }\r\n func.then(function (x) {\r\n _this.loadUserVILTSessionParticipants();\r\n })\r\n .catch(function (x) {\r\n _this.isDataLoading = false;\r\n if (x.data) {\r\n if (x.data && x.data.messageForUser && x.data.messageForUser.search(\"vilt.was.cancelled\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else if (x.data.search(\"with specified key does not exist\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else if (x.data.search(\"Email validation failed\") != -1) {\r\n INotifier_1.notifier.error(\"Participant email validation failed\");\r\n }\r\n else if (x.data.search(\"Only available for paid users\") != -1) {\r\n INotifier_1.notifier.error(\"Zoom account of the session creator must be paid\");\r\n }\r\n else {\r\n _this.showErrorNotification(x.data);\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to register participant(s). Please try again later or contact support.\");\r\n }\r\n });\r\n };\r\n VhsVILTDirectiveController.prototype.cancelRegistration = function (viltSessionId) {\r\n var _this = this;\r\n this.cancelParticipantId = this.userVILTSessionParticipants.filter(function (p) { return p.viltSessionId === viltSessionId; })[0].id;\r\n this.currentVILTSessionId = viltSessionId;\r\n this.dialogService.confirm(\"You may not be able to join this session.\", {\r\n title: \"Are you sure?\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n _this.isDataLoading = true;\r\n var provider = _this.sessions.filter(function (m) { return m.id == _this.currentVILTSessionId; })[0].provider;\r\n var func;\r\n if (provider == 'ZOOM') {\r\n func = _this.courseService.removeParticipantMeeting(_this.courseId, _this.currentVILTSessionId, _this.cancelParticipantId);\r\n }\r\n else if (provider == 'TEAMS') {\r\n func = _this.courseService.removeParticipantTeams(_this.courseId, _this.currentVILTSessionId, _this.cancelParticipantId);\r\n }\r\n else {\r\n func = _this.courseService.removeParticipantWebinar(_this.courseId, _this.currentVILTSessionId, _this.cancelParticipantId);\r\n }\r\n func.then(function (x) {\r\n _this.loadUserVILTSessionParticipants();\r\n })\r\n .catch(function (x) {\r\n _this.isDataLoading = false;\r\n if (x.data && x.data.messageForUser && x.data.messageForUser.search(\"vilt.was.cancelled\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else {\r\n _this.showErrorNotification(x.data);\r\n }\r\n });\r\n });\r\n };\r\n VhsVILTDirectiveController.prototype.getAbbriviation = function (timeZone) {\r\n var abbreviation;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == timeZone) {\r\n abbreviation = t.abbreviation;\r\n }\r\n });\r\n return abbreviation;\r\n };\r\n VhsVILTDirectiveController.prototype.dateToTimeZoneDate = function (timeZone, date) {\r\n var _this = this;\r\n var offset;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == timeZone) {\r\n offset = _this.getTimeZoneOffset(t.value);\r\n }\r\n });\r\n return (date + new Date().getTimezoneOffset() * 60000 - offset);\r\n };\r\n VhsVILTDirectiveController.prototype.getTimeZoneOffset = function (timeZone) {\r\n var now = new Date();\r\n var localTime = Math.floor((now.getTime() / 1000)) * 1000;\r\n var timeZoneTime = new Date(now.toLocaleString(\"en-US\", { timeZone: timeZone })).getTime();\r\n return now.getTimezoneOffset() * 60000 + (localTime - timeZoneTime);\r\n };\r\n VhsVILTDirectiveController.prototype.showMessageForJoiningToVILT = function () {\r\n var _this = this;\r\n return this.sessions.some(function (m) { return m.status != \"FINISHED\" &&\r\n m.isSelfRegistrationAllowed &&\r\n _this.isVILTSessionParticipant(m.id); });\r\n };\r\n VhsVILTDirectiveController.prototype.showMessageForRegisterOnVILT = function () {\r\n var _this = this;\r\n return this.sessions.some(function (m) { return m.status != \"FINISHED\" &&\r\n m.isSelfRegistrationAllowed &&\r\n !_this.isVILTSessionParticipant(m.id); });\r\n };\r\n VhsVILTDirectiveController.prototype.getHelpTipForTeams = function () {\r\n var teamsHelpTip = \"Please enter :fullName into Teams join dialog\";\r\n return teamsHelpTip.replace(\":fullName\", this.currentUser.fullName);\r\n };\r\n VhsVILTDirectiveController.prototype.showErrorNotification = function (errorCode) {\r\n switch (errorCode) {\r\n case \"vilt.was.cancelled\":\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n break;\r\n case \"vilt.unable.to.unregister.participant\":\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n break;\r\n default:\r\n INotifier_1.notifier.error(errorCode);\r\n }\r\n };\r\n VhsVILTDirectiveController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 767;\r\n };\r\n VhsVILTDirectiveController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"Upload\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n \"$window\",\r\n PermissionsService_1.PermissionsService.NAME,\r\n UserService_1.UserService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return VhsVILTDirectiveController;\r\n})();\r\nexports.VhsVILTDirectiveController = VhsVILTDirectiveController;\r\nfunction VhsVILTDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsVILTDirectiveController,\r\n scope: {\r\n courseProgressId: \"=\",\r\n section: \"=\",\r\n lastSectionInCourse: \"=\"\r\n },\r\n templateUrl: url.template(\"components/vhs-vilt.html\")\r\n };\r\n}\r\nexports.VhsVILTDirectiveFactory = VhsVILTDirectiveFactory;\r\nVhsVILTDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../courses/CourseService\":211,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../users/UserService\":499,\"../utils/UrlService\":528,\"../webinars/models/TimeZoneType\":530,\"./dialog/DialogService\":166}],157:[function(require,module,exports){\nvar CommonService_1 = require(\"../common/CommonService\");\r\nvar VhsVersionChecker = (function () {\r\n function VhsVersionChecker($scope, $http, $timeout, $location, $compile, commonService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$timeout = $timeout;\r\n this.$location = $location;\r\n this.$compile = $compile;\r\n this.commonService = commonService;\r\n this.notificationContent = \"
    \" +\r\n \"

    \" +\r\n \"\" +\r\n \"\" + \"Application version has been updated, page reloading is required.
    Page will be reloaded automatically in one minute. Please save your work now.\" + \"
    \" +\r\n \"

    \" +\r\n \"
    \" +\r\n \"\" +\r\n \"
    \" +\r\n \"
    \";\r\n $scope.vm = this;\r\n this.$timeout(function () { return _this.checkVersion(); }, VhsVersionChecker.TIMEOUT);\r\n }\r\n VhsVersionChecker.prototype.checkVersion = function () {\r\n var _this = this;\r\n this.commonService.checkVersionUpdateIsRequired().then(function (result) {\r\n if (result) {\r\n _this.reloadTimeoutPromise = _this.$timeout(function () {\r\n _this.$location.search(\"no-cache\", moment().valueOf());\r\n location.reload(true);\r\n }, VhsVersionChecker.RELOAD_TIMEOUT);\r\n _this.element.append(_this.$compile(_this.notificationContent)(_this.$scope));\r\n }\r\n _this.$timeout(function () { return _this.checkVersion(); }, VhsVersionChecker.TIMEOUT);\r\n });\r\n };\r\n VhsVersionChecker.prototype.cancelAutoReload = function () {\r\n this.$timeout.cancel(this.reloadTimeoutPromise);\r\n var notification = $(\"#reload-notification\");\r\n if (notification.length != 0) {\r\n notification.remove();\r\n }\r\n };\r\n VhsVersionChecker.TIMEOUT = 30 * 60 * 1000;\r\n VhsVersionChecker.RELOAD_TIMEOUT = 60 * 1000;\r\n VhsVersionChecker.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$timeout\",\r\n \"$location\",\r\n \"$compile\",\r\n CommonService_1.CommonService.NAME\r\n ];\r\n return VhsVersionChecker;\r\n})();\r\nexports.VhsVersionChecker = VhsVersionChecker;\r\nfunction VhsVersionCheckerFactory() {\r\n function link($scope, element, attributes, controller, transclude) {\r\n controller.element = element;\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsVersionChecker\r\n };\r\n}\r\nexports.VhsVersionCheckerFactory = VhsVersionCheckerFactory;\r\n},{\"../common/CommonService\":53}],158:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar VideoPlayerLocalStorageKey_1 = require(\"../materials/models/VideoPlayerLocalStorageKey\");\r\nvar vttToJson = require(\"vtt-to-json\");\r\nvar VhsVideoAudioController = (function () {\r\n function VhsVideoAudioController($window, $scope, $http, $timeout) {\r\n var _this = this;\r\n this.$window = $window;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$timeout = $timeout;\r\n this.errorCount = 0;\r\n this.openTranscriptPane = false;\r\n this.onCueChange = function () {\r\n var newCue = _this.activeTextTrack.cues[0];\r\n console.log(_this.activeTextTrack.cues);\r\n if (newCue && (!newCue.id || newCue.id == \"\")) {\r\n for (var i = 0; i < _this.activeTextTrack.cues.length; i++) {\r\n _this.activeTextTrack.cues[i].id = i.toString();\r\n }\r\n }\r\n _this.activeCuesIds = [];\r\n for (var i = 0; i < _this.activeTextTrack.activeCues.length; i++) {\r\n _this.activeCuesIds.push(_this.activeTextTrack.activeCues[i].id);\r\n }\r\n };\r\n $scope.vm = this;\r\n if ($scope.vhsMaterialCallback) {\r\n this.videoPosterId = 'video-' + $scope.vhsMaterialSettings.materialId;\r\n }\r\n }\r\n Object.defineProperty(VhsVideoAudioController.prototype, \"playerIsPlaying\", {\r\n get: function () {\r\n return this._playerIsPlaying;\r\n },\r\n set: function (value) {\r\n this._playerIsPlaying = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(VhsVideoAudioController.prototype, \"playerCurrentTime\", {\r\n get: function () {\r\n return this._playerCurrentTime;\r\n },\r\n set: function (value) {\r\n if (value > 0) {\r\n this._playerCurrentTime = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n VhsVideoAudioController.prototype.init = function ($scope, element, isVideoOrAudio, isYoutube) {\r\n var _this = this;\r\n isVideoOrAudio = isVideoOrAudio.toUpperCase();\r\n if (isVideoOrAudio !== \"AUDIO\" && isVideoOrAudio !== \"VIDEO\") {\r\n this.sendMessageToSentry(\"Error: Wrong multimedia directive type in init() - \" + isVideoOrAudio);\r\n isVideoOrAudio = \"VIDEO\";\r\n }\r\n if (this.$scope.vhsMaterialSettings && this.$scope.vhsMaterialSettings.isRewindAllowed &&\r\n this.$scope.vhsMaterialSettings.currentTrack && this.$scope.vhsMaterialSettings.subtitles &&\r\n this.$scope.vhsMaterialSettings.subtitles.length > 0) {\r\n var lang = this.$scope.vhsMaterialSettings.currentTrack;\r\n var vttUrl = this.$scope.vhsMaterialSettings.subtitles.filter(function (sub) { return sub.label === lang; })[0];\r\n $.ajax(vttUrl.url).then(function (res) {\r\n vttToJson(res)\r\n .then(function (result) {\r\n _this.activeCues = result;\r\n _this.showTranscriptPane = true;\r\n });\r\n });\r\n }\r\n var _self = this;\r\n _self.$scope = $scope;\r\n _self.showTranscriptPane = false;\r\n var playerVideoTag = element.find(isVideoOrAudio).get(0);\r\n if (isVideoOrAudio == \"AUDIO\" && $scope.vhsMaterialSettings && $scope.vhsMaterialSettings.subtitles[0]) {\r\n this.initPlayerSubtitles(playerVideoTag, $scope.vhsMaterialSettings.subtitles[0].url, $scope.vhsMaterialSettings.subtitles[0].label);\r\n }\r\n $(playerVideoTag).on('contextmenu', function (event) {\r\n event.preventDefault();\r\n });\r\n if (_self.$scope.vhsId) {\r\n playerVideoTag.id = _self.$scope.vhsId;\r\n }\r\n var videoJsPlayerId = null;\r\n if (!element.attr('id')) {\r\n element.attr('id', RandomUtils_1.RandomUtils.generateRandomId('vhs_videoj_'));\r\n }\r\n videoJsPlayerId = element.attr('id');\r\n var videojsOptions = {\r\n autoplay: false,\r\n controls: true,\r\n flash: {\r\n swf: \"vendor/swf/video-js.swf\"\r\n },\r\n loop: false,\r\n poster: _self.$scope.vhsPoster || \"\",\r\n preload: \"none\",\r\n techOrder: ['html5', 'flash'],\r\n height: 1300,\r\n html5: {\r\n nativeTextTracks: false\r\n }\r\n };\r\n if (this.$scope.vhsInlineAudio) {\r\n var audioInlineOptions = {\r\n bigPlayButton: false,\r\n autoplay: _self.$scope.vhsAutoPlay || false,\r\n controlBar: {\r\n fullscreenToggle: false\r\n }\r\n };\r\n videojsOptions = videojs.mergeOptions(videojsOptions, audioInlineOptions);\r\n $(playerVideoTag).addClass(\"vhs-inline-audio\");\r\n }\r\n var youtubeOptions = {\r\n autoplay: false,\r\n controls: true,\r\n loop: false,\r\n poster: \"\",\r\n preload: \"none\",\r\n techOrder: ['youtube'],\r\n sources: _self.$scope.vhsSources,\r\n \"youtube\": {\r\n \"ytControls\": 2,\r\n \"enablejsapi\": 1\r\n },\r\n height: 1300\r\n };\r\n if (isYoutube) {\r\n $(element).addClass(\"video-youtube-js\")\r\n .addClass('vhs-youtube-video')\r\n .addClass(\"vjs-16-9\")\r\n .addClass(\"vjs_video_3-dimensions\")\r\n .addClass(\"vjs-user-inactive\")\r\n .addClass(\"vjs-16-9__optimization\");\r\n }\r\n var showTranscriptButtonComponent = videojs.getComponent('Button');\r\n videojs.registerComponent('ShowTranscriptButton', videojs.extend(showTranscriptButtonComponent, {\r\n constructor: function () {\r\n showTranscriptButtonComponent.apply(this, arguments);\r\n },\r\n handleClick: function () {\r\n _this.showTranscriptPane = !_this.showTranscriptPane;\r\n },\r\n buildCSSClass: function () {\r\n return 'vjs-control vjs-button fa fa-edit';\r\n },\r\n createControlTextEl: function (button) {\r\n return $(button).html($('').attr('title', 'Show Transcript'));\r\n }\r\n }));\r\n if (isYoutube || isVideoOrAudio == \"AUDIO\") {\r\n videojs(isYoutube ? videoJsPlayerId : playerVideoTag, isYoutube ? youtubeOptions : videojsOptions, function () {\r\n var player = this;\r\n _self.videoJSPlayer = player;\r\n try {\r\n var playerPosterTag = element.find('.vjs-poster').get(0);\r\n $(element).find('.video-js')\r\n .on('contextmenu', function (event) {\r\n event.preventDefault();\r\n });\r\n player.isAudio(isVideoOrAudio === 'AUDIO');\r\n _self._playerIsPlaying = false;\r\n _self._playerCurrentTime = 0;\r\n _self.textTrackList = player.textTracks();\r\n _self.buildShowTranscriptButton();\r\n _self.textTrackList.addEventListener('change', function () {\r\n if (_self.activeTextTrack != null && _self.activeTextTrack != undefined) {\r\n _self.activeTextTrack.removeEventListener('cuechange', _self.onCueChange);\r\n }\r\n _self.activeTextTrack = null;\r\n _self.activeCuesIds = [];\r\n player.getChild('controlBar').removeChild('ShowTranscriptButton');\r\n _self.showTranscriptPane = false;\r\n for (var i = 0; i < _self.textTrackList.length; i++) {\r\n var track = _self.textTrackList[i];\r\n if (track.mode == 'showing') {\r\n _self.activeTextTrack = track;\r\n _self.activeCuesIds = [];\r\n _self.activeTextTrack.addEventListener('cuechange', _self.onCueChange);\r\n player.getChild('controlBar').addChild('ShowTranscriptButton');\r\n _self.showTranscriptPane = true;\r\n return;\r\n }\r\n }\r\n });\r\n player.on(\"play\", function () {\r\n _self._playerIsPlaying = true;\r\n });\r\n player.on(\"ended\", function () {\r\n _self._playerIsPlaying = false;\r\n player.exitFullscreen();\r\n player.currentTime(0);\r\n player.hasStarted(false);\r\n });\r\n player.on('pause', function () {\r\n _self._playerIsPlaying = false;\r\n });\r\n player.on('changeRes', function () {\r\n });\r\n player.on('timeupdate', function () {\r\n _self._playerIsPlaying = !player.paused();\r\n if (player.currentTime() > 0) {\r\n _self.playerCurrentTime = player.currentTime();\r\n }\r\n });\r\n player.on('error', function (event) {\r\n console.log('_self._playerIsPlaying:', _self._playerIsPlaying, '; errorEvent: ', event, '; player.error(): ', player.error(), '; player.error().code: ', player.error().code, '; _self.$scope.$id: ', _self.$scope.$id, '; attempt: ', _self.errorCount, '; _self._playerCurrentTime', _self._playerCurrentTime);\r\n if (isYoutube)\r\n _self.hideVideojsErrorMessage();\r\n _self.errorCount++;\r\n if (_self.errorCount > VhsVideoAudioController.GIVE_UP_AFTER_SO_MANY_ERRORS) {\r\n player.off('error');\r\n _self.errorCount--;\r\n var errorMessage = \"\" + _self.errorCount + (_self.errorCount === 1\r\n ? \" attempt to restore playback after error has \"\r\n : \" attempts to restore playback after error have \") +\r\n \"been made so far. Now we give up.\";\r\n _self.sendMessageToSentry(errorMessage);\r\n }\r\n else if (_self.errorCount === 1 || _self.errorCount === VhsVideoAudioController.GIVE_UP_AFTER_SO_MANY_ERRORS - 1) {\r\n if (playerVideoTag.canPlayType && _self.$scope.vhsSources && _self.$scope.vhsSources.length > 0) {\r\n console.log(\"\" + _self.$scope.vhsSources[0].type + \" support: \", !!(playerVideoTag.canPlayType(\"\" + _self.$scope.vhsSources[0].type + \";\").replace(/no/, '')));\r\n }\r\n if (player.error().code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED) {\r\n if (player.error().message.toUpperCase().indexOf(\"FLASH\") >= 0) {\r\n player.options({ techOrder: ['html5', 'flash'] });\r\n _self.sendMessageToSentry(\"Some error occurred. We will try to switch to HTML5 mode...\");\r\n }\r\n else if (player.techName && player.techName.toUpperCase() === \"HTML5\") {\r\n player.options({ techOrder: ['flash', 'html5'] });\r\n _self.sendMessageToSentry(\"Some error occurred. We will try to switch to Flash mode...\");\r\n }\r\n }\r\n _self.setPlayerSources(player, playerVideoTag, isYoutube);\r\n _self.reloadPlayer(player, playerVideoTag);\r\n }\r\n else if (_self.$scope.vhsErrorCallback) {\r\n _self.sendMessageToSentry(\"Some error occurred. We are now trying to request multimedia sources again...\");\r\n var promise = _self.$scope.vhsErrorCallback(player.error());\r\n if (promise) {\r\n promise.then(function () {\r\n _self.$timeout(function () {\r\n _self.setPlayerPoster(player, playerVideoTag, playerPosterTag);\r\n if (playerVideoTag.getAttribute(\"src\") != _self.$scope.vhsSources[0].src) {\r\n _self.setPlayerSources(player, playerVideoTag, isYoutube);\r\n _self.reloadPlayer(player, playerVideoTag);\r\n }\r\n else {\r\n player.off('error');\r\n if (_self.$scope.vhsSources && _self.$scope.vhsSources.length > 0) {\r\n _self.sendMessageToSentry(\"We received exactly the same multimedia URL.\" +\r\n \" Won't request sources again.\");\r\n }\r\n else {\r\n _self.sendMessageToSentry(\"No multimedia sources were provided.\");\r\n }\r\n }\r\n }, VhsVideoAudioController.RETRY_TIME_INTERVAL);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n finally {\r\n _self.sendMessageToSentry(\"No multimedia sources were provided.\");\r\n _self.setPlayerSources(player, playerVideoTag, isYoutube);\r\n }\r\n });\r\n }\r\n };\r\n VhsVideoAudioController.prototype.setPlayerSources = function (player, playerVideoTag, isYoutube) {\r\n if (isYoutube)\r\n return;\r\n var _self = this;\r\n if (Array.isArray(_self.$scope.vhsSources)) {\r\n _self.$scope.vhsSources.forEach(function (source) {\r\n if (source.type === \"video/quicktime\") {\r\n source.type = \"video/mp4\";\r\n }\r\n });\r\n }\r\n player.src(_self.$scope.vhsSources);\r\n };\r\n VhsVideoAudioController.prototype.initPlayerSubtitles = function (playerVideoTag, subtitlesUrl, subtitlesLanguage) {\r\n if (subtitlesUrl) {\r\n $(playerVideoTag).append($(\"\"));\r\n }\r\n };\r\n VhsVideoAudioController.prototype.isCueActive = function (cue) {\r\n var timestamp = parseInt(localStorage.getItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.TIMESTAMP_KEY));\r\n return (Math.floor(cue.start * 0.001) <= timestamp) && (Math.floor(cue.end * 0.001) > timestamp);\r\n };\r\n VhsVideoAudioController.prototype.VJSIsCueActive = function (cue) {\r\n return this.activeCuesIds.filter(function (cueId) { return cueId == cue.id; }).length > 0;\r\n };\r\n VhsVideoAudioController.prototype.buildShowTranscriptButton = function () {\r\n var _this = this;\r\n var showTranscriptButtonComponent = videojs.getComponent('Button');\r\n videojs.registerComponent('ShowTranscriptButton', videojs.extend(showTranscriptButtonComponent, {\r\n constructor: function () {\r\n showTranscriptButtonComponent.apply(this, arguments);\r\n },\r\n handleClick: function () {\r\n _this.showTranscriptPane = !_this.showTranscriptPane;\r\n },\r\n buildCSSClass: function () {\r\n return 'vjs-control vjs-button fa fa-edit';\r\n },\r\n createControlTextEl: function (button) {\r\n return $(button).html($('').attr('title', 'Show Transcript'));\r\n }\r\n }));\r\n };\r\n VhsVideoAudioController.prototype.getShadowRoot = function (elem) {\r\n return elem.shadowRoot;\r\n };\r\n VhsVideoAudioController.prototype.VJSRewindTo = function (seconds) {\r\n this.videoJSPlayer.currentTime(seconds);\r\n };\r\n VhsVideoAudioController.prototype.rewindTo = function (milliseconds, materialId) {\r\n var playerContainer = document.getElementById(materialId);\r\n this.$window[\"VIDEO-PLAYER\"].player.pause();\r\n this.$window[\"VIDEO-PLAYER\"].player.currentTime = (milliseconds / 1000);\r\n this.$window[\"VIDEO-PLAYER\"].player.play();\r\n };\r\n VhsVideoAudioController.prototype.getDateFromSeconds = function (seconds) {\r\n var date = new Date(0, 0, 0, 0, 0, 0, 0);\r\n date.setSeconds(seconds);\r\n return date;\r\n };\r\n VhsVideoAudioController.prototype.getDateFromMilliseconds = function (milliseconds) {\r\n var date = new Date(0, 0, 0, 0, 0, 0, 0);\r\n date.setMilliseconds(milliseconds);\r\n return date;\r\n };\r\n VhsVideoAudioController.prototype.thisMultimediaSourceOpenInLocalStorage = function (materialId) {\r\n return !materialId || localStorage.getItem('materialID') === materialId.toString();\r\n };\r\n VhsVideoAudioController.prototype.openThisMaterial = function () {\r\n try {\r\n this.$scope.vhsMaterialSettings.$scope.$broadcast(\"setNewMultimediaSource\", this.$scope.vhsMaterialSettings);\r\n localStorage.removeItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.CURRENT_CHECKPOINT_KEY);\r\n }\r\n catch (e) {\r\n this.sendMessageToSentry(\"Error in open video or audio: \" + e.message);\r\n }\r\n };\r\n VhsVideoAudioController.prototype.reloadPlayer = function (player, playerVideoTag) {\r\n var _self = this;\r\n player.one('loadedmetadata', function () {\r\n if (player.currentTime() < _self.playerCurrentTime) {\r\n player.currentTime(_self.playerCurrentTime);\r\n playerVideoTag['currentTime'] = _self.playerCurrentTime;\r\n }\r\n if (_self.playerIsPlaying) {\r\n player.one('canplay', function () {\r\n player.play();\r\n });\r\n }\r\n });\r\n player.preload('auto');\r\n player.load();\r\n };\r\n VhsVideoAudioController.prototype.hideVideojsErrorMessage = function () {\r\n var elements = [\r\n '.vjs-modal-dialog-content', '.vjs-error-display', '.vjs-loading-spinner'\r\n ];\r\n elements.forEach(function (element) {\r\n $(element).hide();\r\n });\r\n };\r\n VhsVideoAudioController.prototype.setPlayerPoster = function (player, playerVideoTag, playerPosterTag) {\r\n var _self = this;\r\n if (_self.$scope.vhsPoster && _self.$scope.vhsPoster.length > 0) {\r\n playerVideoTag.setAttribute('poster', _self.$scope.vhsPoster || \"\");\r\n player.posterImage.setSrc(_self.$scope.vhsPoster || \"\");\r\n }\r\n };\r\n VhsVideoAudioController.prototype.sendMessageToSentry = function (message) {\r\n try {\r\n console.log(message);\r\n window.Sentry.captureMessage(message);\r\n }\r\n catch (e) {\r\n console.log('Unable to send Sentry message.');\r\n }\r\n };\r\n VhsVideoAudioController.prototype.toggleTranscriptPane = function () {\r\n this.openTranscriptPane = !this.openTranscriptPane;\r\n };\r\n VhsVideoAudioController.GIVE_UP_AFTER_SO_MANY_ERRORS = 5;\r\n VhsVideoAudioController.RETRY_TIME_INTERVAL = 10000;\r\n VhsVideoAudioController.$inject = [\r\n \"$window\",\r\n \"$scope\",\r\n \"$http\",\r\n \"$timeout\"\r\n ];\r\n return VhsVideoAudioController;\r\n})();\r\nexports.VhsVideoAudioController = VhsVideoAudioController;\r\nfunction VhsVideoDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element, 'video', false);\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.controller = VhsVideoAudioController;\r\n directive.scope = {\r\n vhsId: \"=?\",\r\n vhsSources: \"=\",\r\n vhsWidth: \"=?\",\r\n vhsHeight: \"=?\",\r\n vhsPoster: \"=?\",\r\n vhsErrorCallback: \"&?\",\r\n vhsMaterialCallback: \"=?\",\r\n vhsMaterialSettings: \"=?\"\r\n };\r\n directive.templateUrl = url.template(\"components/vhs-video.html\");\r\n return directive;\r\n}\r\nexports.VhsVideoDirectiveFactory = VhsVideoDirectiveFactory;\r\nVhsVideoDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\nfunction VhsYoutubeVideoDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element, 'video', true);\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.controller = VhsVideoAudioController;\r\n directive.scope = {\r\n vhsId: \"=?\",\r\n vhsSources: \"=\",\r\n vhsWidth: \"=?\",\r\n vhsHeight: \"=?\",\r\n vhsPoster: \"=?\",\r\n vhsErrorCallback: \"&?\",\r\n vhsMaterialCallback: \"=?\",\r\n vhsMaterialSettings: \"=?\"\r\n };\r\n directive.templateUrl = url.template(\"components/vhs-youtube-video.html\");\r\n return directive;\r\n}\r\nexports.VhsYoutubeVideoDirectiveFactory = VhsYoutubeVideoDirectiveFactory;\r\nVhsYoutubeVideoDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\nfunction VhsAudioDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element, 'audio', false);\r\n }\r\n var directive = {};\r\n directive.restrict = \"A\";\r\n directive.link = link;\r\n directive.controller = VhsVideoAudioController;\r\n directive.scope = {\r\n vhsId: \"=?\",\r\n vhsSources: \"=\",\r\n vhsWidth: \"=?\",\r\n vhsHeight: \"=?\",\r\n vhsPoster: \"=?\",\r\n vhsErrorCallback: \"&?\",\r\n vhsInlineAudio: \"=?\",\r\n vhsAutoPlay: \"=?\",\r\n vhsMaterialCallback: \"=?\",\r\n vhsMaterialSettings: \"=?\"\r\n };\r\n directive.templateUrl = url.template(\"components/vhs-audio.html\");\r\n return directive;\r\n}\r\nexports.VhsAudioDirectiveFactory = VhsAudioDirectiveFactory;\r\nVhsAudioDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../materials/models/VideoPlayerLocalStorageKey\":349,\"../utils/RandomUtils\":523,\"../utils/UrlService\":528,\"vtt-to-json\":1}],159:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar TimeZoneType_1 = require(\"../webinars/models/TimeZoneType\");\r\nvar VhsWebinarCreateEditDirectiveController = (function () {\r\n function VhsWebinarCreateEditDirectiveController($scope, url) {\r\n this.$scope = $scope;\r\n this.url = url;\r\n this.timeZone = TimeZoneType_1.TimeZone;\r\n $scope.vm = this;\r\n }\r\n VhsWebinarCreateEditDirectiveController.$inject = [\r\n \"$scope\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return VhsWebinarCreateEditDirectiveController;\r\n})();\r\nexports.VhsWebinarCreateEditDirectiveController = VhsWebinarCreateEditDirectiveController;\r\nfunction VhsWebinarCreateEditDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsWebinarCreateEditDirectiveController,\r\n scope: {\r\n newSession: \"=\",\r\n viltSessionSections: \"=\",\r\n currentUser: \"=\",\r\n isCreationModalShown: \"=\",\r\n course: \"=\"\r\n },\r\n templateUrl: url.template(\"components/vhs-webinar-create-edit.html\")\r\n };\r\n}\r\nexports.VhsWebinarCreateEditDirectiveFactory = VhsWebinarCreateEditDirectiveFactory;\r\nVhsWebinarCreateEditDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../utils/UrlService\":528,\"../webinars/models/TimeZoneType\":530}],160:[function(require,module,exports){\nvar BrandingService_1 = require(\"../../branding/BrandingService\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar VhsBrandingColorsEditing = (function () {\r\n function VhsBrandingColorsEditing($scope, brandingService, permissionService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.brandingService = brandingService;\r\n this.permissionService = permissionService;\r\n this.isDeleteAvailable = false;\r\n this.isLoaded = false;\r\n this.systemPermissions = {};\r\n $scope.vm = this;\r\n this.permissionService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadBrandingColors()\r\n .finally(function () {\r\n _this.isLoaded = true;\r\n });\r\n }\r\n VhsBrandingColorsEditing.prototype.loadBrandingColors = function () {\r\n var _this = this;\r\n var loadBrandingColorsPromise = this.$scope.businessUnitId\r\n ? this.brandingService.getBrandingColors(this.$scope.businessUnitId)\r\n : this.brandingService.getSystemBrandingColors();\r\n return loadBrandingColorsPromise\r\n .then(function (brandingColors) {\r\n _this.isDeleteAvailable = brandingColors.id && (brandingColors.mobileColor != null\r\n || brandingColors.barColor != null\r\n || brandingColors.mobileBarColor != null);\r\n _this.brandingColors = angular.copy(brandingColors);\r\n if (_this.brandingColors == null || (_this.brandingColors.barColor == null && _this.brandingColors.mobileBarColor == null)) {\r\n _this.brandingColors = {};\r\n _this.brandingColors.barColor = \"#337ab7\";\r\n _this.brandingColors.mobileBarColor = \"#337ab7\";\r\n }\r\n return _this.brandingColors;\r\n });\r\n };\r\n VhsBrandingColorsEditing.prototype.saveBrandingColors = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n var saveBrandingColorsPromise = this.$scope.businessUnitId\r\n ? this.brandingService.saveBrandingColors(this.$scope.businessUnitId, this.brandingColors.mobileColor, this.brandingColors.barColor, this.brandingColors.mobileBarColor)\r\n : this.brandingService.saveSystemBrandingColors(this.brandingColors.mobileColor, this.brandingColors.barColor, this.brandingColors.mobileBarColor);\r\n return saveBrandingColorsPromise\r\n .then(function (brandingColors) {\r\n INotifier_1.notifier.success(\"Colors successfully updated\");\r\n _this.isDeleteAvailable = true;\r\n _this.brandingColors = angular.copy(brandingColors);\r\n return _this.brandingColors;\r\n })\r\n .finally(function () {\r\n _this.isLoaded = true;\r\n });\r\n };\r\n VhsBrandingColorsEditing.prototype.cancelBrandingColors = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n this.loadBrandingColors()\r\n .finally(function () {\r\n _this.isLoaded = true;\r\n });\r\n };\r\n VhsBrandingColorsEditing.prototype.isDisableSaveButton = function () {\r\n return !(this.systemPermissions.configureBusinessUnitSettings || this.systemPermissions.editSystemConfiguration) || !this.isLoaded;\r\n };\r\n VhsBrandingColorsEditing.prototype.removeBrandingColors = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n var deleteBrandingColorsPromise = this.$scope.businessUnitId\r\n ? this.brandingService.removeBrandingColors(this.brandingColors.id)\r\n : this.brandingService.removeSystemBrandingColors(this.brandingColors.id);\r\n deleteBrandingColorsPromise\r\n .then(function (brandingColors) {\r\n INotifier_1.notifier.success(\"Colors successfully deleted\");\r\n _this.isDeleteAvailable = false;\r\n _this.brandingColors = angular.copy(brandingColors);\r\n if (_this.brandingColors == null || (_this.brandingColors.barColor == null && _this.brandingColors.mobileBarColor == null)) {\r\n _this.brandingColors = {};\r\n _this.brandingColors.barColor = \"#337ab7\";\r\n _this.brandingColors.mobileBarColor = \"#337ab7\";\r\n }\r\n return _this.brandingColors;\r\n })\r\n .finally(function () {\r\n _this.isLoaded = true;\r\n });\r\n };\r\n VhsBrandingColorsEditing.prototype.isMobileVersion = function () {\r\n return window.innerWidth <= 768;\r\n };\r\n VhsBrandingColorsEditing.prototype.init = function ($scope, element) {\r\n };\r\n VhsBrandingColorsEditing.$inject = [\r\n \"$scope\",\r\n BrandingService_1.BrandingService.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return VhsBrandingColorsEditing;\r\n})();\r\nexports.VhsBrandingColorsEditing = VhsBrandingColorsEditing;\r\nfunction VhsBrandingColorsEditingDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsBrandingColorsEditing,\r\n scope: {\r\n businessUnitId: \"=?vhsBusinessUnitId\"\r\n },\r\n templateUrl: url.template(\"components/branding/vhs-branding-colors-editing.html\")\r\n };\r\n}\r\nexports.VhsBrandingColorsEditingDirectiveFactory = VhsBrandingColorsEditingDirectiveFactory;\r\nVhsBrandingColorsEditingDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../INotifier\":5,\"../../branding/BrandingService\":33,\"../../security/PermissionsService\":418,\"../../utils/UrlService\":528}],161:[function(require,module,exports){\nvar BrandingService_1 = require(\"../../branding/BrandingService\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar VhsBrandingCssEditing = (function () {\r\n function VhsBrandingCssEditing($scope, brandingService, permissionService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.brandingService = brandingService;\r\n this.permissionService = permissionService;\r\n this.isDeleteAvailable = false;\r\n this.isLoaded = false;\r\n this.systemPermissions = {};\r\n $scope.vm = this;\r\n this.permissionService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadCustomCss()\r\n .finally(function () {\r\n _this.isLoaded = true;\r\n });\r\n }\r\n VhsBrandingCssEditing.prototype.loadCustomCss = function () {\r\n var _this = this;\r\n var loadCustomCssPromise = this.$scope.businessUnitId\r\n ? this.brandingService.getCustomCss(this.$scope.businessUnitId)\r\n : this.brandingService.getSystemCustomCss();\r\n return loadCustomCssPromise\r\n .then(function (customCss) {\r\n _this.isDeleteAvailable = customCss.id && customCss.css != null;\r\n _this.customCss = angular.copy(customCss);\r\n return _this.customCss;\r\n });\r\n };\r\n VhsBrandingCssEditing.prototype.saveBrandingCss = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n var saveCustomCssPromise = this.$scope.businessUnitId\r\n ? this.brandingService.updateCustomCss(this.$scope.businessUnitId, this.customCss.css)\r\n : this.brandingService.updateSystemCustomCss(this.customCss.css);\r\n return saveCustomCssPromise\r\n .then(function (customCss) {\r\n INotifier_1.notifier.success(\"Custom css successfully updated\");\r\n _this.isDeleteAvailable = true;\r\n _this.customCss = angular.copy(customCss);\r\n return _this.customCss;\r\n })\r\n .finally(function () {\r\n _this.isLoaded = true;\r\n });\r\n };\r\n VhsBrandingCssEditing.prototype.isDisableSaveButton = function () {\r\n return !(this.systemPermissions.configureBusinessUnitSettings || this.systemPermissions.editSystemConfiguration) || !this.isLoaded || this.customCss.css == null || this.customCss.css.length == 0;\r\n };\r\n VhsBrandingCssEditing.prototype.cancelBrandingCss = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n this.loadCustomCss()\r\n .finally(function () {\r\n _this.isLoaded = true;\r\n });\r\n };\r\n VhsBrandingCssEditing.prototype.removeBrandingCss = function () {\r\n var _this = this;\r\n this.isLoaded = false;\r\n var deleteCustomCssPromise = this.$scope.businessUnitId\r\n ? this.brandingService.deleteCustomCss(this.$scope.businessUnitId)\r\n : this.brandingService.deleteSystemCustomCss();\r\n deleteCustomCssPromise\r\n .then(function (customCss) {\r\n INotifier_1.notifier.success(\"Custom css successfully deleted\");\r\n _this.isDeleteAvailable = false;\r\n _this.customCss = angular.copy(customCss);\r\n return _this.customCss;\r\n })\r\n .finally(function () {\r\n _this.isLoaded = true;\r\n });\r\n };\r\n VhsBrandingCssEditing.prototype.init = function ($scope, element) {\r\n };\r\n VhsBrandingCssEditing.$inject = [\r\n \"$scope\",\r\n BrandingService_1.BrandingService.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return VhsBrandingCssEditing;\r\n})();\r\nexports.VhsBrandingCssEditing = VhsBrandingCssEditing;\r\nfunction VhsBrandingCssEditingDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsBrandingCssEditing,\r\n scope: {\r\n businessUnitId: \"=?vhsBusinessUnitId\"\r\n },\r\n templateUrl: url.template(\"components/branding/vhs-branding-css-editing.html\")\r\n };\r\n}\r\nexports.VhsBrandingCssEditingDirectiveFactory = VhsBrandingCssEditingDirectiveFactory;\r\nVhsBrandingCssEditingDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../INotifier\":5,\"../../branding/BrandingService\":33,\"../../security/PermissionsService\":418,\"../../utils/UrlService\":528}],162:[function(require,module,exports){\nvar BrandingService_1 = require(\"../../branding/BrandingService\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar BrandingLogoType_1 = require(\"../../branding/BrandingLogoType\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar VhsBrandingLogosEditing = (function () {\r\n function VhsBrandingLogosEditing($scope, brandingService, permissionService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.brandingService = brandingService;\r\n this.permissionService = permissionService;\r\n this.systemPermissions = {};\r\n this.isLogoLoaded = false;\r\n this.isMobileLogoLoaded = false;\r\n this.isFaviconLoaded = false;\r\n $scope.vm = this;\r\n this.permissionService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadBrandingLogos()\r\n .finally(function () {\r\n _this.setLoaded(BrandingLogoType_1.BrandingLogoType[BrandingLogoType_1.BrandingLogoType.LOGO], true);\r\n _this.setLoaded(BrandingLogoType_1.BrandingLogoType[BrandingLogoType_1.BrandingLogoType.MOBILE_LOGO], true);\r\n _this.setLoaded(BrandingLogoType_1.BrandingLogoType[BrandingLogoType_1.BrandingLogoType.FAVICON], true);\r\n });\r\n }\r\n VhsBrandingLogosEditing.prototype.loadBrandingLogos = function (brandingLogoType) {\r\n var _this = this;\r\n var loadBrandingLogosPromise = this.$scope.businessUnitId\r\n ? this.brandingService.getBrandingLogos(this.$scope.businessUnitId, brandingLogoType)\r\n : this.brandingService.getSystemBrandingLogos(brandingLogoType);\r\n return loadBrandingLogosPromise\r\n .then(function (brandingLogos) {\r\n if (brandingLogoType == null) {\r\n _this.logoPreviewUrl = brandingLogos.logoUrl;\r\n _this.mobileLogoPreviewUrl = brandingLogos.mobileLogoUrl;\r\n _this.faviconPreviewUrl = brandingLogos.faviconUrl;\r\n }\r\n else {\r\n switch (brandingLogoType) {\r\n case BrandingLogoType_1.BrandingLogoType[BrandingLogoType_1.BrandingLogoType.LOGO]:\r\n _this.logoPreviewUrl = brandingLogos.logoUrl;\r\n break;\r\n case BrandingLogoType_1.BrandingLogoType[BrandingLogoType_1.BrandingLogoType.MOBILE_LOGO]:\r\n _this.mobileLogoPreviewUrl = brandingLogos.mobileLogoUrl;\r\n break;\r\n case BrandingLogoType_1.BrandingLogoType[BrandingLogoType_1.BrandingLogoType.FAVICON]:\r\n _this.faviconPreviewUrl = brandingLogos.faviconUrl;\r\n break;\r\n }\r\n }\r\n });\r\n };\r\n VhsBrandingLogosEditing.prototype.updateLogo = function (logoType, file) {\r\n var _this = this;\r\n this.setLoaded(logoType, false);\r\n var updateLogoPromise = this.$scope.businessUnitId\r\n ? this.brandingService.updateBusinessUnitLogo(this.$scope.businessUnitId, logoType, file)\r\n : this.brandingService.updateSystemLogo(logoType, file);\r\n updateLogoPromise\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Image successfully uploaded\");\r\n _this.cancelChanges(logoType);\r\n return _this.loadBrandingLogos(logoType);\r\n })\r\n .finally(function () {\r\n _this.setLoaded(logoType, true);\r\n });\r\n };\r\n VhsBrandingLogosEditing.prototype.deleteLogo = function (logoType) {\r\n var _this = this;\r\n this.setLoaded(logoType, false);\r\n var deleteLogoPromise = this.$scope.businessUnitId\r\n ? this.brandingService.deleteBrandingLogos(this.$scope.businessUnitId, logoType)\r\n : this.brandingService.deleteSystemBrandingLogos(logoType);\r\n deleteLogoPromise\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Image successfully deleted\");\r\n _this.cancelChanges(logoType);\r\n return _this.loadBrandingLogos(logoType);\r\n })\r\n .finally(function () {\r\n _this.setLoaded(logoType, true);\r\n });\r\n };\r\n VhsBrandingLogosEditing.prototype.isDisableSaveButton = function () {\r\n return !(this.systemPermissions.configureBusinessUnitSettings || this.systemPermissions.editSystemConfiguration);\r\n };\r\n VhsBrandingLogosEditing.prototype.cancelChanges = function (logoType) {\r\n switch (logoType) {\r\n case BrandingLogoType_1.BrandingLogoType[BrandingLogoType_1.BrandingLogoType.LOGO]:\r\n this.logoPreview = null;\r\n break;\r\n case BrandingLogoType_1.BrandingLogoType[BrandingLogoType_1.BrandingLogoType.MOBILE_LOGO]:\r\n this.mobileLogoPreview = null;\r\n break;\r\n case BrandingLogoType_1.BrandingLogoType[BrandingLogoType_1.BrandingLogoType.FAVICON]:\r\n this.faviconPreview = null;\r\n break;\r\n }\r\n };\r\n VhsBrandingLogosEditing.prototype.setLoaded = function (logoType, loaded) {\r\n switch (BrandingLogoType_1.BrandingLogoType[logoType]) {\r\n case BrandingLogoType_1.BrandingLogoType.LOGO:\r\n this.isLogoLoaded = loaded;\r\n break;\r\n case BrandingLogoType_1.BrandingLogoType.MOBILE_LOGO:\r\n this.isMobileLogoLoaded = loaded;\r\n break;\r\n case BrandingLogoType_1.BrandingLogoType.FAVICON:\r\n this.isFaviconLoaded = loaded;\r\n break;\r\n }\r\n };\r\n VhsBrandingLogosEditing.prototype.isMobileVersion = function () {\r\n return window.innerWidth <= 768;\r\n };\r\n VhsBrandingLogosEditing.prototype.init = function ($scope, element) {\r\n };\r\n VhsBrandingLogosEditing.$inject = [\r\n \"$scope\",\r\n BrandingService_1.BrandingService.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return VhsBrandingLogosEditing;\r\n})();\r\nexports.VhsBrandingLogosEditing = VhsBrandingLogosEditing;\r\nfunction VhsBrandingLogosEditingDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsBrandingLogosEditing,\r\n scope: {\r\n businessUnitId: \"=?vhsBusinessUnitId\"\r\n },\r\n templateUrl: url.template(\"components/branding/vhs-branding-logos-editing.html\")\r\n };\r\n}\r\nexports.VhsBrandingLogosEditingDirectiveFactory = VhsBrandingLogosEditingDirectiveFactory;\r\nVhsBrandingLogosEditingDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../INotifier\":5,\"../../branding/BrandingLogoType\":31,\"../../branding/BrandingService\":33,\"../../security/PermissionsService\":418,\"../../utils/UrlService\":528}],163:[function(require,module,exports){\nvar BrandingService_1 = require(\"../../branding/BrandingService\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar VhsBrandingShareEditing = (function () {\r\n function VhsBrandingShareEditing($scope, brandingService, permissionService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.brandingService = brandingService;\r\n this.permissionService = permissionService;\r\n this.isLogoLoaded = false;\r\n this.systemPermissions = {};\r\n $scope.vm = this;\r\n this.permissionService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadShareLogo();\r\n }\r\n VhsBrandingShareEditing.prototype.loadShareLogo = function () {\r\n var _this = this;\r\n var loadShareLogoPromise = this.$scope.businessUnitId\r\n ? this.brandingService.getShareLogo(this.$scope.businessUnitId)\r\n : this.brandingService.getSystemShareLogo();\r\n loadShareLogoPromise\r\n .then(function (logoUrl) {\r\n _this.logoPreviewUrl = logoUrl;\r\n _this.isLogoLoaded = true;\r\n });\r\n };\r\n VhsBrandingShareEditing.prototype.updateLogo = function (file) {\r\n var _this = this;\r\n this.isLogoLoaded = false;\r\n var updateLogoPromise = this.$scope.businessUnitId\r\n ? this.brandingService.updateBusinessUnitShareLogo(this.$scope.businessUnitId, file)\r\n : this.brandingService.updateSystemShareLogo(file);\r\n updateLogoPromise\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Image successfully uploaded\");\r\n _this.cancelChanges();\r\n _this.loadShareLogo();\r\n })\r\n .finally(function () {\r\n _this.isLogoLoaded = true;\r\n });\r\n };\r\n VhsBrandingShareEditing.prototype.deleteLogo = function () {\r\n var _this = this;\r\n this.isLogoLoaded = false;\r\n var deleteLogoPromise = this.$scope.businessUnitId\r\n ? this.brandingService.deleteShareLogo(this.$scope.businessUnitId)\r\n : this.brandingService.deleteSystemShareLogo();\r\n deleteLogoPromise\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Image successfully deleted\");\r\n _this.cancelChanges();\r\n return _this.loadShareLogo();\r\n })\r\n .finally(function () {\r\n _this.isLogoLoaded = true;\r\n });\r\n };\r\n VhsBrandingShareEditing.prototype.isDisableSaveButton = function () {\r\n return !(this.systemPermissions.configureBusinessUnitSettings || this.systemPermissions.editSystemConfiguration);\r\n };\r\n VhsBrandingShareEditing.prototype.cancelChanges = function () {\r\n this.logoPreview = null;\r\n };\r\n VhsBrandingShareEditing.prototype.isMobileVersion = function () {\r\n return window.innerWidth <= 768;\r\n };\r\n VhsBrandingShareEditing.prototype.init = function ($scope, element) {\r\n };\r\n VhsBrandingShareEditing.$inject = [\r\n \"$scope\",\r\n BrandingService_1.BrandingService.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return VhsBrandingShareEditing;\r\n})();\r\nexports.VhsBrandingShareEditing = VhsBrandingShareEditing;\r\nfunction VhsBrandingShareEditingDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsBrandingShareEditing,\r\n scope: {\r\n businessUnitId: \"=?vhsBusinessUnitId\"\r\n },\r\n templateUrl: url.template(\"components/branding/vhs-branding-share-editing.html\")\r\n };\r\n}\r\nexports.VhsBrandingShareEditingDirectiveFactory = VhsBrandingShareEditingDirectiveFactory;\r\nVhsBrandingShareEditingDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../INotifier\":5,\"../../branding/BrandingService\":33,\"../../security/PermissionsService\":418,\"../../utils/UrlService\":528}],164:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar BusinessUnitsService_1 = require(\"../../businessUnits/BusinessUnitsService\");\r\nvar BrandingThemesService_1 = require(\"../../branding/BrandingThemesService\");\r\nvar BrandingService_1 = require(\"../../branding/BrandingService\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar VhsBrandingThemesEditing = (function () {\r\n function VhsBrandingThemesEditing($scope, $window, $q, businessUnitsService, brandingService, brandingThemesService, permissionService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.$q = $q;\r\n this.businessUnitsService = businessUnitsService;\r\n this.brandingService = brandingService;\r\n this.brandingThemesService = brandingThemesService;\r\n this.permissionService = permissionService;\r\n this.brandingThemeCustomName = \"\";\r\n this.systemPermissions = {};\r\n this.themeColorsHasBeenChanged = false;\r\n this.isSavingBrandingTheme = false;\r\n this.isApplyingTheme = false;\r\n this.themeSpecified = false;\r\n $scope.vm = this;\r\n this.permissionService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n if (this.$scope.businessUnitId) {\r\n this.businessUnitsService.getBusinessUnitById(this.$scope.businessUnitId).then(function (result) {\r\n _this.businessUnit = result;\r\n });\r\n var loadBrandingThemes = this.brandingThemesService.getBrandingThemes(this.$scope.businessUnitId).then(function (result) {\r\n _this.useBrandingThemes(result);\r\n });\r\n var loadBrandingSettings = this.brandingService.getCustomBrandingSettings(this.$scope.businessUnitId).then(function (result) {\r\n _this.brandingThemeId = result.themeId;\r\n _this.themeSpecified = !!result.themeId;\r\n });\r\n this.$q.all([\r\n loadBrandingThemes,\r\n loadBrandingSettings\r\n ]).then(function () {\r\n if (!_this.themeSpecified) {\r\n _this.setDefaultBrandingTheme();\r\n }\r\n _this.changeTheme();\r\n });\r\n }\r\n else {\r\n var loadSystemBrandingThemes = this.brandingThemesService.getSystemBrandingThemes().then(function (result) {\r\n _this.useBrandingThemes(result);\r\n });\r\n var loadSystemBrandingSettings = this.brandingService.getSystemBrandingSettings().then(function (result) {\r\n _this.brandingThemeId = result.themeId;\r\n _this.themeSpecified = !!result.themeId;\r\n });\r\n this.$q.all([\r\n loadSystemBrandingThemes,\r\n loadSystemBrandingSettings\r\n ]).then(function () {\r\n if (!_this.themeSpecified) {\r\n _this.setDefaultBrandingTheme();\r\n }\r\n _this.changeTheme();\r\n });\r\n }\r\n }\r\n VhsBrandingThemesEditing.prototype.useBrandingThemes = function (brandingTheme) {\r\n this.brandingThemes = brandingTheme;\r\n };\r\n VhsBrandingThemesEditing.prototype.themeColorsChange = function () {\r\n this.themeColorsHasBeenChanged = true;\r\n };\r\n VhsBrandingThemesEditing.prototype.initiateThemeColors = function () {\r\n var _this = this;\r\n var availableThemeColors = ['BACKGROUND_COLOR', 'BACKGROUND_TEXT_COLOR', 'ACCENT_COLOR_1', 'ACCENT_TEXT_COLOR_1',\r\n 'ACCENT_COLOR_2', 'ACCENT_TEXT_COLOR_2'];\r\n this.brandingThemes.forEach(function (theme) {\r\n if (theme.id == _this.brandingThemeId) {\r\n _this.currentBrandingTheme = theme;\r\n _this.themeColors = [];\r\n var textColors = theme.colors.filter(function (color) { return color.colorKey.indexOf(\"_TEXT\") != -1; });\r\n theme.colors.forEach(function (themeColor) {\r\n if (availableThemeColors.indexOf(themeColor.colorKey) != -1) {\r\n if (themeColor.colorKey.indexOf(\"_TEXT\") === -1) {\r\n var textColor = textColors.filter(function (color) { return color.colorKey\r\n .replace(\"_TEXT\", \"\") === themeColor.colorKey; });\r\n if (textColor && textColor.length !== 0) {\r\n themeColor.colorTextId = textColor[0].id;\r\n themeColor.colorTextKey = textColor[0].colorKey;\r\n themeColor.colorTextValue = textColor[0].colorValue;\r\n }\r\n _this.themeColors.push(themeColor);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n this.initThemeColors = angular.copy(this.themeColors);\r\n };\r\n VhsBrandingThemesEditing.prototype.setDefaultBrandingTheme = function () {\r\n var _this = this;\r\n this.brandingThemes.forEach(function (theme) {\r\n if (theme.default) {\r\n _this.brandingThemeId = theme.id;\r\n }\r\n });\r\n };\r\n VhsBrandingThemesEditing.prototype.updateNameForSaveAsCustom = function () {\r\n var _this = this;\r\n var brandingColors = this.brandingThemes.filter(function (theme) { return theme.id == _this.brandingThemeId; }).pop();\r\n this.brandingThemeCustomName = brandingColors.name + ' (custom)';\r\n };\r\n VhsBrandingThemesEditing.prototype.saveThemeAsCustom = function () {\r\n var _this = this;\r\n var name = '';\r\n var themeId = null;\r\n this.brandingThemes.forEach(function (theme) {\r\n if (theme.id == _this.brandingThemeId) {\r\n name = theme.name;\r\n if (!theme.predefined) {\r\n themeId = theme.id;\r\n }\r\n }\r\n });\r\n var customBrandingTheme = {\r\n id: themeId,\r\n businessUnitId: this.$scope.businessUnitId,\r\n name: name,\r\n default: false,\r\n predefined: false,\r\n themeColors: this.themeColors,\r\n parentId: this.brandingThemeId,\r\n };\r\n if (themeId) {\r\n this.isSavingBrandingTheme = true;\r\n if (this.$scope.businessUnitId) {\r\n this.brandingThemesService.updateBusinessUnitBrandingTheme(customBrandingTheme).then(function () {\r\n INotifier_1.notifier.success(\"Branding theme has been updated\");\r\n }).finally(function () {\r\n _this.isSavingBrandingTheme = false;\r\n _this.themeColorsHasBeenChanged = false;\r\n });\r\n }\r\n else {\r\n this.brandingThemesService.updateSystemBrandingTheme(customBrandingTheme).then(function () {\r\n INotifier_1.notifier.success(\"Branding theme has been updated\");\r\n }).finally(function () {\r\n _this.isSavingBrandingTheme = false;\r\n _this.themeColorsHasBeenChanged = false;\r\n });\r\n }\r\n }\r\n else {\r\n this.isSavingBrandingTheme = true;\r\n if (!!this.brandingThemeCustomName && this.brandingThemeCustomName !== \"\") {\r\n customBrandingTheme.name = this.brandingThemeCustomName;\r\n }\r\n this.brandingThemesService.saveBrandingThemeAsCustom(customBrandingTheme).then(function (result) {\r\n var newBrandingThemeId = result;\r\n INotifier_1.notifier.success(\"Branding theme has been saved as custom\");\r\n if (_this.$scope.businessUnitId) {\r\n _this.brandingThemesService.getBrandingThemes(_this.$scope.businessUnitId).then(function (result) {\r\n _this.useUpdatingBrandingThemes(newBrandingThemeId, result);\r\n });\r\n }\r\n else {\r\n _this.brandingThemesService.getSystemBrandingThemes().then(function (result) {\r\n _this.useUpdatingBrandingThemes(newBrandingThemeId, result);\r\n });\r\n }\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.branding.name.exist\") {\r\n INotifier_1.notifier.error(\"This is branding name theme is already exist\");\r\n }\r\n }).finally(function () {\r\n _this.isSavingBrandingTheme = false;\r\n _this.brandingThemeCustomName = \"\";\r\n });\r\n }\r\n };\r\n VhsBrandingThemesEditing.prototype.useUpdatingBrandingThemes = function (newBrandingThemeId, brandingThemes) {\r\n this.brandingThemes = angular.copy(brandingThemes);\r\n this.brandingThemeId = Number(newBrandingThemeId);\r\n this.changeTheme();\r\n };\r\n VhsBrandingThemesEditing.prototype.changeTheme = function () {\r\n this.initiateThemeColors();\r\n this.themeColorsHasBeenChanged = false;\r\n };\r\n VhsBrandingThemesEditing.prototype.isDisabledApplyTheme = function () {\r\n return this.themeColorsHasBeenChanged || this.isSavingBrandingTheme || this.isApplyingTheme || this.brandingThemeId == null\r\n || this.brandingThemes == null || !(this.systemPermissions.configureBusinessUnitSettings || this.systemPermissions.editSystemConfiguration);\r\n };\r\n VhsBrandingThemesEditing.prototype.isDisableSavingBrandingTheme = function () {\r\n return this.isSavingBrandingTheme || !(this.systemPermissions.configureBusinessUnitSettings || this.systemPermissions.editSystemConfiguration);\r\n };\r\n VhsBrandingThemesEditing.prototype.applyTheme = function () {\r\n var _this = this;\r\n this.isApplyingTheme = true;\r\n if (this.$scope.businessUnitId) {\r\n this.brandingThemesService.applyBrandingTheme(this.$scope.businessUnitId, this.brandingThemeId).then(function () {\r\n _this.appliedBrandingTheme();\r\n }).finally(function () {\r\n _this.isApplyingTheme = false;\r\n });\r\n }\r\n else {\r\n this.brandingThemesService.applySystemBrandingTheme(this.brandingThemeId).then(function () {\r\n _this.appliedBrandingTheme();\r\n }).finally(function () {\r\n _this.isApplyingTheme = false;\r\n });\r\n }\r\n };\r\n VhsBrandingThemesEditing.prototype.appliedBrandingTheme = function () {\r\n INotifier_1.notifier.success(\"Branding theme has been successfully applied\");\r\n this.$window.location.reload();\r\n };\r\n VhsBrandingThemesEditing.prototype.cancelColorChanging = function () {\r\n this.themeColors = angular.copy(this.initThemeColors);\r\n this.themeColorsHasBeenChanged = false;\r\n };\r\n VhsBrandingThemesEditing.prototype.resetBrandingTheme = function () {\r\n var _this = this;\r\n this.isApplyingTheme = true;\r\n this.themeColorsHasBeenChanged = false;\r\n var resetPromise = this.$scope.businessUnitId\r\n ? this.brandingThemesService.resetBrandingTheme(this.$scope.businessUnitId)\r\n : this.brandingThemesService.resetSystemBrandingTheme();\r\n resetPromise\r\n .then(function () {\r\n for (var _i = 0, _a = _this.brandingThemes; _i < _a.length; _i++) {\r\n var theme = _a[_i];\r\n if (theme.default) {\r\n _this.brandingThemeId = theme.id;\r\n break;\r\n }\r\n }\r\n _this.applyTheme();\r\n INotifier_1.notifier.success(\"Branding theme has been reset\");\r\n }).finally(function () {\r\n _this.$window.location.reload();\r\n _this.isApplyingTheme = false;\r\n });\r\n };\r\n VhsBrandingThemesEditing.prototype.getColorKeyTextForHuman = function (colorKey) {\r\n var colorText = colorKey.replace(/_/g, \" \").toLowerCase();\r\n colorText = colorText.substring(0, 1).toUpperCase() + colorText.substring(1, colorText.length).toLowerCase();\r\n return colorText;\r\n };\r\n VhsBrandingThemesEditing.prototype.init = function ($scope, element) {\r\n };\r\n VhsBrandingThemesEditing.$inject = [\r\n \"$scope\",\r\n \"$window\",\r\n \"$q\",\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n BrandingService_1.BrandingService.NAME,\r\n BrandingThemesService_1.BrandingThemesService.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return VhsBrandingThemesEditing;\r\n})();\r\nexports.VhsBrandingThemesEditing = VhsBrandingThemesEditing;\r\nfunction VhsBrandingThemesEditingDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsBrandingThemesEditing,\r\n scope: {\r\n businessUnitId: \"=?vhsBusinessUnitId\"\r\n },\r\n templateUrl: url.template(\"components/branding/vhs-branding-themes-editing.html\")\r\n };\r\n}\r\nexports.VhsBrandingThemesEditingDirectiveFactory = VhsBrandingThemesEditingDirectiveFactory;\r\nVhsBrandingThemesEditingDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../INotifier\":5,\"../../branding/BrandingService\":33,\"../../branding/BrandingThemesService\":34,\"../../businessUnits/BusinessUnitsService\":44,\"../../security/PermissionsService\":418,\"../../utils/UrlService\":528}],165:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar ScopeUtils_1 = require(\"../../system/ScopeUtils\");\r\nvar DialogService_1 = require(\"./DialogService\");\r\nvar ConfirmationDialogController = (function () {\r\n function ConfirmationDialogController($scope, $element, $q, dialogService) {\r\n this.$scope = $scope;\r\n this.$element = $element;\r\n this.$q = $q;\r\n this.dialogService = dialogService;\r\n this.hideConfirmButton = false;\r\n this.hideCancelButton = false;\r\n $scope.vm = this;\r\n }\r\n ConfirmationDialogController.prototype.init = function () {\r\n var _this = this;\r\n this.dialogId = \"confirmDialog\" + new Date().valueOf();\r\n this.titleId = this.dialogId + \"Label\";\r\n this.dialogService.registerConfirmation(\"$default\", this);\r\n this.$dialog = this.$element.children(\":first\");\r\n this.$dialog.modal({\r\n backdrop: \"static\",\r\n show: false\r\n });\r\n this.$dialog.on(\"hidden.bs.modal\", function () { return ScopeUtils_1.ScopeUtils.apply(_this.$scope, function () { return _this.closeAndResolveReject(); }); });\r\n };\r\n ConfirmationDialogController.prototype.confirm = function (message, args) {\r\n this.message = message;\r\n this.title = args && args.title ? args.title : \"Dialog title\";\r\n this.confirmButton = args && args.confirmButton ? args.confirmButton : \"Ok\";\r\n this.cancelButton = args && args.cancelButton ? args.cancelButton : \"Cancel\";\r\n this.hideConfirmButton = args && args.hideConfirmButton;\r\n this.hideCancelButton = args && args.hideCancelButton;\r\n this.type = args && args.type ? args.type : \"default\";\r\n this.course = args && args.course ? args.course : undefined;\r\n this.lastQuizResultId = args && args.lastQuizResultId ? args.lastQuizResultId : undefined;\r\n return this.showAndWait();\r\n };\r\n ConfirmationDialogController.prototype.onConfirmed = function () {\r\n this.confirmed = true;\r\n this.$dialog.modal(\"hide\");\r\n };\r\n ConfirmationDialogController.prototype.showAndWait = function () {\r\n var _this = this;\r\n return this.$q(function (resolve, reject) {\r\n _this.resolve = resolve;\r\n _this.reject = reject;\r\n _this.confirmed = false;\r\n _this.dialogShown = true;\r\n _this.$dialog.modal(\"show\");\r\n });\r\n };\r\n ConfirmationDialogController.prototype.closeAndResolveReject = function () {\r\n this.type = \"default\";\r\n if (this.confirmed) {\r\n this.resolve({});\r\n }\r\n else {\r\n this.reject({});\r\n }\r\n this.dialogShown = false;\r\n this.resolve = null;\r\n this.reject = null;\r\n };\r\n ConfirmationDialogController.prototype.getDialogId = function () {\r\n return this.dialogId;\r\n };\r\n ConfirmationDialogController.$inject = [\r\n \"$scope\",\r\n \"$element\",\r\n \"$q\",\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return ConfirmationDialogController;\r\n})();\r\nexports.ConfirmationDialogController = ConfirmationDialogController;\r\nfunction ConfirmationDialogFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n var _this = this;\r\n controller.init();\r\n $scope.$on(\"$destroy\", function () {\r\n _this.$dialog.data(\"bs.modal\", null);\r\n _this.dialogService.unregisterConfirmation(\"$default\");\r\n });\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: ConfirmationDialogController,\r\n scope: {\r\n dialogId: \"=\"\r\n },\r\n templateUrl: url.template(\"components/confirmation-dialog.html\")\r\n };\r\n return directive;\r\n}\r\nexports.ConfirmationDialogFactory = ConfirmationDialogFactory;\r\nConfirmationDialogFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../system/ScopeUtils\":459,\"../../utils/UrlService\":528,\"./DialogService\":166}],166:[function(require,module,exports){\nvar DialogService = (function () {\r\n function DialogService() {\r\n this.confirmationRegistry = Object.create(null);\r\n this.inputConfirmationRegistry = Object.create(null);\r\n this.notificationConfirmationRegistry = Object.create(null);\r\n this.fillAbleFormRegistry = Object.create(null);\r\n }\r\n DialogService.prototype.registerConfirmation = function (id, dialog) {\r\n this.confirmationRegistry[id] = dialog;\r\n };\r\n DialogService.prototype.unregisterConfirmation = function (id) {\r\n delete this.confirmationRegistry[id];\r\n };\r\n DialogService.prototype.registerInputConfirmation = function (id, dialog) {\r\n this.inputConfirmationRegistry[id] = dialog;\r\n };\r\n DialogService.prototype.unregisterInputConfirmation = function (id) {\r\n delete this.inputConfirmationRegistry[id];\r\n };\r\n DialogService.prototype.registerNotificationConfirmation = function (id, dialog) {\r\n this.notificationConfirmationRegistry[id] = dialog;\r\n };\r\n DialogService.prototype.unregisterNotificationConfirmation = function (id) {\r\n delete this.notificationConfirmationRegistry[id];\r\n };\r\n DialogService.prototype.inputConfirm = function (args, dialogId) {\r\n var id = dialogId || Object.getOwnPropertyNames(this.inputConfirmationRegistry)[0];\r\n var dialog = this.inputConfirmationRegistry[id];\r\n return dialog.confirm(args);\r\n };\r\n DialogService.prototype.confirm = function (message, args, dialogId) {\r\n var id = dialogId || Object.getOwnPropertyNames(this.confirmationRegistry)[0];\r\n var dialog = this.confirmationRegistry[id];\r\n return dialog.confirm(message, args);\r\n };\r\n DialogService.prototype.notificationConfirm = function (args, dialogId) {\r\n var id = dialogId || Object.getOwnPropertyNames(this.notificationConfirmationRegistry)[0];\r\n var dialog = this.notificationConfirmationRegistry[id];\r\n return dialog.confirm(args);\r\n };\r\n DialogService.prototype.confirmAndReturnDialogId = function (message, args, dialogId) {\r\n var id = dialogId || Object.getOwnPropertyNames(this.confirmationRegistry)[0];\r\n var dialog = this.confirmationRegistry[id];\r\n dialog.confirm(message, args);\r\n return dialog.getDialogId();\r\n };\r\n DialogService.prototype.registerFillableFormConfirmation = function (id, dialog) {\r\n this.fillAbleFormRegistry[id] = dialog;\r\n };\r\n DialogService.prototype.unregisterFillableFormConfirmation = function (id) {\r\n delete this.fillAbleFormRegistry[id];\r\n };\r\n DialogService.prototype.confirmFillableForm = function (args, dialogId) {\r\n var id = dialogId || Object.getOwnPropertyNames(this.fillAbleFormRegistry)[0];\r\n var dialog = this.fillAbleFormRegistry[id];\r\n return dialog.confirm(args);\r\n };\r\n DialogService.NAME = \"components.DialogService\";\r\n return DialogService;\r\n})();\r\nexports.DialogService = DialogService;\r\n},{}],167:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar ScopeUtils_1 = require(\"../../system/ScopeUtils\");\r\nvar DialogService_1 = require(\"./DialogService\");\r\nvar FillableFormDialogController = (function () {\r\n function FillableFormDialogController($scope, $element, $q, dialogService) {\r\n this.$scope = $scope;\r\n this.$element = $element;\r\n this.$q = $q;\r\n this.dialogService = dialogService;\r\n $scope.vm = this;\r\n }\r\n FillableFormDialogController.prototype.init = function () {\r\n var _this = this;\r\n this.dialogId = \"fillableDialog\" + new Date().valueOf();\r\n this.titleId = this.dialogId + \"Label\";\r\n this.dialogService.registerFillableFormConfirmation(\"$default\", this);\r\n this.$dialog = this.$element.children(\":first\");\r\n this.$dialog.modal({\r\n backdrop: \"static\",\r\n show: false\r\n });\r\n this.$dialog.on(\"hidden.bs.modal\", function () { return ScopeUtils_1.ScopeUtils.apply(_this.$scope, function () { return _this.closeAndResolveReject(); }); });\r\n };\r\n FillableFormDialogController.prototype.confirm = function (args) {\r\n this.question = args && args.question;\r\n this.saveFillableFormToBundle = args && args.saveFillableFormToBundle;\r\n return this.showAndWait();\r\n };\r\n FillableFormDialogController.prototype.onConfirmed = function () {\r\n this.confirmed = true;\r\n this.$dialog.modal(\"hide\");\r\n };\r\n FillableFormDialogController.prototype.showAndWait = function () {\r\n var _this = this;\r\n return this.$q(function (resolve, reject) {\r\n _this.resolve = resolve;\r\n _this.reject = reject;\r\n _this.confirmed = false;\r\n _this.$dialog.modal(\"show\");\r\n });\r\n };\r\n FillableFormDialogController.prototype.closeAndResolveReject = function () {\r\n if (this.confirmed) {\r\n this.resolve({});\r\n }\r\n else {\r\n this.reject({});\r\n }\r\n this.resolve = null;\r\n this.reject = null;\r\n };\r\n FillableFormDialogController.$inject = [\r\n \"$scope\",\r\n \"$element\",\r\n \"$q\",\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return FillableFormDialogController;\r\n})();\r\nexports.FillableFormDialogController = FillableFormDialogController;\r\nfunction FillableFormDialogFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init();\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: FillableFormDialogController,\r\n scope: {\r\n dialogId: \"=\"\r\n },\r\n templateUrl: url.template(\"components/fillable-dialog.html\")\r\n };\r\n return directive;\r\n}\r\nexports.FillableFormDialogFactory = FillableFormDialogFactory;\r\nFillableFormDialogFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../system/ScopeUtils\":459,\"../../utils/UrlService\":528,\"./DialogService\":166}],168:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar ScopeUtils_1 = require(\"../../system/ScopeUtils\");\r\nvar DialogService_1 = require(\"./DialogService\");\r\nvar InputConfirmationDialogController = (function () {\r\n function InputConfirmationDialogController($scope, $element, $q, urlService, dialogService) {\r\n this.$scope = $scope;\r\n this.$element = $element;\r\n this.$q = $q;\r\n this.urlService = urlService;\r\n this.dialogService = dialogService;\r\n this.hideConfirmButton = false;\r\n this.hideCancelButton = false;\r\n $scope.vm = this;\r\n }\r\n InputConfirmationDialogController.prototype.init = function () {\r\n var _this = this;\r\n this.dialogId = \"confirmDialog\" + new Date().valueOf();\r\n this.titleId = this.dialogId + \"Label\";\r\n this.dialogService.registerInputConfirmation(\"$input\", this);\r\n this.$dialog = this.$element.children(\":first\");\r\n this.$dialog.modal({\r\n backdrop: \"static\",\r\n show: false\r\n });\r\n this.$dialog.on(\"hidden.bs.modal\", function () { return ScopeUtils_1.ScopeUtils.apply(_this.$scope, function () { return _this.closeAndResolveReject(); }); });\r\n };\r\n InputConfirmationDialogController.prototype.confirm = function (args) {\r\n this.inputData = args && args.data ? args.data : {};\r\n this.title = args && args.title ? args.title : \"Dialog title\";\r\n this.confirmButton = args && args.confirmButton ? args.confirmButton : \"Ok\";\r\n this.cancelButton = args && args.cancelButton ? args.cancelButton : \"Cancel\";\r\n this.hideConfirmButton = args && args.hideConfirmButton ? args.hideConfirmButton : false;\r\n this.hideCancelButton = false;\r\n this.inputFormUrl = args.inputFormUrl ? this.urlService.template(args.inputFormUrl) : \"\";\r\n return this.showAndWait();\r\n };\r\n InputConfirmationDialogController.prototype.onConfirmed = function () {\r\n this.confirmed = true;\r\n this.$dialog.modal(\"hide\");\r\n };\r\n InputConfirmationDialogController.prototype.showAndWait = function () {\r\n var _this = this;\r\n return this.$q(function (resolve, reject) {\r\n _this.resolve = resolve;\r\n _this.reject = reject;\r\n _this.confirmed = false;\r\n _this.$dialog.modal(\"show\");\r\n });\r\n };\r\n InputConfirmationDialogController.prototype.closeAndResolveReject = function () {\r\n if (this.confirmed) {\r\n this.resolve(this.inputData);\r\n }\r\n else {\r\n this.reject({});\r\n }\r\n this.resolve = null;\r\n this.reject = null;\r\n };\r\n InputConfirmationDialogController.$inject = [\r\n \"$scope\",\r\n \"$element\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return InputConfirmationDialogController;\r\n})();\r\nexports.InputConfirmationDialogController = InputConfirmationDialogController;\r\nfunction InputConfirmationDialogFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n var _this = this;\r\n controller.init();\r\n $scope.$on(\"$destroy\", function () {\r\n _this.$dialog.data(\"bs.modal\", null);\r\n _this.dialogService.unregisterInputConfirmation(\"$input\");\r\n });\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: InputConfirmationDialogController,\r\n scope: {\r\n dialogId: \"=\"\r\n },\r\n templateUrl: url.template(\"components/input-confirmation-dialog.html\")\r\n };\r\n return directive;\r\n}\r\nexports.InputConfirmationDialogFactory = InputConfirmationDialogFactory;\r\nInputConfirmationDialogFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../system/ScopeUtils\":459,\"../../utils/UrlService\":528,\"./DialogService\":166}],169:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar ScopeUtils_1 = require(\"../../system/ScopeUtils\");\r\nvar DialogService_1 = require(\"./DialogService\");\r\nvar NotificationConfirmationDialogController = (function () {\r\n function NotificationConfirmationDialogController($scope, $element, $q, dialogService) {\r\n this.$scope = $scope;\r\n this.$element = $element;\r\n this.$q = $q;\r\n this.dialogService = dialogService;\r\n this.hideConfirmButton = false;\r\n this.hideCancelButton = false;\r\n this.recipientList = { recipientIds: [] };\r\n this.ccRecipientList = { recipientIds: [] };\r\n this.businessUnitName = \"All\";\r\n $scope.vm = this;\r\n }\r\n NotificationConfirmationDialogController.prototype.init = function () {\r\n var _this = this;\r\n this.dialogId = \"confirmDialog\" + new Date().valueOf();\r\n this.titleId = this.dialogId + \"Label\";\r\n this.dialogService.registerNotificationConfirmation(\"$notification\", this);\r\n this.$dialog = this.$element.children(\":first\");\r\n this.$dialog.modal({\r\n backdrop: \"static\",\r\n show: false\r\n });\r\n this.$dialog.on(\"hidden.bs.modal\", function () { return ScopeUtils_1.ScopeUtils.apply(_this.$scope, function () { return _this.closeAndResolveReject(); }); });\r\n };\r\n NotificationConfirmationDialogController.prototype.confirm = function (args) {\r\n this.title = args && args.title ? args.title : \"Dialog title\";\r\n this.confirmButton = args && args.confirmButton ? args.confirmButton : \"Ok\";\r\n this.cancelButton = args && args.cancelButton ? args.cancelButton : \"Cancel\";\r\n this.hideConfirmButton = args && args.hideConfirmButton;\r\n this.hideCancelButton = args && args.hideCancelButton;\r\n this.notificationTemplateDetails = args && args.notificationTemplateDetails;\r\n this.recipientList = args && args.recipientList;\r\n this.ccRecipientList = args && args.ccRecipientList;\r\n return this.showAndWait();\r\n };\r\n NotificationConfirmationDialogController.prototype.onConfirmed = function () {\r\n this.confirmed = true;\r\n this.$dialog.modal(\"hide\");\r\n };\r\n NotificationConfirmationDialogController.prototype.showAndWait = function () {\r\n var _this = this;\r\n return this.$q(function (resolve, reject) {\r\n _this.resolve = resolve;\r\n _this.reject = reject;\r\n _this.confirmed = false;\r\n _this.$dialog.modal(\"show\");\r\n });\r\n };\r\n NotificationConfirmationDialogController.prototype.closeAndResolveReject = function () {\r\n if (this.confirmed) {\r\n this.resolve({});\r\n }\r\n else {\r\n this.reject({});\r\n }\r\n this.resolve = null;\r\n this.reject = null;\r\n };\r\n NotificationConfirmationDialogController.prototype.getAvailableRecipientsTags = function () {\r\n return \"/api/notificationTemplates/\" + this.notificationTemplateDetails.id + \"/available/recipients\";\r\n };\r\n NotificationConfirmationDialogController.$inject = [\r\n \"$scope\",\r\n \"$element\",\r\n \"$q\",\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return NotificationConfirmationDialogController;\r\n})();\r\nexports.NotificationConfirmationDialogController = NotificationConfirmationDialogController;\r\nfunction NotificationConfirmationDialogFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n var _this = this;\r\n controller.init();\r\n $scope.$on(\"$destroy\", function () {\r\n _this.$dialog.data(\"bs.modal\", null);\r\n _this.dialogService.unregisterNotificationConfirmation(\"$notification\");\r\n });\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: NotificationConfirmationDialogController,\r\n scope: {\r\n dialogId: \"=\"\r\n },\r\n templateUrl: url.template(\"components/notification-confirmation-dialog.html\")\r\n };\r\n return directive;\r\n}\r\nexports.NotificationConfirmationDialogFactory = NotificationConfirmationDialogFactory;\r\nNotificationConfirmationDialogFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../system/ScopeUtils\":459,\"../../utils/UrlService\":528,\"./DialogService\":166}],170:[function(require,module,exports){\nvar Event = (function () {\r\n function Event() {\r\n }\r\n Event.TA_SELECT_EMBEDDED_MATERIAL = \"components.ta:selectEmbeddedMaterial\";\r\n Event.TA_SELECT_EMBEDDED_BUNDLE = \"components.ta:selectEmbeddedBundle\";\r\n Event.TA_SELECT_SANDBOX = \"components.ta:selectSandbox\";\r\n Event.TA_LOAD_FROM_TEMPLATE = \"components.ta:loadFromTemplate\";\r\n Event.TA_CONVERT_TO_NEW_TEMPLATE = \"components.ta:convertToNewTemplate\";\r\n Event.TA_ADD_TIP = \"components.ta:addTip\";\r\n Event.TA_ADD_QUESTION = \"components.ta:addQuestion\";\r\n Event.TA_ADD_ASSESSMENT = \"components.ta:addAssessment\";\r\n Event.TA_ADD_REDBIRD = \"components.ta:addRedbird\";\r\n Event.TA_FIND_RICH_TEXT_BIND_CONTROLLER = \"components.ta:findRichTextBindController\";\r\n Event.TA_FULLSCREEN = \"components.ta:fullscreen\";\r\n Event.SANDBOX_REOPEN_POPUP = \"components.sandbox:reopenPopup\";\r\n Event.COURSE_TOGGLE_MENU_VISIBILITY = \"courses.details:toggleMenu\";\r\n Event.QUIZ_SURVEY_COMPLETED = \"quiz.survey:completed\";\r\n Event.TA_ADD_TOGGLE = \"components.ta:addToggle\";\r\n Event.TA_ADD_TOGGLE_CONTENT = \"components.ta:addToggleContent\";\r\n Event.TA_ADD_NOTE_FOR_PROGRESS = \"components.ta:addNoteForProgress\";\r\n Event.TA_AI_CONTENT_GENERATION = \"components.ta:aiContentGeneration\";\r\n Event.TA_LOCATION_CHANGE_START = \"components.ta:locationChangeStart\";\r\n Event.NOTES_SERVICE_INITIALIZED = \"components.ta:notesInitialized\";\r\n Event.TA_ADD_TABLE = \"components.ta:addTable\";\r\n Event.COURSE_PROGRESS_RESET_PROGRESS = \"courses.progress:resetProgress\";\r\n Event.COURSE_PROGRESS_RELOAD_PROGRESS = \"courses.progress:reloadProgress\";\r\n Event.COURSE_PROGRESS_CHANGE_PROGRESS_EXTERNALLY = \"courses.progress.changeProgressExternally\";\r\n Event.COURSE_PROGRESS_SECTION_PROGRESS_RELOAD_PROGRESS = \"courses.progress.sections.progress:reloadProgress\";\r\n Event.COURSE_PROGRESS_RECALCULATED = \"courses.progress.recalculated\";\r\n Event.LEARNING_PATH_PROGRESS_RESET_PROGRESS = \"learningPaths.progress:resetProgress\";\r\n Event.LEARNING_PATH_PROGRESS_RELOAD_PROGRESS = \"learningPaths.progress:reloadProgress\";\r\n Event.LEARNING_PATH_PROGRESS_CHANGE_PROGRESS_EXTERNALLY = \"learningPaths.progress.changeProgressExternally\";\r\n Event.LEARNING_PATH_PROGRESS_SHOW_COURSE_PROGRESS_DETAILS = \"learningPaths.progress.showCourseProgressDetails\";\r\n Event.RECORDER_STOP_RECORD_EXTERNALLY = \"recorder.record:stopExternally\";\r\n Event.QUIZ_SURVEY_IMPORT_UPDATE = \"quiz.import:update\";\r\n Event.HELP_BOT_OPEN_CLOSE = \"help.bot:open\";\r\n return Event;\r\n})();\r\nexports.Event = Event;\r\n},{}],171:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar HotspotQuestionUtils_1 = require(\"../../utils/HotspotQuestionUtils\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar QuestionType_1 = require(\"../../quizzes/models/QuestionType\");\r\nvar VhsHotspotQuestionAnsweringController = (function () {\r\n function VhsHotspotQuestionAnsweringController($scope, $window, $timeout) {\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.$timeout = $timeout;\r\n $scope.vm = this;\r\n this.window = angular.element(this.$window);\r\n }\r\n VhsHotspotQuestionAnsweringController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n this.element = element;\r\n this.selectedPoints = [];\r\n this.selectedPointsInImageCoordinates = [];\r\n this.loadShapesCount();\r\n this.$timeout(function () {\r\n _this.canvasContainerWidth = _this.element.find('.hotspot-canvas-container').width();\r\n }, 0);\r\n this.window.bind('resize', function () {\r\n _this.canvasContainerWidth = _this.element.find('.hotspot-canvas-container').width();\r\n _this.tryInitCanvasScene();\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n this.$scope.$watch(function () { return _this.$scope.question.indexNumber; }, function () {\r\n if (_this.requestID) {\r\n window.cancelAnimationFrame(_this.requestID);\r\n }\r\n _this.tryInitCanvasScene();\r\n });\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.tryInitCanvasScene = function () {\r\n if (this.$scope.question.attachedFileUrl == null) {\r\n return;\r\n }\r\n var canvasId = \"hotspot-canvas-\" + this.$scope.question.indexNumber;\r\n this.element.find('.hotspot-canvas-container .hotspot-canvas').remove();\r\n this.element.find('.hotspot-canvas-container').append(\"\");\r\n this.canvas = document.getElementById(canvasId);\r\n this.canvasContext = this.canvas.getContext(\"2d\");\r\n this.isInMove = false;\r\n this.isPointSelected = false;\r\n this.loadImage();\r\n this.initCanvas();\r\n this.animate();\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.loadImage = function () {\r\n var _this = this;\r\n this.canvasBackgroundLoaded = false;\r\n if (this.$scope.question.attachedFileUrl) {\r\n this.canvasBackground = new Image();\r\n this.canvasBackground.src = this.$scope.question.attachedFileUrl;\r\n this.canvasBackground.onload = function () {\r\n _this.canvasBackgroundLoaded = true;\r\n _this.canvas.width = _this.canvasContainerWidth;\r\n _this.canvas.height = _this.canvasContainerWidth * _this.canvasBackground.height / _this.canvasBackground.width;\r\n _this.calculatePointsInCurrentCoordinates();\r\n };\r\n }\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.initCanvas = function () {\r\n var _this = this;\r\n this.canvas.addEventListener('mousedown', function (e) {\r\n var mouseCoords = HotspotQuestionUtils_1.SceneUtils.getMouseCoords(_this.canvas, e);\r\n _this.selectedPoints.forEach(function (s) { return s.selected = false; });\r\n var pointWasSelected = _this.isPointSelected;\r\n _this.isPointSelected = false;\r\n for (var _i = 0, _a = _this.selectedPoints; _i < _a.length; _i++) {\r\n var p = _a[_i];\r\n if (p.isPointInside({ x: mouseCoords.x, y: mouseCoords.y })) {\r\n p.dragging = true;\r\n p.selected = true;\r\n _this.isPointSelected = true;\r\n break;\r\n }\r\n }\r\n if (_this.isPointSelected) {\r\n _this.movingStart = mouseCoords;\r\n _this.isInMove = true;\r\n }\r\n else if (!pointWasSelected) {\r\n var selectedPoint = new HotspotQuestionUtils_1.SelectedPoint();\r\n selectedPoint.centerX = mouseCoords.x;\r\n selectedPoint.centerY = mouseCoords.y;\r\n _this.addSelectedPoint(selectedPoint);\r\n _this.onSelectedPointsChanged();\r\n }\r\n });\r\n this.canvas.addEventListener(\"mousemove\", function (e) {\r\n var mouseCoords = HotspotQuestionUtils_1.SceneUtils.getMouseCoords(_this.canvas, e);\r\n if (_this.isInMove) {\r\n _this.selectedPoints.forEach(function (p) {\r\n if (p.dragging) {\r\n var dX = mouseCoords.x - _this.movingStart.x;\r\n var dY = mouseCoords.y - _this.movingStart.y;\r\n p.move(dX, dY);\r\n }\r\n });\r\n _this.movingStart = mouseCoords;\r\n _this.onSelectedPointsChanged();\r\n }\r\n });\r\n this.canvas.addEventListener('mouseup', function (e) {\r\n _this.selectedPoints.forEach(function (s) { return s.dragging = false; });\r\n });\r\n document.addEventListener('keydown', function (e) {\r\n if (e.key === 'Delete') {\r\n for (var i = 0; i < _this.selectedPoints.length; i++) {\r\n if (_this.selectedPoints[i].selected) {\r\n _this.selectedPoints.splice(i, 1);\r\n _this.isPointSelected = false;\r\n _this.onSelectedPointsChanged();\r\n }\r\n }\r\n }\r\n });\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.addSelectedPoint = function (selectedPoint) {\r\n if (this.answerAreasCount == null) {\r\n return;\r\n }\r\n if (this.selectedPoints.length >= this.answerAreasCount) {\r\n INotifier_1.notifier.error(\"You’ve already reached maximum number of answers\");\r\n return;\r\n }\r\n this.selectedPoints.push(selectedPoint);\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.animate = function () {\r\n var _this = this;\r\n if (this.canvasBackground && this.canvasBackgroundLoaded) {\r\n this.canvasContext.clearRect(0, 0, this.canvasContainerWidth, this.canvasContainerWidth * this.canvasBackground.height / this.canvasBackground.width);\r\n this.canvasContext.drawImage(this.canvasBackground, 0, 0, this.canvasContainerWidth, this.canvasContainerWidth * this.canvasBackground.height / this.canvasBackground.width);\r\n }\r\n this.selectedPoints.forEach(function (p) {\r\n var shapeDrawingMode = p.selected ? HotspotQuestionUtils_1.ShapeDrawingMode.SELECTED : HotspotQuestionUtils_1.ShapeDrawingMode.ORDINARY;\r\n p.draw(_this.canvasContext, shapeDrawingMode);\r\n });\r\n this.requestID = window.requestAnimationFrame(function () { return _this.animate(); });\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.clearSelection = function () {\r\n if (this.$scope.question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE]) {\r\n this.selectedPoints = [];\r\n this.isPointSelected = false;\r\n this.onSelectedPointsChanged();\r\n }\r\n else {\r\n for (var i = 0; i < this.selectedPoints.length; i++) {\r\n if (this.selectedPoints[i].selected) {\r\n this.selectedPoints.splice(i, 1);\r\n this.isPointSelected = false;\r\n this.onSelectedPointsChanged();\r\n }\r\n }\r\n }\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.clearAll = function () {\r\n this.selectedPoints = new Array();\r\n this.isPointSelected = false;\r\n this.onSelectedPointsChanged();\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.onSelectedPointsChanged = function () {\r\n this.calculatePointsInImageCoordinates();\r\n this.serializePoints();\r\n this.$scope.completeQuizButtonChecker();\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.calculatePointsInImageCoordinates = function () {\r\n this.selectedPointsInImageCoordinates = [];\r\n var scaleFactor = this.canvasBackground.width / this.canvas.width;\r\n for (var _i = 0, _a = this.selectedPoints; _i < _a.length; _i++) {\r\n var selectedPoint = _a[_i];\r\n this.selectedPointsInImageCoordinates.push(HotspotQuestionUtils_1.SceneUtils.scaleSelectedPoint(selectedPoint, scaleFactor));\r\n }\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.calculatePointsInCurrentCoordinates = function () {\r\n this.selectedPoints = [];\r\n var scaleFactor = this.canvas.width / this.canvasBackground.width;\r\n for (var _i = 0, _a = this.selectedPointsInImageCoordinates; _i < _a.length; _i++) {\r\n var selectedPoint = _a[_i];\r\n this.selectedPoints.push(HotspotQuestionUtils_1.SceneUtils.scaleSelectedPoint(selectedPoint, scaleFactor));\r\n }\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.loadShapesCount = function () {\r\n var shapes = JSON.parse(this.$scope.question.jsonData);\r\n this.answerAreasCount = shapes ? shapes.length : null;\r\n };\r\n VhsHotspotQuestionAnsweringController.prototype.serializePoints = function () {\r\n if (this.selectedPointsInImageCoordinates.length === 0) {\r\n this.$scope.question.responseData = null;\r\n }\r\n else {\r\n this.$scope.question.responseData = this.selectedPointsInImageCoordinates.map(function (p) {\r\n return {\r\n centerX: p.centerX,\r\n centerY: p.centerY\r\n };\r\n });\r\n }\r\n };\r\n VhsHotspotQuestionAnsweringController.$inject = [\r\n \"$scope\",\r\n \"$window\",\r\n \"$timeout\"\r\n ];\r\n return VhsHotspotQuestionAnsweringController;\r\n})();\r\nexports.VhsHotspotQuestionAnsweringController = VhsHotspotQuestionAnsweringController;\r\nfunction VhsHotspotQuestionAnsweringDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsHotspotQuestionAnsweringController,\r\n scope: {\r\n question: \"=?vhsQuestion\",\r\n completeQuizButtonChecker: \"&vhsCompleteQuizButtonChecker\"\r\n },\r\n templateUrl: url.template(\"components/quizzes/vhs-hotspot-question-answering.html\")\r\n };\r\n}\r\nexports.VhsHotspotQuestionAnsweringDirectiveFactory = VhsHotspotQuestionAnsweringDirectiveFactory;\r\nVhsHotspotQuestionAnsweringDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../INotifier\":5,\"../../quizzes/models/QuestionType\":401,\"../../utils/HotspotQuestionUtils\":513,\"../../utils/UrlService\":528}],172:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar HotspotQuestionUtils_1 = require(\"../../utils/HotspotQuestionUtils\");\r\nvar QuestionType_1 = require(\"../../quizzes/models/QuestionType\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar ShapeType;\r\n(function (ShapeType) {\r\n ShapeType[ShapeType[\"RECTANGLE\"] = 0] = \"RECTANGLE\";\r\n ShapeType[ShapeType[\"CIRCLE\"] = 1] = \"CIRCLE\";\r\n ShapeType[ShapeType[\"POLYGON\"] = 2] = \"POLYGON\";\r\n})(ShapeType || (ShapeType = {}));\r\nvar VhsHotspotQuestionEditController = (function () {\r\n function VhsHotspotQuestionEditController($scope, $window) {\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.MIN_RECTANGLE_SIDE = 20;\r\n this.MIN_CIRCLE_RADIUS = 10;\r\n this.shapeType = ShapeType;\r\n this.questionType = QuestionType_1.QuestionType;\r\n $scope.vm = this;\r\n this.window = angular.element(this.$window);\r\n }\r\n VhsHotspotQuestionEditController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n this.element = element;\r\n this.canvasContainerWidth = this.element.find('.hotspot-canvas-container').width();\r\n this.window.bind('resize', function () {\r\n _this.canvasContainerWidth = _this.element.find('.hotspot-canvas-container').width();\r\n _this.tryInitCanvasScene();\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n this.$scope.$watch(function () { return _this.$scope.question.indexNumber; }, function () {\r\n if (_this.requestID) {\r\n window.cancelAnimationFrame(_this.requestID);\r\n }\r\n _this.tryInitCanvasScene();\r\n });\r\n this.$scope.$watch(function () { return _this.$scope.question.type; }, function () {\r\n _this.checkShapesCount();\r\n });\r\n };\r\n VhsHotspotQuestionEditController.prototype.onFileSelected = function () {\r\n if (this.newFile) {\r\n this.$scope.question.fileForm = this.newFile;\r\n this.resetDrawing();\r\n this.tryInitCanvasScene();\r\n }\r\n };\r\n VhsHotspotQuestionEditController.prototype.resetDrawing = function () {\r\n this.shapes = new Array();\r\n this.shapesInImageCoordinates = [];\r\n this.serializeShapes();\r\n this.checkShapesCount();\r\n this.isInMove = false;\r\n this.isInDrawing = false;\r\n this.isShapeSelected = false;\r\n this.drawingRectangle = null;\r\n this.drawingCircle = null;\r\n this.drawingPolygon = null;\r\n };\r\n VhsHotspotQuestionEditController.prototype.selectDrawingShape = function (selectedShape) {\r\n this.selectedShapeType = ShapeType[selectedShape];\r\n };\r\n VhsHotspotQuestionEditController.prototype.tryInitCanvasScene = function () {\r\n if (this.$scope.question.fileForm == null && this.$scope.question.attachedFileUrl == null) {\r\n return;\r\n }\r\n this.element.find('.hotspot-canvas-container #hotspot-canvas').remove();\r\n this.element.find('.hotspot-canvas-container').append('');\r\n this.canvas = document.getElementById(\"hotspot-canvas\");\r\n this.canvasContext = this.canvas.getContext(\"2d\");\r\n this.selectedShapeType = ShapeType.RECTANGLE;\r\n this.shapes = [];\r\n this.loadShapes();\r\n this.isInMove = false;\r\n this.isInDrawing = false;\r\n this.loadImage();\r\n this.initCanvas();\r\n this.animate();\r\n };\r\n VhsHotspotQuestionEditController.prototype.loadImage = function () {\r\n var _this = this;\r\n this.canvasBackgroundLoaded = false;\r\n if (this.$scope.question.fileForm) {\r\n var reader = new FileReader();\r\n reader.readAsDataURL(this.$scope.question.fileForm);\r\n reader.onloadend = function (e) {\r\n _this.canvasBackground = new Image();\r\n _this.canvasBackground.src = e.target.result;\r\n _this.canvasBackground.onload = function () {\r\n _this.canvasBackgroundLoaded = true;\r\n _this.canvas.width = _this.canvasContainerWidth;\r\n _this.canvas.height = _this.canvasContainerWidth * _this.canvasBackground.height / _this.canvasBackground.width;\r\n _this.calculateShapesInCurrentCoordinates();\r\n _this.checkShapesCount();\r\n };\r\n };\r\n }\r\n else if (this.$scope.question.attachedFileUrl) {\r\n this.canvasBackground = new Image();\r\n this.canvasBackground.src = this.$scope.question.attachedFileUrl;\r\n this.canvasBackground.onload = function () {\r\n _this.canvasBackgroundLoaded = true;\r\n _this.canvas.width = _this.canvasContainerWidth;\r\n _this.canvas.height = _this.canvasContainerWidth * _this.canvasBackground.height / _this.canvasBackground.width;\r\n _this.calculateShapesInCurrentCoordinates();\r\n _this.checkShapesCount();\r\n };\r\n }\r\n };\r\n VhsHotspotQuestionEditController.prototype.initCanvas = function () {\r\n var _this = this;\r\n this.canvas.addEventListener('mousedown', function (e) {\r\n var mouseCoords = HotspotQuestionUtils_1.SceneUtils.getMouseCoords(_this.canvas, e);\r\n _this.shapes.forEach(function (s) { return s.selected = false; });\r\n _this.isShapeSelected = false;\r\n if (!_this.isInDrawing) {\r\n for (var _i = 0, _a = _this.shapes; _i < _a.length; _i++) {\r\n var s_1 = _a[_i];\r\n if (s_1.isPointInside({ x: mouseCoords.x, y: mouseCoords.y })) {\r\n s_1.dragging = true;\r\n s_1.selected = true;\r\n _this.isShapeSelected = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (_this.isShapeSelected) {\r\n _this.movingStart = mouseCoords;\r\n _this.isInMove = true;\r\n }\r\n else {\r\n if (_this.selectedShapeType == ShapeType.RECTANGLE) {\r\n _this.drawingRectangle = new HotspotQuestionUtils_1.Rectangle();\r\n _this.drawingRectangle.topLeftX = mouseCoords.x;\r\n _this.drawingRectangle.topLeftY = mouseCoords.y;\r\n _this.isInDrawing = true;\r\n }\r\n else if (_this.selectedShapeType == ShapeType.CIRCLE) {\r\n _this.drawingCircle = new HotspotQuestionUtils_1.Circle();\r\n _this.drawingCircle.centerX = mouseCoords.x;\r\n _this.drawingCircle.centerY = mouseCoords.y;\r\n _this.isInDrawing = true;\r\n }\r\n else if (_this.selectedShapeType == ShapeType.POLYGON) {\r\n if (_this.drawingPolygon == null) {\r\n _this.drawingPolygon = new HotspotQuestionUtils_1.Polygon();\r\n }\r\n _this.drawingPolygon.points.push({ x: mouseCoords.x, y: mouseCoords.y });\r\n _this.isInDrawing = true;\r\n }\r\n }\r\n });\r\n this.canvas.addEventListener(\"mousemove\", function (e) {\r\n var mouseCoords = HotspotQuestionUtils_1.SceneUtils.getMouseCoords(_this.canvas, e);\r\n if (_this.isInMove) {\r\n _this.shapes.forEach(function (s) {\r\n if (s.dragging) {\r\n var dX = mouseCoords.x - _this.movingStart.x;\r\n var dY = mouseCoords.y - _this.movingStart.y;\r\n s.move(dX, dY);\r\n _this.onShapesChanged();\r\n }\r\n });\r\n _this.movingStart = mouseCoords;\r\n }\r\n if (_this.isInDrawing) {\r\n if (_this.drawingRectangle != null) {\r\n _this.drawingRectangle.width = mouseCoords.x - _this.drawingRectangle.topLeftX;\r\n _this.drawingRectangle.height = mouseCoords.y - _this.drawingRectangle.topLeftY;\r\n }\r\n else if (_this.drawingCircle != null) {\r\n _this.drawingCircle.radius = Math.sqrt(Math.pow(Math.abs(_this.drawingCircle.centerX - mouseCoords.x), 2)\r\n + Math.pow(Math.abs(_this.drawingCircle.centerY - mouseCoords.y), 2));\r\n }\r\n else if (_this.drawingPolygon != null) {\r\n _this.drawingPolygon.lastPoint = { x: mouseCoords.x, y: mouseCoords.y };\r\n }\r\n }\r\n });\r\n this.canvas.addEventListener('mouseup', function (e) {\r\n var mouseCoords = HotspotQuestionUtils_1.SceneUtils.getMouseCoords(_this.canvas, e);\r\n _this.shapes.forEach(function (s) { return s.dragging = false; });\r\n if (_this.drawingRectangle != null) {\r\n _this.drawingRectangle.width = mouseCoords.x - _this.drawingRectangle.topLeftX;\r\n _this.drawingRectangle.height = mouseCoords.y - _this.drawingRectangle.topLeftY;\r\n _this.drawingRectangle.normalize();\r\n if (_this.drawingRectangle.width >= _this.MIN_RECTANGLE_SIDE\r\n && _this.drawingRectangle.height >= _this.MIN_RECTANGLE_SIDE) {\r\n _this.addShape(_this.drawingRectangle);\r\n _this.onShapesChanged();\r\n _this.checkShapesCount();\r\n }\r\n _this.drawingRectangle = null;\r\n _this.isInDrawing = false;\r\n }\r\n else if (_this.drawingCircle != null) {\r\n _this.drawingCircle.radius = Math.sqrt(Math.pow(Math.abs(_this.drawingCircle.centerX - mouseCoords.x), 2)\r\n + Math.pow(Math.abs(_this.drawingCircle.centerY - mouseCoords.y), 2));\r\n if (_this.drawingCircle.radius >= _this.MIN_CIRCLE_RADIUS) {\r\n _this.addShape(_this.drawingCircle);\r\n _this.onShapesChanged();\r\n _this.checkShapesCount();\r\n }\r\n _this.drawingCircle = null;\r\n _this.isInDrawing = false;\r\n }\r\n });\r\n this.canvas.addEventListener('dblclick', function (e) {\r\n if (_this.drawingPolygon != null) {\r\n if (_this.drawingPolygon.points.length > 2) {\r\n _this.addShape(_this.drawingPolygon);\r\n _this.onShapesChanged();\r\n _this.checkShapesCount();\r\n }\r\n _this.drawingPolygon = null;\r\n _this.isInDrawing = false;\r\n }\r\n });\r\n document.addEventListener('keydown', function (e) {\r\n if (e.key === 'Escape') {\r\n if (_this.drawingPolygon != null) {\r\n if (_this.drawingPolygon.points.length > 2) {\r\n _this.addShape(_this.drawingPolygon);\r\n _this.onShapesChanged();\r\n _this.checkShapesCount();\r\n }\r\n _this.drawingPolygon = null;\r\n _this.isInDrawing = false;\r\n }\r\n }\r\n if (e.key === 'Delete') {\r\n _this.deleteSelectedShape();\r\n }\r\n });\r\n };\r\n VhsHotspotQuestionEditController.prototype.deleteSelectedShape = function () {\r\n for (var i = 0; i < this.shapes.length; i++) {\r\n if (this.shapes[i].selected) {\r\n this.shapes.splice(i, 1);\r\n this.isShapeSelected = false;\r\n this.onShapesChanged();\r\n this.checkShapesCount();\r\n }\r\n }\r\n };\r\n VhsHotspotQuestionEditController.prototype.animate = function () {\r\n var _this = this;\r\n if (this.canvasBackground && this.canvasBackgroundLoaded) {\r\n this.canvasContext.clearRect(0, 0, this.canvasContainerWidth, this.canvasContainerWidth * this.canvasBackground.height / this.canvasBackground.width);\r\n this.canvasContext.drawImage(this.canvasBackground, 0, 0, this.canvasContainerWidth, this.canvasContainerWidth * this.canvasBackground.height / this.canvasBackground.width);\r\n }\r\n this.shapes.forEach(function (s) {\r\n var shapeDrawingMode = s.selected ? HotspotQuestionUtils_1.ShapeDrawingMode.SELECTED : HotspotQuestionUtils_1.ShapeDrawingMode.ORDINARY;\r\n s.draw(_this.canvasContext, shapeDrawingMode);\r\n });\r\n if (this.drawingRectangle != null) {\r\n this.drawingRectangle.draw(this.canvasContext, HotspotQuestionUtils_1.ShapeDrawingMode.EDIT);\r\n }\r\n else if (this.drawingCircle != null) {\r\n this.drawingCircle.draw(this.canvasContext, HotspotQuestionUtils_1.ShapeDrawingMode.EDIT);\r\n }\r\n else if (this.drawingPolygon != null) {\r\n this.drawingPolygon.draw(this.canvasContext, HotspotQuestionUtils_1.ShapeDrawingMode.EDIT);\r\n }\r\n this.requestID = window.requestAnimationFrame(function () { return _this.animate(); });\r\n };\r\n VhsHotspotQuestionEditController.prototype.onShapesChanged = function () {\r\n this.calculateShapesInImageCoordinates();\r\n this.serializeShapes();\r\n };\r\n VhsHotspotQuestionEditController.prototype.calculateShapesInImageCoordinates = function () {\r\n var scaleFactor = this.canvasBackground.width / this.canvas.width;\r\n this.shapesInImageCoordinates = HotspotQuestionUtils_1.SceneUtils.scaleShapes(this.shapes, scaleFactor);\r\n };\r\n VhsHotspotQuestionEditController.prototype.calculateShapesInCurrentCoordinates = function () {\r\n var scaleFactor = this.canvas.width / this.canvasBackground.width;\r\n this.shapes = HotspotQuestionUtils_1.SceneUtils.scaleShapes(this.shapesInImageCoordinates, scaleFactor);\r\n };\r\n VhsHotspotQuestionEditController.prototype.serializeShapes = function () {\r\n this.$scope.question.jsonData = HotspotQuestionUtils_1.SceneUtils.serializeShapes(this.shapesInImageCoordinates);\r\n };\r\n VhsHotspotQuestionEditController.prototype.loadShapes = function () {\r\n this.shapesInImageCoordinates = HotspotQuestionUtils_1.SceneUtils.loadShapes(this.$scope.question.jsonData);\r\n };\r\n VhsHotspotQuestionEditController.prototype.addShape = function (shape) {\r\n if (this.$scope.question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE] && this.shapes.length >= 1) {\r\n INotifier_1.notifier.error(\"Only one area can be drawn in single-choice question\");\r\n return;\r\n }\r\n this.shapes.push(shape);\r\n };\r\n VhsHotspotQuestionEditController.prototype.checkShapesCount = function () {\r\n if (this.$scope.question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE]) {\r\n this.$scope.question.isQuestionValid = this.shapes && this.shapes.length == 1;\r\n }\r\n else if (this.$scope.question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_MULTIPLE_CHOICE]) {\r\n this.$scope.question.isQuestionValid = this.shapes && this.shapes.length >= 1;\r\n }\r\n };\r\n VhsHotspotQuestionEditController.$inject = [\r\n \"$scope\",\r\n \"$window\"\r\n ];\r\n return VhsHotspotQuestionEditController;\r\n})();\r\nexports.VhsHotspotQuestionEditController = VhsHotspotQuestionEditController;\r\nfunction VhsHotspotQuestionEditDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsHotspotQuestionEditController,\r\n scope: {\r\n question: \"=?vhsQuestion\"\r\n },\r\n templateUrl: url.template(\"components/quizzes/vhs-hotspot-question-edit.html\")\r\n };\r\n}\r\nexports.VhsHotspotQuestionEditDirectiveFactory = VhsHotspotQuestionEditDirectiveFactory;\r\nVhsHotspotQuestionEditDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../INotifier\":5,\"../../quizzes/models/QuestionType\":401,\"../../utils/HotspotQuestionUtils\":513,\"../../utils/UrlService\":528}],173:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar HotspotQuestionUtils_1 = require(\"../../utils/HotspotQuestionUtils\");\r\nvar VhsHotspotQuestionExplanationController = (function () {\r\n function VhsHotspotQuestionExplanationController($scope, $window, $timeout, $q) {\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.$timeout = $timeout;\r\n this.$q = $q;\r\n this.isCorrect = false;\r\n $scope.vm = this;\r\n this.window = angular.element(this.$window);\r\n }\r\n VhsHotspotQuestionExplanationController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n this.element = element;\r\n this.window.bind('resize', function () {\r\n _this.tryInitCanvasScene();\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n this.$scope.$watch(function () { return _this.$scope.question.indexNumber; }, function () {\r\n if (_this.requestID) {\r\n window.cancelAnimationFrame(_this.requestID);\r\n }\r\n _this.tryInitCanvasScene();\r\n });\r\n };\r\n VhsHotspotQuestionExplanationController.prototype.tryInitCanvasScene = function () {\r\n var canvasId = \"hotspot-explanation-canvas-\" + this.$scope.question.indexNumber;\r\n this.element.find('.hotspot-canvas-container .hotspot-canvas').remove();\r\n this.element.find('.hotspot-canvas-container').append(\"\");\r\n this.canvas = document.getElementById(canvasId);\r\n this.canvasContext = this.canvas.getContext(\"2d\");\r\n this.shapesInImageCoordinates = [];\r\n this.selectedPointsInImageCoordinates = [];\r\n this.shapes = [];\r\n this.correctPoints = [];\r\n this.wrongPoints = [];\r\n this.loadImage();\r\n this.animate();\r\n };\r\n VhsHotspotQuestionExplanationController.prototype.loadImage = function () {\r\n var _this = this;\r\n this.canvasBackgroundLoaded = false;\r\n if (this.$scope.question.attachedFileUrl) {\r\n this.canvasBackground = new Image();\r\n this.canvasBackground.src = this.$scope.question.attachedFileUrl;\r\n this.canvasBackground.onload = function () {\r\n _this.waitForElement('.hotspot-canvas-container').then(function () {\r\n _this.canvasContainerWidth = _this.element.find('.hotspot-canvas-container').width();\r\n _this.canvasBackgroundLoaded = true;\r\n _this.canvas.width = _this.canvasContainerWidth;\r\n _this.canvas.height = _this.canvasContainerWidth * _this.canvasBackground.height / _this.canvasBackground.width;\r\n _this.loadShapes();\r\n _this.loadSelectedPoints();\r\n _this.checkQuestionCorrect();\r\n });\r\n };\r\n }\r\n };\r\n VhsHotspotQuestionExplanationController.prototype.animate = function () {\r\n var _this = this;\r\n if (this.canvasBackground && this.canvasBackgroundLoaded) {\r\n this.canvasContext.clearRect(0, 0, this.canvasContainerWidth, this.canvasContainerWidth * this.canvasBackground.height / this.canvasBackground.width);\r\n this.canvasContext.drawImage(this.canvasBackground, 0, 0, this.canvasContainerWidth, this.canvasContainerWidth * this.canvasBackground.height / this.canvasBackground.width);\r\n }\r\n this.shapes.forEach(function (s) { return s.draw(_this.canvasContext, HotspotQuestionUtils_1.ShapeDrawingMode.CORRECT); });\r\n this.correctPoints.forEach(function (p) { return p.draw(_this.canvasContext, HotspotQuestionUtils_1.ShapeDrawingMode.CORRECT); });\r\n this.wrongPoints.forEach(function (p) { return p.draw(_this.canvasContext, HotspotQuestionUtils_1.ShapeDrawingMode.WRONG); });\r\n this.requestID = window.requestAnimationFrame(function () { return _this.animate(); });\r\n };\r\n VhsHotspotQuestionExplanationController.prototype.loadShapes = function () {\r\n this.shapesInImageCoordinates = HotspotQuestionUtils_1.SceneUtils.loadShapes(this.$scope.question.jsonData);\r\n var scaleFactor = this.canvas.width / this.canvasBackground.width;\r\n this.shapes = HotspotQuestionUtils_1.SceneUtils.scaleShapes(this.shapesInImageCoordinates, scaleFactor);\r\n };\r\n VhsHotspotQuestionExplanationController.prototype.loadSelectedPoints = function () {\r\n var _this = this;\r\n if (this.$scope.question.responseData) {\r\n this.selectedPointsInImageCoordinates = this.$scope.question.responseData.map(function (p) {\r\n var selectedPoint = new HotspotQuestionUtils_1.SelectedPoint();\r\n selectedPoint.centerX = p.centerX;\r\n selectedPoint.centerY = p.centerY;\r\n return selectedPoint;\r\n });\r\n var correctPointsInImageCoordinates = this.selectedPointsInImageCoordinates.filter(function (p) {\r\n return _this.shapesInImageCoordinates.some(function (s) { return s.isPointInside({ x: p.centerX, y: p.centerY }); });\r\n });\r\n var wrongPointsInImageCoordinates = this.selectedPointsInImageCoordinates.filter(function (p) {\r\n return !_this.shapesInImageCoordinates.some(function (s) { return s.isPointInside({ x: p.centerX, y: p.centerY }); });\r\n });\r\n var scaleFactor = this.canvas.width / this.canvasBackground.width;\r\n this.correctPoints = correctPointsInImageCoordinates.map(function (p) {\r\n return HotspotQuestionUtils_1.SceneUtils.scaleSelectedPoint(p, scaleFactor);\r\n });\r\n this.wrongPoints = wrongPointsInImageCoordinates.map(function (p) {\r\n return HotspotQuestionUtils_1.SceneUtils.scaleSelectedPoint(p, scaleFactor);\r\n });\r\n }\r\n else {\r\n this.selectedPointsInImageCoordinates = [];\r\n this.correctPoints = [];\r\n this.wrongPoints = [];\r\n }\r\n };\r\n VhsHotspotQuestionExplanationController.prototype.checkQuestionCorrect = function () {\r\n var _this = this;\r\n this.isCorrect = this.shapesInImageCoordinates.every(function (s) {\r\n return _this.selectedPointsInImageCoordinates.some(function (p) { return s.isPointInside({ x: p.centerX, y: p.centerY }); });\r\n });\r\n };\r\n VhsHotspotQuestionExplanationController.prototype.waitForElement = function (selector) {\r\n var _this = this;\r\n return this.$q(function (resolve, reject) {\r\n if (_this.element.find(selector).width() > 0) {\r\n return resolve();\r\n }\r\n var observer = new MutationObserver(function (mutations) {\r\n if (_this.element.find(selector).width() > 0) {\r\n observer.disconnect();\r\n resolve();\r\n }\r\n });\r\n observer.observe(document.body, {\r\n attributes: true,\r\n childList: true,\r\n subtree: true,\r\n characterData: true\r\n });\r\n });\r\n };\r\n VhsHotspotQuestionExplanationController.$inject = [\r\n \"$scope\",\r\n \"$window\",\r\n \"$timeout\",\r\n \"$q\"\r\n ];\r\n return VhsHotspotQuestionExplanationController;\r\n})();\r\nexports.VhsHotspotQuestionExplanationController = VhsHotspotQuestionExplanationController;\r\nfunction VhsHotspotQuestionExplanationDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsHotspotQuestionExplanationController,\r\n scope: {\r\n question: \"=?vhsQuestion\",\r\n showStatus: \"=?vhsShowStatus\"\r\n },\r\n templateUrl: url.template(\"components/quizzes/vhs-hotspot-question-explanation.html\")\r\n };\r\n}\r\nexports.VhsHotspotQuestionExplanationDirectiveFactory = VhsHotspotQuestionExplanationDirectiveFactory;\r\nVhsHotspotQuestionExplanationDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../utils/HotspotQuestionUtils\":513,\"../../utils/UrlService\":528}],174:[function(require,module,exports){\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar AIService_1 = require(\"../../ai/AIService\");\r\nvar ContentGenerationType;\r\n(function (ContentGenerationType) {\r\n ContentGenerationType[ContentGenerationType[\"ARTICLE\"] = 0] = \"ARTICLE\";\r\n ContentGenerationType[ContentGenerationType[\"QUOTE\"] = 1] = \"QUOTE\";\r\n ContentGenerationType[ContentGenerationType[\"PARAGRAPH\"] = 2] = \"PARAGRAPH\";\r\n ContentGenerationType[ContentGenerationType[\"QUESTION\"] = 3] = \"QUESTION\";\r\n})(ContentGenerationType || (ContentGenerationType = {}));\r\nvar AIContentGenerationDirective = (function () {\r\n function AIContentGenerationDirective($scope, $q, aiService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.aiService = aiService;\r\n this.loadPopupContent = undefined;\r\n this.aiPromptText = \"\";\r\n this.contentGenerationType = ContentGenerationType;\r\n this.selectedContentGenerationType = ContentGenerationType[ContentGenerationType.ARTICLE];\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.TA_AI_CONTENT_GENERATION, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.loadPopupContent = true;\r\n _this.lastEventData = data;\r\n _this.element.find(\"div.modal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n });\r\n }\r\n AIContentGenerationDirective.prototype.init = function ($scope, element) {\r\n this.element = element;\r\n this.richEditorParent = DomUtils_1.DomUtils.findParentWithClass(this.element, \"vhs-rich-editor-content\");\r\n };\r\n AIContentGenerationDirective.prototype.closePopup = function () {\r\n this.aiPromptText = \"\";\r\n this.element.find(\"div.modal\").modal(\"hide\");\r\n };\r\n AIContentGenerationDirective.prototype.isEventProcessable = function (data) {\r\n if (data.eventSourceButton != null) {\r\n var parent_1 = DomUtils_1.DomUtils.findParentWithClass(data.eventSourceButton, \"vhs-rich-editor-content\");\r\n if (parent_1 != null && parent_1.is(this.richEditorParent)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n AIContentGenerationDirective.prototype.generateContent = function () {\r\n switch (this.selectedContentGenerationType) {\r\n case ContentGenerationType[ContentGenerationType.ARTICLE]:\r\n this.generateCourseByTopic();\r\n break;\r\n case ContentGenerationType[ContentGenerationType.QUOTE]:\r\n this.generateQuoteByTopic();\r\n break;\r\n case ContentGenerationType[ContentGenerationType.PARAGRAPH]:\r\n this.generateParagraphByTopic();\r\n break;\r\n case ContentGenerationType[ContentGenerationType.QUESTION]:\r\n this.generateQuestionByTopic();\r\n break;\r\n }\r\n };\r\n AIContentGenerationDirective.prototype.generateCourseByTopic = function () {\r\n var _this = this;\r\n this.deactivateMainContent();\r\n var topic = this.aiPromptText;\r\n this.aiService.generateSubtopics(this.$scope.courseId, 5, topic).then(function (result) {\r\n var generateArticlePromises = [];\r\n for (var i = 0; i < result.topics.length; i++) {\r\n _this.$scope.model = _this.$scope.model === undefined ? \"\" : _this.$scope.model;\r\n generateArticlePromises.push(_this.aiService.generateSubparagraph(_this.$scope.courseId, topic, result.topics[i]).then(function (article) {\r\n _this.$scope.model = _this.$scope.model + \"
    \" + (\"

    \" + article.subtopic + \"

    \")\r\n + (\"

    \" + article.article + \"

    \");\r\n }));\r\n }\r\n _this.$q.all(generateArticlePromises).then(function () {\r\n _this.$scope.modelChanged = true;\r\n }).finally(function () { return _this.activateMainContent(); });\r\n }).finally(function () { return _this.activateMainContent(); });\r\n };\r\n AIContentGenerationDirective.prototype.generateQuoteByTopic = function () {\r\n var _this = this;\r\n this.deactivateMainContent();\r\n this.aiService.generateQuote(this.$scope.courseId, this.aiPromptText).then(function (result) {\r\n var html = \"
    \" + result.quote + \" (\" + result.author + \")
    \";\r\n _this.lastEventData.callbackFunction(html);\r\n }).finally(function () { return _this.activateMainContent(); });\r\n };\r\n AIContentGenerationDirective.prototype.generateParagraphByTopic = function () {\r\n var _this = this;\r\n this.deactivateMainContent();\r\n this.aiService.generateParagraph(this.$scope.courseId, this.aiPromptText).then(function (article) {\r\n var html = \"
    \" + (\"

    \" + article.topic + \"

    \")\r\n + (\"

    \" + article.article + \"

    \");\r\n _this.lastEventData.callbackFunction(html);\r\n }).finally(function () { return _this.activateMainContent(); });\r\n };\r\n AIContentGenerationDirective.prototype.generateQuestionByTopic = function () {\r\n var _this = this;\r\n this.deactivateMainContent();\r\n this.aiService.generateQuestion(this.$scope.courseId, this.aiPromptText).then(function (question) {\r\n var html = \"

    Question

    \" + question.question + \"

    \"\r\n + \"
    \"\r\n + \"  

    \" + question.answer + \"

    \";\r\n _this.lastEventData.callbackFunction(html);\r\n }).finally(function () { return _this.activateMainContent(); });\r\n };\r\n AIContentGenerationDirective.prototype.deactivateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.add(\"hidden\");\r\n mainLoadingElement.classList.remove(\"hidden\");\r\n };\r\n AIContentGenerationDirective.prototype.activateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.remove(\"hidden\");\r\n mainLoadingElement.classList.add(\"hidden\");\r\n };\r\n AIContentGenerationDirective.$inject = [\r\n \"$scope\",\r\n \"$q\",\r\n AIService_1.AIService.NAME\r\n ];\r\n return AIContentGenerationDirective;\r\n})();\r\nexports.AIContentGenerationDirective = AIContentGenerationDirective;\r\nfunction VhsAIContentGenerationDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: AIContentGenerationDirective,\r\n scope: {\r\n model: \"=?vhsModel\",\r\n modelChanged: \"=?vhsModelChanged\",\r\n courseId: \"=?vhsCourseId\"\r\n },\r\n templateUrl: url.template(\"components/richtext/vhs-ai-content-generation.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsAIContentGenerationDirectiveFactory = VhsAIContentGenerationDirectiveFactory;\r\nVhsAIContentGenerationDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../ai/AIService\":11,\"../../utils/DomUtils\":511,\"../../utils/UrlService\":528,\"../models/Event\":170}],175:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar RandomUtils_1 = require(\"../../utils/RandomUtils\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar BundleService_1 = require(\"./../../bundles/BundleService\");\r\nvar RichTextContentLoadingSynchronizer_1 = require(\"./RichTextContentLoadingSynchronizer\");\r\nvar BundleFileType_1 = require(\"../../bundles/models/BundleFileType\");\r\nvar ContentUtils_1 = require(\"../../utils/ContentUtils\");\r\nvar RichTextBindController = (function () {\r\n function RichTextBindController($http, $q, $timeout, bundleApi, loadingSynchronizer) {\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.$timeout = $timeout;\r\n this.bundleApi = bundleApi;\r\n this.loadingSynchronizer = loadingSynchronizer;\r\n this.loadingContent = false;\r\n }\r\n RichTextBindController.prototype.init = function ($scope, element, bundleId) {\r\n var _this = this;\r\n this.element = element;\r\n this.elementId = element.attr('id');\r\n if (!this.elementId) {\r\n this.elementId = RandomUtils_1.RandomUtils.generateRandomId('rich_text_element_');\r\n this.element.attr('id', this.elementId);\r\n }\r\n if ($scope.bundle) {\r\n this.bundle = $scope.bundle;\r\n }\r\n if ($scope.businessUnit) {\r\n this.businessUnit = $scope.businessUnit;\r\n }\r\n this.materialSource = {\r\n sourceType: $scope.materialSourceType,\r\n sourceId: $scope.materialSourceId\r\n };\r\n $scope.$watch(\"ngModel\", function (value) {\r\n _this.onRichTextChange(value);\r\n });\r\n if (!this.bundle && bundleId) {\r\n this.loadBundlePromise = this.bundleApi.getBundle(bundleId, \"LOADED_AT_START\");\r\n this.loadBundlePromise.then(function (bundle) {\r\n _this.bundle = bundle;\r\n _this.loadBundlePromise = null;\r\n })\r\n .catch(function () {\r\n _this.loadBundlePromise = null;\r\n });\r\n }\r\n $scope.$on(Event_1.Event.TA_FIND_RICH_TEXT_BIND_CONTROLLER, function (event, data) {\r\n if (!data.richTextBindController && data.richTextElementId && data.richTextElementId == _this.elementId) {\r\n data.richTextBindController = _this;\r\n if (event.stopPropagation) {\r\n event.stopPropagation();\r\n }\r\n }\r\n });\r\n this.vhsMaterialSectionId = $scope.vhsMaterialSectionId;\r\n };\r\n RichTextBindController.prototype.onRichTextChange = function (value) {\r\n var _this = this;\r\n if (value) {\r\n this.loadingContent = true;\r\n this.$timeout(function () {\r\n _this.$timeout(function () {\r\n _this.loadingSynchronizer\r\n .loadContent(_this.elementId, _this.$q.when(''))\r\n .then(function (content) {\r\n _this.$timeout(function () {\r\n if (_this.waitContentLoadingDeferred) {\r\n _this.waitContentLoadingDeferred.resolve();\r\n _this.waitContentLoadingDeferred = null;\r\n }\r\n _this.loadingContent = false;\r\n }, 0);\r\n });\r\n }, 0);\r\n }, 0);\r\n }\r\n };\r\n RichTextBindController.clearFilesInLocalStorage = function (bundleFileKey) {\r\n var name = localStorage.getItem(bundleFileKey.split(\"/\").pop());\r\n localStorage.removeItem(bundleFileKey);\r\n localStorage.removeItem(name);\r\n localStorage.removeItem(bundleFileKey.split(\"/\").pop());\r\n };\r\n RichTextBindController.prototype.getBundleFile = function (bundleFileKey) {\r\n var _this = this;\r\n if (this.bundle) {\r\n if (this.bundle.filesMap.has(bundleFileKey)) {\r\n if (this.bundle.filesMap.get(bundleFileKey).url) {\r\n RichTextBindController.clearFilesInLocalStorage(bundleFileKey);\r\n return this.$q.when(this.bundle.filesMap.get(bundleFileKey));\r\n }\r\n else {\r\n return this.$q.when(this.createFakeFile(bundleFileKey));\r\n }\r\n }\r\n else if (RichTextBindController.ALLOW_FAKE_BUNDLE_FIlES_RETURN && this.bundle.publicStorage\r\n && this.bundle.baseUrl && bundleFileKey.indexOf('sections/slides/') < 0) {\r\n return this.$q.when(this.createFakeFile(bundleFileKey));\r\n }\r\n else {\r\n return this.loadBundleFromServer(bundleFileKey);\r\n }\r\n }\r\n else if (this.loadBundlePromise) {\r\n return this.loadBundlePromise.then(function (bundle) {\r\n if (bundle && _this.bundle.filesMap.has(bundleFileKey)) {\r\n RichTextBindController.clearFilesInLocalStorage(bundleFileKey);\r\n return bundle.filesMap.get(bundleFileKey);\r\n }\r\n else if (RichTextBindController.ALLOW_FAKE_BUNDLE_FIlES_RETURN && _this.bundle.publicStorage && _this.bundle.baseUrl) {\r\n return _this.createFakeFile(bundleFileKey);\r\n }\r\n else {\r\n return _this.loadBundleFromServer(bundleFileKey);\r\n }\r\n });\r\n }\r\n return this.$q.when(null);\r\n };\r\n RichTextBindController.prototype.loadBundleFromServer = function (bundleFileKey) {\r\n var _this = this;\r\n return this.bundleApi.getBundle(this.bundle.id, \"file:\" + bundleFileKey)\r\n .then(function (bundle) {\r\n var file = bundle.filesMap.get(bundleFileKey);\r\n if (file) {\r\n _this.bundle.filesMap.set(bundleFileKey, file);\r\n }\r\n return file;\r\n });\r\n };\r\n RichTextBindController.prototype.loadContentSynchronized = function (loadDataPromise) {\r\n return this.loadingSynchronizer.loadContent(this.elementId, loadDataPromise);\r\n };\r\n RichTextBindController.prototype.waitForContentLoaded = function () {\r\n var _this = this;\r\n if (this.waitContentLoadingDeferred) {\r\n this.waitContentLoadingDeferred.reject();\r\n }\r\n this.$timeout(function () {\r\n if (!_this.loadingContent && _this.waitContentLoadingDeferred) {\r\n _this.waitContentLoadingDeferred.reject();\r\n _this.waitContentLoadingDeferred = null;\r\n }\r\n }, 0);\r\n this.waitContentLoadingDeferred = this.$q.defer();\r\n return this.waitContentLoadingDeferred.promise;\r\n };\r\n RichTextBindController.prototype.getEmbeddedMaterialSourceInfo = function () {\r\n return this.$q.when(this.materialSource);\r\n };\r\n RichTextBindController.prototype.getEmbeddedMaterialSectionId = function () {\r\n return this.$q.when(this.vhsMaterialSectionId);\r\n };\r\n RichTextBindController.prototype.createFakeFile = function (bundleFileKey) {\r\n var ext = ContentUtils_1.ContentUtils.getFileExt(bundleFileKey);\r\n var fileType = BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.OTHER];\r\n if (ext) {\r\n switch (ext.toLowerCase()) {\r\n case \"png\":\r\n case \"jpg\":\r\n case \"jpeg\":\r\n case \"gif\":\r\n case \"svg\":\r\n case \"bmp\":\r\n if (localStorage.getItem(bundleFileKey)) {\r\n fileType = BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.IMAGE];\r\n return { url: localStorage.getItem(bundleFileKey).split('\"')[1], key: bundleFileKey, type: fileType };\r\n }\r\n else {\r\n fileType = BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.IMAGE];\r\n return { url: \"../../client/themes/default/img/thumbnail-photo.png\", key: bundleFileKey, type: fileType };\r\n }\r\n case \"html\":\r\n fileType = BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.HTML];\r\n break;\r\n case \"css\":\r\n fileType = BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.CSS];\r\n break;\r\n }\r\n }\r\n return { url: this.bundle.baseUrl + \"/\" + this.bundle.filesMap.get(bundleFileKey), key: bundleFileKey, type: fileType };\r\n };\r\n RichTextBindController.ALLOW_FAKE_BUNDLE_FIlES_RETURN = true;\r\n RichTextBindController.$inject = [\r\n \"$http\",\r\n \"$q\",\r\n \"$timeout\",\r\n BundleService_1.BundleService.NAME,\r\n RichTextContentLoadingSynchronizer_1.RichTextContentLoadingSynchronizer.NAME\r\n ];\r\n return RichTextBindController;\r\n})();\r\nexports.RichTextBindController = RichTextBindController;\r\nfunction RichTextBindDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element, attributes.bundleId);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: RichTextBindController,\r\n scope: {\r\n ngModel: \"=?\",\r\n bundle: \"=?vhsBundle\",\r\n materialSourceType: \"=?vhsMaterialSourceType\",\r\n materialSourceId: \"=?vhsMaterialSourceId\",\r\n vhsMaterialSectionId: \"=?vhsMaterialSectionId\",\r\n businessUnit: \"=?vhsBusinessUnit\"\r\n }\r\n };\r\n return directive;\r\n}\r\nexports.RichTextBindDirectiveFactory = RichTextBindDirectiveFactory;\r\nRichTextBindDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../bundles/models/BundleFileType\":40,\"../../utils/ContentUtils\":509,\"../../utils/RandomUtils\":523,\"../../utils/UrlService\":528,\"../models/Event\":170,\"./../../bundles/BundleService\":36,\"./RichTextContentLoadingSynchronizer\":176}],176:[function(require,module,exports){\nvar RichTextContentLoadingSynchronizer = (function () {\r\n function RichTextContentLoadingSynchronizer($http, $q, $timeout) {\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.$timeout = $timeout;\r\n this.richTextLoadersMap = new Map();\r\n this.forcedLoading = false;\r\n }\r\n RichTextContentLoadingSynchronizer.prototype.loadContent = function (key, dataLoader) {\r\n var _this = this;\r\n if (!this.richTextLoadersMap.has(key)) {\r\n this.richTextLoadersMap.set(key, []);\r\n }\r\n var deferred = this.$q.defer();\r\n var loadingData = {\r\n loaderFunction: dataLoader,\r\n deferred: deferred\r\n };\r\n this.richTextLoadersMap.get(key).push(loadingData);\r\n if (!this.forcedLoading) {\r\n this.forcedLoading = true;\r\n this.$timeout(function () { _this.performLoadContent(); }, 0);\r\n }\r\n return deferred.promise;\r\n };\r\n RichTextContentLoadingSynchronizer.prototype.performLoadContent = function () {\r\n var _this = this;\r\n this.richTextLoadersMap.forEach(function (value, key) {\r\n var promises = [];\r\n var callbacks = [];\r\n value.forEach(function (data) {\r\n promises.push(data.loaderFunction.catch(function () { return null; }));\r\n callbacks.push(data.deferred);\r\n });\r\n _this.$q.all(promises).then(function (values) {\r\n for (var i = 0; i < callbacks.length; i++) {\r\n callbacks[i].resolve((values[i]));\r\n }\r\n });\r\n });\r\n this.forcedLoading = false;\r\n this.richTextLoadersMap.clear();\r\n };\r\n RichTextContentLoadingSynchronizer.NAME = \"components.RichTextContentLoadingSynchronizer\";\r\n RichTextContentLoadingSynchronizer.$inject = [\r\n \"$http\",\r\n \"$q\",\r\n \"$timeout\"\r\n ];\r\n return RichTextContentLoadingSynchronizer;\r\n})();\r\nexports.RichTextContentLoadingSynchronizer = RichTextContentLoadingSynchronizer;\r\n},{}],177:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar RichTextEditorController = (function () {\r\n function RichTextEditorController($scope, $timeout) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.TA_FULLSCREEN, function (event, data) {\r\n _this.toggleFullscreen(_this.element.find(\"div.vhs-rich-editor-content\").get(0));\r\n });\r\n }\r\n RichTextEditorController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n this.element = element;\r\n if (!this.$scope.allowBundles || !this.$scope.allowEmbedMaterials || !this.$scope.allowSandbox\r\n || !this.$scope.allowLoadFromTemplate || !this.$scope.allowAddingBlocks || !this.$scope.bundleId\r\n || !this.$scope.allowUserNotes || !this.$scope.allowAI) {\r\n this.$timeout(function () {\r\n _this.hideEditorButtons();\r\n }, 0);\r\n }\r\n };\r\n RichTextEditorController.prototype.hideEditorButtons = function () {\r\n if (!this.$scope.allowBundles || !this.$scope.bundleId) {\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_EMBEDDED_BUNDLE_BUTTON + \"']\").hide();\r\n }\r\n if (!this.$scope.allowEmbedMaterials) {\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_EMBEDDED_MATERIAL_BUTTON + \"']\").hide();\r\n }\r\n if (!this.$scope.allowSandbox || !this.$scope.bundleId) {\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_SANDBOX_BUTTON + \"']\").hide();\r\n }\r\n if (!this.$scope.allowLoadFromTemplate || !this.$scope.bundleId) {\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_LOAD_FROM_TEMPLATE_BUTTON + \"']\").hide();\r\n }\r\n if (!this.$scope.allowLoadFromTemplate || !this.$scope.bundleId) {\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_CONVERT_TO_NEW_TEMPLATE_BUTTON + \"']\").hide();\r\n }\r\n if (!this.$scope.allowUserNotes) {\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_ADD_NOTE_FOR_PROGRESS_BUTTON + \"']\").hide();\r\n }\r\n if (!this.$scope.allowAddingBlocks) {\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_ADD_QUESTION_BUTTON + \"']\").hide();\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_ADD_TIP_BUTTON + \"']\").hide();\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_ADD_ASSESSMENT_BUTTON + \"']\").hide();\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_TOGGLE_BUTTON + \"']\").hide();\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_ADD_NOTE_FOR_PROGRESS_BUTTON + \"']\").hide();\r\n }\r\n if (!this.$scope.allowFontColorBlock) {\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_FONT_COLOR + \"']\").hide();\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_BACKGROUND_FONT_COLOR + \"']\").hide();\r\n this.element.find(\"input[name='\" + RichTextEditorController.TA_FONT_COLOR + \"']\").hide();\r\n }\r\n if (!this.$scope.allowAI) {\r\n this.element.find(\"button[name='\" + RichTextEditorController.TA_AI_CONTENT_GENERATION_BUTTON + \"']\").hide();\r\n }\r\n };\r\n RichTextEditorController.prototype.toggleFullscreen = function (element) {\r\n var doc = document;\r\n if (!doc.fullscreenElement &&\r\n !doc.mozFullScreenElement && !doc.webkitFullscreenElement) {\r\n if (element.requestFullscreen) {\r\n element.requestFullscreen();\r\n }\r\n else if (element.mozRequestFullScreen) {\r\n element.mozRequestFullScreen();\r\n }\r\n else if (element.webkitRequestFullscreen) {\r\n element.webkitRequestFullscreen();\r\n }\r\n }\r\n else {\r\n if (doc.cancelFullScreen) {\r\n doc.cancelFullScreen();\r\n }\r\n else if (doc.mozCancelFullScreen) {\r\n doc.mozCancelFullScreen();\r\n }\r\n else if (doc.webkitCancelFullScreen) {\r\n doc.webkitCancelFullScreen();\r\n }\r\n }\r\n };\r\n RichTextEditorController.TA_EMBEDDED_MATERIAL_BUTTON = \"embeddedMaterial\";\r\n RichTextEditorController.TA_EMBEDDED_BUNDLE_BUTTON = \"embeddedBundle\";\r\n RichTextEditorController.TA_SANDBOX_BUTTON = \"sandbox\";\r\n RichTextEditorController.TA_FULLSCREEN_BUTTON = \"fullscreen\";\r\n RichTextEditorController.TA_LOAD_FROM_TEMPLATE_BUTTON = \"loadFromTemplate\";\r\n RichTextEditorController.TA_CONVERT_TO_NEW_TEMPLATE_BUTTON = \"convertToNewTemplate\";\r\n RichTextEditorController.TA_ADD_TIP_BUTTON = \"addTip\";\r\n RichTextEditorController.TA_ADD_QUESTION_BUTTON = \"addQuestion\";\r\n RichTextEditorController.TA_ADD_ASSESSMENT_BUTTON = \"addAssessment\";\r\n RichTextEditorController.TA_FONT_COLOR = \"fontColor\";\r\n RichTextEditorController.TA_TEXT_HIGHLIGHTER = \"textHighlighter\";\r\n RichTextEditorController.TA_BACKGROUND_FONT_COLOR = \"backgroundFontColor\";\r\n RichTextEditorController.TA_TOGGLE_BUTTON = \"addToggle\";\r\n RichTextEditorController.TA_TOGGLE_CONTENT_BUTTON = \"addToggleContent\";\r\n RichTextEditorController.TA_ADD_NOTE_FOR_PROGRESS_BUTTON = \"addNoteForProgress\";\r\n RichTextEditorController.TA_ADD_TABLE_BUTTON = \"addTable\";\r\n RichTextEditorController.TA_AI_CONTENT_GENERATION_BUTTON = \"aiContentGeneration\";\r\n RichTextEditorController.$inject = [\r\n \"$scope\",\r\n \"$timeout\"\r\n ];\r\n return RichTextEditorController;\r\n})();\r\nexports.RichTextEditorController = RichTextEditorController;\r\nfunction RichTextEditorDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: RichTextEditorController,\r\n scope: {\r\n allowEmbedMaterials: \"@?vhsEmbedMaterials\",\r\n allowBundles: \"@?vhsEmbedBundles\",\r\n allowSandbox: \"@?vhsEmbedSandbox\",\r\n allowLoadFromTemplate: \"@?vhsFromTemplate\",\r\n allowUserNotes: \"@?vhsUserNotes\",\r\n allowAddingBlocks: \"@?vhsAllowAddingBlocks\",\r\n allowFontColorBlock: \"@?vhsAllowFontColorBlock\",\r\n allowAI: \"@?vhsAllowAi\",\r\n bundleId: \"@?vhsBundleId\",\r\n businessUnitId: \"@?vhsBusinessUnitId\",\r\n model: \"=?vhsModel\",\r\n modelChanged: \"=?vhsModelChanged\",\r\n courseId: \"=?vhsCourseId\"\r\n },\r\n transclude: true,\r\n templateUrl: url.template(\"components/rich-text-editor.html\")\r\n };\r\n return directive;\r\n}\r\nexports.RichTextEditorDirectiveFactory = RichTextEditorDirectiveFactory;\r\nRichTextEditorDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../utils/UrlService\":528,\"../models/Event\":170}],178:[function(require,module,exports){\nvar Event_1 = require(\"../models/Event\");\r\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar BlockType;\r\n(function (BlockType) {\r\n BlockType[BlockType[\"Tip\"] = 0] = \"Tip\";\r\n BlockType[BlockType[\"Question\"] = 1] = \"Question\";\r\n BlockType[BlockType[\"Assessment\"] = 2] = \"Assessment\";\r\n BlockType[BlockType[\"Toggle\"] = 3] = \"Toggle\";\r\n BlockType[BlockType[\"ToggleContent\"] = 4] = \"ToggleContent\";\r\n BlockType[BlockType[\"Note\"] = 5] = \"Note\";\r\n})(BlockType || (BlockType = {}));\r\nvar BlockContentType;\r\n(function (BlockContentType) {\r\n BlockContentType[BlockContentType[\"PLAIN_TEXT\"] = 0] = \"PLAIN_TEXT\";\r\n BlockContentType[BlockContentType[\"RICH_TEXT\"] = 1] = \"RICH_TEXT\";\r\n})(BlockContentType || (BlockContentType = {}));\r\nvar VhsAddBlockController = (function () {\r\n function VhsAddBlockController($scope, $timeout, url) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.url = url;\r\n this.blockHeader = \"\";\r\n this.blockBody = \"\";\r\n this.blockTypesEnum = BlockType;\r\n this.blockContentTypesEnum = BlockContentType;\r\n this.toolbar = \"[[],['bold', 'italics', 'underline'],['ul', 'ol'],[],[],['redo', 'undo', 'clear']]\";\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.TA_ADD_TIP, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.blockType = BlockType.Tip;\r\n _this.blockContentType = BlockContentType.PLAIN_TEXT;\r\n _this.lastEventData = data;\r\n _this.blockHeader = \"Teaching Tips\";\r\n _this.blockBody = \"\";\r\n _this.showPopup();\r\n }\r\n });\r\n $scope.$on(Event_1.Event.TA_ADD_QUESTION, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.blockType = BlockType.Question;\r\n _this.blockContentType = BlockContentType.PLAIN_TEXT;\r\n _this.lastEventData = data;\r\n _this.blockHeader = \"Questions\";\r\n _this.blockBody = \"\";\r\n _this.showPopup();\r\n }\r\n });\r\n $scope.$on(Event_1.Event.TA_ADD_ASSESSMENT, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.blockType = BlockType.Assessment;\r\n _this.blockContentType = BlockContentType.RICH_TEXT;\r\n _this.lastEventData = data;\r\n _this.blockHeader = \"\";\r\n _this.blockBody = \"\";\r\n _this.showPopup();\r\n }\r\n });\r\n $scope.$on(Event_1.Event.TA_ADD_TOGGLE, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.blockType = BlockType.Toggle;\r\n _this.blockContentType = BlockContentType.RICH_TEXT;\r\n _this.lastEventData = data;\r\n _this.blockHeader = \"\";\r\n _this.blockBody = \"\";\r\n _this.showPopup();\r\n }\r\n });\r\n $scope.$on(Event_1.Event.TA_ADD_TOGGLE_CONTENT, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.blockType = BlockType.ToggleContent;\r\n _this.blockContentType = BlockContentType.RICH_TEXT;\r\n _this.lastEventData = data;\r\n _this.blockHeader = \"\";\r\n _this.blockBody = \"\";\r\n _this.showPopup();\r\n }\r\n });\r\n $scope.$on(Event_1.Event.TA_ADD_NOTE_FOR_PROGRESS, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.blockType = BlockType.Note;\r\n _this.blockContentType = BlockContentType.PLAIN_TEXT;\r\n _this.lastEventData = data;\r\n _this.blockHeader = \"Add header for note\";\r\n _this.blockBody = \"\";\r\n _this.showPopup();\r\n }\r\n });\r\n }\r\n VhsAddBlockController.prototype.init = function ($scope, element) {\r\n this.element = element;\r\n this.richEditorParent = DomUtils_1.DomUtils.findParentWithClass(this.element, \"vhs-rich-editor-content\");\r\n };\r\n VhsAddBlockController.prototype.onBlockAdd = function () {\r\n var blockClass = \"\";\r\n var html = \"\";\r\n switch (this.blockType) {\r\n case BlockType.Question:\r\n blockClass = \"question\";\r\n break;\r\n case BlockType.Tip:\r\n blockClass = \"tip\";\r\n break;\r\n case BlockType.Assessment:\r\n blockClass = \"assessment\";\r\n break;\r\n case BlockType.Toggle:\r\n blockClass = \"toggle\";\r\n break;\r\n case BlockType.ToggleContent:\r\n blockClass = \"toggle toggle-answer\";\r\n break;\r\n case BlockType.Note:\r\n blockClass = \"note\";\r\n }\r\n if (this.blockType === BlockType.Toggle || this.blockType === BlockType.ToggleContent) {\r\n html = \"
    \" +\r\n \"  \" +\r\n \"

    \" + this.blockBody + \"

    \";\r\n }\r\n else if (this.blockType === BlockType.Note) {\r\n html = \"
    \" +\r\n \"
    \" + this.blockHeader + \"
    \" +\r\n \"
    \" + this.blockBody + \"

    \";\r\n }\r\n else {\r\n html = \"

    \" + this.blockHeader\r\n + \" 

    \" + this.blockBody + \"

    \";\r\n }\r\n this.closePopup();\r\n this.blockHeader = \"\";\r\n this.blockBody = \"\";\r\n this.lastEventData.callbackFunction(html);\r\n };\r\n VhsAddBlockController.prototype.closePopup = function () {\r\n this.element.find(\"div.modal\").modal(\"hide\");\r\n };\r\n VhsAddBlockController.prototype.isEventProcessable = function (data) {\r\n if (data.eventSourceButton != null) {\r\n var parent_1 = DomUtils_1.DomUtils.findParentWithClass(data.eventSourceButton, \"vhs-rich-editor-content\");\r\n if (parent_1 != null && parent_1.is(this.richEditorParent)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n VhsAddBlockController.prototype.showPopup = function () {\r\n this.element.find(\"div.modal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n VhsAddBlockController.$inject = [\"$scope\", \"$timeout\", UrlService_1.UrlService.NAME];\r\n return VhsAddBlockController;\r\n})();\r\nexports.VhsAddBlockController = VhsAddBlockController;\r\nfunction VhsAddBlockDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsAddBlockController,\r\n scope: {},\r\n templateUrl: url.template(\"components/vhs-add-block.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsAddBlockDirectiveFactory = VhsAddBlockDirectiveFactory;\r\nVhsAddBlockDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../utils/DomUtils\":511,\"../../utils/UrlService\":528,\"../models/Event\":170}],179:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar VhsAddTableController = (function () {\r\n function VhsAddTableController($scope, $timeout, url) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.url = url;\r\n this.tableRows = 2;\r\n this.tableColumns = 2;\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.TA_ADD_TABLE, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.lastEventData = data;\r\n _this.showPopup();\r\n }\r\n });\r\n }\r\n VhsAddTableController.prototype.init = function ($scope, element) {\r\n this.element = element;\r\n this.richEditorParent = DomUtils_1.DomUtils.findParentWithClass(this.element, \"vhs-rich-editor-content\");\r\n };\r\n VhsAddTableController.prototype.isEventProcessable = function (data) {\r\n if (data.eventSourceButton != null) {\r\n var parent_1 = DomUtils_1.DomUtils.findParentWithClass(data.eventSourceButton, \"vhs-rich-editor-content\");\r\n if (parent_1 != null && parent_1.is(this.richEditorParent)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n VhsAddTableController.prototype.showPopup = function () {\r\n this.element.find(\"div.modal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n VhsAddTableController.prototype.closePopup = function () {\r\n this.element.find(\"div.modal\").modal(\"hide\");\r\n };\r\n VhsAddTableController.prototype.onTableAdd = function () {\r\n if (!this.tableRows || this.tableRows < 0\r\n || !this.tableColumns || this.tableColumns < 0) {\r\n alert('Please specify positive rows and columns count');\r\n return;\r\n }\r\n var html = \"


    \";\r\n for (var row = 0; row < this.tableRows; row++) {\r\n html += \"\";\r\n for (var row_1 = 0; row_1 < this.tableColumns; row_1++) {\r\n html += \"\";\r\n }\r\n html += \"\";\r\n }\r\n html += \"
    Text


    \";\r\n this.closePopup();\r\n this.tableRows = 2;\r\n this.tableColumns = 2;\r\n this.lastEventData.callbackFunction(html);\r\n };\r\n VhsAddTableController.$inject = [\"$scope\", \"$timeout\", UrlService_1.UrlService.NAME];\r\n return VhsAddTableController;\r\n})();\r\nexports.VhsAddTableController = VhsAddTableController;\r\nfunction VhsAddTableDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsAddTableController,\r\n scope: {},\r\n templateUrl: url.template(\"components/vhs-add-table.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsAddTableDirectiveFactory = VhsAddTableDirectiveFactory;\r\nVhsAddTableDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../utils/DomUtils\":511,\"../../utils/UrlService\":528,\"../models/Event\":170}],180:[function(require,module,exports){\nvar Event_1 = require(\"../models/Event\");\r\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar VhsTemplateService_1 = require(\"./VhsTemplateService\");\r\nvar VhsConvertTemplateController = (function () {\r\n function VhsConvertTemplateController($scope, $timeout, templateApi) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.templateApi = templateApi;\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.TA_CONVERT_TO_NEW_TEMPLATE, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n if (confirm(\"Are you sure you want to update current content with new template?\")) {\r\n _this.convertTemplate();\r\n }\r\n }\r\n });\r\n }\r\n VhsConvertTemplateController.prototype.convertTemplate = function () {\r\n var _this = this;\r\n var bundleFileKey = \"TEMPLATE.html\";\r\n this.templateApi.getTemplateContent(bundleFileKey, this.$scope).then(function (html) {\r\n var origin = _this.richEditorParent.find(\".vhs-template\").first();\r\n var oldTemplate = origin.clone();\r\n var newTemplate = $($.parseHTML(html));\r\n var oldVersion = VhsConvertTemplateController.getTemplateVersion(oldTemplate);\r\n var newVersion = VhsConvertTemplateController.getTemplateVersion(newTemplate);\r\n if (newVersion == 0) {\r\n alert(\"Template file is incorrect.\");\r\n return;\r\n }\r\n else if (newVersion <= oldVersion) {\r\n alert(\"Current template is same or newer than attached \\\"TEMPLATE.html\\\"\");\r\n return;\r\n }\r\n VhsConvertTemplateController.runIntermediateConverters(oldTemplate, oldVersion, newVersion);\r\n VhsConvertTemplateController.migrateData(oldTemplate, newTemplate);\r\n origin.replaceWith(newTemplate);\r\n }).catch(function (error) {\r\n switch (error) {\r\n case \"file.cannot.be.loaded\":\r\n alert(\"Template file cannot be loaded...\");\r\n break;\r\n case \"file.not.found\":\r\n alert(\"Template file not found! Upload template as attached file with name '\" + bundleFileKey + \"'\");\r\n break;\r\n }\r\n });\r\n };\r\n VhsConvertTemplateController.getTemplateVersion = function (template) {\r\n return template.attr(\"vhs-tpl-version\") && parseInt(template.attr(\"vhs-tpl-version\")) > 0 ?\r\n parseInt(template.attr(\"vhs-tpl-version\")) : 0;\r\n };\r\n VhsConvertTemplateController.migrateData = function (source, target) {\r\n var sourceLinesMap = VhsConvertTemplateController.buildLinesMap(source);\r\n var targetLinesMap = VhsConvertTemplateController.buildLinesMap(target);\r\n sourceLinesMap.forEach(function (source, key, map) {\r\n if (targetLinesMap.has(key)) {\r\n var target_1 = targetLinesMap.get(key);\r\n target_1.text(source.text());\r\n }\r\n });\r\n var sourceBlocksMap = VhsConvertTemplateController.buildBlocksMap(source);\r\n var targetBlocksMap = VhsConvertTemplateController.buildBlocksMap(target);\r\n sourceBlocksMap.forEach(function (source, key, map) {\r\n if (targetBlocksMap.has(key)) {\r\n var target_2 = targetBlocksMap.get(key);\r\n target_2.html(source.html());\r\n if (source.parent(\"editable-block\").hasClass(\"inactive\")) {\r\n target_2.parent(\"editable-block\").addClass(\"inactive\");\r\n }\r\n }\r\n });\r\n };\r\n VhsConvertTemplateController.buildLinesMap = function (template) {\r\n var map = new Map();\r\n var editableLines = template.find(\".editable-line\");\r\n editableLines.each(function (index, element) {\r\n var line = $(element);\r\n var key = line.attr(\"vhs-tpl-line\");\r\n if (key) {\r\n map.set(key, line);\r\n }\r\n });\r\n return map;\r\n };\r\n VhsConvertTemplateController.buildBlocksMap = function (template) {\r\n var map = new Map();\r\n var editableBlocks = template.find(\".editable-block\");\r\n editableBlocks.each(function (index, element) {\r\n var block = $(element);\r\n var key = block.attr(\"vhs-tpl-block\");\r\n if (key) {\r\n map.set(key, block.children(\".block-content\").first());\r\n }\r\n });\r\n return map;\r\n };\r\n VhsConvertTemplateController.runIntermediateConverters = function (template, from, to) {\r\n for (var i = from + 1; i <= to; i++) {\r\n if (VhsConvertTemplateController.converters.hasOwnProperty(String(i))) {\r\n VhsConvertTemplateController.converters[String(i)](template);\r\n }\r\n }\r\n };\r\n VhsConvertTemplateController.convertToV1 = function (template) {\r\n };\r\n VhsConvertTemplateController.prototype.init = function (element) {\r\n this.element = element;\r\n this.richEditorParent = DomUtils_1.DomUtils.findParentWithClass(this.element, \"vhs-rich-editor-content\");\r\n };\r\n VhsConvertTemplateController.prototype.isEventProcessable = function (data) {\r\n if (data.eventSourceButton != null) {\r\n var parent_1 = DomUtils_1.DomUtils.findParentWithClass(data.eventSourceButton, \"vhs-rich-editor-content\");\r\n if (parent_1 != null && parent_1.is(this.richEditorParent)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n VhsConvertTemplateController.converters = {\r\n 1: function (template) { VhsConvertTemplateController.convertToV1(template); }\r\n };\r\n VhsConvertTemplateController.$inject = [\"$scope\", \"$timeout\", VhsTemplateService_1.VhsTemplateService.NAME];\r\n return VhsConvertTemplateController;\r\n})();\r\nexports.VhsConvertTemplateController = VhsConvertTemplateController;\r\nfunction VhsConvertTemplateDirectiveFactory() {\r\n function link($scope, element, attributes, controller) {\r\n controller.init(element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsConvertTemplateController,\r\n scope: {\r\n bundleId: \"@vhsBundleId\"\r\n }\r\n };\r\n return directive;\r\n}\r\nexports.VhsConvertTemplateDirectiveFactory = VhsConvertTemplateDirectiveFactory;\r\nVhsConvertTemplateDirectiveFactory.$inject = [];\r\n},{\"../../utils/DomUtils\":511,\"../models/Event\":170,\"./VhsTemplateService\":188}],181:[function(require,module,exports){\nvar RandomUtils_1 = require(\"../../utils/RandomUtils\");\r\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar VhsDownloadBundleController = (function () {\r\n function VhsDownloadBundleController($scope, $rootScope, $timeout, $http) {\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n }\r\n VhsDownloadBundleController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n this.element = element;\r\n this.element.attr('id', 'my_href_id');\r\n this.fileKey = element.attr(\"href\");\r\n this.$timeout(function () {\r\n var eventData = {\r\n richTextElementId: _this.findRichTextElementId(),\r\n richTextBindController: null\r\n };\r\n _this.$rootScope.$broadcast(Event_1.Event.TA_FIND_RICH_TEXT_BIND_CONTROLLER, eventData);\r\n _this.richTextBindController = eventData.richTextBindController;\r\n _this.loadBundle();\r\n }, 0);\r\n };\r\n VhsDownloadBundleController.prototype.loadBundle = function () {\r\n var _this = this;\r\n if (!this.richTextBindController) {\r\n console.log('RichTextBind Controller not found!');\r\n return;\r\n }\r\n if (!this.fileKey) {\r\n return;\r\n }\r\n this.richTextBindController.getBundleFile(this.fileKey).then(function (bundleFile) {\r\n if (bundleFile && bundleFile.url) {\r\n _this.element.attr('href', bundleFile.url);\r\n }\r\n });\r\n };\r\n VhsDownloadBundleController.prototype.findRichTextElementId = function () {\r\n var richEditor = DomUtils_1.DomUtils.findParentWithAttr(this.element, \"vhs-rich-text-bind\");\r\n if (!richEditor) {\r\n richEditor = DomUtils_1.DomUtils.findParentWithAttr(this.element, \"ta-bind\");\r\n }\r\n return richEditor ? richEditor.attr('id') : null;\r\n };\r\n VhsDownloadBundleController.TA_ELEMENT_SELECTOR = \"a.vhs-download-bundle\";\r\n VhsDownloadBundleController.TA_RENDER_FUNCTION = function (element, $compile, $rootScope, $timeout) {\r\n var id = element.attr('id');\r\n if (!id) {\r\n id = RandomUtils_1.RandomUtils.generateRandomId('vhs-download-bundle_');\r\n element.attr(\"id\", id);\r\n }\r\n $timeout(function () {\r\n var html = $('

    ').append(element.clone()).html();\r\n $(\"#\" + id).replaceWith($compile(html)($rootScope));\r\n }, 0);\r\n };\r\n VhsDownloadBundleController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$timeout\",\r\n \"$http\"\r\n ];\r\n return VhsDownloadBundleController;\r\n})();\r\nexports.VhsDownloadBundleController = VhsDownloadBundleController;\r\nfunction VhsDownloadBundleDirectiveFactory() {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"C\",\r\n link: link,\r\n controller: VhsDownloadBundleController,\r\n scope: false\r\n };\r\n return directive;\r\n}\r\nexports.VhsDownloadBundleDirectiveFactory = VhsDownloadBundleDirectiveFactory;\r\n},{\"../../utils/DomUtils\":511,\"../../utils/RandomUtils\":523,\"../models/Event\":170}],182:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar RandomUtils_1 = require(\"../../utils/RandomUtils\");\r\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar StringBuilder_1 = require(\"../../utils/StringBuilder\");\r\nvar BundleFileType_1 = require(\"../../bundles/models/BundleFileType\");\r\nvar VhsEmbeddedMaterialDirective_1 = require(\"../VhsEmbeddedMaterialDirective\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar VhsEmbeddedBundleController = (function () {\r\n function VhsEmbeddedBundleController($scope, $rootScope, $timeout, $http, $compile) {\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n this.$compile = $compile;\r\n $scope.vm = this;\r\n }\r\n VhsEmbeddedBundleController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n this.element = element;\r\n this.fileKey = $scope.fileKey;\r\n this.$timeout(function () {\r\n var eventData = {\r\n richTextElementId: _this.findRichTextElementId(),\r\n richTextBindController: null\r\n };\r\n _this.$rootScope.$broadcast(Event_1.Event.TA_FIND_RICH_TEXT_BIND_CONTROLLER, eventData);\r\n _this.richTextBindController = eventData.richTextBindController;\r\n _this.loadBundle();\r\n }, 0);\r\n };\r\n VhsEmbeddedBundleController.prototype.loadBundle = function () {\r\n var _this = this;\r\n if (!this.richTextBindController) {\r\n console.log('RichTextBind Controller not found!');\r\n return;\r\n }\r\n var promise = this.richTextBindController.getBundleFile(this.fileKey)\r\n .then(function (bundleFile) {\r\n _this.bundleFile = bundleFile;\r\n if (_this.bundleFile && _this.bundleFile.url) {\r\n if (_this.bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.JS] || _this.bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.HTML]) {\r\n return _this.$http.get(_this.bundleFile.url, _this.getHttpConfig()).then(function (result) { return result.data; });\r\n }\r\n else if (_this.bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.CSS]) {\r\n var mobileString = \"\";\r\n if (_this.bundleFile.url.lastIndexOf(\"_mobile.css\") != -1) {\r\n mobileString = \"media='handheld'\";\r\n }\r\n _this.element.replaceWith(\"\");\r\n }\r\n else if (_this.bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.IMAGE]) {\r\n _this.element.append(\"\");\r\n }\r\n else {\r\n var content = StringBuilder_1.StringBuilder.interpolate(VhsEmbeddedBundleController.DOWNLOAD_LINK_HTML_TEMPLATE)\r\n .with(\":title\", _this.element.attr(\"title\") || _this.bundleFile.key)\r\n .with(\":href\", _this.bundleFile.url)\r\n .build();\r\n _this.element.replaceWith(content);\r\n var downloadIcon = angular.element(document.querySelector(\".download-link-icon\"));\r\n if (downloadIcon) {\r\n var downloadLink = downloadIcon.find('a');\r\n downloadLink.attr(\"href\", _this.bundleFile.url);\r\n }\r\n }\r\n }\r\n else {\r\n console.log('Bundle file not found: ' + _this.fileKey);\r\n }\r\n return null;\r\n });\r\n this.richTextBindController.loadContentSynchronized(promise)\r\n .then(function (content) {\r\n if (content) {\r\n _this.processFileContent(content, _this.bundleFile);\r\n }\r\n });\r\n };\r\n VhsEmbeddedBundleController.prototype.processFileContent = function (fileContent, bundleFile) {\r\n var _this = this;\r\n if (fileContent && bundleFile) {\r\n switch (bundleFile.type) {\r\n case BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.JS]:\r\n $.globalEval('\"use strict\";' + fileContent);\r\n break;\r\n case BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.HTML]:\r\n var basePath = \"\";\r\n try {\r\n if (bundleFile.url && bundleFile.url.indexOf(\"/\") >= 0) {\r\n basePath = bundleFile.url.substr(0, bundleFile.url.lastIndexOf(\"/\") + 1);\r\n }\r\n fileContent = this.replaceImagePaths(fileContent, basePath);\r\n }\r\n catch (ex) {\r\n }\r\n var htmlContent = angular.element(fileContent);\r\n this.element.replaceWith(htmlContent);\r\n htmlContent.find(VhsEmbeddedBundleController.EMBEDDED_MATERIALS_IN_CONTENT_SELECTOR).each(function (index, el) {\r\n if ($(el).attr('id')) {\r\n VhsEmbeddedMaterialDirective_1.VhsEmbeddedMaterialController.TA_COMPILE_AND_REPLACE_ELEMENT_FUNCTION(el, $(el).attr('id'), null, _this.$compile, _this.$scope);\r\n }\r\n });\r\n if (basePath) {\r\n htmlContent.find(VhsEmbeddedBundleController.DOWNLOAD_BUNDLES_LINKS_SELECTOR).each(function (index, el) {\r\n var a = $(el);\r\n var href = a.attr('href');\r\n if (href && href.indexOf('http') != 0 && href.indexOf(\"#\") != 0) {\r\n a.attr('href', basePath + href);\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n VhsEmbeddedBundleController.prototype.replaceImagePaths = function (content, baseUrl) {\r\n var regexp = new RegExp('
    \";\r\n VhsEmbeddedBundleController.DOWNLOAD_LINK_HTML_TEMPLATE = \"\";\r\n VhsEmbeddedBundleController.TA_RENDER_FUNCTION = function (element, $compile, $rootScope, $timeout) {\r\n var id = RandomUtils_1.RandomUtils.generateRandomId('vhsEmbeddedBundle_');\r\n var fileKey = element.is(\"img\")\r\n ? element.attr(\"alt\")\r\n : element.is(\"a\") && element.attr(\"title\")\r\n ? element.attr(\"title\") : element.text();\r\n if (fileKey) {\r\n fileKey = fileKey.trim();\r\n }\r\n var imageAttributes = \"\";\r\n if (element.is(\"img\")) {\r\n imageAttributes = \"width='\" + element.attr(\"width\") + \"' height='\" + element.attr(\"height\") + \"'\" +\r\n \" style='\" + (element.attr(\"style\") || \"\") + \"'\";\r\n }\r\n var title = \"\";\r\n if (element.is(\"a\")) {\r\n title = element.text();\r\n }\r\n if (element.is(\"a\")) {\r\n element.replaceWith(\"\");\r\n }\r\n else {\r\n element.replaceWith(\"
    \");\r\n }\r\n $timeout(function () {\r\n $('#' + id).replaceWith($compile(StringBuilder_1.StringBuilder.interpolate(VhsEmbeddedBundleController.TA_DIRECTIVE_HTML)\r\n .with(\":fileKey\", fileKey)\r\n .with(\":imageAttributes\", imageAttributes)\r\n .with(\":title\", title)\r\n .build())($rootScope));\r\n }, 0);\r\n };\r\n VhsEmbeddedBundleController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$timeout\",\r\n \"$http\",\r\n \"$compile\"\r\n ];\r\n return VhsEmbeddedBundleController;\r\n})();\r\nexports.VhsEmbeddedBundleController = VhsEmbeddedBundleController;\r\nfunction VhsEmbeddedBundleDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"AE\",\r\n link: link,\r\n controller: VhsEmbeddedBundleController,\r\n scope: {\r\n fileKey: \"@?vhsFileKey\"\r\n }\r\n };\r\n return directive;\r\n}\r\nexports.VhsEmbeddedBundleDirectiveFactory = VhsEmbeddedBundleDirectiveFactory;\r\nVhsEmbeddedBundleDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../bundles/models/BundleFileType\":40,\"../../utils/DomUtils\":511,\"../../utils/RandomUtils\":523,\"../../utils/StringBuilder\":525,\"../../utils/UrlService\":528,\"../VhsEmbeddedMaterialDirective\":105,\"../models/Event\":170}],183:[function(require,module,exports){\nvar Event_1 = require(\"../models/Event\");\r\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar VhsTemplateService_1 = require(\"./VhsTemplateService\");\r\nvar VhsLoadFromTemplateController = (function () {\r\n function VhsLoadFromTemplateController($scope, $timeout, $http, templateApi) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n this.templateApi = templateApi;\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.TA_LOAD_FROM_TEMPLATE, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n if (confirm(\"Are you sure you want to replace current content with template?\")) {\r\n var bundleFileKey = \"TEMPLATE.html\";\r\n _this.templateApi.getTemplateContent(bundleFileKey, $scope).then(function (html) {\r\n data.textAngular.$editor().html = html;\r\n }).catch(function (error) {\r\n switch (error) {\r\n case \"file.cannot.be.loaded\":\r\n alert(\"Template file cannot be loaded...\");\r\n break;\r\n case \"file.not.found\":\r\n alert(\"Template file not found! Upload template as attached file with name '\" + bundleFileKey + \"'\");\r\n break;\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n VhsLoadFromTemplateController.prototype.init = function (element) {\r\n this.element = element;\r\n this.richEditorParent = DomUtils_1.DomUtils.findParentWithClass(this.element, \"vhs-rich-editor-content\");\r\n };\r\n VhsLoadFromTemplateController.prototype.isEventProcessable = function (data) {\r\n if (data.eventSourceButton != null) {\r\n var parent_1 = DomUtils_1.DomUtils.findParentWithClass(data.eventSourceButton, \"vhs-rich-editor-content\");\r\n if (parent_1 != null && parent_1.is(this.richEditorParent)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n VhsLoadFromTemplateController.$inject = [\r\n \"$scope\",\r\n \"$timeout\",\r\n \"$http\",\r\n VhsTemplateService_1.VhsTemplateService.NAME\r\n ];\r\n return VhsLoadFromTemplateController;\r\n})();\r\nexports.VhsLoadFromTemplateController = VhsLoadFromTemplateController;\r\nfunction VhsLoadFromTemplateDirectiveFactory() {\r\n function link($scope, element, attributes, controller) {\r\n controller.init(element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsLoadFromTemplateController,\r\n scope: {\r\n bundleId: \"@vhsBundleId\"\r\n }\r\n };\r\n return directive;\r\n}\r\nexports.VhsLoadFromTemplateDirectiveFactory = VhsLoadFromTemplateDirectiveFactory;\r\nVhsLoadFromTemplateDirectiveFactory.$inject = [];\r\n},{\"../../utils/DomUtils\":511,\"../models/Event\":170,\"./VhsTemplateService\":188}],184:[function(require,module,exports){\nvar RandomUtils_1 = require(\"../../utils/RandomUtils\");\r\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar StringBuilder_1 = require(\"../../utils/StringBuilder\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar VhsSelectSandboxDirective_1 = require(\"./VhsSelectSandboxDirective\");\r\nvar AuthRouter_1 = require(\"../../urls/AuthRouter\");\r\nvar CourseDetailsController_1 = require(\"../../courses/CourseDetailsController\");\r\nvar VhsSandboxController = (function () {\r\n function VhsSandboxController($scope, $rootScope, $timeout, $http, $q, $window, $location, authRouter) {\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.$window = $window;\r\n this.$location = $location;\r\n this.authRouter = authRouter;\r\n this.showAsPopup = false;\r\n }\r\n VhsSandboxController.prototype.init = function ($scope, element) {\r\n var _this = this;\r\n this.element = element;\r\n this.fileKey = $scope.fileKey;\r\n this.showAsPopup = $scope.showAsPopup;\r\n this.isExternalUrl = $scope.pageUrl != null;\r\n this.$timeout(function () {\r\n var eventData = {\r\n richTextElementId: _this.findRichTextElementId(),\r\n richTextBindController: null\r\n };\r\n _this.$rootScope.$broadcast(Event_1.Event.TA_FIND_RICH_TEXT_BIND_CONTROLLER, eventData);\r\n _this.richTextBindController = eventData.richTextBindController;\r\n if (_this.fileKey) {\r\n _this.loadBundle();\r\n }\r\n else if ($scope.pageUrl) {\r\n _this.createIFrameAndWaitIt($scope.pageUrl);\r\n }\r\n }, 0);\r\n if (this.showAsPopup) {\r\n this.$scope.$on(Event_1.Event.SANDBOX_REOPEN_POPUP, function () {\r\n _this.createIFrameAndWaitIt(_this.bundleFile ? _this.bundleFile.url : $scope.pageUrl);\r\n });\r\n }\r\n else {\r\n this.$scope.$on(Event_1.Event.COURSE_TOGGLE_MENU_VISIBILITY, function () {\r\n _this.adjustSandboxHeight();\r\n _this.$timeout(function () {\r\n _this.adjustSandboxHeight();\r\n _this.$timeout(function () {\r\n _this.adjustSandboxHeight();\r\n }, 500);\r\n }, 0);\r\n });\r\n }\r\n };\r\n VhsSandboxController.prototype.loadBundle = function () {\r\n var _this = this;\r\n if (!this.richTextBindController) {\r\n console.log('RichTextBind Controller not found!');\r\n return this.$q.reject(null);\r\n }\r\n var promise = this.richTextBindController.getBundleFile(this.fileKey)\r\n .then(function (bundleFile) {\r\n _this.bundleFile = bundleFile;\r\n if (_this.bundleFile && _this.bundleFile.url) {\r\n return _this.createIFrameAndWaitIt(_this.bundleFile.url);\r\n }\r\n });\r\n this.richTextBindController.loadContentSynchronized(promise);\r\n };\r\n VhsSandboxController.prototype.createIFrameAndWaitIt = function (url) {\r\n var _this = this;\r\n var iframeLoadDeferred = this.$q.defer();\r\n var modalId = RandomUtils_1.RandomUtils.generateRandomId(\"modal_\");\r\n this.height = this.element.attr(\"height\") ? parseInt(this.element.attr(\"height\")) : null;\r\n this.width = this.element.attr(\"width\") ? parseInt(this.element.attr(\"width\")) : null;\r\n var css = this.element.attr(\"style\") || \"\";\r\n var targetCss = css;\r\n if (this.showAsPopup) {\r\n var iframe = this.createIFrame(url, this.width, this.height, css);\r\n var openPopup = this.showAsPopup && this.$location.path().indexOf('update') < 0;\r\n if (openPopup) {\r\n this.element.append(this.createModal(modalId, iframe));\r\n var closeButton = $(\"#\" + modalId + \" .close\");\r\n if (closeButton.length) {\r\n closeButton.on('click', function () {\r\n _this.$location.search(CourseDetailsController_1.CourseDetailsController.FULL_SCREEN_PARAMETER, null).replace();\r\n });\r\n }\r\n }\r\n $(\"#\" + modalId).modal({\r\n backdrop: 'static',\r\n keyboard: true\r\n }).on(\"show.bs.modal\", function () {\r\n $(this).find('.modal-body, .modal-dialog').css({\r\n width: (this.width ? this.width + \"px\" : \"auto\"),\r\n height: (this.height ? this.height + \"px\" : \"auto\")\r\n });\r\n }).modal(\"show\");\r\n }\r\n else {\r\n if (css.indexOf(\"width:\") == -1) {\r\n targetCss += \" width: 100%;\";\r\n }\r\n if (css.indexOf(\"height:\") == -1) {\r\n targetCss += \" height: 100%;\";\r\n }\r\n var iframe = this.createIFrame(url, this.width, this.height, targetCss);\r\n this.element.append(iframe)\r\n .find('iframe')\r\n .css({ border: 'none' })\r\n .addClass(\"sandbox-inline\")\r\n .removeAttr(\"width\")\r\n .removeAttr(\"height\")\r\n .css({ width: \"100%\" });\r\n this.adjustSandboxHeight();\r\n angular.element(window).bind('resize', function () {\r\n _this.adjustSandboxHeight();\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n angular.element(window).unbind('resize');\r\n });\r\n }\r\n this.element.find('iframe').on(\"load\", function () {\r\n iframeLoadDeferred.resolve();\r\n if (_this.richTextBindController.businessUnit &&\r\n !_this.richTextBindController.businessUnit.displayScormViaDomainAddress) {\r\n _this.parentInitialize(targetCss);\r\n }\r\n });\r\n return iframeLoadDeferred.promise;\r\n };\r\n VhsSandboxController.prototype.adjustSandboxHeight = function () {\r\n if (!this.width || !this.height) {\r\n return;\r\n }\r\n var currentWidth = this.element.innerWidth();\r\n var targetHeight = window.innerWidth < 768 ?\r\n this.height - 170\r\n : this.height / this.width * currentWidth;\r\n this.element.css({ height: targetHeight + \"px\" });\r\n };\r\n VhsSandboxController.prototype.parentInitialize = function (css) {\r\n var frame = document.getElementById('vhs-scorm-iframe');\r\n var width = this.width;\r\n var height = this.height;\r\n var url = this.bundleFile ? this.bundleFile.url : frame.src;\r\n var obj = {\r\n url: url,\r\n width: width,\r\n height: height,\r\n css: css,\r\n scormData: API.initScormData()\r\n };\r\n if (frame.contentWindow) {\r\n frame.contentWindow.postMessage(obj, '*');\r\n }\r\n document.body.addEventListener('message', function (event) {\r\n console.log('scromData listened');\r\n if (event.data.event_id === 'updateState') {\r\n console.log(event.data.data);\r\n }\r\n });\r\n };\r\n VhsSandboxController.prototype.createIFrame = function (url, width, height, css) {\r\n if (this.isExternalUrl) {\r\n if (url.indexOf(\"google\") >= 0 && url.indexOf(\"/pub?\") > 0) {\r\n url = url.replace(\"/pub?\", \"/embed?\");\r\n }\r\n return \"\";\r\n }\r\n if (this.richTextBindController.businessUnit) {\r\n if (!this.richTextBindController.businessUnit.displayScormViaDomainAddress) {\r\n var strings = url.split(\"/\");\r\n var domain = strings[0] + \"//\" + strings[2];\r\n return \"\";\r\n }\r\n else {\r\n var strings = url.split(\"/\");\r\n var result = url.replace(strings[0] + \"//\" + strings[2], this.$window.location.origin);\r\n return \"\";\r\n }\r\n }\r\n return \"\";\r\n };\r\n VhsSandboxController.prototype.createModal = function (id, body) {\r\n var modal = \"\";\r\n if (this.showAsPopup) {\r\n modal += \"Relaunch\";\r\n }\r\n return modal;\r\n };\r\n VhsSandboxController.prototype.findRichTextElementId = function () {\r\n var richEditor = DomUtils_1.DomUtils.findParentWithAttr(this.element, \"vhs-rich-text-bind\");\r\n if (!richEditor) {\r\n richEditor = DomUtils_1.DomUtils.findParentWithAttr(this.element, \"ta-bind\");\r\n }\r\n return richEditor ? richEditor.attr('id') : null;\r\n };\r\n VhsSandboxController.isLink = function (value) {\r\n return value && (value.toLowerCase().indexOf(\"http://\") == 0 || value.toLowerCase().indexOf(\"https://\") == 0);\r\n };\r\n VhsSandboxController.TA_ELEMENT_SELECTOR = \"img.ta-vhs-sandbox\";\r\n VhsSandboxController.TA_DIRECTIVE_HTML = \"
    \";\r\n VhsSandboxController.TA_RENDER_FUNCTION = function (element, $compile, $rootScope, $timeout) {\r\n var id = RandomUtils_1.RandomUtils.generateRandomId('vhsSandbox_');\r\n var elementId = element.attr(\"id\");\r\n var endKeyIndex = elementId.indexOf(\"___\");\r\n var showAsPopup = element.hasClass(VhsSelectSandboxDirective_1.VhsSelectSandboxController.SANDBOX_AS_POPUP_CLASS);\r\n var fileKey = \"\";\r\n if (endKeyIndex >= 0) {\r\n fileKey = elementId.substring(0, endKeyIndex);\r\n }\r\n else {\r\n fileKey = elementId;\r\n }\r\n var height = element.attr(\"height\");\r\n var width = element.attr(\"width\");\r\n var style = element.attr(\"style\") || \"\";\r\n var imageAttributes = (width ? \"width='\" + width + \"'\" : \"\") +\r\n (height ? \" height='\" + height + \"'\" : \"\") +\r\n (style ? \" style='\" + style + \"'\" : \"\");\r\n element.replaceWith(\"
    \");\r\n $timeout(function () {\r\n $('#' + id).replaceWith($compile(StringBuilder_1.StringBuilder.interpolate(VhsSandboxController.TA_DIRECTIVE_HTML)\r\n .with(\":fileKey\", VhsSandboxController.isLink(fileKey) ? \"\" : fileKey)\r\n .with(\":url\", VhsSandboxController.isLink(fileKey) ? fileKey : \"\")\r\n .with(\":imageAttributes\", imageAttributes)\r\n .with(\":showAsPopup\", showAsPopup)\r\n .build())($rootScope));\r\n }, 0);\r\n };\r\n VhsSandboxController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$timeout\",\r\n \"$http\",\r\n \"$q\",\r\n \"$window\",\r\n \"$location\",\r\n AuthRouter_1.AuthRouter.NAME\r\n ];\r\n return VhsSandboxController;\r\n})();\r\nexports.VhsSandboxController = VhsSandboxController;\r\nfunction VhsSandboxDirectiveFactory() {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"AE\",\r\n link: link,\r\n controller: VhsSandboxController,\r\n scope: {\r\n pageUrl: \"@?vhsUrl\",\r\n fileKey: \"@?vhsFileKey\",\r\n showAsPopup: \"=?vhsShowAsPopup\"\r\n }\r\n };\r\n return directive;\r\n}\r\nexports.VhsSandboxDirectiveFactory = VhsSandboxDirectiveFactory;\r\n},{\"../../courses/CourseDetailsController\":194,\"../../urls/AuthRouter\":463,\"../../utils/DomUtils\":511,\"../../utils/RandomUtils\":523,\"../../utils/StringBuilder\":525,\"../models/Event\":170,\"./VhsSelectSandboxDirective\":187}],185:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar BundleFileType_1 = require(\"../../bundles/models/BundleFileType\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar StringBuilder_1 = require(\"../../utils/StringBuilder\");\r\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar BundleService_1 = require(\"../../bundles/BundleService\");\r\nvar VhsSelectEmbeddedBundleMaterialController = (function () {\r\n function VhsSelectEmbeddedBundleMaterialController($scope, $timeout, $http, bundleApi, url) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n this.bundleApi = bundleApi;\r\n this.url = url;\r\n this.loadPopupContent = undefined;\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.TA_SELECT_EMBEDDED_BUNDLE, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.loadPopupContent = true;\r\n _this.lastEventData = data;\r\n _this.element.find(\"div.modal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n });\r\n this.bundleFilesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/bundles/\" + $scope.bundleId + \"/files\")));\r\n this.bundleFilesGridModel.pageSize = 6;\r\n }\r\n VhsSelectEmbeddedBundleMaterialController.prototype.init = function ($scope, element) {\r\n this.element = element;\r\n this.richEditorParent = DomUtils_1.DomUtils.findParentWithClass(this.element, \"vhs-rich-editor-content\");\r\n };\r\n VhsSelectEmbeddedBundleMaterialController.prototype.onBundleFileSelect = function (bundleFile) {\r\n var html = \"\";\r\n if (bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.IMAGE]) {\r\n html = StringBuilder_1.StringBuilder.interpolate(VhsSelectEmbeddedBundleMaterialController.EMBEDDED_IMG_TA_HTML)\r\n .with(\":bundleKey\", bundleFile.key)\r\n .with(\":imageSrc\", bundleFile.url)\r\n .build();\r\n }\r\n else if (bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.CSS]\r\n || bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.HTML]\r\n || bundleFile.type == BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.JS]) {\r\n html = StringBuilder_1.StringBuilder.interpolate(VhsSelectEmbeddedBundleMaterialController.EMBEDDED_BUNDLE_TA_HTML)\r\n .with(\":bundleKey\", bundleFile.key)\r\n .build();\r\n }\r\n else {\r\n var icon = \"\";\r\n this.lastEventData.callbackFunction(icon);\r\n html = StringBuilder_1.StringBuilder.interpolate(VhsSelectEmbeddedBundleMaterialController.EMBEDDED_LINK_TA_HTML)\r\n .with(\":bundleKey\", bundleFile.key)\r\n .with(\":bundleKey\", bundleFile.key)\r\n .with(\":href\", bundleFile.url)\r\n .build();\r\n }\r\n this.lastEventData.callbackFunction(html);\r\n };\r\n VhsSelectEmbeddedBundleMaterialController.prototype.closePopup = function () {\r\n this.element.find(\"div.modal\").modal(\"hide\");\r\n };\r\n VhsSelectEmbeddedBundleMaterialController.prototype.isEventProcessable = function (data) {\r\n if (data.eventSourceButton != null) {\r\n var parent_1 = DomUtils_1.DomUtils.findParentWithClass(data.eventSourceButton, \"vhs-rich-editor-content\");\r\n if (parent_1 != null && parent_1.is(this.richEditorParent)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n VhsSelectEmbeddedBundleMaterialController.EMBEDDED_BUNDLE_TA_HTML = '

    :bundleKey

    ';\r\n VhsSelectEmbeddedBundleMaterialController.EMBEDDED_STYLED_IMG_TA_HTML = '\":bundleKey\"';\r\n VhsSelectEmbeddedBundleMaterialController.EMBEDDED_IMG_TA_HTML_COURSES = '\":bundleKey\"/';\r\n VhsSelectEmbeddedBundleMaterialController.EMBEDDED_IMG_TA_HTML = '
    \":bundleKey\"/
    ';\r\n VhsSelectEmbeddedBundleMaterialController.EMBEDDED_LINK_TA_HTML = ':bundleKey' +\r\n '  ';\r\n VhsSelectEmbeddedBundleMaterialController.$inject = [\r\n \"$scope\",\r\n \"$timeout\",\r\n \"$http\",\r\n BundleService_1.BundleService.NAME,\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return VhsSelectEmbeddedBundleMaterialController;\r\n})();\r\nexports.VhsSelectEmbeddedBundleMaterialController = VhsSelectEmbeddedBundleMaterialController;\r\nfunction VhsSelectEmbeddedBundleDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsSelectEmbeddedBundleMaterialController,\r\n scope: {\r\n bundleId: \"@vhsBundleId\"\r\n },\r\n templateUrl: url.template(\"components/vhs-select-embedded-bundle.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsSelectEmbeddedBundleDirectiveFactory = VhsSelectEmbeddedBundleDirectiveFactory;\r\nVhsSelectEmbeddedBundleDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../bundles/BundleService\":36,\"../../bundles/models/BundleFileType\":40,\"../../utils/DomUtils\":511,\"../../utils/StringBuilder\":525,\"../../utils/UrlService\":528,\"../models/Event\":170}],186:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar StringBuilder_1 = require(\"../../utils/StringBuilder\");\r\nvar RandomUtils_1 = require(\"../../utils/RandomUtils\");\r\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar VhsSelectMaterialController = (function () {\r\n function VhsSelectMaterialController($scope, $timeout, $http, url) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n this.url = url;\r\n this.loadPopupContent = undefined;\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.TA_SELECT_EMBEDDED_MATERIAL, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.loadPopupContent = true;\r\n _this.lastEventData = data;\r\n _this.element.find(\"div.modal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n });\r\n this.materialsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/materials\")));\r\n this.materialsGridModel.filter.businessUnitId = this.$scope.businessUnitId;\r\n this.materialsGridModel.filter.isNullableBusinessUnit = !(this.$scope.businessUnitId);\r\n }\r\n VhsSelectMaterialController.prototype.init = function ($scope, element) {\r\n this.element = element;\r\n this.richEditorParent = DomUtils_1.DomUtils.findParentWithClass(this.element, \"vhs-rich-editor-content\");\r\n };\r\n VhsSelectMaterialController.prototype.onMaterialSelect = function (material, asDownloadLink) {\r\n if (asDownloadLink === void 0) { asDownloadLink = false; }\r\n this.materialId = material.id;\r\n var selectedText = window.getSelection() ? window.getSelection().toString() || \"\" : \"\";\r\n selectedText = selectedText.trim();\r\n this.lastEventData.callbackFunction(StringBuilder_1.StringBuilder.interpolate(asDownloadLink ?\r\n VhsSelectMaterialController.EMBEDDED_MATERIAL_DOWNLOAD_LINK_TA_HTML :\r\n VhsSelectMaterialController.EMBEDDED_MATERIAL_TA_HTML)\r\n .with(\":materialId\", RandomUtils_1.RandomUtils.generateRandomId(\"\" + this.materialId + \"__\"))\r\n .with(\":materialName\", selectedText || material.title)\r\n .with(\":materialDownloadUrl\", material.downloadUrl)\r\n .build());\r\n };\r\n VhsSelectMaterialController.prototype.closePopup = function () {\r\n this.element.find(\"div.modal\").modal(\"hide\");\r\n };\r\n VhsSelectMaterialController.prototype.isEventProcessable = function (data) {\r\n if (data.eventSourceButton != null) {\r\n var parent_1 = DomUtils_1.DomUtils.findParentWithClass(data.eventSourceButton, \"vhs-rich-editor-content\");\r\n if (parent_1 != null && parent_1.is(this.richEditorParent)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n VhsSelectMaterialController.prototype.hideButtonForExtensions = function (fileName) {\r\n var splitStr = fileName.split('.');\r\n var extension = splitStr[splitStr.length - 1];\r\n if (extension == 'docx' || extension == 'doc'\r\n || extension == 'txt' || extension == 'pptx'\r\n || extension == 'ppt' || extension == 'xlsx'\r\n || extension == 'xls' || extension == '7z' || extension == 'zip') {\r\n return false;\r\n }\r\n return true;\r\n };\r\n VhsSelectMaterialController.EMBEDDED_MATERIAL_TA_HTML = '

    :materialName

    ';\r\n VhsSelectMaterialController.EMBEDDED_MATERIAL_DOWNLOAD_LINK_TA_HTML = \"\";\r\n VhsSelectMaterialController.$inject = [\r\n \"$scope\",\r\n \"$timeout\",\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return VhsSelectMaterialController;\r\n})();\r\nexports.VhsSelectMaterialController = VhsSelectMaterialController;\r\nfunction VhsSelectMaterialDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsSelectMaterialController,\r\n scope: {\r\n businessUnitId: \"@?vhsBusinessUnitId\",\r\n },\r\n templateUrl: url.template(\"components/vhs-select-material.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsSelectMaterialDirectiveFactory = VhsSelectMaterialDirectiveFactory;\r\nVhsSelectMaterialDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../utils/DomUtils\":511,\"../../utils/RandomUtils\":523,\"../../utils/StringBuilder\":525,\"../../utils/UrlService\":528,\"../models/Event\":170}],187:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar BundleFileType_1 = require(\"../../bundles/models/BundleFileType\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar StringBuilder_1 = require(\"../../utils/StringBuilder\");\r\nvar RandomUtils_1 = require(\"../../utils/RandomUtils\");\r\nvar DomUtils_1 = require(\"../../utils/DomUtils\");\r\nvar BundleService_1 = require(\"../../bundles/BundleService\");\r\nvar AppProperties_1 = require(\"../../utils/AppProperties\");\r\nvar VhsSelectSandboxController = (function () {\r\n function VhsSelectSandboxController($scope, $timeout, $http, $location, bundleApi, url) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.bundleApi = bundleApi;\r\n this.url = url;\r\n this.loadPopupContent = undefined;\r\n this.sandboxAsPopup = true;\r\n this.sandboxAsTinCan = false;\r\n this.urlIframe = null;\r\n $scope.vm = this;\r\n $scope.$on(Event_1.Event.TA_SELECT_SANDBOX, function (event, data) {\r\n if (_this.isEventProcessable(data)) {\r\n _this.loadPopupContent = true;\r\n _this.lastEventData = data;\r\n _this.element.find(\"div.modal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n });\r\n this.bundleFilesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/bundles/\" + $scope.bundleId + \"/files\")));\r\n this.bundleFilesGridModel.pageSize = 6;\r\n this.bundleFilesGridModel.filter.bundleFileType = BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.HTML];\r\n this.apiApplicationUrl = AppProperties_1.AppProperties.serviceRoot != \"/\"\r\n ? AppProperties_1.AppProperties.serviceRoot\r\n : $location.protocol() + \"://\" + $location.host() + \":\" + $location.port() + \"/\";\r\n }\r\n VhsSelectSandboxController.prototype.init = function ($scope, element) {\r\n this.element = element;\r\n this.richEditorParent = DomUtils_1.DomUtils.findParentWithClass(this.element, \"vhs-rich-editor-content\");\r\n };\r\n VhsSelectSandboxController.prototype.onBundleFileSelect = function (bundleFile) {\r\n this.onSelect(bundleFile.key);\r\n };\r\n VhsSelectSandboxController.prototype.onUrlEnter = function (url) {\r\n this.onSelect(url);\r\n this.urlIframe = null;\r\n };\r\n VhsSelectSandboxController.prototype.onSelect = function (key) {\r\n var html = StringBuilder_1.StringBuilder.interpolate(VhsSelectSandboxController.EMBEDDED_IMG_TA_HTML)\r\n .with(\":customClass\", this.sandboxAsPopup ? VhsSelectSandboxController.SANDBOX_AS_POPUP_CLASS : \"\")\r\n .with(\":bundleId\", RandomUtils_1.RandomUtils.generateRandomId(key + (this.sandboxAsTinCan ? this.getTinCanSCOParameters(key) : \"\") + \"___\"))\r\n .with(\":imageSrc\", this.url.staticResourceUrl(VhsSelectSandboxController.SANDBOX_TA_IMG_PATH))\r\n .build();\r\n this.sandboxAsPopup = true;\r\n this.lastEventData.callbackFunction(html);\r\n };\r\n VhsSelectSandboxController.prototype.isEventProcessable = function (data) {\r\n if (data.eventSourceButton != null) {\r\n var parent = DomUtils_1.DomUtils.findParentWithClass(data.eventSourceButton, \"vhs-rich-editor-content\");\r\n if (parent != null && parent.is(this.richEditorParent)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n VhsSelectSandboxController.prototype.getTinCanSCOParameters = function (key) {\r\n return (key.indexOf(\"?\") != -1 ? \"\" : \"?\")\r\n .concat(\"&actor=%7B%22name%22%3A%5B%22VHS%20System%22%5D%2C%22account%22%3A%5B%7B%22accountServiceHomePage%22%3A\")\r\n .concat(\"%22\").concat(this.apiApplicationUrl).concat(\"%22\")\r\n .concat(\"%2C%22accountName%22%3A%22GDFIR1HQV3%7Cvhs.system%40corepartners.com%22\")\r\n .concat(\"%7D%5D%2C%22objectType%22%3A%22Agent%22%7D\")\r\n .concat(\"&endpoint=\").concat(this.apiApplicationUrl)\r\n .concat(\"&tincan=true\");\r\n };\r\n VhsSelectSandboxController.prototype.clearDataOnCloseDialog = function () {\r\n this.sandboxAsPopup = true;\r\n this.lastEventData.callbackFunction(\"\");\r\n };\r\n VhsSelectSandboxController.EMBEDDED_IMG_TA_HTML = '';\r\n VhsSelectSandboxController.SANDBOX_AS_POPUP_CLASS = \"sandbox-as-popup\";\r\n VhsSelectSandboxController.SANDBOX_TA_IMG_PATH = \"./themes/default/img/ta_sandbox.png\";\r\n VhsSelectSandboxController.$inject = [\r\n \"$scope\",\r\n \"$timeout\",\r\n \"$http\",\r\n \"$location\",\r\n BundleService_1.BundleService.NAME,\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return VhsSelectSandboxController;\r\n})();\r\nexports.VhsSelectSandboxController = VhsSelectSandboxController;\r\nfunction VhsSelectSandboxDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsSelectSandboxController,\r\n scope: {\r\n bundleId: \"@vhsBundleId\"\r\n },\r\n templateUrl: url.template(\"components/vhs-select-sandbox.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsSelectSandboxDirectiveFactory = VhsSelectSandboxDirectiveFactory;\r\nVhsSelectSandboxDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../bundles/BundleService\":36,\"../../bundles/models/BundleFileType\":40,\"../../utils/AppProperties\":\"AppProperties\",\"../../utils/DomUtils\":511,\"../../utils/RandomUtils\":523,\"../../utils/StringBuilder\":525,\"../../utils/UrlService\":528,\"../models/Event\":170}],188:[function(require,module,exports){\nvar BundleService_1 = require(\"../../bundles/BundleService\");\r\nvar CourseStructureEditController_1 = require(\"../../courses/CourseStructureEditController\");\r\nvar BundleFileType_1 = require(\"../../bundles/models/BundleFileType\");\r\nvar VhsTemplateService = (function () {\r\n function VhsTemplateService($http, $q, bundleApi) {\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.bundleApi = bundleApi;\r\n }\r\n VhsTemplateService.prototype.getTemplateContent = function (bundleFileKey, scope) {\r\n var _this = this;\r\n return this.bundleApi.getBundle(scope.bundleId, \"file:\" + bundleFileKey)\r\n .then(function (bundle) {\r\n var file = bundle.filesMap.get(bundleFileKey);\r\n if (file && file.url && file.type === BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.HTML]) {\r\n return _this.$http.get(file.url, {\r\n cache: true,\r\n withoutAuthorization: true,\r\n ignore404: true,\r\n withCredentials: false\r\n }).then(function (result) {\r\n var sectionInfo = VhsTemplateService.findLessonInfo(scope);\r\n var html = result.data;\r\n if (sectionInfo) {\r\n for (var fieldName in sectionInfo) {\r\n if (sectionInfo.hasOwnProperty(fieldName) && sectionInfo[fieldName] !== null) {\r\n html = VhsTemplateService.replaceTemplatePlaceholderField(html, fieldName, sectionInfo[fieldName]);\r\n }\r\n }\r\n }\r\n return VhsTemplateService.replaceAllWhitespaces(html);\r\n }).catch(function () {\r\n return _this.$q.reject(\"file.cannot.be.loaded\");\r\n });\r\n }\r\n else {\r\n return _this.$q.reject(\"file.not.found\");\r\n }\r\n });\r\n };\r\n VhsTemplateService.replaceTemplatePlaceholderField = function (html, fieldName, fieldValue) {\r\n var regexp = new RegExp('(' + fieldName + '-placeholder[^\\\"]*\"[^>]*>)([^]*>)', \"g\");\r\n return html\r\n .replace(regexp, \"$1\" + fieldValue + \"$3\")\r\n .replace(fieldName + \"-attr-placeholder\", fieldValue);\r\n };\r\n VhsTemplateService.replaceTemplateBlockContent = function (html, content) {\r\n var regexp = new RegExp('
    \\n?.*\\n?<\\/div>');\r\n return html\r\n .replace(regexp, '
    \\n' + content + '\\n
    ');\r\n };\r\n VhsTemplateService.replaceAllWhitespaces = function (html) {\r\n return html\r\n .replace(/[\\t ]+\\[\\t ]+\\<\")\r\n .replace(/\\>[\\t ]+$/g, \">\");\r\n };\r\n VhsTemplateService.findLessonInfo = function (editorScope) {\r\n var scope = editorScope.$parent;\r\n while (scope) {\r\n if (scope.hasOwnProperty(\"vm\") && scope.vm.$VM_NAME === CourseStructureEditController_1.CourseStructureEditController.NAME) {\r\n break;\r\n }\r\n scope = scope.$parent;\r\n }\r\n if (scope) {\r\n var editController = scope.vm;\r\n var currentSection = editController.selectedSection;\r\n var parentSection = currentSection.parentId != null\r\n ? editController.getSectionById(currentSection.moduleId, currentSection.parentId) : null;\r\n var unit = parentSection != null && parentSection.parentId != null\r\n ? editController.getSectionById(parentSection.moduleId, parentSection.parentId) : null;\r\n var sectionInfo = {};\r\n sectionInfo.grade = editController.course ? editController.course.subjectName : null;\r\n sectionInfo.courseName = editController.course ? editController.course.topic : null;\r\n sectionInfo.unitName = unit ? VhsTemplateService.splitTextByDelimiter(unit.name, 1) : null;\r\n sectionInfo.unitNumber = unit ? VhsTemplateService.splitTextByDelimiter(unit.name, 0) : null;\r\n sectionInfo.sectionName = parentSection ? VhsTemplateService.splitTextByDelimiter(parentSection.name, 1) : null;\r\n sectionInfo.sectionNumber = parentSection ? VhsTemplateService.splitTextByDelimiter(parentSection.name, 0) : null;\r\n sectionInfo.thumbnailUrl = editController.course ? editController.course.previewUrl : null;\r\n sectionInfo.lessonName = currentSection ? VhsTemplateService.splitTextByDelimiter(currentSection.name, 1) : null;\r\n var lessonNumber = currentSection ? VhsTemplateService.splitTextByDelimiter(currentSection.name, 0) : null;\r\n sectionInfo.lessonNumber = lessonNumber ? lessonNumber.toUpperCase() : null;\r\n sectionInfo.printUnitAndSection = \"UNIT .section_letter | Lesson ? | <lesson name>\";\r\n var sectionLetter = sectionInfo.sectionNumber\r\n ? VhsTemplateService.splitTextByDelimiter(sectionInfo.sectionNumber, 1, \" \") : \"\";\r\n if (sectionInfo.unitNumber) {\r\n sectionInfo.printUnitAndSection = sectionInfo.printUnitAndSection\r\n .replace(\"UNIT .\", sectionInfo.unitNumber + \".\");\r\n }\r\n sectionInfo.printUnitAndSection = sectionInfo.printUnitAndSection.replace(\"section_letter\", sectionLetter || \"\");\r\n if (lessonNumber) {\r\n sectionInfo.printUnitAndSection = sectionInfo.printUnitAndSection\r\n .replace(\"Lesson ?\", lessonNumber);\r\n }\r\n if (sectionInfo.lessonName) {\r\n sectionInfo.printUnitAndSection = sectionInfo.printUnitAndSection\r\n .replace(\"<lesson name>\", sectionInfo.lessonName);\r\n }\r\n sectionInfo.printCourseAndGrade = \"<course title> - <grade>\";\r\n if (sectionInfo.courseName) {\r\n sectionInfo.printCourseAndGrade = sectionInfo.printCourseAndGrade\r\n .replace(\"<course title>\", sectionInfo.courseName);\r\n }\r\n if (sectionInfo.grade) {\r\n sectionInfo.printCourseAndGrade = sectionInfo.printCourseAndGrade\r\n .replace(\"<grade>\", sectionInfo.grade);\r\n }\r\n return sectionInfo;\r\n }\r\n return null;\r\n };\r\n VhsTemplateService.splitTextByDelimiter = function (text, targetElementIndex, delimeter) {\r\n if (!text) {\r\n return null;\r\n }\r\n if (!delimeter) {\r\n delimeter = VhsTemplateService.TEXT_DELIMITER_CHARACTER;\r\n }\r\n var index = text.indexOf(delimeter);\r\n var result;\r\n if (index < 0 && targetElementIndex <= 0) {\r\n result = null;\r\n }\r\n else if (index < 0 && targetElementIndex > 0) {\r\n result = text;\r\n }\r\n else {\r\n if (targetElementIndex <= 0) {\r\n result = text.substring(0, index);\r\n }\r\n else {\r\n result = text.substring(index + 1);\r\n }\r\n }\r\n if (result) {\r\n result = result.trim();\r\n }\r\n return result;\r\n };\r\n VhsTemplateService.NAME = \"components.VhsTemplateService\";\r\n VhsTemplateService.TEXT_DELIMITER_CHARACTER = \"-\";\r\n VhsTemplateService.$inject = [\"$http\", \"$q\", BundleService_1.BundleService.NAME];\r\n return VhsTemplateService;\r\n})();\r\nexports.VhsTemplateService = VhsTemplateService;\r\n},{\"../../bundles/BundleService\":36,\"../../bundles/models/BundleFileType\":40,\"../../courses/CourseStructureEditController\":212}],189:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar RandomUtils_1 = require(\"../../utils/RandomUtils\");\r\nvar StringBuilder_1 = require(\"../../utils/StringBuilder\");\r\nvar UserNotesService_1 = require(\"../../courses/UserNotesService\");\r\nvar Event_1 = require(\"../models/Event\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar VhsUserNoteDirectiveController = (function () {\r\n function VhsUserNoteDirectiveController($scope, userNotesService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.userNotesService = userNotesService;\r\n this.isAvailable = false;\r\n this.noteMaxLength = 1000;\r\n $scope.vm = this;\r\n this.textChanged = false;\r\n if ($scope.noteHeader != null) {\r\n this.noteHeader = $scope.noteHeader;\r\n }\r\n this.courseId = this.userNotesService.courseId;\r\n this.sectionId = this.userNotesService.sectionId;\r\n this.courseProgressId = this.userNotesService.courseProgressId;\r\n this.userNotesService.getNote(this.courseId, this.sectionId, this.courseProgressId, this.$scope.uuid)\r\n .then(function (note) {\r\n _this.noteBody = note && note.text != null ? note.text : $scope.originalBody;\r\n _this.noteSavedBody = _this.noteBody;\r\n _this.isAvailable = true;\r\n });\r\n this.eventListener = $scope.$on(Event_1.Event.TA_LOCATION_CHANGE_START, function () {\r\n if (_this.textChanged) {\r\n _this.saveUserNote();\r\n }\r\n _this.eventListener();\r\n });\r\n }\r\n VhsUserNoteDirectiveController.prototype.init = function ($scope, element) {\r\n this.element = element;\r\n };\r\n VhsUserNoteDirectiveController.prototype.saveUserNote = function () {\r\n var _this = this;\r\n this.userNotesService.saveNote(this.courseId, this.sectionId, this.courseProgressId, this.$scope.uuid, this.noteBody)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Saved successfully\");\r\n _this.textChanged = false;\r\n _this.noteSavedBody = angular.copy(_this.noteBody);\r\n });\r\n };\r\n VhsUserNoteDirectiveController.prototype.discardUserNote = function () {\r\n this.noteBody = angular.copy(this.noteSavedBody);\r\n this.textChanged = false;\r\n };\r\n VhsUserNoteDirectiveController.prototype.onTextChange = function () {\r\n this.textChanged = true;\r\n };\r\n VhsUserNoteDirectiveController.TA_ELEMENT_SELECTOR = \"div.ta-user-note\";\r\n VhsUserNoteDirectiveController.TA_DIRECTIVE_HTML = \"
    \";\r\n VhsUserNoteDirectiveController.TA_RENDER_FUNCTION = function (element, $compile, $rootScope, $timeout) {\r\n var id = RandomUtils_1.RandomUtils.generateRandomId('vhsUserNote_');\r\n element.replaceWith(\"
    \");\r\n $timeout(function () {\r\n $('#' + id).replaceWith($compile(StringBuilder_1.StringBuilder.interpolate(VhsUserNoteDirectiveController.TA_DIRECTIVE_HTML)\r\n .with(\":uuid\", element.attr('id'))\r\n .with(\":originalBody\", element.find(\"div.ta-block.note\").text())\r\n .with(\":noteHeader\", element.find(\"h5.user-note-header\").text())\r\n .build())($rootScope));\r\n }, 0);\r\n };\r\n VhsUserNoteDirectiveController.$inject = [\r\n \"$scope\",\r\n UserNotesService_1.UserNotesService.NAME\r\n ];\r\n return VhsUserNoteDirectiveController;\r\n})();\r\nexports.VhsUserNoteDirectiveController = VhsUserNoteDirectiveController;\r\nfunction VhsUserNoteDirectiveFactory(url) {\r\n function link($scope, element, attributes, controller) {\r\n controller.init($scope, element);\r\n }\r\n var directive = {\r\n restrict: \"A\",\r\n link: link,\r\n controller: VhsUserNoteDirectiveController,\r\n scope: {\r\n uuid: \"@uuid\",\r\n originalBody: \"@originalBody\",\r\n noteHeader: \"@noteHeader\"\r\n },\r\n templateUrl: url.template(\"components/vhs-user-note.html\"),\r\n };\r\n return directive;\r\n}\r\nexports.VhsUserNoteDirectiveFactory = VhsUserNoteDirectiveFactory;\r\nVhsUserNoteDirectiveFactory.$inject = [\r\n UrlService_1.UrlService.NAME\r\n];\r\n},{\"../../INotifier\":5,\"../../courses/UserNotesService\":221,\"../../utils/RandomUtils\":523,\"../../utils/StringBuilder\":525,\"../../utils/UrlService\":528,\"../models/Event\":170}],190:[function(require,module,exports){\nvar CommonModule_1 = require(\"./../common/CommonModule\");\r\nvar SecurityModule_1 = require(\"./../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nvar ContentService_1 = require(\"./ContentService\");\r\nexports.ContentModule = angular\r\n .module(\"content\", [\r\n CommonModule_1.CommonModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .service(ContentService_1.ContentService.NAME, ContentService_1.ContentService);\r\n},{\"./../common/CommonModule\":51,\"./../security/SecurityModule\":419,\"./../urls/UrlsModule\":492,\"./ContentService\":191}],191:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar ContentService = (function () {\r\n function ContentService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n ContentService.prototype.getContentView = function (objectId, objectType) {\r\n var myObjectType = (typeof objectType === 'string') ? objectType :\r\n (typeof objectType === 'number') ? ReferencedObjectType_1.ReferencedObjectType[objectType] : undefined;\r\n return this.$http.get(this.url.base(\"/api/content/:type/:id\")\r\n .param(\":id\", objectId)\r\n .param(\":type\", myObjectType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ContentService.NAME = \"content.ContentService\";\r\n ContentService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return ContentService;\r\n})();\r\nexports.ContentService = ContentService;\r\n},{\"./../ReferencedObjectType\":7,\"./../utils/UrlService\":528}],192:[function(require,module,exports){\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CourseBundleEditController = (function () {\r\n function CourseBundleEditController($scope, $http, $routeParams, $q, $rootScope, url, courseService, coursesRouter, securityService, authManager, permissionsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$routeParams = $routeParams;\r\n this.$q = $q;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.courseService = courseService;\r\n this.coursesRouter = coursesRouter;\r\n this.securityService = securityService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.isLoading = false;\r\n this.dragoverEventHandler = function (e) {\r\n e.preventDefault();\r\n var elem = document.elementFromPoint(e.clientX, e.clientY);\r\n var dropFromEditCourse = document.getElementById(\"dropFromEditCourse\");\r\n var dropFromEditCourseNote = document.getElementById(\"dropFromEditCourseNote\");\r\n e.dataTransfer.dropEffect = 'none';\r\n if (dropFromEditCourse == elem || dropFromEditCourseNote == elem) {\r\n e.dataTransfer.dropEffect = 'copy';\r\n }\r\n };\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var hasCourseId = this.courseId != null;\r\n var courseIdStr = String(this.courseId);\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(hasCourseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadCourse(this.courseId)\r\n .then(function () {\r\n _this.isInitialized = true;\r\n });\r\n this.createCourseBundleFn = this.createCourseBundle.bind(this);\r\n document.body.addEventListener('dragover', this.dragoverEventHandler);\r\n $scope.$on(\"$destroy\", function () {\r\n document.body.removeEventListener('dragover', _this.dragoverEventHandler);\r\n });\r\n }\r\n CourseBundleEditController.prototype.createCourseBundle = function () {\r\n var _this = this;\r\n if (!this.course.bundleId) {\r\n return this.courseService.createCourseBundle(this.course.id, this.course.version)\r\n .then(function (result) {\r\n var bundle = result[\"bundle\"];\r\n _this.course.bundleId = bundle.id;\r\n _this.course.version = result[\"course\"].version;\r\n console.dir(bundle);\r\n return bundle;\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n return _this.$q.reject(null);\r\n });\r\n }\r\n else {\r\n return this.$q.reject(null);\r\n }\r\n };\r\n CourseBundleEditController.prototype.loadCourse = function (courseId) {\r\n var _this = this;\r\n return this.courseService.get(courseId).then(function (course) {\r\n _this.course = course;\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter);\r\n return _this.course;\r\n });\r\n };\r\n CourseBundleEditController.NAME = \"courses.CourseBundleEditController\";\r\n CourseBundleEditController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$routeParams\",\r\n \"$q\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return CourseBundleEditController;\r\n})();\r\nexports.CourseBundleEditController = CourseBundleEditController;\r\n},{\"../INotifier\":5,\"../authcore/AuthManager\":25,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/UrlService\":528,\"./CourseService\":211}],193:[function(require,module,exports){\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar UploadUtils_1 = require(\"../utils/UploadUtils\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar UploadsService_1 = require(\"../storage/UploadsService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SectionType_1 = require(\"./models/SectionType\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar PredefinedLanguagesUtils_1 = require(\"../utils/PredefinedLanguagesUtils\");\r\nvar CertificateService_1 = require(\"../certificates/CertificateService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar CourseCreateEditController = (function () {\r\n function CourseCreateEditController($scope, $http, $location, $routeParams, $timeout, $q, $rootScope, url, securityService, permissionsService, coursesRouter, courseService, $uploader, userService, authService, authManager, uploadUtils, certificateService, dialogService, brandingService, businessUnitService, authRedirect) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.$q = $q;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.coursesRouter = coursesRouter;\r\n this.courseService = courseService;\r\n this.$uploader = $uploader;\r\n this.userService = userService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.uploadUtils = uploadUtils;\r\n this.certificateService = certificateService;\r\n this.dialogService = dialogService;\r\n this.brandingService = brandingService;\r\n this.businessUnitService = businessUnitService;\r\n this.authRedirect = authRedirect;\r\n this.MAX_REQUIRED_ELECTIVES_NUMBER = 1000000;\r\n this.MAX_COURSE_AVAILABILITY_COMPLETED = 1000000;\r\n this.MAX_COURSE_AVAILABILITY_STARTED = 1000000;\r\n this.course = { ownerIds: [] };\r\n this.permissionsWithUsersAndGroups = [];\r\n this.isValidityInPerpetuity = true;\r\n this.hasPreviewUrlCanceled = false;\r\n this.courseCertificates = [];\r\n this.educationItemType = \"Course\";\r\n this.currentUserBusinessUnits = [];\r\n this.businessUnitSelected = false;\r\n this.businessUnitVisible = false;\r\n this.hasAllBusinessUnits = false;\r\n this.isCourseLoaded = false;\r\n this.isUserASystemAdministrator = false;\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var hasCourseId = this.courseId != null;\r\n var courseIdStr = String(this.courseId);\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissionsIf(!hasCourseId, function (systemPermissions) { return systemPermissions.addCourses; })\r\n .demandCoursePermissionsIf(hasCourseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user.businessUnits, _this.currentUserBusinessUnits);\r\n });\r\n this.userService.isUserSystemAdministrator()\r\n .then(function (result) {\r\n _this.isUserASystemAdministrator = result;\r\n });\r\n if (hasCourseId) {\r\n this.loadCourse().then(function (course) {\r\n if (!_this.isUserASystemAdministrator && course.externalCourse) {\r\n _this.authRedirect.forwardToAccessDenied();\r\n }\r\n _this.loadCertificates();\r\n _this.getCurrentBusinessUnitDomain();\r\n _this.isCourseLoaded = true;\r\n });\r\n this.disabledSaveButton = false;\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.COURSE, courseIdStr);\r\n }\r\n else {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"New Course\").update();\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.currentUserId = user.id;\r\n _this.currentUserName = user.fullName;\r\n _this.currentUserBusinessUnits = user.businessUnits;\r\n _this.course.ownerIds.push(user.id);\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n if (user.allBusinessUnits || user.businessUnits.length > 1) {\r\n _this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.COURSE);\r\n }\r\n _this.course.requiredElectivesNumber = 0;\r\n _this.course.courseAvailabilityCompleted = null;\r\n _this.course.courseAvailabilityStarted = null;\r\n _this.course.defaultDelay = 0;\r\n _this.course.externalCourse = false;\r\n _this.course.languageId = PredefinedLanguagesUtils_1.PredefinedLanguagesUtils.determineRelatedLanguageId(user.locale);\r\n });\r\n }\r\n this.$scope.$watch(function () { return _this.preview; }, function (newValue, oldValue) {\r\n if (newValue) {\r\n $(\"#previewArea\").attr(\"src\", URL.createObjectURL(newValue));\r\n }\r\n });\r\n }\r\n CourseCreateEditController.prototype.save = function () {\r\n var _this = this;\r\n this.disabledSaveButton = true;\r\n var preview = this.croppedImage == undefined ? this.preview : this.croppedImage;\r\n var hasPreviewUrlCanceled = this.hasPreviewUrlCanceled;\r\n this.hasPreviewUrlCanceled = false;\r\n this.course.endDate = Moment_1.Moment.textToJavaDate(this.course.endDateText);\r\n this.course.startDate = Moment_1.Moment.textToJavaDate(this.course.startDateText);\r\n this.course.defaultDelay = this.course.defaultDelay == null ? 0 : this.course.defaultDelay;\r\n var hasCourseId = this.courseId != null && this.courseId != undefined;\r\n var promise = hasCourseId\r\n ? this.courseService.update(this.course, this.permissionsWithUsersAndGroups, hasPreviewUrlCanceled, preview)\r\n : this.courseService.create(this.course, this.permissionsWithUsersAndGroups, preview);\r\n promise.then(function (result) {\r\n angular.copy(result[UploadsService_1.UploadsService.COURSE_KEY], _this.course);\r\n _this.courseId = _this.course.id;\r\n _this.certificateService.updateCertificateTemplatesForCourse(_this.courseId, _this.courseCertificates);\r\n var promise = null;\r\n if (preview != null) {\r\n _this.uploadUtils.cancelCoursePreviews(_this.courseId);\r\n promise = _this.upload(preview, _this.courseId, \"preview\").catch(function (response) {\r\n _this.disabledSaveButton = false;\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n }\r\n if (response.data.error == \"error.preview.type\") {\r\n INotifier_1.notifier.error(\"Invalid file format: please select a file with .jpg or .png extension\");\r\n }\r\n });\r\n }\r\n _this.$q.when(promise).then(function () {\r\n if (hasCourseId) {\r\n _this.updateSuccessCallback(_this.courseId);\r\n }\r\n else {\r\n _this.processSuccessCallback(_this.courseId);\r\n }\r\n });\r\n }).catch(function (err) {\r\n _this.disabledSaveButton = false;\r\n });\r\n };\r\n CourseCreateEditController.prototype.resetPreview = function () {\r\n if (this.preview) {\r\n this.preview = undefined;\r\n }\r\n if (this.previewUrl) {\r\n this.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n if (this.croppedImage) {\r\n this.croppedImage = undefined;\r\n }\r\n };\r\n CourseCreateEditController.prototype.restorePreviewUrl = function () {\r\n this.preview = undefined;\r\n this.previewUrl = this.course.previewUrl;\r\n this.preview = undefined;\r\n this.croppedImage = undefined;\r\n if (this.course.previewUrl) {\r\n this.course.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n };\r\n CourseCreateEditController.prototype.cleanValidity = function () {\r\n this.course.endDateText = \"\";\r\n };\r\n CourseCreateEditController.prototype.copy = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Do you want to copy this course?\", {\r\n title: \"Copy course\",\r\n }).then(function () {\r\n _this.disabledSaveButton = true;\r\n var preview = _this.preview;\r\n var hasPreviewUrlCanceled = _this.hasPreviewUrlCanceled;\r\n _this.preview = null;\r\n _this.hasPreviewUrlCanceled = false;\r\n _this.course.endDate = Moment_1.Moment.textToJavaDate(_this.course.endDateText);\r\n _this.course.startDate = Moment_1.Moment.textToJavaDate(_this.course.startDateText);\r\n if (_this.courseId) {\r\n INotifier_1.notifier.warning(\"Copying of the course started. The new course page will open automatically when copying is complete. Do not leave the current page.\");\r\n _this.courseService.copy(_this.courseId)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"A copy of ':course_name' has been created\")\r\n .with(\":course_name\", _this.course.topic)\r\n .build());\r\n if (result.warnings && result.warnings.length > 0) {\r\n result.warnings.forEach(function (w) {\r\n if (w == \"preview.file.creation.error\") {\r\n INotifier_1.notifier.warning(StringBuilder_1.StringBuilder.interpolate(\"Preview file copy failed for course ':course_name'\")\r\n .with(\":course_name\", _this.course.topic)\r\n .build());\r\n }\r\n else if (w == \"preview.file.not.ready\") {\r\n INotifier_1.notifier.warning(StringBuilder_1.StringBuilder.interpolate(\"Preview file for course ':course_name' was not ready for copying\")\r\n .with(\":course_name\", _this.course.topic)\r\n .build());\r\n }\r\n else {\r\n INotifier_1.notifier.warning(w);\r\n }\r\n });\r\n }\r\n angular.copy(result[UploadsService_1.UploadsService.COURSE_KEY], _this.course);\r\n if (preview != null) {\r\n _this.uploadUtils.cancelCoursePreviews(_this.courseId);\r\n _this.upload(preview, _this.courseId, \"preview\");\r\n }\r\n _this.$location.url(_this.coursesRouter.updateUrl(result[UploadsService_1.UploadsService.COURSE_KEY].id));\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n }\r\n if (response.data.error == \"error.preview.type\") {\r\n INotifier_1.notifier.error(\"Invalid file format: please select a file with .jpg or .png extension\");\r\n }\r\n });\r\n }\r\n });\r\n };\r\n CourseCreateEditController.prototype.publish = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#coursePublishingDialogModal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n CourseCreateEditController.prototype.hidePublishingModal = function () {\r\n $(\"#coursePublishingDialogModal\").modal(\"hide\");\r\n };\r\n CourseCreateEditController.prototype.redirect = function () {\r\n if (this.courseId) {\r\n if (this.course && this.course.permissions && this.course.permissions.view) {\r\n this.$location.url(this.coursesRouter.detailsUrl(this.courseId));\r\n }\r\n else {\r\n this.$location.url(this.coursesRouter.indexUrl());\r\n }\r\n }\r\n };\r\n CourseCreateEditController.prototype.loadCourse = function () {\r\n var _this = this;\r\n var promise = this.courseService.get(this.courseId);\r\n promise.then(function (result) {\r\n angular.copy(result, _this.course);\r\n var courseBreadcrumb = _this.course.topic || _this.course.subjectName;\r\n courseBreadcrumb = courseBreadcrumb.length > 40 ? courseBreadcrumb.substring(0, 40) + \"...\" : courseBreadcrumb;\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header(\"Edit\")\r\n .addParentLink(courseBreadcrumb, \"#\" + _this.coursesRouter.detailsUrl(_this.courseId))\r\n .update();\r\n _this.businessUnitSelected = true;\r\n _this.course.endDateText = Moment_1.Moment.isValidDate(result.endDate);\r\n _this.course.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n if (_this.course.endDateText) {\r\n _this.isValidityInPerpetuity = false;\r\n }\r\n _this.previewUrl = _this.course.previewUrl ? _this.course.previewUrl : null;\r\n });\r\n return promise;\r\n };\r\n CourseCreateEditController.prototype.loadPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var _this = this;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.permissionsService.getAllObjectPermissionsWithUsersAndGroups(securedObjectType, objectId).then(function (result) {\r\n _this.permissionsWithUsersAndGroups = result;\r\n });\r\n };\r\n CourseCreateEditController.prototype.loadCertificates = function () {\r\n var _this = this;\r\n this.certificateService.getCourseCertificateTemplates(this.courseId).then(function (certificates) {\r\n _this.courseCertificates = [];\r\n certificates.forEach(function (certificate) {\r\n var c = {\r\n type: certificate.certificateTemplateType,\r\n id: certificate.certificateTemplateId,\r\n name: certificate.certificateTemplateName\r\n };\r\n _this.courseCertificates.push(c);\r\n });\r\n });\r\n };\r\n CourseCreateEditController.prototype.sortByName = function (certificates) {\r\n certificates.sort(function (a, b) {\r\n if (a.name >= b.name)\r\n return 1;\r\n else\r\n return -1;\r\n });\r\n };\r\n CourseCreateEditController.prototype.processSuccessCallback = function (courseId) {\r\n INotifier_1.notifier.success(\"The course has been saved\");\r\n this.$location.url(this.coursesRouter.structureUpdateUrl(this.courseId));\r\n };\r\n CourseCreateEditController.prototype.updateSuccessCallback = function (courseId) {\r\n var _this = this;\r\n this.disabledSaveButton = false;\r\n INotifier_1.notifier.success(\"Modifications of the course have been saved\");\r\n this.loadCourse().then(function () {\r\n _this.loadCertificates();\r\n });\r\n this.permissionsWithUsersAndGroups = [];\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.COURSE, String(courseId));\r\n };\r\n CourseCreateEditController.prototype.getDefaultModuleForCourse = function (courseId) {\r\n var module = {};\r\n module.courseId = courseId;\r\n module.name = \"Module 1\";\r\n module.sortIndex = 1;\r\n return module;\r\n };\r\n CourseCreateEditController.prototype.getDefaultSectionForModule = function (courseId, moduleId) {\r\n var section = {};\r\n section.courseId = courseId;\r\n section.parentId = null;\r\n section.name = \"Section 1\";\r\n section.moduleId = moduleId;\r\n section.typeKey = SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION];\r\n section.summary = \"\";\r\n section.sortIndex = 1;\r\n return section;\r\n };\r\n CourseCreateEditController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n if (!this.courseId) {\r\n this.businessUnitSelected = false;\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.COURSE);\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n }\r\n };\r\n CourseCreateEditController.prototype.setBusinessUnitSelectorVisible = function () {\r\n this.businessUnitVisible = true;\r\n };\r\n CourseCreateEditController.prototype.getOwnersUrl = function (businessUnitId) {\r\n var baseUrl = \"/api/userSelector/users\";\r\n return businessUnitId\r\n ? StringBuilder_1.StringBuilder.interpolate(baseUrl + \"?businessUnitId=:businessUnitId\")\r\n .with(\":businessUnitId\", businessUnitId)\r\n .build()\r\n : baseUrl;\r\n };\r\n CourseCreateEditController.prototype.courseHasNoOwners = function () {\r\n return this.course.ownerIds.length == 0;\r\n };\r\n CourseCreateEditController.prototype.checkCourseOwners = function () {\r\n this.disabledSaveButton = this.course.ownerIds.length == 0;\r\n };\r\n CourseCreateEditController.prototype.getMenuPathToCertificateTemplates = function () {\r\n return \"Administration\" + \"→\" + \"Certificate Templates\";\r\n };\r\n CourseCreateEditController.prototype.upload = function (file, courseId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/courses/upload?courseId=:courseId&fileType=:fileType\")\r\n .param(\":courseId\", courseId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n CourseCreateEditController.prototype.isValidExpirationDate = function (startDateText, endDateText) {\r\n if (!startDateText || !endDateText) {\r\n return true;\r\n }\r\n var startDate = Moment_1.Moment.textToJavaDate(this.course.startDateText);\r\n var endDate = Moment_1.Moment.textToJavaDate(this.course.endDateText);\r\n return endDate > startDate;\r\n };\r\n CourseCreateEditController.prototype.showCropperModal = function () {\r\n $(\"#imageCropperModal\").modal(\"show\");\r\n };\r\n CourseCreateEditController.prototype.checkCropper = function () {\r\n console.log(this.preview);\r\n if (this.preview != null) {\r\n this.showCropperModal();\r\n }\r\n };\r\n CourseCreateEditController.prototype.showCropperModalAfterLoad = function () {\r\n var _this = this;\r\n setTimeout(function () {\r\n _this.preview != undefined || _this.previewUrl != undefined\r\n ? _this.showCropperModal()\r\n : _this.showCropperModalAfterLoad();\r\n }, 100);\r\n };\r\n CourseCreateEditController.prototype.copyCourseId = function () {\r\n var text = document.getElementById(\"courseIdUrlString\").innerText;\r\n var elem = document.createElement(\"textarea\");\r\n document.body.appendChild(elem);\r\n elem.value = \"\" + text;\r\n elem.select();\r\n document.execCommand(\"copy\");\r\n document.body.removeChild(elem);\r\n };\r\n CourseCreateEditController.prototype.getCurrentBusinessUnitDomain = function () {\r\n var _this = this;\r\n if (!this.currentBusinessUnitDomain) {\r\n if (this.course.businessUnitId) {\r\n this.businessUnitService.getBUDomainName(this.course.businessUnitId).then(function (result) {\r\n if (result) {\r\n _this.currentBusinessUnitDomain = \"\" + result;\r\n }\r\n else {\r\n _this.currentBusinessUnitDomain = _this.$location.absUrl().split(\"#\")[0] + \"#\";\r\n }\r\n });\r\n }\r\n else {\r\n this.currentBusinessUnitDomain = this.$location.absUrl().split(\"#\")[0] + \"#\";\r\n }\r\n }\r\n else {\r\n this.currentBusinessUnitDomain = this.$location.absUrl().split(\"#\")[0] + \"#\";\r\n }\r\n };\r\n CourseCreateEditController.NAME = \"courses.CourseCreateEditController\";\r\n CourseCreateEditController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$timeout\",\r\n \"$q\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n \"Upload\",\r\n UserService_1.UserService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n CertificateService_1.CertificateService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME\r\n ];\r\n return CourseCreateEditController;\r\n})();\r\nexports.CourseCreateEditController = CourseCreateEditController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../branding/CustomBrandingService\":35,\"../businessUnits/BusinessUnitsService\":44,\"../certificates/CertificateService\":45,\"../components/dialog/DialogService\":166,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../security/permissions/SecuredObjectType\":424,\"../storage/UploadsService\":458,\"../urls/CoursesRouter\":468,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"../utils/PageHeaderHelper\":521,\"../utils/PredefinedLanguagesUtils\":522,\"../utils/StringBuilder\":525,\"../utils/UploadUtils\":527,\"../utils/UrlService\":528,\"./CourseService\":211,\"./models/SectionType\":228}],194:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar CommonNavigation_1 = require(\"../common/CommonNavigation\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar ProgressService_1 = require(\"./ProgressService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar SectionType_1 = require(\"./models/SectionType\");\r\nvar ObjectTypeUtils_1 = require(\"../utils/ObjectTypeUtils\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar CourseProgressStatus_1 = require(\"./models/CourseProgressStatus\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar Storage_1 = require(\"../infrastructure/Storage\");\r\nvar SectionProgressStatus_1 = require(\"./models/SectionProgressStatus\");\r\nvar MaterialType_1 = require(\"../materials/models/MaterialType\");\r\nvar RichTextContentLoadingSynchronizer_1 = require(\"../components/richtext/RichTextContentLoadingSynchronizer\");\r\nvar Event_1 = require(\"../components/models/Event\");\r\nvar CourseActionLogService_1 = require(\"../statistics/CourseActionLogService\");\r\nvar CourseActionType_1 = require(\"../statistics/models/CourseActionType\");\r\nvar Event_2 = require(\"../common/Event\");\r\nvar CourseDetailsUtils_1 = require(\"./CourseDetailsUtils\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar CertificateService_1 = require(\"../certificates/CertificateService\");\r\nvar CommonService_1 = require(\"../common/CommonService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar CourseScormAdapter_1 = require(\"./CourseScormAdapter\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar EnrollmentSeatStatus_1 = require(\"./models/EnrollmentSeatStatus\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar PurchaseService_1 = require(\"../finances/PurchaseService\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar CourseScorm2004Adapter_1 = require(\"./CourseScorm2004Adapter\");\r\nvar PayPalService_1 = require(\"../integration/paypal/PayPalService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar RedirectReason_1 = require(\"../authcore/RedirectReason\");\r\nvar AzureCognitiveServicesService_1 = require(\"../integration/azureCognitiveServices/AzureCognitiveServicesService\");\r\nvar UserNotesService_1 = require(\"./UserNotesService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar AuthorizeNetService_1 = require(\"../integration/authorizenet/AuthorizeNetService\");\r\nvar FreeEnrollmentService_1 = require(\"../integration/freeenrollment/FreeEnrollmentService\");\r\nvar SlideService_1 = require(\"../slides/SlideService\");\r\nvar VhsSelectEmbeddedBundleDirective_1 = require(\"../components/richtext/VhsSelectEmbeddedBundleDirective\");\r\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar GamificationService_1 = require(\"../gamification/GamificationService\");\r\nvar BadgesService_1 = require(\"../gamification/BadgesService\");\r\nvar PersonalRouter_1 = require(\"../urls/PersonalRouter\");\r\nvar VideoPlayerLocalStorageKey_1 = require(\"../materials/models/VideoPlayerLocalStorageKey\");\r\nvar CourseDetailsController = (function () {\r\n function CourseDetailsController($location, $timeout, $q, $scope, $rootScope, securityService, $routeParams, $window, $sce, $anchorScroll, authManager, authRedirect, commonNavigation, url, coursesRouter, authRouter, courseService, commonService, bundleService, progressService, quizService, authService, sessionStorageWrapper, loadingSynchronizer, courseActionLogService, settingsService, certificateService, permissionsApi, learningPathsRouter, dialogService, purchaseService, businessUnitsService, payPalService, authorizeNetService, financesRouter, azureCognitiveServicesService, userNotesService, commonFilterService, slideService, freeEnrollmentService, gamificationService, badgesService, personalRouter) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$timeout = $timeout;\r\n this.$q = $q;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.securityService = securityService;\r\n this.$routeParams = $routeParams;\r\n this.$window = $window;\r\n this.$sce = $sce;\r\n this.$anchorScroll = $anchorScroll;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.commonNavigation = commonNavigation;\r\n this.url = url;\r\n this.coursesRouter = coursesRouter;\r\n this.authRouter = authRouter;\r\n this.courseService = courseService;\r\n this.commonService = commonService;\r\n this.bundleService = bundleService;\r\n this.progressService = progressService;\r\n this.quizService = quizService;\r\n this.authService = authService;\r\n this.sessionStorageWrapper = sessionStorageWrapper;\r\n this.loadingSynchronizer = loadingSynchronizer;\r\n this.courseActionLogService = courseActionLogService;\r\n this.settingsService = settingsService;\r\n this.certificateService = certificateService;\r\n this.permissionsApi = permissionsApi;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.dialogService = dialogService;\r\n this.purchaseService = purchaseService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.payPalService = payPalService;\r\n this.authorizeNetService = authorizeNetService;\r\n this.financesRouter = financesRouter;\r\n this.azureCognitiveServicesService = azureCognitiveServicesService;\r\n this.userNotesService = userNotesService;\r\n this.commonFilterService = commonFilterService;\r\n this.slideService = slideService;\r\n this.freeEnrollmentService = freeEnrollmentService;\r\n this.gamificationService = gamificationService;\r\n this.badgesService = badgesService;\r\n this.personalRouter = personalRouter;\r\n this.DEFAULT_LEFT_MENU_MODULE = 1;\r\n this.DEFAULT_INNER_MENU_ITEM = 1;\r\n this.sectionsList = [];\r\n this.isCourseLoaded = false;\r\n this.isSlideLoading = true;\r\n this.slideLoadingCounter = 0;\r\n this.isSlideRemoving = false;\r\n this.isSlideBack = false;\r\n this.modules = [];\r\n this.material = {};\r\n this.selectedModule = null;\r\n this.selectedSection = null;\r\n this.sectionMaterials = [];\r\n this.sectionMaterialsCache = new Map();\r\n this.currentUser = {};\r\n this.nextSection = {};\r\n this.prevSection = {};\r\n this.course = {};\r\n this.courseCertificates = [];\r\n this.certificateParameters = {\r\n format: 'pdf'\r\n };\r\n this.disableParticipationForm = false;\r\n this.materialLoaded = false;\r\n this.menuShow = true;\r\n this.showQuizInfoSection = true;\r\n this.showQuizResultsSection = true;\r\n this.showQuizStartSection = true;\r\n this.showLandingPageStartCourseButton = true;\r\n this.sectionStatusUpdatePromise = null;\r\n this.interactionsSavePromise = null;\r\n this.fullScreenMode = false;\r\n this.purchaseParameter = false;\r\n this.isModuleHiddenContentVisible = true;\r\n this.isCourseLeftMenuShown = true;\r\n this.sectionStatusUpdateViaLmsApiOnly = false;\r\n this.waitLmsTimeoutPromise = null;\r\n this.updateSectionProgressPromise = null;\r\n this.ERROR_INTERNET_DISCONNECTED = \"error.internet.disconnected\";\r\n this.SUBMIT_SECTION_PROGRESS_RETRY_INTERVAL = 10000;\r\n this.relatedLearningPathsToStart = [];\r\n this.isDisableInfoWithManualCompletionInput = false;\r\n this.quizPassing = false;\r\n this.isSelfEnrollProceed = false;\r\n this.topTabsCustomActions = [];\r\n this.isPurchaseConfigured = false;\r\n this.showPurchaseWindow = false;\r\n this.runImmersiveReaderDisabled = false;\r\n this.showListMeetings = true;\r\n this.isLoaded = false;\r\n this._lastHeight = 0;\r\n this._lastContentElementHeight = 0;\r\n this.lastMaterialForStudyHeight = 0;\r\n this.isLoadingStartCourse = false;\r\n this.isLoadingCourseData = false;\r\n this.businessUnit = {};\r\n this.audioFileUrl = null;\r\n this.disableNextButton = false;\r\n this.delayCounted = true;\r\n this.slideDeckIsFirst = false;\r\n this.isSlideShowStarted = false;\r\n this.leaveCoursePage = false;\r\n this.slideTemplatesBundleLoading = false;\r\n this.recursionDepth = 0;\r\n this.showANetButton = false;\r\n this.rewards = [];\r\n this.enrollInProgress = false;\r\n this.editCourseUrl = function () {\r\n if (_this.menuKey.leftMenuModuleExpanded && _this.menuKey.leftMenuItem) {\r\n return _this.coursesRouter.sectionUpdateRoute(_this.courseId, _this.menuKey.leftMenuModuleExpanded, _this.menuKey.leftMenuItem);\r\n }\r\n return _this.coursesRouter.structureUpdateUrl(_this.courseId);\r\n };\r\n this.goToFullScreenMode = function () {\r\n _this.fullScreenMode = true;\r\n _this.$location.search(CourseDetailsController.FULL_SCREEN_PARAMETER, \"true\").replace();\r\n };\r\n this.getSourceParticipationFormData = function () {\r\n return _this.progressService.getSourceParticipationFormData(_this.courseId);\r\n };\r\n this.onSubmit = function (participationFormData) {\r\n if (_this.disableParticipationForm) {\r\n return;\r\n }\r\n _this.disableParticipationForm = true;\r\n return _this.progressService.startCourse(_this.courseId, participationFormData)\r\n .then(function (result) {\r\n _this.disableParticipationForm = false;\r\n _this.initializeCourseProgress(result);\r\n _this.loadSections(true, true);\r\n INotifier_1.notifier.success(\"Participation Form data have been successfully updated\");\r\n _this.showParticipationForm = false;\r\n }).catch(function (response) {\r\n _this.disableParticipationForm = false;\r\n INotifier_1.notifier.commonError(response);\r\n });\r\n };\r\n this.closePurchaseModal = (function () {\r\n _this.$location.search(CourseDetailsController.PURCHASE_PARAMETER, null).replace();\r\n $(\"#purchaseDialog\").modal('hide');\r\n $('.modal-backdrop').remove();\r\n _this.showPurchaseWindow = false;\r\n });\r\n this.clearAll();\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n this.moduleId = parseInt($location.search()[CoursesRouter_1.CoursesRouter.MODULE_PARAMETER]) || null;\r\n this.sectionId = parseInt($location.search()[CoursesRouter_1.CoursesRouter.SECTION_PARAMETER]) || null;\r\n this.fullScreenMode = $location.search()[CourseDetailsController.FULL_SCREEN_PARAMETER] != undefined;\r\n this.purchaseParameter = $location.search()[CourseDetailsController.PURCHASE_PARAMETER] || false;\r\n this.ANetTransactionId = $location.search()[FinancesRouter_1.FinancesRouter.ANET_TRANSACTION_ID_PARAM] || null;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.checkPurchaseProcess();\r\n var courseIdStr = String(this.courseId);\r\n var isPurchaseCourse = this.$location.search()[\"purchase\"] != undefined;\r\n var isSmartPurchaseCourse = this.$location.search()[\"smartPurchase\"] != undefined;\r\n localStorage.removeItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.MATERIAL_KEY);\r\n localStorage.removeItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.TIMESTAMP_KEY);\r\n localStorage.removeItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SECTION_KEY);\r\n if (this.ANetTransactionId) {\r\n this.checkANetTransaction();\r\n }\r\n else {\r\n this.permissionsApi.getCoursePermissions(courseIdStr).then(function (coursePermissions) {\r\n if ((isPurchaseCourse || isSmartPurchaseCourse) && !coursePermissions.view) {\r\n _this.$location.url(_this.coursesRouter.indexUrl());\r\n }\r\n else {\r\n _this.securityService\r\n .demandViewCoursePermissions(courseIdStr, function (coursePermissions) { return coursePermissions.view; });\r\n _this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n _this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.currentUser);\r\n });\r\n _this.getCourseProgress()\r\n .then(function (progress) {\r\n var coursePromises = [];\r\n var loadProgressBundle = _this.courseStarted && progress.bundleId\r\n ? _this.loadProgressBundle()\r\n : _this.$q.when(null);\r\n loadProgressBundle.then(function () {\r\n _this.isLoaded = true;\r\n });\r\n coursePromises.push(loadProgressBundle);\r\n var courseLoadPromise = _this.loadCourse();\r\n var loadCourseBundle = courseLoadPromise.then(function () {\r\n return _this.loadBundle();\r\n });\r\n coursePromises.push(courseLoadPromise);\r\n coursePromises.push(loadCourseBundle);\r\n coursePromises.push(_this.loadProducts(_this.courseId));\r\n if (!_this.courseStarted) {\r\n var loadCourseStartPermission = courseLoadPromise.then(function () {\r\n return _this.getCourseStartPermission();\r\n });\r\n coursePromises.push(loadCourseStartPermission);\r\n }\r\n var loadModulesAndSections = loadCourseBundle.then(function () {\r\n _this.loadModules()\r\n .then(function () {\r\n return _this.loadSections(true, true);\r\n });\r\n });\r\n coursePromises.push(loadModulesAndSections);\r\n if (!_this.courseStarted) {\r\n coursePromises.push(_this.loadParticipationForm());\r\n coursePromises.push(_this.loadLandingPage());\r\n coursePromises.push(_this.loadCourseEnrollmentConfig());\r\n coursePromises.push(_this.loadCoursePurchaseConfigured());\r\n coursePromises.push(_this.loadCourseEnrollmentInfo());\r\n }\r\n return _this.$q.all(coursePromises);\r\n })\r\n .then(function () {\r\n if (!_this.course.permissions.start) {\r\n _this.loadRelatedLearningPathsToStart();\r\n }\r\n })\r\n .then(function () {\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0) {\r\n var menu = _this.course.active\r\n ? MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY\r\n : MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_EXPIRED_COURSES_MENU_KEY;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(menu);\r\n }\r\n })\r\n .then(function () {\r\n _this.checkCourseStartDate();\r\n })\r\n .then(function () {\r\n if (_this.products.length == 1\r\n && _this.products[0].price > 0\r\n && _this.authManager.isAuthenticated()\r\n && !_this.course.permissions.start\r\n && !_this.isAvailableEnrollment()\r\n && _this.isAvailablePurchase()\r\n && !_this.products[0].subscriptionPlanId) {\r\n _this.aNetPreparing();\r\n if (_this.course.businessUnitId) {\r\n _this.businessUnitsService.checkPayPalCorrectData(_this.course.businessUnitId)\r\n .then(function (resultPayPal) {\r\n if (resultPayPal) {\r\n _this.smartButtonsPaypal();\r\n }\r\n _this.businessUnitsService.checkAuthorizeNetCorrectData(_this.course.businessUnitId)\r\n .then(function (resultANet) {\r\n if (resultANet) {\r\n _this.showANetButton = true;\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n _this.smartButtonsPaypal().catch(function () {\r\n _this.showANetButton = true;\r\n });\r\n }\r\n }\r\n }).finally(function () {\r\n if (_this.isSelfUnEnrollAvailable()) {\r\n _this.bindTopTabsCustomActions();\r\n }\r\n _this.isCourseLoaded = true;\r\n if (_this.purchaseParameter) {\r\n _this.showPurchaseModal();\r\n }\r\n setTimeout(function () {\r\n _this.changeLeftClosableButton();\r\n $(\"#main-course-left-bar\").height($('.vhs-wrapper__content').height());\r\n $(\".navbar-progress-block.course-main-content:not(.course-main-content__full-size)\").height($(window).height() - 200);\r\n _this.checkChangeHeightForMainContent();\r\n _this.checkMaterialForStudyHeight();\r\n });\r\n _this.progressService.getExpirationDateForCourse(_this.courseId)\r\n .then(function (result) {\r\n if (!!_this.courseProgress && _this.courseProgress.status == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.STARTED]) {\r\n _this.courseExpiredDate = _this.courseProgress.expirationDateForStarted;\r\n }\r\n else if (!!_this.courseProgress && _this.courseProgress.status == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n _this.courseExpiredDate = _this.courseProgress.expirationDate;\r\n }\r\n else {\r\n _this.courseExpiredDate = result;\r\n }\r\n });\r\n });\r\n _this.$scope.$on('$locationChangeStart', function (event, newLocation) {\r\n _this.$rootScope.$broadcast(Event_1.Event.TA_LOCATION_CHANGE_START);\r\n _this.$anchorScroll(_this.$location.hash());\r\n _this.logLocationChange();\r\n if (_this.$location.search()[CoursesRouter_1.CoursesRouter.SECTION_PARAMETER]) {\r\n if (_this.$location.search()[CourseDetailsController.CHANGE_SECTION_PARAMETER]) {\r\n _this.$location.search(CourseDetailsController.CHANGE_SECTION_PARAMETER, null);\r\n var sectionId = parseInt(_this.$location.search()[CoursesRouter_1.CoursesRouter.SECTION_PARAMETER]);\r\n var section = CourseDetailsUtils_1.CourseDetailsUtils.findSectionExtendedById(_this.sectionsList, sectionId);\r\n if (section) {\r\n _this.setLeftMenuItem(section.section);\r\n }\r\n }\r\n }\r\n else {\r\n _this.slideTemplatesBundle = null;\r\n _this.slideTemplatesBundleText = null;\r\n _this.slideDeckSectionId = null;\r\n _this.leaveCoursePage = true;\r\n _this.isSlideShowStarted = false;\r\n }\r\n });\r\n _this.$scope.$on(Event_2.Event.BEFORE_NAVIGATION_UNLOAD, function (event, newLocation) {\r\n _this.isSlideShowStarted = false;\r\n _this.logBeforeUnload();\r\n });\r\n var courseScormAdapter = new CourseScormAdapter_1.CourseScormAdapter(_this, sessionStorageWrapper, null);\r\n $window[\"API\"] = courseScormAdapter;\r\n $window[\"API_1484_11\"] = new CourseScorm2004Adapter_1.CourseScorm2004Adapter(courseScormAdapter);\r\n _this.toggleCoursePageCssClassForBody();\r\n angular.element(window).bind('resize', function () {\r\n var elem = angular.element(document.querySelector(\".vhs-wrapper\"));\r\n _this.isCourseLeftMenuShown = !elem.hasClass(\"sidebar-close\");\r\n _this.changeLeftClosableButton();\r\n });\r\n _this.$scope.$on(\"$destroy\", function () {\r\n angular.element(window).unbind('resize');\r\n $window[\"API\"] = null;\r\n _this.toggleCoursePageCssClassForBody();\r\n clearInterval(_this.changeMainContentHeight);\r\n clearInterval(_this.changeMaterialForStudyHeight);\r\n });\r\n _this.$scope.$on(Event_1.Event.QUIZ_SURVEY_COMPLETED, function () {\r\n _this.loadSections(false, false);\r\n });\r\n _this.$scope.$on(Event_1.Event.COURSE_PROGRESS_SECTION_PROGRESS_RELOAD_PROGRESS, function (event, args) {\r\n _this.loadSections(false, true);\r\n });\r\n }\r\n });\r\n }\r\n this.sectionsDepthLevel = this.course.sectionsDepthLevel;\r\n if (typeof this.sectionsDepthLevel == \"undefined\") {\r\n this.sectionsDepthLevel = Number.MAX_VALUE;\r\n }\r\n $scope.$on(\"reload.course.details\", function () {\r\n if (!_this.quizPassing) {\r\n _this.setLeftMenuModule(_this.modules[0]);\r\n _this.setLeftMenuItem(_this.sectionsMap.get(_this.modules[0].id)[0].section);\r\n }\r\n });\r\n }\r\n CourseDetailsController.prototype.smartButtonsPaypal = function () {\r\n var _this = this;\r\n return this.businessUnitsService.getPayPalClientId(this.course.businessUnitId)\r\n .then(function (result) {\r\n _this.createScript(result);\r\n _this.clientId = result;\r\n });\r\n };\r\n CourseDetailsController.prototype.aNetPreparing = function () {\r\n var baseDomain = this.$window.location.href.split(\"://\")[0] + \"://\" + this.$window.location.href.split(\"://\")[1].split(\"/\")[0];\r\n if (this.$window.location.href.indexOf(\"client\") > 0) {\r\n baseDomain += \"/client\";\r\n }\r\n else if (this.$window.location.href.indexOf(\"app.html\") > 0) {\r\n baseDomain += \"/app.html\";\r\n }\r\n this.aNetIframeCommunicator = baseDomain + this.financesRouter.productANetCommunicatorUrl();\r\n console.log(this.aNetIframeCommunicator);\r\n };\r\n CourseDetailsController.prototype.resetANetToken = function () {\r\n this.aNetToken = null;\r\n };\r\n CourseDetailsController.prototype.checkANetTransaction = function () {\r\n var _this = this;\r\n this.loadProducts(this.courseId).then(function (products) {\r\n if (products && products.length > 0) {\r\n var selectedProductId;\r\n if (products.length > 1) {\r\n selectedProductId = +localStorage.getItem('aNetProductId');\r\n }\r\n _this.authorizeNetService.confirmOrder(_this.ANetTransactionId, selectedProductId ? selectedProductId : products[0].id).then(function (result) {\r\n if (result) {\r\n _this.purchaseService.getNumberOfItemsInProduct(selectedProductId ? selectedProductId : products[0].id).then(function (numberOfItemsInProduct) {\r\n if (numberOfItemsInProduct > 1) {\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(result));\r\n }\r\n else {\r\n var url = window.location.href;\r\n url = url.slice(0, url.indexOf(\"?\"));\r\n location.replace(url);\r\n location.reload();\r\n }\r\n });\r\n }\r\n else {\r\n var url = window.location.href;\r\n url = url.slice(0, url.indexOf(\"?\"));\r\n location.replace(url);\r\n location.reload();\r\n }\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Incorrect system purchase settings. Please contact your administrator.\");\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n }\r\n });\r\n };\r\n CourseDetailsController.prototype.getANetToken = function () {\r\n var _this = this;\r\n return this.authorizeNetService.getToken(this.course.businessUnitId, this.products[0].price, this.aNetIframeCommunicator, this.products[0].id).then(function (result) {\r\n _this.aNetToken = result;\r\n }).catch(function (err) {\r\n if (err.data.error === \"error.order.creation.failed.used\") {\r\n INotifier_1.notifier.error(\"All seats are already taken.\");\r\n }\r\n });\r\n };\r\n CourseDetailsController.prototype.checkChangeHeightForMainContent = function () {\r\n var _this = this;\r\n this.changeMainContentHeight = setInterval(function () {\r\n var elementWindow = $(window);\r\n var elementMainContent = $('.vhs-wrapper__content');\r\n if (elementWindow.width() < 992) {\r\n _this._lastHeight = 50;\r\n $(\"#main-course-left-bar .navbar-progress-block.course-main-content:not(.course-main-content__full-size)\").height(50);\r\n return;\r\n }\r\n if (elementWindow.height() != _this._lastHeight || elementMainContent.height() != _this._lastContentElementHeight) {\r\n _this._lastHeight = elementWindow.height();\r\n _this._lastContentElementHeight = elementWindow.height();\r\n _this.changeLeftClosableButton();\r\n $(\"#main-course-left-bar\").height($('.vhs-wrapper__content').height());\r\n $(\"#main-course-left-bar .navbar-progress-block.course-main-content\").height($(window).height() - 250);\r\n }\r\n }, 400);\r\n };\r\n CourseDetailsController.prototype.checkMaterialForStudyHeight = function () {\r\n var _this = this;\r\n this.changeMaterialForStudyHeight = setInterval(function () {\r\n if (_this.sectionMaterials.length === 0) {\r\n return;\r\n }\r\n var elementMaterials = $(\"#myTabContent\");\r\n if (elementMaterials.height() != _this.lastMaterialForStudyHeight) {\r\n _this.lastMaterialForStudyHeight = elementMaterials.height();\r\n _this.updateLayoutForMaterials();\r\n }\r\n }, 50);\r\n };\r\n CourseDetailsController.prototype.redirectToLogOn = function () {\r\n this.$location.search(CourseDetailsController.SMART_PURCHASE_PARAMETER, true).replace();\r\n this.authRedirect.redirectToLogOn(RedirectReason_1.RedirectReason.LOGON_REQUIRED, this.course.businessUnitId);\r\n return;\r\n };\r\n CourseDetailsController.prototype.createScript = function (clientId) {\r\n var _this = this;\r\n if (document.getElementById(\"paypal_script\")) {\r\n var element = document.getElementById(\"paypal_script\");\r\n element.parentNode.removeChild(element);\r\n }\r\n var scriptElement = document.createElement(\"script\");\r\n scriptElement.id = \"paypal_script\";\r\n if (!!this.products[0].subscriptionPlanId) {\r\n scriptElement.src = \"https://www.paypal.com/sdk/js?client-id=\" + clientId + \"&vault=true&intent=subscription\";\r\n document.body.appendChild(scriptElement);\r\n scriptElement.onload = function () {\r\n _this.showSubscriptionButtons();\r\n };\r\n }\r\n else {\r\n scriptElement.src = \"https://www.paypal.com/sdk/js?client-id=\" + clientId;\r\n document.body.appendChild(scriptElement);\r\n scriptElement.onload = function () {\r\n _this.showButtons().catch(function (err) {\r\n if (err.data.error === \"error.order.creation.failed.used\") {\r\n INotifier_1.notifier.error(\"All seats are already taken.\");\r\n }\r\n });\r\n };\r\n }\r\n };\r\n CourseDetailsController.prototype.showSubscriptionButtons = function () {\r\n var _this = this;\r\n paypal.Buttons({\r\n style: {\r\n label: 'subscribe'\r\n },\r\n createSubscription: function (data, actions) {\r\n var response = actions.subscription.create({\r\n 'plan_id': _this.products[0].subscriptionPlanId\r\n });\r\n response.then(function (subscriptionId) {\r\n _this.payPalService.createSubscriptionPurchaseOrder(_this.products[0].id, subscriptionId);\r\n });\r\n return response;\r\n },\r\n onApprove: function (data, actions) {\r\n _this.deactivateMainContent();\r\n _this.purchaseService.getNumberOfItemsInProduct(_this.products[0].id).then(function (numberOfItemsInProduct) {\r\n if (numberOfItemsInProduct > 1) {\r\n return _this.payPalService.approveSubscription(_this.products[0].id, data.subscriptionID)\r\n .then(function (purchasedOrderId) {\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(purchasedOrderId));\r\n }).catch(function () {\r\n _this.dialogService.confirm(\"Go to 'My purchases' in your profile, if the subscription does not appear there in 5 minutes, then contact the support service\", {\r\n title: \"Warning\",\r\n hideCancelButton: true\r\n });\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n }\r\n else {\r\n return _this.payPalService.approveSubscription(_this.products[0].id, data.subscriptionID)\r\n .then(function (purchasedOrderId) {\r\n _this.$window.location.reload();\r\n }).catch(function () {\r\n _this.dialogService.confirm(\"Go to 'My purchases' in your profile, if the subscription does not appear there in 5 minutes, then contact the support service\", {\r\n title: \"Warning\",\r\n hideCancelButton: true\r\n });\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n }\r\n });\r\n },\r\n onError: function (error) {\r\n _this.activateMainContent();\r\n INotifier_1.notifier.error(\"Failed to purchase product. Please contact support.\");\r\n }\r\n }).render('#paypal-button-container');\r\n };\r\n CourseDetailsController.prototype.showButtons = function () {\r\n var _this = this;\r\n return paypal.Buttons({\r\n createOrder: function () {\r\n return _this.payPalService.createOrderSmart(_this.products[0].id);\r\n },\r\n onApprove: function (data, actions) {\r\n _this.deactivateMainContent();\r\n var s = JSON.stringify({\r\n orderID: data.orderID\r\n });\r\n _this.purchaseService.getNumberOfItemsInProduct(_this.products[0].id).then(function (numberOfItemsInProduct) {\r\n if (numberOfItemsInProduct > 1) {\r\n return _this.payPalService.confirmOrderSmart(s).then(function (purchasedOrderId) {\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(purchasedOrderId));\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Your credit card or PayPal account has not been charged. Please try again\");\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n }\r\n else {\r\n return _this.payPalService.confirmOrderSmart(s).then(function (purchasedOrderId) {\r\n _this.$window.location.reload();\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Your credit card or PayPal account has not been charged. Please try again\");\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n }\r\n });\r\n },\r\n onError: function (error) {\r\n _this.activateMainContent();\r\n INotifier_1.notifier.error(\"Your credit card or PayPal account has not been charged. Please try again\");\r\n }\r\n }).render('#paypal-button-container');\r\n };\r\n CourseDetailsController.prototype.deactivateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.add(\"hidden\");\r\n mainLoadingElement.classList.remove(\"hidden\");\r\n };\r\n CourseDetailsController.prototype.activateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.remove(\"hidden\");\r\n mainLoadingElement.classList.add(\"hidden\");\r\n };\r\n CourseDetailsController.prototype.loadModules = function () {\r\n var _this = this;\r\n return this.courseService.getModules(this.courseId).then(function (result) {\r\n angular.copy(result, _this.modules);\r\n });\r\n };\r\n CourseDetailsController.prototype.loadSections = function (setMenuItem, showSpinner) {\r\n var _this = this;\r\n if (showSpinner) {\r\n this.isLoadingCourseData = true;\r\n }\r\n return this.progressService.getCourseSections(this.courseId, this.courseProgressId).then(function (result) {\r\n _this.sectionsList = result;\r\n _this.modulesProgress = new Map();\r\n var summaryPromises = [];\r\n _this.modules.forEach(function (module) {\r\n var sectionsInModuleCount = _this.sectionsList.filter(function (s) { return s.section.moduleId == module.id; }).length;\r\n var sectionSummaryPages = Math.floor(sectionsInModuleCount / CourseDetailsController.SECTION_SUMMARY_REQUEST_PAGE_SIZE);\r\n sectionSummaryPages += sectionsInModuleCount % CourseDetailsController.SECTION_SUMMARY_REQUEST_PAGE_SIZE == 0 ? 0 : 1;\r\n for (var i = 0; i < sectionSummaryPages; i++) {\r\n summaryPromises.push(_this.courseService.getSectionsByModule(_this.courseId, module.id, i, CourseDetailsController.SECTION_SUMMARY_REQUEST_PAGE_SIZE)\r\n .then(function (summaryList) {\r\n summaryList.forEach(function (summary) {\r\n var relatedSection = _this.sectionsList.filter(function (s) {\r\n return s.section.moduleId == module.id && s.section.id == summary.id;\r\n })[0];\r\n relatedSection.section.summary = summary.summary;\r\n });\r\n }));\r\n }\r\n _this.sectionsMap.set(module.id, result.filter(function (s) { return s.section.moduleId == module.id; }));\r\n });\r\n _this.$q.all(summaryPromises).then(function () {\r\n _this.recalculateProgressPercentage();\r\n if (_this.selectedSection) {\r\n var searchSectionResults = _this.sectionsList.filter(function (section) { return section.id == _this.selectedSection.id; });\r\n if (searchSectionResults.length > 0) {\r\n _this.selectedSection = searchSectionResults[0].section;\r\n }\r\n }\r\n if (setMenuItem) {\r\n var allowedSections = result.filter(function (s) { return s.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED] ||\r\n s.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.STARTED] || s.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.FAILED]; });\r\n var lastViewedSection = null;\r\n if (_this.courseProgress.lastViewedSectionId) {\r\n lastViewedSection = result.filter(function (s) { return s.section.id === _this.courseProgress.lastViewedSectionId; })[0].section;\r\n _this.disableNextButton = lastViewedSection.status !== SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED];\r\n }\r\n else {\r\n if (!_this.sectionId) {\r\n if (allowedSections.length > 0) {\r\n if (result.indexOf(allowedSections[0]) > 0 && allowedSections[0].section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED]) {\r\n lastViewedSection = result[result.indexOf(allowedSections[0]) - 1].section;\r\n }\r\n else {\r\n lastViewedSection = allowedSections[0].section;\r\n }\r\n }\r\n }\r\n else {\r\n var lastEditedExtendedSection = result.filter(function (s) { return s.id == _this.sectionId; });\r\n if (lastEditedExtendedSection[0]) {\r\n lastViewedSection = result[result.indexOf(lastEditedExtendedSection[0])].section;\r\n }\r\n }\r\n }\r\n _this.setMenuItems(lastViewedSection);\r\n }\r\n else if (_this.selectedSection) {\r\n var currentSection = _this.sectionsList.filter(function (s) { return s.section.id == _this.selectedSection.id; })[0];\r\n if (currentSection && currentSection.section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED]) {\r\n var sectionsInModule = _this.sectionsList.filter(function (s) { return s.section.moduleId == _this.selectedSection.moduleId; });\r\n if (sectionsInModule.length > 0) {\r\n _this.setMenuItems(sectionsInModule[0].section);\r\n }\r\n }\r\n _this.getNextSection();\r\n }\r\n }).catch(function (response) {\r\n var msg = response.data.message.toLowerCase();\r\n if (msg.includes(\"the specified network name is no longer available\")\r\n || msg.includes(\"timeout\")) {\r\n _this.dialogService.confirm(\"Too low internet connection for taking this course\", {\r\n title: \"Low internet connection\",\r\n confirmButton: \"Ok\",\r\n hideCancelButton: true\r\n });\r\n }\r\n }).finally(function () {\r\n _this.isLoadingCourseData = false;\r\n });\r\n });\r\n };\r\n CourseDetailsController.prototype.loadBundle = function () {\r\n var _this = this;\r\n if (this.course.bundleId) {\r\n return this.bundleService.getBundle(this.course.bundleId, \"ALL\")\r\n .then(function (bundle) {\r\n _this.courseBundle = bundle;\r\n _this.changeBundleFilesDomain(_this.courseBundle);\r\n _this.composeRichTextFromLoadAtStartBundles();\r\n if (_this.courseLoadAtStartBundlesText) {\r\n return _this.$timeout(function () {\r\n return _this.getRichTextLoadedPromise(CourseDetailsController.COURSE_LOAD_AT_START_BUNDLES_RICH_TEXT_ID);\r\n }, 0);\r\n }\r\n return null;\r\n });\r\n }\r\n else {\r\n return this.$q.when(null);\r\n }\r\n };\r\n CourseDetailsController.prototype.changeBundleFilesDomain = function (bundle) {\r\n var baseUrl = new window.URL(AppProperties_1.AppProperties.baseUrl);\r\n bundle.files.forEach(function (file) {\r\n try {\r\n var fileUrl = new window.URL(file.url);\r\n if (fileUrl.hostname === baseUrl.hostname && fileUrl.hostname !== window.location.hostname) {\r\n fileUrl.hostname = window.location.hostname;\r\n file.url = fileUrl.toString();\r\n }\r\n }\r\n catch (e) {\r\n console.log(\"Error while parsing bundle files URL's\");\r\n }\r\n });\r\n };\r\n CourseDetailsController.prototype.loadProducts = function (courseId) {\r\n var _this = this;\r\n return this.purchaseService.getReferencedObjectRelatedProducts(courseId, 'COURSE')\r\n .then(function (products) {\r\n _this.products = angular.copy(products);\r\n return _this.products;\r\n });\r\n };\r\n CourseDetailsController.prototype.composeRichTextFromLoadAtStartBundles = function () {\r\n if (this.courseBundle) {\r\n this.courseLoadAtStartBundlesText = CourseDetailsUtils_1.CourseDetailsUtils.composeRichTextFromLoadAtStartBundles(this.courseBundle);\r\n }\r\n };\r\n CourseDetailsController.prototype.composeRichTextFromSlideBundle = function (cssFileKeys, jsFileKeys) {\r\n if (this.slideTemplatesBundle) {\r\n if (cssFileKeys.length != 0 || jsFileKeys.length != 0) {\r\n for (var i = 0; i < this.slideTemplatesBundle.files.length; i++) {\r\n var bundleFile = this.slideTemplatesBundle.files[i];\r\n if (cssFileKeys.indexOf(bundleFile.key) != -1 || jsFileKeys.indexOf(bundleFile.key) != -1) {\r\n this.slideTemplatesBundleText += StringBuilder_1.StringBuilder.interpolate(VhsSelectEmbeddedBundleDirective_1.VhsSelectEmbeddedBundleMaterialController.EMBEDDED_BUNDLE_TA_HTML)\r\n .with(\":bundleId\", RandomUtils_1.RandomUtils.generateRandomId(bundleFile.key + \"___\"))\r\n .with(\":bundleKey\", bundleFile.key)\r\n .build();\r\n }\r\n }\r\n }\r\n else {\r\n this.slideTemplatesBundleText = CourseDetailsUtils_1.CourseDetailsUtils.composeRichTextFromLoadAtStartBundles(this.slideTemplatesBundle);\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.recalculateProgressPercentage = function () {\r\n var _this = this;\r\n this.sectionsList.forEach(function (sectionInHierarchy, index) {\r\n if (sectionInHierarchy.level === 1) {\r\n CourseDetailsUtils_1.CourseDetailsUtils.calculateSectionCompletionPercentage(index, _this.sectionsList);\r\n }\r\n });\r\n this.modules.forEach(function (module) {\r\n var sum = 0;\r\n var count = 0;\r\n _this.sectionsMap.get(module.id).forEach(function (section) {\r\n sum += section.completionPercentage;\r\n count++;\r\n if (_this.courseBundle && section.section.audioFileId != null) {\r\n section.section.audioFileUrl = _this.courseBundle.filesMap.has(section.section.audioFileKey)\r\n ? _this.courseBundle.filesMap.get(section.section.audioFileKey).url\r\n : null;\r\n }\r\n });\r\n _this.modulesProgress.set(module.id, count == 0 ? 0 : Math.round(sum / count));\r\n });\r\n this.recalculateCourseProgress();\r\n };\r\n CourseDetailsController.prototype.loadCourse = function () {\r\n var _this = this;\r\n return this.courseService.get(this.courseId).then(function (result) {\r\n _this.course = angular.copy(result);\r\n _this.course.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n if (_this.course.businessUnitId) {\r\n _this.businessUnitsService.getBusinessUnitById(_this.course.businessUnitId).then(function (result) {\r\n _this.businessUnit = result;\r\n });\r\n }\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY);\r\n var courseBreadcrumb = _this.course.topic || _this.course.subjectName;\r\n courseBreadcrumb = courseBreadcrumb.length > 40 ? courseBreadcrumb.substring(0, 40) + \"...\" : courseBreadcrumb;\r\n PageHeaderHelper_1.PageHeader.set().header(courseBreadcrumb).update();\r\n _this.sectionsDepthLevel = _this.course.sectionsDepthLevel;\r\n if (_this.sectionsDepthLevel == undefined)\r\n _this.sectionsDepthLevel = Number.MAX_VALUE;\r\n return _this.course;\r\n });\r\n };\r\n CourseDetailsController.prototype.getCourseStartPermission = function () {\r\n var _this = this;\r\n return this.courseService.getCourseStartPermission(this.courseId)\r\n .then(function (result) {\r\n _this.course.permissions.start = result;\r\n return _this.course.permissions.start;\r\n });\r\n };\r\n CourseDetailsController.prototype.checkCourseStartDate = function () {\r\n if (this.course.startDate) {\r\n var date = new Date();\r\n this.isDateProper = moment(date).isAfter(this.course.startDate) ||\r\n moment(date).isSame(this.course.startDate);\r\n this.showStartButton = this.isDateProper && this.course.permissions.start;\r\n }\r\n else {\r\n this.showStartButton = this.course.permissions.start;\r\n this.isDateProper = true;\r\n }\r\n };\r\n CourseDetailsController.prototype.setMenuItems = function (lastViewedSection) {\r\n var _this = this;\r\n if (this.moduleId != null && this.sectionId != null &&\r\n this.sectionsMap.get(this.moduleId) != null && this.sectionsMap.get(this.moduleId).filter(function (s) { return s.section.id == _this.sectionId; }).length > 0 &&\r\n this.sectionsMap.get(this.moduleId).filter(function (s) { return s.section.id == _this.sectionId; })[0].section.status != SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED]) {\r\n this.setLeftMenuModule(this.getModuleById(this.moduleId));\r\n this.setLeftMenuItem(this.sectionsMap.get(this.moduleId).filter(function (s) { return s.section.id == _this.sectionId; })[0].section);\r\n }\r\n else if (lastViewedSection != null) {\r\n this.setLeftMenuModule(this.getModuleById(lastViewedSection.moduleId));\r\n this.setLeftMenuItem(this.sectionsMap.get(lastViewedSection.moduleId).filter(function (s) { return s.section.id == lastViewedSection.id; })[0].section);\r\n }\r\n else if (this.modules.length > 0 && this.sectionsList.length > 0) {\r\n this.setLeftMenuModule(this.modules[0]);\r\n if (this.sectionsMap.get(this.modules[0].id)[0]) {\r\n this.setLeftMenuItem(this.sectionsMap.get(this.modules[0].id)[0].section);\r\n }\r\n }\r\n else if (this.modules.length == 0 || this.sectionsList.length == 0) {\r\n this.isSlideLoading = false;\r\n }\r\n };\r\n CourseDetailsController.prototype.setLeftMenuModule = function (leftModule) {\r\n this.selectedModule = leftModule;\r\n this.menuKey.leftMenuModule = leftModule.id;\r\n this.menuKey.leftMenuModuleExpanded = leftModule.id;\r\n };\r\n CourseDetailsController.prototype.toggleModuleHiddenContentVisibility = function (moduleId) {\r\n if (this.selectedModule.id === moduleId) {\r\n this.isModuleHiddenContentVisible = !this.isModuleHiddenContentVisible;\r\n }\r\n else {\r\n this.isModuleHiddenContentVisible = true;\r\n }\r\n };\r\n CourseDetailsController.prototype.toggleCourseLeftMenuVisibility = function (type) {\r\n var _this = this;\r\n if (type === \"modal\") {\r\n $('#courseTabletProgress').modal('toggle');\r\n return;\r\n }\r\n if ($(window).width() >= 992) {\r\n this.isCourseLeftMenuShown = !this.isCourseLeftMenuShown;\r\n this.$rootScope.$broadcast(Event_1.Event.COURSE_TOGGLE_MENU_VISIBILITY);\r\n $(\".navbar-progress-bar > .closable-progress\").css(\"display\", \"none\");\r\n if (!this.isCourseLeftMenuShown) {\r\n setTimeout(function () { return _this.changeLeftClosableButton(75); }, 400);\r\n }\r\n else {\r\n setTimeout(function () { return _this.changeLeftClosableButton(); }, 400);\r\n }\r\n }\r\n else {\r\n $('#courseTabletProgress').modal('toggle');\r\n }\r\n };\r\n CourseDetailsController.prototype.isMaterialsListOverflowPreviewPanel = function () {\r\n if (!this.sectionMaterials || this.sectionMaterials.length == 0) {\r\n return false;\r\n }\r\n var materialsList = angular.element(document.getElementById(\"section-block-all-materials\"));\r\n var materialPreview = angular.element(document.getElementById(\"section-block-current-material\"));\r\n if (materialsList.length > 0 && materialPreview.length > 0) {\r\n var allMaterialsBlockTable = materialsList.first().find(\">:first-child\");\r\n if (allMaterialsBlockTable.length == 0) {\r\n return false;\r\n }\r\n return (allMaterialsBlockTable.innerHeight() - materialPreview.innerHeight()) >= 20;\r\n }\r\n else {\r\n return false;\r\n }\r\n };\r\n CourseDetailsController.prototype.goToTheModule = function (module) {\r\n if (!module || !this.courseStarted) {\r\n return;\r\n }\r\n var sections = this.sectionsMap.get(module.id);\r\n if (sections.length > 0) {\r\n this.menuKey.leftMenuModuleExpanded = module.id;\r\n this.setLeftMenuModule(module);\r\n this.setLeftMenuItem(sections[0].section);\r\n }\r\n };\r\n CourseDetailsController.prototype.setLeftMenuItem = function (section) {\r\n var _this = this;\r\n if (this.selectedSection.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION] &&\r\n parseInt(localStorage.getItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SECTION_KEY)) === this.selectedSection.id) {\r\n this.saveProgressOfMultimediaMaterial();\r\n }\r\n localStorage.setItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SECTION_KEY, section.id.toString());\r\n localStorage.removeItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.MATERIAL_KEY);\r\n localStorage.removeItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.TIMESTAMP_KEY);\r\n if (this.menuKey.leftMenuItem === section.id && this.menuKey.leftMenuItemType == section.typeKey || this.isSlideRemoving)\r\n return;\r\n if (section.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK]) {\r\n section = this.sectionsMap.get(section.moduleId).filter(function (s) { return s.section.parentId === section.id; })[0].section;\r\n }\r\n if (section.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.SLIDE]) {\r\n if (this.slideDeckSectionId != section.parentId) {\r\n this.slideDeckSectionId = section.parentId;\r\n this.slideTemplatesBundleLoading = true;\r\n var cssFileKeys = this.slideTemplateCssFileKeys(section.moduleId, section.parentId);\r\n var jsFileKeys = this.slideTemplateJsFileKeys(section.moduleId, section.parentId);\r\n this.loadSlideTemplatesBundle(cssFileKeys, jsFileKeys);\r\n }\r\n }\r\n else {\r\n this.slideTemplatesBundle = null;\r\n this.slideTemplatesBundleText = null;\r\n this.slideDeckSectionId = null;\r\n }\r\n this.isSlideBack = section && section == this.prevSection;\r\n var newSection = angular.copy(section);\r\n if (this.isCourseLoaded && CourseDetailsController.SLIDE_CHANGE_DELAY) {\r\n this.isSlideRemoving = true;\r\n this.$timeout(function () {\r\n _this.isSlideRemoving = false;\r\n _this.setLeftMenuItemInternal(newSection);\r\n }, CourseDetailsController.SLIDE_CHANGE_DELAY);\r\n }\r\n else {\r\n this.setLeftMenuItemInternal(newSection);\r\n }\r\n if (newSection.status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.SOS]) {\r\n INotifier_1.notifier.warning(\"The section was blocked after exceeding maximum number of attempts! Please, contact a support.\");\r\n }\r\n };\r\n CourseDetailsController.prototype.setLeftMenuItemInternal = function (section) {\r\n var _this = this;\r\n this.userNotesService.initialize(this.courseId, section.id, this.courseProgressId);\r\n var beforeSectionChangePromises = [];\r\n var sectionChangeDeferred = null;\r\n var sectionChangePromise = null;\r\n var sectionStatusUpdateDeferred = null;\r\n var sectionStatusUpdatePromise = null;\r\n if (!this.courseStarted) {\r\n sectionChangeDeferred = this.$q.defer();\r\n sectionChangePromise = sectionChangeDeferred.promise.then(function () {\r\n _this.$location\r\n .search(CoursesRouter_1.CoursesRouter.MODULE_PARAMETER, null)\r\n .search(CoursesRouter_1.CoursesRouter.SECTION_PARAMETER, null)\r\n .replace();\r\n return _this.getRichTextLoadedPromise(CourseDetailsController.LANDING_PAGE_RICH_TEXT_ID);\r\n });\r\n }\r\n else if (this.isSectionViewAllowed(section)) {\r\n sectionChangeDeferred = this.$q.defer();\r\n sectionChangePromise = sectionChangeDeferred.promise.then(function () {\r\n _this.selectedSection = angular.copy(section);\r\n if (_this.waitLmsTimeoutPromise) {\r\n _this.$timeout.cancel(_this.waitLmsTimeoutPromise);\r\n _this.waitLmsTimeoutPromise = null;\r\n }\r\n if (_this.selectedSection.summary == null || _this.selectedSection.summary == undefined\r\n || _this.selectedSection.summary.indexOf(\"ta-vhs-sandbox\") == -1) {\r\n _this.sectionStatusUpdateViaLmsApiOnly = false;\r\n }\r\n else {\r\n _this.sectionStatusUpdateViaLmsApiOnly = undefined;\r\n }\r\n var courseBreadcrumb = _this.course.topic || _this.course.subjectName;\r\n courseBreadcrumb = courseBreadcrumb.length > 40 ? courseBreadcrumb.substring(0, 40) + \"...\" : courseBreadcrumb;\r\n var sectionName = _this.selectedSection.name.length > 40 ?\r\n _this.selectedSection.name.substring(0, 40) + \"...\"\r\n : _this.selectedSection.name;\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header(sectionName)\r\n .addParentLink(courseBreadcrumb, \"#\" + _this.coursesRouter.sectionDetailsRoute(_this.courseId, _this.modules[0].id, _this.sectionsList[0].id))\r\n .update();\r\n _this.logLocationChange();\r\n _this.$location\r\n .search(CoursesRouter_1.CoursesRouter.MODULE_PARAMETER, section.moduleId)\r\n .search(CoursesRouter_1.CoursesRouter.SECTION_PARAMETER, section.id)\r\n .replace();\r\n if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE]) {\r\n _this.menuKey.leftMenuItem = section.parentId;\r\n _this.menuKey.leftMenuItemType = SectionType_1.SectionType[SectionType_1.SectionType.SLIDE];\r\n _this.menuKey.leftMenuModule = _this.menuKey.leftMenuModuleExpanded;\r\n }\r\n else {\r\n _this.menuKey.leftMenuItem = section.id;\r\n _this.menuKey.leftMenuItemType = section.typeKey;\r\n _this.menuKey.leftMenuModule = _this.menuKey.leftMenuModuleExpanded;\r\n }\r\n _this.slideDeckIsFirst = false;\r\n _this.material = {};\r\n _this.resetLMSState();\r\n _this.getNextSection();\r\n _this.getPrevSection();\r\n var onSectionChangePromises = [];\r\n if (_this.isSelectedSectionTypeInfo() || _this.isSelectedSectionTypeInfoWithManualCompletion()) {\r\n onSectionChangePromises.push(_this.loadSectionMaterials());\r\n }\r\n var richTextReadyPromise = _this.getRichTextLoadedPromise(CourseDetailsController.SECTION_SUMMARY_RICH_TEXT_ID);\r\n if (richTextReadyPromise) {\r\n onSectionChangePromises.push(richTextReadyPromise);\r\n }\r\n return _this.$q.all(onSectionChangePromises);\r\n });\r\n if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]\r\n && section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED]) {\r\n var openedSectionId = section.id;\r\n var openedModuleId = section.moduleId;\r\n sectionStatusUpdateDeferred = this.$q.defer();\r\n sectionStatusUpdatePromise = sectionStatusUpdateDeferred.promise.then(function () {\r\n return _this.setSectionStatusOpenedIfNeeded(openedSectionId, openedModuleId);\r\n });\r\n }\r\n }\r\n this.isSlideLoading = true;\r\n this.slideLoadingCounter++;\r\n this.recalculateCourseProgress();\r\n this.$q.all(beforeSectionChangePromises)\r\n .then(function () {\r\n if (sectionChangeDeferred && sectionChangePromise) {\r\n sectionChangeDeferred.resolve();\r\n return sectionChangePromise;\r\n }\r\n else {\r\n return null;\r\n }\r\n })\r\n .finally(function () {\r\n _this.slideLoadingCounter--;\r\n if (_this.slideLoadingCounter == 0) {\r\n _this.isSlideLoading = false;\r\n }\r\n _this.$timeout(function () {\r\n var slideElement = $(\".course-slide\");\r\n if (!_this.isSlideLoading && slideElement.hasClass(\"vhs-slide-loading\")) {\r\n slideElement.removeClass(\"vhs-slide-loading\");\r\n }\r\n }, 1000);\r\n setTimeout(function () { return $(\"#main-course-left-bar\").height($('.vhs-wrapper__content').height()); }, 100);\r\n _this.audioFileUrl = section.audioFileUrl;\r\n if (_this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE]) {\r\n if (!_this.leaveCoursePage) {\r\n _this.countDelayTime(_this.selectedSection.delay);\r\n }\r\n }\r\n else {\r\n if (!_this.leaveCoursePage && _this.courseProgressId && _this.selectedSection && _this.selectedSection.id) {\r\n _this.updateLastViewedSection(_this.courseId, _this.courseProgressId, _this.selectedSection.id).then(function (courseProgress) {\r\n angular.copy(courseProgress, _this.courseProgress);\r\n });\r\n }\r\n _this.disableNextButton = false;\r\n _this.isSlideShowStarted = false;\r\n }\r\n _this.$timeout(function () { return _this.initEventOnClick(); }, 1500);\r\n if (_this.selectedSection && _this.selectedSection.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.SLIDE]) {\r\n var section_1 = _this.selectedSection;\r\n _this.$timeout(function () {\r\n if (_this.selectedSection && section_1.id === _this.selectedSection.id) {\r\n _this.slideTemplatesBundleLoading = false;\r\n }\r\n }, 1500);\r\n }\r\n })\r\n .then(function () {\r\n if (!_this.isSlideLoading && sectionStatusUpdateDeferred && sectionStatusUpdatePromise) {\r\n _this.runSectionStatusUpdateDeferred(sectionStatusUpdateDeferred, sectionStatusUpdatePromise);\r\n }\r\n });\r\n };\r\n CourseDetailsController.prototype.runSectionStatusUpdateDeferred = function (deferred, statusUpdatedPromise) {\r\n var _this = this;\r\n var newPromise = statusUpdatedPromise.then(function () {\r\n if (_this.sectionStatusUpdatePromise == newPromise) {\r\n _this.sectionStatusUpdatePromise = null;\r\n }\r\n else {\r\n }\r\n });\r\n if (this.sectionStatusUpdatePromise) {\r\n this.sectionStatusUpdatePromise.finally(function () {\r\n deferred.resolve();\r\n return newPromise;\r\n });\r\n this.sectionStatusUpdatePromise = newPromise;\r\n }\r\n else {\r\n this.sectionStatusUpdatePromise = newPromise;\r\n deferred.resolve();\r\n }\r\n };\r\n CourseDetailsController.prototype.getRichTextLoadedPromise = function (richTextId) {\r\n var _this = this;\r\n var deferred = this.$q.defer();\r\n var eventData = {\r\n richTextElementId: richTextId,\r\n richTextBindController: null\r\n };\r\n var findRichTextController = function () {\r\n _this.$scope.$broadcast(Event_1.Event.TA_FIND_RICH_TEXT_BIND_CONTROLLER, eventData);\r\n return eventData.richTextBindController;\r\n };\r\n var waitForContentLoad = function (richTextBindController) {\r\n return richTextBindController.waitForContentLoaded()\r\n .finally(function () {\r\n deferred.resolve();\r\n });\r\n };\r\n var resolveDeferredInAnyCase = function () {\r\n var richTextBindController = findRichTextController();\r\n if (richTextBindController) {\r\n waitForContentLoad(richTextBindController);\r\n }\r\n else {\r\n deferred.resolve();\r\n }\r\n };\r\n var richTextBindController = findRichTextController();\r\n if (richTextBindController) {\r\n waitForContentLoad(richTextBindController);\r\n }\r\n else if (this.isCourseLoaded) {\r\n this.$timeout(function () {\r\n resolveDeferredInAnyCase();\r\n }, 0);\r\n }\r\n else {\r\n var unbindWatcher = this.$scope.$watch(\"vm.isCourseLoaded\", function (value) {\r\n if (value) {\r\n unbindWatcher();\r\n _this.$timeout(function () {\r\n resolveDeferredInAnyCase();\r\n }, 0);\r\n }\r\n });\r\n }\r\n return deferred.promise;\r\n };\r\n CourseDetailsController.prototype.isSectionViewAllowed = function (section) {\r\n return this.courseStarted && section.status !== 'NOT_ALLOWED';\r\n };\r\n CourseDetailsController.prototype.setSectionStatusOpenedIfNeeded = function (sectionId, moduleId, initiatedBySco) {\r\n var _this = this;\r\n if (initiatedBySco === void 0) { initiatedBySco = false; }\r\n this.updateSectionProgressPromise = this.$q.when(this.updateSectionProgressPromise)\r\n .then(function () {\r\n return _this.setSectionStatusOpenedIfNeededInternal(sectionId, moduleId, initiatedBySco);\r\n })\r\n .catch(function (error) {\r\n if (error == _this.ERROR_INTERNET_DISCONNECTED && initiatedBySco) {\r\n _this.setStatusOpenedRetry(sectionId, moduleId);\r\n }\r\n });\r\n return this.updateSectionProgressPromise;\r\n };\r\n CourseDetailsController.prototype.setStatusOpenedRetry = function (sectionId, moduleId) {\r\n var _this = this;\r\n this.$timeout(function () {\r\n _this.setSectionStatusOpenedIfNeededInternal(sectionId, moduleId)\r\n .catch(function (error) {\r\n if (error == _this.ERROR_INTERNET_DISCONNECTED) {\r\n _this.setStatusOpenedRetry(sectionId, moduleId);\r\n }\r\n });\r\n }, this.SUBMIT_SECTION_PROGRESS_RETRY_INTERVAL);\r\n };\r\n CourseDetailsController.prototype.setSectionStatusOpenedIfNeededInternal = function (sectionId, moduleId, viaLms) {\r\n var _this = this;\r\n if (viaLms === void 0) { viaLms = false; }\r\n var sectionForUpdate = CourseDetailsUtils_1.CourseDetailsUtils.findSection(this.sectionsMap, this.selectedSection.moduleId, this.selectedSection.id);\r\n if (sectionForUpdate && sectionForUpdate.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED]) {\r\n var oldStatus = sectionForUpdate.status;\r\n var newStatus = SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED];\r\n if (this.sectionStatusUpdateViaLmsApiOnly != undefined || viaLms) {\r\n if (!this.sectionStatusUpdateViaLmsApiOnly || viaLms) {\r\n if ((sectionForUpdate.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION])\r\n && (sectionForUpdate.summary && sectionForUpdate.summary.indexOf(\"ta-vhs-embedded-material\") > 0)) {\r\n this.progressService.getSectionProgressExtensionForMaterialProgress(this.courseId, this.courseProgressId, sectionId)\r\n .then(function (result) {\r\n if (result && result.length > 0) {\r\n if (result.filter(function (mp) { return !mp.isCompleted; }).length == 0) {\r\n _this.logStatusChange(sectionId, oldStatus, newStatus, _this.sectionStatusUpdateViaLmsApiOnly, viaLms);\r\n return _this.setSectionStatusOpened(sectionId, moduleId);\r\n }\r\n }\r\n else {\r\n _this.logStatusChange(sectionId, oldStatus, newStatus, _this.sectionStatusUpdateViaLmsApiOnly, viaLms);\r\n return _this.setSectionStatusOpened(sectionId, moduleId);\r\n }\r\n });\r\n }\r\n else {\r\n this.logStatusChange(sectionId, oldStatus, newStatus, this.sectionStatusUpdateViaLmsApiOnly, viaLms);\r\n return this.setSectionStatusOpened(sectionId, moduleId);\r\n }\r\n }\r\n }\r\n else if (this.selectedSection.id == sectionId && this.selectedSection.moduleId == moduleId &&\r\n this.selectedSection.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED] &&\r\n this.selectedSection.summary.indexOf(\".html\") < 0) {\r\n this.waitLmsTimeoutPromise = this.$timeout(function () {\r\n return _this.setSectionStatusOpened(sectionId, moduleId);\r\n }, CourseDetailsController.WAIT_LMS_INTERVAL);\r\n return this.waitLmsTimeoutPromise;\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.setSectionStatusOpened = function (sectionId, moduleId) {\r\n var _this = this;\r\n if (this.recursionDepth < CourseDetailsController.MAX_RECURSION_DEPTH) {\r\n this.recursionDepth++;\r\n return this.progressService.markSectionAsOpened(this.courseId, sectionId, this.courseProgressId)\r\n .then(function (updatedSectionsProgress) {\r\n _this.recursionDepth = 0;\r\n _this.updateSectionStatusesFromServerResults(updatedSectionsProgress);\r\n _this.recalculateProgressPercentage();\r\n _this.getNextSection();\r\n })\r\n .catch(function (response) {\r\n if (response && response.data && response.data.error) {\r\n switch (response.data.error) {\r\n case \"error.course.progress.section.already.opened\":\r\n return _this.progressService.getSectionsProgress(_this.courseId, _this.courseProgressId)\r\n .then(function (updatedSectionsProgress) {\r\n _this.updateSectionStatusesFromServerResults(updatedSectionsProgress);\r\n _this.recalculateProgressPercentage();\r\n _this.getNextSection();\r\n });\r\n case \"error.course.progress.open.section.incorrect.status\":\r\n INotifier_1.notifier.error(\"Section cannot be opened according to current status\");\r\n break;\r\n case \"stale.object.state\":\r\n case \"optimistic.locking.failed.catched\":\r\n _this.setSectionStatusOpened(sectionId, moduleId);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n };\r\n CourseDetailsController.prototype.updateLastViewedSection = function (courseId, courseProgressId, sectionId, recursionDepth) {\r\n var _this = this;\r\n if (recursionDepth === void 0) { recursionDepth = 0; }\r\n if (recursionDepth < CourseDetailsController.MAX_RECURSION_DEPTH) {\r\n return this.progressService.updateLastViewedSection(courseId, courseProgressId, sectionId)\r\n .catch(function (response) {\r\n if (response && response.data && response.data.error) {\r\n switch (response.data.error) {\r\n case \"stale.object.state\":\r\n case \"optimistic.locking.failed.catched\":\r\n return _this.updateLastViewedSection(courseId, courseProgressId, sectionId, recursionDepth + 1);\r\n default:\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n };\r\n CourseDetailsController.prototype.updateSectionStatusesFromServerResults = function (updatedSectionsProgress) {\r\n var _this = this;\r\n updatedSectionsProgress.forEach(function (sectionProgress) {\r\n _this.modules.forEach(function (module) {\r\n if (_this.sectionsMap.get(module.id).filter(function (s) { return s.section.id == sectionProgress.sectionId; }).length > 0) {\r\n _this.sectionsMap.get(module.id).filter(function (s) { return s.section.id == sectionProgress.sectionId; })[0].section.status = sectionProgress.status;\r\n }\r\n });\r\n var section = _this.sectionsList.filter(function (s) { return s.section.id == sectionProgress.sectionId; }).pop();\r\n if (section) {\r\n section.section.status = sectionProgress.status;\r\n }\r\n _this.recalculateCourseProgress();\r\n });\r\n };\r\n CourseDetailsController.prototype.getNextSection = function () {\r\n this.nextSection = CourseDetailsUtils_1.CourseDetailsUtils.findNextSection(this.selectedSection, this.sectionsMap, this.modules);\r\n };\r\n CourseDetailsController.prototype.getModuleById = function (moduleId) {\r\n return CourseDetailsUtils_1.CourseDetailsUtils.findModuleById(moduleId, this.modules);\r\n };\r\n CourseDetailsController.prototype.redirectToNextSection = function () {\r\n if (!this.quizPassing) {\r\n this.menuKey.leftMenuModuleExpanded = this.nextSection.moduleId;\r\n this.setLeftMenuModule(this.getModuleById(this.nextSection.moduleId));\r\n this.setLeftMenuItem(this.nextSection);\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"You can't leave this page unless you complete or cancel the quiz (survey or flashcards)\");\r\n }\r\n };\r\n CourseDetailsController.prototype.getPrevSection = function () {\r\n this.prevSection = CourseDetailsUtils_1.CourseDetailsUtils.findPrevSection(this.selectedSection, this.sectionsMap, this.modules);\r\n if (this.prevSection.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK] && this.prevSection.coursewideSortPath.charAt(9)\r\n && this.prevSection.coursewideSortPath.charAt(9) === '1') {\r\n this.slideDeckIsFirst = true;\r\n }\r\n };\r\n CourseDetailsController.prototype.redirectToPrevSection = function () {\r\n if (!this.quizPassing) {\r\n this.isSlideShowStarted = false;\r\n this.disableNextButton = false;\r\n this.delayCounted = true;\r\n this.menuKey.leftMenuModuleExpanded = this.prevSection.moduleId;\r\n this.setLeftMenuModule(this.getModuleById(this.prevSection.moduleId));\r\n this.setLeftMenuItem(this.prevSection);\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"You can't leave this page unless you complete or cancel the quiz (survey or flashcards)\");\r\n }\r\n };\r\n CourseDetailsController.prototype.isLeftMenuModuleActive = function (topMenuKey, leftModule) {\r\n return this.menuKey.leftMenuModuleExpanded == leftModule;\r\n };\r\n CourseDetailsController.prototype.isLeftMenuItemActive = function (topMenuKey, leftModule, item) {\r\n return this.menuKey.leftMenuModule == leftModule\r\n && this.menuKey.leftMenuItem == item;\r\n };\r\n CourseDetailsController.prototype.isSelectedSectionTypeInfo = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION];\r\n };\r\n CourseDetailsController.prototype.isSelectedSectionTypeInfoWithManualCompletion = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION_WITH_MANUAL_COMPLETION];\r\n };\r\n CourseDetailsController.prototype.isSelectedSectionTypeQuizOrSurveyOrFlashcard = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.QUIZ] ||\r\n this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.SURVEY] ||\r\n this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD];\r\n };\r\n CourseDetailsController.prototype.isSelectedSectionTypeWebinar = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR];\r\n };\r\n CourseDetailsController.prototype.isSelectedSectionTypeProblemSolution = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.PROBLEM_SOLUTION];\r\n };\r\n CourseDetailsController.prototype.isSelectedSectionTypeILT = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.ILT];\r\n };\r\n CourseDetailsController.prototype.isSelectedSectionTypeSlideDeckOrSlide = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK] ||\r\n this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.SLIDE];\r\n };\r\n CourseDetailsController.prototype.isSelectedListWebinar = function () {\r\n return this.showListMeetings = false;\r\n };\r\n CourseDetailsController.prototype.isSelectedListMeeting = function () {\r\n return this.showListMeetings = true;\r\n };\r\n CourseDetailsController.prototype.loadSectionMaterials = function () {\r\n var _this = this;\r\n if (this.selectedSection.materialsCount > 0) {\r\n var promise;\r\n if (this.sectionMaterialsCache.has(this.selectedSection.id)) {\r\n promise = this.$q.when(this.sectionMaterialsCache.get(this.selectedSection.id));\r\n }\r\n else {\r\n var sectionId = this.selectedSection.id;\r\n promise = this.courseService.getSectionUploadedOrLinkMaterials(this.courseId, this.menuKey.leftMenuModule, this.selectedSection.id)\r\n .then(function (result) {\r\n _this.sectionMaterialsCache.set(sectionId, result);\r\n return result;\r\n });\r\n }\r\n return promise.then(function (result) {\r\n _this.sectionMaterials = result;\r\n if (_this.sectionMaterials.length > 0) {\r\n _this.showMaterial(_this.sectionMaterials[0]);\r\n }\r\n });\r\n }\r\n else {\r\n this.sectionMaterials = [];\r\n this.material = {};\r\n return this.$q.when();\r\n }\r\n };\r\n CourseDetailsController.prototype.showMaterial = function (material) {\r\n var _this = this;\r\n this.materialType = \"\";\r\n this.materialLoaded = false;\r\n angular.copy(material, this.material);\r\n this.selectedMaterialId = material.id;\r\n this.isViewAllowed = false;\r\n this.$timeout(function () {\r\n _this.materialLoaded = true;\r\n if (_this.isYoutubeLink(_this.material)) {\r\n _this.materialType = 'YOUTUBE';\r\n }\r\n else if (_this.isVimeoLink(_this.material)) {\r\n _this.materialType = 'VIMEO';\r\n }\r\n else if (_this.isAwsLink(_this.material)) {\r\n _this.materialType = \"VIDEO\";\r\n }\r\n else {\r\n _this.materialType = _this.material.typeKey;\r\n }\r\n _this.isMaterialEmpty = _this.material.id && _this.material.typeKey !== MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.LINK] &&\r\n (!_this.material.fileStatus || _this.material.fileStatus === 'EMPTY');\r\n _this.isMaterialNotReady = !_this.isMaterialEmpty && _this.material.id &&\r\n _this.material.typeKey !== MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.LINK] && _this.material.fileStatus\r\n && _this.material.fileStatus !== 'EMPTY' && _this.material.fileStatus !== 'READY';\r\n _this.isViewAllowed = _this.materialLoaded && !_this.isMaterialEmpty && !_this.isMaterialNotReady;\r\n _this.multimediaSources = [{\r\n src: _this.isYoutubeLink(_this.material) || _this.isAwsLink(_this.material) ? _this.material.link : (_this.material.downloadUrl || ''),\r\n type: _this.isYoutubeLink(_this.material) ? \"video/youtube\" : (_this.isAwsLink(_this.material) ? \"video/mp4\" : _this.material.contentType)\r\n }];\r\n _this.updateLayoutForMaterials();\r\n }, 0);\r\n };\r\n CourseDetailsController.prototype.updateLayoutForMaterials = function () {\r\n var contentTabElement = $(\"#course-tab-content\");\r\n var elementCheck = $(\"#material__links-item-\" + (this.sectionMaterials.length - 1));\r\n if (elementCheck.hasClass(\"active\")) {\r\n var outerHeightAllMaterialsElements = 0;\r\n $(\".course-section-content-learning-tab .course-section-content-learning__links-item\")\r\n .not(\".course-section-content-learning__gag\")\r\n .each(function () {\r\n outerHeightAllMaterialsElements += $(this).outerHeight();\r\n });\r\n if (outerHeightAllMaterialsElements < $(\"#myTabContent\").height()) {\r\n $(\"#material__links-item-\" + (this.sectionMaterials.length - 1) + \" a.nav-link\")\r\n .addClass(\"content__big-size\");\r\n contentTabElement.removeClass(\"tab-pane-last\");\r\n }\r\n else {\r\n $(\"#material__links-item-\" + (this.sectionMaterials.length - 1) + \" a.nav-link\")\r\n .removeClass(\"content__big-size\");\r\n contentTabElement.addClass(\"tab-pane-last\");\r\n }\r\n }\r\n else {\r\n contentTabElement.removeClass(\"tab-pane-last\");\r\n }\r\n };\r\n CourseDetailsController.prototype.isYoutubeLink = function (material) {\r\n return material.typeId == 3 && ObjectTypeUtils_1.ObjectTypeUtils.isYoutubeUrl(material.link);\r\n };\r\n CourseDetailsController.prototype.isVimeoLink = function (material) {\r\n return material.typeId == 3 && ObjectTypeUtils_1.ObjectTypeUtils.isVimeoUrl(material.link);\r\n };\r\n CourseDetailsController.prototype.isAwsLink = function (material) {\r\n return material.typeId == 3 && ObjectTypeUtils_1.ObjectTypeUtils.isAwsUrl(material.link);\r\n };\r\n CourseDetailsController.prototype.getMaterialTypeClass = function (materialTypeKey) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialGlyphiconClassFromKey(materialTypeKey);\r\n };\r\n CourseDetailsController.prototype.getCourseProgress = function () {\r\n var _this = this;\r\n this.courseProgressId = this.sessionStorageWrapper.get(this.progressService.COURSE_PROGRESS_ID_STORAGE_KEY);\r\n return this.progressService.getCourseProgress(this.courseId, this.courseProgressId)\r\n .then(function (result) {\r\n if (_this.courseProgressId != null && result.participationFormId != null) {\r\n _this.wantToSubmitParticipationForm = true;\r\n }\r\n _this.initializeCourseProgress(result);\r\n return _this.courseProgress;\r\n });\r\n };\r\n CourseDetailsController.prototype.clearAll = function () {\r\n this.menuKey = {\r\n leftMenuModule: null,\r\n leftMenuModuleExpanded: null,\r\n leftMenuItem: null,\r\n innerItem: null,\r\n };\r\n this.modules = [];\r\n this.selectedModule = {};\r\n this.sectionsMap = new Map();\r\n this.selectedSection = {};\r\n this.prevSection = {};\r\n this.nextSection = {};\r\n this.sectionMaterials = [];\r\n this.material = {};\r\n this.multimediaSources = [];\r\n };\r\n CourseDetailsController.prototype.startCourse = function () {\r\n var _this = this;\r\n if (this.disableParticipationForm) {\r\n return;\r\n }\r\n this.isLoadingStartCourse = true;\r\n this.disableParticipationForm = true;\r\n var promise = (this.wantToSubmitParticipationForm)\r\n ? this.progressService.startCourse(this.courseId, this.participationFormData)\r\n : this.progressService.startCourse(this.courseId);\r\n promise.then(function (result) {\r\n _this.disableParticipationForm = false;\r\n _this.initializeCourseProgress(result);\r\n _this.loadSections(true, true);\r\n if (_this.wantToSubmitParticipationForm) {\r\n INotifier_1.notifier.success(\"Participation form data have been submitted\");\r\n }\r\n _this.unbindTopTabsCustomActions();\r\n }).catch(function (response) {\r\n _this.disableParticipationForm = false;\r\n if (response.data.error === \"error.user.already.start.course\") {\r\n _this.$window.location.reload();\r\n }\r\n else {\r\n INotifier_1.notifier.commonError(response);\r\n }\r\n }).finally(function () {\r\n _this.isLoadingStartCourse = false;\r\n });\r\n };\r\n CourseDetailsController.prototype.initializeCourseProgress = function (courseProgress) {\r\n this.courseProgress = angular.copy(courseProgress);\r\n this.courseProgressId = this.courseProgress.id;\r\n this.sessionStorageWrapper.put(this.progressService.COURSE_PROGRESS_ID_STORAGE_KEY, this.courseProgressId);\r\n this.courseStarted = (courseProgress.status && courseProgress.status !== CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED]);\r\n };\r\n CourseDetailsController.prototype.redirectToSection = function ($event) {\r\n if (this.courseStarted && this.modules.length > 0 && this.menuKey.leftMenuItem) {\r\n if ($event.keyCode == 37 && this.prevSection.id) {\r\n this.redirectToPrevSection();\r\n }\r\n if ($event.keyCode == 39 && this.nextSection.id && this.nextSection.status !== 'NOT_ALLOWED') {\r\n this.redirectToNextSection();\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.loadParticipationForm = function () {\r\n var _this = this;\r\n return this.commonService.getParticipationForm(this.courseId, 'COURSE')\r\n .then(function (result) {\r\n _this.participationForm = angular.copy(result);\r\n });\r\n };\r\n CourseDetailsController.prototype.startWithParticipationForm = function () {\r\n this.initializeParticipationForm();\r\n this.showParticipationForm = true;\r\n this.wantToSubmitParticipationForm = true;\r\n };\r\n CourseDetailsController.prototype.initializeParticipationForm = function () {\r\n var _this = this;\r\n this.participationFormData = {};\r\n this.participationForm.fields.forEach(function (field) {\r\n _this.participationFormData[field.fieldKey] = \"\";\r\n });\r\n };\r\n CourseDetailsController.prototype.deinitializeParticipationForm = function () {\r\n this.participationFormData = null;\r\n };\r\n CourseDetailsController.prototype.onChangeWantToSubmit = function () {\r\n if (this.wantToSubmitParticipationForm) {\r\n this.initializeParticipationForm();\r\n }\r\n else {\r\n this.deinitializeParticipationForm();\r\n }\r\n };\r\n CourseDetailsController.prototype.cancelParticipationForm = function () {\r\n this.showParticipationForm = false;\r\n };\r\n CourseDetailsController.prototype.isParticipationFormValid = function () {\r\n var _this = this;\r\n if (this.wantToSubmitParticipationForm) {\r\n var formValid = true;\r\n this.participationForm.fields.forEach(function (field) {\r\n if (_this.participationFormData[field.fieldKey] == \"\") {\r\n formValid = false;\r\n }\r\n });\r\n return formValid;\r\n }\r\n else {\r\n return true;\r\n }\r\n };\r\n CourseDetailsController.prototype.loadCourseCertificates = function () {\r\n var _this = this;\r\n return this.certificateService.getCourseCertificateTemplates(this.courseId).then(function (certificates) {\r\n _this.courseCertificates.splice(0);\r\n certificates.forEach(function (c) {\r\n _this.courseCertificates.push({\r\n id: c.certificateTemplateId,\r\n name: c.certificateTemplateName\r\n });\r\n });\r\n if (certificates.length > 0) {\r\n _this.certificateParameters.certificateId = certificates[0].certificateTemplateId;\r\n }\r\n });\r\n };\r\n CourseDetailsController.prototype.isLastSectionInCourse = function (sectionId) {\r\n return (this.menuKey.leftMenuModuleExpanded == this.modules[this.modules.length - 1].id &&\r\n this.sectionsMap.get(this.menuKey.leftMenuModuleExpanded) != null &&\r\n (sectionId || this.selectedSection.id) == this.sectionsMap.get(this.menuKey.leftMenuModuleExpanded)[this.sectionsMap.get(this.menuKey.leftMenuModuleExpanded).length - 1].section.id);\r\n };\r\n CourseDetailsController.prototype.getCertificateParameters = function () {\r\n return {\r\n courseId: this.courseId,\r\n userId: this.currentUser.id,\r\n progressId: this.courseProgressId,\r\n certificateId: this.certificateParameters.certificateId,\r\n format: this.certificateParameters.format,\r\n };\r\n };\r\n CourseDetailsController.prototype.getCertificate = function (download) {\r\n var _this = this;\r\n var parameters = this.getCertificateParameters();\r\n if (download) {\r\n this.courseService.downloadCertificate(parameters).then(function (result) { return _this.$window.open(result); });\r\n }\r\n else {\r\n parameters.format = 'png';\r\n this.courseService.downloadCertificate(parameters).then(function (result) { return _this.certificateContent = \"\"; });\r\n }\r\n };\r\n CourseDetailsController.prototype.saveCertificateForUser = function () {\r\n this.courseService.saveCertificateForUser(this.getCertificateParameters()).then(function (result) { return INotifier_1.notifier.success(\"The certificate has been successfully saved\"); });\r\n };\r\n CourseDetailsController.prototype.loadLandingPage = function () {\r\n var _this = this;\r\n return this.courseService.getLandingPage(this.courseId)\r\n .then(function (result) {\r\n _this.landingPage = angular.copy(result);\r\n });\r\n };\r\n CourseDetailsController.prototype.loadRelatedLearningPathsToStart = function () {\r\n var _this = this;\r\n return this.courseService.getRelatedLearningPathsToStart(this.courseId)\r\n .then(function (learningPaths) {\r\n _this.relatedLearningPathsToStart = angular.copy(learningPaths);\r\n return _this.relatedLearningPathsToStart;\r\n });\r\n };\r\n CourseDetailsController.prototype.hideMenu = function () {\r\n if (this.menuShow) {\r\n $('#topMenu').hide();\r\n $('#leftMenu').hide();\r\n this.menuShow = false;\r\n }\r\n else {\r\n $('#topMenu').show();\r\n $('#leftMenu').show();\r\n this.menuShow = true;\r\n }\r\n };\r\n CourseDetailsController.prototype.getTemplateForInclude = function (templateName) {\r\n return this.url.template(templateName);\r\n };\r\n CourseDetailsController.prototype.leaveFullScreenMode = function () {\r\n this.fullScreenMode = false;\r\n this.$location.search(CourseDetailsController.FULL_SCREEN_PARAMETER, null).replace();\r\n };\r\n CourseDetailsController.prototype.getModulePreviewImageBundle = function (module) {\r\n if (this.courseBundle == undefined) {\r\n return undefined;\r\n }\r\n if (!this.courseBundle || !module || !module.id) {\r\n return null;\r\n }\r\n var fileKey = StringBuilder_1.StringBuilder.interpolate(CourseDetailsController.MODULE_PREVIEW_IMAGE_BUNDLE_FILE_TEMPLATE)\r\n .with(\":index\", module.sortIndex)\r\n .build();\r\n if (this.courseBundle.filesMap.has(fileKey)) {\r\n return this.courseBundle.filesMap.get(fileKey);\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n CourseDetailsController.prototype.resetLMSState = function () {\r\n this.showQuizInfoSection = true;\r\n this.showQuizResultsSection = true;\r\n this.showQuizStartSection = true;\r\n this.showLandingPageStartCourseButton = true;\r\n };\r\n CourseDetailsController.prototype.logLocationChange = function () {\r\n var newPath = this.$location.path();\r\n var newSectionId = this.$location.search()[CoursesRouter_1.CoursesRouter.SECTION_PARAMETER] || null;\r\n this.logSectionPathChange(this.logOldSectionId, newSectionId, this.logOldPath, newPath, this.logBeginSectionViewTimestamp);\r\n if (this.logOldSectionId == null || this.logOldSectionId != newSectionId) {\r\n this.logBeginSectionViewTimestamp = Date.now();\r\n this.logOldPath = newPath;\r\n this.logOldSectionId = newSectionId;\r\n }\r\n };\r\n CourseDetailsController.prototype.logSectionPathChange = function (oldSectionId, newSectionId, oldLocationPath, newLocationPath, beginTimestamp) {\r\n if (beginTimestamp && oldSectionId) {\r\n if (oldSectionId !== newSectionId || oldLocationPath !== newLocationPath) {\r\n var section = CourseDetailsUtils_1.CourseDetailsUtils.findSectionById(this.sectionsList, oldSectionId);\r\n if (section && section.status !== SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED]) {\r\n this.courseActionLogService.create({\r\n courseId: this.courseId,\r\n courseProgressId: this.courseProgressId,\r\n sectionId: oldSectionId,\r\n courseActionType: CourseActionType_1.CourseActionType.SECTION_VIEW,\r\n beginTimestamp: beginTimestamp,\r\n endTimestamp: Date.now()\r\n });\r\n }\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.logStatusChange = function (sectionId, oldStatus, newStatus, sectionStatusUpdateViaLmsApiOnly, viaLms) {\r\n try {\r\n var dataExtension;\r\n var dataExtensionJSON;\r\n var operationDate = Date.now();\r\n try {\r\n dataExtension = {\r\n oldStatus: oldStatus,\r\n newStatus: newStatus,\r\n sectionStatusUpdateViaLmsApiOnly: sectionStatusUpdateViaLmsApiOnly,\r\n viaLms: viaLms\r\n };\r\n dataExtensionJSON = JSON.stringify(dataExtension);\r\n }\r\n catch (e) {\r\n var errorData = {\r\n error: \"Error while section data serializing.\"\r\n };\r\n dataExtension = {\r\n oldStatus: oldStatus,\r\n newStatus: newStatus,\r\n sectionStatusUpdateViaLmsApiOnly: sectionStatusUpdateViaLmsApiOnly,\r\n viaLms: viaLms,\r\n data: errorData\r\n };\r\n dataExtensionJSON = JSON.stringify(dataExtension);\r\n }\r\n this.courseActionLogService.create({\r\n courseId: this.courseId,\r\n courseProgressId: this.courseProgressId,\r\n sectionId: sectionId,\r\n courseActionType: CourseActionType_1.CourseActionType.SECTION_VIEW,\r\n beginTimestamp: operationDate,\r\n endTimestamp: operationDate,\r\n dataExtension: dataExtensionJSON\r\n });\r\n }\r\n catch (e) {\r\n console.log('Unable save status change.');\r\n }\r\n };\r\n CourseDetailsController.prototype.logBeforeUnload = function () {\r\n if (this.logBeginSectionViewTimestamp && this.logOldSectionId != null) {\r\n var section = CourseDetailsUtils_1.CourseDetailsUtils.findSectionById(this.sectionsList, this.logOldSectionId);\r\n if (section && section.status !== SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.NOT_ALLOWED]) {\r\n this.courseActionLogService.create({\r\n courseId: this.courseId,\r\n courseProgressId: this.courseProgressId,\r\n sectionId: this.logOldSectionId,\r\n courseActionType: CourseActionType_1.CourseActionType.SECTION_VIEW,\r\n beginTimestamp: this.logBeginSectionViewTimestamp,\r\n endTimestamp: Date.now()\r\n });\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.findSectionLocally = function (moduleId, sectionId) {\r\n var sections = this.sectionsMap.get(moduleId).filter(function (s) { return s.section.id == sectionId; });\r\n if (sections.length > 0) {\r\n return sections[0].section;\r\n }\r\n return null;\r\n };\r\n CourseDetailsController.prototype.toggleCoursePageCssClassForBody = function () {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (elem.hasClass(\"course-page\")) {\r\n elem.removeClass(\"course-page\");\r\n }\r\n else {\r\n elem.addClass(\"course-page\");\r\n }\r\n };\r\n CourseDetailsController.prototype.loadProgressBundle = function () {\r\n var _this = this;\r\n return this.bundleService.getBundle(this.courseProgress.bundleId, \"ALL\")\r\n .then(function (bundle) {\r\n _this.progressBundle = bundle;\r\n });\r\n };\r\n CourseDetailsController.prototype.setInfoWithManualCompletionSectionStatus = function () {\r\n var _this = this;\r\n this.isDisableInfoWithManualCompletionInput = true;\r\n if (this.isSectionCompleted(this.selectedSection)) {\r\n var promise = this.progressService.resetInformationSectionStatusToAllowed(this.selectedSection.courseId, this.selectedSection.id, this.courseProgressId)\r\n .then(function () {\r\n if (_this.selectedSection.parentId) {\r\n _this.progressService.resetInformationSectionStatusToAllowed(_this.selectedSection.courseId, _this.selectedSection.parentId, _this.courseProgressId);\r\n }\r\n })\r\n .finally(function () {\r\n _this.progressService.getUserProgress(_this.selectedSection.courseId)\r\n .then(function (result) {\r\n if (result) {\r\n _this.updateSectionStatusesFromServerResults(result);\r\n _this.recalculateProgressPercentage();\r\n }\r\n });\r\n });\r\n promise.then(function () {\r\n _this.selectedSection.status = SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED];\r\n INotifier_1.notifier.success(\"Section status successfully changed!\");\r\n _this.isDisableInfoWithManualCompletionInput = false;\r\n });\r\n }\r\n else {\r\n this.setSectionStatusOpened(this.selectedSection.id, this.selectedSection.moduleId).then(function (result) {\r\n _this.selectedSection.status = SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED];\r\n INotifier_1.notifier.success(\"Section status successfully changed!\");\r\n _this.isDisableInfoWithManualCompletionInput = false;\r\n });\r\n }\r\n };\r\n CourseDetailsController.prototype.isSectionCompleted = function (section) {\r\n if (section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]\r\n || section.status == SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED])\r\n return true;\r\n return false;\r\n };\r\n CourseDetailsController.prototype.downloadSectionAsPdf = function (section) {\r\n var _this = this;\r\n this.courseService.getSectionPdfToken(this.courseId, section.moduleId, section.id)\r\n .then(function (data) {\r\n var token = data[\"token\"];\r\n _this.$window.open(_this.url.base(\"api/courses/downloadSectionPdf/:token\")\r\n .param(\":token\", token)\r\n .service());\r\n });\r\n };\r\n CourseDetailsController.prototype.isContentFromTemplate = function () {\r\n return this.selectedSection.summary != null ?\r\n this.selectedSection.summary.indexOf(\"
    = 0 : false;\r\n };\r\n CourseDetailsController.prototype.isSectionPdfFileExist = function (section) {\r\n if (this.courseBundle == null || this.courseBundle == undefined ||\r\n this.courseBundle.files == null || this.courseBundle.files == undefined) {\r\n return false;\r\n }\r\n var sectionNameRegEx = new RegExp('^sections\\/pdf\\/' + section.id + '.*' + '\\.pdf$');\r\n for (var _i = 0, _a = this.courseBundle.files; _i < _a.length; _i++) {\r\n var bundleFile = _a[_i];\r\n if (sectionNameRegEx.test(bundleFile.key)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n CourseDetailsController.prototype.loadCourseEnrollmentConfig = function () {\r\n var _this = this;\r\n return this.courseService.getEnrollmentConfigurationForCourse(this.courseId)\r\n .then(function (config) {\r\n _this.enrollmentConfig = config || {};\r\n return _this.enrollmentConfig;\r\n });\r\n };\r\n CourseDetailsController.prototype.loadCourseEnrollmentInfo = function () {\r\n var _this = this;\r\n return this.$q.all([\r\n this.courseService.getCourseEnrollmentSeatsForCurrentUser(this.courseId),\r\n this.courseService.getTotalUsedSeatsForCourse(this.courseId)\r\n ])\r\n .then(function (resultArr) {\r\n _this.userEnrollmentInfo = resultArr[0];\r\n _this.courseSeatUsed = resultArr[1];\r\n });\r\n };\r\n CourseDetailsController.prototype.isAvailableToSelfEnroll = function () {\r\n return this.isEnrollmentConfigured()\r\n && (this.enrollmentConfig.isEnableWaitlist || !this.enrollmentConfig.isEnableWaitlist && this.isAvailableByMaxEnrollments())\r\n && !this.isUserPending()\r\n && (!this.isUserWaitlisted() || (this.isUserWaitlisted() && this.isAvailableByMaxEnrollments() && this.isPurchaseConfigured))\r\n && !this.isUserEnrolled() && !this.isPaymentInProcess;\r\n };\r\n CourseDetailsController.prototype.isEnrollmentConfigured = function () {\r\n return this.enrollmentConfig.id && this.enrollmentConfig.isAllowNewEnrollments && this.enrollmentConfig.isAllowSelfEnrollments && this.isAvailableForCurrentDate();\r\n };\r\n CourseDetailsController.prototype.isAvailableEnrollment = function () {\r\n return this.isEnrollmentConfigured()\r\n && ((!this.isAvailableByMaxEnrollments() && this.enrollmentConfig.isEnableWaitlist) || this.isAvailableByMaxEnrollments())\r\n && !this.isAvailablePurchase() && (!(this.products && this.products.length > 0 && this.products[0].price > 0) || this.products.length > 0);\r\n };\r\n CourseDetailsController.prototype.isAvailablePurchase = function () {\r\n return (!this.enrollmentConfig.id || this.isEnrollmentConfigured())\r\n && this.isPurchaseConfigured && !this.isUserPending() && !this.isUserEnrolled()\r\n && this.isAvailableByMaxEnrollments();\r\n };\r\n CourseDetailsController.prototype.isAvailableForCurrentDate = function () {\r\n var now = new Date().getTime();\r\n var isNowAfterStartDate = this.enrollmentConfig.startDate && moment(now).isAfter(this.enrollmentConfig.startDate);\r\n var isBeforeEndDate = this.enrollmentConfig.endDate && moment(now).isBefore(this.enrollmentConfig.endDate);\r\n return (!this.enrollmentConfig.startDate || isNowAfterStartDate)\r\n && (!this.enrollmentConfig.endDate || isBeforeEndDate);\r\n };\r\n CourseDetailsController.prototype.isUserPending = function () {\r\n return this.userEnrollmentInfo && this.userEnrollmentInfo\r\n .filter(function (i) { return i.seatStatus === EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.PENDING]; }).length > 0;\r\n };\r\n CourseDetailsController.prototype.isUserPendingPayment = function () {\r\n return this.userEnrollmentInfo && this.userEnrollmentInfo\r\n .filter(function (i) { return i.seatStatus === EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.PENDING_PAYMENT]; }).length > 0;\r\n };\r\n CourseDetailsController.prototype.isUserWaitlisted = function () {\r\n return this.userEnrollmentInfo && this.userEnrollmentInfo\r\n .filter(function (i) { return i.seatStatus === EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.WAITLISTED]; }).length > 0;\r\n };\r\n CourseDetailsController.prototype.isUserEnrolled = function () {\r\n return this.userEnrollmentInfo && this.userEnrollmentInfo\r\n .filter(function (i) { return i.seatStatus === EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.ENROLLED]; }).length > 0;\r\n };\r\n CourseDetailsController.prototype.isAvailableByMaxEnrollments = function () {\r\n return !this.enrollmentConfig.maxEnrollment || this.enrollmentConfig.maxEnrollment\r\n && ((this.enrollmentConfig.maxEnrollment > this.courseSeatUsed) || (this.enrollmentConfig.maxEnrollment == this.courseSeatUsed && this.isUserPendingPayment()));\r\n };\r\n CourseDetailsController.prototype.getEnrollmentErrorMessage = function () {\r\n if (this.enrollmentConfig.id) {\r\n if (!this.enrollmentConfig.isAllowNewEnrollments) {\r\n return \"Enrollment is no longer allowed for this course, please contact your Instructor\";\r\n }\r\n else if (!this.enrollmentConfig.isAllowSelfEnrollments) {\r\n return \"Self-enrollment is not allowed for this course\";\r\n }\r\n else if (this.userEnrollmentInfo.length > 0) {\r\n if (this.isUserPending()) {\r\n return \"Your enrollment request is pending approval\";\r\n }\r\n else if (this.isUserWaitlisted() && !this.isPurchaseConfigured) {\r\n return \"Enrollment capacity is reached. You are placed in the waitlist and will receive notification if/when enrolled\";\r\n }\r\n else if (this.isUserWaitlisted() && this.isPurchaseConfigured && !this.isAvailableByMaxEnrollments()) {\r\n return \"Enrollment capacity is reached. You are placed in the waitlist and will receive notification if/when enrolled or seat becomes available\";\r\n }\r\n else if (!this.isDateProper && this.course.endDate == null) {\r\n return \"Start date of course\" + \" \" + this.course.startDateText;\r\n }\r\n }\r\n else if (!this.isAvailableForCurrentDate()) {\r\n return StringBuilder_1.StringBuilder.interpolate(\"\")\r\n .addIf(!!this.enrollmentConfig.startDate, \"Enrollment starts\")\r\n .addIf(!!this.enrollmentConfig.startDate, \" \")\r\n .addIf(!!this.enrollmentConfig.startDate, Moment_1.Moment.isValidDate(this.enrollmentConfig.startDate))\r\n .addIf(!!this.enrollmentConfig.startDate && !!this.enrollmentConfig.endDate, \" - \")\r\n .addIf(!!this.enrollmentConfig.endDate, \"Enrollment ends\")\r\n .addIf(!!this.enrollmentConfig.endDate, \" \")\r\n .addIf(!!this.enrollmentConfig.endDate, Moment_1.Moment.isValidDate(this.enrollmentConfig.endDate))\r\n .build();\r\n }\r\n else if (!this.isAvailableByMaxEnrollments()) {\r\n if (this.enrollmentConfig.isEnableWaitlist) {\r\n return \"Enrollment capacity is reached. You will be added to the waitlist\";\r\n }\r\n else {\r\n return \"Enrollment is closed. Enrollment capacity is reached\";\r\n }\r\n }\r\n else if (!this.isAvailablePurchase() && (this.products && this.products[0].price > 0)) {\r\n return \"Incorrect system purchase settings. Please contact your administrator.\";\r\n }\r\n else {\r\n return \"\";\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.selfEnrollUser = function () {\r\n var _this = this;\r\n this.isSelfEnrollProceed = true;\r\n if (!this.isAuthenticated) {\r\n this.authRedirect.redirectToLogOn();\r\n }\r\n else {\r\n this.courseService.enrollCurrentUserToCourse(this.courseId)\r\n .then(function (result) {\r\n if (result.seatStatus === EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.ENROLLED]) {\r\n _this.$window.location.reload();\r\n }\r\n else if (result.seatStatus === EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.WAITLISTED]) {\r\n return _this.loadCourseEnrollmentInfo()\r\n .finally(function () {\r\n return INotifier_1.notifier.success(\"Enrollment capacity is reached. You will be added to the waitlist\");\r\n });\r\n }\r\n else if (result.seatStatus === EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.PENDING]) {\r\n return _this.loadCourseEnrollmentInfo()\r\n .finally(function () {\r\n return INotifier_1.notifier.success(\"Your enrollment request is pending approval\");\r\n });\r\n }\r\n })\r\n .finally(function () { return _this.isSelfEnrollProceed = false; });\r\n }\r\n };\r\n CourseDetailsController.prototype.isSelfUnEnrollAvailable = function () {\r\n return this.userEnrollmentInfo && this.userEnrollmentInfo\r\n .filter(function (i) { return !i.courseProgressId; })\r\n .some(function (i) { return i.seatStatus === EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.ENROLLED]\r\n || i.seatStatus === EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.WAITLISTED]; });\r\n };\r\n CourseDetailsController.prototype.getSupportLink = function () {\r\n return this.course.supportUrl;\r\n };\r\n CourseDetailsController.prototype.bindTopTabsCustomActions = function () {\r\n var _this = this;\r\n this.selfUnEnrollUser = function () {\r\n _this.dialogService.confirm(\"Do you want to un-enroll from this course\" + \"?\", {\r\n title: \"Confirm unenrollment\",\r\n confirmButton: \"Un-Enroll\",\r\n cancelButton: \"Cancel\"\r\n })\r\n .then(function () {\r\n _this.courseService.unEnrollCurrentUserToCourse(_this.courseId)\r\n .finally(function () { return _this.$window.location.reload(); });\r\n })\r\n .catch(function () { });\r\n };\r\n this.topTabsCustomActions.push({\r\n key: \"unEnrollUserFromCourse\",\r\n content: ' Un-Enroll me ' +\r\n ' ' +\r\n '',\r\n action: this.selfUnEnrollUser,\r\n title: \"Un-Enroll me\"\r\n });\r\n };\r\n CourseDetailsController.prototype.unbindTopTabsCustomActions = function () {\r\n this.topTabsCustomActions.splice(0);\r\n };\r\n CourseDetailsController.prototype.checkBeforeSectionUncompleted = function () {\r\n for (var _i = 0, _a = this.sectionsList; _i < _a.length; _i++) {\r\n var section = _a[_i];\r\n if (section.id === this.selectedSection.id) {\r\n break;\r\n }\r\n else {\r\n if (section.section.status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED]) {\r\n return \"To go to the next section you must complete all previous and the current section\";\r\n }\r\n }\r\n }\r\n return \"To go to the next section you must complete the current section\";\r\n };\r\n CourseDetailsController.prototype.loadCoursePurchaseConfigured = function () {\r\n var _this = this;\r\n return this.purchaseService.getReferencedObjectPurchaseConfigured(this.courseId, ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE])\r\n .then(function (data) {\r\n _this.isPurchaseConfigured = data;\r\n return _this.isPurchaseConfigured;\r\n });\r\n };\r\n CourseDetailsController.prototype.showPurchaseModal = function () {\r\n var _this = this;\r\n this.checkPurchaseProcess().then(function () {\r\n _this.$location.search(CourseDetailsController.PURCHASE_PARAMETER, true).replace();\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#purchaseDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n _this.showPurchaseWindow = true;\r\n });\r\n };\r\n CourseDetailsController.prototype.checkPurchaseProcess = function () {\r\n var _this = this;\r\n return this.courseService.checkPurchaseProcess(this.courseId).then(function (result) {\r\n _this.isPaymentInProcess = result == true;\r\n });\r\n };\r\n CourseDetailsController.prototype.saveUserScormSessionData = function (scormSessionDataJson, suspendData) {\r\n var _this = this;\r\n this.interactionsSavePromise = this.$q.when(this.interactionsSavePromise)\r\n .then(function () {\r\n return _this.progressService.saveUserScormSessionData(_this.courseId, _this.selectedSection.id, scormSessionDataJson);\r\n });\r\n };\r\n CourseDetailsController.prototype.runImmersiveReader = function () {\r\n var _this = this;\r\n this.runImmersiveReaderDisabled = true;\r\n this.azureCognitiveServicesService.getImmersiveReaderLaunchData()\r\n .then(function (launchData) {\r\n var token = launchData.token;\r\n var subdomain = launchData.subdomain;\r\n var data = {\r\n title: _this.selectedSection.name,\r\n chunks: [{\r\n content: $(\"#section_summary_rich_text\").html(),\r\n mimeType: \"text/html\"\r\n }]\r\n };\r\n var options = {\r\n \"timeout\": 5000,\r\n \"onExit\": _this.immersiveReaderExitCallback,\r\n \"uiZIndex\": 2000\r\n };\r\n window.ImmersiveReader.launchAsync(token, subdomain, data, options)\r\n .catch(function (error) {\r\n INotifier_1.notifier.error(\"Error in launching the Immersive Reader.\");\r\n console.log(error);\r\n });\r\n })\r\n .finally(function () {\r\n _this.runImmersiveReaderDisabled = false;\r\n });\r\n };\r\n CourseDetailsController.prototype.immersiveReaderExitCallback = function () {\r\n console.log(\"Immersive Reader closed.\");\r\n };\r\n CourseDetailsController.prototype.isSectionParentForCurrent = function (sectionForCheck) {\r\n var sectionForIteration = this.selectedSection;\r\n while (this.getSectionLevel(sectionForIteration.id) !== this.sectionsDepthLevel) {\r\n if (sectionForIteration.parentId === sectionForCheck.id) {\r\n return true;\r\n }\r\n sectionForIteration = CourseDetailsUtils_1.CourseDetailsUtils.findPrevSection(sectionForIteration, this.sectionsMap, this.modules);\r\n }\r\n return false;\r\n };\r\n CourseDetailsController.prototype.getSectionLevel = function (sectionId) {\r\n var level = null;\r\n this.sectionsList.forEach(function (value) {\r\n if (value.section.id === sectionId) {\r\n level = value.level;\r\n }\r\n });\r\n return level;\r\n };\r\n CourseDetailsController.prototype.isProgressSection = function (sectionEntry, module) {\r\n return (((sectionEntry.level === this.sectionsDepthLevel)\r\n && (this.getSectionLevel(this.selectedSection.id) > this.sectionsDepthLevel)\r\n && this.isSectionParentForCurrent(sectionEntry)) ||\r\n (this.courseStarted && !this.quizPassing && sectionEntry.section.status !== 'NOT_ALLOWED'\r\n && this.isLeftMenuItemActive(this.menuKey.topMenu, module.id, sectionEntry.section.id))) &&\r\n !(!this.courseStarted || this.quizPassing || sectionEntry.section.status === 'NOT_ALLOWED');\r\n };\r\n CourseDetailsController.prototype.getClassForSection = function (sectionEntry, module) {\r\n if (!this.courseStarted || sectionEntry.section.status == 'NOT_ALLOWED') {\r\n return 'wait';\r\n }\r\n else if (this.isProgressSection(sectionEntry, module) || (this.selectedSection.id == sectionEntry.section.id)) {\r\n return 'in-progress';\r\n }\r\n else if ((this.courseStarted && sectionEntry.section.status == 'COMPLETED') || (this.courseStarted && sectionEntry.section.status == 'OPENED')) {\r\n return 'complete';\r\n }\r\n else {\r\n return 'available';\r\n }\r\n };\r\n CourseDetailsController.prototype.openCloseProgressUnit = function (module) {\r\n var unitElement = $('#unit-element-' + module.id + ' .navbar-progress-block__element-progress');\r\n if (unitElement.parents('.progress-sidebar__full').length) {\r\n var parentId = unitElement.parents('.progress-sidebar__full').attr(\"id\");\r\n unitElement = $('#' + parentId + ' #unit-element-' + module.id + ' .navbar-progress-block__element-progress');\r\n unitElement.slideToggle();\r\n }\r\n else {\r\n if (window.innerWidth < 992) {\r\n unitElement.animate({ width: 'toggle' }, 350);\r\n }\r\n else {\r\n unitElement.slideToggle();\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.recalculateCourseProgress = function () {\r\n var _this = this;\r\n if (this.course && this.course.id && this.courseProgress && this.courseProgress.id) {\r\n this.isLoadingCourseData = true;\r\n var oldCourseProgressPercent = this.courseProgressPercent;\r\n this.progressService.getAllProgressesForCourseProgress(this.course.id, this.courseProgress.id)\r\n .then(function (result) {\r\n var resultMap = _this.commonFilterService.calculateCourseProgress(result);\r\n var countOfMandatoryCompleted = resultMap.get('countOfMandatoryCompleted');\r\n var countOfMandatory = resultMap.get('countOfMandatory');\r\n var countOfElectiveCompleted = resultMap.get('countOfElectiveCompleted');\r\n var countOfOptional = resultMap.get('countOfOptional');\r\n var countOfOptionalCompleted = resultMap.get('countOfOptionalCompleted');\r\n var requiredElectivesNumber = _this.course.requiredElectivesNumber;\r\n if (result.sectionInHierarchyExtended.length === 0) {\r\n return 0;\r\n }\r\n else if ((requiredElectivesNumber + countOfMandatory) === 0) {\r\n var countHeadSections = result.sectionInHierarchyExtended\r\n .filter(function (section) { return !section.parentId; }).length;\r\n _this.courseProgressPercent = Math.round((countOfElectiveCompleted\r\n + countOfOptionalCompleted) / countHeadSections * 100);\r\n _this.courseProgress.progressPercent = _this.courseProgressPercent;\r\n }\r\n else {\r\n _this.courseProgressPercent = Math.round((Math.min(countOfElectiveCompleted, requiredElectivesNumber)\r\n + countOfMandatoryCompleted) / (requiredElectivesNumber + countOfMandatory) * 100);\r\n _this.courseProgress.progressPercent = _this.courseProgressPercent;\r\n }\r\n }).finally(function () {\r\n if (_this.courseProgressPercent === 100) {\r\n _this.badgesService.notifyUserAfterReward(CourseDetailsController.BADGE_KEYS).then(function (result) {\r\n if (result.length > 0) {\r\n _this.$rootScope.$broadcast('notifyReward', result);\r\n }\r\n });\r\n }\r\n if (oldCourseProgressPercent != null && oldCourseProgressPercent !== 100 && _this.courseProgressPercent === 100) {\r\n _this.$rootScope.$broadcast(Event_1.Event.COURSE_PROGRESS_RECALCULATED);\r\n }\r\n _this.isLoadingCourseData = false;\r\n });\r\n }\r\n else {\r\n this.courseProgress.progressPercent = 0;\r\n this.courseProgressPercent = this.courseProgress.progressPercent;\r\n }\r\n };\r\n CourseDetailsController.prototype.isShowContentLearningGag = function () {\r\n return window.innerWidth > 991;\r\n };\r\n CourseDetailsController.prototype.changeLeftClosableButton = function (width) {\r\n var element = $(\".navbar-progress-bar > .closable-progress\");\r\n if (window.innerWidth > 991) {\r\n if (!width) {\r\n var widthElement = document.getElementById(\"progress-bar-id\").offsetWidth;\r\n element.css(\"left\", widthElement);\r\n element.css(\"display\", \"block\");\r\n }\r\n else {\r\n element.css(\"left\", width);\r\n element.css(\"display\", \"block\");\r\n }\r\n }\r\n else {\r\n element.css(\"display\", \"none\");\r\n }\r\n };\r\n CourseDetailsController.prototype.closeCourseProgressModal = function () {\r\n $('#courseTabletProgress').modal('hide');\r\n };\r\n CourseDetailsController.prototype.getHeightCourseTitleBlock = function () {\r\n var height = $('#course-detail-title').height();\r\n return height <= 50 ? 0 : height - 40;\r\n };\r\n CourseDetailsController.prototype.getMaterialExtension = function (material) {\r\n if (material.fileName) {\r\n return \".\" + material.fileName.split(\".\").pop();\r\n }\r\n return \"\";\r\n };\r\n CourseDetailsController.prototype.showCheckConfirmationPopup = function () {\r\n if (this.selectedSection.status == \"ALLOWED\") {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#manualCompletionCheckboxConfirm\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n };\r\n CourseDetailsController.prototype.enrollForFree = function () {\r\n var _this = this;\r\n this.enrollInProgress = true;\r\n var businessUnitId = this.course.businessUnitId;\r\n var productId = this.products[0].id;\r\n var returnUrl = \"\";\r\n this.freeEnrollmentService.createOrder({ businessUnitId: businessUnitId, productId: productId, returnUrl: returnUrl })\r\n .then(function (productId) {\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(productId));\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"Incorrect system purchase settings. Please contact your administrator.\");\r\n })\r\n .finally(function () {\r\n _this.enrollInProgress = false;\r\n });\r\n };\r\n CourseDetailsController.prototype.loadSlideTemplatesBundle = function (cssFileKeys, jsFileKeys) {\r\n var _this = this;\r\n this.slideService.getSlideTemplateBundleId().then(function (result) {\r\n if (result) {\r\n return _this.bundleService.getBundle(result, \"HTML_OR_LOADED_AT_START\")\r\n .then(function (bundle) {\r\n if (!_this.slideTemplatesBundle) {\r\n _this.slideTemplatesBundle = bundle;\r\n }\r\n _this.completeLoadSlideTemplatesBundle(cssFileKeys, jsFileKeys);\r\n return null;\r\n });\r\n }\r\n else {\r\n return _this.$q.when(null);\r\n }\r\n });\r\n };\r\n CourseDetailsController.prototype.completeLoadSlideTemplatesBundle = function (cssFileKeys, jsFileKeys) {\r\n var _this = this;\r\n this.composeRichTextFromSlideBundle(cssFileKeys, jsFileKeys);\r\n if (this.slideTemplatesBundleText) {\r\n return this.$timeout(function () {\r\n return _this.getRichTextLoadedPromise(CourseDetailsController.SLIDE_TEMPLATES_BUNDLE_RICH_TEXT_ID);\r\n }, 0);\r\n }\r\n };\r\n CourseDetailsController.prototype.countDelayTime = function (delay) {\r\n var _this = this;\r\n var section = this.sectionsList.filter(function (section) { return section.id == _this.selectedSection.id; })[0];\r\n var sectionCompleted = section.section.status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED];\r\n if ((this.course.defaultDelay != -1 && (this.course.defaultDelay != 0 || (delay != 0 && delay != null))) || this.isSlideShowStarted) {\r\n var delayInMs;\r\n if (this.course.defaultDelay === -1) {\r\n delayInMs = 0;\r\n }\r\n else {\r\n delayInMs = (delay != 0 && delay != null) ? delay * 1000 : this.course.defaultDelay * 1000;\r\n }\r\n if (!sectionCompleted || this.isSlideShowStarted) {\r\n this.disableNextButton = true;\r\n }\r\n var thisSection = this.selectedSection;\r\n this.delayCounted = false;\r\n setTimeout(function () {\r\n _this.delayCounted = true;\r\n if (thisSection === _this.selectedSection) {\r\n if (!sectionCompleted) {\r\n _this.updateLastViewedSection(_this.courseId, _this.courseProgressId, _this.selectedSection.id).then(function (courseProgress) {\r\n angular.copy(courseProgress, _this.courseProgress);\r\n _this.setSectionStatusOpenedIfNeeded(section.section.id, section.section.moduleId).then(function () {\r\n _this.completeDelayCounting(thisSection);\r\n });\r\n });\r\n }\r\n else {\r\n _this.completeDelayCounting(thisSection);\r\n }\r\n }\r\n }, delayInMs);\r\n }\r\n else {\r\n if (!sectionCompleted) {\r\n this.updateLastViewedSection(this.courseId, this.courseProgressId, this.selectedSection.id).then(function (courseProgress) {\r\n angular.copy(courseProgress, _this.courseProgress);\r\n _this.setSectionStatusOpenedIfNeeded(section.section.id, section.section.moduleId).then(function () {\r\n _this.disableNextButton = false;\r\n });\r\n });\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.completeDelayCounting = function (thisSection) {\r\n var _this = this;\r\n this.disableNextButton = false;\r\n if (this.isSlideShowStarted) {\r\n setTimeout(function () {\r\n if (_this.isSlideShowStarted && thisSection == _this.selectedSection) {\r\n if (!!_this.nextSection.id) {\r\n if (_this.nextSection.parentId != _this.selectedSection.parentId) {\r\n _this.isSlideShowStarted = false;\r\n }\r\n _this.redirectToNextSection();\r\n }\r\n else {\r\n _this.isSlideShowStarted = false;\r\n }\r\n }\r\n }, 2000);\r\n }\r\n };\r\n CourseDetailsController.prototype.StartStopSlideShow = function () {\r\n var _this = this;\r\n this.isSlideShowStarted = !this.isSlideShowStarted;\r\n if (this.isSlideShowStarted) {\r\n this.goToFullScreenMode();\r\n if (this.course.defaultDelay <= 0 && (this.selectedSection.delay == 0 || this.selectedSection.delay == null)) {\r\n if (!!this.nextSection.id) {\r\n this.redirectToNextSection();\r\n }\r\n else {\r\n this.isSlideShowStarted = false;\r\n }\r\n }\r\n else {\r\n if (this.delayCounted) {\r\n if (!!this.nextSection.id) {\r\n this.redirectToNextSection();\r\n }\r\n else {\r\n this.isSlideShowStarted = false;\r\n }\r\n }\r\n else {\r\n this.disableNextButton = true;\r\n }\r\n }\r\n }\r\n else {\r\n this.leaveFullScreenMode();\r\n if (!this.delayCounted) {\r\n var section = this.sectionsList.filter(function (section) { return section.id == _this.selectedSection.id; })[0];\r\n if (section.section.status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]) {\r\n this.disableNextButton = false;\r\n }\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.initEventOnClick = function () {\r\n var images = document.querySelectorAll(\".section-content img\");\r\n if (images.length > 0) {\r\n for (var i = 0; i < images.length; i++) {\r\n (function (i) {\r\n if (!images[i].parentElement.classList.contains('core-logo') &&\r\n !images[i].parentElement.classList.contains('navbar-brand') &&\r\n !images[i].parentElement.classList.contains('video-poster')) {\r\n images[i].addEventListener(\"click\", function () {\r\n $(\"#enlargedImage .modal-body\")\r\n .css(\"display\", \"block\")\r\n .html('')\r\n .append(\"\");\r\n $(\"#enlargedImage\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n });\r\n }\r\n })(i);\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.hideEnlargedImageModal = function () {\r\n var img = document.querySelector(\"#enlargedImage img\");\r\n if (img) {\r\n img.remove();\r\n }\r\n $(\"#enlargedImage\").modal(\"hide\");\r\n };\r\n CourseDetailsController.prototype.slideTemplateCssFileKeys = function (moduleId, slideDeckSectionId) {\r\n var cssFileKeys = [];\r\n this.sectionsMap.get(moduleId).filter(function (s) { return s.section.parentId === slideDeckSectionId; }).forEach(function (s) { return s.section.slideTemplateCssFileKey != null ? cssFileKeys.push(s.section.slideTemplateCssFileKey) : null; });\r\n return cssFileKeys;\r\n };\r\n CourseDetailsController.prototype.slideTemplateJsFileKeys = function (moduleId, slideDeckSectionId) {\r\n var jsFileKeys = [];\r\n this.sectionsMap.get(moduleId).filter(function (s) { return s.section.parentId === slideDeckSectionId; }).forEach(function (s) { return s.section.slideTemplateJsFileKey != null ? jsFileKeys.push(s.section.slideTemplateJsFileKey) : null; });\r\n return jsFileKeys;\r\n };\r\n CourseDetailsController.prototype.isEnrollmentExpired = function () {\r\n var now = new Date().getTime();\r\n return this.enrollmentConfig.endDate && this.enrollmentConfig.endDate && moment(now).isAfter(this.enrollmentConfig.endDate);\r\n };\r\n CourseDetailsController.prototype.getAnetTokenAndOpenPurchase = function () {\r\n this.getANetToken().then(function () {\r\n setTimeout(function () {\r\n var form = document.getElementById('send_hptoken');\r\n form.submit();\r\n }, 0);\r\n });\r\n };\r\n CourseDetailsController.prototype.isMobile = function () {\r\n var w = window, d = document, e = d.documentElement, g = d.getElementsByTagName('body')[0], x = w.innerWidth || e.clientWidth || g.clientWidth;\r\n return x <= 767;\r\n };\r\n CourseDetailsController.prototype.setImagesForActivityBadges = function (badges) {\r\n var _this = this;\r\n badges.forEach(function (b) {\r\n b.previewUrl = _this.getImageForActivityBadge(b);\r\n });\r\n };\r\n CourseDetailsController.prototype.getImageForActivityBadge = function (badge) {\r\n if (badge) {\r\n if (!badge.fileId && badge.badgeKey) {\r\n return \"themes/default/img/actionBadges/\" + badge.badgeKey + \".png\";\r\n }\r\n return badge.previewUrl;\r\n }\r\n return '';\r\n };\r\n CourseDetailsController.prototype.submitReward = function (rewardId) {\r\n var _this = this;\r\n var tempRewards = this.rewards.filter(function (r) { return r.id !== rewardId; });\r\n if (tempRewards.length == 0) {\r\n $('.rewardNotification').addClass('rewardNotification-up');\r\n }\r\n setTimeout(function () {\r\n _this.rewards = tempRewards;\r\n if (_this.rewards.length > 0) {\r\n _this.rewardToShow = null;\r\n setTimeout(function () {\r\n $('.rewardNotification').removeClass('rewardNotification-down');\r\n _this.rewardToShow = _this.rewards[0];\r\n }, 0);\r\n }\r\n else {\r\n _this.rewardToShow = null;\r\n }\r\n }, 200);\r\n };\r\n CourseDetailsController.prototype.saveProgressOfMultimediaMaterial = function () {\r\n var _this = this;\r\n if (this.selectedSection.status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.ALLOWED]\r\n && localStorage.getItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.MATERIAL_KEY)) {\r\n var data = {};\r\n data.timestamp = parseInt(localStorage.getItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.TIMESTAMP_KEY));\r\n data.materialId = parseInt(localStorage.getItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.MATERIAL_KEY).split(\"_\")[0]);\r\n var sectionOfMaterialId = parseInt(localStorage.getItem(VideoPlayerLocalStorageKey_1.VideoPlayerLocalStorageKey.SECTION_KEY));\r\n if (!sectionOfMaterialId || sectionOfMaterialId === NaN) {\r\n return;\r\n }\r\n try {\r\n if (sectionOfMaterialId &&\r\n (this.sectionsList.filter(function (s) { return s.section.id === sectionOfMaterialId; })[0].section.typeKey) === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]) {\r\n this.$timeout(function () {\r\n _this.progressService.saveSectionProgressExtensionWithMaterialProgress(_this.courseId, _this.courseProgressId, sectionOfMaterialId, JSON.stringify(data))\r\n .then(function () { return _this.setSectionStatusOpenedIfNeededInternal(sectionOfMaterialId, _this.moduleId); });\r\n }, 1000);\r\n }\r\n }\r\n catch (e) {\r\n if (e.cause.type.equals(\"StaleObjectStateException\")) {\r\n console.log(\"Object was staled\");\r\n this.sendMessageToSentry(e.message);\r\n this.progressService.saveSectionProgressExtensionWithMaterialProgress(this.courseId, this.courseProgressId, sectionOfMaterialId, JSON.stringify(data))\r\n .then(function () { return _this.setSectionStatusOpenedIfNeededInternal(sectionOfMaterialId, _this.moduleId); });\r\n }\r\n else {\r\n this.sendMessageToSentry(e.message);\r\n }\r\n }\r\n }\r\n };\r\n CourseDetailsController.prototype.sendMessageToSentry = function (message) {\r\n try {\r\n window.Sentry.captureMessage(message);\r\n }\r\n catch (e) {\r\n console.log('Unable to send Sentry message.');\r\n }\r\n };\r\n CourseDetailsController.prototype.hideScormPopup = function () {\r\n $('.sandbox-popup').modal('hide');\r\n this.leaveFullScreenMode();\r\n };\r\n CourseDetailsController.NAME = \"courses.CourseDetailsController\";\r\n CourseDetailsController.SECTION_SUMMARY_RICH_TEXT_ID = \"section_summary_rich_text\";\r\n CourseDetailsController.LANDING_PAGE_RICH_TEXT_ID = \"landing_page_rich_text\";\r\n CourseDetailsController.COURSE_LOAD_AT_START_BUNDLES_RICH_TEXT_ID = \"course_load_at_start_bundles_rich_text\";\r\n CourseDetailsController.SLIDE_TEMPLATES_BUNDLE_RICH_TEXT_ID = \"slide_templates_bundle_rich_text\";\r\n CourseDetailsController.SLIDE_CHANGE_DELAY = 200;\r\n CourseDetailsController.MODULE_PREVIEW_IMAGE_BUNDLE_FILE_TEMPLATE = \"module_:index_logo.png\";\r\n CourseDetailsController.CHANGE_SECTION_PARAMETER = \"changeSection\";\r\n CourseDetailsController.FULL_SCREEN_PARAMETER = \"fullScreen\";\r\n CourseDetailsController.PURCHASE_PARAMETER = \"purchase\";\r\n CourseDetailsController.SMART_PURCHASE_PARAMETER = \"smartPurchase\";\r\n CourseDetailsController.MAX_RECURSION_DEPTH = 3;\r\n CourseDetailsController.BADGE_KEYS = ['C_CMPL', 'LP_CMPL', 'FST_CMPL_CRS', 'FTH_CMPL_CRS', 'TNTH_CMPL_CRS'];\r\n CourseDetailsController.SECTION_SUMMARY_REQUEST_PAGE_SIZE = 2;\r\n CourseDetailsController.WAIT_LMS_INTERVAL = 10000;\r\n CourseDetailsController.$inject = [\r\n \"$location\",\r\n \"$timeout\",\r\n \"$q\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n SecurityService_1.SecurityService.NAME,\r\n \"$routeParams\",\r\n \"$window\",\r\n \"$sce\",\r\n \"$anchorScroll\",\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n CommonNavigation_1.CommonNavigation.NAME,\r\n UrlService_1.UrlService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n CommonService_1.CommonService.NAME,\r\n BundleService_1.BundleService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n QuizService_1.QuizService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n Storage_1.Storages.SESSION_NAME,\r\n RichTextContentLoadingSynchronizer_1.RichTextContentLoadingSynchronizer.NAME,\r\n CourseActionLogService_1.CourseActionLogService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n CertificateService_1.CertificateService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n DialogService_1.DialogService.NAME,\r\n PurchaseService_1.PurchaseService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n PayPalService_1.PayPalService.NAME,\r\n AuthorizeNetService_1.AuthorizeNetService.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n AzureCognitiveServicesService_1.AzureCognitiveServicesService.NAME,\r\n UserNotesService_1.UserNotesService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n SlideService_1.SlideService.NAME,\r\n FreeEnrollmentService_1.FreeEnrollmentService.NAME,\r\n GamificationService_1.GamificationService.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n PersonalRouter_1.PersonalRouter.NAME\r\n ];\r\n return CourseDetailsController;\r\n})();\r\nexports.CourseDetailsController = CourseDetailsController;\r\n},{\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../authcore/RedirectReason\":28,\"../bundles/BundleService\":36,\"../businessUnits/BusinessUnitsService\":44,\"../certificates/CertificateService\":45,\"../common/CommonFilterService\":49,\"../common/CommonNavigation\":52,\"../common/CommonService\":53,\"../common/Event\":54,\"../components/dialog/DialogService\":166,\"../components/models/Event\":170,\"../components/richtext/RichTextContentLoadingSynchronizer\":176,\"../components/richtext/VhsSelectEmbeddedBundleDirective\":185,\"../finances/PurchaseService\":237,\"../gamification/BadgesService\":245,\"../gamification/GamificationService\":250,\"../infrastructure/Storage\":295,\"../integration/authorizenet/AuthorizeNetService\":297,\"../integration/azureCognitiveServices/AzureCognitiveServicesService\":299,\"../integration/freeenrollment/FreeEnrollmentService\":303,\"../integration/paypal/PayPalService\":306,\"../materials/models/MaterialType\":347,\"../materials/models/VideoPlayerLocalStorageKey\":349,\"../quizzes/QuizService\":396,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../settings/SettingsService\":427,\"../slides/SlideService\":435,\"../statistics/CourseActionLogService\":443,\"../statistics/models/CourseActionType\":451,\"../urls/AuthRouter\":463,\"../urls/CoursesRouter\":468,\"../urls/FinancesRouter\":471,\"../urls/LearningPathsRouter\":477,\"../urls/PersonalRouter\":484,\"../utils/AppProperties\":\"AppProperties\",\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"../utils/ObjectTypeUtils\":520,\"../utils/PageHeaderHelper\":521,\"../utils/RandomUtils\":523,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./CourseDetailsUtils\":195,\"./CourseScorm2004Adapter\":209,\"./CourseScormAdapter\":210,\"./CourseService\":211,\"./ProgressService\":219,\"./UserNotesService\":221,\"./models/CourseProgressStatus\":222,\"./models/EnrollmentSeatStatus\":223,\"./models/SectionProgressStatus\":227,\"./models/SectionType\":228}],195:[function(require,module,exports){\nvar SectionProgressStatus_1 = require(\"./models/SectionProgressStatus\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar VhsSelectEmbeddedBundleDirective_1 = require(\"../components/richtext/VhsSelectEmbeddedBundleDirective\");\r\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar SectionType_1 = require(\"./models/SectionType\");\r\nvar CourseDetailsUtils = (function () {\r\n function CourseDetailsUtils() {\r\n }\r\n CourseDetailsUtils.findAllChildes = function (index, allSections) {\r\n return allSections.filter(function (sec) { return sec.parentId === allSections[index].id; });\r\n };\r\n CourseDetailsUtils.calculateSectionCompletionPercentage = function (index, allSections) {\r\n var completedStatuses = [SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.COMPLETED], SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]];\r\n var currentSection = allSections[index];\r\n var childrenCount = 0;\r\n var completedCount = 0;\r\n var childrenCompletionPercentage = 0;\r\n var childes = this.findAllChildes(index, allSections);\r\n if (childes.length > 0) {\r\n for (var _i = 0; _i < childes.length; _i++) {\r\n var child = childes[_i];\r\n childrenCount++;\r\n if (completedStatuses.indexOf(child.section.status) != -1) {\r\n completedCount++;\r\n }\r\n childrenCompletionPercentage += this.calculateSectionCompletionPercentage(allSections.indexOf(child), allSections);\r\n }\r\n }\r\n if (childrenCount > 0) {\r\n currentSection.completionPercentage = Math.round((childrenCompletionPercentage / childrenCount));\r\n }\r\n else {\r\n if (completedStatuses.indexOf(currentSection.section.status) != -1) {\r\n currentSection.completionPercentage = 100;\r\n }\r\n else {\r\n currentSection.completionPercentage = 0;\r\n }\r\n }\r\n currentSection.childrenCount = childrenCount;\r\n currentSection.completedChildrenCount = completedCount;\r\n return currentSection.completionPercentage;\r\n };\r\n CourseDetailsUtils.composeRichTextFromLoadAtStartBundles = function (courseBundle) {\r\n var result = \"\";\r\n if (courseBundle) {\r\n for (var i = 0; i < courseBundle.files.length; i++) {\r\n var bundleFile = courseBundle.files[i];\r\n if (bundleFile.loadAtStart) {\r\n result += StringBuilder_1.StringBuilder.interpolate(VhsSelectEmbeddedBundleDirective_1.VhsSelectEmbeddedBundleMaterialController.EMBEDDED_BUNDLE_TA_HTML)\r\n .with(\":bundleId\", RandomUtils_1.RandomUtils.generateRandomId(bundleFile.key + \"___\"))\r\n .with(\":bundleKey\", bundleFile.key)\r\n .build();\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n CourseDetailsUtils.findNextSection = function (selectedSection, sectionsMap, modules) {\r\n var nextSection = {};\r\n if (!selectedSection || !selectedSection.id) {\r\n return nextSection;\r\n }\r\n var currentModuleId = selectedSection.moduleId;\r\n var lastSectionInModuleId = (sectionsMap.get(currentModuleId).length > 0)\r\n ? sectionsMap.get(currentModuleId)[sectionsMap.get(currentModuleId).length - 1].section.id\r\n : null;\r\n if (lastSectionInModuleId == selectedSection.id) {\r\n var nextModuleId = CourseDetailsUtils.findNextModuleId(currentModuleId, modules);\r\n if (nextModuleId > 0) {\r\n if (sectionsMap.get(nextModuleId)[0]) {\r\n nextSection = sectionsMap.get(nextModuleId)[0].section.typeKey !== SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK]\r\n ? sectionsMap.get(nextModuleId)[0].section\r\n : (sectionsMap.get(nextModuleId)[1] ? sectionsMap.get(nextModuleId)[1].section : {});\r\n }\r\n else {\r\n nextSection = {};\r\n }\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < sectionsMap.get(currentModuleId).length; i++) {\r\n if (i != (sectionsMap.get(currentModuleId).length - 1) && sectionsMap.get(currentModuleId)[i].section.id == selectedSection.id) {\r\n if (sectionsMap.get(currentModuleId)[i + 1].section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK]\r\n && i <= sectionsMap.get(currentModuleId).length - 2) {\r\n if (!!sectionsMap.get(currentModuleId)[i + 2]) {\r\n angular.copy(sectionsMap.get(currentModuleId)[i + 2].section, nextSection);\r\n }\r\n else {\r\n nextSection = {};\r\n }\r\n }\r\n else {\r\n angular.copy(sectionsMap.get(currentModuleId)[i + 1].section, nextSection);\r\n }\r\n }\r\n }\r\n }\r\n return nextSection;\r\n };\r\n CourseDetailsUtils.findPrevSection = function (selectedSection, sectionsMap, modules) {\r\n var prevSection = {};\r\n if (!selectedSection || !selectedSection.id) {\r\n return prevSection;\r\n }\r\n var currentModuleId = selectedSection.moduleId;\r\n var firstSectionInModuleId = (sectionsMap.get(currentModuleId)[0])\r\n ? sectionsMap.get(currentModuleId)[0].section.id\r\n : null;\r\n if (firstSectionInModuleId == selectedSection.id) {\r\n var prevModuleId = CourseDetailsUtils.findPrevModuleId(currentModuleId, modules);\r\n var prevModuleSections = sectionsMap.get(prevModuleId);\r\n if (prevModuleId > 0 && prevModuleSections && prevModuleSections.length > 0) {\r\n angular.copy(prevModuleSections[prevModuleSections.length - 1].section, prevSection);\r\n }\r\n else {\r\n prevSection = {};\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < sectionsMap.get(currentModuleId).length; i++) {\r\n if (i != 0 && sectionsMap.get(currentModuleId)[i].section.id == selectedSection.id) {\r\n if (sectionsMap.get(currentModuleId)[i - 1].section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK] && i > 1) {\r\n angular.copy(sectionsMap.get(currentModuleId)[i - 2].section, prevSection);\r\n }\r\n else {\r\n angular.copy(sectionsMap.get(currentModuleId)[i - 1].section, prevSection);\r\n }\r\n }\r\n }\r\n }\r\n return prevSection;\r\n };\r\n CourseDetailsUtils.findNextModuleId = function (currentModuleId, modules) {\r\n for (var i = 0; i < modules.length; i++) {\r\n if (modules[i].id == currentModuleId) {\r\n if (i != (modules.length - 1)) {\r\n return modules[i + 1].id;\r\n }\r\n }\r\n }\r\n return -1;\r\n };\r\n CourseDetailsUtils.findPrevModuleId = function (currentModuleId, modules) {\r\n for (var i = 0; i < modules.length; i++) {\r\n if (modules[i].id == currentModuleId) {\r\n if (i != 0) {\r\n return modules[i - 1].id;\r\n }\r\n }\r\n }\r\n return -1;\r\n };\r\n CourseDetailsUtils.findModuleById = function (moduleId, modules) {\r\n var module = {};\r\n for (var i = 0; i < modules.length; i++) {\r\n if (modules[i].id == moduleId) {\r\n return modules[i];\r\n }\r\n }\r\n return module;\r\n };\r\n CourseDetailsUtils.findSection = function (sectionsMap, moduleId, sectionId) {\r\n var sections = sectionsMap.get(moduleId).filter(function (s) { return s.section.id == sectionId; });\r\n if (sections.length > 0) {\r\n return sections[0].section;\r\n }\r\n return null;\r\n };\r\n CourseDetailsUtils.findSectionById = function (sections, sectionId) {\r\n var sectionsFound = sections.filter(function (s) { return s.section.id == sectionId; });\r\n if (sectionsFound.length > 0) {\r\n return sectionsFound[0].section;\r\n }\r\n return null;\r\n };\r\n CourseDetailsUtils.findSectionExtendedById = function (sections, sectionId) {\r\n var sectionsFound = sections.filter(function (s) { return s.section.id == sectionId; });\r\n if (sectionsFound.length > 0) {\r\n return sectionsFound[0];\r\n }\r\n return null;\r\n };\r\n CourseDetailsUtils.findParentOrSection = function (selectedSection, sectionsList) {\r\n return selectedSection && selectedSection.parentId\r\n ? CourseDetailsUtils.findSectionById(sectionsList, selectedSection.parentId)\r\n : selectedSection;\r\n };\r\n return CourseDetailsUtils;\r\n})();\r\nexports.CourseDetailsUtils = CourseDetailsUtils;\r\n},{\"../components/richtext/VhsSelectEmbeddedBundleDirective\":185,\"../utils/RandomUtils\":523,\"../utils/StringBuilder\":525,\"./models/SectionProgressStatus\":227,\"./models/SectionType\":228}],196:[function(require,module,exports){\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar ProgressService_1 = require(\"./ProgressService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar CourseProgressStatus_1 = require(\"./models/CourseProgressStatus\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar CourseDiscussionController = (function () {\r\n function CourseDiscussionController($http, $location, $routeParams, $anchorScroll, $q, $rootScope, url, securityService, authService, authManager, authRedirect, permissionsService, progressService, courseService, coursesRouter) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$anchorScroll = $anchorScroll;\r\n this.$q = $q;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.permissionsService = permissionsService;\r\n this.progressService = progressService;\r\n this.courseService = courseService;\r\n this.coursesRouter = coursesRouter;\r\n this.currentUser = {};\r\n this.course = {};\r\n this.isCourseLoaded = false;\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.threadId = $routeParams[CoursesRouter_1.CoursesRouter.THREAD_ID_PARAM] != null\r\n ? Number($routeParams[CoursesRouter_1.CoursesRouter.THREAD_ID_PARAM])\r\n : null;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.securityService\r\n .demandCoursePermissions(courseIdStr, function (coursePermissions) { return coursePermissions.view; })\r\n .demandCoursePermissions(courseIdStr, function (coursePermissions) { return coursePermissions.accessToDiscussions; });\r\n this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.currentUser);\r\n });\r\n var loadCoursePromises = [\r\n this.loadSystemPermissions(),\r\n this.loadCourse(),\r\n this.loadCourseProgress()\r\n ];\r\n this.$q.all(loadCoursePromises)\r\n .then(function () {\r\n if (!_this.course.permissions.attendeeManagement && !_this.courseStarted && !_this.course.permissions.view) {\r\n _this.authRedirect.forwardToAccessDenied();\r\n }\r\n else {\r\n _this.isCourseLoaded = true;\r\n }\r\n });\r\n }\r\n CourseDiscussionController.prototype.loadSystemPermissions = function () {\r\n var _this = this;\r\n return this.permissionsService.getSystemPermissions()\r\n .then(function (systemPermissions) {\r\n _this.systemPermissions = angular.copy(systemPermissions);\r\n return _this.systemPermissions;\r\n });\r\n };\r\n CourseDiscussionController.prototype.loadCourse = function () {\r\n var _this = this;\r\n return this.courseService.get(this.courseId)\r\n .then(function (result) {\r\n _this.course = angular.copy(result);\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter, \"Discussion\");\r\n _this.course.endDateText = Moment_1.Moment.isValidDate(result.endDate);\r\n _this.course.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n return _this.course;\r\n });\r\n };\r\n CourseDiscussionController.prototype.loadCourseProgress = function () {\r\n var _this = this;\r\n return this.progressService.getCourseProgress(this.courseId)\r\n .then(function (result) {\r\n _this.courseProgress = angular.copy(result);\r\n _this.courseStarted = (result.status && result.status !== CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED]);\r\n return _this.courseProgress;\r\n });\r\n };\r\n CourseDiscussionController.NAME = \"courses.CourseDiscussionController\";\r\n CourseDiscussionController.MODULES_FILTER_URL = \"/api/courses/:courseId/modules\";\r\n CourseDiscussionController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$anchorScroll\",\r\n \"$q\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return CourseDiscussionController;\r\n})();\r\nexports.CourseDiscussionController = CourseDiscussionController;\r\n},{\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../users/UserService\":499,\"../utils/Moment\":518,\"../utils/UrlService\":528,\"./CourseService\":211,\"./ProgressService\":219,\"./models/CourseProgressStatus\":222}],197:[function(require,module,exports){\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar CourseExportImportEditController = (function () {\r\n function CourseExportImportEditController($scope, $http, $location, $routeParams, $uploader, $window, $rootScope, url, courseService, bundleService, coursesRouter, securityService, authManager, permissionsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$uploader = $uploader;\r\n this.$window = $window;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.courseService = courseService;\r\n this.bundleService = bundleService;\r\n this.coursesRouter = coursesRouter;\r\n this.securityService = securityService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.importMode = \"universal_mode\";\r\n this.scormVersion = \"2004\";\r\n this.scormOneOrganizationMode = true;\r\n this.archiveUploading = false;\r\n this.isCourseLoaded = false;\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var hasCourseId = this.courseId != null;\r\n var courseIdStr = String(this.courseId);\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(hasCourseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadCourse(this.courseId).then(function (course) {\r\n if (course.bundleId) {\r\n _this.loadBundle(course.bundleId);\r\n }\r\n else {\r\n _this.bundle = null;\r\n }\r\n _this.isCourseLoaded = true;\r\n });\r\n }\r\n CourseExportImportEditController.prototype.saveBundleArchive = function () {\r\n var _this = this;\r\n if (!this.archive) {\r\n return;\r\n }\r\n var fileExtension = this.archive.name.toLowerCase().match(/\\.([0-9a-z]+)(?=[?#])|(\\.)(?:[\\w]+)$/);\r\n if (fileExtension[0] == null || fileExtension[0].toLowerCase() != \".zip\") {\r\n INotifier_1.notifier.error(\"The specified archive format is not supported. Only pptx or zip format is supported\");\r\n return;\r\n }\r\n this.archiveUploading = true;\r\n if (!this.bundle) {\r\n this.courseService.createCourseBundle(this.course.id, this.course.version).then(function (result) {\r\n _this.bundle = result[\"bundle\"];\r\n _this.course.bundleId = _this.bundle.id;\r\n _this.course.version = result[\"course\"].version;\r\n _this.updateBundleFromArchive();\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"An error occurred during archive import\");\r\n }\r\n _this.archiveUploading = false;\r\n });\r\n }\r\n else {\r\n this.updateBundleFromArchive();\r\n }\r\n };\r\n CourseExportImportEditController.prototype.saveScormArchive = function () {\r\n if (!this.scormArchive) {\r\n return;\r\n }\r\n var fileExtension = this.scormArchive.name.match(/\\.([0-9a-z]+)(?=[?#])|(\\.)(?:[\\w]+)$/);\r\n if (fileExtension[0] == null || fileExtension[0].toLowerCase() != \".zip\") {\r\n INotifier_1.notifier.error(\"The specified archive format is not supported. Only pptx or zip format is supported\");\r\n return;\r\n }\r\n this.archiveUploading = true;\r\n this.updateCourseFromScormArchive(this.importMode);\r\n };\r\n CourseExportImportEditController.prototype.loadBundle = function (bundleId) {\r\n var _this = this;\r\n return this.bundleService.getBundle(bundleId, \"NONE\").then(function (bundle) {\r\n _this.bundle = bundle;\r\n return _this.bundle;\r\n });\r\n };\r\n CourseExportImportEditController.prototype.loadCourse = function (courseId) {\r\n var _this = this;\r\n return this.courseService.get(courseId).then(function (course) {\r\n _this.course = angular.copy(course);\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter);\r\n return _this.course;\r\n });\r\n };\r\n CourseExportImportEditController.prototype.updateBundleFromArchive = function () {\r\n var _this = this;\r\n this.$uploader.upload({\r\n method: \"POST\",\r\n url: this.url.base(\"/api/bundles/:bundleId/archive?bundleVersion=:bundleVersion\")\r\n .param(\":bundleId\", this.bundle.id)\r\n .param(\":bundleVersion\", this.bundle.version)\r\n .service(),\r\n file: this.archive\r\n }).success(function () {\r\n INotifier_1.notifier.success(\"The archive was successfully imported\");\r\n _this.$location.url(_this.coursesRouter.bundleUpdateUrl(_this.courseId));\r\n }).error(function () {\r\n INotifier_1.notifier.error(\"An error occurred during archive import\");\r\n }).finally(function () {\r\n _this.archiveUploading = false;\r\n });\r\n };\r\n CourseExportImportEditController.prototype.updateCourseFromScormArchive = function (mode) {\r\n var _this = this;\r\n this.$uploader.upload({\r\n method: \"POST\",\r\n url: this.url.base(\"/api/courses/:courseId/scorm/:courseImportMode?courseVersion=:courseVersion\")\r\n .param(\":courseId\", this.course.id)\r\n .param(\":courseImportMode\", mode)\r\n .param(\":courseVersion\", this.course.version)\r\n .service(),\r\n file: this.scormArchive\r\n }).success(function () {\r\n INotifier_1.notifier.success(\"The archive was successfully imported\");\r\n _this.$location.url(_this.coursesRouter.structureUpdateUrl(_this.courseId));\r\n }).error(function (response) {\r\n if (response.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n else if (response.error == \"error.scorm.manifest.not.found\") {\r\n INotifier_1.notifier.error(\"SCORM manifest not found. Check the archive structure.\");\r\n }\r\n else if (response.error == \"error.scorm.metadata.not.found\") {\r\n INotifier_1.notifier.error(\"Manifest metadata not found. Check the manifest of the course.\");\r\n }\r\n else if (response.error == \"error.scorm.schema.not.found\") {\r\n INotifier_1.notifier.error(\"Manifest schema not found. Check the manifest of the course.\");\r\n }\r\n else if (response.error == \"error.scorm.schema.version.not.found\") {\r\n INotifier_1.notifier.error(\"Manifest schema version not found. Check the manifest of the course.\");\r\n }\r\n else if (response.error == \"error.scorm.schema.not.supported\") {\r\n INotifier_1.notifier.error(\"Manifest schema not supported. Try to import another course.\");\r\n }\r\n else if (response.error == \"error.scorm.schema.version.not.supported\") {\r\n INotifier_1.notifier.error(\"Manifest schema version not supported. Try to import another course.\");\r\n }\r\n else if (response.error == \"error.scorm.manifest.deserialization\") {\r\n INotifier_1.notifier.error(\"Error during deserialization of the manifest.\");\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"An error occurred during archive import\");\r\n }\r\n }).finally(function () {\r\n _this.archiveUploading = false;\r\n });\r\n };\r\n CourseExportImportEditController.prototype.downloadBundleArchive = function () {\r\n var _this = this;\r\n if (this.bundle.id) {\r\n this.courseService.downloadBundleArchiveToken(this.bundle.id).then(function (data) {\r\n var token = data[\"token\"];\r\n _this.$window.open(_this.url.base(\"api/bundles/download/:token\").param(\":token\", token).service());\r\n });\r\n }\r\n };\r\n CourseExportImportEditController.prototype.downloadCourseScormArchive = function () {\r\n var _this = this;\r\n if (this.courseId) {\r\n this.courseService.downloadCourseScormArchiveToken(this.courseId, this.scormVersion, this.scormOneOrganizationMode ? \"ONE_ORGANIZATION\" : \"MANY_ORGANIZATIONS\").then(function (data) {\r\n var token = data[\"token\"];\r\n _this.$window.open(_this.url.base(\"api/courses/download/:token\").param(\":token\", token).service());\r\n });\r\n }\r\n };\r\n CourseExportImportEditController.NAME = \"courses.CourseExportImportEditController\";\r\n CourseExportImportEditController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"Upload\",\r\n \"$window\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n BundleService_1.BundleService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return CourseExportImportEditController;\r\n})();\r\nexports.CourseExportImportEditController = CourseExportImportEditController;\r\n},{\"../INotifier\":5,\"../authcore/AuthManager\":25,\"../bundles/BundleService\":36,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/UrlService\":528,\"./CourseService\":211}],198:[function(require,module,exports){\nvar CourseService_1 = require(\"./CourseService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar GameLearningObjectActionService_1 = require(\"../gamification/GameLearningObjectActionService\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar RewardActionType_1 = require(\"../gamification/models/RewardActionType\");\r\nvar BadgesService_1 = require(\"../gamification/BadgesService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar CourseGamificationDetailsController = (function () {\r\n function CourseGamificationDetailsController(scope, $http, routeParams, $rootScope, courseService, securityService, authService, authManager, permissionsService, url, coursesRouter, badgesService, gameLearningObjectActionService, dialogService) {\r\n var _this = this;\r\n this.scope = scope;\r\n this.$http = $http;\r\n this.routeParams = routeParams;\r\n this.$rootScope = $rootScope;\r\n this.courseService = courseService;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.url = url;\r\n this.coursesRouter = coursesRouter;\r\n this.badgesService = badgesService;\r\n this.gameLearningObjectActionService = gameLearningObjectActionService;\r\n this.dialogService = dialogService;\r\n this.newReward = {};\r\n this.rewardToEdit = {};\r\n this.rewardTypes = ['Badge'];\r\n this.radioResult = 'default';\r\n this.isBadgeTableVisible = false;\r\n this.editedRewardTypeDropdown = false;\r\n this.defaultPointsSubject = 'You were awarded points';\r\n this.defaultPointsMessage = 'Dear {user},\\nCongratulations, you were awarded {number of points} point(s)!';\r\n this.excludedBadges = [101];\r\n this.badgeIds = [];\r\n this.toolbar = [];\r\n this.courseId = routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.rewardsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/courses/\" + this.courseId + \"/actionPage\")));\r\n this.badgesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/badges/gameActions\")));\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(!!this.courseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.authService.getCurrentUser()\r\n .then(function (u) { return _this.currentUser = u; });\r\n this.courseService.get(this.courseId).then(function (course) {\r\n _this.course = course;\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter);\r\n _this.badgesGridModel.filter.businessUnitId = course.businessUnitId;\r\n _this.badgesGridModel.pageSize = 5;\r\n _this.rewardsGridModel.loadPage(0);\r\n _this.badgesGridModel.loadPage(0);\r\n });\r\n }\r\n CourseGamificationDetailsController.prototype.addToModel = function () {\r\n if (this.radioResult === 'none') {\r\n this.newReward.showMessage = false;\r\n this.newReward.showDefaultMessage = false;\r\n }\r\n else if (this.radioResult === 'custom') {\r\n this.newReward.showMessage = true;\r\n this.newReward.showDefaultMessage = false;\r\n }\r\n else {\r\n this.newReward.showMessage = false;\r\n this.newReward.showDefaultMessage = true;\r\n }\r\n };\r\n CourseGamificationDetailsController.prototype.addToEditModel = function () {\r\n if (this.radioResult === 'none') {\r\n this.rewardToEdit.showMessage = false;\r\n this.rewardToEdit.showDefaultMessage = false;\r\n }\r\n else if (this.radioResult === 'custom') {\r\n this.rewardToEdit.showMessage = true;\r\n this.rewardToEdit.showDefaultMessage = false;\r\n }\r\n else {\r\n this.rewardToEdit.showMessage = false;\r\n this.rewardToEdit.showDefaultMessage = true;\r\n }\r\n };\r\n CourseGamificationDetailsController.prototype.getTemplateForInclude = function (templateName) {\r\n return this.url.template(templateName);\r\n };\r\n CourseGamificationDetailsController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n CourseGamificationDetailsController.prototype.convertIsActive = function (isActive) {\r\n return isActive != undefined\r\n ? isActive ? \"Yes\" : \"No\"\r\n : undefined;\r\n };\r\n CourseGamificationDetailsController.prototype.addBadge = function (badge, isEdit) {\r\n var _this = this;\r\n if (isEdit === void 0) { isEdit = false; }\r\n if (isEdit) {\r\n this.rewardToEdit.rewardId = badge.id;\r\n this.isBadgeTableVisible = false;\r\n $('#collapseSelectBadgeEdit').collapse('hide');\r\n }\r\n else {\r\n this.newReward.rewardId = badge.id;\r\n this.isBadgeTableVisible = false;\r\n $('#collapseSelectBadge').collapse('hide');\r\n }\r\n if (this.selectedBadge) {\r\n this.badgeIds = this.badgeIds.filter(function (id) { return _this.selectedBadge.id !== id; });\r\n }\r\n this.badgeIds.push(badge.id);\r\n this.loadBadges(true);\r\n this.selectedBadge = badge;\r\n this.selectedBadgeImageUrl = this.getImageBadge(this.selectedBadge);\r\n };\r\n CourseGamificationDetailsController.prototype.loadBadges = function (current) {\r\n this.badgesGridModel.filter.excludedBadges = this.badgeIds;\r\n if (current) {\r\n this.badgesGridModel.loadCurrentPage();\r\n }\r\n else {\r\n this.badgesGridModel.loadPage(0);\r\n }\r\n };\r\n CourseGamificationDetailsController.prototype.showCreateModal = function () {\r\n var _this = this;\r\n $(\"#addReward\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n this.newReward.rewardType = 'Badge';\r\n this.addToModel();\r\n this.isBadgeTableVisible = true;\r\n $('#collapseSelectBadgeEdit').collapse('hide');\r\n this.courseService.getGameLearningObjectsBadgeIds(this.course.id).then(function (res) {\r\n _this.badgeIds = res;\r\n _this.excludedBadges.forEach(function (b) {\r\n _this.badgeIds.push(b);\r\n });\r\n _this.loadBadges(false);\r\n });\r\n };\r\n CourseGamificationDetailsController.prototype.showEditModal = function (id) {\r\n var _this = this;\r\n this.gameLearningObjectActionService.getReward(id).then(function (result) {\r\n _this.rewardToEdit = result;\r\n if (_this.rewardToEdit.rewardType == 'BADGE') {\r\n _this.rewardToEdit.rewardType = 'Badge';\r\n _this.badgesService.getBadge(_this.rewardToEdit.rewardId).then(function (res) {\r\n _this.selectedBadge = res;\r\n _this.selectedBadgeImageUrl = _this.getImageBadge(res);\r\n _this.openEditModal();\r\n });\r\n }\r\n else if (_this.rewardToEdit.rewardType == 'POINTS') {\r\n _this.rewardToEdit.rewardType = 'Points';\r\n _this.openEditModal();\r\n }\r\n });\r\n };\r\n CourseGamificationDetailsController.prototype.openEditModal = function () {\r\n var _this = this;\r\n if (!this.rewardToEdit.showDefaultMessage && !this.rewardToEdit.showMessage) {\r\n this.radioResult = 'none';\r\n }\r\n else if (!this.rewardToEdit.showDefaultMessage && this.rewardToEdit.showMessage) {\r\n this.radioResult = 'custom';\r\n }\r\n else {\r\n this.radioResult = 'default';\r\n }\r\n this.isBadgeTableVisible = false;\r\n $('#collapseSelectBadgeEdit').collapse('hide');\r\n this.courseService.getGameLearningObjectsBadgeIds(this.course.id).then(function (res) {\r\n _this.badgeIds = res;\r\n _this.excludedBadges.forEach(function (b) {\r\n _this.badgeIds.push(b);\r\n });\r\n if (_this.selectedBadge) {\r\n _this.badgeIds.push(_this.selectedBadge.id);\r\n }\r\n _this.loadBadges(false);\r\n });\r\n $(\"#editReward\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n CourseGamificationDetailsController.prototype.closeEditModal = function () {\r\n $(\"#editReward\").modal('hide');\r\n this.clearPopup();\r\n };\r\n CourseGamificationDetailsController.prototype.removeBadge = function () {\r\n var _this = this;\r\n this.badgeIds = this.badgeIds.filter(function (id) { return id !== _this.selectedBadge.id; });\r\n this.selectedBadge = null;\r\n this.selectedBadgeImageUrl = null;\r\n this.newReward.rewardId = null;\r\n this.rewardToEdit.rewardId = null;\r\n if (!this.isBadgeTableVisible) {\r\n this.isBadgeTableVisible = true;\r\n $('#collapseSelectBadgeEdit').collapse('show');\r\n $('#collapseSelectBadge').collapse('show');\r\n }\r\n this.loadBadges(true);\r\n };\r\n CourseGamificationDetailsController.prototype.createReward = function () {\r\n var _this = this;\r\n this.newReward.objectType = SecuredObjectType_1.SecuredObjectType.COURSE.name;\r\n this.newReward.objectId = this.courseId;\r\n this.newReward.gameId = undefined;\r\n if (this.newReward.showDefaultMessage || (!this.newReward.showDefaultMessage && !this.newReward.showMessage)) {\r\n this.newReward.customMessageSubject = undefined;\r\n this.newReward.customMessageBody = undefined;\r\n }\r\n if (this.newReward.rewardType == 'Badge') {\r\n this.newReward.points = 0;\r\n this.newReward.action = StringBuilder_1.StringBuilder.interpolate(RewardActionType_1.RewardActionType.BADGE_COURSE_COMPLETED)\r\n .with(':badgeName', this.selectedBadge.name).build();\r\n }\r\n else if (this.newReward.rewardType == 'Points') {\r\n this.newReward.rewardId = undefined;\r\n var action = this.newReward.points === 1 ? RewardActionType_1.RewardActionType.POINT_COURSE_COMPLETED : RewardActionType_1.RewardActionType.POINTS_COURSE_COMPLETED;\r\n this.newReward.action = StringBuilder_1.StringBuilder.interpolate(action)\r\n .with(':points', this.newReward.points).build();\r\n }\r\n this.gameLearningObjectActionService.createReward(this.newReward).then(function () {\r\n INotifier_1.notifier.success(\"Reward has been saved\");\r\n $(\"#addReward\").modal('hide');\r\n }).catch(function () {\r\n INotifier_1.notifier.error('Creation error');\r\n }).finally(function () {\r\n _this.newReward = {};\r\n _this.selectedBadge = undefined;\r\n _this.radioResult = 'default';\r\n _this.badgesGridModel.filter.searchString = undefined;\r\n _this.badgesGridModel.sorting = [];\r\n _this.rewardsGridModel.loadCurrentPage();\r\n });\r\n };\r\n CourseGamificationDetailsController.prototype.editReward = function () {\r\n var _this = this;\r\n if (this.rewardToEdit.showDefaultMessage || (!this.rewardToEdit.showDefaultMessage && !this.rewardToEdit.showMessage)) {\r\n this.rewardToEdit.customMessageSubject = undefined;\r\n this.rewardToEdit.customMessageBody = undefined;\r\n }\r\n if (this.rewardToEdit.rewardType == 'Badge') {\r\n this.rewardToEdit.points = 0;\r\n this.rewardToEdit.action = StringBuilder_1.StringBuilder.interpolate(RewardActionType_1.RewardActionType.BADGE_COURSE_COMPLETED)\r\n .with(':badgeName', this.selectedBadge.name).build();\r\n }\r\n else if (this.rewardToEdit.rewardType == 'Points') {\r\n this.rewardToEdit.rewardId = undefined;\r\n var action = this.rewardToEdit.points === 1 ? RewardActionType_1.RewardActionType.POINT_COURSE_COMPLETED : RewardActionType_1.RewardActionType.POINTS_COURSE_COMPLETED;\r\n this.rewardToEdit.action = StringBuilder_1.StringBuilder.interpolate(action)\r\n .with(':points', this.rewardToEdit.points).build();\r\n }\r\n this.gameLearningObjectActionService.editReward(this.rewardToEdit.id, this.rewardToEdit).then(function () {\r\n INotifier_1.notifier.success(\"Modifications of the reward have been saved\");\r\n $(\"#editReward\").modal('hide');\r\n }).catch(function () {\r\n INotifier_1.notifier.error('Editing error');\r\n }).finally(function () {\r\n _this.rewardToEdit = {};\r\n _this.selectedBadge = undefined;\r\n _this.radioResult = 'default';\r\n _this.badgesGridModel.filter.searchString = undefined;\r\n _this.badgesGridModel.sorting = [];\r\n _this.rewardsGridModel.loadCurrentPage();\r\n });\r\n };\r\n CourseGamificationDetailsController.prototype.clearPopup = function () {\r\n this.newReward = {};\r\n this.rewardToEdit = {};\r\n this.selectedBadge = undefined;\r\n this.selectedBadgeImageUrl = undefined;\r\n this.radioResult = 'default';\r\n this.badgesGridModel.filter.searchString = undefined;\r\n this.badgesGridModel.sorting = [];\r\n };\r\n CourseGamificationDetailsController.prototype.activate = function (id) {\r\n var _this = this;\r\n this.gameLearningObjectActionService.activate(id).then(function () {\r\n INotifier_1.notifier.success(\"Reward has been activated\");\r\n _this.rewardsGridModel.loadCurrentPage();\r\n if (_this.rewardToEdit) {\r\n _this.rewardToEdit.active = true;\r\n }\r\n });\r\n };\r\n CourseGamificationDetailsController.prototype.deactivate = function (id) {\r\n var _this = this;\r\n this.gameLearningObjectActionService.deactivate(id).then(function () {\r\n INotifier_1.notifier.success(\"Reward has been deactivated\");\r\n _this.rewardsGridModel.loadCurrentPage();\r\n if (_this.rewardToEdit) {\r\n _this.rewardToEdit.active = false;\r\n }\r\n });\r\n };\r\n CourseGamificationDetailsController.prototype.remove = function (id) {\r\n var _this = this;\r\n this.dialogService.confirm(\"This reward will be removed from the system. Continue?\", {\r\n title: \"Delete reward\"\r\n }).then(function () {\r\n _this.gameLearningObjectActionService.remove(id).then(function () {\r\n INotifier_1.notifier.success(\"Reward has been removed\");\r\n _this.rewardsGridModel.loadCurrentPage();\r\n if (_this.rewardToEdit) {\r\n _this.closeEditModal();\r\n }\r\n _this.loadBadges(true);\r\n });\r\n });\r\n };\r\n CourseGamificationDetailsController.prototype.formatTypeString = function (str) {\r\n if (!str)\r\n return str;\r\n return str[0].toUpperCase() + str.slice(1).toLowerCase();\r\n };\r\n CourseGamificationDetailsController.prototype.clearSymbols = function (level) {\r\n if (level.points.toString().indexOf('.') !== -1) {\r\n level.points = +level.points.toString().replace('.', '');\r\n }\r\n if (level.newBonusPoints.toString().indexOf('.') !== -1) {\r\n level.newBonusPoints = +level.newBonusPoints.toString().replace('.', '');\r\n }\r\n };\r\n CourseGamificationDetailsController.prototype.getImageBadge = function (badge) {\r\n if (badge) {\r\n if (!badge.fileId && badge.name) {\r\n var imageName = badge.name.split(' ').join('');\r\n switch (badge.id) {\r\n case 100:\r\n imageName = \"CourseFinisher\";\r\n break;\r\n case 101:\r\n imageName = \"LearningPathFinisher\";\r\n break;\r\n }\r\n return \"themes/default/img/badges/\" + imageName + \".png\";\r\n }\r\n }\r\n return badge.previewUrl ? badge.previewUrl : '';\r\n };\r\n CourseGamificationDetailsController.NAME = \"courses.CourseGamificationDetailsController\";\r\n CourseGamificationDetailsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n CourseService_1.CourseService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n GameLearningObjectActionService_1.GameLearningObjectActionService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return CourseGamificationDetailsController;\r\n})();\r\nexports.CourseGamificationDetailsController = CourseGamificationDetailsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../components/dialog/DialogService\":166,\"../gamification/BadgesService\":245,\"../gamification/GameLearningObjectActionService\":246,\"../gamification/models/RewardActionType\":252,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../security/permissions/SecuredObjectType\":424,\"../urls/CoursesRouter\":468,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./CourseService\":211}],199:[function(require,module,exports){\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar TimeZoneType_1 = require(\"../webinars/models/TimeZoneType\");\r\nvar CourseILTService_1 = require(\"./CourseILTService\");\r\nvar ILTRepeatType_1 = require(\"../ilt/models/ILTRepeatType\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar ILTSessionRegistrationStatus_1 = require(\"../ilt/models/ILTSessionRegistrationStatus\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar PageMode_1 = require(\"../PageMode\");\r\nvar CourseProgressStatus_1 = require(\"./models/CourseProgressStatus\");\r\nvar Storage_1 = require(\"../infrastructure/Storage\");\r\nvar ProgressService_1 = require(\"./ProgressService\");\r\nvar CourseILTController = (function () {\r\n function CourseILTController($http, $routeParams, $q, $timeout, $window, $rootScope, url, securityService, permissionsService, authService, authManager, courseService, sessionStorageWrapper, progressService, courseILTService, coursesRouter) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$routeParams = $routeParams;\r\n this.$q = $q;\r\n this.$timeout = $timeout;\r\n this.$window = $window;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.courseService = courseService;\r\n this.sessionStorageWrapper = sessionStorageWrapper;\r\n this.progressService = progressService;\r\n this.courseILTService = courseILTService;\r\n this.coursesRouter = coursesRouter;\r\n this.MIN_CAPACITY = 0;\r\n this.MAX_CAPACITY = 100000;\r\n this.ILT_SESSIONS_LIST_VIEW_MODE = \"iltSessionsList\";\r\n this.ILT_SESSION_MANAGEMENT_VIEW_MODE = \"iltSessionManagement\";\r\n this.ILT_SESSIONS_SCHEDULING_MAX_COUNT = 260;\r\n this.currentUser = {};\r\n this.course = {};\r\n this.isCourseLoaded = false;\r\n this.isDataLoading = false;\r\n this.businessUnitSelected = false;\r\n this.businessUnitCreate = false;\r\n this.newSession = { instructorIds: [] };\r\n this.timeOffset = 0;\r\n this.timeZone = TimeZoneType_1.TimeZone;\r\n this.iltRepeat = ILTRepeatType_1.ILTRepeat;\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.securityService\r\n .demandCoursePermissions(courseIdStr, function (coursePermissions) { return coursePermissions.viewOtherUsersProgress; });\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.currentUser);\r\n });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.loadCourse();\r\n this.showSessionsList();\r\n }\r\n CourseILTController.prototype.getCourseProgress = function () {\r\n var _this = this;\r\n this.courseProgressId = this.sessionStorageWrapper.get(this.progressService.COURSE_PROGRESS_ID_STORAGE_KEY);\r\n this.progressService.getCourseProgress(this.courseId, this.courseProgressId)\r\n .then(function (result) {\r\n _this.initializeCourseProgress(result);\r\n });\r\n };\r\n CourseILTController.prototype.initializeCourseProgress = function (courseProgress) {\r\n this.courseProgress = angular.copy(courseProgress);\r\n this.courseProgressId = this.courseProgress.id;\r\n this.sessionStorageWrapper.put(this.progressService.COURSE_PROGRESS_ID_STORAGE_KEY, this.courseProgressId);\r\n this.courseStarted = (courseProgress.status && courseProgress.status !== CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED]);\r\n this.isCourseLoaded = true;\r\n };\r\n CourseILTController.prototype.loadCourse = function () {\r\n var _this = this;\r\n this.courseService.get(this.courseId)\r\n .then(function (result) {\r\n _this.course = angular.copy(result);\r\n _this.getCourseProgress();\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter, \"ILT\");\r\n });\r\n return this.courseService.getCourseILTSections(this.courseId)\r\n .then(function (result) {\r\n _this.iltSections = angular.copy(result);\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.showSessionCreationDialog = function () {\r\n var _this = this;\r\n var currentDate = new Date();\r\n this.businessUnitCreate = true;\r\n this.businessUnitSelected = true;\r\n this.course.businessUnitId\r\n ? this.newSession.businessUnitId = this.course.businessUnitId\r\n : (this.currentUser.businessUnits\r\n ? this.newSession.businessUnitId = this.currentUser.businessUnits[0]\r\n : this.newSession.businessUnitId = null);\r\n this.courseILTService.getLocationsByBusinessUnitId(this.courseId, this.newSession.businessUnitId)\r\n .then(function (result) {\r\n return _this.locations = result;\r\n });\r\n this.newSession.sectionId = this.iltSections && this.iltSections.length > 0 ? this.iltSections[0].id : null;\r\n this.newSession.enableWaitlist = true;\r\n this.newSession.autoRegistrationFromWaitlist = true;\r\n this.newSession.autoRegistration = false;\r\n this.newSession.allowSelfRegistration = true;\r\n this.newSession.allowSelfReporting = true;\r\n this.location = null;\r\n this.newSession.timezone = TimeZoneType_1.getLocalDefaultTimezone();\r\n this.calculateOffset();\r\n this.sessionStartDateText = moment(moment().valueOf() - this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"M/D/YYYY\");\r\n this.sessionEndDateText = moment(moment().valueOf() - this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"M/D/YYYY\");\r\n this.sessionRepeatType = ILTRepeatType_1.ILTRepeatType[ILTRepeatType_1.ILTRepeatType.ONCE];\r\n this.sessionStartTimeText = moment((currentDate.setHours(currentDate.getHours() + 1), currentDate.setMinutes(null)) - this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"hh:mm a\");\r\n this.sessionEndTimeText = moment((currentDate.setHours(currentDate.getHours() + 1)) - this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"hh:mm a\");\r\n this.showCreationEditingModal();\r\n };\r\n CourseILTController.prototype.showSessionEditingDialog = function (sessionId) {\r\n var _this = this;\r\n this.sessionRepeatType = null;\r\n this.businessUnitCreate = false;\r\n this.businessUnitSelected = true;\r\n this.isDataLoading = true;\r\n this.courseILTService.getLocationsBySessionId(this.courseId, sessionId)\r\n .then(function (result) {\r\n return _this.locations = result;\r\n });\r\n this.courseILTService.getSession(this.courseId, sessionId)\r\n .then(function (session) {\r\n _this.newSession = angular.copy(session);\r\n return _this.courseILTService.getSectionForSession(_this.courseId, sessionId)\r\n .then(function (result) { return _this.newSession.sectionId = result; });\r\n })\r\n .then(function () {\r\n _this.calculateOffset();\r\n _this.sessionStartDateText = moment(_this.newSession.startDate - _this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"M/D/YYYY\");\r\n _this.sessionStartTimeText = moment(_this.newSession.startDate - _this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"hh:mm a\");\r\n _this.sessionEndTimeText = moment(_this.newSession.endDate - _this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"hh:mm a\");\r\n _this.location = _this.locations.filter(function (l) { return l.id == _this.newSession.locationId; })[0];\r\n if (!_this.newSession.instructorIds) {\r\n _this.newSession.instructorIds = [];\r\n }\r\n _this.showCreationEditingModal();\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.showCreationEditingModal = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#creationEditingDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n CourseILTController.prototype.closeCreationEditingModal = function () {\r\n this.cleanSession();\r\n $(\"#creationEditingDialog\").modal('hide');\r\n };\r\n CourseILTController.prototype.isDataValid = function () {\r\n this.calculateOffset();\r\n var start_time = Moment_1.Moment.textToJavaDate(this.sessionStartTimeText, \"hh:mm a\") - new Date().getTimezoneOffset() * 60000;\r\n start_time = start_time - Math.floor((start_time / 86400000)) * 86400000;\r\n var end_time = Moment_1.Moment.textToJavaDate(this.sessionEndTimeText, \"hh:mm a\") - new Date().getTimezoneOffset() * 60000;\r\n end_time = end_time - Math.floor((end_time / 86400000)) * 86400000;\r\n var one = (new Date().getTime() + new Date().getTimezoneOffset() * 60000 - this.timeOffset) < (Moment_1.Moment.textToJavaDate(this.sessionStartDateText) + start_time);\r\n var two = (new Date().getTime() + new Date().getTimezoneOffset() * 60000 - this.timeOffset) < (Moment_1.Moment.textToJavaDate(this.sessionStartDateText) + end_time);\r\n var tree = start_time < end_time;\r\n var four = !this.sessionRepeatType || this.sessionRepeatType == ILTRepeatType_1.ILTRepeatType[ILTRepeatType_1.ILTRepeatType.ONCE]\r\n ? true\r\n : Moment_1.Moment.textToJavaDate(this.sessionEndDateText) > Moment_1.Moment.textToJavaDate(this.sessionStartDateText) + end_time;\r\n return one && two && tree && four;\r\n };\r\n CourseILTController.prototype.scheduleSession = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.newSession.seriesId = null;\r\n this.iltSections.forEach(function (section) {\r\n if (section.id == _this.newSession.sectionId) {\r\n _this.newSession.title = section.name;\r\n }\r\n });\r\n this.newSession.locationId = this.location.id;\r\n var start_time = Moment_1.Moment.textToJavaDate(this.sessionStartTimeText, \"hh:mm a\") - new Date().getTimezoneOffset() * 60000;\r\n start_time = start_time - Math.floor((start_time / 86400000)) * 86400000;\r\n this.newSession.startDate = Moment_1.Moment.textToJavaDate(this.sessionStartDateText) + start_time\r\n - new Date().getTimezoneOffset() * 60000 + this.timeOffset;\r\n var end_time = Moment_1.Moment.textToJavaDate(this.sessionEndTimeText, \"hh:mm a\") - new Date().getTimezoneOffset() * 60000;\r\n end_time = end_time - Math.floor((end_time / 86400000)) * 86400000;\r\n this.newSession.endDate = Moment_1.Moment.textToJavaDate(this.sessionStartDateText) + end_time\r\n - new Date().getTimezoneOffset() * 60000 + this.timeOffset;\r\n var endOnDate = Moment_1.Moment.textToJavaDate(this.sessionEndDateText) - new Date().getTimezoneOffset() * 60000 + this.timeOffset;\r\n var oneDayDelta = 24 * 60 * 60 * 1000;\r\n var oneWeekDelta = 7 * oneDayDelta;\r\n var endOnDateLimit = endOnDate + oneDayDelta;\r\n var scheduledSessions = [];\r\n if (this.sessionRepeatType == ILTRepeatType_1.ILTRepeatType[ILTRepeatType_1.ILTRepeatType.ONCE]) {\r\n scheduledSessions.push(this.newSession);\r\n }\r\n else if (this.sessionRepeatType == ILTRepeatType_1.ILTRepeatType[ILTRepeatType_1.ILTRepeatType.DAILY]) {\r\n var scheduledSessionsCount = 0;\r\n while (this.newSession.endDate < endOnDateLimit && scheduledSessionsCount < this.ILT_SESSIONS_SCHEDULING_MAX_COUNT) {\r\n scheduledSessions.push(this.newSession);\r\n scheduledSessionsCount++;\r\n this.newSession = angular.copy(this.newSession);\r\n this.newSession.startDate += oneDayDelta;\r\n this.newSession.endDate += oneDayDelta;\r\n }\r\n }\r\n else if (this.sessionRepeatType == ILTRepeatType_1.ILTRepeatType[ILTRepeatType_1.ILTRepeatType.WEEKLY]) {\r\n var scheduledSessionsCount = 0;\r\n while (this.newSession.endDate < endOnDateLimit && scheduledSessionsCount < this.ILT_SESSIONS_SCHEDULING_MAX_COUNT) {\r\n scheduledSessions.push(this.newSession);\r\n scheduledSessionsCount++;\r\n this.newSession = angular.copy(this.newSession);\r\n this.newSession.startDate += oneWeekDelta;\r\n this.newSession.endDate += oneWeekDelta;\r\n }\r\n }\r\n else if (this.sessionRepeatType == ILTRepeatType_1.ILTRepeatType[ILTRepeatType_1.ILTRepeatType.EVERY_WEEK_DAY]) {\r\n var scheduledSessionsCount = 0;\r\n while (this.newSession.endDate < endOnDateLimit && scheduledSessionsCount < this.ILT_SESSIONS_SCHEDULING_MAX_COUNT) {\r\n if (this.isWorkingWeekDay(this.newSession.startDate + new Date().getTimezoneOffset() * 60000 - this.timeOffset)) {\r\n scheduledSessions.push(this.newSession);\r\n scheduledSessionsCount++;\r\n this.newSession = angular.copy(this.newSession);\r\n }\r\n this.newSession.startDate += oneDayDelta;\r\n this.newSession.endDate += oneDayDelta;\r\n }\r\n }\r\n var seriesPromise;\r\n if (this.sessionRepeatType != ILTRepeatType_1.ILTRepeatType[ILTRepeatType_1.ILTRepeatType.ONCE])\r\n seriesPromise = this.courseILTService.createSeries(this.courseId).then(function (series) { return _this.newSession.seriesId = series.id; });\r\n var promises = [];\r\n this.$q.all([seriesPromise]).finally(function () {\r\n scheduledSessions.forEach(function (session) {\r\n session.seriesId = _this.newSession.seriesId;\r\n promises.push(_this.courseILTService.scheduleSession(_this.courseId, session));\r\n });\r\n _this.$q.all(promises)\r\n .finally(function () {\r\n _this.closeCreationEditingModal();\r\n _this.iltSessionsGridModel.loadPage(0);\r\n _this.isDataLoading = false;\r\n });\r\n });\r\n };\r\n CourseILTController.prototype.updateSession = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.iltSections.forEach(function (section) {\r\n if (section.id == _this.newSession.sectionId) {\r\n _this.newSession.title = section.name;\r\n }\r\n });\r\n this.newSession.locationId = this.location.id;\r\n var start_time = Moment_1.Moment.textToJavaDate(this.sessionStartTimeText, \"hh:mm a\") - new Date().getTimezoneOffset() * 60000;\r\n start_time = start_time - Math.floor((start_time / 86400000)) * 86400000;\r\n this.newSession.startDate = Moment_1.Moment.textToJavaDate(this.sessionStartDateText) + start_time\r\n - new Date().getTimezoneOffset() * 60000 + this.timeOffset;\r\n var end_time = Moment_1.Moment.textToJavaDate(this.sessionEndTimeText, \"hh:mm a\") - new Date().getTimezoneOffset() * 60000;\r\n end_time = end_time - Math.floor((end_time / 86400000)) * 86400000;\r\n this.newSession.endDate = Moment_1.Moment.textToJavaDate(this.sessionStartDateText) + end_time\r\n - new Date().getTimezoneOffset() * 60000 + this.timeOffset;\r\n this.courseILTService.updateSession(this.courseId, this.newSession)\r\n .finally(function () {\r\n _this.closeCreationEditingModal();\r\n _this.iltSessionsGridModel.loadPage(0);\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.cleanSession = function () {\r\n this.newSession = { instructorIds: [] };\r\n this.sessionStartDateText = null;\r\n this.sessionStartTimeText = null;\r\n this.sessionEndDateText = null;\r\n this.sessionEndTimeText = null;\r\n this.sessionRepeatType = null;\r\n this.location = null;\r\n };\r\n CourseILTController.prototype.isWorkingWeekDay = function (date) {\r\n return moment(date).isoWeekday() != 6\r\n && moment(date).isoWeekday() != 7;\r\n };\r\n CourseILTController.prototype.dateToTimeZoneDate = function (timeZone, date) {\r\n var _this = this;\r\n var offset;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == timeZone) {\r\n offset = _this.getTimeZoneOffset(t.value);\r\n }\r\n });\r\n return (date + new Date().getTimezoneOffset() * 60000 - offset);\r\n };\r\n CourseILTController.prototype.calculateOffset = function () {\r\n var _this = this;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == _this.newSession.timezone.toString()) {\r\n _this.timeOffset = _this.getTimeZoneOffset(t.value);\r\n }\r\n });\r\n };\r\n CourseILTController.prototype.getTimeZoneOffset = function (timeZone) {\r\n var now = new Date();\r\n var localTime = Math.floor((now.getTime() / 1000)) * 1000;\r\n var timeZoneTime = new Date(now.toLocaleString(\"en-US\", { timeZone: timeZone })).getTime();\r\n return now.getTimezoneOffset() * 60000 + (localTime - timeZoneTime);\r\n };\r\n CourseILTController.prototype.getAbbreviation = function (timeZone) {\r\n var abbreviation;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == timeZone) {\r\n abbreviation = t.abbreviation;\r\n }\r\n });\r\n return abbreviation;\r\n };\r\n CourseILTController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.location = null;\r\n this.businessUnitSelected = false;\r\n this.courseILTService.getLocationsByBusinessUnitId(this.courseId, this.newSession.businessUnitId)\r\n .then(function (result) {\r\n return _this.locations = result;\r\n });\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n };\r\n CourseILTController.prototype.getInstructorsUrl = function (businessUnitId) {\r\n var baseUrl = \"/api/courses/:courseId/ilt/instructors/available\";\r\n if (businessUnitId) {\r\n return StringBuilder_1.StringBuilder.interpolate(baseUrl + \"?businessUnitId=:businessUnitId\")\r\n .with(\":courseId\", this.courseId)\r\n .with(\":businessUnitId\", businessUnitId)\r\n .build();\r\n }\r\n else {\r\n return StringBuilder_1.StringBuilder.interpolate(baseUrl)\r\n .with(\":courseId\", this.courseId)\r\n .build();\r\n }\r\n };\r\n CourseILTController.prototype.showSessionsList = function () {\r\n this.isDataLoading = true;\r\n this.viewMode = this.ILT_SESSIONS_LIST_VIEW_MODE;\r\n this.selectedSession = {};\r\n this.iltSessionsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/courses/:courseId/ilt\")\r\n .param(\":courseId\", this.courseId)\r\n .service()));\r\n this.iltSessionsGridModel.pageSize = 10;\r\n this.iltSessionsGridModel.loadPage(0);\r\n this.isDataLoading = false;\r\n };\r\n CourseILTController.prototype.showSessionManagement = function (session) {\r\n this.selectedSession = angular.copy(session);\r\n this.isDataLoading = true;\r\n this.viewMode = this.ILT_SESSION_MANAGEMENT_VIEW_MODE;\r\n this.registeredLearnersGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/courses/:courseId/ilt/:sessionId/participants\")\r\n .param(\":courseId\", this.courseId)\r\n .param(\":sessionId\", session.id)\r\n .service()));\r\n this.registeredLearnersGridModel.pageSize = 5;\r\n this.registeredLearnersGridModel.requestsPageMode = PageMode_1.PageMode[PageMode_1.PageMode.ENTRIES_AND_TOTAL];\r\n this.registeredLearnersGridModel.filter.status = ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED];\r\n this.registeredLearnersGridModel.loadPage(0);\r\n this.waitlistedLearnersGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/courses/:courseId/ilt/:sessionId/participants\")\r\n .param(\":courseId\", this.courseId)\r\n .param(\":sessionId\", session.id)\r\n .service()));\r\n this.waitlistedLearnersGridModel.pageSize = 5;\r\n this.waitlistedLearnersGridModel.filter.status = ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST];\r\n this.waitlistedLearnersGridModel.loadPage(0);\r\n this.availableLearnersGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/courses/:courseId/ilt/:sessionId/participants/available\")\r\n .param(\":courseId\", this.courseId)\r\n .param(\":sessionId\", session.id)\r\n .service()));\r\n this.availableLearnersGridModel.pageSize = 5;\r\n this.availableLearnersGridModel.loadPage(0);\r\n this.availableLearnersGridModel.filter.courseIsStarted = true;\r\n this.availableLearnersGridModel.filter.courseIsNotStarted = true;\r\n this.isDataLoading = false;\r\n };\r\n CourseILTController.prototype.registerAvailableUser = function (userId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.createParticipant(this.courseId, this.selectedSession.id, userId, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED], false)\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.registerAllAvailableUsers = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.createAllParticipants(this.courseId, this.selectedSession.id, this.availableLearnersGridModel.filter.courseIsStarted, this.availableLearnersGridModel.filter.courseIsNotStarted, this.availableLearnersGridModel.filter.userNameSearchString, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED])\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.waitlistAvailableUser = function (userId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.createParticipant(this.courseId, this.selectedSession.id, userId, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST], false)\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.waitlistAllAvailableUsers = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.createAllParticipants(this.courseId, this.selectedSession.id, this.availableLearnersGridModel.filter.courseIsStarted, this.availableLearnersGridModel.filter.courseIsNotStarted, this.availableLearnersGridModel.filter.userNameSearchString, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST])\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.registerWaitlistedParticipant = function (participantId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.changeParticipantStatus(this.courseId, this.selectedSession.id, participantId, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED], false)\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.registerAllWaitlistedParticipants = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.changeParticipantsStatus(this.courseId, this.selectedSession.id, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST], ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED])\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.unregisterWaitlistedParticipant = function (participantId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.deleteParticipant(this.courseId, this.selectedSession.id, participantId)\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.unregisterAllWaitlistedParticipants = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.deleteAllParticipants(this.courseId, this.selectedSession.id, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST])\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.unregisterRegisteredParticipant = function (participantId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.deleteParticipant(this.courseId, this.selectedSession.id, participantId)\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.unregisterAllRegisteredParticipants = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.deleteAllParticipants(this.courseId, this.selectedSession.id, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED])\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n if (_this.selectedSession.enableWaitlist) {\r\n INotifier_1.notifier.warning(\"Auto registration from waitlist will not be performed. Please register learners manually if needed.\");\r\n }\r\n });\r\n };\r\n CourseILTController.prototype.waitlistRegisteredParticipant = function (participantId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.changeParticipantStatus(this.courseId, this.selectedSession.id, participantId, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST], false)\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.waitlistAllRegisteredParticipants = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseILTService.changeParticipantsStatus(this.courseId, this.selectedSession.id, ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.REGISTERED], ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus[ILTSessionRegistrationStatus_1.ILTSessionRegistrationStatus.IN_WAIT_LIST])\r\n .finally(function () {\r\n _this.reloadLearnersGrids();\r\n _this.isDataLoading = false;\r\n if (_this.selectedSession.enableWaitlist) {\r\n INotifier_1.notifier.warning(\"Auto registration from waitlist will not be performed. Please register learners manually if needed.\");\r\n }\r\n });\r\n };\r\n CourseILTController.prototype.changeRegisteredSectionAttendance = function (participant, status) {\r\n var _this = this;\r\n if (participant.attendanceStatus == status) {\r\n return;\r\n }\r\n this.isDataLoading = true;\r\n this.courseILTService.changeParticipantAttendance(this.courseId, this.selectedSession.id, participant.id, status)\r\n .finally(function () {\r\n _this.registeredLearnersGridModel.loadCurrentPage();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseILTController.prototype.reloadLearnersGrids = function () {\r\n this.registeredLearnersGridModel.loadPage(0);\r\n this.waitlistedLearnersGridModel.loadPage(0);\r\n this.availableLearnersGridModel.loadPage(0);\r\n };\r\n CourseILTController.prototype.isAbleToEdit = function (sessionBusinessUnitId) {\r\n return this.currentUser.allBusinessUnits\r\n || (!!this.currentUser.businessUnits && this.currentUser.businessUnits.some(function (bu) { return bu === sessionBusinessUnitId; }));\r\n };\r\n CourseILTController.prototype.cancelSession = function () {\r\n var _this = this;\r\n if (this.waitlistedLearnersGridModel.entries.length > 0 || this.registeredLearnersGridModel.entries.length > 0) {\r\n INotifier_1.notifier.error(\"Session can't be cancelled while at least one registrant exists. Please press button Unregister All and then try again.\");\r\n return;\r\n }\r\n this.isDataLoading = true;\r\n this.courseILTService.cancelSession(this.courseId, this.selectedSession.id)\r\n .then(function () {\r\n _this.showSessionsList();\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.session.contains.registered.learners\") {\r\n INotifier_1.notifier.error(\"Session can't be cancelled while at least one registrant exists. Please press button Unregister All and then try again.\");\r\n }\r\n _this.reloadLearnersGrids();\r\n })\r\n .finally(function () { return _this.isDataLoading = false; });\r\n };\r\n CourseILTController.prototype.exportToPdf = function () {\r\n var _this = this;\r\n var parameters = {\r\n userId: this.currentUser.id,\r\n courseId: Number(this.courseId),\r\n sessionId: this.selectedSession.id\r\n };\r\n this.courseILTService.getSessionLearnersReport(parameters)\r\n .then(function (downloadUrl) { return _this.$window.open(downloadUrl); });\r\n };\r\n CourseILTController.prototype.courseIsStartedChecker = function () {\r\n if (!this.availableLearnersGridModel.filter.courseIsStarted) {\r\n if (!this.availableLearnersGridModel.filter.courseIsNotStarted) {\r\n this.availableLearnersGridModel.filter.courseIsStarted = true;\r\n }\r\n }\r\n };\r\n CourseILTController.prototype.courseIsNotStartedChecker = function () {\r\n if (!this.availableLearnersGridModel.filter.courseIsNotStarted) {\r\n if (!this.availableLearnersGridModel.filter.courseIsStarted) {\r\n this.availableLearnersGridModel.filter.courseIsNotStarted = true;\r\n }\r\n }\r\n };\r\n CourseILTController.prototype.changeLocation = function (value) {\r\n this.location = value;\r\n };\r\n CourseILTController.prototype.applyFilter = function () {\r\n this.availableLearnersGridModel.loadCurrentPage();\r\n $(\"#filterModal\").modal(\"hide\");\r\n };\r\n CourseILTController.prototype.clearFilter = function () {\r\n this.availableLearnersGridModel.filter.userNameSearchString = \"\";\r\n this.availableLearnersGridModel.filter.courseIsStarted = true;\r\n this.availableLearnersGridModel.filter.courseIsNotStarted = true;\r\n this.applyFilter();\r\n };\r\n CourseILTController.prototype.onCancel = function () {\r\n this.$window.location.reload();\r\n };\r\n CourseILTController.prototype.decodeStatus = function (title) {\r\n var result = title;\r\n switch (title) {\r\n case \"scheduled\": {\r\n result = \"scheduled\";\r\n break;\r\n }\r\n case \"finished\": {\r\n result = \"finished\";\r\n break;\r\n }\r\n case \"cancelled\": {\r\n result = \"cancelled\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n CourseILTController.NAME = \"courses.CourseILTController\";\r\n CourseILTController.$inject = [\r\n \"$http\",\r\n \"$routeParams\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"$window\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n CourseService_1.CourseService.NAME,\r\n Storage_1.Storages.SESSION_NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n CourseILTService_1.CourseILTService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return CourseILTController;\r\n})();\r\nexports.CourseILTController = CourseILTController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../PageMode\":6,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../ilt/models/ILTRepeatType\":281,\"../ilt/models/ILTSessionRegistrationStatus\":283,\"../infrastructure/Storage\":295,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/Moment\":518,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"../webinars/models/TimeZoneType\":530,\"./CourseILTService\":200,\"./CourseService\":211,\"./ProgressService\":219,\"./models/CourseProgressStatus\":222}],200:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CourseILTService = (function () {\r\n function CourseILTService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n }\r\n CourseILTService.prototype.getAnyILTSectionsExists = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/anyInCourse\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.getSession = function (courseId, sessionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/:sessionId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.cancelSession = function (courseId, sessionId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/ilt/:sessionId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.scheduleSession = function (courseId, iltSession) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/ilt\")\r\n .param(\":courseId\", courseId)\r\n .service(), iltSession)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.updateSession = function (courseId, iltSession) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/ilt/:sessionId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", iltSession.id)\r\n .service(), iltSession)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.createSeries = function (courseId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/ilt/series\")\r\n .param(\":courseId\", courseId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.getSeries = function (seriesId, courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/series/:seriesId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":seriesId\", seriesId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.createAllParticipants = function (courseId, sessionId, courseIsStarted, courseIsNotStarted, userNameSearchString, status) {\r\n var requestData = {\r\n status: status\r\n };\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/ilt/:sessionId/participants/all\" +\r\n \"?courseIsStarted=:courseIsStarted&courseIsNotStarted=:courseIsNotStarted&userNameFilter=:userNameFilter\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .param(\":courseIsStarted\", courseIsStarted)\r\n .param(\":courseIsNotStarted\", courseIsNotStarted)\r\n .param(\":userNameFilter\", userNameSearchString)\r\n .service(), requestData)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.createParticipant = function (courseId, sessionId, userId, status, self) {\r\n var requestData = {\r\n userId: userId,\r\n status: status\r\n };\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/ilt/:sessionId/participants?self=:self\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .param(\":self\", self)\r\n .service(), requestData)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.createSeriesParticipants = function (courseId, seriesId, userId, status, self, iltSessionsIds) {\r\n var requestData = {\r\n userId: userId,\r\n status: status,\r\n iltSessionsIds: iltSessionsIds\r\n };\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/ilt/series/:seriesId/participants?self=:self\")\r\n .param(\":courseId\", courseId)\r\n .param(\":seriesId\", seriesId)\r\n .param(\":self\", self)\r\n .service(), requestData)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.deleteParticipantsFromSeries = function (courseId, seriesId, sessionId, userId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/ilt/series/:seriesId/participants?userId=:userId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":seriesId\", seriesId)\r\n .param(\":userId\", userId)\r\n .service(), { params: { sessionId: sessionId } })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.changeParticipantStatus = function (courseId, sessionId, sessionParticipantId, status, self) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/ilt/:sessionId/participants/:sessionParticipantId/status?self=:self\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .param(\":sessionParticipantId\", sessionParticipantId)\r\n .param(\":self\", self)\r\n .service(), { status: status })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.changeParticipantsStatus = function (courseId, sessionId, registrationStatus, requiredStatus) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/ilt/:sessionId/participants/status?registrationStatus=:registrationStatus\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .param(\":registrationStatus\", registrationStatus)\r\n .service(), { status: requiredStatus })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.changeParticipantAttendance = function (courseId, sessionId, sessionParticipantId, status) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/ilt/:sessionId/participants/:sessionParticipantId/attendance\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .param(\":sessionParticipantId\", sessionParticipantId)\r\n .service(), { status: status })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.deleteParticipant = function (courseId, sessionId, sessionParticipantId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/ilt/:sessionId/participants/:sessionParticipantId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .param(\":sessionParticipantId\", sessionParticipantId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.deleteAllParticipants = function (courseId, sessionId, registrationStatus) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/ilt/:sessionId/participants?registrationStatus=:registrationStatus\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .param(\":registrationStatus\", registrationStatus)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.getSessionsList = function (courseId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/sections/:sectionId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.getSectionForSession = function (courseId, sessionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/:sessionId/section\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.getSessionLearnersReport = function (parameters) {\r\n var _this = this;\r\n var reportType = 'SESSION_LEARNERS_REPORT';\r\n return this.$http.post(this.url.base(\"/api/reports/downloadToken/:reportType\")\r\n .param(\":reportType\", reportType)\r\n .service(), {\r\n parameters: JSON.stringify(parameters)\r\n }).then(function (result) { return _this.url.base(\"/api/reports/download/:token\").param(\":token\", result.data.token).service(); });\r\n };\r\n CourseILTService.prototype.getLocationsBySessionId = function (courseId, sessionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/:sessionId/locations\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sessionId\", sessionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.getLocationsByBusinessUnitId = function (courseId, businessUnitId) {\r\n return this.$http.get(this.url.service(\"/api/courses/\" + courseId + \"/ilt/newSessionLocations\"), { params: { businessUnitId: businessUnitId } })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.prototype.removeParticipantFromIltSessionsByCourseId = function (userId, courseId) {\r\n return this.$http.delete(this.url.service(\"/api/courses/\" + courseId + \"/ilt/participants/\" + userId + \"/unregister\"), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseILTService.NAME = \"courses.CourseILTService\";\r\n CourseILTService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return CourseILTService;\r\n})();\r\nexports.CourseILTService = CourseILTService;\r\n},{\"../utils/UrlService\":528}],201:[function(require,module,exports){\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar ProgressService_1 = require(\"./ProgressService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar Storage_1 = require(\"./../infrastructure/Storage\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar CourseProgressStatus_1 = require(\"./models/CourseProgressStatus\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar CourseInfoController = (function () {\r\n function CourseInfoController($q, $rootScope, $location, securityService, $routeParams, url, coursesRouter, courseService, progressService, authService, authManager, sessionStorageWrapper, permissionsApi, learningPathsRouter) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.securityService = securityService;\r\n this.$routeParams = $routeParams;\r\n this.url = url;\r\n this.coursesRouter = coursesRouter;\r\n this.courseService = courseService;\r\n this.progressService = progressService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.sessionStorageWrapper = sessionStorageWrapper;\r\n this.permissionsApi = permissionsApi;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.owners = [];\r\n this.course = {};\r\n this.currentUser = {};\r\n this.relatedLearningPaths = [];\r\n this.isCourseLoaded = false;\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.securityService\r\n .demandViewCoursePermissions(courseIdStr, function (coursePermissions) { return coursePermissions.view; });\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0) {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY);\r\n }\r\n this.loadLandingPage();\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.currentUser);\r\n });\r\n var loadCoursePromises = [\r\n this.loadCourse(),\r\n this.loadOwners(),\r\n this.loadRelatedLearningPaths(),\r\n this.loadCourseProgress()\r\n ];\r\n $q.all(loadCoursePromises).then(function () {\r\n _this.isCourseLoaded = true;\r\n });\r\n this.loadLandingPage();\r\n }\r\n CourseInfoController.prototype.loadCourse = function () {\r\n var _this = this;\r\n return this.courseService.get(this.courseId)\r\n .then(function (result) {\r\n _this.course = angular.copy(result);\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter, \"About\");\r\n _this.course.endDateText = Moment_1.Moment.isValidDate(result.endDate);\r\n _this.course.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n return _this.course;\r\n });\r\n };\r\n CourseInfoController.prototype.loadOwners = function () {\r\n var _this = this;\r\n return this.courseService.getCourseOwners(this.courseId)\r\n .then(function (result) {\r\n _this.owners = angular.copy(result);\r\n return _this.owners;\r\n });\r\n };\r\n CourseInfoController.prototype.loadLandingPage = function () {\r\n var _this = this;\r\n this.courseService.getLandingPage(this.courseId)\r\n .then(function (result) {\r\n _this.landingPage = angular.copy(result);\r\n });\r\n };\r\n CourseInfoController.prototype.isTabletVersion = function () {\r\n return window.innerWidth < 992;\r\n };\r\n CourseInfoController.prototype.loadRelatedLearningPaths = function () {\r\n var _this = this;\r\n return this.courseService.getRelatedLearningPaths(this.courseId)\r\n .then(function (learningPaths) {\r\n _this.relatedLearningPaths = angular.copy(learningPaths);\r\n return _this.relatedLearningPaths;\r\n });\r\n };\r\n CourseInfoController.prototype.loadCourseProgress = function () {\r\n var _this = this;\r\n return this.progressService.getCourseProgress(this.courseId)\r\n .then(function (result) {\r\n _this.courseProgress = angular.copy(result);\r\n _this.courseStarted = (result.status && result.status !== CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED]);\r\n return _this.courseProgress;\r\n });\r\n };\r\n CourseInfoController.NAME = \"courses.CourseInfoController\";\r\n CourseInfoController.$inject = [\r\n \"$q\",\r\n \"$rootScope\",\r\n \"$location\",\r\n SecurityService_1.SecurityService.NAME,\r\n \"$routeParams\",\r\n UrlService_1.UrlService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n Storage_1.Storages.SESSION_NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME\r\n ];\r\n return CourseInfoController;\r\n})();\r\nexports.CourseInfoController = CourseInfoController;\r\n},{\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../urls/LearningPathsRouter\":477,\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"./../infrastructure/Storage\":295,\"./../utils/UrlService\":528,\"./CourseService\":211,\"./ProgressService\":219,\"./models/CourseProgressStatus\":222}],202:[function(require,module,exports){\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar CourseLandingPageEditController = (function () {\r\n function CourseLandingPageEditController($scope, $routeParams, $rootScope, courseService, coursesRouter, securityService, authManager, permissionsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$rootScope = $rootScope;\r\n this.courseService = courseService;\r\n this.coursesRouter = coursesRouter;\r\n this.securityService = securityService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.isCourseLoaded = false;\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var hasCourseId = this.courseId != null;\r\n var courseIdStr = String(this.courseId);\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(hasCourseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n if (hasCourseId) {\r\n this.loadCourse(this.courseId);\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set().header(\"New Course\").update();\r\n }\r\n this.reloadLandingPage();\r\n }\r\n CourseLandingPageEditController.prototype.loadCourse = function (courseId) {\r\n var _this = this;\r\n this.courseService.get(courseId).then(function (course) {\r\n _this.course = course;\r\n _this.isCourseLoaded = true;\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter);\r\n });\r\n };\r\n CourseLandingPageEditController.prototype.reloadLandingPage = function () {\r\n if (this.courseId) {\r\n this.loadLandingPage();\r\n }\r\n else {\r\n this.landingPage = { richText: \"\" };\r\n this.$scope.landingPageForm.$setPristine();\r\n }\r\n };\r\n CourseLandingPageEditController.prototype.saveLandingPage = function () {\r\n var _this = this;\r\n var promise = (this.landingPage.id)\r\n ? this.courseService.updateLandingPage(this.courseId, this.landingPage)\r\n : this.courseService.createLandingPage(this.courseId, this.landingPage);\r\n promise.then(function (result) {\r\n _this.landingPage = angular.copy(result);\r\n INotifier_1.notifier.success(\"The course welcome page has been saved\");\r\n _this.$scope.landingPageForm.$setPristine();\r\n });\r\n };\r\n CourseLandingPageEditController.prototype.loadLandingPage = function () {\r\n var _this = this;\r\n return this.courseService.getLandingPage(this.courseId)\r\n .then(function (result) {\r\n _this.landingPage = angular.copy(result);\r\n _this.$scope.landingPageForm.$setPristine();\r\n return _this.landingPage;\r\n });\r\n };\r\n CourseLandingPageEditController.NAME = \"courses.CourseLandingPageEditController\";\r\n CourseLandingPageEditController.$inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n CourseService_1.CourseService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return CourseLandingPageEditController;\r\n})();\r\nexports.CourseLandingPageEditController = CourseLandingPageEditController;\r\n},{\"../INotifier\":5,\"../authcore/AuthManager\":25,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/PageHeaderHelper\":521,\"./CourseService\":211}],203:[function(require,module,exports){\nvar CourseService_1 = require(\"./CourseService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CourseNotificationDetailsController = (function () {\r\n function CourseNotificationDetailsController(scope, routeParams, $rootScope, courseService, securityService, authService, authManager, permissionsService, url, coursesRouter) {\r\n var _this = this;\r\n this.scope = scope;\r\n this.routeParams = routeParams;\r\n this.$rootScope = $rootScope;\r\n this.courseService = courseService;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.url = url;\r\n this.coursesRouter = coursesRouter;\r\n this.courseId = routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(!!this.courseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.authService.getCurrentUser()\r\n .then(function (u) { return _this.currentUser = u; });\r\n this.courseService.get(this.courseId).then(function (course) {\r\n _this.course = course;\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter);\r\n });\r\n }\r\n CourseNotificationDetailsController.prototype.getTemplateForInclude = function (templateName) {\r\n return this.url.template(templateName);\r\n };\r\n CourseNotificationDetailsController.NAME = \"courses.CourseNotificationDetailsController\";\r\n CourseNotificationDetailsController.$inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n CourseService_1.CourseService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return CourseNotificationDetailsController;\r\n})();\r\nexports.CourseNotificationDetailsController = CourseNotificationDetailsController;\r\n},{\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/UrlService\":528,\"./CourseService\":211}],204:[function(require,module,exports){\nvar CourseService_1 = require(\"./CourseService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CourseNotificationDetailsEditController = (function () {\r\n function CourseNotificationDetailsEditController(scope, routeParams, $rootScope, courseService, securityService, authService, authManager, permissionsService, url, coursesRouter) {\r\n var _this = this;\r\n this.scope = scope;\r\n this.routeParams = routeParams;\r\n this.$rootScope = $rootScope;\r\n this.courseService = courseService;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.url = url;\r\n this.coursesRouter = coursesRouter;\r\n this.courseId = routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(!!this.courseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.authService.getCurrentUser()\r\n .then(function (u) { return _this.currentUser = u; });\r\n this.courseService.get(this.courseId).then(function (course) {\r\n _this.course = course;\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter);\r\n });\r\n }\r\n CourseNotificationDetailsEditController.prototype.getTemplateForInclude = function (templateName) {\r\n return this.url.template(templateName);\r\n };\r\n CourseNotificationDetailsEditController.NAME = \"courses.CourseNotificationDetailsEditController\";\r\n CourseNotificationDetailsEditController.$inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n CourseService_1.CourseService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return CourseNotificationDetailsEditController;\r\n})();\r\nexports.CourseNotificationDetailsEditController = CourseNotificationDetailsEditController;\r\n},{\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/UrlService\":528,\"./CourseService\":211}],205:[function(require,module,exports){\nvar CourseService_1 = require(\"./CourseService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar CourseParticipationFormEditController = (function () {\r\n function CourseParticipationFormEditController($scope, $routeParams, $rootScope, courseService, coursesRouter, securityService, authManager, permissionsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$rootScope = $rootScope;\r\n this.courseService = courseService;\r\n this.coursesRouter = coursesRouter;\r\n this.securityService = securityService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.courseIsLoaded = false;\r\n this.isCourseLoaded = false;\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var hasCourseId = this.courseId != null;\r\n var courseIdStr = String(this.courseId);\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(hasCourseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadCourse(this.courseId).then(function (course) {\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter);\r\n _this.isCourseLoaded = true;\r\n });\r\n }\r\n CourseParticipationFormEditController.prototype.loadCourse = function (courseId) {\r\n var _this = this;\r\n return this.courseService.get(courseId).then(function (course) {\r\n _this.course = angular.copy(course);\r\n return _this.course;\r\n });\r\n };\r\n CourseParticipationFormEditController.NAME = \"courses.CourseParticipationFormEditController\";\r\n CourseParticipationFormEditController.$inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n CourseService_1.CourseService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return CourseParticipationFormEditController;\r\n})();\r\nexports.CourseParticipationFormEditController = CourseParticipationFormEditController;\r\n},{\"../authcore/AuthManager\":25,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"./CourseService\":211}],206:[function(require,module,exports){\nvar CoursesRouter_1 = require(\"./../urls/CoursesRouter\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar SecuredObjectType_1 = require(\"./../security/permissions/SecuredObjectType\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar CoursePermissionsDelegationController = (function () {\r\n function CoursePermissionsDelegationController($scope, $http, $location, $routeParams, $timeout, $rootScope, url, securityService, permissionsService, coursesRouter, courseService, $uploader, userService, authService, authManager) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.coursesRouter = coursesRouter;\r\n this.courseService = courseService;\r\n this.$uploader = $uploader;\r\n this.userService = userService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.DEFAULT_TOP_MENU_ITEM = 'permissionsDelegation';\r\n this.permissionsWithUsersAndGroups = [];\r\n this.isCourseLoaded = false;\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissions(courseIdStr, function (coursePermissions) { return coursePermissions.permissionsDelegation; });\r\n this.course = {};\r\n this.menuKey = {\r\n topMenu: this.DEFAULT_TOP_MENU_ITEM,\r\n };\r\n this.loadCourse();\r\n this.disabledSaveButton = false;\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.COURSE, courseIdStr);\r\n this.setTopMenu('course');\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n }\r\n CoursePermissionsDelegationController.prototype.loadCourse = function () {\r\n var _this = this;\r\n var promise = this.courseService.get(this.courseId);\r\n promise.then(function (result) {\r\n angular.copy(result, _this.course);\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter, \"Assign permissions\");\r\n _this.isCourseLoaded = true;\r\n });\r\n };\r\n CoursePermissionsDelegationController.prototype.loadPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var _this = this;\r\n this.permissionsService.getViewAndStartObjectPermissionsWithUsersAndGroups(securedObjectType, objectId).then(function (result) {\r\n result.forEach(function (r) {\r\n _this.permissionsWithUsersAndGroups.push(r);\r\n });\r\n });\r\n };\r\n CoursePermissionsDelegationController.prototype.save = function () {\r\n var _this = this;\r\n console.log(this.permissionsWithUsersAndGroups);\r\n this.disabledSaveButton = true;\r\n this.courseService.updateViewAndStartCoursePermissions(this.courseId, this.permissionsWithUsersAndGroups)\r\n .then(function (result) {\r\n angular.copy(result, _this.course);\r\n _this.updateSuccessCallback(result.id);\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n }\r\n });\r\n };\r\n CoursePermissionsDelegationController.prototype.updateSuccessCallback = function (courseId) {\r\n this.disabledSaveButton = false;\r\n INotifier_1.notifier.success(\"Modifications of the course have been saved\");\r\n this.permissionsWithUsersAndGroups = [];\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.COURSE, String(courseId));\r\n };\r\n CoursePermissionsDelegationController.prototype.setTopMenu = function (topMenuKey) {\r\n this.menuKey = {\r\n topMenu: topMenuKey,\r\n leftMenuModule: this.menuKey.leftMenuModule,\r\n leftMenuModuleExpanded: this.menuKey.leftMenuModuleExpanded,\r\n leftMenuItem: this.menuKey.leftMenuItem\r\n };\r\n };\r\n CoursePermissionsDelegationController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.menuKey.topMenu == topMenuKey;\r\n };\r\n CoursePermissionsDelegationController.prototype.isLeftMenuModuleActive = function (topMenuKey, leftModule) {\r\n return this.menuKey.topMenu == topMenuKey && this.menuKey.leftMenuModuleExpanded == leftModule;\r\n };\r\n CoursePermissionsDelegationController.prototype.isLeftMenuItemActive = function (topMenuKey, leftModule, item) {\r\n return this.menuKey.topMenu == topMenuKey\r\n && (this.menuKey.leftMenuModule == leftModule || this.menuKey.leftMenuModuleExpanded == leftModule)\r\n && this.menuKey.leftMenuItem == item;\r\n };\r\n CoursePermissionsDelegationController.prototype.redirect = function () {\r\n if (this.courseId) {\r\n if (this.course && this.course.permissions && this.course.permissions.view) {\r\n this.$location.url(this.coursesRouter.detailsUrl(this.courseId));\r\n }\r\n else {\r\n this.$location.url(this.coursesRouter.indexUrl());\r\n }\r\n }\r\n };\r\n CoursePermissionsDelegationController.NAME = \"courses.CoursePermissionsDelegationController\";\r\n CoursePermissionsDelegationController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$timeout\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n \"Upload\",\r\n UserService_1.UserService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME\r\n ];\r\n return CoursePermissionsDelegationController;\r\n})();\r\nexports.CoursePermissionsDelegationController = CoursePermissionsDelegationController;\r\n},{\"./../INotifier\":5,\"./../auth/AuthService\":18,\"./../authcore/AuthManager\":25,\"./../security/PermissionsService\":418,\"./../security/SecurityService\":420,\"./../security/permissions/SecuredObjectType\":424,\"./../urls/CoursesRouter\":468,\"./../users/UserService\":499,\"./../utils/UrlService\":528,\"./CourseService\":211}],207:[function(require,module,exports){\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar ProgressService_1 = require(\"./ProgressService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PersonalService_1 = require(\"../personal/PersonalService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar CertificateService_1 = require(\"../certificates/CertificateService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar TreeElementsInfoFiller_1 = require(\"../tree/TreeElementsInfoFiller\");\r\nvar Event_1 = require(\"../components/models/Event\");\r\nvar CommonService_1 = require(\"../common/CommonService\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar StatisticReportsService_1 = require(\"../statistics/StatisticReportsService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar EmbeddedReportTypeKey_1 = require(\"../EmbeddedReportTypeKey\");\r\nvar CourseProgressStatus_1 = require(\"./models/CourseProgressStatus\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar CourseILTService_1 = require(\"./CourseILTService\");\r\nvar CourseProgressController = (function () {\r\n function CourseProgressController($http, $scope, $rootScope, $location, $routeParams, $window, $q, $timeout, url, securityService, coursesRouter, courseService, progressService, authService, permissionsApi, personalService, quizService, userService, certificateService, authManager, commonService, statisticReportsService, dialogService, courseILTService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$window = $window;\r\n this.$q = $q;\r\n this.$timeout = $timeout;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.coursesRouter = coursesRouter;\r\n this.courseService = courseService;\r\n this.progressService = progressService;\r\n this.authService = authService;\r\n this.permissionsApi = permissionsApi;\r\n this.personalService = personalService;\r\n this.quizService = quizService;\r\n this.userService = userService;\r\n this.certificateService = certificateService;\r\n this.authManager = authManager;\r\n this.commonService = commonService;\r\n this.statisticReportsService = statisticReportsService;\r\n this.dialogService = dialogService;\r\n this.courseILTService = courseILTService;\r\n this.courseUsers = [];\r\n this.selectedUserId = undefined;\r\n this.selectedUserFullName = undefined;\r\n this.selectedSectionProgress = {};\r\n this.isOnlyActiveFilter = false;\r\n this.course = {};\r\n this.disableSelectButtons = false;\r\n this.userNameSearchString = null;\r\n this.userLogonSearchString = null;\r\n this.courseCertificates = [];\r\n this.isCourseUsersLoading = false;\r\n this.isUserProgressLoading = false;\r\n this.isCourseLoaded = false;\r\n this.selectedTypeScore = 'ALL_SCORES';\r\n this.quizzes = [];\r\n this.quizzesAreLoading = false;\r\n this.modelType = \"courses\";\r\n this.includeNotStarted = true;\r\n this.modelType = $routeParams[HomeRouter_1.HomeRouter.PARTICIPANTS_PARAM] || HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES;\r\n this.modelType = this.modelType !== HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES && this.modelType !== HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_LP ?\r\n HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES : this.modelType;\r\n var groupRouteParam = $routeParams[HomeRouter_1.HomeRouter.PARTICIPANTS_GROUP_PARAM] || \"0\";\r\n if (groupRouteParam == \"1\") {\r\n this.searchType = 1;\r\n }\r\n else {\r\n this.searchType = 0;\r\n }\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.securityService\r\n .demandViewCoursePermissions(courseIdStr, function (coursePermissions) { return coursePermissions.view; });\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.userService.isUserResponsibleTeacher(this.courseId).then(function (result) {\r\n _this.allowExport = result;\r\n });\r\n this.progressService.isExportAllowed(this.courseId).then(function (result) {\r\n _this.allowExport = result;\r\n });\r\n this.quizzesAreLoading = true;\r\n this.quizService.getQuizzesForCourse(this.courseId)\r\n .then(function (result) { return _this.quizzes = angular.copy(result); })\r\n .finally(function () {\r\n _this.quizzesAreLoading = false;\r\n });\r\n this.searchType = 0;\r\n this.loadCourse()\r\n .then(function () { return _this.loadCurrentUser(); })\r\n .then(function () {\r\n if (_this.course.permissions.viewOtherUsersProgress) {\r\n var userId = $routeParams[CoursesRouter_1.CoursesRouter.USER_ID_PARAM] || -1;\r\n var includedUserIds = userId != -1 ? [userId] : null;\r\n return _this.getUsers(includedUserIds);\r\n }\r\n else {\r\n _this.selectedUserId = _this.currentUser.id;\r\n return _this.$q.when(_this.currentUser);\r\n }\r\n })\r\n .then(function () {\r\n if (_this.course.permissions.viewOtherUsersProgress && _this.courseUsers.length == 0) {\r\n return _this.$q.reject(\"no users for course\");\r\n }\r\n else {\r\n return _this.$q.all([_this.getAllCourseSections(), _this.loadCourseParticipationFormFields()]);\r\n }\r\n })\r\n .then(function () {\r\n if (_this.course.permissions.viewOtherUsersProgress || _this.systemPermissions.manageCoursesAttendeesAny) {\r\n return _this.$q.reject(\"not need to load other for admin now\");\r\n }\r\n else {\r\n return _this.getProgressesForUser(_this.currentUser.id);\r\n }\r\n })\r\n .then(function () {\r\n return _this.$q.all([\r\n _this.loadSectionProgressesForCourseProgress(_this.selectedProgressId),\r\n ]);\r\n }).then(function () {\r\n _this.isCourseLoaded = true;\r\n return _this.$q.all([\r\n _this.loadCourseCertificates(),\r\n _this.getUserCertificates(),\r\n _this.loadCourseProgress(),\r\n ]);\r\n })\r\n .finally(function () {\r\n _this.isCourseLoaded = true;\r\n var userId = $routeParams[CoursesRouter_1.CoursesRouter.USER_ID_PARAM] || -1;\r\n if (userId != -1) {\r\n var selectedUser = _this.courseUsers.filter(function (u) { return u.id == userId; })[0];\r\n _this.clearData();\r\n if (selectedUser != null) {\r\n _this.selectUser(selectedUser);\r\n }\r\n }\r\n });\r\n if (this.modelType == HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES) {\r\n this.participantsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/courses/search/participants/info?role=attendeeManager\")));\r\n }\r\n else {\r\n this.participantsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/learningPaths/search/participants/info?role=attendeeManager\")));\r\n }\r\n this.participantsGridModel.pageSize = 10;\r\n this.participantsGridModel.filter.learnerName = null;\r\n this.participantsGridModel.filter.objectName = null;\r\n this.participantsGridModel.filter.status = null;\r\n this.participantsGridModel.filter.objectId = this.courseId;\r\n this.participantsGridModel.filter.group = null;\r\n this.$scope.$on(Event_1.Event.COURSE_PROGRESS_RESET_PROGRESS, function (event) {\r\n var selectedUser = _this.courseUsers.filter(function (u) { return u.selected == true; })[0];\r\n _this.clearData();\r\n if (selectedUser != null) {\r\n _this.selectUser(selectedUser);\r\n }\r\n });\r\n this.$scope.$on(Event_1.Event.COURSE_PROGRESS_RELOAD_PROGRESS, function (event, args) {\r\n _this.loadAllProgressData();\r\n });\r\n this.$scope.$on(Event_1.Event.COURSE_PROGRESS_CHANGE_PROGRESS_EXTERNALLY, function (event, args) {\r\n _this.selectedProgressId = args.selectedProgressId;\r\n _this.loadAllProgressData();\r\n });\r\n }\r\n CourseProgressController.prototype.loadCourse = function () {\r\n var _this = this;\r\n var promise = this.courseService.get(this.courseId);\r\n return promise.then(function (result) {\r\n _this.course = angular.copy(result);\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter, \"Progress\");\r\n return _this.course;\r\n });\r\n };\r\n CourseProgressController.prototype.loadCurrentUser = function () {\r\n var _this = this;\r\n return this.authService.getCurrentUser().then(function (user) {\r\n _this.currentUser = user;\r\n return _this.currentUser;\r\n });\r\n };\r\n CourseProgressController.prototype.loadCourseCertificates = function () {\r\n var _this = this;\r\n return this.certificateService.getCourseCertificateTemplates(this.courseId).then(function (certificates) {\r\n _this.courseCertificates.splice(0);\r\n certificates.forEach(function (c) {\r\n _this.courseCertificates.push({\r\n id: c.certificateTemplateId,\r\n name: c.certificateTemplateName\r\n });\r\n });\r\n return _this.courseCertificates;\r\n });\r\n };\r\n CourseProgressController.prototype.selectUser = function (user) {\r\n var _this = this;\r\n this.disableSelectButtons = true;\r\n this.isUserProgressLoading = true;\r\n if (user.selected) {\r\n user.selected = false;\r\n this.selectedUserId = undefined;\r\n this.selectedProgressId = undefined;\r\n this.selectedUserFullName = \"\";\r\n return;\r\n }\r\n this.courseUsers.forEach(function (u) { return u.selected = false; });\r\n this.selectedProgressId = undefined;\r\n this.selectedUserId = user.id;\r\n this.selectedUserFullName = user.name;\r\n this.courseUsers[this.courseUsers.indexOf(user)].selected = true;\r\n this.getProgressesForUser(user.id)\r\n .then(function () {\r\n return _this.$q.all([\r\n _this.loadSectionProgressesForCourseProgress(_this.selectedProgressId),\r\n _this.loadParticipationFormForProgress(_this.selectedProgressId),\r\n _this.loadCourseCertificates(),\r\n _this.getUserCertificates(),\r\n ]);\r\n })\r\n .finally(function () {\r\n _this.disableSelectButtons = false;\r\n _this.isUserProgressLoading = false;\r\n });\r\n };\r\n CourseProgressController.prototype.selectUserOnButtonPressed = function (user, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.selectUser(user);\r\n }\r\n };\r\n CourseProgressController.prototype.getUsers = function (includedUserIds) {\r\n var _this = this;\r\n this.courseUsers = [];\r\n this.selectedUserId = undefined;\r\n this.clearData();\r\n this.isCourseUsersLoading = true;\r\n return this.progressService.getCourseUsers(this.courseId, this.userNameSearchString, this.userLogonSearchString, this.isOnlyActiveFilter, includedUserIds)\r\n .then(function (users) {\r\n users.forEach(function (u) {\r\n var extendedUserInfo = { selected: false };\r\n angular.copy(u, extendedUserInfo);\r\n extendedUserInfo.selected = false;\r\n _this.courseUsers.push(extendedUserInfo);\r\n });\r\n if (_this.searchType == 0 && _this.courseUsers.length === 1) {\r\n _this.selectUser(_this.courseUsers[0]);\r\n }\r\n _this.isCourseUsersLoading = false;\r\n });\r\n };\r\n CourseProgressController.prototype.getUsersOnButtonPressed = function (keyCode) {\r\n if (keyCode === 13) {\r\n this.getUsers();\r\n }\r\n };\r\n CourseProgressController.prototype.clearSearch = function () {\r\n this.userNameSearchString = null;\r\n this.userLogonSearchString = null;\r\n this.getUsers();\r\n };\r\n CourseProgressController.prototype.changeFilter = function () {\r\n if (this.searchType == 0) {\r\n var path = this.$location.path().split(\"?\")[0];\r\n this.$location.url(path);\r\n this.courseUsers.forEach(function (u) {\r\n u.selected = false;\r\n });\r\n }\r\n else {\r\n this.selectedUserId = undefined;\r\n this.selectedProgressId = undefined;\r\n this.selectedUserFullName = \"\";\r\n }\r\n this.userNameSearchString = null;\r\n this.userLogonSearchString = null;\r\n this.getUsers();\r\n };\r\n CourseProgressController.prototype.getAllCourseSections = function () {\r\n var _this = this;\r\n return this.progressService.getAllSectionsInHierarchy(this.courseId)\r\n .then(function (result) {\r\n _this.courseSections = result;\r\n TreeElementsInfoFiller_1.TreeElementsInfoFiller.fillHierarchyInfoWithMaxLevel(_this.courseSections, Number.MAX_VALUE);\r\n return _this.courseSections;\r\n });\r\n };\r\n CourseProgressController.prototype.getProgressesForUser = function (userId) {\r\n var _this = this;\r\n return this.progressService.getAllCourseProgressesForUser(this.courseId, userId)\r\n .then(function (result) {\r\n _this.userProgresses = result;\r\n if (_this.userProgresses.length > 0) {\r\n if (!_this.selectedProgressId) {\r\n _this.selectedProgressId = _this.userProgresses[0].id;\r\n }\r\n }\r\n else {\r\n _this.selectedProgressId = null;\r\n return _this.$q.reject(\"No progress for User: \" + userId);\r\n }\r\n return _this.userProgresses;\r\n });\r\n };\r\n CourseProgressController.prototype.loadSectionProgressesForCourseProgress = function (courseProgressId) {\r\n var _this = this;\r\n return this.progressService.getAllSectionProgressesForCourseProgress(this.courseId, courseProgressId)\r\n .then(function (result) { return _this.sectionProgresses = result; });\r\n };\r\n CourseProgressController.prototype.loadParticipationFormForProgress = function (selectedProgressId) {\r\n var _this = this;\r\n return this.progressService.getCourseProgressParticipationForm(this.courseId, selectedProgressId)\r\n .then(function (participationForm) {\r\n _this.participationForm = participationForm;\r\n return participationForm;\r\n });\r\n };\r\n CourseProgressController.prototype.loadCourseParticipationFormFields = function () {\r\n var _this = this;\r\n return this.commonService.getParticipationForm(this.course.id, SecuredObjectType_1.SecuredObjectType.COURSE.name.toUpperCase())\r\n .then(function (participationForm) {\r\n _this.participationFormFields = participationForm.fields;\r\n return _this.participationFormFields;\r\n });\r\n };\r\n CourseProgressController.prototype.onSelectedProgressChange = function () {\r\n this.sectionProgresses = [];\r\n this.userCertificates = [];\r\n this.participationForm = null;\r\n this.$q.all([\r\n this.loadSectionProgressesForCourseProgress(this.selectedProgressId),\r\n this.loadParticipationFormForProgress(this.selectedProgressId),\r\n this.loadCourseParticipationFormFields(),\r\n this.getUserCertificates()\r\n ]);\r\n this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_CHANGE_PROGRESS_EXTERNALLY, { selectedProgressId: this.selectedProgressId });\r\n };\r\n CourseProgressController.prototype.clearData = function () {\r\n this.selectedUserId = undefined;\r\n this.courseUsers.forEach(function (u) { return u.selected = false; });\r\n this.userProgresses = null;\r\n this.selectedProgressId = null;\r\n this.participationForm = null;\r\n this.sectionProgresses = null;\r\n this.participationForm = null;\r\n this.userCertificates = null;\r\n };\r\n CourseProgressController.prototype.loadAllProgressData = function () {\r\n this.sectionProgresses = null;\r\n this.userCertificates = null;\r\n this.participationForm = null;\r\n var dataLoadingPromises = [];\r\n if (this.course.permissions.viewOtherUsersProgress) {\r\n dataLoadingPromises.push(this.getProgressesForUser(this.selectedUserId));\r\n dataLoadingPromises.push(this.loadSectionProgressesForCourseProgress(this.selectedProgressId));\r\n dataLoadingPromises.push(this.loadParticipationFormForProgress(this.selectedProgressId));\r\n dataLoadingPromises.push(this.loadCourseCertificates());\r\n dataLoadingPromises.push(this.getUserCertificates());\r\n }\r\n else {\r\n dataLoadingPromises.push(this.getProgressesForUser(this.selectedUserId));\r\n dataLoadingPromises.push(this.loadSectionProgressesForCourseProgress(this.selectedProgressId));\r\n dataLoadingPromises.push(this.loadCourseCertificates());\r\n dataLoadingPromises.push(this.getUserCertificates());\r\n }\r\n return this.$q.all(dataLoadingPromises);\r\n };\r\n CourseProgressController.prototype.getUserCertificates = function () {\r\n var _this = this;\r\n return this.courseService.getUserCertificates(this.courseId, this.selectedProgressId).then(function (result) {\r\n _this.userCertificates = angular.copy(result);\r\n return _this.userCertificates;\r\n });\r\n };\r\n CourseProgressController.prototype.showPowerBiEmbeddedReport = function () {\r\n var _this = this;\r\n this.statisticReportsService.generatePowerBiReportToken(EmbeddedReportTypeKey_1.EmbeddedReportTypeKey[EmbeddedReportTypeKey_1.EmbeddedReportTypeKey.GROUP_PROGRESS])\r\n .then(function (embeddedReport) {\r\n if (embeddedReport && embeddedReport.token) {\r\n var models = window['powerbi-client'].models;\r\n var embedConfiguration = {\r\n type: 'report',\r\n id: embeddedReport.reportId,\r\n embedUrl: 'https://app.powerbi.com/reportEmbed',\r\n tokenType: models.TokenType.Embed,\r\n accessToken: embeddedReport.token,\r\n settings: {\r\n filterPaneEnabled: false\r\n },\r\n filters: [{\r\n target: {\r\n table: \"Courses\",\r\n column: \"id\"\r\n },\r\n operator: \"In\",\r\n values: [Number(_this.courseId)]\r\n }]\r\n };\r\n _this.powerBiReport = window['powerbi']\r\n .embed(window.document.getElementById(\"powerBiEmbeddedReportContainer\"), embedConfiguration);\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"Power BI reports not configured\");\r\n }\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.warning(\"Power BI reports not configured\");\r\n });\r\n };\r\n CourseProgressController.prototype.powerBiReportFullScreen = function () {\r\n this.powerBiReport.fullscreen();\r\n };\r\n CourseProgressController.prototype.loadCourseProgress = function () {\r\n var _this = this;\r\n return this.progressService.getCourseProgress(this.courseId)\r\n .then(function (result) {\r\n _this.courseProgress = angular.copy(result);\r\n _this.courseStarted = (result.status && result.status !== CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED]);\r\n return _this.courseProgress;\r\n });\r\n };\r\n CourseProgressController.prototype.exportCourseProgressCompletionStatusCsvReport = function () {\r\n var _this = this;\r\n var parameters = {\r\n courseId: this.course.id,\r\n userId: this.currentUser.id,\r\n fromDate: Moment_1.Moment.textToJavaDate(this.fromDateExport),\r\n toDate: Moment_1.Moment.textToJavaDate(this.toDateExport)\r\n };\r\n this.progressService.exportCourseProgressCsvReport(parameters, 'COURSE_PROGRESS_COMPLETION_STATUS_CSV_REPORT')\r\n .then(function (result) { return _this.$window.open(result); });\r\n };\r\n CourseProgressController.prototype.exportCourseScoresCsvReport = function () {\r\n var _this = this;\r\n var parameters = {\r\n courseId: this.course.id,\r\n userId: this.currentUser.id,\r\n fromDate: Moment_1.Moment.textToJavaDate(this.fromDateExport),\r\n toDate: Moment_1.Moment.textToJavaDate(this.toDateExport),\r\n typeScore: this.selectedTypeScore,\r\n quizId: this.selectedQuizId\r\n };\r\n this.progressService.exportCourseProgressCsvReport(parameters, 'COURSE_SCORES_CSV_REPORT')\r\n .then(function (result) { return _this.$window.open(result); });\r\n };\r\n CourseProgressController.prototype.showExportModal = function (isExportCourseScorerModal) {\r\n this.isExportCourseScorerModal = isExportCourseScorerModal;\r\n this.fromDateExport = null;\r\n this.toDateExport = null;\r\n this.selectedQuizId = null;\r\n this.selectedTypeScore = 'ALL_SCORES';\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#filterDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n CourseProgressController.prototype.getSelectedProgressStatus = function () {\r\n var _this = this;\r\n var progress = !!this.userProgresses ? this.userProgresses.filter(function (p) { return p.id === _this.selectedProgressId; }).pop() : null;\r\n return progress ? progress.status : \"\";\r\n };\r\n CourseProgressController.prototype.getSelectedProgress = function () {\r\n var _this = this;\r\n return !!this.userProgresses ? this.userProgresses.filter(function (p) { return p.id === _this.selectedProgressId; }).pop() : null;\r\n };\r\n CourseProgressController.prototype.deactivateCourseProgress = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Do you want to deactivate user progress on this course?\", {\r\n title: \"Deactivate user progress\"\r\n }).then(function () {\r\n _this.progressService.deactivateCourseProgress(_this.course.id, _this.selectedProgressId)\r\n .then(function () {\r\n _this.$scope.$emit(Event_1.Event.COURSE_PROGRESS_RESET_PROGRESS);\r\n _this.courseILTService.removeParticipantFromIltSessionsByCourseId(_this.selectedUserId, _this.course.id);\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.commonError(response);\r\n });\r\n });\r\n };\r\n CourseProgressController.NAME = \"courses.CourseProgressController\";\r\n CourseProgressController.$inject = [\r\n \"$http\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$window\",\r\n \"$q\",\r\n \"$timeout\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n QuizService_1.QuizService.NAME,\r\n UserService_1.UserService.NAME,\r\n CertificateService_1.CertificateService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n CommonService_1.CommonService.NAME,\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n CourseILTService_1.CourseILTService.NAME\r\n ];\r\n return CourseProgressController;\r\n})();\r\nexports.CourseProgressController = CourseProgressController;\r\n},{\"../EmbeddedReportTypeKey\":2,\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../certificates/CertificateService\":45,\"../common/CommonService\":53,\"../components/dialog/DialogService\":166,\"../components/models/Event\":170,\"../personal/PersonalService\":377,\"../quizzes/QuizService\":396,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../security/permissions/SecuredObjectType\":424,\"../statistics/StatisticReportsService\":448,\"../tree/TreeElementsInfoFiller\":460,\"../urls/CoursesRouter\":468,\"../urls/HomeRouter\":473,\"../users/UserService\":499,\"../utils/Moment\":518,\"../utils/UrlService\":528,\"./CourseILTService\":200,\"./CourseService\":211,\"./ProgressService\":219,\"./models/CourseProgressStatus\":222}],208:[function(require,module,exports){\nvar CourseService_1 = require(\"./CourseService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar CourseRelatedProductsEditController = (function () {\r\n function CourseRelatedProductsEditController($scope, $routeParams, $rootScope, courseService, coursesRouter, securityService, authManager, permissionsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$rootScope = $rootScope;\r\n this.courseService = courseService;\r\n this.coursesRouter = coursesRouter;\r\n this.securityService = securityService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.isCourseLoaded = false;\r\n this.onProductsSaveSuccess = function () {\r\n return _this.loadCourse(_this.courseId);\r\n };\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var hasCourseId = this.courseId != null;\r\n var courseIdStr = String(this.courseId);\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(hasCourseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadCourse(this.courseId).then(function (course) {\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(course.id, course, _this.coursesRouter);\r\n _this.isCourseLoaded = true;\r\n });\r\n }\r\n CourseRelatedProductsEditController.prototype.loadCourse = function (courseId) {\r\n var _this = this;\r\n return this.courseService.get(courseId).then(function (course) {\r\n _this.course = angular.copy(course);\r\n return _this.course;\r\n });\r\n };\r\n CourseRelatedProductsEditController.NAME = \"courses.CourseRelatedProductsEditController\";\r\n CourseRelatedProductsEditController.$inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n CourseService_1.CourseService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return CourseRelatedProductsEditController;\r\n})();\r\nexports.CourseRelatedProductsEditController = CourseRelatedProductsEditController;\r\n},{\"../authcore/AuthManager\":25,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"./CourseService\":211}],209:[function(require,module,exports){\nvar CourseScorm2004Adapter = (function () {\r\n function CourseScorm2004Adapter(courseScormAdapter) {\r\n this.courseScormAdapter = courseScormAdapter;\r\n }\r\n CourseScorm2004Adapter.prototype.Initialize = function () {\r\n return this.courseScormAdapter.LMSInitialize();\r\n };\r\n CourseScorm2004Adapter.prototype.Terminate = function () {\r\n return this.courseScormAdapter.LMSFinish();\r\n };\r\n CourseScorm2004Adapter.prototype.GetValue = function (key) {\r\n return this.courseScormAdapter.LMSGetValue(key);\r\n };\r\n CourseScorm2004Adapter.prototype.SetValue = function (key, value) {\r\n return this.courseScormAdapter.LMSSetValue(key, value);\r\n };\r\n CourseScorm2004Adapter.prototype.Commit = function (key) {\r\n return this.courseScormAdapter.LMSCommit(key);\r\n };\r\n CourseScorm2004Adapter.prototype.GetLastError = function () {\r\n return this.courseScormAdapter.LMSGetLastError();\r\n };\r\n CourseScorm2004Adapter.prototype.GetErrorString = function () {\r\n return this.courseScormAdapter.LMSGetErrorString();\r\n };\r\n CourseScorm2004Adapter.prototype.GetDiagnostic = function () {\r\n return this.courseScormAdapter.LMSGetDiagnostic();\r\n };\r\n return CourseScorm2004Adapter;\r\n})();\r\nexports.CourseScorm2004Adapter = CourseScorm2004Adapter;\r\n},{}],210:[function(require,module,exports){\nvar SectionType_1 = require(\"./models/SectionType\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SectionProgressStatus_1 = require(\"./models/SectionProgressStatus\");\r\nvar CourseScormAdapter = (function () {\r\n function CourseScormAdapter(courseController, storageWrapper, quizOrSurveyAnswering) {\r\n var _this = this;\r\n this.courseController = courseController;\r\n this.storageWrapper = storageWrapper;\r\n this.quizOrSurveyAnswering = quizOrSurveyAnswering;\r\n this.SCORM_DATA_STORAGE_KEY = \"vhs.scorm.data\";\r\n this.SCORM_TRUE = \"true\";\r\n this.SCORM_FALSE = \"false\";\r\n window.addEventListener('message', function (event) {\r\n _this.processScormMessage(event.data);\r\n console.log('scromData listened');\r\n if (event.data.event_id === 'updateState') {\r\n console.log(event.data.data);\r\n }\r\n });\r\n }\r\n CourseScormAdapter.prototype.processScormMessage = function (data) {\r\n switch (data.functionName) {\r\n case 'LMSInitialize':\r\n return this.LMSInitialize();\r\n case 'LMSSetValue':\r\n return this.LMSSetValue(data.key, data.value);\r\n case 'LMSFinish':\r\n return this.LMSFinish();\r\n case 'LMSCommit':\r\n return this.LMSCommit(data.key);\r\n case 'LMSTerminate':\r\n return this.LMSTerminate();\r\n case 'saveScormData':\r\n this.scormData = data.key;\r\n return this.saveScormData();\r\n }\r\n };\r\n CourseScormAdapter.prototype.initScormData = function () {\r\n this.scormData = null;\r\n var allData = this.storageWrapper.get(this.SCORM_DATA_STORAGE_KEY);\r\n if (allData) {\r\n var progressData = allData[this.courseController.courseProgressId];\r\n if (progressData) {\r\n this.scormData = progressData[this.courseController.selectedSection.id];\r\n }\r\n }\r\n if (!this.scormData) {\r\n this.scormData = {\r\n sectionId: this.courseController.selectedSection.id\r\n };\r\n }\r\n var addition = {\r\n \"cmi.core.lesson_mode\": this.courseController.selectedSection.status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED],\r\n \"cmi.core.student_name\": this.courseController.currentUser.fullName,\r\n \"cmi.core.student_id\": this.courseController.currentUser.id,\r\n \"vhs.current_section.status\": this.courseController.selectedSection.status,\r\n \"vhs.current_section.course_certificates\": this.courseController.courseCertificates\r\n };\r\n Object.assign(this.scormData, addition);\r\n return this.scormData;\r\n };\r\n CourseScormAdapter.prototype.saveScormData = function () {\r\n if (!this.scormData) {\r\n return;\r\n }\r\n var allData = this.storageWrapper.get(this.SCORM_DATA_STORAGE_KEY);\r\n if (!allData) {\r\n allData = {};\r\n }\r\n var progressData = allData[this.courseController.courseProgressId];\r\n if (!progressData) {\r\n allData[this.courseController.courseProgressId] = {};\r\n progressData = allData[this.courseController.courseProgressId];\r\n }\r\n progressData[this.scormData.sectionId] = this.scormData;\r\n this.storageWrapper.put(this.SCORM_DATA_STORAGE_KEY, allData);\r\n };\r\n CourseScormAdapter.prototype.getInteractionsCount = function () {\r\n var interactionsNumbers = [];\r\n var interactionRegExp = /^cmi\\.interactions\\.(\\d+)\\..*$/;\r\n Object.keys(this.scormData).forEach(function (key) {\r\n if (key && key.indexOf(\"cmi.interactions.\") == 0 && interactionRegExp.test(key)) {\r\n var result = key.match(interactionRegExp);\r\n if (result && result.length > 0) {\r\n if (interactionsNumbers.indexOf(result[result.length - 1]) == -1) {\r\n interactionsNumbers.push(result[result.length - 1]);\r\n }\r\n }\r\n }\r\n });\r\n return interactionsNumbers.length;\r\n };\r\n CourseScormAdapter.prototype.saveInteractions = function () {\r\n var _this = this;\r\n var scormSessionData = {};\r\n var suspendData = null;\r\n Object.keys(this.scormData).forEach(function (key) {\r\n if (key && key.indexOf(\"cmi.interactions.\") == 0) {\r\n scormSessionData[key] = _this.scormData[key];\r\n }\r\n });\r\n if (this.scormData[\"cmi.suspend_data\"]) {\r\n suspendData = this.scormData[\"cmi.suspend_data\"];\r\n }\r\n if (Object.keys(scormSessionData).length > 0) {\r\n this.courseController.saveUserScormSessionData(JSON.stringify(scormSessionData), suspendData);\r\n }\r\n };\r\n CourseScormAdapter.prototype.LMSInitialize = function () {\r\n this.courseController.sectionStatusUpdateViaLmsApiOnly = true;\r\n this.initScormData();\r\n this.courseController.goToFullScreenMode();\r\n return this.SCORM_TRUE;\r\n };\r\n CourseScormAdapter.prototype.LMSFinish = function () {\r\n this.courseController.sectionStatusUpdateViaLmsApiOnly = undefined;\r\n return this.SCORM_TRUE;\r\n };\r\n CourseScormAdapter.prototype.LMSGetValue = function (key) {\r\n console.log('call LMSGetValue for ' + key);\r\n switch (key) {\r\n case \"cmi.core.lesson_mode\":\r\n return this.courseController.selectedSection.status === SectionProgressStatus_1.SectionProgressStatus[SectionProgressStatus_1.SectionProgressStatus.OPENED]\r\n ? \"review\" : \"normal\";\r\n case \"cmi.core.lesson_status\":\r\n return \"incomplete\" || this.scormData[key];\r\n case \"cmi.core.lesson_location\":\r\n return this.scormData[key] ? this.scormData[key] : \"\";\r\n case \"cmi.suspend_data\":\r\n return this.scormData[key] ? this.scormData[key] : \"\";\r\n case \"cmi.core.entry\":\r\n return this.scormData[\"cmi.suspend_data\"] ? \"resume\" : \"\";\r\n case \"cmi.core.student_name\":\r\n return this.courseController.currentUser.fullName;\r\n case \"cmi.core.student_id\":\r\n return this.courseController.currentUser.id;\r\n case \"cmi.launch_data\":\r\n return this.scormData[key] ? this.scormData[key] : \"\";\r\n case \"cmi.interactions._count\":\r\n return this.getInteractionsCount();\r\n case \"vhs.current_section.status\":\r\n return this.courseController.selectedSection.status;\r\n case \"vhs.current_section.quiz_taken\":\r\n return this.quizOrSurveyAnswering.quizResults.length > 0;\r\n case \"vhs.current_section.quiz_passed\":\r\n return this.quizOrSurveyAnswering.isQuizPassed();\r\n case \"vhs.current_section.quiz_passed_score\":\r\n var maxScore = 0;\r\n for (var i = 0; i < this.quizOrSurveyAnswering.quizResults.length; i++) {\r\n var currentScore = this.quizOrSurveyAnswering.quizResults[i].correctAnswersPercentage;\r\n if (currentScore > maxScore) {\r\n maxScore = currentScore;\r\n }\r\n }\r\n return maxScore;\r\n case \"vhs.current_section.quiz_last_score\":\r\n return this.quizOrSurveyAnswering\r\n .quizResults[this.quizOrSurveyAnswering.quizResults.length - 1]\r\n .correctAnswersPercentage;\r\n case \"vhs.current_section.quiz_last_passed\":\r\n return this.quizOrSurveyAnswering\r\n .quizResults[this.quizOrSurveyAnswering.quizResults.length - 1]\r\n .status;\r\n case \"vhs.current_section.quiz_last_correct_answers\":\r\n return this.quizOrSurveyAnswering\r\n .quizResults[this.quizOrSurveyAnswering.quizResults.length - 1]\r\n .correctAnswersCount;\r\n case \"vhs.current_section.quiz_questions_count\":\r\n return this.quizOrSurveyAnswering.quiz.questions.length;\r\n case \"vhs.current_section.course-certificates\":\r\n console.log('Certificates: ' + this.courseController.courseCertificates.length);\r\n return this.courseController.courseCertificates;\r\n default:\r\n if (key && key.indexOf(\"cmi.\") == 0) {\r\n return this.scormData[key] || \"\";\r\n }\r\n }\r\n return \"\";\r\n };\r\n CourseScormAdapter.prototype.LMSSetValue = function (key, value) {\r\n if (key && key.indexOf(\"cmi.\") == 0) {\r\n this.scormData[key] = value;\r\n if (key == \"cmi.core.lesson_location\" || key == \"cmi.location\") {\r\n this.saveScormData();\r\n }\r\n }\r\n switch (key) {\r\n case \"vhs.current_section.quiz.complete.listener\":\r\n if (typeof (value) == \"function\") {\r\n this.quizOrSurveyAnswering.lmsQuizCompleteListeners.push(value);\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n case \"vhs.current_section.course-certificate-id\":\r\n this.courseController.certificateParameters.certificateId = parseInt(value);\r\n return parseInt(value);\r\n case \"cmi.core.lesson_status\":\r\n this.saveLessonStatus(value, \"completed\");\r\n return this.SCORM_TRUE;\r\n case \"cmi.success_status\":\r\n this.saveLessonStatus(value, \"passed\");\r\n return this.SCORM_TRUE;\r\n case \"cmi.completion_status\":\r\n this.saveLessonStatus(value, \"completed\");\r\n return this.SCORM_TRUE;\r\n }\r\n return \"\";\r\n };\r\n CourseScormAdapter.prototype.saveLessonStatus = function (value, checkStatusByVersion) {\r\n if (value == checkStatusByVersion &&\r\n this.scormData && this.scormData.sectionId == this.courseController.selectedSection.id &&\r\n this.courseController.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]\r\n && !this.courseController.selectedSection.completedLocaly) {\r\n this.courseController.setSectionStatusOpenedIfNeeded(this.courseController.selectedSection.id, this.courseController.selectedSection.moduleId, true);\r\n this.courseController.selectedSection.completedLocaly = true;\r\n }\r\n };\r\n CourseScormAdapter.prototype.LMSCommit = function (key) {\r\n if (!key) {\r\n this.saveScormData();\r\n this.saveInteractions();\r\n return this.SCORM_TRUE;\r\n }\r\n switch (key) {\r\n case \"vhs.current_section.start_quiz\":\r\n return this.quizOrSurveyAnswering.start();\r\n case \"vhs.current_section.go_back\":\r\n if (this.courseController.prevSection) {\r\n return this.courseController.setLeftMenuItem(this.courseController.prevSection);\r\n }\r\n else {\r\n return false;\r\n }\r\n case \"vhs.current_section.go_next\":\r\n if (this.courseController.nextSection) {\r\n return this.courseController.setLeftMenuItem(this.courseController.nextSection);\r\n }\r\n else {\r\n return false;\r\n }\r\n case \"vhs.current_section.go_to_start\":\r\n if (this.courseController.modules && this.courseController.modules.length > 0\r\n && this.courseController.sectionsMap.get(this.courseController.modules[0].id).length > 0) {\r\n this.courseController.setLeftMenuItem(this.courseController.sectionsMap.get(this.courseController.modules[0].id)[0].section);\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n case \"vhs.current_section.quiz.hide_info\":\r\n return this.courseController.showQuizInfoSection = false;\r\n case \"vhs.current_section.quiz.hide_results\":\r\n return this.courseController.showQuizResultsSection = false;\r\n case \"vhs.current_section.quiz.hide_start_section\":\r\n return this.courseController.showQuizStartSection = false;\r\n case \"vhs.current_section.landing_page.hide_start_section\":\r\n return this.courseController.showLandingPageStartCourseButton = false;\r\n case \"vhs.start_course\":\r\n if (!this.courseController.showParticipationForm && this.courseController.showStartButton) {\r\n if (this.courseController.participationForm.fields.length > 0) {\r\n return this.courseController.startWithParticipationForm();\r\n }\r\n else {\r\n return this.courseController.startCourse();\r\n }\r\n }\r\n else {\r\n return false;\r\n }\r\n case \"vhs.current_section.get_certificate\":\r\n if (this.quizOrSurveyAnswering.isQuizPassed() && this.courseController.courseCertificates.length > 0) {\r\n this.courseController.getCertificate(true);\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"You can not generate a certificate\");\r\n return false;\r\n }\r\n }\r\n };\r\n CourseScormAdapter.prototype.LMSTerminate = function () {\r\n return this.courseController.hideScormPopup();\r\n };\r\n CourseScormAdapter.prototype.LMSGetLastError = function () {\r\n return 0;\r\n };\r\n CourseScormAdapter.prototype.LMSGetErrorString = function () {\r\n return \"\";\r\n };\r\n CourseScormAdapter.prototype.LMSGetDiagnostic = function () {\r\n return this.SCORM_FALSE;\r\n };\r\n return CourseScormAdapter;\r\n})();\r\nexports.CourseScormAdapter = CourseScormAdapter;\r\n},{\"../INotifier\":5,\"./models/SectionProgressStatus\":227,\"./models/SectionType\":228}],211:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar ExpirationCache_1 = require(\"../common/ExpirationCache\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar CourseService = (function () {\r\n function CourseService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n this.expCache = new ExpirationCache_1.ExpirationCache();\r\n }\r\n CourseService.prototype.findCoursesByMaterial = function (materialId) {\r\n return this.$http.get(this.url.base(\"/api/courses/by/material/:materialId\")\r\n .param(\":materialId\", materialId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.get = function (id) {\r\n return this.$http.get(this.url.base(\"/api/courses/:id?\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; })\r\n .catch(function (reason) {\r\n return {\r\n typeName: '',\r\n topic: 'Failed to retrieve the course details'\r\n };\r\n });\r\n };\r\n CourseService.prototype.getCourseForProduct = function (id) {\r\n return this.$http.get(this.url.base(\"/api/courses/:id/product\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getCourseName = function (id) {\r\n return this.$http.get(this.url.base(\"/api/courses/:id/name\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getCourseStartPermission = function (id) {\r\n return this.$http.get(this.url.base(\"/api/courses/:id/start\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createCourseBundle = function (courseId, courseVersion) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/bundles?courseVersion=:courseVersion\")\r\n .param(\":courseId\", courseId)\r\n .param(\":courseVersion\", courseVersion)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.create = function (course, permissionsWithUsersAndGroups, preview) {\r\n course.preview = preview != null\r\n ? { name: preview.name, type: preview.type, size: preview.size }\r\n : null;\r\n course.permissionsWithUsersAndGroups = permissionsWithUsersAndGroups;\r\n return this.$http.post(this.url.service(\"/api/courses\"), course).then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.update = function (course, permissionsWithUsersAndGroups, isResetPreview, preview) {\r\n course.preview = preview != null\r\n ? { name: preview.name, type: preview.type, size: preview.size }\r\n : null;\r\n course.permissionsWithUsersAndGroups = permissionsWithUsersAndGroups;\r\n course.resetPreview = isResetPreview;\r\n return this.$http.put(this.url.service(\"/api/courses\"), course).then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateCourseRequiredElectivesNumber = function (course) {\r\n return this.$http.put(this.url.service(\"/api/courses/updateCourseRequiredElectivesNumber\"), course).then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateViewAndStartCoursePermissions = function (courseId, permissionsWithUsersAndGroups) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/updateViewAndStartPermissions\")\r\n .param(\":courseId\", courseId)\r\n .service(), permissionsWithUsersAndGroups).then(function (result) { return result.data[\"course\"]; });\r\n };\r\n CourseService.prototype.copy = function (courseId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/copy\")\r\n .param(\":courseId\", courseId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getModules = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:id/modules\")\r\n .param(\":id\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getModuleSections = function (courseId, moduleId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createModule = function (courseId, module) {\r\n this.expCache.removeAllByKey(\"courses\");\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/modules\").param(\":courseId\", courseId).service(), module)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateModule = function (courseId, module) {\r\n this.expCache.removeAllByKey(\"courses\");\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/modules\")\r\n .param(\":courseId\", courseId)\r\n .service(), module)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateModuleHierarchy = function (courseId, module) {\r\n this.expCache.removeAllByKey(\"courses\");\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/modules/updateHierarchy\")\r\n .param(\":courseId\", courseId)\r\n .service(), module)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionsByModule = function (courseId, moduleId, pageIndex, pageSize) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/modules/:moduleId/getSectionsSummaries?page=:page&pageSize=:pageSize\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":page\", pageIndex)\r\n .param(\":pageSize\", pageSize)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createSection = function (courseId, moduleId, section) {\r\n this.expCache.removeAllByKey(\"courses\");\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .service(), section)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateSection = function (courseId, moduleId, section) {\r\n this.expCache.removeAllByKey(\"courses\");\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .service(), section)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateSectionName = function (courseId, moduleId, section) {\r\n this.expCache.removeAllByKey(\"courses\");\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/updateName\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .service(), section)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateSectionHierarchy = function (courseId, moduleId, section) {\r\n this.expCache.removeAllByKey(\"courses\");\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/updateHierarchy\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .service(), section)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateSections = function (courseId, sections) {\r\n this.expCache.removeAllByKey(\"courses\");\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/sections/update\")\r\n .param(\":courseId\", courseId)\r\n .service(), sections)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getAvailableSectionsNoChildren = function (courseId, moduleId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/available/no/children/:sectionId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionUploadedOrLinkMaterials = function (courseId, moduleId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/:sectionId/materials/uploadedOrLink\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionAllMaterials = function (courseId, moduleId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/:sectionId/materials/all\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionMultimediaMaterialsFromSummary = function (courseId, moduleId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/:sectionId/materials/multimedia\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.deleteModule = function (courseId, moduleId, moduleVersion) {\r\n this.expCache.removeAllByKey(\"courses\");\r\n return this.$http.delete(this.url.base(\"api/courses/:courseId/modules/:moduleId?version=:version\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":version\", moduleVersion)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.deleteSection = function (courseId, moduleId, sectionId, sectionVersion) {\r\n this.expCache.removeAllByKey(\"courses\");\r\n return this.$http.delete(this.url.base(\"api/courses/:courseId/modules/:moduleId/sections/:sectionId?version=:version\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .param(\":version\", sectionVersion)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getCourseOwners = function (courseId) {\r\n return this.$http.get(this.url.base(\"api/courses/:courseId/owners\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionQuiz = function (courseId, moduleId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/:sectionId/quiz\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionSurvey = function (courseId, moduleId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/:sectionId/survey\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionFlashcard = function (courseId, moduleId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/:sectionId/flashcard\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.saveSectionAsPdf = function (courseId, moduleId, sectionId) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/:sectionId/savePdf\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionPdfToken = function (courseId, moduleId, sectionId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/:sectionId/pdf/downloadToken\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.saveParticipationForm = function (courseId, version, participationForm) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/participationForm?version=:version\")\r\n .param(\":courseId\", courseId)\r\n .param(\":version\", version)\r\n .service(), participationForm)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getParticipationForm = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/participationForm\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createLandingPage = function (courseId, landingPage) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/landingPage\")\r\n .param(\":courseId\", courseId)\r\n .service(), landingPage)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getLandingPage = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/landingPage\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateLandingPage = function (courseId, landingPage) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/landingPage\")\r\n .param(\":courseId\", courseId)\r\n .service(), landingPage)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getRelatedLearningPaths = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/relatedLearningPaths\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getRelatedLearningPathsToStart = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/relatedLearningPathsToStart\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.downloadCertificate = function (parameters) {\r\n var _this = this;\r\n var reportType = 'COURSE_CERTIFICATE';\r\n return this.$http.post(this.url.base(\"/api/reports/downloadToken/:reportType\")\r\n .param(\":reportType\", reportType)\r\n .service(), {\r\n parameters: JSON.stringify(parameters)\r\n }).then(function (result) { return _this.url.base(\"/api/reports/download/:token\").param(\":token\", result.data.token).service(); });\r\n };\r\n CourseService.prototype.viewCertificate = function (parameters) {\r\n var reportType = 'COURSE_CERTIFICATE';\r\n return this.$http.post(this.url.base(\"/api/reports/preview/:reportType\")\r\n .param(\":reportType\", reportType)\r\n .service(), JSON.stringify(parameters)).then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.saveCertificateForUser = function (parameters) {\r\n return this.$http.post(this.url.service(\"/api/reports/certificate/save\"), {\r\n parameters: JSON.stringify(parameters),\r\n securedObjectType: SecuredObjectType_1.SecuredObjectType.COURSE.name.toUpperCase()\r\n }).then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.addCourseThread = function (courseId, thread) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/discussion/threads\")\r\n .param(\":courseId\", courseId)\r\n .service(), thread)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.removeCourseThread = function (courseId, threadId, threadVersion) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/discussion/threads/:threadId?version=:version\")\r\n .param(\":courseId\", courseId)\r\n .param(\":threadId\", threadId)\r\n .param(\":version\", threadVersion)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateCourseThread = function (courseId, thread) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/discussion/threads\")\r\n .param(\":courseId\", courseId)\r\n .service(), thread)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.addThreadComment = function (courseId, threadId, comment) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/discussion/threads/:threadId/comments\")\r\n .param(\":courseId\", courseId)\r\n .param(\":threadId\", threadId)\r\n .service(), comment)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.removeThreadComment = function (courseId, commentId, commentVersion) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/discussion/threads/comments/:commentId?version=:version\")\r\n .param(\":courseId\", courseId)\r\n .param(\":commentId\", commentId)\r\n .param(\":version\", commentVersion)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.downloadBundleArchiveToken = function (bundleId) {\r\n return this.$http.post(this.url.base(\"/api/bundles/:bundleId/archive/downloadToken\")\r\n .param(\":bundleId\", bundleId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.downloadCourseScormArchiveToken = function (courseId, scormVersion, scormOrganizationsMode) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/scorm/downloadToken?scormVersion=:scormVersion&scormOrganizationsMode=:scormOrganizationsMode\")\r\n .param(\":courseId\", courseId)\r\n .param(\":scormVersion\", scormVersion)\r\n .param(\":scormOrganizationsMode\", scormOrganizationsMode)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createModuleStructureFromBundleFiles = function (courseId, courseVersion, moduleId, selectedFileKeys) {\r\n return this.$http.post(this.url.service(\"/api/courses/\" + courseId + \"/modules/\" + moduleId + \"/fromBundleFiles?courseVersion=\" + courseVersion), {\r\n bundleFileKeys: selectedFileKeys\r\n })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getUserCertificates = function (courseId, courseProgressId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/progress/:courseProgressId/userCertificates\")\r\n .param(\":courseId\", courseId)\r\n .param(\":courseProgressId\", courseProgressId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.removeUserCertificates = function (courseId, courseProgressId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/progress/:courseProgressId/userCertificates\")\r\n .param(\":courseId\", courseId)\r\n .param(\":courseProgressId\", courseProgressId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createWebinar = function (courseId, webinar) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/webinars\")\r\n .param(\":courseId\", courseId)\r\n .service(), webinar, { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateWebinar = function (courseId, webinar) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/viltSessions/webinars/:webinarId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinar.id)\r\n .service(), webinar, { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createParticipantWebinar = function (courseId, webinarId, participant) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/webinars/:webinarId/participants\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), participant, { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.removeParticipantWebinar = function (courseId, webinarId, participantId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/webinars/:webinarId/participants/:participantId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .param(\":participantId\", participantId)\r\n .service(), { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.cancelWebinar = function (courseId, webinarId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/webinars/:webinarId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.removeAllParticipantsWebinar = function (courseId, webinarId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/webinars/:webinarId/participants\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.removeAllParticipantsWebinarWithoutCompleted = function (courseId, webinarId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/webinars/:webinarId/participants/completedStatus\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.createAllParticipantWebinar = function (courseId, webinarId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/webinars/:webinarId/allParticipants\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), null, { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.createAllParticipantWebinarWithoutCompleted = function (courseId, webinarId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/webinars/:webinarId/allParticipants/completedStatus\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), null, { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.getCourseUsersForVILTSession = function (courseId, viltSessionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/:viltSessionId/courseUsers\")\r\n .param(\":courseId\", courseId)\r\n .param(\":viltSessionId\", viltSessionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getCourseUsersWithoutCompletedStatusForVILTSession = function (courseId, viltSessionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/:viltSessionId/courseUsers/completedStatus\")\r\n .param(\":courseId\", courseId)\r\n .param(\":viltSessionId\", viltSessionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getUserVILTSessionParticipants = function (courseId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/:sectionId/user\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getZoomWebinarConfigurationsInfo = function (courseId, businessUnitId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/sessionSchedulingInfo\")\r\n .param(\":courseId\", courseId)\r\n .service(), businessUnitId)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionForWebinar = function (courseId, webinarId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/:webinarId/section\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getAttendiesCount = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/attendiesCount\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getAttendeesCount = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/attendeesCount\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createMeeting = function (courseId, meeting) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/meetings\")\r\n .param(\":courseId\", courseId)\r\n .service(), meeting, { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateMeeting = function (courseId, meeting) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/viltSessions/meetings/:meetingId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":meetingId\", meeting.id)\r\n .service(), meeting, { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createParticipantMeeting = function (courseId, meetingId, participant) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/meetings/:meetingId/participants\")\r\n .param(\":courseId\", courseId)\r\n .param(\":meetingId\", meetingId)\r\n .service(), participant, { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.removeParticipantMeeting = function (courseId, meetingId, participantId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/meetings/:meetingId/participants/:participantId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":meetingId\", meetingId)\r\n .param(\":participantId\", participantId)\r\n .service(), { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.cancelMeeting = function (courseId, meetingId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/meetings/:meetingId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":meetingId\", meetingId)\r\n .service(), { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.removeAllParticipantsMeeting = function (courseId, meetingId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/meetings/:meetingId/participants\")\r\n .param(\":courseId\", courseId)\r\n .param(\":meetingId\", meetingId)\r\n .service(), { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.removeAllParticipantsMeetingWithoutCompletedStatus = function (courseId, meetingId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/meetings/:meetingId/participants/completedStatus\")\r\n .param(\":courseId\", courseId)\r\n .param(\":meetingId\", meetingId)\r\n .service(), { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.createAllParticipantMeeting = function (courseId, meetingId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/meetings/:meetingId/allParticipants\")\r\n .param(\":courseId\", courseId)\r\n .param(\":meetingId\", meetingId)\r\n .service(), null, { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.createAllParticipantMeetingWithoutCompletedStatus = function (courseId, meetingId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/meetings/:meetingId/allParticipants/completedStatus\")\r\n .param(\":courseId\", courseId)\r\n .param(\":meetingId\", meetingId)\r\n .service(), null, { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.getUserMeetingParticipants = function (courseId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/:sectionId/user\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionForMeeting = function (courseId, meetingId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/:meetingId/section\")\r\n .param(\":courseId\", courseId)\r\n .param(\":meetingId\", meetingId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getAttendiesCountMeeting = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/attendiesCount\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getMeetingSettings = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/meetingSettings\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSettingsForExistingMeeting = function (courseId, meetingId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/meetingSettings/:meetingId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":meetingId\", meetingId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getMyCoursesByIds = function (courseIds) {\r\n return this.$http.get(this.url.service(\"/api/courses/my\"), { params: { courseIds: courseIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.publishCourse = function (publishedCourseId, sourceCourseId, mappedSectionPairs) {\r\n return this.$http.put(this.url.base(\"/api/courses/:publishedCourseId/published/:sourceCourseId\")\r\n .param(\":publishedCourseId\", publishedCourseId)\r\n .param(\":sourceCourseId\", sourceCourseId)\r\n .service(), mappedSectionPairs);\r\n };\r\n CourseService.prototype.getCourseILTSections = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/sections/ilt\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getEnrollmentConfigurationForCourse = function (courseId) {\r\n return this.$http.get(this.url.service(\"api/courses/\" + courseId + \"/enrollmentConfiguration\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createEnrollmentConfigurationForCourse = function (courseId, updated) {\r\n return this.$http.post(this.url.service(\"api/courses/\" + courseId + \"/enrollmentConfiguration\"), updated)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateEnrollmentConfigurationForCourse = function (courseId, updated) {\r\n return this.$http.put(this.url.service(\"api/courses/\" + courseId + \"/enrollmentConfiguration\"), updated)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.deleteEnrollmentConfigurationForCourse = function (courseId) {\r\n return this.$http.delete(this.url.service(\"api/courses/\" + courseId + \"/enrollmentConfiguration\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.enrollUsersToCourse = function (courseId, userIds, groupIds) {\r\n return this.$http.post(this.url.service(\"api/courses/\" + courseId + \"/enrollUsers\"), { userToEnrollIds: userIds, groupsToEnrollIds: groupIds })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.addUsersToCourseWaitlist = function (courseId, userIds, groupIds) {\r\n return this.$http.post(this.url.service(\"api/courses/\" + courseId + \"/waitlistUsers\"), { userToEnrollIds: userIds, groupsToEnrollIds: groupIds })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.deleteEnrollmentSeat = function (courseId, seatId, version) {\r\n return this.$http.delete(this.url.service(\"api/courses/\" + courseId + \"/enrollment/\" + seatId + \"?version=\" + version))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.deleteEnrollmentSeatsByStatus = function (courseId, seatStatus, userNameSearchString) {\r\n return this.$http.delete(this.url.base(\"api/courses/\" + courseId + \"/enrollment/status/\" + seatStatus + \"?userNameSearchString=:userNameSearchString\")\r\n .param(\":userNameSearchString\", userNameSearchString)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.moveSeatToEnrolled = function (courseId, seatId, version) {\r\n return this.$http.put(this.url.service(\"api/courses/\" + courseId + \"/enrollment/\" + seatId + \"/moveToEnrolled?version=\" + version), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.moveAllSeatsToEnrolled = function (courseId, userNameSearchString) {\r\n return this.$http.put(this.url.base(\"api/courses/\" + courseId + \"/enrollment/moveAllToEnrolled?userNameSearchString=:userNameSearchString\")\r\n .param(\":userNameSearchString\", userNameSearchString)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.moveSeatToWaitlist = function (courseId, seatId, version) {\r\n return this.$http.put(this.url.service(\"api/courses/\" + courseId + \"/enrollment/\" + seatId + \"/moveToWaitlist?version=\" + version), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.moveAllSeatsToWaitlist = function (courseId, userNameSearchString) {\r\n return this.$http.put(this.url.base(\"api/courses/\" + courseId + \"/enrollment/moveAllToWaitlist?userNameSearchString=:userNameSearchString\")\r\n .param(\":userNameSearchString\", userNameSearchString)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.approveEnrollmentSeat = function (courseId, seatId, version) {\r\n return this.$http.put(this.url.service(\"api/courses/\" + courseId + \"/enrollment/\" + seatId + \"/approveSeat?version=\" + version), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.approveAllEnrollmentSeats = function (courseId, userNameSearchString) {\r\n return this.$http.put(this.url.base(\"api/courses/\" + courseId + \"/enrollment/approveAllSeat?userNameSearchString=:userNameSearchString\")\r\n .param(\":userNameSearchString\", userNameSearchString)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getCourseEnrollmentSeatsForCurrentUser = function (courseId) {\r\n return this.$http.get(this.url.service(\"api/courses/\" + courseId + \"/currentUserSeats\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getTotalUsedSeatsForCourse = function (courseId) {\r\n return this.$http.get(this.url.service(\"api/courses/\" + courseId + \"/enrolledUsersCount\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.enrollCurrentUserToCourse = function (courseId) {\r\n return this.$http.post(this.url.service(\"api/courses/\" + courseId + \"/enrollCurrentUser\"), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.unEnrollCurrentUserToCourse = function (courseId) {\r\n return this.$http.put(this.url.service(\"api/courses/\" + courseId + \"/unEnrollCurrentUser\"), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.sendEmailtoActiveLearners = function (courseId, message, subject) {\r\n return this.$http.put(this.url.base(\"api/courses/\" + courseId + \"/enrollment/sendEmails\")\r\n .service(), { message: message, subject: subject });\r\n };\r\n CourseService.prototype.inactiveCourse = function (courseId) {\r\n return this.$http.put(this.url.service(\"api/courses/\" + courseId + \"/inactive\"), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.removePermissionAssignments = function (courseId) {\r\n return this.$http.put(this.url.service(\"api/courses/\" + courseId + \"/removePermissionAssignments\"), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.checkPurchaseProcess = function (courseId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId\")\r\n .param(\":courseId\", courseId)\r\n .service(), courseId)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionAndModuleIdsByILTSessionId = function (courseId, sessionId) {\r\n return this.$http.get(this.url.service(\"api/courses/\" + courseId + \"/ilt/\" + sessionId + \"/sectionAndModuleIds\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSectionAndModuleIdsByVILTSessionId = function (courseId, sessionId) {\r\n return this.$http.get(this.url.service(\"api/courses/\" + courseId + \"/viltSessions/\" + sessionId + \"/sectionAndModuleIds\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSessionsViltList = function (courseId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/sections/:sectionId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.isExistCourses = function () {\r\n return this.$http.get(this.url.service(\"api/courses/search/isExistCourses\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.isConnectedUserToTeams = function (courseId) {\r\n return this.$http.get(this.url.service(\"api/courses/\" + courseId + \"/viltSessions/teams/auth/check\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createTeamsMeeting = function (courseId, meeting) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/teams/event/create\")\r\n .param(\":courseId\", courseId)\r\n .service(), meeting, { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.cancelTeamsEvent = function (courseId, sectionId, teamsEventId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/teams/:teamsEventId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":teamsEventId\", teamsEventId)\r\n .service(), { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.createParticipantTeams = function (courseId, webinarId, participant) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/teams/:webinarId/participants\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), participant, { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.removeParticipantTeams = function (courseId, webinarId, participantId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/teams/:webinarId/participants/:participantId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .param(\":participantId\", participantId)\r\n .service(), { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.createAllParticipantTeams = function (courseId, webinarId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/teams/:webinarId/allParticipants\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), null, { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.createAllParticipantTeamsWithoutCompleted = function (courseId, webinarId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/teams/:webinarId/allParticipants/completedStatus\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), null, { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.removeAllParticipantsTeams = function (courseId, webinarId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/teams/:webinarId/participants\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.removeAllParticipantsTeamsWithoutCompleted = function (courseId, webinarId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/viltSessions/teams/:webinarId/participants/completedStatus\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinarId)\r\n .service(), { ignore500: true })\r\n .then(function (result) {\r\n });\r\n };\r\n CourseService.prototype.getTeamsRedirectUrl = function (courseId) {\r\n return this.$http.get(this.url.service(\"api/courses/\" + courseId + \"/viltSessions/teams/redirectUrl\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateTeamsMeeting = function (courseId, webinar) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/viltSessions/teams/:webinarId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":webinarId\", webinar.id)\r\n .service(), webinar, { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getViltTeamsSessionParticipants = function (courseId, viltSessionId) {\r\n return this.$http.get(this.url.service(\"api/courses/\" + courseId + \"/viltSessions/teams/\" + viltSessionId + \"/update/participants\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.autoRegisterToAllSectionSessions = function (courseId, sectionId, progressId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/sections/:sectionId/autoRegistration/:progressId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .param(\":progressId\", progressId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getVILTSessionsForCourse = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/sections/forCourse\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getFullCourses = function (productId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:productId/getFullCourses\")\r\n .param(\":productId\", productId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSessionsViltListForCourses = function (sectionId, courseIds) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/sections/:sectionId/forCourses\")\r\n .param(\":sectionId\", sectionId)\r\n .service(), { params: { courseIds: courseIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.autoRegisterToSectionSessionsBySectionId = function (sectionId, courseIds) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/autoRegistration/:sectionId/forCourses\")\r\n .param(\":sectionId\", sectionId)\r\n .service(), { courseIds: courseIds })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.autoRegisterToAllCourseSessions = function (courseId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/autoRegistration/forCourse\")\r\n .param(\":courseId\", courseId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.autoRegisterToCourseSessions = function (courseId, sectionId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/viltSessions/autoRegistration/:sectionId/forCourse\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.setCoursePageHeaderBreadcrumbs = function (courseId, course, coursesRouter, header) {\r\n if (header === void 0) { header = \"Edit\"; }\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0\r\n || (menuItemKey != MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY\r\n || menuItemKey != MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY)) {\r\n var menu = course.active ? MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY\r\n : MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_EXPIRED_COURSES_MENU_KEY;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(menu);\r\n }\r\n var courseBreadcrumb = course.topic || course.subjectName;\r\n courseBreadcrumb = courseBreadcrumb.length > 40 ? courseBreadcrumb.substring(0, 40) + \"...\" : courseBreadcrumb;\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header(header)\r\n .addParentLink(courseBreadcrumb, \"#\" + coursesRouter.detailsUrl(courseId))\r\n .update();\r\n };\r\n CourseService.prototype.getCourseVILTSections = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/sessions/byCourseId\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.saveAudioFileForSlide = function (courseId, moduleId, sectionId, fileKey) {\r\n fileKey = encodeURIComponent(fileKey);\r\n return this.$http.post(this.url.service(\"/api/courses/\" + courseId + \"/modules/\" + moduleId + \"/sections/\" + sectionId + \"/audioFile?fileKey=\" + fileKey), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.removeAudioFileForSlide = function (courseId, moduleId, sectionId) {\r\n return this.$http.delete(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/:sectionId/deleteAudioFile\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getCourseVILTSectionsByCourseIds = function (courseIds) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/viltSessions/sessions/byCourseIds\")\r\n .service(), { params: { courseIds: courseIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.updateAudioFile = function (courseId, moduleId, sectionId, audioFileId) {\r\n return this.$http.put(this.url.base(\"/api/courses/:courseId/modules/:moduleId/sections/:sectionId/audioFile/:audioFileId/update\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":sectionId\", sectionId)\r\n .param(\":audioFileId\", audioFileId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getCourseProgress = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/progress/:courseId\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getCourseIltSections = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/sessions/byCourseId\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getCourseILTSectionsByCourseIds = function (courseIds) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/sessions/byCourseIds\")\r\n .service(), { params: { courseIds: courseIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSessionsIltList = function (courseId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/sections/sessions/:sectionId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getILTSessionsForCourse = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/sessions/forCourse\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getSessionsIltListForCourses = function (sectionId, courseIds) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/ilt/sections/:sectionId/forCourses\")\r\n .param(\":sectionId\", sectionId)\r\n .service(), { params: { courseIds: courseIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.autoRegisterToAllSectionILTSessions = function (courseId, sectionId, progressId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/ilt/sections/:sectionId/autoRegistration/:progressId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .param(\":progressId\", progressId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.autoRegisterToILTSectionSessionsBySectionId = function (sectionId, courseIds) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/ilt/autoRegistration/:sectionId/forCourses\")\r\n .param(\":sectionId\", sectionId)\r\n .service(), { courseIds: courseIds })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.autoRegisterToAllCourseILTSessions = function (courseId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/ilt/autoRegistration/forCourse\")\r\n .param(\":courseId\", courseId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.autoRegisterToCourseILTSessions = function (courseId, sectionId) {\r\n return this.$http.post(this.url.base(\"/api/courses/:courseId/ilt/autoRegistration/:sectionId/forCourse\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getCourseThreadCreator = function (threadId) {\r\n return this.$http.get(this.url.base(\"/api/courses/thread/author/:threadId\")\r\n .param(\":threadId\", threadId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.prototype.getGameLearningObjectsBadgeIds = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/actionPage/badgeIds\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseService.NAME = \"courses.CourseService\";\r\n CourseService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return CourseService;\r\n})();\r\nexports.CourseService = CourseService;\r\n},{\"../common/ExpirationCache\":55,\"../security/permissions/SecuredObjectType\":424,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528}],212:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar ProgressService_1 = require(\"./ProgressService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar UploadUtils_1 = require(\"../utils/UploadUtils\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar TreeElementsInfoFiller_1 = require(\"../tree/TreeElementsInfoFiller\");\r\nvar SectionType_1 = require(\"./models/SectionType\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar MaterialType_1 = require(\"../materials/models/MaterialType\");\r\nvar ObjectTypeUtils_1 = require(\"../utils/ObjectTypeUtils\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar LocationChangeHelper_1 = require(\"../utils/LocationChangeHelper\");\r\nvar Keys_1 = require(\"../utils/Keys\");\r\nvar SectionPassingType_1 = require(\"./models/SectionPassingType\");\r\nvar BundleFileType_1 = require(\"../bundles/models/BundleFileType\");\r\nvar SectionAccessRules_1 = require(\"./models/SectionAccessRules\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar SlideService_1 = require(\"../slides/SlideService\");\r\nvar VhsTemplateService_1 = require(\"../components/richtext/VhsTemplateService\");\r\nvar CourseDetailsUtils_1 = require(\"./CourseDetailsUtils\");\r\nvar Event_1 = require(\"../components/models/Event\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar ContentUtils_1 = require(\"../utils/ContentUtils\");\r\nvar UploadsService_1 = require(\"../storage/UploadsService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar VhsSelectEmbeddedBundleDirective_1 = require(\"../components/richtext/VhsSelectEmbeddedBundleDirective\");\r\nvar RichTextBindDirective_1 = require(\"../components/richtext/RichTextBindDirective\");\r\nvar RichTextContentLoadingSynchronizer_1 = require(\"../components/richtext/RichTextContentLoadingSynchronizer\");\r\nvar NewsKey_1 = require(\"../news/models/NewsKey\");\r\nvar NewsRouter_1 = require(\"../urls/NewsRouter\");\r\nvar QuizzesRouter_1 = require(\"../urls/QuizzesRouter\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar AIService_1 = require(\"../ai/AIService\");\r\nvar CourseStructureEditController = (function () {\r\n function CourseStructureEditController($scope, $http, $location, $routeParams, $timeout, $q, $rootScope, $window, url, securityService, permissionsService, coursesRouter, courseService, progressService, $uploader, userService, authService, authManager, uploadUtils, materialsRouter, dialogService, slideService, bundleService, templateApi, uploadsService, richTextContentLoadingSynchronizer, newsRouter, quizzesRouter, authRedirect, aiService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.$q = $q;\r\n this.$rootScope = $rootScope;\r\n this.$window = $window;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.coursesRouter = coursesRouter;\r\n this.courseService = courseService;\r\n this.progressService = progressService;\r\n this.$uploader = $uploader;\r\n this.userService = userService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.uploadUtils = uploadUtils;\r\n this.materialsRouter = materialsRouter;\r\n this.dialogService = dialogService;\r\n this.slideService = slideService;\r\n this.bundleService = bundleService;\r\n this.templateApi = templateApi;\r\n this.uploadsService = uploadsService;\r\n this.richTextContentLoadingSynchronizer = richTextContentLoadingSynchronizer;\r\n this.newsRouter = newsRouter;\r\n this.quizzesRouter = quizzesRouter;\r\n this.authRedirect = authRedirect;\r\n this.aiService = aiService;\r\n this.MODULE = 'module';\r\n this.SECTION = 'section';\r\n this.DEFAULT_TOP_MENU_ITEM = 'info';\r\n this.course = {};\r\n this.modules = [];\r\n this.menuKey = { topMenu: this.DEFAULT_TOP_MENU_ITEM, leftMenuModuleExpanded: [] };\r\n this.formIsDirty = false;\r\n this.selectedSection = null;\r\n this.sectionsMap = new Map();\r\n this.material = {};\r\n this.sectionMaterials = [];\r\n this.materialLoaded = false;\r\n this.sectionQuiz = {};\r\n this.sectionSurvey = {};\r\n this.sectionFlashcard = {};\r\n this.sectionVILTSession = {};\r\n this.availableSectionParent = new Map();\r\n this.module = {};\r\n this.section = {};\r\n this.isModuleEditing = false;\r\n this.isModuleUpdating = false;\r\n this.editingModule = {};\r\n this.isSectionEditing = false;\r\n this.editingSection = {};\r\n this.showMaterialCreationForm = false;\r\n this.disabledRemoveModuleButton = false;\r\n this.disabledRemoveSectionButton = false;\r\n this.isCourseInUse = false;\r\n this.isCourseChanged = false;\r\n this.limitNumberOfAttempts = true;\r\n this.numberOfAttempts = 1;\r\n this.moduleFromBundleFilesInput = {\r\n moduleId: null,\r\n selectedFileKeys: []\r\n };\r\n this.expandAll = false;\r\n this.isCourseLoaded = false;\r\n this.slides = [];\r\n this.selectedSlideDeckSection = null;\r\n this.searchTagNameField = null;\r\n this.tagNamesList = ['default'];\r\n this.removedSlides = false;\r\n this.replaceSlides = false;\r\n this.nothingChanged = true;\r\n this.isTemplateEditing = false;\r\n this.isSaveSectionAsPdfButtonDisabled = false;\r\n this.addedBundleFiles = [];\r\n this.loadOnStartFileIdsChanged = [];\r\n this.isLoading = false;\r\n this.base64Map = new Map();\r\n this.audioFile = {};\r\n this.showAudio = false;\r\n this.showAudioFiles = false;\r\n this.hasMandatorySection = false;\r\n this.maxSectionsLength = 0;\r\n this.showEditButtons = true;\r\n this.defaultTemplates = [{ path: \"defaultTemplate\", name: \"default template\", visible: true },\r\n { path: \"defaultTemplateWithThreeColumns\", name: \"default template with 3 columns\", visible: true },\r\n { path: \"defaultTemplateWithImageLeft\", name: \"default template with image left\", visible: true },\r\n { path: \"defaultTemplateWithImageRight\", name: \"default template with image right\", visible: true },\r\n { path: \"defaultTemplateWithBigImageLeft\", name: \"default template with big image left\", visible: true }];\r\n this.richTextBindController = new RichTextBindDirective_1.RichTextBindController(this.$http, this.$q, this.$timeout, this.bundleService, this.richTextContentLoadingSynchronizer);\r\n this.aiNumberOfSlides = 5;\r\n this.aiPromptText = \"\";\r\n this.blobToFileNew = function (theBlob, fileName) {\r\n var b = theBlob;\r\n b.lastModifiedDate = new Date();\r\n b.name = fileName;\r\n return theBlob;\r\n };\r\n this.viewCourseUrl = function () {\r\n if (_this.menuKey.leftMenuModuleExpanded.length != 0 && _this.menuKey.leftMenuItem) {\r\n return _this.coursesRouter.sectionDetailsRoute(_this.courseId, _this.menuKey.leftMenuModuleExpanded[0], _this.menuKey.leftMenuItem);\r\n }\r\n return _this.coursesRouter.detailsUrl(_this.courseId);\r\n };\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n this.moduleId = parseInt($location.search()[CoursesRouter_1.CoursesRouter.MODULE_PARAMETER]) || null;\r\n this.sectionId = parseInt($location.search()[CoursesRouter_1.CoursesRouter.SECTION_PARAMETER]) || null;\r\n var hasCourseId = this.courseId != null;\r\n var courseIdStr = String(this.courseId);\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(hasCourseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n console.log(this.menuKey);\r\n $scope.$watch(function () { return _this.section; }, (function (newValue, oldValue) {\r\n if (oldValue === newValue)\r\n return;\r\n _this.collapseModulesWithTimeout();\r\n }));\r\n this.loadCourse().then(function (res) {\r\n if (res.topic != \"Failed to retrieve the course details\") {\r\n if (res.externalCourse) {\r\n _this.userService.isUserSystemAdministrator()\r\n .then(function (result) {\r\n if (!result) {\r\n _this.authRedirect.forwardToAccessDenied();\r\n }\r\n });\r\n }\r\n _this.getSlideTemplates();\r\n _this.getCourseInUse();\r\n if (_this.course.bundleId) {\r\n _this.loadBundle()\r\n .then(function () {\r\n _this.$http.get(_this.url.service(\"/api/bundles/\" + _this.course.bundleId + \"/url\")).then(function (response) { return _this.bundleUrl = response.data; });\r\n _this.loadModules().then(function () {\r\n return _this.loadSections(true);\r\n });\r\n });\r\n }\r\n else {\r\n _this.createCourseBundle().then(function () {\r\n _this.loadBundle()\r\n .then(function () {\r\n _this.$http.get(_this.url.service(\"/api/bundles/\" + _this.course.bundleId + \"/url\")).then(function (response) { return _this.bundleUrl = response.data; });\r\n _this.loadModules().then(function () {\r\n return _this.loadSections(true);\r\n });\r\n });\r\n });\r\n }\r\n _this.loadSlideTemplatesBundle();\r\n _this.isCourseLoaded = true;\r\n }\r\n });\r\n this.uploadMaterialsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/courses/\" + this.courseId + \"/availableMaterials\")));\r\n this.uploadMaterialsGridModel.addLoadingListener(this);\r\n this.availableQuizzesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/courses/\" + this.courseId + \"/availableQuizzes\")));\r\n this.availableQuizzesGridModel.addLoadingListener(this);\r\n this.availableSurveysGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/courses/\" + this.courseId + \"/availableSurveys\")));\r\n this.availableSurveysGridModel.addLoadingListener(this);\r\n this.availableFlashcardsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/courses/\" + this.courseId + \"/availableFlashcards\")));\r\n this.availableFlashcardsGridModel.addLoadingListener(this);\r\n this.audioFilesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/slide/bundles/\" + this.courseId + \"/audioFiles\")));\r\n this.audioFilesGridModel.addLoadingListener(this);\r\n this.$scope.$on('$locationChangeStart', function (event, newLocation) {\r\n if (LocationChangeHelper_1.LocationChangeHelper.isEnablePreventLocationChange(newLocation)) {\r\n if (_this.formIsDirty) {\r\n if (!confirm(\"You can't leave this page unless you complete or cancel the quiz (survey or flashcards)\")) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n CourseStructureEditController.prototype.isCourseHasSections = function () {\r\n if (this.modules.length == 0 || this.sectionsMap.size == 0) {\r\n return false;\r\n }\r\n else {\r\n var isSectionsExist = false;\r\n this.sectionsMap.forEach(function (value, key, map) {\r\n if (value.length != 0) {\r\n isSectionsExist = true;\r\n }\r\n });\r\n return isSectionsExist;\r\n }\r\n };\r\n CourseStructureEditController.prototype.startLoading = function () {\r\n this.uploadMaterialsGridModel.filter.materialIds = this.sectionMaterials ?\r\n this.sectionMaterials.map(function (material) {\r\n return material.id;\r\n }) : [];\r\n this.uploadMaterialsGridModel.pageSize = 5;\r\n this.availableQuizzesGridModel.filter.quizId = this.selectedSection.quizId ? this.selectedSection.quizId : 0;\r\n this.availableQuizzesGridModel.pageSize = 5;\r\n this.availableSurveysGridModel.filter.quizId = this.selectedSection.quizId ? this.selectedSection.quizId : 0;\r\n this.availableSurveysGridModel.pageSize = 5;\r\n this.availableFlashcardsGridModel.filter.quizId = this.selectedSection.quizId ? this.selectedSection.quizId : 0;\r\n this.availableFlashcardsGridModel.pageSize = 5;\r\n this.audioFilesGridModel.pageSize = 6;\r\n };\r\n CourseStructureEditController.prototype.endLoading = function () {\r\n };\r\n CourseStructureEditController.prototype.saveModulesHierarchy = function (index, item) {\r\n var _this = this;\r\n if (index != this.modules.length - 1) {\r\n index++;\r\n }\r\n if (index != item.sortIndex) {\r\n item.sortIndex = index;\r\n this.showRecalculationMessage();\r\n this.deactivateMainContent();\r\n this.courseService.updateModuleHierarchy(this.courseId, item).then(function (result) {\r\n _this.processCourseInUseWarningMessageIfNeed();\r\n INotifier_1.notifier.success(\"Course hierarchy has been changed\");\r\n _this.loadModules().then(function () {\r\n return _this.loadSections(true);\r\n });\r\n }).finally(function () { return _this.activateMainContent(); });\r\n }\r\n };\r\n CourseStructureEditController.prototype.showCreationModal = function (creationKey, moduleId, parentId) {\r\n this.creationKey = creationKey;\r\n if (creationKey === this.SECTION) {\r\n this.moduleId = moduleId;\r\n this.section.parentId = parentId;\r\n this.typeKey = null;\r\n }\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#creationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n CourseStructureEditController.prototype.showMaterial = function (material) {\r\n var _this = this;\r\n this.materialType = \"\";\r\n this.materialLoaded = false;\r\n this.material = angular.copy(material);\r\n this.selectedMaterialId = material.id;\r\n this.$timeout(function () {\r\n _this.materialLoaded = true;\r\n if (_this.isYoutubeLink(_this.material)) {\r\n _this.materialType = 'YOUTUBE';\r\n }\r\n else if (_this.isVimeoLink(_this.material)) {\r\n _this.materialType = 'VIMEO';\r\n }\r\n else if (_this.isAwsLink(_this.material)) {\r\n _this.materialType = \"VIDEO\";\r\n }\r\n else {\r\n _this.materialType = _this.material.typeKey;\r\n }\r\n _this.isMaterialEmpty = _this.material.id && _this.material.typeKey !== MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.LINK] &&\r\n (!_this.material.fileStatus || _this.material.fileStatus === 'EMPTY');\r\n _this.isMaterialNotReady = !_this.isMaterialEmpty && _this.material.id &&\r\n _this.material.typeKey !== MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.LINK] && _this.material.fileStatus\r\n && _this.material.fileStatus !== 'EMPTY' && _this.material.fileStatus !== 'READY';\r\n _this.isViewAllowed = _this.materialLoaded && !_this.isMaterialEmpty && !_this.isMaterialNotReady;\r\n _this.multimediaSources = [{\r\n src: _this.isYoutubeLink(_this.material) || _this.isAwsLink(_this.material) ? _this.material.link : (_this.material.downloadUrl || ''),\r\n type: _this.isYoutubeLink(_this.material) ? \"video/youtube\" : (_this.isAwsLink(_this.material) ? \"video/mp4\" : _this.material.contentType)\r\n }];\r\n }, 0);\r\n };\r\n CourseStructureEditController.prototype.isYoutubeLink = function (material) {\r\n return material.typeId == 3 && ObjectTypeUtils_1.ObjectTypeUtils.isYoutubeUrl(material.link);\r\n };\r\n CourseStructureEditController.prototype.isVimeoLink = function (material) {\r\n return material.typeId == 3 && ObjectTypeUtils_1.ObjectTypeUtils.isVimeoUrl(material.link);\r\n };\r\n CourseStructureEditController.prototype.isAwsLink = function (material) {\r\n return material.typeId == 3 && ObjectTypeUtils_1.ObjectTypeUtils.isAwsUrl(material.link);\r\n };\r\n CourseStructureEditController.prototype.setLeftMenuModule = function (leftModule) {\r\n var _this = this;\r\n if (this.formIsDirty) {\r\n this.updateSection(this.selectedSection).then(function (updatedSection) {\r\n _this.loadSectionsForModule(_this.menuKey.leftMenuModuleExpanded[_this.menuKey.leftMenuModuleExpanded.indexOf(updatedSection.moduleId) || 0]);\r\n _this.setLeftMenuItem(updatedSection);\r\n INotifier_1.notifier.success(\"The section has been saved\");\r\n });\r\n }\r\n if (!!leftModule) {\r\n if (this.expandAll) {\r\n this.menuKey.leftMenuModuleExpanded.push(leftModule);\r\n }\r\n else {\r\n this.menuKey.leftMenuModuleExpanded = [leftModule];\r\n }\r\n }\r\n };\r\n CourseStructureEditController.prototype.setLeftMenuModuleWithoutSaving = function (leftModule) {\r\n var index = this.menuKey.leftMenuModuleExpanded.indexOf(leftModule, 0);\r\n if (index > -1) {\r\n this.menuKey.leftMenuModuleExpanded.splice(index, 1);\r\n }\r\n else {\r\n if (this.expandAll) {\r\n this.menuKey.leftMenuModuleExpanded.push(leftModule);\r\n }\r\n else {\r\n this.menuKey.leftMenuModuleExpanded = [leftModule];\r\n }\r\n }\r\n this.collapseModules();\r\n };\r\n CourseStructureEditController.prototype.collapseModulesWithTimeout = function () {\r\n var _this = this;\r\n setTimeout(function () {\r\n _this.collapseModules();\r\n }, 200);\r\n };\r\n CourseStructureEditController.prototype.collapseModules = function () {\r\n this.menuKey.leftMenuModuleExpanded.forEach(function (id) {\r\n var moduleId = 'module' + id;\r\n var moduleElem = document.getElementById(moduleId);\r\n moduleElem.style.maxHeight = moduleElem.scrollHeight + \"px\";\r\n });\r\n };\r\n CourseStructureEditController.prototype.onModuleButtonPress = function (keyCode) {\r\n if (keyCode == 13) {\r\n this.updateEditedModule();\r\n }\r\n };\r\n CourseStructureEditController.prototype.onModuleNameEdit = function () {\r\n var input = document.getElementById('moduleName');\r\n input.focus();\r\n };\r\n CourseStructureEditController.prototype.moveSectionIfAvailable = function (index, item, newModuleId) {\r\n var _this = this;\r\n var oldIndex;\r\n var oldModuleId;\r\n var moduleSections;\r\n if (!this.isSectionSlide(item.section)) {\r\n oldIndex = this.sectionsMap.get(item.section.moduleId)\r\n .filter(function (s) { return s.visible; })\r\n .map(function (s) { return s.section.id; })\r\n .indexOf(item.id);\r\n oldModuleId = item.section.moduleId;\r\n moduleSections = this.sectionsMap.get(newModuleId).filter(function (s) { return s.visible; });\r\n if (oldIndex === index && newModuleId === oldModuleId) {\r\n console.log(\"Nothing changed.\");\r\n return false;\r\n }\r\n if (oldModuleId != newModuleId) {\r\n this.dialogService.confirm(\"Drag-n-drop section to other module is unavailable.\", {\r\n confirmButton: \"Ok\",\r\n title: \" \",\r\n hideCancelButton: true\r\n });\r\n return false;\r\n }\r\n if (item.section.parentId) {\r\n var parentSection = moduleSections.filter(function (s) { return s.id === item.section.parentId; }).pop();\r\n var parentIndex = moduleSections.indexOf(parentSection);\r\n var lastChild = this.getLastChildRecursively(parentSection.section.id, parentSection.section.moduleId, 0);\r\n var lastChildOfParentIndex = this.sectionsMap.get(item.section.moduleId).indexOf(lastChild);\r\n if (index <= parentIndex || index > lastChildOfParentIndex + 1) {\r\n this.dialogService.confirm(\"Drag-n-drop of child section to another parent section is unavailable. To move section please click the 'Wrench' icon and update parent section.\", {\r\n confirmButton: \"Ok\",\r\n title: \" \",\r\n hideCancelButton: true\r\n });\r\n return false;\r\n }\r\n }\r\n if (index > 0 && index <= moduleSections.length - 1) {\r\n var next = moduleSections[index];\r\n var prev = moduleSections[index - 1];\r\n var isBetweenParentAndFirstChild = prev.section.id === next.section.parentId;\r\n var isBetweenTwoChildes = !!prev.section.parentId && !!next.section.parentId && prev.section.parentId === next.section.parentId;\r\n var isSelectedHasOtherParent = item.section.parentId != next.section.parentId;\r\n if ((isBetweenParentAndFirstChild || isBetweenTwoChildes) && isSelectedHasOtherParent) {\r\n this.dialogService.confirm(\"Drag-n-drop of section between two child sections or parent and first child section is unavailable. To move section at this place, click the 'Wrench' icon, select parent section and then move section on this level.\", {\r\n confirmButton: \"Ok\",\r\n title: \" \",\r\n hideCancelButton: true\r\n });\r\n return false;\r\n }\r\n if (item.level != prev.level && item.level != next.level) {\r\n this.dialogService.confirm(\"Drag-n-drop of section between two sections with other level in unavailable. To move section into other level, click the 'Wrench' icon and select the parent section\", {\r\n confirmButton: \"Ok\",\r\n title: \" \",\r\n hideCancelButton: true\r\n });\r\n return false;\r\n }\r\n var prevSectionOnLevel = this.findPrevSectionOfSameLevel(index, item, moduleSections);\r\n if (prevSectionOnLevel && prevSectionOnLevel.section.id === item.section.id) {\r\n console.log(\"Moving section after itself. Nothing changed.\");\r\n return false;\r\n }\r\n }\r\n if (index === moduleSections.length) {\r\n var prev = moduleSections[index - 1];\r\n if (prev.section.id === item.section.id) {\r\n console.log(\"Moving last section after itself out from sections array. Nothing changed.\");\r\n return false;\r\n }\r\n }\r\n }\r\n else {\r\n oldIndex = this.slides\r\n .filter(function (s) { return !s.visible; })\r\n .map(function (s) { return s.section.id; })\r\n .indexOf(item.id);\r\n oldModuleId = item.section.moduleId;\r\n moduleSections = this.sectionsMap.get(newModuleId);\r\n if (oldIndex === index && newModuleId === oldModuleId) {\r\n console.log(\"Nothing changed.\");\r\n return false;\r\n }\r\n if (oldModuleId != newModuleId) {\r\n this.dialogService.confirm(\"Drag-n-drop section to other module is unavailable.\", {\r\n confirmButton: \"Ok\",\r\n title: \" \",\r\n hideCancelButton: true\r\n });\r\n return false;\r\n }\r\n if (index === this.slides.length) {\r\n var prev = this.slides[index - 1];\r\n if (prev.section.id === item.section.id) {\r\n console.log(\"Moving last slide after itself out from slide array. Nothing changed.\");\r\n return false;\r\n }\r\n }\r\n }\r\n var messageConfirmMoving;\r\n if (this.isSectionSlide(item.section)) {\r\n messageConfirmMoving = \"Are you sure to move slide number\" + \" \" + item.section.sortIndex + \"?\";\r\n }\r\n else {\r\n messageConfirmMoving = \"Are you sure to move section\" + \" \" + item.section.name + \"?\";\r\n }\r\n this.dialogService.confirm(messageConfirmMoving, {\r\n title: \" \",\r\n confirmButton: \"Ok\",\r\n cancelButton: \"Cancel\"\r\n })\r\n .then(function () {\r\n _this.isSectionEditing = false;\r\n _this.editingSection = {};\r\n item.section.moduleId = newModuleId;\r\n if (!_this.isSectionSlide(item.section)) {\r\n item.section.sortIndex = _this.calculateSortIndexInLevel(index, item, newModuleId);\r\n }\r\n else {\r\n item.section.sortIndex = _this.calculateSortIndexInLevelOfSlide(index, item);\r\n }\r\n _this.courseService.updateSectionHierarchy(_this.courseId, item.section.moduleId, item.section)\r\n .then(function (result) {\r\n _this.processCourseInUseWarningMessageIfNeed();\r\n INotifier_1.notifier.success(\"Course hierarchy has been changed\");\r\n var updateSectionsPromises = [];\r\n updateSectionsPromises.push(_this.loadSectionsForModule(newModuleId).then(function () {\r\n if (_this.isSectionSlide(item.section)) {\r\n _this.getSlidesForSlideDeck(_this.getSectionById(item.section.moduleId, item.section.parentId));\r\n }\r\n }));\r\n if (oldModuleId != newModuleId) {\r\n updateSectionsPromises.push(_this.loadSectionsForModule(oldModuleId));\r\n }\r\n if (_this.selectedSection) {\r\n _this.$q.all(updateSectionsPromises)\r\n .then(function () {\r\n var updatedSection = _this.sectionsMap\r\n .get(_this.selectedSection.moduleId)\r\n .filter(function (s) { return s.id === _this.selectedSection.id; }).pop().section;\r\n _this.selectedSection.moduleId = updatedSection.moduleId;\r\n _this.selectedSection.parentId = updatedSection.parentId;\r\n _this.selectedSection.sortIndex = updatedSection.sortIndex;\r\n _this.selectedSection.coursewideSortPath = updatedSection.coursewideSortPath;\r\n _this.selectedSection.version = updatedSection.version;\r\n });\r\n }\r\n })\r\n .finally(function () {\r\n _this.sectionsMap.get(oldModuleId).splice(oldIndex, 1);\r\n });\r\n });\r\n return false;\r\n };\r\n CourseStructureEditController.prototype.getLastChildRecursively = function (parentId, moduleId, attempt) {\r\n if (attempt > CourseStructureEditController.RECURSION_DEPTH_LIMIT) {\r\n console.log(\"Aborted at exceed maximum recursion depth.\");\r\n return null;\r\n }\r\n var childes = this.sectionsMap.get(moduleId).filter(function (s) { return s.section.parentId === parentId; });\r\n var lastChild = null;\r\n if (childes.length > 0) {\r\n lastChild = childes[childes.length - 1];\r\n if (lastChild.children.length > 0) {\r\n lastChild = this.getLastChildRecursively(lastChild.section.id, lastChild.section.moduleId, ++attempt);\r\n }\r\n }\r\n return lastChild;\r\n };\r\n CourseStructureEditController.prototype.calculateSortIndexInLevel = function (index, item, newModuleId) {\r\n var moduleSections = this.sectionsMap.get(newModuleId).filter(function (s) { return s.visible; });\r\n var isMovingBackward = moduleSections\r\n .filter(function (s, i) { return !(i === index && s.section.id === item.section.id); })\r\n .map(function (s) { return s.id; })\r\n .indexOf(item.id) > index;\r\n var prevLevelSection = this.findPrevSectionOfSameLevel(index, item, moduleSections);\r\n if (prevLevelSection) {\r\n index = isMovingBackward ? prevLevelSection.section.sortIndex + 1 : prevLevelSection.section.sortIndex;\r\n }\r\n else {\r\n index = 1;\r\n }\r\n return index;\r\n };\r\n CourseStructureEditController.prototype.findPrevSectionOfSameLevel = function (insertIndex, item, moduleSections) {\r\n var prevSectionFilterCriteria = function (section, arrIndex) {\r\n return section.level === item.level\r\n && section.section.parentId == item.section.parentId\r\n && arrIndex < insertIndex;\r\n };\r\n var itemCopyFilterCriteria = function (section, arrIndex) { return !(arrIndex === insertIndex && section.section.id === item.section.id); };\r\n var prevLevelSections = moduleSections\r\n .filter(itemCopyFilterCriteria)\r\n .filter(prevSectionFilterCriteria);\r\n var prevSection;\r\n if (prevLevelSections.length != 0) {\r\n prevSection = prevLevelSections[prevLevelSections.length - 1];\r\n }\r\n return prevSection;\r\n };\r\n CourseStructureEditController.prototype.liteSaveSection = function (section) {\r\n var _this = this;\r\n if (this.selectedSection != null && this.formIsDirty) {\r\n if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SURVEY]) {\r\n this.selectedSection.sectionPassingType = \"OPTIONAL\";\r\n }\r\n if (this.limitNumberOfAttempts) {\r\n this.selectedSection.acceptableNumberOfAttempts = this.numberOfAttempts;\r\n section.acceptableNumberOfAttempts = this.numberOfAttempts;\r\n }\r\n else {\r\n this.selectedSection.acceptableNumberOfAttempts = -1;\r\n this.selectedSection.blockingProgressAfterFail = false;\r\n section.acceptableNumberOfAttempts = -1;\r\n section.blockingProgressAfterFail = false;\r\n }\r\n var isSectionBlockingChanged = this.isSectionBlockingChanged(section);\r\n if (isSectionBlockingChanged) {\r\n this.showRecalculationMessage();\r\n this.deactivateMainContent();\r\n }\r\n this.updateSection(this.selectedSection).then(function (updatedSection) {\r\n if (updatedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.QUIZ] ||\r\n updatedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SURVEY] ||\r\n updatedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD]) {\r\n _this.processCourseInUseWarningMessageIfNeed();\r\n }\r\n _this.loadSectionsForModule(_this.menuKey.leftMenuModuleExpanded[_this.menuKey.leftMenuModuleExpanded.indexOf(updatedSection.moduleId) || 0]).then(function () {\r\n if (_this.selectedSection.id == section.id || _this.selectedSlideDeckSection.id == section.id) {\r\n if (_this.isSectionSlideDeck(updatedSection) || _this.isSectionSlide(updatedSection)) {\r\n var slideDeckSection = _this.isSectionSlideDeck(updatedSection) ?\r\n updatedSection : _this.getSectionById(updatedSection.moduleId, updatedSection.parentId);\r\n _this.getSlidesForSlideDeck(slideDeckSection);\r\n _this.setSlideSectionActive(updatedSection);\r\n _this.selectedSection = _this.isSectionSlideDeck(updatedSection)\r\n ? _this.sectionsMap.get(slideDeckSection.moduleId).filter(function (s) { return s.section.parentId == slideDeckSection.id; })[0].section\r\n : _this.sectionsMap.get(slideDeckSection.moduleId).filter(function (s) { return s.section.parentId == slideDeckSection.id &&\r\n s.section.id == updatedSection.id; })[0].section;\r\n _this.selectedSlideDeckSection = slideDeckSection;\r\n _this.setSlideSectionActive(_this.selectedSection);\r\n }\r\n else {\r\n _this.setLeftMenuItem(updatedSection);\r\n }\r\n INotifier_1.notifier.success(\"The section has been saved\");\r\n if (_this.isSectionEditing && _this.editingSection.id == updatedSection.id) {\r\n angular.copy(updatedSection, _this.editingSection);\r\n }\r\n }\r\n else {\r\n _this.setLeftMenuItem(section);\r\n }\r\n });\r\n }).finally(function () {\r\n if (isSectionBlockingChanged) {\r\n _this.activateMainContent();\r\n }\r\n });\r\n }\r\n else {\r\n this.setLeftMenuItem(section);\r\n }\r\n };\r\n CourseStructureEditController.prototype.applyStylesToText = function () {\r\n var _this = this;\r\n var imgTagRx = //gi;\r\n var substitutedLines = [];\r\n var addedImage;\r\n while ((addedImage = imgTagRx.exec(this.selectedSection.summary)) != null) {\r\n substitutedLines.push(addedImage[0]);\r\n }\r\n substitutedLines.map(function (line) {\r\n _this.selectedSection.summary = _this.selectedSection.summary.replace(line, line.slice(0, -2) + ' style=\"width: 100%\"/>');\r\n });\r\n };\r\n CourseStructureEditController.prototype.convertBase64InSummary = function (firstUpdate) {\r\n var _this = this;\r\n var imgTagRx = firstUpdate ? //gi : //gi;\r\n var substitutedLines = [];\r\n while (true) {\r\n var addedImage = imgTagRx.exec(this.selectedSection.summary);\r\n if (!addedImage)\r\n break;\r\n substitutedLines.push(addedImage[0]);\r\n }\r\n var addedIndices = firstUpdate ? substitutedLines.length : 0;\r\n substitutedLines.map(function (img, index) {\r\n if (firstUpdate) {\r\n var contentTypeRx = /alt=\"[\\w\\W]+?\"/gi;\r\n var fileName = contentTypeRx.exec(img)[0].split('\"')[1];\r\n if (_this.bundle.filesMap.get(fileName) && _this.bundle.filesMap.get(fileName).url === null) {\r\n var styleRx = /style=\"[\\w\\W]+?\"/gi;\r\n var imgCopy = \"\" + img;\r\n var style = styleRx.exec(imgCopy);\r\n var styleString = \"\";\r\n if (style) {\r\n styleString = style[0].split('\"')[1];\r\n }\r\n var replacement = localStorage.getItem(fileName);\r\n _this.selectedSection.summary = _this.selectedSection.summary.replace(img, replacement);\r\n }\r\n else {\r\n var temp = localStorage.getItem(fileName);\r\n localStorage.removeItem(temp);\r\n localStorage.removeItem(fileName);\r\n }\r\n }\r\n else {\r\n var srcRx = /\"data:image\\/.*;base64,[\\w\\W]+?\"(?!\\sstyle=\"[\\w\\W]\")/gi;\r\n var styleRx = /style=\"[\\w\\W]+?\"/gi;\r\n var imgCopy = \"\" + img;\r\n var style = styleRx.exec(imgCopy);\r\n var styleString = \"\";\r\n if (style) {\r\n styleString = style[0].split('\"')[1];\r\n }\r\n var base64String = srcRx.exec(img);\r\n var block = base64String[0]\r\n .split(\";\");\r\n var contentType = block[0].substr(1).split(\":\")[1];\r\n var realData = block[1].slice(0, -1).split(\",\")[1];\r\n var blob = CourseStructureEditController.b64toBlob(realData, contentType);\r\n var fileName = \"attached_file_\" + (_this.bundle.files.length + 1 + index + addedIndices) + \".\" + contentType.split(\"/\")[1];\r\n var file = _this.blobToFileNew(blob, fileName);\r\n _this.addedBundleFiles.push({\r\n file: file,\r\n relativePath: \"sections/images/\" + _this.selectedSection.id\r\n });\r\n var path = _this.bundleUrl + \"/sections/images/\" + _this.selectedSection.id + \"/\" + fileName + \"?v=1\";\r\n var replaceString = _this.getBundleFileName(\"sections/images/\" + _this.selectedSection.id + \"/\" + fileName + \"?v=1\", path, styleString);\r\n _this.selectedSection.summary = _this.selectedSection.summary.replace(img, replaceString);\r\n }\r\n });\r\n };\r\n CourseStructureEditController.prototype.saveSection = function (section) {\r\n var _this = this;\r\n this.isLoading = true;\r\n this.summaryCopy = \"\" + this.selectedSection.summary;\r\n this.copiedSectionId = section.id;\r\n this.loadBundle()\r\n .then(function () { return _this.convertBase64InSummary(false); })\r\n .then(function () {\r\n _this.updateBundleFromFiles();\r\n _this.saveSectionText(section);\r\n });\r\n };\r\n CourseStructureEditController.prototype.saveSectionText = function (section) {\r\n var _this = this;\r\n if (this.selectedSection != null && this.formIsDirty) {\r\n if (this.limitNumberOfAttempts) {\r\n this.selectedSection.acceptableNumberOfAttempts = this.numberOfAttempts;\r\n section.acceptableNumberOfAttempts = this.numberOfAttempts;\r\n }\r\n else {\r\n this.selectedSection.acceptableNumberOfAttempts = -1;\r\n this.selectedSection.blockingProgressAfterFail = false;\r\n section.acceptableNumberOfAttempts = -1;\r\n section.blockingProgressAfterFail = false;\r\n }\r\n var isSectionBlockingChanged = this.isSectionBlockingChanged(section);\r\n if (isSectionBlockingChanged) {\r\n this.showRecalculationMessage();\r\n this.deactivateMainContent();\r\n }\r\n this.updateSection(section).then(function (updatedSection) {\r\n if (updatedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.QUIZ] ||\r\n updatedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SURVEY] ||\r\n updatedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD]) {\r\n _this.processCourseInUseWarningMessageIfNeed();\r\n }\r\n _this.loadSectionsForModuleText(updatedSection, section);\r\n if (section.typeKey === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]) {\r\n _this.courseService.getSectionMultimediaMaterialsFromSummary(_this.courseId, section.moduleId, section.id)\r\n .then(function (materials) {\r\n if (materials.length > 1) {\r\n _this.dialogService.confirm(\"Warning! Progress and check points are not supported correctly in the sections with multiple media files\", {\r\n title: \"Sections with multiple multimedia.\",\r\n hideCancelButton: true\r\n });\r\n }\r\n });\r\n }\r\n }).finally(function () {\r\n if (isSectionBlockingChanged) {\r\n _this.activateMainContent();\r\n }\r\n });\r\n }\r\n else {\r\n this.setLeftMenuItem(section);\r\n }\r\n };\r\n CourseStructureEditController.prototype.loadSectionsForModuleText = function (updatedSection, section) {\r\n var _this = this;\r\n this.loadSectionsForModule(this.menuKey.leftMenuModuleExpanded[this.menuKey.leftMenuModuleExpanded.indexOf(updatedSection.moduleId) || 0]).then(function () {\r\n if (_this.selectedSection.id == section.id || _this.selectedSlideDeckSection.id == section.id) {\r\n if (_this.isSectionSlideDeck(updatedSection) || _this.isSectionSlide(updatedSection)) {\r\n var slideDeckSection = _this.isSectionSlideDeck(updatedSection) ?\r\n updatedSection : _this.getSectionById(updatedSection.moduleId, updatedSection.parentId);\r\n _this.getSlidesForSlideDeck(slideDeckSection);\r\n _this.setSlideSectionActive(updatedSection);\r\n _this.selectedSection = _this.isSectionSlideDeck(updatedSection)\r\n ? _this.sectionsMap.get(slideDeckSection.moduleId).filter(function (s) { return s.section.parentId == slideDeckSection.id; })[0].section\r\n : _this.sectionsMap.get(slideDeckSection.moduleId).filter(function (s) { return s.section.parentId == slideDeckSection.id &&\r\n s.section.id == updatedSection.id; })[0].section;\r\n _this.selectedSlideDeckSection = slideDeckSection;\r\n _this.setSlideSectionActive(_this.selectedSection);\r\n }\r\n else {\r\n _this.setLeftMenuItem(updatedSection);\r\n }\r\n INotifier_1.notifier.success(\"The section has been saved\");\r\n if (_this.isSectionEditing && _this.editingSection.id == updatedSection.id) {\r\n angular.copy(updatedSection, _this.editingSection);\r\n }\r\n _this.isCourseHasMandatorySection();\r\n _this.progressService.getCourseSections(_this.courseId, null).then(function (result) {\r\n _this.maxSectionsLength = result.length;\r\n if (!_this.hasMandatorySection && _this.course.requiredElectivesNumber < 1) {\r\n $('#electivesRequiredModal').modal('show');\r\n }\r\n });\r\n }\r\n else {\r\n _this.setLeftMenuItem(section);\r\n }\r\n });\r\n };\r\n CourseStructureEditController.prototype.getBundleFileName = function (name, src, style) {\r\n return style\r\n ? StringBuilder_1.StringBuilder.interpolate(VhsSelectEmbeddedBundleDirective_1.VhsSelectEmbeddedBundleMaterialController.EMBEDDED_STYLED_IMG_TA_HTML)\r\n .with(\":bundleKey\", name)\r\n .with(\":imageSrc\", src)\r\n .with(\":styleKey\", style)\r\n .build()\r\n : StringBuilder_1.StringBuilder.interpolate(VhsSelectEmbeddedBundleDirective_1.VhsSelectEmbeddedBundleMaterialController.EMBEDDED_IMG_TA_HTML_COURSES)\r\n .with(\":bundleKey\", name)\r\n .with(\":imageSrc\", src)\r\n .build();\r\n };\r\n CourseStructureEditController.prototype.loadBundle = function () {\r\n var _this = this;\r\n if (this.course.bundleId) {\r\n return this.bundleService.getBundle(this.course.bundleId, \"ALL\")\r\n .then(function (bundle) {\r\n _this.bundle = bundle;\r\n _this.composeRichTextFromLoadAtStartBundles();\r\n if (_this.courseLoadAtStartBundlesText) {\r\n return _this.$timeout(function () {\r\n return _this.getRichTextLoadedPromise(CourseStructureEditController.COURSE_LOAD_AT_START_BUNDLES_RICH_TEXT_ID);\r\n }, 0);\r\n }\r\n return null;\r\n });\r\n }\r\n else {\r\n return this.$q.when(null);\r\n }\r\n };\r\n CourseStructureEditController.prototype.composeRichTextFromLoadAtStartBundles = function () {\r\n if (this.bundle) {\r\n this.courseLoadAtStartBundlesText = CourseDetailsUtils_1.CourseDetailsUtils.composeRichTextFromLoadAtStartBundles(this.bundle);\r\n }\r\n };\r\n CourseStructureEditController.prototype.loadSlideTemplatesBundle = function () {\r\n var _this = this;\r\n this.slideService.getSlideTemplateBundleId().then(function (result) {\r\n if (result) {\r\n return _this.bundleService.getBundle(result, \"HTML_OR_LOADED_AT_START\")\r\n .then(function (bundle) {\r\n _this.slideTemplatesBundle = bundle;\r\n _this.composeRichTextFromSlideTemplateBundle();\r\n if (_this.slideTemplatesBundleText) {\r\n return _this.$timeout(function () {\r\n return _this.getRichTextLoadedPromise(CourseStructureEditController.SLIDE_TEMPLATES_BUNDLE_RICH_TEXT_ID);\r\n }, 0);\r\n }\r\n return null;\r\n });\r\n }\r\n else {\r\n return _this.$q.when(null);\r\n }\r\n });\r\n };\r\n CourseStructureEditController.prototype.composeRichTextFromSlideTemplateBundle = function () {\r\n if (this.slideTemplatesBundle) {\r\n this.slideTemplatesBundleText = CourseDetailsUtils_1.CourseDetailsUtils.composeRichTextFromLoadAtStartBundles(this.slideTemplatesBundle);\r\n }\r\n };\r\n CourseStructureEditController.prototype.createCourseBundle = function () {\r\n var _this = this;\r\n if (!this.course.bundleId) {\r\n return this.courseService.createCourseBundle(this.course.id, this.course.version)\r\n .then(function (result) {\r\n var bundle = result[\"bundle\"];\r\n _this.course.bundleId = bundle.id;\r\n _this.course.version = result[\"course\"].version;\r\n console.log(_this.course.bundleId);\r\n return bundle;\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n return _this.$q.reject(null);\r\n });\r\n }\r\n else {\r\n return this.$q.reject(null);\r\n }\r\n };\r\n CourseStructureEditController.prototype.updateBundleFromFiles = function () {\r\n var _this = this;\r\n var addedBundleFiles = [];\r\n this.addedBundleFiles.forEach(function (bundleFile) {\r\n addedBundleFiles.push({\r\n name: bundleFile.file.name,\r\n type: bundleFile.file.type,\r\n size: bundleFile.file.size,\r\n path: bundleFile.relativePath\r\n });\r\n });\r\n var bundleInput = {\r\n id: this.bundle.id,\r\n version: this.bundle.version,\r\n addedFiles: addedBundleFiles,\r\n deletedFileIds: [],\r\n loadOnStartFilesChangedIds: this.loadOnStartFileIdsChanged\r\n };\r\n this.bundleService.updateBundleFromFiles(bundleInput).then(function (result) {\r\n var addedBundleFiles = _this.addedBundleFiles;\r\n _this.addedBundleFiles = [];\r\n _this.bundle = result[\"bundle\"];\r\n _this.bundleFilesGridModel.loadPage(0);\r\n _this.loadOnStartFileIdsChanged = [];\r\n var fileUploadInfos = result[\"fileUploadInfos\"];\r\n for (var i = 0, j = 0; i < addedBundleFiles.length || j < fileUploadInfos.length; ++i, ++j) {\r\n var addedFile = addedBundleFiles[i].file;\r\n var fileUploadInfo = fileUploadInfos[j];\r\n _this.uploadUtils.uploadBundleByChunks(addedFile, fileUploadInfo.fileId, _this.bundle.id, fileUploadInfo.url, fileUploadInfo.method);\r\n }\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n }).finally(function () {\r\n _this.isLoading = false;\r\n });\r\n };\r\n CourseStructureEditController.b64toBlob = function (b64Data, contentType) {\r\n contentType = contentType || '';\r\n var sliceSize = 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n return new Blob(byteArrays, { type: contentType });\r\n };\r\n CourseStructureEditController.prototype.onSectionButtonPress = function (keyCode) {\r\n if (keyCode == 13) {\r\n this.updateEditedSection();\r\n }\r\n };\r\n CourseStructureEditController.prototype.onSectionNameEdit = function () {\r\n var input = document.getElementById('sectionName');\r\n input.focus();\r\n };\r\n CourseStructureEditController.prototype.isLeftMenuItemActive = function (topMenuKey, leftModule, item) {\r\n return this.menuKey.topMenu == topMenuKey\r\n && (this.menuKey.leftMenuModule == leftModule || this.menuKey.leftMenuModuleExpanded.indexOf(leftModule) > -1)\r\n && this.menuKey.leftMenuItem == item;\r\n };\r\n CourseStructureEditController.prototype.showEditingModal = function (section) {\r\n var _this = this;\r\n this.availableCurrentSectionParent = [];\r\n this.courseService.getAvailableSectionsNoChildren(this.courseId, section.moduleId, section.id).then(function (result) {\r\n var availableCurrentSectionParent = [];\r\n _this.availableSectionParent.get(section.moduleId).forEach(function (section) {\r\n result.forEach(function (s) {\r\n if (s.id == section.id) {\r\n availableCurrentSectionParent.push(s);\r\n }\r\n });\r\n });\r\n angular.copy(availableCurrentSectionParent, _this.availableCurrentSectionParent);\r\n angular.copy(section, _this.editingSection);\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#editingDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n });\r\n };\r\n CourseStructureEditController.prototype.cleanEditingModal = function () {\r\n this.editingSection = {};\r\n this.availableCurrentSectionParent = [];\r\n };\r\n CourseStructureEditController.prototype.startSectionInlineEdit = function (section) {\r\n this.isSectionEditing = true;\r\n angular.copy(section, this.editingSection);\r\n };\r\n CourseStructureEditController.prototype.updateEditedSection = function () {\r\n var _this = this;\r\n this.showEditButtons = false;\r\n if (this.editingSection.name) {\r\n this.updateSectionName(this.editingSection).then(function (updatedSection) {\r\n _this.editingSection = {};\r\n _this.isSectionEditing = false;\r\n _this.loadSectionsForModule(updatedSection.moduleId);\r\n if (_this.selectedSection && _this.selectedSection.id == updatedSection.id) {\r\n angular.copy(updatedSection, _this.selectedSection);\r\n }\r\n if (_this.selectedSlideDeckSection && _this.selectedSlideDeckSection.id == updatedSection.id) {\r\n _this.selectedSlideDeckSection.name = updatedSection.name;\r\n }\r\n setTimeout(function () {\r\n _this.showEditButtons = true;\r\n }, 100);\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"Please specify section name\");\r\n setTimeout(function () {\r\n _this.showEditButtons = true;\r\n }, 50);\r\n }\r\n };\r\n CourseStructureEditController.prototype.isSelectedSectionTypeInfo = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION];\r\n };\r\n CourseStructureEditController.prototype.isSelectedSectionTypeInfoWithManualCompletion = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION_WITH_MANUAL_COMPLETION];\r\n };\r\n CourseStructureEditController.prototype.toggleMaterialCreationForm = function () {\r\n this.showMaterialCreationForm = !this.showMaterialCreationForm;\r\n };\r\n CourseStructureEditController.prototype.callbackWhenMaterialCreated = function (materials) {\r\n this.showMaterialCreationForm = false;\r\n this.addMaterialsToSection(materials);\r\n };\r\n CourseStructureEditController.prototype.addMaterialToSection = function (material) {\r\n this.formIsDirty = true;\r\n this.sectionMaterials.push(material);\r\n this.showMaterial(this.sectionMaterials[0]);\r\n this.uploadMaterialsGridModel.loadPage(0);\r\n this.liteSaveSection(this.selectedSection);\r\n INotifier_1.notifier.success(\"Material selection has been saved\");\r\n };\r\n CourseStructureEditController.prototype.addMaterialsToSection = function (materials) {\r\n var _this = this;\r\n this.formIsDirty = true;\r\n this.sectionMaterials = this.sectionMaterials.concat(materials);\r\n this.sectionMaterials.forEach(function (mat) { return _this.showMaterial(mat); });\r\n this.uploadMaterialsGridModel.loadPage(0);\r\n this.liteSaveSection(this.selectedSection);\r\n INotifier_1.notifier.success(\"Materials selection have been saved\");\r\n };\r\n CourseStructureEditController.prototype.removeMaterialFromSection = function (index, material) {\r\n this.formIsDirty = true;\r\n this.sectionMaterials.splice(index, 1);\r\n if (this.sectionMaterials.length == 0) {\r\n this.material = {};\r\n }\r\n this.uploadMaterialsGridModel.loadPage(0);\r\n this.liteSaveSection(this.selectedSection);\r\n INotifier_1.notifier.success(\"The material has been removed\");\r\n };\r\n CourseStructureEditController.prototype.moveUp = function (index) {\r\n var placeholder = {};\r\n var objectToMove = this.sectionMaterials.splice(index, 1, placeholder)[0];\r\n this.sectionMaterials.splice(index - 1, 0, objectToMove);\r\n this.sectionMaterials.splice(this.sectionMaterials.indexOf(placeholder), 1);\r\n this.setFormIsDirty();\r\n };\r\n CourseStructureEditController.prototype.moveDown = function (index) {\r\n var placeholder = {};\r\n var objectToMove = this.sectionMaterials.splice(index + 1, 1, placeholder)[0];\r\n this.sectionMaterials.splice(index, 0, objectToMove);\r\n this.sectionMaterials.splice(this.sectionMaterials.indexOf(placeholder), 1);\r\n this.setFormIsDirty();\r\n };\r\n CourseStructureEditController.prototype.isMoveUp = function (index) {\r\n return index > 0;\r\n };\r\n CourseStructureEditController.prototype.isMoveDown = function (index) {\r\n return index < this.sectionMaterials.length - 1;\r\n };\r\n CourseStructureEditController.prototype.setFormIsDirty = function () {\r\n this.formIsDirty = true;\r\n };\r\n CourseStructureEditController.prototype.setFormIsDirtyForSlideDeck = function () {\r\n this.formIsDirty = true;\r\n };\r\n CourseStructureEditController.prototype.setUpBlockingProgressAfterFail = function () {\r\n this.selectedSection.blockingProgressAfterFail = true;\r\n };\r\n CourseStructureEditController.prototype.toggleLimitAcceptableNumberOfAttempts = function () {\r\n this.numberOfAttempts = 1;\r\n this.setFormIsDirty();\r\n };\r\n CourseStructureEditController.prototype.onChangeNumberOfAttemptsField = function () {\r\n this.setFormIsDirty();\r\n };\r\n CourseStructureEditController.prototype.reloadSection = function (section) {\r\n var _this = this;\r\n this.loadSectionsForModule(section.moduleId);\r\n this.sectionsMap.get(section.moduleId).forEach(function (s) {\r\n if (s.section.id == section.id) {\r\n _this.setLeftMenuItem(s.section);\r\n }\r\n });\r\n };\r\n CourseStructureEditController.prototype.isSelectedSectionTypeQuiz = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.QUIZ];\r\n };\r\n CourseStructureEditController.prototype.isSelectedSectionTypeSurvey = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.SURVEY];\r\n };\r\n CourseStructureEditController.prototype.isSelectedSectionTypeWebinar = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR];\r\n };\r\n CourseStructureEditController.prototype.isSelectedSectionTypeILT = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.ILT];\r\n };\r\n CourseStructureEditController.prototype.isSelectedSectionTypeFlashcard = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD];\r\n };\r\n CourseStructureEditController.prototype.isSelectedSectionTypeSlideDeck = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK];\r\n };\r\n CourseStructureEditController.prototype.isSelectedSectionTypeSlide = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.SLIDE];\r\n };\r\n CourseStructureEditController.prototype.updateSectionName = function (section) {\r\n return this.courseService.updateSectionName(this.courseId, section.moduleId, section);\r\n };\r\n CourseStructureEditController.prototype.recalculateSectionWithParentIndex = function (index, item, newModuleId) {\r\n var _this = this;\r\n var parentIndex = 0;\r\n var children = null;\r\n this.sectionsMap.get(newModuleId).forEach(function (section) {\r\n if (section.id == item.parentId) {\r\n parentIndex = _this.sectionsMap.get(newModuleId).indexOf(section);\r\n children = section.children;\r\n }\r\n });\r\n if (index < parentIndex) {\r\n index = 1;\r\n }\r\n else if (index >= parentIndex + children.length) {\r\n index = children[children.length - 1].section.sortIndex;\r\n }\r\n else {\r\n index = this.sectionsMap.get(newModuleId)[index + 1].section.sortIndex;\r\n }\r\n return index;\r\n };\r\n CourseStructureEditController.prototype.setLeftMenuItem = function (section) {\r\n if (this.selectedSection && section.id != this.selectedSection.id) {\r\n this.showAudio = false;\r\n }\r\n if (this.isSectionSlideDeck(section)) {\r\n this.getSlidesForSlideDeck(section);\r\n if (this.slides[0] != null) {\r\n section = this.slides[0].section;\r\n this.menuKey.leftMenuItem = section.parentId;\r\n this.menuKey.leftMenuItemType = section.typeKey;\r\n this.menuKey.leftMenuModule = section.moduleId;\r\n this.selectedSection = angular.copy(section);\r\n }\r\n else {\r\n this.selectedSection = {};\r\n }\r\n }\r\n else {\r\n this.selectedSection = angular.copy(section);\r\n }\r\n this.formIsDirty = false;\r\n this.limitNumberOfAttempts = section.acceptableNumberOfAttempts != -1;\r\n if (this.limitNumberOfAttempts) {\r\n this.numberOfAttempts = section.acceptableNumberOfAttempts;\r\n }\r\n else {\r\n this.numberOfAttempts = 1;\r\n }\r\n if (this.isSectionSlideDeck(section) || this.isSectionSlide(section)) {\r\n this.selectedSlideDeckSection = this.isSectionSlideDeck(section) ? section : this.getSectionById(section.moduleId, section.parentId);\r\n }\r\n if (!this.checkSlideDeck(section.id)) {\r\n this.menuKey.leftMenuItem = section.id;\r\n this.menuKey.leftMenuItemType = section.typeKey;\r\n this.menuKey.leftMenuModule = section.moduleId;\r\n }\r\n this.material = {};\r\n this.sectionQuiz = {};\r\n this.sectionSurvey = {};\r\n this.sectionFlashcard = {};\r\n this.sectionVILTSession = {};\r\n if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]) {\r\n this.loadSectionMaterials();\r\n }\r\n if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.QUIZ]) {\r\n this.loadSectionQuiz();\r\n }\r\n if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION_WITH_MANUAL_COMPLETION]) {\r\n this.loadSectionMaterials();\r\n }\r\n if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SURVEY]) {\r\n this.loadSectionSurvey();\r\n }\r\n if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR]) {\r\n }\r\n if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD]) {\r\n this.loadSectionFlashcard();\r\n }\r\n this.setCurrentSectionAccessRules();\r\n this.isTemplateEditing = this.isContentFromTemplate();\r\n if (this.selectedSection.id === this.copiedSectionId) {\r\n this.selectedSection.summary = this.summaryCopy ? this.summaryCopy : this.selectedSection.summary;\r\n }\r\n else {\r\n this.summaryCopy = null;\r\n this.copiedSectionId = null;\r\n }\r\n };\r\n CourseStructureEditController.prototype.isSectionQuizOrSurveyOrFalshcard = function (section) {\r\n return section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.QUIZ] || section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SURVEY]\r\n || section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD];\r\n };\r\n CourseStructureEditController.prototype.isSectionSlideDeck = function (section) {\r\n return section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK];\r\n };\r\n CourseStructureEditController.prototype.isSectionSlide = function (section) {\r\n return section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE];\r\n };\r\n CourseStructureEditController.prototype.isSectionWebinar = function (section) {\r\n return section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR];\r\n };\r\n CourseStructureEditController.prototype.isSectionILT = function (section) {\r\n return section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.ILT];\r\n };\r\n CourseStructureEditController.prototype.isSectionIWMC = function (section) {\r\n return section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION_WITH_MANUAL_COMPLETION];\r\n };\r\n CourseStructureEditController.prototype.loadCourse = function () {\r\n var _this = this;\r\n return this.courseService.get(this.courseId)\r\n .then(function (result) {\r\n _this.course = angular.copy(result);\r\n _this.course.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n if (result) {\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter);\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit Course\").update();\r\n }\r\n _this.initBundleFilesGridModel();\r\n return _this.course;\r\n });\r\n };\r\n CourseStructureEditController.prototype.getCourseInUse = function () {\r\n var _this = this;\r\n this.progressService.getCourseInUse(this.courseId).then(function (result) {\r\n _this.isCourseInUse = result.value;\r\n });\r\n };\r\n CourseStructureEditController.prototype.processCourseInUseWarningMessageIfNeed = function () {\r\n if (this.isCourseInUse) {\r\n INotifier_1.notifier.warning(\"The changes can cause problems in passing the course by users who had already started it\");\r\n this.isCourseChanged = true;\r\n }\r\n };\r\n CourseStructureEditController.prototype.loadModules = function () {\r\n var _this = this;\r\n return this.courseService.getModules(this.courseId).then(function (result) {\r\n angular.copy(result, _this.modules);\r\n });\r\n };\r\n CourseStructureEditController.prototype.loadSections = function (setMenuItem) {\r\n var _this = this;\r\n return this.progressService.getCourseSections(this.courseId, null).then(function (result) {\r\n _this.modules.forEach(function (module) {\r\n _this.sectionsMap.set(module.id, result.filter(function (s) { return s.section.moduleId == module.id; }));\r\n TreeElementsInfoFiller_1.TreeElementsInfoFiller.fillHierarchyInfoWithMaxLevel(_this.sectionsMap.get(module.id), Number.MAX_VALUE);\r\n _this.sectionsMap.set(module.id, _this.setSlidesVisibility(_this.sectionsMap.get(module.id)));\r\n _this.loadAvailableSectionParent(module.id, _this.sectionsMap.get(module.id));\r\n });\r\n if (setMenuItem) {\r\n _this.setMenuItems(_this.moduleId, _this.sectionId);\r\n }\r\n });\r\n };\r\n CourseStructureEditController.prototype.setMenuItems = function (moduleId, sectionId) {\r\n if (moduleId && sectionId) {\r\n this.setLeftMenuModule(moduleId);\r\n var sections = this.sectionsMap.get(moduleId);\r\n if (sections && sections.length > 0) {\r\n this.setLeftMenuItem(sections.filter(function (s) { return s.section.id == sectionId; })[0].section);\r\n }\r\n }\r\n else if (moduleId && !sectionId) {\r\n if (this.menuKey.leftMenuModuleExpanded.length == 0) {\r\n this.setLeftMenuModule(moduleId);\r\n var sections = this.sectionsMap.get(moduleId);\r\n if (sections && sections.length > 0) {\r\n this.setLeftMenuItem(sections[0].section);\r\n }\r\n }\r\n }\r\n else {\r\n if (this.menuKey.leftMenuModuleExpanded.length > 0) {\r\n this.setLeftMenuModule(this.menuKey.leftMenuModuleExpanded[0]);\r\n }\r\n }\r\n };\r\n CourseStructureEditController.prototype.isLeftMenuModuleActive = function (topMenuKey, leftModule) {\r\n return this.menuKey.topMenu == topMenuKey && this.menuKey.leftMenuModuleExpanded.indexOf(leftModule) > -1;\r\n };\r\n CourseStructureEditController.prototype.loadSectionsForModule = function (moduleId) {\r\n var _this = this;\r\n return this.courseService.getModuleSections(this.courseId, moduleId).then(function (result) {\r\n TreeElementsInfoFiller_1.TreeElementsInfoFiller.fillHierarchyInfoWithMaxLevel(result, Number.MAX_VALUE);\r\n _this.sectionsMap.set(moduleId, _this.setSlidesVisibility(result));\r\n _this.loadAvailableSectionParent(moduleId, result);\r\n });\r\n };\r\n CourseStructureEditController.prototype.loadSectionMaterials = function () {\r\n var _this = this;\r\n this.sectionMaterials = null;\r\n this.courseService.getSectionAllMaterials(this.courseId, this.menuKey.leftMenuModule, this.selectedSection.id).then(function (result) {\r\n _this.sectionMaterials = angular.copy(result);\r\n if (_this.sectionMaterials && _this.sectionMaterials.length > 0) {\r\n _this.showMaterial(_this.sectionMaterials[0]);\r\n }\r\n else {\r\n _this.hideCurrentMaterial();\r\n }\r\n _this.uploadMaterialsGridModel.loadPage(0);\r\n });\r\n };\r\n CourseStructureEditController.prototype.updateSection = function (section) {\r\n if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION] || section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION_WITH_MANUAL_COMPLETION]) {\r\n section.materialIds = this.sectionMaterials.map(function (material) {\r\n return material.id;\r\n });\r\n }\r\n else if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.QUIZ]) {\r\n section.quizId = this.sectionQuiz.id;\r\n }\r\n else if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SURVEY]) {\r\n section.quizId = this.sectionSurvey.id;\r\n }\r\n else if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD]) {\r\n section.quizId = this.sectionFlashcard.id;\r\n }\r\n return this.courseService.updateSection(this.courseId, section.moduleId, section);\r\n };\r\n CourseStructureEditController.prototype.loadAvailableSectionParent = function (moduleId, sections) {\r\n var parentSections = [];\r\n sections.forEach(function (s) {\r\n if ((s.section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]) && s.level < 6) {\r\n parentSections.push(s);\r\n }\r\n });\r\n this.availableSectionParent.set(moduleId, parentSections);\r\n };\r\n CourseStructureEditController.prototype.loadSectionQuiz = function () {\r\n var _this = this;\r\n this.sectionQuiz = null;\r\n this.selectedSection.quizId = 0;\r\n this.courseService.getSectionQuiz(this.courseId, this.menuKey.leftMenuModule, this.selectedSection.id)\r\n .then(function (result) {\r\n _this.sectionQuiz = angular.copy(result);\r\n _this.selectedSection.quizId = result.id;\r\n _this.availableQuizzesGridModel.loadPage(0);\r\n });\r\n };\r\n CourseStructureEditController.prototype.loadSectionSurvey = function () {\r\n var _this = this;\r\n this.sectionSurvey = null;\r\n this.selectedSection.quizId = 0;\r\n this.courseService.getSectionSurvey(this.courseId, this.menuKey.leftMenuModule, this.selectedSection.id)\r\n .then(function (result) {\r\n _this.sectionSurvey = angular.copy(result);\r\n _this.selectedSection.quizId = result.id;\r\n _this.availableSurveysGridModel.loadPage(0);\r\n });\r\n };\r\n CourseStructureEditController.prototype.loadSectionFlashcard = function () {\r\n var _this = this;\r\n this.sectionFlashcard = null;\r\n this.selectedSection.quizId = 0;\r\n this.courseService.getSectionFlashcard(this.courseId, this.menuKey.leftMenuModule, this.selectedSection.id)\r\n .then(function (result) {\r\n _this.sectionFlashcard = angular.copy(result);\r\n _this.selectedSection.quizId = result.id;\r\n _this.availableFlashcardsGridModel.loadPage(0);\r\n });\r\n };\r\n CourseStructureEditController.prototype.hideCurrentMaterial = function () {\r\n this.material = null;\r\n this.isViewAllowed = false;\r\n };\r\n CourseStructureEditController.prototype.showRemovalModal = function (creationKey, module, section) {\r\n this.creationKey = creationKey;\r\n if (module) {\r\n angular.copy(module, this.module);\r\n }\r\n if (section) {\r\n angular.copy(section, this.section);\r\n }\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#removalDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n CourseStructureEditController.prototype.startModuleInlineEdit = function (module) {\r\n this.isModuleEditing = true;\r\n angular.copy(module, this.editingModule);\r\n };\r\n CourseStructureEditController.prototype.updateEditedModule = function () {\r\n var _this = this;\r\n if (this.editingModule.name) {\r\n if (!this.isModuleUpdating) {\r\n this.isModuleUpdating = true;\r\n this.courseService.updateModule(this.courseId, this.editingModule).then(function (result) {\r\n _this.editingModule = {};\r\n _this.isModuleEditing = false;\r\n _this.isModuleUpdating = false;\r\n _this.loadModules();\r\n });\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"Please specify module name\");\r\n }\r\n };\r\n CourseStructureEditController.prototype.addQuizToSection = function (quiz) {\r\n this.formIsDirty = true;\r\n this.sectionQuiz = angular.copy(quiz);\r\n this.selectedSection.quizId = quiz.id;\r\n this.availableQuizzesGridModel.loadPage(0);\r\n this.liteSaveSection(this.selectedSection);\r\n INotifier_1.notifier.success(\"Quiz selection has been saved\");\r\n };\r\n CourseStructureEditController.prototype.removeQuizFromSection = function () {\r\n this.formIsDirty = true;\r\n this.sectionQuiz = {};\r\n this.selectedSection.quizId = -1;\r\n this.availableQuizzesGridModel.loadPage(0);\r\n this.liteSaveSection(this.selectedSection);\r\n INotifier_1.notifier.success(\"The quiz has been removed\");\r\n };\r\n CourseStructureEditController.prototype.addSurveyToSection = function (quiz) {\r\n this.formIsDirty = true;\r\n this.sectionSurvey = angular.copy(quiz);\r\n this.selectedSection.quizId = quiz.id;\r\n this.availableSurveysGridModel.loadPage(0);\r\n this.liteSaveSection(this.selectedSection);\r\n INotifier_1.notifier.success(\"Survey selection has been saved\");\r\n };\r\n CourseStructureEditController.prototype.removeSurveyFromSection = function () {\r\n this.formIsDirty = true;\r\n this.sectionSurvey = {};\r\n this.selectedSection.quizId = -1;\r\n this.availableSurveysGridModel.loadPage(0);\r\n this.liteSaveSection(this.selectedSection);\r\n INotifier_1.notifier.success(\"The survey has been removed\");\r\n };\r\n CourseStructureEditController.prototype.addFlashcardToSection = function (quiz) {\r\n this.formIsDirty = true;\r\n this.sectionFlashcard = angular.copy(quiz);\r\n this.selectedSection.quizId = quiz.id;\r\n this.availableFlashcardsGridModel.loadPage(0);\r\n this.liteSaveSection(this.selectedSection);\r\n INotifier_1.notifier.success(\"Flashcard selection has been saved\");\r\n };\r\n CourseStructureEditController.prototype.removeFlashcardFromSection = function () {\r\n this.formIsDirty = true;\r\n this.sectionFlashcard = {};\r\n this.selectedSection.quizId = -1;\r\n this.availableFlashcardsGridModel.loadPage(0);\r\n this.liteSaveSection(this.selectedSection);\r\n INotifier_1.notifier.success(\"The flashcard has been removed\");\r\n };\r\n CourseStructureEditController.prototype.isSelectedSectionTypeProblemSolution = function () {\r\n return this.menuKey.leftMenuItemType === SectionType_1.SectionType[SectionType_1.SectionType.PROBLEM_SOLUTION];\r\n };\r\n CourseStructureEditController.prototype.cleanCreationModal = function () {\r\n this.module = {};\r\n this.section = {};\r\n };\r\n CourseStructureEditController.prototype.createModuleOrSection = function () {\r\n var _this = this;\r\n if (!this.course.bundleId) {\r\n this.createCourseBundle().then(function () {\r\n _this.loadBundle();\r\n });\r\n }\r\n var creationPromise;\r\n var index = null;\r\n if (this.selectedSection) {\r\n index = this.selectedSection.sortIndex;\r\n }\r\n if (this.creationKey === this.MODULE) {\r\n this.module.courseId = this.courseId;\r\n this.module.sortIndex = this.modules.length + 1;\r\n creationPromise = this.courseService.createModule(this.courseId, this.module).then(function (m) {\r\n _this.processCourseInUseWarningMessageIfNeed();\r\n _this.module = {};\r\n _this.loadModules();\r\n });\r\n }\r\n else if (this.creationKey === this.SECTION) {\r\n this.section.typeKey = SectionType_1.SectionType[this.typeKey];\r\n this.section.moduleId = this.moduleId;\r\n if (this.section.typeKey == 'SURVEY') {\r\n this.section.acceptableNumberOfAttempts = 1;\r\n this.section.sectionPassingType = SectionPassingType_1.SectionPassingType[SectionPassingType_1.SectionPassingType.OPTIONAL];\r\n }\r\n else {\r\n this.section.acceptableNumberOfAttempts = -1;\r\n this.section.sectionPassingType = SectionPassingType_1.SectionPassingType[SectionPassingType_1.SectionPassingType.MANDATORY];\r\n }\r\n this.setDefaultSectionAccessRules(this.section);\r\n this.setSectionSortIndex(this.section);\r\n this.showRecalculationMessage();\r\n this.deactivateMainContent();\r\n creationPromise = this.courseService.createSection(this.courseId, this.moduleId, this.section)\r\n .then(function (s) {\r\n if (!_this.isSectionSlide(s)) {\r\n _this.processCourseInUseWarningMessageIfNeed();\r\n }\r\n _this.typeKey = null;\r\n return _this.loadSectionsForModule(_this.moduleId).then(function () {\r\n _this.section = {};\r\n if (_this.isSectionSlide(s)) {\r\n _this.getSlidesForSlideDeck(_this.getSectionById(_this.moduleId, s.parentId));\r\n _this.setSlideSectionActive(s);\r\n if (index != null && index != _this.slides.length - 1) {\r\n var newSection = _this.sectionsMap.get(s.moduleId).filter(function (section) { return section.section.id === s.id; })[0];\r\n newSection.section.sortIndex = _this.calculateSortIndexInLevelOfSlide(index, newSection);\r\n return _this.courseService.updateSectionHierarchy(_this.courseId, newSection.section.moduleId, newSection.section)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(\"Course hierarchy has been changed\");\r\n var updateSectionsPromises = [];\r\n updateSectionsPromises.push(_this.loadSectionsForModule(result.moduleId).then(function () {\r\n _this.getSlidesForSlideDeck(_this.getSectionById(result.moduleId, result.parentId));\r\n }));\r\n return _this.$q.all(updateSectionsPromises)\r\n .then(function () {\r\n var updatedSection = _this.sectionsMap\r\n .get(_this.selectedSection.moduleId)\r\n .filter(function (s) { return s.id === _this.selectedSection.id; }).pop().section;\r\n _this.selectedSection.moduleId = updatedSection.moduleId;\r\n _this.selectedSection.parentId = updatedSection.parentId;\r\n _this.selectedSection.sortIndex = updatedSection.sortIndex;\r\n _this.selectedSection.coursewideSortPath = updatedSection.coursewideSortPath;\r\n _this.selectedSection.version = updatedSection.version;\r\n _this.selectedSection.audioFileUrl = _this.getAudioFileUrl(_this.selectedSection);\r\n });\r\n });\r\n }\r\n }\r\n });\r\n })\r\n .finally(function () { return _this.activateMainContent(); });\r\n }\r\n creationPromise.finally(function () { return _this.setLeftMenuModule(_this.moduleId); });\r\n return creationPromise;\r\n };\r\n CourseStructureEditController.prototype.setSectionSortIndex = function (section) {\r\n if (section.parentId != null) {\r\n this.sectionsMap.get(this.moduleId).forEach(function (s) {\r\n if (s.section.id == section.parentId) {\r\n section.sortIndex = s.children.length + 1;\r\n }\r\n });\r\n }\r\n else {\r\n if (this.sectionsMap.get(this.moduleId)) {\r\n section.sortIndex = this.sectionsMap.get(this.moduleId).length + 1;\r\n }\r\n else {\r\n section.sortIndex = 1;\r\n }\r\n }\r\n };\r\n CourseStructureEditController.prototype.removeModule = function (module) {\r\n var _this = this;\r\n this.disabledRemoveModuleButton = true;\r\n var deleteSelectedModule = false;\r\n if (this.menuKey.leftMenuModuleExpanded.indexOf(module.id) > -1) {\r\n deleteSelectedModule = true;\r\n }\r\n var isModuleNotEmpty = this.sectionsMap.delete(module.id);\r\n if (isModuleNotEmpty) {\r\n this.showRecalculationMessage();\r\n this.deactivateMainContent();\r\n }\r\n this.courseService.deleteModule(this.courseId, module.id, module.version).then(function (result) {\r\n _this.processCourseInUseWarningMessageIfNeed();\r\n INotifier_1.notifier.success(\"The module has been removed\");\r\n _this.disabledRemoveModuleButton = false;\r\n _this.module = {};\r\n _this.formIsDirty = false;\r\n if (deleteSelectedModule) {\r\n _this.selectedSection = {};\r\n _this.menuKey.leftMenuItem = {};\r\n _this.menuKey.leftMenuItemType = null;\r\n _this.menuKey.leftMenuModuleExpanded.slice(_this.menuKey.leftMenuModuleExpanded.indexOf(module.id), 1);\r\n }\r\n _this.loadModules();\r\n })\r\n .finally(function () {\r\n if (isModuleNotEmpty) {\r\n _this.activateMainContent();\r\n }\r\n });\r\n };\r\n CourseStructureEditController.prototype.removeSection = function (section) {\r\n var _this = this;\r\n this.disabledRemoveSectionButton = true;\r\n this.moduleId = section.moduleId;\r\n var deleteSelectedSection = false;\r\n this.selectedSection = section;\r\n if (this.selectedSection && this.selectedSection.id == section.id || this.selectedSlideDeckSection.id == section.id) {\r\n deleteSelectedSection = true;\r\n }\r\n this.courseService.deleteSection(this.courseId, section.moduleId, section.id, section.version).then(function (result) {\r\n if (!_this.isSectionSlide(section)) {\r\n _this.processCourseInUseWarningMessageIfNeed();\r\n }\r\n _this.loadSections(false).then(function () {\r\n _this.isCourseHasMandatorySection();\r\n _this.progressService.getCourseSections(_this.courseId, null).then(function (result) {\r\n _this.maxSectionsLength = result.length;\r\n if (!_this.hasMandatorySection && _this.course.requiredElectivesNumber < 1) {\r\n $('#electivesRequiredModal').modal('show');\r\n }\r\n });\r\n });\r\n if (_this.isSectionSlide(section)) {\r\n INotifier_1.notifier.success(\"Slide has been removed\");\r\n }\r\n else {\r\n INotifier_1.notifier.success(\"The section has been removed\");\r\n }\r\n _this.disabledRemoveSectionButton = false;\r\n _this.section = {};\r\n _this.formIsDirty = false;\r\n if (deleteSelectedSection) {\r\n _this.selectedSection = {};\r\n _this.menuKey.leftMenuItem = {};\r\n _this.menuKey.leftMenuItemType = null;\r\n }\r\n _this.loadSectionsForModule(_this.moduleId).then(function () {\r\n if (_this.isSectionSlide(section) && _this.slides.length > 0) {\r\n _this.getSlidesForSlideDeck(_this.getSectionById(section.moduleId, section.parentId));\r\n _this.setSlideSectionActive(_this.slides[0].section);\r\n }\r\n });\r\n });\r\n };\r\n CourseStructureEditController.prototype.editSectionParent = function () {\r\n var _this = this;\r\n this.courseService.updateSectionHierarchy(this.courseId, this.editingSection.moduleId, this.editingSection)\r\n .then(function (updatedSection) {\r\n _this.processCourseInUseWarningMessageIfNeed();\r\n _this.editingSection = {};\r\n _this.isSectionEditing = false;\r\n _this.loadSectionsForModule(updatedSection.moduleId);\r\n if (_this.selectedSection && _this.selectedSection.id == updatedSection.id) {\r\n angular.copy(updatedSection, _this.selectedSection);\r\n }\r\n INotifier_1.notifier.success(\"The section has been saved\");\r\n });\r\n };\r\n CourseStructureEditController.prototype.createModuleKeyPress = function ($event) {\r\n if ($event.keyCode == Keys_1.Keys.ENTER && this.module.name) {\r\n this.createModuleOrSection();\r\n $(\"#creationDialog\").modal(\"toggle\");\r\n }\r\n };\r\n CourseStructureEditController.prototype.openModuleFromBundleFilesDialog = function () {\r\n var _this = this;\r\n $(\"#moduleFromBundleFilesModal\")\r\n .modal({ show: true })\r\n .on(\"hidden.bs.modal\", function () {\r\n _this.moduleFromBundleFilesInput.moduleId = null;\r\n _this.moduleFromBundleFilesInput.selectedFileKeys.splice(0, _this.moduleFromBundleFilesInput.selectedFileKeys.length);\r\n });\r\n };\r\n CourseStructureEditController.prototype.onBundleFileSelect = function (bundleFile) {\r\n if (!bundleFile.selected) {\r\n this.moduleFromBundleFilesInput.selectedFileKeys.splice(this.moduleFromBundleFilesInput.selectedFileKeys.indexOf(bundleFile.key), 1);\r\n }\r\n else {\r\n this.moduleFromBundleFilesInput.selectedFileKeys.push(bundleFile.key);\r\n }\r\n };\r\n CourseStructureEditController.prototype.createModuleFromBundleFiles = function () {\r\n var _this = this;\r\n if (this.moduleFromBundleFilesInput.selectedFileKeys.length == 0) {\r\n return;\r\n }\r\n this.courseService.createModuleStructureFromBundleFiles(this.courseId, this.course.version, this.moduleFromBundleFilesInput.moduleId, this.moduleFromBundleFilesInput.selectedFileKeys)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Module structure was created\");\r\n _this.loadSections(true);\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"Module structure cannot be created with settings provided\");\r\n });\r\n };\r\n CourseStructureEditController.prototype.initBundleFilesGridModel = function () {\r\n var _this = this;\r\n if (!this.course.bundleId) {\r\n this.course.bundleId = 0;\r\n }\r\n this.bundleFilesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/bundles/\" + this.course.bundleId + \"/files\")));\r\n this.bundleFilesGridModel.pageSize = 6;\r\n this.bundleFilesGridModel.filter.bundleFileType = BundleFileType_1.BundleFileTypeEnum[BundleFileType_1.BundleFileTypeEnum.HTML];\r\n this.bundleFilesGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n _this.bundleFilesGridModel.entries.forEach(function (e) {\r\n if (_this.moduleFromBundleFilesInput.selectedFileKeys.indexOf(e.key) != -1) {\r\n e.selected = true;\r\n }\r\n });\r\n }\r\n });\r\n };\r\n CourseStructureEditController.prototype.showRecalculationMessage = function () {\r\n INotifier_1.notifier.success(\"Course progress recalculation has been started. Please wait.\");\r\n };\r\n CourseStructureEditController.prototype.deactivateMainContent = function () {\r\n var mainElement = document.querySelector(\"#presentation-import-disable\");\r\n mainElement.classList.remove(\"hidden\");\r\n };\r\n CourseStructureEditController.prototype.activateMainContent = function () {\r\n var mainElement = document.querySelector(\"#presentation-import-disable\");\r\n mainElement.classList.add(\"hidden\");\r\n };\r\n CourseStructureEditController.prototype.isSectionBlockingChanged = function (section) {\r\n var sectionBeforeEdit = this.sectionsMap.get(section.moduleId).filter(function (s) { return s.section.id === section.id; }).pop().section;\r\n var isSectionBlockingChanged = false;\r\n if (sectionBeforeEdit) {\r\n isSectionBlockingChanged = section.blockingNextSections != sectionBeforeEdit.blockingNextSections\r\n || section.lockUntilPreviousSectionsRead != sectionBeforeEdit.lockUntilPreviousSectionsRead\r\n || section.lockUntilOnePreviousSectionRead != sectionBeforeEdit.lockUntilOnePreviousSectionRead;\r\n }\r\n return isSectionBlockingChanged;\r\n };\r\n CourseStructureEditController.prototype.getSectionById = function (moduleId, sectionId) {\r\n for (var _i = 0, _a = this.sectionsMap.get(moduleId); _i < _a.length; _i++) {\r\n var s_1 = _a[_i];\r\n if (s_1.section.id == sectionId) {\r\n return s_1.section;\r\n }\r\n }\r\n return null;\r\n };\r\n CourseStructureEditController.prototype.isContentFromTemplate = function () {\r\n return this.selectedSection.summary != null ?\r\n this.selectedSection.summary.indexOf(\"
    = 0 : false;\r\n };\r\n CourseStructureEditController.prototype.saveSectionAsPdf = function (section) {\r\n var _this = this;\r\n this.isSaveSectionAsPdfButtonDisabled = true;\r\n this.courseService.saveSectionAsPdf(section.courseId, section.moduleId, section.id)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Section was successfully saved as pdf file\");\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"Unable save section as pdf file\");\r\n })\r\n .finally(function () {\r\n _this.isSaveSectionAsPdfButtonDisabled = false;\r\n });\r\n };\r\n CourseStructureEditController.prototype.setCurrentSectionAccessRules = function () {\r\n if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]\r\n || this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION_WITH_MANUAL_COMPLETION]) {\r\n if (this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.MANDATORY_INTRO_INFO];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.FREE_REIN_LESSON_INFO];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.SEQUENTIAL_LESSON_INFO];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.CONCLUSION_INFO];\r\n }\r\n else {\r\n this.currentSectionAccessRules = this.setDefaultSectionAccessRules(this.selectedSection);\r\n this.setFormIsDirty();\r\n }\r\n }\r\n else if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.QUIZ]) {\r\n if (this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.PRE_ASSESSMENT_QUIZ];\r\n }\r\n else if (this.selectedSection.blockingNextSections && this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.INTERIM_ASSESSMENT_QUIZ];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.SUMMATIVE_ASSESSMENT_QUIZ];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.FORMATIVE_ASSESSMENT_QUIZ];\r\n }\r\n else {\r\n this.currentSectionAccessRules = this.setDefaultSectionAccessRules(this.selectedSection);\r\n this.setFormIsDirty();\r\n }\r\n }\r\n else if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SURVEY]) {\r\n if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.ALWAYS_AVAILABLE_SURVEY];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_SURVEY];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_SURVEY];\r\n }\r\n else {\r\n this.currentSectionAccessRules = this.setDefaultSectionAccessRules(this.selectedSection);\r\n this.setFormIsDirty();\r\n }\r\n }\r\n else if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR]) {\r\n if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.REGISTRATION_ALWAYS_AVAILABLE_WEBINAR];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_WEBINAR];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_WEBINAR];\r\n }\r\n else {\r\n this.currentSectionAccessRules = this.setDefaultSectionAccessRules(this.selectedSection);\r\n this.setFormIsDirty();\r\n }\r\n }\r\n else if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.ILT]) {\r\n if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.REGISTRATION_ALWAYS_AVAILABLE_ILT];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_ILT];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_ILT];\r\n }\r\n else {\r\n this.currentSectionAccessRules = this.setDefaultSectionAccessRules(this.selectedSection);\r\n this.setFormIsDirty();\r\n }\r\n }\r\n else if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD]) {\r\n if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.ALWAYS_AVAILABLE_FLASHCARD];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && !this.selectedSection.lockUntilPreviousSectionsRead && this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_FLASHCARD];\r\n }\r\n else if (!this.selectedSection.blockingNextSections && this.selectedSection.lockUntilPreviousSectionsRead && !this.selectedSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_FLASHCARD];\r\n }\r\n else {\r\n this.currentSectionAccessRules = this.setDefaultSectionAccessRules(this.selectedSection);\r\n this.setFormIsDirty();\r\n }\r\n }\r\n else if (this.selectedSlideDeckSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK] || this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE]) {\r\n if (this.selectedSlideDeckSection.blockingNextSections && !this.selectedSlideDeckSection.lockUntilPreviousSectionsRead && !this.selectedSlideDeckSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.MANDATORY_INTRO_SLIDE_DECK];\r\n }\r\n else if (!this.selectedSlideDeckSection.blockingNextSections && !this.selectedSlideDeckSection.lockUntilPreviousSectionsRead && !this.selectedSlideDeckSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.FREE_REIN_LESSON_SLIDE_DECK];\r\n }\r\n else if (!this.selectedSlideDeckSection.blockingNextSections && !this.selectedSlideDeckSection.lockUntilPreviousSectionsRead && this.selectedSlideDeckSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.SEQUENTIAL_LESSON_SLIDE_DECK];\r\n }\r\n else if (!this.selectedSlideDeckSection.blockingNextSections && this.selectedSlideDeckSection.lockUntilPreviousSectionsRead && !this.selectedSlideDeckSection.lockUntilOnePreviousSectionRead) {\r\n this.currentSectionAccessRules = SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.CONCLUSION_SLIDE_DECK];\r\n }\r\n else {\r\n this.currentSectionAccessRules = this.setDefaultSectionAccessRules(this.selectedSlideDeckSection);\r\n this.setFormIsDirty();\r\n }\r\n }\r\n };\r\n CourseStructureEditController.prototype.setDefaultSectionAccessRules = function (section) {\r\n if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]\r\n || section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION_WITH_MANUAL_COMPLETION]) {\r\n section.blockingNextSections = false;\r\n section.lockUntilPreviousSectionsRead = false;\r\n section.lockUntilOnePreviousSectionRead = false;\r\n return SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.FREE_REIN_LESSON_INFO];\r\n }\r\n else if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.QUIZ]) {\r\n section.blockingNextSections = true;\r\n section.lockUntilPreviousSectionsRead = false;\r\n section.lockUntilOnePreviousSectionRead = true;\r\n return SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.INTERIM_ASSESSMENT_QUIZ];\r\n }\r\n else if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SURVEY]) {\r\n section.blockingNextSections = false;\r\n section.lockUntilPreviousSectionsRead = false;\r\n section.lockUntilOnePreviousSectionRead = false;\r\n return SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.ALWAYS_AVAILABLE_SURVEY];\r\n }\r\n else if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR]) {\r\n section.blockingNextSections = false;\r\n section.lockUntilPreviousSectionsRead = false;\r\n section.lockUntilOnePreviousSectionRead = false;\r\n return SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.REGISTRATION_ALWAYS_AVAILABLE_WEBINAR];\r\n }\r\n else if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.ILT]) {\r\n section.blockingNextSections = false;\r\n section.lockUntilPreviousSectionsRead = false;\r\n section.lockUntilOnePreviousSectionRead = false;\r\n return SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.REGISTRATION_ALWAYS_AVAILABLE_ILT];\r\n }\r\n else if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD]) {\r\n section.blockingNextSections = false;\r\n section.lockUntilPreviousSectionsRead = false;\r\n section.lockUntilOnePreviousSectionRead = false;\r\n return SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.ALWAYS_AVAILABLE_FLASHCARD];\r\n }\r\n else if (section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK]\r\n || section.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE]) {\r\n section.blockingNextSections = false;\r\n section.lockUntilPreviousSectionsRead = false;\r\n section.lockUntilOnePreviousSectionRead = false;\r\n return SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.FREE_REIN_LESSON_SLIDE_DECK];\r\n }\r\n };\r\n CourseStructureEditController.prototype.onCurrentSectionAccessRulesChange = function () {\r\n if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION]\r\n || this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.INFORMATION_WITH_MANUAL_COMPLETION]) {\r\n if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.MANDATORY_INTRO_INFO]) {\r\n this.selectedSection.blockingNextSections = true;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.FREE_REIN_LESSON_INFO]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.SEQUENTIAL_LESSON_INFO]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = true;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.CONCLUSION_INFO]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = true;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n }\r\n else if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.QUIZ]) {\r\n if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.PRE_ASSESSMENT_QUIZ]) {\r\n this.selectedSection.blockingNextSections = true;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.INTERIM_ASSESSMENT_QUIZ]) {\r\n this.selectedSection.blockingNextSections = true;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = true;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.SUMMATIVE_ASSESSMENT_QUIZ]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = true;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.FORMATIVE_ASSESSMENT_QUIZ]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n }\r\n else if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SURVEY]) {\r\n if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.ALWAYS_AVAILABLE_SURVEY]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_SURVEY]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = true;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_SURVEY]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = true;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n }\r\n else if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.FLASHCARD]) {\r\n if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.ALWAYS_AVAILABLE_FLASHCARD]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_FLASHCARD]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = true;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_FLASHCARD]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = true;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n }\r\n else if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.WEBINAR]) {\r\n if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.REGISTRATION_ALWAYS_AVAILABLE_WEBINAR]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_WEBINAR]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = true;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_WEBINAR]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = true;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n }\r\n else if (this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.ILT]) {\r\n if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.REGISTRATION_ALWAYS_AVAILABLE_ILT]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_ILT]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = true;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_ILT]) {\r\n this.selectedSection.blockingNextSections = false;\r\n this.selectedSection.lockUntilPreviousSectionsRead = true;\r\n this.selectedSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n }\r\n else if (this.selectedSlideDeckSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE_DECK] || this.selectedSection.typeKey == SectionType_1.SectionType[SectionType_1.SectionType.SLIDE]) {\r\n if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.MANDATORY_INTRO_SLIDE_DECK]) {\r\n this.selectedSlideDeckSection.blockingNextSections = true;\r\n this.selectedSlideDeckSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSlideDeckSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.FREE_REIN_LESSON_SLIDE_DECK]) {\r\n this.selectedSlideDeckSection.blockingNextSections = false;\r\n this.selectedSlideDeckSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSlideDeckSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.SEQUENTIAL_LESSON_SLIDE_DECK]) {\r\n this.selectedSlideDeckSection.blockingNextSections = false;\r\n this.selectedSlideDeckSection.lockUntilPreviousSectionsRead = false;\r\n this.selectedSlideDeckSection.lockUntilOnePreviousSectionRead = true;\r\n }\r\n else if (this.currentSectionAccessRules == SectionAccessRules_1.SectionAccessRules[SectionAccessRules_1.SectionAccessRules.CONCLUSION_SLIDE_DECK]) {\r\n this.selectedSlideDeckSection.blockingNextSections = false;\r\n this.selectedSlideDeckSection.lockUntilPreviousSectionsRead = true;\r\n this.selectedSlideDeckSection.lockUntilOnePreviousSectionRead = false;\r\n }\r\n }\r\n };\r\n CourseStructureEditController.prototype.onCreditsChangeCallback = function () {\r\n this.setFormIsDirty();\r\n };\r\n CourseStructureEditController.prototype.initializeMaterial = function () {\r\n this.toggleMaterialCreationForm();\r\n var event = new Event(\"initializeMaterial\");\r\n window.dispatchEvent(event);\r\n };\r\n CourseStructureEditController.prototype.getModuleById = function (moduleId) {\r\n return this.modules.filter(function (m) { return m.id === moduleId; })[0];\r\n };\r\n CourseStructureEditController.prototype.getSlideTemplates = function () {\r\n var _this = this;\r\n this.slideService.getSlideTemplates(this.course.id, this.course.businessUnitId)\r\n .then(function (result) {\r\n var emptyTemplate = {\r\n visible: true,\r\n tagNamesList: ['empty'],\r\n slideTemplateHtml: \"\",\r\n name: \"Empty slide\"\r\n };\r\n _this.slideTemplates = angular.copy(result);\r\n _this.slideTemplates.push(emptyTemplate);\r\n _this.slideTemplates.forEach(function (slideTemplate) {\r\n slideTemplate.visible = true;\r\n slideTemplate.tagNamesList.forEach(function (tag) {\r\n if (_this.tagNamesList.filter(function (tagName) { return tagName.toLowerCase() == tag.toLowerCase(); }).length === 0) {\r\n _this.tagNamesList.push(tag.toLowerCase());\r\n }\r\n });\r\n });\r\n });\r\n };\r\n CourseStructureEditController.prototype.addSlide = function (slideDeckParentId, slideDeckParentName, moduleId, slideTemplate, defaultTemplate, header, text) {\r\n this.moduleId = moduleId;\r\n this.creationKey = this.SECTION;\r\n this.typeKey = SectionType_1.SectionType.SLIDE;\r\n this.section.parentId = slideDeckParentId;\r\n this.section.name = slideDeckParentName;\r\n var index = null;\r\n if (this.selectedSection && this.selectedSection.sortIndex) {\r\n index = this.selectedSection.sortIndex;\r\n }\r\n if (slideTemplate != null) {\r\n this.section.slideTemplateId = slideTemplate.id;\r\n this.section.summary = this.findSlideInfoAndReplaceTemplatePlaceholderField(moduleId, slideTemplate.slideTemplateHtml, index == null ? this.slides.length + 1 : index + 1, this.slides.length + 1);\r\n }\r\n else if (defaultTemplate != null) {\r\n this.section.summary = this.findSlideInfoAndReplaceTemplatePlaceholderField(moduleId, $(\"#\" + defaultTemplate).html(), index == null ? this.slides.length + 1 : index + 1, this.slides.length + 1);\r\n }\r\n if (header) {\r\n this.section.summary = VhsTemplateService_1.VhsTemplateService.replaceTemplatePlaceholderField(this.section.summary, 'sectionName', header);\r\n }\r\n if (text) {\r\n this.section.summary = VhsTemplateService_1.VhsTemplateService.replaceTemplateBlockContent(this.section.summary, text);\r\n }\r\n return this.createModuleOrSection();\r\n };\r\n CourseStructureEditController.prototype.duplicateSlide = function (selectedSection) {\r\n this.section.summary = selectedSection.summary;\r\n this.section.delay = selectedSection.delay;\r\n this.section.audioFileId = selectedSection.audioFileId;\r\n this.addSlide(this.selectedSection.parentId, this.selectedSlideDeckSection.name, this.selectedSection.moduleId, null, null);\r\n };\r\n CourseStructureEditController.prototype.findSlideInfoAndReplaceTemplatePlaceholderField = function (moduleId, html, slideNumber, slideDeckTotalSlides) {\r\n var module = this.getModuleById(moduleId);\r\n var section = this.getParentSectionOfTheFirstLevel(moduleId, this.selectedSlideDeckSection.coursewideSortPath);\r\n var slideInfo = {};\r\n slideInfo.courseName = this.course ? this.course.topic : null;\r\n slideInfo.moduleNumber = module ? module.sortIndex.toString() : null;\r\n slideInfo.moduleName = module ? module.name : null;\r\n slideInfo.sectionNumber = section ? section.section.sortIndex.toString() : null;\r\n slideInfo.sectionName = section ? section.section.name : null;\r\n slideInfo.slideDeckNumber = this.selectedSlideDeckSection ? this.selectedSlideDeckSection.sortIndex.toString() : null;\r\n slideInfo.slideDeckName = this.selectedSlideDeckSection ? this.selectedSlideDeckSection.name : null;\r\n slideInfo.slideDeckAbsoluteNumber = this.selectedSlideDeckSection ? this.selectedSlideDeckSection.coursewideSortPath : null;\r\n slideInfo.slideDeckTotalSlides = this.slides ? slideDeckTotalSlides.toString() : null;\r\n slideInfo.slideNumber = this.selectedSection ? slideNumber.toString() : null;\r\n if (slideInfo) {\r\n for (var fieldName in slideInfo) {\r\n if (slideInfo.hasOwnProperty(fieldName) && slideInfo[fieldName] !== null) {\r\n html = VhsTemplateService_1.VhsTemplateService.replaceTemplatePlaceholderField(html, fieldName, slideInfo[fieldName]);\r\n }\r\n }\r\n }\r\n return VhsTemplateService_1.VhsTemplateService.replaceAllWhitespaces(html);\r\n };\r\n CourseStructureEditController.prototype.getParentSectionOfTheFirstLevel = function (moduleId, courseWideSortPath) {\r\n var courseWideSortPathForSearch = courseWideSortPath.substring(0, 10);\r\n var sectionForReturn = null;\r\n this.sectionsMap.get(moduleId).forEach(function (section) {\r\n if (section.section.coursewideSortPath == courseWideSortPathForSearch && section.section.parentId == null) {\r\n sectionForReturn = section;\r\n }\r\n });\r\n return sectionForReturn;\r\n };\r\n CourseStructureEditController.prototype.getRichTextLoadedPromise = function (richTextId) {\r\n var _this = this;\r\n var deferred = this.$q.defer();\r\n var eventData = {\r\n richTextElementId: richTextId,\r\n richTextBindController: null\r\n };\r\n var findRichTextController = function () {\r\n _this.$scope.$broadcast(Event_1.Event.TA_FIND_RICH_TEXT_BIND_CONTROLLER, eventData);\r\n return eventData.richTextBindController;\r\n };\r\n var waitForContentLoad = function (richTextBindController) {\r\n return richTextBindController.waitForContentLoaded()\r\n .finally(function () {\r\n deferred.resolve();\r\n });\r\n };\r\n var resolveDeferredInAnyCase = function () {\r\n var richTextBindController = findRichTextController();\r\n if (richTextBindController) {\r\n waitForContentLoad(richTextBindController);\r\n }\r\n else {\r\n deferred.resolve();\r\n }\r\n };\r\n var richTextBindController = findRichTextController();\r\n if (richTextBindController) {\r\n waitForContentLoad(richTextBindController);\r\n }\r\n return deferred.promise;\r\n };\r\n CourseStructureEditController.prototype.calculateSortIndexInLevelOfSlide = function (index, item) {\r\n var isMovingBackward = this.slides\r\n .filter(function (s, i) { return !(i === index && s.section.id === item.section.id); })\r\n .map(function (s) { return s.id; })\r\n .indexOf(item.id) > index;\r\n var prevLevelSection = this.findPrevSectionOfSameLevel(index, item, this.slides);\r\n if (prevLevelSection) {\r\n index = isMovingBackward ? prevLevelSection.section.sortIndex + 1 : prevLevelSection.section.sortIndex;\r\n }\r\n else {\r\n index = 1;\r\n }\r\n return index;\r\n };\r\n CourseStructureEditController.prototype.getSlidesForSlideDeck = function (section) {\r\n var _this = this;\r\n if (this.isSectionSlideDeck(section)) {\r\n this.slides.splice(0, this.slides.length);\r\n this.sectionsMap.get(section.moduleId).forEach(function (sectionInModule) {\r\n if (sectionInModule.section.parentId == section.id) {\r\n _this.slides.push(sectionInModule);\r\n }\r\n });\r\n }\r\n };\r\n CourseStructureEditController.prototype.setSlideSectionActive = function (section) {\r\n this.menuKey.leftMenuItem = section.parentId;\r\n this.menuKey.leftMenuItemType = section.typeKey;\r\n this.menuKey.leftMenuModule = section.moduleId;\r\n this.setLeftMenuItem(section);\r\n };\r\n CourseStructureEditController.prototype.checkSlideDeck = function (sectionId) {\r\n var isPresent = false;\r\n this.slides.forEach(function (slide) {\r\n if (slide.section.id == sectionId)\r\n isPresent = true;\r\n });\r\n return isPresent;\r\n };\r\n CourseStructureEditController.prototype.setSlidesVisibility = function (sections) {\r\n var _this = this;\r\n sections.forEach(function (section) {\r\n if (_this.isSectionSlide(section.section)) {\r\n section.visible = false;\r\n if (_this.bundle && section.section.audioFileId != null) {\r\n section.section.audioFileUrl = _this.getAudioFileUrl(section.section);\r\n }\r\n }\r\n });\r\n return sections;\r\n };\r\n CourseStructureEditController.prototype.removeSlide = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#removeSlideDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n CourseStructureEditController.prototype.searchSlidesByTagName = function (tag) {\r\n var _this = this;\r\n this.searchTagNameField = tag != null ? tag : this.searchTagNameField;\r\n if (this.searchTagNameField != null && this.searchTagNameField != \"\") {\r\n this.slideTemplates.forEach(function (slide) {\r\n slide.visible = false;\r\n slide.tagNamesList.forEach(function (tag) {\r\n if (tag.toLowerCase().indexOf(_this.searchTagNameField.toLowerCase()) >= 0)\r\n slide.visible = true;\r\n });\r\n });\r\n }\r\n else {\r\n this.slideTemplates.forEach(function (slide) {\r\n slide.visible = true;\r\n });\r\n }\r\n if (this.searchTagNameField != null && 'default'.indexOf(this.searchTagNameField) >= 0) {\r\n this.defaultTemplates.forEach(function (template) {\r\n template.visible = true;\r\n });\r\n }\r\n else {\r\n this.defaultTemplates.forEach(function (template) {\r\n template.visible = false;\r\n });\r\n }\r\n return true;\r\n };\r\n CourseStructureEditController.prototype.importSlides = function () {\r\n var fileExtension = this.archive.name.match(/\\.([0-9a-z]+)(?=[?#])|(\\.)(?:[\\w]+)$/);\r\n if (fileExtension[0] != \".zip\" && fileExtension[0] != \".7z\" && fileExtension[0] != \".pptx\") {\r\n INotifier_1.notifier.error(\"The specified archive format is not supported. Only pptx or zip format is supported\");\r\n return;\r\n }\r\n if (this.slides.length != 0) {\r\n this.removedSlides = true;\r\n this.removeAllSlide();\r\n }\r\n else {\r\n this.deactivateMainContent();\r\n this.addSlideSectionsFromAchieve();\r\n }\r\n };\r\n CourseStructureEditController.prototype.addSlideSectionsFromAchieve = function () {\r\n var _this = this;\r\n if (!this.archive) {\r\n this.activateMainContent();\r\n return;\r\n }\r\n if (this.removedSlides) {\r\n this.deactivateMainContent();\r\n }\r\n if (!this.course.bundleId) {\r\n this.courseService.createCourseBundle(this.course.id, this.course.version).then(function (result) {\r\n _this.course.bundleId = result[\"bundle\"].id;\r\n _this.course.version = result[\"course\"].version;\r\n _this.loadBundle().then(function () { return _this.performArchiveUpload(); });\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Incorrect configuration to create Bundle\");\r\n });\r\n }\r\n else {\r\n this.performArchiveUpload();\r\n }\r\n };\r\n CourseStructureEditController.prototype.performArchiveUpload = function () {\r\n var _this = this;\r\n var fileExtension = this.archive.name.match(/\\.([0-9a-z]+)(?=[?#])|(\\.)(?:[\\w]+)$/);\r\n var isArchive = fileExtension[0] != \".pptx\";\r\n var section = this.selectedSlideDeckSection;\r\n var targetDir = \"sections/slides/\" + section.id;\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: this.url.service(\"/api/courses/\" + this.courseId + \"/presentationImport?sectionId=\" + section.id + \"&bundleVersion=\" + this.bundle.version + \"&bundleId=\" + this.course.bundleId + \"&targetDir=\" + targetDir + \"&replaceSlides=\" + this.replaceSlides + \"&isArchive=\" + isArchive),\r\n file: this.archive\r\n }).success(function () {\r\n _this.loadBundle().then(function () {\r\n _this.loadSectionsForModule(section.moduleId).then(function () {\r\n _this.bundleFilesGridModel.loadPage(0);\r\n _this.getSlidesForSlideDeck(section);\r\n _this.setSlideSectionActive(_this.slides[0].section);\r\n _this.removedSlides = false;\r\n _this.activateMainContent();\r\n _this.archive = undefined;\r\n _this.replaceSlides = false;\r\n INotifier_1.notifier.success(\"Slides has been imported\");\r\n });\r\n });\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.slide.file.format\") {\r\n INotifier_1.notifier.error(\"Slides import error. The slide format should be .jpg .png .jpeg\");\r\n }\r\n else if (response.data.error == \"error.slide.name.format\") {\r\n INotifier_1.notifier.error(\"Slides import error. The slide name should contain a number\");\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Presentation loading error\");\r\n }\r\n _this.archive = undefined;\r\n _this.replaceSlides = false;\r\n _this.removedSlides = false;\r\n _this.activateMainContent();\r\n });\r\n };\r\n CourseStructureEditController.prototype.removeAllSlide = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#removeAllSlideDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n CourseStructureEditController.prototype.removeAllSectionFromSlideDeck = function () {\r\n this.replaceSlides = true;\r\n this.addSlideSectionsFromAchieve();\r\n };\r\n CourseStructureEditController.prototype.focusOnElement = function (tabName) {\r\n angular.element(\".active\").removeClass(\"active\");\r\n angular.element(\"#\" + tabName).addClass(\"active\");\r\n document.getElementById(tabName).scrollIntoView();\r\n };\r\n CourseStructureEditController.prototype.changeTab = function (tabName) {\r\n angular.element(\".sub-element.active\").removeClass(\"active\");\r\n angular.element(\"#\" + tabName).addClass(\"active\");\r\n angular.element(\".active-element\").addClass(\"hidden\").removeClass(\"active-element\");\r\n angular.element(\"#\" + tabName + \"-element\").addClass(\"active-element\").removeClass(\"hidden\");\r\n };\r\n CourseStructureEditController.prototype.onCompleteRecordingCallback = function (blob, recordingPromise, section) {\r\n this.deactivateMainContent();\r\n this.setFormIsDirty();\r\n return this.prepareBundleFiles(blob, section, recordingPromise);\r\n };\r\n CourseStructureEditController.prototype.prepareBundleFiles = function (blob, section, recordingPromise) {\r\n var _this = this;\r\n var targetDir = \"sections/audio/\" + section.parentId + \"/\" + section.sortIndex + \"/audio\";\r\n if (this.selectedSection) {\r\n if (!this.course.bundleId) {\r\n this.courseService.createCourseBundle(this.course.id, this.course.version).then(function (result) {\r\n _this.course.bundleId = result[\"bundle\"].id;\r\n _this.course.version = result[\"course\"].version;\r\n _this.loadBundle().then(function () {\r\n var bundleInputInfo;\r\n bundleInputInfo = _this.getPreparedBundleInputInfoFromBlob(_this.bundle.id, _this.bundle.version, blob, targetDir);\r\n return _this.updateBundleFromFile(bundleInputInfo);\r\n });\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Incorrect configuration to create Bundle\");\r\n });\r\n }\r\n else {\r\n var bundleInputInfo;\r\n bundleInputInfo = this.getPreparedBundleInputInfoFromBlob(this.bundle.id, this.bundle.version, blob, targetDir);\r\n return this.updateBundleFromFile(bundleInputInfo);\r\n }\r\n }\r\n else {\r\n console.log(\"Section or is not defined.\");\r\n return this.$q.when(null);\r\n }\r\n };\r\n CourseStructureEditController.prototype.getPreparedBundleInputInfoFromBlob = function (bundleId, bundleVersion, blob, fileNamePrefix) {\r\n var bundleInputInfo = {};\r\n bundleInputInfo.addedBundleFile = {\r\n file: this.blobToFile(blob, fileNamePrefix),\r\n relativePath: \"\"\r\n };\r\n bundleInputInfo.recordName = bundleInputInfo.addedBundleFile.file.name;\r\n bundleInputInfo.recordUrl = URL.createObjectURL(blob);\r\n var addedFiles = [];\r\n addedFiles.push({\r\n name: bundleInputInfo.addedBundleFile.file.name,\r\n type: bundleInputInfo.addedBundleFile.file.type,\r\n size: bundleInputInfo.addedBundleFile.file.size,\r\n path: bundleInputInfo.addedBundleFile.relativePath\r\n });\r\n bundleInputInfo.bundleInput = {\r\n id: bundleId,\r\n version: bundleVersion,\r\n addedFiles: addedFiles,\r\n deletedFileIds: []\r\n };\r\n return bundleInputInfo;\r\n };\r\n CourseStructureEditController.prototype.blobToFile = function (blob, fileNamePrefix) {\r\n var file = blob;\r\n file.lastModifiedDate = new Date();\r\n if (this.audio) {\r\n file.name = RandomUtils_1.RandomUtils.generateRandomId(fileNamePrefix) + \".\" + ContentUtils_1.ContentUtils.getFileExt(this.audio.name);\r\n }\r\n else {\r\n if (file.name) {\r\n file.name = RandomUtils_1.RandomUtils.generateRandomId(fileNamePrefix) + \".\" + ContentUtils_1.ContentUtils.getFileExt(file.name);\r\n }\r\n else {\r\n file.name = RandomUtils_1.RandomUtils.generateRandomId(fileNamePrefix) + \".wav\";\r\n }\r\n }\r\n return file;\r\n };\r\n CourseStructureEditController.prototype.updateBundleFromFile = function (bundleInputInfo) {\r\n var _this = this;\r\n return this.bundleService.updateBundleFromFiles(bundleInputInfo.bundleInput)\r\n .then(function (result) {\r\n var fileUploadInfos = result[\"fileUploadInfos\"];\r\n var fileUploadInfo = fileUploadInfos[0];\r\n var addedFile = bundleInputInfo.addedBundleFile.file;\r\n var uploadCallback = function (uploadStatus) { return _this.getUploadedFile(_this.bundle, addedFile.name, uploadStatus); };\r\n _this.uploadUtils.uploadBundleByChunks(addedFile, fileUploadInfo.fileId, _this.bundle.id, fileUploadInfo.url, fileUploadInfo.method, uploadCallback);\r\n return result;\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n });\r\n };\r\n CourseStructureEditController.prototype.getUploadedFile = function (bundle, fileKey, uploadStatus) {\r\n var _this = this;\r\n if (uploadStatus == 'SUCCESS') {\r\n this.getUploadedFileToBundleByFileKey(bundle.id, fileKey)\r\n .then(function (file) {\r\n _this.audioFile = file;\r\n if (_this.audioFile) {\r\n _this.courseService.saveAudioFileForSlide(_this.courseId, _this.selectedSection.moduleId, _this.selectedSection.id, fileKey).then(function (result) {\r\n _this.setFormIsDirty();\r\n _this.loadSectionsForModuleText(_this.selectedSection, _this.selectedSection);\r\n _this.activateMainContent();\r\n });\r\n }\r\n if (bundle.filesMap.has(fileKey)) {\r\n var bundleFile = bundle.filesMap.get(fileKey);\r\n if (!bundleFile.url && file.url) {\r\n bundleFile.url = file.url;\r\n }\r\n }\r\n else {\r\n bundle.files.push(file);\r\n bundle.filesMap.set(fileKey, file);\r\n }\r\n });\r\n INotifier_1.notifier.success(\"The record has been successfully uploaded\");\r\n }\r\n };\r\n CourseStructureEditController.prototype.getUploadedFileToBundleByFileKey = function (bundleId, fileKey) {\r\n return this.bundleService.getUploadedFileToBundleByFileKey(bundleId, fileKey);\r\n };\r\n CourseStructureEditController.prototype.showAudioFile = function () {\r\n this.showAudioFiles = true;\r\n this.showAudio = !this.showAudio;\r\n };\r\n CourseStructureEditController.prototype.removeAudioFile = function () {\r\n var _this = this;\r\n this.deactivateMainContent();\r\n this.setFormIsDirty();\r\n this.courseService.removeAudioFileForSlide(this.courseId, this.selectedSection.moduleId, this.selectedSection.id).then(function () {\r\n _this.loadSectionsForModuleText(_this.selectedSection, _this.selectedSection);\r\n _this.activateMainContent();\r\n });\r\n };\r\n CourseStructureEditController.prototype.getAudioFileUrl = function (section) {\r\n section.audioFileUrl = this.bundle.filesMap.has(section.audioFileKey)\r\n ? this.bundle.filesMap.get(section.audioFileKey).url\r\n : null;\r\n return section.audioFileUrl;\r\n };\r\n CourseStructureEditController.prototype.updateAudioFile = function (file) {\r\n var _this = this;\r\n this.deactivateMainContent();\r\n this.setFormIsDirty();\r\n this.courseService.updateAudioFile(this.courseId, this.selectedSection.moduleId, this.selectedSection.id, file.id).then(function () {\r\n _this.loadSectionsForModuleText(_this.selectedSection, _this.selectedSection);\r\n _this.activateMainContent();\r\n });\r\n };\r\n CourseStructureEditController.prototype.uploadAudioFile = function () {\r\n var fileExtension = this.audio.name.match(/\\.([0-9a-z]+)(?=[?#])|(\\.)(?:[\\w]+)$/);\r\n if (fileExtension[0] != \".wav\" && fileExtension[0] != \".m4a\" && fileExtension[0] != \".mp3\") {\r\n INotifier_1.notifier.error(\"The specified audio format is not supported. Only wav, m4a and mp3 formats are supported\");\r\n return;\r\n }\r\n this.deactivateMainContent();\r\n var blob = new Blob([this.audio], { type: this.audio.type });\r\n this.setFormIsDirty();\r\n this.prepareBundleFiles(blob, this.selectedSection);\r\n this.audio = undefined;\r\n };\r\n CourseStructureEditController.prototype.showSelectAudioFileDialog = function () {\r\n this.audioFilesGridModel.filter.audioFilesSearchString = this.selectedSection.parentId;\r\n this.audioFilesGridModel.loadPage(0);\r\n $('#selectAudioFileDialog').modal(\"show\");\r\n };\r\n CourseStructureEditController.prototype.closePopup = function () {\r\n $('#selectAudioFileDialog').modal(\"hide\");\r\n };\r\n CourseStructureEditController.prototype.getTemplateForInclude = function (templateName) {\r\n return this.url.template(templateName);\r\n };\r\n CourseStructureEditController.prototype.redirectToSlideDeckHelpPage = function () {\r\n this.$window.open(this.$window.location.href.split('#')[0] + \"#\" + this.newsRouter.helpUrl(NewsKey_1.NewsKey.HELP_SLIDE_DECK), \"_blank\");\r\n };\r\n CourseStructureEditController.prototype.updateSlideNumberAndTotalSlides = function () {\r\n var _this = this;\r\n if (this.slides.length > 0) {\r\n var sections = [];\r\n this.deactivateMainContent();\r\n for (var i = 0; i < this.slides.length; i++) {\r\n if (this.slides[i].section.summary.indexOf(\"
    = 0) {\r\n this.nothingChanged = false;\r\n this.slides[i].section.summary = this.replacePlaceholdersOfSlideNumberAndTotalSlides(this.slides[i].section.summary, this.slides[i].section.sortIndex, this.slides.length);\r\n sections.push(this.slides[i].section);\r\n }\r\n if (i == this.slides.length - 1) {\r\n if (!this.nothingChanged && sections.length > 0) {\r\n this.courseService.updateSections(this.courseId, sections).then(function () {\r\n _this.loadSectionsForModule(_this.selectedSlideDeckSection.moduleId).then(function () {\r\n _this.getSlidesForSlideDeck(_this.selectedSlideDeckSection);\r\n _this.setSlideSectionActive(_this.slides[0].section);\r\n _this.activateMainContent();\r\n _this.nothingChanged = true;\r\n INotifier_1.notifier.success(\"Slides have been updated\");\r\n });\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"Nothing to change\");\r\n this.activateMainContent();\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"No slides to update\");\r\n }\r\n };\r\n CourseStructureEditController.prototype.replacePlaceholdersOfSlideNumberAndTotalSlides = function (html, slideNumber, slideDeckTotalSlides) {\r\n html = VhsTemplateService_1.VhsTemplateService.replaceTemplatePlaceholderField(html, \"slideDeckTotalSlides\", slideDeckTotalSlides);\r\n html = VhsTemplateService_1.VhsTemplateService.replaceTemplatePlaceholderField(html, \"slideNumber\", slideNumber);\r\n return VhsTemplateService_1.VhsTemplateService.replaceAllWhitespaces(html);\r\n };\r\n CourseStructureEditController.prototype.openCloseSlideDeckSlideTemplates = function () {\r\n if ($('#slide-deck_add-slide').hasClass('hidden')) {\r\n $('#slide-deck_add-slide').removeClass('hidden');\r\n }\r\n else {\r\n $('#slide-deck_add-slide').addClass('hidden');\r\n }\r\n };\r\n CourseStructureEditController.prototype.openCloseSlideDeckAI = function () {\r\n if ($('#slide-deck_add-slides-ai').hasClass('hidden')) {\r\n $('#slide-deck_add-slides-ai').removeClass('hidden');\r\n }\r\n else {\r\n $('#slide-deck_add-slides-ai').addClass('hidden');\r\n }\r\n this.aiNumberOfSlides = 5;\r\n this.aiPromptText = \"\";\r\n };\r\n CourseStructureEditController.prototype.isCourseHasMandatorySection = function () {\r\n var _this = this;\r\n this.hasMandatorySection = false;\r\n this.modules.forEach(function (module) {\r\n _this.sectionsMap.get(module.id).forEach(function (sec) {\r\n if (sec.section.sectionPassingType == 'MANDATORY' && sec.level == 1) {\r\n _this.hasMandatorySection = true;\r\n console.log('isCourseHasMandatorySection');\r\n }\r\n });\r\n });\r\n };\r\n CourseStructureEditController.prototype.updateCourseRequiredElectivesNumber = function () {\r\n return this.courseService.updateCourseRequiredElectivesNumber(this.course);\r\n };\r\n CourseStructureEditController.prototype.decodeType = function (type) {\r\n var result = type;\r\n switch (type) {\r\n case \"Audio\": {\r\n result = \"Audio\";\r\n break;\r\n }\r\n case \"Video\": {\r\n result = \"Video\";\r\n break;\r\n }\r\n case \"Link\": {\r\n result = \"Link\";\r\n break;\r\n }\r\n case \"Image\": {\r\n result = \"Image\";\r\n break;\r\n }\r\n case \"Other documents\": {\r\n result = \"Other documents\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n CourseStructureEditController.prototype.generateSlides = function () {\r\n var _this = this;\r\n this.deactivateMainContent();\r\n if (this.slides && this.slides.length > 0) {\r\n this.setSlideSectionActive(this.slides[this.slides.length - 1].section);\r\n }\r\n var topic = this.aiPromptText;\r\n var defaultTemplate = this.defaultTemplates.filter(function (t) { return t.path === \"defaultTemplate\"; })[0];\r\n var numberOfSlides = this.aiNumberOfSlides;\r\n this.aiService.generateSubtopics(this.courseId, numberOfSlides, this.aiPromptText).then(function (result) {\r\n var generateSubparagraphPromises = [];\r\n var addSlidePromise = _this.$q.when(null);\r\n var topics = result.topics.length > numberOfSlides\r\n ? result.topics.slice(0, numberOfSlides + 1)\r\n : result.topics;\r\n for (var _i = 0; _i < topics.length; _i++) {\r\n var t = topics[_i];\r\n generateSubparagraphPromises.push(_this.aiService.generateSubparagraph(_this.courseId, topic, t).then(function (result) {\r\n addSlidePromise = addSlidePromise.then(function () { return _this.addSlide(_this.selectedSlideDeckSection.id, _this.selectedSlideDeckSection.name, _this.selectedSlideDeckSection.moduleId, null, defaultTemplate.path, result.subtopic, result.article); });\r\n }));\r\n }\r\n _this.$q.all(generateSubparagraphPromises)\r\n .finally(function () { return _this.activateMainContent(); });\r\n }).finally(function () { return _this.activateMainContent(); });\r\n this.openCloseSlideDeckAI();\r\n };\r\n CourseStructureEditController.prototype.isInt = function (value) {\r\n if (isNaN(value)) {\r\n return false;\r\n }\r\n var x = parseFloat(value);\r\n return (x | 0) === x;\r\n };\r\n CourseStructureEditController.prototype.expandAllModules = function () {\r\n var _this = this;\r\n if (this.expandAll) {\r\n this.menuKey.leftMenuModuleExpanded = [];\r\n }\r\n else {\r\n this.modules.forEach(function (m) { return _this.menuKey.leftMenuModuleExpanded.push(m.id); });\r\n }\r\n this.expandAll = !this.expandAll;\r\n };\r\n CourseStructureEditController.NAME = \"courses.CourseStructureEditController\";\r\n CourseStructureEditController.RECURSION_DEPTH_LIMIT = 50;\r\n CourseStructureEditController.COURSE_LOAD_AT_START_BUNDLES_RICH_TEXT_ID = \"course_load_at_start_bundles_rich_text\";\r\n CourseStructureEditController.SLIDE_TEMPLATES_BUNDLE_RICH_TEXT_ID = \"slide_templates_bundle_rich_text\";\r\n CourseStructureEditController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$timeout\",\r\n \"$q\",\r\n \"$rootScope\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n \"Upload\",\r\n UserService_1.UserService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n DialogService_1.DialogService.NAME,\r\n SlideService_1.SlideService.NAME,\r\n BundleService_1.BundleService.NAME,\r\n VhsTemplateService_1.VhsTemplateService.NAME,\r\n UploadsService_1.UploadsService.NAME,\r\n RichTextContentLoadingSynchronizer_1.RichTextContentLoadingSynchronizer.NAME,\r\n NewsRouter_1.NewsRouter.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n AIService_1.AIService.NAME\r\n ];\r\n return CourseStructureEditController;\r\n})();\r\nexports.CourseStructureEditController = CourseStructureEditController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../ai/AIService\":11,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../bundles/BundleService\":36,\"../bundles/models/BundleFileType\":40,\"../components/dialog/DialogService\":166,\"../components/models/Event\":170,\"../components/richtext/RichTextBindDirective\":175,\"../components/richtext/RichTextContentLoadingSynchronizer\":176,\"../components/richtext/VhsSelectEmbeddedBundleDirective\":185,\"../components/richtext/VhsTemplateService\":188,\"../materials/models/MaterialType\":347,\"../news/models/NewsKey\":356,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../slides/SlideService\":435,\"../storage/UploadsService\":458,\"../tree/TreeElementsInfoFiller\":460,\"../urls/CoursesRouter\":468,\"../urls/MaterialsRouter\":480,\"../urls/NewsRouter\":481,\"../urls/QuizzesRouter\":486,\"../users/UserService\":499,\"../utils/ContentUtils\":509,\"../utils/Keys\":514,\"../utils/LocationChangeHelper\":515,\"../utils/Moment\":518,\"../utils/ObjectTypeUtils\":520,\"../utils/PageHeaderHelper\":521,\"../utils/RandomUtils\":523,\"../utils/StringBuilder\":525,\"../utils/UploadUtils\":527,\"../utils/UrlService\":528,\"./CourseDetailsUtils\":195,\"./CourseService\":211,\"./ProgressService\":219,\"./models/SectionAccessRules\":225,\"./models/SectionPassingType\":226,\"./models/SectionType\":228}],213:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar QuestionType_1 = require(\"../quizzes/models/QuestionType\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar Storage_1 = require(\"../infrastructure/Storage\");\r\nvar ProgressService_1 = require(\"./ProgressService\");\r\nvar ReportOptions_1 = require(\"../statistics/utils/ReportOptions\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar CourseSurveyResultsController = (function () {\r\n function CourseSurveyResultsController($scope, $http, $location, $routeParams, $window, $q, $rootScope, $timeout, url, securityService, permissionsApi, coursesRouter, courseService, quizService, authManager, sessionStorageWrapper, bundleService, progressService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$window = $window;\r\n this.$q = $q;\r\n this.$rootScope = $rootScope;\r\n this.$timeout = $timeout;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsApi = permissionsApi;\r\n this.coursesRouter = coursesRouter;\r\n this.courseService = courseService;\r\n this.quizService = quizService;\r\n this.authManager = authManager;\r\n this.sessionStorageWrapper = sessionStorageWrapper;\r\n this.bundleService = bundleService;\r\n this.progressService = progressService;\r\n this.DEFAULT_TOP_MENU_ITEM = 'surveyResults';\r\n this.QUESTION_SUMMARIES = \"questionSummaries\";\r\n this.INDIVIDUAL_RESPONSES = \"individualResponses\";\r\n this.SAResponsesPageSize = 10;\r\n this.isInitialized = false;\r\n this.survey = {};\r\n this.selectedSurveyQuestions = [];\r\n this.selectedSurveyAnswerResults = [];\r\n this.course = {};\r\n this.owners = [];\r\n this.isCourseLoaded = false;\r\n this.viewType = this.QUESTION_SUMMARIES;\r\n this.diagramsData = new Map();\r\n this.isSurveyStatisticLoading = false;\r\n this.percentageDiagramOptions = ReportOptions_1.getHorizontalBarDiagramOptions(null, { axes: { autoscale: false, xaxis: { min: 0, max: 100, tickOptions: { formatString: \"%.0f\", suffix: \" %\" } } } });\r\n this.digitDiagramOptions = ReportOptions_1.getHorizontalBarDiagramOptions(null, { axes: { autoscale: true } });\r\n this.onResizeFunc = function (event) {\r\n $(\".jqplot-target\")\r\n .each(function (index, elem) {\r\n $(elem).data(\"jqplot\").replot();\r\n });\r\n };\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.securityService\r\n .demandCoursePermissions(courseIdStr, function (coursePermissions) { return coursePermissions.permissionsDelegation; });\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.surveyResultsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/quizzes/surveyResults\")));\r\n this.surveyResultsGridModel.pageSize = 1;\r\n this.surveyResultsGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n if (_this.surveyResultsGridModel.entries.length > 0) {\r\n _this.loadSurveyQuestions(_this.surveyResultsGridModel.entries[0].surveyId);\r\n _this.loadSurvey(_this.surveyResultsGridModel.entries[0].surveyId, _this.surveyResultsGridModel.entries[0].id);\r\n }\r\n }\r\n });\r\n this.surveyResultsGridModel.filter.courseId = this.courseId;\r\n this.loadCourse();\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.$window.removeEventListener(\"resize\", _this.onResizeFunc);\r\n });\r\n this.$window.addEventListener(\"resize\", this.onResizeFunc);\r\n }\r\n CourseSurveyResultsController.prototype.loadBundle = function (bundleId) {\r\n var _this = this;\r\n this.bundleService.getBundle(bundleId)\r\n .then(function (bundle) {\r\n _this.bundle = bundle;\r\n });\r\n };\r\n CourseSurveyResultsController.prototype.getUrlForAttachmentSurvey = function (file) {\r\n if (this.bundle) {\r\n return this.bundle.filesMap.has(file.bundleFileKey)\r\n ? this.bundle.filesMap.get(file.bundleFileKey).url\r\n : null;\r\n }\r\n return null;\r\n };\r\n CourseSurveyResultsController.prototype.loadCourse = function () {\r\n var _this = this;\r\n this.courseService.get(this.courseId)\r\n .then(function (result) {\r\n _this.course = angular.copy(result);\r\n _this.course.endDateText = Moment_1.Moment.isValidDate(result.endDate);\r\n _this.course.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter, \"Survey results\");\r\n _this.loadOwners();\r\n })\r\n .then(function (result) {\r\n _this.quizService.getSurveysForCourse(_this.course.id)\r\n .then(function (result) {\r\n _this.courseSurveys = result;\r\n if (result.length > 0) {\r\n _this.surveyResultsGridModel.filter.surveyId = result[0].id;\r\n _this.onSelectorChangeCallback();\r\n }\r\n });\r\n });\r\n };\r\n CourseSurveyResultsController.prototype.loadOwners = function () {\r\n var _this = this;\r\n this.courseService.getCourseOwners(this.courseId).then(function (result) {\r\n angular.copy(result, _this.owners);\r\n _this.isCourseLoaded = true;\r\n });\r\n };\r\n CourseSurveyResultsController.prototype.search = function () {\r\n this.surveyResultsGridModel.loadPage(0);\r\n };\r\n CourseSurveyResultsController.prototype.loadSurveyQuestions = function (surveyId) {\r\n var _this = this;\r\n return this.quizService.getAllSurveyQuestions(surveyId).then(function (result) {\r\n if (result) {\r\n angular.copy(result, _this.selectedSurveyQuestions);\r\n }\r\n });\r\n };\r\n CourseSurveyResultsController.prototype.loadSurvey = function (surveyId, surveyResultId) {\r\n var _this = this;\r\n this.isInitialized = false;\r\n var surveyResultIds = [];\r\n surveyResultIds.push(surveyResultId);\r\n this.quizService.getQuizAnswerResults(this.courseId, surveyResultIds)\r\n .then(function (result) {\r\n angular.copy(result, _this.selectedSurveyAnswerResults);\r\n var id = _this.selectedSurveyAnswerResults[0].id;\r\n var resultId = _this.selectedSurveyAnswerResults[0].quizResultId;\r\n _this.quizService.getBundleIdForQuizResult(id, resultId).then(function (bundleId) {\r\n if (bundleId) {\r\n _this.loadBundle(bundleId);\r\n }\r\n else {\r\n console.log(\"bundle for this quiz result was not found\");\r\n }\r\n });\r\n _this.selectedSurveyQuestions.forEach(function (q) {\r\n var surveyAnswerResult = _this.selectedSurveyAnswerResults.filter(function (ar) { return ar.questionId == q.id; })[0];\r\n if (surveyAnswerResult) {\r\n q.answers.forEach(function (a) {\r\n if (surveyAnswerResult.answerIds.filter(function (aId) { return aId == a.id; }).length > 0) {\r\n a.selected = true;\r\n }\r\n else {\r\n a.selected = false;\r\n }\r\n if (surveyAnswerResult.grades.filter(function (g) { return g.answerId == a.id; }).length > 0) {\r\n a.grade = surveyAnswerResult.grades.filter(function (g) { return g.answerId == a.id; })[0].grade;\r\n }\r\n });\r\n q.shortAnswer = surveyAnswerResult.answerText;\r\n }\r\n });\r\n })\r\n .then(function () {\r\n var questionList = [];\r\n _this.selectedSurveyAnswerResults.forEach(function (qa) {\r\n _this.selectedSurveyQuestions.map(function (q) {\r\n if (q.id == qa.questionId) {\r\n questionList.push(q);\r\n }\r\n });\r\n });\r\n _this.selectedSurveyQuestions = questionList;\r\n })\r\n .finally(function () {\r\n _this.isInitialized = true;\r\n });\r\n };\r\n CourseSurveyResultsController.prototype.isFillInTheBlankQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILL_IN_THE_BLANK];\r\n };\r\n CourseSurveyResultsController.prototype.isMultipleChoiceMultipleAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_MULTIPLE_ANSWER];\r\n };\r\n CourseSurveyResultsController.prototype.isMultipleChoiceSingleAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER];\r\n };\r\n CourseSurveyResultsController.prototype.isShortAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER];\r\n };\r\n CourseSurveyResultsController.prototype.isShortAnswerWithUploadQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD];\r\n };\r\n CourseSurveyResultsController.prototype.isScaledAnswerQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER];\r\n };\r\n CourseSurveyResultsController.prototype.isThereSurveyAnswerResultForQuestion = function (questionId) {\r\n return this.selectedSurveyAnswerResults.filter(function (ar) { return ar.questionId == questionId; }).length > 0;\r\n };\r\n CourseSurveyResultsController.prototype.isFillableFormQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM];\r\n };\r\n CourseSurveyResultsController.prototype.isShortAnswerAudioResponseQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE];\r\n };\r\n CourseSurveyResultsController.prototype.getAnswerForQuestion = function (question) {\r\n return this.selectedSurveyAnswerResults.filter(function (ar) { return ar.questionId === question.id; }).pop();\r\n };\r\n CourseSurveyResultsController.prototype.isTopMenuActive = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n CourseSurveyResultsController.prototype.getBundleFileByKey = function (question) {\r\n var fileKey = this.getAnswerForQuestion(question).responseData.bundleFileKey;\r\n return this.bundle.files.filter(function (file) { return file.key === fileKey; }).pop();\r\n };\r\n CourseSurveyResultsController.prototype.changeView = function (viewType) {\r\n var _this = this;\r\n if (viewType == this.QUESTION_SUMMARIES) {\r\n this.viewType = this.QUESTION_SUMMARIES;\r\n if (this.surveyResultsGridModel.filter.surveyId) {\r\n this.isSurveyStatisticLoading = true;\r\n this.quizService.getQuizSurveyStatistics(this.courseId, this.surveyResultsGridModel.filter.surveyId)\r\n .then(function (data) {\r\n _this.surveyStatistics = data;\r\n _this.createGridModels(_this.surveyStatistics);\r\n _this.prepareQuestionStatisticForDiagrams();\r\n _this.surveyStatistics.questions.sort(function (a, b) { return a.questionCode > b.questionCode\r\n ? 1\r\n : a.questionCode < b.questionCode\r\n ? -1\r\n : 0; });\r\n _this.isSurveyStatisticLoading = false;\r\n });\r\n }\r\n }\r\n else if (viewType == this.INDIVIDUAL_RESPONSES) {\r\n this.viewType = this.INDIVIDUAL_RESPONSES;\r\n if (this.surveyResultsGridModel.filter.surveyId) {\r\n this.surveyResultsGridModel.loadPage(0);\r\n }\r\n }\r\n };\r\n CourseSurveyResultsController.prototype.prepareQuestionStatisticForDiagrams = function () {\r\n var _this = this;\r\n var arr;\r\n this.surveyStatistics.questions.forEach(function (question) {\r\n arr = [];\r\n for (var i = question.answersStatistics.length - 1; i >= 0; i--) {\r\n var answer = question.answersStatistics[i];\r\n if (question.questionType == 'MULTIPLE_CHOICE_SINGLE_ANSWER'\r\n || question.questionType == 'MULTIPLE_CHOICE_MULTIPLE_ANSWER') {\r\n arr.push([answer.answeredPerc, answer.answerText]);\r\n }\r\n else if (question.questionType == 'SCALED_ANSWER') {\r\n arr.push([answer.weightedAverage, answer.answerText]);\r\n }\r\n }\r\n _this.diagramsData.set(question.questionId, [arr]);\r\n });\r\n };\r\n CourseSurveyResultsController.prototype.getChartDataForQuestion = function (questionId) {\r\n return this.diagramsData.get(questionId);\r\n };\r\n CourseSurveyResultsController.prototype.getChartOptionsForQuestionType = function (questionType) {\r\n if (questionType == 'MULTIPLE_CHOICE_SINGLE_ANSWER' || questionType == 'MULTIPLE_CHOICE_MULTIPLE_ANSWER') {\r\n return this.percentageDiagramOptions;\r\n }\r\n else if (questionType == 'SCALED_ANSWER') {\r\n return this.digitDiagramOptions;\r\n }\r\n };\r\n CourseSurveyResultsController.prototype.onSelectorChangeCallback = function () {\r\n if (this.surveyResultsGridModel.filter.surveyId) {\r\n this.changeView(this.viewType);\r\n }\r\n };\r\n CourseSurveyResultsController.prototype.getPage = function (pageIndex, pageSize, entities) {\r\n var start = pageIndex * pageSize;\r\n var result = entities.slice(start, start + pageSize);\r\n var totalCount = entities.length;\r\n return { entries: result, totalCount: totalCount };\r\n };\r\n CourseSurveyResultsController.prototype.createGridModels = function (surveyStatistics) {\r\n var _this = this;\r\n surveyStatistics.questions.filter(function (q) { return q.questionType == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER]\r\n || q.questionType == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD]\r\n || q.questionType == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE]; })\r\n .forEach(function (q) {\r\n var answered = q.answersStatistics.filter(function (s) { return !!s.shortAnswerText || !!s.bundleFile; });\r\n q.SAResponsesGridModel = new IGridModel_1.GridModel(function (gridModel) {\r\n gridModel.pageSize = _this.SAResponsesPageSize;\r\n return _this.$q.when(_this.getPage(gridModel.currentPage, gridModel.pageSize, answered));\r\n });\r\n });\r\n };\r\n CourseSurveyResultsController.NAME = \"courses.CourseSurveyResultsController\";\r\n CourseSurveyResultsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$window\",\r\n \"$q\",\r\n \"$rootScope\",\r\n \"$timeout\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n QuizService_1.QuizService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n Storage_1.Storages.SESSION_NAME,\r\n BundleService_1.BundleService.NAME,\r\n ProgressService_1.ProgressService.NAME\r\n ];\r\n return CourseSurveyResultsController;\r\n})();\r\nexports.CourseSurveyResultsController = CourseSurveyResultsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../authcore/AuthManager\":25,\"../bundles/BundleService\":36,\"../infrastructure/Storage\":295,\"../quizzes/QuizService\":396,\"../quizzes/models/QuestionType\":401,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../statistics/utils/ReportOptions\":454,\"../urls/CoursesRouter\":468,\"../utils/Moment\":518,\"../utils/UrlService\":528,\"./CourseService\":211,\"./ProgressService\":219}],214:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar ProgressService_1 = require(\"./ProgressService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar Storage_1 = require(\"../infrastructure/Storage\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar CourseProgressStatus_1 = require(\"./models/CourseProgressStatus\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar TimeZoneType_1 = require(\"../webinars/models/TimeZoneType\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar CourseWebinarController = (function () {\r\n function CourseWebinarController($http, $location, $routeParams, $window, $q, $timeout, $rootScope, url, securityService, permissionsApi, coursesRouter, courseService, authManager, sessionStorageWrapper, progressService, authService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$window = $window;\r\n this.$q = $q;\r\n this.$timeout = $timeout;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsApi = permissionsApi;\r\n this.coursesRouter = coursesRouter;\r\n this.courseService = courseService;\r\n this.authManager = authManager;\r\n this.sessionStorageWrapper = sessionStorageWrapper;\r\n this.progressService = progressService;\r\n this.authService = authService;\r\n this.course = {};\r\n this.owners = [];\r\n this.newSession = {};\r\n this.showManage = false;\r\n this.showRoster = false;\r\n this.courseUsers = [];\r\n this.courseUsersWithoutCompletedStatus = [];\r\n this.currentVILTSession = {};\r\n this.isCourseLoaded = false;\r\n this.timeZone = TimeZoneType_1.TimeZone;\r\n this.isDataLoading = false;\r\n this.currentUser = {};\r\n this.timeOffset = 0;\r\n this.attendeesCount = new Map();\r\n this.showEditModal = false;\r\n this.isActiveLearners = true;\r\n this.schedulingInfo = {};\r\n this.showModalType = \"zoom\";\r\n this.isCreationModalShown = false;\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.securityService\r\n .demandCoursePermissions(courseIdStr, function (coursePermissions) { return coursePermissions.viewOtherUsersProgress; });\r\n var isCompletedTeamsAuth = $routeParams[\"error\"] || undefined;\r\n if (isCompletedTeamsAuth !== undefined && (isCompletedTeamsAuth === true || isCompletedTeamsAuth.length === 0)) {\r\n INotifier_1.notifier.success(\"Your authorized in teams successfully\");\r\n }\r\n else if (isCompletedTeamsAuth !== undefined && isCompletedTeamsAuth.length > 0) {\r\n INotifier_1.notifier.error(isCompletedTeamsAuth);\r\n }\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.currentUser);\r\n });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.loadCourse();\r\n this.newSession.isSelfRegistrationAllowed = true;\r\n this.viltSessionsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/courses/:courseId/viltSessions\")\r\n .param(\":courseId\", this.courseId)\r\n .service()));\r\n this.viltSessionsGridModel.pageSize = 10;\r\n this.viltSessionsGridModel.addLoadingListener(this);\r\n this.viltSessionsGridModel.loadPage(0);\r\n this.newSession.timezone = TimeZoneType_1.getLocalDefaultTimezone();\r\n }\r\n CourseWebinarController.prototype.loadCourse = function () {\r\n var _this = this;\r\n this.courseService.get(this.courseId)\r\n .then(function (result) {\r\n _this.course = angular.copy(result);\r\n _this.getCourseProgress();\r\n _this.loadAttendeesCount();\r\n var businessUnitId = _this.course.businessUnitId;\r\n _this.getZoomWebinarConfigurationsInfo(_this.courseId, businessUnitId == undefined ? null : businessUnitId);\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter, \"ILT\");\r\n });\r\n return this.progressService.getCourseSections(this.courseId, this.courseProgressId)\r\n .then(function (result) {\r\n _this.viltSessionSections = result.filter(function (word) { return word.section.typeKey == 'WEBINAR'; });\r\n if (_this.viltSessionSections.length > 0) {\r\n _this.newSession.sectionId = _this.viltSessionSections[0].id;\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseWebinarController.prototype.getZoomWebinarConfigurationsInfo = function (courseId, businessUnitId) {\r\n var _this = this;\r\n this.courseService.getZoomWebinarConfigurationsInfo(courseId, businessUnitId)\r\n .then(function (result) {\r\n _this.schedulingInfo = result;\r\n if (!_this.schedulingInfo.isWebinarConnectionEnable\r\n && !_this.schedulingInfo.isZoomConnectionEnable\r\n && !_this.schedulingInfo.isTeamsConnectionEnable) {\r\n INotifier_1.notifier.error(\"Session cannot be created. Please contact your system administrator\");\r\n }\r\n });\r\n };\r\n CourseWebinarController.prototype.showViltSessionModal = function () {\r\n if (!this.schedulingInfo.isWebinarConnectionEnable\r\n && !this.schedulingInfo.isZoomConnectionEnable\r\n && !this.schedulingInfo.isTeamsConnectionEnable) {\r\n INotifier_1.notifier.error(\"Session cannot be created. Please contact your system administrator\");\r\n }\r\n else {\r\n if (this.schedulingInfo.isZoomConnectionEnable) {\r\n this.showCreationModalMeeting();\r\n }\r\n else if (this.schedulingInfo.isWebinarConnectionEnable) {\r\n this.showCreationModalWebinar();\r\n }\r\n else {\r\n this.showCreationModalTeams();\r\n }\r\n }\r\n };\r\n CourseWebinarController.prototype.getCourseProgress = function () {\r\n var _this = this;\r\n this.courseProgressId = this.sessionStorageWrapper.get(this.progressService.COURSE_PROGRESS_ID_STORAGE_KEY);\r\n this.progressService.getCourseProgress(this.courseId, this.courseProgressId)\r\n .then(function (result) {\r\n _this.initializeCourseProgress(result);\r\n });\r\n };\r\n CourseWebinarController.prototype.initializeCourseProgress = function (courseProgress) {\r\n this.courseProgress = angular.copy(courseProgress);\r\n this.courseProgressId = this.courseProgress.id;\r\n this.sessionStorageWrapper.put(this.progressService.COURSE_PROGRESS_ID_STORAGE_KEY, this.courseProgressId);\r\n this.courseStarted = (courseProgress.status && courseProgress.status !== CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED]);\r\n this.isCourseLoaded = true;\r\n };\r\n CourseWebinarController.prototype.loadAttendeesCount = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseService.getAttendeesCount(this.courseId)\r\n .then(function (result) {\r\n angular.copy(result, _this.attendeesCount);\r\n _this.updateAttendeesCount();\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseWebinarController.prototype.startLoading = function () {\r\n };\r\n CourseWebinarController.prototype.endLoading = function () {\r\n this.updateAttendeesCount();\r\n };\r\n CourseWebinarController.prototype.updateAttendeesCount = function () {\r\n var _this = this;\r\n this.viltSessionsGridModel.entries.forEach(function (v) {\r\n if (_this.attendeesCount[v.id]) {\r\n v.registrants = _this.attendeesCount[v.id][0];\r\n if (v.status == 'FINISHED') {\r\n v.attendees = _this.attendeesCount[v.id][1];\r\n }\r\n }\r\n });\r\n };\r\n CourseWebinarController.prototype.getTemplateForInclude = function (templateName) {\r\n return this.url.template(templateName);\r\n };\r\n CourseWebinarController.prototype.scheduleOrUpdateWebinar = function () {\r\n var _this = this;\r\n this.prepareDataForScheduleWebinar();\r\n var func = !this.newSession.id ? this.courseService.createWebinar(this.courseId, this.newSession)\r\n : this.courseService.updateWebinar(this.courseId, this.newSession);\r\n func.then(function () {\r\n _this.loadAttendeesCount();\r\n _this.viltSessionsGridModel.loadPage(0);\r\n }).catch(function (x) {\r\n if (!_this.newSession.id) {\r\n INotifier_1.notifier.error(\"Failed to create vILT session. Please try again later or contact support.\");\r\n }\r\n else {\r\n if (x.data.description) {\r\n if (x.data.description.search(\"Webinar with specified key does not exis\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else if (x.data.description.search(\"Cannot update webinar while a session is running\") != -1) {\r\n INotifier_1.notifier.error(\"Failed to update vILT session because it is currently in session.\");\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to update vILT session. Please try again later or contact support.\");\r\n }\r\n }\r\n }).finally(function () {\r\n _this.finallyCallbackForScheduleWebinar();\r\n });\r\n };\r\n CourseWebinarController.prototype.scheduleOrUpdateMeeting = function () {\r\n var _this = this;\r\n this.prepareDataForScheduleWebinar();\r\n var func = !this.newSession.id ? this.courseService.createMeeting(this.course.id, this.newSession)\r\n : this.courseService.updateMeeting(this.course.id, this.newSession);\r\n func.then(function () {\r\n _this.loadAttendeesCount();\r\n _this.viltSessionsGridModel.loadPage(0);\r\n }).catch(function (x) {\r\n if (!_this.newSession.id) {\r\n INotifier_1.notifier.error(\"Failed to create vILT session. Please try again later or contact support.\");\r\n }\r\n else {\r\n if (x.data) {\r\n if (x.data.search(\"Meeting does not exist:\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to update vILT session. Please try again later or contact support.\");\r\n }\r\n }\r\n }).finally(function () {\r\n _this.finallyCallbackForScheduleWebinar();\r\n });\r\n };\r\n CourseWebinarController.prototype.scheduleOrUpdateTeamsMeeting = function () {\r\n var _this = this;\r\n this.prepareDataForScheduleWebinar();\r\n var func = !this.newSession.id ? this.courseService.createTeamsMeeting(this.courseId, this.newSession)\r\n : this.courseService.updateTeamsMeeting(this.courseId, this.newSession);\r\n func.then(function () {\r\n _this.loadAttendeesCount();\r\n _this.viltSessionsGridModel.loadPage(0);\r\n }).catch(function (error) {\r\n if (error.data && error.data.messageForUser.search(\"vilt.was.cancelled\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else if (error && error.data && error.data.messageForUser) {\r\n INotifier_1.notifier.error(error.data.messageForUser);\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to create vILT session. Please try again later or contact support.\");\r\n }\r\n }).finally(function () {\r\n _this.finallyCallbackForScheduleWebinar();\r\n });\r\n };\r\n CourseWebinarController.prototype.prepareDataForScheduleWebinar = function () {\r\n this.isDataLoading = true;\r\n if (!this.isDataValid()) {\r\n return;\r\n }\r\n this.newSession.start_date = this.getTimeByTimezone(this.newSession.startTime);\r\n this.newSession.end_date = this.getTimeByTimezone(this.newSession.endTime);\r\n var formatDate = \"YYYY-MM-DDTHH:mm:ss\";\r\n this.newSession.startDateInit = moment(this.getTimeWithoutTimezone(this.newSession.startTime)).format(formatDate);\r\n this.newSession.endDateInit = moment(this.getTimeWithoutTimezone(this.newSession.endTime)).format(formatDate);\r\n this.commonPrepareDataForScheduleVilt();\r\n };\r\n CourseWebinarController.prototype.commonPrepareDataForScheduleVilt = function () {\r\n var _this = this;\r\n this.viltSessionSections.forEach(function (sectionInHierarchy) {\r\n if (sectionInHierarchy.type == \"SECTION\") {\r\n if (sectionInHierarchy.section.typeKey == \"WEBINAR\") {\r\n if (sectionInHierarchy.section.id == _this.newSession.sectionId) {\r\n _this.newSession.title = sectionInHierarchy.section.name;\r\n }\r\n }\r\n }\r\n });\r\n this.newSession.sectionId = +this.newSession.sectionId;\r\n };\r\n CourseWebinarController.prototype.getTimeByTimezone = function (date) {\r\n var prepare_time = Moment_1.Moment.textToJavaDate(date, \"hh:mm a\") - new Date().getTimezoneOffset() * 60000;\r\n prepare_time = prepare_time - Math.floor((prepare_time / 86400000)) * 86400000;\r\n return Moment_1.Moment.textToJavaDate(this.newSession.date) + prepare_time - new Date().getTimezoneOffset() * 60000 + this.timeOffset;\r\n };\r\n CourseWebinarController.prototype.getTimeWithoutTimezone = function (date) {\r\n var prepare_time = Moment_1.Moment.textToJavaDate(date, \"hh:mm a\") - new Date().getTimezoneOffset() * 60000;\r\n prepare_time = prepare_time - Math.floor((prepare_time / 86400000)) * 86400000;\r\n return Moment_1.Moment.textToJavaDate(this.newSession.date) + prepare_time;\r\n };\r\n CourseWebinarController.prototype.finallyCallbackForScheduleWebinar = function () {\r\n this.isDataLoading = false;\r\n this.newSession = {};\r\n this.newSession.isSelfRegistrationAllowed = true;\r\n if (this.viltSessionSections.length > 0) {\r\n this.newSession.sectionId = this.viltSessionSections[0].id;\r\n }\r\n this.newSession.timezone = TimeZoneType_1.getLocalDefaultTimezone();\r\n this.isCreationModalShown = false;\r\n this.showEditModal = false;\r\n };\r\n CourseWebinarController.prototype.showCreationModalVILTSession = function (viltSessionId, provider) {\r\n if (provider == \"ZOOM\") {\r\n this.showCreationModalMeeting(viltSessionId);\r\n }\r\n else if (provider == \"TEAMS\") {\r\n this.showCreationModalTeams(viltSessionId);\r\n }\r\n else {\r\n this.showCreationModalWebinar(viltSessionId);\r\n }\r\n };\r\n CourseWebinarController.prototype.showCreationModalWebinar = function (webinarId) {\r\n var _this = this;\r\n this.cleanCreationModal();\r\n this.showModalType = \"gotowebinar\";\r\n this.newSession.businessUnitId = this.newSession.businessUnitId || this.course.businessUnitId;\r\n if (webinarId) {\r\n this.showEditModal = true;\r\n this.viltSessionsGridModel.entries.forEach(function (webinar) {\r\n if (webinar.id == webinarId) {\r\n angular.copy(webinar, _this.newSession);\r\n }\r\n });\r\n this.courseService.getSectionForWebinar(this.courseId, webinarId).then(function (result) {\r\n _this.newSession.sectionId = result;\r\n });\r\n this.calculateOffset();\r\n this.newSession.date = moment(this.newSession.start_date - this.timeOffset).format(\"M/D/YYYY\");\r\n this.newSession.startTime = moment(this.newSession.start_date - this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"hh:mm a\");\r\n this.newSession.endTime = moment(this.newSession.end_date - this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"hh:mm a\");\r\n }\r\n else {\r\n this.course.businessUnitId ? this.newSession.businessUnitId = this.course.businessUnitId :\r\n (this.currentUser.businessUnits ? this.newSession.businessUnitId = this.currentUser.businessUnits[0] :\r\n this.newSession.businessUnitId = null);\r\n }\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#creationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n this.isCreationModalShown = true;\r\n };\r\n CourseWebinarController.prototype.showCreationModalMeeting = function (meetingId) {\r\n var _this = this;\r\n this.cleanCreationModal();\r\n this.showModalType = \"zoom\";\r\n this.newSession.businessUnitId = this.newSession.businessUnitId || this.course.businessUnitId;\r\n if (meetingId) {\r\n this.showEditModal = true;\r\n this.viltSessionsGridModel.entries.forEach(function (meeting) {\r\n if (meeting.id == meetingId) {\r\n angular.copy(meeting, _this.newSession);\r\n }\r\n });\r\n this.courseService.getSectionForMeeting(this.courseId, meetingId).then(function (result) {\r\n _this.newSession.sectionId = result;\r\n });\r\n var func = this.courseService.getSettingsForExistingMeeting(this.courseId, meetingId)\r\n .then(function (result) { return _this.newSession.meetingSettings = result; });\r\n func.then(function () {\r\n _this.calculateOffset();\r\n _this.newSession.date = moment(_this.newSession.start_date - _this.timeOffset).format(\"M/D/YYYY\");\r\n _this.newSession.startTime = moment(_this.newSession.start_date - _this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"hh:mm a\");\r\n _this.newSession.endTime = moment(_this.newSession.end_date - _this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"hh:mm a\");\r\n _this.showModalMeeting();\r\n }).catch(function (res) {\r\n _this.showErrorNotification(res.data);\r\n });\r\n }\r\n else {\r\n this.courseService.getMeetingSettings(this.courseId).then(function (result) {\r\n return _this.newSession.meetingSettings = result;\r\n });\r\n this.course.businessUnitId ? this.newSession.businessUnitId = this.course.businessUnitId :\r\n (this.currentUser.businessUnits ? this.newSession.businessUnitId = this.currentUser.businessUnits[0] :\r\n this.newSession.businessUnitId = null);\r\n this.showModalMeeting();\r\n }\r\n };\r\n CourseWebinarController.prototype.showModalMeeting = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#creationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n this.isCreationModalShown = true;\r\n };\r\n CourseWebinarController.prototype.showCreationModalTeams = function (teamsEventId) {\r\n var _this = this;\r\n this.cleanCreationModal();\r\n this.showModalType = \"teams\";\r\n this.newSession.businessUnitId = this.newSession.businessUnitId || this.course.businessUnitId;\r\n if (teamsEventId) {\r\n this.showEditModal = true;\r\n this.viltSessionsGridModel.entries.forEach(function (meeting) {\r\n if (meeting.id == teamsEventId) {\r\n angular.copy(meeting, _this.newSession);\r\n }\r\n });\r\n this.courseService.getSectionForMeeting(this.courseId, teamsEventId).then(function (result) {\r\n _this.newSession.sectionId = result;\r\n });\r\n this.calculateOffset();\r\n this.newSession.date = moment(this.newSession.start_date - this.timeOffset).format(\"M/D/YYYY\");\r\n this.newSession.startTime = moment(this.newSession.start_date - this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"hh:mm a\");\r\n this.newSession.endTime = moment(this.newSession.end_date - this.timeOffset + new Date().getTimezoneOffset() * 60000).format(\"hh:mm a\");\r\n }\r\n else {\r\n this.course.businessUnitId ? this.newSession.businessUnitId = this.course.businessUnitId :\r\n (this.currentUser.businessUnits ? this.newSession.businessUnitId = this.currentUser.businessUnits[0] :\r\n this.newSession.businessUnitId = null);\r\n }\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#creationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n this.isCreationModalShown = true;\r\n };\r\n CourseWebinarController.prototype.cleanCreationModal = function () {\r\n this.isCreationModalShown = false;\r\n this.newSession = {};\r\n this.newSession.isSelfRegistrationAllowed = true;\r\n if (this.viltSessionSections.length > 0) {\r\n this.newSession.sectionId = this.viltSessionSections[0].id;\r\n }\r\n this.newSession.timezone = TimeZoneType_1.getLocalDefaultTimezone();\r\n this.showEditModal = false;\r\n };\r\n CourseWebinarController.prototype.manage = function (viltSession, provider) {\r\n var _this = this;\r\n this.provider = provider;\r\n this.isDataLoading = true;\r\n angular.copy(viltSession, this.currentVILTSession);\r\n this.showManage = true;\r\n this.showRoster = false;\r\n this.courseService.getCourseUsersForVILTSession(this.courseId, this.currentVILTSession.id).then(function (result) {\r\n angular.copy(result, _this.courseUsers);\r\n });\r\n this.courseService.getCourseUsersWithoutCompletedStatusForVILTSession(this.courseId, this.currentVILTSession.id)\r\n .then(function (result) {\r\n angular.copy(result, _this.courseUsersWithoutCompletedStatus);\r\n }).finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n this.viltSessionParticipantGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/courses/:courseId/viltSessions/:viltSessionId/participants\")\r\n .param(\":courseId\", this.courseId)\r\n .param(\":viltSessionId\", this.currentVILTSession.id)\r\n .service()));\r\n this.viltSessionParticipantGridModel.pageSize = 25;\r\n this.viltSessionParticipantGridModel.loadPage(0);\r\n };\r\n CourseWebinarController.prototype.viewRoster = function (viltSession) {\r\n angular.copy(viltSession, this.currentVILTSession);\r\n this.showManage = false;\r\n this.showRoster = true;\r\n this.viltSessionParticipantGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/courses/:courseId/viltSessions/:viltSessionId/participants\")\r\n .param(\":courseId\", this.courseId)\r\n .param(\":viltSessionId\", this.currentVILTSession.id)\r\n .service()));\r\n this.viltSessionParticipantGridModel.pageSize = 50;\r\n this.viltSessionParticipantGridModel.loadPage(0);\r\n };\r\n CourseWebinarController.prototype.isWebinarRegistrant = function (userId) {\r\n return this.viltSessionParticipantGridModel.entries.some(function (e) { return e.userId === userId; });\r\n };\r\n CourseWebinarController.prototype.isMeetingRegistrant = function (userId) {\r\n return this.viltSessionParticipantGridModel.entries.some(function (e) { return e.userId === userId; });\r\n };\r\n CourseWebinarController.prototype.registerParticipantWebinar = function (userId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n var participant = {};\r\n participant.userId = userId;\r\n this.courseService.createParticipantWebinar(this.courseId, this.currentVILTSession.id, participant)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n })\r\n .catch(function (x) {\r\n if (x.data.description) {\r\n if (x.data.description.search(\"Webinar with specified key does not exis\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to register participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseWebinarController.prototype.registerParticipantMeeting = function (userId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n var participant = {};\r\n participant.userId = userId;\r\n this.courseService.createParticipantMeeting(this.courseId, this.currentVILTSession.id, participant)\r\n .catch(function (x) {\r\n if (x.data) {\r\n if (x.data.search(\"with specified key does not exist\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n else if (x.data.search(\"Email validation failed\") != -1) {\r\n INotifier_1.notifier.error(\"Participant email validation failed\");\r\n }\r\n else if (x.data.search(\"Only available for paid users\") != -1) {\r\n INotifier_1.notifier.error(\"Zoom account of the session creator must be paid\");\r\n }\r\n else {\r\n _this.showErrorNotification(x.data);\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to register participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n });\r\n };\r\n CourseWebinarController.prototype.registerParticipantTeams = function (userId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n var participant = {};\r\n participant.userId = userId;\r\n this.courseService.createParticipantTeams(this.courseId, this.currentVILTSession.id, participant)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n })\r\n .catch(function (error) {\r\n if (error.data && error.data.messageForUser.search(\"vilt.was.cancelled\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else if (error && error.data && error.data.messageForUser) {\r\n INotifier_1.notifier.error(error.data.messageForUser);\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to register participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseWebinarController.prototype.unregisterParticipant = function (userId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n var pId = 0;\r\n this.viltSessionParticipantGridModel.entries.forEach(function (e) {\r\n if (e.userId === userId) {\r\n pId = e.id;\r\n }\r\n });\r\n this.courseService.removeParticipantWebinar(this.courseId, this.currentVILTSession.id, pId)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n })\r\n .catch(function (x) {\r\n if (x.data.description) {\r\n if (x.data.description.search(\"Webinar with specified key does not exist\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseWebinarController.prototype.unregisterParticipantMeeting = function (userId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n var pId = 0;\r\n this.viltSessionParticipantGridModel.entries.forEach(function (e) {\r\n if (e.userId === userId) {\r\n pId = e.id;\r\n }\r\n });\r\n this.courseService.removeParticipantMeeting(this.courseId, this.currentVILTSession.id, pId)\r\n .catch(function (x) {\r\n if (x.data) {\r\n if (x.data.search(\"Meeting does not exist:\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n else {\r\n _this.showErrorNotification(x.data);\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n });\r\n };\r\n CourseWebinarController.prototype.unregisterTeamsParticipant = function (userId) {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n var pId = 0;\r\n this.viltSessionParticipantGridModel.entries.forEach(function (e) {\r\n if (e.userId === userId) {\r\n pId = e.id;\r\n }\r\n });\r\n this.courseService.removeParticipantTeams(this.courseId, this.currentVILTSession.id, pId)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n })\r\n .catch(function (error) {\r\n if (error.data && error.data.messageForUser.search(\"vilt.was.cancelled\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else if (error && error.data && error.data.messageForUser) {\r\n INotifier_1.notifier.error(error.data.messageForUser);\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseWebinarController.prototype.registerAllParticipants = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n if (this.isActiveLearners) {\r\n this.courseService.createAllParticipantWebinarWithoutCompleted(this.courseId, this.currentVILTSession.id)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n })\r\n .catch(function (x) {\r\n if (x.data.description) {\r\n if (x.data.description.search(\"Webinar with specified key does not exist\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to register participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n }\r\n else {\r\n this.courseService.createAllParticipantWebinar(this.courseId, this.currentVILTSession.id)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n })\r\n .catch(function (x) {\r\n if (x.data.description) {\r\n if (x.data.description.search(\"Webinar with specified key does not exist\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to register participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n }\r\n };\r\n CourseWebinarController.prototype.registerAllParticipantsMeeting = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n if (this.isActiveLearners) {\r\n this.courseService.createAllParticipantMeetingWithoutCompletedStatus(this.courseId, this.currentVILTSession.id)\r\n .catch(function (x) {\r\n if (x.data) {\r\n if (x.data.search(\"Meeting does not exist:\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n else {\r\n _this.showErrorNotification(x.data);\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to register participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n });\r\n }\r\n else {\r\n this.courseService.createAllParticipantMeeting(this.courseId, this.currentVILTSession.id)\r\n .catch(function (x) {\r\n if (x.data) {\r\n if (x.data.search(\"Meeting does not exist:\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n else {\r\n _this.showErrorNotification(x.data);\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to register participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n });\r\n }\r\n };\r\n CourseWebinarController.prototype.registerAllParticipantsForTeams = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n if (this.isActiveLearners) {\r\n this.courseService.createAllParticipantTeamsWithoutCompleted(this.courseId, this.currentVILTSession.id)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n }).catch(function (error) {\r\n if (error.data && error.data.messageForUser && error.data.messageForUser.search(\"vilt.was.cancelled\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else if (error && error.data && error.data.messageForUser) {\r\n INotifier_1.notifier.error(error.data.messageForUser);\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to register participant(s). Please try again later or contact support.\");\r\n }\r\n }).finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n }\r\n else {\r\n this.courseService.createAllParticipantTeams(this.courseId, this.currentVILTSession.id)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n }).catch(function (error) {\r\n if (error.data && error.data.messageForUser && error.data.messageForUser.search(\"vilt.was.cancelled\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else if (error && error.data && error.data.messageForUser) {\r\n INotifier_1.notifier.error(error.data.messageForUser);\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to register participant(s). Please try again later or contact support.\");\r\n }\r\n }).finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n }\r\n };\r\n CourseWebinarController.prototype.unregisterAllParticipants = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n if (this.isActiveLearners) {\r\n this.courseService.removeAllParticipantsWebinarWithoutCompleted(this.courseId, this.currentVILTSession.id)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n })\r\n .catch(function (x) {\r\n if (x.data.description) {\r\n if (x.data.description.search(\"Webinar with specified key does not exist\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n }\r\n }).finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n }\r\n else {\r\n this.courseService.removeAllParticipantsWebinar(this.courseId, this.currentVILTSession.id).then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n })\r\n .catch(function (x) {\r\n if (x.data.description) {\r\n if (x.data.description.search(\"Webinar with specified key does not exist\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n }\r\n };\r\n CourseWebinarController.prototype.unregisterAllParticipantsMeeting = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n if (this.isActiveLearners) {\r\n this.courseService.removeAllParticipantsMeetingWithoutCompletedStatus(this.courseId, this.currentVILTSession.id)\r\n .catch(function (x) {\r\n if (x.data) {\r\n if (x.data.search(\"Meeting does not exist:\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n else {\r\n _this.showErrorNotification(x.data);\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n }\r\n }).finally(function () {\r\n _this.isDataLoading = false;\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n });\r\n }\r\n else {\r\n this.courseService.removeAllParticipantsMeeting(this.courseId, this.currentVILTSession.id)\r\n .catch(function (x) {\r\n if (x.data) {\r\n if (x.data.search(\"Meeting does not exist:\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }\r\n else {\r\n _this.showErrorNotification(x.data);\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n });\r\n }\r\n };\r\n CourseWebinarController.prototype.unregisterAllParticipantsForTeams = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n if (this.isActiveLearners) {\r\n this.courseService.removeAllParticipantsTeamsWithoutCompleted(this.courseId, this.currentVILTSession.id)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n }).catch(function (error) {\r\n if (error.data && error.data.messageForUser.search(\"vilt.was.cancelled\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else if (error && error.data && error.data.messageForUser) {\r\n INotifier_1.notifier.error(error.data.messageForUser);\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n }\r\n }).finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n }\r\n else {\r\n this.courseService.removeAllParticipantsTeams(this.courseId, this.currentVILTSession.id)\r\n .then(function () {\r\n _this.viltSessionParticipantGridModel.loadPage(0);\r\n }).catch(function (error) {\r\n if (error.data && error.data.messageForUser.search(\"vilt.was.cancelled\") != -1) {\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n }\r\n else if (error && error.data && error.data.messageForUser) {\r\n INotifier_1.notifier.error(error.data.messageForUser);\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n }\r\n }).finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n }\r\n };\r\n CourseWebinarController.prototype.cancelWebinar = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseService.cancelWebinar(this.courseId, this.currentVILTSession.id).then(function (x) {\r\n _this.courseUsers = [];\r\n _this.courseUsersWithoutCompletedStatus = [];\r\n INotifier_1.notifier.success(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n })\r\n .catch(function (x) {\r\n if (x.data.description) {\r\n if (x.data.description.search(\"cancel webinar because it is currently in session\") != -1) {\r\n INotifier_1.notifier.error(\"Failed to cancel vILT session because it is currently in session.\");\r\n _this.currentVILTSession.status = \"ONGOING\";\r\n }\r\n else if (x.data.description.search(\"Webinar with specified key does not exist\") != -1) {\r\n INotifier_1.notifier.success(\"The vILT session has been cancelled\");\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to cancel vILT session. Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseWebinarController.prototype.cancelMeeting = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseService.cancelMeeting(this.courseId, this.currentVILTSession.id).then(function (x) {\r\n _this.courseUsers = [];\r\n _this.courseUsersWithoutCompletedStatus = [];\r\n INotifier_1.notifier.success(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n })\r\n .catch(function (x) {\r\n if (x.data) {\r\n if (x.data.search(\"Sorry, you cannot delete this meeting since it's in progress.\") != -1) {\r\n INotifier_1.notifier.error(\"Failed to cancel vILT session because it is currently in session.\");\r\n _this.currentVILTSession.status = \"ONGOING\";\r\n }\r\n else if (x.data.search(\"Meeting does not exist:\") != -1) {\r\n INotifier_1.notifier.success(\"The vILT session has been cancelled\");\r\n }\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to cancel vILT session. Please try again later or contact support.\");\r\n }\r\n })\r\n .finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseWebinarController.prototype.cancelTeamsEvent = function () {\r\n var _this = this;\r\n this.isDataLoading = true;\r\n this.courseService.cancelTeamsEvent(this.courseId, this.currentVILTSession.sectionId, this.currentVILTSession.id)\r\n .then(function (x) {\r\n _this.courseUsers = [];\r\n _this.courseUsersWithoutCompletedStatus = [];\r\n INotifier_1.notifier.success(\"The vILT session has been cancelled\");\r\n _this.showStartWindow();\r\n }).catch(function (error) {\r\n if (error && error.data && error.data.messageForUser) {\r\n INotifier_1.notifier.error(error.data.messageForUser);\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to cancel vILT session. Please try again later or contact support.\");\r\n }\r\n }).finally(function () {\r\n _this.isDataLoading = false;\r\n });\r\n };\r\n CourseWebinarController.prototype.showStartWindow = function () {\r\n this.viltSessionsGridModel.loadPage(0);\r\n if (this.showManage) {\r\n this.loadAttendeesCount();\r\n this.updateAttendeesCount();\r\n }\r\n this.showRoster = false;\r\n this.showManage = false;\r\n this.courseUsers = [];\r\n this.courseUsersWithoutCompletedStatus = [];\r\n };\r\n CourseWebinarController.prototype.isDataValid = function () {\r\n this.calculateOffset();\r\n if (!this.newSession.startTime || !this.newSession.endTime) {\r\n return false;\r\n }\r\n var start_time = Moment_1.Moment.textToJavaDate(this.newSession.startTime, \"hh:mm a\") - new Date().getTimezoneOffset() * 60000;\r\n start_time = start_time - Math.floor((start_time / 86400000)) * 86400000;\r\n var one = (new Date().getTime() + new Date().getTimezoneOffset() * 60000 - this.timeOffset) < (Moment_1.Moment.textToJavaDate(this.newSession.date) + start_time);\r\n var end_time = Moment_1.Moment.textToJavaDate(this.newSession.endTime, \"hh:mm a\") - new Date().getTimezoneOffset() * 60000;\r\n end_time = end_time - Math.floor((end_time / 86400000)) * 86400000;\r\n var two = (new Date().getTime() + new Date().getTimezoneOffset() * 60000 - this.timeOffset) < (Moment_1.Moment.textToJavaDate(this.newSession.date) + end_time);\r\n var tree = start_time < end_time;\r\n var four = !!this.newSession.endTime;\r\n var five = true;\r\n if (this.newSession.meetingSettings != null && this.newSession.meetingSettings.meetingPassword != null) {\r\n five =\r\n !this.newSession.meetingSettings.meetingPassword ||\r\n this.newSession.meetingSettings.meetingPassword && this.newSession.meetingSettings.meetingPasscode && this.newSession.meetingSettings.meetingPasscode.length > 0;\r\n }\r\n var six = this.newSession.sectionId != undefined;\r\n return one && two && tree && four && five && six;\r\n };\r\n CourseWebinarController.prototype.calculateOffset = function () {\r\n var _this = this;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == _this.newSession.timezone.toString()) {\r\n _this.timeOffset = CourseWebinarController.getTimeZoneOffset(t.value);\r\n }\r\n });\r\n };\r\n CourseWebinarController.prototype.getAbbriviation = function (timeZone) {\r\n var abbreviation;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == timeZone) {\r\n abbreviation = t.abbreviation;\r\n }\r\n });\r\n return abbreviation;\r\n };\r\n CourseWebinarController.prototype.dateToTimeZoneDate = function (timeZone, date) {\r\n var offset;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == timeZone) {\r\n offset = CourseWebinarController.getTimeZoneOffset(t.value);\r\n }\r\n });\r\n return (date + new Date().getTimezoneOffset() * 60000 - offset);\r\n };\r\n CourseWebinarController.prototype.isAbleToEdit = function (webinarBU) {\r\n return this.currentUser.allBusinessUnits ||\r\n (!!this.currentUser.businessUnits && this.currentUser.businessUnits.some(function (bu) { return bu === webinarBU; }));\r\n };\r\n CourseWebinarController.getTimeZoneOffset = function (timeZone) {\r\n var now = new Date();\r\n var localTime = Math.floor((now.getTime() / 1000)) * 1000;\r\n var timeZoneTime = new Date(now.toLocaleString(\"en-US\", { timeZone: timeZone })).getTime();\r\n return now.getTimezoneOffset() * 60000 + (localTime - timeZoneTime);\r\n };\r\n CourseWebinarController.prototype.receiveAttendeeFromTeams = function () {\r\n this.courseService.getViltTeamsSessionParticipants(this.courseId, this.currentVILTSession.id)\r\n .then(function () { return INotifier_1.notifier.success(\"Teams participants was updated\"); })\r\n .catch(function () { return INotifier_1.notifier.error(\"Failed to update vILT session. Please try again later or contact support.\"); });\r\n };\r\n CourseWebinarController.prototype.showErrorNotification = function (errorCode) {\r\n switch (errorCode) {\r\n case \"vilt.was.cancelled\":\r\n INotifier_1.notifier.error(\"The vILT session has been cancelled\");\r\n break;\r\n case \"vilt.unable.to.unregister.participant\":\r\n INotifier_1.notifier.error(\"Failed to unregister participant(s). Please try again later or contact support.\");\r\n break;\r\n default:\r\n INotifier_1.notifier.error(errorCode);\r\n }\r\n };\r\n CourseWebinarController.prototype.decodeStatus = function (title) {\r\n var result = title;\r\n switch (title) {\r\n case \"scheduled\": {\r\n result = \"scheduled\";\r\n break;\r\n }\r\n case \"finished\": {\r\n result = \"finished\";\r\n break;\r\n }\r\n case \"cancelled\": {\r\n result = \"cancelled\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n CourseWebinarController.NAME = \"courses.CourseWebinarController\";\r\n CourseWebinarController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$window\",\r\n \"$q\",\r\n \"$timeout\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n Storage_1.Storages.SESSION_NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n AuthService_1.AuthService.NAME\r\n ];\r\n return CourseWebinarController;\r\n})();\r\nexports.CourseWebinarController = CourseWebinarController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../infrastructure/Storage\":295,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/Moment\":518,\"../utils/UrlService\":528,\"../webinars/models/TimeZoneType\":530,\"./CourseService\":211,\"./ProgressService\":219,\"./models/CourseProgressStatus\":222}],215:[function(require,module,exports){\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar PersonalService_1 = require(\"../personal/PersonalService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar CommonHomeService_1 = require(\"../common/CommonHomeService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar CoursesController = (function () {\r\n function CoursesController($scope, $rootScope, $http, $location, $window, coursesRouter, permissionsApi, authManager, url, personalService, brandingService, authRedirect, commonHomeService, commonFilterService, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.coursesRouter = coursesRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.url = url;\r\n this.personalService = personalService;\r\n this.brandingService = brandingService;\r\n this.authRedirect = authRedirect;\r\n this.commonHomeService = commonHomeService;\r\n this.commonFilterService = commonFilterService;\r\n this.userService = userService;\r\n this.SUBJECT_MODULE = 'subject';\r\n this.COMPLEXITY_LEVEL_MODULE = 'complexityLevel';\r\n this.LANGUAGE_MODULE = 'language';\r\n this.SOURCE_MODULE = 'source';\r\n this.STUDENT_MODULE = 'student';\r\n this.DEFAULT_TOP_MENU_ITEM = 'course';\r\n this.selectedItemInModule = new Map();\r\n this.rowShow = new Map();\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n this.countActiveFilter = 0;\r\n this.topStatus = 'ALL';\r\n this.showExpired = false;\r\n this.coursesUrl = \"/api/courses/search\";\r\n this.dummyArray = [];\r\n this.purchasedOrderId = parseInt($location.search()[CoursesRouter_1.CoursesRouter.PURCHASED_ORDER]) || null;\r\n this.selectedItemInModule.set(this.SUBJECT_MODULE, 0);\r\n this.selectedItemInModule.set(this.COMPLEXITY_LEVEL_MODULE, 0);\r\n this.selectedItemInModule.set(this.LANGUAGE_MODULE, 0);\r\n this.selectedItemInModule.set(this.SOURCE_MODULE, 0);\r\n this.selectedItemInModule.set(this.STUDENT_MODULE, 1);\r\n this.menuKey = {\r\n topMenu: this.DEFAULT_TOP_MENU_ITEM\r\n };\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.loadUserProfile();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Courses\").update();\r\n if (this.isAuthenticated) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n else {\r\n if ($location.search()[CoursesRouter_1.CoursesRouter.LOGON_REQUIRED]) {\r\n authRedirect.redirectToLogOn();\r\n }\r\n }\r\n this.window = angular.element(this.$window);\r\n this.initDummyArray();\r\n this.updateGrid();\r\n this.coursesGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n setTimeout(function () {\r\n _this.setPopupClasses();\r\n }, 0);\r\n }\r\n });\r\n }\r\n CoursesController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(CoursesController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.coursesGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(CoursesController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n }\r\n var topStatus = this.commonFilterService.getTopStatus(CoursesController.NAME);\r\n if (topStatus) {\r\n this.topStatus = topStatus;\r\n this.applyTopStatus(topStatus);\r\n }\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n CoursesController.prototype.updateTopStatus = function (status) {\r\n this.commonFilterService.saveTopStatus(CoursesController.NAME, status);\r\n this.topStatus = status;\r\n this.applyTopStatus(status);\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n CoursesController.prototype.applyTopStatus = function (status) {\r\n switch (status) {\r\n case 'ALL':\r\n this.coursesGridModel.filter.courseStatus = \"NOT_STARTED,IN_PROGRESS,COMPLETED\";\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n break;\r\n case 'NOT_STARTED':\r\n this.coursesGridModel.filter.courseStatus = \"NOT_STARTED\";\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = false;\r\n this.completedStatus = false;\r\n break;\r\n case 'IN_PROGRESS':\r\n this.coursesGridModel.filter.courseStatus = \"IN_PROGRESS\";\r\n this.notStartedStatus = false;\r\n this.inProgressStatus = true;\r\n this.completedStatus = false;\r\n break;\r\n case 'COMPLETED':\r\n this.coursesGridModel.filter.courseStatus = \"COMPLETED\";\r\n this.notStartedStatus = false;\r\n this.inProgressStatus = false;\r\n this.completedStatus = true;\r\n break;\r\n }\r\n };\r\n CoursesController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n CoursesController.prototype.setSearch = function (module, item) {\r\n if (this.selectedItemInModule.get(module) == item) {\r\n this.selectedItemInModule.set(module, 0);\r\n }\r\n else {\r\n this.selectedItemInModule.set(module, item);\r\n }\r\n this.searchCourse();\r\n };\r\n CoursesController.prototype.isSearchItemActive = function (module, searchItem) {\r\n return this.selectedItemInModule.get(module) == searchItem;\r\n };\r\n CoursesController.prototype.isSearchItemHide = function (module, searchItem) {\r\n return !!(this.selectedItemInModule.get(module) != 0 && this.selectedItemInModule.get(module) != searchItem);\r\n };\r\n CoursesController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.menuKey.topMenu == topMenuKey;\r\n };\r\n CoursesController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n CoursesController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n CoursesController.prototype.searchCourse = function () {\r\n this.coursesGridModel.loadPage(0);\r\n };\r\n CoursesController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.searchString\")) {\r\n this.coursesGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.viewType\")) {\r\n this.coursesGridModel.filter.viewType = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.viewType\"));\r\n this.viewType = this.coursesGridModel.filter.viewType;\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.subjectId\")) {\r\n this.coursesGridModel.filter.subjectId = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.subjectId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.complexityLevel\")) {\r\n this.coursesGridModel.filter.complexityLevel = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.complexityLevel\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.languageId\")) {\r\n this.coursesGridModel.filter.languageId = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.languageId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.sourceId\")) {\r\n this.coursesGridModel.filter.sourceId = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.sourceId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.courseStatus\")) {\r\n var courseStatusSessionList = sessionStorage.getItem(\"vhsCoursesFilter.courseStatus\").split(\",\");\r\n this.coursesGridModel.filter.courseStatus = courseStatusSessionList;\r\n this.notStartedStatus = courseStatusSessionList.indexOf('NOT_STARTED') >= 0;\r\n this.inProgressStatus = courseStatusSessionList.indexOf('IN_PROGRESS') >= 0;\r\n this.completedStatus = courseStatusSessionList.indexOf('COMPLETED') >= 0;\r\n }\r\n else {\r\n this.coursesGridModel.filter.courseStatus = this.getCourseStatusList();\r\n sessionStorage.setItem(\"vhsCoursesFilter.courseStatus\", \"NOT_STARTED,IN_PROGRESS,COMPLETED\");\r\n }\r\n this.coursesGridModel.filter.showExpired = this.showExpired;\r\n };\r\n CoursesController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, CoursesController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n CoursesController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.showExpired = false;\r\n this.commonFilterService.clearFilter(CoursesController.NAME, this.coursesGridModel);\r\n };\r\n CoursesController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(CoursesController.NAME, this.searchInput);\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n CoursesController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(CoursesController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n }\r\n };\r\n CoursesController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n CoursesController.prototype.clearSearch = function () {\r\n this.coursesGridModel.filter.searchString = null;\r\n this.coursesGridModel.filter.viewType = null;\r\n this.coursesGridModel.filter.subjectId = null;\r\n this.coursesGridModel.filter.complexityLevel = null;\r\n this.coursesGridModel.filter.languageId = null;\r\n this.coursesGridModel.filter.sourceId = null;\r\n this.coursesGridModel.filter.showExpired = false;\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n this.coursesGridModel.filter.courseStatus = this.getCourseStatusList();\r\n this.viewType = this.userProfile ?\r\n Number(this.userProfile.pageViewMode) : 1;\r\n sessionStorage.removeItem(\"vhsCoursesFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.viewType\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.complexityLevel\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.languageId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.sourceId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.courseStatus\");\r\n this.coursesGridModel.loadPage(0);\r\n };\r\n CoursesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n CoursesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n CoursesController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n CoursesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n CoursesController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsCoursesFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsCoursesFilter.\" + key);\r\n }\r\n };\r\n CoursesController.prototype.setCourseStatusFilter = function () {\r\n var statusList = this.getCourseStatusList();\r\n this.coursesGridModel.filter.courseStatus = statusList;\r\n sessionStorage.setItem(\"vhsCoursesFilter.courseStatus\", statusList.join(\",\"));\r\n this.coursesGridModel.loadPage(0);\r\n };\r\n CoursesController.prototype.getCourseStatusList = function () {\r\n var statusList = [];\r\n if (this.notStartedStatus === true) {\r\n statusList.push('NOT_STARTED');\r\n }\r\n if (this.inProgressStatus === true) {\r\n statusList.push('IN_PROGRESS');\r\n }\r\n if (this.completedStatus === true) {\r\n statusList.push('COMPLETED');\r\n }\r\n return statusList;\r\n };\r\n CoursesController.prototype.updateGrid = function () {\r\n var _this = this;\r\n this.coursesUrl = this.purchasedOrderId != null\r\n ? \"/api/courses/search/purchased?purchasedOrder=\" + this.purchasedOrderId\r\n : \"/api/courses/search\";\r\n this.coursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(this.coursesUrl)));\r\n this.getStorageFilters();\r\n if (window.innerWidth < 1200) {\r\n this.coursesGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.coursesGridModel.pageSize = 9;\r\n }\r\n this.setCourseStatusFilter();\r\n this.loadSearch();\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window.bind('resize', function () {\r\n var currentPage = _this.coursesGridModel.currentPage >= _this.coursesGridModel.totalPageCount\r\n ? _this.coursesGridModel.currentPage - 1\r\n : _this.coursesGridModel.currentPage;\r\n if (window.innerWidth < 1200) {\r\n _this.coursesGridModel.pageSize = 10;\r\n _this.coursesGridModel.loadPage(currentPage);\r\n }\r\n else {\r\n _this.coursesGridModel.pageSize = 9;\r\n _this.coursesGridModel.loadPage(currentPage);\r\n }\r\n _this.viewType = 1;\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n };\r\n CoursesController.prototype.getCourseDatesString = function (course) {\r\n var courseDates = new Map();\r\n if (course.endDate) {\r\n courseDates.set(\"endDate\", new Date(course.endDate).toLocaleDateString());\r\n }\r\n if (!course.endDate || course.startDate > Date.now()) {\r\n courseDates.set(\"startDate\", new Date(course.startDate).toLocaleDateString());\r\n }\r\n return courseDates;\r\n };\r\n CoursesController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (rec.right + popup.clientWidth >= document.body.clientWidth) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n CoursesController.prototype.initDummyArray = function () {\r\n for (var i = 0; i < 10; i++) {\r\n this.dummyArray.push(i);\r\n }\r\n };\r\n CoursesController.prototype.getCourseProgressClass = function (courseProgressStatus) {\r\n switch (courseProgressStatus) {\r\n case \"COMPLETED\":\r\n return 'status-complete';\r\n case \"STARTED\":\r\n return 'status-in-progress';\r\n default:\r\n return 'status-new';\r\n }\r\n };\r\n CoursesController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n CoursesController.NAME = \"courses.CoursesController\";\r\n CoursesController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n CommonHomeService_1.CommonHomeService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return CoursesController;\r\n})();\r\nexports.CoursesController = CoursesController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../branding/CustomBrandingService\":35,\"../common/CommonFilterService\":49,\"../common/CommonHomeService\":50,\"../personal/PersonalService\":377,\"../security/PermissionsService\":418,\"../urls/CoursesRouter\":468,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528}],216:[function(require,module,exports){\nvar SecurityModule_1 = require(\"./../security/SecurityModule\");\r\nvar AuthCoreModule_1 = require(\"./../authcore/AuthCoreModule\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nvar QuizzesModule_1 = require(\"./../quizzes/QuizzesModule\");\r\nvar BundlesModule_1 = require(\"../bundles/BundlesModule\");\r\nvar NotificationModule_1 = require(\"../notificationTemplates/NotificationModule\");\r\nvar CourseService_1 = require(\"./CourseService\");\r\nvar ProgressService_1 = require(\"./ProgressService\");\r\nvar CoursesController_1 = require(\"./CoursesController\");\r\nvar CourseDetailsController_1 = require(\"./CourseDetailsController\");\r\nvar CourseProgressController_1 = require(\"./CourseProgressController\");\r\nvar CourseInfoController_1 = require(\"./CourseInfoController\");\r\nvar CourseDiscussionController_1 = require(\"./CourseDiscussionController\");\r\nvar CourseCreateEditController_1 = require(\"./CourseCreateEditController\");\r\nvar CourseStructureEditController_1 = require(\"./CourseStructureEditController\");\r\nvar CourseBundleEditController_1 = require(\"./CourseBundleEditController\");\r\nvar CourseParticipationFormEditController_1 = require(\"./CourseParticipationFormEditController\");\r\nvar CourseLandingPageEditController_1 = require(\"./CourseLandingPageEditController\");\r\nvar CourseExportImportEditController_1 = require(\"./CourseExportImportEditController\");\r\nvar QuizDetailsController_1 = require(\"./QuizDetailsController\");\r\nvar CoursePermissionsDelegationController_1 = require(\"./CoursePermissionsDelegationController\");\r\nvar StatisticsModule_1 = require(\"../statistics/StatisticsModule\");\r\nvar CertificatesCreateEditController_1 = require(\"../certificates/CertificatesCreateEditController\");\r\nvar CertificatesController_1 = require(\"../certificates/CertificatesController\");\r\nvar CertificateService_1 = require(\"../certificates/CertificateService\");\r\nvar CourseSurveyResultsController_1 = require(\"./CourseSurveyResultsController\");\r\nvar CourseWebinarController_1 = require(\"./CourseWebinarController\");\r\nvar CourseRelatedProductsEditController_1 = require(\"./CourseRelatedProductsEditController\");\r\nvar CourseILTController_1 = require(\"./CourseILTController\");\r\nvar CourseILTService_1 = require(\"./CourseILTService\");\r\nvar EnrollmentCreateEditController_1 = require(\"./EnrollmentCreateEditController\");\r\nvar EnrollmentDetailsController_1 = require(\"./EnrollmentDetailsController\");\r\nvar CourseNotificationDetailsController_1 = require(\"./CourseNotificationDetailsController\");\r\nvar CourseNotificationDetailsEditController_1 = require(\"./CourseNotificationDetailsEditController\");\r\nvar UserNotesService_1 = require(\"./UserNotesService\");\r\nvar SlideService_1 = require(\"../slides/SlideService\");\r\nvar SlidesController_1 = require(\"../slides/SlidesController\");\r\nvar SlidesCreateEditController_1 = require(\"../slides/SlidesCreateEditController\");\r\nvar SlidesBundleEditController_1 = require(\"../slides/SlidesBundleEditController\");\r\nvar CourseGamificationDetailsController_1 = require(\"./CourseGamificationDetailsController\");\r\nvar GamificationModule_1 = require(\"../gamification/GamificationModule\");\r\nvar GamificationService_1 = require(\"../gamification/GamificationService\");\r\nexports.CoursesModule = angular\r\n .module(\"courses\", [\r\n SecurityModule_1.SecurityModule.name,\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n QuizzesModule_1.QuizzesModule.name,\r\n BundlesModule_1.BundlesModule.name,\r\n StatisticsModule_1.StatisticsModule.name,\r\n NotificationModule_1.NotificationModule.name,\r\n GamificationModule_1.GamificationModule.name\r\n])\r\n .service(CourseService_1.CourseService.NAME, CourseService_1.CourseService)\r\n .service(ProgressService_1.ProgressService.NAME, ProgressService_1.ProgressService)\r\n .service(CertificateService_1.CertificateService.NAME, CertificateService_1.CertificateService)\r\n .service(CourseILTService_1.CourseILTService.NAME, CourseILTService_1.CourseILTService)\r\n .service(UserNotesService_1.UserNotesService.NAME, UserNotesService_1.UserNotesService)\r\n .service(SlideService_1.SlideService.NAME, SlideService_1.SlideService)\r\n .service(GamificationService_1.GamificationService.NAME, GamificationService_1.GamificationService)\r\n .controller(CoursesController_1.CoursesController.NAME, CoursesController_1.CoursesController)\r\n .controller(CourseDetailsController_1.CourseDetailsController.NAME, CourseDetailsController_1.CourseDetailsController)\r\n .controller(CourseProgressController_1.CourseProgressController.NAME, CourseProgressController_1.CourseProgressController)\r\n .controller(CourseWebinarController_1.CourseWebinarController.NAME, CourseWebinarController_1.CourseWebinarController)\r\n .controller(CourseInfoController_1.CourseInfoController.NAME, CourseInfoController_1.CourseInfoController)\r\n .controller(CourseDiscussionController_1.CourseDiscussionController.NAME, CourseDiscussionController_1.CourseDiscussionController)\r\n .controller(CourseCreateEditController_1.CourseCreateEditController.NAME, CourseCreateEditController_1.CourseCreateEditController)\r\n .controller(CourseStructureEditController_1.CourseStructureEditController.NAME, CourseStructureEditController_1.CourseStructureEditController)\r\n .controller(CourseBundleEditController_1.CourseBundleEditController.NAME, CourseBundleEditController_1.CourseBundleEditController)\r\n .controller(CourseParticipationFormEditController_1.CourseParticipationFormEditController.NAME, CourseParticipationFormEditController_1.CourseParticipationFormEditController)\r\n .controller(CourseLandingPageEditController_1.CourseLandingPageEditController.NAME, CourseLandingPageEditController_1.CourseLandingPageEditController)\r\n .controller(CourseExportImportEditController_1.CourseExportImportEditController.NAME, CourseExportImportEditController_1.CourseExportImportEditController)\r\n .controller(QuizDetailsController_1.QuizDetailsController.NAME, QuizDetailsController_1.QuizDetailsController)\r\n .controller(CertificatesController_1.CertificatesController.NAME, CertificatesController_1.CertificatesController)\r\n .controller(CertificatesCreateEditController_1.CertificatesCreateEditController.NAME, CertificatesCreateEditController_1.CertificatesCreateEditController)\r\n .controller(CoursePermissionsDelegationController_1.CoursePermissionsDelegationController.NAME, CoursePermissionsDelegationController_1.CoursePermissionsDelegationController)\r\n .controller(CourseSurveyResultsController_1.CourseSurveyResultsController.NAME, CourseSurveyResultsController_1.CourseSurveyResultsController)\r\n .controller(CourseRelatedProductsEditController_1.CourseRelatedProductsEditController.NAME, CourseRelatedProductsEditController_1.CourseRelatedProductsEditController)\r\n .controller(CourseILTController_1.CourseILTController.NAME, CourseILTController_1.CourseILTController)\r\n .controller(CourseRelatedProductsEditController_1.CourseRelatedProductsEditController.NAME, CourseRelatedProductsEditController_1.CourseRelatedProductsEditController)\r\n .controller(EnrollmentCreateEditController_1.EnrollmentCreateEditController.NAME, EnrollmentCreateEditController_1.EnrollmentCreateEditController)\r\n .controller(EnrollmentDetailsController_1.EnrollmentDetailsController.NAME, EnrollmentDetailsController_1.EnrollmentDetailsController)\r\n .controller(CourseNotificationDetailsController_1.CourseNotificationDetailsController.NAME, CourseNotificationDetailsController_1.CourseNotificationDetailsController)\r\n .controller(CourseNotificationDetailsEditController_1.CourseNotificationDetailsEditController.NAME, CourseNotificationDetailsEditController_1.CourseNotificationDetailsEditController)\r\n .controller(CourseGamificationDetailsController_1.CourseGamificationDetailsController.NAME, CourseGamificationDetailsController_1.CourseGamificationDetailsController)\r\n .controller(SlidesController_1.SlidesController.NAME, SlidesController_1.SlidesController)\r\n .controller(SlidesCreateEditController_1.SlidesCreateEditController.NAME, SlidesCreateEditController_1.SlidesCreateEditController)\r\n .controller(SlidesBundleEditController_1.SlidesBundleEditController.NAME, SlidesBundleEditController_1.SlidesBundleEditController);\r\n},{\"../bundles/BundlesModule\":37,\"../certificates/CertificateService\":45,\"../certificates/CertificatesController\":46,\"../certificates/CertificatesCreateEditController\":47,\"../gamification/GamificationModule\":249,\"../gamification/GamificationService\":250,\"../notificationTemplates/NotificationModule\":359,\"../slides/SlideService\":435,\"../slides/SlidesBundleEditController\":436,\"../slides/SlidesController\":437,\"../slides/SlidesCreateEditController\":438,\"../statistics/StatisticsModule\":449,\"./../authcore/AuthCoreModule\":24,\"./../quizzes/QuizzesModule\":398,\"./../security/SecurityModule\":419,\"./../urls/UrlsModule\":492,\"./CourseBundleEditController\":192,\"./CourseCreateEditController\":193,\"./CourseDetailsController\":194,\"./CourseDiscussionController\":196,\"./CourseExportImportEditController\":197,\"./CourseGamificationDetailsController\":198,\"./CourseILTController\":199,\"./CourseILTService\":200,\"./CourseInfoController\":201,\"./CourseLandingPageEditController\":202,\"./CourseNotificationDetailsController\":203,\"./CourseNotificationDetailsEditController\":204,\"./CourseParticipationFormEditController\":205,\"./CoursePermissionsDelegationController\":206,\"./CourseProgressController\":207,\"./CourseRelatedProductsEditController\":208,\"./CourseService\":211,\"./CourseStructureEditController\":212,\"./CourseSurveyResultsController\":213,\"./CourseWebinarController\":214,\"./CoursesController\":215,\"./EnrollmentCreateEditController\":217,\"./EnrollmentDetailsController\":218,\"./ProgressService\":219,\"./QuizDetailsController\":220,\"./UserNotesService\":221}],217:[function(require,module,exports){\nvar CourseService_1 = require(\"./CourseService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar EnrollmentCreateEditController = (function () {\r\n function EnrollmentCreateEditController(scope, routeParams, $rootScope, courseService, securityService, authService, authManager, permissionsService, coursesRouter, dialogService) {\r\n var _this = this;\r\n this.scope = scope;\r\n this.routeParams = routeParams;\r\n this.$rootScope = $rootScope;\r\n this.courseService = courseService;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.coursesRouter = coursesRouter;\r\n this.dialogService = dialogService;\r\n this.isApprovalRequiredDefaultValue = false;\r\n this.isAutoEnrollFromWaitlistDefaultValue = true;\r\n this.isSaveProceed = false;\r\n this.courseId = routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n var courseIdStr = String(this.courseId);\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissionsIf(!!this.courseId, courseIdStr, function (coursePermissions) { return coursePermissions.edit; });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.authService.getCurrentUser()\r\n .then(function (u) { return _this.currentUser = u; });\r\n this.courseService.get(this.courseId).then(function (course) {\r\n _this.course = course;\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter);\r\n });\r\n courseService.getEnrollmentConfigurationForCourse(this.courseId)\r\n .then(function (config) {\r\n if (!!config) {\r\n _this.enrollConfig = config;\r\n _this.enrollConfig.isStartDateEnable = !!config.startDate;\r\n _this.enrollConfig.isEndDateEnable = !!config.endDate;\r\n _this.enrollConfig.startDateText = Moment_1.Moment.isValidDate(config.startDate);\r\n _this.enrollConfig.endDateText = Moment_1.Moment.isValidDate(config.endDate);\r\n }\r\n });\r\n }\r\n EnrollmentCreateEditController.prototype.initializeEnrollmentConfig = function () {\r\n var currentTime = new Date().getTime();\r\n this.enrollConfig = {\r\n isAllowNewEnrollments: true,\r\n isAllowSelfEnrollments: true,\r\n isApprovalRequirement: this.isApprovalRequiredDefaultValue,\r\n isStartDateEnable: false,\r\n isEndDateEnable: false,\r\n isEnableWaitlist: true,\r\n isAutoEnrollFromWaitlist: this.isAutoEnrollFromWaitlistDefaultValue,\r\n };\r\n };\r\n EnrollmentCreateEditController.prototype.onStartDateCheckboxChange = function () {\r\n this.enrollConfig.startDateText = this.enrollConfig.isStartDateEnable\r\n ? Moment_1.Moment.isValidDate(new Date().getTime())\r\n : undefined;\r\n };\r\n EnrollmentCreateEditController.prototype.onEndDateCheckboxChange = function () {\r\n this.enrollConfig.endDateText = this.enrollConfig.isEndDateEnable\r\n ? Moment_1.Moment.isValidDate(new Date().getTime())\r\n : undefined;\r\n };\r\n EnrollmentCreateEditController.prototype.onChangeSelfEnrollments = function () {\r\n this.enrollConfig.isApprovalRequirement = this.enrollConfig.isAllowSelfEnrollments\r\n ? this.isApprovalRequiredDefaultValue\r\n : false;\r\n };\r\n EnrollmentCreateEditController.prototype.onChangeWaitlist = function () {\r\n this.enrollConfig.isAutoEnrollFromWaitlist = this.enrollConfig.isEnableWaitlist\r\n ? this.isAutoEnrollFromWaitlistDefaultValue\r\n : false;\r\n };\r\n EnrollmentCreateEditController.prototype.save = function () {\r\n var _this = this;\r\n this.isSaveProceed = true;\r\n this.enrollConfig.startDate = this.enrollConfig.isStartDateEnable && !!this.enrollConfig.startDateText\r\n ? Moment_1.Moment.textToJavaDate(this.enrollConfig.startDateText)\r\n : null;\r\n this.enrollConfig.endDate = this.enrollConfig.isEndDateEnable && !!this.enrollConfig.endDateText\r\n ? Moment_1.Moment.textToJavaDate(this.enrollConfig.endDateText)\r\n : null;\r\n var savePromise = !this.enrollConfig.id\r\n ? this.courseService.createEnrollmentConfigurationForCourse(this.courseId, this.enrollConfig)\r\n : this.courseService.updateEnrollmentConfigurationForCourse(this.courseId, this.enrollConfig);\r\n savePromise\r\n .then(function (result) {\r\n _this.enrollConfig = result;\r\n _this.enrollConfig.isStartDateEnable = !!result.startDate;\r\n _this.enrollConfig.isEndDateEnable = !!result.endDate;\r\n _this.enrollConfig.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n _this.enrollConfig.endDateText = Moment_1.Moment.isValidDate(result.endDate);\r\n })\r\n .finally(function () {\r\n _this.isSaveProceed = false;\r\n INotifier_1.notifier.success(\"Modifications of the course have been saved\");\r\n });\r\n };\r\n EnrollmentCreateEditController.prototype.isValid = function () {\r\n return this.isDatesValid() && this.isMinMaxValid();\r\n };\r\n EnrollmentCreateEditController.prototype.isDatesValid = function () {\r\n return !this.enrollConfig.isStartDateEnable || !this.enrollConfig.isEndDateEnable ||\r\n (!!Moment_1.Moment.textToJavaDate(this.enrollConfig.startDateText) && !!Moment_1.Moment.textToJavaDate(this.enrollConfig.endDateText)\r\n && moment(Moment_1.Moment.textToJavaDate(this.enrollConfig.startDateText)).subtract(1, 'ms')\r\n .isBefore(Moment_1.Moment.textToJavaDate(this.enrollConfig.endDateText)));\r\n };\r\n EnrollmentCreateEditController.prototype.isMinValid = function () {\r\n return this.enrollConfig.minEnrollment === null || this.enrollConfig.minEnrollment === undefined\r\n || (this.enrollConfig.minEnrollment > 0\r\n && (this.enrollConfig.maxEnrollment === null || this.enrollConfig.maxEnrollment === undefined\r\n || this.enrollConfig.minEnrollment < this.enrollConfig.maxEnrollment));\r\n };\r\n EnrollmentCreateEditController.prototype.isMaxValid = function () {\r\n return this.enrollConfig.maxEnrollment === null || this.enrollConfig.maxEnrollment === undefined\r\n || (this.enrollConfig.maxEnrollment > 0\r\n && (this.enrollConfig.minEnrollment === null || this.enrollConfig.minEnrollment === undefined\r\n || this.enrollConfig.minEnrollment < this.enrollConfig.maxEnrollment));\r\n };\r\n EnrollmentCreateEditController.prototype.reloadEnrollment = function () {\r\n window.location.reload(true);\r\n };\r\n EnrollmentCreateEditController.prototype.isMinMaxValid = function () {\r\n return this.isMinValid() && this.isMaxValid();\r\n };\r\n EnrollmentCreateEditController.prototype.isInit = function (prop) {\r\n return prop != null && prop != undefined;\r\n };\r\n EnrollmentCreateEditController.prototype.deleteEnrollmentConfiguration = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Do you want to remove enrollment configuration?\", {\r\n title: \"Remove enrollment configuration\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n }).then(function () {\r\n if (_this.enrollConfig && _this.enrollConfig.id) {\r\n _this.courseService.deleteEnrollmentConfigurationForCourse(_this.courseId)\r\n .then(function () {\r\n _this.enrollConfig = null;\r\n INotifier_1.notifier.success(\"Enrollment configuration successfully removed\");\r\n });\r\n }\r\n else if (_this.enrollConfig && !_this.enrollConfig.id) {\r\n _this.enrollConfig = null;\r\n INotifier_1.notifier.success(\"Enrollment configuration successfully removed\");\r\n }\r\n });\r\n };\r\n EnrollmentCreateEditController.NAME = \"courses.EnrollmentCreateEditController\";\r\n EnrollmentCreateEditController.$inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n CourseService_1.CourseService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return EnrollmentCreateEditController;\r\n})();\r\nexports.EnrollmentCreateEditController = EnrollmentCreateEditController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../components/dialog/DialogService\":166,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/Moment\":518,\"./CourseService\":211}],218:[function(require,module,exports){\nvar CourseService_1 = require(\"./CourseService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar EnrollmentSeatStatus_1 = require(\"./models/EnrollmentSeatStatus\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar RichTextEditorDirective_1 = require(\"../components/richtext/RichTextEditorDirective\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar PurchaseService_1 = require(\"../finances/PurchaseService\");\r\nvar EnrollmentDetailsController = (function () {\r\n function EnrollmentDetailsController($scope, $http, $routeParams, $rootScope, courseService, url, authService, authManager, permissionsService, securityService, coursesRouter, dialogService, purchaseService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$routeParams = $routeParams;\r\n this.$rootScope = $rootScope;\r\n this.courseService = courseService;\r\n this.url = url;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.securityService = securityService;\r\n this.coursesRouter = coursesRouter;\r\n this.dialogService = dialogService;\r\n this.purchaseService = purchaseService;\r\n this.PAGE_SIZE = 5;\r\n this.userIdsToEnroll = [];\r\n this.groupIdsToEnroll = [];\r\n this.userIdsToWaitlist = [];\r\n this.groupIdsToWaitlist = [];\r\n this.isDisableAllActionButtons = false;\r\n this.isActiveLearners = true;\r\n this.btnSendNotificationClicked = false;\r\n this.toolbar = [[], ['bold', 'italics', 'underline', 'strikeThrough', RichTextEditorDirective_1.RichTextEditorController.TA_FONT_COLOR, RichTextEditorDirective_1.RichTextEditorController.TA_BACKGROUND_FONT_COLOR],\r\n ['ul', 'ol', 'indent', 'outdent', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],\r\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote'], [],\r\n ['redo', 'undo', 'clear', RichTextEditorDirective_1.RichTextEditorController.TA_FULLSCREEN_BUTTON, 'html']];\r\n this.courseId = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_ID_PARAM];\r\n this.isAuthenticated = authManager.isAuthenticated();\r\n this.securityService.demandAuthentication()\r\n .demandCoursePermissions(String(this.courseId), function (coursePermissions) { return coursePermissions.permissionsDelegation; });\r\n if (this.isAuthenticated) {\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadCourse()\r\n .then(function () { return _this.loadCourseEnrollmentConfig(); });\r\n this.enrolledGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"api/courses/\" + this.courseId + \"/enrollmentSeats\")));\r\n this.enrolledGridModel.pageSize = this.PAGE_SIZE;\r\n this.enrolledGridModel.filter.seatStatus = EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.ENROLLED];\r\n this.enrolledGridModelWithoutCompletedUserStatus = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"api/courses/\" + this.courseId + \"/enrollmentSeats/completedUserStatus\")));\r\n this.enrolledGridModelWithoutCompletedUserStatus.pageSize = this.PAGE_SIZE;\r\n this.enrolledGridModelWithoutCompletedUserStatus.filter.seatStatus = EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.ENROLLED];\r\n this.waitlistedGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"api/courses/\" + this.courseId + \"/enrollmentSeats\")));\r\n this.waitlistedGridModel.pageSize = this.PAGE_SIZE;\r\n this.waitlistedGridModel.filter.seatStatus = EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.WAITLISTED];\r\n this.pendingGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"api/courses/\" + this.courseId + \"/enrollmentSeats\")));\r\n this.pendingGridModel.pageSize = this.PAGE_SIZE;\r\n this.pendingGridModel.filter.seatStatus = EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.PENDING];\r\n this.getSeatsUsedCount();\r\n }\r\n EnrollmentDetailsController.prototype.loadCourse = function () {\r\n var _this = this;\r\n return this.courseService.get(this.courseId)\r\n .then(function (result) {\r\n _this.course = angular.copy(result);\r\n _this.courseService.setCoursePageHeaderBreadcrumbs(_this.courseId, _this.course, _this.coursesRouter, \"Learners\");\r\n return _this.course;\r\n });\r\n };\r\n EnrollmentDetailsController.prototype.loadCourseEnrollmentConfig = function () {\r\n var _this = this;\r\n return this.courseService.getEnrollmentConfigurationForCourse(this.courseId)\r\n .then(function (config) {\r\n _this.enrollmentConfig = config || {};\r\n return _this.enrollmentConfig;\r\n });\r\n };\r\n EnrollmentDetailsController.prototype.enrollUsers = function () {\r\n var _this = this;\r\n this.purchaseService.getReferencedObjectProductsList(this.courseId, ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE])\r\n .then(function (products) {\r\n if (products.length == 0) {\r\n _this.enrollUsersDo();\r\n }\r\n else {\r\n _this.dialogService.confirm(\"Current course has linked product. The user will pay in case of self-enrollment.
    User will not be charged if you enroll him (her) now. Continue?\", {\r\n title: \"Enroll user for free\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n }).then(function () {\r\n _this.enrollUsersDo();\r\n });\r\n }\r\n });\r\n };\r\n EnrollmentDetailsController.prototype.enrollUsersDo = function () {\r\n var _this = this;\r\n this.isDisableAllActionButtons = true;\r\n this.courseService.enrollUsersToCourse(this.courseId, this.userIdsToEnroll, this.groupIdsToEnroll)\r\n .then(function (result) {\r\n if (result.alreadyEnrolled.length) {\r\n var usersNames = result.alreadyEnrolled.map(function (s) { return s.name; }).join(\", \");\r\n INotifier_1.notifier.warning(\"The following learners are already enrolled: \" + usersNames);\r\n }\r\n if (result.successEnrolled.length) {\r\n _this.enrolledGridModel.loadPage(0);\r\n _this.enrolledGridModelWithoutCompletedUserStatus.loadPage(0);\r\n _this.getSeatsUsedCount();\r\n }\r\n if (result.moved.length) {\r\n _this.enrolledGridModel.loadPage(0);\r\n _this.enrolledGridModelWithoutCompletedUserStatus.loadPage(0);\r\n _this.waitlistedGridModel.loadPage(0);\r\n }\r\n _this.$scope.showUserSelectorForEnroll = false;\r\n _this.userIdsToEnroll.splice(0);\r\n _this.$scope.showGroupSelectorForEnroll = false;\r\n _this.groupIdsToEnroll.splice(0);\r\n })\r\n .finally(function () { return _this.isDisableAllActionButtons = false; });\r\n };\r\n EnrollmentDetailsController.prototype.addUsersToWaitlist = function () {\r\n var _this = this;\r\n this.isDisableAllActionButtons = true;\r\n this.courseService.addUsersToCourseWaitlist(this.courseId, this.userIdsToWaitlist, this.groupIdsToWaitlist)\r\n .then(function (result) {\r\n if (result.alreadyEnrolled.length) {\r\n var usersNames = result.alreadyEnrolled.map(function (s) { return s.name; }).join(\", \");\r\n INotifier_1.notifier.warning(\"The following learners are already waitlisted: \" + usersNames);\r\n }\r\n if (result.successEnrolled.length) {\r\n _this.waitlistedGridModel.loadPage(0);\r\n }\r\n _this.$scope.showUserSelectorForWaitlist = false;\r\n _this.userIdsToWaitlist.splice(0);\r\n _this.$scope.showGroupSelectorForWaitlist = false;\r\n _this.groupIdsToWaitlist.splice(0);\r\n })\r\n .finally(function () { return _this.isDisableAllActionButtons = false; });\r\n };\r\n EnrollmentDetailsController.prototype.unEnrollUser = function (seat) {\r\n var _this = this;\r\n seat.isUpdateProceed = true;\r\n this.courseService.deleteEnrollmentSeat(this.courseId, seat.id, seat.version)\r\n .then(function () {\r\n if (seat.seatStatus == EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.ENROLLED]) {\r\n _this.enrolledGridModel.loadPage(0);\r\n _this.enrolledGridModelWithoutCompletedUserStatus.loadPage(0);\r\n _this.getSeatsUsedCount();\r\n if (_this.enrollmentConfig && _this.enrollmentConfig.isAutoEnrollFromWaitlist) {\r\n _this.waitlistedGridModel.loadPage(0);\r\n }\r\n }\r\n else if (seat.seatStatus == EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.WAITLISTED]) {\r\n _this.waitlistedGridModel.loadPage(0);\r\n }\r\n else if (seat.seatStatus == EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.PENDING]) {\r\n _this.pendingGridModel.loadPage(0);\r\n }\r\n })\r\n .finally(function () { return seat.isUpdateProceed = false; });\r\n };\r\n EnrollmentDetailsController.prototype.unEnrollAll = function (seatStatus, userNameSearchString) {\r\n var _this = this;\r\n this.isDisableAllActionButtons = true;\r\n if (userNameSearchString === undefined) {\r\n userNameSearchString = \"\";\r\n }\r\n this.courseService.deleteEnrollmentSeatsByStatus(this.courseId, seatStatus, userNameSearchString)\r\n .then(function () {\r\n if (seatStatus == EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.ENROLLED]) {\r\n _this.enrolledGridModel.loadPage(0);\r\n _this.enrolledGridModelWithoutCompletedUserStatus.loadPage(0);\r\n _this.getSeatsUsedCount();\r\n if (_this.enrollmentConfig.isAutoEnrollFromWaitlist) {\r\n INotifier_1.notifier.warning(\"Auto enroll from waitlist will not be performed. Please enroll learners manually if needed\");\r\n }\r\n }\r\n else if (seatStatus == EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.WAITLISTED]) {\r\n _this.waitlistedGridModel.loadPage(0);\r\n }\r\n else if (seatStatus == EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.PENDING]) {\r\n _this.pendingGridModel.loadPage(0);\r\n }\r\n })\r\n .finally(function () { return _this.isDisableAllActionButtons = false; });\r\n };\r\n EnrollmentDetailsController.prototype.moveSeatToEnrolled = function (seat) {\r\n var _this = this;\r\n this.purchaseService.getReferencedObjectProductsList(this.courseId, ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE])\r\n .then(function (products) {\r\n if (products.length == 0) {\r\n _this.moveSeatToEnrolledDo(seat);\r\n }\r\n else {\r\n _this.dialogService.confirm(\"Current course has linked product. The user will pay in case of self-enrollment.
    User will not be charged if you enroll him (her) now. Continue?\", {\r\n title: \"Enroll user for free\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n }).then(function () {\r\n _this.moveSeatToEnrolledDo(seat);\r\n });\r\n }\r\n });\r\n };\r\n EnrollmentDetailsController.prototype.moveSeatToEnrolledDo = function (seat) {\r\n var _this = this;\r\n seat.isUpdateProceed = true;\r\n this.courseService.moveSeatToEnrolled(this.courseId, seat.id, seat.version)\r\n .then(function () {\r\n _this.enrolledGridModel.loadPage(0);\r\n _this.enrolledGridModelWithoutCompletedUserStatus.loadPage(0);\r\n _this.waitlistedGridModel.loadPage(0);\r\n _this.getSeatsUsedCount();\r\n })\r\n .finally(function () { return seat.isUpdateProceed = false; });\r\n };\r\n EnrollmentDetailsController.prototype.moveAllSeatsToEnrolled = function (userNameSearchString) {\r\n var _this = this;\r\n if (this.waitlistedGridModel.entries.length) {\r\n this.purchaseService.getReferencedObjectProductsList(this.courseId, ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE])\r\n .then(function (products) {\r\n if (products.length == 0) {\r\n _this.moveAllSeatsToEnrolledDo(userNameSearchString);\r\n }\r\n else {\r\n _this.dialogService.confirm(\"Current course has linked product. The user will pay in case of self-enrollment.
    User will not be charged if you enroll him (her) now. Continue?\", {\r\n title: \"Enroll user for free\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n }).then(function () {\r\n _this.moveAllSeatsToEnrolledDo(userNameSearchString);\r\n });\r\n }\r\n });\r\n }\r\n };\r\n EnrollmentDetailsController.prototype.moveAllSeatsToEnrolledDo = function (userNameSearchString) {\r\n var _this = this;\r\n this.isDisableAllActionButtons = true;\r\n if (userNameSearchString === undefined) {\r\n userNameSearchString = \"\";\r\n }\r\n this.courseService.moveAllSeatsToEnrolled(this.courseId, userNameSearchString)\r\n .then(function () {\r\n _this.enrolledGridModel.loadPage(0);\r\n _this.enrolledGridModelWithoutCompletedUserStatus.loadPage(0);\r\n _this.waitlistedGridModel.loadPage(0);\r\n _this.getSeatsUsedCount();\r\n })\r\n .finally(function () { return _this.isDisableAllActionButtons = false; });\r\n };\r\n EnrollmentDetailsController.prototype.moveSeatToWaitlist = function (seat) {\r\n var _this = this;\r\n seat.isUpdateProceed = true;\r\n this.courseService.moveSeatToWaitlist(this.courseId, seat.id, seat.version)\r\n .then(function () {\r\n _this.enrolledGridModel.loadPage(0);\r\n _this.enrolledGridModelWithoutCompletedUserStatus.loadPage(0);\r\n _this.waitlistedGridModel.loadPage(0);\r\n _this.getSeatsUsedCount();\r\n })\r\n .finally(function () { return seat.isUpdateProceed = false; });\r\n };\r\n EnrollmentDetailsController.prototype.moveAllSeatsToWaitlist = function (userNameSearchString) {\r\n var _this = this;\r\n this.isDisableAllActionButtons = true;\r\n if (userNameSearchString === undefined) {\r\n userNameSearchString = \"\";\r\n }\r\n this.courseService.moveAllSeatsToWaitlist(this.courseId, userNameSearchString)\r\n .then(function () {\r\n _this.enrolledGridModel.loadPage(0);\r\n _this.enrolledGridModelWithoutCompletedUserStatus.loadPage(0);\r\n _this.waitlistedGridModel.loadPage(0);\r\n _this.getSeatsUsedCount();\r\n })\r\n .finally(function () {\r\n if (_this.enrollmentConfig.isAutoEnrollFromWaitlist) {\r\n INotifier_1.notifier.warning(\"Auto enroll from waitlist will not be performed. Please enroll learners manually if needed\");\r\n }\r\n _this.isDisableAllActionButtons = false;\r\n });\r\n };\r\n EnrollmentDetailsController.prototype.approveEnrollment = function (seat) {\r\n var _this = this;\r\n seat.isUpdateProceed = true;\r\n this.courseService.approveEnrollmentSeat(this.courseId, seat.id, seat.version)\r\n .then(function (result) {\r\n if (result.enrolled.length) {\r\n _this.enrolledGridModel.loadPage(0);\r\n _this.enrolledGridModelWithoutCompletedUserStatus.loadPage(0);\r\n _this.getSeatsUsedCount();\r\n }\r\n if (result.waitlisted.length) {\r\n _this.waitlistedGridModel.loadPage(0);\r\n }\r\n _this.pendingGridModel.loadPage(0);\r\n })\r\n .finally(function () { return seat.isUpdateProceed = false; });\r\n };\r\n EnrollmentDetailsController.prototype.approveAllEnrollments = function (userNameSearchString) {\r\n var _this = this;\r\n this.isDisableAllActionButtons = true;\r\n if (userNameSearchString === undefined) {\r\n userNameSearchString = \"\";\r\n }\r\n this.courseService.approveAllEnrollmentSeats(this.courseId, userNameSearchString)\r\n .then(function (result) {\r\n if (result.enrolled.length) {\r\n _this.enrolledGridModel.loadPage(0);\r\n _this.enrolledGridModelWithoutCompletedUserStatus.loadPage(0);\r\n _this.getSeatsUsedCount();\r\n }\r\n if (result.waitlisted.length) {\r\n _this.waitlistedGridModel.loadPage(0);\r\n }\r\n _this.pendingGridModel.loadPage(0);\r\n })\r\n .finally(function () { return _this.isDisableAllActionButtons = false; });\r\n };\r\n EnrollmentDetailsController.prototype.getSeatsUsedCount = function () {\r\n var _this = this;\r\n return this.courseService.getTotalUsedSeatsForCourse(this.courseId)\r\n .then(function (usedSeatCount) { return _this.totalUsedSeats = usedSeatCount; });\r\n };\r\n EnrollmentDetailsController.prototype.toggleUserSelectorForEnroll = function () {\r\n if (this.$scope.showUserSelectorForEnroll) {\r\n this.$scope.showUserSelectorForEnroll = false;\r\n this.userIdsToEnroll.splice(0);\r\n }\r\n else {\r\n this.$scope.showUserSelectorForEnroll = true;\r\n }\r\n };\r\n EnrollmentDetailsController.prototype.toggleGroupSelectorForEnroll = function () {\r\n if (this.$scope.showGroupSelectorForEnroll) {\r\n this.$scope.showGroupSelectorForEnroll = false;\r\n this.groupIdsToEnroll.splice(0);\r\n }\r\n else {\r\n this.$scope.showGroupSelectorForEnroll = true;\r\n }\r\n };\r\n EnrollmentDetailsController.prototype.toggleUserSelectorForWaitlist = function () {\r\n if (this.$scope.showUserSelectorForWaitlist) {\r\n this.$scope.showUserSelectorForWaitlist = false;\r\n this.userIdsToWaitlist.splice(0);\r\n }\r\n else {\r\n this.$scope.showUserSelectorForWaitlist = true;\r\n }\r\n };\r\n EnrollmentDetailsController.prototype.toggleGroupSelectorForWaitlist = function () {\r\n if (this.$scope.showGroupSelectorForWaitlist) {\r\n this.$scope.showGroupSelectorForWaitlist = false;\r\n this.userIdsToWaitlist.splice(0);\r\n }\r\n else {\r\n this.$scope.showGroupSelectorForWaitlist = true;\r\n }\r\n };\r\n EnrollmentDetailsController.prototype.getAvailableUsersUrl = function (businessUnit, excludedUserIds) {\r\n var url = \"/api/userSelector/users?\";\r\n if (businessUnit) {\r\n url += \"businessUnitId=\" + businessUnit + \"&\";\r\n }\r\n if (excludedUserIds && excludedUserIds.length > 0) {\r\n excludedUserIds.forEach(function (id) { return url += \"excludedUserIds=\" + id + \"&\"; });\r\n }\r\n return url;\r\n };\r\n EnrollmentDetailsController.prototype.getAvailableGroupsUrl = function (businessUnit, excludedGroupIds) {\r\n var url = \"/api/userSelector/groups?\";\r\n if (businessUnit) {\r\n url += \"businessUnitId=\" + businessUnit + \"&\";\r\n }\r\n if (excludedGroupIds && excludedGroupIds.length > 0) {\r\n excludedGroupIds.forEach(function (id) { return url += \"excludedGroupIds=\" + id + \"&\"; });\r\n }\r\n return url;\r\n };\r\n EnrollmentDetailsController.prototype.showSendMailModal = function () {\r\n this.clearEmailFields();\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#showSendMail\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n EnrollmentDetailsController.prototype.closeSendMailModal = function () {\r\n $(\"#showSendMail\").modal('hide');\r\n };\r\n EnrollmentDetailsController.prototype.sendEmailtoActiveLearners = function () {\r\n var _this = this;\r\n if (this.btnSendNotificationClicked)\r\n return;\r\n this.btnSendNotificationClicked = true;\r\n if (this.subject == null || this.subject == undefined || this.subject == \"\" || this.subject.trim().length == 0) {\r\n this.subject = \" \";\r\n }\r\n this.courseService.sendEmailtoActiveLearners(this.courseId, this.message, this.subject).then(function (result) {\r\n INotifier_1.notifier.success(\"Message has been sent\");\r\n setTimeout(_this.closeSendMailModal, 1300);\r\n }, function (error) { return INotifier_1.notifier.error(\"Message has been not sent\"); });\r\n setTimeout(function () {\r\n _this.btnSendNotificationClicked = false;\r\n }, 1300);\r\n };\r\n EnrollmentDetailsController.prototype.clearEmailFields = function () {\r\n this.message = null;\r\n this.subject = null;\r\n };\r\n EnrollmentDetailsController.prototype.isPendingPayment = function (seatStatus) {\r\n return seatStatus === EnrollmentSeatStatus_1.EnrollmentSeatStatus[EnrollmentSeatStatus_1.EnrollmentSeatStatus.PENDING_PAYMENT];\r\n };\r\n EnrollmentDetailsController.NAME = \"courses.EnrollmentDetailsController\";\r\n EnrollmentDetailsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n CourseService_1.CourseService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n DialogService_1.DialogService.NAME,\r\n PurchaseService_1.PurchaseService.NAME\r\n ];\r\n return EnrollmentDetailsController;\r\n})();\r\nexports.EnrollmentDetailsController = EnrollmentDetailsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../components/dialog/DialogService\":166,\"../components/richtext/RichTextEditorDirective\":177,\"../finances/PurchaseService\":237,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/UrlService\":528,\"./CourseService\":211,\"./models/EnrollmentSeatStatus\":223}],219:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ProgressService = (function () {\r\n function ProgressService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n this.COURSE_PROGRESS_ID_STORAGE_KEY = \"vhs.application.courses.course.progress.id\";\r\n }\r\n ProgressService.prototype.startCourse = function (courseId, participationFormData) {\r\n return this.$http.post(this.url.base(\"/api/progress/course/:courseId/start\")\r\n .param(\":courseId\", courseId)\r\n .service(), participationFormData)\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getCourseProgress = function (courseId, courseProgressId, userId) {\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId?userId=:userId&courseProgressId=:courseProgressId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":userId\", userId || \"\")\r\n .param(\":courseProgressId\", courseProgressId || \"\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getCourseSections = function (courseId, courseProgressId) {\r\n return this.$http.get(this.url.base(\"/api/progress/structure/courses/:courseId/sections?courseProgressId=:courseProgressId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":courseProgressId\", courseProgressId || \"\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getModuleSections = function (courseId, moduleId, courseProgressId) {\r\n return this.$http.get(this.url.base(\"/api/progress/structure/courses/:courseId/modules/:moduleId/sections?courseProgressId=:courseProgressId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":moduleId\", moduleId)\r\n .param(\":courseProgressId\", courseProgressId || \"\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getCourseUsers = function (courseId, userNameSearchString, userLogonSearchString, onlyActive, includedUserIds) {\r\n var url = \"/api/courses/:courseId/users?userNameSearchString=:userNameSearchString&userLogonSearchString=:userLogonSearchString&onlyActive=:onlyActive\";\r\n if (includedUserIds && includedUserIds.length > 0) {\r\n url += \"&\";\r\n includedUserIds.forEach(function (id) { return url += \"includedUserIds=\" + id + \"&\"; });\r\n }\r\n return this.$http.get(this.url.base(url)\r\n .param(\":courseId\", courseId)\r\n .param(\":userNameSearchString\", userNameSearchString || \"\")\r\n .param(\":userLogonSearchString\", userLogonSearchString || \"\")\r\n .param(\":onlyActive\", onlyActive)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getCourseGroups = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/courses/:courseId/groups\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getUserProgress = function (courseId, userId) {\r\n if (userId) {\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId/sections?userId=:userId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":userId\", userId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n }\r\n else {\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId/sections\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n }\r\n };\r\n ProgressService.prototype.getCourseModulesProgress = function (courseId, courseProgressId) {\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId/modules\")\r\n .param(\":courseId\", courseId)\r\n .service(), { params: { courseProgressId: courseProgressId } }).then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.setParticipationFormData = function (courseId, courseProgressId, participationFormData) {\r\n return this.$http.put(this.url.base(\"/api/progress/course/:courseId/participationFormData?courseProgressId=:courseProgressId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":courseProgressId\", courseProgressId)\r\n .service(), participationFormData)\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getProgressForQuiz = function (courseId, sectionId, userIds, groupIds) {\r\n var requestConfig = {\r\n params: {\r\n userIdsFilter: userIds,\r\n groupIdsFilter: groupIds\r\n }\r\n };\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId/sections/:sectionId?page=0&pageSize=1000\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), requestConfig).then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getSectionsStatistics = function (courseId, userIds, groupIds) {\r\n var requestConfig = {\r\n params: {\r\n userIdsFilter: userIds,\r\n groupIdsFilter: groupIds\r\n }\r\n };\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId/sections/statistics\")\r\n .param(\":courseId\", courseId)\r\n .service(), requestConfig).then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.markSectionAsOpened = function (courseId, sectionId, courseProgressId) {\r\n return this.$http.put(this.url.base(\"/api/progress/course/:courseId/sections/:sectionId/markAsOpened\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), courseProgressId ? JSON.stringify(courseProgressId) : null)\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.resetSectionProgressStatus = function (courseId, sectionId, status, courseProgressId) {\r\n return this.$http.put(this.url.base(\"/api/progress/course/:courseId/sections/:sectionId/resetStatus/:status\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .param(\":status\", status.toUpperCase())\r\n .service(), courseProgressId ? JSON.stringify(courseProgressId) : null)\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getCourseInUse = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId/inUse\")\r\n .param(\":courseId\", courseId)\r\n .service()).then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.deactivateCourseProgress = function (courseId, courseProgressId) {\r\n return this.$http.put(this.url.service(\"/api/progress/course/\" + courseId + \"/progress/\" + courseProgressId + \"/inactive\"), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.completeCourseProgress = function (courseId, courseProgressId) {\r\n return this.$http.put(this.url.service(\"/api/progress/course/\" + courseId + \"/progress/\" + courseProgressId + \"/complete\"), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getSectionsProgress = function (courseId, courseProgressId) {\r\n return this.$http.get(this.url.service(\"/api/progress/course/\" + courseId + \"/progress/\" + courseProgressId + \"/sectionsProgress\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getSectionProgress = function (courseId, courseProgressId, sectionId) {\r\n return this.$http.get(this.url.service(\"/api/progress/course/\" + courseId + \"/progress/\" + courseProgressId + \"/section/\" + sectionId))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getSourceParticipationFormData = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId/sourceParticipationFormData\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getCourseProgressStarted = function (courseId) {\r\n return this.$http.get(this.url.service(\"/api/progress/course/\" + courseId + \"/started\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getAllSectionsInHierarchy = function (courseId) {\r\n return this.$http.get(this.url.base(\"/api/progress/structure/courses/:courseId/sections/all\")\r\n .param(\":courseId\", courseId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getAllCourseProgressesForUser = function (courseId, userId) {\r\n return this.$http.get(this.url.service(\"/api/progress/course/\" + courseId + \"/user/\" + userId + \"/progress/all\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getAllSectionProgressesForCourseProgress = function (courseId, courseProgressId) {\r\n return this.$http.get(this.url.service(\"/api/progress/course/\" + courseId + \"/progress/\" + courseProgressId + \"/sectionProgress/all\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getCourseProgressParticipationForm = function (courseId, courseProgressId) {\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId/progress/:courseProgressId/participationForm\")\r\n .param(\":courseId\", courseId)\r\n .param(\":courseProgressId\", courseProgressId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getIndividualQuizResults = function (courseId, courseProgressId, sectionId) {\r\n return this.$http.get(this.url.base(\"api/progress/course/:courseId/progress/:courseProgressId/section/:sectionId/quizResults\")\r\n .param(\":courseId\", courseId)\r\n .param(\":courseProgressId\", courseProgressId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.completeSectionWithChildes = function (courseId, sectionId, courseProgressId) {\r\n return this.$http.put(this.url.base(\"api/progress/course/:courseId/sections/:sectionId/completeWithChildes\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), courseProgressId ? JSON.stringify(courseProgressId) : null)\r\n .then(function (response) { return response.data; });\r\n };\r\n ProgressService.prototype.resetSectionWithChildesToInitial = function (courseId, sectionId, courseProgressId) {\r\n return this.$http.put(this.url.base(\"api/progress/course/:courseId/sections/:sectionId/resetSectionWithChildesToInitial\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), courseProgressId ? JSON.stringify(courseProgressId) : null)\r\n .then(function (response) { return response.data; });\r\n };\r\n ProgressService.prototype.getAnySectionWebinar = function (courseId) {\r\n return this.$http.get(this.url.service(\"/api/courses/\" + courseId + \"/viltSessions/anyInCourse\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getProgressBundleId = function (courseId, courseProgressId) {\r\n return this.$http.get(this.url.service(\"api/progress/course/\" + courseId + \"/progress/\" + courseProgressId + \"/progressBundleId\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.createProgressBundle = function (courseId, courseProgressId) {\r\n return this.$http.post(this.url.service(\"api/progress/course/\" + courseId + \"/progress/\" + courseProgressId + \"/createProgressBundle\"), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.resetInformationSectionStatusToAllowed = function (courseId, sectionId, courseProgressId) {\r\n return this.$http.put(this.url.base(\"/api/progress/course/:courseId/sections/:sectionId/resetInformationSectionStatusToAllowed\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), courseProgressId ? JSON.stringify(courseProgressId) : null)\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.downloadCourseTranscriptReport = function (parameters) {\r\n var _this = this;\r\n var reportType = 'COURSE_TRANSCRIPT_REPORT';\r\n return this.$http.post(this.url.base(\"/api/reports/downloadToken/:reportType\")\r\n .param(\":reportType\", reportType)\r\n .service(), { parameters: JSON.stringify(parameters) }).then(function (result) {\r\n return _this.url.base(\"/api/reports/download/:token\").param(\":token\", result.data.token).service();\r\n });\r\n };\r\n ProgressService.prototype.downloadGeneralTranscriptReport = function (parameters) {\r\n var _this = this;\r\n var reportType = 'GENERAL_TRANSCRIPT_REPORT';\r\n return this.$http.post(this.url.base(\"/api/reports/downloadToken/:reportType\")\r\n .param(\":reportType\", reportType)\r\n .service(), { parameters: JSON.stringify(parameters) }).then(function (result) {\r\n return _this.url.base(\"/api/reports/download/:token\").param(\":token\", result.data.token).service();\r\n });\r\n };\r\n ProgressService.prototype.getStartedCourseProgressUsersByCourse = function (courseId) {\r\n return this.$http.get(this.url.service(\"/api/progress/course/\" + courseId + \"/countUsersCourseStarted\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getUserScormSessionData = function (courseId, sectionId, interactionData) {\r\n return this.$http.get(this.url.service(\"/api/progress/course/\" + courseId + \"/sections/\" + sectionId + \"/sessions\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.saveUserScormSessionData = function (courseId, sectionId, interactionData) {\r\n return this.$http.post(this.url.service(\"/api/progress/course/\" + courseId + \"/sections/\" + sectionId + \"/sessions\"), {\r\n interactionData: interactionData\r\n }).then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getExpirationDateForCourse = function (courseId) {\r\n return this.$http.get(this.url.service(\"/api/progress/course/\" + courseId + \"/expiration\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.exportCourseProgressCsvReport = function (parameters, reportType) {\r\n var _this = this;\r\n return this.$http.post(this.url.base(\"/api/reports/downloadToken/:reportType\")\r\n .param(\":reportType\", reportType)\r\n .service(), { parameters: JSON.stringify(parameters) }).then(function (result) {\r\n return _this.url.base(\"/api/reports/download/:token\").param(\":token\", result.data.token).service();\r\n });\r\n };\r\n ProgressService.prototype.getAllProgressesForCourseProgress = function (courseId, courseProgressId) {\r\n return this.$http.get(this.url.service(\"/api/progress/course/\" + courseId + \"/progress/\" + courseProgressId + \"/sectionProgress/hierarchy/all\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.isExportAllowed = function (courseId) {\r\n return this.$http.get(this.url.service(\"/api/progress/course/\" + courseId + \"/isExportAllowed\"), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.updateLastViewedSection = function (courseId, courseProgressId, sectionId) {\r\n return this.$http.put(this.url.base(\"/api/progress/course/:courseId/courseProgress/:courseProgressId/sections/:sectionId/slideProgress\")\r\n .param(\":courseId\", courseId)\r\n .param(\":courseProgressId\", courseProgressId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.getSectionProgressExtensionForMaterialProgress = function (courseId, courseProgressId, sectionId, materialId) {\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId/courseProgress/:courseProgressId/section/:sectionId/materials?materialId=:materialId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":courseProgressId\", courseProgressId)\r\n .param(\":sectionId\", sectionId)\r\n .param(\":materialId\", materialId ? materialId : \"\")\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.prototype.saveSectionProgressExtensionWithMaterialProgress = function (courseId, courseProgressId, sectionId, materialProgresses) {\r\n return this.$http.put(this.url.base(\"/api/progress/course/:courseId/courseProgress/:courseProgressId/section/:sectionId/materials\")\r\n .param(\":courseId\", courseId)\r\n .param(\":courseProgressId\", courseProgressId)\r\n .param(\":sectionId\", sectionId)\r\n .service(), materialProgresses)\r\n .then(function (result) { return result.data; });\r\n };\r\n ProgressService.NAME = \"courses.ProgressService\";\r\n ProgressService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return ProgressService;\r\n})();\r\nexports.ProgressService = ProgressService;\r\n},{\"./../utils/UrlService\":528}],220:[function(require,module,exports){\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar CoursesRouter_1 = require(\"./../urls/CoursesRouter\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar QuizDetailsController = (function () {\r\n function QuizDetailsController($location, $routeParams, securityService) {\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.securityService = securityService;\r\n this.quizNumber = $routeParams[CoursesRouter_1.CoursesRouter.COURSE_QUIZ_ID_PARAM];\r\n var quizNumberStr = String(this.quizNumber);\r\n this.securityService.demandAuthentication();\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0) {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY);\r\n }\r\n PageHeaderHelper_1.PageHeader.set().header(\"Test #\" + this.quizNumber +\r\n \" of English language\").update();\r\n }\r\n QuizDetailsController.prototype.isQuizNumberOdd = function (quizNumber) {\r\n return this.quizNumber % 2 != 0;\r\n };\r\n QuizDetailsController.NAME = \"courses.QuizDetailsController\";\r\n QuizDetailsController.$inject = [\r\n \"$location\",\r\n \"$routeParams\",\r\n SecurityService_1.SecurityService.NAME\r\n ];\r\n return QuizDetailsController;\r\n})();\r\nexports.QuizDetailsController = QuizDetailsController;\r\n},{\"./../security/SecurityService\":420,\"./../urls/CoursesRouter\":468,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521}],221:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar UserNotesService = (function () {\r\n function UserNotesService($http, $q, $rootScope, url) {\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n }\r\n UserNotesService.prototype.initialize = function (courseId, sectionId, courseProgressId) {\r\n this.courseId = courseId;\r\n this.sectionId = sectionId;\r\n this.courseProgressId = courseProgressId;\r\n };\r\n UserNotesService.prototype.getNote = function (courseId, sectionId, courseProgressId, uuid) {\r\n return this.$http.get(this.url.base(\"/api/progress/course/:courseId/sections/:sectionId/notes?courseProgressId=:courseProgressId&uuid=:uuid\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .param(\":courseProgressId\", courseProgressId)\r\n .param(\":uuid\", uuid)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserNotesService.prototype.saveNote = function (courseId, sectionId, courseProgressId, uuid, text) {\r\n var data = {\r\n uuid: uuid,\r\n text: text\r\n };\r\n return this.$http.post(this.url.base(\"/api/progress/course/:courseId/sections/:sectionId/notes?courseProgressId=:courseProgressId&uuid=:uuid\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .param(\":courseProgressId\", courseProgressId)\r\n .param(\":uuid\", uuid)\r\n .service(), data)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserNotesService.NAME = \"courses.UserNotesService\";\r\n UserNotesService.$inject = [\r\n \"$http\",\r\n \"$q\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return UserNotesService;\r\n})();\r\nexports.UserNotesService = UserNotesService;\r\n},{\"../utils/UrlService\":528}],222:[function(require,module,exports){\n(function (CourseProgressStatus) {\r\n CourseProgressStatus[CourseProgressStatus[\"NOT_AVAILABLE\"] = 0] = \"NOT_AVAILABLE\";\r\n CourseProgressStatus[CourseProgressStatus[\"NOT_STARTED\"] = 1] = \"NOT_STARTED\";\r\n CourseProgressStatus[CourseProgressStatus[\"STARTED\"] = 2] = \"STARTED\";\r\n CourseProgressStatus[CourseProgressStatus[\"FAILED\"] = 3] = \"FAILED\";\r\n CourseProgressStatus[CourseProgressStatus[\"COMPLETED\"] = 4] = \"COMPLETED\";\r\n CourseProgressStatus[CourseProgressStatus[\"EXPIRED\"] = 5] = \"EXPIRED\";\r\n CourseProgressStatus[CourseProgressStatus[\"RESET\"] = 6] = \"RESET\";\r\n})(exports.CourseProgressStatus || (exports.CourseProgressStatus = {}));\r\nvar CourseProgressStatus = exports.CourseProgressStatus;\r\n},{}],223:[function(require,module,exports){\n(function (EnrollmentSeatStatus) {\r\n EnrollmentSeatStatus[EnrollmentSeatStatus[\"ENROLLED\"] = 0] = \"ENROLLED\";\r\n EnrollmentSeatStatus[EnrollmentSeatStatus[\"WAITLISTED\"] = 1] = \"WAITLISTED\";\r\n EnrollmentSeatStatus[EnrollmentSeatStatus[\"PENDING\"] = 2] = \"PENDING\";\r\n EnrollmentSeatStatus[EnrollmentSeatStatus[\"PENDING_PAYMENT\"] = 3] = \"PENDING_PAYMENT\";\r\n})(exports.EnrollmentSeatStatus || (exports.EnrollmentSeatStatus = {}));\r\nvar EnrollmentSeatStatus = exports.EnrollmentSeatStatus;\r\n},{}],224:[function(require,module,exports){\n(function (QuizCorrectAnswersType) {\r\n QuizCorrectAnswersType[QuizCorrectAnswersType[\"PERCENTAGE\"] = 0] = \"PERCENTAGE\";\r\n QuizCorrectAnswersType[QuizCorrectAnswersType[\"POINTS\"] = 1] = \"POINTS\";\r\n})(exports.QuizCorrectAnswersType || (exports.QuizCorrectAnswersType = {}));\r\nvar QuizCorrectAnswersType = exports.QuizCorrectAnswersType;\r\n},{}],225:[function(require,module,exports){\n(function (SectionAccessRules) {\r\n SectionAccessRules[SectionAccessRules[\"MANDATORY_INTRO_INFO\"] = 0] = \"MANDATORY_INTRO_INFO\";\r\n SectionAccessRules[SectionAccessRules[\"FREE_REIN_LESSON_INFO\"] = 1] = \"FREE_REIN_LESSON_INFO\";\r\n SectionAccessRules[SectionAccessRules[\"SEQUENTIAL_LESSON_INFO\"] = 2] = \"SEQUENTIAL_LESSON_INFO\";\r\n SectionAccessRules[SectionAccessRules[\"CONCLUSION_INFO\"] = 3] = \"CONCLUSION_INFO\";\r\n SectionAccessRules[SectionAccessRules[\"PRE_ASSESSMENT_QUIZ\"] = 4] = \"PRE_ASSESSMENT_QUIZ\";\r\n SectionAccessRules[SectionAccessRules[\"INTERIM_ASSESSMENT_QUIZ\"] = 5] = \"INTERIM_ASSESSMENT_QUIZ\";\r\n SectionAccessRules[SectionAccessRules[\"SUMMATIVE_ASSESSMENT_QUIZ\"] = 6] = \"SUMMATIVE_ASSESSMENT_QUIZ\";\r\n SectionAccessRules[SectionAccessRules[\"FORMATIVE_ASSESSMENT_QUIZ\"] = 7] = \"FORMATIVE_ASSESSMENT_QUIZ\";\r\n SectionAccessRules[SectionAccessRules[\"ALWAYS_AVAILABLE_SURVEY\"] = 8] = \"ALWAYS_AVAILABLE_SURVEY\";\r\n SectionAccessRules[SectionAccessRules[\"AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_SURVEY\"] = 9] = \"AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_SURVEY\";\r\n SectionAccessRules[SectionAccessRules[\"AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_SURVEY\"] = 10] = \"AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_SURVEY\";\r\n SectionAccessRules[SectionAccessRules[\"REGISTRATION_ALWAYS_AVAILABLE_WEBINAR\"] = 11] = \"REGISTRATION_ALWAYS_AVAILABLE_WEBINAR\";\r\n SectionAccessRules[SectionAccessRules[\"AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_WEBINAR\"] = 12] = \"AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_WEBINAR\";\r\n SectionAccessRules[SectionAccessRules[\"AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_WEBINAR\"] = 13] = \"AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_WEBINAR\";\r\n SectionAccessRules[SectionAccessRules[\"REGISTRATION_ALWAYS_AVAILABLE_ILT\"] = 14] = \"REGISTRATION_ALWAYS_AVAILABLE_ILT\";\r\n SectionAccessRules[SectionAccessRules[\"AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_ILT\"] = 15] = \"AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_ILT\";\r\n SectionAccessRules[SectionAccessRules[\"AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_ILT\"] = 16] = \"AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_ILT\";\r\n SectionAccessRules[SectionAccessRules[\"ALWAYS_AVAILABLE_FLASHCARD\"] = 17] = \"ALWAYS_AVAILABLE_FLASHCARD\";\r\n SectionAccessRules[SectionAccessRules[\"AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_FLASHCARD\"] = 18] = \"AVAILABLE_WHEN_PREVIOUS_SECTION_COMPLETED_FLASHCARD\";\r\n SectionAccessRules[SectionAccessRules[\"AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_FLASHCARD\"] = 19] = \"AVAILABLE_WHEN_ALL_PREVIOUS_SECTIONS_COMPLETED_FLASHCARD\";\r\n SectionAccessRules[SectionAccessRules[\"MANDATORY_INTRO_SLIDE_DECK\"] = 20] = \"MANDATORY_INTRO_SLIDE_DECK\";\r\n SectionAccessRules[SectionAccessRules[\"FREE_REIN_LESSON_SLIDE_DECK\"] = 21] = \"FREE_REIN_LESSON_SLIDE_DECK\";\r\n SectionAccessRules[SectionAccessRules[\"SEQUENTIAL_LESSON_SLIDE_DECK\"] = 22] = \"SEQUENTIAL_LESSON_SLIDE_DECK\";\r\n SectionAccessRules[SectionAccessRules[\"CONCLUSION_SLIDE_DECK\"] = 23] = \"CONCLUSION_SLIDE_DECK\";\r\n})(exports.SectionAccessRules || (exports.SectionAccessRules = {}));\r\nvar SectionAccessRules = exports.SectionAccessRules;\r\n},{}],226:[function(require,module,exports){\n(function (SectionPassingType) {\r\n SectionPassingType[SectionPassingType[\"MANDATORY\"] = 0] = \"MANDATORY\";\r\n SectionPassingType[SectionPassingType[\"ELECTIVE\"] = 1] = \"ELECTIVE\";\r\n SectionPassingType[SectionPassingType[\"OPTIONAL\"] = 2] = \"OPTIONAL\";\r\n})(exports.SectionPassingType || (exports.SectionPassingType = {}));\r\nvar SectionPassingType = exports.SectionPassingType;\r\n},{}],227:[function(require,module,exports){\n(function (SectionProgressStatus) {\r\n SectionProgressStatus[SectionProgressStatus[\"NOT_ALLOWED\"] = 0] = \"NOT_ALLOWED\";\r\n SectionProgressStatus[SectionProgressStatus[\"ALLOWED\"] = 1] = \"ALLOWED\";\r\n SectionProgressStatus[SectionProgressStatus[\"OPENED\"] = 2] = \"OPENED\";\r\n SectionProgressStatus[SectionProgressStatus[\"STARTED\"] = 3] = \"STARTED\";\r\n SectionProgressStatus[SectionProgressStatus[\"SUBMITTED\"] = 4] = \"SUBMITTED\";\r\n SectionProgressStatus[SectionProgressStatus[\"FAILED\"] = 5] = \"FAILED\";\r\n SectionProgressStatus[SectionProgressStatus[\"SOS\"] = 6] = \"SOS\";\r\n SectionProgressStatus[SectionProgressStatus[\"COMPLETED\"] = 7] = \"COMPLETED\";\r\n})(exports.SectionProgressStatus || (exports.SectionProgressStatus = {}));\r\nvar SectionProgressStatus = exports.SectionProgressStatus;\r\n},{}],228:[function(require,module,exports){\n(function (SectionType) {\r\n SectionType[SectionType[\"INFORMATION\"] = 0] = \"INFORMATION\";\r\n SectionType[SectionType[\"QUIZ\"] = 1] = \"QUIZ\";\r\n SectionType[SectionType[\"INFORMATION_WITH_MANUAL_COMPLETION\"] = 2] = \"INFORMATION_WITH_MANUAL_COMPLETION\";\r\n SectionType[SectionType[\"PROBLEM_SOLUTION\"] = 3] = \"PROBLEM_SOLUTION\";\r\n SectionType[SectionType[\"SURVEY\"] = 4] = \"SURVEY\";\r\n SectionType[SectionType[\"WEBINAR\"] = 5] = \"WEBINAR\";\r\n SectionType[SectionType[\"ILT\"] = 6] = \"ILT\";\r\n SectionType[SectionType[\"FLASHCARD\"] = 7] = \"FLASHCARD\";\r\n SectionType[SectionType[\"SLIDE_DECK\"] = 8] = \"SLIDE_DECK\";\r\n SectionType[SectionType[\"SLIDE\"] = 9] = \"SLIDE\";\r\n})(exports.SectionType || (exports.SectionType = {}));\r\nvar SectionType = exports.SectionType;\r\n},{}],229:[function(require,module,exports){\nvar ZoomController_1 = require(\"./ZoomController\");\r\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar AuthCoreModule_1 = require(\"../authcore/AuthCoreModule\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nexports.ExternalResourcesModule = angular\r\n .module(\"externalResources\", [\r\n SecurityModule_1.SecurityModule.name,\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .controller(ZoomController_1.ZoomController.NAME, ZoomController_1.ZoomController);\r\n},{\"../authcore/AuthCoreModule\":24,\"../security/SecurityModule\":419,\"../urls/UrlsModule\":492,\"./ZoomController\":230}],230:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar ZoomController = (function () {\r\n function ZoomController(authManager, settingsService, authRedirect) {\r\n var _this = this;\r\n this.authManager = authManager;\r\n this.settingsService = settingsService;\r\n this.authRedirect = authRedirect;\r\n if (!this.authManager.isAuthenticated()) {\r\n this.redirectToAccessDenied();\r\n }\r\n this.settingsService.getBUZoomVisibilitySetting(this.authManager.getCurrentUser().businessUnits)\r\n .then(function (data) {\r\n _this.buZoomVisibility = data;\r\n if (!_this.buZoomVisibility) {\r\n _this.redirectToAccessDenied();\r\n }\r\n });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ZOOM_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Zoom\").update();\r\n }\r\n ZoomController.prototype.redirectToAccessDenied = function () {\r\n this.authRedirect.forwardToAccessDenied();\r\n };\r\n ZoomController.NAME = \"externalResources.ZoomController\";\r\n ZoomController.$inject = [\r\n AuthManager_1.AuthManager.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME\r\n ];\r\n return ZoomController;\r\n})();\r\nexports.ZoomController = ZoomController;\r\n},{\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../settings/SettingsService\":427,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],231:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar BillingPlanService = (function () {\r\n function BillingPlanService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n BillingPlanService.prototype.getBillingPlans = function (businessUnitId) {\r\n var url = \"/api/integration/billing/plans\";\r\n if (businessUnitId) {\r\n url += \"?businessUnitId=:businessUnitId\";\r\n }\r\n return this.$http.get(this.url.base(url)\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BillingPlanService.prototype.getFormToken = function (returnUrl, businessUnitId, planId) {\r\n var params = {\r\n planId: planId,\r\n returnUrl: returnUrl,\r\n businessUnitId: businessUnitId\r\n };\r\n return this.$http.get(this.url.base(\"/api/integration/billing/token\")\r\n .service(), { params: params })\r\n .then(function (result) { return result.data; });\r\n };\r\n BillingPlanService.prototype.createPaymentProfile = function (businessUnitId, transactionId, planId) {\r\n var orderCreationInput = {\r\n productId: planId,\r\n businessUnitId: businessUnitId,\r\n transactionId: transactionId\r\n };\r\n return this.$http.post(this.url.base(\"/api/integration/billing/complete\")\r\n .service(), orderCreationInput)\r\n .then(function (result) { return result.data; });\r\n };\r\n BillingPlanService.prototype.cancelSubscription = function (businessUnitId) {\r\n return this.$http.delete(this.url.base(\"/api/integration/billing/plan/:businessUnitId/cancel\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BillingPlanService.prototype.updateSubscription = function (businessUnitId, newPlan) {\r\n return this.$http.put(this.url.base(\"/api/integration/billing/plan/:businessUnitId/update?planId=:planId\")\r\n .param(\":businessUnitId\", businessUnitId)\r\n .param(\":planId\", newPlan.id)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n BillingPlanService.prototype.getMaxFreePlanUsers = function () {\r\n return this.$http.get(this.url.service(\"/api/integration/billing/freePlanMaxUsers\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n BillingPlanService.NAME = \"finances.BillingPlanService\";\r\n BillingPlanService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return BillingPlanService;\r\n})();\r\nexports.BillingPlanService = BillingPlanService;\r\n},{\"../utils/UrlService\":528}],232:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar CatalogController = (function () {\r\n function CatalogController($http, $window, $scope, permissionsService, authManager, authRedirect, authRouter, brandingService, url, financesRouter, commonFilterService, userService) {\r\n var _this = this;\r\n this.$window = $window;\r\n this.$scope = $scope;\r\n this.permissionsService = permissionsService;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.authRouter = authRouter;\r\n this.brandingService = brandingService;\r\n this.url = url;\r\n this.financesRouter = financesRouter;\r\n this.commonFilterService = commonFilterService;\r\n this.userService = userService;\r\n this.SEARCH_STRING_KEY = \"vhsProductsCatalog.filter.searchString\";\r\n this.SUBJECT_ID_KEY = \"vhsProductsCatalog.filter.subjectId\";\r\n this.COURSE_TYPE_ID_KEY = \"vhsProductsCatalog.filter.courseTypeId\";\r\n this.VIEW_TYPE_KEY = \"vhsProductsCatalog.viewType\";\r\n this.countActiveFilter = 0;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.CATALOG_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Catalog\").update();\r\n this.viewType = 1;\r\n if (this.isAuthenticated) {\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n else {\r\n var isCustomDomain = authRouter.getCustomDomainFromUrl(this.$window.location);\r\n if (!isCustomDomain) {\r\n this.authRedirect.forwardToLogOn(true);\r\n }\r\n }\r\n this.loadUserProfile();\r\n this.productsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/finance/products\")));\r\n this.loadSearch();\r\n this.getStorageFilters();\r\n if (window.innerWidth < 1200) {\r\n this.productsGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.productsGridModel.pageSize = 9;\r\n }\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n var currentPage = _this.productsGridModel.currentPage >= _this.productsGridModel.totalPageCount\r\n ? _this.productsGridModel.currentPage - 1\r\n : _this.productsGridModel.currentPage;\r\n if (window.innerWidth < 1200) {\r\n _this.productsGridModel.pageSize = 10;\r\n _this.productsGridModel.loadPage(currentPage);\r\n }\r\n else {\r\n _this.productsGridModel.pageSize = 9;\r\n _this.productsGridModel.loadPage(currentPage);\r\n }\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n }\r\n CatalogController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n CatalogController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(CatalogController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.productsGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(CatalogController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.productsGridModel.filter.searchString = this.searchInput;\r\n }\r\n this.productsGridModel.loadCurrentPage();\r\n };\r\n CatalogController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n CatalogController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n CatalogController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n CatalogController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n CatalogController.prototype.searchProduct = function () {\r\n this.productsGridModel.loadPage(0);\r\n };\r\n CatalogController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(this.SEARCH_STRING_KEY)) {\r\n this.productsGridModel.filter.searchString = sessionStorage.getItem(this.SEARCH_STRING_KEY);\r\n }\r\n if (sessionStorage.getItem(this.SUBJECT_ID_KEY)) {\r\n this.productsGridModel.filter.subjectId = parseInt(sessionStorage.getItem(this.SUBJECT_ID_KEY));\r\n }\r\n if (sessionStorage.getItem(this.COURSE_TYPE_ID_KEY)) {\r\n this.productsGridModel.filter.courseTypeId = parseInt(sessionStorage.getItem(this.COURSE_TYPE_ID_KEY));\r\n }\r\n if (sessionStorage.getItem(this.VIEW_TYPE_KEY)) {\r\n this.viewType = parseInt(sessionStorage.getItem(this.VIEW_TYPE_KEY));\r\n }\r\n else {\r\n this.viewType = 1;\r\n }\r\n };\r\n CatalogController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n CatalogController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, CatalogController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n CatalogController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(CatalogController.NAME, this.productsGridModel);\r\n };\r\n CatalogController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(CatalogController.NAME, this.searchInput);\r\n this.productsGridModel.filter.searchString = this.searchInput;\r\n this.productsGridModel.loadCurrentPage();\r\n };\r\n CatalogController.prototype.openSearchInput = function () {\r\n this.commonFilterService.openSearchInput();\r\n };\r\n CatalogController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(CatalogController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.productsGridModel.filter.searchString = this.searchInput;\r\n this.productsGridModel.loadCurrentPage();\r\n }\r\n };\r\n CatalogController.prototype.clearSearch = function () {\r\n sessionStorage.removeItem(this.SEARCH_STRING_KEY);\r\n sessionStorage.removeItem(this.SUBJECT_ID_KEY);\r\n sessionStorage.removeItem(this.COURSE_TYPE_ID_KEY);\r\n this.productsGridModel.filter.searchString = null;\r\n this.productsGridModel.filter.subjectId = null;\r\n this.productsGridModel.filter.courseTypeId = null;\r\n this.productsGridModel.loadPage(0);\r\n };\r\n CatalogController.prototype.onFilterChange = function (key, value) {\r\n if (value == null) {\r\n switch (key) {\r\n case this.SEARCH_STRING_KEY:\r\n sessionStorage.removeItem(this.SEARCH_STRING_KEY);\r\n break;\r\n case this.SUBJECT_ID_KEY:\r\n sessionStorage.removeItem(this.SUBJECT_ID_KEY);\r\n break;\r\n case this.COURSE_TYPE_ID_KEY:\r\n sessionStorage.removeItem(this.COURSE_TYPE_ID_KEY);\r\n break;\r\n case this.VIEW_TYPE_KEY:\r\n sessionStorage.removeItem(this.VIEW_TYPE_KEY);\r\n break;\r\n }\r\n }\r\n else {\r\n switch (key) {\r\n case this.SEARCH_STRING_KEY:\r\n sessionStorage.setItem(this.SEARCH_STRING_KEY, value);\r\n break;\r\n case this.SUBJECT_ID_KEY:\r\n sessionStorage.setItem(this.SUBJECT_ID_KEY, value);\r\n break;\r\n case this.COURSE_TYPE_ID_KEY:\r\n sessionStorage.setItem(this.COURSE_TYPE_ID_KEY, value);\r\n break;\r\n case this.VIEW_TYPE_KEY:\r\n sessionStorage.setItem(this.VIEW_TYPE_KEY, value);\r\n break;\r\n }\r\n }\r\n };\r\n CatalogController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (rec.right + popup.clientWidth >= document.body.clientWidth) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n CatalogController.NAME = \"finances.CatalogController\";\r\n CatalogController.$inject = [\r\n \"$http\",\r\n \"$window\",\r\n \"$scope\",\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return CatalogController;\r\n})();\r\nexports.CatalogController = CatalogController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../branding/CustomBrandingService\":35,\"../common/CommonFilterService\":49,\"../security/PermissionsService\":418,\"../urls/AuthRouter\":463,\"../urls/FinancesRouter\":471,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528}],233:[function(require,module,exports){\nvar PurchaseService_1 = require(\"./PurchaseService\");\r\nvar CommonModule_1 = require(\"../common/CommonModule\");\r\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar ContentModule_1 = require(\"../content/ContentModule\");\r\nvar OrderProductsController_1 = require(\"./OrderProductsController\");\r\nvar PurchasedOrderController_1 = require(\"./PurchasedOrderController\");\r\nvar ProductEditController_1 = require(\"./ProductEditController\");\r\nvar CatalogController_1 = require(\"./CatalogController\");\r\nvar ProductDetailsController_1 = require(\"./ProductDetailsController\");\r\nvar PurchasedProductController_1 = require(\"./PurchasedProductController\");\r\nvar BillingPlanService_1 = require(\"./BillingPlanService\");\r\nexports.FinancesModule = angular\r\n .module(\"finances\", [\r\n CommonModule_1.CommonModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n ContentModule_1.ContentModule.name\r\n])\r\n .controller(CatalogController_1.CatalogController.NAME, CatalogController_1.CatalogController)\r\n .controller(ProductDetailsController_1.ProductDetailsController.NAME, ProductDetailsController_1.ProductDetailsController)\r\n .controller(PurchasedOrderController_1.PurchasedOrderController.NAME, PurchasedOrderController_1.PurchasedOrderController)\r\n .controller(OrderProductsController_1.OrderProductsController.NAME, OrderProductsController_1.OrderProductsController)\r\n .controller(ProductEditController_1.ProductEditController.NAME, ProductEditController_1.ProductEditController)\r\n .controller(PurchasedProductController_1.PurchasedProductController.NAME, PurchasedProductController_1.PurchasedProductController)\r\n .service(PurchaseService_1.PurchaseService.NAME, PurchaseService_1.PurchaseService)\r\n .service(BillingPlanService_1.BillingPlanService.NAME, BillingPlanService_1.BillingPlanService);\r\n},{\"../common/CommonModule\":51,\"../content/ContentModule\":190,\"../security/SecurityModule\":419,\"../urls/UrlsModule\":492,\"./BillingPlanService\":231,\"./CatalogController\":232,\"./OrderProductsController\":234,\"./ProductDetailsController\":235,\"./ProductEditController\":236,\"./PurchaseService\":237,\"./PurchasedOrderController\":238,\"./PurchasedProductController\":239}],234:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar PurchaseService_1 = require(\"./PurchaseService\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar ObjectTypeUtils_1 = require(\"../utils/ObjectTypeUtils\");\r\nvar MaterialType_1 = require(\"../materials/models/MaterialType\");\r\nvar MaterialService_1 = require(\"../materials/MaterialService\");\r\nvar OrderProductsController = (function () {\r\n function OrderProductsController($scope, $http, $location, $window, $routeParams, $timeout, url, securityService, permissionsService, purchaseService, financesRouter, coursesRouter, learningPathsRouter, materialsRouter, authRedirect, materialService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.purchaseService = purchaseService;\r\n this.financesRouter = financesRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.materialsRouter = materialsRouter;\r\n this.authRedirect = authRedirect;\r\n this.materialService = materialService;\r\n this.purchasedOrderId = $routeParams[FinancesRouter_1.FinancesRouter.ORDER_ID_PARAM];\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n if (this.purchasedOrderId != null && this.purchasedOrderId != undefined && this.purchasedOrderId != \"\") {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_PURCHASED_ORDERS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Purchased Order \"\r\n + \"‘\" + this.purchasedOrderId + \"’\").update();\r\n this.orderProductsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.base(\"/api/finance/orders/:id/products\")\r\n .param(\":id\", this.purchasedOrderId)\r\n .service()));\r\n this.orderProductsGridModel.pageSize = 12;\r\n this.orderProductsGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n _this.orderProductsGridModel.entries.forEach(function (e) {\r\n if (e.objectType === 'MATERIAL') {\r\n _this.materialService.get(e.objectId).then(function (res) {\r\n e.materialUploadDate = res.uploadDate;\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n authRedirect.forwardToAccessDenied();\r\n }\r\n }\r\n OrderProductsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n OrderProductsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n OrderProductsController.prototype.getUrl = function (orderProduct) {\r\n if (orderProduct.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LEARNING_PATH]) {\r\n return this.learningPathsRouter.detailsUrl(orderProduct.objectId);\r\n }\r\n if (orderProduct.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]) {\r\n return this.coursesRouter.detailsUrl(orderProduct.objectId);\r\n }\r\n if (orderProduct.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]) {\r\n return this.materialsRouter.watchUrl(orderProduct.objectId);\r\n }\r\n return \"/\";\r\n };\r\n OrderProductsController.prototype.getThumbnailModelName = function (orderProduct) {\r\n if (orderProduct.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LEARNING_PATH]) {\r\n return \"learning-path\";\r\n }\r\n if (orderProduct.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]) {\r\n return \"course\";\r\n }\r\n if (orderProduct.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]) {\r\n return orderProduct.materialTypeKey;\r\n }\r\n return undefined;\r\n };\r\n OrderProductsController.prototype.getMaterialTypeTitle = function (materialTypeKey) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialTypeTitle(MaterialType_1.MaterialType[materialTypeKey]);\r\n };\r\n OrderProductsController.prototype.getThumbnail = function (orderProduct) {\r\n if (orderProduct.objectType === 'LEARNING_PATH') {\r\n return 'COURSE';\r\n }\r\n else if (orderProduct.objectType === 'MATERIAL') {\r\n switch (orderProduct.materialTypeKey) {\r\n case 'AUDIO':\r\n orderProduct.materialTypeId = 1;\r\n break;\r\n case 'VIDEO':\r\n orderProduct.materialTypeId = 2;\r\n break;\r\n case 'LINK':\r\n orderProduct.materialTypeId = 3;\r\n break;\r\n case 'PHOTO':\r\n orderProduct.materialTypeId = 4;\r\n break;\r\n case 'DOCUMENTS':\r\n orderProduct.materialTypeId = 5;\r\n break;\r\n }\r\n return 'MATERIAL_CARD';\r\n }\r\n else {\r\n return orderProduct.objectType;\r\n }\r\n };\r\n OrderProductsController.NAME = \"finance.OrderProductsController\";\r\n OrderProductsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n \"$routeParams\",\r\n \"$timeout\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n PurchaseService_1.PurchaseService.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n MaterialService_1.MaterialService.NAME\r\n ];\r\n return OrderProductsController;\r\n})();\r\nexports.OrderProductsController = OrderProductsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../ReferencedObjectType\":7,\"../authcore/AuthRedirect\":26,\"../materials/MaterialService\":337,\"../materials/models/MaterialType\":347,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../urls/FinancesRouter\":471,\"../urls/LearningPathsRouter\":477,\"../urls/MaterialsRouter\":480,\"../utils/MenuHelper\":517,\"../utils/ObjectTypeUtils\":520,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528,\"./PurchaseService\":237}],235:[function(require,module,exports){\nvar PurchaseService_1 = require(\"./PurchaseService\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar RedirectReason_1 = require(\"../authcore/RedirectReason\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar PayPalService_1 = require(\"../integration/paypal/PayPalService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar AuthorizeNetService_1 = require(\"../integration/authorizenet/AuthorizeNetService\");\r\nvar TimeZoneType_1 = require(\"../webinars/models/TimeZoneType\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PersonalRouter_1 = require(\"../urls/PersonalRouter\");\r\nvar FreeEnrollmentService_1 = require(\"../integration/freeenrollment/FreeEnrollmentService\");\r\nvar ProductDetailsController = (function () {\r\n function ProductDetailsController($scope, $routeParams, $window, $location, $q, purchaseService, brandingService, financesRouter, coursesRouter, personalRouter, authManager, permissionsService, authRedirect, authService, businessUnitsService, payPalService, authorizeNetService, freeEnrollmentService, dialogService, courseService, progressService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$window = $window;\r\n this.$location = $location;\r\n this.$q = $q;\r\n this.purchaseService = purchaseService;\r\n this.brandingService = brandingService;\r\n this.financesRouter = financesRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.personalRouter = personalRouter;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.authRedirect = authRedirect;\r\n this.authService = authService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.payPalService = payPalService;\r\n this.authorizeNetService = authorizeNetService;\r\n this.freeEnrollmentService = freeEnrollmentService;\r\n this.dialogService = dialogService;\r\n this.courseService = courseService;\r\n this.progressService = progressService;\r\n this.BU_PAY_PAL = \"payPal\";\r\n this.BU_AUTHORIZE_NET = \"authorizeNet\";\r\n this.isLoaded = false;\r\n this.disableCheckoutButton = false;\r\n this.isPurchased = false;\r\n this.profileSupportLink = \"\";\r\n this.accessObjects = [];\r\n this.aNetPostUrl = \"https://test.authorize.net/payment/payment\";\r\n this.timeZone = TimeZoneType_1.TimeZone;\r\n this.viltAutoRegisterRequired = false;\r\n this.currentPaymentConfiguration = \"\";\r\n this.VILTSections = [];\r\n this.ILTSections = [];\r\n this.selectedVILTPage = 1;\r\n this.paginatedVILTSessions = [];\r\n this.selectedILTPage = 1;\r\n this.paginatedILTSessions = [];\r\n this.paymentOnly = false;\r\n this.showLabels = false;\r\n this.hasErrors = false;\r\n this.productId = $routeParams[FinancesRouter_1.FinancesRouter.PRODUCT_ID_PARAM];\r\n this.courseId = parseInt($location.search()[CoursesRouter_1.CoursesRouter.COURSE_PARAMETER]) || null;\r\n this.sectionId = parseInt($location.search()[CoursesRouter_1.CoursesRouter.SECTION_PARAMETER]) || null;\r\n this.ANetTransactionId = $location.search()[FinancesRouter_1.FinancesRouter.ANET_TRANSACTION_ID_PARAM] || null;\r\n this.viltAutoRegisterRequired = $location.search()[CoursesRouter_1.CoursesRouter.VILT_SESSIONS_AUTO_REGISTER_REQUIRED] || false;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.profileSupportLink = location.href.split('/#')[0] + '/#' + personalRouter.supportUrl();\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0) {\r\n var menu = MenuHelper_1.MenuHelper.CATALOG_MENU_KEY;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(menu);\r\n }\r\n this.loadProduct()\r\n .then(function () {\r\n var baseDomain = $window.location.href.split(\"://\")[0] + \"://\" + $window.location.href.split(\"://\")[1].split(\"/\")[0];\r\n if ($window.location.href.indexOf(\"client\") > 0) {\r\n baseDomain += \"/client\";\r\n }\r\n else if ($window.location.href.indexOf(\"app.html\") > 0) {\r\n baseDomain += \"/app.html\";\r\n }\r\n _this.aNetIframeCommunicator = baseDomain + financesRouter.productANetCommunicatorUrl();\r\n _this.aNetIframeCommunicator = financesRouter.getProductANetCommunicatorUrlByUrl($window.location.href);\r\n _this.checkPurchasing();\r\n _this.isLoaded = true;\r\n })\r\n .then(function () { return _this.businessUnitId = _this.product.businessUnitId; }).then(function () {\r\n _this.permissionsService.getProductPermissions(_this.productId.toString())\r\n .then(function (productPermission) { return _this.isAllowedEditing = productPermission.edit; });\r\n if (!authManager.isAuthenticated() && _this.viltAutoRegisterRequired) {\r\n _this.redirectToLogOn();\r\n }\r\n });\r\n }\r\n ProductDetailsController.prototype.loadProduct = function () {\r\n var _this = this;\r\n return this.purchaseService.getProduct(this.productId)\r\n .then(function (product) {\r\n _this.product = angular.copy(product);\r\n PageHeaderHelper_1.PageHeader.set().header(_this.product.name).update();\r\n })\r\n .then(function () {\r\n if (_this.product.courses) {\r\n _this.product.courses.forEach(function (course) {\r\n course.objectType = 'COURSE';\r\n course.startDateText = Moment_1.Moment.isValidDate(course.startDate);\r\n course.endDateText = Moment_1.Moment.isValidDate(course.endDate);\r\n });\r\n }\r\n if (_this.product.learningPaths) {\r\n var learningPathsCoursesMap = new Map();\r\n _this.product.learningPaths.forEach(function (learningPath) {\r\n learningPath.startDateText = Moment_1.Moment.isValidDate(learningPath.startDate);\r\n learningPath.endDateText = Moment_1.Moment.isValidDate(learningPath.endDate);\r\n learningPath.dependCourses.forEach(function (course) {\r\n if (!_this.product.learningPathCourses) {\r\n _this.product.learningPathCourses = [];\r\n }\r\n course.objectType = 'LP_COURSE';\r\n learningPathsCoursesMap.set(course.topic, course);\r\n });\r\n });\r\n learningPathsCoursesMap.forEach(function (course) {\r\n _this.product.learningPathCourses.push(course);\r\n });\r\n }\r\n var coursesMap = new Map();\r\n if (_this.product.courses) {\r\n _this.product.courses.map(function (elem) {\r\n coursesMap.set(elem.id, elem);\r\n });\r\n }\r\n if (_this.product.learningPathCourses) {\r\n _this.product.learningPathCourses.map(function (elem) {\r\n _this.accessObjects.push(elem);\r\n coursesMap.delete(elem.id);\r\n });\r\n }\r\n if (_this.product.courses) {\r\n var courses = [];\r\n _this.product.courses.map(function (course) {\r\n if (coursesMap.get(course.id)) {\r\n courses.push(course);\r\n }\r\n });\r\n courses.sort(function (a, b) {\r\n if (a.startDate > b.startDate)\r\n return 1;\r\n if (a.startDate < b.startDate)\r\n return -1;\r\n else {\r\n if (a.topic > b.topic)\r\n return 1;\r\n if (a.topic < b.topic)\r\n return -1;\r\n else\r\n return 0;\r\n }\r\n }).map(function (course) {\r\n _this.accessObjects.push(course);\r\n });\r\n }\r\n var materials = [];\r\n if (_this.product.materials) {\r\n _this.product.materials.map(function (elem) {\r\n materials.push(elem);\r\n });\r\n materials.sort(function (a, b) {\r\n if (a.title > b.title)\r\n return 1;\r\n if (a.title < b.title)\r\n return -1;\r\n else\r\n return 0;\r\n }).map(function (material) {\r\n _this.accessObjects.push(material);\r\n });\r\n }\r\n _this.getEnrollmentConfigForCourses();\r\n })\r\n .finally(function () {\r\n _this.onProductItemSelected(_this.getType(_this.accessObjects[0]), _this.accessObjects[0].id);\r\n return _this.product;\r\n })\r\n .catch(function (result) {\r\n if (result.status === 403) {\r\n _this.$location.url(_this.financesRouter.productsCatalogUrl());\r\n }\r\n return null;\r\n });\r\n };\r\n ProductDetailsController.prototype.getEnrollmentConfigForCourses = function () {\r\n var _this = this;\r\n this.accessObjects.map(function (elem, index) {\r\n var type = _this.getType(elem);\r\n if (type == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]\r\n || type == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LP_COURSE]) {\r\n _this.courseService.getCourseForProduct(elem.id).then(function (res) {\r\n elem.startDate = _this.getFormattedDate(res.startDate);\r\n elem.endDate = _this.getFormattedDate(res.endDate);\r\n });\r\n _this.courseService.getEnrollmentConfigurationForCourse(elem.id)\r\n .then(function (result) {\r\n elem.isAllowNewEnrollments = result.isAllowNewEnrollments;\r\n elem.enrollConfig = result;\r\n _this.courseService.getTotalUsedSeatsForCourse(elem.id).then(function (result) {\r\n elem.isAvailableByMaxEnrollments = !elem.enrollConfig.maxEnrollment || elem.enrollConfig.maxEnrollment\r\n && elem.enrollConfig.maxEnrollment > result;\r\n })\r\n .then(function () {\r\n _this.courseService.getLandingPage(elem.id)\r\n .then(function (result) {\r\n elem.landingPage = angular.copy(result);\r\n });\r\n });\r\n });\r\n }\r\n });\r\n this.showLabels = true;\r\n };\r\n ProductDetailsController.prototype.smartButtonsPaypal = function () {\r\n var _this = this;\r\n return this.businessUnitsService.getPayPalClientId(this.product.businessUnitId)\r\n .then(function (result) {\r\n _this.createScript(result);\r\n _this.clientId = result;\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Incorrect system purchase settings. Please contact your administrator.\");\r\n });\r\n };\r\n ProductDetailsController.prototype.createScript = function (clientId) {\r\n var _this = this;\r\n if (document.getElementById(\"paypal_script\")) {\r\n var element = document.getElementById(\"paypal_script\");\r\n element.parentNode.removeChild(element);\r\n }\r\n var scriptElement = document.createElement(\"script\");\r\n scriptElement.id = \"paypal_script\";\r\n if (!!this.product.subscriptionPlanId) {\r\n scriptElement.src = \"https://www.paypal.com/sdk/js?client-id=\" + clientId + \"&vault=true&intent=subscription\";\r\n document.body.appendChild(scriptElement);\r\n scriptElement.onload = function () {\r\n _this.showSubscriptionButtons();\r\n };\r\n }\r\n else {\r\n scriptElement.src = \"https://www.paypal.com/sdk/js?client-id=\" + clientId;\r\n document.body.appendChild(scriptElement);\r\n scriptElement.onload = function () {\r\n _this.showButtons();\r\n };\r\n }\r\n };\r\n ProductDetailsController.prototype.getType = function (object) {\r\n return object.objectType ? object.objectType : 'COURSE';\r\n };\r\n ProductDetailsController.prototype.isSelected = function (object) {\r\n return this.selectedCourse == object ||\r\n this.selectedMaterial == object ||\r\n this.selectedLearningPathCourse == object ||\r\n this.selectedLearningPath == object;\r\n };\r\n ProductDetailsController.prototype.showSubscriptionButtons = function () {\r\n var _this = this;\r\n paypal.Buttons({\r\n style: {\r\n label: 'subscribe'\r\n },\r\n createSubscription: function (data, actions) {\r\n var response = actions.subscription.create({\r\n 'plan_id': _this.product.subscriptionPlanId\r\n });\r\n response.then(function (subscriptionId) {\r\n _this.payPalService.createSubscriptionPurchaseOrder(_this.productId, subscriptionId);\r\n });\r\n return response;\r\n },\r\n onApprove: function (data, actions) {\r\n _this.deactivateMainContent();\r\n return _this.payPalService.approveSubscription(_this.productId, data.subscriptionID)\r\n .then(function (purchasedOrderId) {\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(purchasedOrderId));\r\n }).catch(function () {\r\n _this.dialogService.confirm(\"Go to 'My purchases' in your profile, if the subscription does not appear there in 5 minutes, then contact the support service\", {\r\n title: \"Warning\",\r\n hideCancelButton: true\r\n });\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n },\r\n onError: function (error) {\r\n _this.activateMainContent();\r\n INotifier_1.notifier.error(\"Failed to purchase product. Please contact support.\");\r\n }\r\n }).render('#paypal-button-container');\r\n };\r\n ProductDetailsController.prototype.showButtons = function () {\r\n var _this = this;\r\n return paypal.Buttons({\r\n createOrder: function () {\r\n return _this.payPalService.createOrderSmart(_this.productId);\r\n },\r\n onApprove: function (data, actions) {\r\n _this.deactivateMainContent();\r\n var s = JSON.stringify({\r\n orderID: data.orderID\r\n });\r\n return _this.payPalService.confirmOrderSmart(s).then(function (purchasedOrderId) {\r\n if (_this.viltAutoRegisterRequired) {\r\n _this.purchasingCallback();\r\n }\r\n else {\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(purchasedOrderId));\r\n }\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Your credit card or PayPal account has not been charged. Please try again\");\r\n }).finally(function () {\r\n _this.activateMainContent();\r\n });\r\n },\r\n onError: function (error) {\r\n _this.activateMainContent();\r\n _this.courseService.getFullCourses(_this.productId)\r\n .then(function (courses) {\r\n INotifier_1.notifier.errorWithRef(\"

    Purchase, from the product page is not available.

    \\n

    \" + courses[0].topic + \"

    \\n

    Course settings do not allow purchases from the product page. Please go to the course page

    \\n \\n \" + (_this.$window.location.href.split('#')[0] + '#' + _this.coursesRouter.detailsUrl(courses[0].id)) + \"\");\r\n });\r\n }\r\n }).render('#paypal-button-container');\r\n };\r\n ProductDetailsController.prototype.deactivateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.add(\"hidden\");\r\n mainLoadingElement.classList.remove(\"hidden\");\r\n };\r\n ProductDetailsController.prototype.activateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.remove(\"hidden\");\r\n mainLoadingElement.classList.add(\"hidden\");\r\n };\r\n ProductDetailsController.prototype.redirectToLogOn = function () {\r\n this.authRedirect.redirectToLogOn(RedirectReason_1.RedirectReason.LOGON_REQUIRED, this.product.businessUnitId);\r\n return;\r\n };\r\n ProductDetailsController.prototype.checkPurchasing = function () {\r\n var _this = this;\r\n this.purchaseService.checkOrder(this.product.id).then(function (result) {\r\n _this.isPurchased = result.purchased;\r\n if (_this.isPurchased && _this.viltAutoRegisterRequired) {\r\n _this.dialogService.confirm(\"Good news! You already have an access.\", {\r\n title: \"Course already available\",\r\n hideCancelButton: true\r\n }).then(function () {\r\n var url = _this.$window.location.href.split(\"#\")[0] + \"#/home/learningPaths?role=LEARNER\";\r\n _this.$window.location.replace(url);\r\n _this.$window.location.reload();\r\n });\r\n }\r\n if (_this.isAuthenticated) {\r\n if (_this.product.price != 0) {\r\n _this.businessUnitsService.checkPayPalCorrectData(_this.product.businessUnitId)\r\n .then(function (resultPayPal) {\r\n if (resultPayPal) {\r\n _this.checkPurchasingPayPal();\r\n }\r\n _this.businessUnitsService.checkAuthorizeNetCorrectData(_this.product.businessUnitId)\r\n .then(function (resultANet) {\r\n if (resultANet) {\r\n _this.isANetConfigured = true;\r\n _this.businessUnitsService.getAuthorizeNetEnvironmentType(_this.product.businessUnitId)\r\n .then(function (config) {\r\n _this.aNetPostUrl = config.toUpperCase() === \"SANDBOX\"\r\n ? \"https://test.authorize.net/payment/payment\"\r\n : \"https://accept.authorize.net/payment/payment\";\r\n var mainElement = document.querySelector(\"form#send_hptoken\");\r\n mainElement.setAttribute(\"action\", _this.aNetPostUrl);\r\n _this.checkPurchasingAuthorizeNet();\r\n });\r\n }\r\n if (!resultPayPal && !resultANet) {\r\n INotifier_1.notifier.error(\"Incorrect system purchase settings. Please contact your administrator.\");\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n _this.checkPurchasingFreeEnroll();\r\n }\r\n }\r\n if (result.expirationDate != null) {\r\n _this.expirationDate = Moment_1.Moment.isValidDate(result.expirationDate);\r\n }\r\n else {\r\n _this.expirationDate = null;\r\n }\r\n });\r\n };\r\n ProductDetailsController.prototype.checkPurchasingPayPal = function () {\r\n var _this = this;\r\n if (this.isPurchased && !!this.product.subscriptionPlanId\r\n || !!this.product.subscriptionPlanId && this.product.enrollmentConfigured) {\r\n }\r\n else {\r\n var VILTPromise;\r\n var ILTPromise;\r\n var courseIds = [];\r\n if (this.product.courses) {\r\n courseIds = this.product.courses.map(function (c) { return c.id; });\r\n }\r\n if (this.product.learningPathCourses) {\r\n this.product.learningPathCourses.forEach(function (lc) {\r\n if (!_this.contains(courseIds, lc.id)) {\r\n courseIds.push(lc.id);\r\n }\r\n });\r\n }\r\n if (this.viltAutoRegisterRequired && this.courseId && this.sectionId) {\r\n if (this.contains(courseIds, this.courseId)) {\r\n VILTPromise = this.courseService.getSessionsViltList(this.courseId, this.sectionId);\r\n ILTPromise = this.courseService.getSessionsIltList(this.courseId, this.sectionId);\r\n }\r\n else {\r\n this.openErrorDialog('Please contact administrator, sessions are not found');\r\n }\r\n }\r\n else if (this.viltAutoRegisterRequired && this.courseId) {\r\n if (this.contains(courseIds, this.courseId)) {\r\n VILTPromise = this.courseService.getVILTSessionsForCourse(this.courseId);\r\n ILTPromise = this.courseService.getILTSessionsForCourse(this.courseId);\r\n }\r\n else {\r\n this.openErrorDialog('Please contact administrator, sessions are not found');\r\n }\r\n }\r\n else if (this.viltAutoRegisterRequired && this.sectionId) {\r\n VILTPromise = this.courseService.getSessionsViltListForCourses(this.sectionId, courseIds);\r\n ILTPromise = this.courseService.getSessionsIltListForCourses(this.sectionId, courseIds);\r\n }\r\n else if (this.viltAutoRegisterRequired) {\r\n this.paymentOnly = true;\r\n VILTPromise = this.courseService.getVILTSessionsForCourse(courseIds[0]);\r\n ILTPromise = this.courseService.getILTSessionsForCourse(courseIds[0]);\r\n }\r\n if (VILTPromise || ILTPromise) {\r\n VILTPromise.then(function (result) {\r\n _this.VILTSessionsToBuy = !_this.paymentOnly ? result.filter(function (v) { return v.status === \"SCHEDULED\" || v.status === \"ONGOING\"; }) : [];\r\n _this.VILTSessionsToBuy.map(function (session) { return session.title; }).forEach(function (el) {\r\n if (!_this.contains(_this.VILTSections, el)) {\r\n _this.VILTSections.push(el);\r\n }\r\n });\r\n _this.paginatedVILTSessions = _this.VILTSessionsToBuy.filter(function (r) { return r.title == _this.VILTSections[_this.selectedVILTPage - 1]; });\r\n ILTPromise.then(function (result) {\r\n _this.ILTSessionsToBuy = !_this.paymentOnly ? result.filter(function (v) { return v.status === \"SCHEDULED\"; }) : [];\r\n _this.ILTSessionsToBuy.map(function (session) { return session.title; }).forEach(function (el) {\r\n if (!_this.contains(_this.ILTSections, el)) {\r\n _this.ILTSections.push(el);\r\n }\r\n });\r\n _this.paginatedILTSessions = _this.ILTSessionsToBuy.filter(function (r) { return r.title == _this.ILTSections[_this.selectedILTPage - 1]; });\r\n if (_this.ILTSessionsToBuy.length == 0 && _this.VILTSessionsToBuy.length == 0 && !_this.paymentOnly) {\r\n _this.openErrorDialog('Please contact administrator, sessions are not found');\r\n }\r\n })\r\n .finally(function () {\r\n if (!_this.hasErrors) {\r\n _this.smartButtonsPaypal();\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n this.smartButtonsPaypal();\r\n }\r\n }\r\n };\r\n ProductDetailsController.prototype.checkPurchasingAuthorizeNet = function () {\r\n var _this = this;\r\n if (this.isAuthenticated) {\r\n if (this.isPurchased && !!this.product.subscriptionPlanId\r\n || !!this.product.subscriptionPlanId && this.product.enrollmentConfigured) {\r\n }\r\n else {\r\n if (this.ANetTransactionId) {\r\n this.authorizeNetService.confirmOrder(this.ANetTransactionId, this.product.id).then(function (result) {\r\n if (result) {\r\n _this.isPurchased = true;\r\n if (_this.viltAutoRegisterRequired) {\r\n _this.purchasingCallback();\r\n }\r\n else {\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(result));\r\n }\r\n }\r\n else {\r\n var url = window.location.href;\r\n url = url.slice(0, url.indexOf(\"?\"));\r\n location.replace(url);\r\n }\r\n });\r\n }\r\n else {\r\n this.authorizeNetService.getToken(this.businessUnitId, this.product.price, this.aNetIframeCommunicator, this.product.id).then(function (result) {\r\n _this.aNetToken = result;\r\n var VILTPromise;\r\n var ILTPromise;\r\n var courseIds = [];\r\n if (_this.product.courses) {\r\n courseIds = _this.product.courses.map(function (c) { return c.id; });\r\n }\r\n if (_this.product.learningPathCourses) {\r\n _this.product.learningPathCourses.forEach(function (lc) {\r\n if (!_this.contains(courseIds, lc.id)) {\r\n courseIds.push(lc.id);\r\n }\r\n });\r\n }\r\n if (_this.viltAutoRegisterRequired && _this.courseId && _this.sectionId) {\r\n if (_this.contains(courseIds, _this.courseId)) {\r\n VILTPromise = _this.courseService.getSessionsViltList(_this.courseId, _this.sectionId);\r\n ILTPromise = _this.courseService.getSessionsIltList(_this.courseId, _this.sectionId);\r\n }\r\n else {\r\n _this.openErrorDialog('Please contact administrator, sessions are not found');\r\n }\r\n }\r\n else if (_this.viltAutoRegisterRequired && _this.courseId) {\r\n if (_this.contains(courseIds, _this.courseId)) {\r\n VILTPromise = _this.courseService.getVILTSessionsForCourse(_this.courseId);\r\n ILTPromise = _this.courseService.getILTSessionsForCourse(_this.courseId);\r\n }\r\n else {\r\n _this.openErrorDialog('Please contact administrator, sessions are not found');\r\n }\r\n }\r\n else if (_this.viltAutoRegisterRequired && _this.sectionId) {\r\n VILTPromise = _this.courseService.getSessionsViltListForCourses(_this.sectionId, courseIds);\r\n ILTPromise = _this.courseService.getSessionsIltListForCourses(_this.sectionId, courseIds);\r\n }\r\n else if (_this.viltAutoRegisterRequired) {\r\n _this.paymentOnly = true;\r\n VILTPromise = _this.courseService.getVILTSessionsForCourse(courseIds[0]);\r\n ILTPromise = _this.courseService.getILTSessionsForCourse(courseIds[0]);\r\n }\r\n VILTPromise.then(function (result) {\r\n _this.VILTSessionsToBuy = !_this.paymentOnly ? result.filter(function (v) { return v.status === \"SCHEDULED\" || v.status === \"ONGOING\"; }) : [];\r\n _this.VILTSessionsToBuy.map(function (session) { return session.title; }).forEach(function (el) {\r\n if (!_this.contains(_this.VILTSections, el)) {\r\n _this.VILTSections.push(el);\r\n }\r\n });\r\n _this.paginatedVILTSessions = _this.VILTSessionsToBuy.filter(function (r) { return r.title == _this.VILTSections[_this.selectedVILTPage - 1]; });\r\n ILTPromise.then(function (res) {\r\n _this.ILTSessionsToBuy = !_this.paymentOnly ? res.filter(function (v) { return v.status === \"SCHEDULED\"; }) : [];\r\n _this.ILTSessionsToBuy.map(function (session) { return session.title; }).forEach(function (el) {\r\n if (!_this.contains(_this.ILTSections, el)) {\r\n _this.ILTSections.push(el);\r\n }\r\n });\r\n _this.paginatedILTSessions = _this.ILTSessionsToBuy.filter(function (r) { return r.title == _this.ILTSections[_this.selectedILTPage - 1]; });\r\n if (_this.VILTSessionsToBuy.length == 0 && _this.ILTSessionsToBuy.length == 0 && !_this.paymentOnly) {\r\n _this.openErrorDialog('Please contact administrator, sessions are not found');\r\n }\r\n }).finally(function () {\r\n var element = document.getElementById('send_hptoken_submit_btn');\r\n element.click();\r\n if (!$('#authorizeNetModal').hasClass('show') && !$('#authorizeNetModal').hasClass('in') && !_this.hasErrors) {\r\n _this.openAuthorizeNetDialog();\r\n }\r\n });\r\n });\r\n });\r\n }\r\n }\r\n }\r\n };\r\n ProductDetailsController.prototype.openErrorDialog = function (message) {\r\n var _this = this;\r\n this.hasErrors = true;\r\n this.dialogService.confirm(message, {\r\n title: 'Sessions are not found',\r\n hideCancelButton: true\r\n }).finally(function () {\r\n var url = _this.$window.location.href.split('?')[0];\r\n _this.$window.location.replace(url);\r\n _this.$window.location.reload();\r\n });\r\n };\r\n ProductDetailsController.prototype.onProductItemSelected = function (referencedObjectType, objectId) {\r\n this.selectedMaterial = null;\r\n this.selectedCourse = null;\r\n this.selectedLearningPath = null;\r\n this.selectedLearningPathCourse = null;\r\n if (referencedObjectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]) {\r\n this.selectedMaterial = this.product.materials.filter(function (m) { return m.id == objectId; })[0];\r\n }\r\n else if (referencedObjectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]) {\r\n this.selectedCourse = this.product.courses.filter(function (c) { return c.id == objectId; })[0];\r\n }\r\n else if (referencedObjectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LEARNING_PATH]) {\r\n this.selectedLearningPath = this.product.learningPaths.filter(function (l) { return l.id == objectId; })[0];\r\n }\r\n else if (referencedObjectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LP_COURSE]) {\r\n this.selectedLearningPathCourse = this.product.learningPathCourses.filter(function (c) { return c.id == objectId; })[0];\r\n }\r\n };\r\n ProductDetailsController.prototype.contains = function (array, value) {\r\n var result = false;\r\n for (var a in array) {\r\n if (array[a] == value) {\r\n result = true;\r\n }\r\n }\r\n return result;\r\n };\r\n ProductDetailsController.prototype.checkout = function () {\r\n var _this = this;\r\n console.log(this.authManager.getCurrentUser().id);\r\n this.disableCheckoutButton = true;\r\n this.payPalService.createOrder(this.productId)\r\n .then(function (orderApproveUrl) {\r\n _this.$window.open(orderApproveUrl, \"_self\");\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"Incorrect system purchase settings. Please contact your administrator.\");\r\n _this.disableCheckoutButton = false;\r\n });\r\n };\r\n ProductDetailsController.prototype.openAuthorizeNetDialog = function () {\r\n var _this = this;\r\n if (this.aNetToken && this.aNetToken.length > 0) {\r\n $(\"#authorizeNetModal\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n }\r\n else {\r\n this.courseService.getFullCourses(this.productId)\r\n .then(function (courses) {\r\n INotifier_1.notifier.errorWithRef(\"

    Purchase, from the product page is not available.

    \\n

    \" + courses[0].topic + \"

    \\n

    Course settings do not allow purchases from the product page. Please go to the course page

    \\n \\n \" + (_this.$window.location.href.split('#')[0] + '#' + _this.coursesRouter.detailsUrl(courses[0].id)) + \"\");\r\n });\r\n }\r\n };\r\n ProductDetailsController.prototype.dateToTimeZoneDate = function (timeZone, date) {\r\n var _this = this;\r\n var offset;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == timeZone) {\r\n offset = _this.getTimeZoneOffset(t.value);\r\n }\r\n });\r\n return (date + new Date().getTimezoneOffset() * 60000 - offset);\r\n };\r\n ProductDetailsController.prototype.getTimeZoneOffset = function (timeZone) {\r\n var now = new Date();\r\n var localTime = Math.floor((now.getTime() / 1000)) * 1000;\r\n var timeZoneTime = new Date(now.toLocaleString(\"en-US\", { timeZone: timeZone })).getTime();\r\n return now.getTimezoneOffset() * 60000 + (localTime - timeZoneTime);\r\n };\r\n ProductDetailsController.prototype.purchasingCallback = function () {\r\n var _this = this;\r\n if (this.viltAutoRegisterRequired && this.courseId && this.sectionId) {\r\n this.courseService.autoRegisterToCourseSessions(this.courseId, this.sectionId).then(function (rc) {\r\n if (rc > 0) {\r\n var url = _this.$window.location.href.split(\"#\")[0] + \"#/home/courses?role=LEARNER\";\r\n _this.$location.url(url);\r\n }\r\n else {\r\n _this.courseService.autoRegisterToCourseILTSessions(_this.courseId, _this.sectionId).then(function (rc) {\r\n if (rc > 0) {\r\n var url = _this.$window.location.href.split(\"#\")[0] + \"#/home/courses?role=LEARNER\";\r\n _this.$location.url(url);\r\n }\r\n else {\r\n INotifier_1.notifier.error('Please contact administrator, sessions are not found');\r\n }\r\n });\r\n }\r\n });\r\n }\r\n else if (this.viltAutoRegisterRequired && this.courseId) {\r\n this.courseService.autoRegisterToAllCourseSessions(this.courseId).then(function (viltRes) {\r\n _this.courseService.autoRegisterToAllCourseILTSessions(_this.courseId).then(function (iltRes) {\r\n if (viltRes + iltRes > 0) {\r\n var url = _this.$window.location.href.split(\"#\")[0] + \"#/home/courses?role=LEARNER\";\r\n _this.$location.url(url);\r\n }\r\n else {\r\n INotifier_1.notifier.error('Please contact administrator, sessions are not found');\r\n }\r\n });\r\n });\r\n }\r\n else if (this.viltAutoRegisterRequired && this.sectionId) {\r\n var courseIds = [];\r\n if (this.product.courses) {\r\n courseIds = this.product.courses.map(function (c) { return c.id; });\r\n }\r\n if (this.product.learningPathCourses) {\r\n this.product.learningPathCourses.forEach(function (lc) {\r\n if (!_this.contains(courseIds, lc.id)) {\r\n courseIds.push(lc.id);\r\n }\r\n });\r\n }\r\n this.courseService.autoRegisterToSectionSessionsBySectionId(this.sectionId, courseIds).then(function (viltRes) {\r\n _this.courseService.autoRegisterToILTSectionSessionsBySectionId(_this.sectionId, courseIds).then(function (iltRes) {\r\n if (viltRes + iltRes > 0) {\r\n var url = _this.$window.location.href.split(\"#\")[0] + \"#/home/courses?role=LEARNER\";\r\n _this.$location.url(url);\r\n }\r\n else {\r\n INotifier_1.notifier.error('Please contact administrator, sessions are not found');\r\n }\r\n });\r\n });\r\n }\r\n else if (this.viltAutoRegisterRequired) {\r\n var url = this.$window.location.href.split(\"#\")[0] + \"#/home/courses?role=LEARNER\";\r\n this.$location.url(url);\r\n }\r\n };\r\n ProductDetailsController.prototype.goToVILTPage = function (pageNumber) {\r\n var _this = this;\r\n if (this.selectedVILTPage != pageNumber && pageNumber >= 1 && pageNumber < this.VILTSections.length) {\r\n this.selectedVILTPage = pageNumber;\r\n this.paginatedVILTSessions = this.VILTSessionsToBuy.filter(function (r) { return r.title == _this.VILTSections[_this.selectedVILTPage - 1]; });\r\n }\r\n else if (pageNumber < 1) {\r\n this.selectedVILTPage = 1;\r\n this.paginatedVILTSessions = this.VILTSessionsToBuy.filter(function (r) { return r.title == _this.VILTSections[_this.selectedVILTPage - 1]; });\r\n }\r\n else if (pageNumber >= this.VILTSections.length) {\r\n this.selectedVILTPage = this.VILTSections.length;\r\n this.paginatedVILTSessions = this.VILTSessionsToBuy.filter(function (r) { return r.title == _this.VILTSections[_this.selectedVILTPage - 1]; });\r\n }\r\n };\r\n ProductDetailsController.prototype.goToILTPage = function (pageNumber) {\r\n var _this = this;\r\n if (this.selectedILTPage != pageNumber && pageNumber >= 1 && pageNumber < this.ILTSections.length) {\r\n this.selectedILTPage = pageNumber;\r\n this.paginatedILTSessions = this.ILTSessionsToBuy.filter(function (r) { return r.title == _this.ILTSections[_this.selectedILTPage - 1]; });\r\n }\r\n else if (pageNumber < 1) {\r\n this.selectedILTPage = 1;\r\n this.paginatedILTSessions = this.ILTSessionsToBuy.filter(function (r) { return r.title == _this.ILTSections[_this.selectedILTPage - 1]; });\r\n }\r\n else if (pageNumber >= this.ILTSections.length) {\r\n this.selectedILTPage = this.ILTSections.length;\r\n this.paginatedILTSessions = this.ILTSessionsToBuy.filter(function (r) { return r.title == _this.ILTSections[_this.selectedILTPage - 1]; });\r\n }\r\n };\r\n ProductDetailsController.prototype.checkPurchasingFreeEnroll = function () {\r\n if (this.isPurchased && !!this.product.subscriptionPlanId\r\n || !!this.product.subscriptionPlanId && this.product.enrollmentConfigured) {\r\n }\r\n else {\r\n this.freeEnrollmentService.confirmFreeEnrollment(this.productId);\r\n }\r\n };\r\n ProductDetailsController.prototype.enrollForFree = function () {\r\n var _this = this;\r\n var businessUnitId = this.businessUnitId;\r\n var productId = this.product.id;\r\n var returnUrl = \"\";\r\n this.freeEnrollmentService.createOrder({ businessUnitId: businessUnitId, productId: productId, returnUrl: returnUrl })\r\n .then(function (productId) {\r\n _this.$location.url(_this.financesRouter.purchasedProductUrl(productId));\r\n })\r\n .catch(function (response) {\r\n var regex = /error.order.creation.failed.used./gm;\r\n if (regex.test(response.data.error)) {\r\n _this.courseService.getCourseName(response.data.error.split(\"error.order.creation.failed.used.\")[1]).then(function (response) {\r\n // notifier.error(\"Enrollment from the product page is not available. \" + response + \" Сourse settings do not allow enrollment from the product page. Please go to the course page.\");\r\n INotifier_1.notifier.errorWithRef(\"

    Enrollment from the product page is not available.

    \\n

    \" + response + \"

    \\n

    \\u0421ourse settings do not allow enrollment from the product page. Please go to the course page.

    \");\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Incorrect system purchase settings. Please contact your administrator.\");\r\n _this.disableCheckoutButton = false;\r\n }\r\n });\r\n };\r\n ProductDetailsController.prototype.isBeforeToday = function (entry) {\r\n var now = new Date().getTime();\r\n return entry.getTime() ? entry.getTime() < now : false;\r\n };\r\n ProductDetailsController.prototype.getDate = function (entry) {\r\n return new Date(entry);\r\n };\r\n ProductDetailsController.prototype.getFormattedDate = function (entry) {\r\n return entry\r\n ? new Date(entry).toLocaleString(\"en-US\").split(\",\")[0]\r\n : \"\";\r\n };\r\n ProductDetailsController.prototype.getToday = function () {\r\n return new Date();\r\n };\r\n ProductDetailsController.prototype.isMaterial = function (entry) {\r\n return !!entry.uploadDate;\r\n };\r\n ProductDetailsController.prototype.getProductSize = function () {\r\n var result = 0;\r\n for (var course in this.product.courses)\r\n result++;\r\n for (var material in this.product.materials)\r\n result++;\r\n for (var learningPath in this.product.learningPathCourses)\r\n result++;\r\n return result;\r\n };\r\n ProductDetailsController.prototype.coursesEnrollNotAvailable = function () {\r\n var _this = this;\r\n return !!this.product && !!this.product.enrollmentConfigured && this.accessObjects.map(function (elem) {\r\n var type = _this.getType(elem);\r\n if (type == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]\r\n || type == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LP_COURSE]) {\r\n return _this.isAvailableEnrollment(elem.isAvailableByMaxEnrollments, elem.enrollConfig);\r\n }\r\n else {\r\n return true;\r\n }\r\n }).filter(function (b) { return !b; }).length != 0;\r\n };\r\n ProductDetailsController.prototype.isAvailableEnrollment = function (isAvailableByMaxEnrollments, enrollmentConfig) {\r\n return !enrollmentConfig || !enrollmentConfig.id || (!!enrollmentConfig && !!enrollmentConfig.id &&\r\n (enrollmentConfig.isAllowNewEnrollments && enrollmentConfig.isAllowSelfEnrollments && this.isAvailableForCurrentDate(enrollmentConfig)\r\n && (isAvailableByMaxEnrollments || enrollmentConfig.isEnableWaitlist)));\r\n };\r\n ProductDetailsController.prototype.isAvailableForCurrentDate = function (enrollmentConfig) {\r\n var now = new Date().getTime();\r\n var isNowAfterStartDate = enrollmentConfig.startDate && moment(now).isAfter(enrollmentConfig.startDate);\r\n var isBeforeEndDate = enrollmentConfig.endDate && moment(now).isBefore(enrollmentConfig.endDate);\r\n return (!enrollmentConfig.startDate || isNowAfterStartDate)\r\n && (!enrollmentConfig.endDate || isBeforeEndDate);\r\n };\r\n ProductDetailsController.NAME = \"finances.ProductDetailsController\";\r\n ProductDetailsController.$inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$window\",\r\n \"$location\",\r\n \"$q\",\r\n PurchaseService_1.PurchaseService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n PersonalRouter_1.PersonalRouter.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n AuthService_1.AuthService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n PayPalService_1.PayPalService.NAME,\r\n AuthorizeNetService_1.AuthorizeNetService.NAME,\r\n FreeEnrollmentService_1.FreeEnrollmentService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n ProgressService_1.ProgressService.NAME\r\n ];\r\n return ProductDetailsController;\r\n})();\r\nexports.ProductDetailsController = ProductDetailsController;\r\n},{\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../authcore/RedirectReason\":28,\"../branding/CustomBrandingService\":35,\"../businessUnits/BusinessUnitsService\":44,\"../components/dialog/DialogService\":166,\"../courses/CourseService\":211,\"../courses/ProgressService\":219,\"../integration/authorizenet/AuthorizeNetService\":297,\"../integration/freeenrollment/FreeEnrollmentService\":303,\"../integration/paypal/PayPalService\":306,\"../security/PermissionsService\":418,\"../urls/CoursesRouter\":468,\"../urls/FinancesRouter\":471,\"../urls/PersonalRouter\":484,\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"../utils/PageHeaderHelper\":521,\"../webinars/models/TimeZoneType\":530,\"./PurchaseService\":237}],236:[function(require,module,exports){\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar PurchaseService_1 = require(\"./PurchaseService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar NewsRouter_1 = require(\"../urls/NewsRouter\");\r\nvar NewsKey_1 = require(\"../news/models/NewsKey\");\r\nvar ProductEditController = (function () {\r\n function ProductEditController($window, $location, $routeParams, purchaseService, securityService, coursesRouter, learningPathsRouter, materialsRouter, authManager, authRedirect, authService, permissionsService, url, $uploader, newsRouter) {\r\n var _this = this;\r\n this.$window = $window;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.purchaseService = purchaseService;\r\n this.securityService = securityService;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.materialsRouter = materialsRouter;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.authService = authService;\r\n this.permissionsService = permissionsService;\r\n this.url = url;\r\n this.$uploader = $uploader;\r\n this.newsRouter = newsRouter;\r\n this.MIN_PRICE = 0;\r\n this.MAX_PRICE = 1000000.00;\r\n this.MIN_EXPIRATION = 1;\r\n this.MAX_EXPIRATION = 1461;\r\n this.MIN_LIMIT = 1;\r\n this.MAX_LIMIT = 1000;\r\n this.isLoaded = false;\r\n this.isDisabled = true;\r\n this.businessUnitVisible = false;\r\n this.currentUserBusinessUnits = [];\r\n this.hasPreviewUrlCanceled = false;\r\n this.isSubscriptionProduct = false;\r\n this.productId = $routeParams[FinancesRouter_1.FinancesRouter.PRODUCT_ID_PARAM];\r\n this.objectType = $location.search()[FinancesRouter_1.FinancesRouter.OBJECT_TYPE_PARAM] || null;\r\n this.objectId = parseInt($location.search()[FinancesRouter_1.FinancesRouter.OBJECT_ID_PARAM]) || null;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.CATALOG_MENU_KEY);\r\n this.securityService\r\n .demandAuthentication();\r\n this.loadProduct()\r\n .then(function () { return _this.isDisabled = false; })\r\n .then(function () { return _this.businessUnitId = _this.product.businessUnitId; })\r\n .then(function () {\r\n _this.securityService\r\n .demandProductPermissions(_this.productId.toString(), function (productPermissions) { return productPermissions.edit; });\r\n });\r\n }\r\n ProductEditController.prototype.loadProduct = function () {\r\n var _this = this;\r\n return this.purchaseService.getProduct(this.productId)\r\n .then(function (product) {\r\n _this.product = angular.copy(product);\r\n })\r\n .then(function () {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit product \" + \"‘\"\r\n + _this.product.productId + \"’\").update();\r\n _this.isLoaded = true;\r\n _this.previewUrl = _this.product.previewUrl ? _this.product.previewUrl : null;\r\n return _this.product;\r\n });\r\n };\r\n ProductEditController.prototype.updateProduct = function () {\r\n var _this = this;\r\n this.isDisabled = true;\r\n var preview = this.croppedImage ? this.croppedImage : this.preview;\r\n var hasPreviewUrlCanceled = this.hasPreviewUrlCanceled;\r\n this.hasPreviewUrlCanceled = false;\r\n if (!this.product.isMultiCard) {\r\n this.product.multiCardLimit = null;\r\n }\r\n this.purchaseService.updateProduct(this.productId, this.product.version, this.product.productId, this.product.name, this.product.description, this.product.keywords, this.product.subscriptionExpiration, this.product.price, this.product.isMultiCard, this.product.multiCardLimit, this.product.subscriptionPlanId, hasPreviewUrlCanceled, preview)\r\n .then(function (product) {\r\n if (preview != null) {\r\n _this.upload(preview, _this.productId, \"preview\").then(function () {\r\n _this.loadProduct().then(function () {\r\n _this.notifierSuccess();\r\n });\r\n });\r\n }\r\n else {\r\n _this.product = angular.copy(product);\r\n _this.notifierSuccess();\r\n }\r\n });\r\n };\r\n ProductEditController.prototype.notifierSuccess = function () {\r\n INotifier_1.notifier.success(\"Product has been successfully updated\");\r\n this.isDisabled = false;\r\n };\r\n ProductEditController.prototype.upload = function (file, productId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/finance/products/upload?productId=:productId&fileType=:fileType\")\r\n .param(\":productId\", productId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n ProductEditController.prototype.onCancel = function () {\r\n if (this.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]) {\r\n this.$location.url(this.coursesRouter.relatedProductsUpdateUrl(this.objectId));\r\n }\r\n else if (this.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LEARNING_PATH]) {\r\n this.$location.url(this.learningPathsRouter.relatedProductsUpdateUrl(this.objectId));\r\n }\r\n else if (this.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]) {\r\n this.$location.url(this.materialsRouter.relatedProductsUpdateUrl(this.objectId));\r\n }\r\n else {\r\n this.$window.location.reload();\r\n }\r\n };\r\n ProductEditController.prototype.resetPreview = function () {\r\n if (this.preview) {\r\n this.preview = undefined;\r\n }\r\n if (this.previewUrl) {\r\n this.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n if (this.croppedImage) {\r\n this.croppedImage = undefined;\r\n }\r\n };\r\n ProductEditController.prototype.restorePreviewUrl = function () {\r\n this.preview = undefined;\r\n this.previewUrl = this.product.previewUrl;\r\n this.croppedImage = undefined;\r\n this.hasPreviewUrlCanceled = false;\r\n };\r\n ProductEditController.prototype.getMaxLimit = function () {\r\n var limit = 0;\r\n limit += this.product.materials ? this.product.materials.length : 0;\r\n limit += this.product.courses ? this.product.courses.length : 0;\r\n limit += this.product.learningPaths ? this.product.learningPaths.length : 0;\r\n return Math.min(limit, this.MAX_LIMIT);\r\n };\r\n ProductEditController.prototype.setBusinessUnitSelectorVisible = function () {\r\n this.businessUnitVisible = true;\r\n };\r\n ProductEditController.prototype.validateSubscriptionPlanId = function () {\r\n if (!this.product.subscriptionPlanId) {\r\n this.isSubscriptionProduct = false;\r\n return true;\r\n }\r\n else {\r\n var regEx = /(P-)[A-Za-z0-9]{1,50}$/;\r\n var isSubscription = regEx.test(this.product.subscriptionPlanId);\r\n if (isSubscription) {\r\n this.product.isMultiCard = false;\r\n this.product.subscriptionExpiration = null;\r\n this.isSubscriptionProduct = true;\r\n }\r\n return isSubscription;\r\n }\r\n };\r\n ProductEditController.prototype.redirectToSubscriptionSetupHelp = function () {\r\n this.$location.url(this.newsRouter.helpUrl(NewsKey_1.NewsKey.HELP_PAY_PAL_SUBSCRIPTIONS));\r\n };\r\n ProductEditController.prototype.showCropperModalAfterLoad = function () {\r\n var _this = this;\r\n setTimeout(function () {\r\n _this.preview != undefined || _this.previewUrl != undefined\r\n ? _this.showCropperModal()\r\n : _this.showCropperModalAfterLoad();\r\n }, 100);\r\n };\r\n ProductEditController.prototype.showCropperModal = function () {\r\n $(\"#imageCropperModal\").modal(\"show\");\r\n };\r\n ProductEditController.NAME = \"finance.ProductEditController\";\r\n ProductEditController.$inject = [\r\n \"$window\",\r\n \"$location\",\r\n \"$routeParams\",\r\n PurchaseService_1.PurchaseService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n AuthService_1.AuthService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n \"Upload\",\r\n NewsRouter_1.NewsRouter.NAME\r\n ];\r\n return ProductEditController;\r\n})();\r\nexports.ProductEditController = ProductEditController;\r\n},{\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../news/models/NewsKey\":356,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../urls/FinancesRouter\":471,\"../urls/LearningPathsRouter\":477,\"../urls/MaterialsRouter\":480,\"../urls/NewsRouter\":481,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./PurchaseService\":237}],237:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PurchaseService = (function () {\r\n function PurchaseService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n PurchaseService.prototype.obtainRightsForOrderProducts = function (id) {\r\n return this.$http.post(this.url.base(\"/api/finance/orders/:id\")\r\n .param(\":id\", id)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.getProduct = function (productId) {\r\n return this.$http.get(this.url.base(\"/api/finance/products/:productId\")\r\n .param(\":productId\", productId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.getReferencedObjectProductsList = function (objectId, objectType) {\r\n return this.$http.get(this.url.base(\"/api/finance/referencedObjectProducts?objectId=:objectId&objectType=:objectType\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectType\", objectType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.updateProduct = function (id, version, productId, name, description, keywords, subscriptionExpiration, price, isMultiCard, multiCardLimit, subscriptionPlanId, isResetPreview, preview) {\r\n var product = {\r\n id: id,\r\n version: version,\r\n productId: productId,\r\n name: name,\r\n description: description,\r\n keywords: keywords,\r\n subscriptionExpiration: subscriptionExpiration,\r\n price: price,\r\n isMultiCard: isMultiCard,\r\n multiCardLimit: multiCardLimit,\r\n subscriptionPlanId: subscriptionPlanId,\r\n preview: preview != null ? { name: preview.name, type: preview.type, size: preview.size } : null,\r\n resetPreview: isResetPreview\r\n };\r\n return this.$http.put(this.url.base(\"/api/finance/products/:productId\")\r\n .param(\":productId\", id)\r\n .service(), product)\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.saveReferencedObjectProductsList = function (objectId, version, objectType, productIds) {\r\n return this.$http.put(this.url.base(\"/api/finance/products?objectId=:objectId&version=:version&objectType=:objectType\")\r\n .param(\":objectId\", objectId)\r\n .param(\":version\", version)\r\n .param(\":objectType\", objectType)\r\n .service(), productIds)\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.recalculatePermissions = function (objectId, objectType, recalculateAll) {\r\n return this.$http.post(this.url.base(\"/api/finance/permissions/recalculate?objectId=:objectId&objectType=:objectType&recalculateAll=:recalculateAll\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectType\", objectType)\r\n .param(\":recalculateAll\", recalculateAll)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.getReferencedObjectRelatedProducts = function (objectId, objectType) {\r\n return this.$http.get(this.url.base(\"/api/finance/products/related?objectId=:objectId&objectType=:objectType\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectType\", objectType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.getReferencedObjectPurchaseConfigured = function (objectId, objectType) {\r\n return this.$http.get(this.url.base(\"/api/finance/purchase/configured?objectId=:objectId&objectType=:objectType\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectType\", objectType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.getPurchasedProduct = function (purchasedProductId) {\r\n return this.$http.get(this.url.base(\"/api/finance/purchasedProducts/:purchasedProductId\")\r\n .param(\":purchasedProductId\", purchasedProductId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.selectPurchasedEntity = function (purchasedProductId, purchasedEntityId) {\r\n return this.$http.put(this.url.base(\"/api/finance/purchasedProducts/:purchasedProductId/purchasedEntities/:purchasedEntityId/select\")\r\n .param(\":purchasedProductId\", purchasedProductId)\r\n .param(\":purchasedEntityId\", purchasedEntityId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.startPurchasedLearningPathCourse = function (purchasedProductId, purchasedEntityId, courseId) {\r\n return this.$http.put(this.url.base(\"/api/finance/purchasedProducts/:purchasedProductId/purchasedEntities/:purchasedEntityId/start/:courseId\")\r\n .param(\":purchasedProductId\", purchasedProductId)\r\n .param(\":purchasedEntityId\", purchasedEntityId)\r\n .param(\":courseId\", courseId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.getNumberOfItemsInProduct = function (productId) {\r\n return this.$http.get(this.url.base(\"/api/finance/purchase/:productId/numberOfItemsInProduct\")\r\n .param(\":productId\", productId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.prototype.checkOrder = function (purchasedProductId) {\r\n return this.$http.get(this.url.base(\"/api/finance/check/product/:purchasedProductId\")\r\n .param(\":purchasedProductId\", purchasedProductId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PurchaseService.NAME = \"finances.PurchaseService\";\r\n PurchaseService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return PurchaseService;\r\n})();\r\nexports.PurchaseService = PurchaseService;\r\n},{\"../utils/UrlService\":528}],238:[function(require,module,exports){\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar PurchaseService_1 = require(\"./PurchaseService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar RedirectReason_1 = require(\"../authcore/RedirectReason\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar PurchasedOrderController = (function () {\r\n function PurchasedOrderController($window, $location, $routeParams, purchaseService, authManager, authRedirect, financesRouter) {\r\n var _this = this;\r\n this.$window = $window;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.purchaseService = purchaseService;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.financesRouter = financesRouter;\r\n this.isPurchasedOrderProcessed = false;\r\n this.isPurchasedOrderProcessingFailed = false;\r\n this.purchaseOrderResults = [];\r\n this.purchasedOrderId = $routeParams[FinancesRouter_1.FinancesRouter.ORDER_ID_PARAM];\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n if (this.purchasedOrderId != null && this.purchasedOrderId != undefined && this.purchasedOrderId != \"\") {\r\n this.processPurchaseOrder()\r\n .then(function () {\r\n _this.$location.url(_this.financesRouter.orderProductsUrl(_this.purchasedOrderId));\r\n })\r\n .catch(function () {\r\n _this.isPurchasedOrderProcessingFailed = true;\r\n })\r\n .finally(function () {\r\n _this.isPurchasedOrderProcessed = true;\r\n });\r\n }\r\n else {\r\n authRedirect.forwardToAccessDenied();\r\n }\r\n }\r\n else {\r\n authRedirect.redirectToLogOn(RedirectReason_1.RedirectReason.LOGON_REQUIRED);\r\n }\r\n }\r\n PurchasedOrderController.prototype.processPurchaseOrder = function () {\r\n var _this = this;\r\n var promise = this.purchaseService.obtainRightsForOrderProducts(this.purchasedOrderId);\r\n promise.then(function (result) {\r\n angular.copy(result, _this.purchaseOrderResults);\r\n });\r\n return promise;\r\n };\r\n PurchasedOrderController.NAME = \"finance.PurchasedOrderController\";\r\n PurchasedOrderController.$inject = [\r\n \"$window\",\r\n \"$location\",\r\n \"$routeParams\",\r\n PurchaseService_1.PurchaseService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME\r\n ];\r\n return PurchasedOrderController;\r\n})();\r\nexports.PurchasedOrderController = PurchasedOrderController;\r\n},{\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../authcore/RedirectReason\":28,\"../urls/FinancesRouter\":471,\"./PurchaseService\":237}],239:[function(require,module,exports){\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar PurchaseService_1 = require(\"./PurchaseService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CourseProgressStatus_1 = require(\"../courses/models/CourseProgressStatus\");\r\nvar PurchasedProductController = (function () {\r\n function PurchasedProductController($routeParams, $location, purchaseService, authManager, permissionsService, brandingService, coursesRouter, materialsRouter, learningPathsRouter, authRedirect, courseService) {\r\n var _this = this;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.purchaseService = purchaseService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.brandingService = brandingService;\r\n this.coursesRouter = coursesRouter;\r\n this.materialsRouter = materialsRouter;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.authRedirect = authRedirect;\r\n this.courseService = courseService;\r\n this.isLoaded = false;\r\n this.showLabels = false;\r\n this.accessObjects = [];\r\n this.firstLoad = true;\r\n this.buttonStatusMap = new Map();\r\n this.purchasedProductId = $routeParams[FinancesRouter_1.FinancesRouter.PURCHASED_PRODUCT_ID_PARAM];\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n else {\r\n authRedirect.redirectToLogOn();\r\n }\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0) {\r\n var menu = MenuHelper_1.MenuHelper.PERSONAL_PURCHASED_ORDERS_MENU_KEY;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(menu);\r\n }\r\n this.loadPurchasedProduct()\r\n .then(function () {\r\n _this.getEnrollmentConfigForCourses();\r\n })\r\n .finally(function () {\r\n _this.onProductItemSelected(_this.accessObjects[0].objectType, _this.accessObjects[0].id);\r\n _this.isLoaded = true;\r\n _this.firstLoad = false;\r\n });\r\n }\r\n PurchasedProductController.prototype.loadPurchasedProduct = function () {\r\n var _this = this;\r\n return this.purchaseService.getPurchasedProduct(this.purchasedProductId)\r\n .then(function (purchasedProduct) {\r\n _this.purchasedProduct = angular.copy(purchasedProduct);\r\n _this.processPurchasedProductAfterLoad();\r\n PageHeaderHelper_1.PageHeader.set().header(_this.purchasedProduct.name).update();\r\n return _this.purchasedProduct;\r\n });\r\n };\r\n PurchasedProductController.prototype.onSelectPurchasedEntityButtonClick = function (purchasedEntityId, entry) {\r\n this.buttonStatusMap.set(entry.id + entry.objectType, 'continue');\r\n this.purchasedEntityIdToSelect = purchasedEntityId;\r\n this.onProductItemSelected(entry.objectType, entry.id);\r\n if (this.purchasedProduct.isMultiCard) {\r\n this.confirmationDialogText = StringBuilder_1.StringBuilder.interpolate(\"This will be {1} item of {2} purchased. Please confirm.\")\r\n .with(\"{1}\", this.purchasedProduct.multiCardUsed + 1)\r\n .with(\"{2}\", this.purchasedProduct.multiCardLimit)\r\n .build();\r\n $(\"#selectionConfirm\").modal(\"show\");\r\n }\r\n else {\r\n this.selectPurchasedEntity(entry);\r\n }\r\n };\r\n PurchasedProductController.prototype.onStartLpCourseButtonClick = function (purchasedEntityId, entry, courseId) {\r\n var _this = this;\r\n this.buttonStatusMap.set(entry.id + entry.objectType, 'continue');\r\n this.purchasedEntityIdToSelect = purchasedEntityId;\r\n if (this.purchasedProduct.isMultiCard) {\r\n this.confirmationDialogText = StringBuilder_1.StringBuilder.interpolate(\"This will be {1} item of {2} purchased. Please confirm.\")\r\n .with(\"{1}\", this.purchasedProduct.multiCardUsed + 1)\r\n .with(\"{2}\", this.purchasedProduct.multiCardLimit)\r\n .build();\r\n $(\"#selectionConfirm\").modal(\"show\");\r\n }\r\n else {\r\n this.purchaseService.startPurchasedLearningPathCourse(this.purchasedProductId, purchasedEntityId, courseId)\r\n .then(function () {\r\n _this.loadPurchasedProduct()\r\n .then(function () {\r\n _this.getEnrollmentConfigForCourses();\r\n });\r\n })\r\n .catch(function (result) {\r\n if (result.data.error === \"error.course.unable.to.start\") {\r\n var previousTopic = entry.previousCourse.topic;\r\n INotifier_1.notifier.error(\"This course will be available after passing \" + previousTopic +\r\n \" in learning path \" + entry.parentLearningPath.name +\r\n \". Please, complete course \" + previousTopic + \".\");\r\n }\r\n else if (result.data.error === \"insufficient.permissions.access.the.course\") {\r\n INotifier_1.notifier.error(\"Insufficient permissions to access the course, please contact your Instructor\");\r\n }\r\n }).finally(function () {\r\n _this.onProductItemSelected(entry.objectType, entry.id);\r\n _this.isLoaded = true;\r\n });\r\n }\r\n };\r\n PurchasedProductController.prototype.selectPurchasedEntity = function (entry) {\r\n var _this = this;\r\n this.isLoaded = false;\r\n this.purchaseService.selectPurchasedEntity(this.purchasedProductId, this.purchasedEntityIdToSelect)\r\n .then(function (purchasedProduct) {\r\n _this.purchasedProduct = angular.copy(purchasedProduct);\r\n _this.processPurchasedProductAfterLoad();\r\n _this.isLoaded = true;\r\n return _this.purchasedProduct;\r\n })\r\n .finally(function () {\r\n _this.onProductItemSelected(entry.objectType, entry.id);\r\n });\r\n };\r\n PurchasedProductController.prototype.goToPurchasedItem = function (entry) {\r\n if ((entry.objectType == 'COURSE' || entry.objectType == 'LP_COURSE')) {\r\n this.$location.url(this.coursesRouter.detailsUrl(entry.id));\r\n }\r\n else if (entry.objectType == 'MATERIAL') {\r\n this.$location.url(this.materialsRouter.watchUrl(entry.id));\r\n }\r\n };\r\n PurchasedProductController.prototype.processPurchasedProductAfterLoad = function () {\r\n var _this = this;\r\n this.accessObjects = [];\r\n this.purchasedItems = [];\r\n var coursesMap = new Map();\r\n var materials = [];\r\n var courses = [];\r\n this.purchasedProduct.purchasedEntities.forEach(function (purchasedEntity) {\r\n var material = null;\r\n var course = null;\r\n var learningPath = null;\r\n if (purchasedEntity.referencedObject.type == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]) {\r\n material = _this.purchasedProduct.materials.filter(function (m) { return m.id == purchasedEntity.referencedObject.id; })[0];\r\n var purchasedItem = {\r\n id: purchasedEntity.id,\r\n referencedObject: purchasedEntity.referencedObject,\r\n selected: purchasedEntity.selected,\r\n material: material,\r\n course: course\r\n };\r\n materials.push(purchasedItem.material);\r\n }\r\n else if (purchasedEntity.referencedObject.type == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]) {\r\n course = _this.purchasedProduct.courses.filter(function (c) { return c.id == purchasedEntity.referencedObject.id; })[0];\r\n course.objectType = 'COURSE';\r\n course.productEntityId = purchasedEntity.id;\r\n var purchasedItem = {\r\n id: purchasedEntity.id,\r\n referencedObject: purchasedEntity.referencedObject,\r\n selected: purchasedEntity.selected,\r\n material: material,\r\n course: course\r\n };\r\n coursesMap.set(course.id, purchasedItem);\r\n }\r\n else if (purchasedEntity.referencedObject.type == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LEARNING_PATH]) {\r\n learningPath = _this.purchasedProduct.learningPaths.filter(function (l) { return l.id == purchasedEntity.referencedObject.id; })[0];\r\n }\r\n if (learningPath) {\r\n learningPath.dependCourses.map(function (course, index) {\r\n course.objectType = 'LP_COURSE';\r\n course.parentLearningPath = learningPath;\r\n course.productEntityId = purchasedEntity.id;\r\n course.previousCourse = index - 1 >= 0 ? learningPath.dependCourses[index - 1] : null;\r\n coursesMap.delete(course.id);\r\n _this.accessObjects.push(course);\r\n });\r\n }\r\n });\r\n coursesMap.forEach(function (course) {\r\n courses.push(course[\"course\"]);\r\n });\r\n courses.sort(function (a, b) {\r\n if (a.startDate > b.startDate)\r\n return 1;\r\n if (a.startDate < b.startDate)\r\n return -1;\r\n else {\r\n if (a.topic > b.topic)\r\n return 1;\r\n if (a.topic < b.topic)\r\n return -1;\r\n else\r\n return 0;\r\n }\r\n });\r\n this.accessObjects = this.accessObjects.concat(courses);\r\n materials.sort(function (a, b) {\r\n if (a.title > b.title)\r\n return 1;\r\n if (a.title < b.title)\r\n return -1;\r\n else\r\n return 0;\r\n });\r\n this.accessObjects = this.accessObjects.concat(materials);\r\n this.accessObjects.map(function (obj) {\r\n if (obj.startDate) {\r\n obj.startDateText = Moment_1.Moment.isValidDate(obj.startDate);\r\n }\r\n if (obj.endDate) {\r\n obj.endDateText = Moment_1.Moment.isValidDate(obj.endDate);\r\n }\r\n });\r\n this.getCoursesProgress();\r\n };\r\n PurchasedProductController.prototype.getEnrollmentConfigForCourses = function () {\r\n var _this = this;\r\n this.purchasedItems.map(function (elem, index) {\r\n if (elem.course) {\r\n _this.courseService.getCourseForProduct(elem.course.id).then(function (res) {\r\n elem.course.startDate = res.startDate;\r\n elem.course.endDate = res.endDate;\r\n });\r\n _this.courseService.getEnrollmentConfigurationForCourse(elem.course.id)\r\n .then(function (result) {\r\n elem.isAllowNewEnrollments = result.isAllowNewEnrollments;\r\n elem.enrollConfig = result;\r\n _this.courseService.getTotalUsedSeatsForCourse(elem.course.id).then(function (result) {\r\n elem.isAvailableByMaxEnrollments = !elem.enrollConfig.maxEnrollment || elem.enrollConfig.maxEnrollment\r\n && elem.enrollConfig.maxEnrollment > result;\r\n })\r\n .then(function () {\r\n _this.courseService.getLandingPage(elem.course.id)\r\n .then(function (result) {\r\n elem.course.landingPage = angular.copy(result);\r\n });\r\n });\r\n });\r\n }\r\n });\r\n this.showLabels = true;\r\n };\r\n PurchasedProductController.prototype.setProgressStatus = function (entry) {\r\n if (this.displayContinueButton(entry) && entry.objectType !== 'MATERIAL') {\r\n this.buttonStatusMap.set(entry.id + entry.objectType, 'continue');\r\n }\r\n if (this.displayStartButton(entry) && entry.objectType !== 'MATERIAL') {\r\n this.buttonStatusMap.set(entry.id + entry.objectType, 'start');\r\n }\r\n if (this.displayViewButton(entry)) {\r\n this.buttonStatusMap.set(entry.id + entry.objectType, 'view');\r\n }\r\n };\r\n PurchasedProductController.prototype.getCoursesProgress = function () {\r\n var _this = this;\r\n this.accessObjects.map(function (entry) {\r\n if (entry.objectType == 'LP_COURSE') {\r\n _this.courseService.getCourseProgress(entry.id)\r\n .then(function (res) {\r\n entry.courseProgressId = res.id;\r\n entry.courseProgressStatus = res.status ? res.status : CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED;\r\n }).then(function () {\r\n _this.setProgressStatus(entry);\r\n });\r\n }\r\n else {\r\n _this.setProgressStatus(entry);\r\n }\r\n });\r\n };\r\n PurchasedProductController.prototype.isSelected = function (object) {\r\n return this.selectedCourse && this.selectedCourse.id == object.id && object.objectType == 'COURSE' ||\r\n this.selectedMaterial && this.selectedMaterial.id == object.id && object.objectType == 'MATERIAL' ||\r\n this.selectedLearningPathCourse && this.selectedLearningPathCourse.id == object.id && object.objectType == 'LP_COURSE' ||\r\n this.selectedLearningPath && this.selectedLearningPath.id == object.id && object.objectType == 'LEARNING_PATH';\r\n };\r\n PurchasedProductController.prototype.onProductItemSelected = function (referencedObjectType, objectId) {\r\n this.selectedMaterial = null;\r\n this.selectedCourse = null;\r\n this.selectedLearningPath = null;\r\n this.selectedLearningPathCourse = null;\r\n if (referencedObjectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]) {\r\n this.selectedMaterial = this.accessObjects.filter(function (m) { return m.id == objectId && m.objectType == 'MATERIAL'; })[0];\r\n }\r\n else if (referencedObjectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]) {\r\n this.selectedCourse = this.accessObjects.filter(function (c) { return c.id == objectId && c.objectType == 'COURSE'; })[0];\r\n }\r\n else if (referencedObjectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LEARNING_PATH]) {\r\n this.selectedLearningPath = this.accessObjects.filter(function (l) { return l.id == objectId; })[0];\r\n }\r\n else if (referencedObjectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.LP_COURSE]) {\r\n this.selectedLearningPathCourse = this.accessObjects.filter(function (c) { return c.id == objectId && c.objectType == 'LP_COURSE'; })[0];\r\n }\r\n };\r\n PurchasedProductController.prototype.isBeforeToday = function (entry) {\r\n var now = new Date().getTime();\r\n return entry.getTime() ? entry.getTime() < now : false;\r\n };\r\n PurchasedProductController.prototype.getDate = function (entry) {\r\n return new Date(entry);\r\n };\r\n PurchasedProductController.prototype.getFormattedDate = function (entry) {\r\n return entry\r\n ? new Date(entry).toLocaleString(\"en-US\").split(\",\")[0]\r\n : \"\";\r\n };\r\n PurchasedProductController.prototype.getToday = function () {\r\n return new Date();\r\n };\r\n PurchasedProductController.prototype.isMaterial = function (entry) {\r\n return !!entry.uploadDate;\r\n };\r\n PurchasedProductController.prototype.getType = function (object) {\r\n return object.objectType ? object.objectType : 'COURSE';\r\n };\r\n PurchasedProductController.prototype.displayViewButton = function (entry) {\r\n return (entry.objectType == 'COURSE' || entry.objectType == 'LP_COURSE')\r\n && (entry.courseProgressId\r\n && entry.courseProgressStatus != 'STARTED'\r\n && this.isBeforeToday(this.getDate(entry.endDate)))\r\n || entry.objectType == 'MATERIAL'\r\n && !this.isBeforeToday(this.getDate(entry.validity));\r\n };\r\n PurchasedProductController.prototype.displayStartButton = function (entry) {\r\n return (entry.objectType == 'COURSE' || entry.objectType == 'LP_COURSE')\r\n && (entry.courseProgressStatus === CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED\r\n || entry.courseProgressStatus === \"NOT_STARTED\")\r\n && !this.isBeforeToday(this.getDate(entry.endDate))\r\n && (!this.purchasedProduct.isMultiCard\r\n || this.purchasedProduct.isMultiCard && !entry.selected\r\n && this.purchasedProduct.multiCardUsed < this.purchasedProduct.multiCardLimit);\r\n };\r\n PurchasedProductController.prototype.displayContinueButton = function (entry) {\r\n return (entry.objectType == 'COURSE' || entry.objectType == 'LP_COURSE')\r\n && (entry.courseProgressStatus !== CourseProgressStatus_1.CourseProgressStatus.NOT_STARTED\r\n && entry.courseProgressStatus !== \"NOT_STARTED\")\r\n && !this.isBeforeToday(this.getDate(entry.endDate));\r\n };\r\n PurchasedProductController.prototype.performAction = function (entry) {\r\n switch (this.buttonStatusMap.get(entry.id + entry.objectType)) {\r\n case 'start': {\r\n if (entry.objectType == 'LP_COURSE') {\r\n this.onStartLpCourseButtonClick(entry.productEntityId, entry, entry.id);\r\n }\r\n if (entry.objectType == 'COURSE') {\r\n this.onSelectPurchasedEntityButtonClick(entry.productEntityId, entry);\r\n }\r\n break;\r\n }\r\n case 'continue': {\r\n this.goToPurchasedItem(entry);\r\n break;\r\n }\r\n case 'view': {\r\n this.goToPurchasedItem(entry);\r\n break;\r\n }\r\n }\r\n };\r\n PurchasedProductController.prototype.getLabel = function (entry) {\r\n switch (this.buttonStatusMap.get(entry.id + entry.objectType)) {\r\n case 'start': {\r\n return \"Start\";\r\n }\r\n case 'continue': {\r\n return \"Continue\";\r\n }\r\n case 'view': {\r\n return \"View\";\r\n }\r\n }\r\n };\r\n PurchasedProductController.NAME = \"finances.PurchasedProductController\";\r\n PurchasedProductController.$inject = [\r\n \"$routeParams\",\r\n \"$location\",\r\n PurchaseService_1.PurchaseService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n CourseService_1.CourseService.NAME\r\n ];\r\n return PurchasedProductController;\r\n})();\r\nexports.PurchasedProductController = PurchasedProductController;\r\n},{\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../branding/CustomBrandingService\":35,\"../courses/CourseService\":211,\"../courses/models/CourseProgressStatus\":222,\"../security/PermissionsService\":418,\"../urls/CoursesRouter\":468,\"../urls/FinancesRouter\":471,\"../urls/LearningPathsRouter\":477,\"../urls/MaterialsRouter\":480,\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"../utils/PageHeaderHelper\":521,\"../utils/StringBuilder\":525,\"./PurchaseService\":237}],240:[function(require,module,exports){\nvar GamificationRouter_1 = require(\"../urls/GamificationRouter\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar BadgesService_1 = require(\"./BadgesService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar RichTextEditorDirective_1 = require(\"../components/richtext/RichTextEditorDirective\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar ActivityBadgeEditController = (function () {\r\n function ActivityBadgeEditController($q, $http, $scope, $routeParams, $location, $uploader, $window, url, gamificationRouter, badgesService, securityService, dialogService, authService) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$http = $http;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$uploader = $uploader;\r\n this.$window = $window;\r\n this.url = url;\r\n this.gamificationRouter = gamificationRouter;\r\n this.badgesService = badgesService;\r\n this.securityService = securityService;\r\n this.dialogService = dialogService;\r\n this.authService = authService;\r\n this.hasAllBusinessUnits = false;\r\n this.redirected = false;\r\n this.disableSaveButton = false;\r\n this.toolbar = [[], ['bold', 'italics', 'underline', 'strikeThrough'], [],\r\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote'], [],\r\n [RichTextEditorDirective_1.RichTextEditorController.TA_FULLSCREEN_BUTTON, 'html', 'charcount']];\r\n this.isLoading = true;\r\n this.dragoverEventHandler = function (e) {\r\n e.preventDefault();\r\n var elem = document.elementFromPoint(e.clientX, e.clientY);\r\n var dropCertificate = document.getElementById(\"dropBadgeImageFromEdit\");\r\n var dropCertificateNote = document.getElementById(\"dropBadgeImageFromEditNote\");\r\n e.dataTransfer.dropEffect = 'none';\r\n if (dropCertificate == elem || dropCertificateNote == elem) {\r\n e.dataTransfer.dropEffect = 'copy';\r\n }\r\n };\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.manageAnyLearningObject; });\r\n this.badgesService.isSystemAdministrator().then(function (result) {\r\n _this.isSystemAdministrator = result;\r\n });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_BADGES_KEY);\r\n var badgeId = this.$routeParams[GamificationRouter_1.GamificationRouter.BADGE_ID_PARAM];\r\n var hasBadgeId = !isNaN(badgeId);\r\n if (hasBadgeId) {\r\n this.isLoading = true;\r\n this.badgesService.getActivityBadge(badgeId).then(function (result) {\r\n _this.badge = result;\r\n _this.authService.getCurrentUser().then(function (user) {\r\n _this.user = user;\r\n });\r\n if (!result.id) {\r\n INotifier_1.notifier.error(\"Certificate template not found\");\r\n _this.redirectToBack();\r\n return;\r\n }\r\n else if (_this.isSystemAdministrator) {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit badge\" + \" '\" + result.eventName + \"'\").update();\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set().header(\"View badge\" + \" '\" + result.eventName + \"'\").update();\r\n }\r\n _this.isLoading = false;\r\n });\r\n }\r\n document.body.addEventListener('dragover', this.dragoverEventHandler);\r\n $scope.$on(\"$destroy\", function () {\r\n document.body.removeEventListener('dragover', _this.dragoverEventHandler);\r\n });\r\n }\r\n ActivityBadgeEditController.prototype.resetImage = function () {\r\n this.newBadgeImage = undefined;\r\n this.badge.previewUrl = undefined;\r\n };\r\n ActivityBadgeEditController.prototype.editBadge = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n if (!this.badge.businessUnitId && this.badgeBuId)\r\n this.badge.businessUnitId = this.badgeBuId;\r\n this.badgesService.updateActivityBadge(this.badge.id, this.badge).then(function (badgeId) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate('Modifications of badge :badgeName have been saved')\r\n .with(':badgeName', _this.badge.name).build());\r\n if (_this.newBadgeImage) {\r\n var upload = _this.newBadgeImage\r\n ? _this.upload(_this.newBadgeImage, badgeId, \"preview\")\r\n : _this.$q.when(null);\r\n upload.then(function () {\r\n _this.disableSaveButton = false;\r\n _this.disabledUploadButton = false;\r\n _this.redirectToBack();\r\n });\r\n }\r\n else if (!_this.badge.previewUrl && _this.badge.previewId) {\r\n _this.badgesService.removeActivityBadgeImage(_this.badge.id).finally(function () {\r\n _this.badge.previewId = null;\r\n _this.disableSaveButton = false;\r\n _this.disabledUploadButton = false;\r\n _this.redirectToBack();\r\n });\r\n }\r\n else {\r\n _this.disableSaveButton = false;\r\n _this.disabledUploadButton = false;\r\n _this.redirectToBack();\r\n }\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.name.duplicate\") {\r\n INotifier_1.notifier.error(\"Badge name must be unique\");\r\n }\r\n _this.disableSaveButton = false;\r\n _this.disabledUploadButton = false;\r\n });\r\n };\r\n ActivityBadgeEditController.prototype.redirectToBack = function () {\r\n this.redirected = true;\r\n this.$location.url(this.gamificationRouter.badgesUrl());\r\n };\r\n ActivityBadgeEditController.prototype.upload = function (file, badgeId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/badges/activityBadge/upload?badgeId=:badgeId\")\r\n .param(\":badgeId\", badgeId);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n ActivityBadgeEditController.prototype.activate = function (id) {\r\n var _this = this;\r\n this.badgesService.activateActivityBadge(id).then(function () {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate('Badge :badgeName has been activated').with(':badgeName', _this.badge.name).build());\r\n _this.badge.isActive = true;\r\n });\r\n };\r\n ActivityBadgeEditController.prototype.deactivate = function (id) {\r\n var _this = this;\r\n this.badgesService.deactivateActivityBadge(id).then(function () {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate('Badge :badgeName has been deactivated').with(':badgeName', _this.badge.name).build());\r\n _this.redirectToBack();\r\n });\r\n };\r\n ActivityBadgeEditController.prototype.getImageForActivityBadge = function () {\r\n if (this.badge) {\r\n if (!this.badge.previewUrl && this.badge.badgeKey) {\r\n return \"themes/default/img/actionBadges/\" + this.badge.badgeKey + \".png\";\r\n }\r\n return this.badge.previewUrl;\r\n }\r\n return '';\r\n };\r\n ActivityBadgeEditController.NAME = \"gamification.ActivityBadgeEditController\";\r\n ActivityBadgeEditController.$inject = [\r\n \"$q\",\r\n \"$http\",\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"Upload\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n GamificationRouter_1.GamificationRouter.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n AuthService_1.AuthService.NAME\r\n ];\r\n return ActivityBadgeEditController;\r\n})();\r\nexports.ActivityBadgeEditController = ActivityBadgeEditController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../components/dialog/DialogService\":166,\"../components/richtext/RichTextEditorDirective\":177,\"../security/SecurityService\":420,\"../urls/GamificationRouter\":472,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./BadgesService\":245}],241:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar BadgeTemplateEditController = (function () {\r\n function BadgeTemplateEditController() {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_BADGES_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit badge\").update();\r\n }\r\n BadgeTemplateEditController.NAME = \"gamification.BadgeTemplateEditController\";\r\n BadgeTemplateEditController.$inject = [];\r\n return BadgeTemplateEditController;\r\n})();\r\nexports.BadgeTemplateEditController = BadgeTemplateEditController;\r\n},{\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],242:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar BadgeTemplatesController = (function () {\r\n function BadgeTemplatesController() {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_GAMIFICATION_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Badges\").update();\r\n }\r\n BadgeTemplatesController.NAME = \"gamification.BadgeTemplatesController\";\r\n BadgeTemplatesController.$inject = [];\r\n return BadgeTemplatesController;\r\n})();\r\nexports.BadgeTemplatesController = BadgeTemplatesController;\r\n},{\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],243:[function(require,module,exports){\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar GamificationRouter_1 = require(\"../urls/GamificationRouter\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar BadgesService_1 = require(\"./BadgesService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar BadgesController = (function () {\r\n function BadgesController($q, $http, $scope, $routeParams, $location, $window, url, gamificationRouter, badgesService, commonFilterService, businessUnitsService, securityService, authService, dialogService, permissionsApi) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$http = $http;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.gamificationRouter = gamificationRouter;\r\n this.badgesService = badgesService;\r\n this.commonFilterService = commonFilterService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.dialogService = dialogService;\r\n this.permissionsApi = permissionsApi;\r\n this.showBusinessUnitSelector = true;\r\n this.viewType = 'BADGES_DICTIONARY';\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.viewAnyLearningObject; });\r\n this.permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n this.badgesService.isSystemAdministrator().then(function (result) {\r\n _this.isSystemAdministrator = result;\r\n });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_BADGES_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Badges\").update();\r\n this.badgesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/badges\")));\r\n this.activityBadgesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/badges/activity\")));\r\n this.badgesGridModel.filter.searchString = \"\";\r\n this.badgesGridModel.filter.businessUnitId = null;\r\n this.activityBadgesGridModel.filter.searchString = \"\";\r\n this.activityBadgesGridModel.filter.businessUnitId = null;\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.user = user;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n if (!user.allBusinessUnits && user.businessUnits.length == 1) {\r\n _this.showBusinessUnitSelector = false;\r\n _this.badgesGridModel.filter.businessUnitId = user.businessUnits[0];\r\n }\r\n });\r\n this.businessUnitsService.getBusinessUnitsForSelector().then(function (result) {\r\n _this.businessUnits = result;\r\n });\r\n var viewType = sessionStorage.getItem('BADGES_VIEW_TYPE');\r\n if (viewType) {\r\n this.viewType = viewType;\r\n }\r\n }\r\n BadgesController.prototype.isEditable = function (entity) {\r\n if (!this.systemPermissions.manageAnyLearningObject) {\r\n return false;\r\n }\r\n if (this.hasAllBusinessUnits || (this.user.businessUnits && this.user.businessUnits.indexOf(entity.businessUnitId) !== -1)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n BadgesController.prototype.getEntityIsActiveProperty = function (entity) {\r\n return entity.isActive;\r\n };\r\n BadgesController.prototype.getActiveLinkState = function (entity) {\r\n return this.getEntityIsActiveProperty(entity) ? \"Yes\" : \"No\";\r\n };\r\n BadgesController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n BadgesController.prototype.onBusinessUnitChange = function () {\r\n if (this.viewType == 'BADGES_DICTIONARY') {\r\n this.badgesGridModel.loadCurrentPage();\r\n }\r\n else if (this.viewType == 'DEFAULT_BADGES') {\r\n this.activityBadgesGridModel.loadCurrentPage();\r\n }\r\n };\r\n BadgesController.prototype.getBusinessUnitNameById = function (businessUnitId) {\r\n var result = null;\r\n if (businessUnitId != null) {\r\n result = this.businessUnits.filter(function (bu) { return bu.id == businessUnitId; })[0].name;\r\n }\r\n return result;\r\n };\r\n BadgesController.prototype.convertIsActive = function (isActive) {\r\n return isActive != undefined\r\n ? isActive ? 'Yes' : 'No'\r\n : undefined;\r\n };\r\n BadgesController.prototype.hideActiveButton = function (badge) {\r\n return badge.isActive;\r\n };\r\n BadgesController.prototype.showDeactivateButton = function (badge) {\r\n return badge.isActive;\r\n };\r\n BadgesController.prototype.activate = function (id) {\r\n var _this = this;\r\n if (this.viewType == 'BADGES_DICTIONARY') {\r\n this.badgesService.activate(id).then(function () {\r\n _this.badgesService.getBadge(id).then(function (badge) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate('Badge :badgeName has been activated').with(':badgeName', badge.name).build());\r\n _this.badgesGridModel.loadCurrentPage();\r\n });\r\n });\r\n }\r\n else if (this.viewType == 'DEFAULT_BADGES') {\r\n this.badgesService.activateActivityBadge(id).then(function () {\r\n _this.badgesService.getActivityBadge(id).then(function (badge) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate('Badge :badgeName has been activated').with(':badgeName', badge.name).build());\r\n _this.activityBadgesGridModel.loadCurrentPage();\r\n });\r\n });\r\n }\r\n };\r\n BadgesController.prototype.deactivate = function (id) {\r\n var _this = this;\r\n if (this.viewType == 'BADGES_DICTIONARY') {\r\n this.badgesService.getRelatedGameLevelRewardsForBadge(id).then(function (result) {\r\n if (result.length === 0) {\r\n _this.badgesService.getRelatedLearningObjForBadge(id).then(function (res) {\r\n var relatedItems = {};\r\n if (res.size !== 0) {\r\n Object.keys(res).forEach(function (key) {\r\n relatedItems[key] = res[key];\r\n });\r\n }\r\n if (Object.keys(relatedItems).length === 0) {\r\n _this.badgesService.deactivate(id).then(function () {\r\n _this.badgesService.getBadge(id).then(function (badge) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate('Badge :badgeName has been deactivated').with(':badgeName', badge.name).build());\r\n });\r\n _this.badgesGridModel.loadCurrentPage();\r\n });\r\n }\r\n else {\r\n var formattedFunc = function (name, index) {\r\n return \"

    \" + (index + 1) + \". \" + name + \"

    \";\r\n };\r\n Object.keys(res).forEach(function (key) {\r\n var message = StringBuilder_1.StringBuilder.interpolate(\"

    The badge cannot be deactivated. It is used in the following instances::items

    \")\r\n .with(\":items\", _this.getItemsFormattedString(relatedItems, formattedFunc, \"\\n\"))\r\n .build();\r\n _this.dialogService.confirm(message, {\r\n hideCancelButton: true,\r\n title: \"Deactivate badge\"\r\n });\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n var formattedFunc = function (name, index) {\r\n return \"

    \" + (index + 1) + \". \" + name + \"

    \";\r\n };\r\n var message = StringBuilder_1.StringBuilder.interpolate(\"

    The badge cannot be deactivated. It is used in the following game programs::games

    \")\r\n .with(\":games\", _this.getItemsFormattedString(result, formattedFunc, \"\\n\"))\r\n .build();\r\n _this.dialogService.confirm(message, {\r\n hideCancelButton: true,\r\n title: \"Delete badge\"\r\n });\r\n }\r\n });\r\n }\r\n else if (this.viewType == 'DEFAULT_BADGES') {\r\n this.badgesService.deactivateActivityBadge(id).then(function () {\r\n _this.badgesService.getActivityBadge(id).then(function (badge) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate('Badge :badgeName has been deactivated').with(':badgeName', badge.name).build());\r\n _this.activityBadgesGridModel.loadCurrentPage();\r\n });\r\n });\r\n }\r\n };\r\n BadgesController.prototype.getItemsFormattedString = function (relatedItems, formattedFunc, separator) {\r\n var result = '';\r\n Object.keys(relatedItems).forEach(function (key) {\r\n var title;\r\n if (key === 'games') {\r\n title = relatedItems[key].length === 1 ? 'Game program' : 'Game programs';\r\n }\r\n else if (key === 'courses') {\r\n title = relatedItems[key].length === 1 ? 'Course' : 'Courses';\r\n }\r\n else if (key === 'learning paths') {\r\n title = relatedItems[key].length === 1 ? 'Learning path' : 'Learning paths';\r\n }\r\n result += \"
    \" + title + \"
    \";\r\n relatedItems[key].forEach(function (item, index) {\r\n result += formattedFunc(item, index) + separator;\r\n });\r\n });\r\n return result;\r\n };\r\n BadgesController.prototype.redirectToUrl = function (url) {\r\n this.$location.url(url);\r\n };\r\n BadgesController.prototype.setViewType = function (viewType) {\r\n switch (viewType) {\r\n case \"DEFAULT_BADGES\":\r\n this.viewType = \"DEFAULT_BADGES\";\r\n sessionStorage.setItem('BADGES_VIEW_TYPE', this.viewType);\r\n break;\r\n case 'BADGES_DICTIONARY':\r\n this.viewType = \"BADGES_DICTIONARY\";\r\n sessionStorage.setItem('BADGES_VIEW_TYPE', this.viewType);\r\n break;\r\n }\r\n };\r\n BadgesController.prototype.getImageForActivityBadge = function (badge) {\r\n if (badge) {\r\n if (!badge.fileId && badge.badgeKey) {\r\n return \"themes/default/img/actionBadges/\" + badge.badgeKey + \".png\";\r\n }\r\n }\r\n return badge.previewUrl ? badge.previewUrl : '';\r\n };\r\n BadgesController.prototype.getImageBadge = function (badge) {\r\n if (badge) {\r\n if (!badge.fileId && badge.name) {\r\n var imageName = badge.name.split(' ').join('');\r\n switch (badge.id) {\r\n case 100:\r\n imageName = \"CourseFinisher\";\r\n break;\r\n case 101:\r\n imageName = \"LearningPathFinisher\";\r\n break;\r\n }\r\n return \"themes/default/img/badges/\" + imageName + \".png\";\r\n }\r\n }\r\n return badge.previewUrl ? badge.previewUrl : '';\r\n };\r\n BadgesController.NAME = \"gamification.BadgesController\";\r\n BadgesController.$inject = [\r\n \"$q\",\r\n \"$http\",\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n GamificationRouter_1.GamificationRouter.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return BadgesController;\r\n})();\r\nexports.BadgesController = BadgesController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../businessUnits/BusinessUnitsService\":44,\"../common/CommonFilterService\":49,\"../components/dialog/DialogService\":166,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/GamificationRouter\":472,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./BadgesService\":245}],244:[function(require,module,exports){\nvar GamificationRouter_1 = require(\"../urls/GamificationRouter\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar BadgesService_1 = require(\"./BadgesService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar BadgesCreateEditController = (function () {\r\n function BadgesCreateEditController($q, $http, $scope, $routeParams, $location, $uploader, $window, url, gamificationRouter, badgesService, securityService, dialogService, authService) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$http = $http;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$uploader = $uploader;\r\n this.$window = $window;\r\n this.url = url;\r\n this.gamificationRouter = gamificationRouter;\r\n this.badgesService = badgesService;\r\n this.securityService = securityService;\r\n this.dialogService = dialogService;\r\n this.authService = authService;\r\n this.hasAllBusinessUnits = false;\r\n this.redirected = false;\r\n this.disableSaveButton = false;\r\n this.accessToEdit = true;\r\n this.hasPreviewUrlCanceled = false;\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.manageAnyLearningObject; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_BADGES_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"New badge\").update();\r\n var badgeId = this.$routeParams[GamificationRouter_1.GamificationRouter.BADGE_ID_PARAM];\r\n var hasBadgeId = !isNaN(badgeId);\r\n if (hasBadgeId) {\r\n this.badgesService.getBadge(badgeId).then(function (result) {\r\n _this.badge = result;\r\n _this.previewUrl = _this.badge.previewUrl ? _this.badge.previewUrl : null;\r\n _this.authService.getCurrentUser().then(function (user) {\r\n _this.user = user;\r\n if (_this.badge.businessUnitId == null && !user.allBusinessUnits\r\n || _this.badge.businessUnitId != null && !user.allBusinessUnits && user.businessUnits.indexOf(_this.badge.businessUnitId) == -1) {\r\n _this.accessToEdit = false;\r\n }\r\n });\r\n if (!result.id) {\r\n INotifier_1.notifier.error(\"Certificate template not found\");\r\n _this.redirectToBack();\r\n return;\r\n }\r\n else if (_this.accessToEdit) {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit badge\" + \" '\" + result.name + \"'\").update();\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set().header(\"View badge\" + \" '\" + result.name + \"'\").update();\r\n }\r\n });\r\n }\r\n else {\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.user = user;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n if (user.businessUnits.length == 1) {\r\n _this.badgeBuId = user.businessUnits[0];\r\n }\r\n });\r\n PageHeaderHelper_1.PageHeader.set().header(\"New badge\").update();\r\n }\r\n }\r\n BadgesCreateEditController.prototype.saveBadge = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n if (!this.badge.businessUnitId && this.badgeBuId)\r\n this.badge.businessUnitId = this.badgeBuId;\r\n var call = this.badge.id\r\n ? this.badgesService.updateBadge(this.badge.id, this.badge)\r\n : this.badgesService.createBadge(this.badge);\r\n call.then(function (badgeId) {\r\n var preview = _this.croppedImage == undefined ? _this.preview : _this.croppedImage;\r\n if (preview != null) {\r\n _this.upload(preview, badgeId, \"preview\").then(function () {\r\n if (_this.badge.id) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Modifications of badge :badgeName have been saved\").with(':badgeName', _this.badge.name).build());\r\n }\r\n else {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Badge :badgeName has been saved\").with(':badgeName', _this.badge.name).build());\r\n }\r\n _this.disableSaveButton = false;\r\n _this.redirectToBack();\r\n });\r\n }\r\n else if (_this.hasPreviewUrlCanceled) {\r\n _this.badgesService.removeBadgeImage(_this.badge.id).finally(function () {\r\n _this.badge.previewId = null;\r\n _this.redirectToBack();\r\n });\r\n }\r\n else {\r\n if (_this.badge.id) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Modifications of badge :badgeName have been saved\").with(':badgeName', _this.badge.name).build());\r\n }\r\n else {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Badge :badgeName has been saved\").with(':badgeName', _this.badge.name).build());\r\n }\r\n _this.disableSaveButton = false;\r\n _this.redirectToBack();\r\n }\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.name.duplicate\") {\r\n INotifier_1.notifier.error(\"Badge name must be unique\");\r\n }\r\n _this.disableSaveButton = false;\r\n });\r\n };\r\n BadgesCreateEditController.prototype.redirectToBack = function () {\r\n this.redirected = true;\r\n this.$location.url(this.gamificationRouter.badgesUrl());\r\n };\r\n BadgesCreateEditController.prototype.upload = function (file, badgeId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/badges/upload?badgeId=:badgeId&fileType=:fileType\")\r\n .param(\":badgeId\", badgeId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n BadgesCreateEditController.prototype.activate = function (id) {\r\n var _this = this;\r\n this.badgesService.activate(id).then(function () {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Badge :badgeName has been activated\").with(':badgeName', _this.badge.name).build());\r\n _this.badge.isActive = true;\r\n });\r\n };\r\n BadgesCreateEditController.prototype.deactivate = function (id) {\r\n var _this = this;\r\n var games;\r\n this.badgesService.getRelatedGameLevelRewardsForBadge(id).then(function (result) {\r\n games = result;\r\n _this.badgesService.getRelatedLearningObjForBadge(id).then(function (res) {\r\n var relatedItems = {};\r\n if (res.size !== 0) {\r\n Object.keys(res).forEach(function (key) {\r\n relatedItems[key] = res[key];\r\n });\r\n }\r\n if (games.length !== 0) {\r\n relatedItems['games'] = games;\r\n }\r\n if (Object.keys(relatedItems).length === 0) {\r\n _this.badgesService.deactivate(id).then(function () {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Badge :badgeName has been deactivated\").with(':badgeName', _this.badge.name).build());\r\n _this.redirectToBack();\r\n });\r\n }\r\n else {\r\n var formattedFunc = function (name, index) {\r\n return \"

    \" + (index + 1) + \". \" + name + \"

    \";\r\n };\r\n Object.keys(res).forEach(function (key) {\r\n var message = StringBuilder_1.StringBuilder.interpolate(\"

    The badge cannot be deactivated. It is used in the following instances::items

    \")\r\n .with(\":items\", _this.getItemsFormattedString(relatedItems, formattedFunc, \"\\n\"))\r\n .build();\r\n _this.dialogService.confirm(message, {\r\n hideCancelButton: true,\r\n title: \"Deactivate badge\"\r\n });\r\n });\r\n }\r\n });\r\n });\r\n };\r\n BadgesCreateEditController.prototype.remove = function (id) {\r\n var _this = this;\r\n var games;\r\n this.badgesService.getRelatedGameLevelRewardsForBadge(id).then(function (result) {\r\n games = result;\r\n _this.badgesService.getRelatedLearningObjForBadge(id).then(function (res) {\r\n var relatedItems = {};\r\n if (res.size !== 0) {\r\n Object.keys(res).forEach(function (key) {\r\n relatedItems[key] = res[key];\r\n });\r\n }\r\n if (games.length !== 0) {\r\n relatedItems['games'] = games;\r\n }\r\n if (Object.keys(relatedItems).length === 0) {\r\n _this.dialogService.confirm(\"This badge will be removed from the system. Continue?\", {\r\n title: \"Delete badge\"\r\n }).then(function () {\r\n _this.badgesService.remove(id).then(function () {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Badge :badgeName has been removed\").with(':badgeName', _this.badge.name).build());\r\n _this.redirectToBack();\r\n });\r\n });\r\n }\r\n else {\r\n var formattedFunc = function (name, index) {\r\n return \"

    \" + (index + 1) + \". \" + name + \"

    \";\r\n };\r\n Object.keys(res).forEach(function (key) {\r\n var message = StringBuilder_1.StringBuilder.interpolate(\"

    The badge cannot be removed. It is used in the following instances::items

    \")\r\n .with(\":items\", _this.getItemsFormattedString(relatedItems, formattedFunc, \"\\n\"))\r\n .build();\r\n _this.dialogService.confirm(message, {\r\n hideCancelButton: true,\r\n title: \"Delete badge\"\r\n });\r\n });\r\n }\r\n });\r\n });\r\n };\r\n BadgesCreateEditController.prototype.getItemsFormattedString = function (relatedItems, formattedFunc, separator) {\r\n var result = '';\r\n Object.keys(relatedItems).forEach(function (key) {\r\n var title;\r\n if (key === 'games') {\r\n title = relatedItems[key].length === 1 ? 'Game program' : 'Game programs';\r\n }\r\n else if (key === 'courses') {\r\n title = relatedItems[key].length === 1 ? 'Course' : 'Courses';\r\n }\r\n else if (key === 'learning paths') {\r\n title = relatedItems[key].length === 1 ? 'Learning path' : 'Learning paths';\r\n }\r\n result += \"
    \" + title + \"
    \";\r\n relatedItems[key].forEach(function (item, index) {\r\n result += formattedFunc(item, index) + separator;\r\n });\r\n });\r\n return result;\r\n };\r\n BadgesCreateEditController.prototype.resetPreview = function () {\r\n if (this.preview) {\r\n this.preview = undefined;\r\n }\r\n if (this.previewUrl) {\r\n this.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n if (this.croppedImage) {\r\n this.croppedImage = undefined;\r\n }\r\n };\r\n BadgesCreateEditController.prototype.showCropperModalAfterLoad = function () {\r\n var _this = this;\r\n setTimeout(function () {\r\n _this.preview != undefined || _this.previewUrl != undefined\r\n ? _this.showCropperModal()\r\n : _this.showCropperModalAfterLoad();\r\n }, 100);\r\n };\r\n BadgesCreateEditController.prototype.showCropperModal = function () {\r\n $(\"#imageCropperModal\").modal(\"show\");\r\n };\r\n BadgesCreateEditController.prototype.restorePreviewUrl = function () {\r\n this.preview = undefined;\r\n this.previewUrl = this.badge.previewUrl;\r\n this.croppedImage = undefined;\r\n this.hasPreviewUrlCanceled = false;\r\n };\r\n BadgesCreateEditController.prototype.getImageBadge = function (badge) {\r\n if (badge) {\r\n var imageName;\r\n switch (badge.id) {\r\n case 100:\r\n imageName = \"CourseFinisher\";\r\n break;\r\n case 101:\r\n imageName = \"LearningPathFinisher\";\r\n break;\r\n }\r\n return \"themes/default/img/badges/\" + imageName + \".png\";\r\n }\r\n return '';\r\n };\r\n BadgesCreateEditController.NAME = \"gamification.BadgesCreateEditController\";\r\n BadgesCreateEditController.$inject = [\r\n \"$q\",\r\n \"$http\",\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"Upload\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n GamificationRouter_1.GamificationRouter.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n AuthService_1.AuthService.NAME\r\n ];\r\n return BadgesCreateEditController;\r\n})();\r\nexports.BadgesCreateEditController = BadgesCreateEditController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../components/dialog/DialogService\":166,\"../security/SecurityService\":420,\"../urls/GamificationRouter\":472,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./BadgesService\":245}],245:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar BadgesService = (function () {\r\n function BadgesService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n }\r\n BadgesService.prototype.getBadge = function (id) {\r\n return this.$http.get(this.url.base(\"/api/badges/:id/details\")\r\n .param(\":id\", id).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.updateBadge = function (id, badge) {\r\n return this.$http.put(this.url.base(\"/api/badges/:id\")\r\n .param(\":id\", id).service(), badge)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.createBadge = function (badge) {\r\n return this.$http.post(this.url.base(\"/api/badges\").service(), badge)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.activate = function (badgeId) {\r\n return this.$http.post(this.url.base(\"/api/badges/activate/:badgeId\")\r\n .param(\":badgeId\", badgeId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.deactivate = function (badgeId) {\r\n return this.$http.post(this.url.base(\"/api/badges/deactivate/:badgeId\")\r\n .param(\":badgeId\", badgeId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.getImageUrl = function (id) {\r\n return this.$http.get(this.url.base(\"/api/badges/image/:id\").param(\":id\", id).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.remove = function (badgeId) {\r\n return this.$http.delete(this.url.base(\"/api/badges/:badgeId\")\r\n .param(\":badgeId\", badgeId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.getRelatedGameLevelRewardsForBadge = function (badgeId) {\r\n return this.$http.get(this.url.base(\"/api/badges/relatedGames/:badgeId\")\r\n .param(\":badgeId\", badgeId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.getRelatedLearningObjForBadge = function (badgeId) {\r\n return this.$http.get(this.url.base(\"/api/badges/relatedLearningObj/:badgeId\")\r\n .param(\":badgeId\", badgeId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.getActivityBadge = function (id) {\r\n return this.$http.get(this.url.base(\"/api/badges/activity/:id\")\r\n .param(\":id\", id).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.getActivityBadgeImageUrl = function (id) {\r\n return this.$http.get(this.url.base(\"/api/badges/activity/image/:id\").param(\":id\", id).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.updateActivityBadge = function (id, badge) {\r\n return this.$http.put(this.url.base(\"/api/badges/activity/:id\")\r\n .param(\":id\", id).service(), badge)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.activateActivityBadge = function (badgeId) {\r\n return this.$http.post(this.url.base(\"/api/badges/activity/activate/:badgeId\")\r\n .param(\":badgeId\", badgeId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.deactivateActivityBadge = function (badgeId) {\r\n return this.$http.post(this.url.base(\"/api/badges/activity/deactivate/:badgeId\")\r\n .param(\":badgeId\", badgeId).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.removeActivityBadgeImage = function (badgeId) {\r\n return this.$http.post(this.url.base(\"/api/badges/activityBadge/removeImage\")\r\n .param(\":badgeId\", badgeId).service(), badgeId)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.removeBadgeImage = function (badgeId) {\r\n return this.$http.post(this.url.base(\"/api/badges/removeImage\")\r\n .param(\":badgeId\", badgeId).service(), badgeId)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.isSystemAdministrator = function () {\r\n return this.$http.get(this.url.service(\"/api/badges/isSystemAdministrator\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.notifyUserAfterReward = function (badgeKeys) {\r\n if (badgeKeys === void 0) { badgeKeys = []; }\r\n return this.$http.post(this.url.service(\"/api/badges/notify\"), { badgeKeys: badgeKeys })\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.sendEmailWithBadge = function (rewardUuid, message, subject, email) {\r\n return this.$http.post(this.url.service(\"/api/badges/sendEmails\"), { rewardUuid: rewardUuid, message: message, subject: subject, email: email })\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.setActiveProperty = function (badgeTemplateId, version, active, businessUnitId) {\r\n var url = \"/api/badges/templates/:badgeTemplateId/inactive/:active?version=:version\";\r\n if (businessUnitId) {\r\n url = url + \"&businessUnitId=:businessUnitId\";\r\n }\r\n var parameterizedUrl = this.url.base(url)\r\n .param(\":badgeTemplateId\", badgeTemplateId)\r\n .param(\":active\", active)\r\n .param(\":version\", version);\r\n if (businessUnitId) {\r\n parameterizedUrl.param(\":businessUnitId\", businessUnitId);\r\n }\r\n return this.$http.get(parameterizedUrl.service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.removeBadgeTemplateDetails = function (templateDetailsId) {\r\n return this.$http.delete(this.url.base(\"/api/badges/templates/:templateDetailsId/remove\")\r\n .param(\":templateDetailsId\", templateDetailsId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.getBadgeTemplateDetailsById = function (badgeTemplateId, scope) {\r\n return this.$http.get(this.url.base(\"/api/badges/templates/:badgeTemplateId/details?scope=:scope\")\r\n .param(\":badgeTemplateId\", badgeTemplateId)\r\n .param(\":scope\", scope)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.prototype.saveBadgeTemplateDetails = function (templateDetails) {\r\n return this.$http.post(this.url.service(\"/api/badges/templates/save\"), templateDetails)\r\n .then(function (result) { return result.data; });\r\n };\r\n BadgesService.NAME = \"gamification.BadgesService\";\r\n BadgesService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return BadgesService;\r\n})();\r\nexports.BadgesService = BadgesService;\r\n},{\"../utils/UrlService\":528}],246:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar GameLearningObjectActionService = (function () {\r\n function GameLearningObjectActionService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n }\r\n GameLearningObjectActionService.prototype.getReward = function (id) {\r\n return this.$http.get(this.url.base(\"/api/gameAction/:id\")\r\n .param(':id', id).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n GameLearningObjectActionService.prototype.createReward = function (reward) {\r\n return this.$http.post(this.url.base(\"/api/gameAction\").service(), reward)\r\n .then(function (result) { return result.data; });\r\n };\r\n GameLearningObjectActionService.prototype.editReward = function (id, reward) {\r\n return this.$http.put(this.url.base(\"/api/gameAction/:id\")\r\n .param(\":id\", id)\r\n .service(), reward)\r\n .then(function (result) { return result.data; });\r\n };\r\n GameLearningObjectActionService.prototype.activate = function (id) {\r\n return this.$http.post(this.url.base(\"/api/gameAction/activate/:id\")\r\n .param(\":id\", id).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n GameLearningObjectActionService.prototype.deactivate = function (id) {\r\n return this.$http.post(this.url.base(\"/api/gameAction/deactivate/:id\")\r\n .param(\":id\", id).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n GameLearningObjectActionService.prototype.remove = function (id) {\r\n return this.$http.delete(this.url.base(\"/api/gameAction/:id\")\r\n .param(\":id\", id).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n GameLearningObjectActionService.NAME = \"gamification.GameLearningObjectActionService\";\r\n GameLearningObjectActionService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return GameLearningObjectActionService;\r\n})();\r\nexports.GameLearningObjectActionService = GameLearningObjectActionService;\r\n},{\"../utils/UrlService\":528}],247:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar GamificationRouter_1 = require(\"../urls/GamificationRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar GamificationService_1 = require(\"./GamificationService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar GameProgramsController = (function () {\r\n function GameProgramsController($scope, $http, $location, $routeParams, $timeout, $q, $rootScope, url, securityService, permissionsService, userService, authService, authManager, businessUnitService, gamificationRouter, gamificationService, commonFilterService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.$q = $q;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.userService = userService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.businessUnitService = businessUnitService;\r\n this.gamificationRouter = gamificationRouter;\r\n this.gamificationService = gamificationService;\r\n this.commonFilterService = commonFilterService;\r\n this.hasAllBusinessUnits = true;\r\n this.loadPrograms();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_GAME_PROGRAMS_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Game programs\")\r\n .addParentLink(\"Gamification\", \"#\" + GamificationRouter_1.GamificationRouter.gameProgramsRoute)\r\n .update();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.viewAnyLearningObject; });\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.currentUser = user;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n });\r\n }\r\n GameProgramsController.prototype.loadPrograms = function () {\r\n this.gamesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service('api/gamification')));\r\n };\r\n GameProgramsController.prototype.getActiveString = function (game) {\r\n return game.active ? \"Yes\" : \"No\";\r\n };\r\n GameProgramsController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(GameProgramsController.NAME, this.searchInput);\r\n this.gamesGridModel.filter.searchString = this.searchInput;\r\n this.gamesGridModel.loadCurrentPage();\r\n };\r\n GameProgramsController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n GameProgramsController.prototype.toggleActive = function (game) {\r\n var _this = this;\r\n this.gamificationService.toggleGameActive(game.id)\r\n .then(function () {\r\n if (!game.active) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Game program ':game' has been activated.\")\r\n .with(\":game\", game.name)\r\n .build());\r\n }\r\n else {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Game program ':game' has been deactivated.\")\r\n .with(\":game\", game.name)\r\n .build());\r\n }\r\n _this.gamesGridModel.loadCurrentPage();\r\n });\r\n };\r\n GameProgramsController.prototype.isEditable = function (entity) {\r\n if (!this.systemPermissions.manageAnyLearningObject) {\r\n return false;\r\n }\r\n if (this.hasAllBusinessUnits || (this.currentUser.businessUnits && this.currentUser.businessUnits.indexOf(entity.businessUnitId) !== -1)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n GameProgramsController.NAME = \"gamification.GameProgramsController\";\r\n GameProgramsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$timeout\",\r\n \"$q\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UserService_1.UserService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n GamificationRouter_1.GamificationRouter.NAME,\r\n GamificationService_1.GamificationService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME\r\n ];\r\n return GameProgramsController;\r\n})();\r\nexports.GameProgramsController = GameProgramsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../businessUnits/BusinessUnitsService\":44,\"../common/CommonFilterService\":49,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/GamificationRouter\":472,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./GamificationService\":250}],248:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar GamificationRouter_1 = require(\"../urls/GamificationRouter\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar GamificationService_1 = require(\"./GamificationService\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar BadgesService_1 = require(\"./BadgesService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar GameProgramsCreateEditController = (function () {\r\n function GameProgramsCreateEditController($scope, $http, $location, $routeParams, $timeout, $q, $rootScope, url, securityService, permissionsService, userService, authService, authManager, businessUnitService, gamificationService, gamificationRouter, badgesService, authRedirect) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.$q = $q;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.userService = userService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.businessUnitService = businessUnitService;\r\n this.gamificationService = gamificationService;\r\n this.gamificationRouter = gamificationRouter;\r\n this.badgesService = badgesService;\r\n this.authRedirect = authRedirect;\r\n this.hasAllBusinessUnits = false;\r\n this.game = {};\r\n this.initialGameState = {};\r\n this.currentUserBusinessUnits = [];\r\n this.editedRewardTypeDropdown = false;\r\n this.editedRewardMessageType = 'default';\r\n this.levelsToDelete = [];\r\n this.isBadgeTableVisible = false;\r\n this.badgeIds = [];\r\n this.badgeSearchString = \"\";\r\n this.formIsDirty = false;\r\n this.isRewardExist = false;\r\n this.isGameLoaded = false;\r\n this.isUserASystemAdministrator = false;\r\n this.gameId = $routeParams[GamificationRouter_1.GamificationRouter.PROGRAM_ID_PARAM];\r\n var hasGameId = this.gameId != null;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_GAME_PROGRAMS_KEY);\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.manageAnyLearningObject; });\r\n if (this.gameId) {\r\n this.loadGame();\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header(\"New game program\")\r\n .update();\r\n this.newLevel = { isEdit: true };\r\n this.isGameLoaded = true;\r\n }\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.currentUser = user;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n angular.copy(user.businessUnits, _this.currentUserBusinessUnits);\r\n }).then(function () {\r\n $rootScope.$on('$locationChangeStart', function (event, newLocation) {\r\n if (!_this.allowNavigation && _this.currentUser.fullName != \"Guest\") {\r\n event.preventDefault();\r\n _this.$timeout(function () {\r\n INotifier_1.notifier.warning(\"You can't leave this page unless you save or cancel the game program\");\r\n });\r\n }\r\n });\r\n });\r\n $(window).on(\"beforeunload\", function (event) {\r\n if (!_this.allowNavigation && _this.currentUser.fullName != \"Guest\") {\r\n return \"You can't leave this page unless you save or cancel the game program\";\r\n }\r\n });\r\n }\r\n GameProgramsCreateEditController.prototype.loadGame = function () {\r\n var _this = this;\r\n this.gamificationService.getGame(this.gameId)\r\n .then(function (response) {\r\n _this.game = response;\r\n _this.game.levels = [];\r\n })\r\n .then(function () {\r\n _this.gamificationService.getGameRewards(_this.gameId)\r\n .then(function (rewards) {\r\n _this.game.levels = rewards;\r\n rewards.forEach(function (r) {\r\n if (r.badgeId && r.gameLevelId) {\r\n _this.badgeIds.push(r.badgeId);\r\n }\r\n });\r\n })\r\n .then(function () { return _this.gamificationService.getGameLevels(_this.gameId).then(function (levels) {\r\n _this.game.levels.map(function (level, index) {\r\n level.name = levels[index].name;\r\n level.points = levels[index].points;\r\n });\r\n }); }).then(function () {\r\n _this.game.levels.map(function (level) {\r\n if (level.badgeId) {\r\n _this.badgesService.getBadge(level.badgeId).then(function (res) {\r\n level.badgeName = res.name;\r\n });\r\n _this.badgesService.getImageUrl(level.badgeId).then(function (res) {\r\n level.badgePreviewUrl = res;\r\n }).finally(function () { return _this.isGameLoaded = true; });\r\n }\r\n else {\r\n _this.isGameLoaded = true;\r\n }\r\n });\r\n });\r\n })\r\n .then(function () {\r\n _this.initialGameState = angular.copy(_this.game);\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header('Edit game program \"' + _this.game.name + '\"')\r\n .update();\r\n if (_this.currentUser.fullName !== 'Guest') {\r\n _this.allowNavigation = false;\r\n }\r\n }).catch(function (err) {\r\n if (err.status === 403) {\r\n _this.allowNavigation = true;\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header('Access denied')\r\n .update();\r\n }\r\n _this.authRedirect.forwardToAccessDenied();\r\n });\r\n };\r\n GameProgramsCreateEditController.prototype.toggleMessage = function (level) {\r\n level.showLevelMessage = !level.showLevelMessage;\r\n };\r\n GameProgramsCreateEditController.prototype.togglePoints = function (level) {\r\n level.showPointsMessage = !level.showPointsMessage;\r\n };\r\n GameProgramsCreateEditController.prototype.saveNewLevel = function () {\r\n if (!this.newLevel.id) {\r\n this.newLevel.id = this.game.levels ? this.game.levels.length * -1 : 0;\r\n }\r\n if (!this.newLevel.points) {\r\n this.newLevel.points = 0;\r\n }\r\n if (this.currentUserBusinessUnits.length == 1) {\r\n this.game.businessUnitId = this.currentUserBusinessUnits[0];\r\n }\r\n this.newLevel.showPointsMessage = !!this.newLevel.pointsMessageBody || !!this.newLevel.pointsMessageSubject;\r\n if (!this.game.levels) {\r\n this.game.levels = [];\r\n }\r\n this.newLevel.gameId = this.gameId;\r\n if (this.newLevel.badgeId) {\r\n this.badgeIds.push(this.newLevel.badgeId);\r\n }\r\n this.newLevel.isEdit = false;\r\n this.game.levels.push(this.newLevel);\r\n this.clearReward();\r\n this.newLevel = null;\r\n this.setFormIsDirty();\r\n };\r\n GameProgramsCreateEditController.prototype.saveEditedLevel = function (level) {\r\n var _this = this;\r\n level.gameId = this.gameId;\r\n level.isEdit = false;\r\n this.game.levels.map(function (lvl, index) {\r\n if (lvl.id === level.id) {\r\n lvl.isEdit = false;\r\n _this.game.levels[index] = angular.copy(lvl);\r\n }\r\n });\r\n this.clearReward();\r\n this.setFormIsDirty();\r\n };\r\n GameProgramsCreateEditController.prototype.saveGame = function () {\r\n var _this = this;\r\n this.game.levels.forEach(function (level) {\r\n if (level.isEdit) {\r\n _this.clearEditedLevel(level);\r\n }\r\n });\r\n this.gamificationService.isGameUnique(this.game).then(function (res) {\r\n if (res) {\r\n _this.gamificationService.saveGame(_this.game).then(function (res) {\r\n _this.game.id = res.gameId;\r\n _this.levelsToDelete.map(function (level) {\r\n _this.gamificationService.deleteLevel(level);\r\n });\r\n _this.$location.url(_this.gamificationRouter.programsUrl());\r\n }).finally(function () {\r\n if (!_this.gameId)\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Game program ':game' has been saved.\")\r\n .with(\":game\", _this.game.name)\r\n .build());\r\n else\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"Modifications of game program ':game' have been saved.\")\r\n .with(\":game\", _this.game.name)\r\n .build());\r\n });\r\n _this.formIsDirty = false;\r\n _this.allowNavigation = true;\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Game program name must be unique\");\r\n }\r\n });\r\n };\r\n GameProgramsCreateEditController.prototype.cancelGame = function () {\r\n this.allowNavigation = true;\r\n this.$location.url(this.gamificationRouter.programsUrl());\r\n };\r\n GameProgramsCreateEditController.prototype.showEditModal = function (level, type) {\r\n var _this = this;\r\n this.showModalType = type;\r\n this.levelToEdit = level;\r\n this.isRewardExist = false;\r\n switch (type) {\r\n case 'points': {\r\n if (level.id) {\r\n this.editedRewardMessageType = level.showDefaultPointsMessage ? 'default' : level.showPointsMessage ? 'custom' : 'none';\r\n }\r\n else {\r\n if (level.showDefaultPointsMessage === undefined && level.showPointsMessage === undefined) {\r\n this.editedRewardMessageType = 'default';\r\n }\r\n else {\r\n this.editedRewardMessageType = level.showDefaultPointsMessage ? 'default' : level.showPointsMessage ? 'custom' : 'none';\r\n }\r\n }\r\n this.editedMessageSubject = level.pointsMessageSubject;\r\n this.editedMessageBody = level.pointsMessageBody;\r\n this.levelToEdit.newBonusPoints = this.levelToEdit.bonusPoints;\r\n if (this.levelToEdit.bonusPoints) {\r\n this.isRewardExist = true;\r\n }\r\n break;\r\n }\r\n case 'message': {\r\n this.editedRewardMessageType = level.showLevelMessage\r\n && level.levelMessageSubject\r\n && level.levelMessageBody\r\n ? 'custom'\r\n : 'default';\r\n if (this.editedRewardMessageType === 'default') {\r\n this.setMessageToDefault();\r\n }\r\n else {\r\n this.editedMessageSubject = level.levelMessageSubject;\r\n this.editedMessageBody = level.levelMessageBody;\r\n }\r\n if (this.levelToEdit.bonusPoints) {\r\n this.isRewardExist = true;\r\n }\r\n if (!level.showLevelMessage\r\n && !level.levelMessageSubject\r\n && !level.levelMessageBody) {\r\n this.isRewardExist = false;\r\n }\r\n else {\r\n this.isRewardExist = true;\r\n }\r\n break;\r\n }\r\n case 'badge': {\r\n if (level.badgeId) {\r\n this.isRewardExist = true;\r\n this.badgesService.getBadge(level.badgeId)\r\n .then(function (res) {\r\n _this.badgeBeforeSave = angular.copy(res);\r\n _this.chosenBadge = angular.copy(res);\r\n _this.editedRewardMessageType = level.showDefaultBadgeMessage ? 'default' : level.showBadgeMessage ? 'custom' : 'none';\r\n _this.editedMessageSubject = level.customBadgeMessageSubject;\r\n _this.editedMessageBody = level.customBadgeMessageBody;\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n if (this.editedRewardMessageType == 'default' && type !== 'badge') {\r\n this.setMessageToDefault();\r\n }\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#rewardCreationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n GameProgramsCreateEditController.prototype.saveReward = function (type) {\r\n switch (type) {\r\n case 'points': {\r\n this.levelToEdit.showPointsMessage = this.editedRewardMessageType === 'custom';\r\n this.levelToEdit.showDefaultPointsMessage = this.editedRewardMessageType === 'default';\r\n this.levelToEdit.pointsMessageSubject = this.editedMessageSubject;\r\n this.levelToEdit.pointsMessageBody = this.editedMessageBody;\r\n this.levelToEdit.bonusPoints = this.levelToEdit.newBonusPoints;\r\n this.levelToEdit.newBonusPoints = 0;\r\n break;\r\n }\r\n case 'message': {\r\n this.levelToEdit.showLevelMessage = true;\r\n this.levelToEdit.levelMessageSubject = this.editedRewardMessageType !== 'default' ? this.editedMessageSubject : null;\r\n this.levelToEdit.levelMessageBody = this.editedRewardMessageType !== 'default' ? this.editedMessageBody : null;\r\n break;\r\n }\r\n case 'badge': {\r\n this.badgeBeforeSave = null;\r\n this.levelToEdit.showBadgeMessage = this.editedRewardMessageType === 'custom';\r\n this.levelToEdit.showDefaultBadgeMessage = this.editedRewardMessageType === 'default';\r\n this.levelToEdit.customBadgeMessageSubject = this.editedMessageSubject;\r\n this.levelToEdit.customBadgeMessageBody = this.editedMessageBody;\r\n this.levelToEdit.badgeId = this.chosenBadge.id;\r\n this.levelToEdit.badgePreviewUrl = this.chosenBadge.previewUrl;\r\n this.badgesGridModel.filter.searchString = undefined;\r\n this.badgesGridModel.sorting = [];\r\n this.badgeSearchString = '';\r\n break;\r\n }\r\n }\r\n this.clearReward();\r\n };\r\n GameProgramsCreateEditController.prototype.clearReward = function () {\r\n this.chosenBadge = null;\r\n this.editedRewardTypeDropdown = false;\r\n this.editedRewardMessageType = 'default';\r\n this.editedMessageSubject = '';\r\n this.editedMessageBody = '';\r\n $(\"#rewardCreationDialog\").modal('hide');\r\n };\r\n GameProgramsCreateEditController.prototype.clearRewardOfType = function (level, type) {\r\n switch (type) {\r\n case 'badge': {\r\n this.badgeIds = this.badgeIds.filter(function (id) { return id !== level.badgeId; });\r\n level.showBadgeMessage = false;\r\n level.customBadgeMessageSubject = null;\r\n level.customBadgeMessageBody = null;\r\n level.badgeId = null;\r\n level.badgePreviewUrl = null;\r\n break;\r\n }\r\n case 'message': {\r\n level.levelMessageSubject = null;\r\n level.levelMessageBody = null;\r\n level.showLevelMessage = false;\r\n break;\r\n }\r\n case 'points': {\r\n level.bonusPoints = null;\r\n level.pointsMessageSubject = null;\r\n level.pointsMessageBody = null;\r\n level.showPointsMessage = false;\r\n break;\r\n }\r\n }\r\n };\r\n GameProgramsCreateEditController.prototype.clearNewLevel = function () {\r\n this.newLevel.name = '';\r\n this.newLevel.points = null;\r\n this.clearRewardOfType(this.newLevel, 'badge');\r\n this.clearRewardOfType(this.newLevel, 'message');\r\n this.clearRewardOfType(this.newLevel, 'points');\r\n if (this.game.levels && this.game.levels.length > 0) {\r\n this.newLevel.isEdit = false;\r\n }\r\n };\r\n GameProgramsCreateEditController.prototype.clearEditedLevel = function (level) {\r\n for (var i in level.oldData) {\r\n level[i] = level.oldData[i];\r\n }\r\n level.oldData = null;\r\n level.isEdit = false;\r\n this.chosenBadge = null;\r\n };\r\n GameProgramsCreateEditController.prototype.toggleBadgeTable = function () {\r\n this.isBadgeTableVisible = !this.isBadgeTableVisible;\r\n if (this.isBadgeTableVisible) {\r\n this.badgesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/badges/program\")));\r\n if (this.badgeIds) {\r\n this.badgesGridModel.filter.excludedBadges = this.badgeIds;\r\n }\r\n if (this.currentUserBusinessUnits.length == 1) {\r\n this.badgesGridModel.filter.businessUnitId = this.currentUserBusinessUnits[0];\r\n }\r\n else {\r\n this.badgesGridModel.filter.businessUnitId = this.game.businessUnitId;\r\n }\r\n this.badgesGridModel.pageSize = 5;\r\n this.badgesGridModel.loadCurrentPage();\r\n }\r\n };\r\n GameProgramsCreateEditController.prototype.addBadge = function (entry) {\r\n var _this = this;\r\n this.chosenBadge = entry;\r\n if (this.levelToEdit.badgeId != entry.id) {\r\n this.badgeIds = this.badgeIds.filter(function (id) { return id !== _this.levelToEdit.badgeId; });\r\n }\r\n this.badgeIds.push(entry.id);\r\n this.levelToEdit.badgeId = entry.id;\r\n this.levelToEdit.badgePreviewUrl = entry.previewUrl;\r\n this.levelToEdit.badgeName = entry.name;\r\n this.levelToEdit.showDefaultBadgeMessage = true;\r\n if (this.editedRewardMessageType === 'default' || !this.editedRewardMessageType) {\r\n this.editedMessageSubject = entry.subject;\r\n this.editedMessageBody = entry.description;\r\n }\r\n this.toggleBadgeTable();\r\n };\r\n GameProgramsCreateEditController.prototype.setMessageToDefault = function () {\r\n switch (this.showModalType) {\r\n case 'badge': {\r\n this.editedMessageSubject = this.chosenBadge.subject;\r\n this.editedMessageBody = this.chosenBadge.description;\r\n break;\r\n }\r\n case 'message': {\r\n var first = \"Dear ${Recipient},\";\r\n var second = \"Congratulations, you have achieved level ${level_name}!\";\r\n this.editedMessageSubject = \"Level Up!\";\r\n this.editedMessageBody = first + \"\\n\\n\" + second + \"\\n\";\r\n break;\r\n }\r\n case 'points': {\r\n var first = \"Dear ${Recipient},\";\r\n var second = \"Congratulations, you were awarded ${points} point(s)!\";\r\n this.editedMessageSubject = \"You were awarded points!\";\r\n this.editedMessageBody = first + \"\\n\\n\" + second + \"\\n\";\r\n break;\r\n }\r\n }\r\n };\r\n GameProgramsCreateEditController.prototype.setMessageToNone = function () {\r\n this.editedMessageSubject = '';\r\n this.editedMessageBody = '';\r\n };\r\n GameProgramsCreateEditController.prototype.clearChosenBadge = function () {\r\n var _this = this;\r\n this.badgeIds = this.badgeIds.filter(function (id) { return id !== _this.levelToEdit.badgeId; });\r\n this.chosenBadge = null;\r\n this.toggleBadgeTable();\r\n };\r\n GameProgramsCreateEditController.prototype.cancelRewardModalChanges = function () {\r\n var _this = this;\r\n switch (this.showModalType) {\r\n case 'badge': {\r\n if (!this.badgeBeforeSave && this.chosenBadge) {\r\n this.badgeIds = this.badgeIds.filter(function (id) { return id !== _this.levelToEdit.badgeId; });\r\n this.levelToEdit.badgeId = null;\r\n }\r\n else if (this.badgeBeforeSave && !this.chosenBadge) {\r\n this.badgeIds.push(this.badgeBeforeSave.id);\r\n this.levelToEdit.badgeId = this.badgeBeforeSave.id;\r\n this.levelToEdit.badgePreviewUrl = this.badgeBeforeSave.previewUrl;\r\n }\r\n else if (this.badgeBeforeSave && this.badgeBeforeSave.id !== this.chosenBadge.id) {\r\n this.badgeIds = this.badgeIds.filter(function (id) { return id !== _this.levelToEdit.badgeId; });\r\n this.badgeIds.push(this.badgeBeforeSave.id);\r\n this.levelToEdit.badgeId = this.badgeBeforeSave.id;\r\n this.levelToEdit.badgePreviewUrl = this.badgeBeforeSave.previewUrl;\r\n }\r\n this.chosenBadge = null;\r\n this.badgeBeforeSave = null;\r\n this.levelToEdit = null;\r\n this.badgesGridModel.filter.searchString = undefined;\r\n this.badgesGridModel.sorting = [];\r\n this.badgeSearchString = '';\r\n break;\r\n }\r\n case 'message': {\r\n this.levelToEdit = null;\r\n break;\r\n }\r\n case 'points': {\r\n this.levelToEdit = null;\r\n break;\r\n }\r\n }\r\n this.showModalType = null;\r\n this.editedRewardMessageType = 'default';\r\n this.chosenBadge = null;\r\n this.isBadgeTableVisible = false;\r\n };\r\n GameProgramsCreateEditController.prototype.chooseLevel = function (level) {\r\n level.isEdit = true;\r\n level.oldData = angular.copy(level);\r\n };\r\n GameProgramsCreateEditController.prototype.deleteLevel = function (level) {\r\n if (level.badgeId) {\r\n this.badgeIds = this.badgeIds.filter(function (id) { return id !== level.badgeId; });\r\n }\r\n this.levelsToDelete.push(level);\r\n this.game.levels = this.game.levels.filter(function (l) { return l.id !== level.id; });\r\n this.setFormIsDirty();\r\n if (this.game.levels.length === 0) {\r\n this.newLevel = { isEdit: true };\r\n }\r\n };\r\n GameProgramsCreateEditController.prototype.setFormIsDirty = function () {\r\n this.formIsDirty = true;\r\n };\r\n GameProgramsCreateEditController.prototype.badgeSearchKeyPress = function () {\r\n this.badgesGridModel.filter.searchString = this.badgeSearchString;\r\n this.badgesGridModel.loadCurrentPage();\r\n };\r\n GameProgramsCreateEditController.prototype.getAwardTypeNotification = function (level) {\r\n return \"(Popup)\";\r\n };\r\n GameProgramsCreateEditController.prototype.clearSymbols = function (level, isBonus, $event) {\r\n if (['+', '-', 'e', '.'].indexOf($event.key) !== -1) {\r\n $event.preventDefault();\r\n }\r\n };\r\n GameProgramsCreateEditController.prototype.getSecondMessage = function (points) {\r\n return points === 1 ? \"point for game \" : \"points for game \";\r\n };\r\n GameProgramsCreateEditController.NAME = 'gamification.GameProgramsCreateEditController';\r\n GameProgramsCreateEditController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$timeout\",\r\n \"$q\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UserService_1.UserService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n GamificationService_1.GamificationService.NAME,\r\n GamificationRouter_1.GamificationRouter.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME\r\n ];\r\n return GameProgramsCreateEditController;\r\n})();\r\nexports.GameProgramsCreateEditController = GameProgramsCreateEditController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../businessUnits/BusinessUnitsService\":44,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/GamificationRouter\":472,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./BadgesService\":245,\"./GamificationService\":250}],249:[function(require,module,exports){\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar BadgesService_1 = require(\"./BadgesService\");\r\nvar BadgesController_1 = require(\"./BadgesController\");\r\nvar BadgesCreateEditController_1 = require(\"./BadgesCreateEditController\");\r\nvar GamificationService_1 = require(\"./GamificationService\");\r\nvar GameProgramsController_1 = require(\"./GameProgramsController\");\r\nvar CommonModule_1 = require(\"../common/CommonModule\");\r\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar ContentModule_1 = require(\"../content/ContentModule\");\r\nvar AuthCoreModule_1 = require(\"../authcore/AuthCoreModule\");\r\nvar BundlesModule_1 = require(\"../bundles/BundlesModule\");\r\nvar GameProgramsCreateEditController_1 = require(\"./GameProgramsCreateEditController\");\r\nvar GameLearningObjectActionService_1 = require(\"./GameLearningObjectActionService\");\r\nvar ActivityBadgeEditController_1 = require(\"./ActivityBadgeEditController\");\r\nvar BadgeTemplatesController_1 = require(\"./BadgeTemplatesController\");\r\nvar BadgeTemplateEditController_1 = require(\"./BadgeTemplateEditController\");\r\nexports.GamificationModule = angular\r\n .module(\"gamification\", [\r\n SecurityModule_1.SecurityModule.name,\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n BundlesModule_1.BundlesModule.name,\r\n CommonModule_1.CommonModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n ContentModule_1.ContentModule.name\r\n])\r\n .service(GamificationService_1.GamificationService.NAME, GamificationService_1.GamificationService)\r\n .service(BadgesService_1.BadgesService.NAME, BadgesService_1.BadgesService)\r\n .controller(GameProgramsController_1.GameProgramsController.NAME, GameProgramsController_1.GameProgramsController)\r\n .controller(GameProgramsCreateEditController_1.GameProgramsCreateEditController.NAME, GameProgramsCreateEditController_1.GameProgramsCreateEditController)\r\n .service(GameLearningObjectActionService_1.GameLearningObjectActionService.NAME, GameLearningObjectActionService_1.GameLearningObjectActionService)\r\n .controller(BadgesController_1.BadgesController.NAME, BadgesController_1.BadgesController)\r\n .controller(BadgesCreateEditController_1.BadgesCreateEditController.NAME, BadgesCreateEditController_1.BadgesCreateEditController)\r\n .controller(ActivityBadgeEditController_1.ActivityBadgeEditController.NAME, ActivityBadgeEditController_1.ActivityBadgeEditController)\r\n .controller(BadgeTemplatesController_1.BadgeTemplatesController.NAME, BadgeTemplatesController_1.BadgeTemplatesController)\r\n .controller(BadgeTemplateEditController_1.BadgeTemplateEditController.NAME, BadgeTemplateEditController_1.BadgeTemplateEditController);\r\n},{\"../authcore/AuthCoreModule\":24,\"../bundles/BundlesModule\":37,\"../common/CommonModule\":51,\"../content/ContentModule\":190,\"../security/SecurityModule\":419,\"../urls/UrlsModule\":492,\"./ActivityBadgeEditController\":240,\"./BadgeTemplateEditController\":241,\"./BadgeTemplatesController\":242,\"./BadgesController\":243,\"./BadgesCreateEditController\":244,\"./BadgesService\":245,\"./GameLearningObjectActionService\":246,\"./GameProgramsController\":247,\"./GameProgramsCreateEditController\":248,\"./GamificationService\":250}],250:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar GamificationService = (function () {\r\n function GamificationService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n GamificationService.prototype.getGame = function (gameId) {\r\n return this.$http.get(this.url.base(\"/api/gamification/game/:gameId\")\r\n .param(':gameId', gameId)\r\n .service()).then(function (response) { return response.data; });\r\n };\r\n GamificationService.prototype.getGameLevels = function (gameId) {\r\n return this.$http.get(this.url.base(\"/api/gamification/game/:gameId/levels\")\r\n .param(':gameId', gameId)\r\n .service()).then(function (response) { return response.data; });\r\n };\r\n GamificationService.prototype.getGameRewards = function (gameId) {\r\n return this.$http.get(this.url.base(\"/api/gamification/game/:gameId/rewards\")\r\n .param(':gameId', gameId)\r\n .service()).then(function (response) { return response.data; });\r\n };\r\n GamificationService.prototype.saveLevel = function (level) {\r\n return this.$http.post(this.url.base(\"/api/gamification/level/save\").service(), level)\r\n .then(function (response) { return response.data; });\r\n };\r\n GamificationService.prototype.createLevel = function (level) {\r\n return this.$http.post(this.url.base(\"/api/gamification/level/create\").service(), level)\r\n .then(function (response) { return response.data; });\r\n };\r\n GamificationService.prototype.saveGame = function (game) {\r\n return this.$http.post(this.url.base(\"/api/gamification/game/save\").service(), game)\r\n .then(function (response) { return response.data; });\r\n };\r\n GamificationService.prototype.deleteLevel = function (level) {\r\n return this.$http.post(this.url.base(\"/api/gamification/level/delete\").service(), level)\r\n .then(function (response) { return response.data; });\r\n };\r\n GamificationService.prototype.assignRewards = function (userId, objectId, objectType) {\r\n return this.$http.get(this.url.base(\"/reward/assign/user/:userId/object/:objectId/type/:objectType\")\r\n .param(':userId', userId)\r\n .param(':objectId', objectId)\r\n .param(':objectType', objectType)\r\n .service()).then(function (response) { return response.data; });\r\n };\r\n GamificationService.prototype.toggleGameActive = function (gameId) {\r\n return this.$http.get(this.url.base(\"/api/gamification/game/:gameId/toggleActive\")\r\n .param(':gameId', gameId)\r\n .service()).then(function (response) { return response.data; });\r\n };\r\n GamificationService.prototype.isGameUnique = function (game) {\r\n return this.$http.post(this.url.base(\"/api/gamification/game/unique\")\r\n .service(), game).then(function (response) { return response.data; });\r\n };\r\n GamificationService.NAME = \"gamification.GamificationService\";\r\n GamificationService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return GamificationService;\r\n})();\r\nexports.GamificationService = GamificationService;\r\n},{\"../utils/UrlService\":528}],251:[function(require,module,exports){\n(function (BadgeTemplateScope) {\r\n BadgeTemplateScope[BadgeTemplateScope[\"DEFAULT\"] = 0] = \"DEFAULT\";\r\n BadgeTemplateScope[BadgeTemplateScope[\"SYSTEM\"] = 1] = \"SYSTEM\";\r\n BadgeTemplateScope[BadgeTemplateScope[\"BUSINESS_UNIT\"] = 2] = \"BUSINESS_UNIT\";\r\n})(exports.BadgeTemplateScope || (exports.BadgeTemplateScope = {}));\r\nvar BadgeTemplateScope = exports.BadgeTemplateScope;\r\n},{}],252:[function(require,module,exports){\nvar RewardActionType = (function () {\r\n function RewardActionType() {\r\n }\r\n RewardActionType.BADGE_COURSE_COMPLETED = 'Award badge :badgeName on course completion';\r\n RewardActionType.POINTS_COURSE_COMPLETED = 'Award :points points for course completion';\r\n RewardActionType.POINT_COURSE_COMPLETED = 'Award :points point for course completion';\r\n RewardActionType.BADGE_LP_COMPLETED = 'Award badge :badgeName on learning path completion';\r\n RewardActionType.POINTS_LP_COMPLETED = 'Award :points points for learning path completion';\r\n RewardActionType.POINT_LP_COMPLETED = 'Award :points point for learning path completion';\r\n return RewardActionType;\r\n})();\r\nexports.RewardActionType = RewardActionType;\r\n},{}],253:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar LearningPathService_1 = require(\"../learningPaths/LearningPathService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar UserRole_1 = require(\"./models/UserRole\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar CommonService_1 = require(\"../common/CommonService\");\r\nvar BadgesService_1 = require(\"../gamification/BadgesService\");\r\nvar HomeController = (function () {\r\n function HomeController($location, $rootScope, $scope, authManager, authRedirect, homeRouter, learningPathService, userService, coursesRouter, commonService, badgesService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.homeRouter = homeRouter;\r\n this.learningPathService = learningPathService;\r\n this.userService = userService;\r\n this.coursesRouter = coursesRouter;\r\n this.commonService = commonService;\r\n this.badgesService = badgesService;\r\n this.rewards = [];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_INDEX_KEY);\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader().header(\"Home\").update();\r\n this.commonService.checkVersionUpdateIsRequired().then(function (result) {\r\n if (result) {\r\n _this.$location.search(\"no-cache\", moment().valueOf());\r\n location.reload(true);\r\n }\r\n });\r\n if (!this.authManager.isAuthenticated()) {\r\n this.authRedirect.forwardToAccessDenied();\r\n }\r\n this.routeBusinessRole = $location.search()[HomeRouter_1.HomeRouter.roleParam];\r\n if (this.routeBusinessRole !== undefined && this.routeBusinessRole === UserRole_1.UserRole[UserRole_1.UserRole.LEARNER]) {\r\n this.redirectToHomePage(this.routeBusinessRole);\r\n }\r\n else {\r\n this.userService.getCurrentUserBusinessRole()\r\n .then(function (role) { return _this.redirectToHomePage(role); });\r\n this.badgesService.notifyUserAfterReward().then(function (result) {\r\n if (result.length > 0) {\r\n _this.$rootScope.$broadcast('notifyReward', result);\r\n }\r\n });\r\n }\r\n }\r\n HomeController.prototype.redirectToHomePage = function (userBusinessRole) {\r\n var _this = this;\r\n switch (userBusinessRole) {\r\n case \"ADMINISTRATOR\": {\r\n this.$location.url(this.homeRouter.administrationMenuUrl());\r\n break;\r\n }\r\n case \"INSTRUCTOR\": {\r\n this.learningPathService.getInstructorLearningPathsCount().then(function (data) {\r\n _this.learningPathCount = data;\r\n _this.$location.url(_this.homeRouter.instructorHomeUrl(_this.learningPathCount));\r\n });\r\n break;\r\n }\r\n case \"ATTENDEE_MANAGER\": {\r\n this.$location.url(this.homeRouter.participantsUrl());\r\n break;\r\n }\r\n case \"AUTHOR\": {\r\n this.$location.url(this.homeRouter.authorCoursesUrl());\r\n break;\r\n }\r\n case \"LEARNER\": {\r\n this.choseLearnerHomePage();\r\n break;\r\n }\r\n default: {\r\n this.$location.url(this.homeRouter.coursesUrl());\r\n break;\r\n }\r\n }\r\n };\r\n HomeController.prototype.choseLearnerHomePage = function () {\r\n var _this = this;\r\n this.userService.getMenuConfiguration(UserRole_1.UserRole[UserRole_1.UserRole.LEARNER]).then(function (configuration) {\r\n if (configuration.hasLearnerLearningPaths) {\r\n _this.$location.url(_this.homeRouter.learningPathsUrl(_this.routeBusinessRole));\r\n }\r\n else if (configuration.hasLearnerCourses) {\r\n _this.$location.url(_this.homeRouter.coursesUrl(_this.routeBusinessRole));\r\n }\r\n else {\r\n _this.$location.url(_this.coursesRouter.indexUrl());\r\n }\r\n });\r\n };\r\n HomeController.prototype.getImageForActivityBadge = function (badge) {\r\n if (badge) {\r\n if (!badge.fileId && badge.badgeKey) {\r\n return \"themes/default/img/actionBadges/\" + badge.badgeKey + \".png\";\r\n }\r\n return badge.previewUrl;\r\n }\r\n return '';\r\n };\r\n HomeController.prototype.submitReward = function (rewardId) {\r\n var _this = this;\r\n $('.rewardNotification').addClass('rewardNotification-up');\r\n this.rewards = this.rewards.filter(function (r) { return r.id !== rewardId; });\r\n setTimeout(function () {\r\n if (_this.rewards.length > 0) {\r\n _this.rewardToShow = null;\r\n setTimeout(function () {\r\n $('.rewardNotification').removeClass('rewardNotification-up');\r\n setTimeout(function () {\r\n _this.rewardToShow = _this.rewards[0];\r\n }, 100);\r\n }, 700);\r\n }\r\n else {\r\n _this.rewardToShow = null;\r\n }\r\n }, 200);\r\n };\r\n HomeController.NAME = \"home.HomeController\";\r\n HomeController.$inject = [\r\n \"$location\",\r\n \"$rootScope\",\r\n \"$scope\",\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n HomeRouter_1.HomeRouter.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n UserService_1.UserService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CommonService_1.CommonService.NAME,\r\n BadgesService_1.BadgesService.NAME\r\n ];\r\n return HomeController;\r\n})();\r\nexports.HomeController = HomeController;\r\n},{\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../common/CommonService\":53,\"../gamification/BadgesService\":245,\"../learningPaths/LearningPathService\":320,\"../urls/CoursesRouter\":468,\"../urls/HomeRouter\":473,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./models/UserRole\":278}],254:[function(require,module,exports){\nvar CommonModule_1 = require(\"../common/CommonModule\");\r\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar HomeService_1 = require(\"./HomeService\");\r\nvar HomeCoursesController_1 = require(\"./learner/HomeCoursesController\");\r\nvar HomeLearningPathsController_1 = require(\"./learner/HomeLearningPathsController\");\r\nvar HomeController_1 = require(\"./HomeController\");\r\nvar HomeAdministrationMenuController_1 = require(\"./admininstration/HomeAdministrationMenuController\");\r\nvar HomeAdministrationReportsController_1 = require(\"./admininstration/HomeAdministrationReportsController\");\r\nvar HomeAuthorCoursesController_1 = require(\"./author/HomeAuthorCoursesController\");\r\nvar HomeAuthorLearningPathsController_1 = require(\"./author/HomeAuthorLearningPathsController\");\r\nvar HomeAuthorQuizzesController_1 = require(\"./author/HomeAuthorQuizzesController\");\r\nvar HomeAuthorSurveysController_1 = require(\"./author/HomeAuthorSurveysController\");\r\nvar HomeAuthorMaterialsController_1 = require(\"./author/HomeAuthorMaterialsController\");\r\nvar HomeAuthorReportsController_1 = require(\"./author/HomeAuthorReportsController\");\r\nvar HomeReportsController_1 = require(\"./learner/HomeReportsController\");\r\nvar HomeMaterialsController_1 = require(\"./learner/HomeMaterialsController\");\r\nvar HomeAttendeeManagerCoursesController_1 = require(\"./attendee/HomeAttendeeManagerCoursesController\");\r\nvar HomeAttendeeManagerLearningPathsController_1 = require(\"./attendee/HomeAttendeeManagerLearningPathsController\");\r\nvar HomeAttendeeManagerReportsController_1 = require(\"./attendee/HomeAttendeeManagerReportsController\");\r\nvar HomeInstructorCoursesController_1 = require(\"./instructor/HomeInstructorCoursesController\");\r\nvar HomeInstructorLearningPathsController_1 = require(\"./instructor/HomeInstructorLearningPathsController\");\r\nvar HomeInstructorReportsController_1 = require(\"./instructor/HomeInstructorReportsController\");\r\nvar HomeParticipantsController_1 = require(\"./HomeParticipantsController\");\r\nvar HomeAuthorFlashcardsController_1 = require(\"./author/HomeAuthorFlashcardsController\");\r\nvar HomeFlashcardsController_1 = require(\"./learner/HomeFlashcardsController\");\r\nexports.HomeModule = angular\r\n .module(\"home\", [\r\n CommonModule_1.CommonModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .controller(HomeController_1.HomeController.NAME, HomeController_1.HomeController)\r\n .controller(HomeCoursesController_1.HomeCoursesController.NAME, HomeCoursesController_1.HomeCoursesController)\r\n .controller(HomeLearningPathsController_1.HomeLearningPathsController.NAME, HomeLearningPathsController_1.HomeLearningPathsController)\r\n .controller(HomeMaterialsController_1.HomeMaterialsController.NAME, HomeMaterialsController_1.HomeMaterialsController)\r\n .controller(HomeReportsController_1.HomeReportsController.NAME, HomeReportsController_1.HomeReportsController)\r\n .controller(HomeAdministrationMenuController_1.HomeAdministrationMenuController.NAME, HomeAdministrationMenuController_1.HomeAdministrationMenuController)\r\n .controller(HomeAdministrationReportsController_1.HomeAdministrationReportsController.NAME, HomeAdministrationReportsController_1.HomeAdministrationReportsController)\r\n .controller(HomeAuthorCoursesController_1.HomeAuthorCoursesController.NAME, HomeAuthorCoursesController_1.HomeAuthorCoursesController)\r\n .controller(HomeAuthorLearningPathsController_1.HomeAuthorLearningPathsController.NAME, HomeAuthorLearningPathsController_1.HomeAuthorLearningPathsController)\r\n .controller(HomeAuthorQuizzesController_1.HomeAuthorQuizzesController.NAME, HomeAuthorQuizzesController_1.HomeAuthorQuizzesController)\r\n .controller(HomeAuthorSurveysController_1.HomeAuthorSurveysController.NAME, HomeAuthorSurveysController_1.HomeAuthorSurveysController)\r\n .controller(HomeAuthorFlashcardsController_1.HomeAuthorFlashcardsController.NAME, HomeAuthorFlashcardsController_1.HomeAuthorFlashcardsController)\r\n .controller(HomeAuthorMaterialsController_1.HomeAuthorMaterialsController.NAME, HomeAuthorMaterialsController_1.HomeAuthorMaterialsController)\r\n .controller(HomeAuthorReportsController_1.HomeAuthorReportsControllerController.NAME, HomeAuthorReportsController_1.HomeAuthorReportsControllerController)\r\n .controller(HomeAttendeeManagerCoursesController_1.HomeAttendeeManagerCoursesController.NAME, HomeAttendeeManagerCoursesController_1.HomeAttendeeManagerCoursesController)\r\n .controller(HomeAttendeeManagerLearningPathsController_1.HomeAttendeeManagerLearningPathsController.NAME, HomeAttendeeManagerLearningPathsController_1.HomeAttendeeManagerLearningPathsController)\r\n .controller(HomeAttendeeManagerReportsController_1.HomeAttendeeManagerReportsController.NAME, HomeAttendeeManagerReportsController_1.HomeAttendeeManagerReportsController)\r\n .controller(HomeInstructorCoursesController_1.HomeInstructorCoursesController.NAME, HomeInstructorCoursesController_1.HomeInstructorCoursesController)\r\n .controller(HomeInstructorLearningPathsController_1.HomeInstructorLearningPathsController.NAME, HomeInstructorLearningPathsController_1.HomeInstructorLearningPathsController)\r\n .controller(HomeInstructorReportsController_1.HomeInstructorReportsController.NAME, HomeInstructorReportsController_1.HomeInstructorReportsController)\r\n .controller(HomeParticipantsController_1.HomeParticipantsController.NAME, HomeParticipantsController_1.HomeParticipantsController)\r\n .controller(HomeFlashcardsController_1.HomeFlashcardsController.NAME, HomeFlashcardsController_1.HomeFlashcardsController)\r\n .service(HomeService_1.HomeService.NAME, HomeService_1.HomeService);\r\n},{\"../common/CommonModule\":51,\"../security/SecurityModule\":419,\"../urls/UrlsModule\":492,\"./HomeController\":253,\"./HomeParticipantsController\":255,\"./HomeService\":256,\"./admininstration/HomeAdministrationMenuController\":257,\"./admininstration/HomeAdministrationReportsController\":258,\"./attendee/HomeAttendeeManagerCoursesController\":259,\"./attendee/HomeAttendeeManagerLearningPathsController\":260,\"./attendee/HomeAttendeeManagerReportsController\":261,\"./author/HomeAuthorCoursesController\":262,\"./author/HomeAuthorFlashcardsController\":263,\"./author/HomeAuthorLearningPathsController\":264,\"./author/HomeAuthorMaterialsController\":265,\"./author/HomeAuthorQuizzesController\":266,\"./author/HomeAuthorReportsController\":267,\"./author/HomeAuthorSurveysController\":268,\"./instructor/HomeInstructorCoursesController\":269,\"./instructor/HomeInstructorLearningPathsController\":270,\"./instructor/HomeInstructorReportsController\":271,\"./learner/HomeCoursesController\":272,\"./learner/HomeFlashcardsController\":273,\"./learner/HomeLearningPathsController\":274,\"./learner/HomeMaterialsController\":275,\"./learner/HomeReportsController\":276}],255:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar PersonalService_1 = require(\"../personal/PersonalService\");\r\nvar StatisticReportsService_1 = require(\"../statistics/StatisticReportsService\");\r\nvar NotificationsModalMenuItem_1 = require(\"./models/NotificationsModalMenuItem\");\r\nvar SocialService_1 = require(\"../social/SocialService\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar UserRole_1 = require(\"../users/models/UserRole\");\r\nvar IntroService_1 = require(\"../info/IntroService\");\r\nvar AssessmentsRouter_1 = require(\"../urls/AssessmentsRouter\");\r\nvar AssessmentsService_1 = require(\"../assessments/AssessmentsService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar HomeParticipantsController = (function () {\r\n function HomeParticipantsController($scope, $rootScope, $http, $location, $routeParams, coursesRouter, permissionsApi, authManager, url, personalService, statisticReportsService, socialService, homeRouter, usersRouter, userService, introService, assessmentsRouter, assessmentsService, commonFilterService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.coursesRouter = coursesRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.url = url;\r\n this.personalService = personalService;\r\n this.statisticReportsService = statisticReportsService;\r\n this.socialService = socialService;\r\n this.homeRouter = homeRouter;\r\n this.usersRouter = usersRouter;\r\n this.userService = userService;\r\n this.introService = introService;\r\n this.assessmentsRouter = assessmentsRouter;\r\n this.assessmentsService = assessmentsService;\r\n this.commonFilterService = commonFilterService;\r\n this.notificationsModalMenu = NotificationsModalMenuItem_1.NOTIFICATIONS_MODAL_ATTENDEE_MANAGER_MENU;\r\n this.currentNotificationsModalMenuItemName = \"\";\r\n this.modelType = \"courses\";\r\n this.modelType = $routeParams[HomeRouter_1.HomeRouter.PARTICIPANTS_PARAM] || HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES;\r\n this.modelType = this.modelType !== HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES && this.modelType !== HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_LP ?\r\n HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES : this.modelType;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n userService.getCurrentUserBusinessRole()\r\n .then(function (businessRole) {\r\n _this.businessRole = angular.copy(businessRole);\r\n _this.getNotificationCountsForAttendee();\r\n if (businessRole === UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER] || businessRole === UserRole_1.UserRole[UserRole_1.UserRole.ADMINISTRATOR]) {\r\n _this.notificationsModalMenu = NotificationsModalMenuItem_1.NOTIFICATIONS_MODAL_ATTENDEE_MANAGER_MENU;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_PARTICIPANTS_KEY);\r\n if (_this.modelType == HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES) {\r\n _this.participantsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, _this.url.service(\"/api/courses/search/participants/info?role=attendeeManager\")));\r\n }\r\n else {\r\n _this.participantsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, _this.url.service(\"/api/learningPaths/search/participants/info?role=attendeeManager\")));\r\n }\r\n }\r\n else if (businessRole === UserRole_1.UserRole[UserRole_1.UserRole.INSTRUCTOR]) {\r\n _this.notificationsModalMenu = NotificationsModalMenuItem_1.NOTIFICATIONS_MODAL_INSTRUCTOR_MENU;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_INSTRUCTOR_PARTICIPANTS_KEY);\r\n if (_this.modelType == HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_COURSES) {\r\n _this.participantsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, _this.url.service(\"/api/courses/search/participants/info?role=instructor\")));\r\n }\r\n else {\r\n _this.participantsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, _this.url.service(\"/api/learningPaths/search/participants/info?role=instructor\")));\r\n }\r\n }\r\n else {\r\n _this.$location.url(_this.coursesRouter.indexUrl());\r\n }\r\n _this.participantsGridModel.pageSize = 10;\r\n _this.participantsGridModel.filter.learnerName = null;\r\n _this.participantsGridModel.filter.objectName = null;\r\n _this.participantsGridModel.filter.status = null;\r\n })\r\n .finally(function () {\r\n if (_this.businessRole !== UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER] && _this.businessRole !== UserRole_1.UserRole[UserRole_1.UserRole.INSTRUCTOR]) {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Progress\").update();\r\n }\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n }\r\n HomeParticipantsController.prototype.startIntro = function () {\r\n this.introService.startAttendeeManagerHomePageIntro();\r\n };\r\n HomeParticipantsController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeParticipantsController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.menuKey.topMenu == topMenuKey;\r\n };\r\n HomeParticipantsController.prototype.getNotificationCountsForAttendee = function () {\r\n var _this = this;\r\n if (this.businessRole === UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER] || this.businessRole === UserRole_1.UserRole[UserRole_1.UserRole.ADMINISTRATOR]) {\r\n this.statisticReportsService.getAttendeeManagerNotificationsCounts().then(function (data) {\r\n _this.attendeeManagerCounts = data;\r\n });\r\n }\r\n else if (this.businessRole === UserRole_1.UserRole[UserRole_1.UserRole.INSTRUCTOR]) {\r\n this.statisticReportsService.getInstructorNotificationsCounts().then(function (data) {\r\n _this.attendeeManagerCounts = data;\r\n });\r\n }\r\n else {\r\n this.$location.url(this.coursesRouter.indexUrl());\r\n }\r\n };\r\n HomeParticipantsController.prototype.getNotificationsModalMenuItemName = function (notificationsModalMenu1) {\r\n switch (notificationsModalMenu1) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n return \"comments/day\";\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n return \"comments/week\";\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS:\r\n return \"new assessments\";\r\n }\r\n };\r\n HomeParticipantsController.prototype.getNotificationsModalMenuItem = function (itemName) {\r\n switch (itemName) {\r\n case \"comments/day\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS;\r\n case \"comments/week\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS;\r\n case \"new assessments\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS;\r\n default:\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS;\r\n }\r\n };\r\n HomeParticipantsController.prototype.showNotificationsDialog = function (itemName) {\r\n this.showNotificationModal = true;\r\n this.setCurrentNotificationsModalMenuItem(this.getNotificationsModalMenuItem(itemName));\r\n this.currentNotificationsModalMenuItemName = itemName;\r\n this.commonFilterService.showNotificationsDialog(window);\r\n };\r\n HomeParticipantsController.prototype.setCurrentNotificationsModalMenuItem = function (item) {\r\n var _this = this;\r\n this.currentNotificationsModalMenuItem = item;\r\n switch (this.currentNotificationsModalMenuItem) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n if (this.businessRole === UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER] || this.businessRole === UserRole_1.UserRole[UserRole_1.UserRole.ADMINISTRATOR])\r\n this.socialService.getCommentsAndDiscussionForAttendeeManager(\"DAY\").then(function (data) { return _this.comments = data; });\r\n else\r\n this.socialService.getCommentsAndDiscussionForInstructor(\"DAY\").then(function (data) { return _this.comments = data; });\r\n break;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n if (this.businessRole === UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER] || this.businessRole === UserRole_1.UserRole[UserRole_1.UserRole.ADMINISTRATOR])\r\n this.socialService.getCommentsAndDiscussionForAttendeeManager(\"WEEK\").then(function (data) { return _this.comments = data; });\r\n else\r\n this.socialService.getCommentsAndDiscussionForInstructor(\"WEEK\").then(function (data) { return _this.comments = data; });\r\n break;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS:\r\n this.assessmentsService.getNewAssementsForInstructor().then(function (data) { return _this.newAssessments = data; });\r\n }\r\n this.currentNotificationsModalMenuItemName = this.getNotificationsModalMenuItemName(item);\r\n };\r\n HomeParticipantsController.prototype.redirectToDiscussion = function (courseId, discussionId) {\r\n this.hideNotificationsModal();\r\n this.$location.url(this.coursesRouter.discussionUrl(courseId)).search(\"threadId\", discussionId);\r\n };\r\n HomeParticipantsController.prototype.hideNotificationsModal = function () {\r\n $(\"#notificationsModal\").modal(\"hide\");\r\n $('.modal-backdrop').remove();\r\n };\r\n HomeParticipantsController.prototype.getNotificationItemCount = function (item) {\r\n switch (item) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n return this.attendeeManagerCounts.dayCommentsCount;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n return this.attendeeManagerCounts.weekCommentsCount;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS:\r\n return this.attendeeManagerCounts.newAssessmentsCount;\r\n default:\r\n return this.attendeeManagerCounts.dayCommentsCount;\r\n }\r\n };\r\n HomeParticipantsController.prototype.redirectToAssessment = function (assessmentId) {\r\n this.hideNotificationsModal();\r\n this.$location.url(this.assessmentsRouter.assessmentDetailsUrl(assessmentId));\r\n };\r\n HomeParticipantsController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 768;\r\n };\r\n HomeParticipantsController.NAME = \"home.HomeParticipantsController\";\r\n HomeParticipantsController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n SocialService_1.SocialService.NAME,\r\n HomeRouter_1.HomeRouter.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n UserService_1.UserService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n AssessmentsRouter_1.AssessmentsRouter.NAME,\r\n AssessmentsService_1.AssessmentsService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME\r\n ];\r\n return HomeParticipantsController;\r\n})();\r\nexports.HomeParticipantsController = HomeParticipantsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../assessments/AssessmentsService\":15,\"../authcore/AuthManager\":25,\"../common/CommonFilterService\":49,\"../info/IntroService\":292,\"../personal/PersonalService\":377,\"../security/PermissionsService\":418,\"../social/SocialService\":440,\"../statistics/StatisticReportsService\":448,\"../urls/AssessmentsRouter\":462,\"../urls/CoursesRouter\":468,\"../urls/HomeRouter\":473,\"../urls/UsersRouter\":493,\"../users/UserService\":499,\"../users/models/UserRole\":507,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./models/NotificationsModalMenuItem\":277}],256:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar HomeService = (function () {\r\n function HomeService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n HomeService.NAME = \"home.HomeService\";\r\n HomeService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return HomeService;\r\n})();\r\nexports.HomeService = HomeService;\r\n},{\"../utils/UrlService\":528}],257:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar MenuConfiguratorService_1 = require(\"../../utils/MenuConfiguratorService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar SettingsService_1 = require(\"../../settings/SettingsService\");\r\nvar AuthService_1 = require(\"../../auth/AuthService\");\r\nvar AuthRedirect_1 = require(\"../../authcore/AuthRedirect\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar HomeAdministrationMenuController = (function () {\r\n function HomeAdministrationMenuController($q, authManager, menuConfiguratorService, permissionsService, settingsService, authService, authRedirect, introService) {\r\n this.$q = $q;\r\n this.authManager = authManager;\r\n this.menuConfiguratorService = menuConfiguratorService;\r\n this.permissionsService = permissionsService;\r\n this.settingsService = settingsService;\r\n this.authService = authService;\r\n this.authRedirect = authRedirect;\r\n this.introService = introService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_ADMINISTRATION_MENU_KEY);\r\n this.updatePermissions();\r\n }\r\n HomeAdministrationMenuController.prototype.updatePermissions = function () {\r\n var _this = this;\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.systemPermissions = user.permissions;\r\n _this.loadAdminHomeMenuItems();\r\n });\r\n };\r\n HomeAdministrationMenuController.prototype.loadAdminHomeMenuItems = function () {\r\n var user = this.authManager.getCurrentUser();\r\n var businessUnitId = user && !user.allBusinessUnits && user.businessUnits.length == 1 ? user.businessUnits[0] : null;\r\n var allBusinessUnits = user && user.allBusinessUnits;\r\n this.administrationMenu = this.menuConfiguratorService.getAdministrationMenu(this.authManager.isAuthenticated(), this.systemPermissions, allBusinessUnits, businessUnitId);\r\n if (!this.administrationMenu || !this.administrationMenu.allowed) {\r\n this.authRedirect.forwardToAccessDenied();\r\n }\r\n };\r\n HomeAdministrationMenuController.prototype.getSubMenuHtml = function (item, items) {\r\n var allLinkItems = [];\r\n for (var _i = 0; _i < items.length; _i++) {\r\n var item_1 = items[_i];\r\n if (item_1.allowed) {\r\n var href = item_1.url ? item_1.url : '#/';\r\n var target = item_1.url.indexOf('http') == 0 ? '_blank' : \"''\";\r\n var link = \"\" + item_1.name + \"\";\r\n allLinkItems.push(link);\r\n }\r\n }\r\n if (item.key === MenuHelper_1.MenuHelper.ADMINISTRATION_BUSINESS_UNITS_MENU_KEY && allLinkItems.length !== 0) {\r\n item.url = undefined;\r\n }\r\n return allLinkItems.join(\"  |  \");\r\n };\r\n HomeAdministrationMenuController.prototype.startIntro = function () {\r\n this.introService.startAdministrationHomePageIntro();\r\n };\r\n HomeAdministrationMenuController.NAME = \"home.HomeAdministrationMenuController\";\r\n HomeAdministrationMenuController.$inject = [\r\n \"$q\",\r\n AuthManager_1.AuthManager.NAME,\r\n MenuConfiguratorService_1.MenuConfiguratorService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return HomeAdministrationMenuController;\r\n})();\r\nexports.HomeAdministrationMenuController = HomeAdministrationMenuController;\r\n},{\"../../auth/AuthService\":18,\"../../authcore/AuthManager\":25,\"../../authcore/AuthRedirect\":26,\"../../info/IntroService\":292,\"../../security/PermissionsService\":418,\"../../settings/SettingsService\":427,\"../../utils/MenuConfiguratorService\":516,\"../../utils/MenuHelper\":517}],258:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar StatisticReportsService_1 = require(\"../../statistics/StatisticReportsService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar HomeAdministrationReportsController = (function () {\r\n function HomeAdministrationReportsController(statisticReportsService, introService) {\r\n var _this = this;\r\n this.statisticReportsService = statisticReportsService;\r\n this.introService = introService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_ADMINISTRATION_REPORTS_KEY);\r\n statisticReportsService.getInfoForAdmin().then(function (data) {\r\n _this.statistic = data;\r\n _this.dailyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"DAY\"; })[0];\r\n _this.weeklyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"WEEK\"; })[0];\r\n _this.monthlyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"MONTH\"; })[0];\r\n var today = new Date(_this.monthlyStatistic.startDate);\r\n _this.currentMonth = today.toLocaleString(\"en-US\", { month: 'long' });\r\n _this.currentYear = today.getFullYear();\r\n });\r\n }\r\n HomeAdministrationReportsController.prototype.startIntro = function () {\r\n this.introService.startAdministrationHomePageIntro();\r\n };\r\n HomeAdministrationReportsController.NAME = \"home.HomeAdministrationReportsController\";\r\n HomeAdministrationReportsController.$inject = [\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return HomeAdministrationReportsController;\r\n})();\r\nexports.HomeAdministrationReportsController = HomeAdministrationReportsController;\r\n},{\"../../info/IntroService\":292,\"../../statistics/StatisticReportsService\":448,\"../../utils/MenuHelper\":517}],259:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../../urls/CoursesRouter\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar ResizeViewService_1 = require(\"../../utils/ResizeViewService\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar ReferencedObjectType_1 = require(\"../../ReferencedObjectType\");\r\nvar PersonalService_1 = require(\"../../personal/PersonalService\");\r\nvar CustomBrandingService_1 = require(\"../../branding/CustomBrandingService\");\r\nvar StatisticReportsService_1 = require(\"../../statistics/StatisticReportsService\");\r\nvar NotificationsModalMenuItem_1 = require(\"../models/NotificationsModalMenuItem\");\r\nvar SocialService_1 = require(\"../../social/SocialService\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar CommonHomeService_1 = require(\"../../common/CommonHomeService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar HomeAttendeeManagerCoursesController = (function () {\r\n function HomeAttendeeManagerCoursesController($scope, $rootScope, $http, $location, $window, coursesRouter, permissionsApi, authManager, url, personalService, brandingService, statisticReportsService, socialService, commonFilterService, introService, commonHomeService, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.coursesRouter = coursesRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.url = url;\r\n this.personalService = personalService;\r\n this.brandingService = brandingService;\r\n this.statisticReportsService = statisticReportsService;\r\n this.socialService = socialService;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.commonHomeService = commonHomeService;\r\n this.userService = userService;\r\n this.selectedItemInModule = new Map();\r\n this.rowShow = new Map();\r\n this.currentMenuItemKey = \"\";\r\n this.currentMenuItemName = \"\";\r\n this.notificationsModalMenu = NotificationsModalMenuItem_1.NOTIFICATIONS_MODAL_ATTENDEE_MANAGER_MENU;\r\n this.currentNotificationsModalMenuItemName = \"\";\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n this.countActiveFilter = 0;\r\n this.showExpired = false;\r\n this.coursesUrl = \"/api/courses/search\";\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_COURSES_KEY);\r\n this.loadUserProfile();\r\n this.getNotificationCountsForAttendee();\r\n this.updateGrid();\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions()\r\n .then(function (systemPermissions) { return _this.systemPermissions = systemPermissions; });\r\n }\r\n }\r\n HomeAttendeeManagerCoursesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.startIntro = function () {\r\n this.introService.startAttendeeManagerHomePageIntro();\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(HomeAttendeeManagerCoursesController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.coursesGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(HomeAttendeeManagerCoursesController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n }\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.menuKey.topMenu == topMenuKey;\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.addToFavorites = function (course) {\r\n this.rowShow.set(course.id, !this.rowShow.get(course.id));\r\n this.personalService.addToFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been added to your favorites\");\r\n course.favorite = true;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.already.in.favorite\") {\r\n INotifier_1.notifier.error(\"This course is already in your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.removeFromFavorites = function (course) {\r\n this.rowShow.set(course.id, !this.rowShow.get(course.id));\r\n this.personalService.removeFromFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been removed from your favorites\");\r\n course.favorite = false;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.not.in.favorite\") {\r\n INotifier_1.notifier.error(\"Failed to remove from your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.searchString\")) {\r\n this.coursesGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.viewType\")) {\r\n this.coursesGridModel.filter.viewType = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.viewType\"));\r\n this.viewType = this.coursesGridModel.filter.viewType;\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.complexityLevel\")) {\r\n this.coursesGridModel.filter.complexityLevel = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.complexityLevel\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.sourceId\")) {\r\n this.coursesGridModel.filter.sourceId = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.sourceId\"));\r\n }\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeAttendeeManagerCoursesController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.applyFilter = function () {\r\n this.commonFilterService.applyGeneralFilter(this.coursesGridModel);\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeAttendeeManagerCoursesController.NAME, this.coursesGridModel);\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeAttendeeManagerCoursesController.NAME, this.searchInput);\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeAttendeeManagerCoursesController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.clearSearch = function () {\r\n this.coursesGridModel.filter.searchString = null;\r\n this.coursesGridModel.filter.viewType = null;\r\n this.coursesGridModel.filter.subjectId = null;\r\n this.coursesGridModel.filter.complexityLevel = null;\r\n this.coursesGridModel.filter.languageId = null;\r\n this.coursesGridModel.filter.sourceId = null;\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n this.viewType = 1;\r\n sessionStorage.removeItem(\"vhsCoursesFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.viewType\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.complexityLevel\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.languageId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.sourceId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.courseStatus\");\r\n this.coursesGridModel.loadPage(0);\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsCoursesFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsCoursesFilter.\" + key);\r\n }\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.getNotificationCountsForAttendee = function () {\r\n var _this = this;\r\n this.statisticReportsService.getAttendeeManagerNotificationsCounts().then(function (data) {\r\n _this.attendeeManagerCounts = data;\r\n });\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.getNotificationsModalMenuItemName = function (notificationsModalMenu1) {\r\n switch (notificationsModalMenu1) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n return \"comments/day\";\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n return \"comments/week\";\r\n }\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.getNotificationsModalMenuItem = function (itemName) {\r\n switch (itemName) {\r\n case \"comments/day\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS;\r\n case \"comments/week\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS;\r\n default:\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS;\r\n }\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.showNotificationsDialog = function (itemName) {\r\n this.showNotificationModal = true;\r\n this.setCurrentNotificationsModalMenuItem(this.getNotificationsModalMenuItem(itemName));\r\n this.currentNotificationsModalMenuItemName = itemName;\r\n this.commonFilterService.showNotificationsDialog(window);\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 768;\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.setCurrentNotificationsModalMenuItem = function (item) {\r\n var _this = this;\r\n this.currentNotificationsModalMenuItem = item;\r\n switch (this.currentNotificationsModalMenuItem) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n this.socialService.getCommentsAndDiscussionForAttendeeManager(\"DAY\").then(function (data) { return _this.comments = data; });\r\n break;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n this.socialService.getCommentsAndDiscussionForAttendeeManager(\"WEEK\").then(function (data) { return _this.comments = data; });\r\n break;\r\n }\r\n this.currentNotificationsModalMenuItemName = this.getNotificationsModalMenuItemName(item);\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.redirectToDiscussion = function (courseId, discussionId) {\r\n this.hideNotificationsModal();\r\n this.$location.url(this.coursesRouter.discussionUrl(courseId)).search(\"threadId\", discussionId);\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.hideNotificationsModal = function () {\r\n $(\"#notificationsModal\").modal(\"hide\");\r\n $('.modal-backdrop').remove();\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.getNotificationItemCount = function (item) {\r\n switch (item) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n return this.attendeeManagerCounts.dayCommentsCount;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n return this.attendeeManagerCounts.weekCommentsCount;\r\n }\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.updateGrid = function () {\r\n var _this = this;\r\n var coursesUrl = !this.showExpired\r\n ? \"/api/courses/search/attendeeManager\"\r\n : \"/api/courses/search/attendeeManager/expired\";\r\n this.coursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(coursesUrl)));\r\n this.getStorageFilters();\r\n if (window.innerWidth < 1200) {\r\n this.coursesGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.coursesGridModel.pageSize = 9;\r\n }\r\n this.viewType = 1;\r\n this.loadSearch();\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n var currentPage = _this.coursesGridModel.currentPage >= _this.coursesGridModel.totalPageCount\r\n ? _this.coursesGridModel.currentPage - 1\r\n : _this.coursesGridModel.currentPage;\r\n if (window.innerWidth < 1200) {\r\n _this.coursesGridModel.pageSize = 10;\r\n _this.coursesGridModel.loadPage(currentPage);\r\n }\r\n else {\r\n _this.coursesGridModel.pageSize = 9;\r\n _this.coursesGridModel.loadPage(currentPage);\r\n }\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n };\r\n HomeAttendeeManagerCoursesController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n HomeAttendeeManagerCoursesController.NAME = \"home.HomeAttendeeManagerCoursesController\";\r\n HomeAttendeeManagerCoursesController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n SocialService_1.SocialService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n CommonHomeService_1.CommonHomeService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return HomeAttendeeManagerCoursesController;\r\n})();\r\nexports.HomeAttendeeManagerCoursesController = HomeAttendeeManagerCoursesController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../INotifier\":5,\"../../ReferencedObjectType\":7,\"../../authcore/AuthManager\":25,\"../../branding/CustomBrandingService\":35,\"../../common/CommonFilterService\":49,\"../../common/CommonHomeService\":50,\"../../info/IntroService\":292,\"../../personal/PersonalService\":377,\"../../security/PermissionsService\":418,\"../../social/SocialService\":440,\"../../statistics/StatisticReportsService\":448,\"../../urls/CoursesRouter\":468,\"../../users/UserService\":499,\"../../utils/MenuHelper\":517,\"../../utils/ResizeViewService\":524,\"../../utils/UrlService\":528,\"../models/NotificationsModalMenuItem\":277}],260:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar LearningPathsRouter_1 = require(\"../../urls/LearningPathsRouter\");\r\nvar CoursesRouter_1 = require(\"../../urls/CoursesRouter\");\r\nvar LearningPathService_1 = require(\"../../learningPaths/LearningPathService\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar CourseProgressStatus_1 = require(\"../../courses/models/CourseProgressStatus\");\r\nvar LearningPathCourseInclusionType_1 = require(\"../../learningPaths/models/LearningPathCourseInclusionType\");\r\nvar StatisticReportsService_1 = require(\"../../statistics/StatisticReportsService\");\r\nvar NotificationsModalMenuItem_1 = require(\"../models/NotificationsModalMenuItem\");\r\nvar SocialService_1 = require(\"../../social/SocialService\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar CommonHomeService_1 = require(\"../../common/CommonHomeService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar HomeAttendeeManagerLearningPathsController = (function () {\r\n function HomeAttendeeManagerLearningPathsController($scope, $rootScope, $http, $location, $window, url, learningPathsRouter, coursesRouter, learningPathService, statisticReportsService, socialService, commonFilterService, commonHomeService, introService, authManager, permissionsApi, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathService = learningPathService;\r\n this.statisticReportsService = statisticReportsService;\r\n this.socialService = socialService;\r\n this.commonFilterService = commonFilterService;\r\n this.commonHomeService = commonHomeService;\r\n this.introService = introService;\r\n this.authManager = authManager;\r\n this.permissionsApi = permissionsApi;\r\n this.userService = userService;\r\n this.isLearningPathsLoaded = false;\r\n this.currentMenuItemKey = \"\";\r\n this.currentMenuItemName = \"\";\r\n this.notificationsModalMenu = NotificationsModalMenuItem_1.NOTIFICATIONS_MODAL_ATTENDEE_MANAGER_MENU;\r\n this.currentNotificationsModalMenuItemName = \"\";\r\n this.countActiveFilter = 0;\r\n this.isInitSlick = false;\r\n this.showExpired = false;\r\n this.learningPathsUrl = \"/api/learningPaths/search\";\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_LEARNING_PATHS_KEY);\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadUserProfile();\r\n this.http = $http;\r\n this.getNotificationCountsForAttendee();\r\n this.updateGrid();\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n }\r\n HomeAttendeeManagerLearningPathsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.startIntro = function () {\r\n this.introService.startAttendeeManagerHomePageIntro();\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.getStorageFilters = function (isInit) {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(HomeAttendeeManagerLearningPathsController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.learningPathsGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(HomeAttendeeManagerLearningPathsController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n }\r\n if (!isInit) {\r\n this.learningPathsGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.startLoading = function () {\r\n this.isInitSlick = false;\r\n this.isLearningPathsLoaded = false;\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.endLoading = function () {\r\n var _this = this;\r\n this.isLearningPathsLoaded = true;\r\n setTimeout(function () { return _this.initializeSlick(); }, 500);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.setViewType = function (viewType) {\r\n var _this = this;\r\n if (viewType == 1) {\r\n setTimeout(function () { return _this.initializeSlick(); });\r\n }\r\n this.viewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.loadLearningPath = function (learningPathId) {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(learningPathId));\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsLearningPathsFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.\" + key);\r\n }\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeAttendeeManagerLearningPathsController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeAttendeeManagerLearningPathsController.NAME, this.learningPathsGridModel);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeAttendeeManagerLearningPathsController.NAME, this.searchInput);\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n this.learningPathsGridModel.loadCurrentPage();\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeAttendeeManagerLearningPathsController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n this.learningPathsGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.clearSearch = function () {\r\n this.learningPathsGridModel.filter.searchString = null;\r\n this.learningPathsGridModel.filter.viewType = null;\r\n this.learningPathsGridModel.filter.subjectId = null;\r\n this.learningPathsGridModel.filter.languageId = null;\r\n this.learningPathsGridModel.filter.sourceId = null;\r\n this.viewType = 1;\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.viewType\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.languageId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.sourceId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.learningPathStatus\");\r\n this.learningPathsGridModel.loadPage(0);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.viewType\")) {\r\n this.learningPathsGridModel.filter.viewType = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.viewType\"));\r\n this.viewType = this.learningPathsGridModel.filter.viewType;\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.subjectId\")) {\r\n this.learningPathsGridModel.filter.subjectId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.subjectId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.languageId\")) {\r\n this.learningPathsGridModel.filter.languageId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.languageId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.sourceId\")) {\r\n this.learningPathsGridModel.filter.sourceId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.sourceId\"));\r\n }\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.getCompletedMandatoryCourses = function (coursesByLP) {\r\n var countCompletedCourses = 0;\r\n var countMandatoryCourses = 0;\r\n for (var _i = 0; _i < coursesByLP.length; _i++) {\r\n var course = coursesByLP[_i];\r\n if (course.courseInclusionType === LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.MANDATORY]) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n countCompletedCourses++;\r\n }\r\n countMandatoryCourses++;\r\n }\r\n }\r\n return countCompletedCourses + ' of ' + countMandatoryCourses;\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.getCompletedElectiveCourses = function (coursesByLP) {\r\n var countCompletedCourses = 0;\r\n var countMandatoryCourses = 0;\r\n for (var _i = 0; _i < coursesByLP.length; _i++) {\r\n var course = coursesByLP[_i];\r\n if (course.courseInclusionType === LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.ELECTIVE]) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n countCompletedCourses++;\r\n }\r\n countMandatoryCourses++;\r\n }\r\n }\r\n return countCompletedCourses + ' of ' + countMandatoryCourses;\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.getNotificationCountsForAttendee = function () {\r\n var _this = this;\r\n this.statisticReportsService.getAttendeeManagerNotificationsCounts().then(function (data) {\r\n _this.attendeeManagerCounts = data;\r\n });\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.getNotificationsModalMenuItemName = function (notificationsModalMenu1) {\r\n switch (notificationsModalMenu1) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n return \"comments/day\";\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n return \"comments/week\";\r\n }\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.getNotificationsModalMenuItem = function (itemName) {\r\n switch (itemName) {\r\n case \"comments/day\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS;\r\n case \"comments/week\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS;\r\n default:\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS;\r\n }\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.showNotificationsDialog = function (itemName) {\r\n this.showNotificationModal = true;\r\n this.setCurrentNotificationsModalMenuItem(this.getNotificationsModalMenuItem(itemName));\r\n this.currentNotificationsModalMenuItemName = itemName;\r\n this.commonFilterService.showNotificationsDialog(window);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.setCurrentNotificationsModalMenuItem = function (item) {\r\n var _this = this;\r\n this.currentNotificationsModalMenuItem = item;\r\n switch (this.currentNotificationsModalMenuItem) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n this.socialService.getCommentsAndDiscussionForAttendeeManager(\"DAY\").then(function (data) { return _this.comments = data; });\r\n break;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n this.socialService.getCommentsAndDiscussionForAttendeeManager(\"WEEK\").then(function (data) { return _this.comments = data; });\r\n break;\r\n }\r\n this.currentNotificationsModalMenuItemName = this.getNotificationsModalMenuItemName(item);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.redirectToDiscussion = function (courseId, discussionId) {\r\n this.hideNotificationsModal();\r\n this.$location.url(this.coursesRouter.discussionUrl(courseId)).search(\"threadId\", discussionId);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.hideNotificationsModal = function () {\r\n $(\"#notificationsModal\").modal(\"hide\");\r\n $('.modal-backdrop').remove();\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.getNotificationItemCount = function (item) {\r\n switch (item) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n return this.attendeeManagerCounts.dayCommentsCount;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n return this.attendeeManagerCounts.weekCommentsCount;\r\n }\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.initializeSlick = function () {\r\n this.isInitSlick = this.commonHomeService.initializeSlick(this.learningPathsGridModel, false);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.showAllLP = function (learningPathId) {\r\n var _this = this;\r\n this.isShowAllCards = true;\r\n this.commonHomeService.showAllLP(learningPathId);\r\n setTimeout(function () { return _this.setPopupClasses(); }, 500);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.hideAllLP = function (learningPathId) {\r\n var _this = this;\r\n this.isShowAllCards = false;\r\n this.commonHomeService.hideAllLP(learningPathId);\r\n setTimeout(function () { return _this.setPopupClasses(); }, 500);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.openCard = function (indexPlanLp, learningPathId) {\r\n this.commonHomeService.openCard(indexPlanLp, learningPathId, this.isShowAllCards);\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.updateGrid = function () {\r\n var _this = this;\r\n this.learningPathsUrl = !this.showExpired\r\n ? \"/api/learningPaths/search/attendeeManager\"\r\n : \"/api/learningPaths/search/attendeeManager/expired\";\r\n this.learningPathsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.http, this.url.service(this.learningPathsUrl)));\r\n this.getStorageFilters(true);\r\n this.learningPathsGridModel.pageSize = 4;\r\n this.learningPathsGridModel.addLoadingListener(this);\r\n this.oldSearchViewType = this.viewType;\r\n this.window = angular.element(this.$window);\r\n if (this.window.innerWidth < 992) {\r\n this.startWindowWidth = 0;\r\n }\r\n else {\r\n this.startWindowWidth = 10000;\r\n }\r\n this.window.bind('resize', function () {\r\n if (window.innerWidth < 992 && window.innerWidth < _this.startWindowWidth && !_this.viewType) {\r\n _this.oldSearchViewType = _this.viewType;\r\n _this.startWindowWidth = 0;\r\n _this.viewType = 1;\r\n }\r\n if (window.innerWidth >= 992 && window.innerWidth > _this.startWindowWidth && !_this.oldSearchViewType) {\r\n _this.viewType = _this.oldSearchViewType;\r\n _this.startWindowWidth = 10000;\r\n }\r\n });\r\n this.viewType = 1;\r\n this.loadSearch();\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 768;\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.getCourseDatesString = function (course) {\r\n var courseDates = new Map();\r\n if (course.endDate) {\r\n courseDates.set(\"endDate\", new Date(course.endDate).toLocaleDateString());\r\n }\r\n if (!course.endDate || course.startDate > Date.now()) {\r\n courseDates.set(\"startDate\", new Date(course.startDate).toLocaleDateString());\r\n }\r\n return courseDates;\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"lp__plan-card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (popup.clientWidth >= window.innerWidth - card.clientWidth - rec.left) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n HomeAttendeeManagerLearningPathsController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n HomeAttendeeManagerLearningPathsController.NAME = \"home.HomeAttendeeManagerLearningPathsController\";\r\n HomeAttendeeManagerLearningPathsController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n SocialService_1.SocialService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n CommonHomeService_1.CommonHomeService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return HomeAttendeeManagerLearningPathsController;\r\n})();\r\nexports.HomeAttendeeManagerLearningPathsController = HomeAttendeeManagerLearningPathsController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../authcore/AuthManager\":25,\"../../common/CommonFilterService\":49,\"../../common/CommonHomeService\":50,\"../../courses/models/CourseProgressStatus\":222,\"../../info/IntroService\":292,\"../../learningPaths/LearningPathService\":320,\"../../learningPaths/models/LearningPathCourseInclusionType\":324,\"../../security/PermissionsService\":418,\"../../social/SocialService\":440,\"../../statistics/StatisticReportsService\":448,\"../../urls/CoursesRouter\":468,\"../../urls/LearningPathsRouter\":477,\"../../users/UserService\":499,\"../../utils/MenuHelper\":517,\"../../utils/UrlService\":528,\"../models/NotificationsModalMenuItem\":277}],261:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar StatisticReportsService_1 = require(\"../../statistics/StatisticReportsService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar HomeAttendeeManagerReportsController = (function () {\r\n function HomeAttendeeManagerReportsController(statisticReportsService, introService) {\r\n var _this = this;\r\n this.statisticReportsService = statisticReportsService;\r\n this.introService = introService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_REPORTS_KEY);\r\n statisticReportsService.getInfoForAttendeeManager().then(function (data) {\r\n _this.statistic = data;\r\n _this.dailyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"DAY\"; })[0];\r\n _this.weeklyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"WEEK\"; })[0];\r\n _this.monthlyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"MONTH\"; })[0];\r\n var today = new Date(_this.monthlyStatistic.startDate);\r\n _this.currentMonth = today.toLocaleString(\"en-US\", { month: 'long' });\r\n _this.currentYear = today.getFullYear();\r\n });\r\n }\r\n HomeAttendeeManagerReportsController.prototype.calcHours = function (timeInMinutes) {\r\n return Math.floor(timeInMinutes / 60);\r\n };\r\n HomeAttendeeManagerReportsController.prototype.calcMinutesRemainder = function (timeInMinutes) {\r\n return timeInMinutes % 60;\r\n };\r\n HomeAttendeeManagerReportsController.prototype.startIntro = function () {\r\n this.introService.startAttendeeManagerHomePageIntro();\r\n };\r\n HomeAttendeeManagerReportsController.NAME = \"home.HomeAttendeeManagerReportsController\";\r\n HomeAttendeeManagerReportsController.$inject = [\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return HomeAttendeeManagerReportsController;\r\n})();\r\nexports.HomeAttendeeManagerReportsController = HomeAttendeeManagerReportsController;\r\n},{\"../../info/IntroService\":292,\"../../statistics/StatisticReportsService\":448,\"../../utils/MenuHelper\":517}],262:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar CoursesRouter_1 = require(\"../../urls/CoursesRouter\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar ResizeViewService_1 = require(\"../../utils/ResizeViewService\");\r\nvar ReferencedObjectType_1 = require(\"../../ReferencedObjectType\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar PersonalService_1 = require(\"../../personal/PersonalService\");\r\nvar SecurityService_1 = require(\"../../security/SecurityService\");\r\nvar UserRole_1 = require(\"../../users/models/UserRole\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar CommonHomeService_1 = require(\"../../common/CommonHomeService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar HomeAuthorCoursesController = (function () {\r\n function HomeAuthorCoursesController($scope, $rootScope, $http, $location, $window, url, personalService, permissionsApi, authManager, coursesRouter, securityService, commonFilterService, commonHomeService, introService, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.personalService = personalService;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.coursesRouter = coursesRouter;\r\n this.securityService = securityService;\r\n this.commonFilterService = commonFilterService;\r\n this.commonHomeService = commonHomeService;\r\n this.introService = introService;\r\n this.userService = userService;\r\n this.SUBJECT_MODULE = 'subject';\r\n this.COMPLEXITY_LEVEL_MODULE = 'complexityLevel';\r\n this.LANGUAGE_MODULE = 'language';\r\n this.SOURCE_MODULE = 'source';\r\n this.STUDENT_MODULE = 'student';\r\n this.DEFAULT_TOP_MENU_ITEM = 'course';\r\n this.currentMenuItemKey = \"\";\r\n this.rowShow = new Map();\r\n this.selectedItemInModule = new Map();\r\n this.countActiveFilter = 0;\r\n this.showExpired = false;\r\n this.coursesUrl = \"/api/courses/search\";\r\n this.selectedItemInModule.set(this.SUBJECT_MODULE, 0);\r\n this.selectedItemInModule.set(this.COMPLEXITY_LEVEL_MODULE, 0);\r\n this.selectedItemInModule.set(this.LANGUAGE_MODULE, 0);\r\n this.selectedItemInModule.set(this.SOURCE_MODULE, 0);\r\n this.selectedItemInModule.set(this.STUDENT_MODULE, 1);\r\n this.menuKey = {\r\n topMenu: this.DEFAULT_TOP_MENU_ITEM\r\n };\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_AUTHOR_COURSES_KEY);\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadUserProfile();\r\n this.securityService.demandAuthentication().demandUserBusinessRole(UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR]);\r\n this.updateGrid();\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n $rootScope.$on('main.menu.search.changed', function (event, value) {\r\n _this.coursesGridModel.filter.searchString = value;\r\n _this.coursesGridModel.loadPage(0);\r\n });\r\n }\r\n HomeAuthorCoursesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeAuthorCoursesController.prototype.startIntro = function () {\r\n this.introService.startAuthorHomePageIntro();\r\n };\r\n HomeAuthorCoursesController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(HomeAuthorCoursesController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.coursesGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(HomeAuthorCoursesController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n }\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n HomeAuthorCoursesController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeAuthorCoursesController.prototype.setSearch = function (module, item) {\r\n if (this.selectedItemInModule.get(module) == item) {\r\n this.selectedItemInModule.set(module, 0);\r\n }\r\n else {\r\n this.selectedItemInModule.set(module, item);\r\n }\r\n this.searchCourse();\r\n };\r\n HomeAuthorCoursesController.prototype.isSearchItemActive = function (module, searchItem) {\r\n return this.selectedItemInModule.get(module) == searchItem;\r\n };\r\n HomeAuthorCoursesController.prototype.isSearchItemHide = function (module, searchItem) {\r\n return !!(this.selectedItemInModule.get(module) != 0 && this.selectedItemInModule.get(module) != searchItem);\r\n };\r\n HomeAuthorCoursesController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.menuKey.topMenu == topMenuKey;\r\n };\r\n HomeAuthorCoursesController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n HomeAuthorCoursesController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n HomeAuthorCoursesController.prototype.searchCourse = function () {\r\n this.coursesGridModel.loadPage(0);\r\n };\r\n HomeAuthorCoursesController.prototype.addToFavorites = function (course) {\r\n this.rowShow.set(course.id, !this.rowShow.get(course.id));\r\n this.personalService.addToFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been added to your favorites\");\r\n course.favorite = true;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.already.in.favorite\") {\r\n INotifier_1.notifier.error(\"This course is already in your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n HomeAuthorCoursesController.prototype.removeFromFavorites = function (course) {\r\n this.rowShow.set(course.id, !this.rowShow.get(course.id));\r\n this.personalService.removeFromFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been removed from your favorites\");\r\n course.favorite = false;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.not.in.favorite\") {\r\n INotifier_1.notifier.error(\"Failed to remove from your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n HomeAuthorCoursesController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.searchString\")) {\r\n this.coursesGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.viewType\")) {\r\n this.coursesGridModel.filter.viewType = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.viewType\"));\r\n this.viewType = this.coursesGridModel.filter.viewType;\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.subjectId\")) {\r\n this.coursesGridModel.filter.subjectId = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.subjectId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.complexityLevel\")) {\r\n this.coursesGridModel.filter.complexityLevel = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.complexityLevel\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.languageId\")) {\r\n this.coursesGridModel.filter.languageId = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.languageId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.sourceId\")) {\r\n this.coursesGridModel.filter.sourceId = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.sourceId\"));\r\n }\r\n };\r\n HomeAuthorCoursesController.prototype.clearSearch = function () {\r\n this.coursesGridModel.filter.searchString = null;\r\n this.coursesGridModel.filter.viewType = null;\r\n this.coursesGridModel.filter.subjectId = null;\r\n this.coursesGridModel.filter.complexityLevel = null;\r\n this.coursesGridModel.filter.languageId = null;\r\n this.coursesGridModel.filter.sourceId = null;\r\n this.viewType = 1;\r\n sessionStorage.removeItem(\"vhsCoursesFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.viewType\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.complexityLevel\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.languageId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.sourceId\");\r\n this.coursesGridModel.loadPage(0);\r\n };\r\n HomeAuthorCoursesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeAuthorCoursesController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeAuthorCoursesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeAuthorCoursesController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsCoursesFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsCoursesFilter.\" + key);\r\n }\r\n };\r\n HomeAuthorCoursesController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeAuthorCoursesController.NAME, this.searchInput);\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n HomeAuthorCoursesController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeAuthorCoursesController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeAuthorCoursesController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeAuthorCoursesController.prototype.applyFilter = function () {\r\n this.commonFilterService.applyGeneralFilter(this.coursesGridModel);\r\n };\r\n HomeAuthorCoursesController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeAuthorCoursesController.NAME, this.coursesGridModel);\r\n };\r\n HomeAuthorCoursesController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeAuthorCoursesController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n HomeAuthorCoursesController.prototype.updateGrid = function () {\r\n var _this = this;\r\n var coursesUrl = !this.showExpired\r\n ? \"/api/courses/search/author\"\r\n : \"/api/courses/expired\";\r\n this.coursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(coursesUrl)));\r\n this.getStorageFilters();\r\n if (window.innerWidth < 1200) {\r\n this.coursesGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.coursesGridModel.pageSize = 9;\r\n }\r\n this.viewType = 1;\r\n this.loadSearch();\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n var currentPage = _this.coursesGridModel.currentPage >= _this.coursesGridModel.totalPageCount\r\n ? _this.coursesGridModel.currentPage - 1\r\n : _this.coursesGridModel.currentPage;\r\n if (window.innerWidth < 1200) {\r\n _this.coursesGridModel.pageSize = 10;\r\n _this.coursesGridModel.loadPage(currentPage);\r\n }\r\n else {\r\n _this.coursesGridModel.pageSize = 9;\r\n _this.coursesGridModel.loadPage(currentPage);\r\n }\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n };\r\n HomeAuthorCoursesController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n HomeAuthorCoursesController.NAME = \"home.HomeAuthorCoursesController\";\r\n HomeAuthorCoursesController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n CommonHomeService_1.CommonHomeService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return HomeAuthorCoursesController;\r\n})();\r\nexports.HomeAuthorCoursesController = HomeAuthorCoursesController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../INotifier\":5,\"../../ReferencedObjectType\":7,\"../../authcore/AuthManager\":25,\"../../common/CommonFilterService\":49,\"../../common/CommonHomeService\":50,\"../../info/IntroService\":292,\"../../personal/PersonalService\":377,\"../../security/PermissionsService\":418,\"../../security/SecurityService\":420,\"../../urls/CoursesRouter\":468,\"../../users/UserService\":499,\"../../users/models/UserRole\":507,\"../../utils/MenuHelper\":517,\"../../utils/ResizeViewService\":524,\"../../utils/UrlService\":528}],263:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar QuizzesRouter_1 = require(\"../../urls/QuizzesRouter\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar CustomBrandingService_1 = require(\"../../branding/CustomBrandingService\");\r\nvar DialogService_1 = require(\"../../components/dialog/DialogService\");\r\nvar QuizType_1 = require(\"../../quizzes/models/QuizType\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar ResizeViewService_1 = require(\"../../utils/ResizeViewService\");\r\nvar SecurityService_1 = require(\"../../security/SecurityService\");\r\nvar UserRole_1 = require(\"../../users/models/UserRole\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar Event_1 = require(\"../../components/models/Event\");\r\nvar HomeAuthorFlashcardsController = (function () {\r\n function HomeAuthorFlashcardsController($scope, $rootScope, $http, $location, $window, quizzesRouter, permissionsApi, url, userService, brandingService, dialogService, authManager, securityService, commonFilterService, introService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.quizzesRouter = quizzesRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.url = url;\r\n this.userService = userService;\r\n this.brandingService = brandingService;\r\n this.dialogService = dialogService;\r\n this.authManager = authManager;\r\n this.securityService = securityService;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.currentMenuItemKey = \"\";\r\n this.rowShow = new Map();\r\n this.type = [\r\n QuizType_1.QuizType[QuizType_1.QuizType.QUIZ],\r\n QuizType_1.QuizType[QuizType_1.QuizType.SURVEY],\r\n QuizType_1.QuizType[QuizType_1.QuizType.FLASHCARD]\r\n ];\r\n this.owner = [];\r\n this.countActiveFilter = 0;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_AUTHOR_FLASHCARDS_KEY);\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadUserProfile();\r\n this.securityService.demandAuthentication().demandUserBusinessRole(UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR]);\r\n var quizzesUrl = \"/api/quizzes/author/\" + QuizType_1.QuizType[QuizType_1.QuizType.FLASHCARD];\r\n this.quizzesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(quizzesUrl)));\r\n this.quizzesGridModel.addLoadingListener(this);\r\n if (window.innerWidth < 1200) {\r\n this.quizzesGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.quizzesGridModel.pageSize = 9;\r\n }\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n var currentPage = _this.quizzesGridModel.currentPage >= _this.quizzesGridModel.totalPageCount\r\n ? _this.quizzesGridModel.currentPage - 1\r\n : _this.quizzesGridModel.currentPage;\r\n if (window.innerWidth < 1200) {\r\n _this.quizzesGridModel.pageSize = 10;\r\n _this.quizzesGridModel.loadPage(currentPage);\r\n }\r\n else {\r\n _this.quizzesGridModel.pageSize = 9;\r\n _this.quizzesGridModel.loadPage(currentPage);\r\n }\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n this.getOwnersUrl();\r\n }\r\n HomeAuthorFlashcardsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeAuthorFlashcardsController.prototype.startIntro = function () {\r\n this.introService.startAuthorHomePageIntro();\r\n };\r\n HomeAuthorFlashcardsController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeAuthorFlashcardsController.prototype.startLoading = function () {\r\n };\r\n HomeAuthorFlashcardsController.prototype.endLoading = function () {\r\n this.quizzesGridModel.entries.forEach(function (quiz) {\r\n quiz.subjectNameAndTitle = quiz.subjectName + \"/\" + quiz.title;\r\n });\r\n };\r\n HomeAuthorFlashcardsController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n HomeAuthorFlashcardsController.prototype.searchQuiz = function () {\r\n this.quizzesGridModel.loadPage(0);\r\n };\r\n HomeAuthorFlashcardsController.prototype.loadQuizDetails = function (quizId) {\r\n this.$location.url(this.quizzesRouter.flashcardsDetailsUrl(quizId));\r\n };\r\n HomeAuthorFlashcardsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeAuthorFlashcardsController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeAuthorFlashcardsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeAuthorFlashcardsController.prototype.getOwnersUrl = function () {\r\n var _this = this;\r\n this.userService.getOwnersUrl()\r\n .then(function (response) { return _this.owner = response; });\r\n };\r\n HomeAuthorFlashcardsController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeAuthorFlashcardsController.NAME, this.searchInput);\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n this.quizzesGridModel.loadCurrentPage();\r\n };\r\n HomeAuthorFlashcardsController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeAuthorFlashcardsController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n this.quizzesGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeAuthorFlashcardsController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeAuthorFlashcardsController.prototype.updateFilter = function (type, referenceObject) {\r\n this.countActiveFilter += this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeAuthorFlashcardsController.NAME);\r\n };\r\n HomeAuthorFlashcardsController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeAuthorFlashcardsController.NAME, this.quizzesGridModel);\r\n };\r\n HomeAuthorFlashcardsController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 768;\r\n };\r\n HomeAuthorFlashcardsController.prototype.importQuiz = function () {\r\n this.$rootScope.$broadcast(Event_1.Event.QUIZ_SURVEY_IMPORT_UPDATE);\r\n $(\"#importQuizTemplate\").modal(\"toggle\");\r\n };\r\n HomeAuthorFlashcardsController.NAME = \"home.HomeAuthorFlashcardsController\";\r\n HomeAuthorFlashcardsController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n UserService_1.UserService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return HomeAuthorFlashcardsController;\r\n})();\r\nexports.HomeAuthorFlashcardsController = HomeAuthorFlashcardsController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../authcore/AuthManager\":25,\"../../branding/CustomBrandingService\":35,\"../../common/CommonFilterService\":49,\"../../components/dialog/DialogService\":166,\"../../components/models/Event\":170,\"../../info/IntroService\":292,\"../../quizzes/models/QuizType\":403,\"../../security/PermissionsService\":418,\"../../security/SecurityService\":420,\"../../urls/QuizzesRouter\":486,\"../../users/UserService\":499,\"../../users/models/UserRole\":507,\"../../utils/MenuHelper\":517,\"../../utils/ResizeViewService\":524,\"../../utils/UrlService\":528}],264:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar LearningPathsRouter_1 = require(\"../../urls/LearningPathsRouter\");\r\nvar CoursesRouter_1 = require(\"../../urls/CoursesRouter\");\r\nvar AuthRedirect_1 = require(\"../../authcore/AuthRedirect\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar CustomBrandingService_1 = require(\"../../branding/CustomBrandingService\");\r\nvar CourseProgressStatus_1 = require(\"../../courses/models/CourseProgressStatus\");\r\nvar LearningPathCourseInclusionType_1 = require(\"../../learningPaths/models/LearningPathCourseInclusionType\");\r\nvar UserRole_1 = require(\"../../users/models/UserRole\");\r\nvar SecurityService_1 = require(\"../../security/SecurityService\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar CommonHomeService_1 = require(\"../../common/CommonHomeService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar HomeAuthorLearningPathsController = (function () {\r\n function HomeAuthorLearningPathsController($scope, $rootScope, $http, $location, $window, learningPathsRouter, permissionsApi, authManager, url, brandingService, authRedirect, coursesRouter, securityService, commonHomeService, commonFilterService, introService, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.url = url;\r\n this.brandingService = brandingService;\r\n this.authRedirect = authRedirect;\r\n this.coursesRouter = coursesRouter;\r\n this.securityService = securityService;\r\n this.commonHomeService = commonHomeService;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.userService = userService;\r\n this.currentMenuItemKey = \"\";\r\n this.countActiveFilter = 0;\r\n this.isLearningPathsLoaded = false;\r\n this.isInitSlick = false;\r\n this.showExpired = false;\r\n this.learningPathsUrl = \"/api/learningPaths/search\";\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_AUTHOR_LEARNING_PATH_KEY);\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n this.http = $http;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadUserProfile();\r\n this.securityService.demandAuthentication().demandUserBusinessRole(UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR]);\r\n this.updateGrid();\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n $rootScope.$on('main.menu.search.changed', function (event, value) {\r\n _this.learningPathsGridModel.filter.searchString = value;\r\n _this.learningPathsGridModel.loadPage(0);\r\n });\r\n }\r\n HomeAuthorLearningPathsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeAuthorLearningPathsController.prototype.startIntro = function () {\r\n this.introService.startAuthorHomePageIntro();\r\n };\r\n HomeAuthorLearningPathsController.prototype.getStorageFilters = function (isInit) {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(HomeAuthorLearningPathsController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.learningPathsGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(HomeAuthorLearningPathsController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n }\r\n if (!isInit) {\r\n this.learningPathsGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeAuthorLearningPathsController.prototype.startLoading = function () {\r\n this.isInitSlick = false;\r\n this.isLearningPathsLoaded = false;\r\n };\r\n HomeAuthorLearningPathsController.prototype.endLoading = function () {\r\n var _this = this;\r\n this.isLearningPathsLoaded = true;\r\n setTimeout(function () { return _this.initializeSlick(); }, 500);\r\n };\r\n HomeAuthorLearningPathsController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeAuthorLearningPathsController.prototype.setViewType = function (viewType) {\r\n var _this = this;\r\n if (viewType == 1) {\r\n setTimeout(function () { return _this.initializeSlick(); });\r\n }\r\n this.viewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeAuthorLearningPathsController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeAuthorLearningPathsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeAuthorLearningPathsController.prototype.loadLearningPath = function (learningPathId) {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(learningPathId));\r\n };\r\n HomeAuthorLearningPathsController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n HomeAuthorLearningPathsController.prototype.getSubjectAndName = function (learningPath) {\r\n return learningPath.subjectName != null && learningPath.name != undefined\r\n ? learningPath.subjectName + \" / \" + learningPath.name\r\n : learningPath.name;\r\n };\r\n HomeAuthorLearningPathsController.prototype.searchLearningPath = function () {\r\n this.learningPathsGridModel.loadPage(0);\r\n };\r\n HomeAuthorLearningPathsController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsLearningPathsFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.\" + key);\r\n }\r\n };\r\n HomeAuthorLearningPathsController.prototype.clearSearch = function () {\r\n this.learningPathsGridModel.filter.searchString = null;\r\n this.learningPathsGridModel.filter.viewType = null;\r\n this.learningPathsGridModel.filter.subjectId = null;\r\n this.learningPathsGridModel.filter.languageId = null;\r\n this.learningPathsGridModel.filter.sourceId = null;\r\n this.viewType = 1;\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.viewType\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.languageId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.sourceId\");\r\n this.learningPathsGridModel.loadPage(0);\r\n };\r\n HomeAuthorLearningPathsController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.searchString\")) {\r\n this.learningPathsGridModel.filter.searchString = sessionStorage.getItem(\"vhsLearningPathsFilter.searchString\");\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.viewType\")) {\r\n this.learningPathsGridModel.filter.viewType = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.viewType\"));\r\n this.viewType = this.learningPathsGridModel.filter.viewType;\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.subjectId\")) {\r\n this.learningPathsGridModel.filter.subjectId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.subjectId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.languageId\")) {\r\n this.learningPathsGridModel.filter.languageId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.languageId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.sourceId\")) {\r\n this.learningPathsGridModel.filter.sourceId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.sourceId\"));\r\n }\r\n };\r\n HomeAuthorLearningPathsController.prototype.getCompletedMandatoryCourses = function (coursesByLP) {\r\n var countCompletedCourses = 0;\r\n var countMandatoryCourses = 0;\r\n for (var _i = 0; _i < coursesByLP.length; _i++) {\r\n var course = coursesByLP[_i];\r\n if (course.courseInclusionType === LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.MANDATORY]) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n countCompletedCourses++;\r\n }\r\n countMandatoryCourses++;\r\n }\r\n }\r\n return countCompletedCourses + ' of ' + countMandatoryCourses;\r\n };\r\n HomeAuthorLearningPathsController.prototype.getCompletedElectiveCourses = function (coursesByLP) {\r\n var countCompletedCourses = 0;\r\n var countMandatoryCourses = 0;\r\n for (var _i = 0; _i < coursesByLP.length; _i++) {\r\n var course = coursesByLP[_i];\r\n if (course.courseInclusionType === LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.ELECTIVE]) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n countCompletedCourses++;\r\n }\r\n countMandatoryCourses++;\r\n }\r\n }\r\n return countCompletedCourses + ' of ' + countMandatoryCourses;\r\n };\r\n HomeAuthorLearningPathsController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeAuthorLearningPathsController.NAME, this.searchInput);\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n this.learningPathsGridModel.loadCurrentPage();\r\n };\r\n HomeAuthorLearningPathsController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeAuthorLearningPathsController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n this.learningPathsGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeAuthorLearningPathsController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeAuthorLearningPathsController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n HomeAuthorLearningPathsController.prototype.applyFilter = function () {\r\n this.commonFilterService.applyGeneralFilter(this.learningPathsGridModel);\r\n };\r\n HomeAuthorLearningPathsController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeAuthorLearningPathsController.NAME, this.learningPathsGridModel);\r\n };\r\n HomeAuthorLearningPathsController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeAuthorLearningPathsController.prototype.initializeSlick = function () {\r\n this.isInitSlick = this.commonHomeService.initializeSlick(this.learningPathsGridModel, false);\r\n };\r\n HomeAuthorLearningPathsController.prototype.showAllLP = function (learningPathId) {\r\n var _this = this;\r\n this.isShowAllCards = true;\r\n this.commonHomeService.showAllLP(learningPathId);\r\n setTimeout(function () { return _this.setPopupClasses(); }, 500);\r\n };\r\n HomeAuthorLearningPathsController.prototype.hideAllLP = function (learningPathId) {\r\n var _this = this;\r\n this.isShowAllCards = false;\r\n this.commonHomeService.hideAllLP(learningPathId);\r\n setTimeout(function () { return _this.setPopupClasses(); }, 500);\r\n };\r\n HomeAuthorLearningPathsController.prototype.openCard = function (indexPlanLp, learningPathId) {\r\n this.commonHomeService.openCard(indexPlanLp, learningPathId, this.isShowAllCards);\r\n };\r\n HomeAuthorLearningPathsController.prototype.updateGrid = function () {\r\n var _this = this;\r\n this.learningPathsUrl = !this.showExpired\r\n ? \"/api/learningPaths/search/author\"\r\n : \"/api/learningPaths/search/author/expired\";\r\n this.learningPathsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.http, this.url.service(this.learningPathsUrl)));\r\n this.learningPathsGridModel.pageSize = 4;\r\n this.learningPathsGridModel.addLoadingListener(this);\r\n this.getStorageFilters(true);\r\n this.oldSearchViewType = this.viewType;\r\n this.window = angular.element(this.$window);\r\n if (this.window.innerWidth < 992) {\r\n this.startWindowWidth = 0;\r\n }\r\n else {\r\n this.startWindowWidth = 10000;\r\n }\r\n this.window.bind('resize', function () {\r\n if (window.innerWidth < 992 && window.innerWidth < _this.startWindowWidth && !_this.viewType) {\r\n _this.oldSearchViewType = _this.viewType;\r\n _this.startWindowWidth = 0;\r\n _this.viewType = 1;\r\n }\r\n if (window.innerWidth >= 992 && window.innerWidth > _this.startWindowWidth && !_this.oldSearchViewType) {\r\n _this.viewType = _this.oldSearchViewType;\r\n _this.startWindowWidth = 10000;\r\n }\r\n });\r\n this.viewType = 1;\r\n this.loadSearch();\r\n };\r\n HomeAuthorLearningPathsController.prototype.getCourseDatesString = function (course) {\r\n var courseDates = new Map();\r\n if (course.endDate) {\r\n courseDates.set(\"endDate\", new Date(course.endDate).toLocaleDateString());\r\n }\r\n if (!course.endDate || course.startDate > Date.now()) {\r\n courseDates.set(\"startDate\", new Date(course.startDate).toLocaleDateString());\r\n }\r\n return courseDates;\r\n };\r\n HomeAuthorLearningPathsController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"lp__plan-card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (popup.clientWidth >= window.innerWidth - card.clientWidth - rec.left) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n HomeAuthorLearningPathsController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n HomeAuthorLearningPathsController.NAME = \"home.HomeAuthorLearningPathsController\";\r\n HomeAuthorLearningPathsController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n UrlService_1.UrlService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CommonHomeService_1.CommonHomeService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return HomeAuthorLearningPathsController;\r\n})();\r\nexports.HomeAuthorLearningPathsController = HomeAuthorLearningPathsController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../authcore/AuthManager\":25,\"../../authcore/AuthRedirect\":26,\"../../branding/CustomBrandingService\":35,\"../../common/CommonFilterService\":49,\"../../common/CommonHomeService\":50,\"../../courses/models/CourseProgressStatus\":222,\"../../info/IntroService\":292,\"../../learningPaths/models/LearningPathCourseInclusionType\":324,\"../../security/PermissionsService\":418,\"../../security/SecurityService\":420,\"../../urls/CoursesRouter\":468,\"../../urls/LearningPathsRouter\":477,\"../../users/UserService\":499,\"../../users/models/UserRole\":507,\"../../utils/MenuHelper\":517,\"../../utils/UrlService\":528}],265:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar MaterialsRouter_1 = require(\"../../urls/MaterialsRouter\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar ObjectTypeUtils_1 = require(\"../../utils/ObjectTypeUtils\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar MaterialService_1 = require(\"../../materials/MaterialService\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar HomeAuthorMaterialsController = (function () {\r\n function HomeAuthorMaterialsController($http, $location, materialService, url, permissionsApi, materialsRouter, authManager, commonFilterService, introService, userService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.materialService = materialService;\r\n this.url = url;\r\n this.permissionsApi = permissionsApi;\r\n this.materialsRouter = materialsRouter;\r\n this.authManager = authManager;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.userService = userService;\r\n this.currentMenuItemKey = \"\";\r\n this.currentMenuItemName = \"\";\r\n this.countActiveFilter = 0;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_AUTHOR_MATERIALS_KEY);\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n this.materialsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/materials/author\")));\r\n this.topType = 'ALL';\r\n this.getStorageFilters();\r\n if (window.innerWidth < 1800) {\r\n this.materialsGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.materialsGridModel.pageSize = 9;\r\n }\r\n this.materialsGridModel.addLoadingListener(this);\r\n this.viewType = 1;\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadUserProfile();\r\n }\r\n HomeAuthorMaterialsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeAuthorMaterialsController.prototype.startIntro = function () {\r\n this.introService.startAuthorHomePageIntro();\r\n };\r\n HomeAuthorMaterialsController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(HomeAuthorMaterialsController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.materialsGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(HomeAuthorMaterialsController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.materialsGridModel.filter.searchString = this.searchInput;\r\n }\r\n var topType = this.commonFilterService.getTopStatus(HomeAuthorMaterialsController.NAME);\r\n if (topType) {\r\n this.topType = topType;\r\n this.applyMaterialTopType(topType);\r\n }\r\n this.materialsGridModel.loadCurrentPage();\r\n };\r\n HomeAuthorMaterialsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeAuthorMaterialsController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeAuthorMaterialsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeAuthorMaterialsController.prototype.startLoading = function () {\r\n };\r\n HomeAuthorMaterialsController.prototype.endLoading = function () {\r\n this.materialsGridModel.entries.forEach(function (material) {\r\n material.subjectAndTopic = material.subjectName + \" / \" + material.title;\r\n });\r\n };\r\n HomeAuthorMaterialsController.prototype.loadMaterial = function (materialId) {\r\n if (this.materialsGridModel.entries.filter(function (m) { return m.id === materialId; })[0].permissions.view) {\r\n this.$location.url(this.materialsRouter.watchUrl(materialId));\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"You are not granted permission to view this course\");\r\n }\r\n };\r\n HomeAuthorMaterialsController.prototype.getMaterialTypeTitle = function (materialTypeId) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialTypeTitle(materialTypeId);\r\n };\r\n HomeAuthorMaterialsController.prototype.showDetails = function (material) {\r\n material.shown = !material.shown;\r\n };\r\n HomeAuthorMaterialsController.prototype.updateTopType = function (status) {\r\n this.topType = status;\r\n this.commonFilterService.saveTopStatus(HomeAuthorMaterialsController.NAME, status);\r\n this.applyMaterialTopType(status);\r\n this.materialsGridModel.loadCurrentPage();\r\n };\r\n HomeAuthorMaterialsController.prototype.applyMaterialTopType = function (status) {\r\n this.commonFilterService.applyMaterialTopType(status, this.materialsGridModel);\r\n };\r\n HomeAuthorMaterialsController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeAuthorMaterialsController.NAME, this.searchInput);\r\n this.materialsGridModel.filter.searchString = this.searchInput;\r\n this.materialsGridModel.loadCurrentPage();\r\n };\r\n HomeAuthorMaterialsController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeAuthorMaterialsController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.materialsGridModel.filter.searchString = this.searchInput;\r\n this.materialsGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeAuthorMaterialsController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeAuthorMaterialsController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeAuthorMaterialsController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n HomeAuthorMaterialsController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeAuthorMaterialsController.NAME, this.materialsGridModel);\r\n };\r\n HomeAuthorMaterialsController.prototype.getMaterialTypeName = function (typeKey) {\r\n switch (typeKey) {\r\n case 'ALL': return 'ALL';\r\n case 'AUDIO': return 'AUDIO';\r\n case 'VIDEO': return 'VIDEO';\r\n case 'PHOTO': return 'IMAGE';\r\n case 'LINK': return 'LINK';\r\n case 'DOCUMENTS': return 'OTHER';\r\n }\r\n };\r\n HomeAuthorMaterialsController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (rec.right + popup.clientWidth >= document.body.clientWidth) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n HomeAuthorMaterialsController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n HomeAuthorMaterialsController.NAME = \"home.HomeAuthorMaterialsController\";\r\n HomeAuthorMaterialsController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n MaterialService_1.MaterialService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return HomeAuthorMaterialsController;\r\n})();\r\nexports.HomeAuthorMaterialsController = HomeAuthorMaterialsController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../INotifier\":5,\"../../authcore/AuthManager\":25,\"../../common/CommonFilterService\":49,\"../../info/IntroService\":292,\"../../materials/MaterialService\":337,\"../../security/PermissionsService\":418,\"../../urls/MaterialsRouter\":480,\"../../users/UserService\":499,\"../../utils/MenuHelper\":517,\"../../utils/ObjectTypeUtils\":520,\"../../utils/UrlService\":528}],266:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar QuizzesRouter_1 = require(\"../../urls/QuizzesRouter\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar CustomBrandingService_1 = require(\"../../branding/CustomBrandingService\");\r\nvar DialogService_1 = require(\"../../components/dialog/DialogService\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar ResizeViewService_1 = require(\"../../utils/ResizeViewService\");\r\nvar QuizType_1 = require(\"../../quizzes/models/QuizType\");\r\nvar UserRole_1 = require(\"../../users/models/UserRole\");\r\nvar SecurityService_1 = require(\"../../security/SecurityService\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar Event_1 = require(\"../../components/models/Event\");\r\nvar HomeAuthorQuizzesController = (function () {\r\n function HomeAuthorQuizzesController($scope, $rootScope, $http, $location, $window, quizzesRouter, permissionsApi, url, userService, brandingService, dialogService, authManager, securityService, commonFilterService, introService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.quizzesRouter = quizzesRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.url = url;\r\n this.userService = userService;\r\n this.brandingService = brandingService;\r\n this.dialogService = dialogService;\r\n this.authManager = authManager;\r\n this.securityService = securityService;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.currentMenuItemKey = \"\";\r\n this.rowShow = new Map();\r\n this.type = [\r\n QuizType_1.QuizType[QuizType_1.QuizType.QUIZ],\r\n QuizType_1.QuizType[QuizType_1.QuizType.SURVEY],\r\n QuizType_1.QuizType[QuizType_1.QuizType.FLASHCARD]\r\n ];\r\n this.owner = [];\r\n this.countActiveFilter = 0;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_AUTHOR_QUIZZES_KEY);\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadUserProfile();\r\n this.securityService.demandAuthentication().demandUserBusinessRole(UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR]);\r\n var quizzesUrl = \"/api/quizzes/author/\" + QuizType_1.QuizType[QuizType_1.QuizType.QUIZ];\r\n this.quizzesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(quizzesUrl)));\r\n this.quizzesGridModel.addLoadingListener(this);\r\n if (window.innerWidth < 1200) {\r\n this.quizzesGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.quizzesGridModel.pageSize = 9;\r\n }\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n var currentPage = _this.quizzesGridModel.currentPage >= _this.quizzesGridModel.totalPageCount\r\n ? _this.quizzesGridModel.currentPage - 1\r\n : _this.quizzesGridModel.currentPage;\r\n if (window.innerWidth < 1200) {\r\n _this.quizzesGridModel.pageSize = 10;\r\n _this.quizzesGridModel.loadPage(currentPage);\r\n }\r\n else {\r\n _this.quizzesGridModel.pageSize = 9;\r\n _this.quizzesGridModel.loadPage(currentPage);\r\n }\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n this.getOwnersUrl();\r\n }\r\n HomeAuthorQuizzesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeAuthorQuizzesController.prototype.startIntro = function () {\r\n this.introService.startAuthorHomePageIntro();\r\n };\r\n HomeAuthorQuizzesController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeAuthorQuizzesController.prototype.startLoading = function () {\r\n };\r\n HomeAuthorQuizzesController.prototype.endLoading = function () {\r\n this.quizzesGridModel.entries.forEach(function (quiz) {\r\n quiz.subjectNameAndTitle = quiz.subjectName + \"/\" + quiz.title;\r\n });\r\n };\r\n HomeAuthorQuizzesController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n HomeAuthorQuizzesController.prototype.searchQuiz = function () {\r\n this.quizzesGridModel.loadPage(0);\r\n };\r\n HomeAuthorQuizzesController.prototype.loadQuizDetails = function (quizId) {\r\n this.$location.url(this.quizzesRouter.quizzesDetailsUrl(quizId));\r\n };\r\n HomeAuthorQuizzesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeAuthorQuizzesController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeAuthorQuizzesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeAuthorQuizzesController.prototype.getOwnersUrl = function () {\r\n var _this = this;\r\n this.userService.getOwnersUrl()\r\n .then(function (response) { return _this.owner = response; });\r\n };\r\n HomeAuthorQuizzesController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeAuthorQuizzesController.NAME, this.searchInput);\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n this.quizzesGridModel.loadCurrentPage();\r\n };\r\n HomeAuthorQuizzesController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeAuthorQuizzesController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n this.quizzesGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeAuthorQuizzesController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeAuthorQuizzesController.prototype.updateFilter = function (type, referenceObject) {\r\n this.countActiveFilter += this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeAuthorQuizzesController.NAME);\r\n };\r\n HomeAuthorQuizzesController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeAuthorQuizzesController.NAME, this.quizzesGridModel);\r\n };\r\n HomeAuthorQuizzesController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 768;\r\n };\r\n HomeAuthorQuizzesController.prototype.importQuiz = function () {\r\n this.$rootScope.$broadcast(Event_1.Event.QUIZ_SURVEY_IMPORT_UPDATE);\r\n $(\"#importQuizTemplate\").modal(\"toggle\");\r\n };\r\n HomeAuthorQuizzesController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (rec.right + popup.clientWidth >= document.body.clientWidth) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n HomeAuthorQuizzesController.NAME = \"home.HomeAuthorQuizzesController\";\r\n HomeAuthorQuizzesController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n UserService_1.UserService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return HomeAuthorQuizzesController;\r\n})();\r\nexports.HomeAuthorQuizzesController = HomeAuthorQuizzesController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../authcore/AuthManager\":25,\"../../branding/CustomBrandingService\":35,\"../../common/CommonFilterService\":49,\"../../components/dialog/DialogService\":166,\"../../components/models/Event\":170,\"../../info/IntroService\":292,\"../../quizzes/models/QuizType\":403,\"../../security/PermissionsService\":418,\"../../security/SecurityService\":420,\"../../urls/QuizzesRouter\":486,\"../../users/UserService\":499,\"../../users/models/UserRole\":507,\"../../utils/MenuHelper\":517,\"../../utils/ResizeViewService\":524,\"../../utils/UrlService\":528}],267:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar StatisticReportsService_1 = require(\"../../statistics/StatisticReportsService\");\r\nvar UserRole_1 = require(\"../../users/models/UserRole\");\r\nvar SecurityService_1 = require(\"../../security/SecurityService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar HomeAuthorReportsControllerController = (function () {\r\n function HomeAuthorReportsControllerController(statisticReportsService, securityService, introService) {\r\n var _this = this;\r\n this.statisticReportsService = statisticReportsService;\r\n this.securityService = securityService;\r\n this.introService = introService;\r\n this.currentMenuItemKey = \"\";\r\n this.isLoadingStatistic = true;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_AUTHOR_REPORTS_KEY);\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n this.securityService.demandAuthentication().demandUserBusinessRole(UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR]);\r\n this.statisticReportsService.getStatisticForAuthor()\r\n .then(function (data) {\r\n _this.statistic = data;\r\n _this.dailyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"DAY\"; })[0];\r\n _this.weeklyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"WEEK\"; })[0];\r\n _this.monthlyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"MONTH\"; })[0];\r\n var today = new Date(_this.monthlyStatistic.startDate);\r\n _this.currentMonth = today.toLocaleString(\"en-US\", { month: 'long' });\r\n _this.currentYear = today.getFullYear();\r\n }).finally(function () {\r\n _this.isLoadingStatistic = false;\r\n });\r\n }\r\n HomeAuthorReportsControllerController.prototype.startIntro = function () {\r\n this.introService.startAuthorHomePageIntro();\r\n };\r\n HomeAuthorReportsControllerController.NAME = \"home.HomeAuthorReportsController\";\r\n HomeAuthorReportsControllerController.$inject = [\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return HomeAuthorReportsControllerController;\r\n})();\r\nexports.HomeAuthorReportsControllerController = HomeAuthorReportsControllerController;\r\n},{\"../../info/IntroService\":292,\"../../security/SecurityService\":420,\"../../statistics/StatisticReportsService\":448,\"../../users/models/UserRole\":507,\"../../utils/MenuHelper\":517}],268:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar QuizzesRouter_1 = require(\"../../urls/QuizzesRouter\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar CustomBrandingService_1 = require(\"../../branding/CustomBrandingService\");\r\nvar DialogService_1 = require(\"../../components/dialog/DialogService\");\r\nvar QuizType_1 = require(\"../../quizzes/models/QuizType\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar ResizeViewService_1 = require(\"../../utils/ResizeViewService\");\r\nvar SecurityService_1 = require(\"../../security/SecurityService\");\r\nvar UserRole_1 = require(\"../../users/models/UserRole\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar Event_1 = require(\"../../components/models/Event\");\r\nvar HomeAuthorSurveysController = (function () {\r\n function HomeAuthorSurveysController($scope, $rootScope, $http, $location, $window, quizzesRouter, permissionsApi, url, userService, brandingService, dialogService, authManager, securityService, commonFilterService, introService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.quizzesRouter = quizzesRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.url = url;\r\n this.userService = userService;\r\n this.brandingService = brandingService;\r\n this.dialogService = dialogService;\r\n this.authManager = authManager;\r\n this.securityService = securityService;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.currentMenuItemKey = \"\";\r\n this.rowShow = new Map();\r\n this.type = [\r\n QuizType_1.QuizType[QuizType_1.QuizType.QUIZ],\r\n QuizType_1.QuizType[QuizType_1.QuizType.SURVEY],\r\n QuizType_1.QuizType[QuizType_1.QuizType.FLASHCARD]\r\n ];\r\n this.owner = [];\r\n this.countActiveFilter = 0;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_AUTHOR_SURVEYS_KEY);\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadUserProfile();\r\n this.securityService.demandAuthentication().demandUserBusinessRole(UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR]);\r\n var quizzesUrl = \"/api/quizzes/author/\" + QuizType_1.QuizType[QuizType_1.QuizType.SURVEY];\r\n this.quizzesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(quizzesUrl)));\r\n this.quizzesGridModel.addLoadingListener(this);\r\n if (window.innerWidth < 1200) {\r\n this.quizzesGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.quizzesGridModel.pageSize = 9;\r\n }\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n var currentPage = _this.quizzesGridModel.currentPage >= _this.quizzesGridModel.totalPageCount\r\n ? _this.quizzesGridModel.currentPage - 1\r\n : _this.quizzesGridModel.currentPage;\r\n if (window.innerWidth < 1200) {\r\n _this.quizzesGridModel.pageSize = 10;\r\n _this.quizzesGridModel.loadPage(currentPage);\r\n }\r\n else {\r\n _this.quizzesGridModel.pageSize = 9;\r\n _this.quizzesGridModel.loadPage(currentPage);\r\n }\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n this.getOwnersUrl();\r\n }\r\n HomeAuthorSurveysController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeAuthorSurveysController.prototype.startIntro = function () {\r\n this.introService.startAuthorHomePageIntro();\r\n };\r\n HomeAuthorSurveysController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeAuthorSurveysController.prototype.startLoading = function () {\r\n };\r\n HomeAuthorSurveysController.prototype.endLoading = function () {\r\n this.quizzesGridModel.entries.forEach(function (quiz) {\r\n quiz.subjectNameAndTitle = quiz.subjectName + \"/\" + quiz.title;\r\n });\r\n };\r\n HomeAuthorSurveysController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n HomeAuthorSurveysController.prototype.searchQuiz = function () {\r\n this.quizzesGridModel.loadPage(0);\r\n };\r\n HomeAuthorSurveysController.prototype.loadQuizDetails = function (quizId) {\r\n this.$location.url(this.quizzesRouter.surveysDetailsUrl(quizId));\r\n };\r\n HomeAuthorSurveysController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeAuthorSurveysController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeAuthorSurveysController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeAuthorSurveysController.prototype.getOwnersUrl = function () {\r\n var _this = this;\r\n this.userService.getOwnersUrl()\r\n .then(function (response) { return _this.owner = response; });\r\n };\r\n HomeAuthorSurveysController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeAuthorSurveysController.NAME, this.searchInput);\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n this.quizzesGridModel.loadCurrentPage();\r\n };\r\n HomeAuthorSurveysController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeAuthorSurveysController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n this.quizzesGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeAuthorSurveysController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeAuthorSurveysController.prototype.updateFilter = function (type, referenceObject) {\r\n this.countActiveFilter += this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeAuthorSurveysController.NAME);\r\n };\r\n HomeAuthorSurveysController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeAuthorSurveysController.NAME, this.quizzesGridModel);\r\n };\r\n HomeAuthorSurveysController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 768;\r\n };\r\n HomeAuthorSurveysController.prototype.importQuiz = function () {\r\n this.$rootScope.$broadcast(Event_1.Event.QUIZ_SURVEY_IMPORT_UPDATE);\r\n $(\"#importQuizTemplate\").modal(\"toggle\");\r\n };\r\n HomeAuthorSurveysController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (rec.right + popup.clientWidth >= document.body.clientWidth) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n HomeAuthorSurveysController.NAME = \"home.HomeAuthorSurveysController\";\r\n HomeAuthorSurveysController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n UserService_1.UserService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return HomeAuthorSurveysController;\r\n})();\r\nexports.HomeAuthorSurveysController = HomeAuthorSurveysController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../authcore/AuthManager\":25,\"../../branding/CustomBrandingService\":35,\"../../common/CommonFilterService\":49,\"../../components/dialog/DialogService\":166,\"../../components/models/Event\":170,\"../../info/IntroService\":292,\"../../quizzes/models/QuizType\":403,\"../../security/PermissionsService\":418,\"../../security/SecurityService\":420,\"../../urls/QuizzesRouter\":486,\"../../users/UserService\":499,\"../../users/models/UserRole\":507,\"../../utils/MenuHelper\":517,\"../../utils/ResizeViewService\":524,\"../../utils/UrlService\":528}],269:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../../urls/CoursesRouter\");\r\nvar ResizeViewService_1 = require(\"../../utils/ResizeViewService\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar ReferencedObjectType_1 = require(\"../../ReferencedObjectType\");\r\nvar PersonalService_1 = require(\"../../personal/PersonalService\");\r\nvar CustomBrandingService_1 = require(\"../../branding/CustomBrandingService\");\r\nvar StatisticReportsService_1 = require(\"../../statistics/StatisticReportsService\");\r\nvar NotificationsModalMenuItem_1 = require(\"../models/NotificationsModalMenuItem\");\r\nvar AssessmentsService_1 = require(\"../../assessments/AssessmentsService\");\r\nvar SocialService_1 = require(\"../../social/SocialService\");\r\nvar AssessmentsRouter_1 = require(\"../../urls/AssessmentsRouter\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar CommonHomeService_1 = require(\"../../common/CommonHomeService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar HomeInstructorCoursesController = (function () {\r\n function HomeInstructorCoursesController($scope, $rootScope, $http, $location, $window, coursesRouter, url, personalService, brandingService, statisticReportsService, assessmentsService, socialService, assessmentsRouter, commonFilterService, introService, permissionsApi, authManager, commonHomeService, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.coursesRouter = coursesRouter;\r\n this.url = url;\r\n this.personalService = personalService;\r\n this.brandingService = brandingService;\r\n this.statisticReportsService = statisticReportsService;\r\n this.assessmentsService = assessmentsService;\r\n this.socialService = socialService;\r\n this.assessmentsRouter = assessmentsRouter;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.commonHomeService = commonHomeService;\r\n this.userService = userService;\r\n this.rowShow = new Map();\r\n this.currentMenuItemKey = \"\";\r\n this.currentMenuItemName = \"\";\r\n this.notificationsModalMenu = NotificationsModalMenuItem_1.NOTIFICATIONS_MODAL_INSTRUCTOR_MENU;\r\n this.currentNotificationsModalMenuItemName = \"\";\r\n this.showNotificationModal = false;\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n this.countActiveFilter = 0;\r\n this.showExpired = false;\r\n this.coursesUrl = \"/api/courses/search\";\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_INSTRUCTOR_COURSES_KEY);\r\n this.updateGrid();\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadUserProfile();\r\n }\r\n HomeInstructorCoursesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeInstructorCoursesController.prototype.startIntro = function () {\r\n this.introService.startInstructorHomePageIntro();\r\n };\r\n HomeInstructorCoursesController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(HomeInstructorCoursesController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.coursesGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(HomeInstructorCoursesController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n }\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n HomeInstructorCoursesController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeInstructorCoursesController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.menuKey.topMenu == topMenuKey;\r\n };\r\n HomeInstructorCoursesController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n HomeInstructorCoursesController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n HomeInstructorCoursesController.prototype.searchCourse = function () {\r\n this.coursesGridModel.loadPage(0);\r\n };\r\n HomeInstructorCoursesController.prototype.addToFavorites = function (course) {\r\n this.rowShow.set(course.id, !this.rowShow.get(course.id));\r\n this.personalService.addToFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been added to your favorites\");\r\n course.favorite = true;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.already.in.favorite\") {\r\n INotifier_1.notifier.error(\"This course is already in your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n HomeInstructorCoursesController.prototype.removeFromFavorites = function (course) {\r\n this.rowShow.set(course.id, !this.rowShow.get(course.id));\r\n this.personalService.removeFromFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been removed from your favorites\");\r\n course.favorite = false;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.not.in.favorite\") {\r\n INotifier_1.notifier.error(\"Failed to remove from your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n HomeInstructorCoursesController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.searchString\")) {\r\n this.coursesGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.viewType\")) {\r\n this.coursesGridModel.filter.viewType = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.viewType\"));\r\n this.viewType = this.coursesGridModel.filter.viewType;\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.subjectId\")) {\r\n this.coursesGridModel.filter.subjectId = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.subjectId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.complexityLevel\")) {\r\n this.coursesGridModel.filter.complexityLevel = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.complexityLevel\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.languageId\")) {\r\n this.coursesGridModel.filter.languageId = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.languageId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.sourceId\")) {\r\n this.coursesGridModel.filter.sourceId = parseInt(sessionStorage.getItem(\"vhsCoursesFilter.sourceId\"));\r\n }\r\n };\r\n HomeInstructorCoursesController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeInstructorCoursesController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeInstructorCoursesController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n HomeInstructorCoursesController.prototype.applyFilter = function () {\r\n this.commonFilterService.applyGeneralFilter(this.coursesGridModel);\r\n };\r\n HomeInstructorCoursesController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeInstructorCoursesController.NAME, this.coursesGridModel);\r\n };\r\n HomeInstructorCoursesController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeInstructorCoursesController.NAME, this.searchInput);\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n HomeInstructorCoursesController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeInstructorCoursesController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeInstructorCoursesController.prototype.clearSearch = function () {\r\n this.coursesGridModel.filter.searchString = null;\r\n this.coursesGridModel.filter.viewType = null;\r\n this.coursesGridModel.filter.subjectId = null;\r\n this.coursesGridModel.filter.complexityLevel = null;\r\n this.coursesGridModel.filter.languageId = null;\r\n this.coursesGridModel.filter.sourceId = null;\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n this.coursesGridModel.filter.courseStatus = this.getCourseStatusList();\r\n this.viewType = 1;\r\n sessionStorage.removeItem(\"vhsCoursesFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.viewType\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.complexityLevel\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.languageId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.sourceId\");\r\n sessionStorage.removeItem(\"vhsCoursesFilter.courseStatus\");\r\n this.coursesGridModel.loadPage(0);\r\n };\r\n HomeInstructorCoursesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeInstructorCoursesController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeInstructorCoursesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeInstructorCoursesController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsCoursesFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsCoursesFilter.\" + key);\r\n }\r\n };\r\n HomeInstructorCoursesController.prototype.setCourseStatusFilter = function () {\r\n var statusList = this.getCourseStatusList();\r\n this.coursesGridModel.filter.courseStatus = statusList;\r\n sessionStorage.setItem(\"vhsCoursesFilter.courseStatus\", statusList.join(\",\"));\r\n this.coursesGridModel.loadPage(0);\r\n };\r\n HomeInstructorCoursesController.prototype.getCourseStatusList = function () {\r\n var statusList = [];\r\n if (this.notStartedStatus === true) {\r\n statusList.push('NOT_STARTED');\r\n }\r\n if (this.inProgressStatus === true) {\r\n statusList.push('IN_PROGRESS');\r\n }\r\n if (this.completedStatus === true) {\r\n statusList.push('COMPLETED');\r\n }\r\n return statusList;\r\n };\r\n HomeInstructorCoursesController.prototype.getCounts = function () {\r\n var _this = this;\r\n this.statisticReportsService.getInstructorNotificationsNewCounts().then(function (data) {\r\n _this.instructorCounts = data;\r\n });\r\n };\r\n HomeInstructorCoursesController.prototype.getNotificationsModalMenuItemName = function (notificationsModalMenu1) {\r\n switch (notificationsModalMenu1) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n return \"comments/day\";\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n return \"comments/week\";\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS:\r\n return \"new assessments\";\r\n }\r\n };\r\n HomeInstructorCoursesController.prototype.getNotificationsModalMenuItem = function (itemName) {\r\n switch (itemName) {\r\n case \"comments/day\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS;\r\n case \"comments/week\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS;\r\n case \"new assessments\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS;\r\n default:\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS;\r\n }\r\n };\r\n HomeInstructorCoursesController.prototype.showNotificationsDialog = function (itemName) {\r\n this.showNotificationModal = true;\r\n this.setCurrentNotificationsModalMenuItem(this.getNotificationsModalMenuItem(itemName));\r\n this.currentNotificationsModalMenuItemName = itemName;\r\n this.commonFilterService.showNotificationsDialog(window);\r\n };\r\n HomeInstructorCoursesController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 768;\r\n };\r\n HomeInstructorCoursesController.prototype.setCurrentNotificationsModalMenuItem = function (item) {\r\n var _this = this;\r\n this.currentNotificationsModalMenuItem = item;\r\n switch (this.currentNotificationsModalMenuItem) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n this.socialService.getCommentsAndDiscussionForInstructor(\"DAY\").then(function (data) { return _this.comments = data; });\r\n break;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n this.socialService.getCommentsAndDiscussionForInstructor(\"WEEK\").then(function (data) { return _this.comments = data; });\r\n break;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS:\r\n this.assessmentsService.getNewAssementsForInstructor().then(function (data) { return _this.newAssessments = data; });\r\n }\r\n this.currentNotificationsModalMenuItemName = this.getNotificationsModalMenuItemName(item);\r\n };\r\n HomeInstructorCoursesController.prototype.redirectToDiscussion = function (courseId, discussionId) {\r\n this.hideNotificationsModal();\r\n this.$location.url(this.coursesRouter.discussionUrl(courseId)).search(\"threadId\", discussionId);\r\n };\r\n HomeInstructorCoursesController.prototype.redirectToAssessment = function (assessmentId) {\r\n this.hideNotificationsModal();\r\n this.$location.url(this.assessmentsRouter.assessmentDetailsUrl(assessmentId));\r\n };\r\n HomeInstructorCoursesController.prototype.hideNotificationsModal = function () {\r\n $(\"#notificationsModal\").modal(\"hide\");\r\n $('.modal-backdrop').remove();\r\n };\r\n HomeInstructorCoursesController.prototype.getNotificationItemCount = function (item) {\r\n switch (item) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n return this.instructorCounts.dayCommentsCount;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n return this.instructorCounts.weekCommentsCount;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS:\r\n return this.instructorCounts.newAssessmentsCount;\r\n }\r\n };\r\n HomeInstructorCoursesController.prototype.updateGrid = function () {\r\n var _this = this;\r\n var coursesUrl = !this.showExpired\r\n ? \"/api/courses/search/instructor\"\r\n : \"/api/courses/search/instructor/expired\";\r\n this.coursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(coursesUrl)));\r\n this.getStorageFilters();\r\n if (window.innerWidth < 1200) {\r\n this.coursesGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.coursesGridModel.pageSize = 9;\r\n }\r\n this.setCourseStatusFilter();\r\n this.getCounts();\r\n this.viewType = 1;\r\n this.loadSearch();\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n var currentPage = _this.coursesGridModel.currentPage >= _this.coursesGridModel.totalPageCount\r\n ? _this.coursesGridModel.currentPage - 1\r\n : _this.coursesGridModel.currentPage;\r\n if (window.innerWidth < 1200) {\r\n _this.coursesGridModel.pageSize = 10;\r\n _this.coursesGridModel.loadPage(currentPage);\r\n }\r\n else {\r\n _this.coursesGridModel.pageSize = 9;\r\n _this.coursesGridModel.loadPage(currentPage);\r\n }\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n };\r\n HomeInstructorCoursesController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n HomeInstructorCoursesController.NAME = \"home.HomeInstructorCoursesController\";\r\n HomeInstructorCoursesController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n AssessmentsService_1.AssessmentsService.NAME,\r\n SocialService_1.SocialService.NAME,\r\n AssessmentsRouter_1.AssessmentsRouter.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n CommonHomeService_1.CommonHomeService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return HomeInstructorCoursesController;\r\n})();\r\nexports.HomeInstructorCoursesController = HomeInstructorCoursesController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../INotifier\":5,\"../../ReferencedObjectType\":7,\"../../assessments/AssessmentsService\":15,\"../../authcore/AuthManager\":25,\"../../branding/CustomBrandingService\":35,\"../../common/CommonFilterService\":49,\"../../common/CommonHomeService\":50,\"../../info/IntroService\":292,\"../../personal/PersonalService\":377,\"../../security/PermissionsService\":418,\"../../social/SocialService\":440,\"../../statistics/StatisticReportsService\":448,\"../../urls/AssessmentsRouter\":462,\"../../urls/CoursesRouter\":468,\"../../users/UserService\":499,\"../../utils/MenuHelper\":517,\"../../utils/ResizeViewService\":524,\"../../utils/UrlService\":528,\"../models/NotificationsModalMenuItem\":277}],270:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar LearningPathsRouter_1 = require(\"../../urls/LearningPathsRouter\");\r\nvar CoursesRouter_1 = require(\"../../urls/CoursesRouter\");\r\nvar LearningPathService_1 = require(\"../../learningPaths/LearningPathService\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar CourseProgressStatus_1 = require(\"../../courses/models/CourseProgressStatus\");\r\nvar LearningPathCourseInclusionType_1 = require(\"../../learningPaths/models/LearningPathCourseInclusionType\");\r\nvar StatisticReportsService_1 = require(\"../../statistics/StatisticReportsService\");\r\nvar AssessmentsRouter_1 = require(\"../../urls/AssessmentsRouter\");\r\nvar NotificationsModalMenuItem_1 = require(\"../models/NotificationsModalMenuItem\");\r\nvar SocialService_1 = require(\"../../social/SocialService\");\r\nvar AssessmentsService_1 = require(\"../../assessments/AssessmentsService\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar CommonHomeService_1 = require(\"../../common/CommonHomeService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar HomeInstructorLearningPathsController = (function () {\r\n function HomeInstructorLearningPathsController($scope, $rootScope, $http, $location, $window, url, learningPathsRouter, coursesRouter, learningPathService, permissionsApi, statisticReportsService, assessmentsRouter, socialService, assessmentsService, commonHomeService, commonFilterService, introService, authManager, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathService = learningPathService;\r\n this.permissionsApi = permissionsApi;\r\n this.statisticReportsService = statisticReportsService;\r\n this.assessmentsRouter = assessmentsRouter;\r\n this.socialService = socialService;\r\n this.assessmentsService = assessmentsService;\r\n this.commonHomeService = commonHomeService;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.authManager = authManager;\r\n this.userService = userService;\r\n this.isLearningPathsLoaded = false;\r\n this.currentMenuItemKey = \"\";\r\n this.currentMenuItemName = \"\";\r\n this.notificationsModalMenu = NotificationsModalMenuItem_1.NOTIFICATIONS_MODAL_INSTRUCTOR_MENU;\r\n this.currentNotificationsModalMenuItemName = \"\";\r\n this.showNotificationModal = false;\r\n this.countActiveFilter = 0;\r\n this.isInitSlick = false;\r\n this.showExpired = false;\r\n this.learningPathsUrl = \"/api/learningPaths/search\";\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_INSTRUCTOR_LEARNING_PATHS_KEY);\r\n this.http = $http;\r\n this.updateGrid();\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadUserProfile();\r\n }\r\n HomeInstructorLearningPathsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeInstructorLearningPathsController.prototype.startIntro = function () {\r\n this.introService.startInstructorHomePageIntro();\r\n };\r\n HomeInstructorLearningPathsController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(HomeInstructorLearningPathsController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.learningPathsGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(HomeInstructorLearningPathsController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n }\r\n };\r\n HomeInstructorLearningPathsController.prototype.startLoading = function () {\r\n this.isInitSlick = false;\r\n this.isLearningPathsLoaded = false;\r\n };\r\n HomeInstructorLearningPathsController.prototype.endLoading = function () {\r\n var _this = this;\r\n this.isLearningPathsLoaded = true;\r\n setTimeout(function () { return _this.initializeSlick(); }, 500);\r\n };\r\n HomeInstructorLearningPathsController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeInstructorLearningPathsController.prototype.setViewType = function (viewType) {\r\n var _this = this;\r\n if (viewType == 1) {\r\n setTimeout(function () { return _this.initializeSlick(); });\r\n }\r\n this.viewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeInstructorLearningPathsController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeInstructorLearningPathsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeInstructorLearningPathsController.prototype.loadLearningPath = function (learningPathId) {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(learningPathId));\r\n };\r\n HomeInstructorLearningPathsController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n HomeInstructorLearningPathsController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsLearningPathsFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.\" + key);\r\n }\r\n };\r\n HomeInstructorLearningPathsController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeInstructorLearningPathsController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeInstructorLearningPathsController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n HomeInstructorLearningPathsController.prototype.applyFilter = function () {\r\n this.commonFilterService.applyGeneralFilter(this.learningPathsGridModel);\r\n };\r\n HomeInstructorLearningPathsController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeInstructorLearningPathsController.NAME, this.learningPathsGridModel);\r\n };\r\n HomeInstructorLearningPathsController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeInstructorLearningPathsController.NAME, this.searchInput);\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n this.learningPathsGridModel.loadCurrentPage();\r\n };\r\n HomeInstructorLearningPathsController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeInstructorLearningPathsController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n this.learningPathsGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeInstructorLearningPathsController.prototype.clearSearch = function () {\r\n this.learningPathsGridModel.filter.searchString = null;\r\n this.learningPathsGridModel.filter.viewType = null;\r\n this.learningPathsGridModel.filter.subjectId = null;\r\n this.learningPathsGridModel.filter.languageId = null;\r\n this.learningPathsGridModel.filter.sourceId = null;\r\n this.viewType = 1;\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.viewType\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.languageId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.sourceId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.learningPathStatus\");\r\n this.learningPathsGridModel.loadPage(0);\r\n };\r\n HomeInstructorLearningPathsController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.searchString\")) {\r\n this.learningPathsGridModel.filter.searchString = sessionStorage.getItem(\"vhsLearningPathsFilter.searchString\");\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.viewType\")) {\r\n this.learningPathsGridModel.filter.viewType = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.viewType\"));\r\n this.viewType = this.learningPathsGridModel.filter.viewType;\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.subjectId\")) {\r\n this.learningPathsGridModel.filter.subjectId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.subjectId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.languageId\")) {\r\n this.learningPathsGridModel.filter.languageId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.languageId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.sourceId\")) {\r\n this.learningPathsGridModel.filter.sourceId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.sourceId\"));\r\n }\r\n };\r\n HomeInstructorLearningPathsController.prototype.getCompletedMandatoryCourses = function (coursesByLP) {\r\n var countCompletedCourses = 0;\r\n var countMandatoryCourses = 0;\r\n for (var _i = 0; _i < coursesByLP.length; _i++) {\r\n var course = coursesByLP[_i];\r\n if (course.courseInclusionType === LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.MANDATORY]) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n countCompletedCourses++;\r\n }\r\n countMandatoryCourses++;\r\n }\r\n }\r\n return countCompletedCourses + ' of ' + countMandatoryCourses;\r\n };\r\n HomeInstructorLearningPathsController.prototype.getCompletedElectiveCourses = function (coursesByLP) {\r\n var countCompletedCourses = 0;\r\n var countMandatoryCourses = 0;\r\n for (var _i = 0; _i < coursesByLP.length; _i++) {\r\n var course = coursesByLP[_i];\r\n if (course.courseInclusionType === LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.ELECTIVE]) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n countCompletedCourses++;\r\n }\r\n countMandatoryCourses++;\r\n }\r\n }\r\n return countCompletedCourses + ' of ' + countMandatoryCourses;\r\n };\r\n HomeInstructorLearningPathsController.prototype.getCounts = function () {\r\n var _this = this;\r\n this.statisticReportsService.getInstructorNotificationsCounts().then(function (data) {\r\n _this.instructorCounts = data;\r\n });\r\n };\r\n HomeInstructorLearningPathsController.prototype.getNotificationsModalMenuItemName = function (notificationsModalMenu1) {\r\n switch (notificationsModalMenu1) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n return \"comments/day\";\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n return \"comments/week\";\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS:\r\n return \"new assessments\";\r\n }\r\n };\r\n HomeInstructorLearningPathsController.prototype.getNotificationsModalMenuItem = function (itemName) {\r\n switch (itemName) {\r\n case \"comments/day\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS;\r\n case \"comments/week\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS;\r\n case \"new assessments\":\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS;\r\n default:\r\n return NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS;\r\n }\r\n };\r\n HomeInstructorLearningPathsController.prototype.showNotificationsDialog = function (itemName) {\r\n this.showNotificationModal = true;\r\n this.setCurrentNotificationsModalMenuItem(this.getNotificationsModalMenuItem(itemName));\r\n this.currentNotificationsModalMenuItemName = itemName;\r\n this.commonFilterService.showNotificationsDialog(window);\r\n };\r\n HomeInstructorLearningPathsController.prototype.setCurrentNotificationsModalMenuItem = function (item) {\r\n var _this = this;\r\n this.currentNotificationsModalMenuItem = item;\r\n switch (this.currentNotificationsModalMenuItem) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n this.socialService.getCommentsAndDiscussionForInstructor(\"DAY\").then(function (data) { return _this.comments = data; });\r\n break;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n this.socialService.getCommentsAndDiscussionForInstructor(\"WEEK\").then(function (data) { return _this.comments = data; });\r\n break;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS:\r\n this.assessmentsService.getNewAssementsForInstructor().then(function (data) { return _this.newAssessments = data; });\r\n }\r\n this.currentNotificationsModalMenuItemName = this.getNotificationsModalMenuItemName(item);\r\n };\r\n HomeInstructorLearningPathsController.prototype.redirectToDiscussion = function (courseId, discussionId) {\r\n this.hideNotificationsModal();\r\n this.$location.url(this.coursesRouter.discussionUrl(courseId)).search(\"threadId\", discussionId);\r\n };\r\n HomeInstructorLearningPathsController.prototype.redirectToAssessment = function (assessmentId) {\r\n this.hideNotificationsModal();\r\n this.$location.url(this.assessmentsRouter.assessmentDetailsUrl(assessmentId));\r\n };\r\n HomeInstructorLearningPathsController.prototype.hideNotificationsModal = function () {\r\n $(\"#notificationsModal\").modal(\"hide\");\r\n $('.modal-backdrop').remove();\r\n };\r\n HomeInstructorLearningPathsController.prototype.getNotificationItemCount = function (item) {\r\n switch (item) {\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.DAY_COMMENTS:\r\n return this.instructorCounts.dayCommentsCount;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.WEEK_COMMENTS:\r\n return this.instructorCounts.weekCommentsCount;\r\n case NotificationsModalMenuItem_1.NotificationsModalMenuItem.NEW_ASSESSMENTS:\r\n return this.instructorCounts.newAssessmentsCount;\r\n }\r\n };\r\n HomeInstructorLearningPathsController.prototype.initializeSlick = function () {\r\n this.isInitSlick = this.commonHomeService.initializeSlick(this.learningPathsGridModel, false);\r\n };\r\n HomeInstructorLearningPathsController.prototype.showAllLP = function (learningPathId) {\r\n this.isShowAllCards = true;\r\n this.commonHomeService.showAllLP(learningPathId);\r\n };\r\n HomeInstructorLearningPathsController.prototype.hideAllLP = function (learningPathId) {\r\n this.isShowAllCards = false;\r\n this.commonHomeService.hideAllLP(learningPathId);\r\n };\r\n HomeInstructorLearningPathsController.prototype.openCard = function (indexPlanLp, learningPathId) {\r\n this.commonHomeService.openCard(indexPlanLp, learningPathId, this.isShowAllCards);\r\n };\r\n HomeInstructorLearningPathsController.prototype.updateGrid = function () {\r\n var _this = this;\r\n this.learningPathsUrl = !this.showExpired\r\n ? \"/api/learningPaths/search/instructor\"\r\n : \"/api/learningPaths/search/instructor/expired\";\r\n this.learningPathsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.http, this.url.service(this.learningPathsUrl)));\r\n this.getStorageFilters();\r\n this.learningPathsGridModel.pageSize = 4;\r\n this.learningPathsGridModel.addLoadingListener(this);\r\n this.oldSearchViewType = this.viewType;\r\n this.window = angular.element(this.$window);\r\n if (this.window.innerWidth < 992) {\r\n this.startWindowWidth = 0;\r\n }\r\n else {\r\n this.startWindowWidth = 10000;\r\n }\r\n this.window.bind('resize', function () {\r\n if (window.innerWidth < 992 && window.innerWidth < _this.startWindowWidth && !_this.viewType) {\r\n _this.oldSearchViewType = _this.viewType;\r\n _this.startWindowWidth = 0;\r\n _this.viewType = 1;\r\n }\r\n if (window.innerWidth >= 992 && window.innerWidth > _this.startWindowWidth && !_this.oldSearchViewType) {\r\n _this.viewType = _this.oldSearchViewType;\r\n _this.startWindowWidth = 10000;\r\n }\r\n });\r\n this.getCounts();\r\n this.viewType = 1;\r\n this.loadSearch();\r\n };\r\n HomeInstructorLearningPathsController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 768;\r\n };\r\n HomeInstructorLearningPathsController.prototype.getCourseDatesString = function (course) {\r\n var courseDates = new Map();\r\n if (course.endDate) {\r\n courseDates.set(\"endDate\", new Date(course.endDate).toLocaleDateString());\r\n }\r\n if (!course.endDate || course.startDate > Date.now()) {\r\n courseDates.set(\"startDate\", new Date(course.startDate).toLocaleDateString());\r\n }\r\n return courseDates;\r\n };\r\n HomeInstructorLearningPathsController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (rec.right + popup.clientWidth >= document.body.clientWidth) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n HomeInstructorLearningPathsController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n HomeInstructorLearningPathsController.NAME = \"home.HomeInstructorLearningPathsController\";\r\n HomeInstructorLearningPathsController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n AssessmentsRouter_1.AssessmentsRouter.NAME,\r\n SocialService_1.SocialService.NAME,\r\n AssessmentsService_1.AssessmentsService.NAME,\r\n CommonHomeService_1.CommonHomeService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return HomeInstructorLearningPathsController;\r\n})();\r\nexports.HomeInstructorLearningPathsController = HomeInstructorLearningPathsController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../assessments/AssessmentsService\":15,\"../../authcore/AuthManager\":25,\"../../common/CommonFilterService\":49,\"../../common/CommonHomeService\":50,\"../../courses/models/CourseProgressStatus\":222,\"../../info/IntroService\":292,\"../../learningPaths/LearningPathService\":320,\"../../learningPaths/models/LearningPathCourseInclusionType\":324,\"../../security/PermissionsService\":418,\"../../social/SocialService\":440,\"../../statistics/StatisticReportsService\":448,\"../../urls/AssessmentsRouter\":462,\"../../urls/CoursesRouter\":468,\"../../urls/LearningPathsRouter\":477,\"../../users/UserService\":499,\"../../utils/MenuHelper\":517,\"../../utils/UrlService\":528,\"../models/NotificationsModalMenuItem\":277}],271:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar StatisticReportsService_1 = require(\"../../statistics/StatisticReportsService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar HomeInstructorReportsController = (function () {\r\n function HomeInstructorReportsController(statisticReportsService, introService) {\r\n var _this = this;\r\n this.statisticReportsService = statisticReportsService;\r\n this.introService = introService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_INSTRUCTOR_REPORTS_KEY);\r\n statisticReportsService.getInfoForInstructor().then(function (data) {\r\n _this.statistic = data;\r\n _this.dailyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"DAY\"; })[0];\r\n _this.weeklyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"WEEK\"; })[0];\r\n _this.monthlyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"MONTH\"; })[0];\r\n var today = new Date(_this.monthlyStatistic.startDate);\r\n _this.currentMonth = today.toLocaleString(\"en-US\", { month: 'long' });\r\n _this.currentYear = today.getFullYear();\r\n });\r\n }\r\n HomeInstructorReportsController.prototype.calcHours = function (timeInMinutes) {\r\n return Math.floor(timeInMinutes / 60);\r\n };\r\n HomeInstructorReportsController.prototype.calcMinutesRemainder = function (timeInMinutes) {\r\n return timeInMinutes % 60;\r\n };\r\n HomeInstructorReportsController.prototype.startIntro = function () {\r\n this.introService.startInstructorHomePageIntro();\r\n };\r\n HomeInstructorReportsController.NAME = \"home.HomeInstructorReportsController\";\r\n HomeInstructorReportsController.$inject = [\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return HomeInstructorReportsController;\r\n})();\r\nexports.HomeInstructorReportsController = HomeInstructorReportsController;\r\n},{\"../../info/IntroService\":292,\"../../statistics/StatisticReportsService\":448,\"../../utils/MenuHelper\":517}],272:[function(require,module,exports){\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar SecurityService_1 = require(\"../../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../../urls/CoursesRouter\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar ResizeViewService_1 = require(\"../../utils/ResizeViewService\");\r\nvar CourseService_1 = require(\"../../courses/CourseService\");\r\nvar ProgressService_1 = require(\"../../courses/ProgressService\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar PersonalService_1 = require(\"../../personal/PersonalService\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar CommonHomeService_1 = require(\"../../common/CommonHomeService\");\r\nvar HomeCoursesController = (function () {\r\n function HomeCoursesController($scope, $rootScope, $http, $location, $window, url, securityService, userService, coursesRouter, courseService, progressService, permissionsApi, authManager, personalService, commonFilterService, introService, commonHomeService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.coursesRouter = coursesRouter;\r\n this.courseService = courseService;\r\n this.progressService = progressService;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.personalService = personalService;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.commonHomeService = commonHomeService;\r\n this.rowShow = new Map();\r\n this.courses = new Map();\r\n this.isCoursesLoaded = false;\r\n this.currentMenuItemKey = \"\";\r\n this.currentMenuItemName = \"\";\r\n this.countActiveFilter = 0;\r\n this.showExpired = false;\r\n this.coursesUrl = \"/api/courses/search\";\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_COURSES_KEY);\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadUserProfile();\r\n }\r\n this.updateGrid();\r\n }\r\n HomeCoursesController.prototype.startIntro = function () {\r\n this.introService.startLearnerHomePageIntro();\r\n };\r\n HomeCoursesController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(HomeCoursesController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.coursesGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(HomeCoursesController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n }\r\n var topStatus = this.commonFilterService.getTopStatus(HomeCoursesController.NAME);\r\n if (topStatus) {\r\n this.applyTopStatus(topStatus);\r\n }\r\n };\r\n HomeCoursesController.prototype.startLoading = function () {\r\n this.isCoursesLoaded = false;\r\n this.courses = new Map();\r\n };\r\n HomeCoursesController.prototype.endLoading = function () {\r\n var _this = this;\r\n this.coursesGridModel.entries\r\n .forEach(function (course) {\r\n _this.courses.set(course.id, course);\r\n });\r\n this.isCoursesLoaded = true;\r\n };\r\n HomeCoursesController.prototype.loadCourse = function (courseId) {\r\n if (this.courses.get(courseId).permissions.view) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"You are not granted permission to view this course\");\r\n }\r\n };\r\n HomeCoursesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeCoursesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n if (this.viewType === 0) {\r\n this.coursesGridModel.filter.viewType = 0;\r\n }\r\n else {\r\n this.coursesGridModel.filter.viewType = null;\r\n }\r\n };\r\n HomeCoursesController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeCoursesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeCoursesController.prototype.downloadCourseTranscriptReport = function (courseId, courseProgressId) {\r\n var _this = this;\r\n var parameters = {\r\n userId: this.userProfile.id,\r\n courseId: courseId,\r\n courseProgressId: courseProgressId\r\n };\r\n this.progressService.downloadCourseTranscriptReport(parameters)\r\n .then(function (result) {\r\n _this.$window.open(result);\r\n });\r\n };\r\n HomeCoursesController.prototype.downloadGeneralTranscriptReport = function () {\r\n var _this = this;\r\n var parameters = {\r\n userId: this.userProfile.id\r\n };\r\n this.progressService.downloadGeneralTranscriptReport(parameters)\r\n .then(function (result) {\r\n _this.$window.open(result);\r\n });\r\n };\r\n HomeCoursesController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeCoursesController.prototype.updateTopStatus = function (status) {\r\n this.applyTopStatus(status);\r\n this.commonFilterService.saveTopStatus(HomeCoursesController.NAME, status);\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n HomeCoursesController.prototype.applyTopStatus = function (status) {\r\n switch (status) {\r\n case 'ALL':\r\n this.coursesGridModel.filter.courseStatus = \"NOT_STARTED,STARTED,COMPLETED\";\r\n break;\r\n case 'NOT_STARTED':\r\n this.coursesGridModel.filter.courseStatus = \"NOT_STARTED\";\r\n break;\r\n case 'STARTED':\r\n this.coursesGridModel.filter.courseStatus = \"STARTED\";\r\n break;\r\n case 'COMPLETED':\r\n this.coursesGridModel.filter.courseStatus = \"COMPLETED\";\r\n break;\r\n }\r\n };\r\n HomeCoursesController.prototype.getActiveStatusName = function () {\r\n switch (this.coursesGridModel.filter.courseStatus) {\r\n case 'NOT_STARTED,STARTED,COMPLETED':\r\n return \"All\";\r\n case 'NOT_STARTED':\r\n return \"New\";\r\n case 'STARTED':\r\n return \"In-Progress\";\r\n case 'COMPLETED':\r\n return \"Completed\";\r\n default:\r\n return 'All';\r\n }\r\n };\r\n HomeCoursesController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeCoursesController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n HomeCoursesController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeCoursesController.NAME, this.coursesGridModel);\r\n };\r\n HomeCoursesController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeCoursesController.NAME, this.searchInput);\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n HomeCoursesController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeCoursesController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeCoursesController.prototype.downloadCertificate = function (courseId, courseProgressId) {\r\n var _this = this;\r\n this.courseService.getUserCertificates(courseId, courseProgressId).then(function (certificates) {\r\n if (!!certificates && certificates.length > 0) {\r\n for (var _i = 0; _i < certificates.length; _i++) {\r\n var cert = certificates[_i];\r\n _this.personalService.downloadCertificate(cert.certificateId)\r\n .then(function (result) { return _this.$window.open(result); });\r\n }\r\n }\r\n });\r\n };\r\n HomeCoursesController.prototype.updateGrid = function () {\r\n var _this = this;\r\n this.viewType = 1;\r\n this.coursesUrl = this.showExpired\r\n ? \"/api/courses/search/home/learner/myProgress/expired\"\r\n : \"/api/courses/search/home/learner/myProgress\";\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n var windowElement = angular.element(this.$window);\r\n windowElement.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n windowElement.unbind('resize');\r\n });\r\n this.coursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(this.coursesUrl)));\r\n this.coursesGridModel.filter.courseStatus = \"NOT_STARTED,STARTED,COMPLETED,EXPIRED\";\r\n this.getStorageFilters();\r\n if (window.innerWidth < 1800) {\r\n this.coursesGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.coursesGridModel.pageSize = 9;\r\n }\r\n this.coursesGridModel.addLoadingListener(this);\r\n this.coursesGridModel.entries.forEach(function (e) {\r\n _this.rowShow.set(e.id, false);\r\n });\r\n };\r\n HomeCoursesController.prototype.getShortCourseName = function (name) {\r\n return name.length > 40 ? name.substring(0, 40) + '...' : name;\r\n };\r\n HomeCoursesController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n HomeCoursesController.NAME = \"home.HomeCoursesController\";\r\n HomeCoursesController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n CommonHomeService_1.CommonHomeService.NAME\r\n ];\r\n return HomeCoursesController;\r\n})();\r\nexports.HomeCoursesController = HomeCoursesController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../INotifier\":5,\"../../authcore/AuthManager\":25,\"../../common/CommonFilterService\":49,\"../../common/CommonHomeService\":50,\"../../courses/CourseService\":211,\"../../courses/ProgressService\":219,\"../../info/IntroService\":292,\"../../personal/PersonalService\":377,\"../../security/PermissionsService\":418,\"../../security/SecurityService\":420,\"../../urls/CoursesRouter\":468,\"../../users/UserService\":499,\"../../utils/MenuHelper\":517,\"../../utils/ResizeViewService\":524,\"../../utils/UrlService\":528}],273:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar QuizzesRouter_1 = require(\"../../urls/QuizzesRouter\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar CustomBrandingService_1 = require(\"../../branding/CustomBrandingService\");\r\nvar DialogService_1 = require(\"../../components/dialog/DialogService\");\r\nvar QuizType_1 = require(\"../../quizzes/models/QuizType\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar ResizeViewService_1 = require(\"../../utils/ResizeViewService\");\r\nvar SecurityService_1 = require(\"../../security/SecurityService\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar Event_1 = require(\"../../components/models/Event\");\r\nvar HomeFlashcardsController = (function () {\r\n function HomeFlashcardsController($scope, $rootScope, $http, $location, $window, quizzesRouter, permissionsApi, url, userService, brandingService, dialogService, authManager, securityService, commonFilterService, introService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.quizzesRouter = quizzesRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.url = url;\r\n this.userService = userService;\r\n this.brandingService = brandingService;\r\n this.dialogService = dialogService;\r\n this.authManager = authManager;\r\n this.securityService = securityService;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.currentMenuItemKey = \"\";\r\n this.rowShow = new Map();\r\n this.type = [\r\n QuizType_1.QuizType[QuizType_1.QuizType.QUIZ],\r\n QuizType_1.QuizType[QuizType_1.QuizType.SURVEY],\r\n QuizType_1.QuizType[QuizType_1.QuizType.FLASHCARD]\r\n ];\r\n this.owner = [];\r\n this.countActiveFilter = 0;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_FLASHCARDS_KEY);\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.loadUserProfile();\r\n var quizzesUrl = \"/api/quizzes/\" + QuizType_1.QuizType[QuizType_1.QuizType.FLASHCARD];\r\n this.quizzesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(quizzesUrl)));\r\n this.quizzesGridModel.addLoadingListener(this);\r\n if (window.innerWidth < 1200) {\r\n this.quizzesGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.quizzesGridModel.pageSize = 9;\r\n }\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n if (window.innerWidth < 1200) {\r\n _this.quizzesGridModel.pageSize = 10;\r\n _this.quizzesGridModel.loadPage(0);\r\n }\r\n else {\r\n _this.quizzesGridModel.pageSize = 9;\r\n _this.quizzesGridModel.loadPage(0);\r\n }\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n this.getOwnersUrl();\r\n }\r\n HomeFlashcardsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeFlashcardsController.prototype.startIntro = function () {\r\n this.introService.startAuthorHomePageIntro();\r\n };\r\n HomeFlashcardsController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeFlashcardsController.prototype.startLoading = function () {\r\n };\r\n HomeFlashcardsController.prototype.endLoading = function () {\r\n this.quizzesGridModel.entries.forEach(function (quiz) {\r\n quiz.subjectNameAndTitle = quiz.subjectName + \"/\" + quiz.title;\r\n });\r\n };\r\n HomeFlashcardsController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n HomeFlashcardsController.prototype.searchQuiz = function () {\r\n this.quizzesGridModel.loadPage(0);\r\n };\r\n HomeFlashcardsController.prototype.loadQuizDetails = function (quizId) {\r\n this.$location.url(this.quizzesRouter.flashcardsDetailsUrl(quizId));\r\n };\r\n HomeFlashcardsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeFlashcardsController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeFlashcardsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeFlashcardsController.prototype.getOwnersUrl = function () {\r\n var _this = this;\r\n this.userService.getOwnersUrl()\r\n .then(function (response) { return _this.owner = response; });\r\n };\r\n HomeFlashcardsController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeFlashcardsController.NAME, this.searchInput);\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n this.quizzesGridModel.loadCurrentPage();\r\n };\r\n HomeFlashcardsController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeFlashcardsController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n this.quizzesGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeFlashcardsController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeFlashcardsController.prototype.updateFilter = function (type, referenceObject) {\r\n this.countActiveFilter += this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeFlashcardsController.NAME);\r\n };\r\n HomeFlashcardsController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeFlashcardsController.NAME, this.quizzesGridModel);\r\n };\r\n HomeFlashcardsController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 768;\r\n };\r\n HomeFlashcardsController.prototype.importQuiz = function () {\r\n this.$rootScope.$broadcast(Event_1.Event.QUIZ_SURVEY_IMPORT_UPDATE);\r\n $(\"#importQuizTemplate\").modal(\"toggle\");\r\n };\r\n HomeFlashcardsController.NAME = \"home.HomeFlashcardsController\";\r\n HomeFlashcardsController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n UserService_1.UserService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return HomeFlashcardsController;\r\n})();\r\nexports.HomeFlashcardsController = HomeFlashcardsController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../authcore/AuthManager\":25,\"../../branding/CustomBrandingService\":35,\"../../common/CommonFilterService\":49,\"../../components/dialog/DialogService\":166,\"../../components/models/Event\":170,\"../../info/IntroService\":292,\"../../quizzes/models/QuizType\":403,\"../../security/PermissionsService\":418,\"../../security/SecurityService\":420,\"../../urls/QuizzesRouter\":486,\"../../users/UserService\":499,\"../../utils/MenuHelper\":517,\"../../utils/ResizeViewService\":524,\"../../utils/UrlService\":528}],274:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../../urls/CoursesRouter\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar LearningPathsRouter_1 = require(\"../../urls/LearningPathsRouter\");\r\nvar LearningPathService_1 = require(\"../../learningPaths/LearningPathService\");\r\nvar LearningPathCourseInclusionType_1 = require(\"../../learningPaths/models/LearningPathCourseInclusionType\");\r\nvar CourseProgressStatus_1 = require(\"../../courses/models/CourseProgressStatus\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar LearningPathProgressService_1 = require(\"../../learningPaths/LearningPathProgressService\");\r\nvar parseInt = kendo.parseInt;\r\nvar CommonHomeService_1 = require(\"../../common/CommonHomeService\");\r\nvar PersonalService_1 = require(\"../../personal/PersonalService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar DialogService_1 = require(\"../../components/dialog/DialogService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar HomeLearningPathsController = (function () {\r\n function HomeLearningPathsController($scope, $rootScope, $http, $location, $window, url, learningPathsRouter, coursesRouter, learningPathService, permissionsApi, authManager, commonHomeService, learningPathProgressService, commonFilterService, personalService, introService, dialogService, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathService = learningPathService;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.commonHomeService = commonHomeService;\r\n this.learningPathProgressService = learningPathProgressService;\r\n this.commonFilterService = commonFilterService;\r\n this.personalService = personalService;\r\n this.introService = introService;\r\n this.dialogService = dialogService;\r\n this.userService = userService;\r\n this.isLearningPathsLoaded = false;\r\n this.currentMenuItemKey = \"\";\r\n this.currentMenuItemName = \"\";\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n this.viltAutoRegisterRequired = false;\r\n this.countActiveFilter = 0;\r\n this.learningPathStatus = \"NOT_STARTED,STARTED,COMPLETED\";\r\n this.isInitSlick = false;\r\n this.showExpired = false;\r\n this.learningPathsUrl = \"/api/learningPaths/search\";\r\n this.isConfirmedLearningPaths = [];\r\n this.isDisableConfirmProgressButton = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_LEARNING_PATH_KEY);\r\n this.http = $http;\r\n this.viltAutoRegisterRequired = $location.search()[CoursesRouter_1.CoursesRouter.VILT_SESSIONS_AUTO_REGISTER_REQUIRED] || false;\r\n if (this.authManager.isAuthenticated()) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n if (this.viltAutoRegisterRequired) {\r\n var url_1 = this.$window.location.href.split(\"#\")[0] + \"#/home/learningPaths?role=LEARNER\";\r\n this.$window.location.replace(url_1);\r\n this.dialogService.confirm(\"Good news! You already have an access.\", {\r\n title: \"Course already available\",\r\n hideCancelButton: true\r\n });\r\n }\r\n }\r\n this.loadUserProfile();\r\n this.updateGrid();\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n }\r\n HomeLearningPathsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n HomeLearningPathsController.prototype.startIntro = function () {\r\n this.introService.startLearnerHomePageIntro();\r\n };\r\n HomeLearningPathsController.prototype.getStorageFilters = function (isInit) {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(HomeLearningPathsController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.learningPathsGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(HomeLearningPathsController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n }\r\n var topStatus = this.commonFilterService.getTopStatus(HomeLearningPathsController.NAME);\r\n if (topStatus) {\r\n this.applyTopStatus(topStatus);\r\n }\r\n if (!isInit) {\r\n this.learningPathsGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeLearningPathsController.prototype.startLoading = function () {\r\n this.isInitSlick = false;\r\n this.isLearningPathsLoaded = false;\r\n };\r\n HomeLearningPathsController.prototype.endLoading = function () {\r\n var _this = this;\r\n var lpArray = [];\r\n this.learningPathsGridModel.entries\r\n .forEach(function (learningPath) {\r\n if (learningPath.progressStatus === \"NOT_STARTED\" || learningPath.learningPathProgressEntries.length === 0) {\r\n lpArray.push(angular.copy(learningPath));\r\n }\r\n else {\r\n for (var _i = 0, _a = learningPath.learningPathProgressEntries; _i < _a.length; _i++) {\r\n var progress = _a[_i];\r\n var courseCopy = angular.copy(learningPath);\r\n if (!!progress) {\r\n courseCopy.learningPathProgressId = progress.id;\r\n courseCopy.progressStatus = progress.status;\r\n courseCopy.progressStartDate = progress.startDate;\r\n courseCopy.progressCompletedDate = progress.completionDate;\r\n }\r\n else {\r\n courseCopy.progressStatus = \"NOT_STARTER\";\r\n }\r\n lpArray.push(courseCopy);\r\n }\r\n }\r\n });\r\n this.learningPathsGridModel.entries = lpArray;\r\n this.isLearningPathsLoaded = true;\r\n setTimeout(function () { return _this.initializeSlick(); }, 500);\r\n };\r\n HomeLearningPathsController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n HomeLearningPathsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n if (this.viewType === 0) {\r\n this.learningPathsGridModel.pageSize = 10;\r\n this.learningPathsGridModel.filter.viewType = 0;\r\n }\r\n else {\r\n this.learningPathsGridModel.pageSize = 4;\r\n this.learningPathsGridModel.filter.viewType = null;\r\n }\r\n this.learningPathsGridModel.loadPage(0);\r\n };\r\n HomeLearningPathsController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeLearningPathsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeLearningPathsController.prototype.loadLearningPath = function (learningPathId) {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(learningPathId));\r\n };\r\n HomeLearningPathsController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n HomeLearningPathsController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsLearningPathsFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.\" + key);\r\n }\r\n };\r\n HomeLearningPathsController.prototype.clearSearch = function () {\r\n this.learningPathsGridModel.filter.searchString = null;\r\n this.learningPathsGridModel.filter.viewType = null;\r\n this.learningPathsGridModel.filter.subjectId = null;\r\n this.learningPathsGridModel.filter.languageId = null;\r\n this.learningPathsGridModel.filter.sourceId = null;\r\n this.viewType = 1;\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n this.learningPathsGridModel.filter.learningPathStatus = this.getCourseStatusList();\r\n this.learningPathStatus = \"NOT_STARTED,STARTED,COMPLETED\";\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.viewType\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.languageId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.sourceId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.learningPathStatus\");\r\n this.learningPathsGridModel.loadPage(0);\r\n };\r\n HomeLearningPathsController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.searchString\")) {\r\n this.learningPathsGridModel.filter.searchString = sessionStorage.getItem(\"vhsLearningPathsFilter.searchString\");\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.sourceId\")) {\r\n this.learningPathsGridModel.filter.sourceId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.sourceId\"));\r\n }\r\n };\r\n HomeLearningPathsController.prototype.getCourseStatusList = function () {\r\n var statusList = [];\r\n if (this.notStartedStatus === true) {\r\n statusList.push('NOT_STARTED');\r\n }\r\n if (this.inProgressStatus === true) {\r\n statusList.push('STARTED');\r\n }\r\n if (this.completedStatus === true) {\r\n statusList.push('COMPLETED');\r\n }\r\n return statusList;\r\n };\r\n HomeLearningPathsController.prototype.getCompletedMandatoryCourses = function (coursesByLP) {\r\n var countCompletedCourses = 0;\r\n var countMandatoryCourses = 0;\r\n if (!!coursesByLP) {\r\n for (var _i = 0; _i < coursesByLP.length; _i++) {\r\n var course = coursesByLP[_i];\r\n if (course.courseInclusionType === LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.MANDATORY]) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n countCompletedCourses++;\r\n }\r\n countMandatoryCourses++;\r\n }\r\n }\r\n }\r\n return countCompletedCourses + ' of ' + countMandatoryCourses;\r\n };\r\n HomeLearningPathsController.prototype.getCompletedElectiveCourses = function (coursesByLP) {\r\n var countCompletedCourses = 0;\r\n var countMandatoryCourses = 0;\r\n if (!!coursesByLP) {\r\n for (var _i = 0; _i < coursesByLP.length; _i++) {\r\n var course = coursesByLP[_i];\r\n if (course.courseInclusionType === LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.ELECTIVE]) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n countCompletedCourses++;\r\n }\r\n countMandatoryCourses++;\r\n }\r\n }\r\n }\r\n return countCompletedCourses + ' of ' + countMandatoryCourses;\r\n };\r\n HomeLearningPathsController.prototype.confirmProgress = function (learningPathId) {\r\n var _this = this;\r\n this.isDisableConfirmProgressButton = true;\r\n this.learningPathProgressService.confirmLearningPathProgress(learningPathId)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Learning Path progress has been recalculated\");\r\n _this.isConfirmedLearningPaths.push(learningPathId);\r\n })\r\n .finally(function () {\r\n _this.isDisableConfirmProgressButton = false;\r\n });\r\n };\r\n HomeLearningPathsController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeLearningPathsController.prototype.updateTopStatus = function (status) {\r\n this.applyTopStatus(status);\r\n this.commonFilterService.saveTopStatus(HomeLearningPathsController.NAME, status);\r\n this.learningPathsGridModel.loadCurrentPage();\r\n };\r\n HomeLearningPathsController.prototype.applyTopStatus = function (status) {\r\n switch (status) {\r\n case 'ALL':\r\n this.learningPathsGridModel.filter.learningPathStatus = \"NOT_STARTED,STARTED,COMPLETED\";\r\n this.learningPathStatus = \"NOT_STARTED,STARTED,COMPLETED\";\r\n break;\r\n case 'NOT_STARTED':\r\n this.learningPathsGridModel.filter.learningPathStatus = \"NOT_STARTED\";\r\n this.learningPathStatus = \"NOT_STARTED\";\r\n break;\r\n case 'STARTED':\r\n this.learningPathsGridModel.filter.learningPathStatus = \"STARTED\";\r\n this.learningPathStatus = \"STARTED\";\r\n break;\r\n case 'COMPLETED':\r\n this.learningPathsGridModel.filter.learningPathStatus = \"COMPLETED\";\r\n this.learningPathStatus = \"COMPLETED\";\r\n break;\r\n }\r\n };\r\n HomeLearningPathsController.prototype.getActiveStatusName = function () {\r\n switch (this.learningPathsGridModel.filter.learningPathStatus) {\r\n case 'NOT_STARTED,STARTED,COMPLETED':\r\n return \"All\";\r\n case 'NOT_STARTED':\r\n return \"New\";\r\n case 'STARTED':\r\n return \"In-Progress\";\r\n case 'COMPLETED':\r\n return \"Completed\";\r\n default:\r\n return 'All';\r\n }\r\n };\r\n HomeLearningPathsController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeLearningPathsController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n HomeLearningPathsController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeLearningPathsController.NAME, this.learningPathsGridModel);\r\n };\r\n HomeLearningPathsController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeLearningPathsController.NAME, this.searchInput);\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n this.learningPathsGridModel.loadCurrentPage();\r\n };\r\n HomeLearningPathsController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeLearningPathsController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n this.learningPathsGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeLearningPathsController.prototype.initializeSlick = function () {\r\n this.isInitSlick = this.commonHomeService.initializeSlick(this.learningPathsGridModel, true);\r\n };\r\n HomeLearningPathsController.prototype.showAllLP = function (learningPathId) {\r\n var _this = this;\r\n this.isShowAllCards = true;\r\n this.commonHomeService.showAllLP(learningPathId);\r\n setTimeout(function () { return _this.setPopupClasses(); }, 500);\r\n };\r\n HomeLearningPathsController.prototype.hideAllLP = function (learningPathId) {\r\n var _this = this;\r\n this.isShowAllCards = false;\r\n this.commonHomeService.hideAllLP(learningPathId);\r\n setTimeout(function () { return _this.setPopupClasses(); }, 500);\r\n };\r\n HomeLearningPathsController.prototype.openCard = function (indexPlanLp, learningPathId) {\r\n this.commonHomeService.openCard(indexPlanLp, learningPathId, this.isShowAllCards);\r\n };\r\n HomeLearningPathsController.prototype.downloadUserCertificates = function (learningPathId, learningPathProgressId) {\r\n var _this = this;\r\n if (!learningPathProgressId) {\r\n return;\r\n }\r\n this.learningPathService.getUserCertificates(learningPathId, learningPathProgressId)\r\n .then(function (certificates) {\r\n if (!!certificates && certificates.length > 0) {\r\n for (var _i = 0; _i < certificates.length; _i++) {\r\n var certificate = certificates[_i];\r\n _this.personalService.downloadCertificate(certificate.certificateId)\r\n .then(function (result) { return _this.$window.open(result); });\r\n }\r\n }\r\n });\r\n };\r\n HomeLearningPathsController.prototype.updateGrid = function () {\r\n var _this = this;\r\n this.viewType = 1;\r\n this.learningPathsUrl = !this.showExpired\r\n ? \"/api/learningPaths/search/learner/myProgress\"\r\n : \"/api/learningPaths/search/learner/myProgress/expired\";\r\n this.learningPathsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.http, this.url.service(this.learningPathsUrl)));\r\n this.learningPathsGridModel.filter.learningPathStatus = \"NOT_STARTED,STARTED,COMPLETED\";\r\n this.getStorageFilters(true);\r\n this.learningPathsGridModel.pageSize = 4;\r\n this.learningPathsGridModel.addLoadingListener(this);\r\n this.oldSearchViewType = this.viewType;\r\n this.window = angular.element(this.$window);\r\n if (this.window.innerWidth < 992) {\r\n this.startWindowWidth = 0;\r\n }\r\n else {\r\n this.startWindowWidth = 10000;\r\n }\r\n this.window.bind('resize', function () {\r\n if (window.innerWidth < 992 && window.innerWidth < _this.startWindowWidth && !_this.viewType) {\r\n _this.oldSearchViewType = _this.viewType;\r\n _this.startWindowWidth = 0;\r\n _this.viewType = 1;\r\n }\r\n if (window.innerWidth >= 992 && window.innerWidth > _this.startWindowWidth && !_this.oldSearchViewType) {\r\n _this.viewType = _this.oldSearchViewType;\r\n _this.startWindowWidth = 10000;\r\n }\r\n });\r\n this.loadSearch();\r\n };\r\n HomeLearningPathsController.prototype.getCourseDatesString = function (course) {\r\n var courseDates = new Map();\r\n if (course.endDate) {\r\n courseDates.set(\"endDate\", new Date(course.endDate).toLocaleDateString());\r\n }\r\n if (!course.endDate || course.startDate > Date.now()) {\r\n courseDates.set(\"startDate\", new Date(course.startDate).toLocaleDateString());\r\n }\r\n return courseDates;\r\n };\r\n HomeLearningPathsController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"lp__plan-card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (popup.clientWidth >= window.innerWidth - card.clientWidth - rec.left) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n HomeLearningPathsController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n HomeLearningPathsController.NAME = \"home.HomeLearningPathsController\";\r\n HomeLearningPathsController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n CommonHomeService_1.CommonHomeService.NAME,\r\n LearningPathProgressService_1.LearningPathProgressService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return HomeLearningPathsController;\r\n})();\r\nexports.HomeLearningPathsController = HomeLearningPathsController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../INotifier\":5,\"../../authcore/AuthManager\":25,\"../../common/CommonFilterService\":49,\"../../common/CommonHomeService\":50,\"../../components/dialog/DialogService\":166,\"../../courses/models/CourseProgressStatus\":222,\"../../info/IntroService\":292,\"../../learningPaths/LearningPathProgressService\":318,\"../../learningPaths/LearningPathService\":320,\"../../learningPaths/models/LearningPathCourseInclusionType\":324,\"../../personal/PersonalService\":377,\"../../security/PermissionsService\":418,\"../../urls/CoursesRouter\":468,\"../../urls/LearningPathsRouter\":477,\"../../users/UserService\":499,\"../../utils/MenuHelper\":517,\"../../utils/UrlService\":528}],275:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar MaterialService_1 = require(\"../../materials/MaterialService\");\r\nvar IGridModel_1 = require(\"../../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../../IHttpGridService\");\r\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar AuthManager_1 = require(\"../../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../../security/PermissionsService\");\r\nvar MaterialsRouter_1 = require(\"../../urls/MaterialsRouter\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar ObjectTypeUtils_1 = require(\"../../utils/ObjectTypeUtils\");\r\nvar CommonFilterService_1 = require(\"../../common/CommonFilterService\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar UserService_1 = require(\"../../users/UserService\");\r\nvar HomeMaterialsController = (function () {\r\n function HomeMaterialsController($http, $location, materialService, url, permissionsApi, materialsRouter, authManager, commonFilterService, introService, userService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.materialService = materialService;\r\n this.url = url;\r\n this.permissionsApi = permissionsApi;\r\n this.materialsRouter = materialsRouter;\r\n this.authManager = authManager;\r\n this.commonFilterService = commonFilterService;\r\n this.introService = introService;\r\n this.userService = userService;\r\n this.currentMenuItemKey = \"\";\r\n this.currentMenuItemName = \"\";\r\n this.countActiveFilter = 0;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_MATERIALS_KEY);\r\n this.currentMenuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n this.materialsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/materials\")));\r\n this.topType = 'ALL';\r\n this.getStorageFilters();\r\n if (window.innerWidth < 1800) {\r\n this.materialsGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.materialsGridModel.pageSize = 9;\r\n }\r\n this.materialsGridModel.addLoadingListener(this);\r\n if (this.authManager.isAuthenticated()) {\r\n this.userService.getUserPageViewMode().then(function (res) {\r\n _this.viewType = res;\r\n });\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n }\r\n HomeMaterialsController.prototype.startIntro = function () {\r\n this.introService.startLearnerHomePageIntro();\r\n };\r\n HomeMaterialsController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(HomeMaterialsController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.materialsGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(HomeMaterialsController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.materialsGridModel.filter.searchString = this.searchInput;\r\n }\r\n var topType = this.commonFilterService.getTopStatus(HomeMaterialsController.NAME);\r\n if (topType) {\r\n this.topType = topType;\r\n this.applyMaterialTopType(topType);\r\n }\r\n this.materialsGridModel.loadCurrentPage();\r\n };\r\n HomeMaterialsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n HomeMaterialsController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n HomeMaterialsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n HomeMaterialsController.prototype.startLoading = function () {\r\n };\r\n HomeMaterialsController.prototype.endLoading = function () {\r\n this.materialsGridModel.entries.forEach(function (material) {\r\n material.subjectAndTopic = material.subjectName + \" / \" + material.title;\r\n });\r\n };\r\n HomeMaterialsController.prototype.loadMaterial = function (materialId) {\r\n if (this.materialsGridModel.entries.filter(function (m) { return m.id === materialId; })[0].permissions.view) {\r\n this.$location.url(this.materialsRouter.watchUrl(materialId));\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"You are not granted permission to view this course\");\r\n }\r\n };\r\n HomeMaterialsController.prototype.getMaterialTypeTitle = function (materialTypeId) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialTypeTitle(materialTypeId);\r\n };\r\n HomeMaterialsController.prototype.showDetails = function (material) {\r\n material.shown = !material.shown;\r\n };\r\n HomeMaterialsController.prototype.updateTopType = function (status) {\r\n this.topType = status;\r\n this.commonFilterService.saveTopStatus(HomeMaterialsController.NAME, status);\r\n this.applyMaterialTopType(status);\r\n this.materialsGridModel.loadCurrentPage();\r\n };\r\n HomeMaterialsController.prototype.applyMaterialTopType = function (status) {\r\n this.commonFilterService.applyMaterialTopType(status, this.materialsGridModel);\r\n };\r\n HomeMaterialsController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(HomeMaterialsController.NAME, this.searchInput);\r\n this.materialsGridModel.filter.searchString = this.searchInput;\r\n this.materialsGridModel.loadCurrentPage();\r\n };\r\n HomeMaterialsController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(HomeMaterialsController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.materialsGridModel.filter.searchString = this.searchInput;\r\n this.materialsGridModel.loadCurrentPage();\r\n }\r\n };\r\n HomeMaterialsController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n HomeMaterialsController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, HomeMaterialsController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n HomeMaterialsController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(HomeMaterialsController.NAME, this.materialsGridModel);\r\n };\r\n HomeMaterialsController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (rec.right + popup.clientWidth >= document.body.clientWidth) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n HomeMaterialsController.prototype.getMaterialTypeName = function (typeKey) {\r\n switch (typeKey) {\r\n case 'ALL': return 'ALL';\r\n case 'AUDIO': return 'AUDIO';\r\n case 'VIDEO': return 'VIDEO';\r\n case 'PHOTO': return 'IMAGE';\r\n case 'LINK': return 'LINK';\r\n case 'DOCUMENTS': return 'OTHER';\r\n }\r\n };\r\n HomeMaterialsController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n HomeMaterialsController.NAME = \"home.HomeMaterialsController\";\r\n HomeMaterialsController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n MaterialService_1.MaterialService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n IntroService_1.IntroService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return HomeMaterialsController;\r\n})();\r\nexports.HomeMaterialsController = HomeMaterialsController;\r\n},{\"../../IGridModel\":3,\"../../IHttpGridService\":4,\"../../INotifier\":5,\"../../authcore/AuthManager\":25,\"../../common/CommonFilterService\":49,\"../../info/IntroService\":292,\"../../materials/MaterialService\":337,\"../../security/PermissionsService\":418,\"../../urls/MaterialsRouter\":480,\"../../users/UserService\":499,\"../../utils/MenuHelper\":517,\"../../utils/ObjectTypeUtils\":520,\"../../utils/UrlService\":528}],276:[function(require,module,exports){\nvar StatisticReportsService_1 = require(\"../../statistics/StatisticReportsService\");\r\nvar MenuHelper_1 = require(\"../../utils/MenuHelper\");\r\nvar IntroService_1 = require(\"../../info/IntroService\");\r\nvar HomeReportsController = (function () {\r\n function HomeReportsController(statisticReportsService, introService) {\r\n var _this = this;\r\n this.statisticReportsService = statisticReportsService;\r\n this.introService = introService;\r\n this.isLoadingStatistic = true;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.HOME_REPORTS_KEY);\r\n statisticReportsService.getInfoForLearner().then(function (data) {\r\n _this.statistic = data;\r\n _this.dailyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"DAY\"; })[0];\r\n _this.weeklyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"WEEK\"; })[0];\r\n _this.monthlyStatistic = _this.statistic.statisticPeriods.filter(function (p) { return p.periodType === \"MONTH\"; })[0];\r\n var today = new Date(_this.monthlyStatistic.startDate);\r\n _this.currentMonth = today.toLocaleString(\"en-US\", { month: 'long' });\r\n _this.currentYear = today.getFullYear();\r\n }).finally(function () {\r\n _this.isLoadingStatistic = false;\r\n });\r\n }\r\n HomeReportsController.prototype.startIntro = function () {\r\n this.introService.startLearnerHomePageIntro();\r\n };\r\n HomeReportsController.prototype.calcHours = function (time) {\r\n var hours = Math.floor((time / (1000 * 60 * 60)) % 24);\r\n return (hours < 10) ? \"0\" + hours : hours;\r\n };\r\n HomeReportsController.prototype.calcMinutesRemainder = function (time) {\r\n var minutes = Math.floor((time / (1000 * 60)) % 60);\r\n return (minutes < 10) ? \"0\" + minutes : minutes;\r\n };\r\n HomeReportsController.NAME = \"home.HomeReportsController\";\r\n HomeReportsController.$inject = [\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return HomeReportsController;\r\n})();\r\nexports.HomeReportsController = HomeReportsController;\r\n},{\"../../info/IntroService\":292,\"../../statistics/StatisticReportsService\":448,\"../../utils/MenuHelper\":517}],277:[function(require,module,exports){\n(function (NotificationsModalMenuItem) {\r\n NotificationsModalMenuItem[NotificationsModalMenuItem[\"DAY_COMMENTS\"] = 0] = \"DAY_COMMENTS\";\r\n NotificationsModalMenuItem[NotificationsModalMenuItem[\"WEEK_COMMENTS\"] = 1] = \"WEEK_COMMENTS\";\r\n NotificationsModalMenuItem[NotificationsModalMenuItem[\"NEW_ASSESSMENTS\"] = 2] = \"NEW_ASSESSMENTS\";\r\n})(exports.NotificationsModalMenuItem || (exports.NotificationsModalMenuItem = {}));\r\nvar NotificationsModalMenuItem = exports.NotificationsModalMenuItem;\r\nexports.NOTIFICATIONS_MODAL_INSTRUCTOR_MENU = [\r\n NotificationsModalMenuItem.DAY_COMMENTS,\r\n NotificationsModalMenuItem.WEEK_COMMENTS,\r\n NotificationsModalMenuItem.NEW_ASSESSMENTS\r\n];\r\nexports.NOTIFICATIONS_MODAL_ATTENDEE_MANAGER_MENU = [\r\n NotificationsModalMenuItem.DAY_COMMENTS,\r\n NotificationsModalMenuItem.WEEK_COMMENTS\r\n];\r\n},{}],278:[function(require,module,exports){\n(function (UserRole) {\r\n UserRole[UserRole[\"LEARNER\"] = 0] = \"LEARNER\";\r\n UserRole[UserRole[\"ADMINISTRATOR\"] = 1] = \"ADMINISTRATOR\";\r\n})(exports.UserRole || (exports.UserRole = {}));\r\nvar UserRole = exports.UserRole;\r\n},{}],279:[function(require,module,exports){\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"./../authcore/AuthRedirect\");\r\nvar RedirectReason_1 = require(\"./../authcore/RedirectReason\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar CommonNavigation_1 = require(\"../common/CommonNavigation\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar HttpInterceptor = (function () {\r\n function HttpInterceptor($q, authRedirect, authManager, commonNavigation) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.authRedirect = authRedirect;\r\n this.authManager = authManager;\r\n this.commonNavigation = commonNavigation;\r\n this.request = function (config) {\r\n config.headers = config.headers || {};\r\n var token = _this.authManager.getToken();\r\n if (token != null && config.url.indexOf(UrlService_1.VIEWS_URL_PREFIX) != 0 && !config.withoutAuthorization) {\r\n config.headers.Authorization = token.tokenType + \" \" + token.accessToken;\r\n }\r\n config.headers[\"X-Timezone\"] = moment(new Date()).utcOffset();\r\n return config;\r\n };\r\n this.responseError = function (rejection) {\r\n if (rejection.status === 401) {\r\n _this.redirectToLogOn(RedirectReason_1.RedirectReason.ACCESS_DENIED);\r\n }\r\n else if (rejection.status === 403) {\r\n if (_this.authManager.isAuthenticated()) {\r\n _this.authRedirect.forwardToAccessDenied();\r\n }\r\n else if (!_this.authManager.hasToken()) {\r\n _this.redirectToLogOn(RedirectReason_1.RedirectReason.ACCESS_DENIED);\r\n }\r\n else {\r\n _this.authManager.logOff();\r\n _this.redirectToLogOn(RedirectReason_1.RedirectReason.TOKEN_EXPIRED);\r\n }\r\n }\r\n else if (rejection.status >= 500 && true !== rejection.config.ignore500) {\r\n INotifier_1.notifier.error(\"Query has failed: please contact your system administrator or help desk\");\r\n }\r\n else if (rejection.status === 409 && true !== rejection.config.ignore409) {\r\n if (rejection.data.error === \"InvalidState\" || rejection.data.error === \"OptimisticLock\")\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n else if (rejection.status === 404 && true !== rejection.config.ignore404) {\r\n _this.commonNavigation.redirectToNotFound();\r\n }\r\n return _this.$q.reject(rejection);\r\n };\r\n }\r\n HttpInterceptor.Factory = function ($q, authRedirect, authManager, commonNavigation) {\r\n return new HttpInterceptor($q, authRedirect, authManager, commonNavigation);\r\n };\r\n HttpInterceptor.prototype.redirectToLogOn = function (reason) {\r\n this.authManager.eraseToken();\r\n this.authRedirect.redirectToLogOn(reason);\r\n };\r\n HttpInterceptor.NAME = \"http.HttpInterceptor\";\r\n return HttpInterceptor;\r\n})();\r\nexports.HttpInterceptor = HttpInterceptor;\r\nHttpInterceptor.Factory.$inject = [\r\n \"$q\",\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n CommonNavigation_1.CommonNavigation.NAME\r\n];\r\n},{\"../common/CommonNavigation\":52,\"./../INotifier\":5,\"./../authcore/AuthManager\":25,\"./../authcore/AuthRedirect\":26,\"./../authcore/RedirectReason\":28,\"./../utils/UrlService\":528}],280:[function(require,module,exports){\nvar HttpInterceptor_1 = require(\"./HttpInterceptor\");\r\nvar AuthCoreModule_1 = require(\"./../authcore/AuthCoreModule\");\r\nvar CommonModule_1 = require(\"./../common/CommonModule\");\r\nexports.HttpModule = angular\r\n .module(\"http\", [\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n CommonModule_1.CommonModule.name\r\n])\r\n .factory(HttpInterceptor_1.HttpInterceptor.NAME, HttpInterceptor_1.HttpInterceptor.Factory);\r\n},{\"./../authcore/AuthCoreModule\":24,\"./../common/CommonModule\":51,\"./HttpInterceptor\":279}],281:[function(require,module,exports){\n(function (ILTRepeatType) {\r\n ILTRepeatType[ILTRepeatType[\"ONCE\"] = 0] = \"ONCE\";\r\n ILTRepeatType[ILTRepeatType[\"DAILY\"] = 1] = \"DAILY\";\r\n ILTRepeatType[ILTRepeatType[\"WEEKLY\"] = 2] = \"WEEKLY\";\r\n ILTRepeatType[ILTRepeatType[\"EVERY_WEEK_DAY\"] = 3] = \"EVERY_WEEK_DAY\";\r\n})(exports.ILTRepeatType || (exports.ILTRepeatType = {}));\r\nvar ILTRepeatType = exports.ILTRepeatType;\r\nexports.ILTRepeat = [\r\n {\r\n name: \"ONCE\",\r\n abbreviation: \"Once\"\r\n },\r\n {\r\n name: \"DAILY\",\r\n abbreviation: \"Daily\"\r\n },\r\n {\r\n name: \"WEEKLY\",\r\n abbreviation: \"Weekly\"\r\n },\r\n {\r\n name: \"EVERY_WEEK_DAY\",\r\n abbreviation: \"Every week day\"\r\n }\r\n];\r\n},{}],282:[function(require,module,exports){\n(function (ILTSessionAttendanceStatus) {\r\n ILTSessionAttendanceStatus[ILTSessionAttendanceStatus[\"MISSED\"] = 0] = \"MISSED\";\r\n ILTSessionAttendanceStatus[ILTSessionAttendanceStatus[\"ATTENDED\"] = 1] = \"ATTENDED\";\r\n})(exports.ILTSessionAttendanceStatus || (exports.ILTSessionAttendanceStatus = {}));\r\nvar ILTSessionAttendanceStatus = exports.ILTSessionAttendanceStatus;\r\n},{}],283:[function(require,module,exports){\n(function (ILTSessionRegistrationStatus) {\r\n ILTSessionRegistrationStatus[ILTSessionRegistrationStatus[\"IN_WAIT_LIST\"] = 0] = \"IN_WAIT_LIST\";\r\n ILTSessionRegistrationStatus[ILTSessionRegistrationStatus[\"REGISTERED\"] = 1] = \"REGISTERED\";\r\n})(exports.ILTSessionRegistrationStatus || (exports.ILTSessionRegistrationStatus = {}));\r\nvar ILTSessionRegistrationStatus = exports.ILTSessionRegistrationStatus;\r\n},{}],284:[function(require,module,exports){\n(function (ILTSessionStatus) {\r\n ILTSessionStatus[ILTSessionStatus[\"SCHEDULED\"] = 0] = \"SCHEDULED\";\r\n ILTSessionStatus[ILTSessionStatus[\"FINISHED\"] = 1] = \"FINISHED\";\r\n ILTSessionStatus[ILTSessionStatus[\"CANCELLED\"] = 2] = \"CANCELLED\";\r\n})(exports.ILTSessionStatus || (exports.ILTSessionStatus = {}));\r\nvar ILTSessionStatus = exports.ILTSessionStatus;\r\n},{}],285:[function(require,module,exports){\nvar ImportRouter_1 = require(\"../urls/ImportRouter\");\r\nvar ExportRouter_1 = require(\"../urls/ExportRouter\");\r\nvar ImportExportService_1 = require(\"./ImportExportService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar ExportController = (function () {\r\n function ExportController($q, $http, $scope, $routeParams, $location, importRouter, exportRouter, importExportService, url, permissionService, authService, businessUnitsService, securityService) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$http = $http;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.importRouter = importRouter;\r\n this.exportRouter = exportRouter;\r\n this.importExportService = importExportService;\r\n this.url = url;\r\n this.permissionService = permissionService;\r\n this.authService = authService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.securityService = securityService;\r\n this.IMPORT_TAB_KEY = \"import\";\r\n this.EXPORT_TAB_KEY = \"export\";\r\n this.systemPermissions = {};\r\n this.hasAllBusinessUnits = false;\r\n this.businessUnitSelected = false;\r\n this.businessUnits = [];\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.importInformation; });\r\n this.permissionService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n _this.currentUser = user;\r\n });\r\n this.loadBusinessUnits();\r\n this.topMenuKey = this.EXPORT_TAB_KEY;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_IMPORT_EXPORT_KEY);\r\n this.IMPORT_URL = '#' + this.importRouter.indexUrl();\r\n this.EXPORT_URL = '#' + this.exportRouter.indexUrl();\r\n }\r\n ExportController.prototype.loadBusinessUnits = function () {\r\n var _this = this;\r\n this.businessUnitsService.getBusinessUnitsForSelector().then(function (result) {\r\n _this.businessUnits = result;\r\n if (_this.businessUnits.length == 1 && !_this.hasAllBusinessUnits) {\r\n _this.businessUnitId = _this.businessUnits[0] == undefined || _this.businessUnits[0].id == undefined\r\n ? null\r\n : _this.businessUnits[0].id;\r\n }\r\n });\r\n };\r\n ExportController.prototype.exportUsers = function () {\r\n this.importExportService.exportUsers(this.businessUnitId ? this.businessUnitId : null);\r\n };\r\n ExportController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.topMenuKey == topMenuKey;\r\n };\r\n ExportController.NAME = \"importExport.ExportController\";\r\n ExportController.$inject = [\r\n \"$q\",\r\n \"$http\",\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n ImportRouter_1.ImportRouter.NAME,\r\n ExportRouter_1.ExportRouter.NAME,\r\n ImportExportService_1.ImportExportService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n SecurityService_1.SecurityService.NAME\r\n ];\r\n return ExportController;\r\n})();\r\nexports.ExportController = ExportController;\r\n},{\"../auth/AuthService\":18,\"../businessUnits/BusinessUnitsService\":44,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/ExportRouter\":469,\"../urls/ImportRouter\":474,\"../utils/MenuHelper\":517,\"../utils/UrlService\":528,\"./ImportExportService\":288}],286:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar ImportExportService_1 = require(\"./ImportExportService\");\r\nvar ImportRouter_1 = require(\"../urls/ImportRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar ExportRouter_1 = require(\"../urls/ExportRouter\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar BillingPlanService_1 = require(\"../finances/BillingPlanService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar ImportType;\r\n(function (ImportType) {\r\n ImportType[ImportType[\"USERS\"] = 0] = \"USERS\";\r\n ImportType[ImportType[\"CE\"] = 1] = \"CE\";\r\n ImportType[ImportType[\"ALL\"] = 2] = \"ALL\";\r\n})(ImportType || (ImportType = {}));\r\nvar ResultType;\r\n(function (ResultType) {\r\n ResultType[ResultType[\"ERROR\"] = 0] = \"ERROR\";\r\n ResultType[ResultType[\"USERS\"] = 1] = \"USERS\";\r\n ResultType[ResultType[\"CE\"] = 2] = \"CE\";\r\n ResultType[ResultType[\"ALL\"] = 3] = \"ALL\";\r\n})(ResultType || (ResultType = {}));\r\nvar ImportController = (function () {\r\n function ImportController($q, $http, $scope, $routeParams, $location, userService, importRouter, exportRouter, importExportService, url, permissionService, securityService, businessUnitsService, authService, $timeout, usersRouter, billingPlanService) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$http = $http;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.userService = userService;\r\n this.importRouter = importRouter;\r\n this.exportRouter = exportRouter;\r\n this.importExportService = importExportService;\r\n this.url = url;\r\n this.permissionService = permissionService;\r\n this.securityService = securityService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.authService = authService;\r\n this.$timeout = $timeout;\r\n this.usersRouter = usersRouter;\r\n this.billingPlanService = billingPlanService;\r\n this.IMPORT_TAB_KEY = \"import\";\r\n this.EXPORT_TAB_KEY = \"export\";\r\n this.systemPermissions = {};\r\n this.disableButtons = true;\r\n this.showModal = false;\r\n this.businessUnits = [];\r\n this.inputRecords = [];\r\n this.importInput = {};\r\n this.filteredInputRecords = [];\r\n this.importTypes = ImportType;\r\n this.resultTypes = ResultType;\r\n this.hasAllBusinessUnits = false;\r\n this.businessUnitSelected = false;\r\n this.creditsList = [];\r\n this.newCreditsList = [];\r\n this.newGroupsList = [];\r\n this.modificationGroups = [];\r\n this.isFreePlanBuFull = false;\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n _this.currentUser = user;\r\n });\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.importInformation; });\r\n this.permissionService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.topMenuKey = this.IMPORT_TAB_KEY;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_IMPORT_EXPORT_KEY);\r\n this.disableButtons = true;\r\n this.IMPORT_URL = '#' + this.importRouter.indexUrl();\r\n this.EXPORT_URL = '#' + this.exportRouter.indexUrl();\r\n this.DOWNLOAD_TEMPLATE_LINK = this.getDownloadTemplateLink();\r\n this.loadBusinessUnits();\r\n this.loadGroupsList();\r\n var businessUnitId;\r\n if (this.businessUnitId == undefined) {\r\n businessUnitId = null;\r\n }\r\n else {\r\n businessUnitId = this.businessUnitId;\r\n }\r\n this.updateCreditsLists(businessUnitId);\r\n this.loadUserGroupsForSelector(businessUnitId);\r\n }\r\n ImportController.prototype.enableButtons = function () {\r\n this.disableButtons = false;\r\n };\r\n ImportController.prototype.areButtonsDisabled = function () {\r\n return this.file == null;\r\n };\r\n ImportController.prototype.canBeNullable = function () {\r\n return this.businessUnits == undefined;\r\n };\r\n ImportController.prototype.predefinedValue = function () {\r\n return this.businessUnits != undefined;\r\n };\r\n ImportController.prototype.getRegisterInputs = function () {\r\n var _this = this;\r\n return this.importExportService.getRegisterInputs(this.file, this.businessUnitId)\r\n .then(function (result) {\r\n _this.filteredInputRecords = _this.inputRecords = result;\r\n _this.totalLines = _this.inputRecords.length;\r\n _this.inactiveUsersCount = _this.inputRecords.filter(function (record) { return record.errorMessage && record.errorMessage.split('.')[0] == 'User will be created as inactive'; }).length;\r\n _this.errorsCount = _this.inputRecords.filter(function (record) { return record.errorFlag == true && record.errorMessage.split('.')[0] != 'User will be created as inactive'; }).length;\r\n _this.rightCount = _this.inputRecords.filter(function (record) { return record.errorFlag == false || record.errorMessage.split('.')[0] == 'User will be created as inactive'; }).length;\r\n _this.importType = _this.importTypes[_this.importTypes.USERS];\r\n _this.openImportModal();\r\n })\r\n .catch(function (response) {\r\n _this.openInvalidFileModal();\r\n });\r\n };\r\n ImportController.prototype.getCEInputs = function () {\r\n var _this = this;\r\n return this.importExportService.getCEInputs(this.file, this.businessUnitId)\r\n .then(function (result) {\r\n _this.file = null;\r\n _this.filteredInputRecords = _this.inputRecords = result;\r\n _this.totalLines = _this.inputRecords.length;\r\n _this.errorsCount = _this.inputRecords.filter(function (record) { return record.errorFlag == true; }).length;\r\n _this.rightCount = _this.inputRecords.filter(function (record) { return record.errorFlag == false; }).length;\r\n _this.importType = _this.importTypes[_this.importTypes.CE];\r\n _this.openImportModal();\r\n })\r\n .catch(function (response) {\r\n _this.openInvalidFileModal();\r\n });\r\n };\r\n ImportController.prototype.getAllInputs = function () {\r\n var _this = this;\r\n return this.importExportService.getAllInputs(this.file, this.businessUnitId)\r\n .then(function (result) {\r\n _this.file = null;\r\n _this.filteredInputRecords = _this.inputRecords = result;\r\n _this.totalLines = _this.inputRecords.length;\r\n _this.errorsCount = _this.inputRecords.filter(function (record) { return record.errorFlag == true; }).length;\r\n _this.newUsersCount = _this.inputRecords.filter(function (record) { return record.createUserFlag == true; }).length;\r\n _this.countNewCe();\r\n _this.importType = _this.importTypes[_this.importTypes.ALL];\r\n _this.openImportModal();\r\n })\r\n .catch(function (response) {\r\n _this.openInvalidFileModal();\r\n });\r\n };\r\n ImportController.prototype.saveUsers = function () {\r\n var _this = this;\r\n var businessUnitId = this.businessUnitId == undefined\r\n ? null\r\n : this.businessUnitId;\r\n this.importExportService.getRegisterInputs(this.file, this.businessUnitId)\r\n .then(function (result) {\r\n _this.filteredInputRecords = _this.inputRecords = result;\r\n _this.file = null;\r\n _this.importInput.rowInputs = _this.inputRecords.filter(function (record) { return record.errorFlag == false || record.errorMessage.split('.')[0] == 'User will be created as inactive'; });\r\n _this.importInput.groups = _this.getGroupsIdsFromSelectableList(_this.newGroupsList);\r\n _this.importInput.credits = _this.newCreditsList;\r\n if (_this.importInput.rowInputs.length == 0) {\r\n INotifier_1.notifier.error(_this.getFreePlanMessage());\r\n return;\r\n }\r\n var locale;\r\n if (businessUnitId) {\r\n _this.businessUnitsService.getBusinessUnitById(businessUnitId).then(function (businessUnit) {\r\n locale = businessUnit.locale ? businessUnit.locale : AppProperties_1.AppProperties.defaultLocale;\r\n return _this.importExportService.uploadUsers(_this.importInput, locale, businessUnitId)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(\"Success! Number of uploaded records: \" + result);\r\n _this.file = null;\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.error(\"An error occurred while uploading\");\r\n });\r\n });\r\n }\r\n else {\r\n return _this.importExportService.uploadUsers(_this.importInput, AppProperties_1.AppProperties.defaultLocale, businessUnitId)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(\"Success! Number of uploaded records: \" + result);\r\n _this.file = null;\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.error(\"An error occurred while uploading\");\r\n });\r\n }\r\n });\r\n };\r\n ImportController.prototype.saveCE = function () {\r\n var _this = this;\r\n var businessUnitId;\r\n if (this.businessUnitId == undefined) {\r\n businessUnitId = null;\r\n }\r\n else {\r\n businessUnitId = this.businessUnitId;\r\n }\r\n this.importInput.rowInputs = this.inputRecords.filter(function (record) { return record.errorFlag == false; });\r\n this.importInput.groups = this.getGroupsIdsFromSelectableList(this.newGroupsList);\r\n this.importInput.credits = this.newCreditsList;\r\n return this.importExportService.uploadCE(this.importInput, businessUnitId)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(\"Success! Number of uploaded records: \" + result);\r\n _this.file = null;\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.error(\"An error occurred while uploading\");\r\n });\r\n };\r\n ImportController.prototype.saveAll = function () {\r\n var _this = this;\r\n var businessUnitId;\r\n if (this.businessUnitId == undefined) {\r\n businessUnitId = null;\r\n }\r\n else {\r\n businessUnitId = this.businessUnitId;\r\n }\r\n this.importInput.rowInputs = this.inputRecords.filter(function (record) { return record.errorFlag == false; });\r\n this.importInput.groups = this.getGroupsIdsFromSelectableList(this.newGroupsList);\r\n this.importInput.credits = this.newCreditsList;\r\n var locale;\r\n if (businessUnitId) {\r\n this.businessUnitsService.getBusinessUnitById(businessUnitId).then(function (businessUnit) {\r\n locale = businessUnit.locale ? businessUnit.locale : AppProperties_1.AppProperties.defaultLocale;\r\n return _this.importExportService.uploadAll(_this.importInput, locale, businessUnitId)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(result.userCount + \" new users and \" + result.creditCount + \" new CE records created successfully\");\r\n _this.file = null;\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.error(\"An error occurred while uploading\");\r\n });\r\n });\r\n }\r\n else {\r\n return this.importExportService.uploadAll(this.importInput, AppProperties_1.AppProperties.defaultLocale, businessUnitId)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(result.userCount + \" new users and \" + result.creditCount + \" new CE records created successfully\");\r\n _this.file = null;\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.error(\"An error occurred while uploading\");\r\n });\r\n }\r\n };\r\n ImportController.prototype.loadBusinessUnits = function () {\r\n var _this = this;\r\n this.businessUnitsService.getBusinessUnitsForSelector().then(function (result) {\r\n _this.businessUnits = result;\r\n if (_this.businessUnits.length == 1 && !_this.hasAllBusinessUnits) {\r\n _this.businessUnitId = _this.businessUnits[0] == undefined || _this.businessUnits[0].id == undefined\r\n ? null\r\n : _this.businessUnits[0].id;\r\n }\r\n });\r\n };\r\n ImportController.prototype.getDownloadTemplateLink = function () {\r\n return this.importExportService.getDownloadTemplateUrl();\r\n };\r\n ImportController.prototype.isSelectDisabled = function () {\r\n if (this.businessUnits == undefined || this.businessUnits.length == 0) {\r\n return true;\r\n }\r\n };\r\n ImportController.prototype.filterResults = function (type) {\r\n switch (type) {\r\n case ResultType.USERS:\r\n this.filteredInputRecords = this.inputRecords.filter(function (record) { return record.createUserFlag == true; });\r\n break;\r\n case ResultType.CE:\r\n this.filteredInputRecords = this.inputRecords.filter(function (record) { return record.errorFlag == false && record.type != undefined; });\r\n break;\r\n case ResultType.ERROR:\r\n this.filteredInputRecords = this.inputRecords.filter(function (record) { return record.errorFlag == true; });\r\n break;\r\n case ResultType.ALL:\r\n this.filteredInputRecords = this.inputRecords;\r\n break;\r\n }\r\n };\r\n ImportController.prototype.countNewCe = function () {\r\n var _this = this;\r\n this.newCeCount = 0;\r\n this.inputRecords.filter(function (record) { return record.errorFlag == false && record.type != undefined; }).forEach(function (row) {\r\n _this.newCeCount++;\r\n });\r\n };\r\n ImportController.prototype.openModal = function () {\r\n $(\"#infoDialog\").modal(\"show\");\r\n };\r\n ImportController.prototype.closeModal = function () {\r\n this.showModal = false;\r\n };\r\n ImportController.prototype.openImportModal = function () {\r\n $(\"#addDialog\").modal(\"show\");\r\n };\r\n ImportController.prototype.openCEModal = function () {\r\n $(\"#addCEDialog\").modal(\"show\");\r\n };\r\n ImportController.prototype.openInvalidFileModal = function () {\r\n $(\"#invalidFile\").modal(\"show\");\r\n };\r\n ImportController.prototype.isSaveButtonEnabled = function () {\r\n return this.inputRecords.length != this.inputRecords.filter(function (r) { return r.errorFlag && r.errorMessage.split('.')[0] != 'User will be created as inactive'; }).length;\r\n };\r\n ImportController.prototype.isSaveAllButtonEnabled = function () {\r\n return this.inputRecords.length != this.inputRecords.filter(function (r) { return r.errorFlag; }).length || this.inputRecords.length != this.inputRecords.filter(function (r) { return r.createUserFlag == false; }).length;\r\n };\r\n ImportController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.businessUnitSelected = false;\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n var businessUnitId;\r\n if (this.businessUnitId == undefined) {\r\n businessUnitId = null;\r\n this.isFreePlanBuFull = false;\r\n }\r\n else {\r\n businessUnitId = this.businessUnitId;\r\n var array = new Array();\r\n array.push(businessUnitId);\r\n this.businessUnitsService.getBusinessUnitsWithFreePlan(array).then(function (result) {\r\n _this.businessUnitsService.isFreeBusinessUnitsFull(result)\r\n .then(function (result) {\r\n _this.isFreePlanBuFull = result;\r\n });\r\n });\r\n }\r\n this.newCreditsList = [];\r\n this.updateCreditsLists(businessUnitId);\r\n this.loadUserGroupsForSelector(businessUnitId);\r\n this.billingPlanService.getMaxFreePlanUsers().then(function (data) { return _this.maxFreePlanUsers = data; });\r\n };\r\n ImportController.prototype.loadUserGroupsForSelector = function (businessUnitId) {\r\n var _this = this;\r\n this.importExportService.getGroupsForCurrentBu(businessUnitId).then(function (groups) {\r\n _this.modificationGroups = angular.copy(groups);\r\n });\r\n };\r\n ImportController.prototype.updateCreditsLists = function (businessUnitId) {\r\n var _this = this;\r\n this.importExportService.getCECreditsForCurrentBu(businessUnitId).then(function (credits) {\r\n _this.creditsList = credits;\r\n });\r\n };\r\n ImportController.prototype.loadGroupsList = function () {\r\n var businessUnitIds = [];\r\n this.businessUnits.forEach(function (value) {\r\n businessUnitIds.push(value);\r\n });\r\n };\r\n ImportController.prototype.addGroups = function () {\r\n var _this = this;\r\n this.newGroupsList = [];\r\n this.modificationGroups.forEach(function (g) {\r\n if (g.selected) {\r\n _this.newGroupsList.push(g);\r\n }\r\n });\r\n };\r\n ImportController.prototype.deleteGroup = function (groupId) {\r\n var _this = this;\r\n this.modificationGroups.forEach(function (group) {\r\n if (group.id == groupId) {\r\n group.selected = false;\r\n }\r\n });\r\n this.newGroupsList = [];\r\n this.modificationGroups.forEach(function (r) {\r\n if (r.selected) {\r\n _this.newGroupsList.push(r);\r\n }\r\n });\r\n };\r\n ImportController.prototype.clearSelection = function () {\r\n this.modificationGroups.forEach(function (group) {\r\n group.selected = false;\r\n });\r\n this.newGroupsList = [];\r\n };\r\n ImportController.prototype.selectGroup = function (index) {\r\n var group = this.modificationGroups[index];\r\n group.selected = true;\r\n this.addGroups();\r\n };\r\n ImportController.prototype.getGroupsIdsFromSelectableList = function (groups) {\r\n var groupsIds = [];\r\n groups.forEach(function (group) {\r\n groupsIds.push(group.id);\r\n });\r\n return groupsIds;\r\n };\r\n ImportController.prototype.unselectGroup = function (index) {\r\n var group = this.modificationGroups[index];\r\n group.selected = false;\r\n this.addGroups();\r\n };\r\n ImportController.prototype.getFreePlanMessage = function () {\r\n return StringBuilder_1.StringBuilder.interpolate(\"You have reached maximum :number active users allowed for Free Plan\")\r\n .with(\":number\", this.maxFreePlanUsers).build();\r\n };\r\n ImportController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.topMenuKey == topMenuKey;\r\n };\r\n ImportController.NAME = \"importExport.ImportController\";\r\n ImportController.$inject = [\r\n \"$q\",\r\n \"$http\",\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n UserService_1.UserService.NAME,\r\n ImportRouter_1.ImportRouter.NAME,\r\n ExportRouter_1.ExportRouter.NAME,\r\n ImportExportService_1.ImportExportService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n \"$timeout\",\r\n UsersRouter_1.UsersRouter.NAME,\r\n BillingPlanService_1.BillingPlanService.NAME\r\n ];\r\n return ImportController;\r\n})();\r\nexports.ImportController = ImportController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../businessUnits/BusinessUnitsService\":44,\"../finances/BillingPlanService\":231,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/ExportRouter\":469,\"../urls/ImportRouter\":474,\"../urls/UsersRouter\":493,\"../users/UserService\":499,\"../utils/AppProperties\":\"AppProperties\",\"../utils/MenuHelper\":517,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./ImportExportService\":288}],287:[function(require,module,exports){\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar ImportExportService_1 = require(\"./ImportExportService\");\r\nvar ImportController_1 = require(\"./ImportController\");\r\nvar AuthCoreModule_1 = require(\"../authcore/AuthCoreModule\");\r\nvar ExportController_1 = require(\"./ExportController\");\r\nexports.ImportExportModule = angular\r\n .module(\"importExport\", [\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .service(ImportExportService_1.ImportExportService.NAME, ImportExportService_1.ImportExportService)\r\n .controller(ImportController_1.ImportController.NAME, ImportController_1.ImportController)\r\n .controller(ExportController_1.ExportController.NAME, ExportController_1.ExportController);\r\n},{\"../authcore/AuthCoreModule\":24,\"../security/SecurityModule\":419,\"../urls/UrlsModule\":492,\"./ExportController\":285,\"./ImportController\":286,\"./ImportExportService\":288}],288:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar ImportExportService = (function () {\r\n function ImportExportService($http, $window, url) {\r\n this.$http = $http;\r\n this.$window = $window;\r\n this.url = url;\r\n }\r\n ImportExportService.prototype.getDownloadTemplateUrl = function () {\r\n return this.url.service(\"/api/importExport/downloadTemplate\");\r\n };\r\n ImportExportService.prototype.uploadUsers = function (importInput, locale, businessUnitId) {\r\n var url = \"/api/importExport/importUsers\";\r\n if (businessUnitId != null) {\r\n url = url + \"?businessUnitId=\" + businessUnitId.toString() + \"&locale=\" + locale;\r\n }\r\n else {\r\n url = url + \"?locale=\" + locale;\r\n }\r\n return this.$http.post(this.url.service(url), importInput)\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n ImportExportService.prototype.uploadCE = function (importInput, businessUnitId) {\r\n var url = \"/api/importExport/importCE\";\r\n if (businessUnitId != null)\r\n url = url + \"?businessUnitId=\" + businessUnitId.toString();\r\n return this.$http.post(this.url.service(url), importInput)\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n ImportExportService.prototype.uploadAll = function (importInput, locale, businessUnitId) {\r\n var url = \"/api/importExport/importAll\";\r\n if (businessUnitId != null) {\r\n url = url + \"?businessUnitId=\" + businessUnitId.toString() + \"&locale=\" + locale;\r\n }\r\n else {\r\n url = url + \"?locale=\" + locale;\r\n }\r\n return this.$http.post(this.url.service(url), importInput)\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n ImportExportService.prototype.getRegisterInputs = function (file, businessUnitId) {\r\n var data = new FormData();\r\n data.append('file', file);\r\n data.append('businessUnitId', businessUnitId == undefined ? '' : businessUnitId.toString());\r\n var config = {\r\n headers: {\r\n 'Content-Type': undefined\r\n }\r\n };\r\n return this.$http.post(this.url.service(\"/api/importExport/getRegisterInputs\"), data, config)\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n ImportExportService.prototype.getCEInputs = function (file, businessUnitId) {\r\n var data = new FormData();\r\n data.append('file', file);\r\n data.append('businessUnitIds', businessUnitId == undefined ? '' : businessUnitId.toString());\r\n var config = {\r\n headers: {\r\n 'Content-Type': undefined\r\n }\r\n };\r\n return this.$http.post(this.url.service(\"/api/importExport/getCEInputs\"), data, config)\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n ImportExportService.prototype.getAllInputs = function (file, businessUnitId) {\r\n var data = new FormData();\r\n data.append('file', file);\r\n data.append('businessUnitIds', businessUnitId == undefined ? '' : businessUnitId.toString());\r\n var config = {\r\n headers: {\r\n 'Content-Type': undefined\r\n }\r\n };\r\n return this.$http.post(this.url.service(\"/api/importExport/getAllInputs\"), data, config)\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n ImportExportService.prototype.getCECreditsForCurrentBu = function (businessUnitId) {\r\n var url = \"/api/importExport/getAvailableCredits\";\r\n if (businessUnitId) {\r\n url += \"?businessUnitId=:businessUnitId\";\r\n }\r\n var urlBuilder = this.url.base(url);\r\n if (businessUnitId) {\r\n urlBuilder.param(\":businessUnitId\", businessUnitId);\r\n }\r\n return this.$http.get(urlBuilder.service())\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n ImportExportService.prototype.getGroupsForCurrentBu = function (businessUnitsId) {\r\n return this.$http.get(this.url.service(\"/api/importExport/getAvailableGroups\"), { params: { businessUnitsId: businessUnitsId } })\r\n .then(function (result) { return result.data; });\r\n };\r\n ImportExportService.prototype.exportUsers = function (businessUnitId) {\r\n var url = \"/api/importExport/exportUsers\";\r\n if (businessUnitId != null)\r\n url = url + \"?businessUnitId=\" + businessUnitId.toString();\r\n this.$window.open(this.url.base(url)\r\n .service());\r\n };\r\n ImportExportService.NAME = \"importExport.ImportExportService\";\r\n ImportExportService.$inject = [\r\n \"$http\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return ImportExportService;\r\n})();\r\nexports.ImportExportService = ImportExportService;\r\n},{\"../utils/UrlService\":528}],289:[function(require,module,exports){\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AboutCompanyController = (function () {\r\n function AboutCompanyController($location, userService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.userService = userService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ABOUT_COMPANY_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"About Us\" + \" Core Partners\").update();\r\n this.userService.getCurrentUserProfile().then(function (data) {\r\n _this.currentLocale = data.locale;\r\n });\r\n }\r\n AboutCompanyController.NAME = \"info.AboutCompanyController\";\r\n AboutCompanyController.$inject = [\r\n \"$location\",\r\n UserService_1.UserService.NAME\r\n ];\r\n return AboutCompanyController;\r\n})();\r\nexports.AboutCompanyController = AboutCompanyController;\r\n},{\"../users/UserService\":499,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521}],290:[function(require,module,exports){\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar FAQController = (function () {\r\n function FAQController($location) {\r\n this.$location = $location;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.FAQ_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Core ACHIEVE - \" + \"Help\").update();\r\n }\r\n FAQController.NAME = \"info.FAQController\";\r\n FAQController.$inject = [\r\n \"$location\"\r\n ];\r\n return FAQController;\r\n})();\r\nexports.FAQController = FAQController;\r\n},{\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521}],291:[function(require,module,exports){\nvar AboutCompanyController_1 = require(\"./AboutCompanyController\");\r\nvar FAQController_1 = require(\"./FAQController\");\r\nvar AccessibilityController_1 = require(\"../accessibility/AccessibilityController\");\r\nvar IntroService_1 = require(\"./IntroService\");\r\nexports.InfoModule = angular\r\n .module(\"info\", [])\r\n .controller(AboutCompanyController_1.AboutCompanyController.NAME, AboutCompanyController_1.AboutCompanyController)\r\n .controller(FAQController_1.FAQController.NAME, FAQController_1.FAQController)\r\n .controller(AccessibilityController_1.AccessibilityController.NAME, AccessibilityController_1.AccessibilityController)\r\n .service(IntroService_1.IntroService.NAME, IntroService_1.IntroService);\r\n},{\"../accessibility/AccessibilityController\":9,\"./AboutCompanyController\":289,\"./FAQController\":290,\"./IntroService\":292}],292:[function(require,module,exports){\nvar IntroService = (function () {\r\n function IntroService() {\r\n var _this = this;\r\n angular.element(window).bind('resize', function () {\r\n if (_this.introJsObject) {\r\n _this.introJsObject.exit();\r\n }\r\n });\r\n }\r\n IntroService.prototype.startLearnerHomePageIntro = function () {\r\n this.introJsObject = introJs().setOptions({\r\n steps: this.buildLearnerHomePageOptions()\r\n }).start();\r\n };\r\n IntroService.prototype.startAdministrationHomePageIntro = function () {\r\n this.introJsObject = introJs().setOptions({\r\n steps: this.buildAdministrationPageOptions()\r\n }).start();\r\n };\r\n IntroService.prototype.startInstructorHomePageIntro = function () {\r\n this.introJsObject = introJs().setOptions({\r\n steps: this.buildInstructorHomePageOptions()\r\n }).start();\r\n };\r\n IntroService.prototype.startAttendeeManagerHomePageIntro = function () {\r\n this.introJsObject = introJs().setOptions({\r\n steps: this.buildAttendeeManagerHomePageOptions()\r\n }).start();\r\n };\r\n IntroService.prototype.startAuthorHomePageIntro = function () {\r\n this.introJsObject = introJs().setOptions({\r\n steps: this.buildAuthorHomePageOptions()\r\n }).start();\r\n };\r\n IntroService.prototype.startEditMaterialPageIntro = function (introNumber) {\r\n switch (introNumber) {\r\n case 1: {\r\n this.introJsObject = introJs().setOptions({\r\n steps: this.buildEditMaterialPageFirstOptions()\r\n }).start();\r\n break;\r\n }\r\n case 2: {\r\n this.introJsObject = introJs().setOptions({\r\n steps: this.buildEditMaterialPageSecondOptions()\r\n }).start();\r\n break;\r\n }\r\n case 3: {\r\n this.introJsObject = introJs().setOptions({\r\n steps: this.buildEditMaterialPageThirdOptions()\r\n }).start();\r\n break;\r\n }\r\n case 4: {\r\n this.introJsObject = introJs().setOptions({\r\n steps: this.buildEditMaterialPageFourthOptions()\r\n }).start();\r\n break;\r\n }\r\n }\r\n };\r\n IntroService.prototype.buildLearnerHomePageOptions = function () {\r\n var steps = [];\r\n if (this.isMobileView()) {\r\n if (document.getElementsByName(\"mobileHome\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view main learning content which is already available to you.\",\r\n element: document.getElementsByName(\"mobileHome\")[0]\r\n });\r\n }\r\n }\r\n else if (this.isTablet()) {\r\n if (document.getElementsByName(\"tabletHome\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view main learning content which is already available to you.\",\r\n element: document.getElementsByName(\"tabletHome\")[0]\r\n });\r\n }\r\n }\r\n else {\r\n if (document.getElementsByName(\"firstIntroPage\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view main learning content which is already available to you.\",\r\n element: document.getElementsByName(\"firstIntroPage\")[0]\r\n });\r\n }\r\n }\r\n if (!this.isMobileView()) {\r\n if (document.getElementsByName(\"quickFilter\").length > 0) {\r\n steps.push({\r\n title: \"Quick filter\",\r\n element: document.getElementsByName(\"quickFilter\")[0],\r\n intro: \"Quick filter by status: All, New, In Progress, Completed\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView()) {\r\n if (document.getElementsByName(\"quickFilterMaterials\").length > 0) {\r\n steps.push({\r\n title: \"Quick filter\",\r\n element: document.getElementsByName(\"quickFilterMaterials\")[0],\r\n intro: \"Quick filter by status: All, Audio, Video, Image, Link, Other\"\r\n });\r\n }\r\n }\r\n if (document.getElementsByName(\"filtersField\").length > 0) {\r\n steps.push({\r\n title: \"Advanced filter\",\r\n element: document.getElementsByName(\"filtersField\")[0],\r\n intro: \"Advanced filter: additional advanced filer by subject, type, etc.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"searchField\").length > 0) {\r\n steps.push({\r\n title: \"Search\",\r\n element: document.getElementsByName(\"searchField\")[0],\r\n intro: \"Search by title, description, tags.\"\r\n });\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.lessThenMin()) {\r\n if (document.getElementsByName(\"home_coursesIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Course\",\r\n element: document.getElementsByName(\"home_coursesIntroStep\")[0],\r\n intro: \"View tiles of courses you are working on and progress of their completion. Switch to list to get your Transcripts and Certificates.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_learningPathsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Learning path\",\r\n element: document.getElementsByName(\"home_learningPathsIntroStep\")[0],\r\n intro: \"View title of assigned learning paths opened on next course you need to work on. Switch to list to get your Certificate. They are available only if you have at list one Learning Paths assigned. If you do, My Learning Path will be your Home page.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_materialsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Materials\",\r\n element: document.getElementsByName(\"home_materialsIntroStep\")[0],\r\n intro: \"Access learning materials which are available for you.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_reportsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Reports\",\r\n element: document.getElementsByName(\"home_reportsIntroStep\")[0],\r\n intro: \"View statistics on your progress and achievements.\"\r\n });\r\n }\r\n }\r\n else {\r\n if (document.getElementsByName(\"dropDownHomeMenu\").length > 0) {\r\n steps.push({\r\n title: \"Menu\",\r\n element: document.getElementsByName(\"dropDownHomeMenu\")[0],\r\n intro: \"Quickly get to task you need to accomplish\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.smallDisplay()) {\r\n if (document.getElementsByName(\"advancedMenu\").length > 0) {\r\n steps.push({\r\n title: \"Advanced menu\",\r\n element: document.getElementsByName(\"advancedMenu\")[0],\r\n intro: \"Single point to find and access everything in your CoreAchieve platform. Choose My Courses to access your own learning homepage.\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && this.smallDisplay()) {\r\n if (document.getElementsByName(\"advancedMenuSmallDisplay\").length > 0) {\r\n steps.push({\r\n title: \"Advanced menu\",\r\n element: document.getElementsByName(\"advancedMenuSmallDisplay\")[0],\r\n intro: \"Single point to find and access everything in your CoreAchieve platform. Choose My Courses to access your own learning homepage.\"\r\n });\r\n }\r\n }\r\n if (this.isMobileView()) {\r\n if (document.getElementsByName(\"mobileCalendar\").length > 0) {\r\n steps.push({\r\n title: \"Calendar\",\r\n element: document.getElementsByName(\"mobileCalendar\")[0],\r\n intro: \"View list of courses, ILT and vILT sessions for day, week, or month.\"\r\n });\r\n }\r\n }\r\n else if (this.isTablet()) {\r\n if (document.getElementsByName(\"tabletCalendar\").length > 0) {\r\n steps.push({\r\n title: \"Calendar\",\r\n element: document.getElementsByName(\"tabletCalendar\")[0],\r\n intro: \"View list of courses, ILT and vILT sessions for day, week, or month.\"\r\n });\r\n }\r\n }\r\n else {\r\n if (document.getElementsByName(\"calendar\").length > 0) {\r\n steps.push({\r\n title: \"Calendar\",\r\n element: document.getElementsByName(\"calendar\")[0],\r\n intro: \"View list of courses, ILT and vILT sessions for day, week, or month.\"\r\n });\r\n }\r\n }\r\n return steps;\r\n };\r\n IntroService.prototype.buildAdministrationPageOptions = function () {\r\n var steps = [];\r\n if (this.isMobileView()) {\r\n if (document.getElementsByName(\"mobileHome\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view main learning content which is already available to you.\",\r\n element: document.getElementsByName(\"mobileHome\")[0]\r\n });\r\n }\r\n }\r\n else if (this.isTablet()) {\r\n if (document.getElementsByName(\"tabletHome\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view main learning content which is already available to you.\",\r\n element: document.getElementsByName(\"tabletHome\")[0]\r\n });\r\n }\r\n }\r\n else {\r\n if (document.getElementsByName(\"firstIntroPage\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view main learning content which is already available to you.\",\r\n element: document.getElementsByName(\"firstIntroPage\")[0]\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet()) {\r\n if (document.getElementsByName(\"leftMainMenu\").length > 0) {\r\n steps.push({\r\n title: \"Learner Menu items visibility\",\r\n element: document.getElementsByName(\"leftMainMenu\")[0],\r\n intro: \"Show and hide menu items to simplify UI even more.\"\r\n });\r\n }\r\n }\r\n if (document.getElementsByName(\"administration_learningContentAdministrationCard\").length > 0) {\r\n steps.push({\r\n title: \"Learning Content\",\r\n element: document.getElementsByName(\"administration_learningContentAdministrationCard\")[0],\r\n intro: \"Get to Quizzes, Surveys, Flashcards, Materials from one tile.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_reportsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Reports\",\r\n element: document.getElementsByName(\"home_reportsIntroStep\")[0],\r\n intro: \"View statistics on your user progress, activity, and achievements.\"\r\n });\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.smallDisplay()) {\r\n if (document.getElementsByName(\"advancedMenu\").length > 0) {\r\n steps.push({\r\n title: \"Advanced menu\",\r\n element: document.getElementsByName(\"advancedMenu\")[0],\r\n intro: \"Single point to find and access everything in your CoreAchieve platform. Choose My Courses to access your own learning homepage.\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && this.smallDisplay()) {\r\n if (document.getElementsByName(\"advancedMenuSmallDisplay\").length > 0) {\r\n steps.push({\r\n title: \"Advanced menu\",\r\n element: document.getElementsByName(\"advancedMenuSmallDisplay\")[0],\r\n intro: \"Single point to find and access everything in your CoreAchieve platform. Choose My Courses to access your own learning homepage.\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.lessThenMin()) {\r\n if (document.getElementsByClassName(\"vhs-navbar__account-name\").length > 0) {\r\n steps.push({\r\n title: \"My Profile/Settings\",\r\n element: document.getElementsByClassName(\"vhs-navbar__account-name\")[0],\r\n intro: \"Go to My Profile/Settings and select your home page view if you have multiple roles (administrator, instructor, attendee manager, author, learner).\"\r\n });\r\n }\r\n }\r\n return steps;\r\n };\r\n IntroService.prototype.buildInstructorHomePageOptions = function () {\r\n var steps = [];\r\n if (this.isMobileView()) {\r\n if (document.getElementsByName(\"mobileHome\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view your main learning content and data.\",\r\n element: document.getElementsByName(\"mobileHome\")[0]\r\n });\r\n }\r\n }\r\n else if (this.isTablet()) {\r\n if (document.getElementsByName(\"tabletHome\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view your main learning content and data.\",\r\n element: document.getElementsByName(\"tabletHome\")[0]\r\n });\r\n }\r\n }\r\n else {\r\n if (document.getElementsByName(\"firstIntroPage\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view your main learning content and data.\",\r\n element: document.getElementsByName(\"firstIntroPage\")[0]\r\n });\r\n }\r\n }\r\n if (!this.isMobileView()) {\r\n if (document.getElementsByName(\"commentsAndAssessments\").length > 0) {\r\n steps.push({\r\n title: \"Comments and Assessments\",\r\n element: document.getElementsByName(\"commentsAndAssessments\")[0],\r\n intro: \"View new comments and assessments waiting for your response for today or last week.\"\r\n });\r\n }\r\n }\r\n if (document.getElementsByName(\"searchAndFilter\").length > 0) {\r\n steps.push({\r\n title: \"Search and filter\",\r\n element: document.getElementsByName(\"searchAndFilter\")[0],\r\n intro: \"Search by title, description, tags. Filter by subject, type, etc.\"\r\n });\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.lessThenMin()) {\r\n if (document.getElementsByName(\"home_instructor_coursesIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Courses\",\r\n element: document.getElementsByName(\"home_instructor_coursesIntroStep\")[0],\r\n intro: \"View courses you are responsible for.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_instructor_learningPathsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Learning Paths\",\r\n element: document.getElementsByName(\"home_instructor_learningPathsIntroStep\")[0],\r\n intro: \"View learning paths including courses you are responsible for. They are available only if you have at list one Learning Paths assigned. If you do, Learning Path will be your Home page.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_instructor_reportsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Reports\",\r\n element: document.getElementsByName(\"home_instructor_reportsIntroStep\")[0],\r\n intro: \"View statistics on learning progress, course starts and completions by courses managed by your.\"\r\n });\r\n }\r\n }\r\n else {\r\n if (document.getElementsByName(\"dropDownHomeMenu\").length > 0) {\r\n steps.push({\r\n title: \"Menu\",\r\n element: document.getElementsByName(\"dropDownHomeMenu\")[0],\r\n intro: \"Quickly get to task you need to accomplish\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.smallDisplay()) {\r\n if (document.getElementsByName(\"advancedMenu\").length > 0) {\r\n steps.push({\r\n title: \"Advanced menu\",\r\n element: document.getElementsByName(\"advancedMenu\")[0],\r\n intro: \"Single point to find and access everything in your CoreAchieve platform. Choose My Courses to access your own learning homepage.\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && this.smallDisplay()) {\r\n if (document.getElementsByName(\"advancedMenuSmallDisplay\").length > 0) {\r\n steps.push({\r\n title: \"Advanced menu\",\r\n element: document.getElementsByName(\"advancedMenuSmallDisplay\")[0],\r\n intro: \"Single point to find and access everything in your CoreAchieve platform. Choose My Courses to access your own learning homepage.\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.lessThenMin()) {\r\n if (document.getElementsByClassName(\"vhs-navbar__account-name\").length > 0) {\r\n steps.push({\r\n title: \"My Profile/Settings\",\r\n element: document.getElementsByClassName(\"vhs-navbar__account-name\")[0],\r\n intro: \"Go to My Profile/Settings and select your home page view if you have multiple roles (administrator, instructor, attendee manager, author, learner).\"\r\n });\r\n }\r\n }\r\n return steps;\r\n };\r\n IntroService.prototype.buildAttendeeManagerHomePageOptions = function () {\r\n var steps = [];\r\n if (this.isMobileView()) {\r\n if (document.getElementsByName(\"mobileHome\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view your main learning content and data.\",\r\n element: document.getElementsByName(\"mobileHome\")[0]\r\n });\r\n }\r\n }\r\n else if (this.isTablet()) {\r\n if (document.getElementsByName(\"tabletHome\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view your main learning content and data.\",\r\n element: document.getElementsByName(\"tabletHome\")[0]\r\n });\r\n }\r\n }\r\n else {\r\n if (document.getElementsByName(\"firstIntroPage\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view your main learning content and data.\",\r\n element: document.getElementsByName(\"firstIntroPage\")[0]\r\n });\r\n }\r\n }\r\n if (!this.isMobileView()) {\r\n if (document.getElementsByName(\"comments\").length > 0) {\r\n steps.push({\r\n title: \"Comments\",\r\n element: document.getElementsByName(\"comments\")[0],\r\n intro: \"View new comments waiting for your response for today or last week.\"\r\n });\r\n }\r\n }\r\n if (document.getElementsByName(\"searchAndFilter\").length > 0) {\r\n steps.push({\r\n title: \"Search and filter\",\r\n element: document.getElementsByName(\"searchAndFilter\")[0],\r\n intro: \"Search by title, description, tags. Filter by subject, type, etc.\"\r\n });\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.lessThenMin()) {\r\n if (document.getElementsByName(\"home_attendeeManager_participantsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Progress\",\r\n element: document.getElementsByName(\"home_attendeeManager_participantsIntroStep\")[0],\r\n intro: \"View detailed data on learning progress by courses managed by you.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_attendeeManager_coursesIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Courses\",\r\n element: document.getElementsByName(\"home_attendeeManager_coursesIntroStep\")[0],\r\n intro: \"View courses you are responsible for.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_attendeeManager_learningPathsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Learning Paths\",\r\n element: document.getElementsByName(\"home_attendeeManager_learningPathsIntroStep\")[0],\r\n intro: \"View learning paths including courses you are responsible for.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_attendeeManager_reportsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Reports\",\r\n element: document.getElementsByName(\"home_attendeeManager_reportsIntroStep\")[0],\r\n intro: \"View statistics on learning progress, course starts and completions by courses managed by your.\"\r\n });\r\n }\r\n }\r\n else {\r\n if (document.getElementsByName(\"dropDownHomeMenu\").length > 0) {\r\n steps.push({\r\n title: \"Menu\",\r\n element: document.getElementsByName(\"dropDownHomeMenu\")[0],\r\n intro: \"Quickly get to task you need to accomplish\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.smallDisplay()) {\r\n if (document.getElementsByName(\"advancedMenu\").length > 0) {\r\n steps.push({\r\n title: \"Advanced menu\",\r\n element: document.getElementsByName(\"advancedMenu\")[0],\r\n intro: \"Single point to find and access everything in your CoreAchieve platform. Choose My Courses to access your own learning homepage.\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && this.smallDisplay()) {\r\n if (document.getElementsByName(\"advancedMenuSmallDisplay\").length > 0) {\r\n steps.push({\r\n title: \"Advanced menu\",\r\n element: document.getElementsByName(\"advancedMenuSmallDisplay\")[0],\r\n intro: \"Single point to find and access everything in your CoreAchieve platform. Choose My Courses to access your own learning homepage.\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.lessThenMin()) {\r\n if (document.getElementsByClassName(\"vhs-navbar__account-name\").length > 0) {\r\n steps.push({\r\n title: \"My Profile/Settings\",\r\n element: document.getElementsByClassName(\"vhs-navbar__account-name\")[0],\r\n intro: \"Go to My Profile/Settings and select your home page view if you have multiple roles (administrator, instructor, attendee manager, author, learner).\"\r\n });\r\n }\r\n }\r\n return steps;\r\n };\r\n IntroService.prototype.buildAuthorHomePageOptions = function () {\r\n var steps = [];\r\n if (this.isMobileView()) {\r\n if (document.getElementsByName(\"mobileHome\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view your main learning content and data.\",\r\n element: document.getElementsByName(\"mobileHome\")[0]\r\n });\r\n }\r\n }\r\n else if (this.isTablet()) {\r\n if (document.getElementsByName(\"tabletHome\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view your main learning content and data.\",\r\n element: document.getElementsByName(\"tabletHome\")[0]\r\n });\r\n }\r\n }\r\n else {\r\n if (document.getElementsByName(\"firstIntroPage\").length > 0) {\r\n steps.push({\r\n title: \"Home page\",\r\n intro: \"Smart home page delivering all important information in one place. This dashboard allows to view your main learning content and data.\",\r\n element: document.getElementsByName(\"firstIntroPage\")[0]\r\n });\r\n }\r\n }\r\n if (document.getElementsByName(\"searchAndFilter\").length > 0) {\r\n steps.push({\r\n title: \"Search and filter\",\r\n element: document.getElementsByName(\"searchAndFilter\")[0],\r\n intro: \"Search by title, description, tags. Filter by subject, type, etc.\"\r\n });\r\n }\r\n if (!this.isMobileView()) {\r\n if (document.getElementsByName(\"quickFilterMaterials\").length > 0) {\r\n steps.push({\r\n title: \"Quick filter\",\r\n element: document.getElementsByName(\"quickFilterMaterials\")[0],\r\n intro: \"Quick filter by status: All, Audio, Video, Image, Link, Other\"\r\n });\r\n }\r\n }\r\n if (document.getElementsByName(\"searchField\").length > 0) {\r\n steps.push({\r\n title: \"Search\",\r\n element: document.getElementsByName(\"searchField\")[0],\r\n intro: \"Search by title, description, tags.\"\r\n });\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.lessThenMin()) {\r\n if (document.getElementsByName(\"home_author_coursesIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Courses\",\r\n element: document.getElementsByName(\"home_author_coursesIntroStep\")[0],\r\n intro: \"View courses managed by you.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_author_learningPathsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Learning Paths\",\r\n element: document.getElementsByName(\"home_author_learningPathsIntroStep\")[0],\r\n intro: \"View learning paths managed by you. Learning Path will be your Home page.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"ThreeIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Quizzes, Surveys, Materials\",\r\n element: document.getElementsByName(\"ThreeIntroStep\")[0],\r\n intro: \"View quizzes, surveys, materials managed by you.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"home_author_reportsIntroStep\").length > 0) {\r\n steps.push({\r\n title: \"Reports\",\r\n element: document.getElementsByName(\"home_author_reportsIntroStep\")[0],\r\n intro: \"View statistics on learning progress, course starts and completions by courses managed by your.\"\r\n });\r\n }\r\n }\r\n else {\r\n if (document.getElementsByName(\"dropDownHomeMenu\").length > 0) {\r\n steps.push({\r\n title: \"Menu\",\r\n element: document.getElementsByName(\"dropDownHomeMenu\")[0],\r\n intro: \"Quickly get to task you need to accomplish\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.smallDisplay()) {\r\n if (document.getElementsByName(\"advancedMenu\").length > 0) {\r\n steps.push({\r\n title: \"Advanced menu\",\r\n element: document.getElementsByName(\"advancedMenu\")[0],\r\n intro: \"Single point to find and access everything in your CoreAchieve platform. Choose My Courses to access your own learning homepage.\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && this.smallDisplay()) {\r\n if (document.getElementsByName(\"advancedMenuSmallDisplay\").length > 0) {\r\n steps.push({\r\n title: \"Advanced menu\",\r\n element: document.getElementsByName(\"advancedMenuSmallDisplay\")[0],\r\n intro: \"Single point to find and access everything in your CoreAchieve platform. Choose My Courses to access your own learning homepage.\"\r\n });\r\n }\r\n }\r\n if (!this.isMobileView() && !this.isTablet() && !this.lessThenMin()) {\r\n if (document.getElementsByClassName(\"vhs-navbar__account-name\").length > 0) {\r\n steps.push({\r\n title: \"My Profile/Settings\",\r\n element: document.getElementsByClassName(\"vhs-navbar__account-name\")[0],\r\n intro: \"Go to My Profile/Settings and select your home page view if you have multiple roles (administrator, instructor, attendee manager, author, learner).\"\r\n });\r\n }\r\n }\r\n return steps;\r\n };\r\n IntroService.prototype.buildEditMaterialPageFirstOptions = function () {\r\n var steps = [];\r\n if (document.getElementsByName(\"material_uploadFiles\").length > 0) {\r\n steps.push({\r\n title: 'New features for video/audio',\r\n element: document.getElementsByName(\"material_uploadFiles\")[0],\r\n intro: 'Upload a video or audio file and a new feature - \"Checkpoints\" will be available to you.'\r\n });\r\n }\r\n return steps;\r\n };\r\n IntroService.prototype.buildEditMaterialPageSecondOptions = function () {\r\n var steps = [];\r\n if (document.getElementsByName(\"material_checkpoints\").length > 0) {\r\n steps.push({\r\n title: 'Adding Checkpoints',\r\n element: document.getElementsByName(\"material_checkpoints\")[0],\r\n intro: \"Checkpoints functionality allows you to automatically pause the video/audio at specific intervals, prompting learners to confirm their presence and attentiveness.
    Save the material and return to edit mode to add checkpoints.\"\r\n });\r\n }\r\n return steps;\r\n };\r\n IntroService.prototype.buildEditMaterialPageThirdOptions = function () {\r\n var steps = [];\r\n if (document.getElementsByName(\"material_CheckpointType\").length > 0) {\r\n steps.push({\r\n title: 'Checkpoint type',\r\n element: document.getElementsByName(\"material_CheckpointType\")[0],\r\n intro: \"Select the type of the checkpoint.
    To continue, the student will need to either press a button or answer a question.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"material_CheckpointAttributes\").length > 0) {\r\n steps.push({\r\n title: 'Other checkpoint attributes',\r\n element: document.getElementsByName(\"material_CheckpointAttributes\")[0],\r\n intro: \"Specify the title - the text of the checkpoint you want to address to the learner, the time of the checkpoint appearance and the text of the button to press to continue watching.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"material_checkpointTime\").length > 0) {\r\n steps.push({\r\n title: 'Other checkpoint attributes',\r\n element: document.getElementsByName(\"material_checkpointTime\")[0],\r\n intro: \"Define the time allotted to the learner to pass the checkpoint and what should happen if the learner doesn’t click the button before the timeout.\"\r\n });\r\n }\r\n if (document.getElementsByName(\"material_checkpointAnswer\").length > 0) {\r\n steps.push({\r\n title: 'Other checkpoint attributes',\r\n element: document.getElementsByName(\"material_checkpointAnswer\")[0],\r\n intro: 'Specify the answers and mark the correct option.'\r\n });\r\n }\r\n return steps;\r\n };\r\n IntroService.prototype.buildEditMaterialPageFourthOptions = function () {\r\n var steps = [];\r\n if (document.getElementsByName(\"material_checkpointList\").length > 0) {\r\n steps.push({\r\n title: 'Checkpoints list',\r\n element: document.getElementsByName(\"material_checkpointList\")[0],\r\n intro: 'Here you can see and manage all the created checkpoints.'\r\n });\r\n }\r\n if (document.getElementsByName(\"material_rewindPrevention\").length > 0) {\r\n steps.push({\r\n title: 'Rewind prevention',\r\n element: document.getElementsByName(\"material_rewindPrevention\")[0],\r\n intro: \"You can prevent the user from rewinding through the video.
    After adding a checkpoint, this option is automatically turned off.\"\r\n });\r\n }\r\n return steps;\r\n };\r\n IntroService.prototype.isMobileView = function () {\r\n return window.screen.width <= 767;\r\n };\r\n IntroService.prototype.isTablet = function () {\r\n return window.screen.width <= 991 && window.screen.width >= 768;\r\n };\r\n IntroService.prototype.lessThenMin = function () {\r\n return window.innerWidth < 1200;\r\n };\r\n IntroService.prototype.smallDisplay = function () {\r\n return window.innerWidth < 992;\r\n };\r\n IntroService.NAME = \"info.IntroService\";\r\n IntroService.$inject = [];\r\n return IntroService;\r\n})();\r\nexports.IntroService = IntroService;\r\n},{}],293:[function(require,module,exports){\nvar EventService = (function () {\r\n function EventService() {\r\n this.listeners = new Map();\r\n }\r\n EventService.prototype.registerListener = function (event, listener) {\r\n event = event || \"\";\r\n if (!this.listeners.has(event)) {\r\n this.listeners.set(event, []);\r\n }\r\n this.listeners.get(event).push(listener);\r\n };\r\n EventService.prototype.unregisterListener = function (event, listener) {\r\n event = event || \"\";\r\n if (!this.listeners.has(event)) {\r\n return;\r\n }\r\n for (var i = 0; i < this.listeners.get(event).length; ++i) {\r\n var l = this.listeners.get(event)[i];\r\n if (l == listener) {\r\n this.listeners.get(event).splice(i, 1);\r\n break;\r\n }\r\n }\r\n if (this.listeners.get(event).length == 0) {\r\n this.listeners.delete(event);\r\n }\r\n };\r\n EventService.prototype.notify = function (event) {\r\n event = event || \"\";\r\n var listeners = this.listeners.get(event);\r\n angular.forEach(listeners, function (listener) { return listener(); });\r\n };\r\n EventService.NAME = \"infrastructure.EventService\";\r\n return EventService;\r\n})();\r\nexports.EventService = EventService;\r\n},{}],294:[function(require,module,exports){\nvar Storage_1 = require(\"./Storage\");\r\nvar EventService_1 = require(\"./EventService\");\r\nexports.InfrastructureModule = angular\r\n .module(\"infrastructure\", [])\r\n .constant(Storage_1.Storages.LOCAL_NAME, Storage_1.Storages.LOCAL)\r\n .constant(Storage_1.Storages.SESSION_NAME, Storage_1.Storages.SESSION)\r\n .service(EventService_1.EventService.NAME, EventService_1.EventService);\r\n},{\"./EventService\":293,\"./Storage\":295}],295:[function(require,module,exports){\nvar StorageWrapper = (function () {\r\n function StorageWrapper(storage) {\r\n this.storage = storage;\r\n }\r\n StorageWrapper.prototype.put = function (key, value) {\r\n var stringified = JSON.stringify(value);\r\n this.storage.setItem(key, stringified);\r\n };\r\n StorageWrapper.prototype.get = function (key) {\r\n var stringified = this.storage.getItem(key);\r\n return stringified && stringified.length > 0\r\n ? $.parseJSON(stringified)\r\n : null;\r\n };\r\n StorageWrapper.prototype.contains = function (key) {\r\n var stringified = this.storage.getItem(key);\r\n return stringified && stringified.length > 0;\r\n };\r\n StorageWrapper.prototype.remove = function (key) {\r\n this.storage.removeItem(key);\r\n };\r\n return StorageWrapper;\r\n})();\r\nexports.StorageWrapper = StorageWrapper;\r\nvar Storages = (function () {\r\n function Storages() {\r\n }\r\n Storages.LOCAL_NAME = \"infrastructure.LocalStorage\";\r\n Storages.SESSION_NAME = \"infrastructure.SessionStorage\";\r\n Storages.LOCAL = new StorageWrapper(localStorage);\r\n Storages.SESSION = new StorageWrapper(sessionStorage);\r\n return Storages;\r\n})();\r\nexports.Storages = Storages;\r\n},{}],296:[function(require,module,exports){\nvar CommonModule_1 = require(\"../../common/CommonModule\");\r\nvar SecurityModule_1 = require(\"../../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../../urls/UrlsModule\");\r\nvar ContentModule_1 = require(\"../../content/ContentModule\");\r\nvar AuthorizeNetService_1 = require(\"./AuthorizeNetService\");\r\nexports.AuthorizeNetModule = angular\r\n .module(\"authorizeNet\", [\r\n CommonModule_1.CommonModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n ContentModule_1.ContentModule.name\r\n])\r\n .service(AuthorizeNetService_1.AuthorizeNetService.NAME, AuthorizeNetService_1.AuthorizeNetService);\r\n},{\"../../common/CommonModule\":51,\"../../content/ContentModule\":190,\"../../security/SecurityModule\":419,\"../../urls/UrlsModule\":492,\"./AuthorizeNetService\":297}],297:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar AuthorizeNetService = (function () {\r\n function AuthorizeNetService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n AuthorizeNetService.prototype.getToken = function (businessUnitId, amount, returnUrl, productId) {\r\n var orderCreationInput = {\r\n productId: productId,\r\n businessUnitId: businessUnitId,\r\n returnUrl: returnUrl\r\n };\r\n return this.$http.post(this.url.base(\"/api/integration/authorizenet/orders\").service(), orderCreationInput)\r\n .then(function (result) { return result.data; });\r\n };\r\n AuthorizeNetService.prototype.confirmOrder = function (transactionId, productId) {\r\n return this.$http.put(this.url.base(\"/api/integration/authorizenet/confirm/:productId/order?transactionId=:transactionId\")\r\n .param(\":productId\", productId)\r\n .param(\":transactionId\", transactionId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n AuthorizeNetService.NAME = \"integration.authorizenet.AuthorizeNetService\";\r\n AuthorizeNetService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return AuthorizeNetService;\r\n})();\r\nexports.AuthorizeNetService = AuthorizeNetService;\r\n},{\"../../utils/UrlService\":528}],298:[function(require,module,exports){\nvar CommonModule_1 = require(\"../../common/CommonModule\");\r\nvar SecurityModule_1 = require(\"../../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../../urls/UrlsModule\");\r\nvar AzureCognitiveServicesService_1 = require(\"./AzureCognitiveServicesService\");\r\nexports.AzureCognitiveServicesModule = angular\r\n .module(\"cognitiveServices\", [\r\n CommonModule_1.CommonModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n])\r\n .service(AzureCognitiveServicesService_1.AzureCognitiveServicesService.NAME, AzureCognitiveServicesService_1.AzureCognitiveServicesService);\r\n},{\"../../common/CommonModule\":51,\"../../security/SecurityModule\":419,\"../../urls/UrlsModule\":492,\"./AzureCognitiveServicesService\":299}],299:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar AzureCognitiveServicesService = (function () {\r\n function AzureCognitiveServicesService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n AzureCognitiveServicesService.prototype.getImmersiveReaderLaunchData = function () {\r\n return this.$http.get(this.url.base(\"/api/integration/cognitiveServices/immersiveReader/launchData\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n AzureCognitiveServicesService.NAME = \"integration.azureCognitiveServices.AzureCognitiveServicesService\";\r\n AzureCognitiveServicesService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return AzureCognitiveServicesService;\r\n})();\r\nexports.AzureCognitiveServicesService = AzureCognitiveServicesService;\r\n},{\"../../utils/UrlService\":528}],300:[function(require,module,exports){\nvar CommonModule_1 = require(\"../../common/CommonModule\");\r\nvar SecurityModule_1 = require(\"../../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../../urls/UrlsModule\");\r\nvar AzureWebchatBotframeworkService_1 = require(\"./AzureWebchatBotframeworkService\");\r\nexports.AzureWebchatBotframeworkModule = angular\r\n .module(\"webchatBotframework\", [\r\n CommonModule_1.CommonModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n])\r\n .service(AzureWebchatBotframeworkService_1.AzureWebchatBotframeworkService.NAME, AzureWebchatBotframeworkService_1.AzureWebchatBotframeworkService);\r\n},{\"../../common/CommonModule\":51,\"../../security/SecurityModule\":419,\"../../urls/UrlsModule\":492,\"./AzureWebchatBotframeworkService\":301}],301:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar AzureWebchatBotframeworkService = (function () {\r\n function AzureWebchatBotframeworkService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n AzureWebchatBotframeworkService.prototype.getSettings = function () {\r\n return this.$http.get(this.url.base(\"/api/integration/webchat/botframework/settings\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n AzureWebchatBotframeworkService.NAME = \"integration.azureWebchatBotframework.AzureWebchatBotframeworkService\";\r\n AzureWebchatBotframeworkService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return AzureWebchatBotframeworkService;\r\n})();\r\nexports.AzureWebchatBotframeworkService = AzureWebchatBotframeworkService;\r\n},{\"../../utils/UrlService\":528}],302:[function(require,module,exports){\nvar CommonModule_1 = require(\"../../common/CommonModule\");\r\nvar SecurityModule_1 = require(\"../../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../../urls/UrlsModule\");\r\nvar ContentModule_1 = require(\"../../content/ContentModule\");\r\nvar FreeEnrollmentService_1 = require(\"./FreeEnrollmentService\");\r\nexports.FreeEnrollmentModule = angular\r\n .module(\"freeenrollment\", [\r\n CommonModule_1.CommonModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n ContentModule_1.ContentModule.name\r\n])\r\n .service(FreeEnrollmentService_1.FreeEnrollmentService.NAME, FreeEnrollmentService_1.FreeEnrollmentService);\r\n},{\"../../common/CommonModule\":51,\"../../content/ContentModule\":190,\"../../security/SecurityModule\":419,\"../../urls/UrlsModule\":492,\"./FreeEnrollmentService\":303}],303:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar FreeEnrollmentService = (function () {\r\n function FreeEnrollmentService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n FreeEnrollmentService.prototype.createOrder = function (freeEnrollmentOrder) {\r\n return this.$http.post(this.url.base(\"/api/integration/enrollment/orders/create\")\r\n .service(), freeEnrollmentOrder)\r\n .then(function (result) { return result.data; });\r\n };\r\n FreeEnrollmentService.prototype.confirmFreeEnrollment = function (productId) {\r\n return this.$http.put(this.url.base(\"/api/integration/enrollment/confirm/:productId/order\")\r\n .param(\":productId\", productId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n FreeEnrollmentService.NAME = \"integration.freeenrollment.FreeEnrollmentService\";\r\n FreeEnrollmentService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return FreeEnrollmentService;\r\n})();\r\nexports.FreeEnrollmentService = FreeEnrollmentService;\r\n},{\"../../utils/UrlService\":528}],304:[function(require,module,exports){\nvar PayPalRouter_1 = require(\"../../urls/PayPalRouter\");\r\nvar PayPalService_1 = require(\"./PayPalService\");\r\nvar AuthRedirect_1 = require(\"../../authcore/AuthRedirect\");\r\nvar CoursesRouter_1 = require(\"../../urls/CoursesRouter\");\r\nvar PayPalOrderCancellationController = (function () {\r\n function PayPalOrderCancellationController($q, $timeout, $routeParams, $location, payPalService, authRedirect, coursesRouter) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$timeout = $timeout;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.payPalService = payPalService;\r\n this.authRedirect = authRedirect;\r\n this.coursesRouter = coursesRouter;\r\n this.orderId = $routeParams[PayPalRouter_1.PayPalRouter.ORDER_ID_PARAM];\r\n if (this.orderId == null || this.orderId == null) {\r\n this.authRedirect.forwardToAccessDenied();\r\n }\r\n $q.all([\r\n $q.when(this.$timeout(function () { }, 5000)),\r\n this.deleteOrder()\r\n ]).then(function () {\r\n _this.$location.url(coursesRouter.indexUrl());\r\n });\r\n }\r\n PayPalOrderCancellationController.prototype.deleteOrder = function () {\r\n return this.payPalService.deleteOrder(this.orderId);\r\n };\r\n PayPalOrderCancellationController.NAME = \"integration.paypal.PayPalOrderCancellationController\";\r\n PayPalOrderCancellationController.$inject = [\r\n \"$q\",\r\n \"$timeout\",\r\n \"$routeParams\",\r\n \"$location\",\r\n PayPalService_1.PayPalService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return PayPalOrderCancellationController;\r\n})();\r\nexports.PayPalOrderCancellationController = PayPalOrderCancellationController;\r\n},{\"../../authcore/AuthRedirect\":26,\"../../urls/CoursesRouter\":468,\"../../urls/PayPalRouter\":483,\"./PayPalService\":306}],305:[function(require,module,exports){\nvar PayPalRouter_1 = require(\"../../urls/PayPalRouter\");\r\nvar PayPalService_1 = require(\"./PayPalService\");\r\nvar AuthRedirect_1 = require(\"../../authcore/AuthRedirect\");\r\nvar FinancesRouter_1 = require(\"../../urls/FinancesRouter\");\r\nvar INotifier_1 = require(\"../../INotifier\");\r\nvar CoursesRouter_1 = require(\"../../urls/CoursesRouter\");\r\nvar PayPalOrderConfirmationController = (function () {\r\n function PayPalOrderConfirmationController($routeParams, $location, payPalService, authRedirect, financesRouter, coursesRouter) {\r\n var _this = this;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.payPalService = payPalService;\r\n this.authRedirect = authRedirect;\r\n this.financesRouter = financesRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.orderId = $routeParams[PayPalRouter_1.PayPalRouter.ORDER_ID_PARAM];\r\n if (this.orderId === null || this.orderId === undefined) {\r\n this.authRedirect.forwardToAccessDenied();\r\n }\r\n this.confirmOrder()\r\n .then(function (purchasedOrderId) {\r\n _this.$location.url(financesRouter.purchasedProductUrl(purchasedOrderId));\r\n })\r\n .catch(function (result) {\r\n if (result.data.error === \"error.order.creation.time\") {\r\n INotifier_1.notifier.error(\"Time for completing the payment has expired.\");\r\n _this.$location.url(coursesRouter.indexUrl());\r\n }\r\n });\r\n }\r\n PayPalOrderConfirmationController.prototype.confirmOrder = function () {\r\n return this.payPalService.confirmOrder(this.orderId);\r\n };\r\n PayPalOrderConfirmationController.NAME = \"integration.paypal.PayPalOrderConfirmationController\";\r\n PayPalOrderConfirmationController.$inject = [\r\n \"$routeParams\",\r\n \"$location\",\r\n PayPalService_1.PayPalService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return PayPalOrderConfirmationController;\r\n})();\r\nexports.PayPalOrderConfirmationController = PayPalOrderConfirmationController;\r\n},{\"../../INotifier\":5,\"../../authcore/AuthRedirect\":26,\"../../urls/CoursesRouter\":468,\"../../urls/FinancesRouter\":471,\"../../urls/PayPalRouter\":483,\"./PayPalService\":306}],306:[function(require,module,exports){\nvar UrlService_1 = require(\"../../utils/UrlService\");\r\nvar PayPalService = (function () {\r\n function PayPalService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n PayPalService.prototype.createOrder = function (productId) {\r\n var orderCreationInput = {\r\n productId: productId\r\n };\r\n return this.$http.post(this.url.base(\"/api/integration/paypal/orders\")\r\n .service(), orderCreationInput)\r\n .then(function (result) { return result.data; });\r\n };\r\n PayPalService.prototype.createOrderSmart = function (productId) {\r\n var orderCreationInput = {\r\n productId: productId\r\n };\r\n return this.$http.post(this.url.base(\"/api/integration/paypal/orders/smart\")\r\n .service(), orderCreationInput)\r\n .then(function (result) { return result.data; });\r\n };\r\n PayPalService.prototype.confirmOrder = function (orderId) {\r\n return this.$http.put(this.url.base(\"/api/integration/paypal/orders/:orderId/confirm\")\r\n .param(\":orderId\", orderId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n PayPalService.prototype.confirmOrderSmart = function (orderId) {\r\n return this.$http.post(this.url.base(\"/api/integration/paypal/orders/confirm/smart\")\r\n .service(), orderId)\r\n .then(function (result) { return result.data; });\r\n };\r\n PayPalService.prototype.deleteOrder = function (orderId) {\r\n return this.$http.delete(this.url.base(\"/api/integration/paypal/orders/:orderId\")\r\n .param(\":orderId\", orderId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PayPalService.prototype.createSubscriptionPurchaseOrder = function (productId, subscriptionId) {\r\n var orderCreationInput = {\r\n productId: productId,\r\n subscriptionId: subscriptionId\r\n };\r\n return this.$http.post(this.url.base(\"/api/integration/paypal/subscriptions/orders\")\r\n .service(), orderCreationInput)\r\n .then(function (result) { return result.data; });\r\n };\r\n PayPalService.prototype.approveSubscription = function (productId, subscriptionId) {\r\n return this.$http.put(this.url.base(\"/api/integration/paypal/subscriptions/:subscriptionId\")\r\n .param(\":subscriptionId\", subscriptionId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n PayPalService.prototype.cancelSubscription = function (purchaseOrderId) {\r\n return this.$http.put(this.url.base(\"/api/integration/paypal/subscriptions/:purchaseOrderId/cancel\")\r\n .param(\":purchaseOrderId\", purchaseOrderId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n PayPalService.prototype.getExpirationDateForSubscription = function (subscriptionId) {\r\n return this.$http.get(this.url.service(\"/api/integration/paypal/subscriptions/\" + subscriptionId + \"/expiration\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n PayPalService.prototype.getPurchasedOrdersReport = function (parameters) {\r\n var _this = this;\r\n var reportType = 'PURCHASED_ORDERS_REPORT';\r\n return this.$http.post(this.url.base(\"/api/reports/downloadToken/:reportType\")\r\n .param(\":reportType\", reportType)\r\n .service(), {\r\n parameters: JSON.stringify(parameters)\r\n }).then(function (result) { return _this.url.base(\"/api/reports/download/:token\").param(\":token\", result.data.token).service(); });\r\n };\r\n PayPalService.NAME = \"integration.paypal.PayPalService\";\r\n PayPalService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return PayPalService;\r\n})();\r\nexports.PayPalService = PayPalService;\r\n},{\"../../utils/UrlService\":528}],307:[function(require,module,exports){\nvar ContentModule_1 = require(\"../../content/ContentModule\");\r\nvar CommonModule_1 = require(\"../../common/CommonModule\");\r\nvar SecurityModule_1 = require(\"../../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../../urls/UrlsModule\");\r\nvar PayPalService_1 = require(\"./PayPalService\");\r\nvar PayPalOrderCancellationController_1 = require(\"./PayPalOrderCancellationController\");\r\nvar PayPalOrderConfirmationController_1 = require(\"./PayPalOrderConfirmationController\");\r\nexports.PayPalModule = angular\r\n .module(\"purchases\", [\r\n CommonModule_1.CommonModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n ContentModule_1.ContentModule.name\r\n])\r\n .controller(PayPalOrderCancellationController_1.PayPalOrderCancellationController.NAME, PayPalOrderCancellationController_1.PayPalOrderCancellationController)\r\n .controller(PayPalOrderConfirmationController_1.PayPalOrderConfirmationController.NAME, PayPalOrderConfirmationController_1.PayPalOrderConfirmationController)\r\n .service(PayPalService_1.PayPalService.NAME, PayPalService_1.PayPalService);\r\n},{\"../../common/CommonModule\":51,\"../../content/ContentModule\":190,\"../../security/SecurityModule\":419,\"../../urls/UrlsModule\":492,\"./PayPalOrderCancellationController\":304,\"./PayPalOrderConfirmationController\":305,\"./PayPalService\":306}],308:[function(require,module,exports){\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar SystemPropertyKey_1 = require(\"../settings/models/SystemPropertyKey\");\r\nvar JobsController = (function () {\r\n function JobsController($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n this.sortedAsc = false;\r\n this.jobsMapKeys = [];\r\n this.activeJobsGroup = 'ALL';\r\n this.needsToFeelMap = true;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_CRON_JOBS_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Background Jobs\").update();\r\n this.jobsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/jobs\")));\r\n this.instancesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/jobs/servers\")));\r\n this.jobsGridModel.pageSize = 40;\r\n this.searchingTask = null;\r\n }\r\n JobsController.prototype.startJob = function (job) {\r\n var _this = this;\r\n this.$http.post(this.url.service(\"/api/jobs/\" + job.name + \"/trigger\"), null)\r\n .then(function () {\r\n _this.jobsGridModel.loadCurrentPage();\r\n INotifier_1.notifier.success(\"Job STARTED\");\r\n })\r\n .catch(function () { return INotifier_1.notifier.error(\"Error in Job start\"); });\r\n };\r\n JobsController.prototype.interruptJob = function (job) {\r\n var _this = this;\r\n this.$http.post(this.url.service(\"/api/jobs/\" + job.name + \"/interrupt\"), null)\r\n .then(function () {\r\n _this.jobsGridModel.loadCurrentPage();\r\n INotifier_1.notifier.success(\"Stop command sent\");\r\n })\r\n .catch(function () { return INotifier_1.notifier.error(\"Error in stop command sending\"); });\r\n };\r\n JobsController.prototype.ClearSearchingTask = function () {\r\n this.searchingTask = null;\r\n };\r\n JobsController.prototype.sortJobsByName = function () {\r\n if (this.activeJobsGroup == 'ALL') {\r\n this.jobsGridModel.entries.sort(function (first, second) { return first.name.localeCompare(second.name); });\r\n if (!this.sortedAsc) {\r\n this.sortedAsc = true;\r\n }\r\n else {\r\n this.jobsGridModel.entries.reverse();\r\n this.sortedAsc = false;\r\n }\r\n }\r\n else {\r\n this.jobsMap.get(this.activeJobsGroup).sort(function (first, second) { return first.name.localeCompare(second.name); });\r\n if (!this.sortedAsc) {\r\n this.sortedAsc = true;\r\n }\r\n else {\r\n this.jobsMap.get(this.activeJobsGroup).reverse();\r\n this.sortedAsc = false;\r\n }\r\n }\r\n };\r\n JobsController.prototype.loadAllJobs = function () {\r\n var _this = this;\r\n if (this.needsToFeelMap) {\r\n var jobsGroups = JSON.parse(SystemPropertyKey_1.SystemPropertyKey.jobsGroupJson);\r\n var jobsMap = new Map();\r\n this.jobsGridModel.entries.forEach(function (job) {\r\n if (jobsMap.has(jobsGroups[job.name])) {\r\n jobsMap.get(jobsGroups[job.name]).push(job);\r\n }\r\n else {\r\n jobsMap.set(jobsGroups[job.name], []);\r\n _this.jobsMapKeys.push(jobsGroups[job.name]);\r\n jobsMap.get(jobsGroups[job.name]).push(job);\r\n }\r\n });\r\n this.jobsMap = jobsMap;\r\n this.needsToFeelMap = false;\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n };\r\n JobsController.prototype.toggleActive = function (jobsGroup) {\r\n switch (jobsGroup) {\r\n case 'ALL': {\r\n this.activeJobsGroup = 'ALL';\r\n break;\r\n }\r\n case 'SYSTEM': {\r\n this.activeJobsGroup = 'SYSTEM';\r\n break;\r\n }\r\n case 'COURSE': {\r\n this.activeJobsGroup = 'COURSE';\r\n break;\r\n }\r\n case 'CERTIFICATE': {\r\n this.activeJobsGroup = 'CERTIFICATE';\r\n break;\r\n }\r\n case 'QUIZ': {\r\n this.activeJobsGroup = 'QUIZ';\r\n break;\r\n }\r\n case 'FILE': {\r\n this.activeJobsGroup = 'FILE';\r\n break;\r\n }\r\n case 'WEBINAR': {\r\n this.activeJobsGroup = 'WEBINAR';\r\n break;\r\n }\r\n case 'LEARNING_PATH': {\r\n this.activeJobsGroup = 'LEARNING_PATH';\r\n break;\r\n }\r\n case 'PRODUCT': {\r\n this.activeJobsGroup = 'PRODUCT';\r\n break;\r\n }\r\n case 'BUSINESS_UNITS': {\r\n this.activeJobsGroup = 'BUSINESS_UNITS';\r\n break;\r\n }\r\n case 'GAMIFICATION': {\r\n this.activeJobsGroup = 'GAMIFICATION';\r\n break;\r\n }\r\n }\r\n };\r\n JobsController.NAME = \"jobs.JobsController\";\r\n JobsController.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return JobsController;\r\n})();\r\nexports.JobsController = JobsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../settings/models/SystemPropertyKey\":434,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528}],309:[function(require,module,exports){\nvar JobsController_1 = require(\"./JobsController\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nexports.JobsModule = angular\r\n .module(\"jobs\", [\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .controller(JobsController_1.JobsController.NAME, JobsController_1.JobsController);\r\n},{\"../urls/UrlsModule\":492,\"./JobsController\":308}],310:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar LearningPathService_1 = require(\"./LearningPathService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar UploadUtils_1 = require(\"../utils/UploadUtils\");\r\nvar CertificateService_1 = require(\"../certificates/CertificateService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar UploadsService_1 = require(\"../storage/UploadsService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CertificateTemplateType_1 = require(\"../certificates/models/CertificateTemplateType\");\r\nvar LearningPathCourseInclusionType_1 = require(\"./models/LearningPathCourseInclusionType\");\r\nvar PredefinedLanguagesUtils_1 = require(\"../utils/PredefinedLanguagesUtils\");\r\nvar CourseCompletionOrder_1 = require(\"./models/CourseCompletionOrder\");\r\nvar LearningPathProgressService_1 = require(\"./LearningPathProgressService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar LearningPathCreateEditController = (function () {\r\n function LearningPathCreateEditController($scope, $http, $location, $routeParams, $timeout, $q, url, securityService, permissionsService, learningPathsRouter, learningPathService, $uploader, userService, authService, authManager, uploadUtils, certificateService, learningPathProgressService, dialogService, brandingService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.$q = $q;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.learningPathService = learningPathService;\r\n this.$uploader = $uploader;\r\n this.userService = userService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.uploadUtils = uploadUtils;\r\n this.certificateService = certificateService;\r\n this.learningPathProgressService = learningPathProgressService;\r\n this.dialogService = dialogService;\r\n this.brandingService = brandingService;\r\n this.businessUnitSelected = false;\r\n this.businessUnitVisible = false;\r\n this.hasAllBusinessUnits = false;\r\n this.languageSelected = false;\r\n this.learningPathCoursesLoaded = false;\r\n this.isValidityInPerpetuity = true;\r\n this.hasPreviewUrlCanceled = false;\r\n this.learningPath = {};\r\n this.learningPathCourses = [];\r\n this.learningPathCertificates = [];\r\n this.user = {};\r\n this.educationItemType = \"Learning Path\";\r\n this.currentUserBusinessUnits = [];\r\n this.isLearningPathInUse = false;\r\n this.isLearningPathChanged = false;\r\n this.isLearningPathLoaded = false;\r\n this.isDeactivateButtonDisabled = false;\r\n this.hasMandatoryCourse = false;\r\n this.onCourseSelect = function (course) {\r\n course.courseSequenceNumber = _this.learningPathCourses.length;\r\n course.courseInclusionType = LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.ELECTIVE];\r\n _this.learningPathCourses.push(course);\r\n };\r\n this.learningPathId = $routeParams[LearningPathsRouter_1.LearningPathsRouter.LEARNING_PATH_ID_PARAM];\r\n var hasLearningPathId = this.learningPathId != null;\r\n var learningPathIdStr = String(this.learningPathId);\r\n this.securityService\r\n .demandLearningPathPermissionsIf(hasLearningPathId, learningPathIdStr, function (learningPathPermissions) { return learningPathPermissions.edit; })\r\n .demandSystemPermissionsIf(!hasLearningPathId, function (systemPermissions) { return systemPermissions.addLearningPaths; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY);\r\n if (hasLearningPathId) {\r\n this.loadLearningPath().then(function (result) {\r\n _this.getLearningPathInUse();\r\n _this.isLearningPathLoaded = true;\r\n _this.loadCertificates();\r\n });\r\n this.loadLearningPathCourses();\r\n this.disabledSaveButton = false;\r\n }\r\n else {\r\n this.learningPathCoursesLoaded = true;\r\n PageHeaderHelper_1.PageHeader.set().header(\"New Learning Path\").update();\r\n this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.user);\r\n _this.currentUserBusinessUnits = user.businessUnits;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n _this.learningPath.numberOfElectiveCoursesToBeCompleted = 0;\r\n _this.learningPath.languageId = PredefinedLanguagesUtils_1.PredefinedLanguagesUtils.determineRelatedLanguageId(user.locale);\r\n _this.languageSelected = true;\r\n _this.learningPath.courseCompletionOrder = CourseCompletionOrder_1.CourseCompletionOrder[CourseCompletionOrder_1.CourseCompletionOrder.FREE];\r\n _this.learningPath.startDateText = Moment_1.Moment.isValidDate(new Date().getTime());\r\n });\r\n }\r\n this.$scope.$on('changeCourseInclusionType', function () {\r\n _this.hasMandatoryCourse = false;\r\n _this.learningPathCourses.forEach(function (course) {\r\n if (course.courseInclusionType == LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.MANDATORY]) {\r\n _this.hasMandatoryCourse = true;\r\n }\r\n });\r\n });\r\n }\r\n LearningPathCreateEditController.prototype.save = function () {\r\n var _this = this;\r\n this.processLearningPathInUseWarningMessageIfNeed();\r\n this.disabledSaveButton = true;\r\n var preview = this.croppedImage ? this.croppedImage : this.preview;\r\n var hasPreviewUrlCanceled = this.hasPreviewUrlCanceled;\r\n this.hasPreviewUrlCanceled = false;\r\n this.learningPath.endDate = Moment_1.Moment.textToJavaDate(this.learningPath.endDateText);\r\n this.learningPath.startDate = Moment_1.Moment.textToJavaDate(this.learningPath.startDateText);\r\n if (this.learningPathId) {\r\n this.learningPathService.update(this.learningPath, hasPreviewUrlCanceled, preview, this.learningPathCourses)\r\n .then(function (result) {\r\n angular.copy(result[UploadsService_1.UploadsService.LEARNING_PATH_KEY], _this.learningPath);\r\n var promise = null;\r\n if (preview != null) {\r\n _this.uploadUtils.cancelLearningPathPreviews(_this.learningPathId);\r\n promise = _this.upload(preview, _this.learningPathId, \"preview\")\r\n .catch(function (response) {\r\n _this.disabledSaveButton = false;\r\n });\r\n }\r\n _this.certificateService.updateCertificateTemplatesForLearningPath(_this.learningPathId, _this.learningPathCertificates);\r\n _this.$q.when(promise).then(function () {\r\n _this.updateSuccessCallback(_this.learningPathId);\r\n });\r\n }).catch(function (response) {\r\n _this.disabledSaveButton = false;\r\n _this.showErrorMessage(response);\r\n });\r\n }\r\n else {\r\n this.learningPathService.create(this.learningPath, preview, this.learningPathCourses)\r\n .then(function (result) {\r\n angular.copy(result[UploadsService_1.UploadsService.LEARNING_PATH_KEY], _this.learningPath);\r\n if (preview != null) {\r\n _this.upload(preview, _this.learningPath.id, \"preview\")\r\n .then(function (result) {\r\n _this.learningPathId = _this.learningPath.id;\r\n _this.certificateService.updateCertificateTemplatesForLearningPath(_this.learningPathId, _this.learningPathCertificates);\r\n _this.processSuccessCallback(_this.learningPathId);\r\n })\r\n .catch(function (response) {\r\n _this.disabledSaveButton = false;\r\n });\r\n }\r\n else {\r\n _this.learningPathId = _this.learningPath.id;\r\n _this.certificateService.updateCertificateTemplatesForLearningPath(_this.learningPathId, _this.learningPathCertificates);\r\n _this.processSuccessCallback(_this.learningPathId);\r\n }\r\n }).catch(function (response) {\r\n _this.disabledSaveButton = false;\r\n _this.showErrorMessage(response);\r\n });\r\n }\r\n };\r\n LearningPathCreateEditController.prototype.showErrorMessage = function (response) {\r\n switch (response.data.error) {\r\n case \"error.storage.not.available\":\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n break;\r\n case \"error.preview.type\":\r\n INotifier_1.notifier.error(\"Invalid file format: please select a file with .jpg or .png extension\");\r\n break;\r\n case \"error.duplicate.product.id\":\r\n INotifier_1.notifier.error(\"Product ID is not unique\");\r\n break;\r\n case \"learning.path.required.course.count\":\r\n INotifier_1.notifier.error(\"Learning path must contain at least one course\");\r\n break;\r\n default:\r\n INotifier_1.notifier.error(response.data.error);\r\n break;\r\n }\r\n };\r\n LearningPathCreateEditController.prototype.resetPreview = function () {\r\n if (this.preview) {\r\n this.preview = undefined;\r\n }\r\n if (this.previewUrl) {\r\n this.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n if (this.croppedImage) {\r\n this.croppedImage = undefined;\r\n }\r\n };\r\n LearningPathCreateEditController.prototype.restorePreviewUrl = function () {\r\n this.preview = undefined;\r\n this.previewUrl = this.learningPath.previewUrl;\r\n this.preview = undefined;\r\n this.croppedImage = undefined;\r\n if (this.learningPath.previewUrl) {\r\n this.learningPath.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n };\r\n LearningPathCreateEditController.prototype.cleanValidity = function () {\r\n this.learningPath.endDateText = \"\";\r\n };\r\n LearningPathCreateEditController.prototype.redirect = function () {\r\n if (this.learningPath && this.learningPath.permissions && this.learningPath.permissions.view) {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(this.learningPathId));\r\n }\r\n else {\r\n this.$location.url(this.learningPathsRouter.indexUrl());\r\n }\r\n };\r\n LearningPathCreateEditController.prototype.loadLearningPath = function () {\r\n var _this = this;\r\n var promise = this.learningPathService.get(this.learningPathId);\r\n promise.then(function (result) {\r\n angular.copy(result, _this.learningPath);\r\n var learningPathBreadcrumb = _this.learningPath.name || _this.learningPath.subjectName;\r\n learningPathBreadcrumb = learningPathBreadcrumb.length > 40 ? learningPathBreadcrumb.substring(0, 40) + \"...\" : learningPathBreadcrumb;\r\n if (_this.learningPath.name == \"Failed to retrieve the learning path details\") {\r\n PageHeaderHelper_1.PageHeader.set().header(learningPathBreadcrumb).update();\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit Learning Path \" + \"‘\"\r\n + learningPathBreadcrumb + \"’\").update();\r\n }\r\n _this.languageSelected = true;\r\n _this.businessUnitSelected = true;\r\n _this.learningPath.endDateText = Moment_1.Moment.isValidDate(result.endDate);\r\n _this.learningPath.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n if (_this.learningPath.endDateText) {\r\n _this.isValidityInPerpetuity = false;\r\n }\r\n _this.previewUrl = _this.learningPath.previewUrl ? _this.learningPath.previewUrl : null;\r\n });\r\n return promise;\r\n };\r\n LearningPathCreateEditController.prototype.loadLearningPathCourses = function () {\r\n var _this = this;\r\n this.learningPathCoursesLoaded = false;\r\n return this.learningPathService.getLearningPathCourses(this.learningPathId)\r\n .then(function (courses) {\r\n _this.learningPathCourses = angular.copy(courses);\r\n _this.hasMandatoryCourse = false;\r\n _this.learningPathCourses.forEach(function (course) {\r\n if (course.courseInclusionType == LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.MANDATORY]) {\r\n _this.hasMandatoryCourse = true;\r\n }\r\n });\r\n _this.learningPathCoursesLoaded = true;\r\n return _this.learningPathCourses;\r\n });\r\n };\r\n LearningPathCreateEditController.prototype.loadCertificates = function () {\r\n var _this = this;\r\n this.certificateService.getLearningPathCertificateTemplates(this.learningPathId).then(function (certificates) {\r\n _this.learningPathCertificates = [];\r\n certificates.forEach(function (certificate) {\r\n var c = {\r\n type: certificate.certificateTemplateType,\r\n id: certificate.certificateTemplateId,\r\n name: certificate.certificateTemplateName\r\n };\r\n _this.learningPathCertificates.push(c);\r\n });\r\n });\r\n };\r\n LearningPathCreateEditController.prototype.sortByName = function (certificates) {\r\n certificates.sort(function (a, b) {\r\n if (a.name >= b.name)\r\n return 1;\r\n else\r\n return -1;\r\n });\r\n };\r\n LearningPathCreateEditController.prototype.processSuccessCallback = function (learningPathId) {\r\n INotifier_1.notifier.success(\"Learning path has been saved\");\r\n this.$location.url(this.learningPathsRouter.updateUrl(learningPathId));\r\n };\r\n LearningPathCreateEditController.prototype.updateSuccessCallback = function (learningPathId) {\r\n var _this = this;\r\n this.disabledSaveButton = false;\r\n INotifier_1.notifier.success(\"Modifications of the learning path have been saved\");\r\n this.loadLearningPath().then(function () {\r\n _this.loadCertificates();\r\n });\r\n };\r\n LearningPathCreateEditController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n if (!this.learningPathId) {\r\n this.businessUnitSelected = false;\r\n this.learningPathCourses = [];\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n }\r\n };\r\n LearningPathCreateEditController.prototype.setBusinessUnitSelectorVisible = function () {\r\n this.businessUnitVisible = true;\r\n };\r\n LearningPathCreateEditController.prototype.containAutoCertificate = function (certificates) {\r\n var _this = this;\r\n var containsAuto = false;\r\n if (certificates.length == 0) {\r\n return containsAuto;\r\n }\r\n certificates.forEach(function (certificate) {\r\n if (_this.isAuto(certificate)) {\r\n containsAuto = true;\r\n }\r\n });\r\n return containsAuto;\r\n };\r\n LearningPathCreateEditController.prototype.isAuto = function (certificate) {\r\n return (certificate.type == CertificateTemplateType_1.CertificateTemplateType.AUTO || certificate.type.toString() == \"AUTO\");\r\n };\r\n LearningPathCreateEditController.prototype.setAuto = function (certificate) {\r\n this.learningPathCertificates.forEach(function (c) {\r\n if (c.id != certificate.id) {\r\n c.type = CertificateTemplateType_1.CertificateTemplateType.MANUAL;\r\n }\r\n else {\r\n certificate.type = CertificateTemplateType_1.CertificateTemplateType.AUTO;\r\n }\r\n });\r\n };\r\n LearningPathCreateEditController.prototype.setManual = function (certificate) {\r\n this.learningPathCertificates.forEach(function (c) {\r\n if (c.id == certificate.id) {\r\n c.type = CertificateTemplateType_1.CertificateTemplateType.MANUAL;\r\n }\r\n });\r\n };\r\n LearningPathCreateEditController.prototype.changeType = function (certificate) {\r\n this.isAuto(certificate) ? this.setManual(certificate) : this.setAuto(certificate);\r\n };\r\n LearningPathCreateEditController.prototype.getMenuPathToCertificateTemplates = function () {\r\n return \"Administration\" + \"→\" + \"Certificate Templates\";\r\n };\r\n LearningPathCreateEditController.prototype.allowedCountOfElectiveCourses = function () {\r\n if (this.learningPathCourses == null || this.learningPathCourses == undefined) {\r\n return 0;\r\n }\r\n var electiveCoursesCount = 0;\r\n this.learningPathCourses.forEach(function (course) {\r\n if (course.courseInclusionType == LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.ELECTIVE]) {\r\n electiveCoursesCount++;\r\n }\r\n });\r\n return electiveCoursesCount > 0 ? electiveCoursesCount : 0;\r\n };\r\n LearningPathCreateEditController.prototype.isValidExpirationDate = function (startDateText, endDateText) {\r\n if (!startDateText || !endDateText) {\r\n return true;\r\n }\r\n var startDate = Moment_1.Moment.textToJavaDate(this.learningPath.startDateText);\r\n var endDate = Moment_1.Moment.textToJavaDate(this.learningPath.endDateText);\r\n return endDate > startDate;\r\n };\r\n LearningPathCreateEditController.prototype.onLanguageChange = function () {\r\n var _this = this;\r\n this.languageSelected = false;\r\n this.learningPathCourses = [];\r\n this.$timeout(function (a) { return _this.languageSelected = true; }, 0);\r\n };\r\n LearningPathCreateEditController.prototype.getLearningPathInUse = function () {\r\n var _this = this;\r\n this.learningPathProgressService.getNumberOfUsersWithUncompletedProgress(this.learningPathId)\r\n .then(function (numberOfUncompleted) {\r\n if (numberOfUncompleted > 0) {\r\n _this.isLearningPathInUse = true;\r\n }\r\n else {\r\n _this.isLearningPathInUse = false;\r\n }\r\n });\r\n };\r\n LearningPathCreateEditController.prototype.processLearningPathInUseWarningMessageIfNeed = function () {\r\n if (this.isLearningPathInUse) {\r\n INotifier_1.notifier.warning(\"The changes can cause problems in passing the learning path by users who had already started it\");\r\n this.isLearningPathChanged = true;\r\n }\r\n };\r\n LearningPathCreateEditController.prototype.upload = function (file, learningPathId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/learningPaths/upload?learningPathId=:learningPathId&fileType=:fileType\")\r\n .param(\":learningPathId\", learningPathId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n LearningPathCreateEditController.prototype.showCropperModal = function () {\r\n $(\"#imageCropperModal\").modal(\"show\");\r\n };\r\n LearningPathCreateEditController.prototype.showCropperModalAfterLoad = function () {\r\n var _this = this;\r\n setTimeout(function () {\r\n _this.preview != undefined || _this.previewUrl != undefined\r\n ? _this.showCropperModal()\r\n : _this.showCropperModalAfterLoad();\r\n }, 100);\r\n };\r\n LearningPathCreateEditController.NAME = \"learningPaths.LearningPathCreateEditController\";\r\n LearningPathCreateEditController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$timeout\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n \"Upload\",\r\n UserService_1.UserService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n CertificateService_1.CertificateService.NAME,\r\n LearningPathProgressService_1.LearningPathProgressService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return LearningPathCreateEditController;\r\n})();\r\nexports.LearningPathCreateEditController = LearningPathCreateEditController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../branding/CustomBrandingService\":35,\"../certificates/CertificateService\":45,\"../certificates/models/CertificateTemplateType\":48,\"../components/dialog/DialogService\":166,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../storage/UploadsService\":458,\"../urls/LearningPathsRouter\":477,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"../utils/PageHeaderHelper\":521,\"../utils/PredefinedLanguagesUtils\":522,\"../utils/UploadUtils\":527,\"../utils/UrlService\":528,\"./LearningPathProgressService\":318,\"./LearningPathService\":320,\"./models/CourseCompletionOrder\":323,\"./models/LearningPathCourseInclusionType\":324}],311:[function(require,module,exports){\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar LearningPathService_1 = require(\"./LearningPathService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar PersonalService_1 = require(\"../personal/PersonalService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar LearningPathProgressService_1 = require(\"./LearningPathProgressService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar LearningPathDetailsController = (function () {\r\n function LearningPathDetailsController($http, $window, $location, $scope, $rootScope, $routeParams, authManager, learningPathService, learningPathProgressService, url, securityService, learningPathsRouter, personalService, coursesRouter) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$window = $window;\r\n this.$location = $location;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.authManager = authManager;\r\n this.learningPathService = learningPathService;\r\n this.learningPathProgressService = learningPathProgressService;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.personalService = personalService;\r\n this.coursesRouter = coursesRouter;\r\n this.isLearningPathLoaded = false;\r\n this.rowShow = new Map();\r\n this.learningPathId = $routeParams[LearningPathsRouter_1.LearningPathsRouter.LEARNING_PATH_ID_PARAM];\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n var learningPathIdStr = String(this.learningPathId);\r\n this.securityService\r\n .demandLearningPathPermissions(learningPathIdStr, function (learningPathPermissions) { return learningPathPermissions.view; });\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0) {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY);\r\n }\r\n this.viewType = 1;\r\n this.oldSearchViewType = this.viewType;\r\n this.window = angular.element(this.$window);\r\n if (this.window.innerWidth < 992) {\r\n this.startWindowWidth = 0;\r\n }\r\n else {\r\n this.startWindowWidth = 10000;\r\n }\r\n this.window.bind('resize', function () {\r\n if (window.innerWidth < 992 && window.innerWidth < _this.startWindowWidth && !_this.viewType) {\r\n _this.oldSearchViewType = _this.viewType;\r\n _this.startWindowWidth = 0;\r\n _this.viewType = 1;\r\n }\r\n if (window.innerWidth >= 992 && window.innerWidth > _this.startWindowWidth && !_this.oldSearchViewType) {\r\n _this.viewType = _this.oldSearchViewType;\r\n _this.startWindowWidth = 10000;\r\n }\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n this.loadData()\r\n .finally(function () {\r\n _this.isLearningPathLoaded = true;\r\n });\r\n }\r\n LearningPathDetailsController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n LearningPathDetailsController.prototype.loadData = function () {\r\n var _this = this;\r\n return this.loadLearningPath().then(function () {\r\n return _this.loadProgress();\r\n }).then(function () {\r\n _this.coursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(_this.$http, _this.url.base(\"/api/learningPaths/:learningPathId/courses\")\r\n .param(\":learningPathId\", _this.learningPathId)\r\n .service()));\r\n _this.coursesGridModel.pageSize = 12;\r\n });\r\n };\r\n LearningPathDetailsController.prototype.loadProgress = function () {\r\n var _this = this;\r\n return this.learningPathProgressService.getLearningPathProgress(this.learningPathId)\r\n .then(function (result) {\r\n _this.learningPathProgress = angular.copy(result);\r\n return _this.learningPathProgress;\r\n });\r\n };\r\n LearningPathDetailsController.prototype.loadLearningPath = function () {\r\n var _this = this;\r\n return this.learningPathService.get(this.learningPathId)\r\n .then(function (result) {\r\n _this.learningPath = angular.copy(result);\r\n _this.learningPath.startDateText = Moment_1.Moment.isValidDate(result.startDate);\r\n var learningPathBreadcrumb = _this.learningPath.name || _this.learningPath.subjectName;\r\n learningPathBreadcrumb = learningPathBreadcrumb.length > 40 ? learningPathBreadcrumb.substring(0, 40) + \"...\" : learningPathBreadcrumb;\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header(\"View\")\r\n .addParentLink(learningPathBreadcrumb, \"#\" + _this.learningPathsRouter.detailsUrl(_this.learningPathId))\r\n .update();\r\n return _this.learningPath;\r\n });\r\n };\r\n LearningPathDetailsController.prototype.addToFavorites = function (course) {\r\n this.rowShow.set(course.id, !this.rowShow.get(course.id));\r\n this.personalService.addToFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been added to your favorites\");\r\n course.isFavorite = true;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.already.in.favorite\") {\r\n INotifier_1.notifier.error(\"This course is already in your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n LearningPathDetailsController.prototype.removeFromFavorites = function (course) {\r\n this.rowShow.set(course.id, !this.rowShow.get(course.id));\r\n this.personalService.removeFromFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been removed from your favorites\");\r\n course.isFavorite = false;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.not.in.favorite\") {\r\n INotifier_1.notifier.error(\"Failed to remove from your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n LearningPathDetailsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n };\r\n LearningPathDetailsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n LearningPathDetailsController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n LearningPathDetailsController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n LearningPathDetailsController.prototype.confirmProgress = function () {\r\n var _this = this;\r\n this.isLearningPathLoaded = false;\r\n this.learningPathProgressService.confirmLearningPathProgress(this.learningPathId)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Learning Path progress has been recalculated\");\r\n return _this.loadData();\r\n })\r\n .finally(function () {\r\n _this.isLearningPathLoaded = true;\r\n });\r\n };\r\n LearningPathDetailsController.prototype.getCountOfCourses = function () {\r\n var result;\r\n if (this.learningPath.numberOfElectiveCoursesToBeCompleted) {\r\n result = StringBuilder_1.StringBuilder.interpolate(\"Completed courses: :completedMandatoryCourses of :allMandatoryCourses Mandatory, :completedElectiveCourses of :numberOfElectiveCoursesToBeCompleted Elective\")\r\n .with(\":completedMandatoryCourses\", this.learningPathProgress.countOfCompletedMandatoryCourses)\r\n .with(\":allMandatoryCourses\", this.learningPathProgress.countOfMandatoryCourses)\r\n .with(\":completedElectiveCourses\", this.learningPathProgress.countOfCompletedElectiveCourses)\r\n .with(\":numberOfElectiveCoursesToBeCompleted\", this.learningPath.numberOfElectiveCoursesToBeCompleted)\r\n .build();\r\n }\r\n else {\r\n result = StringBuilder_1.StringBuilder.interpolate(\"Completed courses: :completedMandatoryCourses of :allMandatoryCourses Mandatory\")\r\n .with(\":completedMandatoryCourses\", this.learningPathProgress.countOfCompletedMandatoryCourses)\r\n .with(\":allMandatoryCourses\", this.learningPathProgress.countOfMandatoryCourses)\r\n .build();\r\n }\r\n return result;\r\n };\r\n LearningPathDetailsController.NAME = \"learningPaths.LearningPathDetailsController\";\r\n LearningPathDetailsController.$inject = [\r\n \"$http\",\r\n \"$window\",\r\n \"$location\",\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$routeParams\",\r\n AuthManager_1.AuthManager.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n LearningPathProgressService_1.LearningPathProgressService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME\r\n ];\r\n return LearningPathDetailsController;\r\n})();\r\nexports.LearningPathDetailsController = LearningPathDetailsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../authcore/AuthManager\":25,\"../personal/PersonalService\":377,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../urls/LearningPathsRouter\":477,\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"../utils/PageHeaderHelper\":521,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./LearningPathProgressService\":318,\"./LearningPathService\":320}],312:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar GameLearningObjectActionService_1 = require(\"../gamification/GameLearningObjectActionService\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar RewardActionType_1 = require(\"../gamification/models/RewardActionType\");\r\nvar BadgesService_1 = require(\"../gamification/BadgesService\");\r\nvar LearningPathService_1 = require(\"./LearningPathService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar LearningPathGamificationDetailsController = (function () {\r\n function LearningPathGamificationDetailsController(scope, $http, routeParams, $rootScope, learningPathService, securityService, authService, authManager, permissionsService, url, learningPathsRouter, badgesService, gameLearningObjectActionService, dialogService) {\r\n var _this = this;\r\n this.scope = scope;\r\n this.$http = $http;\r\n this.routeParams = routeParams;\r\n this.$rootScope = $rootScope;\r\n this.learningPathService = learningPathService;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.url = url;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.badgesService = badgesService;\r\n this.gameLearningObjectActionService = gameLearningObjectActionService;\r\n this.dialogService = dialogService;\r\n this.newReward = {};\r\n this.rewardToEdit = {};\r\n this.rewardTypes = ['Badge'];\r\n this.radioResult = 'default';\r\n this.isBadgeTableVisible = false;\r\n this.editedRewardTypeDropdown = false;\r\n this.defaultPointsSubject = 'You were awarded points';\r\n this.defaultPointsMessage = 'Dear {user},\\nCongratulations, you were awarded {number of points} point(s)!';\r\n this.excludedBadges = [100];\r\n this.badgeIds = [];\r\n this.toolbar = [];\r\n this.learningPathId = routeParams[LearningPathsRouter_1.LearningPathsRouter.LEARNING_PATH_ID_PARAM];\r\n var learningPathIdStr = String(this.learningPathId);\r\n this.rewardsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/learningPaths/\" + this.learningPathId + \"/actionPage\")));\r\n this.badgesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/badges/gameActions\")));\r\n this.securityService.demandAuthentication()\r\n .demandLearningPathPermissionsIf(!!this.learningPathId, learningPathIdStr, function (learningPathPermissions) { return learningPathPermissions.edit; });\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.authService.getCurrentUser()\r\n .then(function (u) { return _this.currentUser = u; });\r\n this.learningPathService.get(this.learningPathId).then(function (learningPath) {\r\n _this.learningPath = learningPath;\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0) {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY);\r\n }\r\n _this.badgesGridModel.filter.businessUnitId = learningPath.businessUnitId;\r\n _this.badgesGridModel.pageSize = 5;\r\n _this.rewardsGridModel.loadPage(0);\r\n _this.badgesGridModel.loadPage(0);\r\n });\r\n }\r\n LearningPathGamificationDetailsController.prototype.addToModel = function () {\r\n if (this.radioResult === 'none') {\r\n this.newReward.showMessage = false;\r\n this.newReward.showDefaultMessage = false;\r\n }\r\n else if (this.radioResult === 'custom') {\r\n this.newReward.showMessage = true;\r\n this.newReward.showDefaultMessage = false;\r\n }\r\n else {\r\n this.newReward.showMessage = false;\r\n this.newReward.showDefaultMessage = true;\r\n }\r\n };\r\n LearningPathGamificationDetailsController.prototype.addToEditModel = function () {\r\n if (this.radioResult === 'none') {\r\n this.rewardToEdit.showMessage = false;\r\n this.rewardToEdit.showDefaultMessage = false;\r\n }\r\n else if (this.radioResult === 'custom') {\r\n this.rewardToEdit.showMessage = true;\r\n this.rewardToEdit.showDefaultMessage = false;\r\n }\r\n else {\r\n this.rewardToEdit.showMessage = false;\r\n this.rewardToEdit.showDefaultMessage = true;\r\n }\r\n };\r\n LearningPathGamificationDetailsController.prototype.getTemplateForInclude = function (templateName) {\r\n return this.url.template(templateName);\r\n };\r\n LearningPathGamificationDetailsController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n LearningPathGamificationDetailsController.prototype.convertIsActive = function (isActive) {\r\n return isActive != undefined\r\n ? isActive ? \"Yes\" : \"No\"\r\n : undefined;\r\n };\r\n LearningPathGamificationDetailsController.prototype.addBadge = function (badge, isEdit) {\r\n var _this = this;\r\n if (isEdit === void 0) { isEdit = false; }\r\n if (isEdit) {\r\n this.rewardToEdit.rewardId = badge.id;\r\n this.isBadgeTableVisible = false;\r\n $('#collapseSelectBadgeEdit').collapse('hide');\r\n }\r\n else {\r\n this.newReward.rewardId = badge.id;\r\n this.isBadgeTableVisible = false;\r\n $('#collapseSelectBadge').collapse('hide');\r\n }\r\n if (this.selectedBadge) {\r\n this.badgeIds = this.badgeIds.filter(function (id) { return _this.selectedBadge.id !== id; });\r\n }\r\n this.badgeIds.push(badge.id);\r\n this.loadBadges(true);\r\n this.selectedBadge = badge;\r\n this.selectedBadgeImageUrl = this.getImageBadge(this.selectedBadge);\r\n };\r\n LearningPathGamificationDetailsController.prototype.loadBadges = function (current) {\r\n this.badgesGridModel.filter.excludedBadges = this.badgeIds;\r\n if (current) {\r\n this.badgesGridModel.loadCurrentPage();\r\n }\r\n else {\r\n this.badgesGridModel.loadPage(0);\r\n }\r\n };\r\n LearningPathGamificationDetailsController.prototype.showCreateModal = function () {\r\n var _this = this;\r\n this.radioResult = 'default';\r\n $(\"#addReward\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n this.isBadgeTableVisible = false;\r\n this.newReward.rewardType = 'Badge';\r\n $('#collapseSelectBadgeEdit').collapse('hide');\r\n this.addToModel();\r\n this.learningPathService.getGameLearningObjectsBadgeIds(this.learningPath.id).then(function (res) {\r\n _this.badgeIds = res;\r\n _this.excludedBadges.forEach(function (b) {\r\n _this.badgeIds.push(b);\r\n });\r\n _this.loadBadges(false);\r\n });\r\n };\r\n LearningPathGamificationDetailsController.prototype.showEditModal = function (id) {\r\n var _this = this;\r\n this.gameLearningObjectActionService.getReward(id).then(function (result) {\r\n _this.rewardToEdit = result;\r\n if (_this.rewardToEdit.rewardType == 'BADGE') {\r\n _this.rewardToEdit.rewardType = 'Badge';\r\n _this.badgesService.getBadge(_this.rewardToEdit.rewardId).then(function (res) {\r\n _this.selectedBadge = res;\r\n _this.selectedBadgeImageUrl = _this.getImageBadge(res);\r\n _this.openEditModal();\r\n });\r\n }\r\n else if (_this.rewardToEdit.rewardType == 'POINTS') {\r\n _this.rewardToEdit.rewardType = 'Points';\r\n _this.openEditModal();\r\n }\r\n });\r\n };\r\n LearningPathGamificationDetailsController.prototype.openEditModal = function () {\r\n var _this = this;\r\n if (!this.rewardToEdit.showDefaultMessage && !this.rewardToEdit.showMessage) {\r\n this.radioResult = 'none';\r\n }\r\n else if (!this.rewardToEdit.showDefaultMessage && this.rewardToEdit.showMessage) {\r\n this.radioResult = 'custom';\r\n }\r\n else {\r\n this.radioResult = 'default';\r\n }\r\n this.isBadgeTableVisible = false;\r\n $('#collapseSelectBadgeEdit').collapse('hide');\r\n this.learningPathService.getGameLearningObjectsBadgeIds(this.learningPath.id).then(function (res) {\r\n _this.badgeIds = res;\r\n _this.excludedBadges.forEach(function (b) {\r\n _this.badgeIds.push(b);\r\n });\r\n if (_this.selectedBadge) {\r\n _this.badgeIds.push(_this.selectedBadge.id);\r\n }\r\n _this.loadBadges(false);\r\n });\r\n $(\"#editReward\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n LearningPathGamificationDetailsController.prototype.closeEditModal = function () {\r\n $(\"#editReward\").modal('hide');\r\n this.clearPopup();\r\n };\r\n LearningPathGamificationDetailsController.prototype.removeBadge = function () {\r\n var _this = this;\r\n this.badgeIds = this.badgeIds.filter(function (id) { return id !== _this.selectedBadge.id; });\r\n this.selectedBadge = null;\r\n this.selectedBadgeImageUrl = null;\r\n this.newReward.rewardId = null;\r\n this.rewardToEdit.rewardId = null;\r\n if (!this.isBadgeTableVisible) {\r\n this.isBadgeTableVisible = true;\r\n $('#collapseSelectBadgeEdit').collapse('show');\r\n $('#collapseSelectBadge').collapse('show');\r\n }\r\n this.loadBadges(false);\r\n };\r\n LearningPathGamificationDetailsController.prototype.createReward = function () {\r\n var _this = this;\r\n this.newReward.objectType = SecuredObjectType_1.SecuredObjectType.LEARNING_PATH.name;\r\n this.newReward.objectId = this.learningPathId;\r\n this.newReward.gameId = undefined;\r\n if (this.newReward.showDefaultMessage || (!this.newReward.showDefaultMessage && !this.newReward.showMessage)) {\r\n this.newReward.customMessageSubject = undefined;\r\n this.newReward.customMessageBody = undefined;\r\n }\r\n if (this.newReward.rewardType == 'Badge') {\r\n this.newReward.points = 0;\r\n this.newReward.action = StringBuilder_1.StringBuilder.interpolate(RewardActionType_1.RewardActionType.BADGE_LP_COMPLETED)\r\n .with(':badgeName', this.selectedBadge.name).build();\r\n }\r\n else if (this.newReward.rewardType == 'Points') {\r\n this.newReward.rewardId = undefined;\r\n var action = this.newReward.points === 1 ? RewardActionType_1.RewardActionType.POINT_LP_COMPLETED : RewardActionType_1.RewardActionType.POINTS_LP_COMPLETED;\r\n this.newReward.action = StringBuilder_1.StringBuilder.interpolate(action)\r\n .with(':points', this.newReward.points).build();\r\n }\r\n this.gameLearningObjectActionService.createReward(this.newReward).then(function () {\r\n INotifier_1.notifier.success(\"Reward has been saved\");\r\n $(\"#addReward\").modal('hide');\r\n }).catch(function () {\r\n INotifier_1.notifier.error('Creation error');\r\n }).finally(function () {\r\n _this.newReward = {};\r\n _this.selectedBadge = undefined;\r\n _this.radioResult = 'default';\r\n _this.badgesGridModel.filter.searchString = undefined;\r\n _this.badgesGridModel.sorting = [];\r\n _this.rewardsGridModel.loadCurrentPage();\r\n });\r\n };\r\n LearningPathGamificationDetailsController.prototype.editReward = function () {\r\n var _this = this;\r\n if (this.rewardToEdit.showDefaultMessage || (!this.rewardToEdit.showDefaultMessage && !this.rewardToEdit.showMessage)) {\r\n this.rewardToEdit.customMessageSubject = undefined;\r\n this.rewardToEdit.customMessageBody = undefined;\r\n }\r\n if (this.rewardToEdit.rewardType == 'Badge') {\r\n this.rewardToEdit.points = 0;\r\n this.rewardToEdit.action = StringBuilder_1.StringBuilder.interpolate(RewardActionType_1.RewardActionType.BADGE_LP_COMPLETED)\r\n .with(':badgeName', this.selectedBadge.name).build();\r\n }\r\n else if (this.rewardToEdit.rewardType == 'Points') {\r\n this.rewardToEdit.rewardId = undefined;\r\n var action = this.rewardToEdit.points === 1 ? RewardActionType_1.RewardActionType.POINT_LP_COMPLETED : RewardActionType_1.RewardActionType.POINTS_LP_COMPLETED;\r\n this.rewardToEdit.action = StringBuilder_1.StringBuilder.interpolate(action)\r\n .with(':points', this.rewardToEdit.points).build();\r\n }\r\n this.gameLearningObjectActionService.editReward(this.rewardToEdit.id, this.rewardToEdit).then(function () {\r\n INotifier_1.notifier.success(\"Modifications of the reward have been saved\");\r\n $(\"#editReward\").modal('hide');\r\n }).catch(function () {\r\n INotifier_1.notifier.error('Editing error');\r\n }).finally(function () {\r\n _this.rewardToEdit = {};\r\n _this.selectedBadge = undefined;\r\n _this.radioResult = 'default';\r\n _this.badgesGridModel.filter.searchString = undefined;\r\n _this.badgesGridModel.sorting = [];\r\n _this.rewardsGridModel.loadCurrentPage();\r\n });\r\n };\r\n LearningPathGamificationDetailsController.prototype.clearPopup = function () {\r\n this.newReward = {};\r\n this.rewardToEdit = {};\r\n this.selectedBadge = undefined;\r\n this.selectedBadgeImageUrl = undefined;\r\n this.radioResult = 'default';\r\n this.badgesGridModel.filter.searchString = undefined;\r\n this.badgesGridModel.sorting = [];\r\n };\r\n LearningPathGamificationDetailsController.prototype.activate = function (id) {\r\n var _this = this;\r\n this.gameLearningObjectActionService.activate(id).then(function () {\r\n INotifier_1.notifier.success(\"Reward has been activated\");\r\n _this.rewardsGridModel.loadCurrentPage();\r\n if (_this.rewardToEdit) {\r\n _this.rewardToEdit.active = true;\r\n }\r\n });\r\n };\r\n LearningPathGamificationDetailsController.prototype.deactivate = function (id) {\r\n var _this = this;\r\n this.gameLearningObjectActionService.deactivate(id).then(function () {\r\n INotifier_1.notifier.success(\"Reward has been deactivated\");\r\n _this.rewardsGridModel.loadCurrentPage();\r\n if (_this.rewardToEdit) {\r\n _this.rewardToEdit.active = false;\r\n }\r\n });\r\n };\r\n LearningPathGamificationDetailsController.prototype.remove = function (id) {\r\n var _this = this;\r\n this.dialogService.confirm(\"This reward will be removed from the system. Continue?\", {\r\n title: \"Delete reward\"\r\n }).then(function () {\r\n _this.gameLearningObjectActionService.remove(id).then(function () {\r\n INotifier_1.notifier.success(\"Reward has been removed\");\r\n _this.rewardsGridModel.loadCurrentPage();\r\n if (_this.rewardToEdit) {\r\n _this.closeEditModal();\r\n }\r\n _this.loadBadges(true);\r\n });\r\n });\r\n };\r\n LearningPathGamificationDetailsController.prototype.formatTypeString = function (str) {\r\n if (!str)\r\n return str;\r\n return str[0].toUpperCase() + str.slice(1).toLowerCase();\r\n };\r\n LearningPathGamificationDetailsController.prototype.clearSymbols = function (level) {\r\n if (level.points.toString().indexOf('.') !== -1) {\r\n level.points = +level.points.toString().replace('.', '');\r\n }\r\n if (level.newBonusPoints.toString().indexOf('.') !== -1) {\r\n level.newBonusPoints = +level.newBonusPoints.toString().replace('.', '');\r\n }\r\n };\r\n LearningPathGamificationDetailsController.prototype.getImageBadge = function (badge) {\r\n if (badge) {\r\n if (!badge.fileId && badge.name) {\r\n var imageName = badge.name.split(' ').join('');\r\n switch (badge.id) {\r\n case 100:\r\n imageName = \"CourseFinisher\";\r\n break;\r\n case 101:\r\n imageName = \"LearningPathFinisher\";\r\n break;\r\n }\r\n return \"themes/default/img/badges/\" + imageName + \".png\";\r\n }\r\n }\r\n return badge.previewUrl ? badge.previewUrl : '';\r\n };\r\n LearningPathGamificationDetailsController.NAME = \"learningPath.LearningPathGamificationDetailsController\";\r\n LearningPathGamificationDetailsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$routeParams\",\r\n \"$rootScope\",\r\n LearningPathService_1.LearningPathService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n GameLearningObjectActionService_1.GameLearningObjectActionService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return LearningPathGamificationDetailsController;\r\n})();\r\nexports.LearningPathGamificationDetailsController = LearningPathGamificationDetailsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../components/dialog/DialogService\":166,\"../gamification/BadgesService\":245,\"../gamification/GameLearningObjectActionService\":246,\"../gamification/models/RewardActionType\":252,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../security/permissions/SecuredObjectType\":424,\"../urls/LearningPathsRouter\":477,\"../utils/MenuHelper\":517,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./LearningPathService\":320}],313:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar LearningPathService_1 = require(\"./LearningPathService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar LearningPathParticipationFormEditController = (function () {\r\n function LearningPathParticipationFormEditController($location, $scope, $routeParams, url, learningPathService, learningPathsRouter, securityService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.url = url;\r\n this.learningPathService = learningPathService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.securityService = securityService;\r\n this.isLearningPathLoaded = false;\r\n this.learningPathId = $routeParams[LearningPathsRouter_1.LearningPathsRouter.LEARNING_PATH_ID_PARAM];\r\n var learningPathIdStr = String(this.learningPathId);\r\n this.securityService\r\n .demandLearningPathPermissions(learningPathIdStr, function (learningPathPermissions) { return learningPathPermissions.edit; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY);\r\n this.isLearningPathLoaded = false;\r\n this.loadLearningPath(this.learningPathId)\r\n .then(function (learningPath) {\r\n var learningPathBreadcrumb = learningPath.name || learningPath.subjectName;\r\n learningPathBreadcrumb = learningPathBreadcrumb.length > 40 ? learningPathBreadcrumb.substring(0, 40) + \"...\" : learningPathBreadcrumb;\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header(\"Edit participation form\")\r\n .addParentLink(learningPathBreadcrumb, \"#\" + _this.learningPathsRouter.detailsUrl(_this.learningPathId))\r\n .update();\r\n _this.isLearningPathLoaded = true;\r\n });\r\n }\r\n LearningPathParticipationFormEditController.prototype.loadLearningPath = function (learningPathId) {\r\n var _this = this;\r\n return this.learningPathService.get(learningPathId).then(function (learningPath) {\r\n _this.learningPath = angular.copy(learningPath);\r\n return _this.learningPath;\r\n });\r\n };\r\n LearningPathParticipationFormEditController.NAME = \"learningPaths.LearningPathParticipationFormEditController\";\r\n LearningPathParticipationFormEditController.$inject = [\r\n \"$location\",\r\n \"$scope\",\r\n \"$routeParams\",\r\n UrlService_1.UrlService.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n SecurityService_1.SecurityService.NAME\r\n ];\r\n return LearningPathParticipationFormEditController;\r\n})();\r\nexports.LearningPathParticipationFormEditController = LearningPathParticipationFormEditController;\r\n},{\"../security/SecurityService\":420,\"../urls/LearningPathsRouter\":477,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./LearningPathService\":320}],314:[function(require,module,exports){\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar LearningPathService_1 = require(\"./LearningPathService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar LearningPathProgressService_1 = require(\"./LearningPathProgressService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar LearningPathParticipationFormFillController = (function () {\r\n function LearningPathParticipationFormFillController($q, $location, $scope, $routeParams, url, learningPathService, learningPathProgressService, learningPathsRouter, securityService, authRedirect) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$location = $location;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.url = url;\r\n this.learningPathService = learningPathService;\r\n this.learningPathProgressService = learningPathProgressService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.securityService = securityService;\r\n this.authRedirect = authRedirect;\r\n this.isLearningPathLoaded = false;\r\n this.getParticipationFormData = function () {\r\n return _this.learningPathProgressService.getParticipationFormData(_this.learningPathId, _this.learningPathProgress.id);\r\n };\r\n this.onSubmit = function (participationFormData) {\r\n return _this.learningPathProgressService.setParticipationFormData(_this.learningPathId, _this.learningPathProgress.id, participationFormData)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Participation Form data have been successfully updated\");\r\n });\r\n };\r\n this.learningPathId = $routeParams[LearningPathsRouter_1.LearningPathsRouter.LEARNING_PATH_ID_PARAM];\r\n var learningPathIdStr = String(this.learningPathId);\r\n this.securityService\r\n .demandLearningPathPermissions(learningPathIdStr, function (learningPathPermissions) { return learningPathPermissions.view; });\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0) {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY);\r\n }\r\n this.isLearningPathLoaded = false;\r\n var loadLearningPathPromises = [];\r\n loadLearningPathPromises.push(this.loadLearningPath(), this.loadLearningPathProgress());\r\n $q.all(loadLearningPathPromises)\r\n .then(function () {\r\n _this.isLearningPathLoaded = true;\r\n });\r\n }\r\n LearningPathParticipationFormFillController.prototype.loadLearningPath = function () {\r\n var _this = this;\r\n var promise = this.learningPathService.get(this.learningPathId);\r\n return promise.then(function (result) {\r\n _this.learningPath = angular.copy(result);\r\n var learningPathBreadcrumb = _this.learningPath.name || _this.learningPath.subjectName;\r\n learningPathBreadcrumb = learningPathBreadcrumb.length > 40 ? learningPathBreadcrumb.substring(0, 40) + \"...\" : learningPathBreadcrumb;\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header(\"Fill participation form\")\r\n .addParentLink(learningPathBreadcrumb, \"#\" + _this.learningPathsRouter.detailsUrl(_this.learningPathId))\r\n .update();\r\n return _this.learningPath;\r\n });\r\n };\r\n LearningPathParticipationFormFillController.prototype.loadLearningPathProgress = function () {\r\n var _this = this;\r\n return this.learningPathProgressService.getLearningPathProgress(this.learningPathId)\r\n .then(function (learningPathProgress) {\r\n _this.learningPathProgress = angular.copy(learningPathProgress);\r\n if (_this.learningPathProgress == null || _this.learningPathProgress == undefined) {\r\n _this.authRedirect.forwardToAccessDenied();\r\n }\r\n return _this.learningPathProgress;\r\n });\r\n };\r\n LearningPathParticipationFormFillController.NAME = \"learningPaths.LearningPathParticipationFormFillController\";\r\n LearningPathParticipationFormFillController.$inject = [\r\n \"$q\",\r\n \"$location\",\r\n \"$scope\",\r\n \"$routeParams\",\r\n UrlService_1.UrlService.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n LearningPathProgressService_1.LearningPathProgressService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME\r\n ];\r\n return LearningPathParticipationFormFillController;\r\n})();\r\nexports.LearningPathParticipationFormFillController = LearningPathParticipationFormFillController;\r\n},{\"../INotifier\":5,\"../authcore/AuthRedirect\":26,\"../security/SecurityService\":420,\"../urls/LearningPathsRouter\":477,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./LearningPathProgressService\":318,\"./LearningPathService\":320}],315:[function(require,module,exports){\nvar LearningPathService_1 = require(\"./LearningPathService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar LearningPathPermissionsDelegationController = (function () {\r\n function LearningPathPermissionsDelegationController($scope, $http, $location, $routeParams, $timeout, url, securityService, permissionsService, learningPathsRouter, learningPathService, $uploader, userService, authService, authManager) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.learningPathService = learningPathService;\r\n this.$uploader = $uploader;\r\n this.userService = userService;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.DEFAULT_TOP_MENU_ITEM = 'permissionsDelegation';\r\n this.permissionsWithUsersAndGroups = [];\r\n this.isLearningPathLoaded = false;\r\n this.learningPathId = $routeParams[LearningPathsRouter_1.LearningPathsRouter.LEARNING_PATH_ID_PARAM];\r\n var learningPathIdStr = String(this.learningPathId);\r\n this.securityService.demandAuthentication()\r\n .demandLearningPathPermissions(learningPathIdStr, function (learningPathPermissions) { return learningPathPermissions.permissionsDelegation; });\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0) {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY);\r\n }\r\n this.menuKey = {\r\n topMenu: this.DEFAULT_TOP_MENU_ITEM,\r\n };\r\n this.loadLearningPath()\r\n .then(function () {\r\n _this.isLearningPathLoaded = true;\r\n });\r\n this.disabledSaveButton = false;\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.LEARNING_PATH, learningPathIdStr);\r\n this.setTopMenu('learningPath');\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n }\r\n LearningPathPermissionsDelegationController.prototype.loadLearningPath = function () {\r\n var _this = this;\r\n var promise = this.learningPathService.get(this.learningPathId);\r\n return promise.then(function (result) {\r\n _this.learningPath = angular.copy(result);\r\n var learningPathBreadcrumb = _this.learningPath.name || _this.learningPath.subjectName;\r\n learningPathBreadcrumb = learningPathBreadcrumb.length > 40 ? learningPathBreadcrumb.substring(0, 40) + \"...\" : learningPathBreadcrumb;\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header(\"Assign permissions\")\r\n .addParentLink(learningPathBreadcrumb, \"#\" + _this.learningPathsRouter.detailsUrl(_this.learningPathId))\r\n .update();\r\n return _this.learningPath;\r\n });\r\n };\r\n LearningPathPermissionsDelegationController.prototype.loadPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var _this = this;\r\n this.permissionsService.getAllObjectPermissionsWithUsersAndGroups(securedObjectType, objectId)\r\n .then(function (result) {\r\n _this.permissionsWithUsersAndGroups = result;\r\n });\r\n };\r\n LearningPathPermissionsDelegationController.prototype.save = function () {\r\n var _this = this;\r\n this.disabledSaveButton = true;\r\n this.learningPathService.updateViewAndStartLearningPathPermissions(this.learningPathId, this.permissionsWithUsersAndGroups)\r\n .then(function (result) {\r\n angular.copy(result, _this.learningPath);\r\n _this.updateSuccessCallback(result.id);\r\n }).catch(function (response) {\r\n _this.disabledSaveButton = false;\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n }\r\n });\r\n };\r\n LearningPathPermissionsDelegationController.prototype.updateSuccessCallback = function (learningPathId) {\r\n this.disabledSaveButton = false;\r\n INotifier_1.notifier.success(\"Modifications of the learning path have been saved\");\r\n this.permissionsWithUsersAndGroups = [];\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.LEARNING_PATH, String(learningPathId));\r\n };\r\n LearningPathPermissionsDelegationController.prototype.setTopMenu = function (topMenuKey) {\r\n this.menuKey = {\r\n topMenu: topMenuKey,\r\n leftMenuModule: this.menuKey.leftMenuModule,\r\n leftMenuModuleExpanded: this.menuKey.leftMenuModuleExpanded,\r\n leftMenuItem: this.menuKey.leftMenuItem\r\n };\r\n };\r\n LearningPathPermissionsDelegationController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.menuKey.topMenu == topMenuKey;\r\n };\r\n LearningPathPermissionsDelegationController.prototype.isLeftMenuModuleActive = function (topMenuKey, leftModule) {\r\n return this.menuKey.topMenu == topMenuKey && this.menuKey.leftMenuModuleExpanded == leftModule;\r\n };\r\n LearningPathPermissionsDelegationController.prototype.isLeftMenuItemActive = function (topMenuKey, leftModule, item) {\r\n return this.menuKey.topMenu == topMenuKey\r\n && (this.menuKey.leftMenuModule == leftModule || this.menuKey.leftMenuModuleExpanded == leftModule)\r\n && this.menuKey.leftMenuItem == item;\r\n };\r\n LearningPathPermissionsDelegationController.prototype.editLearningPath = function () {\r\n if (this.learningPathId) {\r\n if (this.learningPath && this.learningPath.permissions && this.learningPath.permissions.view) {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(this.learningPathId));\r\n }\r\n else {\r\n this.$location.url(this.learningPathsRouter.indexUrl());\r\n }\r\n }\r\n };\r\n LearningPathPermissionsDelegationController.NAME = \"learningPaths.LearningPathPermissionsDelegationController\";\r\n LearningPathPermissionsDelegationController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$timeout\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n \"Upload\",\r\n UserService_1.UserService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME\r\n ];\r\n return LearningPathPermissionsDelegationController;\r\n})();\r\nexports.LearningPathPermissionsDelegationController = LearningPathPermissionsDelegationController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../security/permissions/SecuredObjectType\":424,\"../urls/LearningPathsRouter\":477,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./LearningPathService\":320}],316:[function(require,module,exports){\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar LearningPathService_1 = require(\"./LearningPathService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar LearningPathPermissionsEditController = (function () {\r\n function LearningPathPermissionsEditController($routeParams, $location, securityService, learningPathService, permissionsService, authService, learningPathsRouter) {\r\n var _this = this;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.securityService = securityService;\r\n this.learningPathService = learningPathService;\r\n this.permissionsService = permissionsService;\r\n this.authService = authService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.user = {};\r\n this.isLearningPathLoaded = false;\r\n this.permissionsLoaded = false;\r\n this.learningPathId = $routeParams[LearningPathsRouter_1.LearningPathsRouter.LEARNING_PATH_ID_PARAM];\r\n var hasLearningPathId = this.learningPathId != null;\r\n var learningPathIdStr = String(this.learningPathId);\r\n this.securityService.demandAuthentication()\r\n .demandLearningPathPermissionsIf(hasLearningPathId, learningPathIdStr, function (learningPathPermissions) { return learningPathPermissions.edit; });\r\n this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.user);\r\n _this.currentUserId = user.id;\r\n _this.currentUserName = user.fullName;\r\n });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY);\r\n this.loadLearningPath(this.learningPathId).then(function (learningPath) {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit Learning Path \" + \"‘\"\r\n + learningPath.name + \"’\").update();\r\n _this.isLearningPathLoaded = true;\r\n });\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.LEARNING_PATH, learningPathIdStr);\r\n }\r\n LearningPathPermissionsEditController.prototype.loadLearningPath = function (learningPathId) {\r\n var _this = this;\r\n return this.learningPathService.get(learningPathId).then(function (learningPath) {\r\n _this.learningPath = angular.copy(learningPath);\r\n return _this.learningPath;\r\n });\r\n };\r\n LearningPathPermissionsEditController.prototype.loadPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var _this = this;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.permissionsService.getAllObjectPermissionsWithUsersAndGroups(securedObjectType, objectId).then(function (result) {\r\n _this.permissionsWithUsersAndGroups = result;\r\n _this.permissionsLoaded = true;\r\n });\r\n };\r\n LearningPathPermissionsEditController.prototype.save = function () {\r\n var _this = this;\r\n this.disabledSaveButton = true;\r\n this.learningPathService.updateLearningPathPermissions(this.learningPathId, this.learningPath.version, this.permissionsWithUsersAndGroups)\r\n .then(function () { return INotifier_1.notifier.success(\"Modifications of the learning path have been saved\"); })\r\n .finally(function () { return _this.disabledSaveButton = false; });\r\n };\r\n LearningPathPermissionsEditController.prototype.redirect = function () {\r\n if (this.learningPath && this.learningPath.permissions && this.learningPath.permissions.view) {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(this.learningPathId));\r\n }\r\n else {\r\n this.$location.url(this.learningPathsRouter.indexUrl());\r\n }\r\n };\r\n LearningPathPermissionsEditController.NAME = \"learningPaths.LearningPathPermissionsEditController\";\r\n LearningPathPermissionsEditController.$inject = [\r\n \"$routeParams\",\r\n \"$location\",\r\n SecurityService_1.SecurityService.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME\r\n ];\r\n return LearningPathPermissionsEditController;\r\n})();\r\nexports.LearningPathPermissionsEditController = LearningPathPermissionsEditController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../security/permissions/SecuredObjectType\":424,\"../urls/LearningPathsRouter\":477,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./LearningPathService\":320}],317:[function(require,module,exports){\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar LearningPathService_1 = require(\"./LearningPathService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar LearningPathProgressService_1 = require(\"./LearningPathProgressService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar CertificateService_1 = require(\"../certificates/CertificateService\");\r\nvar Event_1 = require(\"../components/models/Event\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar CommonService_1 = require(\"../common/CommonService\");\r\nvar TreeElementsInfoFiller_1 = require(\"../tree/TreeElementsInfoFiller\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar LearningPathProgressController = (function () {\r\n function LearningPathProgressController($http, $scope, $q, $routeParams, $location, authService, securityService, permissionsService, learningPathService, learningPathProgressService, progressService, certificateService, commonService, courseService, learningPathsRouter, url, dialogService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.authService = authService;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.learningPathService = learningPathService;\r\n this.learningPathProgressService = learningPathProgressService;\r\n this.progressService = progressService;\r\n this.certificateService = certificateService;\r\n this.commonService = commonService;\r\n this.courseService = courseService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.url = url;\r\n this.dialogService = dialogService;\r\n this.currentUser = {};\r\n this.learningPathUsers = [];\r\n this.selectedUserId = undefined;\r\n this.disableSelectButtons = false;\r\n this.userNameSearchString = null;\r\n this.userLogonSearchString = null;\r\n this.learningPathCourses = [];\r\n this.learningPathCertificates = [];\r\n this.userCertificates = [];\r\n this.isLearningPathLoaded = false;\r\n this.isLearningPathUsersLoading = false;\r\n this.isUserProgressLoading = false;\r\n this.selectedCourseCertificates = [];\r\n this.isUserCourseProgressLoaded = false;\r\n this.selectedUserFullName = undefined;\r\n this.searchType = 0;\r\n this.isOnlyActiveFilter = false;\r\n this.modelType = HomeRouter_1.HomeRouter.PARTICIPANT_TYPE_LP;\r\n this.learningPathId = $routeParams[LearningPathsRouter_1.LearningPathsRouter.LEARNING_PATH_ID_PARAM];\r\n var learningPathIdStr = String(this.learningPathId);\r\n this.securityService\r\n .demandLearningPathPermissions(learningPathIdStr, function (learningPathPermissions) { return learningPathPermissions.view; });\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY);\r\n this.loadLearningPath()\r\n .then(function () { return _this.loadCurrentUser(); })\r\n .then(function () {\r\n if (_this.learningPath.permissions.viewOtherUsersProgress) {\r\n return _this.getUsers();\r\n }\r\n else {\r\n _this.selectedUserId = _this.currentUser.id;\r\n return _this.$q.when(_this.currentUser);\r\n }\r\n })\r\n .then(function () {\r\n if (_this.learningPath.permissions.viewOtherUsersProgress && _this.learningPathUsers.length == 0) {\r\n return _this.$q.reject(\"no users for learning path\");\r\n }\r\n else {\r\n return _this.$q.all([_this.loadLearningPathCourses(), _this.loadLearningPathParticipationFormFields()]);\r\n }\r\n })\r\n .then(function () {\r\n if (_this.learningPath.permissions.viewOtherUsersProgress) {\r\n return _this.$q.reject(\"not need to load other for admin now\");\r\n }\r\n else {\r\n return _this.loadLearningPathProgressesForUser(_this.selectedUserId);\r\n }\r\n })\r\n .then(function () {\r\n return _this.$q.all([\r\n _this.loadCourseProgressesForLearningPathProgress(),\r\n _this.loadLearningPathCertificates(),\r\n _this.getUserCertificates()\r\n ]);\r\n })\r\n .finally(function () {\r\n _this.isLearningPathLoaded = true;\r\n var userId = $routeParams[LearningPathsRouter_1.LearningPathsRouter.USER_ID_PARAM] || -1;\r\n if (userId != -1) {\r\n var selectedUser = _this.learningPathUsers.filter(function (u) { return u.id == userId; })[0];\r\n if (selectedUser != null) {\r\n selectedUser.selected = false;\r\n _this.selectUser(selectedUser);\r\n }\r\n }\r\n });\r\n this.participantsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/learningPaths/search/participants/info?role=attendeeManager\")));\r\n this.participantsGridModel.pageSize = 10;\r\n this.participantsGridModel.filter.learnerName = null;\r\n this.participantsGridModel.filter.objectName = null;\r\n this.participantsGridModel.filter.status = null;\r\n this.participantsGridModel.filter.objectId = this.learningPathId;\r\n this.$scope.$on(Event_1.Event.LEARNING_PATH_PROGRESS_RESET_PROGRESS, function (event) {\r\n console.log(\"userProgressReset\", event);\r\n var selectedUser = _this.learningPathUsers.filter(function (u) { return u.selected == true; })[0];\r\n if (selectedUser != null) {\r\n selectedUser.selected = false;\r\n _this.selectUser(selectedUser);\r\n }\r\n });\r\n this.$scope.$on(Event_1.Event.LEARNING_PATH_PROGRESS_RELOAD_PROGRESS, function (event, args) {\r\n console.log(\"reloadLearningPathProgressStarted\", event, args);\r\n _this.loadAllProgressData();\r\n });\r\n this.$scope.$on(Event_1.Event.LEARNING_PATH_PROGRESS_CHANGE_PROGRESS_EXTERNALLY, function (event, args) {\r\n _this.selectedProgressId = args.selectedProgressId;\r\n _this.loadAllProgressData();\r\n });\r\n this.$scope.$on(Event_1.Event.LEARNING_PATH_PROGRESS_SHOW_COURSE_PROGRESS_DETAILS, function (event, args) {\r\n _this.selectedCourseId = args.courseId;\r\n _this.selectedCourseProgressId = args.courseProgressId;\r\n _this.showLearningPathCourseProgressDetails();\r\n });\r\n this.$scope.$on(Event_1.Event.COURSE_PROGRESS_RESET_PROGRESS, function (event) {\r\n console.log(\"userProgressReset\", event);\r\n $(\"#courseProgressDetailsModal\").modal(\"hide\");\r\n _this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_RELOAD_PROGRESS);\r\n });\r\n this.$scope.$on(Event_1.Event.COURSE_PROGRESS_RELOAD_PROGRESS, function (event, args) {\r\n console.log(\"reloadProgressStarted\", event, args);\r\n _this.loadAllSelectedCourseData();\r\n _this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_RELOAD_PROGRESS);\r\n });\r\n }\r\n LearningPathProgressController.prototype.loadLearningPath = function () {\r\n var _this = this;\r\n var promise = this.learningPathService.get(this.learningPathId);\r\n return promise.then(function (result) {\r\n _this.learningPath = angular.copy(result);\r\n var learningPathBreadcrumb = _this.learningPath.name || _this.learningPath.subjectName;\r\n learningPathBreadcrumb = learningPathBreadcrumb.length > 40 ? learningPathBreadcrumb.substring(0, 40) + \"...\" : learningPathBreadcrumb;\r\n PageHeaderHelper_1.PageHeader.set()\r\n .header(\"Progress\")\r\n .addParentLink(learningPathBreadcrumb, \"#\" + _this.learningPathsRouter.detailsUrl(_this.learningPathId))\r\n .update();\r\n return _this.learningPath;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadLearningPathCourses = function () {\r\n var _this = this;\r\n var promise = this.learningPathService.getLearningPathCourses(this.learningPathId);\r\n return promise.then(function (result) {\r\n _this.learningPathCourses = angular.copy(result);\r\n return _this.learningPathCourses;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadCurrentUser = function () {\r\n var _this = this;\r\n return this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.currentUser);\r\n return _this.currentUser;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadLearningPathProgressesForUser = function (userId) {\r\n var _this = this;\r\n return this.learningPathProgressService.getLearningPathProgressesForUser(this.learningPathId, this.selectedUserId)\r\n .then(function (userLearningPathProgresses) {\r\n _this.userLearningPathProgresses = angular.copy(userLearningPathProgresses);\r\n if (_this.userLearningPathProgresses.length > 0) {\r\n if (!_this.selectedProgressId) {\r\n _this.selectedProgressId = _this.userLearningPathProgresses[0].id;\r\n }\r\n }\r\n else {\r\n _this.selectedProgressId = null;\r\n return _this.$q.reject(\"No progress for User: \" + userId);\r\n }\r\n return _this.userLearningPathProgresses;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadCourseProgressesForLearningPathProgress = function () {\r\n var _this = this;\r\n return this.learningPathProgressService.getCourseProgressesForLearningPathProgress(this.learningPathId, this.selectedProgressId)\r\n .then(function (userCoursesProgresses) {\r\n _this.userCoursesProgresses = angular.copy(userCoursesProgresses);\r\n return _this.userCoursesProgresses;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadLearningPathCertificates = function () {\r\n var _this = this;\r\n return this.certificateService.getLearningPathCertificateTemplates(this.learningPathId).then(function (certificates) {\r\n _this.learningPathCertificates.splice(0);\r\n certificates.forEach(function (c) {\r\n _this.learningPathCertificates.push({\r\n id: c.certificateTemplateId,\r\n name: c.certificateTemplateName });\r\n });\r\n return _this.learningPathCertificates;\r\n });\r\n };\r\n LearningPathProgressController.prototype.getUserCertificates = function () {\r\n var _this = this;\r\n return this.learningPathService.getUserCertificates(this.learningPathId, this.selectedProgressId)\r\n .then(function (userCertificates) {\r\n _this.userCertificates = angular.copy(userCertificates, _this.userCertificates);\r\n return _this.userCertificates;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadParticipationFormForProgress = function () {\r\n var _this = this;\r\n return this.learningPathProgressService.getParticipationFormData(this.learningPathId, this.selectedProgressId)\r\n .then(function (participationForm) {\r\n _this.participationForm = participationForm;\r\n return participationForm;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadLearningPathParticipationFormFields = function () {\r\n var _this = this;\r\n return this.commonService.getParticipationForm(this.learningPathId, SecuredObjectType_1.SecuredObjectType.LEARNING_PATH.name.toUpperCase())\r\n .then(function (participationForm) {\r\n _this.participationFormFields = participationForm.fields;\r\n return _this.participationFormFields;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadAllProgressData = function () {\r\n this.userCoursesProgresses = null;\r\n this.userCertificates = null;\r\n this.participationForm = null;\r\n var dataLoadingPromises = [];\r\n if (this.learningPath.permissions.viewOtherUsersProgress) {\r\n dataLoadingPromises.push(this.loadLearningPathProgressesForUser(this.selectedUserId));\r\n dataLoadingPromises.push(this.loadCourseProgressesForLearningPathProgress());\r\n dataLoadingPromises.push(this.loadParticipationFormForProgress());\r\n dataLoadingPromises.push(this.loadLearningPathCertificates());\r\n dataLoadingPromises.push(this.getUserCertificates());\r\n }\r\n else {\r\n dataLoadingPromises.push(this.loadLearningPathProgressesForUser(this.selectedUserId));\r\n dataLoadingPromises.push(this.loadCourseProgressesForLearningPathProgress());\r\n dataLoadingPromises.push(this.loadLearningPathCertificates());\r\n dataLoadingPromises.push(this.getUserCertificates());\r\n }\r\n return this.$q.all(dataLoadingPromises);\r\n };\r\n LearningPathProgressController.prototype.clearData = function () {\r\n this.selectedUserId = undefined;\r\n this.learningPathUsers.forEach(function (u) { return u.selected = false; });\r\n this.userLearningPathProgresses = null;\r\n this.selectedProgressId = null;\r\n this.participationForm = null;\r\n this.userCoursesProgresses = null;\r\n this.userCertificates = null;\r\n };\r\n LearningPathProgressController.prototype.selectUser = function (user) {\r\n var _this = this;\r\n if (user.selected) {\r\n user.selected = false;\r\n this.selectedUserId = undefined;\r\n this.selectedProgressId = undefined;\r\n this.selectedUserFullName = \"\";\r\n return;\r\n }\r\n this.disableSelectButtons = true;\r\n this.selectedUserFullName = user.name;\r\n this.isUserProgressLoading = true;\r\n this.clearData();\r\n this.selectedUserId = user.id;\r\n this.learningPathUsers[this.learningPathUsers.indexOf(user)].selected = true;\r\n this.loadLearningPathProgressesForUser(user.id)\r\n .then(function () {\r\n return _this.$q.all([\r\n _this.loadCourseProgressesForLearningPathProgress(),\r\n _this.loadParticipationFormForProgress(),\r\n _this.loadLearningPathCertificates(),\r\n _this.getUserCertificates(),\r\n ]);\r\n })\r\n .finally(function () {\r\n _this.disableSelectButtons = false;\r\n _this.isUserProgressLoading = false;\r\n });\r\n };\r\n LearningPathProgressController.prototype.selectUserOnButtonPressed = function (user, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.selectUser(user);\r\n }\r\n };\r\n LearningPathProgressController.prototype.getUsers = function () {\r\n var _this = this;\r\n this.learningPathUsers = [];\r\n this.selectedUserId = undefined;\r\n this.clearData();\r\n this.isLearningPathUsersLoading = true;\r\n return this.learningPathProgressService.getLearningPathUsers(this.learningPathId, this.userNameSearchString, this.userLogonSearchString, this.isOnlyActiveFilter)\r\n .then(function (users) {\r\n users.forEach(function (u) {\r\n var extendedUserInfo = { selected: false };\r\n angular.copy(u, extendedUserInfo);\r\n extendedUserInfo.selected = false;\r\n _this.learningPathUsers.push(extendedUserInfo);\r\n });\r\n _this.isLearningPathUsersLoading = false;\r\n });\r\n };\r\n LearningPathProgressController.prototype.getUsersOnButtonPressed = function (keyCode) {\r\n if (keyCode === 13) {\r\n this.getUsers();\r\n }\r\n };\r\n LearningPathProgressController.prototype.clearSearch = function () {\r\n this.userNameSearchString = null;\r\n this.userLogonSearchString = null;\r\n this.getUsers();\r\n };\r\n LearningPathProgressController.prototype.showLearningPathCourseProgressDetails = function () {\r\n var _this = this;\r\n var searchCourseProgressResults = this.userCoursesProgresses.filter(function (progress) { return progress.id == _this.selectedCourseProgressId; });\r\n this.selectedCourseProgress = searchCourseProgressResults.length == 1 ? searchCourseProgressResults[0] : null;\r\n this.selectedUserName = this.getSelectedUserName();\r\n this.isUserCourseProgressLoaded = false;\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#courseProgressDetailsModal\").modal({\r\n keyboard: false,\r\n show: true\r\n });\r\n this.loadAllSelectedCourseData()\r\n .then(function () { return _this.isUserCourseProgressLoaded = true; });\r\n };\r\n LearningPathProgressController.prototype.getSelectedUserName = function () {\r\n var _this = this;\r\n if (this.currentUser.id == this.selectedUserId) {\r\n return this.currentUser.fullName;\r\n }\r\n else {\r\n var searchUserResults = this.learningPathUsers.filter(function (user) { return user.id == _this.selectedUserId; });\r\n return searchUserResults.length > 0 ? searchUserResults[0].name : \"\";\r\n }\r\n };\r\n LearningPathProgressController.prototype.loadAllSelectedCourseData = function () {\r\n var _this = this;\r\n return this.loadCourse(this.selectedCourseId)\r\n .then(function () {\r\n var loadDataPromises = [];\r\n if (_this.selectedCourse.permissions.viewOtherUsersProgress) {\r\n loadDataPromises.push(_this.loadParticipationFormForCourseProgress(_this.selectedCourseId, _this.selectedCourseProgressId), _this.loadCourseParticipationFormFields(_this.selectedCourseId));\r\n }\r\n loadDataPromises.push(_this.getAllCourseSections(_this.selectedCourseId), _this.loadSectionProgressesForCourseProgress(_this.selectedCourseId, _this.selectedCourseProgressId), _this.loadCourseCertificates(_this.selectedCourseId), _this.loadUserCourseCertificates(_this.selectedCourseId, _this.selectedCourseProgressId));\r\n return _this.$q.all(loadDataPromises);\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadCourse = function (courseId) {\r\n var _this = this;\r\n return this.courseService.get(courseId)\r\n .then(function (result) {\r\n _this.selectedCourse = angular.copy(result);\r\n return _this.selectedCourse;\r\n });\r\n };\r\n LearningPathProgressController.prototype.getAllCourseSections = function (courseId) {\r\n var _this = this;\r\n return this.progressService.getAllSectionsInHierarchy(courseId)\r\n .then(function (result) {\r\n _this.selectedCourseSections = result;\r\n TreeElementsInfoFiller_1.TreeElementsInfoFiller.fillHierarchyInfoWithMaxLevel(_this.selectedCourseSections, Number.MAX_VALUE);\r\n return _this.selectedCourseSections;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadSectionProgressesForCourseProgress = function (courseId, courseProgressId) {\r\n var _this = this;\r\n return this.progressService.getAllSectionProgressesForCourseProgress(courseId, courseProgressId)\r\n .then(function (result) { return _this.selectedCourseProgressSectionProgresses = result; });\r\n };\r\n LearningPathProgressController.prototype.loadCourseCertificates = function (courseId) {\r\n var _this = this;\r\n return this.certificateService.getCourseCertificateTemplates(courseId).then(function (certificates) {\r\n _this.selectedCourseCertificates.splice(0);\r\n certificates.forEach(function (c) {\r\n _this.selectedCourseCertificates.push({\r\n id: c.certificateTemplateId,\r\n name: c.certificateTemplateName });\r\n });\r\n return _this.selectedCourseCertificates;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadUserCourseCertificates = function (courseId, courseProgressId) {\r\n var _this = this;\r\n return this.courseService.getUserCertificates(courseId, courseProgressId).then(function (result) {\r\n _this.selectedCourseUserCertificates = angular.copy(result);\r\n return _this.selectedCourseUserCertificates;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadParticipationFormForCourseProgress = function (courseId, courseProgressId) {\r\n var _this = this;\r\n return this.progressService.getCourseProgressParticipationForm(courseId, courseProgressId)\r\n .then(function (participationForm) {\r\n _this.selectedCourseParticipationForm = participationForm;\r\n return _this.selectedCourseParticipationForm;\r\n });\r\n };\r\n LearningPathProgressController.prototype.loadCourseParticipationFormFields = function (courseId) {\r\n var _this = this;\r\n return this.commonService.getParticipationForm(courseId, SecuredObjectType_1.SecuredObjectType.COURSE.name.toUpperCase())\r\n .then(function (participationForm) {\r\n _this.selectedCourseParticipationFormFields = participationForm.fields;\r\n return _this.selectedCourseParticipationFormFields;\r\n });\r\n };\r\n LearningPathProgressController.prototype.onSelectedProgressChange = function () {\r\n this.userCoursesProgresses = null;\r\n this.userCertificates = null;\r\n this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_CHANGE_PROGRESS_EXTERNALLY, { selectedProgressId: this.selectedProgressId });\r\n };\r\n LearningPathProgressController.prototype.getSelectedProgressStatus = function () {\r\n var _this = this;\r\n var progress = !!this.userLearningPathProgresses ? this.userLearningPathProgresses.filter(function (p) { return p.id === _this.selectedProgressId; }).pop() : null;\r\n return progress ? progress.status : \"\";\r\n };\r\n LearningPathProgressController.prototype.getSelectedProgress = function () {\r\n var _this = this;\r\n return !!this.userLearningPathProgresses ? this.userLearningPathProgresses.filter(function (p) { return p.id === _this.selectedProgressId; }).pop() : null;\r\n };\r\n LearningPathProgressController.prototype.deactivateLearningPathProgress = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Do you want to deactivate user progress on this learning path?\", {\r\n title: \"Deactivate user progress?\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n _this.learningPathProgressService.deactivateLearningPathProgress(_this.learningPath.id, _this.selectedProgressId)\r\n .then(function () {\r\n _this.$scope.$emit(Event_1.Event.LEARNING_PATH_PROGRESS_RESET_PROGRESS);\r\n })\r\n .catch(function (response) {\r\n INotifier_1.notifier.commonError(response);\r\n });\r\n });\r\n };\r\n LearningPathProgressController.prototype.changeFilter = function () {\r\n if (this.searchType == 0) {\r\n var path = this.$location.path().split(\"?\")[0];\r\n this.$location.url(path);\r\n this.learningPathUsers.forEach(function (u) {\r\n u.selected = false;\r\n });\r\n }\r\n else {\r\n this.selectedUserId = undefined;\r\n this.selectedProgressId = undefined;\r\n this.selectedUserFullName = \"\";\r\n }\r\n this.userNameSearchString = null;\r\n this.userLogonSearchString = null;\r\n this.getUsers();\r\n };\r\n LearningPathProgressController.NAME = \"learningPaths.LearningPathProgressController\";\r\n LearningPathProgressController.$inject = [\r\n \"$http\",\r\n \"$scope\",\r\n \"$q\",\r\n \"$routeParams\",\r\n \"$location\",\r\n AuthService_1.AuthService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n LearningPathProgressService_1.LearningPathProgressService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n CertificateService_1.CertificateService.NAME,\r\n CommonService_1.CommonService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n UrlService_1.UrlService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return LearningPathProgressController;\r\n})();\r\nexports.LearningPathProgressController = LearningPathProgressController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../certificates/CertificateService\":45,\"../common/CommonService\":53,\"../components/dialog/DialogService\":166,\"../components/models/Event\":170,\"../courses/CourseService\":211,\"../courses/ProgressService\":219,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../security/permissions/SecuredObjectType\":424,\"../tree/TreeElementsInfoFiller\":460,\"../urls/HomeRouter\":473,\"../urls/LearningPathsRouter\":477,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./LearningPathProgressService\":318,\"./LearningPathService\":320}],318:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar LearningPathProgressService = (function () {\r\n function LearningPathProgressService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n }\r\n LearningPathProgressService.prototype.getLearningPathProgress = function (learningPathId, learningPathProgressId) {\r\n return this.$http.get(this.url.base(\"/api/progress/learningPaths/:learningPathId?learningPathProgressId=:learningPathProgressId\")\r\n .param(\":learningPathId\", learningPathId)\r\n .param(\":learningPathProgressId\", learningPathProgressId || \"\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathProgressService.prototype.confirmLearningPathProgress = function (learningPathId) {\r\n return this.$http.post(this.url.base(\"/api/progress/learningPaths/:learningPathId/confirm\")\r\n .param(\":learningPathId\", learningPathId)\r\n .service(), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathProgressService.prototype.getLearningPathProgressForUser = function (learningPathId, userId) {\r\n return this.$http.get(this.url.base(\"/api/progress/learningPaths/:learningPathId/users/:userId\")\r\n .param(\":learningPathId\", learningPathId)\r\n .param(\":userId\", userId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathProgressService.prototype.getLearningPathProgressesForUser = function (learningPathId, userId) {\r\n return this.$http.get(this.url.base(\"/api/progress/learningPaths/:learningPathId/users/:userId/all\")\r\n .param(\":learningPathId\", learningPathId)\r\n .param(\":userId\", userId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathProgressService.prototype.getCourseProgressesForLearningPathProgress = function (learningPathId, learningPathProgressId) {\r\n return this.$http.get(this.url.base(\"/api/progress/learningPaths/:learningPathId/courses?learningPathProgressId=:learningPathProgressId\")\r\n .param(\":learningPathId\", learningPathId)\r\n .param(\":learningPathProgressId\", learningPathProgressId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathProgressService.prototype.getParticipationFormData = function (learningPathId, learningPathProgressId) {\r\n return this.$http.get(this.url.base(\"/api/progress/learningPaths/:learningPathId/participationFormData?learningPathProgressId=:learningPathProgressId\")\r\n .param(\":learningPathId\", learningPathId)\r\n .param(\":learningPathProgressId\", learningPathProgressId || \"\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathProgressService.prototype.setParticipationFormData = function (learningPathId, learningPathProgressId, participationFormData) {\r\n return this.$http.put(this.url.base(\"/api/progress/learningPaths/:learningPathId/participationFormData?learningPathProgressId=:learningPathProgressId\")\r\n .param(\":learningPathId\", learningPathId)\r\n .param(\":learningPathProgressId\", learningPathProgressId || \"\")\r\n .service(), participationFormData)\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathProgressService.prototype.getNumberOfUsersWithUncompletedProgress = function (learningPathId) {\r\n return this.$http.get(this.url.base(\"/api/progress/learningPaths/:learningPathId/numberOfUncompleted\")\r\n .param(\":learningPathId\", learningPathId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathProgressService.prototype.getLearningPathUsers = function (learningPathId, userNameSearchString, userLogonSearchString, onlyActive) {\r\n return this.$http.get(this.url.base(\"/api/learningPaths/:learningPathId/users?userNameSearchString=:userNameSearchString&userLogonSearchString=:userLogonSearchString&onlyActive=:onlyActive\")\r\n .param(\":learningPathId\", learningPathId)\r\n .param(\":userNameSearchString\", userNameSearchString || \"\")\r\n .param(\":userLogonSearchString\", userLogonSearchString || \"\")\r\n .param(\":onlyActive\", onlyActive)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathProgressService.prototype.deactivateLearningPathProgress = function (learningPathId, learningPathProgressId) {\r\n return this.$http.put(this.url.service(\"/api/progress/learningPaths/\" + learningPathId + \"/inactive?learningPathProgressId=\" + learningPathProgressId), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathProgressService.NAME = \"learningPaths.LearningPathProgressService\";\r\n LearningPathProgressService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return LearningPathProgressService;\r\n})();\r\nexports.LearningPathProgressService = LearningPathProgressService;\r\n},{\"../utils/UrlService\":528}],319:[function(require,module,exports){\nvar LearningPathService_1 = require(\"./LearningPathService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar LearningPathRelatedProductsEditController = (function () {\r\n function LearningPathRelatedProductsEditController($scope, $routeParams, learningPathService, learningPathsRouter, securityService, authManager, permissionsService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.learningPathService = learningPathService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.securityService = securityService;\r\n this.authManager = authManager;\r\n this.permissionsService = permissionsService;\r\n this.isLearningPathLoaded = false;\r\n this.onProductsSaveSuccess = function () {\r\n return _this.loadLearningPath(_this.learningPathId);\r\n };\r\n this.learningPathId = $routeParams[LearningPathsRouter_1.LearningPathsRouter.LEARNING_PATH_ID_PARAM];\r\n var hasLearningPathId = this.learningPathId != null;\r\n var learningPathIdStr = String(this.learningPathId);\r\n this.securityService.demandAuthentication()\r\n .demandLearningPathPermissionsIf(hasLearningPathId, learningPathIdStr, function (learningPathPermissions) { return learningPathPermissions.edit; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY);\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadLearningPath(this.learningPathId).then(function (learningPath) {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit Learning Path \" + \"‘\"\r\n + learningPath.name + \"’\").update();\r\n _this.isLearningPathLoaded = true;\r\n });\r\n }\r\n LearningPathRelatedProductsEditController.prototype.loadLearningPath = function (learningPathId) {\r\n var _this = this;\r\n return this.learningPathService.get(learningPathId).then(function (learningPath) {\r\n _this.learningPath = angular.copy(learningPath);\r\n return _this.learningPath;\r\n });\r\n };\r\n LearningPathRelatedProductsEditController.NAME = \"courses.LearningPathRelatedProductsEditController\";\r\n LearningPathRelatedProductsEditController.$inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n LearningPathService_1.LearningPathService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return LearningPathRelatedProductsEditController;\r\n})();\r\nexports.LearningPathRelatedProductsEditController = LearningPathRelatedProductsEditController;\r\n},{\"../authcore/AuthManager\":25,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/LearningPathsRouter\":477,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./LearningPathService\":320}],320:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar LearningPathService = (function () {\r\n function LearningPathService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n }\r\n LearningPathService.prototype.get = function (id) {\r\n return this.$http.get(this.url.base(\"/api/learningPaths/:id?\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; }).catch(function (reason) {\r\n return {\r\n typeName: '',\r\n name: 'Failed to retrieve the learning path details'\r\n };\r\n });\r\n };\r\n LearningPathService.prototype.getLearningPathCourses = function (id) {\r\n return this.$http.get(this.url.base(\"/api/learningPaths/:id/courses/all\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.create = function (learningPath, preview, courses) {\r\n learningPath.preview = preview != null\r\n ? { name: preview.name, type: preview.type, size: preview.size }\r\n : null;\r\n learningPath.courses = courses != null\r\n ? LearningPathService.getLearningPathCourseInputs(courses)\r\n : null;\r\n return this.$http.post(this.url.service(\"/api/learningPaths\"), learningPath).then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.update = function (learningPath, isResetPreview, preview, courses) {\r\n learningPath.preview = preview != null\r\n ? { name: preview.name, type: preview.type, size: preview.size }\r\n : null;\r\n learningPath.resetPreview = isResetPreview;\r\n learningPath.courses = courses != null\r\n ? LearningPathService.getLearningPathCourseInputs(courses)\r\n : null;\r\n return this.$http.put(this.url.service(\"/api/learningPaths\"), learningPath).then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.updateLearningPathPermissions = function (learningPathId, version, permissionsWithUsersAndGroups) {\r\n return this.$http.put(this.url.base(\"/api/learningPaths/:learningPathId/permissions\")\r\n .param(\":learningPathId\", learningPathId)\r\n .service(), {\r\n id: learningPathId,\r\n version: version,\r\n permissionsWithUsersAndGroups: permissionsWithUsersAndGroups\r\n }).then(function (result) { return result.data[\"learningPath\"]; });\r\n };\r\n LearningPathService.prototype.updateViewAndStartLearningPathPermissions = function (learningPathId, permissionsWithUsersAndGroups) {\r\n return this.$http.put(this.url.base(\"/api/learningPaths/:learningPathId/updateViewAndStartPermissions\")\r\n .param(\":learningPathId\", learningPathId)\r\n .service(), permissionsWithUsersAndGroups).then(function (result) { return result.data[\"learningPath\"]; });\r\n };\r\n LearningPathService.getLearningPathCourseInputs = function (courses) {\r\n var courseInputs = [];\r\n for (var i = 0; i < courses.length; i++) {\r\n courseInputs.push({\r\n courseId: courses[i].id,\r\n sequenceNumber: i + 1,\r\n inclusionType: courses[i].courseInclusionType,\r\n });\r\n }\r\n return courseInputs;\r\n };\r\n LearningPathService.prototype.deactivateLearningPath = function (learningPathId) {\r\n return this.$http.delete(this.url.base(\"/api/learningPaths/:learningPathId\")\r\n .param(\":learningPathId\", learningPathId)\r\n .service()).then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.getUserCertificates = function (learningPathId, learningPathProgressId) {\r\n return this.$http.get(this.url.base(\"/api/learningPaths/:learningPathId/progress/:learningPathProgressId/userCertificates\")\r\n .param(\":learningPathId\", learningPathId)\r\n .param(\":learningPathProgressId\", learningPathProgressId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.removeUserCertificates = function (learningPathId, learningPathProgressId) {\r\n return this.$http.delete(this.url.base(\"/api/learningPaths/:learningPathId/progress/:learningPathProgressId/userCertificates\")\r\n .param(\":learningPathId\", learningPathId)\r\n .param(\":learningPathProgressId\", learningPathProgressId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.downloadCertificate = function (parameters) {\r\n var _this = this;\r\n var reportType = 'LEARNING_PATH_CERTIFICATE';\r\n return this.$http.post(this.url.base(\"/api/reports/downloadToken/:reportType\")\r\n .param(\":reportType\", reportType)\r\n .service(), {\r\n parameters: JSON.stringify(parameters)\r\n }).then(function (result) { return _this.url.base(\"/api/reports/download/:token\").param(\":token\", result.data.token).service(); });\r\n };\r\n LearningPathService.prototype.saveCertificateForUser = function (parameters) {\r\n return this.$http.post(this.url.service(\"/api/reports/certificate/save\"), {\r\n parameters: JSON.stringify(parameters),\r\n securedObjectType: SecuredObjectType_1.SecuredObjectType.LEARNING_PATH.name.toUpperCase()\r\n }).then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.getMyLearningPathsByIds = function (learningPathIds) {\r\n return this.$http.get(this.url.service(\"/api/learningPaths/my\"), { params: { learningPathIds: learningPathIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.getInstructorLearningPathsCount = function () {\r\n return this.$http.get(this.url.service(\"/api/learningPaths/instructor/count\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.getAttendeeManagerLearningPathsCount = function () {\r\n return this.$http.get(this.url.service(\"/api/learningPaths/attendeeManager/count\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.isExistParticipantsInfo = function (role) {\r\n return this.$http.get(this.url.base(\"/api/learningPaths/search/exist/participants/info?role=:role\")\r\n .param(\":role\", role)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.removePermissionAssignments = function (learningPathId) {\r\n return this.$http.put(this.url.service(\"/api/learningPaths/removePermissionAssignments/\" + learningPathId), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathService.prototype.getGameLearningObjectsBadgeIds = function (learningPathId) {\r\n return this.$http.get(this.url.base(\"/api/learningPaths/:learningPathId/actionPage/badgeIds\")\r\n .param(\":learningPathId\", learningPathId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n LearningPathService.NAME = \"learningPaths.LearningPathService\";\r\n LearningPathService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return LearningPathService;\r\n})();\r\nexports.LearningPathService = LearningPathService;\r\n},{\"../security/permissions/SecuredObjectType\":424,\"../utils/UrlService\":528}],321:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar CourseProgressStatus_1 = require(\"../courses/models/CourseProgressStatus\");\r\nvar LearningPathCourseInclusionType_1 = require(\"./models/LearningPathCourseInclusionType\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar CommonHomeService_1 = require(\"../common/CommonHomeService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar LearningPathProgressService_1 = require(\"./LearningPathProgressService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar LearningPathsController = (function () {\r\n function LearningPathsController($scope, $rootScope, $http, $location, $window, learningPathsRouter, permissionsApi, authManager, url, brandingService, authRedirect, coursesRouter, homeCommonService, commonFilterService, learningPathProgressService, userService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.authManager = authManager;\r\n this.url = url;\r\n this.brandingService = brandingService;\r\n this.authRedirect = authRedirect;\r\n this.coursesRouter = coursesRouter;\r\n this.homeCommonService = homeCommonService;\r\n this.commonFilterService = commonFilterService;\r\n this.learningPathProgressService = learningPathProgressService;\r\n this.userService = userService;\r\n this.DEFAULT_TOP_MENU_ITEM = 'learningPath';\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n this.countActiveFilter = 0;\r\n this.isLearningPathsLoaded = false;\r\n this.topStatus = 'ALL';\r\n this.isInitSlick = false;\r\n this.isInitializedSlick = false;\r\n this.isConfirmedLearningPaths = [];\r\n this.isDisableConfirmProgressButton = false;\r\n this.showExpired = false;\r\n this.learningPathsUrl = \"/api/learningPaths/search\";\r\n this.purchasedOrderId = parseInt($location.search()[CoursesRouter_1.CoursesRouter.PURCHASED_ORDER]) || null;\r\n this.menuKey = {\r\n topMenu: this.DEFAULT_TOP_MENU_ITEM\r\n };\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.loadUserProfile();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Learning Paths\").update();\r\n if (this.isAuthenticated) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n else {\r\n if ($location.search()[CoursesRouter_1.CoursesRouter.LOGON_REQUIRED]) {\r\n authRedirect.redirectToLogOn();\r\n }\r\n }\r\n this.http = $http;\r\n this.window = angular.element(this.$window);\r\n this.updateGrid();\r\n }\r\n LearningPathsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n LearningPathsController.prototype.getStorageFilters = function (isInit) {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(LearningPathsController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.learningPathsGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(LearningPathsController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n }\r\n var topStatus = this.commonFilterService.getTopStatus(LearningPathsController.NAME);\r\n if (topStatus) {\r\n this.topStatus = topStatus;\r\n this.applyTopStatus(topStatus);\r\n }\r\n if (!isInit) {\r\n this.learningPathsGridModel.loadCurrentPage();\r\n }\r\n };\r\n LearningPathsController.prototype.startLoading = function () {\r\n this.isInitSlick = false;\r\n this.isLearningPathsLoaded = false;\r\n };\r\n LearningPathsController.prototype.endLoading = function () {\r\n var _this = this;\r\n this.isLearningPathsLoaded = true;\r\n setTimeout(function () { return _this.initializeSlick(); }, 500);\r\n };\r\n LearningPathsController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n LearningPathsController.prototype.setViewType = function (viewType) {\r\n var _this = this;\r\n if (viewType == 1) {\r\n setTimeout(function () { return _this.initializeSlick(); });\r\n }\r\n this.viewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n LearningPathsController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n LearningPathsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n LearningPathsController.prototype.loadLearningPath = function (learningPathId) {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(learningPathId));\r\n };\r\n LearningPathsController.prototype.loadCourse = function (courseId) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n };\r\n LearningPathsController.prototype.getSubjectAndName = function (learningPath) {\r\n return learningPath.subjectName != null && learningPath.name != undefined\r\n ? learningPath.subjectName + \" / \" + learningPath.name\r\n : learningPath.name;\r\n };\r\n LearningPathsController.prototype.searchLearningPath = function () {\r\n this.learningPathsGridModel.loadPage(0);\r\n };\r\n LearningPathsController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsLearningPathsFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.\" + key);\r\n }\r\n };\r\n LearningPathsController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n LearningPathsController.prototype.updateTopStatus = function (status) {\r\n this.commonFilterService.saveTopStatus(LearningPathsController.NAME, status);\r\n this.topStatus = status;\r\n this.applyTopStatus(status);\r\n this.learningPathsGridModel.loadCurrentPage();\r\n };\r\n LearningPathsController.prototype.applyTopStatus = function (status) {\r\n switch (status) {\r\n case 'ALL':\r\n this.learningPathsGridModel.filter.learningPathStatus = \"NOT_STARTED,STARTED,COMPLETED\";\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n break;\r\n case 'NOT_STARTED':\r\n this.learningPathsGridModel.filter.learningPathStatus = \"NOT_STARTED\";\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = false;\r\n this.completedStatus = false;\r\n break;\r\n case 'STARTED':\r\n this.learningPathsGridModel.filter.learningPathStatus = \"STARTED\";\r\n this.notStartedStatus = false;\r\n this.inProgressStatus = true;\r\n this.completedStatus = false;\r\n break;\r\n case 'COMPLETED':\r\n this.learningPathsGridModel.filter.learningPathStatus = \"COMPLETED\";\r\n this.notStartedStatus = false;\r\n this.inProgressStatus = false;\r\n this.completedStatus = true;\r\n break;\r\n }\r\n };\r\n LearningPathsController.prototype.getActiveStatusName = function () {\r\n switch (this.learningPathsGridModel.filter.learningPathStatus) {\r\n case 'NOT_STARTED,STARTED,COMPLETED':\r\n return \"All\";\r\n case 'NOT_STARTED':\r\n return \"New\";\r\n case 'STARTED':\r\n return \"In-Progress\";\r\n case 'COMPLETED':\r\n return \"Completed\";\r\n default:\r\n return 'All';\r\n }\r\n };\r\n LearningPathsController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, LearningPathsController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n LearningPathsController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.showExpired = false;\r\n this.commonFilterService.clearFilter(LearningPathsController.NAME, this.learningPathsGridModel);\r\n };\r\n LearningPathsController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(LearningPathsController.NAME, this.searchInput);\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n this.learningPathsGridModel.loadCurrentPage();\r\n };\r\n LearningPathsController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(LearningPathsController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.learningPathsGridModel.filter.searchString = this.searchInput;\r\n this.learningPathsGridModel.loadCurrentPage();\r\n }\r\n };\r\n LearningPathsController.prototype.clearSearch = function () {\r\n this.learningPathsGridModel.filter.searchString = null;\r\n this.learningPathsGridModel.filter.viewType = null;\r\n this.learningPathsGridModel.filter.subjectId = null;\r\n this.learningPathsGridModel.filter.languageId = null;\r\n this.learningPathsGridModel.filter.sourceId = null;\r\n this.learningPathsGridModel.filter.showExpired = false;\r\n this.viewType = this.userProfile ?\r\n Number(this.userProfile.pageViewMode) : 1;\r\n this.notStartedStatus = true;\r\n this.inProgressStatus = true;\r\n this.completedStatus = true;\r\n this.learningPathsGridModel.filter.learningPathStatus = this.getCourseStatusList();\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.viewType\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.languageId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.sourceId\");\r\n sessionStorage.removeItem(\"vhsLearningPathsFilter.learningPathStatus\");\r\n this.learningPathsGridModel.loadPage(0);\r\n };\r\n LearningPathsController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.searchString\")) {\r\n this.learningPathsGridModel.filter.searchString = sessionStorage.getItem(\"vhsLearningPathsFilter.searchString\");\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.viewType\")) {\r\n this.learningPathsGridModel.filter.viewType = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.viewType\"));\r\n this.viewType = this.learningPathsGridModel.filter.viewType;\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.subjectId\")) {\r\n this.learningPathsGridModel.filter.subjectId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.subjectId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.languageId\")) {\r\n this.learningPathsGridModel.filter.languageId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.languageId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.sourceId\")) {\r\n this.learningPathsGridModel.filter.sourceId = parseInt(sessionStorage.getItem(\"vhsLearningPathsFilter.sourceId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsLearningPathsFilter.learningPathStatus\")) {\r\n var courseStatusSessionList = sessionStorage\r\n .getItem(\"vhsLearningPathsFilter.learningPathStatus\").split(\",\");\r\n this.learningPathsGridModel.filter.learningPathStatus = courseStatusSessionList;\r\n this.notStartedStatus = courseStatusSessionList.indexOf('NOT_STARTED') >= 0;\r\n this.inProgressStatus = courseStatusSessionList.indexOf('STARTED') >= 0;\r\n this.completedStatus = courseStatusSessionList.indexOf('COMPLETED') >= 0;\r\n }\r\n else {\r\n this.learningPathsGridModel.filter.learningPathStatus = this.getCourseStatusList();\r\n sessionStorage.setItem(\"vhsLearningPathsFilter.learningPathStatus\", \"NOT_STARTED,STARTED,COMPLETED\");\r\n }\r\n this.learningPathsGridModel.filter.showExpired = this.showExpired;\r\n };\r\n LearningPathsController.prototype.setCourseStatusFilter = function (isInit) {\r\n var statusList = this.getCourseStatusList();\r\n this.learningPathsGridModel.filter.learningPathStatus = statusList;\r\n sessionStorage.setItem(\"vhsLearningPathsFilter.learningPathStatus\", statusList.join(\",\"));\r\n if (!isInit) {\r\n this.learningPathsGridModel.loadPage(0);\r\n }\r\n };\r\n LearningPathsController.prototype.getCourseStatusList = function () {\r\n var statusList = [];\r\n if (this.notStartedStatus === true) {\r\n statusList.push('NOT_STARTED');\r\n }\r\n if (this.inProgressStatus === true) {\r\n statusList.push('STARTED');\r\n }\r\n if (this.completedStatus === true) {\r\n statusList.push('COMPLETED');\r\n }\r\n return statusList;\r\n };\r\n LearningPathsController.prototype.getCompletedMandatoryCourses = function (coursesByLP) {\r\n var countCompletedCourses = 0;\r\n var countMandatoryCourses = 0;\r\n for (var _i = 0; _i < coursesByLP.length; _i++) {\r\n var course = coursesByLP[_i];\r\n if (course.courseInclusionType === LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.MANDATORY]) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n countCompletedCourses++;\r\n }\r\n countMandatoryCourses++;\r\n }\r\n }\r\n return countCompletedCourses + ' of ' + countMandatoryCourses;\r\n };\r\n LearningPathsController.prototype.getCompletedElectiveCourses = function (coursesByLP) {\r\n var countCompletedCourses = 0;\r\n var countMandatoryCourses = 0;\r\n for (var _i = 0; _i < coursesByLP.length; _i++) {\r\n var course = coursesByLP[_i];\r\n if (course.courseInclusionType === LearningPathCourseInclusionType_1.LearningPathCourseInclusionType[LearningPathCourseInclusionType_1.LearningPathCourseInclusionType.ELECTIVE]) {\r\n if (course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.RESET]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.EXPIRED]\r\n || course.courseProgressStatus == CourseProgressStatus_1.CourseProgressStatus[CourseProgressStatus_1.CourseProgressStatus.COMPLETED]) {\r\n countCompletedCourses++;\r\n }\r\n countMandatoryCourses++;\r\n }\r\n }\r\n return countCompletedCourses + ' of ' + countMandatoryCourses;\r\n };\r\n LearningPathsController.prototype.initializeSlick = function () {\r\n this.isInitSlick = this.homeCommonService.initializeSlick(this.learningPathsGridModel, false);\r\n };\r\n LearningPathsController.prototype.showAllLP = function (learningPathId) {\r\n var _this = this;\r\n this.isShowAllCards = true;\r\n this.homeCommonService.showAllLP(learningPathId);\r\n setTimeout(function () { return _this.setPopupClasses(); }, 500);\r\n };\r\n LearningPathsController.prototype.hideAllLP = function (learningPathId) {\r\n var _this = this;\r\n this.isShowAllCards = false;\r\n this.homeCommonService.hideAllLP(learningPathId);\r\n setTimeout(function () { return _this.setPopupClasses(); }, 500);\r\n };\r\n LearningPathsController.prototype.openCard = function (indexPlanLp, learningPathId) {\r\n this.homeCommonService.openCard(indexPlanLp, learningPathId, this.isShowAllCards);\r\n };\r\n LearningPathsController.prototype.getCourseDatesString = function (course) {\r\n var courseDates = new Map();\r\n if (course.endDate) {\r\n courseDates.set(\"endDate\", new Date(course.endDate).toLocaleDateString());\r\n }\r\n if (!course.endDate || course.startDate > Date.now()) {\r\n courseDates.set(\"startDate\", new Date(course.startDate).toLocaleDateString());\r\n }\r\n return courseDates;\r\n };\r\n LearningPathsController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"lp__plan-card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (popup.clientWidth >= window.innerWidth - card.clientWidth - rec.left) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n LearningPathsController.prototype.confirmProgress = function (learningPathId) {\r\n var _this = this;\r\n this.isDisableConfirmProgressButton = true;\r\n this.learningPathProgressService.confirmLearningPathProgress(learningPathId)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Learning Path progress has been recalculated\");\r\n _this.isConfirmedLearningPaths.push(learningPathId);\r\n })\r\n .finally(function () {\r\n _this.isDisableConfirmProgressButton = false;\r\n });\r\n };\r\n LearningPathsController.prototype.updateGrid = function () {\r\n var _this = this;\r\n this.learningPathsUrl = this.purchasedOrderId != null\r\n ? \"/api/learningPaths/search/purchased?purchasedOrder=\" + this.purchasedOrderId\r\n : \"/api/learningPaths/search\";\r\n this.learningPathsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.http, this.url.service(this.learningPathsUrl)));\r\n this.getStorageFilters(true);\r\n this.learningPathsGridModel.pageSize = 4;\r\n this.learningPathsGridModel.addLoadingListener(this);\r\n this.setCourseStatusFilter(true);\r\n this.oldSearchViewType = this.viewType;\r\n this.window = angular.element(this.$window);\r\n if (this.window.innerWidth < 992) {\r\n this.startWindowWidth = 0;\r\n }\r\n else {\r\n this.startWindowWidth = 10000;\r\n }\r\n this.window.bind('resize', function () {\r\n if (window.innerWidth < 992 && window.innerWidth < _this.startWindowWidth && !_this.viewType) {\r\n _this.oldSearchViewType = _this.viewType;\r\n _this.startWindowWidth = 0;\r\n _this.viewType = 1;\r\n }\r\n if (window.innerWidth >= 992 && window.innerWidth > _this.startWindowWidth && !_this.oldSearchViewType) {\r\n _this.viewType = _this.oldSearchViewType;\r\n _this.startWindowWidth = 10000;\r\n }\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n this.viewType = 1;\r\n this.loadSearch();\r\n };\r\n LearningPathsController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n LearningPathsController.NAME = \"learningPaths.LearningPathsController\";\r\n LearningPathsController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n UrlService_1.UrlService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CommonHomeService_1.CommonHomeService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n LearningPathProgressService_1.LearningPathProgressService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return LearningPathsController;\r\n})();\r\nexports.LearningPathsController = LearningPathsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../branding/CustomBrandingService\":35,\"../common/CommonFilterService\":49,\"../common/CommonHomeService\":50,\"../courses/models/CourseProgressStatus\":222,\"../security/PermissionsService\":418,\"../urls/CoursesRouter\":468,\"../urls/LearningPathsRouter\":477,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./LearningPathProgressService\":318,\"./models/LearningPathCourseInclusionType\":324}],322:[function(require,module,exports){\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar AuthCoreModule_1 = require(\"../authcore/AuthCoreModule\");\r\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar LearningPathsController_1 = require(\"./LearningPathsController\");\r\nvar LearningPathCreateEditController_1 = require(\"./LearningPathCreateEditController\");\r\nvar LearningPathDetailsController_1 = require(\"./LearningPathDetailsController\");\r\nvar LearningPathService_1 = require(\"./LearningPathService\");\r\nvar CoursesModule_1 = require(\"../courses/CoursesModule\");\r\nvar LearningPathProgressService_1 = require(\"./LearningPathProgressService\");\r\nvar LearningPathParticipationFormEditController_1 = require(\"./LearningPathParticipationFormEditController\");\r\nvar LearningPathParticipationFormFillController_1 = require(\"./LearningPathParticipationFormFillController\");\r\nvar LearningPathPermissionsDelegationController_1 = require(\"./LearningPathPermissionsDelegationController\");\r\nvar LearningPathProgressController_1 = require(\"./LearningPathProgressController\");\r\nvar LearningPathRelatedProductsEditController_1 = require(\"./LearningPathRelatedProductsEditController\");\r\nvar LearningPathPermissionsEditController_1 = require(\"./LearningPathPermissionsEditController\");\r\nvar GamificationModule_1 = require(\"../gamification/GamificationModule\");\r\nvar LearningPathGamificationDetailsController_1 = require(\"./LearningPathGamificationDetailsController\");\r\nexports.LearningPathsModule = angular\r\n .module(\"learningPaths\", [\r\n SecurityModule_1.SecurityModule.name,\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n CoursesModule_1.CoursesModule.name,\r\n GamificationModule_1.GamificationModule.name\r\n])\r\n .service(LearningPathService_1.LearningPathService.NAME, LearningPathService_1.LearningPathService)\r\n .service(LearningPathProgressService_1.LearningPathProgressService.NAME, LearningPathProgressService_1.LearningPathProgressService)\r\n .controller(LearningPathsController_1.LearningPathsController.NAME, LearningPathsController_1.LearningPathsController)\r\n .controller(LearningPathCreateEditController_1.LearningPathCreateEditController.NAME, LearningPathCreateEditController_1.LearningPathCreateEditController)\r\n .controller(LearningPathDetailsController_1.LearningPathDetailsController.NAME, LearningPathDetailsController_1.LearningPathDetailsController)\r\n .controller(LearningPathProgressController_1.LearningPathProgressController.NAME, LearningPathProgressController_1.LearningPathProgressController)\r\n .controller(LearningPathParticipationFormEditController_1.LearningPathParticipationFormEditController.NAME, LearningPathParticipationFormEditController_1.LearningPathParticipationFormEditController)\r\n .controller(LearningPathParticipationFormFillController_1.LearningPathParticipationFormFillController.NAME, LearningPathParticipationFormFillController_1.LearningPathParticipationFormFillController)\r\n .controller(LearningPathPermissionsDelegationController_1.LearningPathPermissionsDelegationController.NAME, LearningPathPermissionsDelegationController_1.LearningPathPermissionsDelegationController)\r\n .controller(LearningPathRelatedProductsEditController_1.LearningPathRelatedProductsEditController.NAME, LearningPathRelatedProductsEditController_1.LearningPathRelatedProductsEditController)\r\n .controller(LearningPathPermissionsEditController_1.LearningPathPermissionsEditController.NAME, LearningPathPermissionsEditController_1.LearningPathPermissionsEditController)\r\n .controller(LearningPathGamificationDetailsController_1.LearningPathGamificationDetailsController.NAME, LearningPathGamificationDetailsController_1.LearningPathGamificationDetailsController);\r\n},{\"../authcore/AuthCoreModule\":24,\"../courses/CoursesModule\":216,\"../gamification/GamificationModule\":249,\"../security/SecurityModule\":419,\"../urls/UrlsModule\":492,\"./LearningPathCreateEditController\":310,\"./LearningPathDetailsController\":311,\"./LearningPathGamificationDetailsController\":312,\"./LearningPathParticipationFormEditController\":313,\"./LearningPathParticipationFormFillController\":314,\"./LearningPathPermissionsDelegationController\":315,\"./LearningPathPermissionsEditController\":316,\"./LearningPathProgressController\":317,\"./LearningPathProgressService\":318,\"./LearningPathRelatedProductsEditController\":319,\"./LearningPathService\":320,\"./LearningPathsController\":321}],323:[function(require,module,exports){\n(function (CourseCompletionOrder) {\r\n CourseCompletionOrder[CourseCompletionOrder[\"SEQUENTIAL\"] = 0] = \"SEQUENTIAL\";\r\n CourseCompletionOrder[CourseCompletionOrder[\"FREE\"] = 1] = \"FREE\";\r\n})(exports.CourseCompletionOrder || (exports.CourseCompletionOrder = {}));\r\nvar CourseCompletionOrder = exports.CourseCompletionOrder;\r\n},{}],324:[function(require,module,exports){\n(function (LearningPathCourseInclusionType) {\r\n LearningPathCourseInclusionType[LearningPathCourseInclusionType[\"MANDATORY\"] = 0] = \"MANDATORY\";\r\n LearningPathCourseInclusionType[LearningPathCourseInclusionType[\"ELECTIVE\"] = 1] = \"ELECTIVE\";\r\n})(exports.LearningPathCourseInclusionType || (exports.LearningPathCourseInclusionType = {}));\r\nvar LearningPathCourseInclusionType = exports.LearningPathCourseInclusionType;\r\n},{}],325:[function(require,module,exports){\n(function (SecurityLogStatusEnum) {\r\n SecurityLogStatusEnum[SecurityLogStatusEnum[\"SUCCESS\"] = 0] = \"SUCCESS\";\r\n SecurityLogStatusEnum[SecurityLogStatusEnum[\"FAILED\"] = 1] = \"FAILED\";\r\n SecurityLogStatusEnum[SecurityLogStatusEnum[\"FAILED_INVALID_CREDENTIALS\"] = 2] = \"FAILED_INVALID_CREDENTIALS\";\r\n SecurityLogStatusEnum[SecurityLogStatusEnum[\"FAILED_UNKNOWN_CREDENTIALS\"] = 3] = \"FAILED_UNKNOWN_CREDENTIALS\";\r\n SecurityLogStatusEnum[SecurityLogStatusEnum[\"FAILED_ACCESS_DENIED\"] = 4] = \"FAILED_ACCESS_DENIED\";\r\n})(exports.SecurityLogStatusEnum || (exports.SecurityLogStatusEnum = {}));\r\nvar SecurityLogStatusEnum = exports.SecurityLogStatusEnum;\r\nexports.SECURITY_LOG_STATUS_ENUM_VALUES = [\r\n SecurityLogStatusEnum.SUCCESS,\r\n SecurityLogStatusEnum.FAILED,\r\n SecurityLogStatusEnum.FAILED_INVALID_CREDENTIALS,\r\n SecurityLogStatusEnum.FAILED_UNKNOWN_CREDENTIALS,\r\n SecurityLogStatusEnum.FAILED_ACCESS_DENIED\r\n];\r\n(function (SecurityLogActionEnum) {\r\n SecurityLogActionEnum[SecurityLogActionEnum[\"AUTHENTICATION\"] = 0] = \"AUTHENTICATION\";\r\n SecurityLogActionEnum[SecurityLogActionEnum[\"LOGOUT\"] = 1] = \"LOGOUT\";\r\n SecurityLogActionEnum[SecurityLogActionEnum[\"AUTHORIZATION\"] = 2] = \"AUTHORIZATION\";\r\n})(exports.SecurityLogActionEnum || (exports.SecurityLogActionEnum = {}));\r\nvar SecurityLogActionEnum = exports.SecurityLogActionEnum;\r\nexports.SECURITY_LOG_ACTION_ENUM_VALUES = [\r\n SecurityLogActionEnum.AUTHENTICATION,\r\n SecurityLogActionEnum.LOGOUT,\r\n SecurityLogActionEnum.AUTHORIZATION\r\n];\r\n},{}],326:[function(require,module,exports){\n(function (SystemLogSourceEnum) {\r\n SystemLogSourceEnum[SystemLogSourceEnum[\"SERVER\"] = 0] = \"SERVER\";\r\n SystemLogSourceEnum[SystemLogSourceEnum[\"CLIENT\"] = 1] = \"CLIENT\";\r\n SystemLogSourceEnum[SystemLogSourceEnum[\"USER_REPORT\"] = 2] = \"USER_REPORT\";\r\n})(exports.SystemLogSourceEnum || (exports.SystemLogSourceEnum = {}));\r\nvar SystemLogSourceEnum = exports.SystemLogSourceEnum;\r\nexports.SYSTEM_LOG_SOURCE_ENUM_VALUES = [\r\n SystemLogSourceEnum.SERVER,\r\n SystemLogSourceEnum.CLIENT,\r\n SystemLogSourceEnum.USER_REPORT\r\n];\r\n(function (SystemLogLevelEnum) {\r\n SystemLogLevelEnum[SystemLogLevelEnum[\"ERROR\"] = 0] = \"ERROR\";\r\n SystemLogLevelEnum[SystemLogLevelEnum[\"WARN\"] = 1] = \"WARN\";\r\n SystemLogLevelEnum[SystemLogLevelEnum[\"INFO\"] = 2] = \"INFO\";\r\n SystemLogLevelEnum[SystemLogLevelEnum[\"DEBUG\"] = 3] = \"DEBUG\";\r\n})(exports.SystemLogLevelEnum || (exports.SystemLogLevelEnum = {}));\r\nvar SystemLogLevelEnum = exports.SystemLogLevelEnum;\r\nexports.SYSTEM_LOG_LEVEL_ENUM_VALUES = [\r\n SystemLogLevelEnum.ERROR,\r\n SystemLogLevelEnum.WARN,\r\n SystemLogLevelEnum.INFO,\r\n SystemLogLevelEnum.DEBUG\r\n];\r\n},{}],327:[function(require,module,exports){\nvar SecurityLogController_1 = require(\"./SecurityLogController\");\r\nvar SystemLogController_1 = require(\"./SystemLogController\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nexports.LogsModule = angular\r\n .module(\"logs\", [\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .controller(SecurityLogController_1.SecurityLogController.NAME, SecurityLogController_1.SecurityLogController)\r\n .controller(SystemLogController_1.SystemLogController.NAME, SystemLogController_1.SystemLogController);\r\n},{\"./../urls/UrlsModule\":492,\"./SecurityLogController\":328,\"./SystemLogController\":329}],328:[function(require,module,exports){\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar Moment_1 = require(\"./../utils/Moment\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar ISecurityLog_1 = require(\"./ISecurityLog\");\r\nvar UsersRouter_1 = require(\"./../urls/UsersRouter\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar IUser_1 = require(\"../users/models/IUser\");\r\nvar SecurityLogController = (function () {\r\n function SecurityLogController($http, $sce, permissionsApi, url, usersRouter) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.permissionsApi = permissionsApi;\r\n this.url = url;\r\n this.usersRouter = usersRouter;\r\n this.securityActionTypes = [];\r\n this.securityLogStatuses = [];\r\n this.actionsFilter = [];\r\n this.statusesFilter = [];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_SECURITY_LOGS_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Security Logs\").update();\r\n var date = new Date();\r\n this.forDateFilter = moment(date).format(Moment_1.Moment.DEFAULT_FORMAT);\r\n this.securityLogsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/logs/security\")));\r\n this.securityLogsGridModel.addLoadingListener(this);\r\n this.permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n this.fillSecurityActionTypes();\r\n this.fillSecurityLogStatuses();\r\n }\r\n SecurityLogController.prototype.startLoading = function () {\r\n var i;\r\n var dateValue = null;\r\n if (this.forDateFilter) {\r\n dateValue = Moment_1.Moment.textToJavaDate(this.forDateFilter);\r\n }\r\n this.securityLogsGridModel.filter[\"forDate\"] = dateValue;\r\n var statuses = [];\r\n for (i = 0; i < this.statusesFilter.length; i++) {\r\n statuses.push(ISecurityLog_1.SecurityLogStatusEnum[this.statusesFilter[i]]);\r\n }\r\n this.securityLogsGridModel.filter[\"statuses\"] = statuses;\r\n var actionTypes = [];\r\n for (i = 0; i < this.actionsFilter.length; i++) {\r\n actionTypes.push(ISecurityLog_1.SecurityLogActionEnum[this.actionsFilter[i]]);\r\n }\r\n this.securityLogsGridModel.filter[\"actions\"] = actionTypes;\r\n };\r\n SecurityLogController.prototype.endLoading = function () {\r\n };\r\n SecurityLogController.prototype.fillSecurityActionTypes = function () {\r\n for (var i = 0; i < ISecurityLog_1.SECURITY_LOG_ACTION_ENUM_VALUES.length; i++) {\r\n this.securityActionTypes.push({\r\n id: i,\r\n name: ISecurityLog_1.SecurityLogActionEnum[ISecurityLog_1.SECURITY_LOG_ACTION_ENUM_VALUES[i]]\r\n });\r\n }\r\n };\r\n SecurityLogController.prototype.fillSecurityLogStatuses = function () {\r\n for (var i = 0; i < ISecurityLog_1.SECURITY_LOG_STATUS_ENUM_VALUES.length; i++) {\r\n this.securityLogStatuses.push({\r\n id: i,\r\n name: ISecurityLog_1.SecurityLogStatusEnum[ISecurityLog_1.SECURITY_LOG_STATUS_ENUM_VALUES[i]]\r\n });\r\n }\r\n };\r\n SecurityLogController.prototype.formatMessage = function (input) {\r\n return this.$sce.trustAsHtml(input.replace(/\\\\t/g, \"\\t\").replace(/\\\\r\\\\n/g, \"\\n\"));\r\n };\r\n SecurityLogController.prototype.isGuestUser = function (userId) {\r\n return userId == IUser_1.PredefinedUsersEnum.GUEST;\r\n };\r\n SecurityLogController.prototype.isSystemUser = function (userId) {\r\n return userId == IUser_1.PredefinedUsersEnum.SYSTEM;\r\n };\r\n SecurityLogController.NAME = \"logs.SecurityLogController\";\r\n SecurityLogController.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n UsersRouter_1.UsersRouter.NAME\r\n ];\r\n return SecurityLogController;\r\n})();\r\nexports.SecurityLogController = SecurityLogController;\r\n},{\"../users/models/IUser\":506,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../security/PermissionsService\":418,\"./../urls/UsersRouter\":493,\"./../utils/MenuHelper\":517,\"./../utils/Moment\":518,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./ISecurityLog\":325}],329:[function(require,module,exports){\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar Moment_1 = require(\"./../utils/Moment\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar ISystemLog_1 = require(\"./ISystemLog\");\r\nvar UsersRouter_1 = require(\"./../urls/UsersRouter\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar IUser_1 = require(\"../users/models/IUser\");\r\nvar SystemLogController = (function () {\r\n function SystemLogController($http, $sce, permissionsApi, url, usersRouter) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.permissionsApi = permissionsApi;\r\n this.url = url;\r\n this.usersRouter = usersRouter;\r\n this.systemLogLevels = [];\r\n this.systemLogSources = [];\r\n this.levelsFilter = [];\r\n this.sourcesFilter = [];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_LOGS_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"System Logs\").update();\r\n this.url = url;\r\n this.permissionsApi = permissionsApi;\r\n this.usersRouter = usersRouter;\r\n var date = new Date();\r\n this.forDateFilter = moment(date).format(Moment_1.Moment.DEFAULT_FORMAT);\r\n this.systemLogsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/logs/system\")));\r\n this.systemLogsGridModel.addLoadingListener(this);\r\n this.permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n this.fillSystemActionTypes();\r\n this.fillSystemLogStatuses();\r\n }\r\n SystemLogController.prototype.getWidth = function () {\r\n return window.innerWidth;\r\n };\r\n SystemLogController.prototype.startLoading = function () {\r\n var i;\r\n var dateValue = null;\r\n if (this.forDateFilter) {\r\n dateValue = Moment_1.Moment.textToJavaDate(this.forDateFilter);\r\n }\r\n this.systemLogsGridModel.filter[\"forDate\"] = dateValue;\r\n var sources = [];\r\n for (i = 0; i < this.sourcesFilter.length; i++) {\r\n sources.push(ISystemLog_1.SystemLogSourceEnum[this.sourcesFilter[i]]);\r\n }\r\n this.systemLogsGridModel.filter[\"sources\"] = sources;\r\n var levels = [];\r\n for (i = 0; i < this.levelsFilter.length; i++) {\r\n levels.push(ISystemLog_1.SystemLogLevelEnum[this.levelsFilter[i]]);\r\n }\r\n this.systemLogsGridModel.filter[\"levels\"] = levels;\r\n };\r\n SystemLogController.prototype.endLoading = function () {\r\n };\r\n SystemLogController.prototype.fillSystemActionTypes = function () {\r\n for (var i = 0; i < ISystemLog_1.SYSTEM_LOG_LEVEL_ENUM_VALUES.length; i++) {\r\n this.systemLogLevels.push({\r\n id: i,\r\n name: ISystemLog_1.SystemLogLevelEnum[ISystemLog_1.SYSTEM_LOG_LEVEL_ENUM_VALUES[i]]\r\n });\r\n }\r\n };\r\n SystemLogController.prototype.fillSystemLogStatuses = function () {\r\n for (var i = 0; i < ISystemLog_1.SYSTEM_LOG_SOURCE_ENUM_VALUES.length; i++) {\r\n this.systemLogSources.push({\r\n id: i,\r\n name: ISystemLog_1.SystemLogSourceEnum[ISystemLog_1.SYSTEM_LOG_SOURCE_ENUM_VALUES[i]]\r\n });\r\n }\r\n };\r\n SystemLogController.prototype.formatMessage = function (input) {\r\n return this.$sce.trustAsHtml(input.replace(/\\\\t/g, \"\\t\").replace(/\\\\r\\\\n/g, \"\\n\"));\r\n };\r\n SystemLogController.prototype.isGuestUser = function (userId) {\r\n return userId == IUser_1.PredefinedUsersEnum.GUEST;\r\n };\r\n SystemLogController.prototype.isSystemUser = function (userId) {\r\n return userId == IUser_1.PredefinedUsersEnum.SYSTEM;\r\n };\r\n SystemLogController.NAME = \"logs.SystemLogController\";\r\n SystemLogController.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n UsersRouter_1.UsersRouter.NAME\r\n ];\r\n return SystemLogController;\r\n})();\r\nexports.SystemLogController = SystemLogController;\r\n},{\"../users/models/IUser\":506,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../security/PermissionsService\":418,\"./../urls/UsersRouter\":493,\"./../utils/MenuHelper\":517,\"./../utils/Moment\":518,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./ISystemLog\":326}],330:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar NewsRouter_1 = require(\"../urls/NewsRouter\");\r\nvar ReferenceService_1 = require(\"../reference/ReferenceService\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar LogOnController_1 = require(\"../auth/LogOnController\");\r\nvar HomepageHelper_1 = require(\"../utils/HomepageHelper\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar MainController = (function () {\r\n function MainController($scope, $route, $window, $location, $timeout, authManager, materialsRouter, coursesRouter, newsRouter, referenceApi, authRouter, settingsApi, authApi) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$route = $route;\r\n this.$window = $window;\r\n this.$location = $location;\r\n this.$timeout = $timeout;\r\n this.authManager = authManager;\r\n this.materialsRouter = materialsRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.newsRouter = newsRouter;\r\n this.referenceApi = referenceApi;\r\n this.authRouter = authRouter;\r\n this.settingsApi = settingsApi;\r\n this.authApi = authApi;\r\n this.isMainPage = true;\r\n this.allowMainPage = AppProperties_1.AppProperties.allowMainPage == 'true';\r\n this.isMenuHidden = true;\r\n this.toggleTopMenuVisibility();\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.isMainPage = false;\r\n _this.toggleTopMenuVisibility();\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.MAIN_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"\").update();\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n this.settingsApi.getHomepage().then(function (homepage) {\r\n _this.$location.url(HomepageHelper_1.HomepageHelper.getHomepageUrl(homepage));\r\n });\r\n }\r\n else if (!this.allowMainPage) {\r\n this.$location.url(this.authRouter.logonUrl());\r\n }\r\n this.loadAvailableLocales();\r\n this.referenceApi.getActiveReferenceEntitiesForSelectorWithoutParams(MainController.REFERENCE_NAME, null).then(function (result) {\r\n _this.subjectReferenceEntities = result;\r\n });\r\n }\r\n Object.defineProperty(MainController, \"$inject\", {\r\n get: function () {\r\n return this._$inject;\r\n },\r\n set: function (value) {\r\n this._$inject = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n MainController.prototype.toggleTopMenuVisibility = function () {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (this.isMainPage) {\r\n elem.addClass(\"menu-hidden\");\r\n }\r\n else {\r\n elem.removeClass(\"menu-hidden\");\r\n }\r\n };\r\n MainController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n MainController.prototype.loadAvailableLocales = function () {\r\n var _this = this;\r\n this.settingsApi.getAvailableLocales().then(function (locales) {\r\n _this.availableLocales = locales;\r\n _this.defaultLocale = _this.getCurrentStorageLocale();\r\n });\r\n };\r\n MainController.prototype.getCurrentStorageLocale = function () {\r\n var LOCALE_STORAGE_KEY = \"vhs.application.current.locale\";\r\n if (this.availableLocales && this.availableLocales.length > 0) {\r\n return this.availableLocales.filter(function (l) { return l.locale == localStorage.getItem(LOCALE_STORAGE_KEY); })[0];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n MainController.prototype.searchBySubject = function (subjectName) {\r\n this.$location.url(this.materialsRouter.indexUrl())\r\n .search(MainController.SEARCH_STRING_PARAMETER, subjectName);\r\n };\r\n MainController.prototype.toggleMenuVisibility = function () {\r\n this.isMenuHidden = !this.isMenuHidden;\r\n };\r\n MainController.prototype.redirectToLoginPage = function () {\r\n this.$location.url(this.authRouter.logonUrl());\r\n };\r\n MainController.prototype.reloadApplicationForLocaleIfNeeded = function (locale, $event) {\r\n $event.preventDefault();\r\n this.$timeout(function () { return LogOnController_1.LogOnController.reloadApplicationForLocaleIfNeeded(locale, false); }, 0);\r\n this.defaultLocale = this.getCurrentStorageLocale();\r\n };\r\n MainController.NAME = \"main.MainController\";\r\n MainController.REFERENCE_NAME = \"subjects\";\r\n MainController.SEARCH_STRING_PARAMETER = \"searchString\";\r\n MainController._$inject = [\r\n \"$scope\",\r\n \"$route\",\r\n \"$window\",\r\n \"$location\",\r\n \"$timeout\",\r\n AuthManager_1.AuthManager.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n NewsRouter_1.NewsRouter.NAME,\r\n ReferenceService_1.ReferenceService.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n AuthService_1.AuthService.NAME\r\n ];\r\n return MainController;\r\n})();\r\nexports.MainController = MainController;\r\n},{\"../auth/AuthService\":18,\"../auth/LogOnController\":21,\"../authcore/AuthManager\":25,\"../reference/ReferenceService\":409,\"../settings/SettingsService\":427,\"../urls/AuthRouter\":463,\"../urls/CoursesRouter\":468,\"../urls/MaterialsRouter\":480,\"../urls/NewsRouter\":481,\"../utils/AppProperties\":\"AppProperties\",\"../utils/HomepageHelper\":512,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],331:[function(require,module,exports){\nvar MainService_1 = require(\"./MainService\");\r\nvar MainController_1 = require(\"./MainController\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nexports.MainModule = angular\r\n .module(\"main\", [\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .service(MainService_1.MainService.NAME, MainService_1.MainService)\r\n .controller(MainController_1.MainController.NAME, MainController_1.MainController);\r\n},{\"./../urls/UrlsModule\":492,\"./MainController\":330,\"./MainService\":332}],332:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar MainService = (function () {\r\n function MainService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n MainService.NAME = \"main.MainService\";\r\n MainService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return MainService;\r\n})();\r\nexports.MainService = MainService;\r\n},{\"./../utils/UrlService\":528}],333:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar ActionLogService_1 = require(\"../statistics/ActionLogService\");\r\nvar ActionType_1 = require(\"../statistics/models/ActionType\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar UploadUtils_1 = require(\"../utils/UploadUtils\");\r\nvar UploadsService_1 = require(\"../storage/UploadsService\");\r\nvar ContentUtils_1 = require(\"../utils/ContentUtils\");\r\nvar MaterialType_1 = require(\"./models/MaterialType\");\r\nvar MaterialService_1 = require(\"./MaterialService\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar ObjectTypeUtils_1 = require(\"../utils/ObjectTypeUtils\");\r\nvar PredefinedLanguagesUtils_1 = require(\"../utils/PredefinedLanguagesUtils\");\r\nvar ReferenceService_1 = require(\"../reference/ReferenceService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar IntroService_1 = require(\"../info/IntroService\");\r\nvar EditMaterialController = (function () {\r\n function EditMaterialController($q, $scope, $location, url, materialService, securityService, permissionsService, $routeParams, materialsRouter, actionLogService, userService, authService, uploadUtils, $http, $timeout, $uploader, referenceService, brandingService, introService) {\r\n var _this = this;\r\n this.$q = $q;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.url = url;\r\n this.materialService = materialService;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.$routeParams = $routeParams;\r\n this.materialsRouter = materialsRouter;\r\n this.actionLogService = actionLogService;\r\n this.userService = userService;\r\n this.authService = authService;\r\n this.uploadUtils = uploadUtils;\r\n this.$http = $http;\r\n this.$timeout = $timeout;\r\n this.$uploader = $uploader;\r\n this.referenceService = referenceService;\r\n this.brandingService = brandingService;\r\n this.introService = introService;\r\n this.fileList = [];\r\n this.filteredFileList = [];\r\n this.selectedFiles = false;\r\n this.isErrorFileFormat = false;\r\n this.materialList = [];\r\n this.hasPreviewUrlCanceled = false;\r\n this.hasSubtitlesUrlCanceled = false;\r\n this.currentUser = {};\r\n this.businessUnitSelected = false;\r\n this.businessUnitVisible = false;\r\n this.hasAllBusinessUnits = false;\r\n this.dragoverEventHandler = function (e) {\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = 'none';\r\n var elem = document.elementFromPoint(e.clientX, e.clientY);\r\n var dropFromEdit = document.getElementById(\"dropFromEdit\");\r\n var dropFromEditPreview = document.getElementById(\"dropFromEditPreview\");\r\n var previewField = document.getElementById(\"previewField\");\r\n var dropFromEditNote = document.getElementsByName(\"dropFromEditNote\");\r\n for (var i = 0; i < dropFromEditNote.length; i++) {\r\n if (dropFromEditNote[i] == elem) {\r\n e.dataTransfer.dropEffect = 'copy';\r\n }\r\n }\r\n if (dropFromEdit == elem || previewField == elem || dropFromEditPreview === elem) {\r\n e.dataTransfer.dropEffect = 'copy';\r\n }\r\n };\r\n this.materialSubjectChangeCallback = function (name) {\r\n _this.material.subjectName = name;\r\n };\r\n this.materialLanguageChangeCallback = function (name) {\r\n _this.material.languageName = name;\r\n };\r\n this.materialOwnerChangeCallback = function (selected, name) {\r\n _this.material.ownerName = selected ? name : null;\r\n };\r\n this.materialId = $routeParams[MaterialsRouter_1.MaterialsRouter.MATERIAL_ID_PARAM];\r\n var materialIdStr = String(this.materialId);\r\n var hasMaterialId = this.materialId != null;\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissionsIf(!hasMaterialId, function (systemPermissions) { return systemPermissions.addMaterial; })\r\n .demandMaterialPermissionsIf(hasMaterialId, materialIdStr, function (materialPermissions) { return materialPermissions.edit; });\r\n this.isValidityInPerpetuity = true;\r\n this.attachFormat = \"\";\r\n this.material = {};\r\n this.isMultipleUpload = false;\r\n this.disabledSaveButton = true;\r\n this.disabledUploadButton = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_MATERIALS_MENU_KEY);\r\n if (hasMaterialId) {\r\n this.isEditMode = true;\r\n this.showUploadButton = false;\r\n this.loadMaterial().then(function (result) {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit Material \" + \"‘\"\r\n + _this.material.title + \"’\").update();\r\n });\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n });\r\n this.enableButtonForLinkUpload();\r\n this.disabledSaveButton = false;\r\n }\r\n else {\r\n this.isEditMode = false;\r\n this.showUploadButton = true;\r\n PageHeaderHelper_1.PageHeader.set().header(\"New Material\").update();\r\n this.typeId = 1;\r\n this.uploadContentType = 1;\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.material.ownerId = user.id;\r\n _this.material.ownerName = user.fullName;\r\n _this.currentUser = { id: user.id, name: user.fullName };\r\n _this.currentUserLocale = user.locale;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n _this.material.languageId = PredefinedLanguagesUtils_1.PredefinedLanguagesUtils.determineRelatedLanguageId(user.locale);\r\n _this.loadLanguageName();\r\n });\r\n }\r\n document.body.addEventListener('dragover', this.dragoverEventHandler);\r\n $scope.$on(\"$destroy\", function () {\r\n document.body.removeEventListener('dragover', _this.dragoverEventHandler);\r\n });\r\n }\r\n EditMaterialController.prototype.loadLanguageName = function () {\r\n var _this = this;\r\n this.referenceService.getActiveReferenceEntities('languages', {})\r\n .then(function (result) {\r\n result.entities.forEach(function (entity) {\r\n if (entity['id'] && entity['id'] == _this.material.languageId) {\r\n _this.material.languageName = entity['name'];\r\n }\r\n });\r\n });\r\n };\r\n EditMaterialController.prototype.loadMaterial = function () {\r\n var _this = this;\r\n var promise = this.materialService.get(this.materialId);\r\n promise.then(function (result) {\r\n angular.copy(result, _this.material);\r\n _this.businessUnitSelected = true;\r\n _this.material.validityText = Moment_1.Moment.isValidDate(result.validity);\r\n if (_this.material.validityText) {\r\n _this.isValidityInPerpetuity = false;\r\n }\r\n _this.previewUrl = _this.material.previewUrl ? _this.material.previewUrl : null;\r\n _this.subtitlesUrl = _this.material.subtitlesUrl ? _this.material.subtitlesUrl : null;\r\n _this.subtitlesName = _this.material.subtitlesName ? _this.material.subtitlesName : null;\r\n _this.fileName = result.fileName;\r\n _this.typeId = result.typeId;\r\n if (result.link == null) {\r\n _this.uploadContentType = 1;\r\n }\r\n else {\r\n _this.uploadContentType = 2;\r\n }\r\n if (_this.material.typeId != 3) {\r\n _this.showUploadButton = !_this.material.fileId;\r\n }\r\n _this.multimediaSources = [{\r\n src: _this.material.downloadUrl || '',\r\n type: _this.material.contentType\r\n }];\r\n });\r\n return promise;\r\n };\r\n EditMaterialController.prototype.saveMaterial = function (material) {\r\n this.disabledSaveButton = true;\r\n this.disabledUploadButton = true;\r\n this.material.typeId = this.typeId;\r\n this.material.validity = Moment_1.Moment.textToJavaDate(material.validityText);\r\n var preview = this.croppedImage ? this.croppedImage : this.preview;\r\n if (this.isEditMode) {\r\n this.updateMaterial(material, this.file, preview, this.subtitles);\r\n }\r\n else {\r\n this.createMaterial(material, preview, this.subtitles);\r\n }\r\n };\r\n EditMaterialController.prototype.createMaterial = function (material, preview, subtitles) {\r\n var _this = this;\r\n if (this.material.typeId == MaterialType_1.MaterialType.LINK) {\r\n this.materialService.create(material, null, preview, null)\r\n .then(function (result) {\r\n _this.createMaterialSuccessCallback(result, null, preview, null);\r\n _this.redirectOrClearFields();\r\n })\r\n .catch(function (response) {\r\n _this.enableButton();\r\n _this.showErrorMessage(response);\r\n });\r\n }\r\n else {\r\n var saveMaterialDeferred = this.$q.defer();\r\n saveMaterialDeferred.resolve();\r\n var saveMaterialPromise = saveMaterialDeferred.promise;\r\n angular.forEach(this.materialList, function (material, index) {\r\n material.validity = Moment_1.Moment.textToJavaDate(_this.material.validityText);\r\n });\r\n angular.forEach(this.materialList, function (material, index) {\r\n saveMaterialPromise = saveMaterialPromise.then(function () {\r\n var file = _this.filteredFileList[index];\r\n if (ContentUtils_1.ContentUtils.checkFileExt(material.typeId, ContentUtils_1.ContentUtils.getFileExt(file.name))) {\r\n _this.updateMaterialFieldsBeforeUpload(material, file);\r\n return _this.materialService.create(material, file, preview, subtitles)\r\n .then(function (result) {\r\n _this.createMaterialSuccessCallback(result, file, preview, subtitles);\r\n })\r\n .catch(function (response) {\r\n _this.showErrorMessage(response);\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to upload this file: please check whether the file format is valid\");\r\n return _this.$q.when(null);\r\n }\r\n });\r\n if (index == _this.materialList.length - 1) {\r\n saveMaterialPromise.then(function () {\r\n _this.enableButton();\r\n _this.redirectOrClearFields();\r\n });\r\n }\r\n });\r\n }\r\n };\r\n EditMaterialController.prototype.createMaterialSuccessCallback = function (material, file, preview, subtitles) {\r\n this.material = angular.copy(material[UploadsService_1.UploadsService.MATERIAL_KEY]);\r\n if (preview) {\r\n this.upload(preview, this.material.id, \"preview\");\r\n }\r\n if (subtitles) {\r\n var subtitlesUploadUrl = material[UploadsService_1.UploadsService.SUBTITLES_UPLOAD_URL_KEY];\r\n var subtitlesUploadMethod = material[UploadsService_1.UploadsService.SUBTITLES_UPLOAD_METHOD_KEY];\r\n this.uploadUtils.uploadMaterialByChunks(subtitles, this.material.subtitlesId, this.material.id, subtitlesUploadUrl, subtitlesUploadMethod, this.material.title);\r\n }\r\n if (file) {\r\n var fileUploadUrl = material[UploadsService_1.UploadsService.FILE_UPLOAD_URL_KEY];\r\n var fileUploadMethod = material[UploadsService_1.UploadsService.FILE_UPLOAD_METHOD_KEY];\r\n this.uploadUtils.uploadMaterialByChunks(file, this.material.fileId, this.material.id, fileUploadUrl, fileUploadMethod, this.material.title);\r\n }\r\n this.logMaterialCreation(this.material.id);\r\n };\r\n EditMaterialController.prototype.updateMaterial = function (material, file, preview, subtitles) {\r\n var _this = this;\r\n if (this.material.typeId != MaterialType_1.MaterialType.AUDIO && this.material.typeId != MaterialType_1.MaterialType.VIDEO) {\r\n subtitles = undefined;\r\n this.hasSubtitlesUrlCanceled = true;\r\n }\r\n if (this.material.typeId == MaterialType_1.MaterialType.LINK) {\r\n file = undefined;\r\n }\r\n if (!file || this.material.typeId == MaterialType_1.MaterialType.LINK || (file && ContentUtils_1.ContentUtils.checkFileExt(material.typeId, ContentUtils_1.ContentUtils.getFileExt(file.name)))) {\r\n this.materialService.update(material, this.hasPreviewUrlCanceled, this.hasSubtitlesUrlCanceled, file, preview, subtitles)\r\n .then(function (result) {\r\n _this.updateMaterialSuccessCallback(result, file, preview, subtitles);\r\n })\r\n .catch(function (response) {\r\n _this.enableButton();\r\n _this.showErrorMessage(response);\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to upload this file: please check whether the file format is valid\");\r\n this.enableButton();\r\n }\r\n };\r\n EditMaterialController.prototype.updateMaterialSuccessCallback = function (material, file, preview, subtitles) {\r\n var _this = this;\r\n var uploadPromise;\r\n this.material = angular.copy(material[UploadsService_1.UploadsService.MATERIAL_KEY]);\r\n if (preview) {\r\n this.uploadUtils.cancelMaterialPreviews(material.id);\r\n uploadPromise = this.upload(preview, this.material.id, \"preview\");\r\n }\r\n if (subtitles) {\r\n this.uploadUtils.cancelMaterialSubtitles(material.id);\r\n var subtitlesUploadUrl = material[UploadsService_1.UploadsService.SUBTITLES_UPLOAD_URL_KEY];\r\n var subtitlesUploadMethod = material[UploadsService_1.UploadsService.SUBTITLES_UPLOAD_METHOD_KEY];\r\n this.uploadUtils.uploadMaterialByChunks(subtitles, this.material.subtitlesId, this.material.id, subtitlesUploadUrl, subtitlesUploadMethod, this.material.title);\r\n }\r\n if (file) {\r\n this.uploadUtils.cancelMaterialFiles(material.id);\r\n var fileUploadUrl = material[UploadsService_1.UploadsService.FILE_UPLOAD_URL_KEY];\r\n var fileUploadMethod = material[UploadsService_1.UploadsService.FILE_UPLOAD_METHOD_KEY];\r\n this.uploadUtils.uploadMaterialByChunks(file, this.material.fileId, this.material.id, fileUploadUrl, fileUploadMethod, this.material.title);\r\n }\r\n this.logMaterialCreation(this.material.id);\r\n if (uploadPromise) {\r\n uploadPromise.then(function () { return _this.redirectOrClearFields(); });\r\n }\r\n else {\r\n this.redirectOrClearFields();\r\n }\r\n };\r\n EditMaterialController.prototype.showErrorMessage = function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n if (response.data.error == \"error.preview.type\") {\r\n INotifier_1.notifier.error(\"Invalid file format. Please select a file with .jpg or .png extension\");\r\n }\r\n if (response.data.error == \"error.duplicate.product.id\") {\r\n INotifier_1.notifier.error(\"Product ID is not unique\");\r\n }\r\n if (response.data.error == \"error.file.empty\") {\r\n INotifier_1.notifier.error(\"The material cannot be saved with empty file.\");\r\n }\r\n };\r\n EditMaterialController.prototype.logMaterialCreation = function (materialId) {\r\n this.actionLogService.create(materialId, ReferencedObjectType_1.ReferencedObjectType.MATERIAL, ActionType_1.ActionType.MATERIAL_CREATION);\r\n INotifier_1.notifier.success(\"The material has been saved\");\r\n };\r\n EditMaterialController.prototype.redirectOrClearFields = function () {\r\n if (this.materialId) {\r\n if (this.material && this.material.permissions && this.material.permissions.view) {\r\n this.$location.url(this.materialsRouter.watchUrl(this.materialId));\r\n }\r\n else {\r\n this.$location.url(this.materialsRouter.indexUrl());\r\n }\r\n }\r\n else {\r\n this.cleanFields();\r\n }\r\n };\r\n EditMaterialController.prototype.enableButton = function () {\r\n this.disabledSaveButton = false;\r\n this.disabledUploadButton = false;\r\n };\r\n EditMaterialController.prototype.enableButtonForLinkUpload = function () {\r\n this.disabledSaveButton = false;\r\n };\r\n EditMaterialController.prototype.cleanFields = function () {\r\n this.isValidityInPerpetuity = true;\r\n this.materialList = [];\r\n this.selectedFiles = false;\r\n this.isErrorFileFormat = false;\r\n this.isMultipleUpload = false;\r\n for (var key in this.material) {\r\n if (this.material.hasOwnProperty(key) && key != \"businessUnitId\") {\r\n this.material[key] = undefined;\r\n }\r\n }\r\n this.material.languageId = PredefinedLanguagesUtils_1.PredefinedLanguagesUtils.determineRelatedLanguageId(this.currentUserLocale);\r\n this.loadLanguageName();\r\n this.uploadContentType = 1;\r\n this.setFileOrLinkType();\r\n this.material.ownerId = this.currentUser.id;\r\n this.material.ownerName = this.currentUser.name;\r\n this.file = undefined;\r\n this.fileList = [];\r\n this.preview = undefined;\r\n this.croppedImage = undefined;\r\n this.subtitles = undefined;\r\n this.disabledUploadButton = false;\r\n };\r\n EditMaterialController.prototype.cleanValidity = function () {\r\n this.material.validityText = \"\";\r\n };\r\n EditMaterialController.prototype.resetPreview = function () {\r\n if (this.preview) {\r\n this.preview = undefined;\r\n }\r\n if (this.previewUrl) {\r\n this.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n if (this.croppedImage) {\r\n this.croppedImage = undefined;\r\n }\r\n };\r\n EditMaterialController.prototype.resetSubtitles = function () {\r\n if (this.subtitles) {\r\n this.subtitles = undefined;\r\n }\r\n else if (this.subtitlesName) {\r\n this.subtitlesUrl = undefined;\r\n this.subtitlesName = undefined;\r\n this.hasSubtitlesUrlCanceled = true;\r\n }\r\n };\r\n EditMaterialController.prototype.restorePreviewUrl = function () {\r\n this.preview = undefined;\r\n this.croppedImage = undefined;\r\n this.previewUrl = this.material.previewUrl;\r\n this.hasPreviewUrlCanceled = false;\r\n };\r\n EditMaterialController.prototype.restoreSubtitlesUrl = function () {\r\n this.subtitles = undefined;\r\n this.subtitlesUrl = this.material.subtitlesUrl;\r\n this.subtitlesName = this.material.subtitlesName;\r\n this.hasSubtitlesUrlCanceled = false;\r\n };\r\n EditMaterialController.prototype.reupload = function () {\r\n if (this.showUploadButton) {\r\n this.fileName = this.material.fileName;\r\n this.disabledSaveButton = false;\r\n }\r\n else {\r\n this.fileName = \"\";\r\n this.disabledSaveButton = true;\r\n }\r\n this.showUploadButton = !this.showUploadButton;\r\n this.file = undefined;\r\n };\r\n EditMaterialController.prototype.onFileUploadEditMode = function () {\r\n var _this = this;\r\n if (this.fileList) {\r\n this.checkFilesForFormatError();\r\n this.file = this.filteredFileList[0];\r\n this.getDuration(this.file).then(function (duration) {\r\n _this.material.duration = duration;\r\n });\r\n this.typeId = this.material.typeId = ContentUtils_1.ContentUtils.findMaterialTypeByFileExtension(ContentUtils_1.ContentUtils.getFileExt(this.file.name));\r\n this.resetPreview();\r\n }\r\n };\r\n EditMaterialController.prototype.onFilesUploadCreationMode = function () {\r\n var _this = this;\r\n this.deactivateMainContent();\r\n if (this.fileList) {\r\n this.checkFilesForFormatError();\r\n this.fillMaterialListFromFileList();\r\n if (this.filteredFileList.length == 1) {\r\n this.isMultipleUpload = false;\r\n }\r\n if (this.filteredFileList.length > 1) {\r\n this.isMultipleUpload = true;\r\n this.resetSubtitles();\r\n }\r\n if (this.filteredFileList.length == 0) {\r\n this.activateMainContent();\r\n }\r\n this.uploadContentType = 1;\r\n this.showUploadButton = true;\r\n this.selectedFiles = true;\r\n this.filteredFileList.map(function (file, index) {\r\n _this.getDuration(file).then(function (duration) {\r\n _this.materialList[index].duration = duration;\r\n });\r\n });\r\n this.material.title = this.material.title || this.materialList[0].title;\r\n this.material.typeId = this.materialList[0].typeId;\r\n this.material.typeKey = this.materialList[0].typeKey;\r\n if (this.material.typeKey && (this.material.typeKey === \"VIDEO\" || this.material.typeKey === \"AUDIO\")) {\r\n this.material.isRewindAllowed = true;\r\n }\r\n }\r\n this.activateMainContent();\r\n };\r\n EditMaterialController.prototype.checkFilesForFormatError = function () {\r\n if (this.fileList.length > 0) {\r\n this.isErrorFileFormat = false;\r\n this.filteredFileList = this.fileList.filter(function (file) { return ContentUtils_1.ContentUtils.MAP_FILE_EXTENSIONS_TO_MATERIAL_TYPES[ContentUtils_1.ContentUtils.getFileExt(file.name.toLowerCase())]; });\r\n if (this.fileList.filter(function (file) { return !ContentUtils_1.ContentUtils.MAP_FILE_EXTENSIONS_TO_MATERIAL_TYPES[ContentUtils_1.ContentUtils.getFileExt(file.name.toLowerCase())]; }).length > 0) {\r\n this.isErrorFileFormat = true;\r\n }\r\n }\r\n else {\r\n this.isErrorFileFormat = true;\r\n }\r\n if (this.filteredFileList.length > 0) {\r\n this.enableButton();\r\n }\r\n else {\r\n this.disabledSaveButton = true;\r\n }\r\n };\r\n EditMaterialController.prototype.fillMaterialListFromFileList = function () {\r\n var _this = this;\r\n if (this.filteredFileList.length > 0) {\r\n this.materialList = [];\r\n var currentMaterial;\r\n this.filteredFileList.forEach(function (file) {\r\n currentMaterial = {};\r\n angular.copy(_this.material, currentMaterial);\r\n currentMaterial.title = currentMaterial.title || ContentUtils_1.ContentUtils.getFileWithoutExt(file.name);\r\n currentMaterial.typeId = ContentUtils_1.ContentUtils.findMaterialTypeByFileExtension(ContentUtils_1.ContentUtils.getFileExt(file.name.toLowerCase()));\r\n currentMaterial.validity = Moment_1.Moment.textToJavaDate(currentMaterial.validityText);\r\n currentMaterial.typeKey = MaterialType_1.MaterialTypeEnum[currentMaterial.typeId];\r\n currentMaterial.fileName = ContentUtils_1.ContentUtils.getFileWithoutExt(file.name) || currentMaterial.title;\r\n _this.materialList.push(currentMaterial);\r\n });\r\n }\r\n };\r\n EditMaterialController.prototype.updateMaterialFieldsBeforeUpload = function (uploadMaterial, file) {\r\n var material = angular.copy(uploadMaterial);\r\n angular.copy(this.material, uploadMaterial);\r\n uploadMaterial.title = material.title || ContentUtils_1.ContentUtils.getFileWithoutExt(file.name);\r\n uploadMaterial.typeId = material.typeId;\r\n uploadMaterial.validity = material.validity;\r\n uploadMaterial.typeKey = material.typeKey;\r\n uploadMaterial.duration = material.duration;\r\n };\r\n EditMaterialController.prototype.setFileOrLinkType = function () {\r\n this.selectedFiles = false;\r\n this.isErrorFileFormat = false;\r\n if (this.uploadContentType == 1) {\r\n this.typeId = MaterialType_1.MaterialType.AUDIO;\r\n this.showUploadButton = true;\r\n }\r\n else {\r\n this.typeId = MaterialType_1.MaterialType.LINK;\r\n this.fileList = [];\r\n this.materialList = [];\r\n }\r\n };\r\n EditMaterialController.prototype.showPreview = function () {\r\n var _this = this;\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#previewDialog\").modal({\r\n keyboard: false,\r\n show: true\r\n });\r\n $(\"#previewDialog\").on('hide.bs.modal', function () {\r\n $('video').trigger('pause');\r\n $('audio').trigger('pause');\r\n });\r\n this.hasFile = !!this.file;\r\n this.isMaterialFileStatusReady = this.materialId && this.material.fileStatus == 'READY';\r\n this.isAudioOrVideo = this.material.typeKey === 'VIDEO' || this.material.typeKey === 'AUDIO';\r\n this.isPhoto = this.material.typeKey === 'PHOTO';\r\n this.isYoutube = this.typeId === MaterialType_1.MaterialType.LINK && ObjectTypeUtils_1.ObjectTypeUtils.isYoutubeUrl(this.material.link);\r\n this.isVimeo = this.typeId === MaterialType_1.MaterialType.LINK && ObjectTypeUtils_1.ObjectTypeUtils.isVimeoUrl(this.material.link);\r\n if (this.isVimeo) {\r\n setTimeout(function () {\r\n var link = 'https://player.vimeo.com/video/' + ObjectTypeUtils_1.ObjectTypeUtils.extractVimeoUrl(_this.material.link);\r\n var elem = document.getElementById('iframe-vimeo');\r\n elem.setAttribute('src', link);\r\n }, 0);\r\n }\r\n this.youtubeMultimediaSources = [{\r\n src: this.material.link,\r\n type: \"video/youtube\"\r\n }];\r\n };\r\n EditMaterialController.prototype.stopVideoAndAudioOnHidePreview = function () {\r\n this.hasFile = false;\r\n this.isMaterialFileStatusReady = false;\r\n this.isAudioOrVideo = false;\r\n this.isPhoto = false;\r\n this.isYoutube = false;\r\n $(\"#previewDialog\").on('hidden.bs.modal', function () {\r\n $('video').trigger('pause');\r\n $('audio').trigger('pause');\r\n });\r\n };\r\n EditMaterialController.prototype.multimediaErrorCallback = function (code, message) {\r\n return this.loadMaterial();\r\n };\r\n EditMaterialController.prototype.getMaterialValidity = function () {\r\n this.material.validityText ? this.material.validity = Moment_1.Moment.textToJavaDate(this.material.validityText)\r\n : this.material.validity = null;\r\n return this.material.validity;\r\n };\r\n EditMaterialController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n if (!this.materialId) {\r\n this.businessUnitSelected = false;\r\n this.material.ownerId = this.currentUser.id;\r\n this.material.ownerName = this.currentUser.name;\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n }\r\n };\r\n EditMaterialController.prototype.setBusinessUnitSelectorVisible = function () {\r\n this.businessUnitVisible = true;\r\n };\r\n EditMaterialController.prototype.getOwnersUrl = function (businessUnitId) {\r\n var baseUrl = \"/api/userSelector/users\";\r\n return businessUnitId\r\n ? StringBuilder_1.StringBuilder.interpolate(baseUrl + \"?businessUnitId=:businessUnitId\")\r\n .with(\":businessUnitId\", businessUnitId)\r\n .build()\r\n : baseUrl;\r\n };\r\n EditMaterialController.prototype.upload = function (file, materialId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/materials/upload?materialId=:materialId&fileType=:fileType\")\r\n .param(\":materialId\", materialId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n EditMaterialController.prototype.showCropperModal = function () {\r\n this.activateMainContent();\r\n $(\"#imageCropperModal\").modal(\"show\");\r\n };\r\n EditMaterialController.prototype.showCropperModalAfterLoad = function () {\r\n var _this = this;\r\n if (this.preview != undefined || this.previewUrl != undefined) {\r\n this.deactivateMainContent();\r\n }\r\n setTimeout(function () {\r\n _this.preview != undefined || _this.previewUrl != undefined\r\n ? _this.showCropperModal()\r\n : _this.showCropperModalAfterLoad();\r\n }, 100);\r\n };\r\n EditMaterialController.prototype.getDuration = function (file) {\r\n try {\r\n var url = URL.createObjectURL(file);\r\n return this.$q(function (resolve) {\r\n var video = document.createElement(\"video\");\r\n video.muted = true;\r\n var source = document.createElement(\"source\");\r\n source.src = url;\r\n video.preload = \"metadata\";\r\n video.appendChild(source);\r\n video.onloadedmetadata = function () {\r\n resolve(video.duration);\r\n };\r\n });\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n };\r\n EditMaterialController.prototype.startIntro = function (introNumber) {\r\n this.introService.startEditMaterialPageIntro(introNumber);\r\n };\r\n EditMaterialController.prototype.deactivateMainContent = function () {\r\n var mainElement = document.querySelector(\"#material-upload-disable\");\r\n mainElement.classList.remove(\"hidden\");\r\n };\r\n EditMaterialController.prototype.activateMainContent = function () {\r\n var mainElement = document.querySelector(\"#material-upload-disable\");\r\n mainElement.classList.add(\"hidden\");\r\n };\r\n EditMaterialController.NAME = \"materials.EditMaterialController\";\r\n EditMaterialController.$inject = [\r\n \"$q\",\r\n \"$scope\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n MaterialService_1.MaterialService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n \"$routeParams\",\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n ActionLogService_1.ActionLogService.NAME,\r\n UserService_1.UserService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n \"$http\",\r\n \"$timeout\",\r\n \"Upload\",\r\n ReferenceService_1.ReferenceService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n IntroService_1.IntroService.NAME\r\n ];\r\n return EditMaterialController;\r\n})();\r\nexports.EditMaterialController = EditMaterialController;\r\n},{\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../auth/AuthService\":18,\"../branding/CustomBrandingService\":35,\"../info/IntroService\":292,\"../reference/ReferenceService\":409,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../statistics/ActionLogService\":441,\"../statistics/models/ActionType\":450,\"../storage/UploadsService\":458,\"../urls/MaterialsRouter\":480,\"../users/UserService\":499,\"../utils/ContentUtils\":509,\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"../utils/ObjectTypeUtils\":520,\"../utils/PageHeaderHelper\":521,\"../utils/PredefinedLanguagesUtils\":522,\"../utils/StringBuilder\":525,\"../utils/UploadUtils\":527,\"../utils/UrlService\":528,\"./MaterialService\":337,\"./models/MaterialType\":347}],334:[function(require,module,exports){\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar MaterialService_1 = require(\"./MaterialService\");\r\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"./../authcore/AuthRedirect\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar ObjectTypeUtils_1 = require(\"./../utils/ObjectTypeUtils\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar PersonalService_1 = require(\"./../personal/PersonalService\");\r\nvar SocialService_1 = require(\"./../social/SocialService\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar TreeElementsInfoFiller_1 = require(\"./../tree/TreeElementsInfoFiller\");\r\nvar ActionLogService_1 = require(\"./../statistics/ActionLogService\");\r\nvar ActionType_1 = require(\"./../statistics/models/ActionType\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar FinancesRouter_1 = require(\"./../urls/FinancesRouter\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar CourseService_1 = require(\"./../courses/CourseService\");\r\nvar PlaylistService_1 = require(\"./PlaylistService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar UploadUtils_1 = require(\"../utils/UploadUtils\");\r\nvar MaterialType_1 = require(\"./models/MaterialType\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar PurchaseService_1 = require(\"../finances/PurchaseService\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar MaterialController = (function () {\r\n function MaterialController($scope, $http, $location, $anchorScroll, $timeout, url, $routeParams, $q, materialsRouter, financeRouter, materialService, personalService, socialService, authRedirect, authManager, $window, actionLogService, permissionsApi, courseService, playlistService, uploadUtils, dialogService, brandingService, purchaseService, quizService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$anchorScroll = $anchorScroll;\r\n this.$timeout = $timeout;\r\n this.url = url;\r\n this.$routeParams = $routeParams;\r\n this.$q = $q;\r\n this.materialsRouter = materialsRouter;\r\n this.financeRouter = financeRouter;\r\n this.materialService = materialService;\r\n this.personalService = personalService;\r\n this.socialService = socialService;\r\n this.authRedirect = authRedirect;\r\n this.authManager = authManager;\r\n this.$window = $window;\r\n this.actionLogService = actionLogService;\r\n this.permissionsApi = permissionsApi;\r\n this.courseService = courseService;\r\n this.playlistService = playlistService;\r\n this.uploadUtils = uploadUtils;\r\n this.dialogService = dialogService;\r\n this.brandingService = brandingService;\r\n this.purchaseService = purchaseService;\r\n this.quizService = quizService;\r\n this.material = {};\r\n this.disabledRemoveButton = false;\r\n this.materialId = $routeParams[MaterialsRouter_1.MaterialsRouter.MATERIAL_ID_PARAM];\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.anchorComplete = false;\r\n this.relatedMaterialsViewLimit = 3;\r\n var loadPermissionsPromises = [];\r\n if (this.isAuthenticated) {\r\n var systemPermissionsPromise = this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n var materialPermissionsPromise = this.permissionsApi.getMaterialPermissions(String(this.materialId)).then(function (materialPermissions) {\r\n _this.materialPermissions = materialPermissions;\r\n });\r\n loadPermissionsPromises.push(systemPermissionsPromise);\r\n loadPermissionsPromises.push(materialPermissionsPromise);\r\n }\r\n if (!MenuHelper_1.MenuHelper.getCurrentMenuItemKey()) {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_MATERIALS_MENU_KEY);\r\n }\r\n this.$q.all(loadPermissionsPromises).then(function () {\r\n if (_this.systemPermissions.viewMaterialComment || _this.materialPermissions.addComment) {\r\n _this.commentsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, _this.url.base(\"/api/social/comments?objectId=:objectId&objectType=:objectType\")\r\n .param(\":objectId\", _this.materialId)\r\n .param(\":objectType\", ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL])\r\n .service()));\r\n _this.commentsGridModel.addLoadingListener(_this);\r\n _this.loadCommentsCount();\r\n }\r\n });\r\n this.loadMaterial(this.materialId);\r\n this.materialService.getRelatedMaterials(this.materialId).then(function (resultRelated) {\r\n _this.relatedMaterials = resultRelated;\r\n _this.relatedMaterials.length <= _this.relatedMaterialsViewLimit ?\r\n _this.relatedMaterialsCurrentLimit = _this.relatedMaterials.length :\r\n _this.relatedMaterialsCurrentLimit = _this.relatedMaterialsViewLimit;\r\n });\r\n }\r\n MaterialController.prototype.startLoading = function () {\r\n };\r\n MaterialController.prototype.endLoading = function () {\r\n var _this = this;\r\n TreeElementsInfoFiller_1.TreeElementsInfoFiller.fillHierarchyInfoWithMaxLevel(this.commentsGridModel.entries, Number.MAX_VALUE);\r\n this.$timeout(function () {\r\n _this.scrollAnchor();\r\n }, 0);\r\n };\r\n MaterialController.prototype.scrollAnchor = function () {\r\n if (!this.anchorComplete) {\r\n this.$anchorScroll(this.$location.hash());\r\n this.anchorComplete = true;\r\n }\r\n };\r\n MaterialController.prototype.getFileTypeName = function (format) {\r\n switch (format) {\r\n case 'video':\r\n return \"video\";\r\n case 'audio':\r\n return \"audio\";\r\n case 'presentation':\r\n return \"presentation\";\r\n case 'text':\r\n return \"text file\";\r\n default:\r\n return \"video\";\r\n }\r\n };\r\n MaterialController.prototype.isYoutubeLink = function (material) {\r\n return material.typeId == 3 && ObjectTypeUtils_1.ObjectTypeUtils.isYoutubeUrl(material.link);\r\n };\r\n MaterialController.prototype.isVimeoLink = function (material) {\r\n return material.typeId == 3 && ObjectTypeUtils_1.ObjectTypeUtils.isVimeoUrl(material.link);\r\n };\r\n MaterialController.prototype.isAwsLink = function (material) {\r\n return material.typeId == 3 && ObjectTypeUtils_1.ObjectTypeUtils.isAwsUrl(material.link);\r\n };\r\n MaterialController.prototype.loadMaterial = function (materialId) {\r\n var _this = this;\r\n this.newComment = { text: \"\" };\r\n this.newReplyComment = { text: \"\" };\r\n var promise = this.materialService.get(materialId);\r\n promise.then(function (result) {\r\n _this.material = angular.copy(result);\r\n if (_this.isYoutubeLink(_this.material)) {\r\n _this.materialType = 'YOUTUBE';\r\n }\r\n else if (_this.isVimeoLink(_this.material)) {\r\n _this.materialType = 'VIMEO';\r\n }\r\n else {\r\n _this.materialType = _this.material.typeKey;\r\n }\r\n _this.isMaterialEmpty = _this.material.id && _this.material.typeKey !== MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.LINK] &&\r\n (!_this.material.fileStatus || _this.material.fileStatus === 'EMPTY');\r\n _this.isMaterialNotReady = !_this.isMaterialEmpty && _this.material.id &&\r\n _this.material.typeKey !== MaterialType_1.MaterialTypeKeyEnum[MaterialType_1.MaterialTypeKeyEnum.LINK] && _this.material.fileStatus\r\n && _this.material.fileStatus !== 'EMPTY' && _this.material.fileStatus !== 'READY';\r\n _this.isViewAllowed = _this.material.permissions.view && !_this.isMaterialEmpty && !_this.isMaterialNotReady;\r\n _this.multimediaSources = [{\r\n src: _this.isYoutubeLink(_this.material) || _this.isAwsLink(_this.material) ? _this.material.link : (_this.material.downloadUrl || ''),\r\n type: _this.isYoutubeLink(_this.material) ? \"video/youtube\" : (_this.isAwsLink(_this.material) ? \"video/mp4\" : _this.material.contentType)\r\n }];\r\n if (_this.isAwsLink(_this.material)) {\r\n _this.materialType = \"VIDEO\";\r\n }\r\n if (_this.material.permissions.view) {\r\n _this.actionLogService.create(_this.material.id, ReferencedObjectType_1.ReferencedObjectType.MATERIAL, ActionType_1.ActionType.MATERIAL_VIEW);\r\n }\r\n }).catch(function (response) {\r\n if (response.data.error == \"material.is.not.available\") {\r\n INotifier_1.notifier.error(\"Access to the material is restricted\");\r\n var savedUrl = _this.$location.url();\r\n _this.$timeout(function () {\r\n if (savedUrl === _this.$location.url()) {\r\n _this.goBack();\r\n }\r\n }, 5000);\r\n }\r\n else {\r\n _this.material = {\r\n typeName: '',\r\n title: \"Failed to retrieve the material details\"\r\n };\r\n }\r\n }).finally(function () {\r\n PageHeaderHelper_1.PageHeader.set().header(\"‘\" + (_this.material.title || '') + \"’\").update();\r\n });\r\n return promise;\r\n };\r\n MaterialController.prototype.loadCommentsCount = function () {\r\n var _this = this;\r\n this.socialService.getCommentsCount(this.materialId, ReferencedObjectType_1.ReferencedObjectType.MATERIAL).then(function (result) {\r\n _this.commentsCount = result;\r\n });\r\n };\r\n MaterialController.prototype.addToFavorites = function () {\r\n var _this = this;\r\n this.personalService.addToFavorites(this.materialId, this.material.version, ReferencedObjectType_1.ReferencedObjectType.MATERIAL).then(function (result) {\r\n INotifier_1.notifier.success(\"The material has been added to your favorites\");\r\n _this.material.favorite = true;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.already.in.favorite\") {\r\n INotifier_1.notifier.error(\"This material is already in your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n MaterialController.prototype.removeFromFavorites = function () {\r\n var _this = this;\r\n this.personalService.removeFromFavorites(this.materialId, this.material.version, ReferencedObjectType_1.ReferencedObjectType.MATERIAL).then(function (result) {\r\n INotifier_1.notifier.success(\"The material has been removed from your favorites\");\r\n _this.material.favorite = false;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.not.in.favorite\") {\r\n INotifier_1.notifier.error(\"Failed to remove from favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n MaterialController.prototype.changeMaterialRating = function (isLike) {\r\n var _this = this;\r\n if (!this.isAuthenticated) {\r\n this.authRedirect.redirectToLogOn();\r\n }\r\n else {\r\n this.socialService.changeObjectRating(this.materialId, this.material.version, ReferencedObjectType_1.ReferencedObjectType.MATERIAL, isLike).then(function (result) {\r\n _this.material.likesCount = result.likesCount;\r\n _this.material.dislikesCount = result.dislikesCount;\r\n if (isLike) {\r\n _this.material.liked = !_this.material.liked;\r\n _this.material.disliked = false;\r\n }\r\n if (!isLike) {\r\n _this.material.disliked = !_this.material.disliked;\r\n _this.material.liked = false;\r\n }\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n }\r\n };\r\n MaterialController.prototype.multimediaErrorCallback = function (code, message) {\r\n return this.loadMaterial(this.materialId);\r\n };\r\n MaterialController.prototype.addComment = function (reply, parentId) {\r\n var _this = this;\r\n if (reply) {\r\n this.newReplyComment.parentId = parentId;\r\n }\r\n this.socialService.addComment(this.materialId, this.material.version, ReferencedObjectType_1.ReferencedObjectType.MATERIAL, reply ? this.newReplyComment : this.newComment).then(function (result) {\r\n INotifier_1.notifier.success(\"Comment has been added\");\r\n _this.commentsGridModel.loadCurrentPage();\r\n _this.newComment.text = \"\";\r\n _this.newReplyComment.text = \"\";\r\n _this.newReplyComment.parentId = null;\r\n _this.loadCommentsCount();\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n MaterialController.prototype.cleanComment = function () {\r\n this.newComment.text = \"\";\r\n this.newReplyComment.text = \"\";\r\n this.newReplyComment.parentId = null;\r\n };\r\n MaterialController.prototype.replyComment = function (commentId) {\r\n this.commentsGridModel.entries.forEach(function (c) {\r\n c.reply = c.id == commentId;\r\n });\r\n };\r\n MaterialController.prototype.editMaterial = function (material) {\r\n this.$location.url(this.materialsRouter.updateUrl(material.id));\r\n };\r\n MaterialController.prototype.deleteMaterial = function (material) {\r\n var _this = this;\r\n this.disabledRemoveButton = true;\r\n this.loadingDialogId = this.dialogService.confirmAndReturnDialogId(\"The system searches for connections with other objects. Please wait.\", {\r\n title: \"Loading\",\r\n hideCancelButton: true,\r\n hideConfirmButton: true\r\n });\r\n this.purchaseService.getReferencedObjectProductsList(material.id, ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]).then(function (products) {\r\n if (products.length == 0) {\r\n _this.courseService.findCoursesByMaterial(material.id).then(function (courses) {\r\n if (courses.length == 0) {\r\n _this.quizService.findQuizzesByMaterial(material.id).then(function (quizzes) {\r\n if (quizzes.length == 0) {\r\n _this.materialService.isMaterialPurchased(material.id).then(function (purchased) {\r\n if (!purchased) {\r\n _this.playlistService.findPlaylistsByMaterial(material.id).then(function (playlists) {\r\n var formattedFunc = function (playlist, index) {\r\n return (index + 1) + \". \" + playlist.name;\r\n };\r\n var message = playlists.length == 0\r\n ? \"This material will be completely removed from the system. Continue?\" + \"\\n\"\r\n : StringBuilder_1.StringBuilder.interpolate(\"The material is included in the following playlists: :lists Confirm removing the material?\")\r\n .with(\":lists\", \"\\n\\n\" + _this.getItemsFormattedString(playlists, formattedFunc, \"\\n\") + \"\\n\")\r\n .build() + \"\\n\";\r\n _this.dialogService.confirm(message, {\r\n title: \"Remove material\"\r\n }).then(function () {\r\n _this.materialService.delete(material.id).then(function () {\r\n INotifier_1.notifier.success(\"The material has been removed\");\r\n _this.disabledRemoveButton = false;\r\n _this.$location.url(_this.materialsRouter.indexUrl());\r\n });\r\n _this.uploadUtils.cancelMaterialPreviews(material.id);\r\n _this.uploadUtils.cancelMaterialFiles(material.id);\r\n }, function () {\r\n _this.disabledRemoveButton = false;\r\n });\r\n });\r\n }\r\n else {\r\n _this.dialogService.confirm(\"This material has been purchased. Impossible to remove\", {\r\n title: \"Remove material\",\r\n hideCancelButton: true\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n var formattedFunc = function (quiz, index) {\r\n return \"

    \" + (index + 1) + \". \" + quiz.title + \"

    \";\r\n };\r\n var message = StringBuilder_1.StringBuilder.interpolate(\"

    The material cannot be removed. It is used in the quizzes::quizzes

    \")\r\n .with(\":quizzes\", _this.getItemsFormattedString(quizzes, formattedFunc, \"\\n\"))\r\n .build();\r\n _this.dialogService.confirm(message, {\r\n title: \"Remove material\",\r\n hideCancelButton: true\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n var today = (new Date()).getTime();\r\n var expiredCourses = courses.filter(function (c) { return c.endDate && c.endDate <= today; });\r\n var formattedFunc = function (course, index) {\r\n return \"

    \" + (index + 1) + \". \" + course.subjectName + \". \" + course.topic + \"

    \";\r\n };\r\n if (expiredCourses.length != courses.length) {\r\n var message = StringBuilder_1.StringBuilder.interpolate(\"

    The material cannot be removed. It is used in the courses::courses

    \")\r\n .with(\":courses\", _this.getItemsFormattedString(courses.filter(function (c) { return expiredCourses.indexOf(c) < 0; }), formattedFunc, \"\\n\"))\r\n .build();\r\n _this.dialogService.confirm(message, {\r\n title: \"Remove material\",\r\n hideCancelButton: true\r\n });\r\n }\r\n else {\r\n var message = StringBuilder_1.StringBuilder.interpolate(\"

    This material will be completely removed from the system. It is used in the courses::courses Continue?

    \")\r\n .with(\":courses\", _this.getItemsFormattedString(courses, formattedFunc, \"\\n\"))\r\n .build();\r\n _this.dialogService.confirm(message, {\r\n title: \"Remove material\"\r\n }).then(function () {\r\n _this.materialService.delete(material.id).then(function () {\r\n INotifier_1.notifier.success(\"The material has been removed\");\r\n _this.disabledRemoveButton = false;\r\n _this.$location.url(_this.materialsRouter.indexUrl());\r\n });\r\n _this.uploadUtils.cancelMaterialPreviews(material.id);\r\n _this.uploadUtils.cancelMaterialFiles(material.id);\r\n }, function () {\r\n _this.disabledRemoveButton = false;\r\n });\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n var formattedFunc = function (product, index) {\r\n return \"

    \" + (index + 1) + \". \" + product.name + \". \" + (product.description == null ? \"\" : product.description) + \"

    \";\r\n };\r\n var message = StringBuilder_1.StringBuilder.interpolate(\"

    The material cannot be removed. It contains the following products::products

    \")\r\n .with(\":products\", _this.getItemsFormattedString(products, formattedFunc, \"\\n\"))\r\n .build();\r\n _this.dialogService.confirm(message, {\r\n title: \"Remove material\",\r\n hideCancelButton: true\r\n });\r\n }\r\n });\r\n };\r\n MaterialController.prototype.getItemsFormattedString = function (items, formattedFunc, separator) {\r\n var result = \"\";\r\n items.forEach(function (item, index) {\r\n result += formattedFunc(item, index) + separator;\r\n });\r\n return result;\r\n };\r\n MaterialController.prototype.createMaterialDownloadActionLog = function (materialId) {\r\n this.actionLogService.create(materialId, ReferencedObjectType_1.ReferencedObjectType.MATERIAL, ActionType_1.ActionType.MATERIAL_DOWNLOAD);\r\n };\r\n MaterialController.prototype.goBack = function () {\r\n if (this.$window.history.length > 1) {\r\n this.$window.history.back();\r\n }\r\n else {\r\n this.authRedirect.forwardToAccessDenied();\r\n }\r\n };\r\n MaterialController.prototype.changeAuthorSubscription = function () {\r\n var _this = this;\r\n this.personalService.changeAuthorSubscription(this.material.ownerId).then(function (result) {\r\n result\r\n ? INotifier_1.notifier.success(\"You successfully subscribed to publications of\" + \" \" + _this.material.ownerName)\r\n : INotifier_1.notifier.success(\"You successfully unsubscribed from publications of\" + \" \" + _this.material.ownerName);\r\n _this.material.subscribe = result;\r\n });\r\n };\r\n MaterialController.prototype.cancelReply = function (commentId) {\r\n this.commentsGridModel.entries.forEach(function (c) {\r\n if (c.id == commentId) {\r\n c.reply = false;\r\n }\r\n });\r\n this.newReplyComment.text = \"\";\r\n };\r\n MaterialController.prototype.getMaterialTypeTitle = function (materialTypeId) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialTypeTitle(materialTypeId);\r\n };\r\n MaterialController.prototype.loadMaterialPage = function (materialId) {\r\n this.$location.url(this.materialsRouter.watchUrl(materialId));\r\n };\r\n MaterialController.prototype.hideShowRestRelatedMaterials = function () {\r\n $('.material__others-more').closest('.material__others').toggleClass(\"active\");\r\n this.relatedMaterialsCurrentLimit === this.relatedMaterialsViewLimit ?\r\n this.relatedMaterialsCurrentLimit = this.relatedMaterials.length :\r\n this.relatedMaterialsCurrentLimit = this.relatedMaterialsViewLimit;\r\n };\r\n MaterialController.prototype.toggleReplyMessages = function (comment) {\r\n var array = [comment.id];\r\n var parent = this.commentsGridModel.entries.filter(function (entry) { return comment.id == entry.parentId; });\r\n while (parent.length > 0) {\r\n array.push(parent[0].id);\r\n parent[0].children.forEach(function (child) { return array.push(child.id); });\r\n parent = this.commentsGridModel.entries.filter(function (entry) { return parent[0].id == entry.parentId; });\r\n }\r\n array = array.filter(function (item, pos) {\r\n return array.indexOf(item) == pos;\r\n });\r\n array.forEach(function (num) {\r\n $(\"#material-single_\" + num)\r\n .closest('.messages-single')\r\n .toggleClass(\"active\");\r\n });\r\n };\r\n MaterialController.prototype.getMaterialTypeName = function (typeKey) {\r\n switch (typeKey) {\r\n case 'ALL': return 'ALL';\r\n case 'AUDIO': return 'AUDIO';\r\n case 'VIDEO': return 'VIDEO';\r\n case 'PHOTO': return 'IMAGE';\r\n case 'LINK': return 'LINK';\r\n case 'DOCUMENTS': return 'OTHER';\r\n }\r\n };\r\n MaterialController.prototype.downloadCrossOriginBlob = function () {\r\n var _this = this;\r\n if (this.material.downloadUrl.search(\"filename\") > 0) {\r\n return this.$http.get(this.material.downloadUrl, {\r\n responseType: 'blob'\r\n }).then(function (r) {\r\n var blob = new Blob([r.data], { type: r.data.type });\r\n var link = document.createElement('a');\r\n link.href = URL.createObjectURL(blob);\r\n link.id = \"tempBlobLink\";\r\n link.target = \"_blank\";\r\n link.setAttribute('download', _this.material.downloadUrl.split(\"filename=\")[1]);\r\n link.click();\r\n link.remove();\r\n });\r\n }\r\n };\r\n MaterialController.NAME = \"materials.MaterialController\";\r\n MaterialController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$anchorScroll\",\r\n \"$timeout\",\r\n UrlService_1.UrlService.NAME,\r\n \"$routeParams\",\r\n \"$q\",\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n MaterialService_1.MaterialService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n SocialService_1.SocialService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n \"$window\",\r\n ActionLogService_1.ActionLogService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n PlaylistService_1.PlaylistService.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n DialogService_1.DialogService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n PurchaseService_1.PurchaseService.NAME,\r\n QuizService_1.QuizService.NAME\r\n ];\r\n return MaterialController;\r\n})();\r\nexports.MaterialController = MaterialController;\r\n},{\"../branding/CustomBrandingService\":35,\"../components/dialog/DialogService\":166,\"../finances/PurchaseService\":237,\"../quizzes/QuizService\":396,\"../utils/StringBuilder\":525,\"../utils/UploadUtils\":527,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../INotifier\":5,\"./../ReferencedObjectType\":7,\"./../authcore/AuthManager\":25,\"./../authcore/AuthRedirect\":26,\"./../courses/CourseService\":211,\"./../personal/PersonalService\":377,\"./../security/PermissionsService\":418,\"./../social/SocialService\":440,\"./../statistics/ActionLogService\":441,\"./../statistics/models/ActionType\":450,\"./../tree/TreeElementsInfoFiller\":460,\"./../urls/FinancesRouter\":471,\"./../urls/MaterialsRouter\":480,\"./../utils/MenuHelper\":517,\"./../utils/ObjectTypeUtils\":520,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./MaterialService\":337,\"./PlaylistService\":342,\"./models/MaterialType\":347}],335:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar MaterialService_1 = require(\"./MaterialService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar MaterialPermissionsEditController = (function () {\r\n function MaterialPermissionsEditController($routeParams, $location, securityService, materialService, materialsRouter, permissionsService, authService) {\r\n var _this = this;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.securityService = securityService;\r\n this.materialService = materialService;\r\n this.materialsRouter = materialsRouter;\r\n this.permissionsService = permissionsService;\r\n this.authService = authService;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.user = {};\r\n this.isMaterialLoaded = false;\r\n this.permissionsLoaded = false;\r\n this.disabledSaveButton = true;\r\n this.materialId = $routeParams[MaterialsRouter_1.MaterialsRouter.MATERIAL_ID_PARAM];\r\n var materialIdStr = String(this.materialId);\r\n this.securityService.demandAuthentication()\r\n .demandMaterialPermissions(materialIdStr, function (materialPermissions) { return materialPermissions.edit; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_MATERIALS_MENU_KEY);\r\n this.authService.getCurrentUser().then(function (user) {\r\n angular.copy(user, _this.user);\r\n });\r\n this.loadMaterial(this.materialId).then(function (material) {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit Material \" + \"‘\"\r\n + material.title + \"’\").update();\r\n _this.isMaterialLoaded = true;\r\n });\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.MATERIAL, materialIdStr);\r\n }\r\n MaterialPermissionsEditController.prototype.loadMaterial = function (materialId) {\r\n var _this = this;\r\n return this.materialService.get(materialId).then(function (material) {\r\n _this.material = angular.copy(material);\r\n return _this.material;\r\n });\r\n };\r\n MaterialPermissionsEditController.prototype.loadPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var _this = this;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.permissionsService.getAllObjectPermissionsWithUsersAndGroups(securedObjectType, objectId).then(function (result) {\r\n _this.permissionsWithUsersAndGroups = result;\r\n _this.permissionsLoaded = true;\r\n });\r\n };\r\n MaterialPermissionsEditController.prototype.save = function () {\r\n var _this = this;\r\n this.disabledSaveButton = true;\r\n this.materialService.updateMaterialPermissions(this.materialId, this.material.version, this.material.ownerId, this.permissionsWithUsersAndGroups)\r\n .then(function () {\r\n _this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.MATERIAL, String(_this.materialId));\r\n INotifier_1.notifier.success(\"The material has been modified\");\r\n });\r\n };\r\n MaterialPermissionsEditController.prototype.redirect = function () {\r\n if (this.material && this.material.permissions && this.material.permissions.view) {\r\n this.$location.url(this.materialsRouter.watchUrl(this.materialId));\r\n }\r\n else {\r\n this.$location.url(this.materialsRouter.indexUrl());\r\n }\r\n };\r\n MaterialPermissionsEditController.prototype.enableSaveButton = function () {\r\n this.disabledSaveButton = false;\r\n };\r\n MaterialPermissionsEditController.NAME = \"materials.MaterialPermissionsEditController\";\r\n MaterialPermissionsEditController.$inject = [\r\n \"$routeParams\",\r\n \"$location\",\r\n SecurityService_1.SecurityService.NAME,\r\n MaterialService_1.MaterialService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthService_1.AuthService.NAME\r\n ];\r\n return MaterialPermissionsEditController;\r\n})();\r\nexports.MaterialPermissionsEditController = MaterialPermissionsEditController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../security/permissions/SecuredObjectType\":424,\"../urls/MaterialsRouter\":480,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./MaterialService\":337}],336:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar MaterialService_1 = require(\"./MaterialService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar MaterialRelatedProductsEditController = (function () {\r\n function MaterialRelatedProductsEditController($scope, $routeParams, materialService, materialsRouter, securityService, permissionsService, brandingService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.materialService = materialService;\r\n this.materialsRouter = materialsRouter;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.brandingService = brandingService;\r\n this.isMaterialLoaded = false;\r\n this.onProductsSaveSuccess = function () {\r\n return _this.loadMaterial(_this.materialId);\r\n };\r\n this.materialId = $routeParams[MaterialsRouter_1.MaterialsRouter.MATERIAL_ID_PARAM];\r\n var materialIdStr = String(this.materialId);\r\n this.securityService.demandAuthentication()\r\n .demandMaterialPermissions(materialIdStr, function (materialPermissions) { return materialPermissions.edit; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_MATERIALS_MENU_KEY);\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.loadMaterial(this.materialId).then(function (material) {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit Material \" + \"‘\"\r\n + material.title + \"’\").update();\r\n _this.isMaterialLoaded = true;\r\n });\r\n }\r\n MaterialRelatedProductsEditController.prototype.loadMaterial = function (materialId) {\r\n var _this = this;\r\n return this.materialService.get(materialId).then(function (material) {\r\n _this.material = angular.copy(material);\r\n return _this.material;\r\n });\r\n };\r\n MaterialRelatedProductsEditController.NAME = \"materials.MaterialRelatedProductsEditController\";\r\n MaterialRelatedProductsEditController.$inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n MaterialService_1.MaterialService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return MaterialRelatedProductsEditController;\r\n})();\r\nexports.MaterialRelatedProductsEditController = MaterialRelatedProductsEditController;\r\n},{\"../branding/CustomBrandingService\":35,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/MaterialsRouter\":480,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./MaterialService\":337}],337:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar MaterialService = (function () {\r\n function MaterialService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n }\r\n MaterialService.prototype.get = function (id) {\r\n return this.$http.get(this.url.base(\"/api/materials/:id\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n MaterialService.prototype.getPublicInfo = function (materialId) {\r\n return this.$http.get(this.url.base(\"/api/materials/:id/publicInfo\")\r\n .param(\":id\", materialId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n MaterialService.prototype.create = function (material, file, preview, subtitles) {\r\n material.file = file != null\r\n ? { name: file.name, type: file.type, size: file.size }\r\n : null;\r\n material.preview = preview != null\r\n ? { name: preview.name, type: preview.type, size: preview.size }\r\n : null;\r\n material.subtitles = subtitles != null\r\n ? { name: subtitles.name, type: subtitles.type, size: subtitles.size }\r\n : null;\r\n return this.$http.post(this.url.service(\"/api/materials\"), material)\r\n .then(function (result) { return result.data; });\r\n };\r\n MaterialService.prototype.update = function (material, isResetPreview, isResetSubtitles, file, preview, subtitles) {\r\n material.file = file != null\r\n ? { name: file.name, type: file.type, size: file.size }\r\n : null;\r\n material.preview = preview != null\r\n ? { name: preview.name, type: preview.type, size: preview.size }\r\n : null;\r\n material.subtitles = subtitles != null\r\n ? { name: subtitles.name, type: subtitles.type, size: subtitles.size }\r\n : null;\r\n material.isResetPreview = isResetPreview;\r\n material.isResetSubtitles = isResetSubtitles;\r\n return this.$http.put(this.url.service(\"/api/materials\"), material)\r\n .then(function (result) { return result.data; });\r\n };\r\n MaterialService.prototype.updateMaterialPermissions = function (materialId, version, ownerId, permissionsWithUsersAndGroups) {\r\n return this.$http.put(this.url.base(\"/api/materials/:materialId/permissions\")\r\n .param(\":materialId\", materialId)\r\n .service(), {\r\n id: materialId,\r\n version: version,\r\n ownerId: ownerId,\r\n permissionsWithUsersAndGroups: permissionsWithUsersAndGroups\r\n }).then(function (result) { return result.data[\"material\"]; });\r\n };\r\n MaterialService.prototype.delete = function (materialId) {\r\n return this.$http.delete(this.url.base(\"/api/materials/:id\").param(\":id\", materialId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n MaterialService.prototype.getRelatedMaterials = function (id) {\r\n return this.$http.get(this.url.base(\"/api/materials/:id/related\").param(\":id\", id).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n MaterialService.prototype.isMaterialPurchased = function (materialId) {\r\n return this.$http.get(this.url.base(\"/api/materials/:id/is/purchased\").param(\":id\", materialId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n MaterialService.prototype.getEmbeddedMaterial = function (materialId, sourceId, sourceType) {\r\n return this.$http.get(this.url.base(\"/api/materials/embedded/material/:materialId/source/:sourceId/sourceType/:sourceType/\")\r\n .param(\":materialId\", materialId)\r\n .param(\":sourceId\", sourceId)\r\n .param(\":sourceType\", sourceType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n MaterialService.prototype.isExistMaterials = function () {\r\n return this.$http.get(this.url.base(\"/api/materials/isExistMaterials\").service())\r\n .then(function (result) { return result.data; });\r\n };\r\n MaterialService.NAME = \"materials.MaterialService\";\r\n MaterialService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return MaterialService;\r\n})();\r\nexports.MaterialService = MaterialService;\r\n},{\"./../utils/UrlService\":528}],338:[function(require,module,exports){\nvar MaterialService_1 = require(\"./MaterialService\");\r\nvar SearchController_1 = require(\"./SearchController\");\r\nvar MaterialController_1 = require(\"./MaterialController\");\r\nvar MyDownloadsController_1 = require(\"./MyDownloadsController\");\r\nvar EditMaterialController_1 = require(\"./EditMaterialController\");\r\nvar PlaylistsController_1 = require(\"./PlaylistsController\");\r\nvar PlaylistDetailsController_1 = require(\"./PlaylistDetailsController\");\r\nvar PlaylistEditController_1 = require(\"./PlaylistEditController\");\r\nvar PlaylistService_1 = require(\"./PlaylistService\");\r\nvar AuthCoreModule_1 = require(\"./../authcore/AuthCoreModule\");\r\nvar SecurityModule_1 = require(\"./../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nvar PersonalModule_1 = require(\"./../personal/PersonalModule\");\r\nvar SocialModule_1 = require(\"./../social/SocialModule\");\r\nvar StorageModule_1 = require(\"./../storage/StorageModule\");\r\nvar UsersModule_1 = require(\"./../users/UsersModule\");\r\nvar CoursesModule_1 = require(\"./../courses/CoursesModule\");\r\nvar MaterialRelatedProductsEditController_1 = require(\"./MaterialRelatedProductsEditController\");\r\nvar MaterialPermissionsEditController_1 = require(\"./MaterialPermissionsEditController\");\r\nexports.MaterialsModule = angular\r\n .module(\"materials\", [\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n PersonalModule_1.PersonalModule.name,\r\n SocialModule_1.SocialModule.name,\r\n StorageModule_1.StorageModule.name,\r\n UsersModule_1.UsersModule.name,\r\n CoursesModule_1.CoursesModule.name\r\n])\r\n .service(MaterialService_1.MaterialService.NAME, MaterialService_1.MaterialService)\r\n .service(PlaylistService_1.PlaylistService.NAME, PlaylistService_1.PlaylistService)\r\n .controller(SearchController_1.SearchController.NAME, SearchController_1.SearchController)\r\n .controller(MaterialController_1.MaterialController.NAME, MaterialController_1.MaterialController)\r\n .controller(MyDownloadsController_1.MyDownloadsController.NAME, MyDownloadsController_1.MyDownloadsController)\r\n .controller(EditMaterialController_1.EditMaterialController.NAME, EditMaterialController_1.EditMaterialController)\r\n .controller(PlaylistsController_1.PlaylistsController.NAME, PlaylistsController_1.PlaylistsController)\r\n .controller(PlaylistDetailsController_1.PlaylistDetailsController.NAME, PlaylistDetailsController_1.PlaylistDetailsController)\r\n .controller(PlaylistEditController_1.PlaylistEditController.NAME, PlaylistEditController_1.PlaylistEditController)\r\n .controller(MaterialRelatedProductsEditController_1.MaterialRelatedProductsEditController.NAME, MaterialRelatedProductsEditController_1.MaterialRelatedProductsEditController)\r\n .controller(MaterialPermissionsEditController_1.MaterialPermissionsEditController.NAME, MaterialPermissionsEditController_1.MaterialPermissionsEditController);\r\n},{\"./../authcore/AuthCoreModule\":24,\"./../courses/CoursesModule\":216,\"./../personal/PersonalModule\":376,\"./../security/SecurityModule\":419,\"./../social/SocialModule\":439,\"./../storage/StorageModule\":457,\"./../urls/UrlsModule\":492,\"./../users/UsersModule\":504,\"./EditMaterialController\":333,\"./MaterialController\":334,\"./MaterialPermissionsEditController\":335,\"./MaterialRelatedProductsEditController\":336,\"./MaterialService\":337,\"./MyDownloadsController\":339,\"./PlaylistDetailsController\":340,\"./PlaylistEditController\":341,\"./PlaylistService\":342,\"./PlaylistsController\":343,\"./SearchController\":344}],339:[function(require,module,exports){\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar MyDownloadsController = (function () {\r\n function MyDownloadsController($location, materialsRouter, securityService) {\r\n this.$location = $location;\r\n this.materialsRouter = materialsRouter;\r\n this.securityService = securityService;\r\n this.rowShow = new Map();\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.addMaterial; });\r\n this.rowShow.set(1, false);\r\n this.rowShow.set(2, false);\r\n this.rowShow.set(3, false);\r\n this.rowShow.set(4, false);\r\n this.viewType = 0;\r\n }\r\n MyDownloadsController.prototype.showDetails = function (index) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n };\r\n MyDownloadsController.prototype.watch = function (materialId) {\r\n this.$location.url(this.materialsRouter.watchUrl(materialId));\r\n };\r\n MyDownloadsController.NAME = \"materials.MyDownloadsController\";\r\n MyDownloadsController.$inject = [\r\n \"$location\",\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n SecurityService_1.SecurityService.NAME\r\n ];\r\n return MyDownloadsController;\r\n})();\r\nexports.MyDownloadsController = MyDownloadsController;\r\n},{\"./../security/SecurityService\":420,\"./../urls/MaterialsRouter\":480}],340:[function(require,module,exports){\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PlaylistService_1 = require(\"./PlaylistService\");\r\nvar ObjectTypeUtils_1 = require(\"./../utils/ObjectTypeUtils\");\r\nvar ActionLogService_1 = require(\"./../statistics/ActionLogService\");\r\nvar ActionType_1 = require(\"./../statistics/models/ActionType\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar PlaylistDetailsController = (function () {\r\n function PlaylistDetailsController($location, $routeParams, $http, materialsRouter, securityService, url, playlistService, actionLogService, brandingService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.materialsRouter = materialsRouter;\r\n this.securityService = securityService;\r\n this.url = url;\r\n this.playlistService = playlistService;\r\n this.actionLogService = actionLogService;\r\n this.brandingService = brandingService;\r\n this.rowShow = new Map();\r\n this.playlist = {};\r\n this.playlistId = $routeParams[MaterialsRouter_1.MaterialsRouter.PLAYLIST_ID_PARAM];\r\n this.materialsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/playlists/\" + this.playlistId + \"/materials\")));\r\n this.materialsGridModel.entries.forEach(function (e) {\r\n _this.rowShow.set(e.id, false);\r\n });\r\n this.materialsGridModel.addLoadingListener(this);\r\n var menuItemKey = MenuHelper_1.MenuHelper.getCurrentMenuItemKey();\r\n if (!menuItemKey || menuItemKey.length == 0) {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.MY_LIBRARY_PLAYLISTS_MENU_KEY);\r\n }\r\n this.loadPlaylist();\r\n this.viewType = 1;\r\n }\r\n PlaylistDetailsController.prototype.startLoading = function () {\r\n };\r\n PlaylistDetailsController.prototype.endLoading = function () {\r\n this.materialsGridModel.entries.forEach(function (material) {\r\n material.subjectAndTopic = material.subjectName + \"/\" + material.topic;\r\n });\r\n };\r\n PlaylistDetailsController.prototype.loadPlaylist = function () {\r\n var _this = this;\r\n var promise = this.playlistService.get(this.playlistId);\r\n promise.then(function (result) {\r\n angular.copy(result, _this.playlist);\r\n _this.actionLogService.create(_this.playlist.id, ReferencedObjectType_1.ReferencedObjectType.PLAYLIST, ActionType_1.ActionType.PLAYLIST_VIEW);\r\n PageHeaderHelper_1.PageHeader.set().header(\"‘\" + result.name + \"’\").update();\r\n });\r\n };\r\n PlaylistDetailsController.prototype.getMaterialTypeClass = function (materialTypeId) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialGlyphiconClass(materialTypeId);\r\n };\r\n PlaylistDetailsController.prototype.loadMaterialPage = function (material) {\r\n if (!material.available) {\r\n INotifier_1.notifier.error(\"Access to the material is restricted\");\r\n }\r\n else {\r\n this.$location.url(this.materialsRouter.watchUrl(material.id));\r\n }\r\n };\r\n PlaylistDetailsController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n PlaylistDetailsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n };\r\n PlaylistDetailsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n PlaylistDetailsController.prototype.searchPlaylist = function () {\r\n this.materialsGridModel.loadCurrentPage();\r\n };\r\n PlaylistDetailsController.prototype.clearSearch = function () {\r\n this.materialsGridModel.filter.searchString = null;\r\n this.materialsGridModel.loadPage(0);\r\n };\r\n PlaylistDetailsController.NAME = \"materials.PlaylistDetailsController\";\r\n PlaylistDetailsController.$inject = [\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$http\",\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PlaylistService_1.PlaylistService.NAME,\r\n ActionLogService_1.ActionLogService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return PlaylistDetailsController;\r\n})();\r\nexports.PlaylistDetailsController = PlaylistDetailsController;\r\n},{\"../branding/CustomBrandingService\":35,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../INotifier\":5,\"./../ReferencedObjectType\":7,\"./../security/SecurityService\":420,\"./../statistics/ActionLogService\":441,\"./../statistics/models/ActionType\":450,\"./../urls/MaterialsRouter\":480,\"./../utils/MenuHelper\":517,\"./../utils/ObjectTypeUtils\":520,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./PlaylistService\":342}],341:[function(require,module,exports){\nvar PlaylistService_1 = require(\"./PlaylistService\");\r\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar SecuredObjectType_1 = require(\"./../security/permissions/SecuredObjectType\");\r\nvar Moment_1 = require(\"./../utils/Moment\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar PlaylistEditController = (function () {\r\n function PlaylistEditController($http, $location, $routeParams, $uploader, $timeout, url, authService, playlistService, securityService, permissionsService, materialsRouter, brandingService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$uploader = $uploader;\r\n this.$timeout = $timeout;\r\n this.url = url;\r\n this.authService = authService;\r\n this.playlistService = playlistService;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.materialsRouter = materialsRouter;\r\n this.brandingService = brandingService;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.playlistMaterials = [];\r\n this.hasPreviewUrlCanceled = false;\r\n this.isResetPreview = false;\r\n this.businessUnitSelected = false;\r\n this.businessUnitVisible = false;\r\n this.hasAllBusinessUnits = false;\r\n this.currentUser = {};\r\n this.playlistId = $routeParams[MaterialsRouter_1.MaterialsRouter.PLAYLIST_ID_PARAM];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.MY_LIBRARY_PLAYLISTS_MENU_KEY);\r\n var playlistIdStr = String(this.playlistId);\r\n var hasPlaylistId = this.playlistId != null;\r\n this.securityService.demandAuthentication()\r\n .demandPlaylistPermissionsIf(hasPlaylistId, playlistIdStr, function (playlistPermissions) { return playlistPermissions.edit; });\r\n this.isValidityInPerpetuity = true;\r\n this.playlist = {};\r\n if (hasPlaylistId) {\r\n this.loadPlaylist();\r\n this.loadPlaylistMaterials();\r\n this.disabledSaveButton = false;\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.PLAYLIST, playlistIdStr);\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set().header(\"New Playlist\").update();\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.playlist.ownerId = user.id;\r\n _this.playlist.ownerFullName = user.fullName;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n if (user.allBusinessUnits || user.businessUnits.length > 1) {\r\n _this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.PLAYLIST);\r\n }\r\n });\r\n }\r\n this.userMaterialsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/playlists/userMaterials\")));\r\n this.userMaterialsGridModel.filter.playlistId = this.playlistId;\r\n this.userMaterialsGridModel.loadCurrentPage();\r\n }\r\n PlaylistEditController.prototype.loadPlaylist = function () {\r\n var _this = this;\r\n var promise = this.playlistService.get(this.playlistId);\r\n promise.then(function (result) {\r\n angular.copy(result, _this.playlist);\r\n _this.businessUnitSelected = true;\r\n _this.userMaterialsGridModel.filter.businessUnitId = result.businessUnitId;\r\n _this.userMaterialsGridModel.loadCurrentPage();\r\n _this.playlist.validityText = Moment_1.Moment.isValidDate(result.validity);\r\n if (_this.playlist.validityText) {\r\n _this.isValidityInPerpetuity = false;\r\n }\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit Playlist \" + \"‘\"\r\n + _this.playlist.name + \"’\").update();\r\n _this.previewUrl = _this.playlist.previewUrl ? _this.playlist.previewUrl : null;\r\n });\r\n };\r\n PlaylistEditController.prototype.loadPlaylistMaterials = function () {\r\n var _this = this;\r\n this.playlistService.getMaterials(this.playlistId).then(function (result) {\r\n angular.copy(result, _this.playlistMaterials);\r\n });\r\n };\r\n PlaylistEditController.prototype.loadPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var _this = this;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.permissionsService.getAllObjectPermissionsWithUsersAndGroups(securedObjectType, objectId).then(function (result) {\r\n _this.permissionsWithUsersAndGroups = result;\r\n });\r\n };\r\n PlaylistEditController.prototype.save = function () {\r\n var _this = this;\r\n this.disabledSaveButton = true;\r\n this.hasPreviewUrlCanceled = false;\r\n this.playlist.validity = this.getValidity();\r\n this.playlist.materialIds = this.playlistMaterials.map(function (material) {\r\n return material.id;\r\n });\r\n var promise = this.playlistId\r\n ? this.playlistService.update(this.playlist, this.permissionsWithUsersAndGroups, this.isResetPreview, this.preview)\r\n : this.playlistService.create(this.playlist, this.permissionsWithUsersAndGroups);\r\n promise.then(function (playlist) {\r\n if (_this.preview != null) {\r\n _this.upload(_this.preview, playlist.id, \"preview\").then(function (r) {\r\n _this.processSuccessCallback(playlist.id);\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n }\r\n if (response.data.error == \"error.preview.type\") {\r\n INotifier_1.notifier.error(\"Invalid file format. Please select a file with .jpg or .png extension\");\r\n }\r\n });\r\n }\r\n else {\r\n _this.processSuccessCallback(playlist.id);\r\n }\r\n }).catch(function (err) {\r\n INotifier_1.notifier.error(err);\r\n });\r\n };\r\n PlaylistEditController.prototype.processSuccessCallback = function (playlistId) {\r\n this.disabledSaveButton = false;\r\n INotifier_1.notifier.success(\"The playlist has been saved\");\r\n this.$location.url(this.materialsRouter.playlistDetailsUrl(playlistId));\r\n };\r\n PlaylistEditController.prototype.upload = function (file, playlistId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/playlists/upload?playlistId=:playlistId&fileType=:fileType\")\r\n .param(\":playlistId\", playlistId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file });\r\n };\r\n PlaylistEditController.prototype.getValidity = function () {\r\n this.playlist.validityText ? this.playlist.validity = Moment_1.Moment.textToJavaDate(this.playlist.validityText)\r\n : this.playlist.validity = null;\r\n return this.playlist.validity;\r\n };\r\n PlaylistEditController.prototype.redirectOrClearFields = function () {\r\n if (this.playlistId) {\r\n this.$location.url(this.materialsRouter.playlistDetailsUrl(this.playlistId));\r\n }\r\n else {\r\n this.cleanFields();\r\n }\r\n };\r\n PlaylistEditController.prototype.cleanFields = function () {\r\n var _this = this;\r\n this.isValidityInPerpetuity = true;\r\n this.playlist = {};\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.playlist.ownerId = user.id;\r\n _this.playlist.ownerFullName = user.fullName;\r\n });\r\n this.permissionsWithUsersAndGroups = [];\r\n this.preview = null;\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.PLAYLIST);\r\n };\r\n PlaylistEditController.prototype.cleanValidity = function () {\r\n this.playlist.validityText = \"\";\r\n };\r\n PlaylistEditController.prototype.addMaterialToPlaylist = function (material) {\r\n this.playlistMaterials.push(material);\r\n var index = this.userMaterialsGridModel.entries.indexOf(material);\r\n this.userMaterialsGridModel.entries.splice(index, 1);\r\n };\r\n PlaylistEditController.prototype.removeMaterialFromPlaylist = function (index, material) {\r\n this.playlistMaterials.splice(index, 1);\r\n this.userMaterialsGridModel.entries.push(material);\r\n };\r\n PlaylistEditController.prototype.moveUp = function (index) {\r\n var placeholder = {};\r\n var objectToMove = this.playlistMaterials.splice(index, 1, placeholder)[0];\r\n this.playlistMaterials.splice(index - 1, 0, objectToMove);\r\n this.playlistMaterials.splice(this.playlistMaterials.indexOf(placeholder), 1);\r\n };\r\n PlaylistEditController.prototype.moveDown = function (index) {\r\n var placeholder = {};\r\n var objectToMove = this.playlistMaterials.splice(index + 1, 1, placeholder)[0];\r\n this.playlistMaterials.splice(index, 0, objectToMove);\r\n this.playlistMaterials.splice(this.playlistMaterials.indexOf(placeholder), 1);\r\n };\r\n PlaylistEditController.prototype.isMoveUp = function (index) {\r\n return index > 0;\r\n };\r\n PlaylistEditController.prototype.isMoveDown = function (index) {\r\n return index < this.playlistMaterials.length - 1;\r\n };\r\n PlaylistEditController.prototype.restorePreviewUrl = function () {\r\n this.preview = undefined;\r\n this.previewUrl = this.playlist.previewUrl;\r\n this.hasPreviewUrlCanceled = false;\r\n this.isResetPreview = false;\r\n };\r\n PlaylistEditController.prototype.resetPreview = function () {\r\n if (this.preview) {\r\n this.preview = undefined;\r\n }\r\n else if (this.previewUrl) {\r\n this.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n this.isResetPreview = true;\r\n };\r\n PlaylistEditController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n if (!this.playlistId) {\r\n this.businessUnitSelected = false;\r\n this.playlist.ownerId = this.currentUser.id;\r\n this.playlist.ownerFullName = this.currentUser.name;\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.PLAYLIST);\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n }\r\n };\r\n PlaylistEditController.prototype.setBusinessUnitSelectorVisible = function () {\r\n this.businessUnitVisible = true;\r\n };\r\n PlaylistEditController.NAME = \"materials.PlaylistEditController\";\r\n PlaylistEditController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"Upload\",\r\n \"$timeout\",\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n PlaylistService_1.PlaylistService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return PlaylistEditController;\r\n})();\r\nexports.PlaylistEditController = PlaylistEditController;\r\n},{\"../branding/CustomBrandingService\":35,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../INotifier\":5,\"./../auth/AuthService\":18,\"./../security/PermissionsService\":418,\"./../security/SecurityService\":420,\"./../security/permissions/SecuredObjectType\":424,\"./../urls/MaterialsRouter\":480,\"./../utils/MenuHelper\":517,\"./../utils/Moment\":518,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./PlaylistService\":342}],342:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PlaylistService = (function () {\r\n function PlaylistService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n }\r\n PlaylistService.prototype.findPlaylistsByMaterial = function (materialId) {\r\n return this.$http.get(this.url.base(\"/api/playlists/by/material/:materialId\")\r\n .param(\":materialId\", materialId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PlaylistService.prototype.get = function (id) {\r\n return this.$http.get(this.url.base(\"/api/playlists/:id?\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PlaylistService.prototype.create = function (playlist, permissionsWithUsersAndGroups) {\r\n playlist.permissionsWithUsersAndGroups = permissionsWithUsersAndGroups;\r\n return this.$http.post(this.url.service(\"/api/playlists\"), playlist).then(function (result) { return result.data; });\r\n };\r\n PlaylistService.prototype.update = function (playlist, permissionsWithUsersAndGroups, isResetPreview, preview) {\r\n playlist.permissionsWithUsersAndGroups = permissionsWithUsersAndGroups;\r\n playlist.preview = preview != null\r\n ? { name: preview.name, type: preview.type, size: preview.size }\r\n : null;\r\n playlist.resetPreview = isResetPreview;\r\n return this.$http.put(this.url.service(\"/api/playlists\"), playlist).then(function (result) { return result.data; });\r\n };\r\n PlaylistService.prototype.getMaterials = function (id) {\r\n return this.$http.get(this.url.base(\"/api/playlists/:id/materialsList\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PlaylistService.NAME = \"materials.PlaylistService\";\r\n PlaylistService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return PlaylistService;\r\n})();\r\nexports.PlaylistService = PlaylistService;\r\n},{\"./../utils/UrlService\":528}],343:[function(require,module,exports){\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PersonalService_1 = require(\"./../personal/PersonalService\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar PlaylistsController = (function () {\r\n function PlaylistsController($scope, $http, $location, $window, materialsRouter, permissionsApi, url, personalService, authManager, brandingService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.materialsRouter = materialsRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.url = url;\r\n this.personalService = personalService;\r\n this.authManager = authManager;\r\n this.brandingService = brandingService;\r\n this.rowShow = new Map();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.MY_LIBRARY_PLAYLISTS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Playlists\").update();\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader()\r\n .addActionLinkIf(systemPermissions.addPlaylists, '+ New', _this.materialsRouter.playlistCreateUrl()).update();\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n this.playlistsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/playlists\")));\r\n this.playlistsGridModel.pageSize = 9;\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n }\r\n PlaylistsController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n PlaylistsController.prototype.getLanguages = function (languages) {\r\n var languagesStr = \"\";\r\n languages.forEach(function (l) {\r\n languagesStr += l + \", \";\r\n });\r\n return languagesStr.substring(0, languagesStr.length - 2);\r\n };\r\n PlaylistsController.prototype.searchPlaylists = function () {\r\n this.playlistsGridModel.loadCurrentPage();\r\n };\r\n PlaylistsController.prototype.loadPlaylist = function (playlistId) {\r\n this.$location.url(this.materialsRouter.playlistDetailsUrl(playlistId));\r\n };\r\n PlaylistsController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n PlaylistsController.prototype.addToFavorites = function (playlist) {\r\n this.rowShow.set(playlist.id, !this.rowShow.get(playlist.id));\r\n this.personalService.addToFavorites(playlist.id, playlist.version, ReferencedObjectType_1.ReferencedObjectType.PLAYLIST).then(function (result) {\r\n INotifier_1.notifier.success(\"The playlist has been added to your favorites\");\r\n playlist.favorite = true;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.already.in.favorite\") {\r\n INotifier_1.notifier.error(\"This playlist is already in your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n PlaylistsController.prototype.removeFromFavorites = function (playlist) {\r\n this.rowShow.set(playlist.id, !this.rowShow.get(playlist.id));\r\n this.personalService.removeFromFavorites(playlist.id, playlist.version, ReferencedObjectType_1.ReferencedObjectType.PLAYLIST).then(function (result) {\r\n INotifier_1.notifier.success(\"The playlist has been removed from your favorites\");\r\n playlist.favorite = false;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.not.in.favorite\") {\r\n INotifier_1.notifier.error(\"Failed to remove from your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n PlaylistsController.prototype.clearSearch = function () {\r\n this.viewType = 1;\r\n this.playlistsGridModel.filter.searchString = null;\r\n this.playlistsGridModel.filter.viewType = null;\r\n this.playlistsGridModel.filter.subjectId = null;\r\n this.playlistsGridModel.filter.complexityLevel = null;\r\n this.playlistsGridModel.filter.languageId = null;\r\n this.playlistsGridModel.filter.sourceId = null;\r\n this.playlistsGridModel.loadPage(0);\r\n };\r\n PlaylistsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n PlaylistsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n PlaylistsController.NAME = \"materials.PlaylistsController\";\r\n PlaylistsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return PlaylistsController;\r\n})();\r\nexports.PlaylistsController = PlaylistsController;\r\n},{\"../branding/CustomBrandingService\":35,\"../utils/ResizeViewService\":524,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../INotifier\":5,\"./../ReferencedObjectType\":7,\"./../authcore/AuthManager\":25,\"./../personal/PersonalService\":377,\"./../security/PermissionsService\":418,\"./../urls/MaterialsRouter\":480,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528}],344:[function(require,module,exports){\nvar VhsSearchDirective_1 = require(\"../components/VhsSearchDirective\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar ObjectTypeUtils_1 = require(\"../utils/ObjectTypeUtils\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar MaterialType_1 = require(\"./models/MaterialType\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar SearchController = (function () {\r\n function SearchController($http, $location, $timeout, $scope, $window, authManager, permissionsApi, url, materialsRouter, brandingService, authRedirect, commonFilterService, userService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$location = $location;\r\n this.$timeout = $timeout;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.authManager = authManager;\r\n this.permissionsApi = permissionsApi;\r\n this.url = url;\r\n this.materialsRouter = materialsRouter;\r\n this.brandingService = brandingService;\r\n this.authRedirect = authRedirect;\r\n this.commonFilterService = commonFilterService;\r\n this.userService = userService;\r\n this.materialType = MaterialType_1.MaterialTypeEnum;\r\n this.countActiveFilter = 0;\r\n this.purchasedOrderId = parseInt($location.search()[CoursesRouter_1.CoursesRouter.PURCHASED_ORDER]) || null;\r\n this.searchType = $location.search()[VhsSearchDirective_1.VhsSearchController.FILE_FORMAT_PARAMETER];\r\n this.searchQuery = $location.search()[VhsSearchDirective_1.VhsSearchController.SEARCH_STRING_PARAMETER];\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_MATERIALS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Materials\").update();\r\n if (this.isAuthenticated) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n else {\r\n if ($location.search()[CoursesRouter_1.CoursesRouter.LOGON_REQUIRED]) {\r\n authRedirect.redirectToLogOn();\r\n }\r\n }\r\n this.loadUserProfile();\r\n var materialsUrl = this.purchasedOrderId != null\r\n ? \"/api/materials/purchased?purchasedOrder=\" + this.purchasedOrderId\r\n : \"/api/materials\";\r\n this.materialsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(materialsUrl)));\r\n this.getStorageFilters();\r\n this.materialsGridModel.addLoadingListener(this);\r\n if (window.innerWidth < 1200) {\r\n this.materialsGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.materialsGridModel.pageSize = 9;\r\n }\r\n this.searchType != null ? this.materialsGridModel.filter.fileType = this.searchType : \"\";\r\n this.searchQuery != null ? this.materialsGridModel.filter.searchString = this.searchQuery : \"\";\r\n this.searchViewType = 1;\r\n this.viewType = 1;\r\n this.showUploadDateFilter = true;\r\n this.isSidebarFilterHidden = true;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.searchViewType);\r\n this.loadSearch();\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n var currentPage = _this.materialsGridModel.currentPage >= _this.materialsGridModel.totalPageCount\r\n ? _this.materialsGridModel.currentPage - 1\r\n : _this.materialsGridModel.currentPage;\r\n if (window.innerWidth < 1200) {\r\n _this.materialsGridModel.pageSize = 10;\r\n _this.materialsGridModel.loadPage(currentPage);\r\n }\r\n else {\r\n _this.materialsGridModel.pageSize = 9;\r\n _this.materialsGridModel.loadPage(currentPage);\r\n }\r\n _this.searchViewType = _this.resizeViewService.setResizeViewType(_this.searchViewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n }\r\n SearchController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n SearchController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(SearchController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.materialsGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(SearchController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.materialsGridModel.filter.searchString = this.searchInput;\r\n }\r\n var topType = this.commonFilterService.getTopStatus(SearchController.NAME);\r\n if (topType) {\r\n this.applyTopType(topType);\r\n }\r\n this.materialsGridModel.loadCurrentPage();\r\n };\r\n SearchController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n SearchController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n SearchController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n SearchController.prototype.updateTopType = function (status) {\r\n this.commonFilterService.saveTopStatus(SearchController.NAME, status);\r\n this.applyTopType(status);\r\n this.materialsGridModel.loadCurrentPage();\r\n };\r\n SearchController.prototype.applyTopType = function (status) {\r\n switch (status) {\r\n case 'ALL':\r\n this.materialsGridModel.filter.fileType = null;\r\n break;\r\n case 'AUDIO':\r\n this.materialsGridModel.filter.fileType = MaterialType_1.MaterialType.AUDIO;\r\n break;\r\n case 'VIDEO':\r\n this.materialsGridModel.filter.fileType = MaterialType_1.MaterialType.VIDEO;\r\n break;\r\n case 'PHOTO':\r\n this.materialsGridModel.filter.fileType = MaterialType_1.MaterialType.PHOTO;\r\n break;\r\n case 'LINK':\r\n this.materialsGridModel.filter.fileType = MaterialType_1.MaterialType.LINK;\r\n break;\r\n case 'DOCUMENTS':\r\n this.materialsGridModel.filter.fileType = MaterialType_1.MaterialType.DOCUMENTS;\r\n break;\r\n }\r\n };\r\n SearchController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(SearchController.NAME, this.searchInput);\r\n this.materialsGridModel.filter.searchString = this.searchInput;\r\n this.materialsGridModel.loadCurrentPage();\r\n };\r\n SearchController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(SearchController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.materialsGridModel.filter.searchString = this.searchInput;\r\n this.materialsGridModel.loadCurrentPage();\r\n }\r\n };\r\n SearchController.prototype.startLoading = function () {\r\n };\r\n SearchController.prototype.endLoading = function () {\r\n this.materialsGridModel.entries.forEach(function (material) {\r\n material.subjectAndTopic = material.subjectName + \" / \" + material.title;\r\n });\r\n };\r\n SearchController.prototype.searchMaterial = function () {\r\n this.materialsGridModel.filter.dateFrom = Moment_1.Moment.textToJavaDate(this.materialsGridModel.filter.dateFromText);\r\n this.materialsGridModel.filter.dateTo = Moment_1.Moment.textToJavaDate(this.materialsGridModel.filter.dateToText);\r\n this.materialsGridModel.filter.viewType = this.viewType;\r\n this.materialsGridModel.loadPage(0);\r\n };\r\n SearchController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsMaterialsFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsMaterialsFilter.\" + key);\r\n }\r\n };\r\n SearchController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsMaterialsFilter.searchString\")) {\r\n this.materialsGridModel.filter.searchString = sessionStorage.getItem(\"vhsMaterialsFilter.searchString\");\r\n }\r\n if (sessionStorage.getItem(\"vhsMaterialsFilter.subjectId\")) {\r\n this.materialsGridModel.filter.subjectId = parseInt(sessionStorage.getItem(\"vhsMaterialsFilter.subjectId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsMaterialsFilter.fileType\")) {\r\n this.materialsGridModel.filter.fileType = parseInt(sessionStorage.getItem(\"vhsMaterialsFilter.fileType\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsMaterialsFilter.topic\")) {\r\n this.materialsGridModel.filter.topic = sessionStorage.getItem(\"vhsMaterialsFilter.topic\");\r\n }\r\n if (sessionStorage.getItem(\"vhsMaterialsFilter.searchViewType\")) {\r\n this.materialsGridModel.filter.searchViewType = parseInt(sessionStorage.getItem(\"vhsMaterialsFilter.searchViewType\"));\r\n this.searchViewType = this.materialsGridModel.filter.searchViewType;\r\n }\r\n };\r\n SearchController.prototype.clearSearch = function () {\r\n this.viewType = null;\r\n this.materialsGridModel.filter.searchString = null;\r\n this.materialsGridModel.filter.viewType = null;\r\n this.materialsGridModel.filter.ownerId = \"\";\r\n this.materialsGridModel.filter.subjectId = \"\";\r\n this.materialsGridModel.filter.topic = null;\r\n this.materialsGridModel.filter.languageId = \"\";\r\n this.materialsGridModel.filter.fileType = \"\";\r\n this.materialsGridModel.filter.dateFrom = null;\r\n this.materialsGridModel.filter.dateFromText = null;\r\n this.materialsGridModel.filter.dateTo = null;\r\n this.materialsGridModel.filter.dateToText = null;\r\n this.searchViewType = 1;\r\n sessionStorage.removeItem(\"vhsMaterialsFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsMaterialsFilter.viewType\");\r\n sessionStorage.removeItem(\"vhsMaterialsFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsMaterialsFilter.topic\");\r\n sessionStorage.removeItem(\"vhsMaterialsFilter.fileType\");\r\n sessionStorage.removeItem(\"vhsMaterialsFilter.searchViewType\");\r\n this.materialsGridModel.loadPage(0);\r\n };\r\n SearchController.prototype.loadMaterialPage = function (materialId) {\r\n this.$location.url(this.materialsRouter.watchUrl(materialId));\r\n };\r\n SearchController.prototype.showPuchaseHint = function (id, $event) {\r\n $('#button-purchase-' + id).popover('show');\r\n this.$timeout(function () { return $('#button-purchase-' + id).popover('hide'); }, 5000);\r\n $event.preventDefault();\r\n };\r\n SearchController.prototype.getMaterialTypeClass = function (materialTypeId) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialGlyphiconClass(materialTypeId);\r\n };\r\n SearchController.prototype.getMaterialTypeTitle = function (materialTypeId) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialTypeTitle(materialTypeId);\r\n };\r\n SearchController.prototype.showDetails = function (material, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n material.shown = !material.shown;\r\n }\r\n };\r\n SearchController.prototype.setSearchViewType = function (viewType) {\r\n this.searchViewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n SearchController.prototype.isSearchViewTypeSelected = function (viewType) {\r\n return this.searchViewType == viewType;\r\n };\r\n SearchController.prototype.getOwnersUrl = function () {\r\n return \"/api/userSelector/usersForCurrentUser\";\r\n };\r\n SearchController.prototype.toggleSidebarFilterVisibility = function () {\r\n this.isSidebarFilterHidden = !this.isSidebarFilterHidden;\r\n };\r\n SearchController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n SearchController.prototype.updateFilter = function (type, referenceObject) {\r\n var countActiveIncrement = this.commonFilterService.updateGeneralFilter(type, referenceObject, SearchController.NAME);\r\n this.countActiveFilter += countActiveIncrement;\r\n };\r\n SearchController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(SearchController.NAME, this.materialsGridModel);\r\n };\r\n SearchController.prototype.getMaterialTypeName = function (typeKey) {\r\n switch (typeKey) {\r\n case 'ALL': return 'ALL';\r\n case 'AUDIO': return 'AUDIO';\r\n case 'VIDEO': return 'VIDEO';\r\n case 'PHOTO': return 'IMAGE';\r\n case 'LINK': return 'LINK';\r\n case 'DOCUMENTS': return 'OTHER';\r\n }\r\n };\r\n SearchController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (rec.right + popup.clientWidth >= document.body.clientWidth) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n SearchController.prototype.getShortSummary = function (originalString) {\r\n return originalString != undefined && originalString.length > 256\r\n ? originalString.substring(0, 256) + '...'\r\n : originalString;\r\n };\r\n SearchController.prototype.decodeType = function (type) {\r\n var result = type;\r\n switch (type) {\r\n case \"Audio\": {\r\n result = \"Audio\";\r\n break;\r\n }\r\n case \"Video\": {\r\n result = \"Video\";\r\n break;\r\n }\r\n case \"Link\": {\r\n result = \"Link\";\r\n break;\r\n }\r\n case \"Image\": {\r\n result = \"Image\";\r\n break;\r\n }\r\n case \"Other documents\": {\r\n result = \"Other documents\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n SearchController.NAME = \"materials.SearchController\";\r\n SearchController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n \"$timeout\",\r\n \"$scope\",\r\n \"$window\",\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return SearchController;\r\n})();\r\nexports.SearchController = SearchController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../authcore/AuthManager\":25,\"../authcore/AuthRedirect\":26,\"../branding/CustomBrandingService\":35,\"../common/CommonFilterService\":49,\"../components/VhsSearchDirective\":147,\"../security/PermissionsService\":418,\"../urls/CoursesRouter\":468,\"../urls/MaterialsRouter\":480,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"../utils/ObjectTypeUtils\":520,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528,\"./models/MaterialType\":347}],345:[function(require,module,exports){\n(function (CheckpointType) {\r\n CheckpointType[CheckpointType[\"BUTTON\"] = 0] = \"BUTTON\";\r\n CheckpointType[CheckpointType[\"QUESTION\"] = 1] = \"QUESTION\";\r\n})(exports.CheckpointType || (exports.CheckpointType = {}));\r\nvar CheckpointType = exports.CheckpointType;\r\n},{}],346:[function(require,module,exports){\nvar IMultimediaMaterialSettings = (function () {\r\n function IMultimediaMaterialSettings() {\r\n }\r\n return IMultimediaMaterialSettings;\r\n})();\r\nexports.default = IMultimediaMaterialSettings;\r\n},{}],347:[function(require,module,exports){\n(function (MaterialTypeEnum) {\r\n MaterialTypeEnum[MaterialTypeEnum[\"AUDIO\"] = 1] = \"AUDIO\";\r\n MaterialTypeEnum[MaterialTypeEnum[\"VIDEO\"] = 2] = \"VIDEO\";\r\n MaterialTypeEnum[MaterialTypeEnum[\"LINK\"] = 3] = \"LINK\";\r\n MaterialTypeEnum[MaterialTypeEnum[\"PHOTO\"] = 4] = \"PHOTO\";\r\n MaterialTypeEnum[MaterialTypeEnum[\"DOCUMENTS\"] = 5] = \"DOCUMENTS\";\r\n})(exports.MaterialTypeEnum || (exports.MaterialTypeEnum = {}));\r\nvar MaterialTypeEnum = exports.MaterialTypeEnum;\r\n(function (MaterialTypeKeyEnum) {\r\n MaterialTypeKeyEnum[MaterialTypeKeyEnum[\"AUDIO\"] = 0] = \"AUDIO\";\r\n MaterialTypeKeyEnum[MaterialTypeKeyEnum[\"VIDEO\"] = 1] = \"VIDEO\";\r\n MaterialTypeKeyEnum[MaterialTypeKeyEnum[\"LINK\"] = 2] = \"LINK\";\r\n MaterialTypeKeyEnum[MaterialTypeKeyEnum[\"PHOTO\"] = 3] = \"PHOTO\";\r\n MaterialTypeKeyEnum[MaterialTypeKeyEnum[\"DOCUMENTS\"] = 4] = \"DOCUMENTS\";\r\n})(exports.MaterialTypeKeyEnum || (exports.MaterialTypeKeyEnum = {}));\r\nvar MaterialTypeKeyEnum = exports.MaterialTypeKeyEnum;\r\nvar MaterialType = (function () {\r\n function MaterialType() {\r\n }\r\n MaterialType.AUDIO = 1;\r\n MaterialType.VIDEO = 2;\r\n MaterialType.LINK = 3;\r\n MaterialType.PHOTO = 4;\r\n MaterialType.DOCUMENTS = 5;\r\n return MaterialType;\r\n})();\r\nexports.MaterialType = MaterialType;\r\n},{}],348:[function(require,module,exports){\n(function (NoAnswerEffectType) {\r\n NoAnswerEffectType[NoAnswerEffectType[\"JUMP_TO_TIME\"] = 0] = \"JUMP_TO_TIME\";\r\n NoAnswerEffectType[NoAnswerEffectType[\"REDIRECT_TO_LINK\"] = 1] = \"REDIRECT_TO_LINK\";\r\n})(exports.NoAnswerEffectType || (exports.NoAnswerEffectType = {}));\r\nvar NoAnswerEffectType = exports.NoAnswerEffectType;\r\n},{}],349:[function(require,module,exports){\nvar VideoPlayerLocalStorageKey = (function () {\r\n function VideoPlayerLocalStorageKey() {\r\n }\r\n VideoPlayerLocalStorageKey.VIDEO_PLAYER_KEY = \"videoPlayer-\";\r\n VideoPlayerLocalStorageKey.SOURCE_KEY = VideoPlayerLocalStorageKey.VIDEO_PLAYER_KEY + \"videoURL\";\r\n VideoPlayerLocalStorageKey.POSTER_URL_KEY = VideoPlayerLocalStorageKey.VIDEO_PLAYER_KEY + \"poster\";\r\n VideoPlayerLocalStorageKey.TIMESTAMP_KEY = VideoPlayerLocalStorageKey.VIDEO_PLAYER_KEY + \"timestamp\";\r\n VideoPlayerLocalStorageKey.SUBTITLES_TRACKS = VideoPlayerLocalStorageKey.VIDEO_PLAYER_KEY + \"subtitles\";\r\n VideoPlayerLocalStorageKey.CHECKPOINTS_KEY = VideoPlayerLocalStorageKey.VIDEO_PLAYER_KEY + \"checkpoints\";\r\n VideoPlayerLocalStorageKey.CONFIGURATION_KEY = VideoPlayerLocalStorageKey.VIDEO_PLAYER_KEY + \"configuration\";\r\n VideoPlayerLocalStorageKey.SUBTITLES_CURRENT_TRACK = VideoPlayerLocalStorageKey.VIDEO_PLAYER_KEY + \"currentTrack\";\r\n VideoPlayerLocalStorageKey.CURRENT_CHECKPOINT_KEY = VideoPlayerLocalStorageKey.VIDEO_PLAYER_KEY + \"currentCheckpoint\";\r\n VideoPlayerLocalStorageKey.SECTION_KEY = \"sectionId\";\r\n VideoPlayerLocalStorageKey.MATERIAL_KEY = \"materialID\";\r\n VideoPlayerLocalStorageKey.PREV_MATERIAL_KEY = \"prevMaterialProgress\";\r\n return VideoPlayerLocalStorageKey;\r\n})();\r\nexports.VideoPlayerLocalStorageKey = VideoPlayerLocalStorageKey;\r\n},{}],350:[function(require,module,exports){\nvar NewsService_1 = require(\"./NewsService\");\r\nvar NewsRouter_1 = require(\"../urls/NewsRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar HelpDetailsController = (function () {\r\n function HelpDetailsController($http, $location, $routeParams, newsService, newsRouter) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.newsService = newsService;\r\n this.newsRouter = newsRouter;\r\n this.news = {};\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.FAQ_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Help\").update();\r\n if ($routeParams[NewsRouter_1.NewsRouter.ONE_NEWS_ID_PARAM] === 'null') {\r\n this.newsService.getHelpDetails().then(function (r) {\r\n if (!!r.id) {\r\n _this.$location.url(_this.newsRouter.helpUrl(r.id));\r\n }\r\n });\r\n }\r\n else {\r\n this.newsId = $routeParams[NewsRouter_1.NewsRouter.ONE_NEWS_ID_PARAM];\r\n this.newsService.getNews(this.newsId).then(function (result) {\r\n angular.copy(result, _this.news);\r\n });\r\n }\r\n }\r\n HelpDetailsController.NAME = \"news.HelpDetailsController\";\r\n HelpDetailsController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n NewsService_1.NewsService.NAME,\r\n NewsRouter_1.NewsRouter.NAME\r\n ];\r\n return HelpDetailsController;\r\n})();\r\nexports.HelpDetailsController = HelpDetailsController;\r\n},{\"../urls/NewsRouter\":481,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./NewsService\":354}],351:[function(require,module,exports){\nvar NewsRouter_1 = require(\"./../urls/NewsRouter\");\r\nvar NewsService_1 = require(\"./NewsService\");\r\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"./../authcore/AuthRedirect\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar NewsEditController = (function () {\r\n function NewsEditController($location, $routeParams, $timeout, authService, authManager, authRedirect, newsService, securityService, newsRouter) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.authService = authService;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.newsService = newsService;\r\n this.securityService = securityService;\r\n this.newsRouter = newsRouter;\r\n this.news = { type: \"ALL\" };\r\n this.businessUnitSelected = false;\r\n this.hasAllBusinessUnits = false;\r\n this.newsType = $routeParams[NewsRouter_1.NewsRouter.NEWS_TYPE_PARAM];\r\n this.newsId = $routeParams[NewsRouter_1.NewsRouter.ONE_NEWS_ID_PARAM];\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n if (!this.isAuthenticated) {\r\n authRedirect.redirectToLogOn();\r\n }\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissionsIf(this.newsId == null, function (systemPermissions) { return systemPermissions.addNews; })\r\n .demandNewsPermissionsIf(this.newsId != null, String(this.newsId), function (newsPermissions) { return newsPermissions.edit; });\r\n if (this.newsId) {\r\n this.loadNews();\r\n }\r\n else {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ALL_NEWS_MENU_KEY);\r\n var newsTypeLocal = this.newsType.toUpperCase();\r\n PageHeaderHelper_1.PageHeader.set().header(newsTypeLocal === \"NEWS\" ? \"Add News\" : \"Add Discussion\").update();\r\n this.news.type = newsTypeLocal;\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.user = user;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n });\r\n }\r\n }\r\n NewsEditController.prototype.loadNews = function () {\r\n var _this = this;\r\n this.newsService.getNews(this.newsId).then(function (n) {\r\n angular.copy(n, _this.news);\r\n var message = \"\";\r\n if (_this.news.type.toUpperCase() === \"HELP\") {\r\n message = \"Edit Help \";\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.FAQ_MENU_KEY);\r\n }\r\n else {\r\n message = \"Edit News \";\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ALL_NEWS_MENU_KEY);\r\n }\r\n PageHeaderHelper_1.PageHeader.set().header(message + \"‘\"\r\n + _this.news.title + \"’\").update();\r\n _this.businessUnitSelected = true;\r\n });\r\n };\r\n NewsEditController.prototype.save = function () {\r\n var _this = this;\r\n this.disabledSaveButton = true;\r\n var message = \"\";\r\n if (this.user && this.user.businessUnits && this.user.businessUnits.length == 1) {\r\n this.news.businessUnitId = this.user.businessUnits[0];\r\n }\r\n var promise = this.newsId\r\n ? this.newsService.update(this.news)\r\n : this.newsService.create(this.news);\r\n promise.then(function (n) {\r\n _this.disabledSaveButton = false;\r\n switch (_this.news.type.toUpperCase()) {\r\n case \"NEWS\":\r\n message = \"News has been saved\";\r\n break;\r\n case \"HELP\":\r\n message = \"Help has been saved\";\r\n break;\r\n case \"DISCUSSION\":\r\n message = \"Discussion has been saved\";\r\n }\r\n INotifier_1.notifier.success(message);\r\n _this.$location.url(_this.news.type.toUpperCase() === \"HELP\" ? _this.newsRouter.helpUrl(n.id) : _this.newsRouter.oneNewsUrl(n.id));\r\n });\r\n };\r\n NewsEditController.prototype.redirectOrClearFields = function () {\r\n if (this.newsId) {\r\n this.$location.url(this.newsRouter.oneNewsUrl(this.newsId));\r\n }\r\n else {\r\n this.$location.url(this.newsRouter.newsSearchUrl(this.newsType));\r\n }\r\n };\r\n NewsEditController.prototype.redirectToHelpDetailsOrClearFields = function () {\r\n if (this.newsId) {\r\n this.$location.url(this.newsRouter.helpUrl(this.newsId));\r\n }\r\n else {\r\n this.cleanFields();\r\n }\r\n };\r\n NewsEditController.prototype.cleanFields = function () {\r\n this.news = {};\r\n this.news.type = this.newsType;\r\n };\r\n NewsEditController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.businessUnitSelected = false;\r\n this.news.fullText = \"\";\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n };\r\n NewsEditController.NAME = \"news.NewsEditController\";\r\n NewsEditController.$inject = [\r\n \"$location\",\r\n \"$routeParams\",\r\n \"$timeout\",\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n NewsService_1.NewsService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n NewsRouter_1.NewsRouter.NAME\r\n ];\r\n return NewsEditController;\r\n})();\r\nexports.NewsEditController = NewsEditController;\r\n},{\"./../INotifier\":5,\"./../auth/AuthService\":18,\"./../authcore/AuthManager\":25,\"./../authcore/AuthRedirect\":26,\"./../security/SecurityService\":420,\"./../urls/NewsRouter\":481,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./NewsService\":354}],352:[function(require,module,exports){\nvar NewsService_1 = require(\"./NewsService\");\r\nvar NewsSearchController_1 = require(\"./NewsSearchController\");\r\nvar OneNewsController_1 = require(\"./OneNewsController\");\r\nvar NewsEditController_1 = require(\"./NewsEditController\");\r\nvar HelpDetailsController_1 = require(\"./HelpDetailsController\");\r\nvar AuthCoreModule_1 = require(\"./../authcore/AuthCoreModule\");\r\nvar SocialModule_1 = require(\"./../social/SocialModule\");\r\nvar SecurityModule_1 = require(\"./../security/SecurityModule\");\r\nexports.NewsModule = angular\r\n .module(\"news\", [\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n SocialModule_1.SocialModule.name,\r\n SecurityModule_1.SecurityModule.name\r\n])\r\n .service(NewsService_1.NewsService.NAME, NewsService_1.NewsService)\r\n .controller(NewsSearchController_1.NewsSearchController.NAME, NewsSearchController_1.NewsSearchController)\r\n .controller(OneNewsController_1.OneNewsController.NAME, OneNewsController_1.OneNewsController)\r\n .controller(NewsEditController_1.NewsEditController.NAME, NewsEditController_1.NewsEditController)\r\n .controller(HelpDetailsController_1.HelpDetailsController.NAME, HelpDetailsController_1.HelpDetailsController);\r\n},{\"./../authcore/AuthCoreModule\":24,\"./../security/SecurityModule\":419,\"./../social/SocialModule\":439,\"./HelpDetailsController\":350,\"./NewsEditController\":351,\"./NewsSearchController\":353,\"./NewsService\":354,\"./OneNewsController\":355}],353:[function(require,module,exports){\nvar NewsRouter_1 = require(\"./../urls/NewsRouter\");\r\nvar NewsService_1 = require(\"./NewsService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar Moment_1 = require(\"./../utils/Moment\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar PersonalService_1 = require(\"./../personal/PersonalService\");\r\nvar NewsSearchController = (function () {\r\n function NewsSearchController($http, $location, $routeParams, authManager, url, permissionsService, securityService, personalService, newsService, newsRouter) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.authManager = authManager;\r\n this.url = url;\r\n this.permissionsService = permissionsService;\r\n this.securityService = securityService;\r\n this.personalService = personalService;\r\n this.newsService = newsService;\r\n this.newsRouter = newsRouter;\r\n this.subscribe = false;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.newsType = $routeParams[NewsRouter_1.NewsRouter.NEWS_TYPE_PARAM];\r\n switch (this.newsType) {\r\n case \"news\":\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ALL_NEWS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"News\").update();\r\n this.stringSearch = \"Search in news\";\r\n break;\r\n case \"discussion\":\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.STUDENTS_OFFERS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Discussion board\").update();\r\n this.stringSearch = \"Search in discussions\";\r\n this.securityService.demandAuthentication();\r\n break;\r\n }\r\n this.permissionsService.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.newsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/news\")));\r\n this.newsGridModel.filter.type = this.newsType.toUpperCase();\r\n this.newsGridModel.loadCurrentPage();\r\n this.checkSubscription();\r\n }\r\n NewsSearchController.prototype.openOneNews = function (oneNewsId) {\r\n this.$location.url(this.newsRouter.oneNewsUrl(oneNewsId));\r\n };\r\n NewsSearchController.prototype.applyFilter = function () {\r\n this.newsGridModel.filter.dateFrom = Moment_1.Moment.textToJavaDate(this.newsGridModel.filter.dateFromText);\r\n this.newsGridModel.filter.dateTo = Moment_1.Moment.textToJavaDate(this.newsGridModel.filter.dateToText);\r\n this.newsGridModel.loadCurrentPage();\r\n };\r\n NewsSearchController.prototype.clearFilter = function () {\r\n this.newsGridModel.filter.searchString = null;\r\n this.newsGridModel.filter.tags = null;\r\n this.newsGridModel.filter.authorName = null;\r\n this.newsGridModel.filter.dateFrom = null;\r\n this.newsGridModel.filter.dateFromText = null;\r\n this.newsGridModel.filter.dateTo = null;\r\n this.newsGridModel.filter.dateToText = null;\r\n this.newsGridModel.loadCurrentPage();\r\n };\r\n NewsSearchController.prototype.checkSubscription = function () {\r\n var _this = this;\r\n this.newsService.checkNewsSubscription(this.newsType.toUpperCase()).then(function (result) {\r\n _this.subscribe = result;\r\n });\r\n };\r\n NewsSearchController.prototype.changeNewsSubscription = function () {\r\n var _this = this;\r\n this.personalService.changeNewsSubscription(this.newsType.toUpperCase()).then(function (result) {\r\n result\r\n ? _this.newsType == \"news\"\r\n ? INotifier_1.notifier.success(\"You successfully subscribed to news\")\r\n : INotifier_1.notifier.success(\"You successfully subscribed to discussion board\")\r\n : _this.newsType == \"news\"\r\n ? INotifier_1.notifier.success(\"You successfully unsubscribed from news\")\r\n : INotifier_1.notifier.success(\"You successfully unsubscribed from discussion board\");\r\n _this.subscribe = result;\r\n });\r\n };\r\n NewsSearchController.prototype.selectMessageNotFound = function () {\r\n this.stringNotFound = this.newsType == \"news\" ? \"No news found\" : \"No discussion found\";\r\n return this.stringNotFound;\r\n };\r\n NewsSearchController.NAME = \"news.NewsSearchController\";\r\n NewsSearchController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n AuthManager_1.AuthManager.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n NewsService_1.NewsService.NAME,\r\n NewsRouter_1.NewsRouter.NAME\r\n ];\r\n return NewsSearchController;\r\n})();\r\nexports.NewsSearchController = NewsSearchController;\r\n},{\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../INotifier\":5,\"./../authcore/AuthManager\":25,\"./../personal/PersonalService\":377,\"./../security/PermissionsService\":418,\"./../security/SecurityService\":420,\"./../urls/NewsRouter\":481,\"./../utils/MenuHelper\":517,\"./../utils/Moment\":518,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./NewsService\":354}],354:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar NewsService = (function () {\r\n function NewsService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n NewsService.prototype.deleteNewsById = function (id) {\r\n return this.$http.delete(this.url.base(\"/api/news/:id\").param(\":id\", id).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NewsService.prototype.getNews = function (id) {\r\n return this.$http.get(this.url.base(\"/api/news/:id\").param(\":id\", id).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NewsService.prototype.create = function (news) {\r\n return this.$http.post(this.url.service(\"/api/news\"), news)\r\n .then(function (result) { return result.data; });\r\n };\r\n NewsService.prototype.update = function (news) {\r\n return this.$http.put(this.url.service(\"/api/news\"), news)\r\n .then(function (result) { return result.data; });\r\n };\r\n NewsService.prototype.getHelpDetails = function () {\r\n return this.$http.get(this.url.base(\"/api/news/help\").service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NewsService.prototype.checkNewsSubscription = function (newsType) {\r\n return this.$http.get(this.url.base(\"/api/news/subscription?newsType=:newsType\")\r\n .param(\":newsType\", newsType).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NewsService.NAME = \"news.NewsService\";\r\n NewsService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME,\r\n ];\r\n return NewsService;\r\n})();\r\nexports.NewsService = NewsService;\r\n},{\"./../utils/UrlService\":528}],355:[function(require,module,exports){\nvar NewsRouter_1 = require(\"./../urls/NewsRouter\");\r\nvar NewsService_1 = require(\"./NewsService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar SocialService_1 = require(\"./../social/SocialService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"./../authcore/AuthRedirect\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar TreeElementsInfoFiller_1 = require(\"./../tree/TreeElementsInfoFiller\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar OneNewsController = (function () {\r\n function OneNewsController($http, $anchorScroll, $timeout, $location, $routeParams, url, authManager, authRedirect, newsService, socialService, securityService, newsRouter, permissionsApi, dialogService) {\r\n var _this = this;\r\n this.$anchorScroll = $anchorScroll;\r\n this.$timeout = $timeout;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.url = url;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.newsService = newsService;\r\n this.socialService = socialService;\r\n this.securityService = securityService;\r\n this.newsRouter = newsRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.dialogService = dialogService;\r\n this.news = {};\r\n this.newComment = {};\r\n this.newReplyComment = {};\r\n this.newsId = $routeParams[NewsRouter_1.NewsRouter.ONE_NEWS_ID_PARAM];\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n this.anchorComplete = false;\r\n if (this.isAuthenticated) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n }\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ALL_NEWS_MENU_KEY);\r\n this.loadNews();\r\n this.commentsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.base(\"/api/social/comments?objectId=:objectId&objectType=:objectType\")\r\n .param(\":objectId\", this.newsId)\r\n .param(\":objectType\", ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.NEWS])\r\n .service()));\r\n this.commentsGridModel.addLoadingListener(this);\r\n this.loadCommentsCount();\r\n }\r\n OneNewsController.prototype.startLoading = function () {\r\n };\r\n OneNewsController.prototype.endLoading = function () {\r\n var _this = this;\r\n TreeElementsInfoFiller_1.TreeElementsInfoFiller.fillHierarchyInfoWithMaxLevel(this.commentsGridModel.entries, Number.MAX_VALUE);\r\n this.$timeout(function () {\r\n _this.scrollAnchor();\r\n }, 0);\r\n };\r\n OneNewsController.prototype.scrollAnchor = function () {\r\n if (!this.anchorComplete) {\r\n this.$anchorScroll(this.$location.hash());\r\n this.anchorComplete = true;\r\n }\r\n };\r\n OneNewsController.prototype.loadNews = function () {\r\n var _this = this;\r\n this.newsService.getNews(this.newsId).then(function (n) {\r\n angular.copy(n, _this.news);\r\n if (n.type == \"DISCUSSION\") {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.STUDENTS_OFFERS_MENU_KEY);\r\n _this.securityService.demandAuthentication();\r\n }\r\n else {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ALL_NEWS_MENU_KEY);\r\n }\r\n PageHeaderHelper_1.PageHeader.set().header(n.title).update();\r\n });\r\n };\r\n OneNewsController.prototype.loadCommentsCount = function () {\r\n var _this = this;\r\n this.socialService.getCommentsCount(this.newsId, ReferencedObjectType_1.ReferencedObjectType.NEWS).then(function (result) {\r\n _this.commentsCount = result;\r\n });\r\n };\r\n OneNewsController.prototype.addComment = function (reply, parentId) {\r\n var _this = this;\r\n if (reply) {\r\n this.newReplyComment.parentId = parentId;\r\n }\r\n this.socialService.addComment(this.newsId, this.news.version, ReferencedObjectType_1.ReferencedObjectType.NEWS, reply ? this.newReplyComment : this.newComment).then(function (result) {\r\n INotifier_1.notifier.success(\"Comment has been added\");\r\n _this.commentsGridModel.loadCurrentPage();\r\n _this.newComment.text = \"\";\r\n _this.newReplyComment.text = \"\";\r\n _this.newReplyComment.parentId = null;\r\n _this.loadCommentsCount();\r\n });\r\n };\r\n OneNewsController.prototype.cleanComment = function () {\r\n this.newComment.text = \"\";\r\n this.newReplyComment.text = \"\";\r\n this.newReplyComment.parentId = null;\r\n };\r\n OneNewsController.prototype.replyComment = function (commentId) {\r\n this.commentsGridModel.entries.forEach(function (c) {\r\n c.reply = c.id == commentId;\r\n });\r\n };\r\n OneNewsController.prototype.toggleReplyMessages = function (comment) {\r\n var array = [comment.id];\r\n var parent = this.commentsGridModel.entries.filter(function (entry) { return comment.id == entry.parentId; });\r\n while (parent.length > 0) {\r\n parent.forEach(function (parent) {\r\n array.push(parent.id);\r\n parent.children.forEach(function (child) { return array.push(child.id); });\r\n });\r\n parent = this.commentsGridModel.entries.filter(function (entry) { return parent[0].id == entry.parentId; });\r\n }\r\n array = array.filter(function (item, pos) {\r\n return array.indexOf(item) == pos;\r\n });\r\n array.forEach(function (num) {\r\n $(\"#news-single_\" + num)\r\n .closest('.messages-single')\r\n .toggleClass(\"active\");\r\n });\r\n };\r\n OneNewsController.prototype.deleteNews = function (news) {\r\n var _this = this;\r\n var title;\r\n var type;\r\n if (news.type == \"NEWS\") {\r\n type = \"This news \";\r\n title = \"Delete news \";\r\n }\r\n else if (news.type == \"DISCUSSION\") {\r\n type = \"This discussion \";\r\n title = \"Delete discussion \";\r\n }\r\n else {\r\n type = \"This \" + news.type;\r\n title = \"Delete \";\r\n }\r\n this.dialogService.confirm(type + ' will be removed from the system. Continue?', {\r\n title: title,\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n }).then(function () {\r\n _this.newsService.deleteNewsById(news.id).then(function () {\r\n _this.$location.url(_this.newsRouter.newsSearchUrl(news.type));\r\n });\r\n });\r\n };\r\n OneNewsController.NAME = \"news.OneNewsController\";\r\n OneNewsController.$inject = [\r\n \"$http\",\r\n \"$anchorScroll\",\r\n \"$timeout\",\r\n \"$location\",\r\n \"$routeParams\",\r\n UrlService_1.UrlService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n NewsService_1.NewsService.NAME,\r\n SocialService_1.SocialService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n NewsRouter_1.NewsRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return OneNewsController;\r\n})();\r\nexports.OneNewsController = OneNewsController;\r\n},{\"../components/dialog/DialogService\":166,\"../security/PermissionsService\":418,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../INotifier\":5,\"./../ReferencedObjectType\":7,\"./../authcore/AuthManager\":25,\"./../authcore/AuthRedirect\":26,\"./../security/SecurityService\":420,\"./../social/SocialService\":440,\"./../tree/TreeElementsInfoFiller\":460,\"./../urls/NewsRouter\":481,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./NewsService\":354}],356:[function(require,module,exports){\n(function (NewsKey) {\r\n NewsKey[NewsKey[\"HELP_DEFAULT\"] = 1000] = \"HELP_DEFAULT\";\r\n NewsKey[NewsKey[\"HELP_SYSTEM_SETTINGS\"] = 1001] = \"HELP_SYSTEM_SETTINGS\";\r\n NewsKey[NewsKey[\"HELP_PAY_PAL_SUBSCRIPTIONS\"] = 1002] = \"HELP_PAY_PAL_SUBSCRIPTIONS\";\r\n NewsKey[NewsKey[\"HELP_AUTHORIZE_NET_PAYMENT_METHOD\"] = 1003] = \"HELP_AUTHORIZE_NET_PAYMENT_METHOD\";\r\n NewsKey[NewsKey[\"HELP_MS_TEAMS_WEBINAR_TYPE\"] = 1004] = \"HELP_MS_TEAMS_WEBINAR_TYPE\";\r\n NewsKey[NewsKey[\"HELP_PAY_PAL_PAYMENT_METHOD\"] = 1015] = \"HELP_PAY_PAL_PAYMENT_METHOD\";\r\n NewsKey[NewsKey[\"HELP_ZOOM\"] = 1016] = \"HELP_ZOOM\";\r\n NewsKey[NewsKey[\"HELP_SLIDE_DECK\"] = 1017] = \"HELP_SLIDE_DECK\";\r\n})(exports.NewsKey || (exports.NewsKey = {}));\r\nvar NewsKey = exports.NewsKey;\r\n},{}],357:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar NotificationController = (function () {\r\n function NotificationController() {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_NOTIFICATION_TEMPLATE_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Notification Templates\").update();\r\n }\r\n NotificationController.NAME = \"notificationTemplates.NotificationController\";\r\n NotificationController.$inject = [];\r\n return NotificationController;\r\n})();\r\nexports.NotificationController = NotificationController;\r\n},{\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],358:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar NotificationCreateEditController = (function () {\r\n function NotificationCreateEditController() {\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_NOTIFICATION_TEMPLATE_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit notification template\").update();\r\n }\r\n NotificationCreateEditController.NAME = \"notificationTemplates.NotificationCreateEditController\";\r\n NotificationCreateEditController.$inject = [];\r\n return NotificationCreateEditController;\r\n})();\r\nexports.NotificationCreateEditController = NotificationCreateEditController;\r\n},{\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],359:[function(require,module,exports){\nvar NotificationService_1 = require(\"./NotificationService\");\r\nvar NotificationController_1 = require(\"./NotificationController\");\r\nvar NotificationCreateEditController_1 = require(\"./NotificationCreateEditController\");\r\nexports.NotificationModule = angular\r\n .module(\"notificationTemplates\", [])\r\n .service(NotificationService_1.NotificationService.NAME, NotificationService_1.NotificationService)\r\n .controller(NotificationController_1.NotificationController.NAME, NotificationController_1.NotificationController)\r\n .controller(NotificationCreateEditController_1.NotificationCreateEditController.NAME, NotificationCreateEditController_1.NotificationCreateEditController);\r\n},{\"./NotificationController\":357,\"./NotificationCreateEditController\":358,\"./NotificationService\":360}],360:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar NotificationService = (function () {\r\n function NotificationService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n NotificationService.prototype.setActiveProperty = function (notificationTemplateId, version, active, businessUnitId, referenceObjectId) {\r\n var url = \"/api/notificationTemplates/:notificationTemplateId/inactive/:active?version=:version\";\r\n if (businessUnitId) {\r\n url = url + \"&businessUnitId=:businessUnitId\";\r\n }\r\n if (referenceObjectId) {\r\n url = url + \"&referenceObjectId=:referenceObjectId\";\r\n }\r\n var parameterizedUrl = this.url.base(url)\r\n .param(\":notificationTemplateId\", notificationTemplateId)\r\n .param(\":active\", active)\r\n .param(\":version\", version);\r\n if (businessUnitId) {\r\n parameterizedUrl.param(\":businessUnitId\", businessUnitId);\r\n }\r\n if (referenceObjectId) {\r\n parameterizedUrl.param(\":referenceObjectId\", referenceObjectId);\r\n }\r\n return this.$http.get(parameterizedUrl.service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NotificationService.prototype.getNotificationTemplateDetailsById = function (notificationTemplateId) {\r\n return this.$http.get(this.url.base(\"/api/notificationTemplates/:notificationTemplateId/details\")\r\n .param(\":notificationTemplateId\", notificationTemplateId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NotificationService.prototype.getUsageRecipientsTags = function (templateDetailsId) {\r\n return this.$http.get(this.url.base(\"/api/notificationTemplates/:templateDetailsId/recipients\")\r\n .param(\":templateDetailsId\", templateDetailsId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NotificationService.prototype.getUsageCCRecipientsTags = function (templateDetailsId) {\r\n return this.$http.get(this.url.base(\"/api/notificationTemplates/:templateDetailsId/cc/recipients\")\r\n .param(\":templateDetailsId\", templateDetailsId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NotificationService.prototype.saveNotificationTemplateDetails = function (templateDetails) {\r\n return this.$http.post(this.url.service(\"/api/notificationTemplates/save\"), templateDetails)\r\n .then(function (result) { return result.data; });\r\n };\r\n NotificationService.prototype.removeNotificationTemplateDetails = function (templateDetailsId) {\r\n return this.$http.delete(this.url.base(\"/api/notificationTemplates/:templateDetailsId/remove\")\r\n .param(\":templateDetailsId\", templateDetailsId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NotificationService.prototype.deactivateCourseTemplate = function (templateDetailsId, referenceObjId, referenceObjType) {\r\n return this.$http.get(this.url.base(\"/api/notificationTemplates/:templateDetailsId/course/deactivate?referenceObjId=:referenceObjId&referenceObjType=:referenceObjType\")\r\n .param(\":templateDetailsId\", templateDetailsId)\r\n .param(\":referenceObjId\", referenceObjId)\r\n .param(\":referenceObjType\", referenceObjType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NotificationService.prototype.getNotificationTemplateDetailsForRevert = function (notificationTemplateId) {\r\n return this.$http.get(this.url.base(\"/api/notificationTemplates/:notificationTemplateId/detailsForRevert\")\r\n .param(\":notificationTemplateId\", notificationTemplateId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n NotificationService.NAME = \"notificationTemplates.NotificationService\";\r\n NotificationService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return NotificationService;\r\n})();\r\nexports.NotificationService = NotificationService;\r\n},{\"../utils/UrlService\":528}],361:[function(require,module,exports){\n(function (NotificationEventKey) {\r\n NotificationEventKey[NotificationEventKey[\"C_CMPL\"] = 1] = \"C_CMPL\";\r\n NotificationEventKey[NotificationEventKey[\"P_PRCHS_LRNR\"] = 2] = \"P_PRCHS_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"C_CERT_EXP_RMNDER\"] = 3] = \"C_CERT_EXP_RMNDER\";\r\n NotificationEventKey[NotificationEventKey[\"C_ENRLMT_LRNR\"] = 4] = \"C_ENRLMT_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"P_PRCHS_EXP_RMNDER\"] = 5] = \"P_PRCHS_EXP_RMNDER\";\r\n NotificationEventKey[NotificationEventKey[\"C_INCMPL\"] = 6] = \"C_INCMPL\";\r\n NotificationEventKey[NotificationEventKey[\"C_INCMPL_RMNDER\"] = 7] = \"C_INCMPL_RMNDER\";\r\n NotificationEventKey[NotificationEventKey[\"C_NW_AVLBL_LRNR\"] = 8] = \"C_NW_AVLBL_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"P_PRCHS_CNCLD\"] = 9] = \"P_PRCHS_CNCLD\";\r\n NotificationEventKey[NotificationEventKey[\"CR_TRFR_ERR_MGR\"] = 10] = \"CR_TRFR_ERR_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"C_EXPIRED\"] = 11] = \"C_EXPIRED\";\r\n NotificationEventKey[NotificationEventKey[\"C_LP_CERT_EXP\"] = 12] = \"C_LP_CERT_EXP\";\r\n NotificationEventKey[NotificationEventKey[\"C_START\"] = 13] = \"C_START\";\r\n NotificationEventKey[NotificationEventKey[\"C_START_RMNDER\"] = 14] = \"C_START_RMNDER\";\r\n NotificationEventKey[NotificationEventKey[\"C_PROGRESS_START\"] = 15] = \"C_PROGRESS_START\";\r\n NotificationEventKey[NotificationEventKey[\"C_ENRLMT_PDAPPRV_LRN\"] = 16] = \"C_ENRLMT_PDAPPRV_LRN\";\r\n NotificationEventKey[NotificationEventKey[\"C_ENRLMT_PDAPPRV_MGR\"] = 17] = \"C_ENRLMT_PDAPPRV_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"C_ENRLMT_PDAPPRV_MGR_RMNDER\"] = 18] = \"C_ENRLMT_PDAPPRV_MGR_RMNDER\";\r\n NotificationEventKey[NotificationEventKey[\"C_ENRLMT_WTLIST_LRNR\"] = 19] = \"C_ENRLMT_WTLIST_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"C_ENRLMT_MGR\"] = 20] = \"C_ENRLMT_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"C_ENRLMT_REJECTED\"] = 21] = \"C_ENRLMT_REJECTED\";\r\n NotificationEventKey[NotificationEventKey[\"C_UNENRLMT_LRNR\"] = 22] = \"C_UNENRLMT_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"C_UNENRLMT_MGR\"] = 23] = \"C_UNENRLMT_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"C_AVLBL_LRNR\"] = 24] = \"C_AVLBL_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"P_PRCHS_MGR\"] = 25] = \"P_PRCHS_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"P_PRCHS_EXP\"] = 26] = \"P_PRCHS_EXP\";\r\n NotificationEventKey[NotificationEventKey[\"P_PRCHS_NEW_ITM\"] = 27] = \"P_PRCHS_NEW_ITM\";\r\n NotificationEventKey[NotificationEventKey[\"S_SCHDL\"] = 28] = \"S_SCHDL\";\r\n NotificationEventKey[NotificationEventKey[\"S_RGSTRD_LRNR\"] = 29] = \"S_RGSTRD_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"S_RGSTRD_MGR\"] = 30] = \"S_RGSTRD_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"S_UNRGSTRD_LRNR\"] = 31] = \"S_UNRGSTRD_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"S_UNRGSTRD_MGR\"] = 32] = \"S_UNRGSTRD_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"S_RGSTR_WTLIST_LRNR\"] = 33] = \"S_RGSTR_WTLIST_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"S_AVLBL_LRNR\"] = 34] = \"S_AVLBL_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"S_ATTD_LRNR\"] = 35] = \"S_ATTD_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"S_ATTD_MGR\"] = 36] = \"S_ATTD_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"S_MSD_LRNR\"] = 37] = \"S_MSD_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"S_MSD_MGR\"] = 38] = \"S_MSD_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"S_CNCLD_MGR\"] = 39] = \"S_CNCLD_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"S_EXTRA_USERS_RMNDER\"] = 51] = \"S_EXTRA_USERS_RMNDER\";\r\n NotificationEventKey[NotificationEventKey[\"U_RGSR_URS\"] = 40] = \"U_RGSR_URS\";\r\n NotificationEventKey[NotificationEventKey[\"U_RGSR_MGR\"] = 41] = \"U_RGSR_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"U_TRL_RGSR_URS\"] = 42] = \"U_TRL_RGSR_URS\";\r\n NotificationEventKey[NotificationEventKey[\"U_TRL_RGSR_ADM\"] = 43] = \"U_TRL_RGSR_ADM\";\r\n NotificationEventKey[NotificationEventKey[\"U_RST_PSWD\"] = 44] = \"U_RST_PSWD\";\r\n NotificationEventKey[NotificationEventKey[\"U_CHNG_LCTN\"] = 53] = \"U_CHNG_LCTN\";\r\n NotificationEventKey[NotificationEventKey[\"A_SCRD_LRNR\"] = 45] = \"A_SCRD_LRNR\";\r\n NotificationEventKey[NotificationEventKey[\"A_NEW_MGR\"] = 46] = \"A_NEW_MGR\";\r\n NotificationEventKey[NotificationEventKey[\"LP_CMPL\"] = 47] = \"LP_CMPL\";\r\n NotificationEventKey[NotificationEventKey[\"LP_PROGRESS_START\"] = 48] = \"LP_PROGRESS_START\";\r\n NotificationEventKey[NotificationEventKey[\"C_EXPIRED_RMNDER\"] = 49] = \"C_EXPIRED_RMNDER\";\r\n})(exports.NotificationEventKey || (exports.NotificationEventKey = {}));\r\nvar NotificationEventKey = exports.NotificationEventKey;\r\nexports.systemEvents = [\r\n NotificationEventKey[NotificationEventKey.U_RST_PSWD],\r\n NotificationEventKey[NotificationEventKey.U_CHNG_LCTN],\r\n NotificationEventKey[NotificationEventKey.U_TRL_RGSR_URS],\r\n NotificationEventKey[NotificationEventKey.U_TRL_RGSR_ADM],\r\n NotificationEventKey[NotificationEventKey.S_EXTRA_USERS_RMNDER]\r\n];\r\nexports.hiddenEvents = [\r\n NotificationEventKey[NotificationEventKey.P_PRCHS_CNCLD],\r\n NotificationEventKey[NotificationEventKey.CR_TRFR_ERR_MGR]\r\n];\r\nexports.reminders = [\r\n NotificationEventKey.C_CERT_EXP_RMNDER,\r\n NotificationEventKey.P_PRCHS_EXP_RMNDER,\r\n NotificationEventKey.C_INCMPL_RMNDER,\r\n NotificationEventKey.C_START_RMNDER,\r\n NotificationEventKey.C_ENRLMT_PDAPPRV_MGR_RMNDER,\r\n NotificationEventKey.C_EXPIRED_RMNDER,\r\n NotificationEventKey.S_EXTRA_USERS_RMNDER\r\n];\r\nexports.delayedEvents = [\r\n NotificationEventKey.C_CMPL\r\n];\r\n},{}],362:[function(require,module,exports){\n(function (NotificationTemplatesScope) {\r\n NotificationTemplatesScope[NotificationTemplatesScope[\"DEFAULT\"] = 0] = \"DEFAULT\";\r\n NotificationTemplatesScope[NotificationTemplatesScope[\"SYSTEM\"] = 1] = \"SYSTEM\";\r\n NotificationTemplatesScope[NotificationTemplatesScope[\"BUSINESS_UNIT\"] = 2] = \"BUSINESS_UNIT\";\r\n NotificationTemplatesScope[NotificationTemplatesScope[\"REFERENCE_ENTITY\"] = 3] = \"REFERENCE_ENTITY\";\r\n})(exports.NotificationTemplatesScope || (exports.NotificationTemplatesScope = {}));\r\nvar NotificationTemplatesScope = exports.NotificationTemplatesScope;\r\n},{}],363:[function(require,module,exports){\nvar SettingsModule_1 = require(\"../settings/SettingsModule\");\r\nvar UsersModule_1 = require(\"../users/UsersModule\");\r\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar ReferenceModule_1 = require(\"../reference/ReferenceModule\");\r\nvar AssessmentsService_1 = require(\"../assessments/AssessmentsService\");\r\nvar AssessmentsController_1 = require(\"../assessments/AssessmentsController\");\r\nvar AssessmentsDetailsController_1 = require(\"../assessments/AssessmentsDetailsController\");\r\nexports.AssessmentsModule = angular\r\n .module(\"assessments\", [\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n SettingsModule_1.SettingsModule.name,\r\n ReferenceModule_1.ReferenceModule.name,\r\n UsersModule_1.UsersModule.name\r\n])\r\n .service(AssessmentsService_1.AssessmentsService.NAME, AssessmentsService_1.AssessmentsService)\r\n .controller(AssessmentsController_1.AssessmentsController.NAME, AssessmentsController_1.AssessmentsController)\r\n .controller(AssessmentsDetailsController_1.AssessmentsDetailsController.NAME, AssessmentsDetailsController_1.AssessmentsDetailsController);\r\n},{\"../assessments/AssessmentsController\":13,\"../assessments/AssessmentsDetailsController\":14,\"../assessments/AssessmentsService\":15,\"../reference/ReferenceModule\":407,\"../security/SecurityModule\":419,\"../settings/SettingsModule\":426,\"../urls/UrlsModule\":492,\"../users/UsersModule\":504}],364:[function(require,module,exports){\nvar CalendarEventTypeEnum_1 = require(\"./models/CalendarEventTypeEnum\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar SessionTypeEnum_1 = require(\"./models/SessionTypeEnum\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PersonalService_1 = require(\"./PersonalService\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar TimeZoneType_1 = require(\"../webinars/models/TimeZoneType\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar CalendarController = (function () {\r\n function CalendarController($scope, $location, $window, coursesRouter, securityService, personalService, courseService, commonFilterService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.coursesRouter = coursesRouter;\r\n this.securityService = securityService;\r\n this.personalService = personalService;\r\n this.courseService = courseService;\r\n this.commonFilterService = commonFilterService;\r\n this.searchString = \"\";\r\n this.isDataLoading = true;\r\n this.timeZone = TimeZoneType_1.TimeZone;\r\n this.onResizeFunction = function (event) {\r\n _this.destroyKendoGrid();\r\n _this.changeViewArray();\r\n _this.initKendoGrid();\r\n _this.filter();\r\n };\r\n this.filter = function () {\r\n var scheduler = $(\"#scheduler\").data(\"kendoScheduler\");\r\n var filter = { logic: 'and', filters: [] };\r\n var searchFilter = { logic: 'or', filters: [] };\r\n var checkBoxesFilter = { logic: 'or', filters: [] };\r\n if (_this.courseCheckbox) {\r\n checkBoxesFilter.filters.push({\r\n field: 'eventType',\r\n operator: 'eq',\r\n value: CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.AVAILABLE_COURSE]\r\n });\r\n sessionStorage.setItem(\"vhsCalendarFilter.courseCheckbox\", \"true\");\r\n }\r\n else {\r\n sessionStorage.setItem(\"vhsCalendarFilter.courseCheckbox\", \"false\");\r\n }\r\n if (_this.iltSessionCheckbox) {\r\n var iltFilter = { logic: 'and', filters: [] };\r\n iltFilter.filters.push({\r\n field: 'eventType',\r\n operator: 'eq',\r\n value: CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.NOT_REGISTERED_SESSION]\r\n });\r\n iltFilter.filters.push({\r\n field: 'sessionType',\r\n operator: 'eq',\r\n value: SessionTypeEnum_1.SessionTypeEnum[SessionTypeEnum_1.SessionTypeEnum.ILT_SESSION]\r\n });\r\n checkBoxesFilter.filters.push(iltFilter);\r\n sessionStorage.setItem(\"vhsCalendarFilter.iltSessionCheckbox\", \"true\");\r\n }\r\n else {\r\n sessionStorage.setItem(\"vhsCalendarFilter.iltSessionCheckbox\", \"false\");\r\n }\r\n if (_this.registeredOrWaitlistedCheckbox) {\r\n checkBoxesFilter.filters.push({\r\n field: 'eventType',\r\n operator: 'eq',\r\n value: CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.REGISTERED_SESSION]\r\n });\r\n sessionStorage.setItem(\"vhsCalendarFilter.registeredOrWaitlistedCheckbox\", \"true\");\r\n }\r\n else {\r\n sessionStorage.setItem(\"vhsCalendarFilter.registeredOrWaitlistedCheckbox\", \"false\");\r\n }\r\n if (_this.viltSessionCheckbox) {\r\n var vIltFilter = { logic: 'and', filters: [] };\r\n vIltFilter.filters.push({\r\n field: 'eventType',\r\n operator: 'eq',\r\n value: CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.NOT_REGISTERED_SESSION]\r\n });\r\n vIltFilter.filters.push({\r\n field: 'sessionType',\r\n operator: 'eq',\r\n value: SessionTypeEnum_1.SessionTypeEnum[SessionTypeEnum_1.SessionTypeEnum.vILT_SESSION]\r\n });\r\n checkBoxesFilter.filters.push(vIltFilter);\r\n sessionStorage.setItem(\"vhsCalendarFilter.viltSessionCheckbox\", \"true\");\r\n }\r\n else {\r\n sessionStorage.setItem(\"vhsCalendarFilter.viltSessionCheckbox\", \"false\");\r\n }\r\n if (_this.notAvailableForRegistrationCheckbox) {\r\n checkBoxesFilter.filters.push({\r\n field: 'eventType',\r\n operator: 'eq',\r\n value: CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.NOT_AVAILABLE_SESSION]\r\n });\r\n sessionStorage.setItem(\"vhsCalendarFilter.notAvailableForRegistrationCheckbox\", \"true\");\r\n }\r\n else {\r\n sessionStorage.setItem(\"vhsCalendarFilter.notAvailableForRegistrationCheckbox\", \"false\");\r\n }\r\n if (_this.searchString != null && _this.searchString != \"\") {\r\n searchFilter.filters.push({ field: 'description', operator: 'contains', value: _this.searchString });\r\n searchFilter.filters.push({ field: 'courseName', operator: 'contains', value: _this.searchString });\r\n searchFilter.filters.push({ field: 'title', operator: 'contains', value: _this.searchString });\r\n }\r\n if (checkBoxesFilter.filters.length > 0) {\r\n filter.filters.push(checkBoxesFilter);\r\n }\r\n if (searchFilter.filters.length > 0) {\r\n filter.filters.push(searchFilter);\r\n }\r\n if (filter.filters.length > 0) {\r\n scheduler.dataSource.filter(filter);\r\n }\r\n else {\r\n scheduler.dataSource.filter({});\r\n }\r\n };\r\n this.clearFilter = function () {\r\n _this.searchString = \"\";\r\n _this.courseCheckbox = false;\r\n _this.iltSessionCheckbox = true;\r\n _this.notAvailableForRegistrationCheckbox = true;\r\n _this.registeredOrWaitlistedCheckbox = true;\r\n _this.viltSessionCheckbox = true;\r\n sessionStorage.setItem(\"vhsCalendarFilter.searchString\", \"\");\r\n sessionStorage.setItem(\"vhsCalendarFilter.courseCheckbox\", \"false\");\r\n sessionStorage.setItem(\"vhsCalendarFilter.iltSessionCheckbox\", \"true\");\r\n sessionStorage.setItem(\"vhsCalendarFilter.registeredOrWaitlistedCheckbox\", \"true\");\r\n sessionStorage.setItem(\"vhsCalendarFilter.viltSessionCheckbox\", \"true\");\r\n sessionStorage.setItem(\"vhsCalendarFilter.notAvailableForRegistrationCheckbox\", \"true\");\r\n _this.filter();\r\n };\r\n this.securityService.demandAuthentication();\r\n this.isMobile = /Mobile|webOS|BlackBerry|IEMobile|MeeGo|mini|Fennec|Windows Phone|Android|iP(ad|od|hone)/i.test(navigator.userAgent);\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_CALENDAR_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Calendar\").update();\r\n this.personalService.getCalendarEvents().then(function (result) {\r\n _this.events = angular.copy(result);\r\n _this.events.forEach(function (event) {\r\n switch (event.eventType) {\r\n case CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.NOT_REGISTERED_SESSION]:\r\n if (event.sessionType == SessionTypeEnum_1.SessionTypeEnum[SessionTypeEnum_1.SessionTypeEnum.ILT_SESSION]) {\r\n event.color = \"#4836B8\";\r\n break;\r\n }\r\n else {\r\n event.color = \"#DE2BB7\";\r\n break;\r\n }\r\n case CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.REGISTERED_SESSION]:\r\n event.color = \"#36B84A\";\r\n break;\r\n case CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.NOT_AVAILABLE_SESSION]:\r\n event.color = \"#2aa1c0\";\r\n break;\r\n case CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.AVAILABLE_COURSE]:\r\n event.color = \"#9e9e9e\";\r\n break;\r\n }\r\n if (event.eventType == CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.AVAILABLE_COURSE]) {\r\n event.isAllDay = true;\r\n event.start = new Date(event.startDate);\r\n event.end = new Date(event.startDate);\r\n }\r\n else {\r\n event.isAllDay = false;\r\n event.start = new Date(_this.dateToTimeZoneDate(event.timezone, event.startDate));\r\n event.start.setHours(new Date(event.startDate).getHours());\r\n event.start.setMinutes(new Date(event.startDate).getMinutes());\r\n event.end = new Date(_this.dateToTimeZoneDate(event.timezone, event.endDate));\r\n event.end.setHours(new Date(event.endDate).getHours());\r\n event.end.setMinutes(new Date(event.endDate).getMinutes());\r\n }\r\n });\r\n _this.isDataLoading = false;\r\n _this.loadFilterFromStorage();\r\n _this.changeViewArray();\r\n _this.initKendoGrid();\r\n _this.filter();\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.$window.removeEventListener(\"resize\", _this.onResizeFunction);\r\n });\r\n this.$window.addEventListener(\"resize\", this.onResizeFunction);\r\n }\r\n CalendarController.prototype.dateToTimeZoneDate = function (timeZone, date) {\r\n var _this = this;\r\n var offset;\r\n this.timeZone.forEach(function (t) {\r\n if (t.name == timeZone) {\r\n offset = _this.getTimeZoneOffset(t.value);\r\n }\r\n });\r\n return (date + new Date().getTimezoneOffset() * 60000 - offset);\r\n };\r\n CalendarController.prototype.getTimeZoneOffset = function (timeZone) {\r\n var now = new Date();\r\n var localTime = Math.floor((now.getTime() / 1000)) * 1000;\r\n var timeZoneTime = new Date(now.toLocaleString(\"en-US\", { timeZone: timeZone })).getTime();\r\n return now.getTimezoneOffset() * 60000 + (localTime - timeZoneTime);\r\n };\r\n CalendarController.prototype.destroyKendoGrid = function () {\r\n var scheduler = $(\"#scheduler\").data(\"kendoScheduler\");\r\n scheduler.destroy();\r\n var listOfToolbarElements = document.getElementsByClassName(\"k-scheduler-toolbar k-toolbar\");\r\n if (listOfToolbarElements.length != 0) {\r\n var element = listOfToolbarElements.item(0);\r\n element.remove();\r\n }\r\n $(\"#scheduler\").off(\"click\", \".k-event\");\r\n $(\"#scheduler\").off(\"click\", \".k-task\");\r\n };\r\n CalendarController.prototype.initKendoGrid = function () {\r\n var _this = this;\r\n var scheduler = new kendo.ui.Scheduler(document.getElementById(\"scheduler\"), {\r\n date: new Date,\r\n height: 655,\r\n views: this.viewsForKendo,\r\n editable: false,\r\n showWorkHours: false,\r\n footer: false,\r\n workDayStart: new Date(\"12.00 AM\"),\r\n workDayEnd: new Date(\"11.00 PM\"),\r\n dataSource: this.events,\r\n resources: [\r\n {\r\n field: \"color\",\r\n dataColorField: \"color\",\r\n dataValueField: \"color\",\r\n dataSource: [\r\n { color: \"#4836B8\" },\r\n { color: \"#DE2BB7\" },\r\n { color: \"#36B84A\" },\r\n { color: \"#2aa1c0\" },\r\n { color: \"#9e9e9e\" },\r\n ]\r\n }\r\n ],\r\n moveStart: function (e) {\r\n e.preventDefault();\r\n },\r\n resizeStart: function (e) {\r\n e.preventDefault();\r\n }\r\n });\r\n scheduler.wrapper.kendoTooltip({\r\n filter: \".k-event\",\r\n position: \"right\",\r\n width: 230,\r\n content: function (e) {\r\n var target = e.target;\r\n var event = scheduler.occurrenceByUid(target.data(\"uid\"));\r\n if (event.get(\"eventType\") == CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.AVAILABLE_COURSE]) {\r\n return \"
    Course
    \\n

    Name: \" + event.title + \"

    \\n

    Starting date: \" + (event.start.getMonth() + 1\r\n + \"/\" + event.start.getDate() + \"/\" + event.start.getFullYear()) + \"

    \";\r\n }\r\n else {\r\n var tooltipDescription = \"

    \" + (event.start.getMonth() + 1\r\n + \"/\" + event.start.getDate() + \"/\" + event.start.getFullYear()) + \", \\n \" + ((event.start.getHours().toString().length == 2 ? event.start.getHours() : \"0\" + event.start.getHours()) + \":\" + (event.start.getMinutes().toString().length == 2 ? event.start.getMinutes() : \"0\" + event.start.getMinutes())\r\n + \" - \" + (event.end.getHours().toString().length == 2 ? event.end.getHours() : \"0\" + event.end.getHours()) + \":\" + (event.end.getMinutes().toString().length == 2 ? event.end.getMinutes() : \"0\" + event.end.getMinutes())) + \"

    \\n

    Title: \" + event.title + \"

    \\n

    Course: \" + event.get(\"courseName\") + \"

    \";\r\n if (event.description != null) {\r\n tooltipDescription = tooltipDescription + (\"

    Description: \" + event.description + \"

    \");\r\n }\r\n if (event.get(\"sessionType\") == SessionTypeEnum_1.SessionTypeEnum[SessionTypeEnum_1.SessionTypeEnum.ILT_SESSION]) {\r\n return \"
    ILT session
    \" + tooltipDescription + (\"

    Location: \" + event.get(\"location\") + \"

    \");\r\n }\r\n else {\r\n return \"
    vILT session
    \" + tooltipDescription;\r\n }\r\n }\r\n }\r\n });\r\n $(\"#scheduler\").on(\"click\", \".k-event\", function (e) {\r\n _this.onSchedulerEventClick(e);\r\n });\r\n $(\"#scheduler\").on(\"click\", \".k-task\", function (e) {\r\n _this.onSchedulerEventClick(e);\r\n });\r\n };\r\n CalendarController.prototype.onSchedulerEventClick = function (e) {\r\n var _this = this;\r\n var scheduler = $(\"#scheduler\").data(\"kendoScheduler\");\r\n var event = scheduler.dataSource.getByUid($(e.currentTarget).attr(\"data-uid\"));\r\n scheduler.destroy();\r\n if (event.get(\"sessionType\") == SessionTypeEnum_1.SessionTypeEnum[SessionTypeEnum_1.SessionTypeEnum.ILT_SESSION]) {\r\n if (event.get(\"eventType\") != CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.NOT_AVAILABLE_SESSION]) {\r\n this.courseService.getSectionAndModuleIdsByILTSessionId(event.get(\"courseId\"), event.get(\"id\")).then(function (result) {\r\n _this.$location.url(_this.coursesRouter.sectionDetailsRoute(event.get(\"courseId\"), result.moduleId, result.sectionId));\r\n });\r\n }\r\n else {\r\n this.$location.url(this.coursesRouter.detailsUrl(event.get(\"courseId\")));\r\n }\r\n }\r\n else if (event.get(\"sessionType\") == SessionTypeEnum_1.SessionTypeEnum[SessionTypeEnum_1.SessionTypeEnum.vILT_SESSION]) {\r\n if (event.get(\"eventType\") != CalendarEventTypeEnum_1.CalendarEventTypeEnum[CalendarEventTypeEnum_1.CalendarEventTypeEnum.NOT_AVAILABLE_SESSION]) {\r\n this.courseService.getSectionAndModuleIdsByVILTSessionId(event.get(\"courseId\"), event.get(\"id\")).then(function (result) {\r\n _this.$location.url(_this.coursesRouter.sectionDetailsRoute(event.get(\"courseId\"), result.moduleId, result.sectionId));\r\n });\r\n }\r\n else {\r\n this.$location.url(this.coursesRouter.detailsUrl(event.get(\"courseId\")));\r\n }\r\n }\r\n else {\r\n this.$location.url(this.coursesRouter.detailsUrl(event.get(\"courseId\")));\r\n }\r\n };\r\n CalendarController.prototype.changeViewArray = function () {\r\n if (document.documentElement.clientWidth <= 991 || this.isMobile) {\r\n this.viewsForKendo = [{ type: \"agenda\", selected: true }];\r\n }\r\n else {\r\n this.viewsForKendo = [\"month\", \"week\", \"day\", \"agenda\"];\r\n }\r\n };\r\n CalendarController.prototype.openFilterModal = function () {\r\n $(\"#filterDialog\").modal(\"show\");\r\n };\r\n CalendarController.prototype.loadFilterFromStorage = function () {\r\n if (sessionStorage.getItem(\"vhsCalendarFilter.searchString\")) {\r\n this.searchString = sessionStorage.getItem(\"vhsCalendarFilter.searchString\");\r\n }\r\n else {\r\n this.searchString = \"\";\r\n }\r\n if (sessionStorage.getItem(\"vhsCalendarFilter.courseCheckbox\")) {\r\n this.courseCheckbox = sessionStorage.getItem(\"vhsCalendarFilter.courseCheckbox\") == \"true\";\r\n }\r\n else {\r\n this.courseCheckbox = false;\r\n }\r\n if (sessionStorage.getItem(\"vhsCalendarFilter.iltSessionCheckbox\")) {\r\n this.iltSessionCheckbox = sessionStorage.getItem(\"vhsCalendarFilter.iltSessionCheckbox\") == \"true\";\r\n }\r\n else {\r\n this.iltSessionCheckbox = true;\r\n }\r\n if (sessionStorage.getItem(\"vhsCalendarFilter.registeredOrWaitlistedCheckbox\")) {\r\n this.registeredOrWaitlistedCheckbox = sessionStorage.getItem(\"vhsCalendarFilter.registeredOrWaitlistedCheckbox\") == \"true\";\r\n }\r\n else {\r\n this.registeredOrWaitlistedCheckbox = true;\r\n }\r\n if (sessionStorage.getItem(\"vhsCalendarFilter.viltSessionCheckbox\")) {\r\n this.viltSessionCheckbox = sessionStorage.getItem(\"vhsCalendarFilter.viltSessionCheckbox\") == \"true\";\r\n }\r\n else {\r\n this.viltSessionCheckbox = true;\r\n }\r\n if (sessionStorage.getItem(\"vhsCalendarFilter.notAvailableForRegistrationCheckbox\")) {\r\n this.notAvailableForRegistrationCheckbox = sessionStorage.getItem(\"vhsCalendarFilter.notAvailableForRegistrationCheckbox\") == \"true\";\r\n }\r\n else {\r\n this.notAvailableForRegistrationCheckbox = true;\r\n }\r\n };\r\n CalendarController.prototype.showFilterDialog = function () {\r\n var modal = $(\".filter-modal .modal-dialog\");\r\n if (window.innerWidth < 1200) {\r\n modal.css('margin-right', 'auto');\r\n modal.css('margin-left', 'auto');\r\n }\r\n else {\r\n var element = document.getElementById(\"filter__main\");\r\n if (element != null) {\r\n var leftWidth = element.offsetLeft + 10;\r\n modal.css('margin-left', leftWidth + 'px');\r\n }\r\n }\r\n };\r\n CalendarController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(CalendarController.NAME, window);\r\n this.searchString = '';\r\n };\r\n CalendarController.NAME = \"personal.CalendarController\";\r\n CalendarController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n \"$window\",\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n CourseService_1.CourseService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME\r\n ];\r\n return CalendarController;\r\n})();\r\nexports.CalendarController = CalendarController;\r\n},{\"../common/CommonFilterService\":49,\"../courses/CourseService\":211,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../webinars/models/TimeZoneType\":530,\"./PersonalService\":377,\"./models/CalendarEventTypeEnum\":386,\"./models/SessionTypeEnum\":387}],365:[function(require,module,exports){\nvar PersonalService_1 = require(\"./PersonalService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"./../urls/CoursesRouter\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar RichTextEditorDirective_1 = require(\"../components/richtext/RichTextEditorDirective\");\r\nvar CertificateService_1 = require(\"../certificates/CertificateService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CertificatesController = (function () {\r\n function CertificatesController($scope, $http, $location, $window, $routeParams, $route, $rootScope, $sce, url, securityService, userService, personalService, coursesRouter, learningPathsRouter, brandingService, businessUnitsService, certificateService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.$routeParams = $routeParams;\r\n this.$route = $route;\r\n this.$rootScope = $rootScope;\r\n this.$sce = $sce;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.personalService = personalService;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.brandingService = brandingService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.certificateService = certificateService;\r\n this.rowShow = new Map();\r\n this.apiApplicationUrl = '';\r\n this.domainsMap = new Map();\r\n this.sharedUrl = '';\r\n this.urlForFacebook = '';\r\n this.urlForLinkedIn = '';\r\n this.toolbar = [[], ['bold', 'italics', 'underline', 'strikeThrough', RichTextEditorDirective_1.RichTextEditorController.TA_FONT_COLOR, RichTextEditorDirective_1.RichTextEditorController.TA_BACKGROUND_FONT_COLOR],\r\n ['ul', 'ol', 'indent', 'outdent', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],\r\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote'], [],\r\n ['redo', 'undo', 'clear', RichTextEditorDirective_1.RichTextEditorController.TA_FULLSCREEN_BUTTON, 'html']];\r\n this.isEmailSendingInProgress = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_COURSES_CERTIFICATES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My certificates\").update();\r\n var tmpUrl = AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[1].split('.');\r\n this.businessUnitsService.getAllBuDomains().then(function (res) {\r\n _this.domainsMap = res;\r\n });\r\n this.apiApplicationUrl = (tmpUrl.length == 3 && tmpUrl[0].indexOf('vhs-test') === -1 ? tmpUrl[tmpUrl.length - 2] + '.' + tmpUrl[tmpUrl.length - 1] : tmpUrl.join('.')) + 'api/';\r\n this.securityService.demandAuthentication();\r\n this.viewType = 0;\r\n this.loadUserProfile();\r\n this.certificatesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/common/certificates/my\")));\r\n this.certificatesGridModel.entries.forEach(function (e) {\r\n _this.rowShow.set(e.certificateId, false);\r\n });\r\n this.searchKeyPress();\r\n }\r\n CertificatesController.prototype.showDetails = function (id, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(id, !this.rowShow.get(id));\r\n }\r\n };\r\n CertificatesController.prototype.loadLearningObject = function (certificate) {\r\n if (certificate.securedObjectType == 'COURSE') {\r\n this.$location.url(this.coursesRouter.detailsUrl(certificate.objectId));\r\n }\r\n else if (certificate.securedObjectType == 'LEARNING_PATH') {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(certificate.objectId));\r\n }\r\n };\r\n CertificatesController.prototype.downloadCertificate = function (id) {\r\n var _this = this;\r\n this.rowShow.set(id, !this.rowShow.get(id));\r\n return this.personalService.downloadCertificate(id).then(function (result) { return _this.$window.open(result); });\r\n };\r\n CertificatesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n CertificatesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n };\r\n CertificatesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n CertificatesController.prototype.getStatus = function (certificate) {\r\n if (certificate.validToDate) {\r\n return moment(Date.now()).isSame(certificate.validToDate, 'day') || moment(Date.now()).isBefore(certificate.validToDate, 'day') ?\r\n \"Valid\" : \"Expired\";\r\n }\r\n return \"Valid\";\r\n };\r\n CertificatesController.prototype.searchKeyPress = function () {\r\n var _this = this;\r\n this.$scope.$on(\"personal.main.search\", function (event, searchInput) {\r\n _this.certificatesGridModel.filter.searchString = searchInput;\r\n _this.certificatesGridModel.loadCurrentPage();\r\n });\r\n };\r\n CertificatesController.prototype.copyVerificationLink = function (certificate) {\r\n var text = this.getVerificationPage(certificate);\r\n var elem = document.createElement(\"textarea\");\r\n document.body.appendChild(elem);\r\n elem.value = \"\" + text;\r\n elem.select();\r\n document.execCommand(\"copy\");\r\n document.body.removeChild(elem);\r\n };\r\n CertificatesController.prototype.showShareDialog = function (certificate) {\r\n this.sharedCertificate = certificate;\r\n this.sharedUrl = this.getVerificationPage(certificate);\r\n this.urlForFacebook = this.$sce.trustAsResourceUrl(\"https://www.facebook.com/plugins/share_button.php?href=\" + (this.sharedUrl + '?latest') + \"&layout=button&size=large&width=77&height=28&appId\");\r\n this.getLinkForLinkedIn();\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#shareDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n CertificatesController.prototype.closeShareDialog = function () {\r\n this.sharedCertificate = null;\r\n this.sharedUrl = \"\";\r\n this.urlForFacebook = \"\";\r\n this.urlForLinkedIn = \"\";\r\n };\r\n CertificatesController.prototype.getVerificationPage = function (certificate) {\r\n var splitedUrl = AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[1].split('.');\r\n var domain = splitedUrl.length === 3 ? splitedUrl[0] + '.' : '';\r\n if (this.domainsMap && certificate.businessUnitId && this.domainsMap[certificate.businessUnitId]) {\r\n domain = this.domainsMap[certificate.businessUnitId] + '.';\r\n }\r\n return AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[0] + '//' + domain + (this.apiApplicationUrl.indexOf(\"vhs-test\") !== -1 && domain ? this.apiApplicationUrl.replace(splitedUrl[0] + '.', '') : this.apiApplicationUrl) + (\"verification/certificate/\" + certificate.uuid);\r\n };\r\n CertificatesController.prototype.getDate = function (date) {\r\n return new Date(date);\r\n };\r\n CertificatesController.prototype.getOrganizationIdForUrl = function (linkedinOrganizationId) {\r\n if (linkedinOrganizationId) {\r\n return '&organizationId=' + linkedinOrganizationId;\r\n }\r\n return '';\r\n };\r\n CertificatesController.prototype.getExpirationDateForUrl = function (date) {\r\n if (!date) {\r\n return '';\r\n }\r\n var validTo = new Date(date);\r\n return '&expirationYear=' + validTo.getFullYear() + '&expirationMonth=' + (validTo.getMonth() + 1);\r\n };\r\n CertificatesController.prototype.getLinkForLinkedIn = function () {\r\n this.urlForLinkedIn = 'https://www.linkedin.com/profile/add?startTask=CERTIFICATION_NAME&name='\r\n + this.sharedCertificate.objectName + '&organizationName=' + this.sharedCertificate.businessUnitName\r\n + this.getOrganizationIdForUrl(this.sharedCertificate.linkedinOrganizationId)\r\n + '&issueYear=' + this.getDate(this.sharedCertificate.receiptDate).getFullYear()\r\n + '&issueMonth=' + (this.getDate(this.sharedCertificate.receiptDate).getMonth() + 1)\r\n + this.getExpirationDateForUrl(this.sharedCertificate.validToDate)\r\n + '&certUrl=' + this.sharedUrl\r\n + '&certId=' + this.sharedCertificate.certificateId;\r\n };\r\n CertificatesController.prototype.showCreationEmailModal = function (verificationUrl) {\r\n this.clearEmailFields(verificationUrl);\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#showCreationEmailDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n CertificatesController.prototype.clearEmailFields = function (verificationUrl) {\r\n var _this = this;\r\n var xhr = new XMLHttpRequest();\r\n xhr.onload = function () {\r\n var issuedByText = xhr.responseXML.head.querySelector(\"[property~='og:title'][content]\").content;\r\n var certificateImage = xhr.responseXML.head.querySelector(\"[property~='og:image'][content]\").content;\r\n certificateImage = certificateImage.indexOf('http') != -1 ? certificateImage : AppProperties_1.AppProperties.serviceRoot\r\n + (certificateImage.charAt(0) == '/' ? certificateImage.substring(1) : certificateImage);\r\n _this.subject = _this.userProfile.fullName + \" is sharing their new eLearning achievement\";\r\n _this.message = (_this.userProfile.fullName + \" is sharing their new eLearning achievement with you
    \")\r\n + (\"
    \")\r\n + (issuedByText + \"
    \")\r\n + (\"View it now
    \")\r\n + \"or copy and paste this link in your browser
    \"\r\n + (\"\" + verificationUrl + \"\");\r\n };\r\n xhr.open(\"GET\", this.sharedUrl);\r\n xhr.responseType = \"document\";\r\n xhr.send();\r\n };\r\n CertificatesController.prototype.closeSendMailModal = function () {\r\n this.address = \"\";\r\n $('#infoField').collapse('hide');\r\n $(\"#showCreationEmailDialog\").modal('hide');\r\n };\r\n CertificatesController.prototype.sendEmailWithBadge = function () {\r\n var _this = this;\r\n this.isEmailSendingInProgress = true;\r\n this.certificateService.sendEmailWithCertificate(this.sharedCertificate.uuid, this.message, this.subject, this.address)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Email was successfully sent\");\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"Failed to send an email\");\r\n })\r\n .finally(function () {\r\n _this.closeSendMailModal();\r\n _this.isEmailSendingInProgress = false;\r\n });\r\n };\r\n CertificatesController.NAME = \"personal.CertificatesController\";\r\n CertificatesController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n \"$routeParams\",\r\n \"$route\",\r\n \"$rootScope\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n CertificateService_1.CertificateService.NAME\r\n ];\r\n return CertificatesController;\r\n})();\r\nexports.CertificatesController = CertificatesController;\r\n},{\"../INotifier\":5,\"../branding/CustomBrandingService\":35,\"../businessUnits/BusinessUnitsService\":44,\"../certificates/CertificateService\":45,\"../components/richtext/RichTextEditorDirective\":177,\"../urls/LearningPathsRouter\":477,\"../utils/AppProperties\":\"AppProperties\",\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../security/SecurityService\":420,\"./../urls/CoursesRouter\":468,\"./../users/UserService\":499,\"./../utils/UrlService\":528,\"./PersonalService\":377}],366:[function(require,module,exports){\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar CouponsController = (function () {\r\n function CouponsController(securityService, userService) {\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_COUPONS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Coupons\").update();\r\n this.loadUserProfile();\r\n }\r\n CouponsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n CouponsController.NAME = \"personal.CouponsController\";\r\n CouponsController.$inject = [\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return CouponsController;\r\n})();\r\nexports.CouponsController = CouponsController;\r\n},{\"../utils/PageHeaderHelper\":521,\"./../security/SecurityService\":420,\"./../users/UserService\":499,\"./../utils/MenuHelper\":517}],367:[function(require,module,exports){\nvar PersonalService_1 = require(\"./PersonalService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar CourseService_1 = require(\"../courses/CourseService\");\r\nvar ProgressService_1 = require(\"../courses/ProgressService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar CoursesController = (function () {\r\n function CoursesController($scope, $http, $location, $window, url, securityService, userService, personalService, coursesRouter, courseService, progressService, brandingService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.personalService = personalService;\r\n this.coursesRouter = coursesRouter;\r\n this.courseService = courseService;\r\n this.progressService = progressService;\r\n this.brandingService = brandingService;\r\n this.rowShow = new Map();\r\n this.courses = new Map();\r\n this.isCoursesLoaded = false;\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_COURSES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My courses\").update();\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.loadUserProfile();\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n this.coursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/courses/myProgresses\")));\r\n this.coursesGridModel.addLoadingListener(this);\r\n this.coursesGridModel.entries.forEach(function (e) {\r\n _this.rowShow.set(e.id, false);\r\n });\r\n }\r\n CoursesController.prototype.startLoading = function () {\r\n };\r\n CoursesController.prototype.endLoading = function () {\r\n var _this = this;\r\n var courseIds = this.coursesGridModel.entries\r\n .map(function (courseProgress) { return courseProgress.courseId; })\r\n .filter(function (item, pos, self) {\r\n return self.indexOf(item) == pos;\r\n });\r\n this.courseService.getMyCoursesByIds(courseIds)\r\n .then(function (courses) {\r\n courses.forEach(function (course) {\r\n _this.courses.set(course.id, course);\r\n });\r\n })\r\n .finally(function () {\r\n _this.isCoursesLoaded = true;\r\n });\r\n };\r\n CoursesController.prototype.loadCourse = function (courseId) {\r\n if (this.courses.get(courseId).permissions.view) {\r\n this.$location.url(this.coursesRouter.detailsUrl(courseId));\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"You are not granted permission to view this course\");\r\n }\r\n };\r\n CoursesController.prototype.addCourseToFavorites = function (course) {\r\n this.addToFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been added to your favorites\");\r\n course.favorite = true;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.already.in.favorite\") {\r\n INotifier_1.notifier.error(\"This course is already in your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n CoursesController.prototype.removeCourseFromFavorites = function (course) {\r\n this.removeFromFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been removed from your favorites\");\r\n course.favorite = false;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.not.in.favorite\") {\r\n INotifier_1.notifier.error(\"Failed to remove from your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n CoursesController.prototype.addToFavorites = function (id, version, type) {\r\n this.rowShow.set(id, !this.rowShow.get(id));\r\n return this.personalService.addToFavorites(id, version, type);\r\n };\r\n CoursesController.prototype.removeFromFavorites = function (id, version, type) {\r\n this.rowShow.set(id, !this.rowShow.get(id));\r\n return this.personalService.removeFromFavorites(id, version, type);\r\n };\r\n CoursesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n CoursesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n CoursesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n CoursesController.prototype.decodeCourseProgressStatus = function (status) {\r\n var result;\r\n switch (status) {\r\n case \"NOT_AVAILABLE\": {\r\n result = \"Not available\";\r\n break;\r\n }\r\n case \"NOT_STARTED\": {\r\n result = \"Not started\";\r\n break;\r\n }\r\n case \"STARTED\": {\r\n result = \"Started\";\r\n break;\r\n }\r\n case \"FAILED\": {\r\n result = \"Failed\";\r\n break;\r\n }\r\n case \"COMPLETED\": {\r\n result = \"Completed\";\r\n break;\r\n }\r\n case \"EXPIRED\": {\r\n result = \"Expired\";\r\n break;\r\n }\r\n case \"RESET\": {\r\n result = \"Permissions revoked\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n CoursesController.prototype.downloadCourseTranscriptReport = function (courseId, courseProgressId) {\r\n var _this = this;\r\n var parameters = {\r\n userId: this.userProfile.id,\r\n courseId: courseId,\r\n courseProgressId: courseProgressId\r\n };\r\n this.progressService.downloadCourseTranscriptReport(parameters)\r\n .then(function (result) {\r\n _this.$window.open(result);\r\n });\r\n };\r\n CoursesController.prototype.downloadGeneralTranscriptReport = function () {\r\n var _this = this;\r\n var parameters = {\r\n userId: this.userProfile.id\r\n };\r\n this.progressService.downloadGeneralTranscriptReport(parameters)\r\n .then(function (result) {\r\n _this.$window.open(result);\r\n });\r\n };\r\n CoursesController.NAME = \"personal.CoursesController\";\r\n CoursesController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CourseService_1.CourseService.NAME,\r\n ProgressService_1.ProgressService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return CoursesController;\r\n})();\r\nexports.CoursesController = CoursesController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../branding/CustomBrandingService\":35,\"../courses/CourseService\":211,\"../courses/ProgressService\":219,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528,\"./PersonalService\":377}],368:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar CreditsController = (function () {\r\n function CreditsController(securityService, authService, userService) {\r\n var _this = this;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.userService = userService;\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_CREDITS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My credits\").update();\r\n authService.getCurrentUser()\r\n .then(function (u) {\r\n _this.user = u;\r\n });\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n });\r\n }\r\n CreditsController.NAME = \"personal.CreditsController\";\r\n CreditsController.$inject = [\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return CreditsController;\r\n})();\r\nexports.CreditsController = CreditsController;\r\n},{\"../auth/AuthService\":18,\"../security/SecurityService\":420,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],369:[function(require,module,exports){\nvar PersonalService_1 = require(\"./PersonalService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar ExpiredCoursesController = (function () {\r\n function ExpiredCoursesController($scope, $http, $location, $window, url, securityService, userService, personalService, coursesRouter, permissionsApi, brandingService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.personalService = personalService;\r\n this.coursesRouter = coursesRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.brandingService = brandingService;\r\n this.rowShow = new Map();\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_EXPIRED_COURSES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Expired courses\").update();\r\n this.viewType = 1;\r\n this.loadUserProfile();\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n this.coursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/courses/expired\")));\r\n this.coursesGridModel.entries.forEach(function (e) {\r\n _this.rowShow.set(e.id, false);\r\n });\r\n }\r\n ExpiredCoursesController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n ExpiredCoursesController.prototype.loadCourse = function (course) {\r\n if (course.permissions.view || this.systemPermissions.manageAnyLearningObject) {\r\n this.$location.url(this.coursesRouter.detailsUrl(course.id));\r\n }\r\n };\r\n ExpiredCoursesController.prototype.addCourseToFavorites = function (course) {\r\n this.addToFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been added to your favorites\");\r\n course.favorite = true;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.already.in.favorite\") {\r\n INotifier_1.notifier.error(\"This course is already in your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n ExpiredCoursesController.prototype.removeCourseFromFavorites = function (course) {\r\n this.removeFromFavorites(course.id, course.version, ReferencedObjectType_1.ReferencedObjectType.COURSE).then(function (result) {\r\n INotifier_1.notifier.success(\"The course has been removed from your favorites\");\r\n course.favorite = false;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.not.in.favorite\") {\r\n INotifier_1.notifier.error(\"Failed to remove from your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n ExpiredCoursesController.prototype.addToFavorites = function (id, version, type) {\r\n this.rowShow.set(id, !this.rowShow.get(id));\r\n return this.personalService.addToFavorites(id, version, type);\r\n };\r\n ExpiredCoursesController.prototype.removeFromFavorites = function (id, version, type) {\r\n this.rowShow.set(id, !this.rowShow.get(id));\r\n return this.personalService.removeFromFavorites(id, version, type);\r\n };\r\n ExpiredCoursesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n ExpiredCoursesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n ExpiredCoursesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n ExpiredCoursesController.prototype.searchKeyPress = function () {\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n };\r\n ExpiredCoursesController.prototype.openSearchInput = function () {\r\n $(\"#filter__search\").animate({ width: \"0px\", opacity: \"0\", padding: \"0\" }, 200);\r\n $(\"#filter__open-search\").animate({ width: '220px', border: \"2px\" }, 200);\r\n $(\"#filter__open-search input\").animate({ width: '200px', paddingLeft: '30px' }, 200);\r\n $(\"#filter__open-search .glyphicon.vhs-image.svg-search\").animate({ opacity: '1' }, 200);\r\n $(\"#filter__open-search #close-search-filter\").animate({ opacity: '1' }, 200);\r\n };\r\n ExpiredCoursesController.prototype.closeSearchInput = function () {\r\n $(\"#filter__open-search .glyphicon.vhs-image.svg-search\").animate({ opacity: '0' }, 200);\r\n $(\"#filter__open-search\").animate({ width: '0', border: \"0px\" }, 200);\r\n $(\"#filter__open-search input\").animate({ width: '0', paddingLeft: '0' }, 200);\r\n $(\"#filter__open-search #close-search-filter\").animate({ opacity: '0' }, 200);\r\n if (window.innerWidth < 768) {\r\n $(\"#filter__search\").animate({ width: \"42px\", opacity: \"1\", paddingLeft: \"0\", paddingRight: \"0\" }, 200);\r\n }\r\n else {\r\n $(\"#filter__search\").animate({ width: \"109px\", opacity: \"1\", paddingLeft: \"15px\", paddingRight: \"15px\" }, 200);\r\n }\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.coursesGridModel.filter.searchString = this.searchInput;\r\n this.coursesGridModel.loadCurrentPage();\r\n }\r\n };\r\n ExpiredCoursesController.NAME = \"personal.ExpiredCoursesController\";\r\n ExpiredCoursesController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return ExpiredCoursesController;\r\n})();\r\nexports.ExpiredCoursesController = ExpiredCoursesController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../ReferencedObjectType\":7,\"../branding/CustomBrandingService\":35,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528,\"./PersonalService\":377}],370:[function(require,module,exports){\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar ExpiredLearningPathsController = (function () {\r\n function ExpiredLearningPathsController($scope, $http, $location, $window, url, securityService, userService, learningPathsRouter, brandingService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.brandingService = brandingService;\r\n this.rowShow = new Map();\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_EXPIRED_LEARNING_PATHS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Expired learning paths\").update();\r\n this.viewType = 1;\r\n this.loadUserProfile();\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n this.learningPathsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/learningPaths/search/expired\")));\r\n this.learningPathsGridModel.entries.forEach(function (learningPath) {\r\n _this.rowShow.set(learningPath.id, false);\r\n });\r\n }\r\n ExpiredLearningPathsController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n ExpiredLearningPathsController.prototype.loadLearningPath = function (learningPathId) {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(learningPathId));\r\n };\r\n ExpiredLearningPathsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n });\r\n };\r\n ExpiredLearningPathsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n ExpiredLearningPathsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n ExpiredLearningPathsController.prototype.getSubjectAndName = function (learningPath) {\r\n return learningPath.subjectName != null && learningPath.name != undefined\r\n ? learningPath.subjectName + \" / \" + learningPath.name\r\n : learningPath.name;\r\n };\r\n ExpiredLearningPathsController.NAME = \"personal.ExpiredLearningPathsController\";\r\n ExpiredLearningPathsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return ExpiredLearningPathsController;\r\n})();\r\nexports.ExpiredLearningPathsController = ExpiredLearningPathsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../branding/CustomBrandingService\":35,\"../security/SecurityService\":420,\"../urls/LearningPathsRouter\":477,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528}],371:[function(require,module,exports){\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar PersonalService_1 = require(\"./PersonalService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar CoursesRouter_1 = require(\"./../urls/CoursesRouter\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ObjectTypeUtils_1 = require(\"./../utils/ObjectTypeUtils\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar FavoritesController = (function () {\r\n function FavoritesController($http, $location, $scope, $window, url, authManager, personalService, materialsRouter, securityService, coursesRouter, brandingService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.url = url;\r\n this.authManager = authManager;\r\n this.personalService = personalService;\r\n this.materialsRouter = materialsRouter;\r\n this.securityService = securityService;\r\n this.coursesRouter = coursesRouter;\r\n this.brandingService = brandingService;\r\n this.rowShow = new Map();\r\n this.disableRemoveButton = false;\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.MY_LIBRARY_FAVORITES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Favorites\").update();\r\n this.favoritesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/personal/favorites\")));\r\n this.favoritesGridModel.pageSize = 9;\r\n this.favoritesGridModel.addLoadingListener(this);\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n }\r\n FavoritesController.prototype.startLoading = function () {\r\n };\r\n FavoritesController.prototype.endLoading = function () {\r\n var _this = this;\r\n this.favoritesGridModel.entries.forEach(function (favorite) {\r\n if (_this.isMaterialObject(favorite.objectType)) {\r\n favorite.title = favorite.subjectName + \" / \" + favorite.name;\r\n if (favorite.author) {\r\n favorite.title += \" (\" + favorite.author + \")\";\r\n }\r\n else {\r\n favorite.title += \" (\" + favorite.owner + \")\";\r\n }\r\n }\r\n else if (_this.isPlaylistObject(favorite.objectType)) {\r\n favorite.title = favorite.subjectName + \" / \" + favorite.name + \" (\" + favorite.sourceName + \")\";\r\n }\r\n else if (_this.isCourseObject(favorite.objectType)) {\r\n favorite.title = favorite.name + \" (\" + favorite.sourceName + \")\";\r\n }\r\n });\r\n };\r\n FavoritesController.prototype.showDetails = function (index, favorite, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n if (favorite.available) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n }\r\n };\r\n FavoritesController.prototype.loadFavoritePage = function (favorite) {\r\n if (favorite.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]) {\r\n if (!favorite.available) {\r\n INotifier_1.notifier.error(\"Access to this material is restricted\");\r\n }\r\n else {\r\n this.$location.url(this.materialsRouter.watchUrl(favorite.objectId));\r\n }\r\n }\r\n if (favorite.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.PLAYLIST]) {\r\n if (!favorite.available) {\r\n INotifier_1.notifier.error(\"Access to this playlist is restricted\");\r\n }\r\n else {\r\n this.$location.url(this.materialsRouter.playlistDetailsUrl(favorite.objectId));\r\n }\r\n }\r\n if (favorite.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]) {\r\n if (!favorite.available) {\r\n INotifier_1.notifier.error(\"Access to this course is restricted\");\r\n }\r\n else {\r\n this.$location.url(this.coursesRouter.detailsUrl(favorite.objectId));\r\n }\r\n }\r\n };\r\n FavoritesController.prototype.isMaterialObject = function (referenceObjectType) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.isMaterialObject(referenceObjectType);\r\n };\r\n FavoritesController.prototype.isPlaylistObject = function (referenceObjectType) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.isPlaylistObject(referenceObjectType);\r\n };\r\n FavoritesController.prototype.isCourseObject = function (referenceObjectType) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.isCourseObject(referenceObjectType);\r\n };\r\n FavoritesController.prototype.getMaterialTypeClass = function (materialTypeKey) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialGlyphiconClassFromKey(materialTypeKey);\r\n };\r\n FavoritesController.prototype.getContentTypeTitle = function (contentTypeKey) {\r\n return ObjectTypeUtils_1.ObjectTypeUtils.getContentTypeTitle(contentTypeKey);\r\n };\r\n FavoritesController.prototype.removeFromFavorites = function (favoriteId, favoriteType) {\r\n var _this = this;\r\n this.disableRemoveButton = true;\r\n this.personalService.removeFromFavorites(favoriteId, null, ObjectTypeUtils_1.ObjectTypeUtils.getReferenceObjectTypeFromString(favoriteType)).then(function (result) {\r\n INotifier_1.notifier.success(_this.getRemoveMessage(favoriteType));\r\n _this.favoritesGridModel.loadCurrentPage();\r\n _this.disableRemoveButton = false;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to remove it from your favorites\");\r\n }\r\n _this.disableRemoveButton = false;\r\n });\r\n };\r\n FavoritesController.prototype.getRemoveMessage = function (favoriteType) {\r\n switch (favoriteType) {\r\n case \"MATERIAL\":\r\n return \"Material removed from your favorites\";\r\n case \"PLAYLIST\":\r\n return \"Playlist removed from your favorites\";\r\n case \"COURSE\":\r\n return \"Course removed from your favorites\";\r\n default:\r\n return \"Material removed from your favorites\";\r\n }\r\n };\r\n FavoritesController.prototype.getLanguages = function (languages) {\r\n var languagesStr = \"\";\r\n languages.forEach(function (l) {\r\n languagesStr += l + \", \";\r\n });\r\n return languagesStr.substring(0, languagesStr.length - 2);\r\n };\r\n FavoritesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n FavoritesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n FavoritesController.prototype.searchFavorites = function () {\r\n this.favoritesGridModel.loadCurrentPage();\r\n };\r\n FavoritesController.prototype.clearSearch = function () {\r\n this.viewType = 1;\r\n this.favoritesGridModel.filter.searchString = null;\r\n this.favoritesGridModel.filter.viewType = null;\r\n this.favoritesGridModel.loadPage(0);\r\n };\r\n FavoritesController.prototype.getUrl = function (favorite) {\r\n if (favorite.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]) {\r\n if (!favorite.available) {\r\n INotifier_1.notifier.error(\"Access to this material is restricted\");\r\n }\r\n else {\r\n return this.materialsRouter.watchUrl(favorite.objectId);\r\n }\r\n }\r\n if (favorite.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.PLAYLIST]) {\r\n if (!favorite.available) {\r\n INotifier_1.notifier.error(\"Access to this playlist is restricted\");\r\n }\r\n else {\r\n return this.materialsRouter.playlistDetailsUrl(favorite.objectId);\r\n }\r\n }\r\n if (favorite.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]) {\r\n if (!favorite.available) {\r\n INotifier_1.notifier.error(\"Access to this course is restricted\");\r\n }\r\n else {\r\n return this.coursesRouter.detailsUrl(favorite.objectId);\r\n }\r\n }\r\n return \"/\";\r\n };\r\n FavoritesController.NAME = \"personal.FavoritesController\";\r\n FavoritesController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n \"$scope\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return FavoritesController;\r\n})();\r\nexports.FavoritesController = FavoritesController;\r\n},{\"../branding/CustomBrandingService\":35,\"../utils/ResizeViewService\":524,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../INotifier\":5,\"./../ReferencedObjectType\":7,\"./../authcore/AuthManager\":25,\"./../security/SecurityService\":420,\"./../urls/CoursesRouter\":468,\"./../urls/MaterialsRouter\":480,\"./../utils/MenuHelper\":517,\"./../utils/ObjectTypeUtils\":520,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./PersonalService\":377}],372:[function(require,module,exports){\nvar UserService_1 = require(\"../users/UserService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar LearningPathService_1 = require(\"../learningPaths/LearningPathService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar LearningPathsController = (function () {\r\n function LearningPathsController($scope, $http, $location, $window, url, securityService, userService, learningPathsRouter, learningPathService, brandingService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.learningPathService = learningPathService;\r\n this.brandingService = brandingService;\r\n this.learningPaths = new Map();\r\n this.isLearningPathsLoaded = false;\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_LEARNING_PATHS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My learning paths\").update();\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.loadUserProfile();\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n this.learningPathsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/learningPaths/search/myProgresses\")));\r\n this.learningPathsGridModel.addLoadingListener(this);\r\n }\r\n LearningPathsController.prototype.startLoading = function () {\r\n };\r\n LearningPathsController.prototype.endLoading = function () {\r\n var _this = this;\r\n var learningPathIds = this.learningPathsGridModel.entries\r\n .map(function (learningPathProgress) { return learningPathProgress.learningPathId; })\r\n .filter(function (item, pos, self) {\r\n return self.indexOf(item) == pos;\r\n });\r\n this.learningPathService.getMyLearningPathsByIds(learningPathIds)\r\n .then(function (learningPaths) {\r\n learningPaths.forEach(function (learningPath) {\r\n _this.learningPaths.set(learningPath.id, learningPath);\r\n });\r\n })\r\n .finally(function () {\r\n _this.isLearningPathsLoaded = true;\r\n });\r\n };\r\n LearningPathsController.prototype.loadLearningPath = function (learningPathId) {\r\n if (this.learningPaths.get(learningPathId).permissions.view) {\r\n this.$location.url(this.learningPathsRouter.detailsUrl(learningPathId));\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"You are not granted permission to view this learning path\");\r\n }\r\n };\r\n LearningPathsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n LearningPathsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n LearningPathsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n LearningPathsController.prototype.decodeLearningPathProgressStatus = function (status) {\r\n var result;\r\n switch (status) {\r\n case \"NOT_STARTED\": {\r\n result = \"Not started\";\r\n break;\r\n }\r\n case \"STARTED\": {\r\n result = \"Started\";\r\n break;\r\n }\r\n case \"COMPLETED\": {\r\n result = \"Completed\";\r\n break;\r\n }\r\n case \"EXPIRED\": {\r\n result = \"Expired\";\r\n break;\r\n }\r\n case \"RESET\": {\r\n result = \"Permissions revoked\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n LearningPathsController.NAME = \"personal.LearningPathsController\";\r\n LearningPathsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n LearningPathService_1.LearningPathService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return LearningPathsController;\r\n})();\r\nexports.LearningPathsController = LearningPathsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../branding/CustomBrandingService\":35,\"../learningPaths/LearningPathService\":320,\"../security/SecurityService\":420,\"../urls/LearningPathsRouter\":477,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528}],373:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar RichTextEditorDirective_1 = require(\"../components/richtext/RichTextEditorDirective\");\r\nvar BadgesService_1 = require(\"../gamification/BadgesService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar PageMode_1 = require(\"../PageMode\");\r\nvar MyBadgesController = (function () {\r\n function MyBadgesController($scope, $http, $location, $window, $routeParams, $route, $rootScope, $sce, url, securityService, userService, coursesRouter, learningPathsRouter, brandingService, businessUnitsService, badgesService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.$routeParams = $routeParams;\r\n this.$route = $route;\r\n this.$rootScope = $rootScope;\r\n this.$sce = $sce;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.brandingService = brandingService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.badgesService = badgesService;\r\n this.sharedUrl = '';\r\n this.urlForFacebook = '';\r\n this.apiApplicationUrl = '';\r\n this.domainsMap = new Map();\r\n this.toolbar = [[], ['bold', 'italics', 'underline', 'strikeThrough', RichTextEditorDirective_1.RichTextEditorController.TA_FONT_COLOR, RichTextEditorDirective_1.RichTextEditorController.TA_BACKGROUND_FONT_COLOR],\r\n ['ul', 'ol', 'indent', 'outdent', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],\r\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote'], [],\r\n ['redo', 'undo', 'clear', RichTextEditorDirective_1.RichTextEditorController.TA_FULLSCREEN_BUTTON, 'html']];\r\n this.isEmailSendingInProgress = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_BADGES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My badges\").update();\r\n var tmpUrl = AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[1].split('.');\r\n this.businessUnitsService.getAllBuDomains().then(function (res) {\r\n _this.domainsMap = res;\r\n });\r\n this.apiApplicationUrl = (tmpUrl.length == 3 && tmpUrl[0].indexOf('vhs-test') === -1 ? tmpUrl[tmpUrl.length - 2] + '.' + tmpUrl[tmpUrl.length - 1] : tmpUrl.join('.')) + 'api/';\r\n this.securityService.demandAuthentication();\r\n this.loadUserProfile();\r\n this.rewardBadgesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/badges/personal\")));\r\n this.rewardBadgesGridModel.requestsPageMode = PageMode_1.PageMode[PageMode_1.PageMode.ENTRIES_AND_TOTAL];\r\n this.searchKeyPress();\r\n }\r\n MyBadgesController.prototype.showDetails = function (id, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n }\r\n };\r\n MyBadgesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n _this.viewType = Number(_this.userProfile.pageViewMode);\r\n });\r\n };\r\n MyBadgesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n MyBadgesController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n MyBadgesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n MyBadgesController.prototype.searchKeyPress = function () {\r\n var _this = this;\r\n this.$scope.$on(\"personal.main.search\", function (event, searchInput) {\r\n _this.rewardBadgesGridModel.filter.searchString = searchInput;\r\n _this.rewardBadgesGridModel.loadCurrentPage();\r\n });\r\n };\r\n MyBadgesController.prototype.getImageForBadge = function (badge) {\r\n if (badge.badgeType == \"BADGE\") {\r\n return this.getImageBadge(badge);\r\n }\r\n else {\r\n if (!badge.previewUrl) {\r\n return \"themes/default/img/actionBadges/\" + badge.badgeKey + \".png\";\r\n }\r\n return badge.previewUrl;\r\n }\r\n };\r\n MyBadgesController.prototype.getImageBadge = function (badge) {\r\n if (badge) {\r\n if (!badge.previewUrl && badge.badgeKey) {\r\n var imageName = badge.badgeName.split(' ').join('');\r\n switch (badge.badgeKey) {\r\n case \"C_CMPL\":\r\n imageName = \"CourseFinisher\";\r\n break;\r\n case \"LP_CMPL\":\r\n imageName = \"LearningPathFinisher\";\r\n break;\r\n }\r\n return \"themes/default/img/badges/\" + imageName + \".png\";\r\n }\r\n }\r\n return badge.previewUrl ? badge.previewUrl : '';\r\n };\r\n MyBadgesController.prototype.getBadgeType = function (badge) {\r\n switch (badge.badgeType) {\r\n case 'ACTIVITY_BADGE': return 'Activity badge';\r\n case 'BADGE':\r\n switch (badge.badgeKey) {\r\n case 'C_CMPL':\r\n return \"Course completion\";\r\n case 'LP_CMPL':\r\n return \"Learning path completion\";\r\n }\r\n }\r\n };\r\n MyBadgesController.prototype.getVerificationPage = function (badge) {\r\n var splitedUrl = AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[1].split('.');\r\n var domain = splitedUrl.length === 3 ? splitedUrl[0] + '.' : '';\r\n if (this.domainsMap && badge.businessUnitId && this.domainsMap[badge.businessUnitId]) {\r\n domain = this.domainsMap[badge.businessUnitId] + '.';\r\n }\r\n return AppProperties_1.AppProperties.serviceRoot.split('\\/\\/')[0] + '//' + domain + (this.apiApplicationUrl.indexOf(\"vhs-test\") !== -1 && domain ? this.apiApplicationUrl.replace(splitedUrl[0] + '.', '') : this.apiApplicationUrl) + (\"verification/badge/\" + badge.uuid);\r\n };\r\n MyBadgesController.prototype.copyVerificationLink = function (badge) {\r\n var text = this.getVerificationPage(badge);\r\n var elem = document.createElement(\"textarea\");\r\n document.body.appendChild(elem);\r\n elem.value = \"\" + text;\r\n elem.select();\r\n document.execCommand(\"copy\");\r\n document.body.removeChild(elem);\r\n };\r\n MyBadgesController.prototype.showShareDialog = function (badge) {\r\n this.sharedBadge = badge;\r\n this.sharedUrl = this.getVerificationPage(badge);\r\n this.urlForFacebook = this.$sce.trustAsResourceUrl(\"https://www.facebook.com/plugins/share_button.php?href=\" + (this.sharedUrl + '?latest') + \"&layout=button&size=large&width=77&height=28&appId\");\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#shareDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n MyBadgesController.prototype.showCreationEmailModal = function (verificationUrl, badgeImageUrl) {\r\n this.clearEmailFields(verificationUrl, badgeImageUrl);\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#showCreationEmailDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n MyBadgesController.prototype.clearEmailFields = function (verificationUrl, badgeImageUrl) {\r\n var _this = this;\r\n var xhr = new XMLHttpRequest();\r\n xhr.onload = function () {\r\n var issuedByText = xhr.responseXML.head.querySelector(\"[property~='og:title'][content]\").content;\r\n var badgeImage = badgeImageUrl.indexOf('http') != -1\r\n ? badgeImageUrl\r\n : location.protocol + '//' + location.host + (location.pathname.indexOf(\"app.html\") != -1 ? location.pathname.split(\"app.html\")[0] : location.pathname) + badgeImageUrl;\r\n _this.subject = _this.userProfile.fullName + \" is sharing their new eLearning achievement\";\r\n _this.message = (_this.userProfile.fullName + \" is sharing their new eLearning achievement with you
    \")\r\n + (\"
    \")\r\n + (issuedByText + \"
    \")\r\n + (\"View it now
    \")\r\n + \"or copy and paste this link in your browser
    \"\r\n + (\"\" + verificationUrl + \"\");\r\n };\r\n xhr.open(\"GET\", this.sharedUrl);\r\n xhr.responseType = \"document\";\r\n xhr.send();\r\n };\r\n MyBadgesController.prototype.closeSendMailModal = function () {\r\n this.address = \"\";\r\n $('#infoField').collapse('hide');\r\n $(\"#showCreationEmailDialog\").modal('hide');\r\n };\r\n MyBadgesController.prototype.sendEmailWithBadge = function () {\r\n var _this = this;\r\n this.isEmailSendingInProgress = true;\r\n this.badgesService.sendEmailWithBadge(this.sharedBadge.uuid, this.message, this.subject, this.address)\r\n .then(function () {\r\n INotifier_1.notifier.success(\"Email was successfully sent\");\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"Failed to send an email\");\r\n })\r\n .finally(function () {\r\n _this.closeSendMailModal();\r\n _this.isEmailSendingInProgress = false;\r\n });\r\n };\r\n MyBadgesController.prototype.closeShareDialog = function () {\r\n this.sharedBadge = null;\r\n this.sharedUrl = \"\";\r\n this.urlForFacebook = \"\";\r\n };\r\n MyBadgesController.NAME = \"personal.MyBadgesController\";\r\n MyBadgesController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n \"$routeParams\",\r\n \"$route\",\r\n \"$rootScope\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n BadgesService_1.BadgesService.NAME\r\n ];\r\n return MyBadgesController;\r\n})();\r\nexports.MyBadgesController = MyBadgesController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../PageMode\":6,\"../branding/CustomBrandingService\":35,\"../businessUnits/BusinessUnitsService\":44,\"../components/richtext/RichTextEditorDirective\":177,\"../gamification/BadgesService\":245,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../urls/LearningPathsRouter\":477,\"../users/UserService\":499,\"../utils/AppProperties\":\"AppProperties\",\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528}],374:[function(require,module,exports){\nvar PersonalService_1 = require(\"./PersonalService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ObjectTypeUtils_1 = require(\"./../utils/ObjectTypeUtils\");\r\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar NewsRouter_1 = require(\"./../urls/NewsRouter\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar NewCommentsController = (function () {\r\n function NewCommentsController($http, $location, url, securityService, userService, personalService, materialsRouter, coursesRouter, newsRouter) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.personalService = personalService;\r\n this.materialsRouter = materialsRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.newsRouter = newsRouter;\r\n this.rowShow = new Map();\r\n this.objectComments = new Map();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_NEW_COMMENTS_MENU_KEY);\r\n this.securityService.demandAuthentication();\r\n this.disableGetCommentsButton = false;\r\n this.loadUserProfile();\r\n this.objectsWithCommentsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/personal/comments/objects\")));\r\n this.objectsWithCommentsGridModel.entries.forEach(function (e) {\r\n _this.rowShow.set(e.objectId, false);\r\n });\r\n }\r\n NewCommentsController.prototype.showComments = function (objectId, objectType) {\r\n var _this = this;\r\n if (!this.rowShow.get(objectId) && !this.disableGetCommentsButton) {\r\n if (!this.objectComments.has(objectId)) {\r\n this.disableGetCommentsButton = true;\r\n this.personalService.getUserCommentsForObject(objectId, ObjectTypeUtils_1.ObjectTypeUtils.getReferenceObjectTypeFromString(objectType)).then(function (result) {\r\n _this.objectComments.set(objectId, result);\r\n _this.rowShow.set(objectId, !_this.rowShow.get(objectId));\r\n _this.disableGetCommentsButton = false;\r\n });\r\n }\r\n }\r\n else {\r\n this.rowShow.set(objectId, !this.rowShow.get(objectId));\r\n }\r\n };\r\n NewCommentsController.prototype.getObjectRoute = function (object) {\r\n if (object.source == 'COURSE DISCUSSION') {\r\n localStorage.setItem('threadId', \"\" + object.objectId);\r\n this.$location.url(this.coursesRouter.discussionUrl(object.courseId));\r\n return;\r\n }\r\n if (object.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]) {\r\n if (!object.available) {\r\n INotifier_1.notifier.error(\"Access to the material is restricted\");\r\n }\r\n else {\r\n this.$location.url(this.materialsRouter.watchUrl(object.objectId));\r\n }\r\n }\r\n else if (object.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.NEWS]) {\r\n this.$location.url(this.newsRouter.oneNewsUrl(object.objectId));\r\n }\r\n };\r\n NewCommentsController.prototype.getGlyphiconClass = function (objectType, materialTypeId) {\r\n switch (objectType) {\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]: return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialGlyphiconClass(materialTypeId);\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.NEWS]: return ObjectTypeUtils_1.ObjectTypeUtils.getNewsGlyphiconClass();\r\n case 'COURSE DISCUSSION': return ObjectTypeUtils_1.ObjectTypeUtils.getNewsGlyphiconClass();\r\n }\r\n };\r\n NewCommentsController.prototype.getTypeTitle = function (objectType, materialTypeId) {\r\n switch (objectType) {\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]: return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialTypeTitle(materialTypeId);\r\n default: return ObjectTypeUtils_1.ObjectTypeUtils.getReferenceObjectTypeTitle(objectType);\r\n }\r\n };\r\n NewCommentsController.prototype.getObjectRouteForComment = function (object, commentId) {\r\n if (object.permissions.view) {\r\n if (object.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]) {\r\n this.$location.url(this.materialsRouter.watchUrl(object.objectId)).hash(\"comment\" + commentId);\r\n }\r\n else if (object.objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.NEWS]) {\r\n this.$location.url(this.newsRouter.oneNewsUrl(object.objectId)).hash(\"comment\" + commentId);\r\n }\r\n }\r\n };\r\n NewCommentsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n NewCommentsController.NAME = \"personal.NewCommentsController\";\r\n NewCommentsController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n NewsRouter_1.NewsRouter.NAME\r\n ];\r\n return NewCommentsController;\r\n})();\r\nexports.NewCommentsController = NewCommentsController;\r\n},{\"../urls/CoursesRouter\":468,\"../utils/MenuHelper\":517,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../INotifier\":5,\"./../ReferencedObjectType\":7,\"./../security/SecurityService\":420,\"./../urls/MaterialsRouter\":480,\"./../urls/NewsRouter\":481,\"./../users/UserService\":499,\"./../utils/ObjectTypeUtils\":520,\"./../utils/UrlService\":528,\"./PersonalService\":377}],375:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar PersonalRouter_1 = require(\"../urls/PersonalRouter\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar PersonalMainController = (function () {\r\n function PersonalMainController($scope, $location, $route, url, securityService, userService, commonFilterService) {\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$route = $route;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.commonFilterService = commonFilterService;\r\n this.showCreateEditAvatar = false;\r\n this.showSearchInput = false;\r\n this.currentPageIndex = 0;\r\n this.isResetPreview = false;\r\n this.personalMenu = $scope.menuVM;\r\n this.securityService.demandAuthentication();\r\n this.viewType = 0;\r\n this.loadUserProfile();\r\n this.changeRouteEvent();\r\n this.updateCurrentPageIndex();\r\n }\r\n PersonalMainController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n PersonalMainController.prototype.searchKeyPress = function () {\r\n this.$scope.$broadcast(\"personal.main.search\", this.searchInput);\r\n };\r\n PersonalMainController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(PersonalMainController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.$scope.$broadcast(\"personal.main.search\", this.searchInput);\r\n }\r\n };\r\n PersonalMainController.prototype.changeRouteEvent = function () {\r\n var _this = this;\r\n this.$scope.$on('personal.change.route', function (event, pageName) {\r\n _this.updateRoute(pageName);\r\n });\r\n };\r\n PersonalMainController.prototype.getTemplateForPath = function () {\r\n switch (this.$location.path()) {\r\n case PersonalRouter_1.PersonalRouter.certificatesRoute: {\r\n this.showSearchInput = true;\r\n return this.url.template(\"personal/certificates.html\");\r\n }\r\n case PersonalRouter_1.PersonalRouter.creditsRoute: {\r\n return this.url.template(\"personal/credits.html\");\r\n }\r\n case PersonalRouter_1.PersonalRouter.purchasedOrdersRoute: {\r\n this.showSearchInput = true;\r\n return this.url.template(\"personal/purchasedOrders.html\");\r\n }\r\n case PersonalRouter_1.PersonalRouter.subscriptionsRoute: {\r\n return this.url.template(\"personal/subscriptions.html\");\r\n }\r\n case PersonalRouter_1.PersonalRouter.badgesRoute: {\r\n return this.url.template(\"personal/myBadges.html\");\r\n }\r\n case PersonalRouter_1.PersonalRouter.newCommentsRoute: {\r\n return this.url.template(\"personal/newComments.html\");\r\n }\r\n case PersonalRouter_1.PersonalRouter.settingsRoute: {\r\n this.showCreateEditAvatar = true;\r\n return this.url.template(\"personal/settings.html\");\r\n }\r\n case PersonalRouter_1.PersonalRouter.supportRoute: {\r\n return this.url.template(\"personal/support.html\");\r\n }\r\n default: {\r\n return this.url.template(\"personal/settings.html\");\r\n }\r\n }\r\n };\r\n PersonalMainController.prototype.changePathForPersonal = function () {\r\n var item = this.personalMenu.parentMap.get(this.personalMenu.currentMenuItemKey).items[this.currentPageIndex];\r\n this.personalMenu.currentMenuGroupKey = item.key;\r\n var path = item.url.substring(1, item.url.length);\r\n this.updateRoute(path);\r\n };\r\n PersonalMainController.prototype.updateRoute = function (pageName) {\r\n this.showCreateEditAvatar = false;\r\n this.showSearchInput = false;\r\n this.$location.path(pageName, false);\r\n this.pageName = pageName;\r\n };\r\n PersonalMainController.prototype.updateCurrentPageIndex = function () {\r\n var _this = this;\r\n this.currentPageIndexInterval = setInterval(function () {\r\n var personalMenu = _this.personalMenu.parentMap.get(_this.personalMenu.currentMenuItemKey);\r\n if (!_this.personalMenu || !personalMenu || (!!personalMenu && !personalMenu.items)) {\r\n return;\r\n }\r\n var array = personalMenu.items;\r\n for (var i = 0; i < array.length; i++) {\r\n if (_this.personalMenu.currentMenuItemKey == array[i].key) {\r\n _this.currentPageIndex = i;\r\n clearInterval(_this.currentPageIndexInterval);\r\n break;\r\n }\r\n }\r\n }, 200);\r\n };\r\n PersonalMainController.NAME = \"personal.PersonalMainController\";\r\n PersonalMainController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n \"$route\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME\r\n ];\r\n return PersonalMainController;\r\n})();\r\nexports.PersonalMainController = PersonalMainController;\r\n},{\"../common/CommonFilterService\":49,\"../security/SecurityService\":420,\"../urls/PersonalRouter\":484,\"../users/UserService\":499,\"../utils/UrlService\":528}],376:[function(require,module,exports){\nvar PersonalService_1 = require(\"./PersonalService\");\r\nvar FavoritesController_1 = require(\"./FavoritesController\");\r\nvar UploadsController_1 = require(\"./UploadsController\");\r\nvar CoursesController_1 = require(\"./CoursesController\");\r\nvar LearningPathsController_1 = require(\"./LearningPathsController\");\r\nvar CertificatesController_1 = require(\"./CertificatesController\");\r\nvar QuizzesController_1 = require(\"./QuizzesController\");\r\nvar PlaylistsController_1 = require(\"./PlaylistsController\");\r\nvar SubscriptionsController_1 = require(\"./SubscriptionsController\");\r\nvar NewCommentsController_1 = require(\"./NewCommentsController\");\r\nvar SupportController_1 = require(\"./SupportController\");\r\nvar CouponsController_1 = require(\"./CouponsController\");\r\nvar SettingsController_1 = require(\"./SettingsController\");\r\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar SettingsModule_1 = require(\"../settings/SettingsModule\");\r\nvar ReferenceModule_1 = require(\"../reference/ReferenceModule\");\r\nvar UsersModule_1 = require(\"../users/UsersModule\");\r\nvar ExpiredCoursesController_1 = require(\"./ExpiredCoursesController\");\r\nvar ExpiredLearningPathsController_1 = require(\"./ExpiredLearningPathsController\");\r\nvar QuizDetailsController_1 = require(\"./QuizDetailsController\");\r\nvar PurchasedOrdersController_1 = require(\"./PurchasedOrdersController\");\r\nvar CreditsController_1 = require(\"./CreditsController\");\r\nvar CalendarController_1 = require(\"./CalendarController\");\r\nvar PersonalMainController_1 = require(\"./PersonalMainController\");\r\nvar MyBadgesController_1 = require(\"./MyBadgesController\");\r\nexports.PersonalModule = angular\r\n .module(\"personal\", [\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n SettingsModule_1.SettingsModule.name,\r\n ReferenceModule_1.ReferenceModule.name,\r\n UsersModule_1.UsersModule.name\r\n])\r\n .service(PersonalService_1.PersonalService.NAME, PersonalService_1.PersonalService)\r\n .controller(FavoritesController_1.FavoritesController.NAME, FavoritesController_1.FavoritesController)\r\n .controller(UploadsController_1.UploadsController.NAME, UploadsController_1.UploadsController)\r\n .controller(CoursesController_1.CoursesController.NAME, CoursesController_1.CoursesController)\r\n .controller(LearningPathsController_1.LearningPathsController.NAME, LearningPathsController_1.LearningPathsController)\r\n .controller(CertificatesController_1.CertificatesController.NAME, CertificatesController_1.CertificatesController)\r\n .controller(QuizzesController_1.QuizzesController.NAME, QuizzesController_1.QuizzesController)\r\n .controller(QuizDetailsController_1.QuizDetailsController.NAME, QuizDetailsController_1.QuizDetailsController)\r\n .controller(PlaylistsController_1.PlaylistsController.NAME, PlaylistsController_1.PlaylistsController)\r\n .controller(NewCommentsController_1.NewCommentsController.NAME, NewCommentsController_1.NewCommentsController)\r\n .controller(SubscriptionsController_1.SubscriptionsController.NAME, SubscriptionsController_1.SubscriptionsController)\r\n .controller(SupportController_1.SupportController.NAME, SupportController_1.SupportController)\r\n .controller(CouponsController_1.CouponsController.NAME, CouponsController_1.CouponsController)\r\n .controller(SettingsController_1.SettingsController.NAME, SettingsController_1.SettingsController)\r\n .controller(ExpiredCoursesController_1.ExpiredCoursesController.NAME, ExpiredCoursesController_1.ExpiredCoursesController)\r\n .controller(ExpiredLearningPathsController_1.ExpiredLearningPathsController.NAME, ExpiredLearningPathsController_1.ExpiredLearningPathsController)\r\n .controller(PurchasedOrdersController_1.PurchasedOrdersController.NAME, PurchasedOrdersController_1.PurchasedOrdersController)\r\n .controller(MyBadgesController_1.MyBadgesController.NAME, MyBadgesController_1.MyBadgesController)\r\n .controller(CreditsController_1.CreditsController.NAME, CreditsController_1.CreditsController)\r\n .controller(CalendarController_1.CalendarController.NAME, CalendarController_1.CalendarController)\r\n .controller(PersonalMainController_1.PersonalMainController.NAME, PersonalMainController_1.PersonalMainController);\r\n},{\"../reference/ReferenceModule\":407,\"../security/SecurityModule\":419,\"../settings/SettingsModule\":426,\"../urls/UrlsModule\":492,\"../users/UsersModule\":504,\"./CalendarController\":364,\"./CertificatesController\":365,\"./CouponsController\":366,\"./CoursesController\":367,\"./CreditsController\":368,\"./ExpiredCoursesController\":369,\"./ExpiredLearningPathsController\":370,\"./FavoritesController\":371,\"./LearningPathsController\":372,\"./MyBadgesController\":373,\"./NewCommentsController\":374,\"./PersonalMainController\":375,\"./PersonalService\":377,\"./PlaylistsController\":378,\"./PurchasedOrdersController\":379,\"./QuizDetailsController\":380,\"./QuizzesController\":381,\"./SettingsController\":382,\"./SubscriptionsController\":383,\"./SupportController\":384,\"./UploadsController\":385}],377:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar PersonalService = (function () {\r\n function PersonalService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n PersonalService.prototype.addToFavorites = function (objectId, objectVersion, objectType) {\r\n return this.$http.post(this.url.base(\"/api/personal/favorites?objectId=:objectId&objectVersion=:objectVersion&objectType=:objectType\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectVersion\", objectVersion)\r\n .param(\":objectType\", ReferencedObjectType_1.ReferencedObjectType[objectType])\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n PersonalService.prototype.removeFromFavorites = function (objectId, objectVersion, objectType) {\r\n return this.$http.delete(this.url.service(\"/api/personal/favorites\"), {\r\n params: {\r\n objectId: objectId,\r\n objectVersion: objectVersion,\r\n objectType: ReferencedObjectType_1.ReferencedObjectType[objectType]\r\n }\r\n }).then(function (result) { return result.data; });\r\n };\r\n PersonalService.prototype.getUserCommentsForObject = function (objectId, objectType) {\r\n return this.$http.get(this.url.base(\"/api/personal/comments?objectId=:objectId&objectType=:objectType\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectType\", ReferencedObjectType_1.ReferencedObjectType[objectType])\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n PersonalService.prototype.changeAuthorSubscription = function (authorId) {\r\n return this.$http.post(this.url.base(\"/api/personal/subscribe/author?authorId=:authorId\")\r\n .param(\":authorId\", authorId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n PersonalService.prototype.changeNewsSubscription = function (newsType) {\r\n return this.$http.post(this.url.service(\"/api/personal/subscribe/news\"), JSON.stringify(newsType))\r\n .then(function (result) { return result.data; });\r\n };\r\n PersonalService.prototype.loadSubscriptions = function () {\r\n return this.$http.get(this.url.service(\"/api/personal/subscriptions\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n PersonalService.prototype.changeSubscriptions = function (subscriptions) {\r\n return this.$http.post(this.url.service(\"/api/personal/subscribe/all\"), subscriptions)\r\n .then(function (result) { return result.data; });\r\n };\r\n PersonalService.prototype.sendMessageToSupport = function (messageToSupport) {\r\n return this.$http.post(this.url.service(\"/api/personal/support\"), JSON.stringify(messageToSupport))\r\n .then(function (result) { return result.data; });\r\n };\r\n PersonalService.prototype.downloadCertificate = function (certificateId) {\r\n var _this = this;\r\n return this.$http.get(this.url.base(\"/api/personal/certificates/:id/downloadToken\")\r\n .param(\":id\", certificateId)\r\n .service()).then(function (result) { return _this.url.base(\"/api/personal/certificates/download/:token\").param(\":token\", result.data.token).service(); });\r\n };\r\n PersonalService.prototype.getCalendarEvents = function () {\r\n return this.$http.get(this.url.service(\"/api/personal/calendar/events\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n PersonalService.NAME = \"personal.PersonalService\";\r\n PersonalService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return PersonalService;\r\n})();\r\nexports.PersonalService = PersonalService;\r\n},{\"./../ReferencedObjectType\":7,\"./../utils/UrlService\":528}],378:[function(require,module,exports){\nvar PersonalService_1 = require(\"./PersonalService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar PlaylistsController = (function () {\r\n function PlaylistsController($scope, $http, $location, $window, url, securityService, userService, personalService, materialsRouter, brandingService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.personalService = personalService;\r\n this.materialsRouter = materialsRouter;\r\n this.brandingService = brandingService;\r\n this.rowShow = new Map();\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_PLAYLISTS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My playlists\").update();\r\n this.viewType = 1;\r\n this.playlistViewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.loadUserProfile();\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n this.playlistsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/playlists/profilePlaylists\")));\r\n this.playlistsGridModel.entries.forEach(function (e) {\r\n _this.rowShow.set(e.id, false);\r\n });\r\n }\r\n PlaylistsController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n PlaylistsController.prototype.loadPlaylist = function (playlistId) {\r\n this.$location.url(this.materialsRouter.playlistDetailsUrl(playlistId));\r\n };\r\n PlaylistsController.prototype.setPlaylistViewType = function (viewType) {\r\n this.playlistViewType = viewType;\r\n this.searchGridModelObjects(this.playlistsGridModel, this.playlistViewType);\r\n };\r\n PlaylistsController.prototype.addPlaylistToFavorites = function (playlist) {\r\n this.addToFavorites(playlist.id, playlist.version, ReferencedObjectType_1.ReferencedObjectType.PLAYLIST).then(function (result) {\r\n INotifier_1.notifier.success(\"The playlist has been added to your favorites\");\r\n playlist.favorite = true;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.already.in.favorite\") {\r\n INotifier_1.notifier.error(\"This playlist is already in your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n PlaylistsController.prototype.removePlaylistFromFavorites = function (playlist) {\r\n this.removeFromFavorites(playlist.id, playlist.version, ReferencedObjectType_1.ReferencedObjectType.PLAYLIST).then(function (result) {\r\n INotifier_1.notifier.success(\"The playlist has been removed from your favorites\");\r\n playlist.favorite = false;\r\n }).catch(function (response) {\r\n if (response.data.error == \"object.not.in.favorite\") {\r\n INotifier_1.notifier.error(\"Failed to remove from your favorites\");\r\n }\r\n if (response.data.error == \"object.is.changed\") {\r\n INotifier_1.notifier.error(\"This data has been modified by another user: please refresh the page and try again\");\r\n }\r\n });\r\n };\r\n PlaylistsController.prototype.getLanguages = function (languages) {\r\n var languagesStr = \"\";\r\n languages.forEach(function (l) {\r\n languagesStr += l + \", \";\r\n });\r\n return languagesStr.substring(0, languagesStr.length - 2);\r\n };\r\n PlaylistsController.prototype.searchGridModelObjects = function (gridModel, viewType) {\r\n gridModel.filter.viewType = viewType;\r\n gridModel.loadCurrentPage();\r\n };\r\n PlaylistsController.prototype.addToFavorites = function (id, version, type) {\r\n this.rowShow.set(id, !this.rowShow.get(id));\r\n return this.personalService.addToFavorites(id, version, type);\r\n };\r\n PlaylistsController.prototype.removeFromFavorites = function (id, version, type) {\r\n this.rowShow.set(id, !this.rowShow.get(id));\r\n return this.personalService.removeFromFavorites(id, version, type);\r\n };\r\n PlaylistsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n PlaylistsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n PlaylistsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n PlaylistsController.NAME = \"personal.PlaylistsController\";\r\n PlaylistsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return PlaylistsController;\r\n})();\r\nexports.PlaylistsController = PlaylistsController;\r\n},{\"../branding/CustomBrandingService\":35,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../INotifier\":5,\"./../ReferencedObjectType\":7,\"./../security/SecurityService\":420,\"./../urls/MaterialsRouter\":480,\"./../users/UserService\":499,\"./../utils/MenuHelper\":517,\"./../utils/UrlService\":528,\"./PersonalService\":377}],379:[function(require,module,exports){\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar PersonalMainController_1 = require(\"./PersonalMainController\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar PayPalService_1 = require(\"../integration/paypal/PayPalService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar Moment_1 = require(\"../utils/Moment\");\r\nvar PurchasedOrdersController = (function () {\r\n function PurchasedOrdersController($scope, $http, $window, url, securityService, userService, financesRouter, brandingService, commonFilterService, payPalService, dialogService) {\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.financesRouter = financesRouter;\r\n this.brandingService = brandingService;\r\n this.commonFilterService = commonFilterService;\r\n this.payPalService = payPalService;\r\n this.dialogService = dialogService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_PURCHASED_ORDERS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My purchases\").update();\r\n this.securityService.demandAuthentication();\r\n this.loadUserProfile();\r\n this.purchasedOrdersGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/finance/purchasedProducts\")));\r\n this.purchasedOrdersGridModel.pageSize = 12;\r\n this.searchKeyPress();\r\n }\r\n PurchasedOrdersController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n PurchasedOrdersController.prototype.searchKeyPress = function () {\r\n var _this = this;\r\n this.$scope.$on(\"personal.main.search\", function (event, searchInput) {\r\n _this.commonFilterService.saveSearchInput(PersonalMainController_1.PersonalMainController.NAME, _this.searchInput);\r\n _this.purchasedOrdersGridModel.filter.searchString = searchInput;\r\n _this.purchasedOrdersGridModel.loadCurrentPage();\r\n });\r\n };\r\n PurchasedOrdersController.prototype.cancelSubscription = function (purchaseOrderId, expirationDate) {\r\n var _this = this;\r\n var dialogMessage = StringBuilder_1.StringBuilder.interpolate(\"Are you sure you want to cancel your subscription? Subscription access will be valid until :expirationDate\")\r\n .with(\":expirationDate\", moment(expirationDate).format(Moment_1.Moment.DEFAULT_FORMAT))\r\n .build();\r\n var options = {\r\n title: \"Cancel subscription\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n };\r\n this.dialogService.confirm(dialogMessage, options).then(function () {\r\n _this.payPalService.cancelSubscription(purchaseOrderId)\r\n .then(function () {\r\n _this.purchasedOrdersGridModel.loadPage(0);\r\n INotifier_1.notifier.success(\"Subscription canceled successfully\");\r\n })\r\n .catch(function (response) {\r\n if (response && response.data && response.data.error && response.data.error == 'error.') {\r\n INotifier_1.notifier.error(\"PayPal subscription cancel error\");\r\n }\r\n });\r\n });\r\n this.disabledCancelButton = false;\r\n };\r\n PurchasedOrdersController.prototype.getExpirationDateForSubscription = function (purchaseOrder) {\r\n var _this = this;\r\n this.disabledCancelButton = true;\r\n this.payPalService.getExpirationDateForSubscription(purchaseOrder.subscriptionId)\r\n .then(function (result) {\r\n _this.cancelSubscription(purchaseOrder.id, result);\r\n }).catch(function () {\r\n _this.dialogService.confirm(\"The operation is not available at the moment, please try again later\", {\r\n title: \"Cancel subscription\",\r\n hideCancelButton: true\r\n });\r\n _this.disabledCancelButton = false;\r\n });\r\n };\r\n PurchasedOrdersController.prototype.exportToPdf = function (purchaseOrderId) {\r\n var _this = this;\r\n var parameters = {\r\n userId: this.userProfile.id,\r\n purchaseOrderId: purchaseOrderId\r\n };\r\n this.payPalService.getPurchasedOrdersReport(parameters)\r\n .then(function (downloadUrl) { return _this.$window.open(downloadUrl); });\r\n };\r\n PurchasedOrdersController.NAME = \"personal.PurchasedOrdersController\";\r\n PurchasedOrdersController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n PayPalService_1.PayPalService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return PurchasedOrdersController;\r\n})();\r\nexports.PurchasedOrdersController = PurchasedOrdersController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../branding/CustomBrandingService\":35,\"../common/CommonFilterService\":49,\"../components/dialog/DialogService\":166,\"../integration/paypal/PayPalService\":306,\"../security/SecurityService\":420,\"../urls/FinancesRouter\":471,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/Moment\":518,\"../utils/PageHeaderHelper\":521,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./PersonalMainController\":375}],380:[function(require,module,exports){\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PersonalRouter_1 = require(\"../urls/PersonalRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar QuizzesRouter_1 = require(\"../urls/QuizzesRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar QuizDetailsController = (function () {\r\n function QuizDetailsController($http, $location, $routeParams, url, securityService, userService, quizService, quizzesRouter, personalRouter) {\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.quizService = quizService;\r\n this.quizzesRouter = quizzesRouter;\r\n this.personalRouter = personalRouter;\r\n this.redirected = false;\r\n this.quizResultId = 0;\r\n this.quizName = '';\r\n this.quizQuestions = [];\r\n this.showQuizDetailsHeader = true;\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_QUIZZES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My quizzes / surveys\").update();\r\n this.loadUserProfile();\r\n this.quizResultId = this.$routeParams[PersonalRouter_1.PersonalRouter.QUIZ_RESULT_ID_PARAM];\r\n }\r\n QuizDetailsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n QuizDetailsController.prototype.redirectToBack = function () {\r\n this.redirected = true;\r\n return this.$location.url(this.personalRouter.quizzesUrl()).absUrl();\r\n };\r\n QuizDetailsController.NAME = \"personal.QuizDetailsController\";\r\n QuizDetailsController.$inject = [\r\n \"$http\",\r\n \"$location\",\r\n \"$routeParams\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n QuizService_1.QuizService.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n PersonalRouter_1.PersonalRouter.NAME\r\n ];\r\n return QuizDetailsController;\r\n})();\r\nexports.QuizDetailsController = QuizDetailsController;\r\n},{\"../quizzes/QuizService\":396,\"../security/SecurityService\":420,\"../urls/PersonalRouter\":484,\"../urls/QuizzesRouter\":486,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./../users/UserService\":499}],381:[function(require,module,exports){\nvar UserService_1 = require(\"../users/UserService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar QuizService_1 = require(\"../quizzes/QuizService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar QuizzesRouter_1 = require(\"../urls/QuizzesRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar PersonalRouter_1 = require(\"../urls/PersonalRouter\");\r\nvar QuizResultStatus_1 = require(\"../quizzes/models/QuizResultStatus\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar QuizzesController = (function () {\r\n function QuizzesController($scope, $http, $location, $window, url, securityService, userService, quizService, quizzesRouter, personalRouter, permissionsApi, brandingService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.quizService = quizService;\r\n this.quizzesRouter = quizzesRouter;\r\n this.personalRouter = personalRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.brandingService = brandingService;\r\n this.rowShow = new Map();\r\n this.quizResults = new Map();\r\n this.hasCreatedQuizzes = false;\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_QUIZZES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My quizzes / surveys\").update();\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.quizViewType = 1;\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.disableGetQuizResultsButton = false;\r\n this.loadUserProfile();\r\n this.hasUserCreatedQuizzes();\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n this.createdQuizzesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/quizzes/profileQuizzes/created\")));\r\n this.createdQuizzesGridModel.entries.forEach(function (e) {\r\n _this.rowShow.set(e.id, false);\r\n });\r\n this.passedQuizzesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/quizzes/profileQuizzes/passed\")));\r\n this.passedQuizzesGridModel.entries.forEach(function (e) {\r\n _this.rowShow.set(e.id, false);\r\n });\r\n }\r\n QuizzesController.prototype.setQuizViewType = function (viewType) {\r\n this.quizViewType = viewType;\r\n this.rowShow.clear();\r\n };\r\n QuizzesController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n QuizzesController.prototype.getQuizDetailsUrl = function (id) {\r\n return this.quizzesRouter.quizzesDetailsUrl(id);\r\n };\r\n QuizzesController.prototype.getQuizResultUrl = function (quizId, quizResultId) {\r\n return this.personalRouter.quizDetailsUrl(quizId, quizResultId);\r\n };\r\n QuizzesController.prototype.loadQuiz = function (quizId) {\r\n this.$location.url(this.quizzesRouter.quizzesDetailsUrl(quizId));\r\n };\r\n QuizzesController.prototype.loadQuizResult = function (quizId, quizResultId) {\r\n this.$location.url(this.personalRouter.quizDetailsUrl(quizId, quizResultId));\r\n };\r\n QuizzesController.prototype.hasUserCreatedQuizzes = function () {\r\n var _this = this;\r\n this.quizService.hasUserCreatedQuizzes().then(function (result) {\r\n _this.hasCreatedQuizzes = result;\r\n });\r\n };\r\n QuizzesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n QuizzesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n QuizzesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n QuizzesController.prototype.isPassed = function (status) {\r\n return status.toString() == QuizResultStatus_1.QuizResultStatus[QuizResultStatus_1.QuizResultStatus.PASSED];\r\n };\r\n QuizzesController.prototype.isSubmitted = function (status) {\r\n return status.toString() == QuizResultStatus_1.QuizResultStatus[QuizResultStatus_1.QuizResultStatus.SUBMITTED];\r\n };\r\n QuizzesController.prototype.isFailed = function (status) {\r\n return status.toString() == QuizResultStatus_1.QuizResultStatus[QuizResultStatus_1.QuizResultStatus.FAILED];\r\n };\r\n QuizzesController.NAME = \"personal.QuizzesController\";\r\n QuizzesController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n QuizService_1.QuizService.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n PersonalRouter_1.PersonalRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return QuizzesController;\r\n})();\r\nexports.QuizzesController = QuizzesController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../branding/CustomBrandingService\":35,\"../quizzes/QuizService\":396,\"../quizzes/models/QuizResultStatus\":402,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/PersonalRouter\":484,\"../urls/QuizzesRouter\":486,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528}],382:[function(require,module,exports){\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar IUser_1 = require(\"./../users/models/IUser\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar SettingsService_1 = require(\"./../settings/SettingsService\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar UserRole_1 = require(\"../users/models/UserRole\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar BadgesService_1 = require(\"../gamification/BadgesService\");\r\nvar PersonalRouter_1 = require(\"../urls/PersonalRouter\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar SettingsController = (function () {\r\n function SettingsController($scope, $rootScope, $location, $uploader, securityService, userService, settingsService, authRouter, url, dialogService, authService, badgesService, personalRouter) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$uploader = $uploader;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.settingsService = settingsService;\r\n this.authRouter = authRouter;\r\n this.url = url;\r\n this.dialogService = dialogService;\r\n this.authService = authService;\r\n this.badgesService = badgesService;\r\n this.personalRouter = personalRouter;\r\n this.disableSaveButton = false;\r\n this.minPasswordLength = UserService_1.UserService.minPasswordLength;\r\n this.isResetPreview = false;\r\n this.noAvailableRoles = false;\r\n this.isExternalAccount = false;\r\n this.isCheckPassword = false;\r\n this.showCreateEditAvatar = true;\r\n this.isLoadingImage = true;\r\n this.rewards = [];\r\n this.avatarErrors = {};\r\n this.rolesForUserEyes = [\r\n {\r\n key: UserRole_1.UserRole[UserRole_1.UserRole.ADMINISTRATOR],\r\n value: \"Administrator\"\r\n },\r\n {\r\n key: UserRole_1.UserRole[UserRole_1.UserRole.INSTRUCTOR],\r\n value: \"Instructor\"\r\n },\r\n {\r\n key: UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER],\r\n value: \"Attendee manager\"\r\n },\r\n {\r\n key: UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR],\r\n value: \"Author\"\r\n },\r\n {\r\n key: UserRole_1.UserRole[UserRole_1.UserRole.LEARNER],\r\n value: \"Learner\"\r\n },\r\n ];\r\n $scope.vm = this;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_SETTINGS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Settings\").update();\r\n this.securityService.demandAuthentication();\r\n this.newUserProfile = {\r\n fullName: \"\",\r\n locale: null\r\n };\r\n this.userLogon = {\r\n name: \"\",\r\n password: \"\"\r\n };\r\n this.loadUserProfile();\r\n this.loadUserLogon();\r\n this.listenerAvatarImage();\r\n this.settingsService.isCheckPassword()\r\n .then(function (isCheck) { return _this.isCheckPassword = isCheck; });\r\n setTimeout(function () { return _this.isLoadingImage = false; }, 200);\r\n }\r\n SettingsController.prototype.listenerAvatarImage = function () {\r\n var _this = this;\r\n this.$scope.$on('avatar.update.img', function (event, preview) {\r\n _this.preview = preview;\r\n });\r\n this.$scope.$on('avatar.reset.img', function (event, preview, previewUrl, isResetPreview) {\r\n _this.preview = preview;\r\n _this.userProfile.previewUrl = previewUrl;\r\n _this.isResetPreview = isResetPreview;\r\n });\r\n };\r\n SettingsController.prototype.saveProfileSettings = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n if (!!this.userLogon.password && this.isCheckPassword && !this.authService.checkPassword(this.userLogon.password)) {\r\n INotifier_1.notifier.error(\"Password must contain at least 1 letter, 1 number, 1 special character from !@#$%^&* and must be 8 or more characters\");\r\n this.disableSaveButton = false;\r\n return;\r\n }\r\n var preview = this.preview;\r\n var promise = this.userService.updateCurrentUserProfile(this.newUserProfile, this.userLogon.password, preview, this.isResetPreview);\r\n promise.then(function (result) {\r\n angular.copy(result[\"user\"], _this.userProfile);\r\n _this.newUserProfile.version = _this.userProfile.version;\r\n _this.userId = _this.userProfile.id;\r\n var promise;\r\n if (preview != null) {\r\n promise = _this.upload(preview, _this.userId, \"preview\")\r\n .then(function (response) {\r\n _this.loadUserProfile();\r\n });\r\n }\r\n _this.authService.updateCurrentUser(result[\"user\"]);\r\n if (_this.newUserProfile.locale != _this.userProfile.locale) {\r\n INotifier_1.notifier.success(\"Your settings have been successfully updated. Please log in again to see the changes\");\r\n }\r\n else {\r\n INotifier_1.notifier.success(\"Settings are successfully saved\");\r\n }\r\n _this.$rootScope.$broadcast('avatar.upload.img', _this.preview, _this.isResetPreview);\r\n SettingsController.reloadApplicationForLocaleIfNeeded(_this.userProfile.locale);\r\n }).catch(function (err) {\r\n _this.disableSaveButton = false;\r\n if (err == \"error.email.not.unique\") {\r\n INotifier_1.notifier.error(\"This email has already been registered in the system\");\r\n }\r\n else if (err == \"error.try.update.another.user\") {\r\n INotifier_1.notifier.error(\"You can change only your own profile settings\");\r\n }\r\n else if (err == \"error.user.password.short\") {\r\n INotifier_1.notifier.error(\"The length of password must be at least 8 characters\");\r\n }\r\n else {\r\n INotifier_1.notifier.error(err);\r\n }\r\n })\r\n .finally(function () {\r\n window.location.reload();\r\n _this.disableSaveButton = false;\r\n });\r\n };\r\n SettingsController.prototype.cancelProfileSettings = function () {\r\n this.loadUserProfile();\r\n this.loadUserLogon();\r\n this.avatarErrors = {};\r\n };\r\n SettingsController.prototype.deleteMyAccount = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"You are about to permanently delete the account \" + this.userProfile.fullName + \". Are you sure?\", {\r\n title: \"Account deleting\",\r\n confirmButton: \"Delete\",\r\n cancelButton: \"Cancel\"\r\n })\r\n .then(function () {\r\n var promise = _this.userService.deleteMyAccount(_this.userProfile.id);\r\n promise.then(function (u) {\r\n _this.$location.url(_this.authRouter.logoutUrl());\r\n });\r\n });\r\n };\r\n SettingsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.confirmPassword = \"\";\r\n this.userService.getCurrentUserProfile()\r\n .then(function (u) {\r\n _this.userProfile = u;\r\n angular.copy(u, _this.newUserProfile);\r\n _this.isDeletionAllowed = !(u.id in IUser_1.PredefinedUsersEnum);\r\n _this.isEverythingDisabled = (u.id == IUser_1.PredefinedUsersEnum.GUEST);\r\n _this.loadAvailableLocales();\r\n })\r\n .then(function () {\r\n _this.userService.getAvailableUserRolesForCurrentUser()\r\n .then(function (roles) {\r\n _this.noAvailableRoles = roles.length == 0 || (roles.length == 1 && roles[0] == UserRole_1.UserRole[UserRole_1.UserRole.LEARNER]);\r\n _this.availableRoles = roles.length > 0 ? roles : [UserRole_1.UserRole[UserRole_1.UserRole.LEARNER]];\r\n _this.rolesForUserEyes = _this.rolesForUserEyes.filter(function (role) { return _this.availableRoles.indexOf(role.key) !== -1; });\r\n if (_this.noAvailableRoles && !_this.userProfile.businessRole) {\r\n _this.userProfile.businessRole = UserRole_1.UserRole[UserRole_1.UserRole.LEARNER];\r\n _this.newUserProfile.businessRole = UserRole_1.UserRole[UserRole_1.UserRole.LEARNER];\r\n }\r\n });\r\n })\r\n .then(function () {\r\n _this.badgesService.notifyUserAfterReward(Array(\"USR_PRFL_AVATAR\")).then(function (result) {\r\n if (result.length > 0) {\r\n _this.$rootScope.$broadcast('notifyReward', result);\r\n }\r\n });\r\n });\r\n };\r\n SettingsController.prototype.loadUserLogon = function () {\r\n var _this = this;\r\n this.isExternalAccount = true;\r\n this.userService.getCurrentUserLocalLogon().then(function (logon) {\r\n if (logon) {\r\n angular.copy(logon, _this.userLogon);\r\n _this.isExternalAccount = false;\r\n }\r\n });\r\n };\r\n SettingsController.prototype.loadAvailableLocales = function () {\r\n var _this = this;\r\n this.settingsService.getAvailableLocales().then(function (locales) {\r\n _this.availableLocales = locales;\r\n });\r\n };\r\n SettingsController.prototype.upload = function (file, userId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/users/upload?userId=:userId&fileType=:fileType\")\r\n .param(\":userId\", userId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n SettingsController.prototype.getImageForActivityBadge = function (badge) {\r\n if (badge) {\r\n if (!badge.previewId && badge.badgeKey) {\r\n return \"themes/default/img/actionBadges/\" + badge.badgeKey + \".png\";\r\n }\r\n return badge.previewUrl;\r\n }\r\n return '';\r\n };\r\n SettingsController.prototype.setImagesForActivityBadges = function (badges) {\r\n var _this = this;\r\n badges.forEach(function (b) {\r\n b.previewUrl = _this.getImageForActivityBadge(b);\r\n });\r\n };\r\n SettingsController.prototype.submitReward = function (rewardId) {\r\n var _this = this;\r\n var tempRewards = this.rewards.filter(function (r) { return r.id !== rewardId; });\r\n if (tempRewards.length == 0) {\r\n $('.rewardNotification').addClass('rewardNotification-up');\r\n }\r\n setTimeout(function () {\r\n _this.rewards = tempRewards;\r\n if (_this.rewards.length > 0) {\r\n _this.rewardToShow = null;\r\n setTimeout(function () {\r\n $('.rewardNotification').removeClass('rewardNotification-down');\r\n _this.rewardToShow = _this.rewards[0];\r\n }, 0);\r\n }\r\n else {\r\n _this.rewardToShow = null;\r\n }\r\n }, 200);\r\n };\r\n SettingsController.prototype.checkPassword = function (password) {\r\n return this.authService.checkPassword(password);\r\n };\r\n SettingsController.reloadApplicationForLocaleIfNeeded = function (userLocale) {\r\n if (AppProperties_1.AppProperties.currentLocale != userLocale) {\r\n SettingsController.changeApplicationLocaleInStorage(userLocale);\r\n numeral.language(userLocale.substr(0, 2));\r\n window.location.reload();\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n };\r\n SettingsController.changeApplicationLocaleInStorage = function (userLocale) {\r\n var LOCALE_STORAGE_KEY = \"vhs.application.current.locale\";\r\n localStorage.setItem(LOCALE_STORAGE_KEY, userLocale);\r\n };\r\n SettingsController.NAME = \"personal.SettingsController\";\r\n SettingsController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$location\",\r\n \"Upload\",\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n UrlService_1.UrlService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n BadgesService_1.BadgesService.NAME,\r\n PersonalRouter_1.PersonalRouter.NAME\r\n ];\r\n return SettingsController;\r\n})();\r\nexports.SettingsController = SettingsController;\r\n},{\"../auth/AuthService\":18,\"../components/dialog/DialogService\":166,\"../gamification/BadgesService\":245,\"../urls/AuthRouter\":463,\"../urls/PersonalRouter\":484,\"../users/models/UserRole\":507,\"../utils/AppProperties\":\"AppProperties\",\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./../INotifier\":5,\"./../security/SecurityService\":420,\"./../settings/SettingsService\":427,\"./../users/UserService\":499,\"./../users/models/IUser\":506}],383:[function(require,module,exports){\nvar PersonalService_1 = require(\"./PersonalService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar ReferenceService_1 = require(\"./../reference/ReferenceService\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar SubscriptionsController = (function () {\r\n function SubscriptionsController(securityService, userService, personalService, referenceApi) {\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.personalService = personalService;\r\n this.referenceApi = referenceApi;\r\n this.disableSaveButton = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_SUBSCRIPTIONS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My subscriptions\").update();\r\n this.securityService.demandAuthentication();\r\n this.subscriptions = {\r\n subjectsIds: [],\r\n allNewsSubscription: false,\r\n studentsNewsSubscription: false,\r\n commentsSubscription: false\r\n };\r\n this.loadUserProfile();\r\n this.loadSubscriptions();\r\n this.loadNotificationsFrequency();\r\n }\r\n SubscriptionsController.prototype.changeSubscriptionsSettings = function () {\r\n var _this = this;\r\n this.personalService.changeSubscriptions(this.subscriptions).then(function (result) {\r\n _this.userService.changeUserNotificationFrequency(_this.userProfile.notificationFrequencyId).then(function (result) {\r\n INotifier_1.notifier.success(\"Subscriptions are successfully saved\");\r\n });\r\n });\r\n };\r\n SubscriptionsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n SubscriptionsController.prototype.loadSubscriptions = function () {\r\n var _this = this;\r\n this.personalService.loadSubscriptions().then(function (result) {\r\n angular.copy(result, _this.subscriptions);\r\n });\r\n };\r\n SubscriptionsController.prototype.cancelSubscriptionsSettings = function () {\r\n this.loadSubscriptions();\r\n this.loadUserProfile();\r\n };\r\n SubscriptionsController.prototype.getOwnersUrl = function () {\r\n return \"/api/userSelector/usersForCurrentUser\";\r\n };\r\n SubscriptionsController.prototype.loadNotificationsFrequency = function () {\r\n var _this = this;\r\n this.referenceApi.getActiveReferenceEntitiesForSelectorWithoutParams(\"calendarPeriods\", [])\r\n .then(function (frequency) {\r\n _this.notificationsFrequency = frequency;\r\n });\r\n };\r\n SubscriptionsController.NAME = \"personal.SubscriptionsController\";\r\n SubscriptionsController.$inject = [\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n PersonalService_1.PersonalService.NAME,\r\n ReferenceService_1.ReferenceService.NAME\r\n ];\r\n return SubscriptionsController;\r\n})();\r\nexports.SubscriptionsController = SubscriptionsController;\r\n},{\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./../INotifier\":5,\"./../reference/ReferenceService\":409,\"./../security/SecurityService\":420,\"./../users/UserService\":499,\"./PersonalService\":377}],384:[function(require,module,exports){\nvar PersonalService_1 = require(\"./PersonalService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar SupportController = (function () {\r\n function SupportController(securityService, userService, personalService) {\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.personalService = personalService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_SUPPORT_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Support\").update();\r\n this.securityService.demandAuthentication();\r\n this.loadUserProfile();\r\n }\r\n SupportController.prototype.sendMessageToSupport = function () {\r\n var _this = this;\r\n this.personalService.sendMessageToSupport(this.messageToSupport).then(function (result) {\r\n INotifier_1.notifier.success(\"Your message has been sent to the help desk, you will hear from them soon\");\r\n _this.messageToSupport = \"\";\r\n });\r\n };\r\n SupportController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n SupportController.NAME = \"personal.SupportController\";\r\n SupportController.$inject = [\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n PersonalService_1.PersonalService.NAME\r\n ];\r\n return SupportController;\r\n})();\r\nexports.SupportController = SupportController;\r\n},{\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./../INotifier\":5,\"./../security/SecurityService\":420,\"./../users/UserService\":499,\"./PersonalService\":377}],385:[function(require,module,exports){\nvar UserService_1 = require(\"../users/UserService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar ObjectTypeUtils_1 = require(\"../utils/ObjectTypeUtils\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar ReferencedObjectType_1 = require(\"../ReferencedObjectType\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar UploadsController = (function () {\r\n function UploadsController($scope, $http, $location, $window, url, securityService, userService, materialsRouter, brandingService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.materialsRouter = materialsRouter;\r\n this.brandingService = brandingService;\r\n this.rowShow = new Map();\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.addMaterial; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_UPLOADS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"My uploads\").update();\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.window.bind('resize', function () {\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n });\r\n this.loadUserProfile();\r\n this.uploadsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/materials/uploads\")));\r\n this.uploadsGridModel.addLoadingListener(this);\r\n this.uploadsGridModel.entries.forEach(function (e) {\r\n _this.rowShow.set(e.id, false);\r\n });\r\n }\r\n UploadsController.prototype.startLoading = function () {\r\n };\r\n UploadsController.prototype.endLoading = function () {\r\n this.uploadsGridModel.entries.forEach(function (upload) {\r\n upload.subjectAndTopic = upload.subjectName + \"/\" + upload.title;\r\n if (upload.author) {\r\n upload.subjectAndTopic += \" (\" + upload.author + \")\";\r\n }\r\n });\r\n };\r\n UploadsController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n UploadsController.prototype.watch = function (materialId) {\r\n this.$location.url(this.materialsRouter.watchUrl(materialId));\r\n };\r\n UploadsController.prototype.getGlyphiconClass = function (objectType, materialTypeId) {\r\n switch (objectType) {\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]: return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialGlyphiconClass(materialTypeId);\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.NEWS]: return ObjectTypeUtils_1.ObjectTypeUtils.getNewsGlyphiconClass();\r\n }\r\n };\r\n UploadsController.prototype.getTypeTitle = function (objectType, materialTypeId) {\r\n switch (objectType) {\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]: return ObjectTypeUtils_1.ObjectTypeUtils.getMaterialTypeTitle(materialTypeId);\r\n default: return ObjectTypeUtils_1.ObjectTypeUtils.getReferenceObjectTypeTitle(objectType);\r\n }\r\n };\r\n UploadsController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (u) {\r\n _this.userProfile = u;\r\n });\r\n };\r\n UploadsController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n };\r\n UploadsController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n UploadsController.NAME = \"personal.UploadsController\";\r\n UploadsController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME\r\n ];\r\n return UploadsController;\r\n})();\r\nexports.UploadsController = UploadsController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../ReferencedObjectType\":7,\"../branding/CustomBrandingService\":35,\"../security/SecurityService\":420,\"../urls/MaterialsRouter\":480,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/ObjectTypeUtils\":520,\"../utils/PageHeaderHelper\":521,\"../utils/ResizeViewService\":524,\"../utils/UrlService\":528}],386:[function(require,module,exports){\n(function (CalendarEventTypeEnum) {\r\n CalendarEventTypeEnum[CalendarEventTypeEnum[\"NOT_REGISTERED_SESSION\"] = 0] = \"NOT_REGISTERED_SESSION\";\r\n CalendarEventTypeEnum[CalendarEventTypeEnum[\"REGISTERED_SESSION\"] = 1] = \"REGISTERED_SESSION\";\r\n CalendarEventTypeEnum[CalendarEventTypeEnum[\"NOT_AVAILABLE_SESSION\"] = 2] = \"NOT_AVAILABLE_SESSION\";\r\n CalendarEventTypeEnum[CalendarEventTypeEnum[\"AVAILABLE_COURSE\"] = 3] = \"AVAILABLE_COURSE\";\r\n})(exports.CalendarEventTypeEnum || (exports.CalendarEventTypeEnum = {}));\r\nvar CalendarEventTypeEnum = exports.CalendarEventTypeEnum;\r\n},{}],387:[function(require,module,exports){\n(function (SessionTypeEnum) {\r\n SessionTypeEnum[SessionTypeEnum[\"ILT_SESSION\"] = 0] = \"ILT_SESSION\";\r\n SessionTypeEnum[SessionTypeEnum[\"vILT_SESSION\"] = 1] = \"vILT_SESSION\";\r\n})(exports.SessionTypeEnum || (exports.SessionTypeEnum = {}));\r\nvar SessionTypeEnum = exports.SessionTypeEnum;\r\n},{}],388:[function(require,module,exports){\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar PoliciesRouter_1 = require(\"../urls/PoliciesRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar CookiePolicyController = (function () {\r\n function CookiePolicyController($location, $anchorScroll, $window, policiesRouter, userService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$anchorScroll = $anchorScroll;\r\n this.$window = $window;\r\n this.policiesRouter = policiesRouter;\r\n this.userService = userService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.POLICIES_COOKIE_POLICY_LINK_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Cookie Policy\").update();\r\n this.userService.getCurrentUserProfile().then(function (data) {\r\n _this.currentLocale = data.locale;\r\n });\r\n }\r\n CookiePolicyController.prototype.redirectToPrivacyPolicy = function () {\r\n this.$location.url(this.policiesRouter.privacyPolicyUrl());\r\n this.$window.scroll(0, 0);\r\n };\r\n CookiePolicyController.prototype.scrollToCookieTables = function () {\r\n this.$location.hash('cookieTables');\r\n this.$anchorScroll();\r\n };\r\n CookiePolicyController.NAME = \"policies.CookiePolicyController\";\r\n CookiePolicyController.$inject = [\r\n \"$location\",\r\n \"$anchorScroll\",\r\n \"$window\",\r\n PoliciesRouter_1.PoliciesRouter.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return CookiePolicyController;\r\n})();\r\nexports.CookiePolicyController = CookiePolicyController;\r\n},{\"../urls/PoliciesRouter\":485,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],389:[function(require,module,exports){\nvar PrivacyPolicyController_1 = require(\"./PrivacyPolicyController\");\r\nvar CookiePolicyController_1 = require(\"./CookiePolicyController\");\r\nvar TermsOfUseController_1 = require(\"./TermsOfUseController\");\r\nexports.PoliciesModule = angular\r\n .module(\"policies\", [])\r\n .controller(PrivacyPolicyController_1.PrivacyPolicyController.NAME, PrivacyPolicyController_1.PrivacyPolicyController)\r\n .controller(CookiePolicyController_1.CookiePolicyController.NAME, CookiePolicyController_1.CookiePolicyController)\r\n .controller(TermsOfUseController_1.TermsOfUseController.NAME, TermsOfUseController_1.TermsOfUseController);\r\n},{\"./CookiePolicyController\":388,\"./PrivacyPolicyController\":390,\"./TermsOfUseController\":391}],390:[function(require,module,exports){\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar PoliciesRouter_1 = require(\"../urls/PoliciesRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar PrivacyPolicyController = (function () {\r\n function PrivacyPolicyController($location, $window, policiesRouter, userService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.policiesRouter = policiesRouter;\r\n this.userService = userService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.POLICIES_PRIVACY_POLICY_LINK_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Privacy Policy\").update();\r\n this.userService.getCurrentUserProfile().then(function (data) {\r\n _this.currentLocale = data.locale;\r\n });\r\n }\r\n PrivacyPolicyController.prototype.redirectToCookiePolicy = function () {\r\n this.$location.url(this.policiesRouter.cookiePolicyUrl());\r\n this.$window.scroll(0, 0);\r\n };\r\n PrivacyPolicyController.NAME = \"policies.PrivacyPolicyController\";\r\n PrivacyPolicyController.$inject = [\r\n \"$location\",\r\n \"$window\",\r\n PoliciesRouter_1.PoliciesRouter.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return PrivacyPolicyController;\r\n})();\r\nexports.PrivacyPolicyController = PrivacyPolicyController;\r\n},{\"../urls/PoliciesRouter\":485,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],391:[function(require,module,exports){\nvar PoliciesRouter_1 = require(\"../urls/PoliciesRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar TermsOfUseController = (function () {\r\n function TermsOfUseController(policiesRouter, userService) {\r\n var _this = this;\r\n this.policiesRouter = policiesRouter;\r\n this.userService = userService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.POLICIES_TERMS_OF_USE_LINK_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Terms of Use\").update();\r\n this.userService.getCurrentUserProfile().then(function (data) {\r\n _this.currentLocale = data.locale;\r\n });\r\n }\r\n TermsOfUseController.NAME = \"policies.TermsOfUseController\";\r\n TermsOfUseController.$inject = [\r\n PoliciesRouter_1.PoliciesRouter.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return TermsOfUseController;\r\n})();\r\nexports.TermsOfUseController = TermsOfUseController;\r\n},{\"../urls/PoliciesRouter\":485,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],392:[function(require,module,exports){\nvar QuizzesRouter_1 = require(\"./../urls/QuizzesRouter\");\r\nvar QuizService_1 = require(\"./QuizService\");\r\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"./../authcore/AuthRedirect\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar QuizResultStatus_1 = require(\"./models/QuizResultStatus\");\r\nvar CourseDetailsController_1 = require(\"../courses/CourseDetailsController\");\r\nvar QuizController = (function () {\r\n function QuizController($location, $routeParams, authManager, authRedirect, quizService, quizzesRouter) {\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.quizService = quizService;\r\n this.quizzesRouter = quizzesRouter;\r\n this.quiz = {};\r\n this.quizResults = [];\r\n this.isQuizLoading = true;\r\n this.recursionDepth = 0;\r\n this.fullScreenMode = false;\r\n this.quizId = $routeParams[QuizzesRouter_1.QuizzesRouter.QUIZ_ID_PARAM];\r\n this.fullScreenMode = $location.search()[CourseDetailsController_1.CourseDetailsController.FULL_SCREEN_PARAMETER] != undefined;\r\n this.isAuthenticated = this.authManager.isAuthenticated();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(this.quizzesRouter.getMenuItem(this.$location.path()));\r\n this.loadQuiz();\r\n }\r\n QuizController.prototype.loadQuiz = function () {\r\n var _this = this;\r\n this.quizService.getQuizInfo(this.quizId).then(function (q) {\r\n if (!q.id) {\r\n var msg = q.quizType === \"QUIZ\" ? \"This quiz has been removed from the system\"\r\n : (q.quizType === \"SURVEY\" ? \"This survey has been removed from the system\" : \"This flashcard has been removed from the system\");\r\n INotifier_1.notifier.error(msg);\r\n _this.$location.url(_this.quizzesRouter.quizzesIndexUrl());\r\n return;\r\n }\r\n angular.copy(q, _this.quiz);\r\n PageHeaderHelper_1.PageHeader.set().header(q.title).update();\r\n _this.loadUserQuizResult();\r\n _this.isQuizLoading = false;\r\n });\r\n };\r\n QuizController.prototype.loadUserQuizResult = function () {\r\n var _this = this;\r\n this.quizService.getCurrentUserQuizResults(this.quizId, \"QUIZ\").then(function (result) {\r\n angular.copy(result, _this.quizResults);\r\n });\r\n };\r\n QuizController.prototype.startQuiz = function () {\r\n var _this = this;\r\n if (!this.isAuthenticated) {\r\n this.authRedirect.redirectToLogOn();\r\n }\r\n else {\r\n if (this.recursionDepth < QuizController.MAX_RECURSION_DEPTH) {\r\n this.recursionDepth++;\r\n this.quizService.startQuizByUser(this.quizId, \"QUIZ\")\r\n .then(function (result) {\r\n _this.recursionDepth = 0;\r\n _this.$location.url(_this.quizzesRouter.passingUrl(_this.quizId, result.id));\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.start.quiz.no.questions\") {\r\n INotifier_1.notifier.warning(\"You have already answered on all questions in that quiz\");\r\n }\r\n else if (response.data.error == \"error.no.suitable.questions\") {\r\n INotifier_1.notifier.warning(\"No suitable question found to display\");\r\n }\r\n else if (response.data.error == \"optimistic.locking.failed.catched\") {\r\n _this.startQuiz();\r\n }\r\n });\r\n }\r\n }\r\n };\r\n QuizController.prototype.isPassed = function (status) {\r\n return status.toString() == QuizResultStatus_1.QuizResultStatus[QuizResultStatus_1.QuizResultStatus.PASSED];\r\n };\r\n QuizController.prototype.isSubmitted = function (status) {\r\n return status.toString() == QuizResultStatus_1.QuizResultStatus[QuizResultStatus_1.QuizResultStatus.SUBMITTED];\r\n };\r\n QuizController.prototype.isFailed = function (status) {\r\n return status.toString() == QuizResultStatus_1.QuizResultStatus[QuizResultStatus_1.QuizResultStatus.FAILED];\r\n };\r\n QuizController.NAME = \"quizzes.QuizController\";\r\n QuizController.MAX_RECURSION_DEPTH = 3;\r\n QuizController.$inject = [\r\n \"$location\",\r\n \"$routeParams\",\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n QuizService_1.QuizService.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME\r\n ];\r\n return QuizController;\r\n})();\r\nexports.QuizController = QuizController;\r\n},{\"../courses/CourseDetailsController\":194,\"./../INotifier\":5,\"./../authcore/AuthManager\":25,\"./../authcore/AuthRedirect\":26,\"./../urls/QuizzesRouter\":486,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./QuizService\":396,\"./models/QuizResultStatus\":402}],393:[function(require,module,exports){\nvar QuizCorrectAnswersType_1 = require(\"../courses/models/QuizCorrectAnswersType\");\r\nvar QuizType_1 = require(\"./models/QuizType\");\r\nvar QuestionType_1 = require(\"./models/QuestionType\");\r\nvar SecuredObjectType_1 = require(\"../security/permissions/SecuredObjectType\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar QuizService_1 = require(\"./QuizService\");\r\nvar QuizzesRouter_1 = require(\"../urls/QuizzesRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar PredefinedLanguagesUtils_1 = require(\"../utils/PredefinedLanguagesUtils\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar ScaledAnswerQuestionType_1 = require(\"./models/ScaledAnswerQuestionType\");\r\nvar NextQuestionType_1 = require(\"./models/NextQuestionType\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar QuizImportExportService_1 = require(\"./QuizImportExportService\");\r\nvar UploadUtils_1 = require(\"../utils/UploadUtils\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar BusinessUnitsService_1 = require('../businessUnits/BusinessUnitsService');\r\nvar IGridModel_1 = require('../IGridModel');\r\nvar IHttpGridService_1 = require('../IHttpGridService');\r\nvar MaterialsRouter_1 = require('../urls/MaterialsRouter');\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar QuizEditController = (function () {\r\n function QuizEditController($http, $q, $scope, $location, $routeParams, $uploader, $timeout, $window, $rootScope, url, securityService, permissionsService, authService, quizService, userService, quizzesRouter, dialogService, settingsService, bundleService, uploadUtils, quizImportExportService, businessUnitsService, materialsRouter, authRedirect, permissionsApi) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.$uploader = $uploader;\r\n this.$timeout = $timeout;\r\n this.$window = $window;\r\n this.$rootScope = $rootScope;\r\n this.url = url;\r\n this.securityService = securityService;\r\n this.permissionsService = permissionsService;\r\n this.authService = authService;\r\n this.quizService = quizService;\r\n this.userService = userService;\r\n this.quizzesRouter = quizzesRouter;\r\n this.dialogService = dialogService;\r\n this.settingsService = settingsService;\r\n this.bundleService = bundleService;\r\n this.uploadUtils = uploadUtils;\r\n this.quizImportExportService = quizImportExportService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.materialsRouter = materialsRouter;\r\n this.authRedirect = authRedirect;\r\n this.permissionsApi = permissionsApi;\r\n this.NEXT_QUESTION_SEQUENCE_NUMBER = -1;\r\n this.END_OF_THE_QUIZ_SEQUENCE_NUMBER = -2;\r\n this.isQuizLoading = true;\r\n this.quizQuestions = [];\r\n this.currentQuestion = {};\r\n this.currentAnswers = [];\r\n this.currentExplanations = [];\r\n this.isEditQuestion = false;\r\n this.hasPreviewUrlCanceled = false;\r\n this.isResetPreview = false;\r\n this.disabledSaveButton = false;\r\n this.businessUnitSelected = false;\r\n this.businessUnitVisible = false;\r\n this.hasAllBusinessUnits = false;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.matchingOptionsHidden = false;\r\n this.fillableFormShowingInPopUp = false;\r\n this.sectionMaterials = [];\r\n this.isFileUploadsEnabled = false;\r\n this.openLoadMaterials = false;\r\n this.areQuestionsTagsLoaded = false;\r\n this.questionTabName = \"Add a question\";\r\n this.loadQuestions = false;\r\n this.numberOfQuestions = 100;\r\n this.ownerChangeCallback = function (selected, name) {\r\n _this.quiz.ownerName = selected ? name : null;\r\n };\r\n this.quizId = $routeParams[QuizzesRouter_1.QuizzesRouter.QUIZ_ID_PARAM];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(this.quizzesRouter.getMenuItem(this.$location.path()));\r\n var quizIdStr = String(this.quizId);\r\n var hasQuizId = this.quizId != null;\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissionsIf(!hasQuizId, function (systemPermissions) { return systemPermissions.addQuizzes; })\r\n .demandQuizPermissionsIf(hasQuizId, quizIdStr, function (quizPermissions) { return quizPermissions.view; })\r\n .demandQuizPermissionsIf(hasQuizId, quizIdStr, function (quizPermissions) { return quizPermissions.edit || quizPermissions.view; });\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.currentUser = user;\r\n })\r\n .finally(function () {\r\n if (hasQuizId) {\r\n _this.permissionsApi.getQuizPermissions(_this.quizId.toString()).then(function (permissions) {\r\n _this.userPermissions = permissions;\r\n }).then(function () {\r\n if (_this.userPermissions.edit) {\r\n _this.loadQuiz().then(function () {\r\n _this.loadQuestionsTags(_this.quizId);\r\n _this.materialsGridModel.filter.businessUnitId = _this.quiz.businessUnitId;\r\n _this.$timeout(function () { return _this.loadQuestions = true; }, 500);\r\n })\r\n .then(function () {\r\n $rootScope.$on('$locationChangeStart', function (event, newLocation) {\r\n if (!_this.allowNavigation && _this.currentUser.fullName != \"Guest\") {\r\n event.preventDefault();\r\n _this.$timeout(function () {\r\n INotifier_1.notifier.warning(\"You can't leave this page unless you save or cancel the quiz (survey or flashcards)\");\r\n });\r\n }\r\n });\r\n })\r\n .catch(function (response) {\r\n _this.$location.url(_this.quizzesRouter.quizzesDetailsUrl(_this.quizId));\r\n });\r\n _this.disabledSaveButton = false;\r\n _this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.QUIZ, quizIdStr);\r\n }\r\n else {\r\n if (_this.currentUser.fullName !== 'Guest') {\r\n _this.allowNavigation = true;\r\n _this.$location.url(_this.quizzesRouter.quizzesDetailsUrl(_this.quizId));\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n _this.quizType = $routeParams[QuizzesRouter_1.QuizzesRouter.QUIZ_TYPE].toUpperCase();\r\n _this.isQuizLoading = false;\r\n _this.quiz.quizType = _this.quizType;\r\n _this.quiz.questionsInAccordanceWithSequenceNumber = true;\r\n _this.questionOrder = !_this.quiz.questionsInAccordanceWithSequenceNumber;\r\n if (_this.quizType == \"QUIZ\") {\r\n PageHeaderHelper_1.PageHeader.set().header(\"New quiz\").update();\r\n }\r\n else if (_this.quizType == \"SURVEY\") {\r\n PageHeaderHelper_1.PageHeader.set().header(\"New survey\").update();\r\n _this.quiz.showCorrectAnswers = false;\r\n }\r\n else if (_this.quizType == \"FLASHCARD\") {\r\n PageHeaderHelper_1.PageHeader.set().header(\"New flashcards\").update();\r\n _this.quiz.oneQuestionAtATime = true;\r\n _this.quiz.showCorrectAnswers = false;\r\n _this.quiz.questionsInAccordanceWithSequenceNumber = false;\r\n _this.questionOrder = !_this.quiz.questionsInAccordanceWithSequenceNumber;\r\n _this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.FLASH_CARD];\r\n }\r\n _this.authService.getCurrentUser().then(function (user) {\r\n _this.quiz.ownerId = user.id;\r\n _this.quiz.ownerName = user.fullName;\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n if (user.allBusinessUnits || user.businessUnits.length > 1) {\r\n _this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.QUIZ);\r\n }\r\n _this.quiz.languageId = PredefinedLanguagesUtils_1.PredefinedLanguagesUtils.determineRelatedLanguageId(user.locale);\r\n });\r\n _this.loadQuestionsTags();\r\n _this.loadQuestions = true;\r\n _this.allowNavigation = false;\r\n }\r\n });\r\n this.quiz = {\r\n questions: [],\r\n correctAnswersType: 'PERCENTAGE',\r\n generateFromBank: false,\r\n numberOfQuestions: null,\r\n oneQuestionAtATime: false,\r\n showCorrectAnswers: true,\r\n requireAllAnswers: false,\r\n showQuestionNumbers: true,\r\n excludeCorrectlyAnsweredQuestions: false,\r\n };\r\n this.currentQuestion = {\r\n text: \"\",\r\n type: QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER],\r\n answers: [],\r\n explanations: [],\r\n shortAnswerMaxLength: null,\r\n points: 1,\r\n isErrorFileFormat: false\r\n };\r\n this.currentQuestion.questionCode = \"Q\" + (this.quizQuestions.length + 1);\r\n this.currentExplanations = [{ explanation: \"\" }];\r\n this.answerType = \"multiple-choice-single-answer\";\r\n hasQuizId == false ? this.percentageNumber = 70 : this.percentageNumber = null;\r\n this.settingsService.getIsQuizFilesUploadsEnabled()\r\n .then(function (result) { return _this.isFileUploadsEnabled = result; });\r\n this.materialsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.service(\"/api/materials/forQuiz\")));\r\n this.materialsGridModel.pageSize = 5;\r\n $(window).on(\"beforeunload\", function (event) {\r\n if (!_this.allowNavigation && _this.currentUser.fullName != \"Guest\") {\r\n return \"You can't leave this page unless you save or cancel the quiz (survey or flashcards)\";\r\n }\r\n });\r\n this.$scope.$watchGroup([\r\n \"vm.quiz.oneQuestionAtATime\",\r\n \"vm.quiz.questionsInAccordanceWithSequenceNumber\",\r\n \"vm.quiz.generateFromBank\",\r\n \"vm.quiz.excludeCorrectlyAnsweredQuestions\"\r\n ], function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.clearCurrentQuestionFields();\r\n if (_this.isQuizBranchingAllowed()) {\r\n _this.quizQuestions\r\n .filter(function (question) { return question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER]; })\r\n .forEach(function (question) { return question.answers.forEach(function (answer) {\r\n if (answer.nextQuestionType == null || answer.nextQuestionType == undefined) {\r\n answer.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.NEXT_QUESTION];\r\n answer.nextQuestionSequenceNumber = _this.NEXT_QUESTION_SEQUENCE_NUMBER;\r\n }\r\n }); });\r\n }\r\n });\r\n $scope.blockSpaces = function (e) {\r\n $('input').keyup(function () {\r\n var str = $(this).val();\r\n str = str.replace(/\\s/g, '');\r\n $(this).val(str);\r\n });\r\n };\r\n }\r\n QuizEditController.prototype.onFileUpload = function (question) {\r\n if (question.fileForm) {\r\n question.attachedFileName = question.fileForm.name;\r\n question.isErrorFileFormat = false;\r\n }\r\n else {\r\n question.isErrorFileFormat = true;\r\n }\r\n };\r\n QuizEditController.prototype.loadQuiz = function () {\r\n var _this = this;\r\n var promise = this.quizService.getQuizForEditing(this.quizId);\r\n promise.then(function (result) {\r\n if (!result.id) {\r\n var msg = result.quizType === \"QUIZ\" ? \"This quiz has been removed from the system\"\r\n : \"This survey has been removed from the system\";\r\n INotifier_1.notifier.error(msg);\r\n _this.$location.url(_this.quizzesRouter.quizzesIndexUrl());\r\n return;\r\n }\r\n angular.copy(result, _this.quiz);\r\n _this.quizType = _this.quiz.quizType;\r\n if (_this.quiz.quizType == 'QUIZ') {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit quiz \" + \"‘\"\r\n + _this.quiz.title + \"’\").update();\r\n }\r\n else if (_this.quiz.quizType == 'SURVEY') {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit survey \" + \"‘\"\r\n + _this.quiz.title + \"’\").update();\r\n }\r\n else if (_this.quiz.quizType == 'FLASHCARD') {\r\n PageHeaderHelper_1.PageHeader.set().header(\"Edit flashcards \" + \"‘\"\r\n + _this.quiz.title + \"’\").update();\r\n }\r\n _this.businessUnitSelected = true;\r\n if (result.duration != null) {\r\n _this.quiz.duration = result.duration / 60;\r\n }\r\n _this.quiz.questions\r\n .forEach(function (question) {\r\n question.tagsList = (question.tags != null && question.tags != undefined && question.tags.length > 0)\r\n ? question.tags.split(\",\")\r\n : [];\r\n if (question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM]) {\r\n question.fileForm = {};\r\n }\r\n });\r\n _this.quiz.questions\r\n .forEach(function (question) {\r\n if (question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER]) {\r\n question.answers.forEach(function (answer) {\r\n if (answer.nextQuestionType == NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.END_OF_THE_QUIZ]) {\r\n answer.nextQuestionSequenceNumber = _this.END_OF_THE_QUIZ_SEQUENCE_NUMBER;\r\n }\r\n else if (answer.nextQuestionType == NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.NEXT_QUESTION]) {\r\n answer.nextQuestionSequenceNumber = _this.NEXT_QUESTION_SEQUENCE_NUMBER;\r\n }\r\n });\r\n }\r\n else {\r\n if (question.nextQuestionType == NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.END_OF_THE_QUIZ]) {\r\n question.nextQuestionSequenceNumber = _this.END_OF_THE_QUIZ_SEQUENCE_NUMBER;\r\n }\r\n else if (question.nextQuestionType == NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.NEXT_QUESTION]) {\r\n question.nextQuestionSequenceNumber = _this.NEXT_QUESTION_SEQUENCE_NUMBER;\r\n }\r\n }\r\n });\r\n angular.copy(_this.quiz.questions, _this.quizQuestions);\r\n if (result.correctAnswersType == QuizEditController.PERCENTAGE_TYPE) {\r\n _this.percentageNumber = result.correctAnswersNumber;\r\n }\r\n else {\r\n _this.pointsNumber = result.correctAnswersNumber;\r\n }\r\n _this.previewUrl = _this.quiz.previewUrl ? _this.quiz.previewUrl : null;\r\n _this.isQuizLoading = false;\r\n _this.questionOrder = !_this.quiz.questionsInAccordanceWithSequenceNumber;\r\n });\r\n return promise;\r\n };\r\n QuizEditController.prototype.loadPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var _this = this;\r\n this.permissionsWithUsersAndGroups = [];\r\n this.permissionsService.getAllObjectPermissionsWithUsersAndGroups(securedObjectType, objectId).then(function (result) {\r\n _this.permissionsWithUsersAndGroups = result;\r\n });\r\n };\r\n QuizEditController.prototype.loadQuestionsTags = function (quizId) {\r\n var _this = this;\r\n var businessUnitTags = [];\r\n var systemTags = [];\r\n var loadBusinessUnitTags = this.quiz.businessUnitId\r\n ? this.businessUnitsService.getBusinessUnitTags(this.quiz.businessUnitId)\r\n .then(function (questionsTags) {\r\n businessUnitTags = questionsTags.split(\",\")\r\n .filter(function (tag) { return tag != undefined && tag.length > 0; });\r\n return businessUnitTags;\r\n })\r\n : this.$q.when(null);\r\n var loadSystemTags = this.settingsService.getQuestionsTags(quizId)\r\n .then(function (questionsTags) {\r\n systemTags = questionsTags.split(\",\")\r\n .filter(function (tag) { return tag != undefined && tag.length > 0; });\r\n return systemTags;\r\n });\r\n return this.$q.all([\r\n loadBusinessUnitTags,\r\n loadSystemTags\r\n ]).then(function () {\r\n _this.questionsTags = [];\r\n businessUnitTags.forEach(function (t) { return _this.questionsTags.push(t); });\r\n systemTags.forEach(function (t) {\r\n if (_this.questionsTags.indexOf(t) == -1) {\r\n _this.questionsTags.push(t);\r\n }\r\n });\r\n _this.areQuestionsTagsLoaded = true;\r\n return _this.questionsTags;\r\n });\r\n };\r\n QuizEditController.prototype.saveQuiz = function () {\r\n var _this = this;\r\n this.deactivateMainContent();\r\n if (this.quizId && this.quiz.started) {\r\n var dialogMessage;\r\n var dialogTitle;\r\n if (this.quiz.quizType == QuizType_1.QuizType[QuizType_1.QuizType.QUIZ]) {\r\n dialogTitle = \"Update quiz\";\r\n dialogMessage = \"Some users have already begun passing the quiz. Are you sure you want to change it?\";\r\n }\r\n else if (this.quiz.quizType == QuizType_1.QuizType[QuizType_1.QuizType.SURVEY]) {\r\n dialogTitle = \"Update survey\";\r\n dialogMessage = \"Some users have already begun passing the survey. Are you sure you want to change it?\";\r\n }\r\n else if (this.quiz.quizType == QuizType_1.QuizType[QuizType_1.QuizType.FLASHCARD]) {\r\n dialogTitle = \"Update flashcard\";\r\n dialogMessage = \"Some users have already begun passing the flashcard. Are you sure you want to change it?\";\r\n }\r\n this.dialogService.confirm(dialogMessage, {\r\n title: dialogTitle,\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () { return _this.save(); });\r\n }\r\n else {\r\n this.save();\r\n }\r\n this.allowNavigation = true;\r\n this.activateMainContent();\r\n };\r\n QuizEditController.prototype.cancelQuiz = function () {\r\n this.allowNavigation = true;\r\n };\r\n QuizEditController.prototype.save = function () {\r\n var _this = this;\r\n if (!this.isQuizBranchingAllowed() && this.quizQuestions.filter(function (q) { return q.points < 0; }).length > 0) {\r\n var dialogArguments = {\r\n title: \"Incorrect points number\",\r\n confirmButton: \"Ok\",\r\n hideCancelButton: true\r\n };\r\n this.dialogService.confirm(\"Quiz cannot contain questions with 0 points because current settings don't allow branching logic.\", dialogArguments);\r\n return;\r\n }\r\n this.quizQuestions\r\n .filter(function (question) { return question.type != QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM]; })\r\n .forEach(function (question) {\r\n if (question.materialId != null)\r\n question.materialId = null;\r\n });\r\n if (this.hasShortOrFillFormAnswer() || this.quizType == QuizType_1.QuizType[QuizType_1.QuizType.SURVEY]) {\r\n this.quiz.correctAnswersType = QuizCorrectAnswersType_1.QuizCorrectAnswersType[QuizCorrectAnswersType_1.QuizCorrectAnswersType.POINTS];\r\n }\r\n this.quiz.questionsInAccordanceWithSequenceNumber = !this.questionOrder;\r\n this.deactivateMainContent();\r\n this.disabledSaveButton = true;\r\n this.writeIndexes(this.quizQuestions);\r\n this.fillQuestionsTags(this.quizQuestions);\r\n this.filterQuizExplanations(this.quizQuestions);\r\n this.hasPreviewUrlCanceled = false;\r\n angular.copy(this.quizQuestions, this.quiz.questions);\r\n if (this.quizType == \"QUIZ\") {\r\n this.quiz.correctAnswersNumber = this.quiz.correctAnswersType == QuizEditController.PERCENTAGE_TYPE ? this.percentageNumber : this.pointsNumber;\r\n }\r\n else {\r\n this.quiz.correctAnswersNumber = 0;\r\n }\r\n var preview = this.croppedImage ? this.croppedImage : this.preview;\r\n var promise = this.quizId\r\n ? this.quizService.update(this.quiz, this.permissionsWithUsersAndGroups, this.isResetPreview, preview)\r\n : this.quizService.create(this.quiz, this.permissionsWithUsersAndGroups);\r\n promise.then(function (quiz) {\r\n _this.quizQuestions.forEach(function (oldQuestion) {\r\n if ((oldQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM]\r\n || oldQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE]\r\n || oldQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_MULTIPLE_CHOICE])\r\n && oldQuestion.fileForm && oldQuestion.fileForm.name && oldQuestion.fileForm.name.length > 0) {\r\n var newQuestion = quiz.questions.filter(function (q) { return q.indexNumber == oldQuestion.indexNumber; })[0];\r\n _this.uploadAttachedFile(oldQuestion.fileForm, quiz.id, newQuestion.id)\r\n .catch(function (response) {\r\n if (response.data && response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"Attachment uploading failed\");\r\n }\r\n });\r\n }\r\n });\r\n if (preview != null) {\r\n _this.upload(preview, quiz.id, \"preview\").then(function (r) {\r\n _this.processSuccessCallback(quiz);\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n }\r\n if (response.data.error == \"error.preview.type\") {\r\n INotifier_1.notifier.error(\"Invalid file format. Please select a file with .jpg or .png extension\");\r\n }\r\n _this.disabledSaveButton = false;\r\n });\r\n }\r\n else {\r\n _this.processSuccessCallback(quiz);\r\n }\r\n }).catch(function (response) {\r\n _this.disabledSaveButton = false;\r\n if (response.data.error == \"error.generate.from.bank.points.scoring.type\") {\r\n _this.dialogService.confirm(\"A quiz can not have both a 'Generate quiz from the questions bank' is ON and a question with type Short answer or Fillable form. Please change the quiz\", {\r\n title: \"Incorrect quiz parameters\",\r\n confirmButton: \"Ok\",\r\n hideCancelButton: true\r\n });\r\n }\r\n else {\r\n INotifier_1.notifier.error(response);\r\n }\r\n _this.activateMainContent();\r\n });\r\n };\r\n QuizEditController.prototype.copyQuiz = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Do you want to copy the quiz?\", {\r\n title: \"Copy quiz\",\r\n }).then(function () {\r\n _this.disabledSaveButton = true;\r\n if (_this.quizId) {\r\n INotifier_1.notifier.warning(\"Copying of the quiz has been started. The new quiz page will be opened automatically when copying is complete. Do not leave this page\");\r\n _this.quizService.copy(_this.quizId)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\" A copy of :quiz_name has been created\")\r\n .with(\":quiz_name\", _this.quiz.title)\r\n .build());\r\n _this.allowNavigation = true;\r\n _this.$location.url(_this.quizzesRouter.quizzesUpdateUrl(result.id));\r\n }).catch(function (response) {\r\n _this.allowNavigation = false;\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n }\r\n if (response.data.error == \"error.preview.type\") {\r\n INotifier_1.notifier.error(\"Invalid file format. Please select a file with .jpg or .png extension\");\r\n }\r\n });\r\n }\r\n });\r\n };\r\n QuizEditController.prototype.copySurvey = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Do you want to copy the survey?\", {\r\n title: \"Copy survey\",\r\n }).then(function () {\r\n _this.disabledSaveButton = true;\r\n if (_this.quizId) {\r\n INotifier_1.notifier.warning(\"Copying of the survey has been started. The new survey page will be opened automatically when copying is complete. Do not leave this page\");\r\n _this.quizService.copy(_this.quizId)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\" A copy of :quiz_name has been created\")\r\n .with(\":quiz_name\", _this.quiz.title)\r\n .build());\r\n _this.allowNavigation = true;\r\n _this.$location.url(_this.quizzesRouter.surveysUpdateUrl(result.id));\r\n }).catch(function (response) {\r\n _this.allowNavigation = false;\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n }\r\n if (response.data.error == \"error.preview.type\") {\r\n INotifier_1.notifier.error(\"Invalid file format. Please select a file with .jpg or .png extension\");\r\n }\r\n });\r\n }\r\n });\r\n };\r\n QuizEditController.prototype.copyFlashcard = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"Do you want to copy the flashcard?\", {\r\n title: \"Copy flashcard\",\r\n }).then(function () {\r\n _this.disabledSaveButton = true;\r\n if (_this.quizId) {\r\n INotifier_1.notifier.warning(\"Copying of the flashcard has been started. The new flashcard page will be opened automatically when copying is complete. Do not leave this page\");\r\n _this.quizService.copy(_this.quizId)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\" A copy of :quiz_name has been created\")\r\n .with(\":quiz_name\", _this.quiz.title)\r\n .build());\r\n _this.allowNavigation = true;\r\n _this.$location.url(_this.quizzesRouter.flashcardsUpdateUrl(result.id));\r\n }).catch(function (response) {\r\n _this.allowNavigation = false;\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage. Thumbnail has not been saved\");\r\n }\r\n if (response.data.error == \"error.preview.type\") {\r\n INotifier_1.notifier.error(\"Invalid file format. Please select a file with .jpg or .png extension\");\r\n }\r\n });\r\n }\r\n });\r\n };\r\n QuizEditController.prototype.processSuccessCallback = function (quiz) {\r\n if (quiz.quizType == 'QUIZ') {\r\n this.activateMainContent();\r\n INotifier_1.notifier.success(\"The quiz is successfully saved\");\r\n this.$location.url(this.quizzesRouter.quizzesDetailsUrl(quiz.id));\r\n }\r\n else if (quiz.quizType == 'SURVEY') {\r\n this.activateMainContent();\r\n INotifier_1.notifier.success(\"The survey is successfully saved\");\r\n this.$location.url(this.quizzesRouter.surveysDetailsUrl(quiz.id));\r\n }\r\n else if (quiz.quizType == 'FLASHCARD') {\r\n this.activateMainContent();\r\n INotifier_1.notifier.success(\"The flashcard is successfully saved\");\r\n this.$location.url(this.quizzesRouter.flashcardsDetailsUrl(quiz.id));\r\n }\r\n };\r\n QuizEditController.prototype.upload = function (file, quizId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/quizzes/upload?quizId=:quizId&fileType=:fileType\")\r\n .param(\":quizId\", quizId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n QuizEditController.prototype.uploadAttachedFile = function (file, quizId, questionId) {\r\n var urlBuilder = this.url.base(\"/api/quizzes/uploadAttachedFile?quizId=:quizId&questionId=:questionId\")\r\n .param(\":quizId\", quizId)\r\n .param(\":questionId\", questionId);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n QuizEditController.prototype.redirectOrClearFields = function () {\r\n if (this.quizId) {\r\n this.$location.url(this.quizzesRouter.quizzesDetailsUrl(this.quizId));\r\n }\r\n else {\r\n this.cleanFields();\r\n }\r\n };\r\n QuizEditController.prototype.cleanFields = function () {\r\n this.quiz = {};\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.QUIZ);\r\n };\r\n QuizEditController.prototype.clearCurrentQuestionFields = function () {\r\n this.questionTabName = \"Add a question\";\r\n this.currentQuestion = {\r\n text: \"\",\r\n type: QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER],\r\n answers: [],\r\n explanations: [],\r\n shortAnswerMaxLength: null,\r\n points: 1,\r\n isErrorFileFormat: false\r\n };\r\n if (this.quiz.quizType === QuizType_1.QuizType[QuizType_1.QuizType.FLASHCARD]) {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.FLASH_CARD];\r\n }\r\n this.currentAnswers = [];\r\n this.currentQuestion.questionCode = \"Q\" + (this.quizQuestions.length + 1);\r\n this.currentExplanations = [{ explanation: \"\" }];\r\n this.isEditQuestion = false;\r\n this.editQuestionIndex = null;\r\n this.answerType = \"multiple-choice-single-answer\";\r\n };\r\n QuizEditController.prototype.isAllQuizQuestionsValid = function () {\r\n var _this = this;\r\n return this.quizQuestions.length > 0\r\n && this.quizQuestions.every(function (q) {\r\n return _this.isMatchingQuestionValid(q)\r\n || _this.isShortAnswerQuestionValid(q)\r\n || _this.isSingleChoiceQuestionValid(q)\r\n || _this.isMultipleChoiceQuestionValid(q)\r\n || _this.isFillInTheBlankQuestionValid(q)\r\n || _this.isFillableFormQuestionValid(q)\r\n || _this.isFlashcardValid(q)\r\n || _this.isScaleQuestionValid(q)\r\n || _this.isHotspotQuestionValid(q);\r\n });\r\n };\r\n QuizEditController.prototype.isScaleQuestionValid = function (question) {\r\n return this.isScaledAnswerQuestionType(question)\r\n && question.text != \"\" && question.answers.every(function (a) { return a.text != \"\"; })\r\n && question.answers.length > 0;\r\n };\r\n QuizEditController.prototype.isFlashcardValid = function (question) {\r\n return this.isFlashcardQuestionType(question)\r\n && question.explanations[0] != null\r\n && question.explanations[0] != \"\"\r\n && question.text != \"\";\r\n };\r\n QuizEditController.prototype.isMatchingQuestionValid = function (question) {\r\n return (this.isMatchingQuestionType(question) || this.isHidingOptionsMatchingQuestionType(question))\r\n && question.text != \"\"\r\n && question.answers.length > 0\r\n && question.answers.every(function (a) { return a.text != \"\" && a.option && a.option != \"\"; });\r\n };\r\n QuizEditController.prototype.isShortAnswerQuestionValid = function (question) {\r\n return (this.isShortAnswerQuestionType(question)\r\n || this.isShortAnswerAudioResponseQuestionType(question)\r\n || this.isShortAnswerWithUploadQuestionType(question))\r\n && question.text != \"\";\r\n };\r\n QuizEditController.prototype.isSingleChoiceQuestionValid = function (question) {\r\n return this.isMultipleChoiceSingleAnswerQuestionType(question)\r\n && question.text != \"\"\r\n && question.answers.length > 0\r\n && question.answers.every(function (a) { return a.text != \"\"; });\r\n };\r\n QuizEditController.prototype.isMultipleChoiceQuestionValid = function (question) {\r\n return this.isMultipleChoiceMultipleAnswerQuestionType(question)\r\n && question.text != \"\"\r\n && question.answers.length > 0\r\n && question.answers.every(function (a) { return a.text != \"\"; });\r\n };\r\n QuizEditController.prototype.isFillInTheBlankQuestionValid = function (question) {\r\n return this.isFillInTheBlankQuestionType(question)\r\n && question.text != \"\"\r\n && question.answers.length > 0\r\n && question.answers.every(function (a) { return a.text != \"\"; });\r\n };\r\n QuizEditController.prototype.isFillableFormQuestionValid = function (question) {\r\n return this.isFillableFormQuestionType(question)\r\n && question.text != \"\"\r\n && question.materialName\r\n && question.materialName != \"\";\r\n };\r\n QuizEditController.prototype.isHotspotQuestionValid = function (question) {\r\n return (this.isHotspotSingleChoiceQuestionType(question) || this.isHotspotMultipleChoiceQuestionType(question))\r\n && question.text && question.text.length > 0\r\n && (question.fileForm !== null && question.fileForm !== undefined\r\n || question.attachedFileUrl !== null && question.attachedFileUrl !== undefined);\r\n };\r\n QuizEditController.prototype.currentQuestionValid = function () {\r\n return this.currentQuestion.text != \"\" && this.currentAnswers.every(function (a) { return a.text != \"\"; })\r\n && this.currentAnswers && this.currentAnswers.filter(function (a) { return a.isCorrect; }).length > 0\r\n && this.isQuiz()\r\n || this.currentQuestion.text != \"\"\r\n && (this.isShortAnswerQuestionType(this.currentQuestion)\r\n || this.isShortAnswerAudioResponseQuestionType(this.currentQuestion)\r\n || this.isShortAnswerWithUploadQuestionType(this.currentQuestion)\r\n || (this.isFlashcardQuestionType(this.currentQuestion) && this.currentExplanations[0] != null\r\n && this.currentExplanations[0].explanation != \"\"))\r\n || this.currentQuestion.text != \"\" && this.currentAnswers.every(function (a) { return a.text != \"\"; })\r\n && this.currentAnswers.length > 0 && !this.isQuiz()\r\n || this.isFillInTheBlankQuestionType(this.currentQuestion)\r\n && this.currentAnswers.length > 0 && this.currentAnswers.every(function (a) { return a.text != \"\"; })\r\n || (this.isMatchingQuestionType(this.currentQuestion) || this.isHidingOptionsMatchingQuestionType(this.currentQuestion))\r\n && this.currentQuestion.text != \"\"\r\n && this.currentAnswers.length > 0\r\n && this.currentAnswers.every(function (a) { return a.text != \"\" && a.option && a.option != \"\"; })\r\n || this.isFillableFormQuestionType(this.currentQuestion)\r\n && this.currentQuestion.text && this.currentQuestion.text.length > 0\r\n && this.currentQuestion.materialName && this.currentQuestion.materialName.length > 0\r\n && !this.currentQuestion.isErrorFileFormat\r\n || (this.isHotspotSingleChoiceQuestionType(this.currentQuestion) || this.isHotspotMultipleChoiceQuestionType(this.currentQuestion))\r\n && this.currentQuestion.text && this.currentQuestion.text.length > 0\r\n && (this.currentQuestion.fileForm !== null && this.currentQuestion.fileForm !== undefined\r\n || this.currentQuestion.attachedFileUrl !== null && this.currentQuestion.attachedFileUrl !== undefined)\r\n && this.currentQuestion.isQuestionValid;\r\n };\r\n QuizEditController.prototype.checkCurrentCorrectAnswer = function (answer) {\r\n this.currentAnswers.forEach(function (a) {\r\n a.isCorrect = false;\r\n });\r\n answer.isCorrect = true;\r\n };\r\n QuizEditController.prototype.editQuestion = function (index, question) {\r\n this.questionTabName = \"Edit question\";\r\n this.focusOnElement(\"textNewQuestion\");\r\n angular.copy(question, this.currentQuestion);\r\n if (question.fileForm && question.fileForm != {}) {\r\n this.currentQuestion.fileForm = question.fileForm;\r\n }\r\n angular.copy(question.answers, this.currentAnswers);\r\n this.setAnswerType(question);\r\n this.setAnswerSubtype(question);\r\n if (question.explanations != null && question.explanations.filter(function (e) { return e.answerId == null; }).length == 1) {\r\n angular.copy(question.explanations, this.currentExplanations);\r\n }\r\n else {\r\n this.currentExplanations = [{ explanation: \"\" }];\r\n }\r\n this.currentQuestion.answers = [];\r\n this.currentQuestion.explanations = [];\r\n this.isEditQuestion = true;\r\n this.editQuestionIndex = index;\r\n if (this.isHidingOptionsMatchingQuestionType(question)) {\r\n this.matchingOptionsHidden = true;\r\n }\r\n else if (this.isMatchingQuestionType(question)) {\r\n this.matchingOptionsHidden = false;\r\n }\r\n if (this.isFillableFormQuestionType(question)) {\r\n this.fillableFormShowingInPopUp = question.showAsPopUp;\r\n }\r\n };\r\n QuizEditController.prototype.addAnswerToQuestion = function () {\r\n var answer = {\r\n text: \"\",\r\n isCorrect: false\r\n };\r\n if (this.currentQuestion.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER]) {\r\n answer.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.NEXT_QUESTION];\r\n answer.nextQuestionSequenceNumber = this.NEXT_QUESTION_SEQUENCE_NUMBER;\r\n }\r\n this.currentAnswers.push(answer);\r\n };\r\n QuizEditController.prototype.removeAnswerFromQuestion = function (index) {\r\n this.currentAnswers.splice(index, 1);\r\n };\r\n QuizEditController.prototype.addQuestionToQuiz = function () {\r\n this.questionTabName = \"Add a question\";\r\n angular.copy(this.currentAnswers, this.currentQuestion.answers);\r\n angular.copy(this.currentExplanations, this.currentQuestion.explanations);\r\n if (isNaN(this.currentQuestion.shortAnswerMaxLength) || this.currentQuestion.shortAnswerMaxLength > 4000) {\r\n this.currentQuestion.shortAnswerMaxLength = 4000;\r\n }\r\n if (this.currentQuestion.points == null) {\r\n this.currentQuestion.points = this.isQuizBranchingAllowed() && this.currentQuestion.type == 'MULTIPLE_CHOICE_SINGLE_ANSWER' ? 0 : 1;\r\n }\r\n if (this.isEditQuestion) {\r\n this.quizQuestions.splice(this.editQuestionIndex, 1, this.currentQuestion);\r\n }\r\n else {\r\n this.currentQuestion.indexNumber = this.quizQuestions.length;\r\n this.quizQuestions.push(this.currentQuestion);\r\n }\r\n if (this.currentQuestion.questionCode == \"\") {\r\n this.currentQuestion.questionCode = null;\r\n }\r\n if (this.isFillableFormQuestionType(this.currentQuestion)) {\r\n this.currentQuestion.showAsPopUp = this.fillableFormShowingInPopUp;\r\n }\r\n this.clearCurrentQuestionFields();\r\n };\r\n QuizEditController.prototype.removeQuestionFromQuiz = function (index) {\r\n var _this = this;\r\n this.quizQuestions\r\n .forEach(function (question) {\r\n if (question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER]) {\r\n question.answers.forEach(function (answer) {\r\n if (answer.nextQuestionType == NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.SPECIFIED_QUESTION]) {\r\n if (answer.nextQuestionSequenceNumber == index) {\r\n answer.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.NEXT_QUESTION];\r\n answer.nextQuestionSequenceNumber = _this.NEXT_QUESTION_SEQUENCE_NUMBER;\r\n }\r\n else if (answer.nextQuestionSequenceNumber > index) {\r\n answer.nextQuestionSequenceNumber--;\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n if (question.nextQuestionType == NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.SPECIFIED_QUESTION]) {\r\n if (question.nextQuestionSequenceNumber == index) {\r\n question.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.NEXT_QUESTION];\r\n question.nextQuestionSequenceNumber = _this.NEXT_QUESTION_SEQUENCE_NUMBER;\r\n }\r\n else if (question.nextQuestionSequenceNumber > index) {\r\n question.nextQuestionSequenceNumber--;\r\n }\r\n }\r\n }\r\n });\r\n this.quizQuestions\r\n .filter(function (question) { return question.indexNumber > index; })\r\n .forEach(function (question) {\r\n question.indexNumber--;\r\n });\r\n this.quizQuestions.splice(index, 1);\r\n if (!this.hasShortOrFillFormAnswer() && this.quiz.generateFromBank) {\r\n this.quiz.correctAnswersType = QuizCorrectAnswersType_1.QuizCorrectAnswersType[QuizCorrectAnswersType_1.QuizCorrectAnswersType.PERCENTAGE];\r\n }\r\n };\r\n QuizEditController.prototype.writeIndexes = function (questions) {\r\n questions.forEach(function (question) {\r\n question.answers.forEach(function (answer) { return answer.indexNumber = question.answers.indexOf(answer); });\r\n });\r\n };\r\n QuizEditController.prototype.fillQuestionsTags = function (questions) {\r\n questions.forEach(function (question) {\r\n question.tags = (question.tagsList && question.tagsList.length > 0) ? question.tagsList.join(',') : null;\r\n });\r\n };\r\n QuizEditController.prototype.filterQuizExplanations = function (questions) {\r\n questions.forEach(function (q) {\r\n q.explanations = q.explanations.filter(function (e) { return e.explanation.length > 0; });\r\n });\r\n };\r\n QuizEditController.prototype.getQuizPointsSum = function () {\r\n var sum = 0;\r\n this.quizQuestions.forEach(function (q) {\r\n sum += q.points;\r\n });\r\n return sum;\r\n };\r\n QuizEditController.prototype.moveQuestionUp = function (index) {\r\n var placeholder = {};\r\n var questionToMove = this.quizQuestions.splice(index, 1, placeholder)[0];\r\n this.quizQuestions.splice(index - 1, 0, questionToMove);\r\n this.quizQuestions.splice(this.quizQuestions.indexOf(placeholder), 1);\r\n var oldSequenceNumber = questionToMove.indexNumber;\r\n var newSequenceNumber = questionToMove.indexNumber - 1;\r\n this.quizQuestions\r\n .forEach(function (question) {\r\n if (question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER]) {\r\n question.answers.forEach(function (answer) {\r\n if (answer.nextQuestionType == NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.SPECIFIED_QUESTION]) {\r\n if (answer.nextQuestionSequenceNumber == oldSequenceNumber) {\r\n answer.nextQuestionSequenceNumber = newSequenceNumber;\r\n }\r\n else if (answer.nextQuestionSequenceNumber == newSequenceNumber) {\r\n answer.nextQuestionSequenceNumber = oldSequenceNumber;\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n if (question.nextQuestionType == NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.SPECIFIED_QUESTION]) {\r\n if (question.nextQuestionSequenceNumber == oldSequenceNumber) {\r\n question.nextQuestionSequenceNumber = newSequenceNumber;\r\n }\r\n else if (question.nextQuestionSequenceNumber == newSequenceNumber) {\r\n question.nextQuestionSequenceNumber = oldSequenceNumber;\r\n }\r\n }\r\n }\r\n });\r\n questionToMove.indexNumber--;\r\n this.quizQuestions[this.quizQuestions.indexOf(questionToMove) + 1].indexNumber++;\r\n };\r\n QuizEditController.prototype.moveQuestionDown = function (index) {\r\n var placeholder = {};\r\n var questionToMove = this.quizQuestions.splice(index + 1, 1, placeholder)[0];\r\n this.quizQuestions.splice(index, 0, questionToMove);\r\n this.quizQuestions.splice(this.quizQuestions.indexOf(placeholder), 1);\r\n var oldSequenceNumber = questionToMove.indexNumber;\r\n var newSequenceNumber = questionToMove.indexNumber - 1;\r\n this.quizQuestions\r\n .forEach(function (question) {\r\n if (question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER]) {\r\n question.answers.forEach(function (answer) {\r\n if (answer.nextQuestionType == NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.SPECIFIED_QUESTION]) {\r\n if (answer.nextQuestionSequenceNumber == oldSequenceNumber) {\r\n answer.nextQuestionSequenceNumber = newSequenceNumber;\r\n }\r\n else if (answer.nextQuestionSequenceNumber == newSequenceNumber) {\r\n answer.nextQuestionSequenceNumber = oldSequenceNumber;\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n if (question.nextQuestionType == NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.SPECIFIED_QUESTION]) {\r\n if (question.nextQuestionSequenceNumber == oldSequenceNumber) {\r\n question.nextQuestionSequenceNumber = newSequenceNumber;\r\n }\r\n else if (question.nextQuestionSequenceNumber == newSequenceNumber) {\r\n question.nextQuestionSequenceNumber = oldSequenceNumber;\r\n }\r\n }\r\n }\r\n });\r\n questionToMove.indexNumber--;\r\n this.quizQuestions[this.quizQuestions.indexOf(questionToMove) + 1].indexNumber++;\r\n };\r\n QuizEditController.prototype.moveUp = function (index, objectArray) {\r\n var placeholder = {};\r\n var objectToMove = objectArray.splice(index, 1, placeholder)[0];\r\n objectArray.splice(index - 1, 0, objectToMove);\r\n objectArray.splice(objectArray.indexOf(placeholder), 1);\r\n };\r\n QuizEditController.prototype.moveDown = function (index, objectArray) {\r\n var placeholder = {};\r\n var objectToMove = objectArray.splice(index + 1, 1, placeholder)[0];\r\n objectArray.splice(index, 0, objectToMove);\r\n objectArray.splice(objectArray.indexOf(placeholder), 1);\r\n };\r\n QuizEditController.prototype.isMoveUp = function (index) {\r\n return index > 0;\r\n };\r\n QuizEditController.prototype.isMoveDown = function (index, objectArray) {\r\n return index < objectArray.length - 1;\r\n };\r\n QuizEditController.prototype.restorePreviewUrl = function () {\r\n this.preview = undefined;\r\n this.croppedImage = undefined;\r\n this.previewUrl = this.quiz.previewUrl;\r\n this.hasPreviewUrlCanceled = false;\r\n this.isResetPreview = false;\r\n };\r\n QuizEditController.prototype.resetPreview = function () {\r\n if (this.preview) {\r\n this.preview = undefined;\r\n }\r\n if (this.previewUrl) {\r\n this.previewUrl = undefined;\r\n this.hasPreviewUrlCanceled = true;\r\n }\r\n if (this.croppedImage) {\r\n this.croppedImage = undefined;\r\n }\r\n this.isResetPreview = true;\r\n };\r\n QuizEditController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.materialsGridModel.filter.businessUnitId = this.quiz.businessUnitId;\r\n this.materialsGridModel.loadPage(0);\r\n if (!this.quizId) {\r\n this.businessUnitSelected = false;\r\n this.loadPermissionsWithUsersAndGroups(SecuredObjectType_1.SecuredObjectType.QUIZ);\r\n this.loadQuestionsTags().then(function () {\r\n _this.quizQuestions.forEach(function (q) {\r\n q.tagsList = q.tagsList.filter(function (t) { return _this.questionsTags.indexOf(t) != -1; });\r\n });\r\n _this.currentQuestion.tagsList = _this.currentQuestion.tagsList\r\n .filter(function (t) { return _this.questionsTags.indexOf(t) != -1; });\r\n });\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n }\r\n };\r\n QuizEditController.prototype.setBusinessUnitSelectorVisible = function () {\r\n this.businessUnitVisible = true;\r\n };\r\n QuizEditController.prototype.getOwnersUrl = function (businessUnitId) {\r\n var baseUrl = \"/api/userSelector/users\";\r\n return businessUnitId\r\n ? StringBuilder_1.StringBuilder.interpolate(baseUrl + \"?businessUnitId=:businessUnitId\")\r\n .with(\":businessUnitId\", businessUnitId)\r\n .build()\r\n : baseUrl;\r\n };\r\n QuizEditController.prototype.onGenerateFromBankChanged = function () {\r\n if (this.quiz.generateFromBank == true) {\r\n this.quiz.numberOfQuestions = 1;\r\n this.quiz.correctAnswersType = QuizCorrectAnswersType_1.QuizCorrectAnswersType[QuizCorrectAnswersType_1.QuizCorrectAnswersType.PERCENTAGE];\r\n this.quiz.questionsInAccordanceWithSequenceNumber = false;\r\n this.questionOrder = !this.quiz.questionsInAccordanceWithSequenceNumber;\r\n }\r\n else if (this.quiz.generateFromBank == false) {\r\n this.quiz.numberOfQuestions = null;\r\n if (this.isFlashcard()) {\r\n this.quiz.excludeCorrectlyAnsweredQuestions = false;\r\n }\r\n }\r\n };\r\n QuizEditController.prototype.setCurrentQuestionType = function () {\r\n var _this = this;\r\n this.currentQuestion.showAsPopUp = null;\r\n if (this.answerType == \"short-answer\") {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER];\r\n }\r\n else if (this.answerType == \"short-answer-audio-response\") {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE];\r\n }\r\n else if (this.answerType == \"short-answer-with-upload\") {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD];\r\n }\r\n else if (this.answerType == \"multiple-choice-single-answer\") {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER];\r\n this.clearCorrectAnswers();\r\n }\r\n else if (this.answerType == \"multiple-choice-multiple-answer\") {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_MULTIPLE_ANSWER];\r\n this.clearCorrectAnswers();\r\n }\r\n else if (this.answerType == \"scaled-answer\") {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER];\r\n this.answerSubtype = \"scaled-answer-yes-no\";\r\n this.setQuestionSubtype(this.currentQuestion);\r\n }\r\n else if (this.answerType == \"fill-in-the-blank\") {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILL_IN_THE_BLANK];\r\n }\r\n else if (this.answerType == \"matching-answer\") {\r\n this.changeMatchingType(this.currentQuestion);\r\n }\r\n else if (this.answerType == \"fillable-form\") {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM];\r\n }\r\n else if (this.answerType == \"hotspot-single-choice\") {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE];\r\n }\r\n else if (this.answerType == \"hotspot-multiple-choice\") {\r\n this.currentQuestion.type = QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_MULTIPLE_CHOICE];\r\n }\r\n if (this.answerType == \"short-answer\" || this.answerType == \"short-answer-audio-response\"\r\n || this.answerType == \"short-answer-with-upload\" || this.answerType == \"fillable-form\") {\r\n this.currentAnswers = [];\r\n }\r\n if (this.answerType == \"fillable-form\") {\r\n this.fillableFormShowingInPopUp = false;\r\n this.currentAnswers = [];\r\n }\r\n else {\r\n this.fillableFormShowingInPopUp = null;\r\n }\r\n if (this.answerType == \"matching-answer\") {\r\n this.currentAnswers = [];\r\n this.matchingOptionsHidden = false;\r\n }\r\n if (this.answerType == \"multiple-choice-single-answer\") {\r\n this.currentAnswers.forEach(function (a) {\r\n if (a.nextQuestionType == null || a.nextQuestionType == undefined) {\r\n a.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.NEXT_QUESTION];\r\n a.nextQuestionSequenceNumber = _this.NEXT_QUESTION_SEQUENCE_NUMBER;\r\n }\r\n });\r\n }\r\n else {\r\n this.currentQuestion.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.NEXT_QUESTION];\r\n this.currentQuestion.nextQuestionSequenceNumber = this.NEXT_QUESTION_SEQUENCE_NUMBER;\r\n }\r\n this.currentQuestion.shortAnswerMaxLength = (this.isShortAnswerQuestionType(this.currentQuestion)\r\n || this.isShortAnswerWithUploadQuestionType(this.currentQuestion))\r\n ? QuizEditController.RESPONSE_DEFAULT_MAX_TEXT_LENGTH\r\n : this.isShortAnswerAudioResponseQuestionType(this.currentQuestion)\r\n ? QuizEditController.RESPONSE_DEFAULT_MAX_AUDIO_LENGTH\r\n : null;\r\n };\r\n QuizEditController.prototype.clearCorrectAnswers = function () {\r\n this.currentAnswers.forEach(function (a) {\r\n a.isCorrect = false;\r\n });\r\n };\r\n QuizEditController.prototype.setQuestionSubtype = function (question) {\r\n if (this.answerType == \"scaled-answer\") {\r\n if (this.answerSubtype == \"scaled-answer-yes-no\") {\r\n question.subtype = ScaledAnswerQuestionType_1.ScaledAnswerQuestionType[ScaledAnswerQuestionType_1.ScaledAnswerQuestionType.YES_NO];\r\n }\r\n else if (this.answerSubtype == \"scaled-answer-recommended-3-answers\") {\r\n question.subtype = ScaledAnswerQuestionType_1.ScaledAnswerQuestionType[ScaledAnswerQuestionType_1.ScaledAnswerQuestionType.RECOMMENDED_3_ANSWERS];\r\n }\r\n else if (this.answerSubtype == \"scaled-answer-agree-5-answers\") {\r\n question.subtype = ScaledAnswerQuestionType_1.ScaledAnswerQuestionType[ScaledAnswerQuestionType_1.ScaledAnswerQuestionType.AGREE_5_ANSWERS];\r\n }\r\n }\r\n };\r\n QuizEditController.prototype.setAnswerType = function (question) {\r\n if (this.isShortAnswerQuestionType(question)) {\r\n this.answerType = \"short-answer\";\r\n }\r\n else if (this.isShortAnswerAudioResponseQuestionType(question)) {\r\n this.answerType = \"short-answer-audio-response\";\r\n }\r\n else if (this.isShortAnswerWithUploadQuestionType(question)) {\r\n this.answerType = \"short-answer-with-upload\";\r\n }\r\n else if (this.isMultipleChoiceSingleAnswerQuestionType(question)) {\r\n this.answerType = \"multiple-choice-single-answer\";\r\n }\r\n else if (this.isMultipleChoiceMultipleAnswerQuestionType(question)) {\r\n this.answerType = \"multiple-choice-multiple-answer\";\r\n }\r\n else if (this.isScaledAnswerQuestionType(question)) {\r\n this.answerType = \"scaled-answer\";\r\n }\r\n else if (this.isFillInTheBlankQuestionType(question)) {\r\n this.answerType = \"fill-in-the-blank\";\r\n }\r\n else if (this.isMatchingQuestionType(question) || this.isHidingOptionsMatchingQuestionType(question)) {\r\n this.answerType = \"matching-answer\";\r\n }\r\n else if (this.isFillableFormQuestionType(question)) {\r\n this.answerType = \"fillable-form\";\r\n }\r\n else if (this.isHotspotSingleChoiceQuestionType(question)) {\r\n this.answerType = \"hotspot-single-choice\";\r\n }\r\n else if (this.isHotspotMultipleChoiceQuestionType(question)) {\r\n this.answerType = \"hotspot-multiple-choice\";\r\n }\r\n };\r\n QuizEditController.prototype.setAnswerSubtype = function (question) {\r\n if (this.isScaledAnswerQuestionType(question)) {\r\n if (this.isScaledAnswerYesNoSubtype(question)) {\r\n this.answerSubtype = \"scaled-answer-yes-no\";\r\n }\r\n else if (this.isScaledAnswerRecommended3AnswersSubtype(question)) {\r\n this.answerSubtype = \"scaled-answer-recommended-3-answers\";\r\n }\r\n else if (this.isScaledAnswerAgree5AnswersSubtype(question)) {\r\n this.answerSubtype = \"scaled-answer-agree-5-answers\";\r\n }\r\n }\r\n };\r\n QuizEditController.prototype.isFillableFormQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM];\r\n };\r\n QuizEditController.prototype.isFillInTheBlankQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILL_IN_THE_BLANK];\r\n };\r\n QuizEditController.prototype.changeMatchingType = function (question) {\r\n question.type = this.matchingOptionsHidden\r\n ? QuestionType_1.QuestionType[QuestionType_1.QuestionType.HIDING_OPTIONS_MATCHING_ANSWER]\r\n : QuestionType_1.QuestionType[QuestionType_1.QuestionType.MATCHING_ANSWER];\r\n };\r\n QuizEditController.prototype.isMatchingQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MATCHING_ANSWER];\r\n };\r\n QuizEditController.prototype.isHidingOptionsMatchingQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HIDING_OPTIONS_MATCHING_ANSWER];\r\n };\r\n QuizEditController.prototype.isMultipleChoiceMultipleAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_MULTIPLE_ANSWER];\r\n };\r\n QuizEditController.prototype.isMultipleChoiceSingleAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER];\r\n };\r\n QuizEditController.prototype.isShortAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER];\r\n };\r\n QuizEditController.prototype.isFlashcardQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.FLASH_CARD];\r\n };\r\n QuizEditController.prototype.isHotspotSingleChoiceQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_SINGLE_CHOICE];\r\n };\r\n QuizEditController.prototype.isHotspotMultipleChoiceQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.HOTSPOT_MULTIPLE_CHOICE];\r\n };\r\n QuizEditController.prototype.addMaterialToQuiz = function (material) {\r\n this.currentQuestion.materialId = material.id;\r\n this.currentQuestion.materialName = material.title;\r\n };\r\n QuizEditController.prototype.loadMaterials = function () {\r\n this.openLoadMaterials = !this.openLoadMaterials;\r\n if (this.openLoadMaterials) {\r\n this.materialsGridModel.loadPage(0);\r\n }\r\n };\r\n QuizEditController.prototype.isShortAnswerAudioResponseQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE];\r\n };\r\n QuizEditController.prototype.isShortAnswerWithUploadQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD];\r\n };\r\n QuizEditController.prototype.isScaledAnswerQuestionType = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER];\r\n };\r\n QuizEditController.prototype.isScaledAnswerYesNoSubtype = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER]\r\n && question.subtype == ScaledAnswerQuestionType_1.ScaledAnswerQuestionType[ScaledAnswerQuestionType_1.ScaledAnswerQuestionType.YES_NO];\r\n };\r\n QuizEditController.prototype.isScaledAnswerRecommended3AnswersSubtype = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER]\r\n && question.subtype == ScaledAnswerQuestionType_1.ScaledAnswerQuestionType[ScaledAnswerQuestionType_1.ScaledAnswerQuestionType.RECOMMENDED_3_ANSWERS];\r\n };\r\n QuizEditController.prototype.isScaledAnswerAgree5AnswersSubtype = function (question) {\r\n return question && question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SCALED_ANSWER]\r\n && question.subtype == ScaledAnswerQuestionType_1.ScaledAnswerQuestionType[ScaledAnswerQuestionType_1.ScaledAnswerQuestionType.AGREE_5_ANSWERS];\r\n };\r\n QuizEditController.prototype.hasShortOrFillFormAnswer = function () {\r\n return this.quizQuestions.some(function (question) {\r\n return question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER]\r\n || question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_AUDIO_RESPONSE]\r\n || question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER_WITH_UPLOAD]\r\n || question.type == QuestionType_1.QuestionType[QuestionType_1.QuestionType.FILLABLE_FORM];\r\n });\r\n };\r\n QuizEditController.prototype.isQuiz = function () {\r\n return this.quizType === \"QUIZ\";\r\n };\r\n QuizEditController.prototype.isSurvey = function () {\r\n return this.quizType === \"SURVEY\";\r\n };\r\n QuizEditController.prototype.isFlashcard = function () {\r\n return this.quizType === \"FLASHCARD\";\r\n };\r\n QuizEditController.prototype.isQuizBranchingAllowed = function () {\r\n return this.quiz.oneQuestionAtATime && this.quiz.questionsInAccordanceWithSequenceNumber\r\n && !this.quiz.generateFromBank && !this.quiz.excludeCorrectlyAnsweredQuestions;\r\n };\r\n QuizEditController.prototype.onAnswerNextQuestionChange = function (answer) {\r\n answer.nextQuestionSequenceNumber = Number(answer.nextQuestionSequenceNumber);\r\n if (answer.nextQuestionSequenceNumber == this.NEXT_QUESTION_SEQUENCE_NUMBER) {\r\n answer.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.NEXT_QUESTION];\r\n }\r\n else if (answer.nextQuestionSequenceNumber == this.END_OF_THE_QUIZ_SEQUENCE_NUMBER) {\r\n answer.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.END_OF_THE_QUIZ];\r\n }\r\n else {\r\n answer.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.SPECIFIED_QUESTION];\r\n }\r\n };\r\n QuizEditController.prototype.onQuestionNextQuestionChange = function (question) {\r\n question.nextQuestionSequenceNumber = Number(question.nextQuestionSequenceNumber);\r\n if (question.nextQuestionSequenceNumber == this.NEXT_QUESTION_SEQUENCE_NUMBER) {\r\n question.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.NEXT_QUESTION];\r\n }\r\n else if (question.nextQuestionSequenceNumber == this.END_OF_THE_QUIZ_SEQUENCE_NUMBER) {\r\n question.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.END_OF_THE_QUIZ];\r\n }\r\n else {\r\n question.nextQuestionType = NextQuestionType_1.NextQuestionType[NextQuestionType_1.NextQuestionType.SPECIFIED_QUESTION];\r\n }\r\n };\r\n QuizEditController.prototype.getCancelQuizHref = function () {\r\n return !!this.quizId ? this.quizzesRouter.quizzesDetailsUrl(this.quizId)\r\n : this.quizzesRouter.quizzesIndexUrl();\r\n };\r\n QuizEditController.prototype.getCancelSurveyHref = function () {\r\n return !!this.quizId ? this.quizzesRouter.surveysDetailsUrl(this.quizId)\r\n : this.quizzesRouter.surveysIndexUrl();\r\n };\r\n QuizEditController.prototype.getCancelFlashcardHref = function () {\r\n return !!this.quizId ? this.quizzesRouter.flashcardsDetailsUrl(this.quizId)\r\n : this.quizzesRouter.flashcardsIndexUrl();\r\n };\r\n QuizEditController.prototype.downloadQuizAsCsv = function () {\r\n var _this = this;\r\n this.quizImportExportService.getQuizCsvToken(this.quizId)\r\n .then(function (data) {\r\n var token = data[\"token\"];\r\n _this.$window.open(_this.url.base(\"api/quizzes/downloadQuizCsv/:token\")\r\n .param(\":token\", token)\r\n .service());\r\n });\r\n };\r\n QuizEditController.prototype.showCropperModal = function () {\r\n $(\"#imageCropperModal\").modal(\"show\");\r\n };\r\n QuizEditController.prototype.showCropperModalAfterLoad = function () {\r\n var _this = this;\r\n setTimeout(function () {\r\n _this.preview != undefined || _this.previewUrl != undefined\r\n ? _this.showCropperModal()\r\n : _this.showCropperModalAfterLoad();\r\n }, 100);\r\n };\r\n QuizEditController.prototype.focusOnElement = function (tabName) {\r\n angular.element(\".active\").removeClass(\"active\");\r\n angular.element(\"#\" + tabName).addClass(\"active\");\r\n document.getElementById(tabName).scrollIntoView();\r\n };\r\n QuizEditController.prototype.changePercentage = function () {\r\n if (this.percentageNumber == 0 && this.quiz.correctAnswersType == QuizEditController.PERCENTAGE_TYPE) {\r\n this.percentageNumber = 70;\r\n }\r\n else if (this.quiz.correctAnswersType != QuizEditController.PERCENTAGE_TYPE) {\r\n this.percentageNumber = 0;\r\n }\r\n };\r\n QuizEditController.prototype.increaseNumberOfQuestions = function () {\r\n this.numberOfQuestions += 100;\r\n };\r\n QuizEditController.prototype.deactivateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.add(\"hidden\");\r\n mainLoadingElement.classList.remove(\"hidden\");\r\n };\r\n QuizEditController.prototype.activateMainContent = function () {\r\n var mainElement = document.querySelector(\"div#mainContent\");\r\n var mainLoadingElement = document.querySelector(\"div#mainContentLoading\");\r\n mainElement.classList.remove(\"hidden\");\r\n mainLoadingElement.classList.add(\"hidden\");\r\n };\r\n QuizEditController.prototype.applyStylesToText = function (question) {\r\n var _this = this;\r\n var imgTagRx = //gi;\r\n var substitutedLines = [];\r\n while (true) {\r\n var addedImage = imgTagRx.exec(question ? this.currentQuestion.text : this.currentExplanations[0].explanation);\r\n if (!addedImage)\r\n break;\r\n substitutedLines.push(addedImage[0]);\r\n }\r\n substitutedLines.map(function (line) {\r\n if (question) {\r\n _this.currentQuestion.text = _this.currentQuestion.text.replace(line, line.slice(0, -2) + ' style=\"width: 100%\"/>');\r\n }\r\n else {\r\n _this.currentExplanations[0].explanation = _this.currentExplanations[0].explanation.replace(line, line.slice(0, -2) + ' style=\"width: 100%\"/>');\r\n }\r\n });\r\n };\r\n QuizEditController.NAME = \"quizzes.QuizEditController\";\r\n QuizEditController.PERCENTAGE_TYPE = \"PERCENTAGE\";\r\n QuizEditController.RESPONSE_DEFAULT_MAX_TEXT_LENGTH = 1000;\r\n QuizEditController.RESPONSE_DEFAULT_MAX_AUDIO_LENGTH = 180;\r\n QuizEditController.$inject = [\r\n \"$http\",\r\n \"$q\",\r\n \"$scope\",\r\n \"$location\",\r\n \"$routeParams\",\r\n \"Upload\",\r\n \"$timeout\",\r\n \"$window\",\r\n \"$rootScope\",\r\n UrlService_1.UrlService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n QuizService_1.QuizService.NAME,\r\n UserService_1.UserService.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n DialogService_1.DialogService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n BundleService_1.BundleService.NAME,\r\n UploadUtils_1.UploadUtils.NAME,\r\n QuizImportExportService_1.QuizImportExportService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n PermissionsService_1.PermissionsService.NAME\r\n ];\r\n return QuizEditController;\r\n})();\r\nexports.QuizEditController = QuizEditController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthRedirect\":26,\"../bundles/BundleService\":36,\"../businessUnits/BusinessUnitsService\":44,\"../components/dialog/DialogService\":166,\"../courses/models/QuizCorrectAnswersType\":224,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../security/permissions/SecuredObjectType\":424,\"../settings/SettingsService\":427,\"../urls/MaterialsRouter\":480,\"../urls/QuizzesRouter\":486,\"../users/UserService\":499,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/PredefinedLanguagesUtils\":522,\"../utils/StringBuilder\":525,\"../utils/UploadUtils\":527,\"../utils/UrlService\":528,\"./QuizImportExportService\":394,\"./QuizService\":396,\"./models/NextQuestionType\":400,\"./models/QuestionType\":401,\"./models/QuizType\":403,\"./models/ScaledAnswerQuestionType\":404}],394:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar QuizImportExportService = (function () {\r\n function QuizImportExportService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n }\r\n QuizImportExportService.prototype.getQuizRow = function (file, quizType) {\r\n var data = new FormData();\r\n data.append('file', file);\r\n data.append('quizType', quizType);\r\n var config = {\r\n headers: {\r\n 'Content-Type': undefined\r\n }\r\n };\r\n return this.$http.post(this.url.service(\"/api/quizzes/getQuizRow\"), data, config)\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n QuizImportExportService.prototype.createQuizFromFile = function (quizRowInputList, quiz) {\r\n quiz.quizRowInputList = quizRowInputList;\r\n return this.$http.post(this.url.service(\"/api/quizzes/createQuizFromFile\"), quiz).then(function (result) { return result.data; });\r\n };\r\n QuizImportExportService.prototype.getQuizCsvToken = function (quizId) {\r\n return this.$http.post(this.url.base(\"/api/quizzes/:quizId/csv/downloadToken\")\r\n .param(\":quizId\", quizId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizImportExportService.prototype.getDownloadTemplateUrl = function () {\r\n return this.url.service(\"/api/quizzes/downloadTemplate\");\r\n };\r\n QuizImportExportService.prototype.getDownloadFlashcardTemplateUrl = function () {\r\n return this.url.service(\"/api/quizzes/downloadFlashcardTemplate\");\r\n };\r\n QuizImportExportService.NAME = \"quizzes.QuizImportExportService\";\r\n QuizImportExportService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return QuizImportExportService;\r\n})();\r\nexports.QuizImportExportService = QuizImportExportService;\r\n},{\"../utils/UrlService\":528}],395:[function(require,module,exports){\nvar QuizzesRouter_1 = require(\"./../urls/QuizzesRouter\");\r\nvar QuizService_1 = require(\"./QuizService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar LocationChangeHelper_1 = require(\"../utils/LocationChangeHelper\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar QuestionType_1 = require(\"./models/QuestionType\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar QuizPassingController = (function () {\r\n function QuizPassingController($scope, $location, $routeParams, quizService, quizzesRouter, settingsService, dialogService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n this.quizService = quizService;\r\n this.quizzesRouter = quizzesRouter;\r\n this.settingsService = settingsService;\r\n this.dialogService = dialogService;\r\n this.quiz = {};\r\n this.quizResult = {};\r\n this.disableCompleteButton = false;\r\n this.cancelQuiz = false;\r\n this.quizCompleted = false;\r\n this.recursionDepth = 0;\r\n this.quizId = $routeParams[QuizzesRouter_1.QuizzesRouter.QUIZ_ID_PARAM];\r\n this.quizResultId = $routeParams[QuizzesRouter_1.QuizzesRouter.QUIZ_RESULT_ID_PARAM];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_QUIZZES_MENU_KEY);\r\n this.loadQuiz();\r\n this.$scope.$on('$locationChangeStart', function (event, newLocation) {\r\n if (LocationChangeHelper_1.LocationChangeHelper.isEnablePreventLocationChange(newLocation)) {\r\n if (!_this.disableCompleteButton && _this.quizResult && _this.quizResult.id && !_this.cancelQuiz) {\r\n INotifier_1.notifier.warning(\"You can't leave this page unless you complete or cancel the quiz (survey or flashcards)\");\r\n event.preventDefault();\r\n }\r\n }\r\n });\r\n }\r\n QuizPassingController.prototype.loadUserQuizResult = function () {\r\n var _this = this;\r\n this.quizService.getUserQuizCurrentResult(this.quizId, this.quizResult.attempt).then(function (result) {\r\n _this.quizResult = angular.copy(result);\r\n if (_this.quizResult && _this.quizResult.id) {\r\n _this.duration = null;\r\n }\r\n else {\r\n console.log(\"Cannot find your unfinished session for this Quiz.\");\r\n _this.$location.url(_this.quizzesRouter.quizzesDetailsUrl(_this.quizId));\r\n }\r\n });\r\n };\r\n QuizPassingController.prototype.loadQuiz = function () {\r\n var _this = this;\r\n this.quizService.getQuizForPassing(this.quizId, this.quizResultId).then(function (q) {\r\n angular.copy(q, _this.quiz);\r\n PageHeaderHelper_1.PageHeader.set().header(q.title).update();\r\n _this.loadUserQuizResult();\r\n });\r\n };\r\n QuizPassingController.prototype.selectCurrentAnswer = function (question, answer) {\r\n question.answers.forEach(function (a) {\r\n a.selected = false;\r\n });\r\n answer.selected = true;\r\n };\r\n QuizPassingController.prototype.stopQuiz = function (confirm) {\r\n var _this = this;\r\n if (this.quiz.duration != null && !confirm) {\r\n this.dialogService.confirm(\"Are you sure you want to cancel the quiz? When the timer is expired, the 'Failed' result will be saved.\", {\r\n title: \"Cancel the quiz\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n _this.stopQuiz(true);\r\n });\r\n }\r\n else {\r\n this.cancelQuiz = true;\r\n $(\"body\").removeClass(\"modal-open\");\r\n this.$location.url(this.quizzesRouter.quizzesDetailsUrl(this.quizId));\r\n }\r\n };\r\n QuizPassingController.prototype.completeQuiz = function () {\r\n var _this = this;\r\n if (!this.quizCompleted && this.recursionDepth < QuizPassingController.MAX_RECURSION_DEPTH) {\r\n this.disableCompleteButton = true;\r\n this.quizCompleted = true;\r\n this.recursionDepth++;\r\n this.quizResult.answers = [];\r\n this.quiz.questions.forEach(function (question) {\r\n var result = {\r\n quizResultId: _this.quizResult.id,\r\n questionId: question.id,\r\n answerIds: question.answers.filter(function (a) { return a.selected; }).map(function (a) {\r\n return a.id;\r\n }),\r\n answerText: question.shortAnswer\r\n };\r\n _this.quizResult.answers.push(result);\r\n });\r\n this.quizService.completeQuizByUser(this.quizResult).then(function (quiz) {\r\n _this.recursionDepth = 0;\r\n _this.quiz.questions.forEach(function (qFrom) {\r\n qFrom.answers.forEach(function (aFrom) {\r\n quiz.questions.forEach(function (qTo) {\r\n if (qFrom.id == qTo.id) {\r\n qTo.answers.forEach(function (aTo) {\r\n if (aFrom.id === aTo.id) {\r\n aTo.selected = aFrom.selected;\r\n }\r\n });\r\n }\r\n });\r\n });\r\n });\r\n angular.copy(quiz, _this.quiz);\r\n }).catch(function (response) {\r\n if (response && response.data && response.data.error) {\r\n if (response.data.error == \"optimistic.locking.failed.catched\") {\r\n _this.quizCompleted = false;\r\n _this.completeQuiz();\r\n }\r\n }\r\n });\r\n }\r\n };\r\n QuizPassingController.prototype.returnToQuizzesDetails = function () {\r\n this.$location.url(this.quizzesRouter.quizzesDetailsUrl(this.quizId));\r\n };\r\n QuizPassingController.prototype.isMultipleChoiceMultipleAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_MULTIPLE_ANSWER];\r\n };\r\n QuizPassingController.prototype.isMultipleChoiceSingleAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.MULTIPLE_CHOICE_SINGLE_ANSWER];\r\n };\r\n QuizPassingController.prototype.isShortAnswerQuestionType = function (question) {\r\n return question && question.type === QuestionType_1.QuestionType[QuestionType_1.QuestionType.SHORT_ANSWER];\r\n };\r\n QuizPassingController.prototype.isTooLongAnswerFor = function (question) {\r\n if (question.shortAnswer) {\r\n return question.shortAnswer.length >= question.shortAnswerMaxLength;\r\n }\r\n return false;\r\n };\r\n QuizPassingController.prototype.checkShortAnswerLength = function (question) {\r\n if (question.shortAnswer.length > question.shortAnswerMaxLength) {\r\n question.shortAnswer = question.shortAnswer.slice(0, question.shortAnswerMaxLength);\r\n }\r\n };\r\n QuizPassingController.NAME = \"quizzes.QuizPassingController\";\r\n QuizPassingController.MAX_RECURSION_DEPTH = 3;\r\n QuizPassingController.$inject = [\r\n \"$scope\",\r\n \"$location\",\r\n \"$routeParams\",\r\n QuizService_1.QuizService.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return QuizPassingController;\r\n})();\r\nexports.QuizPassingController = QuizPassingController;\r\n},{\"../INotifier\":5,\"../components/dialog/DialogService\":166,\"../settings/SettingsService\":427,\"../utils/LocationChangeHelper\":515,\"./../urls/QuizzesRouter\":486,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./QuizService\":396,\"./models/QuestionType\":401}],396:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar QuizService = (function () {\r\n function QuizService($http, $sce, url) {\r\n this.$http = $http;\r\n this.$sce = $sce;\r\n this.url = url;\r\n }\r\n QuizService.prototype.getQuizInfo = function (id) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/quizInfo/:id?\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getQuiz = function (quizResultId) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/quiz/:quizResultId?\")\r\n .param(\":quizResultId\", quizResultId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.copy = function (quizId) {\r\n return this.$http.post(this.url.base(\"/api/quizzes/:quizId/copy\")\r\n .param(\":quizId\", quizId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getQuizForPassing = function (quizId, quizResultId, courseId) {\r\n var url = \"/api/quizzes/quizForPassing/:quizId?courseId=:courseId\";\r\n if (quizResultId != null) {\r\n url += \"&quizResultId=:quizResultId\";\r\n }\r\n var urlBuilder = this.url.base(url)\r\n .param(\":quizId\", quizId)\r\n .param(\":courseId\", courseId || \"\");\r\n if (quizResultId != null) {\r\n urlBuilder.param(\":quizResultId\", quizResultId);\r\n }\r\n return this.$http.get(urlBuilder.service())\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n QuizService.prototype.getQuizForEditing = function (id) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/quizForEditing/:id?\")\r\n .param(\":id\", id)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.create = function (quiz, permissionsWithUsersAndGroups) {\r\n quiz.permissionsWithUsersAndGroups = permissionsWithUsersAndGroups;\r\n return this.$http.post(this.url.service(\"/api/quizzes\"), quiz).then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.update = function (quiz, permissionsWithUsersAndGroups, isResetPreview, preview) {\r\n quiz.permissionsWithUsersAndGroups = permissionsWithUsersAndGroups;\r\n quiz.preview = preview != null\r\n ? { name: preview.name, type: preview.type, size: preview.size }\r\n : null;\r\n quiz.resetPreview = isResetPreview;\r\n return this.$http.put(this.url.service(\"/api/quizzes\"), quiz).then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.startQuizByUser = function (quizId, sourceType, quizTags, courseId, sectionId, courseProgressId, flashcardNextRound) {\r\n return this.$http.post(this.url.service(\"/api/quizzes/results\"), {\r\n quizId: quizId,\r\n sourceType: sourceType,\r\n selectedQuizTags: quizTags,\r\n courseId: courseId,\r\n sectionId: sectionId,\r\n courseProgressId: courseProgressId,\r\n flashcardNextRound: flashcardNextRound\r\n })\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.completeQuizByUser = function (quizResult, courseId) {\r\n var params = quizResult;\r\n if (courseId) {\r\n params.courseId = courseId;\r\n }\r\n return this.$http.put(this.url.service(\"/api/quizzes/results\"), params).then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.completeQuestionByUser = function (quizId, quizResultId, quizResultVersion, questionId, answer, courseId) {\r\n var params = answer;\r\n if (courseId) {\r\n params.courseId = courseId;\r\n }\r\n return this.$http.put(this.url.base(\"/api/quizzes/:quizId/results/:quizResultId/question/:questionId?version=:version\")\r\n .param(\":quizId\", quizId)\r\n .param(\":quizResultId\", quizResultId)\r\n .param(\":questionId\", questionId)\r\n .param(\":version\", quizResultVersion)\r\n .service(), params)\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getCurrentUserQuizResults = function (quizId, sourceType, sectionId, courseProgressId) {\r\n var url = \"/api/quizzes/results/:quizId\";\r\n if (sourceType != null) {\r\n url += \"?sourceType=:sourceType\";\r\n }\r\n if (sectionId != null) {\r\n url += \"§ionId=:sectionId\";\r\n }\r\n if (courseProgressId) {\r\n url += \"&courseProgressId=:courseProgressId\";\r\n }\r\n var urlBuilder = this.url.base(url)\r\n .param(\":quizId\", quizId);\r\n if (sourceType != null) {\r\n urlBuilder.param(\":sourceType\", sourceType);\r\n }\r\n if (sectionId != null) {\r\n urlBuilder.param(\":sectionId\", sectionId);\r\n }\r\n if (courseProgressId) {\r\n urlBuilder.param(\":courseProgressId\", courseProgressId);\r\n }\r\n return this.$http.get(urlBuilder.service())\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n QuizService.prototype.getCourseQuizResults = function (sectionId, courseProgressIds, userIds, groupIds) {\r\n var requestConfig = {\r\n params: {\r\n courseProgressIds: courseProgressIds,\r\n userIdsFilter: userIds,\r\n groupIdsFilter: groupIds\r\n }\r\n };\r\n return this.$http.get(this.url.base(\"/api/quizzes/courseResults?sectionId=:sectionId\")\r\n .param(\":sectionId\", sectionId)\r\n .service(), requestConfig).then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getQuizQuestions = function (courseId, sectionId) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/questions?courseId=:courseId§ionId=:sectionId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":sectionId\", sectionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getSurveyQuestions = function (surveyId) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/surveyQuestions?surveyId=:surveyId\")\r\n .param(\":surveyId\", surveyId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getAllSurveyQuestions = function (surveyId) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/allSurveyQuestions?surveyId=:surveyId\")\r\n .param(\":surveyId\", surveyId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getQuizQuestionsForQuiz = function (quizResultId) {\r\n return this.getAllQuizQuestionsForQuiz(quizResultId, false);\r\n };\r\n QuizService.prototype.getAllQuizQuestionsForQuiz = function (quizResultId, isIncludeInactive) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/quizQuestions?quizResultId=:quizResultId&isIncludeInactive=:isIncludeInactive\")\r\n .param(\":quizResultId\", quizResultId)\r\n .param(\":isIncludeInactive\", isIncludeInactive)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getQuizAnswerResults = function (courseId, quizResultIds) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/answerResults?courseId=:courseId\")\r\n .param(\":courseId\", courseId)\r\n .service(), { params: { quizResultIds: quizResultIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getQuizAnswerResultsForQuizResult = function (quizResultId) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/quizAnswerResults?quizResultId=:quizResultId\")\r\n .param(\":quizResultId\", quizResultId)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getUserQuizCurrentResult = function (quizId, attempt) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/results/current/:quizId?attempt=:attempt\")\r\n .param(\":quizId\", quizId)\r\n .param(\":attempt\", attempt || \"\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getQuizResult = function (quizId, quizResultId, courseId) {\r\n var url = \"/api/quizzes/:quizId/results/:quizResultId\";\r\n if (courseId) {\r\n url += \"?courseId=:courseId\";\r\n }\r\n var urlBuilder = this.url.base(url)\r\n .param(\":quizId\", quizId)\r\n .param(\":quizResultId\", quizResultId);\r\n if (courseId) {\r\n urlBuilder.param(\":courseId\", courseId);\r\n }\r\n return this.$http.get(urlBuilder.service())\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n QuizService.prototype.getUserQuizResult = function (quizId, quizResultId) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/:quizId/results/:quizResultId/my\")\r\n .param(\":quizId\", quizId)\r\n .param(\":quizResultId\", quizResultId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.hasUserCreatedQuizzes = function () {\r\n return this.$http.get(this.url.service(\"/api/quizzes/profileQuizzes/hasCreated\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getAssessmentResult = function (questionId, quizResultId) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/assessment/:quizResultId/:questionId/\")\r\n .param(\":quizResultId\", quizResultId)\r\n .param(\":questionId\", questionId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getAssessmentResults = function (quizResultId, questionsIds) {\r\n var params = {\r\n id: questionsIds\r\n };\r\n return this.$http.get(this.url.base(\"/api/quizzes/assessment/:quizResultId\")\r\n .param(\":quizResultId\", quizResultId)\r\n .service(), { params: params })\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getBundleIdForQuizResult = function (quizId, quizResultId) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/:quizId/results/:quizResultId/bundleIdForResult\")\r\n .param(\":quizId\", quizId)\r\n .param(\":quizResultId\", quizResultId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getQuizSurveyStatistics = function (courseId, surveyId) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/course/:courseId/survey/:surveyId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":surveyId\", surveyId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getSurveysForCourse = function (courseId) {\r\n return this.$http.get(this.url.service(\"/api/quizzes/surveyForCourse?courseId=\" + courseId))\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getDependentCoursesFromQuizSurvey = function (quizId) {\r\n return this.$http.get(this.url.service(\"/api/quizzes/\" + quizId + \"/courses\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.inactiveQuizSurvey = function (quizId) {\r\n return this.$http.put(this.url.service(\"/api/quizzes/\" + quizId + \"/inactive\"), {})\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getAnswerResultByQuestionCode = function (courseProgressId, questionCode) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/:courseProgressId/answerResultByQuestionCode?questionCode=:questionCode\")\r\n .param(\":courseProgressId\", courseProgressId)\r\n .param(\":questionCode\", questionCode)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.saveFillableForm = function (quizId, questionId, bundleId, courseId, data) {\r\n return this.$http.post(this.url.base('/api/quizzes/:quizId/saveFillableForm/:questionId?bundleId=:bundleId&courseId=:courseId')\r\n .param(\":quizId\", quizId)\r\n .param(\":questionId\", questionId)\r\n .param(\":bundleId\", bundleId)\r\n .param(\":courseId\", courseId)\r\n .service(), data)\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.getQuizzesForCourse = function (courseId) {\r\n return this.$http.get(this.url.service(\"/api/quizzes/quizForCourse?courseId=\" + courseId))\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.prototype.findQuizzesByMaterial = function (materialId) {\r\n return this.$http.get(this.url.base(\"/api/quizzes/by/material/:materialId\")\r\n .param(\":materialId\", materialId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n QuizService.NAME = \"quizzes.QuizService\";\r\n QuizService.$inject = [\r\n \"$http\",\r\n \"$sce\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return QuizService;\r\n})();\r\nexports.QuizService = QuizService;\r\n},{\"../utils/UrlService\":528}],397:[function(require,module,exports){\nvar QuizzesRouter_1 = require(\"./../urls/QuizzesRouter\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar ResizeViewService_1 = require(\"../utils/ResizeViewService\");\r\nvar QuizType_1 = require(\"./models/QuizType\");\r\nvar CustomBrandingService_1 = require(\"../branding/CustomBrandingService\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar Event_1 = require(\"../components/models/Event\");\r\nvar QuizzesController = (function () {\r\n function QuizzesController($scope, $rootScope, $http, $location, $window, quizzesRouter, permissionsApi, url, userService, brandingService, dialogService, commonFilterService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.quizzesRouter = quizzesRouter;\r\n this.permissionsApi = permissionsApi;\r\n this.url = url;\r\n this.userService = userService;\r\n this.brandingService = brandingService;\r\n this.dialogService = dialogService;\r\n this.commonFilterService = commonFilterService;\r\n this.rowShow = new Map();\r\n this.quizTypes = [\r\n { id: QuizType_1.QuizType.QUIZ, name: \"Quiz\" },\r\n { id: QuizType_1.QuizType.SURVEY, name: \"Survey\" }\r\n ];\r\n this.owner = [];\r\n this.countActiveFilter = 0;\r\n this.quizzesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/quizzes\")));\r\n this.quizzesGridModel.addLoadingListener(this);\r\n this.getStorageFilters();\r\n this.setTypeParameters();\r\n if (window.innerWidth < 1200) {\r\n this.quizzesGridModel.pageSize = 10;\r\n }\r\n else {\r\n this.quizzesGridModel.pageSize = 9;\r\n }\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n if (_this.$location.path() == QuizzesRouter_1.QuizzesRouter.surveysIndexRoute) {\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader()\r\n .addActionLinkIf(systemPermissions.addQuizzes, '+ New', _this.quizzesRouter.createUrl(\"SURVEY\")).update();\r\n }\r\n else if (_this.$location.path() == QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute) {\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader()\r\n .addActionLinkIf(systemPermissions.addQuizzes, '+ New', _this.quizzesRouter.createUrl(\"QUIZ\")).update();\r\n }\r\n else if (_this.$location.path() == QuizzesRouter_1.QuizzesRouter.flashcardsIndexRoute) {\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader()\r\n .addActionLinkIf(systemPermissions.addQuizzes, '+ New', _this.quizzesRouter.createUrl(\"FLASHCARD\")).update();\r\n }\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.viewType = 1;\r\n this.resizeViewService = new ResizeViewService_1.ResizeViewService(this.viewType);\r\n this.window = angular.element(this.$window);\r\n this.loadUserProfile();\r\n this.window.bind('resize', function () {\r\n var currentPage = _this.quizzesGridModel.currentPage >= _this.quizzesGridModel.totalPageCount\r\n ? _this.quizzesGridModel.currentPage - 1\r\n : _this.quizzesGridModel.currentPage;\r\n if (window.innerWidth < 1200) {\r\n _this.quizzesGridModel.pageSize = 10;\r\n _this.quizzesGridModel.loadPage(currentPage);\r\n }\r\n else {\r\n _this.quizzesGridModel.pageSize = 9;\r\n _this.quizzesGridModel.loadPage(currentPage);\r\n }\r\n _this.viewType = _this.resizeViewService.setResizeViewType(_this.viewType);\r\n });\r\n this.toggleVhsPageHeaderVisibility(\"\");\r\n this.$scope.$on(\"$destroy\", function () {\r\n _this.window.unbind('resize');\r\n _this.toggleVhsPageHeaderVisibility(\"destroy\");\r\n });\r\n $('#infoDialog').on('hidden.bs.modal', function (e) {\r\n $(\"body\").addClass(\"modal-open\");\r\n });\r\n this.getOwnersUrl();\r\n }\r\n QuizzesController.prototype.loadUserProfile = function () {\r\n var _this = this;\r\n this.userService.getCurrentUserProfile().then(function (user) {\r\n _this.userProfile = user;\r\n _this.viewType = _this.userProfile ?\r\n Number(_this.userProfile.pageViewMode) : 1;\r\n });\r\n };\r\n QuizzesController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(QuizzesController.NAME);\r\n this.countActiveFilter = this.commonFilterService.applyStorageFilter(this.storageFilterValues, this.quizzesGridModel);\r\n this.searchInput = this.commonFilterService.getSearchInput(QuizzesController.NAME);\r\n if (this.searchInput) {\r\n this.commonFilterService.openSearchInput();\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n }\r\n this.quizzesGridModel.loadCurrentPage();\r\n };\r\n QuizzesController.prototype.setTypeParameters = function () {\r\n if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.surveysIndexRoute) {\r\n this.quizzesGridModel.filter.typeId = QuizType_1.QuizType.SURVEY;\r\n PageHeaderHelper_1.PageHeader.set().header(\"Surveys\").update();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_SURVEYS_MENU_KEY);\r\n }\r\n else if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute) {\r\n this.quizzesGridModel.filter.typeId = QuizType_1.QuizType.QUIZ;\r\n PageHeaderHelper_1.PageHeader.set().header(\"Quizzes\").update();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_QUIZZES_MENU_KEY);\r\n }\r\n else if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.flashcardsIndexRoute) {\r\n this.quizzesGridModel.filter.typeId = QuizType_1.QuizType.FLASHCARD;\r\n PageHeaderHelper_1.PageHeader.set().header(\"Flashcards\").update();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.EDUCATION_FLASHCARDS_MENU_KEY);\r\n }\r\n };\r\n QuizzesController.prototype.isQuiz = function () {\r\n return this.$location.path() == QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute;\r\n };\r\n QuizzesController.prototype.isSurvey = function () {\r\n return this.$location.path() == QuizzesRouter_1.QuizzesRouter.surveysIndexRoute;\r\n };\r\n QuizzesController.prototype.isFlashcard = function () {\r\n return this.$location.path() == QuizzesRouter_1.QuizzesRouter.flashcardsIndexRoute;\r\n };\r\n QuizzesController.prototype.detailUrl = function (quizId) {\r\n if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.surveysIndexRoute) {\r\n return this.quizzesRouter.surveysDetailsUrl(quizId);\r\n }\r\n else if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute) {\r\n return this.quizzesRouter.quizzesDetailsUrl(quizId);\r\n }\r\n else if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.flashcardsIndexRoute) {\r\n return this.quizzesRouter.flashcardsDetailsUrl(quizId);\r\n }\r\n };\r\n QuizzesController.prototype.updateUrl = function (quizId) {\r\n if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.surveysIndexRoute) {\r\n return this.quizzesRouter.surveysUpdateUrl(quizId);\r\n }\r\n else if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute) {\r\n return this.quizzesRouter.quizzesUpdateUrl(quizId);\r\n }\r\n else if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.flashcardsIndexRoute) {\r\n return this.quizzesRouter.flashcardsUpdateUrl(quizId);\r\n }\r\n };\r\n QuizzesController.prototype.toggleVhsPageHeaderVisibility = function (param) {\r\n var elem = angular.element(document.querySelector(\"body\"));\r\n if (param == \"destroy\") {\r\n elem.removeClass(\"vhs-page-header-hidden\");\r\n }\r\n else if (param == \"\") {\r\n if (!elem.hasClass(\"vhs-page-header-hidden\")) {\r\n elem.addClass(\"vhs-page-header-hidden\");\r\n }\r\n }\r\n };\r\n QuizzesController.prototype.startLoading = function () {\r\n };\r\n QuizzesController.prototype.endLoading = function () {\r\n this.quizzesGridModel.entries.forEach(function (quiz) {\r\n quiz.subjectNameAndTitle = quiz.subjectName + \"/\" + quiz.title;\r\n });\r\n };\r\n QuizzesController.prototype.showDetails = function (index, keyCode) {\r\n if (keyCode == 13 || !keyCode) {\r\n this.rowShow.set(index, !this.rowShow.get(index));\r\n }\r\n };\r\n QuizzesController.prototype.searchQuiz = function () {\r\n this.quizzesGridModel.loadPage(0);\r\n };\r\n QuizzesController.prototype.loadQuizDetails = function (quizId) {\r\n if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.surveysIndexRoute) {\r\n this.$location.url(this.quizzesRouter.surveysDetailsUrl(quizId));\r\n }\r\n else if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute) {\r\n this.$location.url(this.quizzesRouter.quizzesDetailsUrl(quizId));\r\n }\r\n else if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.flashcardsIndexRoute) {\r\n this.$location.url(this.quizzesRouter.flashcardsDetailsUrl(quizId));\r\n }\r\n };\r\n QuizzesController.prototype.getNotFoundMessage = function () {\r\n if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.surveysIndexRoute) {\r\n return \"Surveys not found\";\r\n }\r\n else if (this.$location.path() == QuizzesRouter_1.QuizzesRouter.quizzesIndexRoute) {\r\n return \"Quizzes not found\";\r\n }\r\n };\r\n QuizzesController.prototype.getQuizDetailsUrl = function (id) {\r\n return this.quizzesRouter.quizzesDetailsUrl(id);\r\n };\r\n QuizzesController.prototype.loadSearch = function () {\r\n if (sessionStorage.getItem(\"vhsQuizzesFilter.searchString\")) {\r\n this.quizzesGridModel.filter.searchString = sessionStorage.getItem(\"vhsQuizzesFilter.searchString\");\r\n }\r\n if (sessionStorage.getItem(\"vhsQuizzesFilter.viewType\")) {\r\n this.quizzesGridModel.filter.viewType = parseInt(sessionStorage.getItem(\"vhsQuizzesFilter.viewType\"));\r\n this.viewType = this.quizzesGridModel.filter.viewType;\r\n }\r\n if (sessionStorage.getItem(\"vhsQuizzesFilter.subjectId\")) {\r\n this.quizzesGridModel.filter.subjectId = parseInt(sessionStorage.getItem(\"vhsQuizzesFilter.subjectId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsQuizzesFilter.ownerId\")) {\r\n this.quizzesGridModel.filter.fileType = parseInt(sessionStorage.getItem(\"vhsQuizzesFilter.ownerId\"));\r\n }\r\n if (sessionStorage.getItem(\"vhsQuizzesFilter.languageId\")) {\r\n this.quizzesGridModel.filter.topic = sessionStorage.getItem(\"vhsQuizzesFilter.languageId\");\r\n }\r\n if (sessionStorage.getItem(\"vhsQuizzesFilter.typeId\")) {\r\n this.quizzesGridModel.filter.typeId = sessionStorage.getItem(\"vhsQuizzesFilter.typeId\");\r\n }\r\n };\r\n QuizzesController.prototype.clearSearch = function () {\r\n this.quizzesGridModel.filter.searchString = null;\r\n this.quizzesGridModel.filter.viewType = null;\r\n this.quizzesGridModel.filter.subjectId = null;\r\n this.quizzesGridModel.filter.ownerId = null;\r\n this.quizzesGridModel.filter.languageId = null;\r\n this.quizzesGridModel.filter.typeId = null;\r\n this.viewType = 1;\r\n sessionStorage.removeItem(\"vhsQuizzesFilter.searchString\");\r\n sessionStorage.removeItem(\"vhsQuizzesFilter.typeId\");\r\n sessionStorage.removeItem(\"vhsQuizzesFilter.subjectId\");\r\n sessionStorage.removeItem(\"vhsQuizzesFilter.ownerId\");\r\n sessionStorage.removeItem(\"vhsQuizzesFilter.languageId\");\r\n sessionStorage.removeItem(\"vhsQuizzesFilter.viewType\");\r\n this.quizzesGridModel.loadPage(0);\r\n };\r\n QuizzesController.prototype.onFilterChange = function (key, value) {\r\n if (value !== null) {\r\n sessionStorage.setItem(\"vhsQuizzesFilter.\" + key, value);\r\n }\r\n else {\r\n sessionStorage.removeItem(\"vhsQuizzesFilter.\" + key);\r\n }\r\n };\r\n QuizzesController.prototype.setViewType = function (viewType) {\r\n this.viewType = viewType;\r\n this.resizeViewService.oldViewType = viewType;\r\n this.updateUserPageViewMode(Boolean(viewType));\r\n };\r\n QuizzesController.prototype.updateUserPageViewMode = function (pageViewMode) {\r\n this.userService.updatePageViewMode(pageViewMode);\r\n };\r\n QuizzesController.prototype.isViewTypeSelected = function (viewType) {\r\n return this.viewType == viewType;\r\n };\r\n QuizzesController.prototype.getOwnersUrl = function () {\r\n var _this = this;\r\n this.userService.getOwnersUrl()\r\n .then(function (response) { return _this.owner = response; });\r\n };\r\n QuizzesController.prototype.calcTotalCount = function () {\r\n var count = 0;\r\n for (var _i = 0, _a = this.quizzesGridModel.entries; _i < _a.length; _i++) {\r\n var quiz = _a[_i];\r\n quiz.active ? count++ : null;\r\n }\r\n return count;\r\n };\r\n QuizzesController.prototype.importQuiz = function () {\r\n this.$rootScope.$broadcast(Event_1.Event.QUIZ_SURVEY_IMPORT_UPDATE);\r\n $(\"#importQuizTemplate\").modal(\"toggle\");\r\n };\r\n QuizzesController.prototype.searchKeyPress = function () {\r\n this.commonFilterService.saveSearchInput(QuizzesController.NAME, this.searchInput);\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n this.quizzesGridModel.loadCurrentPage();\r\n };\r\n QuizzesController.prototype.closeSearchInput = function () {\r\n this.commonFilterService.closeSearchInput(QuizzesController.NAME, window);\r\n if (!this.searchInput || this.searchInput.length > 0) {\r\n this.searchInput = '';\r\n this.quizzesGridModel.filter.searchString = this.searchInput;\r\n this.quizzesGridModel.loadCurrentPage();\r\n }\r\n };\r\n QuizzesController.prototype.showFilterDialog = function () {\r\n this.commonFilterService.showFilterDialog(window);\r\n };\r\n QuizzesController.prototype.updateFilter = function (type, referenceObject) {\r\n this.countActiveFilter += this.commonFilterService.updateGeneralFilter(type, referenceObject, QuizzesController.NAME);\r\n };\r\n QuizzesController.prototype.clearFilter = function () {\r\n this.countActiveFilter = 0;\r\n this.commonFilterService.clearFilter(QuizzesController.NAME, this.quizzesGridModel);\r\n };\r\n QuizzesController.prototype.isMobileVersion = function () {\r\n return window.innerWidth < 768;\r\n };\r\n QuizzesController.prototype.setPopupClasses = function () {\r\n var cards = Array.prototype.slice.call(document.getElementsByClassName(\"card information_tooltip\"));\r\n for (var _i = 0; _i < cards.length; _i++) {\r\n var card = cards[_i];\r\n var rec = card.getBoundingClientRect();\r\n var popup = card.parentElement.getElementsByClassName(\"popup_onhover\").item(0);\r\n if (rec.right + popup.clientWidth >= document.body.clientWidth) {\r\n popup.setAttribute(\"class\", \"popup_onhover left\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"right-pointer\");\r\n }\r\n else {\r\n popup.setAttribute(\"class\", \"popup_onhover right\");\r\n popup.getElementsByTagName(\"i\").item(0).setAttribute(\"class\", \"left-pointer\");\r\n }\r\n }\r\n };\r\n QuizzesController.NAME = \"quizzes.QuizzesController\";\r\n QuizzesController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$http\",\r\n \"$location\",\r\n \"$window\",\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n UserService_1.UserService.NAME,\r\n CustomBrandingService_1.CustomBrandingService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME\r\n ];\r\n return QuizzesController;\r\n})();\r\nexports.QuizzesController = QuizzesController;\r\n},{\"../branding/CustomBrandingService\":35,\"../common/CommonFilterService\":49,\"../components/dialog/DialogService\":166,\"../components/models/Event\":170,\"../utils/ResizeViewService\":524,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../security/PermissionsService\":418,\"./../urls/QuizzesRouter\":486,\"./../users/UserService\":499,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./models/QuizType\":403}],398:[function(require,module,exports){\nvar QuizService_1 = require(\"./QuizService\");\r\nvar QuizImportExportService_1 = require(\"./QuizImportExportService\");\r\nvar QuizzesController_1 = require(\"./QuizzesController\");\r\nvar QuizEditController_1 = require(\"./QuizEditController\");\r\nvar QuizController_1 = require(\"./QuizController\");\r\nvar QuizPassingController_1 = require(\"./QuizPassingController\");\r\nvar AuthModule_1 = require(\"./../auth/AuthModule\");\r\nvar AuthCoreModule_1 = require(\"./../authcore/AuthCoreModule\");\r\nvar SecurityModule_1 = require(\"./../security/SecurityModule\");\r\nvar UsersModule_1 = require(\"./../users/UsersModule\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nexports.QuizzesModule = angular\r\n .module(\"quizzes\", [\r\n AuthModule_1.AuthModule.name,\r\n AuthCoreModule_1.AuthCoreModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UsersModule_1.UsersModule.name,\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .service(QuizService_1.QuizService.NAME, QuizService_1.QuizService)\r\n .service(QuizImportExportService_1.QuizImportExportService.NAME, QuizImportExportService_1.QuizImportExportService)\r\n .controller(QuizzesController_1.QuizzesController.NAME, QuizzesController_1.QuizzesController)\r\n .controller(QuizEditController_1.QuizEditController.NAME, QuizEditController_1.QuizEditController)\r\n .controller(QuizController_1.QuizController.NAME, QuizController_1.QuizController)\r\n .controller(QuizPassingController_1.QuizPassingController.NAME, QuizPassingController_1.QuizPassingController);\r\n},{\"./../auth/AuthModule\":17,\"./../authcore/AuthCoreModule\":24,\"./../security/SecurityModule\":419,\"./../urls/UrlsModule\":492,\"./../users/UsersModule\":504,\"./QuizController\":392,\"./QuizEditController\":393,\"./QuizImportExportService\":394,\"./QuizPassingController\":395,\"./QuizService\":396,\"./QuizzesController\":397}],399:[function(require,module,exports){\n(function (IQuizImportExportErrorCode) {\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"NO_ERRORS\"] = 0] = \"NO_ERRORS\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"QUIZ_NAME_WAS_NOT_GIVEN\"] = 1] = \"QUIZ_NAME_WAS_NOT_GIVEN\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"IS_CORRECT_FIELD_IS_EMPTY\"] = 2] = \"IS_CORRECT_FIELD_IS_EMPTY\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"QUESTION_TYPE_WAS_NOT_GIVEN\"] = 3] = \"QUESTION_TYPE_WAS_NOT_GIVEN\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"QUESTION_TYPE_IS_WRONG\"] = 4] = \"QUESTION_TYPE_IS_WRONG\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"OPTION_WAS_NOT_GIVEN\"] = 5] = \"OPTION_WAS_NOT_GIVEN\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"QUESTION_FIELD_IS_EMPTY\"] = 6] = \"QUESTION_FIELD_IS_EMPTY\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"ANSWER_FIELD_IS_EMPTY\"] = 7] = \"ANSWER_FIELD_IS_EMPTY\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"SUBTYPE_FIELD_DOES_N0T_MATCH_TO_THE_ALLOWED\"] = 8] = \"SUBTYPE_FIELD_DOES_N0T_MATCH_TO_THE_ALLOWED\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"Correct answer has not been included for the question: \"] = 9] = \"Correct answer has not been included for the question: \";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"NONE\"] = 10] = \"NONE\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"SUBTYPE_FIELD_IS_EMPTY\"] = 11] = \"SUBTYPE_FIELD_IS_EMPTY\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"FLASHCARD_NAME_WAS_NOT_GIVEN\"] = 12] = \"FLASHCARD_NAME_WAS_NOT_GIVEN\";\r\n IQuizImportExportErrorCode[IQuizImportExportErrorCode[\"ALLOWED_ONLY_ONE_CORRECT_ANSWER\"] = 13] = \"ALLOWED_ONLY_ONE_CORRECT_ANSWER\";\r\n})(exports.IQuizImportExportErrorCode || (exports.IQuizImportExportErrorCode = {}));\r\nvar IQuizImportExportErrorCode = exports.IQuizImportExportErrorCode;\r\n},{}],400:[function(require,module,exports){\n(function (NextQuestionType) {\r\n NextQuestionType[NextQuestionType[\"NEXT_QUESTION\"] = 0] = \"NEXT_QUESTION\";\r\n NextQuestionType[NextQuestionType[\"SPECIFIED_QUESTION\"] = 1] = \"SPECIFIED_QUESTION\";\r\n NextQuestionType[NextQuestionType[\"END_OF_THE_QUIZ\"] = 2] = \"END_OF_THE_QUIZ\";\r\n})(exports.NextQuestionType || (exports.NextQuestionType = {}));\r\nvar NextQuestionType = exports.NextQuestionType;\r\n},{}],401:[function(require,module,exports){\n(function (QuestionType) {\r\n QuestionType[QuestionType[\"SHORT_ANSWER\"] = 0] = \"SHORT_ANSWER\";\r\n QuestionType[QuestionType[\"SHORT_ANSWER_AUDIO_RESPONSE\"] = 1] = \"SHORT_ANSWER_AUDIO_RESPONSE\";\r\n QuestionType[QuestionType[\"MULTIPLE_CHOICE_SINGLE_ANSWER\"] = 2] = \"MULTIPLE_CHOICE_SINGLE_ANSWER\";\r\n QuestionType[QuestionType[\"MULTIPLE_CHOICE_MULTIPLE_ANSWER\"] = 3] = \"MULTIPLE_CHOICE_MULTIPLE_ANSWER\";\r\n QuestionType[QuestionType[\"SCALED_ANSWER\"] = 4] = \"SCALED_ANSWER\";\r\n QuestionType[QuestionType[\"SHORT_ANSWER_WITH_UPLOAD\"] = 5] = \"SHORT_ANSWER_WITH_UPLOAD\";\r\n QuestionType[QuestionType[\"FILL_IN_THE_BLANK\"] = 6] = \"FILL_IN_THE_BLANK\";\r\n QuestionType[QuestionType[\"MATCHING_ANSWER\"] = 7] = \"MATCHING_ANSWER\";\r\n QuestionType[QuestionType[\"HIDING_OPTIONS_MATCHING_ANSWER\"] = 8] = \"HIDING_OPTIONS_MATCHING_ANSWER\";\r\n QuestionType[QuestionType[\"FILLABLE_FORM\"] = 9] = \"FILLABLE_FORM\";\r\n QuestionType[QuestionType[\"FLASH_CARD\"] = 10] = \"FLASH_CARD\";\r\n QuestionType[QuestionType[\"HOTSPOT_SINGLE_CHOICE\"] = 11] = \"HOTSPOT_SINGLE_CHOICE\";\r\n QuestionType[QuestionType[\"HOTSPOT_MULTIPLE_CHOICE\"] = 12] = \"HOTSPOT_MULTIPLE_CHOICE\";\r\n})(exports.QuestionType || (exports.QuestionType = {}));\r\nvar QuestionType = exports.QuestionType;\r\n},{}],402:[function(require,module,exports){\n(function (QuizResultStatus) {\r\n QuizResultStatus[QuizResultStatus[\"PASSED\"] = 0] = \"PASSED\";\r\n QuizResultStatus[QuizResultStatus[\"FAILED\"] = 1] = \"FAILED\";\r\n QuizResultStatus[QuizResultStatus[\"SUBMITTED\"] = 2] = \"SUBMITTED\";\r\n})(exports.QuizResultStatus || (exports.QuizResultStatus = {}));\r\nvar QuizResultStatus = exports.QuizResultStatus;\r\n},{}],403:[function(require,module,exports){\n(function (QuizType) {\r\n QuizType[QuizType[\"QUIZ\"] = 0] = \"QUIZ\";\r\n QuizType[QuizType[\"SURVEY\"] = 1] = \"SURVEY\";\r\n QuizType[QuizType[\"FLASHCARD\"] = 2] = \"FLASHCARD\";\r\n})(exports.QuizType || (exports.QuizType = {}));\r\nvar QuizType = exports.QuizType;\r\n},{}],404:[function(require,module,exports){\n(function (ScaledAnswerQuestionType) {\r\n ScaledAnswerQuestionType[ScaledAnswerQuestionType[\"YES_NO\"] = 0] = \"YES_NO\";\r\n ScaledAnswerQuestionType[ScaledAnswerQuestionType[\"RECOMMENDED_3_ANSWERS\"] = 1] = \"RECOMMENDED_3_ANSWERS\";\r\n ScaledAnswerQuestionType[ScaledAnswerQuestionType[\"AGREE_5_ANSWERS\"] = 2] = \"AGREE_5_ANSWERS\";\r\n})(exports.ScaledAnswerQuestionType || (exports.ScaledAnswerQuestionType = {}));\r\nvar ScaledAnswerQuestionType = exports.ScaledAnswerQuestionType;\r\n},{}],405:[function(require,module,exports){\nvar ReferenceUtils_1 = require(\"./ReferenceUtils\");\r\nvar ReferenceService_1 = require(\"./ReferenceService\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar ReferenceRouter_1 = require(\"./../urls/ReferenceRouter\");\r\nvar StringBuilder_1 = require(\"./../utils/StringBuilder\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar CheckBusinessUnitId_1 = require(\"../utils/CheckBusinessUnitId\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar ReferenceController = (function () {\r\n function ReferenceController($http, $routeParams, $location, url, referenceRouter, referenceUtils, referenceService, authManager, permissionsApi, bundleService, securityService, authService, businessUnitsService) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.url = url;\r\n this.referenceRouter = referenceRouter;\r\n this.referenceUtils = referenceUtils;\r\n this.referenceService = referenceService;\r\n this.authManager = authManager;\r\n this.permissionsApi = permissionsApi;\r\n this.bundleService = bundleService;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.SUBJECTS_TAB_KEY = \"subjects\";\r\n this.LANGUAGES_TAB_KEY = \"languages\";\r\n this.LEARNING_PATH_TYPES_TAB_KEY = \"learningPathTypes\";\r\n this.COURSE_TYPES_TAB_KEY = \"courseTypes\";\r\n this.SOURCES_TAB_KEY = \"sources\";\r\n this.SOURCE_TYPES_TAB_KEY = \"sourceTypes\";\r\n this.COMPLEXITY_LEVELS_TAB_KEY = \"complexityLevels\";\r\n this.CREDIT_TYPES_TAB_KEY = \"creditTypes\";\r\n this.LOCATION_TYPES_TAB_KEY = \"locationTypes\";\r\n this.LOCATIONS_TAB_KEY = \"locations\";\r\n this.EQUIPMENTS_TAB_KEY = \"equipment\";\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.viewReferenceData; });\r\n var referenceName = this.$routeParams[ReferenceRouter_1.ReferenceRouter.REFERENCE_NAME_PARAM];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_DICTIONARIES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(this.getReferenceName(referenceName)).update();\r\n this.setTopMenuKey(referenceName);\r\n this.referenceDefaultValues = this.$location.search()[ReferenceRouter_1.ReferenceRouter.REFERENCE_DEFAULT_VALUES_PARAM];\r\n this.referenceFilter = this.$location.search()[ReferenceRouter_1.ReferenceRouter.REFERENCE_FILTER_PARAM];\r\n this.referenceAssociationFilters = this.$location.search()[ReferenceRouter_1.ReferenceRouter.REFERENCE_ASSOCIATION_FILTERS_PARAM];\r\n this.referenceEntitiesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/reference/:name/entities\")\r\n .param(\":name\", referenceName).service()));\r\n this.referenceEntitiesGridModel.filter.referenceFilter = this.referenceFilter;\r\n this.referenceEntitiesGridModel.filter.referenceSearchString = \"\";\r\n this.referenceEntitiesGridModel.filter.referenceSplitParam = false;\r\n this.permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n _this.referenceService.getReferenceMetadata(referenceName)\r\n .then(function (result) {\r\n _this.referenceMetadata = result;\r\n });\r\n });\r\n this.bundleService.getSystemBundle()\r\n .then(function (b) {\r\n _this.systemBundle = b;\r\n })\r\n .catch(function () {\r\n _this.systemBundle = { id: 1 };\r\n });\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.currentUser = user;\r\n });\r\n this.businessUnitsService.getBusinessUnitsDeactivateForSelector()\r\n .then(function (result) { return _this.businessUnits = result; });\r\n }\r\n ReferenceController.prototype.getReferenceEditUrl = function (id) {\r\n return this.referenceMetadata\r\n ? StringBuilder_1.StringBuilder.interpolate(this.referenceRouter.editUrl(this.referenceMetadata.key, id))\r\n .add(\"?\")\r\n .addIf(this.referenceDefaultValues != null, ReferenceRouter_1.ReferenceRouter.REFERENCE_DEFAULT_VALUES_PARAM, \"=\", this.referenceUtils.getStringInBrowserFormat(this.referenceDefaultValues), \"&\")\r\n .addIf(this.referenceFilter != null, ReferenceRouter_1.ReferenceRouter.REFERENCE_FILTER_PARAM, \"=\", this.referenceUtils.getStringInBrowserFormat(this.referenceFilter), \"&\")\r\n .addIf(this.referenceAssociationFilters != null, ReferenceRouter_1.ReferenceRouter.REFERENCE_ASSOCIATION_FILTERS_PARAM, \"=\", this.referenceUtils.getStringInBrowserFormat(this.referenceAssociationFilters), \"&\")\r\n .build()\r\n : undefined;\r\n };\r\n ReferenceController.prototype.isMetaLoaded = function () {\r\n if (!this.systemPermissions || !this.referenceMetadata) {\r\n return undefined;\r\n }\r\n return true;\r\n };\r\n ReferenceController.prototype.isEditAllowed = function (entity) {\r\n if (!this.isMetaLoaded()) {\r\n return undefined;\r\n }\r\n return this.systemPermissions.editReferenceData\r\n && !this.referenceMetadata.isInternal\r\n && entity[this.referenceUtils.getEntityIsActiveProperty()]\r\n && (!entity.hasOwnProperty(ReferenceUtils_1.ReferenceUtils.BUSINESS_UNIT_ID_PROPERTY) ||\r\n this.authManager.getCurrentUser() && (this.authManager.getCurrentUser().allBusinessUnits\r\n || this.authManager.getCurrentUser().businessUnits.indexOf(entity[ReferenceUtils_1.ReferenceUtils.BUSINESS_UNIT_ID_PROPERTY]) != -1));\r\n };\r\n ReferenceController.prototype.activateEntity = function (index, entity) {\r\n var _this = this;\r\n var referenceName = this.referenceMetadata.key;\r\n var id = entity[ReferenceUtils_1.ReferenceUtils.entityIdProperty];\r\n var version = entity[ReferenceUtils_1.ReferenceUtils.entityVersionProperty];\r\n this.referenceService.setActiveReferenceEntity(referenceName, id, version, true).then(function (result) {\r\n _this.referenceEntitiesGridModel.entries[index] = result;\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.references.duplicate\") {\r\n INotifier_1.notifier.error(\"Referenced data element already exists\");\r\n }\r\n });\r\n };\r\n ReferenceController.prototype.getReferenceName = function (referenceName) {\r\n switch (referenceName) {\r\n case \"subjects\":\r\n return \"Subjects\";\r\n case \"languages\":\r\n return \"Languages\";\r\n case \"learningPathTypes\":\r\n return \"Learning path types\";\r\n case \"courseTypes\":\r\n return \"Course types\";\r\n case \"sources\":\r\n return \"Sources\";\r\n case \"sourceTypes\":\r\n return \"Source types\";\r\n case \"complexityLevels\":\r\n return \"Complexity levels\";\r\n case \"creditTypes\":\r\n return \"Credit types\";\r\n case \"locationTypes\":\r\n return \"Location types\";\r\n case \"locations\":\r\n return \"Locations\";\r\n case \"equipment\":\r\n return \"Equipment\";\r\n default:\r\n return \"Core ACHIEVE\";\r\n }\r\n };\r\n ReferenceController.prototype.hasUserSameBusinessUnits = function (businessUnitId) {\r\n if (businessUnitId == null && this.currentUser.businessUnits != null) {\r\n return false;\r\n }\r\n return CheckBusinessUnitId_1.CheckBusinessUnitId.hasUserSameBusinessUnits(this.currentUser.businessUnits, businessUnitId);\r\n };\r\n ReferenceController.prototype.getBusinessUnitById = function (businessUnitId) {\r\n var result = null;\r\n if (businessUnitId != null) {\r\n result = this.businessUnits.filter(function (bu) { return bu.id == businessUnitId; })[0].name;\r\n }\r\n return result;\r\n };\r\n ReferenceController.prototype.setTopMenuKey = function (referenceName) {\r\n switch (referenceName) {\r\n case \"subjects\":\r\n this.topMenuKey = this.SUBJECTS_TAB_KEY;\r\n break;\r\n case \"languages\":\r\n this.topMenuKey = this.LANGUAGES_TAB_KEY;\r\n break;\r\n case \"learningPathTypes\":\r\n this.topMenuKey = this.LEARNING_PATH_TYPES_TAB_KEY;\r\n break;\r\n case \"courseTypes\":\r\n this.topMenuKey = this.COURSE_TYPES_TAB_KEY;\r\n break;\r\n case \"sources\":\r\n this.topMenuKey = this.SOURCES_TAB_KEY;\r\n break;\r\n case \"sourceTypes\":\r\n this.topMenuKey = this.SOURCE_TYPES_TAB_KEY;\r\n break;\r\n case \"complexityLevels\":\r\n this.topMenuKey = this.COMPLEXITY_LEVELS_TAB_KEY;\r\n break;\r\n case \"creditTypes\":\r\n this.topMenuKey = this.CREDIT_TYPES_TAB_KEY;\r\n break;\r\n case \"locationTypes\":\r\n this.topMenuKey = this.LOCATION_TYPES_TAB_KEY;\r\n break;\r\n case \"locations\":\r\n this.topMenuKey = this.LOCATIONS_TAB_KEY;\r\n break;\r\n case \"equipment\":\r\n this.topMenuKey = this.EQUIPMENTS_TAB_KEY;\r\n break;\r\n default:\r\n this.topMenuKey = this.isCurrentUserSystemAdministrator() ? this.LANGUAGES_TAB_KEY : this.SUBJECTS_TAB_KEY;\r\n }\r\n };\r\n ReferenceController.prototype.isCurrentUserSystemAdministrator = function () {\r\n return this.authManager.getCurrentUser() && this.authManager.getCurrentUser().id === 1;\r\n };\r\n ReferenceController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.topMenuKey == topMenuKey;\r\n };\r\n ReferenceController.prototype.decodeAttributes = function (title) {\r\n var result = title;\r\n switch (title) {\r\n case \"Location type\": {\r\n result = \"Location type\";\r\n break;\r\n }\r\n case \"Description\": {\r\n result = \"Description\";\r\n break;\r\n }\r\n case \"Capacity\": {\r\n result = \"Capacity\";\r\n break;\r\n }\r\n case \"Address\": {\r\n result = \"Address\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n ReferenceController.NAME = \"reference.ReferenceController\";\r\n ReferenceController.$inject = [\r\n \"$http\",\r\n \"$routeParams\",\r\n \"$location\",\r\n UrlService_1.UrlService.NAME,\r\n ReferenceRouter_1.ReferenceRouter.NAME,\r\n ReferenceUtils_1.ReferenceUtils.NAME,\r\n ReferenceService_1.ReferenceService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n BundleService_1.BundleService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME\r\n ];\r\n return ReferenceController;\r\n})();\r\nexports.ReferenceController = ReferenceController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthManager\":25,\"../bundles/BundleService\":36,\"../businessUnits/BusinessUnitsService\":44,\"../utils/CheckBusinessUnitId\":508,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../security/PermissionsService\":418,\"./../security/SecurityService\":420,\"./../urls/ReferenceRouter\":487,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./../utils/StringBuilder\":525,\"./../utils/UrlService\":528,\"./ReferenceService\":409,\"./ReferenceUtils\":410}],406:[function(require,module,exports){\nvar ReferenceUtils_1 = require(\"./ReferenceUtils\");\r\nvar ReferenceService_1 = require(\"./ReferenceService\");\r\nvar ReferenceRedirect_1 = require(\"./ReferenceRedirect\");\r\nvar ReferenceIsRequiredValidator_1 = require(\"./validators/ReferenceIsRequiredValidator\");\r\nvar ReferenceMaxLengthValidator_1 = require(\"./validators/ReferenceMaxLengthValidator\");\r\nvar ReferenceRequiredAttributesGroupValidator_1 = require(\"./validators/ReferenceRequiredAttributesGroupValidator\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar ReferenceRouter_1 = require(\"./../urls/ReferenceRouter\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar ReferenceMinValueValidator_1 = require(\"./validators/ReferenceMinValueValidator\");\r\nvar ReferenceEditController = (function () {\r\n function ReferenceEditController($rootScope, $scope, $routeParams, $location, $timeout, referenceRouter, referenceUtils, referenceApi, referenceRedirect, permissionsApi, securityService, authService) {\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$timeout = $timeout;\r\n this.referenceRouter = referenceRouter;\r\n this.referenceUtils = referenceUtils;\r\n this.referenceApi = referenceApi;\r\n this.referenceRedirect = referenceRedirect;\r\n this.permissionsApi = permissionsApi;\r\n this.securityService = securityService;\r\n this.authService = authService;\r\n this.disableSaveButton = false;\r\n this.redirected = false;\r\n this.businessUnitSelected = false;\r\n this.hasAllBusinessUnits = false;\r\n this.$rootScope.$on(ReferenceRedirect_1.ReferenceRedirect.REDIRECT_TO_EDIT_REFERENCE_ITEM_MESSAGE, function () {\r\n _this.redirected = true;\r\n });\r\n this.$scope.$on('$destroy', function () {\r\n if (!_this.redirected) {\r\n _this.referenceRedirect.getAndRemoveStorageUrl();\r\n }\r\n });\r\n var referenceId = parseInt(this.$routeParams[ReferenceRouter_1.ReferenceRouter.REFERENCE_ID_PARAM], 10);\r\n var referenceName = this.$routeParams[ReferenceRouter_1.ReferenceRouter.REFERENCE_NAME_PARAM];\r\n var hasReferenceId = !isNaN(referenceId);\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissionsIf(hasReferenceId, function (systemPermissions) { return systemPermissions.editReferenceData; })\r\n .demandSystemPermissionsIf(!hasReferenceId, function (systemPermissions) { return systemPermissions.addReferenceData; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(\"administration_\" + referenceName);\r\n this.permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n this.referenceDefaultValues = this.$location.search()[ReferenceRouter_1.ReferenceRouter.REFERENCE_DEFAULT_VALUES_PARAM];\r\n this.referenceFilter = this.$location.search()[ReferenceRouter_1.ReferenceRouter.REFERENCE_FILTER_PARAM];\r\n this.referenceAssociationFilters = this.$location.search()[ReferenceRouter_1.ReferenceRouter.REFERENCE_ASSOCIATION_FILTERS_PARAM];\r\n this.referenceDefaultValuesMap = this.getReferenceDefaultValuesMap(this.referenceDefaultValues);\r\n this.referenceAssociationFiltersMap = this.getReferenceAssociationFiltersMap(this.referenceAssociationFilters);\r\n this.referenceValidationErrorsMap = new Map();\r\n if (hasReferenceId) {\r\n this.referenceApi.getReferenceEntity(referenceName, referenceId).then(function (result) {\r\n _this.referenceEntity = result.entity;\r\n _this.referenceMetadata = result.metadata;\r\n if (!result.entity) {\r\n INotifier_1.notifier.error(\"Referenced data element not found\");\r\n _this.redirectToBack();\r\n return;\r\n }\r\n _this.referenceUtils.fixInputReferenceEntityAttributes(_this.referenceEntity, _this.referenceMetadata);\r\n PageHeaderHelper_1.PageHeader.set().header(_this.referenceEntity[_this.referenceMetadata.selectorAttribute.systemName])\r\n .update();\r\n _this.businessUnitSelected = true;\r\n _this.getReferenceUsage(referenceName, referenceId);\r\n });\r\n }\r\n else {\r\n this.referenceApi.getEmptyReferenceEntity(referenceName).then(function (result) {\r\n _this.referenceEntity = result.entity;\r\n _this.referenceMetadata = result.metadata;\r\n _this.referenceUtils.fixInputReferenceEntityAttributes(_this.referenceEntity, _this.referenceMetadata);\r\n _this.setDefaultReferenceEntityAttributesValues();\r\n PageHeaderHelper_1.PageHeader.set().header(\"New data entry of\" + \" ‘\"\r\n + _this.getReferenceName(referenceName) + \"’\")\r\n .update();\r\n });\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n });\r\n }\r\n }\r\n ReferenceEditController.prototype.redirectToBack = function () {\r\n this.redirected = true;\r\n this.redirectStorageUrl = this.referenceRedirect.getAndRemoveStorageUrl();\r\n if (this.redirectStorageUrl) {\r\n this.$location.url(this.redirectStorageUrl);\r\n }\r\n else {\r\n var referenceName = this.referenceMetadata.key;\r\n this.$location.url(this.referenceRouter.indexUrl(referenceName))\r\n .search(ReferenceRouter_1.ReferenceRouter.REFERENCE_DEFAULT_VALUES_PARAM, this.referenceUtils.getStringInBrowserFormat(this.referenceDefaultValues))\r\n .search(ReferenceRouter_1.ReferenceRouter.REFERENCE_FILTER_PARAM, this.referenceUtils.getStringInBrowserFormat(this.referenceFilter))\r\n .search(ReferenceRouter_1.ReferenceRouter.REFERENCE_ASSOCIATION_FILTERS_PARAM, this.referenceUtils.getStringInBrowserFormat(this.referenceAssociationFilters));\r\n }\r\n };\r\n ReferenceEditController.prototype.saveEntity = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n var referenceName = this.referenceMetadata.key;\r\n var id = this.referenceEntity[ReferenceUtils_1.ReferenceUtils.entityIdProperty];\r\n var call = id != null\r\n ? this.referenceApi.updateReferenceEntity(referenceName, id, this.referenceEntity)\r\n : this.referenceApi.createReferenceEntity(referenceName, this.referenceEntity);\r\n call.then(function (result) {\r\n _this.redirectToBack();\r\n })\r\n .finally(function () {\r\n $(\"#changeNameDialog\").modal(\"hide\");\r\n $('.modal-backdrop').remove();\r\n _this.changeFilterEmit();\r\n _this.disableSaveButton = false;\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.references.duplicate\") {\r\n INotifier_1.notifier.error(\"Referenced data element already exists\");\r\n }\r\n else if (response.data.error == \"error.reference.name.contain.comma\") {\r\n INotifier_1.notifier.error(\"The value can't contain ','\");\r\n }\r\n else {\r\n INotifier_1.notifier.commonError(response);\r\n }\r\n });\r\n };\r\n ReferenceEditController.prototype.updateCreditTypesName = function () {\r\n var _this = this;\r\n this.referenceApi.updateCreditTypesName(this.referenceEntity[ReferenceUtils_1.ReferenceUtils.entityNameProperty], this.referenceEntity[ReferenceUtils_1.ReferenceUtils.entityIdProperty])\r\n .then(function () { return _this.redirectToBack(); })\r\n .finally(function () {\r\n $(\"#changeNameDialog\").modal(\"hide\");\r\n $('.modal-backdrop').remove();\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.references.duplicate\") {\r\n INotifier_1.notifier.error(\"Referenced data element already exists\");\r\n }\r\n else {\r\n INotifier_1.notifier.commonError(response);\r\n }\r\n });\r\n ;\r\n };\r\n ReferenceEditController.prototype.isNeedUpdateCreditTypesName = function () {\r\n return this.referenceEntity[ReferenceUtils_1.ReferenceUtils.entityIdProperty] != null && this.referenceMetadata.key === \"creditTypes\";\r\n };\r\n ReferenceEditController.prototype.openUpdateCreditTypesNameDialog = function () {\r\n $(\"#changeNameDialog\").modal(\"show\");\r\n };\r\n ReferenceEditController.prototype.deactivateEntity = function () {\r\n var _this = this;\r\n var referenceName = this.referenceMetadata.key;\r\n var id = this.referenceEntity[ReferenceUtils_1.ReferenceUtils.entityIdProperty];\r\n var version = this.referenceEntity[ReferenceUtils_1.ReferenceUtils.entityVersionProperty];\r\n this.referenceApi.setActiveReferenceEntity(referenceName, id, version, false).then(function (result) {\r\n _this.changeFilterEmit();\r\n _this.redirectToBack();\r\n });\r\n };\r\n ReferenceEditController.prototype.entityValid = function () {\r\n this.referenceValidationErrorsMap.clear();\r\n return new ReferenceMaxLengthValidator_1.ReferenceMaxLengthValidator(this.referenceUtils, this.referenceEntity, this.referenceMetadata, this.referenceValidationErrorsMap)\r\n .valid()\r\n && new ReferenceMinValueValidator_1.ReferenceMinValueValidator(this.referenceUtils, this.referenceEntity, this.referenceMetadata, this.referenceValidationErrorsMap)\r\n .valid()\r\n && (this.referenceMetadata.requiredAttributesGroup\r\n ? new ReferenceRequiredAttributesGroupValidator_1.ReferenceRequiredAttributesGroupValidator(this.referenceUtils, this.referenceEntity, this.referenceMetadata, this.referenceValidationErrorsMap)\r\n .valid()\r\n : new ReferenceIsRequiredValidator_1.ReferenceIsRequiredValidator(this.referenceUtils, this.referenceEntity, this.referenceMetadata, this.referenceValidationErrorsMap)\r\n .valid());\r\n };\r\n ReferenceEditController.prototype.getReferenceDefaultValuesMap = function (referenceDefaultValues) {\r\n var result = new Map();\r\n if (referenceDefaultValues && referenceDefaultValues.length > 0) {\r\n var defaultValues = referenceDefaultValues.split(\";\");\r\n defaultValues.forEach(function (defaultValue) {\r\n var defaultValueParts = defaultValue.split(\"=\");\r\n var property = defaultValueParts[0];\r\n var value = defaultValueParts[1];\r\n result.set(property, value);\r\n });\r\n }\r\n return result;\r\n };\r\n ReferenceEditController.prototype.getReferenceAssociationFiltersMap = function (referenceAssociationFilters) {\r\n var result = new Map();\r\n if (referenceAssociationFilters && referenceAssociationFilters.length > 0) {\r\n var associationFilters = referenceAssociationFilters.split(\"|\");\r\n associationFilters.forEach(function (associationFilter) {\r\n var associationFilterParts = associationFilter.split(\"=>\");\r\n var association = associationFilterParts[0];\r\n var filter = associationFilterParts[1];\r\n result.set(association, filter);\r\n });\r\n }\r\n return result;\r\n };\r\n ReferenceEditController.prototype.setDefaultReferenceEntityAttributesValues = function () {\r\n var _this = this;\r\n this.referenceMetadata.defaultAttributes.forEach(function (attr) {\r\n var attrType = attr.type;\r\n var attrSysName = attr.systemName;\r\n var defaultValue = _this.referenceDefaultValuesMap.get(attrSysName);\r\n if (_this.referenceUtils.isTextAttributeType(attrType) || _this.referenceUtils.isHtmlAttributeType(attrType)) {\r\n _this.referenceEntity[attrSysName] = _this.referenceUtils.convertStringDefaultValue(defaultValue);\r\n }\r\n else if (_this.referenceUtils.isNumberAttributeType(attrType)) {\r\n _this.referenceEntity[attrSysName] = _this.referenceUtils.convertNumberDefaultValue(defaultValue);\r\n }\r\n else if (_this.referenceUtils.isBooleanAttributeType(attrType)) {\r\n _this.referenceEntity[attrSysName] = _this.referenceUtils.convertBooleanDefaultValue(defaultValue);\r\n }\r\n else if (_this.referenceUtils.isDateAttributeType(attrType)) {\r\n _this.referenceEntity[attrSysName] = _this.referenceUtils.convertDateDefaultValue(defaultValue);\r\n }\r\n else if (_this.referenceUtils.isMoneyAttributeType(attrType)) {\r\n _this.referenceEntity[attrSysName] = _this.referenceUtils.convertMoneyDefaultValue(defaultValue);\r\n }\r\n else if (_this.referenceUtils.isOneAssociationAttributeType(attrType)) {\r\n _this.referenceEntity[attrSysName] = _this.referenceUtils.convertOneAssociationDefaultValue(defaultValue);\r\n }\r\n else if (_this.referenceUtils.isManyAssociationAttributeType(attrType)) {\r\n _this.referenceEntity[attrSysName] = _this.referenceUtils.convertManyAssociationDefaultValue(defaultValue);\r\n }\r\n });\r\n };\r\n ReferenceEditController.prototype.getReferenceName = function (referenceName) {\r\n switch (referenceName) {\r\n case \"subjects\": return \"Subjects\";\r\n case \"languages\": return \"Languages\";\r\n case \"learningPathTypes\": return \"Learning path types\";\r\n case \"courseTypes\": return \"Course types\";\r\n case \"sources\": return \"Sources\";\r\n case \"sourceTypes\": return \"Source types\";\r\n case \"complexityLevels\": return \"Complexity levels\";\r\n case \"creditTypes\": return \"Credit types\";\r\n case \"locationTypes\": return \"Location types\";\r\n case \"locations\": return \"Locations\";\r\n case \"equipment\": return \"Equipment\";\r\n default: return \"Core ACHIEVE\";\r\n }\r\n };\r\n ReferenceEditController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.businessUnitSelected = false;\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n };\r\n ReferenceEditController.prototype.getReferenceUsage = function (referenceName, referenceId) {\r\n var _this = this;\r\n this.referenceApi.getReferenceUsage(referenceName, referenceId)\r\n .then(function (uses) {\r\n _this.usedInList = uses;\r\n _this.usedInList.forEach(function (o) {\r\n if (o.type == 'ILT_SESSION') {\r\n o.typeTextCap = 'ILT session';\r\n }\r\n else if (o.type == 'SESSION') {\r\n o.typeTextCap = 'vILT session';\r\n }\r\n else {\r\n o.typeTextCap = o.type.charAt(0).toUpperCase() + o.type.slice(1).replace(\"_\", \" \").toLowerCase();\r\n }\r\n });\r\n _this.usedInList.sort(function (a, b) { return a.type.localeCompare(b.type); });\r\n });\r\n };\r\n ReferenceEditController.prototype.isShowSystemName = function (systemName) {\r\n var arg1 = systemName != 'locationType' && systemName != 'equipment';\r\n var arg2 = (systemName == 'locationType' || systemName == 'equipment') && this.businessUnitSelected;\r\n return arg1 || arg2;\r\n };\r\n ReferenceEditController.prototype.changeFilterEmit = function () {\r\n this.$scope.$emit('changeFilterEvent');\r\n };\r\n ReferenceEditController.prototype.decodeAttributes = function (name) {\r\n var result = name;\r\n switch (name) {\r\n case \"name\": {\r\n result = \"Name\";\r\n break;\r\n }\r\n case \"locationType\": {\r\n result = \"Location type\";\r\n break;\r\n }\r\n case \"description\": {\r\n result = \"Description\";\r\n break;\r\n }\r\n case \"capacity\": {\r\n result = \"Capacity\";\r\n break;\r\n }\r\n case \"address\": {\r\n result = \"Address\";\r\n break;\r\n }\r\n case \"equipment\": {\r\n result = \"Equipment\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n ReferenceEditController.NAME = \"reference.ReferenceEditController\";\r\n ReferenceEditController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$timeout\",\r\n ReferenceRouter_1.ReferenceRouter.NAME,\r\n ReferenceUtils_1.ReferenceUtils.NAME,\r\n ReferenceService_1.ReferenceService.NAME,\r\n ReferenceRedirect_1.ReferenceRedirect.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthService_1.AuthService.NAME\r\n ];\r\n return ReferenceEditController;\r\n})();\r\nexports.ReferenceEditController = ReferenceEditController;\r\n},{\"./../INotifier\":5,\"./../auth/AuthService\":18,\"./../security/PermissionsService\":418,\"./../security/SecurityService\":420,\"./../urls/ReferenceRouter\":487,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./ReferenceRedirect\":408,\"./ReferenceService\":409,\"./ReferenceUtils\":410,\"./validators/ReferenceIsRequiredValidator\":412,\"./validators/ReferenceMaxLengthValidator\":413,\"./validators/ReferenceMinValueValidator\":414,\"./validators/ReferenceRequiredAttributesGroupValidator\":415}],407:[function(require,module,exports){\nvar ReferenceUtils_1 = require(\"./ReferenceUtils\");\r\nvar ReferenceService_1 = require(\"./ReferenceService\");\r\nvar ReferenceRedirect_1 = require(\"./ReferenceRedirect\");\r\nvar ReferenceController_1 = require(\"./ReferenceController\");\r\nvar ReferenceEditController_1 = require(\"./ReferenceEditController\");\r\nvar SecurityModule_1 = require(\"./../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nvar InfrastructureModule_1 = require(\"./../infrastructure/InfrastructureModule\");\r\nexports.ReferenceModule = angular\r\n .module(\"reference\", [\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name,\r\n InfrastructureModule_1.InfrastructureModule.name\r\n])\r\n .service(ReferenceUtils_1.ReferenceUtils.NAME, ReferenceUtils_1.ReferenceUtils)\r\n .service(ReferenceService_1.ReferenceService.NAME, ReferenceService_1.ReferenceService)\r\n .service(ReferenceRedirect_1.ReferenceRedirect.NAME, ReferenceRedirect_1.ReferenceRedirect)\r\n .controller(ReferenceController_1.ReferenceController.NAME, ReferenceController_1.ReferenceController)\r\n .controller(ReferenceEditController_1.ReferenceEditController.NAME, ReferenceEditController_1.ReferenceEditController);\r\n},{\"./../infrastructure/InfrastructureModule\":294,\"./../security/SecurityModule\":419,\"./../urls/UrlsModule\":492,\"./ReferenceController\":405,\"./ReferenceEditController\":406,\"./ReferenceRedirect\":408,\"./ReferenceService\":409,\"./ReferenceUtils\":410}],408:[function(require,module,exports){\nvar ReferenceUtils_1 = require(\"./ReferenceUtils\");\r\nvar Storage_1 = require(\"./../infrastructure/Storage\");\r\nvar ReferenceRouter_1 = require(\"./../urls/ReferenceRouter\");\r\nvar ReferenceRedirect = (function () {\r\n function ReferenceRedirect($rootScope, $location, sessionStorage, referenceRouter, referenceUtils) {\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.sessionStorage = sessionStorage;\r\n this.referenceRouter = referenceRouter;\r\n this.referenceUtils = referenceUtils;\r\n this.sessionStorage.remove(ReferenceRedirect.KEY);\r\n }\r\n ReferenceRedirect.prototype.redirectToEditReferenceItem = function (referenceName, referenceId, referenceDefaultValues, referenceFilter, referenceAssociationFilters) {\r\n var url = this.$location.path();\r\n if (!this.sessionStorage.contains(ReferenceRedirect.KEY)) {\r\n this.sessionStorage.put(ReferenceRedirect.KEY, [url]);\r\n }\r\n else {\r\n var urls = this.sessionStorage.get(ReferenceRedirect.KEY);\r\n urls.push(url);\r\n this.sessionStorage.put(ReferenceRedirect.KEY, urls);\r\n }\r\n this.$rootScope.$emit(ReferenceRedirect.REDIRECT_TO_EDIT_REFERENCE_ITEM_MESSAGE);\r\n this.$location.url(this.referenceRouter.editUrl(referenceName, referenceId))\r\n .search(ReferenceRouter_1.ReferenceRouter.REFERENCE_DEFAULT_VALUES_PARAM, this.referenceUtils.getStringInBrowserFormat(referenceDefaultValues))\r\n .search(ReferenceRouter_1.ReferenceRouter.REFERENCE_FILTER_PARAM, this.referenceUtils.getStringInBrowserFormat(referenceFilter))\r\n .search(ReferenceRouter_1.ReferenceRouter.REFERENCE_ASSOCIATION_FILTERS_PARAM, this.referenceUtils.getStringInBrowserFormat(referenceAssociationFilters));\r\n };\r\n ReferenceRedirect.prototype.getAndRemoveStorageUrl = function () {\r\n var urls = this.sessionStorage.get(ReferenceRedirect.KEY);\r\n if (urls != null) {\r\n var url = urls.pop();\r\n this.sessionStorage.put(ReferenceRedirect.KEY, urls);\r\n return url;\r\n }\r\n return null;\r\n };\r\n ReferenceRedirect.REDIRECT_TO_EDIT_REFERENCE_ITEM_MESSAGE = \"$redirectToEditReferenceItem\";\r\n ReferenceRedirect.NAME = \"reference.ReferenceRedirect\";\r\n ReferenceRedirect.KEY = \"reference-redirect\";\r\n ReferenceRedirect.$inject = [\r\n \"$rootScope\",\r\n \"$location\",\r\n Storage_1.Storages.SESSION_NAME,\r\n ReferenceRouter_1.ReferenceRouter.NAME,\r\n ReferenceUtils_1.ReferenceUtils.NAME\r\n ];\r\n return ReferenceRedirect;\r\n})();\r\nexports.ReferenceRedirect = ReferenceRedirect;\r\n},{\"./../infrastructure/Storage\":295,\"./../urls/ReferenceRouter\":487,\"./ReferenceUtils\":410}],409:[function(require,module,exports){\nvar IReferenceEntitiesParams_1 = require(\"./models/IReferenceEntitiesParams\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ReferenceService = (function () {\r\n function ReferenceService($http, $q, url) {\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.url = url;\r\n }\r\n ReferenceService.prototype.getActiveReferenceEntities = function (referenceName, referenceParams) {\r\n return this.$http.get(this.url.base(\"/api/reference/:name/entities/active\")\r\n .param(\":name\", referenceName).service(), this.createReferenceFilterParams(referenceParams))\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.getActiveReferenceEntitiesForSelector = function (referenceName, referenceParams, includedIds) {\r\n var params = this.createReferenceFilterParams(referenceParams);\r\n if (includedIds && includedIds.length > 0) {\r\n params.params[\"includedIds\"] = includedIds;\r\n }\r\n return this.$http.get(this.url.base(\"/api/reference/:name/entities/forSelector\")\r\n .param(\":name\", referenceName).service(), params)\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.getActiveReferenceEntitiesForSelectorWithoutParams = function (referenceName, includedIds) {\r\n var params = this.createReferenceFilterParams(new IReferenceEntitiesParams_1.ReferenceEntitiesParams(undefined, undefined, undefined, undefined, undefined, undefined));\r\n if (includedIds && includedIds.length > 0) {\r\n params.params[\"includedIds\"] = includedIds;\r\n }\r\n return this.$http.get(this.url.base(\"/api/reference/:name/entities/forSelector\")\r\n .param(\":name\", referenceName).service(), params)\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.getHierarchicalReferenceEntities = function (referenceName, referenceHierarchicalProperty) {\r\n return this.$http.get(this.url.base(\"/api/reference/:name/entities/hierarchical/:hierarchy\")\r\n .param(\":name\", referenceName)\r\n .param(\":hierarchy\", referenceHierarchicalProperty).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.getReferenceEntity = function (referenceName, id) {\r\n return this.$http.get(this.url.base(\"/api/reference/:name/entity/:id\")\r\n .param(\":name\", referenceName)\r\n .param(\":id\", id).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.getEmptyReferenceEntity = function (referenceName) {\r\n return this.$http.get(this.url.base(\"/api/reference/:name/entity/empty\")\r\n .param(\":name\", referenceName).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.getEmptyReferenceEntityNoMetadata = function (referenceName) {\r\n return this.$http.get(this.url.base(\"/api/reference/:name/entity/empty/no/metadata\")\r\n .param(\":name\", referenceName).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.getReferenceMetadata = function (referenceName) {\r\n return this.$http.get(this.url.base(\"/api/reference/:name/metadata\").param(\":name\", referenceName).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.getAssociationReferencesMetadata = function (referenceName) {\r\n return this.$http.get(this.url.base(\"/api/reference/:name/metadata/association\")\r\n .param(\":name\", referenceName).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.createReferenceEntity = function (referenceName, map) {\r\n return this.$http.post(this.url.base(\"/api/reference/:name/entity/create\")\r\n .param(\":name\", referenceName).service(), map)\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.updateReferenceEntity = function (referenceName, id, map) {\r\n return this.$http.put(this.url.base(\"/api/reference/:name/entity/update/:id\")\r\n .param(\":name\", referenceName)\r\n .param(\":id\", id).service(), map)\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.setActiveReferenceEntity = function (referenceName, id, version, isActive) {\r\n return this.$http.put(this.url.base(\"/api/reference/:referenceName/entity/:id?isActive=:isActive&version=:version\")\r\n .param(\":referenceName\", referenceName)\r\n .param(\":id\", id)\r\n .param(\":version\", version)\r\n .param(\":isActive\", isActive).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.getReferenceUsage = function (referenceName, referenceId) {\r\n return this.$http.get(this.url.service(\"/api/reference/\" + referenceName + \"/entity/\" + referenceId + \"/usage\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.updateCreditTypesName = function (creditName, creditId) {\r\n return this.$http.put(this.url.base(\"/api/reference/creditTypes/\" + creditId + \"/updateName/?name=:name\")\r\n .param(\":name\", creditName).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n ReferenceService.prototype.createReferenceFilterParams = function (referenceParams) {\r\n return {\r\n params: {\r\n referenceFilter: referenceParams.referenceFilter,\r\n referenceSorting: referenceParams.referenceSorting,\r\n referenceSearchString: referenceParams.referenceSearchString,\r\n referenceSplitParam: referenceParams.referenceSplitParam,\r\n businessUnitFilter: referenceParams != undefined ? referenceParams.businessUnitFilter : undefined,\r\n nullableBusinessUnit: referenceParams != undefined ? referenceParams.nullableBusinessUnit : undefined\r\n }\r\n };\r\n };\r\n ReferenceService.NAME = \"reference.ReferenceService\";\r\n ReferenceService.$inject = [\r\n \"$http\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return ReferenceService;\r\n})();\r\nexports.ReferenceService = ReferenceService;\r\n},{\"./../utils/UrlService\":528,\"./models/IReferenceEntitiesParams\":411}],410:[function(require,module,exports){\nvar ReferenceUtils = (function () {\r\n function ReferenceUtils() {\r\n }\r\n ReferenceUtils.prototype.getBusinessUnitIdProperty = function () {\r\n return ReferenceUtils.BUSINESS_UNIT_ID_PROPERTY;\r\n };\r\n ReferenceUtils.prototype.getEntityIdProperty = function () {\r\n return ReferenceUtils.entityIdProperty;\r\n };\r\n ReferenceUtils.prototype.getEntityIsActiveProperty = function () {\r\n return ReferenceUtils.entityIsActiveProperty;\r\n };\r\n ReferenceUtils.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n ReferenceUtils.prototype.getReferenceName = function (meta) {\r\n if (!meta) {\r\n return null;\r\n }\r\n return meta.title;\r\n };\r\n ReferenceUtils.prototype.convertStringAttribute = function (value) {\r\n return value;\r\n };\r\n ReferenceUtils.prototype.convertNumberAttribute = function (value) {\r\n return value;\r\n };\r\n ReferenceUtils.prototype.convertBooleanAttribute = function (value) {\r\n return value != undefined\r\n ? value ? 'Yes' : 'No'\r\n : undefined;\r\n };\r\n ReferenceUtils.prototype.convertDateAttribute = function (value) {\r\n return value != undefined\r\n ? moment(value).format(\"M/D/YYYY\")\r\n : undefined;\r\n };\r\n ReferenceUtils.prototype.convertMoneyAttribute = function (value) {\r\n return new String(value).toString();\r\n };\r\n ReferenceUtils.prototype.convertGroupAttribute = function (entity, groupTemplate, childAttributes) {\r\n var result = \"\";\r\n var templateParts = groupTemplate.split(\"|\");\r\n for (var i = 0, j = 0; i < templateParts.length || j < childAttributes.length; ++i) {\r\n var part = templateParts[i];\r\n if (part.indexOf(\"?\", 0) == 0) {\r\n var attr = childAttributes[j];\r\n var attrType = attr.type;\r\n var attrSysName = attr.systemName;\r\n var value;\r\n if (this.isTextAttributeType(attrType) || this.isHtmlAttributeType(attrType)) {\r\n value = this.convertStringAttribute(entity[attrSysName]);\r\n }\r\n else if (this.isNumberAttributeType(attrType)) {\r\n value = this.convertNumberAttribute(entity[attrSysName]);\r\n }\r\n else if (this.isBooleanAttributeType(attrType)) {\r\n value = this.convertBooleanAttribute(entity[attrSysName]);\r\n }\r\n else if (this.isDateAttributeType(attrType)) {\r\n value = this.convertDateAttribute(entity[attrSysName]);\r\n }\r\n else if (this.isMoneyAttributeType(attrType)) {\r\n value = this.convertMoneyAttribute(entity[attrSysName]);\r\n }\r\n if (value && value.length > 0) {\r\n part = part.substr(1, part.length).replace(\"%1\", value);\r\n result += part;\r\n }\r\n ++j;\r\n }\r\n else {\r\n result += part;\r\n }\r\n }\r\n return result;\r\n };\r\n ReferenceUtils.prototype.convertOneAssociationAttribute = function (entity, associationEntity) {\r\n return this.getEntityNameByAttribute(entity, associationEntity.selectorAttribute);\r\n };\r\n ReferenceUtils.prototype.convertOneAssociationAttributeForGrid = function (entity, associationAttribute) {\r\n return entity[associationAttribute.systemName + \"_\" + associationAttribute.association.selectorAttribute.systemName];\r\n };\r\n ReferenceUtils.prototype.convertOneAssociationAttributeToNumber = function (entity) {\r\n return entity != undefined\r\n ? entity[\"id\"]\r\n : undefined;\r\n };\r\n ReferenceUtils.prototype.convertManyAssociationAttributeToNumbers = function (entities) {\r\n var result = [];\r\n if (entities && entities.length > 0) {\r\n for (var i = 0; i < entities.length; ++i) {\r\n var entity = entities[i];\r\n result.push(this.convertOneAssociationAttributeToNumber(entity));\r\n }\r\n }\r\n return result;\r\n };\r\n ReferenceUtils.prototype.convertStringDefaultValue = function (value) {\r\n return value;\r\n };\r\n ReferenceUtils.prototype.convertNumberDefaultValue = function (value) {\r\n return parseInt(value, 10);\r\n };\r\n ReferenceUtils.prototype.convertBooleanDefaultValue = function (value) {\r\n return value && value == \"true\"\r\n ? true\r\n : false;\r\n };\r\n ReferenceUtils.prototype.convertDateDefaultValue = function (value) {\r\n return value;\r\n };\r\n ReferenceUtils.prototype.convertMoneyDefaultValue = function (value) {\r\n return value;\r\n };\r\n ReferenceUtils.prototype.convertOneAssociationDefaultValue = function (value) {\r\n return parseInt(value, 10);\r\n };\r\n ReferenceUtils.prototype.convertManyAssociationDefaultValue = function (value) {\r\n var result = [];\r\n if (value != null && value != undefined) {\r\n var ids = value.split(\",\");\r\n for (var i = 0; i < ids.length; ++i) {\r\n result.push(this.convertOneAssociationDefaultValue(ids[i]));\r\n }\r\n }\r\n return result;\r\n };\r\n ReferenceUtils.prototype.validStringAttribute = function (value) {\r\n return value && value.length > 0;\r\n };\r\n ReferenceUtils.prototype.validNumberAttribute = function (value) {\r\n return value != undefined;\r\n };\r\n ReferenceUtils.prototype.validBooleanAttribute = function (value) {\r\n return value != undefined;\r\n };\r\n ReferenceUtils.prototype.validDateAttribute = function (value) {\r\n return value && value.length > 0;\r\n };\r\n ReferenceUtils.prototype.validMoneyAttribute = function (value) {\r\n return value && value.length > 0;\r\n };\r\n ReferenceUtils.prototype.validOneAssociationAttribute = function (value) {\r\n return value && value > 0;\r\n };\r\n ReferenceUtils.prototype.validManyAssociationAttribute = function (value) {\r\n return value && value.length > 0;\r\n };\r\n ReferenceUtils.prototype.validAttribute = function (attrType, value) {\r\n if (this.isTextAttributeType(attrType) || this.isHtmlAttributeType(attrType)) {\r\n return this.validStringAttribute(value);\r\n }\r\n else if (this.isNumberAttributeType(attrType)) {\r\n return this.validNumberAttribute(value);\r\n }\r\n else if (this.isBooleanAttributeType(attrType)) {\r\n return this.validBooleanAttribute(value);\r\n }\r\n else if (this.isDateAttributeType(attrType)) {\r\n return this.validDateAttribute(value);\r\n }\r\n else if (this.isMoneyAttributeType(attrType)) {\r\n return this.validMoneyAttribute(value);\r\n }\r\n else if (this.isOneAssociationAttributeType(attrType)) {\r\n return this.validOneAssociationAttribute(value);\r\n }\r\n else if (this.isManyAssociationAttributeType(attrType)) {\r\n return this.validManyAssociationAttribute(value);\r\n }\r\n else {\r\n return true;\r\n }\r\n };\r\n ReferenceUtils.prototype.isTextAttributeType = function (attributeType) {\r\n return attributeType == 'TEXT';\r\n };\r\n ReferenceUtils.prototype.isHtmlAttributeType = function (attributeType) {\r\n return attributeType == 'HTML';\r\n };\r\n ReferenceUtils.prototype.isNumberAttributeType = function (attributeType) {\r\n return attributeType == 'NUMBER';\r\n };\r\n ReferenceUtils.prototype.isBooleanAttributeType = function (attributeType) {\r\n return attributeType == 'BOOLEAN';\r\n };\r\n ReferenceUtils.prototype.isDateAttributeType = function (attributeType) {\r\n return attributeType == 'DATE';\r\n };\r\n ReferenceUtils.prototype.isMoneyAttributeType = function (attributeType) {\r\n return attributeType == 'MONEY';\r\n };\r\n ReferenceUtils.prototype.isGroupAttributeType = function (attributeType) {\r\n return attributeType == 'GROUP';\r\n };\r\n ReferenceUtils.prototype.isOneAssociationAttributeType = function (attributeType) {\r\n return attributeType == 'ONE_ASSOCIATION';\r\n };\r\n ReferenceUtils.prototype.isManyAssociationAttributeType = function (attributeType) {\r\n return attributeType == 'MANY_ASSOCIATION';\r\n };\r\n ReferenceUtils.prototype.isAndLogicalOperatorType = function (logicalOperatorType) {\r\n return logicalOperatorType == \"AND\";\r\n };\r\n ReferenceUtils.prototype.isOrLogicalOperatorType = function (logicalOperatorType) {\r\n return logicalOperatorType == \"OR\";\r\n };\r\n ReferenceUtils.prototype.getEntityNameByAttribute = function (entity, attribute) {\r\n if (!entity || !attribute) {\r\n return \"\";\r\n }\r\n var attrType = attribute.type;\r\n var attrSysName = attribute.systemName;\r\n if (this.isTextAttributeType(attrType) || this.isHtmlAttributeType(attrType)) {\r\n return this.convertStringAttribute(entity[attrSysName]);\r\n }\r\n else if (this.isBooleanAttributeType(attrType)) {\r\n return this.convertBooleanAttribute(entity[attrSysName]);\r\n }\r\n else if (this.isDateAttributeType(attrType)) {\r\n return this.convertDateAttribute(entity[attrSysName]);\r\n }\r\n else if (this.isMoneyAttributeType(attrType)) {\r\n return this.convertMoneyAttribute(entity[attrSysName]);\r\n }\r\n else if (this.isGroupAttributeType(attrType)) {\r\n return this.convertGroupAttribute(entity, attribute.groupTemplate, attribute.childAttributes);\r\n }\r\n };\r\n ReferenceUtils.prototype.fixInputReferenceEntityAttributes = function (referenceEntity, referenceMetadata) {\r\n for (var i = 0; i < referenceMetadata.defaultAttributes.length; ++i) {\r\n var attr = referenceMetadata.defaultAttributes[i];\r\n var attrType = attr.type;\r\n var attrSysName = attr.systemName;\r\n if (this.isTextAttributeType(attrType) || this.isHtmlAttributeType(attrType)) {\r\n referenceEntity[attrSysName] = this.convertStringAttribute(referenceEntity[attrSysName]);\r\n }\r\n else if (this.isNumberAttributeType(attrType)) {\r\n referenceEntity[attrSysName] = this.convertNumberAttribute(referenceEntity[attrSysName]);\r\n }\r\n else if (this.isDateAttributeType(attrType)) {\r\n referenceEntity[attrSysName] = this.convertDateAttribute(referenceEntity[attrSysName]);\r\n }\r\n else if (this.isMoneyAttributeType(attrType)) {\r\n referenceEntity[attrSysName] = this.convertMoneyAttribute(referenceEntity[attrSysName]);\r\n }\r\n else if (this.isOneAssociationAttributeType(attrType)) {\r\n referenceEntity[attrSysName] = this.convertOneAssociationAttributeToNumber(referenceEntity[attrSysName]);\r\n }\r\n else if (this.isManyAssociationAttributeType(attrType)) {\r\n referenceEntity[attrSysName] = this.convertManyAssociationAttributeToNumbers(referenceEntity[attrSysName]);\r\n }\r\n }\r\n };\r\n ReferenceUtils.prototype.getStringInBrowserFormat = function (str) {\r\n var result = \"\";\r\n angular.forEach(str, function (ch) {\r\n switch (ch) {\r\n case \"=\":\r\n result = result.concat(\"%3D\");\r\n break;\r\n default:\r\n result = result.concat(ch);\r\n }\r\n });\r\n return result;\r\n };\r\n ReferenceUtils.prototype.hasUserTheSameBusinesUnitsWithEntity = function (userBusinessUnits, referenceEntity) {\r\n if (userBusinessUnits) {\r\n if (referenceEntity && referenceEntity[\"businessUnitId\"] &&\r\n userBusinessUnits.some(function (x) { return x == referenceEntity[\"businessUnitId\"]; })) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return true;\r\n };\r\n ReferenceUtils.NAME = \"reference.ReferenceUtils\";\r\n ReferenceUtils.BUSINESS_UNIT_ID_PROPERTY = \"businessUnitId\";\r\n ReferenceUtils.entityIdProperty = \"id\";\r\n ReferenceUtils.entityNameProperty = \"name\";\r\n ReferenceUtils.entityVersionProperty = \"version\";\r\n ReferenceUtils.entityIsActiveProperty = \"isActive\";\r\n return ReferenceUtils;\r\n})();\r\nexports.ReferenceUtils = ReferenceUtils;\r\n},{}],411:[function(require,module,exports){\nvar ReferenceEntitiesParams = (function () {\r\n function ReferenceEntitiesParams(referenceFilter, referenceSorting, referenceSearchString, referenceSplitParam, businessUnitFilter, nullableBusinessUnit) {\r\n this.referenceFilter = referenceFilter;\r\n this.referenceSorting = referenceSorting;\r\n this.referenceSearchString = referenceSearchString;\r\n this.referenceSplitParam = referenceSplitParam;\r\n this.businessUnitFilter = businessUnitFilter;\r\n this.nullableBusinessUnit = nullableBusinessUnit;\r\n }\r\n return ReferenceEntitiesParams;\r\n})();\r\nexports.ReferenceEntitiesParams = ReferenceEntitiesParams;\r\n},{}],412:[function(require,module,exports){\nvar ReferenceIsRequiredValidator = (function () {\r\n function ReferenceIsRequiredValidator(utils, entity, metadata, validationErrorsMap) {\r\n this.utils = utils;\r\n this.entity = entity;\r\n this.metadata = metadata;\r\n this.validationErrorsMap = validationErrorsMap;\r\n }\r\n ReferenceIsRequiredValidator.prototype.valid = function () {\r\n if (!this.utils || !this.entity || !this.metadata || !this.validationErrorsMap) {\r\n return false;\r\n }\r\n var result = true;\r\n for (var i = 0; i < this.metadata.editableAttributes.length; ++i) {\r\n var attr = this.metadata.editableAttributes[i];\r\n var attrSysName = attr.systemName;\r\n var attrIsRequired = attr.isRequired;\r\n if (!attrIsRequired) {\r\n continue;\r\n }\r\n if (!this.utils.validAttribute(attr.type, this.entity[attrSysName])) {\r\n this.validationErrorsMap.set(attrSysName, this.buildErrorMessage(attr.title));\r\n result = false;\r\n }\r\n }\r\n return result;\r\n };\r\n ReferenceIsRequiredValidator.prototype.buildErrorMessage = function (title) {\r\n return \"Please specify a value for the field \\\"%1\\\"\".replace(\"%1\", title);\r\n };\r\n return ReferenceIsRequiredValidator;\r\n})();\r\nexports.ReferenceIsRequiredValidator = ReferenceIsRequiredValidator;\r\n},{}],413:[function(require,module,exports){\nvar ReferenceMaxLengthValidator = (function () {\r\n function ReferenceMaxLengthValidator(utils, entity, metadata, validationErrorsMap) {\r\n this.utils = utils;\r\n this.entity = entity;\r\n this.metadata = metadata;\r\n this.validationErrorsMap = validationErrorsMap;\r\n }\r\n ReferenceMaxLengthValidator.prototype.valid = function () {\r\n if (!this.utils || !this.entity || !this.metadata || !this.validationErrorsMap) {\r\n return false;\r\n }\r\n var result = true;\r\n for (var i = 0; i < this.metadata.editableAttributes.length; ++i) {\r\n var attr = this.metadata.editableAttributes[i];\r\n var attrSysName = attr.systemName;\r\n var attrMaxLength = attr.maxLength;\r\n if (!(this.utils.isTextAttributeType(attr.type) || this.utils.isHtmlAttributeType(attr.type))\r\n || !attrMaxLength || !this.entity[attrSysName]) {\r\n continue;\r\n }\r\n if (this.entity[attrSysName].length > attrMaxLength) {\r\n this.validationErrorsMap.set(attrSysName, this.buildErrorMessage(attr.title, attrMaxLength));\r\n result = false;\r\n }\r\n }\r\n return result;\r\n };\r\n ReferenceMaxLengthValidator.prototype.buildErrorMessage = function (title, maxLength) {\r\n return \"Field length \\\"%1\\\" cannot exceed %1 symbols\".replace(\"%1\", title).replace(\"%1\", maxLength);\r\n };\r\n return ReferenceMaxLengthValidator;\r\n})();\r\nexports.ReferenceMaxLengthValidator = ReferenceMaxLengthValidator;\r\n},{}],414:[function(require,module,exports){\nvar ReferenceMinValueValidator = (function () {\r\n function ReferenceMinValueValidator(utils, entity, metadata, validationErrorsMap) {\r\n this.utils = utils;\r\n this.entity = entity;\r\n this.metadata = metadata;\r\n this.validationErrorsMap = validationErrorsMap;\r\n }\r\n ReferenceMinValueValidator.prototype.valid = function () {\r\n if (!this.utils || !this.entity || !this.metadata || !this.validationErrorsMap) {\r\n return false;\r\n }\r\n var result = true;\r\n for (var i = 0; i < this.metadata.editableAttributes.length; ++i) {\r\n var attr = this.metadata.editableAttributes[i];\r\n var attrSysName = attr.systemName;\r\n var attrMinValue = attr.minValue;\r\n if (!this.utils.isNumberAttributeType(attr.type) || (attrMinValue == null || attrMinValue == undefined)\r\n || !this.entity[attrSysName]) {\r\n continue;\r\n }\r\n if (this.entity[attrSysName] < attrMinValue) {\r\n this.validationErrorsMap.set(attrSysName, this.buildErrorMessage(attr.title, attrMinValue));\r\n result = false;\r\n }\r\n }\r\n return result;\r\n };\r\n ReferenceMinValueValidator.prototype.buildErrorMessage = function (title, minValue) {\r\n return \"Field \\\"%0\\\" value can't be lower than %1\"\r\n .replace(\"%0\", title)\r\n .replace(\"%1\", minValue);\r\n };\r\n return ReferenceMinValueValidator;\r\n})();\r\nexports.ReferenceMinValueValidator = ReferenceMinValueValidator;\r\n},{}],415:[function(require,module,exports){\nvar ReferenceRequiredAttributesGroupValidator = (function () {\r\n function ReferenceRequiredAttributesGroupValidator(utils, entity, metadata, validationErrorsMap) {\r\n this.utils = utils;\r\n this.entity = entity;\r\n this.metadata = metadata;\r\n this.validationErrorsMap = validationErrorsMap;\r\n }\r\n ReferenceRequiredAttributesGroupValidator.prototype.valid = function () {\r\n if (!this.utils || !this.entity || !this.metadata || !this.validationErrorsMap) {\r\n return false;\r\n }\r\n if (!this.metadata.requiredAttributesGroup) {\r\n return true;\r\n }\r\n return this.entityByRequiredAttributesGroupValid(this.entity, this.metadata.requiredAttributesGroup);\r\n };\r\n ReferenceRequiredAttributesGroupValidator.prototype.entityByRequiredAttributesGroupValid = function (referenceEntity, requiredAttributesGroup) {\r\n var logicalOperatorType = requiredAttributesGroup.logicalOperatorType;\r\n var result = this.entityByRequiredAttributesValid(referenceEntity, requiredAttributesGroup);\r\n for (var i = 0; i < requiredAttributesGroup.requiredAttributesGroups.length; ++i) {\r\n var requiredAttrsGroup = requiredAttributesGroup.requiredAttributesGroups[i];\r\n if (this.utils.isAndLogicalOperatorType(logicalOperatorType)) {\r\n result = result && this.entityByRequiredAttributesGroupValid(referenceEntity, requiredAttrsGroup);\r\n }\r\n else if (this.utils.isOrLogicalOperatorType(logicalOperatorType)) {\r\n result = result || this.entityByRequiredAttributesGroupValid(referenceEntity, requiredAttrsGroup);\r\n }\r\n }\r\n return result;\r\n };\r\n ReferenceRequiredAttributesGroupValidator.prototype.entityByRequiredAttributesValid = function (referenceEntity, requiredAttributesGroup) {\r\n var attributes = requiredAttributesGroup.attributes;\r\n var logicalOperatorType = requiredAttributesGroup.logicalOperatorType;\r\n if (!attributes || attributes.length == 0) {\r\n return this.utils.isAndLogicalOperatorType(logicalOperatorType);\r\n }\r\n var firstAttr = attributes[0];\r\n var result = this.utils.validAttribute(firstAttr.type, referenceEntity[firstAttr.systemName]);\r\n for (var i = 1; i < attributes.length; ++i) {\r\n var attr = attributes[i];\r\n if (this.utils.isAndLogicalOperatorType(logicalOperatorType)) {\r\n result = result && this.utils.validAttribute(attr.type, referenceEntity[attr.systemName]);\r\n }\r\n else if (this.utils.isOrLogicalOperatorType(logicalOperatorType)) {\r\n result = result || this.utils.validAttribute(attr.type, referenceEntity[attr.systemName]);\r\n }\r\n }\r\n return result;\r\n };\r\n return ReferenceRequiredAttributesGroupValidator;\r\n})();\r\nexports.ReferenceRequiredAttributesGroupValidator = ReferenceRequiredAttributesGroupValidator;\r\n},{}],416:[function(require,module,exports){\n(function (LogonProviderEnum) {\r\n LogonProviderEnum[LogonProviderEnum[\"LOCAL\"] = 1] = \"LOCAL\";\r\n LogonProviderEnum[LogonProviderEnum[\"AD_LOCAL\"] = 2] = \"AD_LOCAL\";\r\n LogonProviderEnum[LogonProviderEnum[\"AD_SSO\"] = 3] = \"AD_SSO\";\r\n LogonProviderEnum[LogonProviderEnum[\"PERSONIFY_SSO\"] = 101] = \"PERSONIFY_SSO\";\r\n LogonProviderEnum[LogonProviderEnum[\"PERSONIFY_USERPASSWORD\"] = 102] = \"PERSONIFY_USERPASSWORD\";\r\n LogonProviderEnum[LogonProviderEnum[\"LOCAL_OR_PERSONIFY\"] = 103] = \"LOCAL_OR_PERSONIFY\";\r\n LogonProviderEnum[LogonProviderEnum[\"APTIFY_SSO\"] = 201] = \"APTIFY_SSO\";\r\n LogonProviderEnum[LogonProviderEnum[\"LINKEDIN_SSO\"] = 401] = \"LINKEDIN_SSO\";\r\n LogonProviderEnum[LogonProviderEnum[\"MICROSOFT_AD_SSO\"] = 402] = \"MICROSOFT_AD_SSO\";\r\n LogonProviderEnum[LogonProviderEnum[\"FACEBOOK_SSO\"] = 403] = \"FACEBOOK_SSO\";\r\n LogonProviderEnum[LogonProviderEnum[\"GOOGLE_SSO\"] = 404] = \"GOOGLE_SSO\";\r\n LogonProviderEnum[LogonProviderEnum[\"MERCADO_SSO\"] = 500] = \"MERCADO_SSO\";\r\n})(exports.LogonProviderEnum || (exports.LogonProviderEnum = {}));\r\nvar LogonProviderEnum = exports.LogonProviderEnum;\r\nexports.autoSsoProviders = [\r\n LogonProviderEnum.PERSONIFY_SSO,\r\n LogonProviderEnum.APTIFY_SSO,\r\n LogonProviderEnum.MERCADO_SSO\r\n];\r\n},{}],417:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar Event_1 = require(\"./../authcore/Event\");\r\nvar PermissionsRepository = (function () {\r\n function PermissionsRepository($rootScope, $interval, $http, $q, url) {\r\n var _this = this;\r\n this.$interval = $interval;\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.url = url;\r\n this.permissionsCache = new Map();\r\n this.expirationCache = new Map();\r\n $rootScope.$on(Event_1.Event.LOGGED_ON, function () {\r\n _this.clearCache(true);\r\n });\r\n $rootScope.$on(Event_1.Event.LOGGED_OFF, function () {\r\n _this.clearCache(true);\r\n });\r\n this.timer = this.$interval(function () {\r\n _this.clearCache(false);\r\n }, PermissionsRepository.CACHE_CLEAR_INTERVAL, 0, false);\r\n $rootScope.$on('$destroy', function () {\r\n _this.$interval.cancel(_this.timer);\r\n });\r\n }\r\n PermissionsRepository.prototype.getPermissionsForObject = function (objectType, objectId) {\r\n var _this = this;\r\n var key = objectType.key + '_' + objectId;\r\n var value = this.permissionsCache.get(key);\r\n if (value) {\r\n var promise = this.$q.defer();\r\n promise.resolve(value);\r\n return promise.promise;\r\n }\r\n return this.$http.get(this.url.base(\"/api/permissions/:objectType/:id\")\r\n .param(\":objectType\", objectType.name)\r\n .param(\":id\", objectId)\r\n .service())\r\n .then(function (result) {\r\n _this.permissionsCache.set(key, result.data);\r\n _this.expirationCache.set(key, new Date().getTime());\r\n return result.data;\r\n });\r\n };\r\n PermissionsRepository.prototype.clearCache = function (force) {\r\n if (force) {\r\n this.permissionsCache.clear();\r\n this.expirationCache.clear();\r\n }\r\n else {\r\n var expired = [];\r\n var expiredFromTime = new Date().getTime() - PermissionsRepository.CACHE_EXPIRATION_TIME;\r\n this.expirationCache.forEach(function (value, key, map) {\r\n if (value < expiredFromTime) {\r\n expired.push(key);\r\n }\r\n });\r\n for (var i = 0; i < expired.length; i++) {\r\n var key = expired[i];\r\n this.permissionsCache.delete(key);\r\n this.expirationCache.delete(key);\r\n }\r\n }\r\n };\r\n PermissionsRepository.NAME = \"security.PermissionsRepository\";\r\n PermissionsRepository.CACHE_EXPIRATION_TIME = 1000 * 60 * 5;\r\n PermissionsRepository.CACHE_CLEAR_INTERVAL = 1000 * 5;\r\n PermissionsRepository.$inject = [\r\n \"$rootScope\",\r\n \"$interval\",\r\n \"$http\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return PermissionsRepository;\r\n})();\r\nexports.PermissionsRepository = PermissionsRepository;\r\n},{\"./../authcore/Event\":27,\"./../utils/UrlService\":528}],418:[function(require,module,exports){\nvar PermissionsRepository_1 = require(\"./PermissionsRepository\");\r\nvar SecuredObjectType_1 = require(\"./permissions/SecuredObjectType\");\r\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PermissionsService = (function () {\r\n function PermissionsService(authApi, permissionsRepository, $http, url) {\r\n this.authApi = authApi;\r\n this.permissionsRepository = permissionsRepository;\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n PermissionsService.prototype.getSystemPermissions = function () {\r\n return this.authApi.getCurrentUser()\r\n .then(function (user) { return user.permissions; });\r\n };\r\n PermissionsService.prototype.getSecuredObjectPermissions = function (objectType, entityId) {\r\n return this.permissionsRepository.getPermissionsForObject(objectType, entityId);\r\n };\r\n PermissionsService.prototype.getMaterialPermissions = function (materialId) {\r\n return this.permissionsRepository.getPermissionsForObject(SecuredObjectType_1.SecuredObjectType.MATERIAL, materialId);\r\n };\r\n PermissionsService.prototype.getPlaylistPermissions = function (playlistId) {\r\n return this.permissionsRepository.getPermissionsForObject(SecuredObjectType_1.SecuredObjectType.PLAYLIST, playlistId);\r\n };\r\n PermissionsService.prototype.getProductPermissions = function (productId) {\r\n return this.permissionsRepository.getPermissionsForObject(SecuredObjectType_1.SecuredObjectType.PRODUCT, productId);\r\n };\r\n PermissionsService.prototype.getCoursePermissions = function (courseId) {\r\n return this.permissionsRepository.getPermissionsForObject(SecuredObjectType_1.SecuredObjectType.COURSE, courseId);\r\n };\r\n PermissionsService.prototype.getQuizPermissions = function (quizId) {\r\n return this.permissionsRepository.getPermissionsForObject(SecuredObjectType_1.SecuredObjectType.QUIZ, quizId);\r\n };\r\n PermissionsService.prototype.getNewsPermissions = function (newsId) {\r\n return this.permissionsRepository.getPermissionsForObject(SecuredObjectType_1.SecuredObjectType.NEWS, newsId);\r\n };\r\n PermissionsService.prototype.getLearningPathPermissions = function (learningPathId) {\r\n return this.permissionsRepository.getPermissionsForObject(SecuredObjectType_1.SecuredObjectType.LEARNING_PATH, learningPathId);\r\n };\r\n PermissionsService.prototype.getAllObjectPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var url = \"/api/permissions/usersAndGroups/:objectType\";\r\n if (objectId != null) {\r\n url += \"?id=:id\";\r\n }\r\n var urlBuilder = this.url.base(url)\r\n .param(\":objectType\", securedObjectType.name);\r\n if (objectId != null) {\r\n urlBuilder.param(\":id\", objectId);\r\n }\r\n return this.$http.get(urlBuilder.service())\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n PermissionsService.prototype.getViewAndStartObjectPermissionsWithUsersAndGroups = function (securedObjectType, objectId) {\r\n var url = \"/api/permissions/usersAndGroups/:objectType/viewAndStart\";\r\n if (objectId != null) {\r\n url += \"?id=:id\";\r\n }\r\n var urlBuilder = this.url.base(url)\r\n .param(\":objectType\", securedObjectType.name);\r\n if (objectId != null) {\r\n urlBuilder.param(\":id\", objectId);\r\n }\r\n return this.$http.get(urlBuilder.service())\r\n .then(function (result) {\r\n return result.data;\r\n });\r\n };\r\n PermissionsService.NAME = \"security.PermissionsService\";\r\n PermissionsService.$inject = [\r\n AuthService_1.AuthService.NAME,\r\n PermissionsRepository_1.PermissionsRepository.NAME,\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return PermissionsService;\r\n})();\r\nexports.PermissionsService = PermissionsService;\r\n},{\"./../auth/AuthService\":18,\"./../utils/UrlService\":528,\"./PermissionsRepository\":417,\"./permissions/SecuredObjectType\":424}],419:[function(require,module,exports){\nvar PermissionsRepository_1 = require(\"./PermissionsRepository\");\r\nvar PermissionsService_1 = require(\"./PermissionsService\");\r\nvar SecurityService_1 = require(\"./SecurityService\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nvar AuthModule_1 = require(\"./../auth/AuthModule\");\r\nvar AuthCoreModule_1 = require(\"./../authcore/AuthCoreModule\");\r\nexports.SecurityModule = angular\r\n .module(\"security\", [\r\n UrlsModule_1.UrlsModule.name,\r\n AuthModule_1.AuthModule.name,\r\n AuthCoreModule_1.AuthCoreModule.name\r\n])\r\n .service(PermissionsRepository_1.PermissionsRepository.NAME, PermissionsRepository_1.PermissionsRepository)\r\n .service(PermissionsService_1.PermissionsService.NAME, PermissionsService_1.PermissionsService)\r\n .service(SecurityService_1.SecurityService.NAME, SecurityService_1.SecurityService);\r\n},{\"./../auth/AuthModule\":17,\"./../authcore/AuthCoreModule\":24,\"./../urls/UrlsModule\":492,\"./PermissionsRepository\":417,\"./PermissionsService\":418,\"./SecurityService\":420}],420:[function(require,module,exports){\nvar PermissionsService_1 = require(\"./PermissionsService\");\r\nvar AuthManager_1 = require(\"./../authcore/AuthManager\");\r\nvar AuthRedirect_1 = require(\"./../authcore/AuthRedirect\");\r\nvar RedirectReason_1 = require(\"./../authcore/RedirectReason\");\r\nvar AuthRouter_1 = require(\"./../urls/AuthRouter\");\r\nvar UserService_1 = require(\"../users/UserService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar SecurityService = (function () {\r\n function SecurityService($location, authManager, authRedirect, permissionsApi, authRouter, userService, authService) {\r\n this.$location = $location;\r\n this.authManager = authManager;\r\n this.authRedirect = authRedirect;\r\n this.permissionsApi = permissionsApi;\r\n this.authRouter = authRouter;\r\n this.userService = userService;\r\n this.authService = authService;\r\n }\r\n SecurityService.prototype.demandAuthentication = function () {\r\n if (!this.authManager.hasToken()) {\r\n this.authRedirect.redirectToLogOn(RedirectReason_1.RedirectReason.ACCESS_DENIED);\r\n }\r\n else if (!this.authManager.isAuthenticated()) {\r\n this.authRedirect.redirectToLogOn(RedirectReason_1.RedirectReason.TOKEN_EXPIRED);\r\n }\r\n return this;\r\n };\r\n SecurityService.prototype.demandNotAuthenticated = function () {\r\n if (this.authManager.isAuthenticated()) {\r\n this.authRedirect.forwardToAccessDenied();\r\n }\r\n return this;\r\n };\r\n SecurityService.prototype.demandSystemPermissions = function (func) {\r\n return this.demandSystemPermissionsIf(true, func);\r\n };\r\n SecurityService.prototype.demandSystemPermissionsIf = function (condition, func) {\r\n var _this = this;\r\n if (condition) {\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n if (!func(systemPermissions)) {\r\n _this.forwardToAccessDeniedOrRedirectLogOn();\r\n }\r\n });\r\n }\r\n return this;\r\n };\r\n SecurityService.prototype.demandMaterialPermissions = function (materialId, func) {\r\n return this.demandMaterialPermissionsIf(true, materialId, func);\r\n };\r\n SecurityService.prototype.demandMaterialPermissionsIf = function (condition, materialId, func) {\r\n var _this = this;\r\n if (condition) {\r\n this.permissionsApi.getMaterialPermissions(materialId).then(function (materialPermissions) {\r\n if (!func(materialPermissions)) {\r\n _this.forwardToAccessDeniedOrRedirectLogOn();\r\n }\r\n });\r\n }\r\n return this;\r\n };\r\n SecurityService.prototype.demandPlaylistPermissions = function (playlistId, func) {\r\n return this.demandPlaylistPermissionsIf(true, playlistId, func);\r\n };\r\n SecurityService.prototype.demandPlaylistPermissionsIf = function (condition, playlistId, func) {\r\n var _this = this;\r\n if (condition) {\r\n this.permissionsApi.getPlaylistPermissions(playlistId).then(function (playlistPermissions) {\r\n if (!func(playlistPermissions)) {\r\n _this.forwardToAccessDeniedOrRedirectLogOn();\r\n }\r\n });\r\n }\r\n return this;\r\n };\r\n SecurityService.prototype.demandProductPermissions = function (productId, func) {\r\n return this.demandProductPermissionsIf(true, productId, func);\r\n };\r\n SecurityService.prototype.demandProductPermissionsIf = function (condition, productId, func) {\r\n var _this = this;\r\n if (condition) {\r\n this.permissionsApi.getProductPermissions(productId).then(function (productPermissions) {\r\n if (!func(productPermissions)) {\r\n _this.forwardToAccessDeniedOrRedirectLogOn();\r\n }\r\n });\r\n }\r\n return this;\r\n };\r\n SecurityService.prototype.demandCoursePermissions = function (courseId, func) {\r\n return this.demandCoursePermissionsIf(true, courseId, func);\r\n };\r\n SecurityService.prototype.demandViewCoursePermissions = function (courseId, func) {\r\n var _this = this;\r\n this.permissionsApi.getCoursePermissions(courseId).then(function (coursePermissions) {\r\n if (!func(coursePermissions)) {\r\n _this.demandSystemPermissions(function (systemPermissions) { return systemPermissions.manageAnyLearningObject; });\r\n }\r\n });\r\n return this;\r\n };\r\n SecurityService.prototype.demandCoursePermissionsIf = function (condition, courseId, func) {\r\n var _this = this;\r\n if (condition) {\r\n this.permissionsApi.getCoursePermissions(courseId).then(function (coursePermissions) {\r\n if (!func(coursePermissions)) {\r\n _this.forwardToAccessDeniedOrRedirectLogOn();\r\n }\r\n });\r\n }\r\n return this;\r\n };\r\n SecurityService.prototype.demandQuizPermissions = function (quizId, func) {\r\n return this.demandQuizPermissionsIf(true, quizId, func);\r\n };\r\n SecurityService.prototype.demandQuizPermissionsIf = function (condition, quizId, func) {\r\n var _this = this;\r\n if (condition) {\r\n this.permissionsApi.getQuizPermissions(quizId).then(function (quizPermissions) {\r\n if (!func(quizPermissions)) {\r\n _this.forwardToAccessDeniedOrRedirectLogOn();\r\n }\r\n });\r\n }\r\n return this;\r\n };\r\n SecurityService.prototype.demandNewsPermissions = function (newsId, func) {\r\n return this.demandMaterialPermissionsIf(true, newsId, func);\r\n };\r\n SecurityService.prototype.demandNewsPermissionsIf = function (condition, newsId, func) {\r\n var _this = this;\r\n if (condition) {\r\n this.permissionsApi.getNewsPermissions(newsId).then(function (newsPermissions) {\r\n if (!func(newsPermissions)) {\r\n _this.forwardToAccessDeniedOrRedirectLogOn();\r\n }\r\n });\r\n }\r\n return this;\r\n };\r\n SecurityService.prototype.demandLearningPathPermissions = function (learningPathId, func) {\r\n return this.demandLearningPathPermissionsIf(true, learningPathId, func);\r\n };\r\n SecurityService.prototype.demandLearningPathPermissionsIf = function (condition, learningPathId, func) {\r\n var _this = this;\r\n if (condition) {\r\n this.permissionsApi.getLearningPathPermissions(learningPathId).then(function (learningPathPermissions) {\r\n if (!func(learningPathPermissions)) {\r\n _this.forwardToAccessDeniedOrRedirectLogOn();\r\n }\r\n });\r\n }\r\n return this;\r\n };\r\n SecurityService.prototype.demandUserBusinessRole = function (businessRole) {\r\n var _this = this;\r\n this.userService.getCurrentUserBusinessRole().then(function (role) {\r\n if (businessRole !== role) {\r\n _this.forwardToAccessDeniedOrRedirectLogOn();\r\n }\r\n });\r\n return this;\r\n };\r\n SecurityService.prototype.forwardToAccessDeniedOrRedirectLogOn = function () {\r\n if (this.authManager.isAuthenticated()) {\r\n this.authRedirect.forwardToAccessDenied();\r\n }\r\n else if (!this.authManager.hasToken()) {\r\n this.authManager.eraseToken();\r\n this.authRedirect.redirectToLogOn(RedirectReason_1.RedirectReason.ACCESS_DENIED);\r\n }\r\n else {\r\n this.authManager.logOff();\r\n this.authManager.eraseToken();\r\n this.authRedirect.redirectToLogOn(RedirectReason_1.RedirectReason.TOKEN_EXPIRED);\r\n }\r\n };\r\n SecurityService.NAME = \"security.SecurityService\";\r\n SecurityService.$inject = [\r\n \"$location\",\r\n AuthManager_1.AuthManager.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n UserService_1.UserService.NAME,\r\n AuthService_1.AuthService.NAME\r\n ];\r\n return SecurityService;\r\n})();\r\nexports.SecurityService = SecurityService;\r\n},{\"../auth/AuthService\":18,\"../users/UserService\":499,\"./../authcore/AuthManager\":25,\"./../authcore/AuthRedirect\":26,\"./../authcore/RedirectReason\":28,\"./../urls/AuthRouter\":463,\"./PermissionsService\":418}],421:[function(require,module,exports){\nvar SsoErrors = (function () {\r\n function SsoErrors() {\r\n }\r\n SsoErrors.MERCADO_INVALID_TOKEN_SIGNATURE = \"mercado:invalid_token_signature\";\r\n SsoErrors.MERCADO_INVALID_TOKEN = \"mercado:invalid_token\";\r\n SsoErrors.MERCADO_COMPANY_NOT_FOUND = \"mercado:company_not_found\";\r\n SsoErrors.BUSINESS_UNIT_REQUIRED = \"error:business_unit_required\";\r\n SsoErrors.FULL_NAME_REQUIRED = \"error:full_name_required\";\r\n SsoErrors.EMAIL_REQUIRED = \"error:email_required\";\r\n SsoErrors.EMAIL_DUPLICATED = \"error.user.duplicate.email\";\r\n SsoErrors.FREE_PLAN_IS_FULL = \"error:free.plan.full\";\r\n SsoErrors.SELF_REGISTRATION_DISABLED = \"error:self_registration_disabled\";\r\n SsoErrors.LOGON_NOT_ACTIVE = \"error:logon_not_active\";\r\n SsoErrors.USER_NOT_ACTIVE = \"error:user_not_active\";\r\n return SsoErrors;\r\n})();\r\nexports.SsoErrors = SsoErrors;\r\n},{}],422:[function(require,module,exports){\n(function (SsoReasonType) {\r\n SsoReasonType[SsoReasonType[\"AUTHENTICATION\"] = 0] = \"AUTHENTICATION\";\r\n SsoReasonType[SsoReasonType[\"START_TRIAL\"] = 1] = \"START_TRIAL\";\r\n})(exports.SsoReasonType || (exports.SsoReasonType = {}));\r\nvar SsoReasonType = exports.SsoReasonType;\r\n},{}],423:[function(require,module,exports){\nvar AllUsersPermissions = (function () {\r\n function AllUsersPermissions() {\r\n }\r\n AllUsersPermissions.VIEW_MATERIAL = 201;\r\n AllUsersPermissions.DOWNLOAD_MATERIAL = 204;\r\n AllUsersPermissions.VIEW_COURSE = 210;\r\n AllUsersPermissions.VIEW_QUIZ = 221;\r\n AllUsersPermissions.VIEW_PLAYLIST = 230;\r\n AllUsersPermissions.VIEW_LEARNING_PATH = 250;\r\n AllUsersPermissions.PERMISSIONS_IDS = [\r\n AllUsersPermissions.VIEW_MATERIAL,\r\n AllUsersPermissions.DOWNLOAD_MATERIAL,\r\n AllUsersPermissions.VIEW_COURSE,\r\n AllUsersPermissions.VIEW_QUIZ,\r\n AllUsersPermissions.VIEW_PLAYLIST,\r\n AllUsersPermissions.VIEW_LEARNING_PATH];\r\n return AllUsersPermissions;\r\n})();\r\nexports.AllUsersPermissions = AllUsersPermissions;\r\nvar AllGroupsPermissions = (function () {\r\n function AllGroupsPermissions() {\r\n }\r\n AllGroupsPermissions.SYSTEM_CONFIGURATION_EDIT = 70;\r\n AllGroupsPermissions.SYSTEM_STORAGE_PLACES_EDIT = 72;\r\n AllGroupsPermissions.SYSTEM_VIEW_SECURITY_LOG = 150;\r\n AllGroupsPermissions.SYSTEM_VIEW_SYSTEM_LOG = 151;\r\n AllGroupsPermissions.SYSTEM_MANAGE_CRON_JOBS = 155;\r\n AllGroupsPermissions.SYSTEM_MANAGE_ANY_BU = 180;\r\n AllGroupsPermissions.NULL_BU_ONLY_SYSTEM_PERMISSIONS_IDS = [\r\n AllGroupsPermissions.SYSTEM_CONFIGURATION_EDIT,\r\n AllGroupsPermissions.SYSTEM_STORAGE_PLACES_EDIT,\r\n AllGroupsPermissions.SYSTEM_VIEW_SECURITY_LOG,\r\n AllGroupsPermissions.SYSTEM_VIEW_SYSTEM_LOG,\r\n AllGroupsPermissions.SYSTEM_MANAGE_CRON_JOBS,\r\n AllGroupsPermissions.SYSTEM_MANAGE_ANY_BU\r\n ];\r\n return AllGroupsPermissions;\r\n})();\r\nexports.AllGroupsPermissions = AllGroupsPermissions;\r\nvar RolesSpecificPermissions = (function () {\r\n function RolesSpecificPermissions() {\r\n }\r\n RolesSpecificPermissions.SYSTEM_MY_ANALYTICS_VIEW = 101;\r\n RolesSpecificPermissions.SYSTEM_COURSES_DISCUSSIONS_ACCESS = 114;\r\n RolesSpecificPermissions.SYSTEM_ASSESSMENT_SCORE = 174;\r\n RolesSpecificPermissions.SYSTEM_ANY_LEARNING_OBJECT_MANAGE = 171;\r\n RolesSpecificPermissions.learnerSpecificPermissions = [];\r\n RolesSpecificPermissions.instructorSpecificPermissions = [\r\n RolesSpecificPermissions.SYSTEM_MY_ANALYTICS_VIEW,\r\n RolesSpecificPermissions.SYSTEM_COURSES_DISCUSSIONS_ACCESS,\r\n RolesSpecificPermissions.SYSTEM_ASSESSMENT_SCORE\r\n ];\r\n RolesSpecificPermissions.attendeeManagerSpecificPermissions = [\r\n RolesSpecificPermissions.SYSTEM_MY_ANALYTICS_VIEW,\r\n RolesSpecificPermissions.SYSTEM_COURSES_DISCUSSIONS_ACCESS\r\n ];\r\n RolesSpecificPermissions.authorSpecificPermissions = [\r\n RolesSpecificPermissions.SYSTEM_MY_ANALYTICS_VIEW,\r\n RolesSpecificPermissions.SYSTEM_ANY_LEARNING_OBJECT_MANAGE\r\n ];\r\n RolesSpecificPermissions.administratorSpecificPermissions = [\r\n RolesSpecificPermissions.SYSTEM_MY_ANALYTICS_VIEW\r\n ];\r\n return RolesSpecificPermissions;\r\n})();\r\nexports.RolesSpecificPermissions = RolesSpecificPermissions;\r\n},{}],424:[function(require,module,exports){\nvar SecuredObjectType = (function () {\r\n function SecuredObjectType(key, name) {\r\n this.key = key;\r\n this.name = name;\r\n }\r\n SecuredObjectType.MATERIAL = new SecuredObjectType(1, 'material');\r\n SecuredObjectType.COURSE = new SecuredObjectType(2, 'course');\r\n SecuredObjectType.QUIZ = new SecuredObjectType(3, 'quiz');\r\n SecuredObjectType.PLAYLIST = new SecuredObjectType(4, 'playlist');\r\n SecuredObjectType.NEWS = new SecuredObjectType(5, 'news');\r\n SecuredObjectType.LEARNING_PATH = new SecuredObjectType(6, 'learning_path');\r\n SecuredObjectType.PRODUCT = new SecuredObjectType(7, 'product');\r\n SecuredObjectType.BADGE = new SecuredObjectType(8, 'badge');\r\n return SecuredObjectType;\r\n})();\r\nexports.SecuredObjectType = SecuredObjectType;\r\n},{}],425:[function(require,module,exports){\nvar SettingsService_1 = require(\"./SettingsService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar SystemSettingsRouter_1 = require(\"./../urls/SystemSettingsRouter\");\r\nvar CommonSettingsController = (function () {\r\n function CommonSettingsController(url, $http, settingsApi, permissionsApi, systemSettingsRouter) {\r\n var _this = this;\r\n this.url = url;\r\n this.$http = $http;\r\n this.settingsApi = settingsApi;\r\n this.systemSettingsRouter = systemSettingsRouter;\r\n this.settings = {};\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_COMMON_SETTINGS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"General system settings\").update();\r\n permissionsApi.getSystemPermissions().then(function (s) {\r\n _this.systemPermissions = s;\r\n });\r\n this.loadSettings();\r\n this.loadAvailableLocales();\r\n }\r\n CommonSettingsController.prototype.loadSettings = function () {\r\n var _this = this;\r\n this.settingsApi.getSystemCommonSettings().then(function (p) {\r\n angular.copy(p, _this.settings);\r\n });\r\n };\r\n CommonSettingsController.prototype.saveSettings = function () {\r\n var _this = this;\r\n this.settingsApi.update(this.settings).then(function (r) {\r\n INotifier_1.notifier.success(\"Settings have been saved\");\r\n angular.copy(r, _this.settings);\r\n }).catch(function (r) {\r\n INotifier_1.notifier.error(r.data.message);\r\n });\r\n };\r\n CommonSettingsController.prototype.loadAvailableLocales = function () {\r\n var _this = this;\r\n this.settingsApi.getAvailableLocales().then(function (locales) {\r\n _this.availableLocales = locales;\r\n });\r\n };\r\n CommonSettingsController.NAME = \"settings.CommonSettingsController\";\r\n CommonSettingsController.$inject = [\r\n UrlService_1.UrlService.NAME,\r\n \"$http\",\r\n SettingsService_1.SettingsService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SystemSettingsRouter_1.SystemSettingsRouter.NAME\r\n ];\r\n return CommonSettingsController;\r\n})();\r\nexports.CommonSettingsController = CommonSettingsController;\r\n},{\"./../INotifier\":5,\"./../security/PermissionsService\":418,\"./../urls/SystemSettingsRouter\":490,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./SettingsService\":427}],426:[function(require,module,exports){\nvar SettingsService_1 = require(\"./SettingsService\");\r\nvar CommonSettingsController_1 = require(\"./CommonSettingsController\");\r\nvar StoragePlacesRegistryController_1 = require(\"./StoragePlacesRegistryController\");\r\nvar StoragePlaceEditController_1 = require(\"./StoragePlaceEditController\");\r\nvar SystemSettingsController_1 = require(\"./SystemSettingsController\");\r\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar SystemBrandingController_1 = require(\"./SystemBrandingController\");\r\nexports.SettingsModule = angular\r\n .module(\"settings\", [\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .service(SettingsService_1.SettingsService.NAME, SettingsService_1.SettingsService)\r\n .controller(CommonSettingsController_1.CommonSettingsController.NAME, CommonSettingsController_1.CommonSettingsController)\r\n .controller(StoragePlacesRegistryController_1.StoragePlacesRegistryController.NAME, StoragePlacesRegistryController_1.StoragePlacesRegistryController)\r\n .controller(StoragePlaceEditController_1.StoragePlaceEditController.NAME, StoragePlaceEditController_1.StoragePlaceEditController)\r\n .controller(SystemSettingsController_1.SystemSettingsController.NAME, SystemSettingsController_1.SystemSettingsController)\r\n .controller(SystemBrandingController_1.SystemBrandingController.NAME, SystemBrandingController_1.SystemBrandingController);\r\n},{\"../security/SecurityModule\":419,\"../urls/UrlsModule\":492,\"./CommonSettingsController\":425,\"./SettingsService\":427,\"./StoragePlaceEditController\":428,\"./StoragePlacesRegistryController\":429,\"./SystemBrandingController\":430,\"./SystemSettingsController\":431}],427:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar SettingsService = (function () {\r\n function SettingsService($http, $q, $timeout, url, coursesRouter, materialsRouter) {\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.$timeout = $timeout;\r\n this.url = url;\r\n this.coursesRouter = coursesRouter;\r\n this.materialsRouter = materialsRouter;\r\n }\r\n SettingsService.prototype.getSystemCommonSettings = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/common\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getAvailableLocales = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/common/locales\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getQuestionsTags = function (quizId) {\r\n var url = (quizId == null || quizId == undefined)\r\n ? \"/api/settings/common/questions/tags\"\r\n : \"/api/settings/common/questions/tags?quizId=:quizId\";\r\n return this.$http.get(this.url.base(url).param(\":quizId\", quizId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getIsQuizFilesUploadsEnabled = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/common/quizzes/isFileUploadsEnabled\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.update = function (settings) {\r\n return this.$http.put(this.url.service(\"/api/settings/common\"), settings)\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getStoragePlaces = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/storagePlaces\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getStoragePlace = function (id) {\r\n return this.$http.get(this.url.base(\"/api/settings/storagePlaces/:id\").param(\":id\", id).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.createStoragePlace = function (storagePlace) {\r\n return this.$http.post(this.url.service(\"/api/settings/storagePlaces\"), storagePlace)\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.updateStoragePlace = function (storagePlace) {\r\n return this.$http.put(this.url.service(\"/api/settings/storagePlaces\"), storagePlace)\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.setStoragePlaceActive = function (id, isActive) {\r\n return this.$http.put(this.url.base(\"/api/settings/storagePlaces/:id/setActive/:isActive\")\r\n .param(\":id\", id)\r\n .param(\":isActive\", isActive).service(), undefined)\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getCurrentDate = function () {\r\n var _this = this;\r\n if (!this.currentDate) {\r\n return this.$http.get(this.url.service(\"/api/settings/common/currentDate\"))\r\n .then(function (result) {\r\n _this.currentDate = result.data;\r\n _this.$timeout(function () {\r\n _this.currentDate = null;\r\n }, SettingsService.RESET_CURRENT_DATE_TIMEOUT_MS);\r\n return result.data;\r\n });\r\n }\r\n else {\r\n return this.$q.when(this.currentDate);\r\n }\r\n };\r\n SettingsService.prototype.getHomepage = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/common/homepage\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getMenuItemsAvailabilitySettings = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/common/visibility/menuItems\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getMenuItemsVisibilitySetting = function () {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/visibility/menuItems/forCurrentUser\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getBUZoomVisibilitySetting = function (businessUnitIds) {\r\n return this.$http.get(this.url.service(\"/api/businessUnits/zoom/visibility\"), { params: { businessUnitIds: businessUnitIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getAllSystemProperties = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/system/all\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getSystemProperty = function (systemPropertyId) {\r\n return this.$http.get(this.url.base(\"/api/settings/system/:id\")\r\n .param(\":id\", systemPropertyId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.setSystemProperty = function (systemPropertyId, value) {\r\n return this.$http.put(this.url.base(\"/api/settings/system/:id\")\r\n .param(\":id\", systemPropertyId).service(), JSON.stringify(value))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getCalendarVisibility = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/system/calendarVisibility\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getRedirectLogoURL = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/system/redirectLogoUrl\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getRedirectHelpURL = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/system/redirectHelpUrl\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.getRedirectAboutUsURL = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/system/redirectAboutUsUrl\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.prototype.isCheckPassword = function () {\r\n return this.$http.get(this.url.service(\"/api/settings/system/check/password\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n SettingsService.NAME = \"settings.SettingsService\";\r\n SettingsService.RESET_CURRENT_DATE_TIMEOUT_MS = 5 * 1000;\r\n SettingsService.$inject = [\r\n \"$http\",\r\n \"$q\",\r\n \"$timeout\",\r\n UrlService_1.UrlService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME\r\n ];\r\n return SettingsService;\r\n})();\r\nexports.SettingsService = SettingsService;\r\n},{\"../urls/CoursesRouter\":468,\"../urls/MaterialsRouter\":480,\"../utils/UrlService\":528}],428:[function(require,module,exports){\nvar StorageTypeEnum_1 = require(\"./models/StorageTypeEnum\");\r\nvar SettingsService_1 = require(\"./SettingsService\");\r\nvar SystemSettingsRouter_1 = require(\"./../urls/SystemSettingsRouter\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar StoragePlaceEditController = (function () {\r\n function StoragePlaceEditController($http, $routeParams, $location, $timeout, authService, settingsApi, systemSettingsRouter) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$timeout = $timeout;\r\n this.authService = authService;\r\n this.settingsApi = settingsApi;\r\n this.systemSettingsRouter = systemSettingsRouter;\r\n this.storagePlace = {\r\n id: null,\r\n version: null,\r\n name: \"\",\r\n externalUrl: null,\r\n connectionString: null,\r\n login: null,\r\n password: null,\r\n type: null,\r\n capacity: null,\r\n usedSpace: null,\r\n secured: true,\r\n active: true,\r\n businessUnitId: null\r\n };\r\n this.disableSaveButton = false;\r\n this.availableStorageTypes = [];\r\n this.businessUnitSelected = false;\r\n this.hasAllBusinessUnits = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_STORAGE_PLACES_MENU_KEY);\r\n this.storagePlaceId = this.$routeParams[\"storagePlaceId\"];\r\n if (this.storagePlaceId) {\r\n this.load();\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set().header(\"New storage\").update();\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n });\r\n }\r\n for (var s_1 in StorageTypeEnum_1.StorageTypeEnum) {\r\n if (isNaN(s_1)) {\r\n this.availableStorageTypes.push(s_1);\r\n }\r\n }\r\n }\r\n StoragePlaceEditController.prototype.load = function () {\r\n var _this = this;\r\n this.settingsApi.getStoragePlace(this.storagePlaceId).then(function (result) {\r\n PageHeaderHelper_1.PageHeader.set().header(result.name).update();\r\n _this.businessUnitSelected = true;\r\n _this.storagePlace = result;\r\n _this.confirmPassword = result.password;\r\n });\r\n };\r\n StoragePlaceEditController.prototype.save = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n var promise = (this.storagePlaceId)\r\n ? this.settingsApi.updateStoragePlace(this.storagePlace)\r\n : this.settingsApi.createStoragePlace(this.storagePlace);\r\n promise.then(function (result) {\r\n _this.disableSaveButton = false;\r\n INotifier_1.notifier.success(\"Storage ‘\" +\r\n result.name +\r\n \"’ has been saved\");\r\n if (!_this.storagePlaceId) {\r\n _this.$location.url(_this.systemSettingsRouter.storagePlaceEditUrl(result.id));\r\n }\r\n else {\r\n _this.load();\r\n }\r\n });\r\n };\r\n StoragePlaceEditController.prototype.deactivate = function () {\r\n var _this = this;\r\n this.settingsApi.setStoragePlaceActive(this.storagePlace.id, false)\r\n .then(function (storagePlace) {\r\n _this.$location.url(_this.systemSettingsRouter.storagePlacesIndexUrl());\r\n INotifier_1.notifier.success(\"Storage ‘\" +\r\n storagePlace.name +\r\n \"’ has been deactivated\");\r\n });\r\n };\r\n StoragePlaceEditController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.businessUnitSelected = false;\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n };\r\n StoragePlaceEditController.NAME = \"settings.StoragePlaceEditController\";\r\n StoragePlaceEditController.$inject = [\r\n \"$http\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$timeout\",\r\n AuthService_1.AuthService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n SystemSettingsRouter_1.SystemSettingsRouter.NAME\r\n ];\r\n return StoragePlaceEditController;\r\n})();\r\nexports.StoragePlaceEditController = StoragePlaceEditController;\r\n},{\"./../INotifier\":5,\"./../auth/AuthService\":18,\"./../urls/SystemSettingsRouter\":490,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./SettingsService\":427,\"./models/StorageTypeEnum\":433}],429:[function(require,module,exports){\nvar SettingsService_1 = require(\"./SettingsService\");\r\nvar SystemSettingsRouter_1 = require(\"./../urls/SystemSettingsRouter\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar CheckBusinessUnitId_1 = require(\"../utils/CheckBusinessUnitId\");\r\nvar ReferenceUtils_1 = require(\"../reference/ReferenceUtils\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar StoragePlacesRegistryController = (function () {\r\n function StoragePlacesRegistryController($http, settingsApi, permissionsApi, systemSettingsRouter, url, authApi, businessUnitsService, referenceUtils) {\r\n var _this = this;\r\n this.settingsApi = settingsApi;\r\n this.permissionsApi = permissionsApi;\r\n this.systemSettingsRouter = systemSettingsRouter;\r\n this.url = url;\r\n this.authApi = authApi;\r\n this.businessUnitsService = businessUnitsService;\r\n this.referenceUtils = referenceUtils;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_STORAGE_PLACES_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Storages\").update();\r\n permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader()\r\n .addActionLinkIf(systemPermissions.editStoragePlaces, '+ New', _this.systemSettingsRouter.storagePlaceCreateUrl())\r\n .update();\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.storagePlacesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/settings/storagePlaces\")));\r\n authApi.getCurrentUser().then(function (user) {\r\n _this.currentUser = user;\r\n });\r\n this.businessUnitsService.getBusinessUnitsDeactivateForSelector()\r\n .then(function (result) { return _this.businessUnits = result; });\r\n }\r\n StoragePlacesRegistryController.prototype.isUserAccessedToBusinessUnit = function (businessUnitId) {\r\n if (this.currentUser.businessUnits) {\r\n return this.currentUser.businessUnits.some(function (id) { return id == businessUnitId; });\r\n }\r\n return true;\r\n };\r\n StoragePlacesRegistryController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n StoragePlacesRegistryController.prototype.convertIsActive = function (isActive) {\r\n return isActive != undefined\r\n ? isActive ? 'Yes' : 'No'\r\n : undefined;\r\n };\r\n StoragePlacesRegistryController.prototype.activate = function (index, storagePlaceId) {\r\n var _this = this;\r\n var promise = this.settingsApi.setStoragePlaceActive(storagePlaceId, true);\r\n promise.then(function (storagePlace) {\r\n _this.storagePlacesGridModel.entries[index] = storagePlace;\r\n INotifier_1.notifier.success(\"Storage ‘\" +\r\n storagePlace.name +\r\n \"’ has been activated\");\r\n });\r\n };\r\n StoragePlacesRegistryController.prototype.hasUserSameBusinessUnits = function (businessUnitId) {\r\n if (businessUnitId == null && this.currentUser.businessUnits != null) {\r\n return false;\r\n }\r\n return CheckBusinessUnitId_1.CheckBusinessUnitId.hasUserSameBusinessUnits(this.currentUser.businessUnits, businessUnitId);\r\n };\r\n StoragePlacesRegistryController.prototype.getBusinessUnitById = function (businessUnitId) {\r\n var result = null;\r\n if (businessUnitId != null) {\r\n result = this.businessUnits.filter(function (bu) { return bu.id == businessUnitId; })[0].name;\r\n }\r\n return result;\r\n };\r\n StoragePlacesRegistryController.NAME = \"settings.StoragePlacesRegistryController\";\r\n StoragePlacesRegistryController.$inject = [\r\n \"$http\",\r\n SettingsService_1.SettingsService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SystemSettingsRouter_1.SystemSettingsRouter.NAME,\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n ReferenceUtils_1.ReferenceUtils.NAME\r\n ];\r\n return StoragePlacesRegistryController;\r\n})();\r\nexports.StoragePlacesRegistryController = StoragePlacesRegistryController;\r\n},{\"../auth/AuthService\":18,\"../businessUnits/BusinessUnitsService\":44,\"../reference/ReferenceUtils\":410,\"../utils/CheckBusinessUnitId\":508,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../INotifier\":5,\"./../security/PermissionsService\":418,\"./../urls/SystemSettingsRouter\":490,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./SettingsService\":427}],430:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar BrandingEditMode_1 = require(\"../branding/BrandingEditMode\");\r\nvar SystemBrandingController = (function () {\r\n function SystemBrandingController() {\r\n this.brandingMode = BrandingEditMode_1.BrandingEditMode[BrandingEditMode_1.BrandingEditMode.THEMES];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_SETTING_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Branding\").update();\r\n }\r\n SystemBrandingController.prototype.setBrandingMode = function (brandingMode) {\r\n this.brandingMode = brandingMode;\r\n };\r\n SystemBrandingController.NAME = \"settings.SystemBrandingController\";\r\n SystemBrandingController.$inject = [];\r\n return SystemBrandingController;\r\n})();\r\nexports.SystemBrandingController = SystemBrandingController;\r\n},{\"../branding/BrandingEditMode\":30,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521}],431:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar SettingsService_1 = require(\"./SettingsService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar SystemSettingsRouter_1 = require(\"../urls/SystemSettingsRouter\");\r\nvar HomepageTypeEnum_1 = require(\"./models/HomepageTypeEnum\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar SystemPropertyKey_1 = require(\"./models/SystemPropertyKey\");\r\nvar SystemSettingsController = (function () {\r\n function SystemSettingsController($http, permissionsApi, permissionsService, securityService, settingsApi, coursesRouter, materialsRouter, systemSettingsRouter, learningPathRouter, financeRouter, homeRouter) {\r\n var _this = this;\r\n this.$http = $http;\r\n this.permissionsApi = permissionsApi;\r\n this.permissionsService = permissionsService;\r\n this.securityService = securityService;\r\n this.settingsApi = settingsApi;\r\n this.coursesRouter = coursesRouter;\r\n this.materialsRouter = materialsRouter;\r\n this.systemSettingsRouter = systemSettingsRouter;\r\n this.learningPathRouter = learningPathRouter;\r\n this.financeRouter = financeRouter;\r\n this.homeRouter = homeRouter;\r\n this.settings = {};\r\n this.permissionsWithUsersAndGroups = [];\r\n this.settingsMapKeys = [];\r\n this.activeGroup = 'ALL';\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_SETTING_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Application settings\").update();\r\n permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n });\r\n this.urls = [\r\n {\r\n name: HomepageTypeEnum_1.HomepageTypeEnum[HomepageTypeEnum_1.HomepageTypeEnum.LEARNING_PATHS],\r\n url: this.learningPathRouter.indexUrl()\r\n },\r\n {\r\n name: HomepageTypeEnum_1.HomepageTypeEnum[HomepageTypeEnum_1.HomepageTypeEnum.COURSES],\r\n url: this.coursesRouter.indexUrl()\r\n },\r\n {\r\n name: HomepageTypeEnum_1.HomepageTypeEnum[HomepageTypeEnum_1.HomepageTypeEnum.MATERIALS],\r\n url: this.materialsRouter.indexUrl()\r\n },\r\n {\r\n name: HomepageTypeEnum_1.HomepageTypeEnum[HomepageTypeEnum_1.HomepageTypeEnum.CATALOG],\r\n url: this.financeRouter.productsCatalogUrl()\r\n },\r\n {\r\n name: HomepageTypeEnum_1.HomepageTypeEnum[HomepageTypeEnum_1.HomepageTypeEnum.HOME],\r\n url: this.homeRouter.indexUrl()\r\n }\r\n ];\r\n this.settingsMap = this.loadAllSettings();\r\n }\r\n SystemSettingsController.prototype.loadAllSettings = function () {\r\n var _this = this;\r\n var settingsMap = new Map();\r\n this.settingsApi.getAllSystemProperties().then(function (r) {\r\n _this.allSettings = r;\r\n var groups = JSON.parse(SystemPropertyKey_1.SystemPropertyKey.groupsJson);\r\n r.forEach(function (element) {\r\n if (settingsMap.has(groups[element.id.toString()])) {\r\n settingsMap.get(groups[element.id.toString()]).push(element);\r\n }\r\n else {\r\n settingsMap.set(groups[element.id.toString()], []);\r\n _this.settingsMapKeys.push(groups[element.id.toString()]);\r\n settingsMap.get(groups[element.id.toString()]).push(element);\r\n }\r\n });\r\n });\r\n return settingsMap;\r\n };\r\n SystemSettingsController.prototype.saveSetting = function (id, value) {\r\n var _this = this;\r\n this.settingsApi.setSystemProperty(id, value).then(function (r) {\r\n INotifier_1.notifier.success(\"Settings have been saved\");\r\n _this.currentSettings = r;\r\n }).catch(function (r) {\r\n INotifier_1.notifier.error(r.data.message);\r\n });\r\n };\r\n SystemSettingsController.prototype.loadSettings = function () {\r\n var _this = this;\r\n this.settingsApi.getSystemCommonSettings().then(function (p) {\r\n angular.copy(p, _this.settings);\r\n });\r\n };\r\n SystemSettingsController.prototype.toggleActive = function (group) {\r\n switch (group) {\r\n case 'ALL': {\r\n this.activeGroup = 'ALL';\r\n break;\r\n }\r\n case 'SYSTEM': {\r\n this.activeGroup = 'SYSTEM';\r\n break;\r\n }\r\n case 'COURSE': {\r\n this.activeGroup = 'COURSE';\r\n break;\r\n }\r\n case 'MISC': {\r\n this.activeGroup = 'MISC';\r\n break;\r\n }\r\n case 'EXPIRATION': {\r\n this.activeGroup = 'EXPIRATION';\r\n break;\r\n }\r\n case 'REPORTS': {\r\n this.activeGroup = 'REPORTS';\r\n break;\r\n }\r\n case 'BUSINESS_UNITS': {\r\n this.activeGroup = 'BUSINESS_UNITS';\r\n break;\r\n }\r\n case 'REDIRECT': {\r\n this.activeGroup = 'REDIRECT';\r\n break;\r\n }\r\n }\r\n };\r\n SystemSettingsController.NAME = \"settings.SystemSettingsController\";\r\n SystemSettingsController.$inject = [\r\n \"$http\",\r\n PermissionsService_1.PermissionsService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n SystemSettingsRouter_1.SystemSettingsRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n HomeRouter_1.HomeRouter.NAME\r\n ];\r\n return SystemSettingsController;\r\n})();\r\nexports.SystemSettingsController = SystemSettingsController;\r\n},{\"../INotifier\":5,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/CoursesRouter\":468,\"../urls/FinancesRouter\":471,\"../urls/HomeRouter\":473,\"../urls/LearningPathsRouter\":477,\"../urls/MaterialsRouter\":480,\"../urls/SystemSettingsRouter\":490,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./SettingsService\":427,\"./models/HomepageTypeEnum\":432,\"./models/SystemPropertyKey\":434}],432:[function(require,module,exports){\n(function (HomepageTypeEnum) {\r\n HomepageTypeEnum[HomepageTypeEnum[\"LEARNING_PATHS\"] = 0] = \"LEARNING_PATHS\";\r\n HomepageTypeEnum[HomepageTypeEnum[\"COURSES\"] = 1] = \"COURSES\";\r\n HomepageTypeEnum[HomepageTypeEnum[\"MATERIALS\"] = 2] = \"MATERIALS\";\r\n HomepageTypeEnum[HomepageTypeEnum[\"CATALOG\"] = 3] = \"CATALOG\";\r\n HomepageTypeEnum[HomepageTypeEnum[\"HOME\"] = 4] = \"HOME\";\r\n})(exports.HomepageTypeEnum || (exports.HomepageTypeEnum = {}));\r\nvar HomepageTypeEnum = exports.HomepageTypeEnum;\r\n},{}],433:[function(require,module,exports){\n(function (StorageTypeEnum) {\r\n StorageTypeEnum[StorageTypeEnum[\"LOCAL\"] = 0] = \"LOCAL\";\r\n StorageTypeEnum[StorageTypeEnum[\"SMB\"] = 1] = \"SMB\";\r\n StorageTypeEnum[StorageTypeEnum[\"AZURE\"] = 2] = \"AZURE\";\r\n})(exports.StorageTypeEnum || (exports.StorageTypeEnum = {}));\r\nvar StorageTypeEnum = exports.StorageTypeEnum;\r\n},{}],434:[function(require,module,exports){\nvar SystemPropertyKey = (function () {\r\n function SystemPropertyKey() {\r\n }\r\n SystemPropertyKey.DEFAULT_LOCALE = 1;\r\n SystemPropertyKey.SUPPORT_EMAIL = 2;\r\n SystemPropertyKey.SYSTEM_LOGS_LEVEL = 3;\r\n SystemPropertyKey.SYSTEM_STORAGE_FILE_DUPLICATE = 4;\r\n SystemPropertyKey.COURSE_SERTIFICATE_LAST_NUMBER = 5;\r\n SystemPropertyKey.NOTIFICATIONS_COURSE_SECTION_COMPLETION_ENABLED = 6;\r\n SystemPropertyKey.SYSTEM_PURCHASES_ORDER_DATE_FROM = 7;\r\n SystemPropertyKey.SYSTEM_ENABLE_STORAGE_SNAPSHOTS = 8;\r\n SystemPropertyKey.LOGO_HOME_PAGE = 9;\r\n SystemPropertyKey.LEARNING_PATH_CERTIFICATE_LAST_NUMBER = 10;\r\n SystemPropertyKey.LRS_LAST_PROCESSED_COURSE_ACTION_LOG_ID = 11;\r\n SystemPropertyKey.LRS_LAST_PROCESSED_LEARNING_PATH_ACTION_LOG_ID = 12;\r\n SystemPropertyKey.LRS_LAST_PROCESSED_USER_CREDIT_ID = 13;\r\n SystemPropertyKey.ALLOWED_EMAILS = 20;\r\n SystemPropertyKey.QUESTIONS_TAGS = 30;\r\n SystemPropertyKey.ENABLE_FILE_UPLOADS_SHORT_ANSWER = 31;\r\n SystemPropertyKey.DAYS_CERTIFICATE_EXPIRATION_NOTIFICATION = 40;\r\n SystemPropertyKey.CERTIFICATE_EXPIRATION_NOTIFICATION_LAST_DATE = 41;\r\n SystemPropertyKey.PURCHASE_EXPIRATION_NOTIFICATION_LAST_DATE = 42;\r\n SystemPropertyKey.DAYS_COURSE_STATUS_EVENT_NOTIFICATION = 43;\r\n SystemPropertyKey.COURSE_INCOMPLETION_NOTIFICATION_LAST_DATE = 44;\r\n SystemPropertyKey.COURSE_EXPIRATION_NOTIFICATION_LAST_DATE = 45;\r\n SystemPropertyKey.COURSE_START_NOTIFICATION_LAST_DATE = 46;\r\n SystemPropertyKey.COURSE_APPROVAL_ENROLLMENT_SEAT_LAST_DATE = 47;\r\n SystemPropertyKey.POWER_BI_EMBEDDED_REPORT_DEFAULT = 50;\r\n SystemPropertyKey.POWER_BI_EMBEDDED_REPORT_GROUP_PROGRESS = 51;\r\n SystemPropertyKey.BUSINESS_UNIT_LEVEL_CATALOG = 52;\r\n SystemPropertyKey.EMBEDDED_REPORTS = 53;\r\n SystemPropertyKey.EMAIL_LOGO_IMAGE_ID = 54;\r\n SystemPropertyKey.USERS_ACTIVITY_REPORT_LAST_DATE = 55;\r\n SystemPropertyKey.CALENDAR_VISIBILITY = 56;\r\n SystemPropertyKey.BUSINESS_UNIT_LEVEL_COURSES = 57;\r\n SystemPropertyKey.BUSINESS_UNIT_LEVEL_LEARNING_PATHS = 58;\r\n SystemPropertyKey.BUSINESS_UNIT_LEVEL_DISCUSSION_BOARD = 59;\r\n SystemPropertyKey.BUSINESS_UNIT_LEVEL_MATERIALS = 60;\r\n SystemPropertyKey.BUSINESS_UNIT_LEVEL_QUIZZES = 61;\r\n SystemPropertyKey.REDIRECT_URL_LOGO = 62;\r\n SystemPropertyKey.REDIRECT_URL_HELP_PAGE = 63;\r\n SystemPropertyKey.REDIRECT_ABOUT_US_PAGE = 64;\r\n SystemPropertyKey.ALLOW_GLOBAL_USERS_TO_SELF_REPORT_TRAININGS_CREDITS = 70;\r\n SystemPropertyKey.CERTIFICATE_EXPIRATION_REMINDER_LAST_DATE = 1000;\r\n SystemPropertyKey.ACTIVITY_LAST_PROCESSED_COURSE_ACTION_LOG_ID = 1001;\r\n SystemPropertyKey.ACTIVITY_COURSE_ACTION_LOGS_BATCH_SIZE = 1002;\r\n SystemPropertyKey.groupsJson = \"{\\n \\\"1\\\" : \\\"SYSTEM\\\",\\n \\\"2\\\" : \\\"SYSTEM\\\",\\n \\\"3\\\" : \\\"SYSTEM\\\",\\n \\\"4\\\" : \\\"SYSTEM\\\",\\n \\\"5\\\" : \\\"COURSE\\\",\\n \\\"6\\\" : \\\"COURSE\\\",\\n \\\"7\\\" : \\\"SYSTEM\\\",\\n \\\"8\\\" : \\\"SYSTEM\\\",\\n \\\"9\\\" : \\\"SYSTEM\\\",\\n \\\"10\\\" : \\\"MISC\\\",\\n \\\"11\\\" : \\\"MISC\\\",\\n \\\"12\\\" : \\\"MISC\\\",\\n \\\"13\\\" : \\\"MISC\\\",\\n \\\"20\\\" : \\\"MISC\\\",\\n \\\"30\\\" : \\\"MISC\\\",\\n \\\"31\\\" : \\\"MISC\\\",\\n \\\"40\\\" : \\\"EXPIRATION\\\",\\n \\\"41\\\" : \\\"EXPIRATION\\\",\\n \\\"42\\\" : \\\"EXPIRATION\\\",\\n \\\"43\\\" : \\\"COURSE\\\",\\n \\\"44\\\" : \\\"COURSE\\\",\\n \\\"45\\\" : \\\"EXPIRATION\\\",\\n \\\"46\\\" : \\\"COURSE\\\",\\n \\\"47\\\" : \\\"COURSE\\\",\\n \\\"50\\\" : \\\"REPORTS\\\",\\n \\\"51\\\" : \\\"REPORTS\\\",\\n \\\"52\\\" : \\\"BUSINESS_UNITS\\\",\\n \\\"53\\\" : \\\"REPORTS\\\",\\n \\\"54\\\" : \\\"SYSTEM\\\",\\n \\\"55\\\" : \\\"REPORTS\\\",\\n \\\"56\\\" : \\\"SYSTEM\\\",\\n \\\"57\\\" : \\\"BUSINESS_UNITS\\\",\\n \\\"58\\\" : \\\"BUSINESS_UNITS\\\",\\n \\\"59\\\" : \\\"BUSINESS_UNITS\\\",\\n \\\"60\\\" : \\\"BUSINESS_UNITS\\\",\\n \\\"61\\\" : \\\"BUSINESS_UNITS\\\",\\n \\\"62\\\" : \\\"REDIRECT\\\",\\n \\\"63\\\" : \\\"REDIRECT\\\",\\n \\\"64\\\" : \\\"REDIRECT\\\",\\n \\\"70\\\" : \\\"SYSTEM\\\",\\n \\\"1000\\\" : \\\"EXPIRATION\\\",\\n \\\"1001\\\" : \\\"GAMIFICATION\\\",\\n \\\"1002\\\" : \\\"GAMIFICATION\\\"\\n }\";\r\n SystemPropertyKey.jobsGroupJson = \"{\\n \\\"activityBadgeAssignJob_assignActivityBadges\\\" : \\\"GAMIFICATION\\\",\\n \\\"clearPendingPaymentJob_clearPendingPayment\\\" : \\\"COURSE\\\",\\n \\\"coreBillingProcessingJob_addBusinessUnitsAndUsers\\\" : \\\"BUSINESS_UNITS\\\",\\n \\\"coreBillingProcessingJob_checkApprovingOfNewSubscriptions\\\" : \\\"BUSINESS_UNITS\\\",\\n \\\"coreBillingProcessingJob_updateStatusesOfBillings\\\" : \\\"BUSINESS_UNITS\\\",\\n \\\"courseEnrollmentApprovalReminderJob_createCourseEnrollmentApprovalReminder\\\" : \\\"COURSE\\\",\\n \\\"createCertificateExpirationNotificationsJob_createCertificateExpirationNotifications\\\" : \\\"CERTIFICATE\\\",\\n \\\"createCertificateExpirationNotificationsJob_createCertificateExpirationReminderNotifications\\\" : \\\"CERTIFICATE\\\",\\n \\\"storageOperationsJob_userCertificatesFileContentToStorageFile\\\" : \\\"CERTIFICATE\\\",\\n \\\"createCourseStatusNotificationsJob_createCourseExpirationNotification\\\" : \\\"COURSE\\\",\\n \\\"createCourseStatusNotificationsJob_createCourseExpirationReminder\\\" : \\\"COURSE\\\",\\n \\\"createCourseStatusNotificationsJob_createCourseIncompletionNotification\\\" : \\\"COURSE\\\",\\n \\\"createCourseStatusNotificationsJob_createCourseIncompletionReminder\\\" : \\\"COURSE\\\",\\n \\\"createCourseStatusNotificationsJob_createCourseStartNotification\\\" : \\\"COURSE\\\",\\n \\\"createCourseStatusNotificationsJob_createCourseStartReminder\\\" : \\\"COURSE\\\",\\n \\\"createPurchasedOrderExpirationNotificationsJob_createPurchasedOrderExpirationNotifications\\\" : \\\"SYSTEM\\\",\\n \\\"deleteMaterialsWithoutFilesJob_deleteMaterialsWithoutFiles\\\" : \\\"FILE\\\",\\n \\\"fullTextSearchIndexActionMessageJob_updateIndex\\\" : \\\"SYSTEM\\\",\\n \\\"ILTSessionsFinishingJob_finishSessions\\\" : \\\"COURSE\\\",\\n \\\"LRSStatementsSendingJob_send\\\" : \\\"SYSTEM\\\",\\n \\\"outgoingEmailSendingJob_sendPendingEmails\\\" : \\\"SYSTEM\\\",\\n \\\"outgoingEmailSendingJob_clearOldEmails\\\" : \\\"SYSTEM\\\",\\n \\\"quizCompletionJob_checkQuizzesCompleting\\\" : \\\"QUIZ\\\",\\n \\\"sendOverSubscriptionPlanUsersLimitNotificationJob_sendOverSubscriptionPlanUsersLimitNotification\\\" : \\\"BUSINESS_UNITS\\\",\\n \\\"storageOperationsJob_fileDurationRecalculation\\\" : \\\"FILE\\\",\\n \\\"storageOperationsJob_fileProcessingCompletion\\\" : \\\"FILE\\\",\\n \\\"storageOperationsJob_mergeFilesChunks\\\" : \\\"FILE\\\",\\n \\\"storageOperationsJob_removeAbortedFiles\\\" : \\\"FILE\\\",\\n \\\"storageOperationsJob_removeFiles\\\" : \\\"FILE\\\",\\n \\\"storageOperationsJob_removeFilesChunks\\\" : \\\"FILE\\\",\\n \\\"systemLogsRemovingJob_removeOldLogs\\\" : \\\"SYSTEM\\\",\\n \\\"updateCourseProgressStatusJob_updateCourseProgressStatusAfterExpirationDate\\\" : \\\"COURSE\\\",\\n \\\"updateLearningPathProgressStatusJob_updateLearningPathProgressStatusAfterExpirationDate\\\" : \\\"LEARNING_PATH\\\",\\n \\\"updatePermissionsForPurchasedProductsJob_removeExpiredPermissionsForProducts\\\" : \\\"PRODUCT\\\",\\n \\\"updatePermissionsForPurchasedProductsJob_updatePermissionsForProducts\\\" : \\\"PRODUCT\\\",\\n \\\"usedStorageCapacityCalculationJob_recalculateUsedCapacity\\\" : \\\"SYSTEM\\\",\\n \\\"userNotificationsSendingJob_sendUserNotifications\\\" : \\\"SYSTEM\\\",\\n \\\"usersActivityReportJob_sendUsersActivityReport\\\" : \\\"SYSTEM\\\",\\n \\\"VILTSessionStatusUpdateJob_updateWebinars\\\" : \\\"WEBINAR\\\",\\n \\\"webhookProcessingJob_webhookHandler\\\" : \\\"SYSTEM\\\",\\n \\\"updateActivityIntervalsJob_updateActivityIntervals\\\" : \\\"GAMIFICATION\\\"\\n }\";\r\n return SystemPropertyKey;\r\n})();\r\nexports.SystemPropertyKey = SystemPropertyKey;\r\n},{}],435:[function(require,module,exports){\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar SlideService = (function () {\r\n function SlideService($http, $q, url, $uploader) {\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.url = url;\r\n this.$uploader = $uploader;\r\n }\r\n SlideService.prototype.getSlideTemplate = function (id) {\r\n return this.$http.get(this.url.base(\"/api/slide/:id\")\r\n .param(\":id\", id).service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n SlideService.prototype.updateSlideTemplate = function (id, slideTemplate) {\r\n return this.$http.put(this.url.base(\"/api/slide/:id\")\r\n .param(\":id\", id).service(), slideTemplate)\r\n .then(function (result) { return result.data; });\r\n };\r\n SlideService.prototype.createSlideTemplate = function (slideTemplate) {\r\n return this.$http.post(this.url.base(\"/api/slide\").service(), slideTemplate)\r\n .then(function (result) { return result.data; });\r\n };\r\n SlideService.prototype.uploadSlideTemplate = function (slideTemplateId, file) {\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(this.url.base(\"/api/slide/:id/upload\")\r\n .param(\":id\", slideTemplateId))\r\n .service(),\r\n file: file\r\n });\r\n };\r\n SlideService.prototype.setActiveSlideTemplate = function (id, isActive) {\r\n return this.$http.put(this.url.base(\"/api/slide/:id/:isActive\")\r\n .param(\":id\", id)\r\n .param(\":isActive\", isActive)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n SlideService.prototype.getSlideTemplates = function (courseId, businessUnitId) {\r\n return this.$http.get(this.url.base(\"/api/slide/templates/course/:courseId?businessUnitId=:businessUnitId\")\r\n .param(\":courseId\", courseId)\r\n .param(\":businessUnitId\", businessUnitId ? businessUnitId : \"\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n SlideService.prototype.uploadSlideTemplateThumbnail = function (slideTemplateId, file) {\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(this.url.base(\"/api/slide/:id/uploadThumbnail\")\r\n .param(\":id\", slideTemplateId))\r\n .service(),\r\n file: file\r\n }).then(function (result) { return result.data; });\r\n };\r\n SlideService.prototype.createSlideTemplateRegistryBundle = function () {\r\n return this.$http.post(this.url.base(\"/api/slide/bundles/createBundle\")\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n SlideService.prototype.getSlideTemplateBundleId = function () {\r\n return this.$http.get(this.url.base(\"/api/slide/bundles/bundleId\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n SlideService.prototype.getSlideTemplateBundleFiles = function (bundleId) {\r\n return this.$http.get(this.url.base(\"/api/slide/bundles/:bundleId/bundleFiles\")\r\n .param(\":bundleId\", bundleId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n SlideService.NAME = \"slides.SlideService\";\r\n SlideService.$inject = [\r\n \"$http\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME,\r\n \"Upload\"\r\n ];\r\n return SlideService;\r\n})();\r\nexports.SlideService = SlideService;\r\n},{\"../utils/UrlService\":528}],436:[function(require,module,exports){\nvar INotifier_1 = require(\"../INotifier\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar SlideTemplatesRouter_1 = require(\"../urls/SlideTemplatesRouter\");\r\nvar SlideService_1 = require(\"./SlideService\");\r\nvar SlidesBundleEditController = (function () {\r\n function SlidesBundleEditController($scope, $http, $routeParams, $location, $q, slideTemplatesRouter, slideService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$q = $q;\r\n this.slideTemplatesRouter = slideTemplatesRouter;\r\n this.slideService = slideService;\r\n this.isLoading = false;\r\n this.bundleFilesGridModel = null;\r\n this.bundleFilesSaving = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_SLIDE_TEMPLATE_KEY);\r\n this.currentTopEditPage = this.slideTemplatesRouter.bundleUrl();\r\n this.slideService.getSlideTemplateBundleId().then(function (result) {\r\n _this.bundleId = result;\r\n _this.isInitialized = true;\r\n });\r\n this.createSlideTemplateBundleFn = this.createSlideTemplateBundle.bind(this);\r\n }\r\n SlidesBundleEditController.prototype.createSlideTemplateBundle = function () {\r\n var _this = this;\r\n if (!this.bundleId) {\r\n return this.slideService.createSlideTemplateRegistryBundle()\r\n .then(function (result) {\r\n var bundle = result;\r\n console.dir(bundle);\r\n return bundle;\r\n }).catch(function (response) {\r\n if (response.data.error == \"error.storage.not.available\") {\r\n INotifier_1.notifier.error(\"No available storage\");\r\n }\r\n return _this.$q.reject(null);\r\n });\r\n }\r\n else {\r\n return this.$q.reject(null);\r\n }\r\n };\r\n SlidesBundleEditController.prototype.showUploadInstructions = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#uploadInstructionsDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n SlidesBundleEditController.prototype.showConfirmationDialog = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#dialogMessage\").html(this.confirmationDialogMessage);\r\n $(\"#confirmationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n SlidesBundleEditController.prototype.redirectToUrl = function (url) {\r\n this.$location.url(url);\r\n };\r\n SlidesBundleEditController.prototype.changeTopEditPath = function () {\r\n this.redirectToUrl(this.currentTopEditPage);\r\n };\r\n SlidesBundleEditController.NAME = \"slides.SlidesBundleEditController\";\r\n SlidesBundleEditController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$q\",\r\n SlideTemplatesRouter_1.SlideTemplatesRouter.NAME,\r\n SlideService_1.SlideService.NAME\r\n ];\r\n return SlidesBundleEditController;\r\n})();\r\nexports.SlidesBundleEditController = SlidesBundleEditController;\r\n},{\"../INotifier\":5,\"../urls/SlideTemplatesRouter\":488,\"../utils/MenuHelper\":517,\"./SlideService\":435}],437:[function(require,module,exports){\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar SlideService_1 = require(\"./SlideService\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar CourseDetailsUtils_1 = require(\"../courses/CourseDetailsUtils\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar SlideTemplatesRouter_1 = require(\"../urls/SlideTemplatesRouter\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar Event_1 = require(\"../components/models/Event\");\r\nvar SlidesController = (function () {\r\n function SlidesController($scope, $http, $routeParams, $location, $timeout, $q, url, slideTemplatesRouter, authManager, permissionsApi, bundleService, securityService, slideService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$timeout = $timeout;\r\n this.$q = $q;\r\n this.url = url;\r\n this.slideTemplatesRouter = slideTemplatesRouter;\r\n this.authManager = authManager;\r\n this.permissionsApi = permissionsApi;\r\n this.bundleService = bundleService;\r\n this.securityService = securityService;\r\n this.slideService = slideService;\r\n this.defaultTemplates = [{ path: \"defaultTemplate\", name: \"default template\" },\r\n { path: \"defaultTemplateWithThreeColumns\", name: \"default template with 3 columns\" },\r\n { path: \"defaultTemplateWithImageLeft\", name: \"default template with image left\" },\r\n { path: \"defaultTemplateWithImageRight\", name: \"default template with image right\" },\r\n { path: \"defaultTemplateWithBigImageLeft\", name: \"default template with big image left\" }];\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.viewAnyLearningObject; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_SLIDE_TEMPLATE_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(this.getPageHeaderName()).update();\r\n this.currentTopEditPage = this.slideTemplatesRouter.indexUrl();\r\n this.slidesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"/api/slide\").service()));\r\n this.slidesGridModel.filter.searchString = \"\";\r\n this.slidesGridModel.filter.splitParam = false;\r\n this.permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n PageHeaderHelper_1.PageHeader.set().addActionLinkIf(p.manageAnyLearningObject, '+ New', _this.getSlideEditUrl(0))\r\n .preserveHeader()\r\n .update();\r\n });\r\n this.bundleService.getSystemBundle()\r\n .then(function (b) {\r\n _this.systemBundle = b;\r\n })\r\n .catch(function () {\r\n _this.systemBundle = { id: 1 };\r\n });\r\n this.getBundleIds();\r\n }\r\n SlidesController.prototype.getSlideEditUrl = function (id) {\r\n return this.slideTemplatesRouter.editUrl(id);\r\n };\r\n SlidesController.prototype.isEditAllowed = function (entity) {\r\n return this.systemPermissions.manageAnyLearningObject\r\n && this.getEntityIsActiveProperty(entity)\r\n && (!entity.hasOwnProperty(SlidesController.BUSINESS_UNIT_ID_PROPERTY) ||\r\n this.authManager.getCurrentUser() && (this.authManager.getCurrentUser().allBusinessUnits\r\n || this.authManager.getCurrentUser().businessUnits.indexOf(entity[SlidesController.BUSINESS_UNIT_ID_PROPERTY]) != -1));\r\n };\r\n SlidesController.prototype.getEntityIsActiveProperty = function (entity) {\r\n return entity.isActive;\r\n };\r\n SlidesController.prototype.activateEntity = function (index, slide) {\r\n var _this = this;\r\n this.slideService.setActiveSlideTemplate(slide.id, true).then(function (result) {\r\n _this.slidesGridModel.entries[index] = result;\r\n });\r\n };\r\n SlidesController.prototype.getPageHeaderName = function () {\r\n return \"Slide Templates\";\r\n };\r\n SlidesController.prototype.getActiveLinkState = function (entity) {\r\n return this.getEntityIsActiveProperty(entity) ? \"Yes\" : \"No\";\r\n };\r\n SlidesController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n SlidesController.prototype.getBundleIds = function () {\r\n var _this = this;\r\n this.slideService.getSlideTemplateBundleId().then(function (result) {\r\n if (result) {\r\n _this.loadBundle(result).then(function () {\r\n _this.slidesGridModel.entries.forEach(function (slideTemplate) {\r\n if (slideTemplate.bundleFileNameCSS) {\r\n slideTemplate.cssFileUrl = _this.slideBundle.files.filter(function (file) { return file.key === slideTemplate.bundleFileNameCSS; })[0].url;\r\n }\r\n if (slideTemplate.bundleFileNameJS) {\r\n slideTemplate.jsFileUrl = _this.slideBundle.files.filter(function (file) { return file.key === slideTemplate.bundleFileNameJS; })[0].url;\r\n }\r\n });\r\n });\r\n }\r\n });\r\n };\r\n SlidesController.prototype.loadBundle = function (bundleId) {\r\n var _this = this;\r\n return this.bundleService.getBundle(bundleId, \"HTML_OR_LOADED_AT_START\")\r\n .then(function (bundle) {\r\n _this.slideBundle = bundle;\r\n _this.composeRichTextFromLoadAtStartBundles();\r\n if (_this.slideTemplateLoadAtStartBundlesText) {\r\n return _this.$timeout(function () {\r\n return _this.getRichTextLoadedPromise(\"course_load_at_start_bundles_rich_text\");\r\n }, 0);\r\n }\r\n return null;\r\n });\r\n };\r\n SlidesController.prototype.composeRichTextFromLoadAtStartBundles = function () {\r\n if (this.slideBundle) {\r\n this.slideTemplateLoadAtStartBundlesText = CourseDetailsUtils_1.CourseDetailsUtils.composeRichTextFromLoadAtStartBundles(this.slideBundle);\r\n }\r\n };\r\n SlidesController.prototype.getRichTextLoadedPromise = function (richTextId) {\r\n var _this = this;\r\n var deferred = this.$q.defer();\r\n var eventData = {\r\n richTextElementId: richTextId,\r\n richTextBindController: null\r\n };\r\n var findRichTextController = function () {\r\n _this.$scope.$broadcast(Event_1.Event.TA_FIND_RICH_TEXT_BIND_CONTROLLER, eventData);\r\n return eventData.richTextBindController;\r\n };\r\n var waitForContentLoad = function (richTextBindController) {\r\n return richTextBindController.waitForContentLoaded()\r\n .finally(function () {\r\n deferred.resolve();\r\n });\r\n };\r\n var richTextBindController = findRichTextController();\r\n if (richTextBindController) {\r\n waitForContentLoad(richTextBindController);\r\n }\r\n return deferred.promise;\r\n };\r\n SlidesController.prototype.hideIfMobileVersion = function () {\r\n return window.innerWidth < 660;\r\n };\r\n SlidesController.prototype.redirectToUrl = function (url) {\r\n this.$location.url(url);\r\n };\r\n SlidesController.prototype.downloadFile = function (slideTemplate, defaultTemplate) {\r\n var elem = document.createElement('a');\r\n var blob = null;\r\n if (slideTemplate != null) {\r\n blob = new Blob([slideTemplate.slideTemplateHtml], {\r\n type: 'text/html'\r\n });\r\n elem.setAttribute('download', slideTemplate.fileTitle);\r\n }\r\n else {\r\n blob = new Blob([$(\"#\" + defaultTemplate).html()], {\r\n type: 'text/html'\r\n });\r\n elem.setAttribute('download', defaultTemplate);\r\n }\r\n var fileUrl = URL.createObjectURL(blob);\r\n elem.setAttribute('href', fileUrl);\r\n elem.style.display = 'none';\r\n document.body.appendChild(elem);\r\n elem.click();\r\n document.body.removeChild(elem);\r\n };\r\n SlidesController.prototype.getTemplateForInclude = function (templateName) {\r\n return this.url.template(templateName);\r\n };\r\n SlidesController.prototype.changeTopEditPath = function () {\r\n this.redirectToUrl(this.currentTopEditPage);\r\n };\r\n SlidesController.prototype.lastPageInSlideTemplates = function () {\r\n return !(this.slidesGridModel && this.slidesGridModel.entries.length > 0 && this.slidesGridModel.selectedPage !== this.slidesGridModel.totalPageCount);\r\n };\r\n SlidesController.NAME = \"slides.SlidesController\";\r\n SlidesController.BUSINESS_UNIT_ID_PROPERTY = \"businessUnitId\";\r\n SlidesController.entityVersionProperty = \"version\";\r\n SlidesController.$inject = [\r\n \"$scope\",\r\n \"$http\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$timeout\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME,\r\n SlideTemplatesRouter_1.SlideTemplatesRouter.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n BundleService_1.BundleService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n SlideService_1.SlideService.NAME\r\n ];\r\n return SlidesController;\r\n})();\r\nexports.SlidesController = SlidesController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../authcore/AuthManager\":25,\"../bundles/BundleService\":36,\"../components/models/Event\":170,\"../courses/CourseDetailsUtils\":195,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/SlideTemplatesRouter\":488,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./SlideService\":435}],438:[function(require,module,exports){\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar SlideTemplatesRouter_1 = require(\"../urls/SlideTemplatesRouter\");\r\nvar SlideService_1 = require(\"./SlideService\");\r\nvar Event_1 = require(\"../components/models/Event\");\r\nvar BundleService_1 = require(\"../bundles/BundleService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar VhsSelectEmbeddedBundleDirective_1 = require(\"../components/richtext/VhsSelectEmbeddedBundleDirective\");\r\nvar RandomUtils_1 = require(\"../utils/RandomUtils\");\r\nvar SlidesCreateEditController = (function () {\r\n function SlidesCreateEditController($rootScope, $scope, $routeParams, $location, $timeout, $uploader, $q, url, permissionsApi, authService, securityService, slideTemplatesRouter, slideService, bundleService) {\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$timeout = $timeout;\r\n this.$uploader = $uploader;\r\n this.$q = $q;\r\n this.url = url;\r\n this.permissionsApi = permissionsApi;\r\n this.authService = authService;\r\n this.securityService = securityService;\r\n this.slideTemplatesRouter = slideTemplatesRouter;\r\n this.slideService = slideService;\r\n this.bundleService = bundleService;\r\n this.slideTemplate = { name: null, fileContentId: null };\r\n this.disableSaveButton = false;\r\n this.errorsMap = new Map();\r\n this.slideContent = \"\";\r\n this.isPreviewHidden = false;\r\n this.businessUnitSelected = false;\r\n this.hasAllBusinessUnits = false;\r\n this.isLoaded = false;\r\n this.businessUnitVisible = false;\r\n this.redirected = false;\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.manageAnyLearningObject; });\r\n var slideId = this.$routeParams[SlideTemplatesRouter_1.SlideTemplatesRouter.SLIDE_ID_PARAM];\r\n var hasSlideId = !isNaN(slideId);\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_SLIDE_TEMPLATE_KEY);\r\n if (hasSlideId) {\r\n this.slideService.getSlideTemplate(slideId).then(function (result) {\r\n _this.slideTemplate = result;\r\n _this.slideFileTitle = result.fileTitle;\r\n if (!result.id) {\r\n INotifier_1.notifier.error(\"Slide template not found\");\r\n _this.redirectToBack();\r\n return;\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set().header(result.name).update();\r\n }\r\n if (_this.slideTemplate.bundleId != null) {\r\n _this.slideService.getSlideTemplateBundleFiles(_this.slideTemplate.bundleId).then(function (bundleFileNames) {\r\n _this.bundleFileNameCSSList = bundleFileNames[\"bundleFilesCSS\"];\r\n _this.bundleFileNameJSList = bundleFileNames[\"bundleFilesJS\"];\r\n _this.loadBundle();\r\n });\r\n }\r\n _this.isLoaded = true;\r\n _this.businessUnitSelected = true;\r\n });\r\n }\r\n else {\r\n this.authService.getCurrentUser().then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n });\r\n PageHeaderHelper_1.PageHeader.set().header(\"New Slide Template\").update();\r\n this.isLoaded = true;\r\n }\r\n }\r\n SlidesCreateEditController.prototype.redirectToBack = function () {\r\n this.redirected = true;\r\n this.$location.url(this.slideTemplatesRouter.indexUrl());\r\n };\r\n SlidesCreateEditController.prototype.saveSlideTemplate = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n if (this.newSlideTemplateFile) {\r\n this.slideTemplate.fileContentId = null;\r\n this.slideTemplate.fileTitle = this.newSlideTemplateFile.name;\r\n }\r\n var call = this.slideTemplate.id\r\n ? this.slideService.updateSlideTemplate(this.slideTemplate.id, this.slideTemplate)\r\n : this.slideService.createSlideTemplate(this.slideTemplate);\r\n call.then(function (slideTemplateId) {\r\n if (_this.newSlideTemplateFile) {\r\n _this.slideService.uploadSlideTemplate(slideTemplateId, _this.newSlideTemplateFile)\r\n .then(function () {\r\n if (_this.slideTemplateThumbnail == null)\r\n return;\r\n _this.slideService.uploadSlideTemplateThumbnail(slideTemplateId, _this.slideTemplateThumbnail);\r\n });\r\n }\r\n _this.redirectToBack();\r\n })\r\n .catch(function (response) {\r\n if (response.data.error == \"error.name.duplicate\") {\r\n INotifier_1.notifier.error(\"Slide template name must be unique\");\r\n }\r\n _this.disableSaveButton = false;\r\n });\r\n };\r\n SlidesCreateEditController.prototype.deactivateEntity = function () {\r\n var _this = this;\r\n this.slideService.setActiveSlideTemplate(this.slideTemplate.id, false).then(function (result) {\r\n _this.redirectToBack();\r\n });\r\n };\r\n SlidesCreateEditController.prototype.entityValid = function () {\r\n return this.hasFile() && this.hasName();\r\n };\r\n SlidesCreateEditController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.businessUnitSelected = false;\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n };\r\n SlidesCreateEditController.prototype.buildErrorMessage = function (title) {\r\n return \"Please specify a value for the field \\\"%1\\\"\".replace(\"%1\", title);\r\n };\r\n SlidesCreateEditController.prototype.hasName = function () {\r\n if (!this.slideTemplate.name) {\r\n this.errorsMap.set(\"name\", this.buildErrorMessage(\"name\"));\r\n return false;\r\n }\r\n return true;\r\n };\r\n SlidesCreateEditController.prototype.hasFile = function () {\r\n if (!this.slideFileTitle) {\r\n this.errorsMap.set(\"file\", this.buildErrorMessage(\"file\"));\r\n return false;\r\n }\r\n return true;\r\n };\r\n SlidesCreateEditController.prototype.removeSlideTemplate = function () {\r\n this.newSlideTemplateFile = null;\r\n this.slideFileTitle = null;\r\n this.slideTemplate.fileContentId = null;\r\n this.slideContent = null;\r\n };\r\n SlidesCreateEditController.prototype.attachFile = function ($file) {\r\n var _this = this;\r\n if (this.newSlideTemplateFile && !$file.$error) {\r\n var link = URL.createObjectURL(this.newSlideTemplateFile);\r\n fetch(link).then(function (response) { return response.text()\r\n .then(function (text) { return _this.slideTemplateHtml = text; }); });\r\n this.slideFileTitle = this.newSlideTemplateFile.name;\r\n }\r\n };\r\n SlidesCreateEditController.prototype.downloadFile = function () {\r\n var elem = document.createElement('a');\r\n var blob = new Blob([this.slideTemplate.slideTemplateHtml], {\r\n type: 'text/html'\r\n });\r\n var fileUrl = URL.createObjectURL(blob);\r\n elem.setAttribute('href', fileUrl);\r\n elem.setAttribute('download', this.slideTemplate.fileTitle);\r\n elem.style.display = 'none';\r\n document.body.appendChild(elem);\r\n elem.click();\r\n document.body.removeChild(elem);\r\n };\r\n SlidesCreateEditController.prototype.loadBundle = function () {\r\n var _this = this;\r\n return this.bundleService.getBundle(this.slideTemplate.bundleId, \"HTML_OR_LOADED_AT_START\")\r\n .then(function (bundle) {\r\n _this.slideBundle = bundle;\r\n _this.composeRichTextFromLoadAtStartBundles();\r\n if (_this.slideTemplateLoadAtStartBundlesText) {\r\n return _this.$timeout(function () {\r\n return _this.getRichTextLoadedPromise(\"course_load_at_start_bundles_rich_text\");\r\n }, 0);\r\n }\r\n return null;\r\n });\r\n };\r\n SlidesCreateEditController.prototype.composeRichTextFromLoadAtStartBundles = function () {\r\n if (this.slideBundle) {\r\n var result = \"\";\r\n for (var i = 0; i < this.slideBundle.files.length; i++) {\r\n var bundleFile = this.slideBundle.files[i];\r\n if (bundleFile.loadAtStart && (bundleFile.key === this.slideTemplate.bundleFileNameCSS ||\r\n bundleFile.key === this.slideTemplate.bundleFileNameJS)) {\r\n result += StringBuilder_1.StringBuilder.interpolate(VhsSelectEmbeddedBundleDirective_1.VhsSelectEmbeddedBundleMaterialController.EMBEDDED_BUNDLE_TA_HTML)\r\n .with(\":bundleId\", RandomUtils_1.RandomUtils.generateRandomId(bundleFile.key + \"___\"))\r\n .with(\":bundleKey\", bundleFile.key)\r\n .build();\r\n }\r\n }\r\n this.slideTemplateLoadAtStartBundlesText = result;\r\n }\r\n };\r\n SlidesCreateEditController.prototype.getRichTextLoadedPromise = function (richTextId) {\r\n var _this = this;\r\n var deferred = this.$q.defer();\r\n var eventData = {\r\n richTextElementId: richTextId,\r\n richTextBindController: null\r\n };\r\n var findRichTextController = function () {\r\n _this.$scope.$broadcast(Event_1.Event.TA_FIND_RICH_TEXT_BIND_CONTROLLER, eventData);\r\n return eventData.richTextBindController;\r\n };\r\n var waitForContentLoad = function (richTextBindController) {\r\n return richTextBindController.waitForContentLoaded()\r\n .finally(function () {\r\n deferred.resolve();\r\n });\r\n };\r\n var richTextBindController = findRichTextController();\r\n if (richTextBindController) {\r\n waitForContentLoad(richTextBindController);\r\n }\r\n return deferred.promise;\r\n };\r\n SlidesCreateEditController.prototype.setSlideTemplateBundleFileName = function (bundleFileName, bundleFileType) {\r\n switch (bundleFileType) {\r\n case \"CSS\":\r\n this.slideTemplate.bundleFileNameCSS = bundleFileName;\r\n break;\r\n case \"JS\":\r\n this.slideTemplate.bundleFileNameJS = bundleFileName;\r\n break;\r\n }\r\n };\r\n SlidesCreateEditController.prototype.containsBundleFileName = function (bundleFileType) {\r\n switch (bundleFileType) {\r\n case \"CSS\":\r\n if (!this.slideTemplate.bundleFileNameCSS) {\r\n return false;\r\n }\r\n else {\r\n return !(this.bundleFileNameCSSList &&\r\n this.bundleFileNameCSSList.indexOf(this.slideTemplate.bundleFileNameCSS) >= 0);\r\n }\r\n case \"JS\":\r\n if (!this.slideTemplate.bundleFileNameJS) {\r\n return false;\r\n }\r\n else {\r\n return !(this.bundleFileNameJSList &&\r\n this.bundleFileNameJSList.indexOf(this.slideTemplate.bundleFileNameJS) >= 0);\r\n }\r\n }\r\n };\r\n SlidesCreateEditController.prototype.setBusinessUnitSelectorVisible = function () {\r\n this.businessUnitVisible = true;\r\n };\r\n SlidesCreateEditController.NAME = \"slides.SlidesCreateEditController\";\r\n SlidesCreateEditController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$timeout\",\r\n \"Upload\",\r\n \"$q\",\r\n UrlService_1.UrlService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n SlideTemplatesRouter_1.SlideTemplatesRouter.NAME,\r\n SlideService_1.SlideService.NAME,\r\n BundleService_1.BundleService.NAME\r\n ];\r\n return SlidesCreateEditController;\r\n})();\r\nexports.SlidesCreateEditController = SlidesCreateEditController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../bundles/BundleService\":36,\"../components/models/Event\":170,\"../components/richtext/VhsSelectEmbeddedBundleDirective\":185,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../urls/SlideTemplatesRouter\":488,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/RandomUtils\":523,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./SlideService\":435}],439:[function(require,module,exports){\nvar SocialService_1 = require(\"./SocialService\");\r\nexports.SocialModule = angular\r\n .module(\"social\", [])\r\n .service(SocialService_1.SocialService.NAME, SocialService_1.SocialService);\r\n},{\"./SocialService\":440}],440:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar SocialService = (function () {\r\n function SocialService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n SocialService.prototype.changeObjectRating = function (objectId, objectVersion, objectType, isLike) {\r\n return this.$http.post(this.url.base(\"/api/social/rating?objectId=:objectId&objectVersion=:objectVersion&objectType=:objectType&isLike=:isLike\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectVersion\", objectVersion)\r\n .param(\":objectType\", ReferencedObjectType_1.ReferencedObjectType[objectType])\r\n .param(\":isLike\", isLike)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n SocialService.prototype.addComment = function (objectId, objectVersion, objectType, comment) {\r\n return this.$http.post(this.url.base(\"/api/social/comments?objectId=:objectId&objectVersion=:objectVersion&objectType=:objectType\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectVersion\", objectVersion)\r\n .param(\":objectType\", ReferencedObjectType_1.ReferencedObjectType[objectType])\r\n .service(), comment)\r\n .then(function (result) { return result.data; });\r\n };\r\n SocialService.prototype.getCommentsCount = function (objectId, objectType) {\r\n return this.$http.get(this.url.base(\"/api/social/comments/count?objectId=:objectId&objectType=:objectType\")\r\n .param(\":objectId\", objectId)\r\n .param(\":objectType\", ReferencedObjectType_1.ReferencedObjectType[objectType])\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n SocialService.prototype.getCommentsAndDiscussionForInstructor = function (periodType) {\r\n return this.$http.get(this.url.base(\"/api/social/comments/instructor?periodType=:periodType\")\r\n .param(\":periodType\", periodType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n SocialService.prototype.getCommentsAndDiscussionForAttendeeManager = function (periodType) {\r\n return this.$http.get(this.url.base(\"/api/social/comments/attendeeManager?periodType=:periodType\")\r\n .param(\":periodType\", periodType)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n SocialService.NAME = \"social.SocialService\";\r\n SocialService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return SocialService;\r\n})();\r\nexports.SocialService = SocialService;\r\n},{\"./../ReferencedObjectType\":7,\"./../utils/UrlService\":528}],441:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ActionLogService = (function () {\r\n function ActionLogService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n ActionLogService.prototype.create = function (objectId, objectType, actionType) {\r\n return this.$http.post(this.url.service(\"/api/actionLogs\"), {\r\n objectId: objectId,\r\n objectType: objectType,\r\n actionType: actionType\r\n }).then(function (result) { return result.data; });\r\n };\r\n ActionLogService.NAME = \"statistics.ActionLogService\";\r\n ActionLogService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return ActionLogService;\r\n})();\r\nexports.ActionLogService = ActionLogService;\r\n},{\"./../utils/UrlService\":528}],442:[function(require,module,exports){\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar BaseReportController = (function () {\r\n function BaseReportController() {\r\n $(document).ready(function () {\r\n $['jsDate'].regional[AppProperties_1.AppProperties.defaultLocale.substring(0, 2)] = {\r\n monthNames: ['January', 'February', 'March',\r\n 'April', 'May', 'June',\r\n 'July', 'August', 'September',\r\n 'October', 'November', 'December'],\r\n monthNamesShort: ['Jan', 'Feb', 'Mar',\r\n 'Apr', 'May', 'Jun',\r\n 'Jul', 'Aug', 'Sep',\r\n 'Oct', 'Nov', 'Dec'],\r\n dayNames: ['Sunday', 'Monday', 'Tuesday',\r\n 'Wednesday', 'Thursday', 'Friday',\r\n 'Saturday'],\r\n dayNamesShort: ['Su', 'Mo', 'Tu',\r\n 'We', 'Th', 'Fr',\r\n 'Sa'],\r\n formatString: '%d-%m-%Y %H:%M:%S'\r\n };\r\n document.documentElement.setAttribute('lang', 'en');\r\n });\r\n }\r\n return BaseReportController;\r\n})();\r\nexports.BaseReportController = BaseReportController;\r\n},{\"../utils/AppProperties\":\"AppProperties\"}],443:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar CourseActionLogService = (function () {\r\n function CourseActionLogService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n CourseActionLogService.prototype.create = function (courseActionLog) {\r\n return this.$http.post(this.url.service(\"/api/courseActionLogs\"), courseActionLog, { ignore500: true })\r\n .then(function (result) { return result.data; });\r\n };\r\n CourseActionLogService.NAME = \"statistics.CourseActionLogService\";\r\n CourseActionLogService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return CourseActionLogService;\r\n})();\r\nexports.CourseActionLogService = CourseActionLogService;\r\n},{\"./../utils/UrlService\":528}],444:[function(require,module,exports){\nvar __extends = (this && this.__extends) || function (d, b) {\r\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n function __() { this.constructor = d; }\r\n __.prototype = b.prototype;\r\n d.prototype = new __();\r\n};\r\nvar BaseReportController_1 = require(\"./BaseReportController\");\r\nvar MaterialReportTarget_1 = require(\"./models/MaterialReportTarget\");\r\nvar ReportGroupType_1 = require(\"./models/ReportGroupType\");\r\nvar StatisticReportsService_1 = require(\"./StatisticReportsService\");\r\nvar ReportWriters_1 = require(\"./utils/ReportWriters\");\r\nvar ReportOptions_1 = require(\"./utils/ReportOptions\");\r\nvar ReportTargetNamesMaker_1 = require(\"./utils/ReportTargetNamesMaker\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar Moment_1 = require(\"./../utils/Moment\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar MaterialDownloadReportController = (function (_super) {\r\n __extends(MaterialDownloadReportController, _super);\r\n function MaterialDownloadReportController(statisticReportsService, userService, permissionsApi, securityService) {\r\n var _this = this;\r\n _super.call(this);\r\n this.statisticReportsService = statisticReportsService;\r\n this.userService = userService;\r\n this.permissionsApi = permissionsApi;\r\n this.securityService = securityService;\r\n this.lineDiagramsReportWriter = new ReportWriters_1.LineDiagramsReportWriter();\r\n this.groupType = ReportGroupType_1.ReportGroupType.DAYS;\r\n this.ownerIds = [];\r\n this.materialTypeIds = [];\r\n this.subjectIds = [];\r\n this.lineDiagramsReportData = null;\r\n this.lineDiagramsReportOptions = ReportOptions_1.getLineDiagramsReportOptions(\"The report on material downloads\");\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ANALYTICS_MATERIAL_DOWNLOAD_REPORT_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"The report on material downloads\").update();\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n if (_this.systemPermissions.viewAnalytics) {\r\n _this.reportTarget = MaterialReportTarget_1.MaterialReportTarget.OWNERS;\r\n _this.reportTargetNamesMaker = new ReportTargetNamesMaker_1.OwnerNamesMaker();\r\n }\r\n else {\r\n _this.reportTarget = MaterialReportTarget_1.MaterialReportTarget.MATERIAL_TYPES;\r\n _this.reportTargetNamesMaker = new ReportTargetNamesMaker_1.MaterialTypeNamesMaker();\r\n }\r\n _this.viewReportGroupByDays();\r\n });\r\n }\r\n MaterialDownloadReportController.prototype.refreshReport = function () {\r\n this.viewReportGroupBy(this.groupType);\r\n };\r\n MaterialDownloadReportController.prototype.viewReportGroupByDays = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.DAYS);\r\n };\r\n MaterialDownloadReportController.prototype.viewReportGroupByWeeks = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.WEEKS);\r\n };\r\n MaterialDownloadReportController.prototype.viewReportGroupByMonths = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.MONTHS);\r\n };\r\n MaterialDownloadReportController.prototype.viewReportGroupByYears = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.YEARS);\r\n };\r\n MaterialDownloadReportController.prototype.viewReportGroupBy = function (groupType) {\r\n var _this = this;\r\n this.groupType = groupType;\r\n this.lineDiagramsReportData = null;\r\n this.statisticReportsService.viewMaterialDownloadReport(this.reportTarget, this.groupType, this.ownerIds, this.materialTypeIds, this.subjectIds, Moment_1.Moment.textToJavaDate(this.dateFromText), Moment_1.Moment.textToJavaDate(this.dateToText)).then(function (result) {\r\n _this.report = result;\r\n _this.lineDiagramsReportOptions.series = _this.reportTargetNamesMaker.make(_this.report, function (name) {\r\n return { label: name, markerOptions: { style: \"circle\", size: 1 } };\r\n });\r\n _this.lineDiagramsReportData = _this.lineDiagramsReportWriter.reporting(_this.report, function (value) {\r\n return [moment(value[0]).format(\"YYYY-MM-DD\"), value[1]];\r\n });\r\n });\r\n };\r\n MaterialDownloadReportController.prototype.isCurrentOwnersReportTarget = function () {\r\n return this.reportTarget == MaterialReportTarget_1.MaterialReportTarget.OWNERS;\r\n };\r\n MaterialDownloadReportController.prototype.isCurrentMaterialTypesReportTarget = function () {\r\n return this.reportTarget == MaterialReportTarget_1.MaterialReportTarget.MATERIAL_TYPES;\r\n };\r\n MaterialDownloadReportController.prototype.isCurrentSubjectsReportTarget = function () {\r\n return this.reportTarget == MaterialReportTarget_1.MaterialReportTarget.SUBJECTS;\r\n };\r\n MaterialDownloadReportController.prototype.setCurrentOwnersReportTarget = function () {\r\n this.setCurrentReportTarget(MaterialReportTarget_1.MaterialReportTarget.OWNERS, new ReportTargetNamesMaker_1.OwnerNamesMaker());\r\n };\r\n MaterialDownloadReportController.prototype.setCurrentMaterialTypesReportTarget = function () {\r\n this.setCurrentReportTarget(MaterialReportTarget_1.MaterialReportTarget.MATERIAL_TYPES, new ReportTargetNamesMaker_1.MaterialTypeNamesMaker());\r\n };\r\n MaterialDownloadReportController.prototype.setCurrentSubjectsReportTarget = function () {\r\n this.setCurrentReportTarget(MaterialReportTarget_1.MaterialReportTarget.SUBJECTS, new ReportTargetNamesMaker_1.SubjectNamesMaker());\r\n };\r\n MaterialDownloadReportController.prototype.getOwnersUrl = function () {\r\n return \"/api/userSelector/usersForCurrentUser\";\r\n };\r\n MaterialDownloadReportController.prototype.setCurrentReportTarget = function (reportTarget, reportTargetNamesMaker) {\r\n this.ownerIds = [];\r\n this.materialTypeIds = [];\r\n this.subjectIds = [];\r\n this.reportTarget = reportTarget;\r\n this.reportTargetNamesMaker = reportTargetNamesMaker;\r\n };\r\n MaterialDownloadReportController.NAME = \"statistics.MaterialDownloadReportController\";\r\n MaterialDownloadReportController.$inject = [\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n UserService_1.UserService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SecurityService_1.SecurityService.NAME\r\n ];\r\n return MaterialDownloadReportController;\r\n})(BaseReportController_1.BaseReportController);\r\nexports.MaterialDownloadReportController = MaterialDownloadReportController;\r\n},{\"./../security/PermissionsService\":418,\"./../security/SecurityService\":420,\"./../users/UserService\":499,\"./../utils/MenuHelper\":517,\"./../utils/Moment\":518,\"./../utils/PageHeaderHelper\":521,\"./BaseReportController\":442,\"./StatisticReportsService\":448,\"./models/MaterialReportTarget\":452,\"./models/ReportGroupType\":453,\"./utils/ReportOptions\":454,\"./utils/ReportTargetNamesMaker\":455,\"./utils/ReportWriters\":456}],445:[function(require,module,exports){\nvar __extends = (this && this.__extends) || function (d, b) {\r\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n function __() { this.constructor = d; }\r\n __.prototype = b.prototype;\r\n d.prototype = new __();\r\n};\r\nvar BaseReportController_1 = require(\"./BaseReportController\");\r\nvar MaterialReportTarget_1 = require(\"./models/MaterialReportTarget\");\r\nvar ReportGroupType_1 = require(\"./models/ReportGroupType\");\r\nvar StatisticReportsService_1 = require(\"./StatisticReportsService\");\r\nvar ReportWriters_1 = require(\"./utils/ReportWriters\");\r\nvar ReportOptions_1 = require(\"./utils/ReportOptions\");\r\nvar ReportTargetNamesMaker_1 = require(\"./utils/ReportTargetNamesMaker\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar Moment_1 = require(\"./../utils/Moment\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar MaterialUploadReportController = (function (_super) {\r\n __extends(MaterialUploadReportController, _super);\r\n function MaterialUploadReportController(statisticReportsService, userService, permissionsApi, securityService) {\r\n var _this = this;\r\n _super.call(this);\r\n this.statisticReportsService = statisticReportsService;\r\n this.userService = userService;\r\n this.permissionsApi = permissionsApi;\r\n this.securityService = securityService;\r\n this.lineDiagramsReportWriter = new ReportWriters_1.LineDiagramsReportWriter();\r\n this.groupType = ReportGroupType_1.ReportGroupType.DAYS;\r\n this.ownerIds = [];\r\n this.materialTypeIds = [];\r\n this.subjectIds = [];\r\n this.lineDiagramsReportData = null;\r\n this.lineDiagramsReportOptions = ReportOptions_1.getLineDiagramsReportOptions(\"The report on material uploads\");\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ANALYTICS_MATERIAL_UPLOAD_REPORT_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"The report on material uploads\").update();\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n if (_this.systemPermissions.viewAnalytics) {\r\n _this.reportTarget = MaterialReportTarget_1.MaterialReportTarget.OWNERS;\r\n _this.reportTargetNamesMaker = new ReportTargetNamesMaker_1.OwnerNamesMaker();\r\n }\r\n else {\r\n _this.reportTarget = MaterialReportTarget_1.MaterialReportTarget.MATERIAL_TYPES;\r\n _this.reportTargetNamesMaker = new ReportTargetNamesMaker_1.MaterialTypeNamesMaker();\r\n }\r\n _this.viewReportGroupByDays();\r\n });\r\n }\r\n MaterialUploadReportController.prototype.refreshReport = function () {\r\n this.viewReportGroupBy(this.groupType);\r\n };\r\n MaterialUploadReportController.prototype.viewReportGroupByDays = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.DAYS);\r\n };\r\n MaterialUploadReportController.prototype.viewReportGroupByWeeks = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.WEEKS);\r\n };\r\n MaterialUploadReportController.prototype.viewReportGroupByMonths = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.MONTHS);\r\n };\r\n MaterialUploadReportController.prototype.viewReportGroupByYears = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.YEARS);\r\n };\r\n MaterialUploadReportController.prototype.viewReportGroupBy = function (groupType) {\r\n var _this = this;\r\n this.groupType = groupType;\r\n this.lineDiagramsReportData = null;\r\n this.statisticReportsService.viewMaterialUploadReport(this.reportTarget, this.groupType, this.ownerIds, this.materialTypeIds, this.subjectIds, Moment_1.Moment.textToJavaDate(this.dateFromText), Moment_1.Moment.textToJavaDate(this.dateToText)).then(function (result) {\r\n _this.report = result;\r\n _this.lineDiagramsReportOptions.series = _this.reportTargetNamesMaker.make(_this.report, function (name) {\r\n return { label: name, markerOptions: { style: \"circle\", size: 1 } };\r\n });\r\n _this.lineDiagramsReportData = _this.lineDiagramsReportWriter.reporting(_this.report, function (value) {\r\n return [moment(value[0]).format(\"YYYY-MM-DD\"), value[1]];\r\n });\r\n });\r\n };\r\n MaterialUploadReportController.prototype.isCurrentOwnersReportTarget = function () {\r\n return this.reportTarget == MaterialReportTarget_1.MaterialReportTarget.OWNERS;\r\n };\r\n MaterialUploadReportController.prototype.isCurrentMaterialTypesReportTarget = function () {\r\n return this.reportTarget == MaterialReportTarget_1.MaterialReportTarget.MATERIAL_TYPES;\r\n };\r\n MaterialUploadReportController.prototype.isCurrentSubjectsReportTarget = function () {\r\n return this.reportTarget == MaterialReportTarget_1.MaterialReportTarget.SUBJECTS;\r\n };\r\n MaterialUploadReportController.prototype.setCurrentOwnersReportTarget = function () {\r\n this.setCurrentReportTarget(MaterialReportTarget_1.MaterialReportTarget.OWNERS, new ReportTargetNamesMaker_1.OwnerNamesMaker());\r\n };\r\n MaterialUploadReportController.prototype.setCurrentMaterialTypesReportTarget = function () {\r\n this.setCurrentReportTarget(MaterialReportTarget_1.MaterialReportTarget.MATERIAL_TYPES, new ReportTargetNamesMaker_1.MaterialTypeNamesMaker());\r\n };\r\n MaterialUploadReportController.prototype.setCurrentSubjectsReportTarget = function () {\r\n this.setCurrentReportTarget(MaterialReportTarget_1.MaterialReportTarget.SUBJECTS, new ReportTargetNamesMaker_1.SubjectNamesMaker());\r\n };\r\n MaterialUploadReportController.prototype.getOwnersUrl = function () {\r\n return \"/api/userSelector/usersForCurrentUser\";\r\n };\r\n MaterialUploadReportController.prototype.setCurrentReportTarget = function (reportTarget, reportTargetNamesMaker) {\r\n this.ownerIds = [];\r\n this.materialTypeIds = [];\r\n this.subjectIds = [];\r\n this.reportTarget = reportTarget;\r\n this.reportTargetNamesMaker = reportTargetNamesMaker;\r\n };\r\n MaterialUploadReportController.NAME = \"statistics.MaterialUploadReportController\";\r\n MaterialUploadReportController.$inject = [\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n UserService_1.UserService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SecurityService_1.SecurityService.NAME\r\n ];\r\n return MaterialUploadReportController;\r\n})(BaseReportController_1.BaseReportController);\r\nexports.MaterialUploadReportController = MaterialUploadReportController;\r\n},{\"./../security/PermissionsService\":418,\"./../security/SecurityService\":420,\"./../users/UserService\":499,\"./../utils/MenuHelper\":517,\"./../utils/Moment\":518,\"./../utils/PageHeaderHelper\":521,\"./BaseReportController\":442,\"./StatisticReportsService\":448,\"./models/MaterialReportTarget\":452,\"./models/ReportGroupType\":453,\"./utils/ReportOptions\":454,\"./utils/ReportTargetNamesMaker\":455,\"./utils/ReportWriters\":456}],446:[function(require,module,exports){\nvar __extends = (this && this.__extends) || function (d, b) {\r\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n function __() { this.constructor = d; }\r\n __.prototype = b.prototype;\r\n d.prototype = new __();\r\n};\r\nvar BaseReportController_1 = require(\"./BaseReportController\");\r\nvar MaterialReportTarget_1 = require(\"./models/MaterialReportTarget\");\r\nvar ReportGroupType_1 = require(\"./models/ReportGroupType\");\r\nvar StatisticReportsService_1 = require(\"./StatisticReportsService\");\r\nvar ReportWriters_1 = require(\"./utils/ReportWriters\");\r\nvar ReportOptions_1 = require(\"./utils/ReportOptions\");\r\nvar ReportTargetNamesMaker_1 = require(\"./utils/ReportTargetNamesMaker\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar UserService_1 = require(\"./../users/UserService\");\r\nvar Moment_1 = require(\"./../utils/Moment\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar MaterialViewReportController = (function (_super) {\r\n __extends(MaterialViewReportController, _super);\r\n function MaterialViewReportController(statisticReportsService, userService, permissionsApi, securityService) {\r\n var _this = this;\r\n _super.call(this);\r\n this.statisticReportsService = statisticReportsService;\r\n this.userService = userService;\r\n this.permissionsApi = permissionsApi;\r\n this.securityService = securityService;\r\n this.lineDiagramsReportWriter = new ReportWriters_1.LineDiagramsReportWriter();\r\n this.groupType = ReportGroupType_1.ReportGroupType.DAYS;\r\n this.ownerIds = [];\r\n this.materialTypeIds = [];\r\n this.subjectIds = [];\r\n this.lineDiagramsReportData = null;\r\n this.lineDiagramsReportOptions = ReportOptions_1.getLineDiagramsReportOptions(\"The report on material views\");\r\n this.securityService.demandAuthentication();\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ANALYTICS_MATERIAL_VIEW_REPORT_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"The report on material views\").update();\r\n this.permissionsApi.getSystemPermissions().then(function (systemPermissions) {\r\n _this.systemPermissions = systemPermissions;\r\n if (_this.systemPermissions.viewAnalytics) {\r\n _this.reportTarget = MaterialReportTarget_1.MaterialReportTarget.OWNERS;\r\n _this.reportTargetNamesMaker = new ReportTargetNamesMaker_1.OwnerNamesMaker();\r\n }\r\n else {\r\n _this.reportTarget = MaterialReportTarget_1.MaterialReportTarget.MATERIAL_TYPES;\r\n _this.reportTargetNamesMaker = new ReportTargetNamesMaker_1.MaterialTypeNamesMaker();\r\n }\r\n _this.viewReportGroupByDays();\r\n });\r\n }\r\n MaterialViewReportController.prototype.refreshReport = function () {\r\n this.viewReportGroupBy(this.groupType);\r\n };\r\n MaterialViewReportController.prototype.viewReportGroupByDays = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.DAYS);\r\n };\r\n MaterialViewReportController.prototype.viewReportGroupByWeeks = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.WEEKS);\r\n };\r\n MaterialViewReportController.prototype.viewReportGroupByMonths = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.MONTHS);\r\n };\r\n MaterialViewReportController.prototype.viewReportGroupByYears = function () {\r\n this.viewReportGroupBy(ReportGroupType_1.ReportGroupType.YEARS);\r\n };\r\n MaterialViewReportController.prototype.viewReportGroupBy = function (groupType) {\r\n var _this = this;\r\n this.groupType = groupType;\r\n this.lineDiagramsReportData = null;\r\n this.statisticReportsService.viewMaterialViewReport(this.reportTarget, this.groupType, this.ownerIds, this.materialTypeIds, this.subjectIds, Moment_1.Moment.textToJavaDate(this.dateFromText), Moment_1.Moment.textToJavaDate(this.dateToText)).then(function (result) {\r\n _this.report = result;\r\n _this.lineDiagramsReportOptions.series = _this.reportTargetNamesMaker.make(_this.report, function (name) {\r\n return { label: name, markerOptions: { style: \"circle\", size: 1 } };\r\n });\r\n _this.lineDiagramsReportData = _this.lineDiagramsReportWriter.reporting(_this.report, function (value) {\r\n return [moment(value[0]).format(\"YYYY-MM-DD\"), value[1]];\r\n });\r\n });\r\n };\r\n MaterialViewReportController.prototype.isCurrentOwnersReportTarget = function () {\r\n return this.reportTarget == MaterialReportTarget_1.MaterialReportTarget.OWNERS;\r\n };\r\n MaterialViewReportController.prototype.isCurrentMaterialTypesReportTarget = function () {\r\n return this.reportTarget == MaterialReportTarget_1.MaterialReportTarget.MATERIAL_TYPES;\r\n };\r\n MaterialViewReportController.prototype.isCurrentSubjectsReportTarget = function () {\r\n return this.reportTarget == MaterialReportTarget_1.MaterialReportTarget.SUBJECTS;\r\n };\r\n MaterialViewReportController.prototype.setCurrentOwnersReportTarget = function () {\r\n this.setCurrentReportTarget(MaterialReportTarget_1.MaterialReportTarget.OWNERS, new ReportTargetNamesMaker_1.OwnerNamesMaker());\r\n };\r\n MaterialViewReportController.prototype.setCurrentMaterialTypesReportTarget = function () {\r\n this.setCurrentReportTarget(MaterialReportTarget_1.MaterialReportTarget.MATERIAL_TYPES, new ReportTargetNamesMaker_1.MaterialTypeNamesMaker());\r\n };\r\n MaterialViewReportController.prototype.setCurrentSubjectsReportTarget = function () {\r\n this.setCurrentReportTarget(MaterialReportTarget_1.MaterialReportTarget.SUBJECTS, new ReportTargetNamesMaker_1.SubjectNamesMaker());\r\n };\r\n MaterialViewReportController.prototype.getOwnersUrl = function () {\r\n return \"/api/userSelector/usersForCurrentUser\";\r\n };\r\n MaterialViewReportController.prototype.setCurrentReportTarget = function (reportTarget, reportTargetNamesMaker) {\r\n this.ownerIds = [];\r\n this.materialTypeIds = [];\r\n this.subjectIds = [];\r\n this.reportTarget = reportTarget;\r\n this.reportTargetNamesMaker = reportTargetNamesMaker;\r\n };\r\n MaterialViewReportController.NAME = \"statistics.MaterialViewReportController\";\r\n MaterialViewReportController.$inject = [\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n UserService_1.UserService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n SecurityService_1.SecurityService.NAME\r\n ];\r\n return MaterialViewReportController;\r\n})(BaseReportController_1.BaseReportController);\r\nexports.MaterialViewReportController = MaterialViewReportController;\r\n},{\"./../security/PermissionsService\":418,\"./../security/SecurityService\":420,\"./../users/UserService\":499,\"./../utils/MenuHelper\":517,\"./../utils/Moment\":518,\"./../utils/PageHeaderHelper\":521,\"./BaseReportController\":442,\"./StatisticReportsService\":448,\"./models/MaterialReportTarget\":452,\"./models/ReportGroupType\":453,\"./utils/ReportOptions\":454,\"./utils/ReportTargetNamesMaker\":455,\"./utils/ReportWriters\":456}],447:[function(require,module,exports){\nvar StatisticReportsService_1 = require(\"./StatisticReportsService\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar StatisticsRouter_1 = require(\"../urls/StatisticsRouter\");\r\nvar PowerBiReportController = (function () {\r\n function PowerBiReportController($routeParams, $sce, $element, $location, statisticReportsService, securityService, statisticsRouter) {\r\n var _this = this;\r\n this.$routeParams = $routeParams;\r\n this.$sce = $sce;\r\n this.$element = $element;\r\n this.$location = $location;\r\n this.statisticReportsService = statisticReportsService;\r\n this.securityService = securityService;\r\n this.statisticsRouter = statisticsRouter;\r\n this.isEmbeddedLink = false;\r\n this.redirected = false;\r\n this.securityService.demandAuthentication();\r\n var reportType = $routeParams[StatisticsRouter_1.StatisticsRouter.REPORT_TYPE_KEY_PARAM];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ANALYTICS_MENU_KEY);\r\n this.statisticReportsService.getConfiguratedPowerBiLink()\r\n .then(function (result) {\r\n if (!!result.link) {\r\n _this.frameUrl = _this.$sce.trustAsResourceUrl(result.link);\r\n _this.businessUnitId = result.businessUnitId;\r\n _this.isEmbeddedLink = true;\r\n }\r\n else {\r\n _this.statisticReportsService.generatePowerBiReportToken(reportType)\r\n .then(function (embeddedReport) {\r\n if (embeddedReport && embeddedReport.token) {\r\n var models = window['powerbi-client'].models;\r\n var embedConfiguration = {\r\n type: 'report',\r\n id: embeddedReport.reportId,\r\n embedUrl: 'https://app.powerbi.com/reportEmbed',\r\n tokenType: models.TokenType.Embed,\r\n accessToken: embeddedReport.token,\r\n settings: {\r\n filterPaneEnabled: false\r\n }\r\n };\r\n _this.report = window['powerbi']\r\n .embed(window.document.getElementById(\"powerBiEmbeddedReportContainer\"), embedConfiguration);\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"Power BI reports not configured\");\r\n }\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.warning(\"Power BI reports not configured\");\r\n });\r\n }\r\n });\r\n }\r\n PowerBiReportController.prototype.fullScreen = function () {\r\n if (!!this.report) {\r\n this.report.fullscreen();\r\n }\r\n else {\r\n document.getElementById(\"reportBiEmbedded\").requestFullscreen();\r\n }\r\n };\r\n PowerBiReportController.prototype.showCreationModal = function () {\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#creationDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n PowerBiReportController.prototype.redirectToBack = function () {\r\n this.redirected = true;\r\n window.location.reload();\r\n };\r\n PowerBiReportController.NAME = \"statistics.PowerBiReportController\";\r\n PowerBiReportController.$inject = [\r\n \"$routeParams\",\r\n \"$sce\",\r\n \"$element\",\r\n \"$location\",\r\n StatisticReportsService_1.StatisticReportsService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n StatisticsRouter_1.StatisticsRouter.NAME\r\n ];\r\n return PowerBiReportController;\r\n})();\r\nexports.PowerBiReportController = PowerBiReportController;\r\n},{\"../INotifier\":5,\"../urls/StatisticsRouter\":489,\"./../security/SecurityService\":420,\"./../utils/MenuHelper\":517,\"./StatisticReportsService\":448}],448:[function(require,module,exports){\nvar MaterialReportTarget_1 = require(\"./models/MaterialReportTarget\");\r\nvar ReportGroupType_1 = require(\"./models/ReportGroupType\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar StatisticReportsService = (function () {\r\n function StatisticReportsService($http, url) {\r\n this.$http = $http;\r\n this.url = url;\r\n }\r\n StatisticReportsService.prototype.viewMaterialViewReport = function (reportTarget, groupType, ownerIds, materialTypeIds, subjectIds, dateFrom, dateTo) {\r\n var _this = this;\r\n return this.$http.post(this.url.base(\"/api/statistics/reports/materials/views/by/:reportTarget/groupBy/:groupType\")\r\n .param(\":reportTarget\", MaterialReportTarget_1.MaterialReportTarget[reportTarget])\r\n .param(\":groupType\", ReportGroupType_1.ReportGroupType[groupType])\r\n .service(), {\r\n ownerIds: ownerIds,\r\n materialTypeIds: materialTypeIds,\r\n subjectIds: subjectIds,\r\n dateFrom: dateFrom,\r\n dateTo: dateTo })\r\n .then(function (result) { return _this.fillMissingDate(result.data, dateFrom, dateTo, groupType); });\r\n };\r\n StatisticReportsService.prototype.viewMaterialDownloadReport = function (reportTarget, groupType, ownerIds, materialTypeIds, subjectIds, dateFrom, dateTo) {\r\n var _this = this;\r\n return this.$http.post(this.url.base(\"/api/statistics/reports/materials/downloads/by/:reportTarget/groupBy/:groupType\")\r\n .param(\":reportTarget\", MaterialReportTarget_1.MaterialReportTarget[reportTarget])\r\n .param(\":groupType\", ReportGroupType_1.ReportGroupType[groupType])\r\n .service(), {\r\n ownerIds: ownerIds,\r\n materialTypeIds: materialTypeIds,\r\n subjectIds: subjectIds,\r\n dateFrom: dateFrom,\r\n dateTo: dateTo })\r\n .then(function (result) { return _this.fillMissingDate(result.data, dateFrom, dateTo, groupType); });\r\n };\r\n StatisticReportsService.prototype.viewMaterialUploadReport = function (reportTarget, groupType, ownerIds, materialTypeIds, subjectIds, dateFrom, dateTo) {\r\n var _this = this;\r\n return this.$http.post(this.url.base(\"/api/statistics/reports/materials/uploads/by/:reportTarget/groupBy/:groupType\")\r\n .param(\":reportTarget\", MaterialReportTarget_1.MaterialReportTarget[reportTarget])\r\n .param(\":groupType\", ReportGroupType_1.ReportGroupType[groupType])\r\n .service(), {\r\n ownerIds: ownerIds,\r\n materialTypeIds: materialTypeIds,\r\n subjectIds: subjectIds,\r\n dateFrom: dateFrom,\r\n dateTo: dateTo })\r\n .then(function (result) { return _this.fillMissingDate(result.data, dateFrom, dateTo, groupType); });\r\n };\r\n StatisticReportsService.prototype.generatePowerBiReportToken = function (reportType) {\r\n return this.$http.get(this.url.service(\"/api/reports/powerbi/embeddedToken?reportType=\" + (reportType ? reportType : \"\")))\r\n .then(function (result) { return result.data; });\r\n };\r\n StatisticReportsService.prototype.getConfiguratedPowerBiLink = function () {\r\n return this.$http.get(this.url.service(\"/api/reports/powerbi/embeddedLink\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n StatisticReportsService.prototype.fillMissingDate = function (report, dateFrom, dateTo, groupType) {\r\n var _this = this;\r\n dateFrom = dateFrom != null ? dateFrom : report.groupedValues[0];\r\n dateTo = dateTo != null ? dateTo : report.groupedValues[report.groupedValues.length - 1];\r\n report.data.forEach(function (d) {\r\n var valueMap = new Map();\r\n d.value.forEach(function (v) {\r\n valueMap.set(v[0], v[1]);\r\n });\r\n var newValues = [];\r\n var from = moment(dateFrom);\r\n var to = moment(dateTo).add(1, _this.getUnitOfTime(groupType));\r\n while (from.isBefore(to)) {\r\n var unixTime = from.valueOf();\r\n newValues.push([unixTime, valueMap.has(unixTime) ? valueMap.get(unixTime) : 0]);\r\n from = from.add(1, _this.getUnitOfTime(groupType));\r\n }\r\n d.value = newValues;\r\n });\r\n return report;\r\n };\r\n StatisticReportsService.prototype.getUnitOfTime = function (groupType) {\r\n switch (groupType) {\r\n case ReportGroupType_1.ReportGroupType.DAYS: return 'd';\r\n case ReportGroupType_1.ReportGroupType.WEEKS: return 'w';\r\n case ReportGroupType_1.ReportGroupType.MONTHS: return 'M';\r\n case ReportGroupType_1.ReportGroupType.YEARS: return 'y';\r\n }\r\n };\r\n StatisticReportsService.prototype.getInfoForAdmin = function () {\r\n return this.$http.get(this.url.service(\"/api/statistics/reports/admin/info\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n StatisticReportsService.prototype.getInfoForLearner = function () {\r\n return this.$http.get(this.url.service(\"/api/statistics/reports/learner/info\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n StatisticReportsService.prototype.getStatisticForAuthor = function () {\r\n return this.$http.get(this.url.service(\"/api/statistics/reports/author/info\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n StatisticReportsService.prototype.getInfoForAttendeeManager = function () {\r\n return this.$http.get(this.url.service(\"/api/statistics/reports/attendeeManager/info\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n StatisticReportsService.prototype.getInfoForInstructor = function () {\r\n return this.$http.get(this.url.service(\"/api/statistics/reports/instructor/info\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n StatisticReportsService.prototype.getInstructorNotificationsCounts = function () {\r\n return this.$http.get(this.url.service(\"/api/statistics/reports/instructor/notifications\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n StatisticReportsService.prototype.getInstructorNotificationsNewCounts = function () {\r\n return this.$http.get(this.url.service(\"/api/statistics/reports/instructor/notifications/new\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n StatisticReportsService.prototype.getAttendeeManagerNotificationsCounts = function () {\r\n return this.$http.get(this.url.service(\"/api/statistics/reports/attendeeManager/notifications\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n StatisticReportsService.NAME = \"statistics.StatisticReportsService\";\r\n StatisticReportsService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME\r\n ];\r\n return StatisticReportsService;\r\n})();\r\nexports.StatisticReportsService = StatisticReportsService;\r\n},{\"./../utils/UrlService\":528,\"./models/MaterialReportTarget\":452,\"./models/ReportGroupType\":453}],449:[function(require,module,exports){\nvar StatisticReportsService_1 = require(\"./StatisticReportsService\");\r\nvar ActionLogService_1 = require(\"./ActionLogService\");\r\nvar CourseActionLogService_1 = require(\"./CourseActionLogService\");\r\nvar MaterialViewReportController_1 = require(\"./MaterialViewReportController\");\r\nvar MaterialDownloadReportController_1 = require(\"./MaterialDownloadReportController\");\r\nvar MaterialUploadReportController_1 = require(\"./MaterialUploadReportController\");\r\nvar CommonModule_1 = require(\"./../common/CommonModule\");\r\nvar SecurityModule_1 = require(\"./../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"./../urls/UrlsModule\");\r\nvar PowerBiReportController_1 = require(\"./PowerBiReportController\");\r\nexports.StatisticsModule = angular\r\n .module(\"statistics\", [\r\n CommonModule_1.CommonModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .service(StatisticReportsService_1.StatisticReportsService.NAME, StatisticReportsService_1.StatisticReportsService)\r\n .service(ActionLogService_1.ActionLogService.NAME, ActionLogService_1.ActionLogService)\r\n .service(CourseActionLogService_1.CourseActionLogService.NAME, CourseActionLogService_1.CourseActionLogService)\r\n .controller(MaterialViewReportController_1.MaterialViewReportController.NAME, MaterialViewReportController_1.MaterialViewReportController)\r\n .controller(MaterialDownloadReportController_1.MaterialDownloadReportController.NAME, MaterialDownloadReportController_1.MaterialDownloadReportController)\r\n .controller(MaterialUploadReportController_1.MaterialUploadReportController.NAME, MaterialUploadReportController_1.MaterialUploadReportController)\r\n .controller(PowerBiReportController_1.PowerBiReportController.NAME, PowerBiReportController_1.PowerBiReportController);\r\n},{\"./../common/CommonModule\":51,\"./../security/SecurityModule\":419,\"./../urls/UrlsModule\":492,\"./ActionLogService\":441,\"./CourseActionLogService\":443,\"./MaterialDownloadReportController\":444,\"./MaterialUploadReportController\":445,\"./MaterialViewReportController\":446,\"./PowerBiReportController\":447,\"./StatisticReportsService\":448}],450:[function(require,module,exports){\n(function (ActionType) {\r\n ActionType[ActionType[\"MATERIAL_VIEW\"] = 0] = \"MATERIAL_VIEW\";\r\n ActionType[ActionType[\"MATERIAL_CREATION\"] = 1] = \"MATERIAL_CREATION\";\r\n ActionType[ActionType[\"MATERIAL_DOWNLOAD\"] = 2] = \"MATERIAL_DOWNLOAD\";\r\n ActionType[ActionType[\"MATERIAL_PURCHASE\"] = 3] = \"MATERIAL_PURCHASE\";\r\n ActionType[ActionType[\"PLAYLIST_VIEW\"] = 4] = \"PLAYLIST_VIEW\";\r\n ActionType[ActionType[\"COURSE_COMPLETION\"] = 5] = \"COURSE_COMPLETION\";\r\n ActionType[ActionType[\"LOGIN\"] = 6] = \"LOGIN\";\r\n})(exports.ActionType || (exports.ActionType = {}));\r\nvar ActionType = exports.ActionType;\r\n},{}],451:[function(require,module,exports){\n(function (CourseActionType) {\r\n CourseActionType[CourseActionType[\"COURSE_STARTED\"] = 0] = \"COURSE_STARTED\";\r\n CourseActionType[CourseActionType[\"COURSE_COMPLETED\"] = 1] = \"COURSE_COMPLETED\";\r\n CourseActionType[CourseActionType[\"SECTION_VIEW\"] = 2] = \"SECTION_VIEW\";\r\n CourseActionType[CourseActionType[\"QUIZ_COMPLETE\"] = 3] = \"QUIZ_COMPLETE\";\r\n CourseActionType[CourseActionType[\"SURVEY_COMPLETE\"] = 4] = \"SURVEY_COMPLETE\";\r\n})(exports.CourseActionType || (exports.CourseActionType = {}));\r\nvar CourseActionType = exports.CourseActionType;\r\n},{}],452:[function(require,module,exports){\n(function (MaterialReportTarget) {\r\n MaterialReportTarget[MaterialReportTarget[\"OWNERS\"] = 0] = \"OWNERS\";\r\n MaterialReportTarget[MaterialReportTarget[\"MATERIAL_TYPES\"] = 1] = \"MATERIAL_TYPES\";\r\n MaterialReportTarget[MaterialReportTarget[\"SUBJECTS\"] = 2] = \"SUBJECTS\";\r\n})(exports.MaterialReportTarget || (exports.MaterialReportTarget = {}));\r\nvar MaterialReportTarget = exports.MaterialReportTarget;\r\n},{}],453:[function(require,module,exports){\n(function (ReportGroupType) {\r\n ReportGroupType[ReportGroupType[\"DAYS\"] = 0] = \"DAYS\";\r\n ReportGroupType[ReportGroupType[\"WEEKS\"] = 1] = \"WEEKS\";\r\n ReportGroupType[ReportGroupType[\"MONTHS\"] = 2] = \"MONTHS\";\r\n ReportGroupType[ReportGroupType[\"YEARS\"] = 3] = \"YEARS\";\r\n})(exports.ReportGroupType || (exports.ReportGroupType = {}));\r\nvar ReportGroupType = exports.ReportGroupType;\r\n},{}],454:[function(require,module,exports){\nfunction getLineDiagramsReportOptions(reportName) {\r\n return {\r\n title: reportName,\r\n animate: true,\r\n legend: {\r\n show: true,\r\n renderer: $['jqplot']['EnhancedLegendRenderer'],\r\n placement: \"outsideGrid\",\r\n location: \"ne\",\r\n rowSpacing: \"0px\",\r\n rendererOptions: {\r\n seriesToggle: 'normal',\r\n seriesToggleReplot: { resetAxes: true }\r\n }\r\n },\r\n highlighter: {\r\n show: true\r\n },\r\n axes: {\r\n xaxis: {\r\n renderer: $['jqplot']['DateAxisRenderer'],\r\n tickOptions: {\r\n formatString: '%b %d, %Y'\r\n }\r\n },\r\n yaxis: {\r\n tickOptions: {\r\n formatString: '%.0f'\r\n }\r\n }\r\n }\r\n };\r\n}\r\nexports.getLineDiagramsReportOptions = getLineDiagramsReportOptions;\r\nfunction getHorizontalBarDiagramOptions(diagramName, customOpts) {\r\n customOpts = customOpts || {};\r\n customOpts.axes = customOpts.axes || {};\r\n customOpts.axes.xaxis = customOpts.axes.xaxis || {};\r\n customOpts.axes.xaxis.tickOptions = customOpts.axes.xaxis.tickOptions || {};\r\n return {\r\n title: diagramName,\r\n animate: true,\r\n seriesColors: [\"#dad54c\", \"#009cd2\", \"#73C774\", \"#ec9551\", \"#bd8ab6\", \"#f700eb\", \"#92bdbc\", \"#003dff\", \"#9e40d2\", \"#00d207\"],\r\n seriesDefaults: {\r\n renderer: $[\"jqplot\"][\"BarRenderer\"],\r\n fill: true,\r\n rendererOptions: {\r\n barDirection: \"horizontal\",\r\n varyBarColor: true,\r\n barWidth: 25\r\n }\r\n },\r\n highlighter: {\r\n show: false,\r\n tooltipOffset: 15,\r\n tooltipAxes: \"x\",\r\n tooltipLocation: \"e\"\r\n },\r\n axes: {\r\n autoscale: customOpts.axes.autoscale || false,\r\n xaxis: {\r\n min: customOpts.axes.xaxis.min || null,\r\n max: customOpts.axes.xaxis.max || null,\r\n tickOptions: {\r\n formatString: customOpts.axes.xaxis.tickOptions.formatString || \"\",\r\n showGridline: false,\r\n suffix: customOpts.axes.xaxis.tickOptions.suffix || \"\"\r\n }\r\n },\r\n yaxis: {\r\n labelRenderer: $[\"jqplot\"][\"AxisLabelRenderer\"],\r\n renderer: $[\"jqplot\"][\"CategoryAxisRenderer\"],\r\n tickOptions: {\r\n formatString: \"%b %d, %Y\",\r\n }\r\n },\r\n }\r\n };\r\n}\r\nexports.getHorizontalBarDiagramOptions = getHorizontalBarDiagramOptions;\r\n},{}],455:[function(require,module,exports){\nvar OwnerNamesMaker = (function () {\r\n function OwnerNamesMaker() {\r\n }\r\n OwnerNamesMaker.prototype.make = function (report, func) {\r\n var result = [];\r\n report.data.forEach(function (d) {\r\n result.push(func(d.key.fullName));\r\n });\r\n return result;\r\n };\r\n return OwnerNamesMaker;\r\n})();\r\nexports.OwnerNamesMaker = OwnerNamesMaker;\r\nvar MaterialTypeNamesMaker = (function () {\r\n function MaterialTypeNamesMaker() {\r\n }\r\n MaterialTypeNamesMaker.prototype.make = function (report, func) {\r\n var result = [];\r\n report.data.forEach(function (d) {\r\n result.push(func(d.key.name));\r\n });\r\n return result;\r\n };\r\n return MaterialTypeNamesMaker;\r\n})();\r\nexports.MaterialTypeNamesMaker = MaterialTypeNamesMaker;\r\nvar SubjectNamesMaker = (function () {\r\n function SubjectNamesMaker() {\r\n }\r\n SubjectNamesMaker.prototype.make = function (report, func) {\r\n var result = [];\r\n report.data.forEach(function (d) {\r\n result.push(func(d.key.name));\r\n });\r\n return result;\r\n };\r\n return SubjectNamesMaker;\r\n})();\r\nexports.SubjectNamesMaker = SubjectNamesMaker;\r\n},{}],456:[function(require,module,exports){\nvar LineDiagramsReportWriter = (function () {\r\n function LineDiagramsReportWriter() {\r\n }\r\n LineDiagramsReportWriter.prototype.reporting = function (report, func) {\r\n var result = [];\r\n report.data.forEach(function (d) {\r\n var newValue = [];\r\n d.value.forEach(function (v) {\r\n newValue.push(func(v));\r\n });\r\n result.push(newValue);\r\n });\r\n return result;\r\n };\r\n return LineDiagramsReportWriter;\r\n})();\r\nexports.LineDiagramsReportWriter = LineDiagramsReportWriter;\r\n},{}],457:[function(require,module,exports){\nvar UploadsService_1 = require(\"./UploadsService\");\r\nexports.StorageModule = angular\r\n .module(\"storage\", [])\r\n .service(UploadsService_1.UploadsService.NAME, UploadsService_1.UploadsService);\r\n},{\"./UploadsService\":458}],458:[function(require,module,exports){\nvar UploadsService = (function () {\r\n function UploadsService() {\r\n var _this = this;\r\n this.queue = [];\r\n this.currentlyUploadableFiles = Array.apply(null, Array(UploadsService.UPLOAD_PARALLEL_FILES)).map(function () { return null; });\r\n this.currentlyUploadableFilesMap = {};\r\n this.fileProgressFunc = function (evt, file, xhr, options) {\r\n file.uploaded = evt.loaded;\r\n file.guid = options.data.guid;\r\n var cup = _this.currentlyUploadableFilesMap[file.name + file.guid];\r\n if (cup) {\r\n var index = cup.index;\r\n _this.currentlyUploadableFiles[index] = file;\r\n }\r\n };\r\n this.fileCompleteFunc = function (err, xhr, file, options) {\r\n file.guid = options.data.guid;\r\n if (err == \"abort\") {\r\n _this.currentlyUploadableFilesMap[file.name + file.guid].abortFunc(file);\r\n }\r\n else if (err === false) {\r\n _this.currentlyUploadableFilesMap[file.name + file.guid].successFunc(file);\r\n }\r\n else {\r\n _this.currentlyUploadableFilesMap[file.name + file.guid].errorFunc(file);\r\n }\r\n var index = _this.currentlyUploadableFilesMap[file.name + file.guid].index;\r\n _this.currentlyUploadableFiles[index] = null;\r\n _this.currentlyUploadableFilesMap[file.name + file.guid] = null;\r\n _this.uploadParallelFiles();\r\n };\r\n FileAPI.cors = true;\r\n }\r\n UploadsService.prototype.getCurrentlyUploadableFiles = function () {\r\n var result = [];\r\n this.currentlyUploadableFiles.forEach(function (file) {\r\n if (file != null) {\r\n result.push(file);\r\n }\r\n });\r\n this.queue.forEach(function (file) {\r\n result.push(file);\r\n });\r\n return result;\r\n };\r\n UploadsService.prototype.cancel = function (file) {\r\n var xhr = this.currentlyUploadableFilesMap[file.name + file.guid].xhr;\r\n xhr.abort();\r\n };\r\n UploadsService.prototype.cancelByKey = function (key) {\r\n var _this = this;\r\n var fileKey;\r\n this.currentlyUploadableFiles.forEach(function (file) {\r\n if (file != null) {\r\n fileKey = _this.currentlyUploadableFilesMap[file.name + file.guid].key;\r\n if (fileKey == key) {\r\n _this.cancel(file);\r\n }\r\n }\r\n });\r\n };\r\n UploadsService.prototype.upload = function (file, fileKey, url, method, successFunc, abortFunc, errorFunc) {\r\n var _this = this;\r\n FileAPI.filterFiles([file], function () {\r\n return true;\r\n }, function (files) {\r\n if (files.length) {\r\n files.forEach(function (file) {\r\n file.guid = moment().valueOf();\r\n _this.queue.push(file);\r\n _this.currentlyUploadableFilesMap[file.name + file.guid] = {\r\n index: null,\r\n url: url,\r\n method: method,\r\n successFunc: successFunc,\r\n abortFunc: abortFunc,\r\n errorFunc: errorFunc,\r\n xhr: null,\r\n key: fileKey\r\n };\r\n });\r\n _this.uploadParallelFiles();\r\n }\r\n });\r\n };\r\n UploadsService.prototype.uploadParallelFiles = function () {\r\n var _this = this;\r\n this.currentlyUploadableFiles.forEach(function (f, index) {\r\n if (_this.queue.length > 0 && f == null) {\r\n var file = _this.queue.shift();\r\n _this.currentlyUploadableFiles[index] = file;\r\n _this.currentlyUploadableFilesMap[file.name + file.guid].index = index;\r\n _this.uploadOneFile(file);\r\n }\r\n });\r\n };\r\n UploadsService.prototype.uploadOneFile = function (file) {\r\n var cuf = this.currentlyUploadableFilesMap[file.name + file.guid];\r\n var xhr = FileAPI.upload({\r\n url: cuf.url,\r\n uploadMethod: cuf.method,\r\n data: {\r\n guid: file.guid\r\n },\r\n files: {\r\n file: file\r\n },\r\n chunkSize: 100 * FileAPI.KB,\r\n chunkUploadRetry: 3,\r\n fileprogress: this.fileProgressFunc,\r\n filecomplete: this.fileCompleteFunc\r\n });\r\n cuf.xhr = xhr;\r\n };\r\n UploadsService.NAME = \"storage.UploadsService\";\r\n UploadsService.LEARNING_PATH_KEY = \"learningPath\";\r\n UploadsService.MATERIAL_KEY = \"material\";\r\n UploadsService.COURSE_KEY = \"course\";\r\n UploadsService.PREVIEW_UPLOAD_URL_KEY = \"previewUploadUrl\";\r\n UploadsService.PREVIEW_UPLOAD_METHOD_KEY = \"previewUploadMethod\";\r\n UploadsService.SUBTITLES_UPLOAD_URL_KEY = \"subtitlesUploadUrl\";\r\n UploadsService.SUBTITLES_UPLOAD_METHOD_KEY = \"subtitlesUploadMethod\";\r\n UploadsService.FILE_UPLOAD_URL_KEY = \"fileUploadUrl\";\r\n UploadsService.FILE_UPLOAD_METHOD_KEY = \"fileUploadMethod\";\r\n UploadsService.UPLOAD_PARALLEL_FILES = 3;\r\n return UploadsService;\r\n})();\r\nexports.UploadsService = UploadsService;\r\n},{}],459:[function(require,module,exports){\nvar ScopeUtils = (function () {\r\n function ScopeUtils() {\r\n }\r\n ScopeUtils.apply = function ($scope, fn) {\r\n var phase = $scope.$root.$$phase;\r\n if (phase === \"$apply\" || phase === \"$digest\") {\r\n if (fn) {\r\n fn($scope);\r\n }\r\n }\r\n else {\r\n $scope.$apply(fn);\r\n }\r\n };\r\n return ScopeUtils;\r\n})();\r\nexports.ScopeUtils = ScopeUtils;\r\n},{}],460:[function(require,module,exports){\nvar TreeElementState_1 = require(\"./models/TreeElementState\");\r\nvar TreeElementsInfoFiller = (function () {\r\n function TreeElementsInfoFiller() {\r\n }\r\n TreeElementsInfoFiller.fillHierarchyInfo = function (gridTreeElements) {\r\n TreeElementsInfoFiller.fillHierarchyInfoWithMaxLevel(gridTreeElements, TreeElementsInfoFiller.MAX_VISIBLE_LEVEL);\r\n };\r\n TreeElementsInfoFiller.fillHierarchyInfoWithMaxLevel = function (gridTreeElements, maxVisibleLevel) {\r\n for (var i = 0; i < gridTreeElements.length; i++) {\r\n var element = gridTreeElements[i];\r\n this.initHierarchyElement(element, maxVisibleLevel);\r\n }\r\n var childrenOnLevels = new Map();\r\n var lastElementsOnLevels = new Map();\r\n var previousLevel = -1;\r\n for (var i = 0; i < gridTreeElements.length; i++) {\r\n var element = gridTreeElements[i];\r\n var currentLevel = element.level;\r\n if (currentLevel > this.FIRST_LEVEL) {\r\n childrenOnLevels.get(currentLevel - 1).push(element);\r\n }\r\n childrenOnLevels.set(currentLevel, element.children);\r\n lastElementsOnLevels.set(currentLevel, element);\r\n if (currentLevel < previousLevel) {\r\n for (var lvl = previousLevel; lvl > currentLevel; lvl--) {\r\n lastElementsOnLevels.get(lvl).isLastChild = true;\r\n }\r\n }\r\n previousLevel = currentLevel;\r\n }\r\n if (previousLevel >= this.FIRST_LEVEL) {\r\n for (var lvl = previousLevel; lvl >= this.FIRST_LEVEL; lvl--) {\r\n lastElementsOnLevels.get(lvl).isLastChild = true;\r\n }\r\n }\r\n };\r\n TreeElementsInfoFiller.initHierarchyElement = function (element, maxVisibleLevel) {\r\n if (!element)\r\n return;\r\n if (element.level == undefined) {\r\n element.level = 0;\r\n }\r\n element.children = [];\r\n element.isLastChild = false;\r\n element.state = element.level < maxVisibleLevel ? TreeElementState_1.TreeElementState[TreeElementState_1.TreeElementState.EXPANDED] : TreeElementState_1.TreeElementState[TreeElementState_1.TreeElementState.COLLAPSED];\r\n element.visible = element.level <= maxVisibleLevel;\r\n element.show = function () {\r\n element.visible = true;\r\n };\r\n element.hide = function () {\r\n if (!element.visible)\r\n return;\r\n element.visible = false;\r\n angular.forEach(element.children, function (child) { return child.hide(); });\r\n };\r\n element.expand = function () {\r\n element.state = TreeElementState_1.TreeElementState[TreeElementState_1.TreeElementState.EXPANDED];\r\n angular.forEach(element.children, function (child) { return child.show(); });\r\n };\r\n element.expandAll = function () {\r\n element.state = TreeElementState_1.TreeElementState[TreeElementState_1.TreeElementState.EXPANDED];\r\n angular.forEach(element.children, function (child) { return child.expand(); });\r\n angular.forEach(element.children, function (child) { return child.show(); });\r\n };\r\n element.collapse = function () {\r\n angular.forEach(element.children, function (child) { return child.collapse(); });\r\n angular.forEach(element.children, function (child) { return child.hide(); });\r\n element.state = TreeElementState_1.TreeElementState[TreeElementState_1.TreeElementState.COLLAPSED];\r\n };\r\n };\r\n TreeElementsInfoFiller.MAX_VISIBLE_LEVEL = 2;\r\n TreeElementsInfoFiller.FIRST_LEVEL = 1;\r\n return TreeElementsInfoFiller;\r\n})();\r\nexports.TreeElementsInfoFiller = TreeElementsInfoFiller;\r\n},{\"./models/TreeElementState\":461}],461:[function(require,module,exports){\n(function (TreeElementState) {\r\n TreeElementState[TreeElementState[\"COLLAPSED\"] = 0] = \"COLLAPSED\";\r\n TreeElementState[TreeElementState[\"EXPANDED\"] = 1] = \"EXPANDED\";\r\n})(exports.TreeElementState || (exports.TreeElementState = {}));\r\nvar TreeElementState = exports.TreeElementState;\r\n},{}],462:[function(require,module,exports){\nvar AssessmentsRouter = (function () {\r\n function AssessmentsRouter() {\r\n }\r\n AssessmentsRouter.prototype.assessmentsUrl = function () {\r\n return AssessmentsRouter.assessmentsRoute;\r\n };\r\n AssessmentsRouter.prototype.assessmentDetailsUrl = function (assessmentId) {\r\n return AssessmentsRouter.assessmentDetailsRoute.replace(\":\" + AssessmentsRouter.ASSESSMENT_ID_PARAM, assessmentId.toString());\r\n };\r\n AssessmentsRouter.NAME = \"urls.AssessmentsRouter\";\r\n AssessmentsRouter.assessmentsRoute = \"/personal/assessments\";\r\n AssessmentsRouter.assessmentDetailsRoute = \"/personal/assessments/:assessmentId\";\r\n AssessmentsRouter.ASSESSMENT_ID_PARAM = \"assessmentId\";\r\n return AssessmentsRouter;\r\n})();\r\nexports.AssessmentsRouter = AssessmentsRouter;\r\n},{}],463:[function(require,module,exports){\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar AuthRouter = (function () {\r\n function AuthRouter() {\r\n }\r\n AuthRouter.prototype.logonUrl = function (businessUnitId) {\r\n return businessUnitId\r\n ? AuthRouter.logonRoute + (\"?\" + AuthRouter.BUSINESS_UNIT_ID_PARAM + \"=\" + businessUnitId)\r\n : AuthRouter.logonRoute;\r\n };\r\n AuthRouter.prototype.logoutUrl = function () {\r\n return AuthRouter.logoutRoute;\r\n };\r\n AuthRouter.prototype.accessDeniedUrl = function () {\r\n return AuthRouter.accessDeniedRoute;\r\n };\r\n AuthRouter.prototype.restorePassword = function () {\r\n return AuthRouter.restorePasswordRoute;\r\n };\r\n AuthRouter.prototype.createNewPassword = function (token) {\r\n return StringBuilder_1.StringBuilder.interpolate(AuthRouter.createNewPasswordRoute)\r\n .with(':' + AuthRouter.PASSWORD_TOKEN_PARAM_NAME, token)\r\n .build();\r\n };\r\n AuthRouter.prototype.checkValidCode = function () {\r\n return AuthRouter.checkValidCodeRoute;\r\n };\r\n AuthRouter.prototype.getCustomDomainFromUrl = function (location) {\r\n var execDomain = new RegExp(\"(?:https*:\\/\\/)[^/]*\", \"s\").exec(AppProperties_1.AppProperties.baseUrl);\r\n var baseUrl = execDomain != null ? execDomain[0] : \"\";\r\n if (location.origin != baseUrl) {\r\n var domain = location.origin.indexOf(\"http\") != -1 ?\r\n location.origin.split(\"//\")[1].split(\".\")\r\n : location.origin.split(\".\");\r\n var customDomain = domain[0];\r\n return customDomain;\r\n }\r\n return null;\r\n };\r\n AuthRouter.NAME = \"urls.AuthRouter\";\r\n AuthRouter.ACCESS_DENIED_PARAM_NAME = \"accessDenied\";\r\n AuthRouter.TOKEN_EXPIRED_PARAM_NAME = \"tokenExpired\";\r\n AuthRouter.LOGON_REQUIRED_PARAM_NAME = \"logonRequired\";\r\n AuthRouter.LOGON_PARAM_NAME = \"logonName\";\r\n AuthRouter.PASSWORD_TOKEN_PARAM_NAME = \"token\";\r\n AuthRouter.BUSINESS_UNIT_ID_PARAM = \"BUid\";\r\n AuthRouter.logonRoute = \"/auth/logon\";\r\n AuthRouter.logoutRoute = \"/auth/logout\";\r\n AuthRouter.accessDeniedRoute = \"/auth/accessDenied\";\r\n AuthRouter.restorePasswordRoute = \"/auth/restore/password\";\r\n AuthRouter.checkValidCodeRoute = \"/auth/check/code\";\r\n AuthRouter.createNewPasswordRoute = \"/auth/create/new/password/:\" + AuthRouter.PASSWORD_TOKEN_PARAM_NAME;\r\n return AuthRouter;\r\n})();\r\nexports.AuthRouter = AuthRouter;\r\n},{\"../utils/AppProperties\":\"AppProperties\",\"../utils/StringBuilder\":525}],464:[function(require,module,exports){\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar BusinessUnitsRouter = (function () {\r\n function BusinessUnitsRouter() {\r\n this.DEFAULT_BU_LEVEL = \"generalDetails\";\r\n }\r\n BusinessUnitsRouter.prototype.indexUrl = function () {\r\n return BusinessUnitsRouter.indexRoute;\r\n };\r\n BusinessUnitsRouter.prototype.editUrl = function (id, buLevel) {\r\n return StringBuilder_1.StringBuilder.interpolate(BusinessUnitsRouter.editRoute)\r\n .with(\":\" + BusinessUnitsRouter.ID_PARAM_NAME, id)\r\n .with(\":\" + BusinessUnitsRouter.BU_LEVEL_PARAM_NAME, buLevel == null ? this.DEFAULT_BU_LEVEL : buLevel)\r\n .build();\r\n };\r\n BusinessUnitsRouter.prototype.generalUrl = function (id) {\r\n return StringBuilder_1.StringBuilder.interpolate(BusinessUnitsRouter.generalRoute)\r\n .with(\":\" + BusinessUnitsRouter.ID_PARAM_NAME, id)\r\n .build();\r\n };\r\n BusinessUnitsRouter.prototype.brandingUrl = function (id) {\r\n return StringBuilder_1.StringBuilder.interpolate(BusinessUnitsRouter.brandingRoute)\r\n .with(\":\" + BusinessUnitsRouter.ID_PARAM_NAME, id)\r\n .build();\r\n };\r\n BusinessUnitsRouter.prototype.createRoute = function () {\r\n return BusinessUnitsRouter.createRoute;\r\n };\r\n BusinessUnitsRouter.prototype.menuItemsUrl = function (id) {\r\n return StringBuilder_1.StringBuilder.interpolate(BusinessUnitsRouter.menuItemsRoute)\r\n .with(\":\" + BusinessUnitsRouter.ID_PARAM_NAME, id)\r\n .build();\r\n };\r\n BusinessUnitsRouter.prototype.subscriptionUrl = function (id) {\r\n return StringBuilder_1.StringBuilder.interpolate(BusinessUnitsRouter.subscriptionRoute)\r\n .with(\":\" + BusinessUnitsRouter.ID_PARAM_NAME, id)\r\n .build();\r\n };\r\n BusinessUnitsRouter.NAME = \"urls.BusinessUnitsRouter\";\r\n BusinessUnitsRouter.ID_PARAM_NAME = \"id\";\r\n BusinessUnitsRouter.BU_LEVEL_PARAM_NAME = \"buLevel\";\r\n BusinessUnitsRouter.indexRoute = \"/businessUnits\";\r\n BusinessUnitsRouter.createRoute = \"/businessUnits/new\";\r\n BusinessUnitsRouter.editRoute = \"/businessUnits/:\" + BusinessUnitsRouter.ID_PARAM_NAME + \"/:\" + BusinessUnitsRouter.BU_LEVEL_PARAM_NAME;\r\n BusinessUnitsRouter.generalRoute = \"/businessUnits/:\" + BusinessUnitsRouter.ID_PARAM_NAME + \"/generalDetails\";\r\n BusinessUnitsRouter.brandingRoute = \"/businessUnits/:\" + BusinessUnitsRouter.ID_PARAM_NAME + \"/customBranding\";\r\n BusinessUnitsRouter.menuItemsRoute = \"/businessUnits/:\" + BusinessUnitsRouter.ID_PARAM_NAME + \"/menuItems\";\r\n BusinessUnitsRouter.subscriptionRoute = \"/businessUnits/:\" + BusinessUnitsRouter.ID_PARAM_NAME + \"/billPlan\";\r\n return BusinessUnitsRouter;\r\n})();\r\nexports.BusinessUnitsRouter = BusinessUnitsRouter;\r\n},{\"../utils/StringBuilder\":525}],465:[function(require,module,exports){\nvar CertificateTemplatesRouter = (function () {\r\n function CertificateTemplatesRouter() {\r\n }\r\n CertificateTemplatesRouter.prototype.indexUrl = function () {\r\n return CertificateTemplatesRouter.indexRoute;\r\n };\r\n CertificateTemplatesRouter.prototype.editUrl = function (certificateId) {\r\n return certificateId == 0\r\n ? CertificateTemplatesRouter.editRoute.replace(\":\" + CertificateTemplatesRouter.CERTIFICATE_ID_PARAM, \"new\")\r\n : CertificateTemplatesRouter.editRoute.replace(\":\" + CertificateTemplatesRouter.CERTIFICATE_ID_PARAM, certificateId.toString());\r\n };\r\n CertificateTemplatesRouter.NAME = \"urls.CertificateTemplatesRouter\";\r\n CertificateTemplatesRouter.CERTIFICATE_ID_PARAM = \"certificateId\";\r\n CertificateTemplatesRouter.indexRoute = \"/certificateTemplates/\";\r\n CertificateTemplatesRouter.editRoute = \"/certificateTemplates/:certificateId/edit\";\r\n return CertificateTemplatesRouter;\r\n})();\r\nexports.CertificateTemplatesRouter = CertificateTemplatesRouter;\r\n},{}],466:[function(require,module,exports){\nvar CommonRouter = (function () {\r\n function CommonRouter() {\r\n }\r\n CommonRouter.prototype.notFoundUrl = function () {\r\n return CommonRouter.notFoundRoute;\r\n };\r\n CommonRouter.NAME = \"urls.CommonRouter\";\r\n CommonRouter.notFoundRoute = \"/notFound\";\r\n return CommonRouter;\r\n})();\r\nexports.CommonRouter = CommonRouter;\r\n},{}],467:[function(require,module,exports){\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar MaterialsRouter_1 = require(\"./../urls/MaterialsRouter\");\r\nvar CoursesRouter_1 = require(\"./../urls/CoursesRouter\");\r\nvar CommonRouter_1 = require(\"./../urls/CommonRouter\");\r\nvar ContentRouter = (function () {\r\n function ContentRouter(materialsRouter, courseRouter, commonRouter) {\r\n this.materialsRouter = materialsRouter;\r\n this.courseRouter = courseRouter;\r\n this.commonRouter = commonRouter;\r\n }\r\n ContentRouter.prototype.detailsUrl = function (objectId, objectType) {\r\n var myObjectType = (typeof objectType === 'string') ? ReferencedObjectType_1.ReferencedObjectType[objectType] :\r\n (typeof objectType === 'number') ? objectType : undefined;\r\n switch (myObjectType) {\r\n case ReferencedObjectType_1.ReferencedObjectType.MATERIAL:\r\n return this.materialsRouter.watchUrl(objectId);\r\n case ReferencedObjectType_1.ReferencedObjectType.COURSE:\r\n return this.courseRouter.detailsUrl(objectId);\r\n case ReferencedObjectType_1.ReferencedObjectType.PLAYLIST:\r\n return this.materialsRouter.playlistDetailsUrl(objectId);\r\n default:\r\n return this.commonRouter.notFoundUrl();\r\n }\r\n };\r\n ContentRouter.NAME = \"urls.ContentRouter\";\r\n ContentRouter.$inject = [\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n CommonRouter_1.CommonRouter.NAME\r\n ];\r\n return ContentRouter;\r\n})();\r\nexports.ContentRouter = ContentRouter;\r\n},{\"./../ReferencedObjectType\":7,\"./../urls/CommonRouter\":466,\"./../urls/CoursesRouter\":468,\"./../urls/MaterialsRouter\":480}],468:[function(require,module,exports){\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar CoursesRouter = (function () {\r\n function CoursesRouter() {\r\n }\r\n CoursesRouter.prototype.indexUrl = function () {\r\n return CoursesRouter.indexRoute;\r\n };\r\n CoursesRouter.prototype.indexPurchasedOrderUrl = function (purchasedOrderId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.indexPurchasedOrderRoute)\r\n .with(':' + CoursesRouter.PURCHASED_ORDER, purchasedOrderId)\r\n .build();\r\n };\r\n CoursesRouter.prototype.detailsUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.detailsRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.progressUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.progressRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.progressUrlForUser = function (courseId, userId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.progressRouteUser)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .with(':' + CoursesRouter.USER_ID_PARAM, userId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.webinarsUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.webinarRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.iltUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.iltRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.infoUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.infoRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.enrollmentDetailsUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.enrollmentDetailsRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.discussionUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.discussionRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.createUrl = function () {\r\n return CoursesRouter.createRoute;\r\n };\r\n CoursesRouter.prototype.updateUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder.interpolate(CoursesRouter.updateRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.enrollmentEditUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder.interpolate(CoursesRouter.enrollmentEditRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.structureUpdateUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.structureUpdateRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.bundleUpdateUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.bundleUpdateRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.participationFormUpdateUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.participationFormUpdateRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.landingPageUpdateUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.landingPageUpdateRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.exportImportUpdateUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.exportImportUpdateRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.relatedProductsUpdateUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.relatedProductsUpdateRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.quizDetailsUrl = function (quizId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.quizDetailsRoute)\r\n .with(':' + CoursesRouter.COURSE_QUIZ_ID_PARAM, quizId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.permissionsDelegationUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder.interpolate(CoursesRouter.permissionsDelegationRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.sectionUpdateRoute = function (courseId, moduleId, sectionId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.sectionUpdateRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .with(':' + CoursesRouter.MODULE_ID_PARAM, moduleId.toString())\r\n .with(':' + CoursesRouter.SECTION_ID_PARAM, sectionId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.sectionDetailsRoute = function (courseId, moduleId, sectionId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.sectionDetailsRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .with(':' + CoursesRouter.MODULE_ID_PARAM, moduleId.toString())\r\n .with(':' + CoursesRouter.SECTION_ID_PARAM, sectionId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.surveyResultsUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.surveyResultsRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.notificationDetailsUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.notificationTemplatesDetailRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.prototype.notificationEditUrl = function (templateId, courseId, businessUnitId) {\r\n var editUrl = CoursesRouter.notificationTemplatesEditRoute\r\n .replace(\":\" + CoursesRouter.NOTIFICATION_TEMPLATE_ID_PARAM, templateId.toString())\r\n .replace(\":\" + CoursesRouter.COURSE_ID_PARAM, courseId.toString());\r\n if (businessUnitId) {\r\n editUrl += \"?\" + CoursesRouter.NOTIFICATION_BUSINESS_UNIT_PARAM + \"=\" + businessUnitId.toString();\r\n }\r\n return editUrl;\r\n };\r\n CoursesRouter.prototype.gamificationDetailsUrl = function (courseId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(CoursesRouter.gamificationDetailRoute)\r\n .with(':' + CoursesRouter.COURSE_ID_PARAM, courseId.toString())\r\n .build();\r\n };\r\n CoursesRouter.NAME = \"urls.CoursesRouter\";\r\n CoursesRouter.COURSE_ID_PARAM = \"courseId\";\r\n CoursesRouter.COURSE_QUIZ_ID_PARAM = \"quizId\";\r\n CoursesRouter.MODULE_ID_PARAM = \"moduleId\";\r\n CoursesRouter.SECTION_ID_PARAM = \"sectionId\";\r\n CoursesRouter.THREAD_ID_PARAM = \"threadId\";\r\n CoursesRouter.USER_ID_PARAM = \"userId\";\r\n CoursesRouter.COURSE_PARAMETER = \"course\";\r\n CoursesRouter.MODULE_PARAMETER = \"module\";\r\n CoursesRouter.SECTION_PARAMETER = \"section\";\r\n CoursesRouter.PURCHASED_ORDER = \"purchasedOrder\";\r\n CoursesRouter.LOGON_REQUIRED = \"logonRequired\";\r\n CoursesRouter.VILT_SESSIONS_AUTO_REGISTER_REQUIRED = \"payment\";\r\n CoursesRouter.NOTIFICATION_TEMPLATE_ID_PARAM = \"notificationId\";\r\n CoursesRouter.NOTIFICATION_BUSINESS_UNIT_PARAM = \"businessUnitId\";\r\n CoursesRouter.indexRoute = \"/courses\";\r\n CoursesRouter.indexPurchasedRoute = \"/courses/purchased\";\r\n CoursesRouter.indexPurchasedOrderRoute = \"/courses/purchased\" +\r\n (\"?purchasedOrder=:\" + CoursesRouter.PURCHASED_ORDER);\r\n CoursesRouter.detailsRoute = \"/courses/:\" + CoursesRouter.COURSE_ID_PARAM;\r\n CoursesRouter.sectionDetailsRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) +\r\n (\"?module=:\" + CoursesRouter.MODULE_ID_PARAM) + (\"§ion=:\" + CoursesRouter.SECTION_ID_PARAM);\r\n CoursesRouter.progressRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/progress\";\r\n CoursesRouter.progressRouteUser = \"/courses/:\" + CoursesRouter.COURSE_ID_PARAM + \"/progress?userId=:\" + CoursesRouter.USER_ID_PARAM;\r\n CoursesRouter.webinarRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/webinars\";\r\n CoursesRouter.iltRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/ilt\";\r\n CoursesRouter.infoRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/info\";\r\n CoursesRouter.enrollmentDetailsRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/enrollmentDetails\";\r\n CoursesRouter.discussionRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/discussion\";\r\n CoursesRouter.createRoute = \"/courses/create\";\r\n CoursesRouter.updateRoute = \"/courses/update/:\" + CoursesRouter.COURSE_ID_PARAM;\r\n CoursesRouter.enrollmentEditRoute = (\"/courses/update/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/enrollment\";\r\n CoursesRouter.structureUpdateRoute = (\"/courses/update/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/structure\";\r\n CoursesRouter.sectionUpdateRoute = (\"/courses/update/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/structure\" +\r\n (\"?module=:\" + CoursesRouter.MODULE_ID_PARAM) + (\"§ion=:\" + CoursesRouter.SECTION_ID_PARAM);\r\n CoursesRouter.bundleUpdateRoute = (\"/courses/update/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/bundle\";\r\n CoursesRouter.participationFormUpdateRoute = (\"/courses/update/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/participationForm\";\r\n CoursesRouter.landingPageUpdateRoute = (\"/courses/update/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/landingPage\";\r\n CoursesRouter.exportImportUpdateRoute = (\"/courses/update/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/exportImport\";\r\n CoursesRouter.relatedProductsUpdateRoute = (\"/courses/update/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/relatedProducts\";\r\n CoursesRouter.quizDetailsRoute = \"/courses/quizzes/:\" + CoursesRouter.COURSE_QUIZ_ID_PARAM;\r\n CoursesRouter.permissionsDelegationRoute = \"/courses/permissionsDelegation/:\" + CoursesRouter.COURSE_ID_PARAM;\r\n CoursesRouter.surveyResultsRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/surveys\";\r\n CoursesRouter.notificationTemplatesDetailRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/notifications\";\r\n CoursesRouter.notificationTemplatesEditRoute = \"/courses/update/:\" + CoursesRouter.COURSE_ID_PARAM + \"/notification/:\" + CoursesRouter.NOTIFICATION_TEMPLATE_ID_PARAM;\r\n CoursesRouter.flashcardResultsRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/flashcards\";\r\n CoursesRouter.gamificationDetailRoute = (\"/courses/:\" + CoursesRouter.COURSE_ID_PARAM) + \"/gamification\";\r\n return CoursesRouter;\r\n})();\r\nexports.CoursesRouter = CoursesRouter;\r\n},{\"../utils/StringBuilder\":525}],469:[function(require,module,exports){\nvar ExportRouter = (function () {\r\n function ExportRouter() {\r\n }\r\n ExportRouter.prototype.indexUrl = function () {\r\n return ExportRouter.exportRoute;\r\n };\r\n ExportRouter.NAME = \"urls.ExportRouter\";\r\n ExportRouter.indexRoute = \"/import-export\";\r\n ExportRouter.exportRoute = \"/import-export/export\";\r\n return ExportRouter;\r\n})();\r\nexports.ExportRouter = ExportRouter;\r\n},{}],470:[function(require,module,exports){\nvar ExternalResourcesRouter = (function () {\r\n function ExternalResourcesRouter() {\r\n }\r\n ExternalResourcesRouter.prototype.zoomUrl = function () {\r\n return ExternalResourcesRouter.zoomRoute;\r\n };\r\n ExternalResourcesRouter.NAME = \"urls.ExternalRouter\";\r\n ExternalResourcesRouter.zoomRoute = \"/externalResources/zoom\";\r\n return ExternalResourcesRouter;\r\n})();\r\nexports.ExternalResourcesRouter = ExternalResourcesRouter;\r\n},{}],471:[function(require,module,exports){\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar FinancesRouter = (function () {\r\n function FinancesRouter() {\r\n }\r\n FinancesRouter.prototype.productsCatalogUrl = function () {\r\n return FinancesRouter.productsCatalogRoute;\r\n };\r\n FinancesRouter.prototype.productDetailsUrl = function (productId) {\r\n return StringBuilder_1.StringBuilder.interpolate(FinancesRouter.productDetailsRoute)\r\n .with(':' + FinancesRouter.PRODUCT_ID_PARAM, productId)\r\n .build();\r\n };\r\n FinancesRouter.prototype.purchasedOrderUrl = function (orderId) {\r\n return StringBuilder_1.StringBuilder.interpolate(FinancesRouter.purchasedOrderRoute)\r\n .with(':' + FinancesRouter.ORDER_ID_PARAM, orderId)\r\n .build();\r\n };\r\n FinancesRouter.prototype.nacePurchasedOrderUrl = function (orderId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(FinancesRouter.nacePurchasedOrderRoute)\r\n .with(':' + FinancesRouter.ORDER_ID_PARAM, orderId.toString())\r\n .build();\r\n };\r\n FinancesRouter.prototype.purchasedProductUrl = function (purchasedProductId) {\r\n return StringBuilder_1.StringBuilder.interpolate(FinancesRouter.purchasedProductRoute)\r\n .with(':' + FinancesRouter.PURCHASED_PRODUCT_ID_PARAM, purchasedProductId)\r\n .build();\r\n };\r\n FinancesRouter.prototype.orderProductsUrl = function (orderId) {\r\n return StringBuilder_1.StringBuilder.interpolate(FinancesRouter.orderProductsRoute)\r\n .with(':' + FinancesRouter.ORDER_ID_PARAM, orderId)\r\n .build();\r\n };\r\n FinancesRouter.prototype.productEditUrl = function (productId) {\r\n return StringBuilder_1.StringBuilder.interpolate(FinancesRouter.productEditRoute)\r\n .with(':' + FinancesRouter.PRODUCT_ID_PARAM, productId)\r\n .build();\r\n };\r\n FinancesRouter.prototype.referencedObjectProductEditUrl = function (productId, objectType, objectId) {\r\n return StringBuilder_1.StringBuilder.interpolate(FinancesRouter.referencedObjectProductEditRoute)\r\n .with(':' + FinancesRouter.PRODUCT_ID_PARAM, productId)\r\n .with(':' + FinancesRouter.OBJECT_TYPE_PARAM, objectType)\r\n .with(':' + FinancesRouter.OBJECT_ID_PARAM, objectId)\r\n .build();\r\n };\r\n FinancesRouter.prototype.productANetCommunicatorUrl = function () {\r\n return FinancesRouter.productANetCommunicatorRoute;\r\n };\r\n FinancesRouter.prototype.getProductANetCommunicatorUrlByUrl = function (url) {\r\n var baseDomain = url.split(\"://\")[0] + \"://\" + url.split(\"://\")[1].split(\"/\")[0];\r\n if (url.indexOf(\"client\") > 0) {\r\n baseDomain += \"/client\";\r\n }\r\n else if (url.indexOf(\"app.html\") > 0) {\r\n baseDomain += \"/app.html\";\r\n }\r\n return baseDomain + FinancesRouter.productANetCommunicatorRoute;\r\n };\r\n FinancesRouter.NAME = \"urls.FinancesRouter\";\r\n FinancesRouter.ORDER_ID_PARAM = \"orderId\";\r\n FinancesRouter.PURCHASED_PRODUCT_ID_PARAM = \"purchasedProductId\";\r\n FinancesRouter.PRODUCT_ID_PARAM = \"productId\";\r\n FinancesRouter.OBJECT_TYPE_PARAM = \"objectType\";\r\n FinancesRouter.OBJECT_ID_PARAM = \"objectId\";\r\n FinancesRouter.ANET_TRANSACTION_ID_PARAM = \"transId\";\r\n FinancesRouter.productsCatalogRoute = \"/catalog\";\r\n FinancesRouter.productDetailsRoute = \"/catalog/:\" + FinancesRouter.PRODUCT_ID_PARAM;\r\n FinancesRouter.purchasedOrderRoute = \"/finance/purchased_order/:\" + FinancesRouter.ORDER_ID_PARAM;\r\n FinancesRouter.nacePurchasedOrderRoute = \"/nace/:\" + FinancesRouter.ORDER_ID_PARAM;\r\n FinancesRouter.purchasedProductRoute = \"/finance/purchased_product/:\" + FinancesRouter.PURCHASED_PRODUCT_ID_PARAM;\r\n FinancesRouter.orderProductsRoute = \"/finance/orders/:\" + FinancesRouter.ORDER_ID_PARAM;\r\n FinancesRouter.productEditRoute = \"/finance/products/:\" + FinancesRouter.PRODUCT_ID_PARAM;\r\n FinancesRouter.referencedObjectProductEditRoute = (\"/finance/products/:\" + FinancesRouter.PRODUCT_ID_PARAM) +\r\n (\"?objectType=:\" + FinancesRouter.OBJECT_TYPE_PARAM) + (\"&objectId=:\" + FinancesRouter.OBJECT_ID_PARAM);\r\n FinancesRouter.productANetCommunicatorRoute = \"/authorizeCommunicator.html\";\r\n return FinancesRouter;\r\n})();\r\nexports.FinancesRouter = FinancesRouter;\r\n},{\"../utils/StringBuilder\":525}],472:[function(require,module,exports){\nvar StringBuilder_1 = require(\"./../utils/StringBuilder\");\r\nvar GamificationRouter = (function () {\r\n function GamificationRouter() {\r\n }\r\n GamificationRouter.prototype.programsUrl = function () {\r\n return GamificationRouter.gameProgramsRoute;\r\n };\r\n GamificationRouter.prototype.editProgramUrl = function (programId) {\r\n return StringBuilder_1.StringBuilder.interpolate(GamificationRouter.gameProgramEditRoute)\r\n .with(':' + GamificationRouter.PROGRAM_ID_PARAM, programId.toString())\r\n .build();\r\n };\r\n GamificationRouter.prototype.createProgramUrl = function () {\r\n return GamificationRouter.gameProgramCreateRoute;\r\n };\r\n GamificationRouter.prototype.badgesUrl = function () {\r\n return GamificationRouter.badgesRoute;\r\n };\r\n GamificationRouter.prototype.createUrl = function () {\r\n return GamificationRouter.createRoute;\r\n };\r\n GamificationRouter.prototype.editUrl = function (badgeId) {\r\n return GamificationRouter.editRoute.replace(\":\" + GamificationRouter.BADGE_ID_PARAM, badgeId.toString());\r\n };\r\n GamificationRouter.prototype.actionBadgesEditUrl = function (badgeId) {\r\n return GamificationRouter.actionBadgesEditRoute.replace(\":\" + GamificationRouter.BADGE_ID_PARAM, badgeId.toString());\r\n };\r\n GamificationRouter.prototype.actionBadgesViewUrl = function (badgeId) {\r\n return GamificationRouter.actionBadgesViewRoute.replace(\":\" + GamificationRouter.BADGE_ID_PARAM, badgeId.toString());\r\n };\r\n GamificationRouter.prototype.indexUrl = function () {\r\n return GamificationRouter.indexRoute;\r\n };\r\n GamificationRouter.prototype.toggleGameActiveUrl = function (gameId) {\r\n return StringBuilder_1.StringBuilder.interpolate(GamificationRouter.gameProgramEditRoute)\r\n .with(':' + GamificationRouter.PROGRAM_ID_PARAM, gameId.toString())\r\n .build();\r\n };\r\n GamificationRouter.prototype.templatesUrl = function () {\r\n return GamificationRouter.badgeTemplatesRoute;\r\n };\r\n GamificationRouter.prototype.templateEditUrl = function (templateId, businessUnitId) {\r\n var editUrl = StringBuilder_1.StringBuilder.interpolate(GamificationRouter.badgeTemplateEditRoute)\r\n .with(':' + GamificationRouter.TEMPLATE_ID_PARAM, templateId.toString())\r\n .build();\r\n if (businessUnitId) {\r\n editUrl += \"?\" + GamificationRouter.BUSINESS_UNIT_ID_PARAM + \"=\" + businessUnitId.toString();\r\n }\r\n return editUrl;\r\n };\r\n GamificationRouter.NAME = \"urls.GamificationRouter\";\r\n GamificationRouter.PROGRAM_ID_PARAM = 'programId';\r\n GamificationRouter.BADGE_ID_PARAM = \"badgeId\";\r\n GamificationRouter.TEMPLATE_ID_PARAM = \"templateId\";\r\n GamificationRouter.BUSINESS_UNIT_ID_PARAM = \"businessUnitId\";\r\n GamificationRouter.gameProgramsRoute = '/gamification/programs';\r\n GamificationRouter.gameProgramEditRoute = \"/gamification/edit/:\" + GamificationRouter.PROGRAM_ID_PARAM;\r\n GamificationRouter.gameProgramCreateRoute = '/gamification/create';\r\n GamificationRouter.indexRoute = \"/gamification\";\r\n GamificationRouter.badgesRoute = \"/gamification/badges\";\r\n GamificationRouter.editRoute = \"/gamification/badges/:badgeId/edit\";\r\n GamificationRouter.actionBadgesEditRoute = \"/gamification/actionBadges/:badgeId/edit\";\r\n GamificationRouter.actionBadgesViewRoute = \"/gamification/actionBadges/:badgeId/view\";\r\n GamificationRouter.createRoute = \"/gamification/badges/new\";\r\n GamificationRouter.toggleActiveRoute = \"gamification/game/:\" + GamificationRouter.PROGRAM_ID_PARAM + \"/toggleActive\";\r\n GamificationRouter.badgeTemplatesRoute = \"/gamification/badges/templates\";\r\n GamificationRouter.badgeTemplateEditRoute = \"/gamification/badges/templates/:\" + GamificationRouter.TEMPLATE_ID_PARAM + \"/edit\";\r\n return GamificationRouter;\r\n})();\r\nexports.GamificationRouter = GamificationRouter;\r\n},{\"./../utils/StringBuilder\":525}],473:[function(require,module,exports){\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar HomeRouter = (function () {\r\n function HomeRouter() {\r\n }\r\n HomeRouter.prototype.indexUrl = function (role) {\r\n return this.addRoleRouteParam(HomeRouter.indexRoute, role);\r\n };\r\n HomeRouter.prototype.coursesUrl = function (role) {\r\n return this.addRoleRouteParam(HomeRouter.homeCoursesRoute, role);\r\n };\r\n HomeRouter.prototype.authorCoursesUrl = function () {\r\n return HomeRouter.authorCoursesRoute;\r\n };\r\n HomeRouter.prototype.learningPathsUrl = function (role) {\r\n return this.addRoleRouteParam(HomeRouter.homeLearningPathsRoute, role);\r\n };\r\n HomeRouter.prototype.authorLearningPathsUrl = function () {\r\n return HomeRouter.authorLearningPathsRoute;\r\n };\r\n HomeRouter.prototype.authorQuizzesUrl = function () {\r\n return HomeRouter.authorQuizzesRoute;\r\n };\r\n HomeRouter.prototype.authorSurveysUrl = function () {\r\n return HomeRouter.authorSurveysRoute;\r\n };\r\n HomeRouter.prototype.authorFlashcardsUrl = function () {\r\n return HomeRouter.authorFlashcardsRoute;\r\n };\r\n HomeRouter.prototype.authorMaterialsUrl = function () {\r\n return HomeRouter.authorMaterialsRoute;\r\n };\r\n HomeRouter.prototype.authorReportsUrl = function () {\r\n return HomeRouter.authorReportsRoute;\r\n };\r\n HomeRouter.prototype.materialsUrl = function (role) {\r\n return this.addRoleRouteParam(HomeRouter.homeMaterialsRoute, role);\r\n };\r\n HomeRouter.prototype.flashcardsUrl = function (role) {\r\n return this.addRoleRouteParam(HomeRouter.homeFlashcardsRoute, role);\r\n };\r\n HomeRouter.prototype.reportsUrl = function (role) {\r\n return this.addRoleRouteParam(HomeRouter.homeReportsRoute, role);\r\n };\r\n HomeRouter.prototype.administrationMenuUrl = function () {\r\n return HomeRouter.administrationMenuRoute;\r\n };\r\n HomeRouter.prototype.authorMenuUrl = function () {\r\n return HomeRouter.authorMenuRoute;\r\n };\r\n HomeRouter.prototype.administrationReportsUrl = function () {\r\n return HomeRouter.administrationReportsRoute;\r\n };\r\n HomeRouter.prototype.attendeeManagerHomeUrl = function (learningPathCount) {\r\n return learningPathCount && learningPathCount > 0 ? HomeRouter.attendeeManagerLearningPathsRoute : HomeRouter.attendeeManagerCoursesRoute;\r\n };\r\n HomeRouter.prototype.participantsUrl = function (modelType) {\r\n if (modelType) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(HomeRouter.participantsTypeRoute)\r\n .with(':' + HomeRouter.PARTICIPANTS_PARAM, modelType)\r\n .build();\r\n }\r\n return HomeRouter.participantsRoute;\r\n };\r\n HomeRouter.prototype.attendeeManagerCoursesUrl = function () {\r\n return HomeRouter.attendeeManagerCoursesRoute;\r\n };\r\n HomeRouter.prototype.attendeeManagerLearningPathsUrl = function () {\r\n return HomeRouter.attendeeManagerLearningPathsRoute;\r\n };\r\n HomeRouter.prototype.attendeeManagerReportsUrl = function () {\r\n return HomeRouter.attendeeManagerReportsRoute;\r\n };\r\n HomeRouter.prototype.instructorHomeUrl = function (learningPathCount) {\r\n return learningPathCount && learningPathCount > 0 ? HomeRouter.instructorLearningPathsRoute : HomeRouter.instructorCoursesRoute;\r\n };\r\n HomeRouter.prototype.instructorCoursesUrl = function () {\r\n return HomeRouter.instructorCoursesRoute;\r\n };\r\n HomeRouter.prototype.instructorLearningPathsUrl = function () {\r\n return HomeRouter.instructorLearningPathsRoute;\r\n };\r\n HomeRouter.prototype.instructorReportsUrl = function () {\r\n return HomeRouter.instructorReportsRoute;\r\n };\r\n HomeRouter.prototype.addRoleRouteParam = function (route, role) {\r\n if (role) {\r\n route += \"?\" + HomeRouter.roleParam + \"=\" + role;\r\n }\r\n return route;\r\n };\r\n HomeRouter.NAME = \"urls.HomeRouter\";\r\n HomeRouter.roleParam = \"role\";\r\n HomeRouter.indexRoute = '/home';\r\n HomeRouter.homeCoursesRoute = '/home/courses';\r\n HomeRouter.homeLearningPathsRoute = '/home/learningPaths';\r\n HomeRouter.homeMaterialsRoute = '/home/materials';\r\n HomeRouter.homeFlashcardsRoute = '/home/flashcards';\r\n HomeRouter.homeReportsRoute = '/home/reports';\r\n HomeRouter.administrationMenuRoute = '/home/administration/menu';\r\n HomeRouter.administrationReportsRoute = '/home/administration/reports';\r\n HomeRouter.authorMenuRoute = '/home/author/courses';\r\n HomeRouter.authorCoursesRoute = '/home/author/courses';\r\n HomeRouter.authorLearningPathsRoute = '/home/author/learningPaths';\r\n HomeRouter.authorQuizzesRoute = '/home/author/quizzes';\r\n HomeRouter.authorSurveysRoute = '/home/author/surveys';\r\n HomeRouter.authorFlashcardsRoute = '/home/author/flashcards';\r\n HomeRouter.authorMaterialsRoute = '/home/author/materials';\r\n HomeRouter.authorReportsRoute = '/home/author/reports';\r\n HomeRouter.PARTICIPANTS_PARAM = \"ptcp\";\r\n HomeRouter.PARTICIPANTS_GROUP_PARAM = \"group\";\r\n HomeRouter.PARTICIPANT_TYPE_COURSES = \"courses\";\r\n HomeRouter.PARTICIPANT_TYPE_LP = \"learningPaths\";\r\n HomeRouter.attendeeManagerCoursesRoute = '/home/attendeeManager/courses';\r\n HomeRouter.attendeeManagerLearningPathsRoute = '/home/attendeeManager/learningPaths';\r\n HomeRouter.attendeeManagerReportsRoute = '/home/attendeeManager/reports';\r\n HomeRouter.instructorCoursesRoute = '/home/instructor/courses';\r\n HomeRouter.instructorLearningPathsRoute = '/home/instructor/learningPaths';\r\n HomeRouter.instructorReportsRoute = '/home/instructor/reports';\r\n HomeRouter.participantsRoute = '/home/progress';\r\n HomeRouter.participantsTypeRoute = \"/home/progress?ptcp=:\" + HomeRouter.PARTICIPANTS_PARAM;\r\n return HomeRouter;\r\n})();\r\nexports.HomeRouter = HomeRouter;\r\n},{\"../utils/StringBuilder\":525}],474:[function(require,module,exports){\nvar ImportRouter = (function () {\r\n function ImportRouter() {\r\n }\r\n ImportRouter.prototype.indexUrl = function () {\r\n return ImportRouter.importRoute;\r\n };\r\n ImportRouter.NAME = \"urls.ImportRouter\";\r\n ImportRouter.indexRoute = \"/import-export\";\r\n ImportRouter.importRoute = \"/import-export/import\";\r\n return ImportRouter;\r\n})();\r\nexports.ImportRouter = ImportRouter;\r\n},{}],475:[function(require,module,exports){\nvar InfoRouter = (function () {\r\n function InfoRouter() {\r\n }\r\n InfoRouter.prototype.aboutProjectUrl = function () {\r\n return InfoRouter.aboutProjectRoute;\r\n };\r\n InfoRouter.prototype.aboutCompanyUrl = function () {\r\n return InfoRouter.aboutCompanyRoute;\r\n };\r\n InfoRouter.prototype.faqUrl = function () {\r\n return InfoRouter.faqRoute;\r\n };\r\n InfoRouter.prototype.contactsUrl = function () {\r\n return InfoRouter.contactsRoute;\r\n };\r\n InfoRouter.prototype.accessibilityUrl = function () {\r\n return InfoRouter.accessibilityRoute;\r\n };\r\n InfoRouter.NAME = \"urls.InfoRouter\";\r\n InfoRouter.aboutProjectRoute = \"/info/about/project\";\r\n InfoRouter.aboutCompanyRoute = \"/info/about/company\";\r\n InfoRouter.faqRoute = \"/info/faq\";\r\n InfoRouter.contactsRoute = \"/info/contacts\";\r\n InfoRouter.accessibilityRoute = \"/info/accessibility\";\r\n return InfoRouter;\r\n})();\r\nexports.InfoRouter = InfoRouter;\r\n},{}],476:[function(require,module,exports){\nvar JobsRouter = (function () {\r\n function JobsRouter() {\r\n }\r\n JobsRouter.prototype.jobsUrl = function () {\r\n return JobsRouter.jobsRoute;\r\n };\r\n JobsRouter.NAME = \"jobs.JobsRouter\";\r\n JobsRouter.jobsRoute = \"/jobs\";\r\n return JobsRouter;\r\n})();\r\nexports.JobsRouter = JobsRouter;\r\n},{}],477:[function(require,module,exports){\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar LearningPathsRouter = (function () {\r\n function LearningPathsRouter() {\r\n }\r\n LearningPathsRouter.prototype.indexPurchasedOrderUrl = function (purchasedOrderId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(LearningPathsRouter.indexPurchasedOrderRoute)\r\n .with(':' + LearningPathsRouter.PURCHASED_ORDER, purchasedOrderId)\r\n .build();\r\n };\r\n LearningPathsRouter.prototype.indexUrl = function () {\r\n return LearningPathsRouter.indexRoute;\r\n };\r\n LearningPathsRouter.prototype.createUrl = function () {\r\n return LearningPathsRouter.createRoute;\r\n };\r\n LearningPathsRouter.prototype.updateUrl = function (learningPathId) {\r\n return StringBuilder_1.StringBuilder.interpolate(LearningPathsRouter.updateRoute)\r\n .with(':' + LearningPathsRouter.LEARNING_PATH_ID_PARAM, learningPathId.toString())\r\n .build();\r\n };\r\n LearningPathsRouter.prototype.relatedProductsUpdateUrl = function (learningPathId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(LearningPathsRouter.relatedProductsUpdateRoute)\r\n .with(':' + LearningPathsRouter.LEARNING_PATH_ID_PARAM, learningPathId.toString())\r\n .build();\r\n };\r\n LearningPathsRouter.prototype.permissionsUpdateUrl = function (learningPathId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(LearningPathsRouter.permissionsUpdateRoute)\r\n .with(':' + LearningPathsRouter.LEARNING_PATH_ID_PARAM, learningPathId.toString())\r\n .build();\r\n };\r\n LearningPathsRouter.prototype.detailsUrl = function (learningPathId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(LearningPathsRouter.detailsRoute)\r\n .with(':' + LearningPathsRouter.LEARNING_PATH_ID_PARAM, learningPathId.toString())\r\n .build();\r\n };\r\n LearningPathsRouter.prototype.progressUrl = function (learningPathId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(LearningPathsRouter.progressRoute)\r\n .with(':' + LearningPathsRouter.LEARNING_PATH_ID_PARAM, learningPathId.toString())\r\n .build();\r\n };\r\n LearningPathsRouter.prototype.progressUrlForUser = function (learningPathId, userId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(LearningPathsRouter.progressRouteUser)\r\n .with(':' + LearningPathsRouter.LEARNING_PATH_ID_PARAM, learningPathId.toString())\r\n .with(':' + LearningPathsRouter.USER_ID_PARAM, userId.toString())\r\n .build();\r\n };\r\n LearningPathsRouter.prototype.participationFormUpdateUrl = function (learningPathId) {\r\n return StringBuilder_1.StringBuilder.interpolate(LearningPathsRouter.participationFormUpdateRoute)\r\n .with(':' + LearningPathsRouter.LEARNING_PATH_ID_PARAM, learningPathId.toString())\r\n .build();\r\n };\r\n LearningPathsRouter.prototype.participationFormFillUrl = function (learningPathId) {\r\n return StringBuilder_1.StringBuilder.interpolate(LearningPathsRouter.participationFormFillRoute)\r\n .with(':' + LearningPathsRouter.LEARNING_PATH_ID_PARAM, learningPathId.toString())\r\n .build();\r\n };\r\n LearningPathsRouter.prototype.permissionsDelegationUrl = function (learningPathId) {\r\n return StringBuilder_1.StringBuilder.interpolate(LearningPathsRouter.permissionsDelegationRoute)\r\n .with(':' + LearningPathsRouter.LEARNING_PATH_ID_PARAM, learningPathId.toString())\r\n .build();\r\n };\r\n LearningPathsRouter.prototype.gamificationDetailsUrl = function (learningPathId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(LearningPathsRouter.gamificationDetailRoute)\r\n .with(':' + LearningPathsRouter.LEARNING_PATH_ID_PARAM, learningPathId.toString())\r\n .build();\r\n };\r\n LearningPathsRouter.NAME = \"urls.LearningPathsRouter\";\r\n LearningPathsRouter.LEARNING_PATH_ID_PARAM = \"learningPathId\";\r\n LearningPathsRouter.PURCHASED_ORDER = \"purchasedOrder\";\r\n LearningPathsRouter.USER_ID_PARAM = \"userId\";\r\n LearningPathsRouter.indexRoute = \"/learningPaths\";\r\n LearningPathsRouter.indexPurchasedRoute = \"/learningPaths/purchased\";\r\n LearningPathsRouter.indexPurchasedOrderRoute = \"/learningPaths/purchased\" +\r\n (\"?purchasedOrder=:\" + LearningPathsRouter.PURCHASED_ORDER);\r\n LearningPathsRouter.detailsRoute = \"/learningPaths/:\" + LearningPathsRouter.LEARNING_PATH_ID_PARAM;\r\n LearningPathsRouter.createRoute = \"/learningPaths/create\";\r\n LearningPathsRouter.updateRoute = \"/learningPaths/update/:\" + LearningPathsRouter.LEARNING_PATH_ID_PARAM;\r\n LearningPathsRouter.relatedProductsUpdateRoute = (\"/learningPaths/update/:\" + LearningPathsRouter.LEARNING_PATH_ID_PARAM) + \"/relatedProducts\";\r\n LearningPathsRouter.permissionsUpdateRoute = (\"/learningPaths/update/:\" + LearningPathsRouter.LEARNING_PATH_ID_PARAM) + \"/permissions\";\r\n LearningPathsRouter.progressRoute = (\"/learningPaths/:\" + LearningPathsRouter.LEARNING_PATH_ID_PARAM) + \"/progress\";\r\n LearningPathsRouter.progressRouteUser = \"/learningPaths/:\" + LearningPathsRouter.LEARNING_PATH_ID_PARAM + \"/progress?userId=:\" + LearningPathsRouter.USER_ID_PARAM;\r\n LearningPathsRouter.participationFormUpdateRoute = (\"/learningPaths/update/:\" + LearningPathsRouter.LEARNING_PATH_ID_PARAM) + \"/participationForm\";\r\n LearningPathsRouter.participationFormFillRoute = (\"/learningPaths/fill/:\" + LearningPathsRouter.LEARNING_PATH_ID_PARAM) + \"/participationForm\";\r\n LearningPathsRouter.permissionsDelegationRoute = \"/learningPaths/permissionsDelegation/:\" + LearningPathsRouter.LEARNING_PATH_ID_PARAM;\r\n LearningPathsRouter.gamificationDetailRoute = (\"/learningPaths/:\" + LearningPathsRouter.LEARNING_PATH_ID_PARAM) + \"/gamification\";\r\n return LearningPathsRouter;\r\n})();\r\nexports.LearningPathsRouter = LearningPathsRouter;\r\n},{\"../utils/StringBuilder\":525}],478:[function(require,module,exports){\nvar LogsRouter = (function () {\r\n function LogsRouter() {\r\n }\r\n LogsRouter.prototype.systemLogsUrl = function () {\r\n return LogsRouter.systemLogsRoute;\r\n };\r\n LogsRouter.prototype.securityLogsUrl = function () {\r\n return LogsRouter.securityLogsRoute;\r\n };\r\n LogsRouter.NAME = \"urls.LogsRouter\";\r\n LogsRouter.securityLogsRoute = \"/logs/security\";\r\n LogsRouter.systemLogsRoute = \"/logs/system\";\r\n return LogsRouter;\r\n})();\r\nexports.LogsRouter = LogsRouter;\r\n},{}],479:[function(require,module,exports){\nvar MainRouter = (function () {\r\n function MainRouter() {\r\n }\r\n MainRouter.prototype.mainUrl = function () {\r\n return MainRouter.mainRoute;\r\n };\r\n MainRouter.NAME = \"urls.MainRouter\";\r\n MainRouter.mainRoute = \"/\";\r\n return MainRouter;\r\n})();\r\nexports.MainRouter = MainRouter;\r\n},{}],480:[function(require,module,exports){\nvar StringBuilder_1 = require(\"./../utils/StringBuilder\");\r\nvar MaterialsRouter = (function () {\r\n function MaterialsRouter() {\r\n }\r\n MaterialsRouter.prototype.indexUrl = function () {\r\n return MaterialsRouter.indexRoute;\r\n };\r\n MaterialsRouter.prototype.indexPurchasedOrderUrl = function (purchasedOrderId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(MaterialsRouter.indexPurchasedOrderRoute)\r\n .with(':' + MaterialsRouter.PURCHASED_ORDER, purchasedOrderId)\r\n .build();\r\n };\r\n MaterialsRouter.prototype.watchUrl = function (fileId) {\r\n return StringBuilder_1.StringBuilder.interpolate(MaterialsRouter.materialRoute)\r\n .with(':' + MaterialsRouter.MATERIAL_ID_PARAM, fileId.toString())\r\n .build();\r\n };\r\n MaterialsRouter.prototype.myDownloadsUrl = function () {\r\n return MaterialsRouter.myDownloadsRoute;\r\n };\r\n MaterialsRouter.prototype.createUrl = function () {\r\n return MaterialsRouter.createRoute;\r\n };\r\n MaterialsRouter.prototype.playlistsUrl = function () {\r\n return MaterialsRouter.playlistsRoute;\r\n };\r\n MaterialsRouter.prototype.playlistDetailsUrl = function (playlistId) {\r\n return StringBuilder_1.StringBuilder.interpolate(MaterialsRouter.playlistDetailsRoute)\r\n .with(':' + MaterialsRouter.PLAYLIST_ID_PARAM, playlistId.toString())\r\n .build();\r\n };\r\n MaterialsRouter.prototype.playlistEditUrl = function (playlistId) {\r\n return StringBuilder_1.StringBuilder.interpolate(MaterialsRouter.playlistEditRoute)\r\n .with(':' + MaterialsRouter.PLAYLIST_ID_PARAM, playlistId.toString())\r\n .build();\r\n };\r\n MaterialsRouter.prototype.playlistCreateUrl = function () {\r\n return MaterialsRouter.playlistCreateRoute;\r\n };\r\n MaterialsRouter.prototype.updateUrl = function (materialId) {\r\n return StringBuilder_1.StringBuilder.interpolate(MaterialsRouter.updateRoute)\r\n .with(':' + MaterialsRouter.MATERIAL_ID_PARAM, materialId.toString())\r\n .build();\r\n };\r\n MaterialsRouter.prototype.relatedProductsUpdateUrl = function (materialId) {\r\n return StringBuilder_1.StringBuilder.interpolate(MaterialsRouter.relatedProductsUpdateRoute)\r\n .with(':' + MaterialsRouter.MATERIAL_ID_PARAM, materialId.toString())\r\n .build();\r\n };\r\n MaterialsRouter.prototype.permissionsUpdateUrl = function (materialId) {\r\n return StringBuilder_1.StringBuilder.interpolate(MaterialsRouter.permissionsUpdateRoute)\r\n .with(':' + MaterialsRouter.MATERIAL_ID_PARAM, materialId.toString())\r\n .build();\r\n };\r\n MaterialsRouter.NAME = \"urls.MaterialsRouter\";\r\n MaterialsRouter.MATERIAL_ID_PARAM = \"materialId\";\r\n MaterialsRouter.PLAYLIST_ID_PARAM = \"playlistId\";\r\n MaterialsRouter.PURCHASED_ORDER = \"purchasedOrder\";\r\n MaterialsRouter.indexRoute = \"/materials/search\";\r\n MaterialsRouter.indexPurchasedRoute = \"/materials/search/purchased\";\r\n MaterialsRouter.indexPurchasedOrderRoute = \"/materials/search/purchased\" +\r\n (\"?purchasedOrder=:\" + MaterialsRouter.PURCHASED_ORDER);\r\n MaterialsRouter.materialRoute = \"/materials/:\" + MaterialsRouter.MATERIAL_ID_PARAM;\r\n MaterialsRouter.myDownloadsRoute = \"/materials/my/downloads\";\r\n MaterialsRouter.createRoute = \"/materials/create\";\r\n MaterialsRouter.playlistsRoute = \"/materials/playlists\";\r\n MaterialsRouter.playlistCreateRoute = \"/materials/playlists/create\";\r\n MaterialsRouter.playlistDetailsRoute = \"/materials/playlists/:\" + MaterialsRouter.PLAYLIST_ID_PARAM;\r\n MaterialsRouter.playlistEditRoute = \"/materials/playlists/:\" + MaterialsRouter.PLAYLIST_ID_PARAM + \"/edit\";\r\n MaterialsRouter.updateRoute = \"/materials/update/:\" + MaterialsRouter.MATERIAL_ID_PARAM;\r\n MaterialsRouter.relatedProductsUpdateRoute = (\"/materials/update/:\" + MaterialsRouter.MATERIAL_ID_PARAM) + \"/relatedProducts\";\r\n MaterialsRouter.permissionsUpdateRoute = (\"/materials/update/:\" + MaterialsRouter.MATERIAL_ID_PARAM) + \"/permissions\";\r\n return MaterialsRouter;\r\n})();\r\nexports.MaterialsRouter = MaterialsRouter;\r\n},{\"./../utils/StringBuilder\":525}],481:[function(require,module,exports){\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar NewsRouter = (function () {\r\n function NewsRouter() {\r\n }\r\n NewsRouter.prototype.newsSearchUrl = function (newsType) {\r\n return StringBuilder_1.StringBuilder.interpolate(NewsRouter.newsSearchRoute)\r\n .with(':' + NewsRouter.NEWS_TYPE_PARAM, newsType.toLowerCase())\r\n .build();\r\n };\r\n NewsRouter.prototype.oneNewsUrl = function (newsId) {\r\n return StringBuilder_1.StringBuilder.interpolate(NewsRouter.oneNewsRoute)\r\n .with(':' + NewsRouter.ONE_NEWS_ID_PARAM, newsId)\r\n .build();\r\n };\r\n NewsRouter.prototype.oneNewsEditUrl = function (newsId) {\r\n return StringBuilder_1.StringBuilder.interpolate(NewsRouter.oneNewsEditRoute)\r\n .with(':' + NewsRouter.ONE_NEWS_ID_PARAM, newsId)\r\n .build();\r\n };\r\n NewsRouter.prototype.oneNewsCreateUrl = function (newsType) {\r\n return StringBuilder_1.StringBuilder.interpolate(NewsRouter.oneNewsCreateRoute)\r\n .with(\":\" + NewsRouter.NEWS_TYPE_PARAM, newsType)\r\n .build();\r\n };\r\n NewsRouter.prototype.helpUrl = function (newsId) {\r\n return StringBuilder_1.StringBuilder.interpolate(NewsRouter.helpRoute)\r\n .with(':' + NewsRouter.ONE_NEWS_ID_PARAM, newsId)\r\n .build();\r\n };\r\n NewsRouter.prototype.helpEditUrl = function (newsId) {\r\n return StringBuilder_1.StringBuilder.interpolate(NewsRouter.helpEditRoute)\r\n .with(':' + NewsRouter.ONE_NEWS_ID_PARAM, newsId)\r\n .build();\r\n };\r\n NewsRouter.NAME = \"urls.NewsRouter\";\r\n NewsRouter.ONE_NEWS_ID_PARAM = \"newsId\";\r\n NewsRouter.NEWS_TYPE_PARAM = \"newsType\";\r\n NewsRouter.newsSearchRoute = \"/news/search/:\" + NewsRouter.NEWS_TYPE_PARAM;\r\n NewsRouter.oneNewsCreateRoute = \"/news/:\" + NewsRouter.NEWS_TYPE_PARAM + \"/create\";\r\n NewsRouter.oneNewsRoute = \"/news/:\" + NewsRouter.ONE_NEWS_ID_PARAM;\r\n NewsRouter.oneNewsEditRoute = \"/news/:\" + NewsRouter.ONE_NEWS_ID_PARAM + \"/edit\";\r\n NewsRouter.helpRoute = \"/help/:\" + NewsRouter.ONE_NEWS_ID_PARAM;\r\n NewsRouter.helpEditRoute = \"/help/:\" + NewsRouter.ONE_NEWS_ID_PARAM + \"/edit\";\r\n return NewsRouter;\r\n})();\r\nexports.NewsRouter = NewsRouter;\r\n},{\"../utils/StringBuilder\":525}],482:[function(require,module,exports){\nvar NotificationTemplatesRouter = (function () {\r\n function NotificationTemplatesRouter() {\r\n }\r\n NotificationTemplatesRouter.prototype.indexUrl = function () {\r\n return NotificationTemplatesRouter.indexRoute;\r\n };\r\n NotificationTemplatesRouter.prototype.editUrl = function (templateId, businessUnitId) {\r\n var editUrl = NotificationTemplatesRouter.editRoute\r\n .replace(\":\" + NotificationTemplatesRouter.NOTIFICATION_TEMPLATE_ID_PARAM, templateId.toString());\r\n if (businessUnitId) {\r\n editUrl += \"?\" + NotificationTemplatesRouter.NOTIFICATION_BUSINESS_UNIT_PARAM + \"=\" + businessUnitId.toString();\r\n }\r\n return editUrl;\r\n };\r\n NotificationTemplatesRouter.NAME = \"urls.NotificationTemplatesRouter\";\r\n NotificationTemplatesRouter.NOTIFICATION_TEMPLATE_ID_PARAM = \"notificationId\";\r\n NotificationTemplatesRouter.NOTIFICATION_BUSINESS_UNIT_PARAM = \"businessUnitId\";\r\n NotificationTemplatesRouter.indexRoute = \"/notificationTemplates\";\r\n NotificationTemplatesRouter.editRoute = \"/notificationTemplates/:notificationId/edit\";\r\n return NotificationTemplatesRouter;\r\n})();\r\nexports.NotificationTemplatesRouter = NotificationTemplatesRouter;\r\n},{}],483:[function(require,module,exports){\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar PayPalRouter = (function () {\r\n function PayPalRouter() {\r\n }\r\n PayPalRouter.prototype.orderCancellationUrl = function (orderId) {\r\n return StringBuilder_1.StringBuilder.interpolate(PayPalRouter.orderCancellationRoute)\r\n .with(':' + PayPalRouter.ORDER_ID_PARAM, orderId)\r\n .build();\r\n };\r\n PayPalRouter.prototype.orderConfirmationUrl = function (orderId) {\r\n return StringBuilder_1.StringBuilder.interpolate(PayPalRouter.orderConfirmationRoute)\r\n .with(':' + PayPalRouter.ORDER_ID_PARAM, orderId)\r\n .build();\r\n };\r\n PayPalRouter.NAME = \"urls.PayPalRouter\";\r\n PayPalRouter.ORDER_ID_PARAM = \"orderId\";\r\n PayPalRouter.orderCancellationRoute = \"/integration/paypal/orders/:\" + PayPalRouter.ORDER_ID_PARAM + \"/cancel\";\r\n PayPalRouter.orderConfirmationRoute = \"/integration/paypal/orders/:\" + PayPalRouter.ORDER_ID_PARAM + \"/confirm\";\r\n return PayPalRouter;\r\n})();\r\nexports.PayPalRouter = PayPalRouter;\r\n},{\"../utils/StringBuilder\":525}],484:[function(require,module,exports){\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar PersonalRouter = (function () {\r\n function PersonalRouter() {\r\n }\r\n PersonalRouter.prototype.favoritesUrl = function () {\r\n return PersonalRouter.favoritesRoute;\r\n };\r\n PersonalRouter.prototype.uploadsUrl = function () {\r\n return PersonalRouter.uploadsRoute;\r\n };\r\n PersonalRouter.prototype.coursesUrl = function () {\r\n return PersonalRouter.coursesRoute;\r\n };\r\n PersonalRouter.prototype.learningPathsUrl = function () {\r\n return PersonalRouter.learningPathsRoute;\r\n };\r\n PersonalRouter.prototype.certificatesUrl = function () {\r\n return PersonalRouter.certificatesRoute;\r\n };\r\n PersonalRouter.prototype.quizzesUrl = function () {\r\n return PersonalRouter.quizzesRoute;\r\n };\r\n PersonalRouter.prototype.quizDetailsUrl = function (quizId, quizResultId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(PersonalRouter.quizDetailsRoute)\r\n .with(':' + PersonalRouter.QUIZ_ID_PARAM, quizId.toString())\r\n .with(':' + PersonalRouter.QUIZ_RESULT_ID_PARAM, quizResultId.toString())\r\n .build();\r\n };\r\n PersonalRouter.prototype.playlistsUrl = function () {\r\n return PersonalRouter.playlistsRoute;\r\n };\r\n PersonalRouter.prototype.subscriptionsUrl = function () {\r\n return PersonalRouter.subscriptionsRoute;\r\n };\r\n PersonalRouter.prototype.newCommentsUrl = function () {\r\n return PersonalRouter.newCommentsRoute;\r\n };\r\n PersonalRouter.prototype.supportUrl = function () {\r\n return PersonalRouter.supportRoute;\r\n };\r\n PersonalRouter.prototype.couponsUrl = function () {\r\n return PersonalRouter.couponsRoute;\r\n };\r\n PersonalRouter.prototype.settingsUrl = function () {\r\n return PersonalRouter.settingsRoute;\r\n };\r\n PersonalRouter.prototype.expiredCoursesUrl = function () {\r\n return PersonalRouter.expiredCoursesRoute;\r\n };\r\n PersonalRouter.prototype.expiredLearningPathsUrl = function () {\r\n return PersonalRouter.expiredLearningPathsRoute;\r\n };\r\n PersonalRouter.prototype.purchasedOrdersUrl = function () {\r\n return PersonalRouter.purchasedOrdersRoute;\r\n };\r\n PersonalRouter.prototype.creditsUrl = function () {\r\n return PersonalRouter.creditsRoute;\r\n };\r\n PersonalRouter.prototype.calendarUrl = function () {\r\n return PersonalRouter.calendarRoute;\r\n };\r\n PersonalRouter.prototype.assessmentsUrl = function () {\r\n return PersonalRouter.assessmentsRoute;\r\n };\r\n PersonalRouter.prototype.badgesUrl = function () {\r\n return PersonalRouter.badgesRoute;\r\n };\r\n PersonalRouter.NAME = \"urls.PersonalRouter\";\r\n PersonalRouter.QUIZ_ID_PARAM = \"quizId\";\r\n PersonalRouter.QUIZ_RESULT_ID_PARAM = \"quizResultId\";\r\n PersonalRouter.favoritesRoute = \"/personal/favorites\";\r\n PersonalRouter.uploadsRoute = \"/personal/uploads\";\r\n PersonalRouter.coursesRoute = \"/personal/courses\";\r\n PersonalRouter.learningPathsRoute = \"/personal/learningPaths\";\r\n PersonalRouter.certificatesRoute = \"/personal/certificates\";\r\n PersonalRouter.quizzesRoute = \"/personal/quizzes\";\r\n PersonalRouter.quizDetailsRoute = \"/personal/quizzes/:\" + PersonalRouter.QUIZ_ID_PARAM + \"/results/:\" + PersonalRouter.QUIZ_RESULT_ID_PARAM;\r\n PersonalRouter.playlistsRoute = \"/personal/playlists\";\r\n PersonalRouter.subscriptionsRoute = \"/personal/subscriptions\";\r\n PersonalRouter.newCommentsRoute = \"/personal/comments/news\";\r\n PersonalRouter.supportRoute = \"/personal/support\";\r\n PersonalRouter.couponsRoute = \"/personal/coupons\";\r\n PersonalRouter.settingsRoute = \"/personal/settings\";\r\n PersonalRouter.expiredCoursesRoute = \"/personal/expiredCourses\";\r\n PersonalRouter.expiredLearningPathsRoute = \"/personal/expiredLearningPaths\";\r\n PersonalRouter.purchasedOrdersRoute = \"/personal/purchasedOrders\";\r\n PersonalRouter.creditsRoute = \"/personal/credits\";\r\n PersonalRouter.calendarRoute = \"/personal/calendar\";\r\n PersonalRouter.assessmentsRoute = \"/personal/assessments\";\r\n PersonalRouter.badgesRoute = \"/personal/badges\";\r\n return PersonalRouter;\r\n})();\r\nexports.PersonalRouter = PersonalRouter;\r\n},{\"../utils/StringBuilder\":525}],485:[function(require,module,exports){\nvar PoliciesRouter = (function () {\r\n function PoliciesRouter() {\r\n }\r\n PoliciesRouter.prototype.privacyPolicyUrl = function () {\r\n return PoliciesRouter.privacyPolicyRoute;\r\n };\r\n PoliciesRouter.prototype.cookiePolicyUrl = function () {\r\n return PoliciesRouter.cookiePolicyRoute;\r\n };\r\n PoliciesRouter.prototype.termsOfUseUrl = function () {\r\n return PoliciesRouter.termsOfUseRoute;\r\n };\r\n PoliciesRouter.NAME = \"urls.PoliciesRouter\";\r\n PoliciesRouter.privacyPolicyRoute = \"/policies/privacy\";\r\n PoliciesRouter.cookiePolicyRoute = \"/policies/cookie\";\r\n PoliciesRouter.termsOfUseRoute = \"/policies/termsOfUse\";\r\n return PoliciesRouter;\r\n})();\r\nexports.PoliciesRouter = PoliciesRouter;\r\n},{}],486:[function(require,module,exports){\nvar StringBuilder_1 = require(\"./../utils/StringBuilder\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar QuizzesRouter = (function () {\r\n function QuizzesRouter() {\r\n }\r\n QuizzesRouter.prototype.quizzesIndexUrl = function () {\r\n return QuizzesRouter.quizzesIndexRoute;\r\n };\r\n QuizzesRouter.prototype.surveysIndexUrl = function () {\r\n return QuizzesRouter.surveysIndexRoute;\r\n };\r\n QuizzesRouter.prototype.flashcardsIndexUrl = function () {\r\n return QuizzesRouter.flashcardsIndexRoute;\r\n };\r\n QuizzesRouter.prototype.createUrl = function (quizType) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(QuizzesRouter.createRoute)\r\n .with(':' + QuizzesRouter.QUIZ_TYPE, quizType)\r\n .build();\r\n };\r\n QuizzesRouter.prototype.quizzesDetailsUrl = function (quizId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(QuizzesRouter.quizzesDetailsRoute)\r\n .with(':' + QuizzesRouter.QUIZ_ID_PARAM, quizId.toString())\r\n .build();\r\n };\r\n QuizzesRouter.prototype.quizzesUpdateUrl = function (quizId) {\r\n return StringBuilder_1.StringBuilder.interpolate(QuizzesRouter.quizzesUpdateRoute)\r\n .with(':' + QuizzesRouter.QUIZ_ID_PARAM, quizId.toString())\r\n .build();\r\n };\r\n QuizzesRouter.prototype.surveysDetailsUrl = function (quizId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(QuizzesRouter.surveysDetailsRoute)\r\n .with(':' + QuizzesRouter.QUIZ_ID_PARAM, quizId.toString())\r\n .build();\r\n };\r\n QuizzesRouter.prototype.surveysUpdateUrl = function (quizId) {\r\n return StringBuilder_1.StringBuilder.interpolate(QuizzesRouter.surveysUpdateRoute)\r\n .with(':' + QuizzesRouter.QUIZ_ID_PARAM, quizId.toString())\r\n .build();\r\n };\r\n QuizzesRouter.prototype.flashcardsDetailsUrl = function (quizId) {\r\n return StringBuilder_1.StringBuilder\r\n .interpolate(QuizzesRouter.flashcardsDetailsRoute)\r\n .with(':' + QuizzesRouter.QUIZ_ID_PARAM, quizId.toString())\r\n .build();\r\n };\r\n QuizzesRouter.prototype.flashcardsUpdateUrl = function (quizId) {\r\n return StringBuilder_1.StringBuilder.interpolate(QuizzesRouter.flashcardsUpdateRoute)\r\n .with(':' + QuizzesRouter.QUIZ_ID_PARAM, quizId.toString())\r\n .build();\r\n };\r\n QuizzesRouter.prototype.passingUrl = function (quizId, quizResultId) {\r\n var stringBuilder = StringBuilder_1.StringBuilder.interpolate(QuizzesRouter.quizzesPassingRoute);\r\n if (quizResultId != null) {\r\n stringBuilder.add(\"?\" + QuizzesRouter.QUIZ_RESULT_ID_PARAM + \"=:\" + QuizzesRouter.QUIZ_RESULT_ID_PARAM);\r\n }\r\n stringBuilder.with(':' + QuizzesRouter.QUIZ_ID_PARAM, quizId.toString());\r\n if (quizResultId != null) {\r\n stringBuilder.with(':' + QuizzesRouter.QUIZ_RESULT_ID_PARAM, quizResultId.toString());\r\n }\r\n return stringBuilder.build();\r\n };\r\n QuizzesRouter.prototype.getMenuItem = function (locationPath) {\r\n if (locationPath.indexOf(QuizzesRouter.generalSurveyUrlComponent) !== -1\r\n || locationPath.indexOf(this.createUrl(\"SURVEY\")) !== -1) {\r\n return MenuHelper_1.MenuHelper.EDUCATION_SURVEYS_MENU_KEY;\r\n }\r\n else if (locationPath.indexOf(QuizzesRouter.generalQuizUrlComponent) !== -1\r\n || locationPath.indexOf(this.createUrl(\"QUIZ\")) !== -1) {\r\n return MenuHelper_1.MenuHelper.EDUCATION_QUIZZES_MENU_KEY;\r\n }\r\n else if (locationPath.indexOf(QuizzesRouter.generalFlashcardUrlComponent) !== -1\r\n || locationPath.indexOf(this.createUrl(\"FLASHCARD\")) !== -1) {\r\n return MenuHelper_1.MenuHelper.EDUCATION_FLASHCARDS_MENU_KEY;\r\n }\r\n };\r\n QuizzesRouter.NAME = \"urls.QuizzesRouter\";\r\n QuizzesRouter.QUIZ_ID_PARAM = \"quizId\";\r\n QuizzesRouter.QUIZ_RESULT_ID_PARAM = \"quizResultId\";\r\n QuizzesRouter.QUIZ_TYPE = \"quizType\";\r\n QuizzesRouter.generalQuizUrlComponent = \"/quiz\";\r\n QuizzesRouter.quizzesIndexRoute = \"/quizzes\";\r\n QuizzesRouter.quizzesDetailsRoute = \"/quizzes/:\" + QuizzesRouter.QUIZ_ID_PARAM;\r\n QuizzesRouter.quizzesPassingRoute = \"/quizzes/passing/:\" + QuizzesRouter.QUIZ_ID_PARAM;\r\n QuizzesRouter.quizzesUpdateRoute = \"/quizzes/update/:\" + QuizzesRouter.QUIZ_ID_PARAM;\r\n QuizzesRouter.generalSurveyUrlComponent = \"/survey\";\r\n QuizzesRouter.surveysIndexRoute = \"/surveys\";\r\n QuizzesRouter.surveysDetailsRoute = \"/surveys/:\" + QuizzesRouter.QUIZ_ID_PARAM;\r\n QuizzesRouter.surveysPassingRoute = \"/surveys/passing/:\" + QuizzesRouter.QUIZ_ID_PARAM;\r\n QuizzesRouter.surveysUpdateRoute = \"/surveys/update/:\" + QuizzesRouter.QUIZ_ID_PARAM;\r\n QuizzesRouter.generalFlashcardUrlComponent = \"/flashcards\";\r\n QuizzesRouter.flashcardsIndexRoute = \"/flashcards\";\r\n QuizzesRouter.flashcardsDetailsRoute = \"/flashcards/:\" + QuizzesRouter.QUIZ_ID_PARAM;\r\n QuizzesRouter.flashcardsPassingRoute = \"/flashcards/passing/:\" + QuizzesRouter.QUIZ_ID_PARAM;\r\n QuizzesRouter.flashcardsUpdateRoute = \"/flashcards/update/:\" + QuizzesRouter.QUIZ_ID_PARAM;\r\n QuizzesRouter.createRoute = \"/create/:\" + QuizzesRouter.QUIZ_TYPE;\r\n return QuizzesRouter;\r\n})();\r\nexports.QuizzesRouter = QuizzesRouter;\r\n},{\"../utils/MenuHelper\":517,\"./../utils/StringBuilder\":525}],487:[function(require,module,exports){\nvar StringBuilder_1 = require(\"./../utils/StringBuilder\");\r\nvar ReferenceRouter = (function () {\r\n function ReferenceRouter() {\r\n }\r\n ReferenceRouter.prototype.indexUrl = function (referenceName) {\r\n return StringBuilder_1.StringBuilder.interpolate(ReferenceRouter.indexRoute)\r\n .with(\":\" + ReferenceRouter.REFERENCE_NAME_PARAM, referenceName)\r\n .build();\r\n };\r\n ReferenceRouter.prototype.editUrl = function (referenceName, id) {\r\n return StringBuilder_1.StringBuilder.interpolate(ReferenceRouter.editRoute)\r\n .with(\":\" + ReferenceRouter.REFERENCE_NAME_PARAM, referenceName)\r\n .with(\":\" + ReferenceRouter.REFERENCE_ID_PARAM, id == null ? \"new\" : id)\r\n .build();\r\n };\r\n ReferenceRouter.NAME = \"urls.ReferenceRouter\";\r\n ReferenceRouter.REFERENCE_DEFAULT_VALUES_PARAM = \"defaultValues\";\r\n ReferenceRouter.REFERENCE_FILTER_PARAM = \"filter\";\r\n ReferenceRouter.REFERENCE_ASSOCIATION_FILTERS_PARAM = \"associationFilters\";\r\n ReferenceRouter.REFERENCE_NAME_PARAM = \"name\";\r\n ReferenceRouter.REFERENCE_ID_PARAM = \"id\";\r\n ReferenceRouter.indexRoute = \"/reference/:\" + ReferenceRouter.REFERENCE_NAME_PARAM;\r\n ReferenceRouter.editRoute = \"/reference/:\" + ReferenceRouter.REFERENCE_NAME_PARAM + \"/:\" + ReferenceRouter.REFERENCE_ID_PARAM;\r\n return ReferenceRouter;\r\n})();\r\nexports.ReferenceRouter = ReferenceRouter;\r\n},{\"./../utils/StringBuilder\":525}],488:[function(require,module,exports){\nvar SlideTemplatesRouter = (function () {\r\n function SlideTemplatesRouter() {\r\n }\r\n SlideTemplatesRouter.prototype.indexUrl = function () {\r\n return SlideTemplatesRouter.indexRoute;\r\n };\r\n SlideTemplatesRouter.prototype.editUrl = function (slideId) {\r\n return slideId == 0\r\n ? SlideTemplatesRouter.editRoute.replace(\":\" + SlideTemplatesRouter.SLIDE_ID_PARAM, \"new\")\r\n : SlideTemplatesRouter.editRoute.replace(\":\" + SlideTemplatesRouter.SLIDE_ID_PARAM, slideId.toString());\r\n };\r\n SlideTemplatesRouter.prototype.bundleUrl = function () {\r\n return SlideTemplatesRouter.bundleUpdateRoute;\r\n };\r\n SlideTemplatesRouter.NAME = \"urls.SlideTemplatesRouter\";\r\n SlideTemplatesRouter.SLIDE_ID_PARAM = \"slideId\";\r\n SlideTemplatesRouter.indexRoute = \"/slideTemplates/\";\r\n SlideTemplatesRouter.editRoute = \"/slideTemplates/:slideId/edit\";\r\n SlideTemplatesRouter.bundleUpdateRoute = \"/slideTemplates/bundle\";\r\n return SlideTemplatesRouter;\r\n})();\r\nexports.SlideTemplatesRouter = SlideTemplatesRouter;\r\n},{}],489:[function(require,module,exports){\nvar StatisticsRouter = (function () {\r\n function StatisticsRouter() {\r\n }\r\n StatisticsRouter.prototype.materialViewReportUrl = function () {\r\n return StatisticsRouter.materialViewReportRoute;\r\n };\r\n StatisticsRouter.prototype.materialDownloadReportUrl = function () {\r\n return StatisticsRouter.materialDownloadReportRoute;\r\n };\r\n StatisticsRouter.prototype.materialUploadReportUrl = function () {\r\n return StatisticsRouter.materialUploadReportRoute;\r\n };\r\n StatisticsRouter.prototype.powerBiReportUrl = function () {\r\n return StatisticsRouter.powerBiReportRoute;\r\n };\r\n StatisticsRouter.NAME = \"urls.StatisticsRouter\";\r\n StatisticsRouter.REPORT_TYPE_KEY_PARAM = \"reportTypeKey\";\r\n StatisticsRouter.materialViewReportRoute = \"/statistics/analytics/material/view/report\";\r\n StatisticsRouter.materialDownloadReportRoute = \"/statistics/analytics/material/download/report\";\r\n StatisticsRouter.materialUploadReportRoute = \"/statistics/analytics/material/upload/report\";\r\n StatisticsRouter.powerBiReportRoute = \"/statistics/analytics/powerbi/report\";\r\n return StatisticsRouter;\r\n})();\r\nexports.StatisticsRouter = StatisticsRouter;\r\n},{}],490:[function(require,module,exports){\nvar StringBuilder_1 = require(\"./../utils/StringBuilder\");\r\nvar SystemSettingsRouter = (function () {\r\n function SystemSettingsRouter() {\r\n }\r\n SystemSettingsRouter.prototype.commonSettingsUrl = function () {\r\n return SystemSettingsRouter.commonSettingsRoute;\r\n };\r\n SystemSettingsRouter.prototype.systemSettingsConfigurationRoute = function () {\r\n return SystemSettingsRouter.systemSettingsConfigurationRoute;\r\n };\r\n SystemSettingsRouter.prototype.systemSettingsBrandingRoute = function () {\r\n return SystemSettingsRouter.systemSettingsBrandingRoute;\r\n };\r\n SystemSettingsRouter.prototype.systemSettingsMenuItemsVisibilityRoute = function () {\r\n return SystemSettingsRouter.systemSettingsMenuItemsVisibilityRoute;\r\n };\r\n SystemSettingsRouter.prototype.systemSettingsUrl = function () {\r\n return SystemSettingsRouter.systemSettingsRoute;\r\n };\r\n SystemSettingsRouter.prototype.storagePlacesIndexUrl = function () {\r\n return SystemSettingsRouter.storagePlacesIndexRoute;\r\n };\r\n SystemSettingsRouter.prototype.storagePlaceCreateUrl = function () {\r\n return SystemSettingsRouter.storagePlaceCreateRoute;\r\n };\r\n SystemSettingsRouter.prototype.storagePlaceEditUrl = function (storagePlaceId) {\r\n var result = StringBuilder_1.StringBuilder\r\n .interpolate(SystemSettingsRouter.storagePlaceEditRoute)\r\n .with(\":\" + SystemSettingsRouter.STORAGE_PLACE_ID_PARAM, storagePlaceId)\r\n .build();\r\n return result;\r\n };\r\n SystemSettingsRouter.prototype.systemBundleEditUrl = function () {\r\n return SystemSettingsRouter.systemBundleEditRoute;\r\n };\r\n SystemSettingsRouter.NAME = \"urls.SystemSettingsRouter\";\r\n SystemSettingsRouter.commonSettingsRoute = \"/settings/common\";\r\n SystemSettingsRouter.systemSettingsRoute = \"/settings/system\";\r\n SystemSettingsRouter.systemSettingsConfigurationRoute = \"/settings/system/configurations\";\r\n SystemSettingsRouter.systemSettingsBrandingRoute = \"/settings/system/branding\";\r\n SystemSettingsRouter.systemSettingsMenuItemsVisibilityRoute = \"/settings/system/menuItemsVisibility\";\r\n SystemSettingsRouter.STORAGE_PLACE_ID_PARAM = \"storagePlaceId\";\r\n SystemSettingsRouter.storagePlacesIndexRoute = \"/settings/storagePlaces\";\r\n SystemSettingsRouter.storagePlaceCreateRoute = \"/settings/storagePlaces/create\";\r\n SystemSettingsRouter.storagePlaceEditRoute = \"/settings/storagePlaces/:\" + SystemSettingsRouter.STORAGE_PLACE_ID_PARAM + \"/edit\";\r\n SystemSettingsRouter.systemBundleEditRoute = \"/settings/bundles/system/edit\";\r\n return SystemSettingsRouter;\r\n})();\r\nexports.SystemSettingsRouter = SystemSettingsRouter;\r\n},{\"./../utils/StringBuilder\":525}],491:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar UrlServiceProvider = (function () {\r\n function UrlServiceProvider() {\r\n this.serviceRoot = \"/\";\r\n this.buildVersion = \"/\";\r\n this.currentLocale = \"en_US\";\r\n }\r\n UrlServiceProvider.prototype.setServiceRoot = function (serviceRoot) {\r\n this.serviceRoot = serviceRoot;\r\n return this;\r\n };\r\n UrlServiceProvider.prototype.setBuildVersion = function (buildVersion) {\r\n this.buildVersion = buildVersion;\r\n return this;\r\n };\r\n UrlServiceProvider.prototype.$get = function () {\r\n return new UrlService_1.UrlService(this.serviceRoot, this.buildVersion, this.currentLocale);\r\n };\r\n UrlServiceProvider.NAME = \"urls.UrlServiceProvider\";\r\n return UrlServiceProvider;\r\n})();\r\nexports.UrlServiceProvider = UrlServiceProvider;\r\n},{\"./../utils/UrlService\":528}],492:[function(require,module,exports){\nvar MainRouter_1 = require(\"./MainRouter\");\r\nvar NewsRouter_1 = require(\"./NewsRouter\");\r\nvar InfoRouter_1 = require(\"./InfoRouter\");\r\nvar AuthRouter_1 = require(\"./AuthRouter\");\r\nvar ReferenceRouter_1 = require(\"./ReferenceRouter\");\r\nvar SystemSettingsRouter_1 = require(\"./SystemSettingsRouter\");\r\nvar UsersRouter_1 = require(\"./UsersRouter\");\r\nvar CoursesRouter_1 = require(\"./CoursesRouter\");\r\nvar StatisticsRouter_1 = require(\"./StatisticsRouter\");\r\nvar MaterialsRouter_1 = require(\"./MaterialsRouter\");\r\nvar FinancesRouter_1 = require(\"./FinancesRouter\");\r\nvar PersonalRouter_1 = require(\"./PersonalRouter\");\r\nvar CommonRouter_1 = require(\"./CommonRouter\");\r\nvar ContentRouter_1 = require(\"./ContentRouter\");\r\nvar QuizzesRouter_1 = require(\"./QuizzesRouter\");\r\nvar LogsRouter_1 = require(\"./LogsRouter\");\r\nvar UrlServiceProvider_1 = require(\"./UrlServiceProvider\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar JobsRouter_1 = require(\"./JobsRouter\");\r\nvar CertificateTemplatesRouter_1 = require(\"./CertificateTemplatesRouter\");\r\nvar LearningPathsRouter_1 = require(\"./LearningPathsRouter\");\r\nvar AssessmentsRouter_1 = require(\"./AssessmentsRouter\");\r\nvar PoliciesRouter_1 = require(\"./PoliciesRouter\");\r\nvar BusinessUnitsRouter_1 = require(\"./BusinessUnitsRouter\");\r\nvar PayPalRouter_1 = require(\"./PayPalRouter\");\r\nvar NotificationTemplatesRouter_1 = require(\"./NotificationTemplatesRouter\");\r\nvar ImportRouter_1 = require(\"./ImportRouter\");\r\nvar ExportRouter_1 = require(\"./ExportRouter\");\r\nvar ExternalResourcesRouter_1 = require(\"./ExternalResourcesRouter\");\r\nvar HomeRouter_1 = require(\"./HomeRouter\");\r\nvar SlideTemplatesRouter_1 = require(\"./SlideTemplatesRouter\");\r\nvar GamificationRouter_1 = require(\"./GamificationRouter\");\r\nexports.UrlsModule = angular\r\n .module(\"urls\", [])\r\n .service(MainRouter_1.MainRouter.NAME, MainRouter_1.MainRouter)\r\n .service(NewsRouter_1.NewsRouter.NAME, NewsRouter_1.NewsRouter)\r\n .service(InfoRouter_1.InfoRouter.NAME, InfoRouter_1.InfoRouter)\r\n .service(AuthRouter_1.AuthRouter.NAME, AuthRouter_1.AuthRouter)\r\n .service(ReferenceRouter_1.ReferenceRouter.NAME, ReferenceRouter_1.ReferenceRouter)\r\n .service(SystemSettingsRouter_1.SystemSettingsRouter.NAME, SystemSettingsRouter_1.SystemSettingsRouter)\r\n .service(UsersRouter_1.UsersRouter.NAME, UsersRouter_1.UsersRouter)\r\n .service(CoursesRouter_1.CoursesRouter.NAME, CoursesRouter_1.CoursesRouter)\r\n .service(LearningPathsRouter_1.LearningPathsRouter.NAME, LearningPathsRouter_1.LearningPathsRouter)\r\n .service(StatisticsRouter_1.StatisticsRouter.NAME, StatisticsRouter_1.StatisticsRouter)\r\n .service(MaterialsRouter_1.MaterialsRouter.NAME, MaterialsRouter_1.MaterialsRouter)\r\n .service(FinancesRouter_1.FinancesRouter.NAME, FinancesRouter_1.FinancesRouter)\r\n .service(PersonalRouter_1.PersonalRouter.NAME, PersonalRouter_1.PersonalRouter)\r\n .service(CommonRouter_1.CommonRouter.NAME, CommonRouter_1.CommonRouter)\r\n .service(ContentRouter_1.ContentRouter.NAME, ContentRouter_1.ContentRouter)\r\n .service(QuizzesRouter_1.QuizzesRouter.NAME, QuizzesRouter_1.QuizzesRouter)\r\n .service(LogsRouter_1.LogsRouter.NAME, LogsRouter_1.LogsRouter)\r\n .service(JobsRouter_1.JobsRouter.NAME, JobsRouter_1.JobsRouter)\r\n .service(CertificateTemplatesRouter_1.CertificateTemplatesRouter.NAME, CertificateTemplatesRouter_1.CertificateTemplatesRouter)\r\n .service(NotificationTemplatesRouter_1.NotificationTemplatesRouter.NAME, NotificationTemplatesRouter_1.NotificationTemplatesRouter)\r\n .service(AssessmentsRouter_1.AssessmentsRouter.NAME, AssessmentsRouter_1.AssessmentsRouter)\r\n .service(PoliciesRouter_1.PoliciesRouter.NAME, PoliciesRouter_1.PoliciesRouter)\r\n .service(BusinessUnitsRouter_1.BusinessUnitsRouter.NAME, BusinessUnitsRouter_1.BusinessUnitsRouter)\r\n .service(PayPalRouter_1.PayPalRouter.NAME, PayPalRouter_1.PayPalRouter)\r\n .service(ImportRouter_1.ImportRouter.NAME, ImportRouter_1.ImportRouter)\r\n .service(ExportRouter_1.ExportRouter.NAME, ExportRouter_1.ExportRouter)\r\n .service(ExternalResourcesRouter_1.ExternalResourcesRouter.NAME, ExternalResourcesRouter_1.ExternalResourcesRouter)\r\n .service(HomeRouter_1.HomeRouter.NAME, HomeRouter_1.HomeRouter)\r\n .service(SlideTemplatesRouter_1.SlideTemplatesRouter.NAME, SlideTemplatesRouter_1.SlideTemplatesRouter)\r\n .service(GamificationRouter_1.GamificationRouter.NAME, GamificationRouter_1.GamificationRouter)\r\n .provider(UrlService_1.UrlService.NAME, UrlServiceProvider_1.UrlServiceProvider);\r\n},{\"../utils/UrlService\":528,\"./AssessmentsRouter\":462,\"./AuthRouter\":463,\"./BusinessUnitsRouter\":464,\"./CertificateTemplatesRouter\":465,\"./CommonRouter\":466,\"./ContentRouter\":467,\"./CoursesRouter\":468,\"./ExportRouter\":469,\"./ExternalResourcesRouter\":470,\"./FinancesRouter\":471,\"./GamificationRouter\":472,\"./HomeRouter\":473,\"./ImportRouter\":474,\"./InfoRouter\":475,\"./JobsRouter\":476,\"./LearningPathsRouter\":477,\"./LogsRouter\":478,\"./MainRouter\":479,\"./MaterialsRouter\":480,\"./NewsRouter\":481,\"./NotificationTemplatesRouter\":482,\"./PayPalRouter\":483,\"./PersonalRouter\":484,\"./PoliciesRouter\":485,\"./QuizzesRouter\":486,\"./ReferenceRouter\":487,\"./SlideTemplatesRouter\":488,\"./StatisticsRouter\":489,\"./SystemSettingsRouter\":490,\"./UrlServiceProvider\":491,\"./UsersRouter\":493}],493:[function(require,module,exports){\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar UsersRouter = (function () {\r\n function UsersRouter() {\r\n }\r\n UsersRouter.prototype.indexUrl = function () {\r\n return UsersRouter.indexRoute;\r\n };\r\n UsersRouter.prototype.addUrl = function () {\r\n return UsersRouter.addRoute;\r\n };\r\n UsersRouter.prototype.signupUrl = function (businessUnitId) {\r\n return businessUnitId\r\n ? UsersRouter.signUpRoute + (\"?\" + UsersRouter.BUSINESS_UNIT_ID_PARAM + \"=\" + businessUnitId)\r\n : UsersRouter.signUpRoute;\r\n };\r\n UsersRouter.prototype.startTrialUrl = function () {\r\n return UsersRouter.startTrialRoute;\r\n };\r\n UsersRouter.prototype.editUrl = function (userId) {\r\n return !userId\r\n ? undefined\r\n : UsersRouter.editRoute.replace(\":userId\", userId.toString());\r\n };\r\n UsersRouter.prototype.currentProfileUrl = function (profileId) {\r\n return !profileId\r\n ? undefined\r\n : UsersRouter.currentProfileRoute.replace(\":userProfileId\", profileId);\r\n };\r\n UsersRouter.prototype.groupsIndexUrl = function () {\r\n return UsersRouter.groupIndexRoute;\r\n };\r\n UsersRouter.prototype.groupsAddUrl = function () {\r\n return UsersRouter.groupAddRoute;\r\n };\r\n UsersRouter.prototype.groupEditUrl = function (groupId) {\r\n return StringBuilder_1.StringBuilder.interpolate(UsersRouter.groupEditRoute)\r\n .with(':' + UsersRouter.GROUP_ID_PARAM, groupId.toString())\r\n .build();\r\n };\r\n UsersRouter.prototype.groupManagePermissionsUrl = function (groupId) {\r\n return StringBuilder_1.StringBuilder.interpolate(UsersRouter.groupManagePermissionsRoute)\r\n .with(':' + UsersRouter.GROUP_ID_PARAM, groupId.toString())\r\n .build();\r\n };\r\n UsersRouter.prototype.mergeUrl = function (userId) {\r\n return StringBuilder_1.StringBuilder.interpolate(UsersRouter.mergeRoute)\r\n .with(':' + UsersRouter.USER_ID_PARAM, userId.toString())\r\n .build();\r\n };\r\n UsersRouter.NAME = \"urls.UsersRouter\";\r\n UsersRouter.USER_ID_PARAM = \"userId\";\r\n UsersRouter.GROUP_ID_PARAM = \"groupId\";\r\n UsersRouter.BUSINESS_UNIT_ID_PARAM = \"BUid\";\r\n UsersRouter.indexRoute = \"/users/\";\r\n UsersRouter.addRoute = \"/users/create\";\r\n UsersRouter.startTrialRoute = \"/users/freePlan\";\r\n UsersRouter.signUpRoute = \"/users/signup\";\r\n UsersRouter.editRoute = \"/users/:userId/edit\";\r\n UsersRouter.currentProfileRoute = \"/users/:userProfileId/profile\";\r\n UsersRouter.groupIndexRoute = \"/users/groups\";\r\n UsersRouter.groupAddRoute = \"/users/groups/create\";\r\n UsersRouter.groupEditRoute = \"/users/groups/:groupId\";\r\n UsersRouter.groupManagePermissionsRoute = \"/users/groups/:groupId/permissions\";\r\n UsersRouter.mergeRoute = \"/users/:userId/merge\";\r\n return UsersRouter;\r\n})();\r\nexports.UsersRouter = UsersRouter;\r\n},{\"../utils/StringBuilder\":525}],494:[function(require,module,exports){\nvar UserService_1 = require(\"./UserService\");\r\nvar IUser_1 = require(\"./models/IUser\");\r\nvar UsersRouter_1 = require(\"./../urls/UsersRouter\");\r\nvar SettingsService_1 = require(\"./../settings/SettingsService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar CurrentUserProfileController = (function () {\r\n function CurrentUserProfileController($timeout, $log, $http, $q, $routeParams, $location, usersApi, settingsApi, userRouter) {\r\n this.$timeout = $timeout;\r\n this.$log = $log;\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.usersApi = usersApi;\r\n this.settingsApi = settingsApi;\r\n this.userRouter = userRouter;\r\n this.disableSaveButton = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.USER_PROFILE_MENU_KEY);\r\n this.user = {\r\n fullName: \"\",\r\n locale: null\r\n };\r\n this.userLogon = {\r\n name: \"\",\r\n password: \"\"\r\n };\r\n this.loadUser();\r\n this.loadUserLogon();\r\n this.loadAvailableLocales();\r\n }\r\n CurrentUserProfileController.prototype.loadUser = function () {\r\n var _this = this;\r\n this.usersApi.getCurrentUserProfile().then(function (u) {\r\n PageHeaderHelper_1.PageHeader.set().header(u.fullName).update();\r\n angular.copy(u, _this.user);\r\n _this.isEverythingDisabled = (_this.user.id == IUser_1.PredefinedUsersEnum.GUEST);\r\n });\r\n };\r\n CurrentUserProfileController.prototype.loadUserLogon = function () {\r\n var _this = this;\r\n this.usersApi.getCurrentUserLocalLogon().then(function (logon) {\r\n if (logon) {\r\n angular.copy(logon, _this.userLogon);\r\n }\r\n });\r\n };\r\n CurrentUserProfileController.prototype.loadAvailableLocales = function () {\r\n var _this = this;\r\n this.settingsApi.getAvailableLocales().then(function (locales) {\r\n for (var i = 0; i < locales.length; i++) {\r\n var localeInfo = locales[i];\r\n if (localeInfo.defaultLocale) {\r\n _this.user.locale = localeInfo.locale;\r\n }\r\n }\r\n _this.availableLocales = locales;\r\n });\r\n };\r\n CurrentUserProfileController.prototype.save = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n this.confirmPassword = null;\r\n var promise = this.usersApi.updateCurrentUserProfile(this.user, this.userLogon.password);\r\n promise.then(function (u) {\r\n _this.disableSaveButton = false;\r\n INotifier_1.notifier.success(\"User '\" + _this.user.fullName + \"' has been saved\");\r\n _this.loadUser();\r\n }).catch(function (response) {\r\n _this.disableSaveButton = false;\r\n if (response.data.error == \"error.try.update.another.user\") {\r\n INotifier_1.notifier.error(\"You can change only your own profile settings\");\r\n }\r\n });\r\n };\r\n CurrentUserProfileController.prototype.cancel = function () {\r\n this.loadUser();\r\n this.loadUserLogon();\r\n };\r\n CurrentUserProfileController.NAME = \"users.CurrentUserProfileController\";\r\n CurrentUserProfileController.$inject = [\r\n \"$timeout\",\r\n \"$log\",\r\n \"$http\",\r\n \"$q\",\r\n \"$routeParams\",\r\n \"$location\",\r\n UserService_1.UserService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n UsersRouter_1.UsersRouter.NAME\r\n ];\r\n return CurrentUserProfileController;\r\n})();\r\nexports.CurrentUserProfileController = CurrentUserProfileController;\r\n},{\"./../INotifier\":5,\"./../settings/SettingsService\":427,\"./../urls/UsersRouter\":493,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./UserService\":499,\"./models/IUser\":506}],495:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar UserService_1 = require(\"./UserService\");\r\nvar UsersRouter_1 = require(\"./../urls/UsersRouter\");\r\nvar AuthService_1 = require(\"./../auth/AuthService\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar ReferenceUtils_1 = require(\"../reference/ReferenceUtils\");\r\nvar IPermission_1 = require(\"../security/permissions/IPermission\");\r\nvar RichTextEditorDirective_1 = require(\"../components/richtext/RichTextEditorDirective\");\r\nvar CommonFilterService_1 = require(\"../common/CommonFilterService\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar UserRole_1 = require(\"./models/UserRole\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar GroupEditController = (function () {\r\n function GroupEditController($scope, $routeParams, $location, $timeout, $http, authService, usersService, permissionsService, usersRouter, url, referenceUtils, commonFilterService, coursesRouter, learningPathsRouter, dialogService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n this.authService = authService;\r\n this.usersService = usersService;\r\n this.permissionsService = permissionsService;\r\n this.usersRouter = usersRouter;\r\n this.url = url;\r\n this.referenceUtils = referenceUtils;\r\n this.commonFilterService = commonFilterService;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.dialogService = dialogService;\r\n this.group = {\r\n name: \"\",\r\n isActive: true,\r\n parentId: null,\r\n permissionsIds: [],\r\n businessUnitId: null,\r\n buallowed: false,\r\n businessRole: \"\"\r\n };\r\n this.disableSaveButton = true;\r\n this.businessUnitSelected = false;\r\n this.hasAllBusinessUnits = false;\r\n this.showUsersNotInGroup = false;\r\n this.areDisallowedCoursesShown = false;\r\n this.areDisallowedLPsShown = false;\r\n this.selectAllToRemove = false;\r\n this.selectAllToAdd = false;\r\n this.selectedItemsIdsToRemove = [];\r\n this.selectedItemsIdsToAdd = [];\r\n this.sortProperty = \"selected\";\r\n this.reverseSorting = true;\r\n this.ADD_MODE = \"add\";\r\n this.REMOVE_MODE = \"remove\";\r\n this.currentMode = this.REMOVE_MODE;\r\n this.searchInputToRemove = '';\r\n this.searchInputToAdd = '';\r\n this.currentUser = {};\r\n this.btnSendNotificationClicked = false;\r\n this.tableTab = \"USERS\";\r\n this.searchFocus = false;\r\n this.USERS_TAB_KEY = \"users\";\r\n this.COURSES_TAB_KEY = \"courses\";\r\n this.LEARNING_PATHS_TAB_KEY = \"learningPaths\";\r\n this.activeTabKey = this.USERS_TAB_KEY;\r\n this.onPermissionsChange = function () { return _this.disableSaveButton = false; };\r\n this.toolbar = [[], ['bold', 'italics', 'underline', 'strikeThrough', RichTextEditorDirective_1.RichTextEditorController.TA_FONT_COLOR, RichTextEditorDirective_1.RichTextEditorController.TA_BACKGROUND_FONT_COLOR],\r\n ['ul', 'ol', 'indent', 'outdent', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],\r\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote'], [],\r\n ['redo', 'undo', 'clear', RichTextEditorDirective_1.RichTextEditorController.TA_FULLSCREEN_BUTTON, 'html']];\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_GROUPS_MENU_KEY);\r\n this.groupId = parseInt(this.$routeParams[UsersRouter_1.UsersRouter.GROUP_ID_PARAM]);\r\n permissionsService.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n authService.getCurrentUser().then(function (user) { return _this.currentUser = user; });\r\n if (this.groupId) {\r\n this.loadGroup();\r\n this.initGrids();\r\n this.authService.getCurrentUser()\r\n .then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n });\r\n }\r\n else {\r\n this.disableSaveButton = false;\r\n PageHeaderHelper_1.PageHeader.set().header(\"New user group\").update();\r\n this.authService.getCurrentUser()\r\n .then(function (user) {\r\n _this.hasAllBusinessUnits = user.allBusinessUnits;\r\n _this.businessUnitSelected = _this.hasAllBusinessUnits;\r\n })\r\n .then(function () { return _this.setDisabledPermissions(); });\r\n }\r\n this.getActiveGroupsEntities();\r\n }\r\n GroupEditController.prototype.setDisabledPermissions = function () {\r\n this.disabledPermissionsIds = [];\r\n switch (this.group.businessRole) {\r\n case UserRole_1.UserRole[UserRole_1.UserRole.LEARNER]:\r\n this.disabledPermissionsIds = this.disabledPermissionsIds.concat(IPermission_1.RolesSpecificPermissions.learnerSpecificPermissions);\r\n break;\r\n case UserRole_1.UserRole[UserRole_1.UserRole.INSTRUCTOR]:\r\n this.disabledPermissionsIds = this.disabledPermissionsIds.concat(IPermission_1.RolesSpecificPermissions.instructorSpecificPermissions);\r\n break;\r\n case UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER]:\r\n this.disabledPermissionsIds = this.disabledPermissionsIds.concat(IPermission_1.RolesSpecificPermissions.attendeeManagerSpecificPermissions);\r\n break;\r\n case UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR]:\r\n this.disabledPermissionsIds = this.disabledPermissionsIds.concat(IPermission_1.RolesSpecificPermissions.authorSpecificPermissions);\r\n break;\r\n case UserRole_1.UserRole[UserRole_1.UserRole.ADMINISTRATOR]:\r\n this.disabledPermissionsIds = this.disabledPermissionsIds.concat(IPermission_1.RolesSpecificPermissions.administratorSpecificPermissions);\r\n break;\r\n }\r\n this.disabledPermissionsIds = this.hasAllBusinessUnits\r\n ? this.disabledPermissionsIds\r\n : this.disabledPermissionsIds.concat(IPermission_1.AllGroupsPermissions.NULL_BU_ONLY_SYSTEM_PERMISSIONS_IDS);\r\n };\r\n GroupEditController.prototype.loadGroup = function () {\r\n var _this = this;\r\n if (this.groupChangesWatcher) {\r\n this.groupChangesWatcher();\r\n }\r\n this.usersService.getGroup(this.groupId).then(function (g) {\r\n angular.copy(g, _this.group);\r\n PageHeaderHelper_1.PageHeader.set().header(_this.group.name).update();\r\n _this.businessUnitSelected = true;\r\n }).then(function () {\r\n _this.groupChangesWatcher = _this.$scope.$watchGroup([\r\n \"vm.group.name\",\r\n \"vm.group.buallowed\",\r\n \"vm.group.parentId\",\r\n \"vm.group.businessUnitId\",\r\n \"vm.group.businessRole\"], (function (newValue, oldValue) {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n _this.disableSaveButton = false;\r\n }));\r\n }).then(function () { return _this.setDisabledPermissions(); });\r\n };\r\n GroupEditController.prototype.getActiveGroupsEntities = function () {\r\n var _this = this;\r\n var promise = this.groupId\r\n ? this.usersService.getActiveGroupsNoChildren(this.groupId)\r\n : this.usersService.getActiveGroups(this.group.businessUnitId);\r\n promise.then(function (result) {\r\n _this.groupsEntities = result;\r\n });\r\n };\r\n GroupEditController.prototype.showCreationEmailModal = function () {\r\n this.clearEmailFields();\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#showCreationEmailDialog\").modal({\r\n backdrop: 'static',\r\n keyboard: false,\r\n show: true\r\n });\r\n this.getUsersEmailAddresses();\r\n this.address = \"All group members\";\r\n };\r\n GroupEditController.prototype.closeSendMailModal = function () {\r\n $(\"#showCreationEmailDialog\").modal('hide');\r\n };\r\n GroupEditController.prototype.clearEmailFields = function () {\r\n this.message = null;\r\n this.subject = null;\r\n };\r\n GroupEditController.prototype.getUsersEmailAddresses = function () {\r\n var emailAddress = null;\r\n this.groupUsersGridModel.entries.forEach(function (address) {\r\n if (address.email != null && address.email != undefined) {\r\n emailAddress += address.email + ', ';\r\n }\r\n });\r\n this.address = emailAddress.slice(4, -2);\r\n };\r\n GroupEditController.prototype.sendEmailGroupMembersNotification = function () {\r\n var _this = this;\r\n if (this.btnSendNotificationClicked) {\r\n return;\r\n }\r\n this.btnSendNotificationClicked = true;\r\n if (this.subject == null || this.subject == undefined || this.subject == \"\" || this.subject.trim().length == 0) {\r\n this.subject = \" \";\r\n }\r\n this.usersService.sendEmailGroupMembersNotification(this.groupId, this.message, this.subject).then(function (result) {\r\n INotifier_1.notifier.success(\"Message has been sent\");\r\n setTimeout(_this.closeSendMailModal, 1300);\r\n }, function (error) { return INotifier_1.notifier.error(\"Message has been not sent\"); });\r\n setTimeout(function () {\r\n _this.btnSendNotificationClicked = false;\r\n }, 1300);\r\n };\r\n GroupEditController.prototype.save = function ($event) {\r\n var _this = this;\r\n if (this.searchFocus) {\r\n return;\r\n }\r\n this.disableSaveButton = true;\r\n if (this.group.businessRole == '') {\r\n this.group.businessRole = null;\r\n }\r\n var promise = this.groupId\r\n ? this.usersService.updateGroup(this.group)\r\n : this.usersService.createGroup(this.group);\r\n promise.then(function (g) {\r\n _this.disableSaveButton = true;\r\n INotifier_1.notifier.success(\"Group '\" + _this.group.name + \"' has been saved\");\r\n if (_this.groupId == null || isNaN(_this.groupId)) {\r\n _this.systemPermissions.editGroup\r\n ? _this.$location.path(_this.usersRouter.groupEditUrl(g.id))\r\n : _this.$location.path(_this.usersRouter.groupsIndexUrl());\r\n }\r\n else {\r\n _this.loadGroup();\r\n }\r\n }).catch(function (response) {\r\n _this.disableSaveButton = false;\r\n if (response.data.error == \"error.incorrect.group.parent\") {\r\n INotifier_1.notifier.error(\"Incorrect parent group\");\r\n }\r\n else if (response.data.error == \"error.incorrect.group.parent.for.localuser\") {\r\n INotifier_1.notifier.error(\"Incorrect parent group. You can only specify 'Authenticated Users' group and its children as parent group\");\r\n }\r\n else if (response.data.error == \"error.name.is.empty\") {\r\n INotifier_1.notifier.error(\"Group name is required\");\r\n }\r\n else {\r\n INotifier_1.notifier.error(\"Failed to save the group\");\r\n }\r\n });\r\n };\r\n GroupEditController.prototype.deactivate = function () {\r\n var _this = this;\r\n var promise = this.usersService.setActiveGroupWithChildren(false, this.group.id);\r\n promise.then(function (u) {\r\n _this.$location.url(_this.usersRouter.groupsIndexUrl());\r\n });\r\n };\r\n GroupEditController.prototype.onBusinessUnitChange = function () {\r\n var _this = this;\r\n this.businessUnitSelected = false;\r\n this.getActiveGroupsEntities();\r\n this.$timeout(function (a) { return _this.businessUnitSelected = true; }, 0);\r\n };\r\n GroupEditController.prototype.loadGroupUsers = function () {\r\n this.groupUsersGridModel.loadPage(0);\r\n };\r\n GroupEditController.prototype.loadGroupCourses = function () {\r\n this.courseGridModel.loadPage(0);\r\n };\r\n GroupEditController.prototype.loadGroupLPs = function () {\r\n this.learningPathsGridModel.loadPage(0);\r\n };\r\n GroupEditController.prototype.addUserGroupPermissions = function () {\r\n var _this = this;\r\n if (this.searchFocus || this.selectedItemsIdsToAdd.length == 0) {\r\n return;\r\n }\r\n var usersIds = this.selectedItemsIdsToAdd;\r\n return this.$http.put(this.url.base(\"/api/users/group/:groupId/addToGroup\")\r\n .param(\":groupId\", this.groupId)\r\n .service(), JSON.stringify(usersIds)).then(function () {\r\n INotifier_1.notifier.success(\"User groups successfully updated\");\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Failed to update user groups\");\r\n }).finally(function () {\r\n _this.closeAddUsersToGroupModal();\r\n });\r\n };\r\n GroupEditController.prototype.removeUserGroupsPermissions = function (userId) {\r\n var _this = this;\r\n if (this.searchFocus) {\r\n return;\r\n }\r\n var url = \"/api/users/group/:groupId/removeFromGroup\";\r\n var promise;\r\n if (userId) {\r\n url += \"/:userId\";\r\n promise = this.$http.put(this.url.base(url)\r\n .param(\":groupId\", this.groupId)\r\n .param(\":userId\", userId)\r\n .service(), \"\");\r\n }\r\n else {\r\n var usersIds = this.selectedItemsIdsToRemove;\r\n promise = this.$http.put(this.url.base(url)\r\n .param(\":groupId\", this.groupId)\r\n .service(), JSON.stringify(usersIds));\r\n }\r\n return promise.then(function () {\r\n INotifier_1.notifier.success(\"User groups successfully updated\");\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Failed to update user groups\");\r\n })\r\n .finally(function () {\r\n _this.groupUsersGridModel.loadCurrentPage();\r\n _this.notInGroupGridModel.loadCurrentPage();\r\n });\r\n };\r\n GroupEditController.prototype.removeAllItemsPermissions = function () {\r\n var _this = this;\r\n if (this.selectedItemsIdsToRemove.length == 0) {\r\n return;\r\n }\r\n var message = \"Are you sure you want to remove the selected users from the group?\";\r\n var removeFunc = function () { return _this.removeUserGroupsPermissions(); };\r\n switch (this.activeTabKey) {\r\n case this.USERS_TAB_KEY:\r\n break;\r\n case this.COURSES_TAB_KEY:\r\n message = \"Are you sure you want to remove the selected courses from the group?\";\r\n removeFunc = function () { return _this.removeCoursesPermissions(); };\r\n break;\r\n case this.LEARNING_PATHS_TAB_KEY:\r\n message = \"Are you sure you want to remove the selected learning paths from the group?\";\r\n removeFunc = function () { return _this.removeLearningPathsPermissions(); };\r\n break;\r\n }\r\n this.dialogService.confirm(message, {\r\n title: \"Are you sure?\",\r\n confirmButton: \"Yes\",\r\n cancelButton: \"No\"\r\n })\r\n .then(function () {\r\n removeFunc();\r\n _this.selectedItemsIdsToRemove = [];\r\n });\r\n };\r\n GroupEditController.prototype.isThereSomeSelected = function () {\r\n var gridModel;\r\n switch (this.activeTabKey) {\r\n case this.USERS_TAB_KEY:\r\n gridModel = this.currentMode === this.REMOVE_MODE\r\n ? this.groupUsersGridModel\r\n : this.notInGroupGridModel;\r\n break;\r\n case this.COURSES_TAB_KEY:\r\n gridModel = this.currentMode === this.REMOVE_MODE\r\n ? this.courseGridModel\r\n : this.disallowedCoursesGridModel;\r\n break;\r\n case this.LEARNING_PATHS_TAB_KEY:\r\n gridModel = this.currentMode === this.REMOVE_MODE\r\n ? this.learningPathsGridModel\r\n : this.disallowedLearningPathsGridModel;\r\n break;\r\n }\r\n if (gridModel.entries.length === 0) {\r\n return false;\r\n }\r\n return gridModel.entries.some(function (i) { return i.selected; });\r\n };\r\n GroupEditController.prototype.isGridEmpty = function () {\r\n switch (this.activeTabKey) {\r\n case this.USERS_TAB_KEY:\r\n return this.groupUsersGridModel.entries.length == 0;\r\n case this.COURSES_TAB_KEY:\r\n return this.courseGridModel.entries.length == 0;\r\n case this.LEARNING_PATHS_TAB_KEY:\r\n return this.learningPathsGridModel.entries.length == 0;\r\n }\r\n };\r\n GroupEditController.prototype.showAllUsersNotInGroup = function () {\r\n this.showUsersNotInGroup = !this.showUsersNotInGroup;\r\n };\r\n GroupEditController.prototype.hasUserSameBusinessUnits = function (arr) {\r\n if (this.currentUser.businessUnitsIdList) {\r\n var s_1 = false;\r\n this.currentUser.businessUnitsIdList.forEach(function (n) {\r\n if (!s_1) {\r\n s_1 = arr.some(function (m) { return m === n; });\r\n }\r\n });\r\n return s_1;\r\n }\r\n return true;\r\n };\r\n GroupEditController.prototype.showModalUnavailabilityRoles = function (oldValue) {\r\n if (this.groupId && oldValue) {\r\n var dialog = $(\"#unavailabilityRolesModal\");\r\n dialog.modal(\"show\");\r\n }\r\n };\r\n GroupEditController.prototype.addCoursesPermissions = function () {\r\n var _this = this;\r\n if (this.searchFocus || this.selectedItemsIdsToAdd.length == 0) {\r\n return;\r\n }\r\n var coursesIds = this.selectedItemsIdsToAdd;\r\n return this.$http.put(this.url.base(\"/api/users/group/:groupId/addPermissions/courses\")\r\n .param(\":groupId\", this.groupId)\r\n .service(), JSON.stringify(coursesIds)).then(function () {\r\n INotifier_1.notifier.success(\"Course groups successfully updated\");\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Failed to update course groups\");\r\n }).finally(function () {\r\n _this.closeAddCoursesToGroupModal();\r\n });\r\n };\r\n GroupEditController.prototype.removeCoursesPermissions = function (courseId) {\r\n var _this = this;\r\n if (this.searchFocus) {\r\n return;\r\n }\r\n var url = \"/api/users/group/:groupId/removePermissions/courses\";\r\n var promise;\r\n if (courseId) {\r\n url += \"/:courseId\";\r\n promise = this.$http.put(this.url.base(url)\r\n .param(\":groupId\", this.groupId)\r\n .param(\":courseId\", courseId)\r\n .service(), \"\");\r\n }\r\n else {\r\n var coursesIds = this.selectedItemsIdsToRemove;\r\n promise = this.$http.put(this.url.base(url)\r\n .param(\":groupId\", this.groupId)\r\n .service(), JSON.stringify(coursesIds));\r\n }\r\n return promise.then(function () {\r\n INotifier_1.notifier.success(\"Course groups successfully updated\");\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Failed to update course groups\");\r\n })\r\n .finally(function () {\r\n _this.courseGridModel.loadCurrentPage();\r\n });\r\n };\r\n GroupEditController.prototype.addLearningPathsPermissions = function () {\r\n var _this = this;\r\n if (this.searchFocus || this.selectedItemsIdsToAdd.length == 0) {\r\n return;\r\n }\r\n var lpIds = this.selectedItemsIdsToAdd;\r\n return this.$http.put(this.url.base(\"/api/users/group/:groupId/addPermissions/learningPaths\")\r\n .param(\":groupId\", this.groupId)\r\n .service(), JSON.stringify(lpIds)).then(function () {\r\n INotifier_1.notifier.success(\"Learning Path groups successfully updated\");\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Learning Path groups successfully updated\");\r\n }).finally(function () {\r\n _this.closeAddLearningPathsToGroupModal();\r\n _this.learningPathsGridModel.loadCurrentPage();\r\n });\r\n };\r\n GroupEditController.prototype.removeLearningPathsPermissions = function (lpId) {\r\n var _this = this;\r\n if (this.searchFocus) {\r\n return;\r\n }\r\n var url = \"/api/users/group/:groupId/removePermissions/learningPaths\";\r\n var promise;\r\n if (lpId) {\r\n url += \"/:learningPathId\";\r\n promise = this.$http.put(this.url.base(url)\r\n .param(\":groupId\", this.groupId)\r\n .param(\":learningPathId\", lpId)\r\n .service(), \"\");\r\n }\r\n else {\r\n var learningPathsIds = this.selectedItemsIdsToRemove;\r\n promise = this.$http.put(this.url.base(url)\r\n .param(\":groupId\", this.groupId)\r\n .service(), JSON.stringify(learningPathsIds));\r\n }\r\n return promise.then(function () {\r\n INotifier_1.notifier.success(\"Learning Path groups successfully updated\");\r\n }).catch(function () {\r\n INotifier_1.notifier.error(\"Learning Path groups successfully updated\");\r\n })\r\n .finally(function () {\r\n _this.learningPathsGridModel.loadCurrentPage();\r\n _this.disallowedLearningPathsGridModel.loadCurrentPage();\r\n });\r\n };\r\n GroupEditController.prototype.showDisallowedCourses = function () {\r\n this.areDisallowedCoursesShown = !this.areDisallowedCoursesShown;\r\n };\r\n GroupEditController.prototype.showDisallowedLearningPaths = function () {\r\n this.areDisallowedLPsShown = !this.areDisallowedLPsShown;\r\n };\r\n GroupEditController.prototype.searchKeyPress = function () {\r\n this.notInGroupGridModel.entries = null;\r\n this.commonFilterService.saveSearchInput(GroupEditController.NAME, this.searchInputToRemove);\r\n this.setSearchString();\r\n };\r\n GroupEditController.prototype.getStorageFilters = function () {\r\n this.storageFilterValues = this.commonFilterService.getFilterValues(GroupEditController.NAME);\r\n this.searchInputToRemove = this.commonFilterService.getSearchInput(GroupEditController.NAME);\r\n if (this.searchInputToRemove) {\r\n this.commonFilterService.openSearchInput();\r\n this.setSearchString();\r\n }\r\n this.notInGroupGridModel.loadCurrentPage();\r\n };\r\n GroupEditController.prototype.loadSearch = function () {\r\n this.notInGroupGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n switch (this.activeTabKey) {\r\n case this.USERS_TAB_KEY: {\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.searchString\")) {\r\n this.notInGroupGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n this.groupUsersGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n }\r\n break;\r\n }\r\n case this.COURSES_TAB_KEY: {\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.searchString\")) {\r\n this.disallowedCoursesGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n this.courseGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n }\r\n break;\r\n }\r\n case this.LEARNING_PATHS_TAB_KEY: {\r\n if (sessionStorage.getItem(\"vhsCoursesFilter.searchString\")) {\r\n this.disallowedLearningPathsGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n this.learningPathsGridModel.filter.searchString = sessionStorage.getItem(\"vhsCoursesFilter.searchString\");\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n GroupEditController.prototype.setSearchString = function () {\r\n switch (this.activeTabKey) {\r\n case this.USERS_TAB_KEY: {\r\n this.notInGroupGridModel.filter.searchString = this.searchInputToAdd;\r\n this.groupUsersGridModel.filter.searchString = this.searchInputToRemove;\r\n this.notInGroupGridModel.loadCurrentPage();\r\n this.groupUsersGridModel.loadCurrentPage();\r\n break;\r\n }\r\n case this.COURSES_TAB_KEY: {\r\n this.disallowedCoursesGridModel.filter.searchString = this.searchInputToAdd;\r\n this.courseGridModel.filter.searchString = this.searchInputToRemove;\r\n this.disallowedCoursesGridModel.loadCurrentPage();\r\n this.courseGridModel.loadCurrentPage();\r\n break;\r\n }\r\n case this.LEARNING_PATHS_TAB_KEY: {\r\n this.disallowedLearningPathsGridModel.filter.searchString = this.searchInputToAdd;\r\n this.learningPathsGridModel.filter.searchString = this.searchInputToRemove;\r\n this.disallowedLearningPathsGridModel.loadCurrentPage();\r\n this.learningPathsGridModel.loadCurrentPage();\r\n break;\r\n }\r\n }\r\n };\r\n GroupEditController.prototype.resetPagination = function () {\r\n switch (this.activeTabKey) {\r\n case this.USERS_TAB_KEY: {\r\n this.notInGroupGridModel.filter.searchString = this.searchInputToAdd;\r\n this.groupUsersGridModel.filter.searchString = this.searchInputToRemove;\r\n this.notInGroupGridModel.loadPage(0);\r\n this.groupUsersGridModel.loadPage(0);\r\n break;\r\n }\r\n case this.COURSES_TAB_KEY: {\r\n this.disallowedCoursesGridModel.filter.searchString = this.searchInputToAdd;\r\n this.courseGridModel.filter.searchString = this.searchInputToRemove;\r\n this.disallowedCoursesGridModel.loadPage(0);\r\n this.courseGridModel.loadPage(0);\r\n break;\r\n }\r\n case this.LEARNING_PATHS_TAB_KEY: {\r\n this.disallowedLearningPathsGridModel.filter.searchString = this.searchInputToAdd;\r\n this.learningPathsGridModel.filter.searchString = this.searchInputToRemove;\r\n this.disallowedLearningPathsGridModel.loadPage(0);\r\n this.learningPathsGridModel.loadPage(0);\r\n break;\r\n }\r\n }\r\n };\r\n GroupEditController.prototype.closeSearchInput = function () {\r\n if (!this.searchInputToRemove || this.searchInputToRemove.length > 0) {\r\n this.searchInputToRemove = '';\r\n this.setSearchString();\r\n }\r\n if (!this.searchInputToAdd || this.searchInputToAdd.length > 0) {\r\n this.searchInputToAdd = '';\r\n this.setSearchString();\r\n }\r\n };\r\n GroupEditController.prototype.setActiveTab = function (tabKey) {\r\n this.activeTabKey = tabKey;\r\n this.selectAllToRemove = false;\r\n this.sortProperty = \"selected\";\r\n this.reverseSorting = true;\r\n this.selectedItemsIdsToRemove = [];\r\n this.searchInputToRemove = '';\r\n this.loadData();\r\n this.resetPagination();\r\n };\r\n GroupEditController.prototype.isTopMenuActive = function (topMenuKey) {\r\n return this.activeTabKey == topMenuKey;\r\n };\r\n GroupEditController.prototype.initGrids = function () {\r\n var _this = this;\r\n this.groupUsersGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"api/users/group/:id/users\")\r\n .param(\":id\", this.groupId)\r\n .service()));\r\n this.groupUsersGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n if (_this.groupUsersGridModel.sorting.length > 0 && !_this.groupUsersGridModel.sorting.some(function (s) { return s.fieldName === \"selected\"; })) {\r\n _this.sortProperty = null;\r\n _this.reverseSorting = null;\r\n }\r\n _this.groupUsersGridModel.entries.forEach(function (i) {\r\n if (_this.selectedItemsIdsToRemove.indexOf(i.id) > -1) {\r\n i.selected = true;\r\n }\r\n else {\r\n i.selected = false;\r\n }\r\n });\r\n }\r\n });\r\n this.notInGroupGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"api/users/group/:id/not\")\r\n .param(\":id\", this.groupId)\r\n .service()));\r\n this.notInGroupGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n if (_this.notInGroupGridModel.sorting.length > 0 && !_this.notInGroupGridModel.sorting.some(function (s) { return s.fieldName === \"selected\"; })) {\r\n _this.sortProperty = null;\r\n _this.reverseSorting = null;\r\n }\r\n _this.notInGroupGridModel.entries.forEach(function (i) {\r\n if (_this.selectedItemsIdsToAdd.indexOf(i.id) > -1) {\r\n i.selected = true;\r\n }\r\n else {\r\n i.selected = false;\r\n }\r\n });\r\n }\r\n });\r\n this.courseGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"api/users/group/courses/:id\")\r\n .param(\":id\", this.groupId)\r\n .service()));\r\n this.courseGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n if (_this.courseGridModel.sorting.length > 0 && !_this.courseGridModel.sorting.some(function (s) { return s.fieldName === \"selected\"; })) {\r\n _this.sortProperty = null;\r\n _this.reverseSorting = null;\r\n }\r\n _this.courseGridModel.entries.forEach(function (i) {\r\n if (_this.selectedItemsIdsToRemove.indexOf(i.id) > -1) {\r\n i.selected = true;\r\n }\r\n else {\r\n i.selected = false;\r\n }\r\n });\r\n }\r\n });\r\n this.disallowedCoursesGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"api/users/group/courses/:id/disallowed\")\r\n .param(\":id\", this.groupId)\r\n .service()));\r\n this.disallowedCoursesGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n if (_this.disallowedCoursesGridModel.sorting.length > 0 && !_this.disallowedCoursesGridModel.sorting.some(function (s) { return s.fieldName === \"selected\"; })) {\r\n _this.sortProperty = null;\r\n _this.reverseSorting = null;\r\n }\r\n _this.disallowedCoursesGridModel.entries.forEach(function (i) {\r\n if (_this.selectedItemsIdsToAdd.indexOf(i.id) > -1) {\r\n i.selected = true;\r\n }\r\n else {\r\n i.selected = false;\r\n }\r\n });\r\n }\r\n });\r\n this.learningPathsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"api/users/group/learningPaths/:id\")\r\n .param(\":id\", this.groupId)\r\n .service()));\r\n this.learningPathsGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n if (_this.learningPathsGridModel.sorting.length > 0 && !_this.learningPathsGridModel.sorting.some(function (s) { return s.fieldName === \"selected\"; })) {\r\n _this.sortProperty = null;\r\n _this.reverseSorting = null;\r\n }\r\n _this.learningPathsGridModel.entries.forEach(function (i) {\r\n if (_this.selectedItemsIdsToRemove.indexOf(i.id) > -1) {\r\n i.selected = true;\r\n }\r\n else {\r\n i.selected = false;\r\n }\r\n });\r\n }\r\n });\r\n this.disallowedLearningPathsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader(this.$http, this.url.base(\"api/users/group/learningPaths/:id/disallowed\")\r\n .param(\":id\", this.groupId)\r\n .service()));\r\n this.disallowedLearningPathsGridModel.addLoadingListener({\r\n startLoading: function () {\r\n },\r\n endLoading: function () {\r\n if (_this.disallowedLearningPathsGridModel.sorting.length > 0 && !_this.disallowedLearningPathsGridModel.sorting.some(function (s) { return s.fieldName === \"selected\"; })) {\r\n _this.sortProperty = null;\r\n _this.reverseSorting = null;\r\n }\r\n _this.disallowedLearningPathsGridModel.entries.forEach(function (i) {\r\n if (_this.selectedItemsIdsToAdd.indexOf(i.id) > -1) {\r\n i.selected = true;\r\n }\r\n else {\r\n i.selected = false;\r\n }\r\n });\r\n }\r\n });\r\n this.groupUsersGridModel.showSpinner = false;\r\n this.notInGroupGridModel.showSpinner = false;\r\n this.courseGridModel.showSpinner = false;\r\n this.disallowedCoursesGridModel.showSpinner = false;\r\n this.learningPathsGridModel.showSpinner = false;\r\n this.disallowedLearningPathsGridModel.showSpinner = false;\r\n this.learningPathsGridModel.pageSize = 10000;\r\n this.disallowedLearningPathsGridModel.pageSize = 10000;\r\n this.courseGridModel.pageSize = 10000;\r\n this.disallowedCoursesGridModel.pageSize = 10000;\r\n this.groupUsersGridModel.pageSize = 10000;\r\n this.notInGroupGridModel.pageSize = 10000;\r\n };\r\n GroupEditController.prototype.loadData = function () {\r\n if (this.isTopMenuActive(this.USERS_TAB_KEY)) {\r\n this.loadGroupUsers();\r\n }\r\n else if (this.isTopMenuActive(this.COURSES_TAB_KEY)) {\r\n this.loadGroupCourses();\r\n }\r\n else if (this.isTopMenuActive(this.LEARNING_PATHS_TAB_KEY)) {\r\n this.loadGroupLPs();\r\n }\r\n };\r\n GroupEditController.prototype.showAddItemsModal = function () {\r\n switch (this.activeTabKey) {\r\n case this.USERS_TAB_KEY:\r\n this.showAddUsersToGroupModal();\r\n break;\r\n case this.COURSES_TAB_KEY:\r\n this.showAddCoursesToGroupModal();\r\n break;\r\n case this.LEARNING_PATHS_TAB_KEY:\r\n this.showAddLearningPathsToGroupModal();\r\n break;\r\n }\r\n };\r\n GroupEditController.prototype.getAddItemsButtonName = function () {\r\n switch (this.activeTabKey) {\r\n case this.USERS_TAB_KEY:\r\n return \"Add Users\";\r\n case this.COURSES_TAB_KEY:\r\n return \"Add Courses\";\r\n case this.LEARNING_PATHS_TAB_KEY:\r\n return \"Add Learning Paths\";\r\n }\r\n };\r\n GroupEditController.prototype.showAddUsersToGroupModal = function () {\r\n this.currentMode = this.ADD_MODE;\r\n this.notInGroupGridModel.loadPage(0);\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#addUsersToGroupModal\").modal({\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n GroupEditController.prototype.closeAddUsersToGroupModal = function () {\r\n this.currentMode = this.REMOVE_MODE;\r\n $(\"#addUsersToGroupModal\").modal('hide');\r\n this.closeSearchInput();\r\n this.selectedItemsIdsToAdd = [];\r\n this.selectAllToAdd = false;\r\n };\r\n GroupEditController.prototype.showAddCoursesToGroupModal = function () {\r\n this.currentMode = this.ADD_MODE;\r\n this.disallowedCoursesGridModel.loadPage(0);\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#addCoursesToGroupModal\").modal({\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n GroupEditController.prototype.closeAddCoursesToGroupModal = function () {\r\n this.currentMode = this.REMOVE_MODE;\r\n $(\"#addCoursesToGroupModal\").modal('hide');\r\n this.closeSearchInput();\r\n this.selectedItemsIdsToAdd = [];\r\n this.selectAllToAdd = false;\r\n };\r\n GroupEditController.prototype.showAddLearningPathsToGroupModal = function () {\r\n this.currentMode = this.ADD_MODE;\r\n this.disallowedLearningPathsGridModel.loadPage(0);\r\n $(\".modal-body\").css(\"overflow-y\", \"auto\");\r\n $(\"#addLearningPathsToGroupModal\").modal({\r\n keyboard: false,\r\n show: true\r\n });\r\n };\r\n GroupEditController.prototype.closeAddLearningPathsToGroupModal = function () {\r\n this.currentMode = this.REMOVE_MODE;\r\n $(\"#addLearningPathsToGroupModal\").modal('hide');\r\n this.closeSearchInput();\r\n this.selectedItemsIdsToAdd = [];\r\n this.selectAllToAdd = false;\r\n };\r\n GroupEditController.prototype.selectItem = function (itemId) {\r\n if (this.currentMode === this.REMOVE_MODE) {\r\n if (this.selectedItemsIdsToRemove.indexOf(itemId) > -1) {\r\n this.selectedItemsIdsToRemove.splice(this.selectedItemsIdsToRemove.indexOf(itemId), 1);\r\n }\r\n else {\r\n this.selectedItemsIdsToRemove.push(itemId);\r\n }\r\n }\r\n else {\r\n if (this.selectedItemsIdsToAdd.indexOf(itemId) > -1) {\r\n this.selectedItemsIdsToAdd.splice(this.selectedItemsIdsToAdd.indexOf(itemId), 1);\r\n }\r\n else {\r\n this.selectedItemsIdsToAdd.push(itemId);\r\n }\r\n }\r\n };\r\n GroupEditController.prototype.clickSelectAll = function (grid) {\r\n var _this = this;\r\n grid.entries.forEach(function (u) {\r\n if (_this.currentMode === _this.REMOVE_MODE) {\r\n u.selected = _this.selectAllToRemove;\r\n if (_this.selectAllToRemove) {\r\n _this.selectedItemsIdsToRemove = grid.entries.map(function (i) { return i.id; });\r\n }\r\n else {\r\n _this.selectedItemsIdsToRemove = [];\r\n }\r\n }\r\n else {\r\n u.selected = _this.selectAllToAdd;\r\n if (_this.selectAllToAdd) {\r\n _this.selectedItemsIdsToAdd = grid.entries.map(function (i) { return i.id; });\r\n }\r\n else {\r\n _this.selectedItemsIdsToAdd = [];\r\n }\r\n }\r\n });\r\n };\r\n GroupEditController.prototype.sortBySelected = function () {\r\n this.sortProperty = \"selected\";\r\n this.reverseSorting = this.reverseSorting != null ? !this.reverseSorting : true;\r\n };\r\n GroupEditController.prototype.isFormValid = function () {\r\n return this.group.name != undefined && this.group.name.length > 0\r\n && (!this.hasAllBusinessUnits && this.group.businessUnitId || this.hasAllBusinessUnits);\r\n };\r\n GroupEditController.NAME = \"users.GroupEditController\";\r\n GroupEditController.$inject = [\r\n \"$scope\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"$timeout\",\r\n \"$http\",\r\n AuthService_1.AuthService.NAME,\r\n UserService_1.UserService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n UrlService_1.UrlService.NAME,\r\n ReferenceUtils_1.ReferenceUtils.NAME,\r\n CommonFilterService_1.CommonFilterService.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n DialogService_1.DialogService.NAME\r\n ];\r\n return GroupEditController;\r\n})();\r\nexports.GroupEditController = GroupEditController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../common/CommonFilterService\":49,\"../components/dialog/DialogService\":166,\"../components/richtext/RichTextEditorDirective\":177,\"../reference/ReferenceUtils\":410,\"../security/permissions/IPermission\":423,\"../urls/CoursesRouter\":468,\"../urls/LearningPathsRouter\":477,\"./../INotifier\":5,\"./../auth/AuthService\":18,\"./../security/PermissionsService\":418,\"./../urls/UsersRouter\":493,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./UserService\":499,\"./models/UserRole\":507}],496:[function(require,module,exports){\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar UserService_1 = require(\"./UserService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar IPermission_1 = require(\"../security/permissions/IPermission\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar UserRole_1 = require(\"./models/UserRole\");\r\nvar GroupManagePermissionsController = (function () {\r\n function GroupManagePermissionsController($routeParams, permissionsService, usersRouter, authService, usersService, securityService, authRedirect) {\r\n var _this = this;\r\n this.$routeParams = $routeParams;\r\n this.permissionsService = permissionsService;\r\n this.usersRouter = usersRouter;\r\n this.authService = authService;\r\n this.usersService = usersService;\r\n this.securityService = securityService;\r\n this.authRedirect = authRedirect;\r\n this.currentUser = {};\r\n this.hasAllBusinessUnits = false;\r\n this.disableSaveButton = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_GROUPS_MENU_KEY);\r\n this.groupId = parseInt(this.$routeParams[UsersRouter_1.UsersRouter.GROUP_ID_PARAM]);\r\n this.securityService\r\n .demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.manageGroupPermissions; });\r\n this.permissionsService.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n this.authService.getCurrentUser()\r\n .then(function (user) {\r\n _this.currentUser = angular.copy(user);\r\n _this.userBusinessUnits = angular.copy(user.businessUnits);\r\n _this.hasAllBusinessUnits = angular.copy(user.allBusinessUnits);\r\n })\r\n .then(function () {\r\n return _this.loadGroup();\r\n })\r\n .then(function () {\r\n _this.setDisabledPermissions();\r\n })\r\n .then(function () {\r\n if (_this.group.businessUnitId != null && !_this.hasAllBusinessUnits && _this.userBusinessUnits.indexOf(_this.group.businessUnitId) == -1\r\n || _this.group.businessUnitId == null && !_this.hasAllBusinessUnits) {\r\n _this.authRedirect.forwardToAccessDenied();\r\n }\r\n });\r\n }\r\n GroupManagePermissionsController.prototype.setDisabledPermissions = function () {\r\n this.disabledPermissionsIds = [];\r\n switch (this.group.businessRole) {\r\n case UserRole_1.UserRole[UserRole_1.UserRole.LEARNER]:\r\n this.disabledPermissionsIds = this.disabledPermissionsIds.concat(IPermission_1.RolesSpecificPermissions.learnerSpecificPermissions);\r\n break;\r\n case UserRole_1.UserRole[UserRole_1.UserRole.INSTRUCTOR]:\r\n this.disabledPermissionsIds = this.disabledPermissionsIds.concat(IPermission_1.RolesSpecificPermissions.instructorSpecificPermissions);\r\n break;\r\n case UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER]:\r\n this.disabledPermissionsIds = this.disabledPermissionsIds.concat(IPermission_1.RolesSpecificPermissions.attendeeManagerSpecificPermissions);\r\n break;\r\n case UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR]:\r\n this.disabledPermissionsIds = this.disabledPermissionsIds.concat(IPermission_1.RolesSpecificPermissions.authorSpecificPermissions);\r\n break;\r\n case UserRole_1.UserRole[UserRole_1.UserRole.ADMINISTRATOR]:\r\n this.disabledPermissionsIds = this.disabledPermissionsIds.concat(IPermission_1.RolesSpecificPermissions.administratorSpecificPermissions);\r\n break;\r\n }\r\n this.disabledPermissionsIds = this.hasAllBusinessUnits\r\n ? this.disabledPermissionsIds\r\n : this.disabledPermissionsIds.concat(IPermission_1.AllGroupsPermissions.NULL_BU_ONLY_SYSTEM_PERMISSIONS_IDS);\r\n };\r\n GroupManagePermissionsController.prototype.loadGroup = function () {\r\n var _this = this;\r\n return this.usersService.getGroup(this.groupId).then(function (group) {\r\n _this.group = angular.copy(group);\r\n PageHeaderHelper_1.PageHeader.set().header(_this.group.name).update();\r\n return _this.group;\r\n });\r\n };\r\n GroupManagePermissionsController.prototype.save = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n this.usersService.updateGroupPermissions(this.group.id, this.group.version, this.group.permissionsIds)\r\n .then(function (g) {\r\n angular.copy(g, _this.group);\r\n PageHeaderHelper_1.PageHeader.set().header(_this.group.name).update();\r\n INotifier_1.notifier.success(\"Group '\" + _this.group.name + \"' has been saved\");\r\n })\r\n .finally(function () {\r\n _this.disableSaveButton = false;\r\n });\r\n };\r\n GroupManagePermissionsController.NAME = \"users.GroupManagePermissionsController\";\r\n GroupManagePermissionsController.$inject = [\r\n \"$routeParams\",\r\n PermissionsService_1.PermissionsService.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n AuthService_1.AuthService.NAME,\r\n UserService_1.UserService.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME\r\n ];\r\n return GroupManagePermissionsController;\r\n})();\r\nexports.GroupManagePermissionsController = GroupManagePermissionsController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../authcore/AuthRedirect\":26,\"../security/PermissionsService\":418,\"../security/SecurityService\":420,\"../security/permissions/IPermission\":423,\"../urls/UsersRouter\":493,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./UserService\":499,\"./models/UserRole\":507}],497:[function(require,module,exports){\nvar PermissionsService_1 = require(\"./../security/PermissionsService\");\r\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar UserService_1 = require(\"./UserService\");\r\nvar UsersRouter_1 = require(\"./../urls/UsersRouter\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar IGridModel_1 = require(\"./../IGridModel\");\r\nvar IHttpGridService_1 = require(\"./../IHttpGridService\");\r\nvar TreeElementsInfoFiller_1 = require(\"./../tree/TreeElementsInfoFiller\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar CheckBusinessUnitId_1 = require(\"../utils/CheckBusinessUnitId\");\r\nvar ReferenceService_1 = require(\"../reference/ReferenceService\");\r\nvar ReferenceUtils_1 = require(\"../reference/ReferenceUtils\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar GroupsController = (function () {\r\n function GroupsController($http, url, usersService, permissionsService, usersRouter, authService, referenceService, referenceUtils, businessUnitsService) {\r\n var _this = this;\r\n this.url = url;\r\n this.usersService = usersService;\r\n this.permissionsService = permissionsService;\r\n this.usersRouter = usersRouter;\r\n this.authService = authService;\r\n this.referenceService = referenceService;\r\n this.referenceUtils = referenceUtils;\r\n this.businessUnitsService = businessUnitsService;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_GROUPS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"User Groups\").update();\r\n permissionsService.getSystemPermissions().then(function (p) {\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader()\r\n .addActionLinkIf(p.createGroup, '+ New', _this.usersRouter.groupsAddUrl()).update();\r\n _this.systemPermissions = p;\r\n });\r\n this.groupsGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/users/groups/all\")));\r\n this.groupsGridModel.addLoadingListener(this);\r\n authService.getCurrentUser().then(function (user) {\r\n _this.currentUser = user;\r\n });\r\n this.businessUnitsService.getBusinessUnitsDeactivateForSelector()\r\n .then(function (result) { return _this.businessUnits = result; });\r\n }\r\n GroupsController.prototype.isUserAccessedToBusinessUnit = function (businessUnitId) {\r\n if (this.currentUser && this.currentUser.businessUnits) {\r\n return this.currentUser.businessUnits.some(function (id) { return id == businessUnitId; });\r\n }\r\n return true;\r\n };\r\n GroupsController.prototype.getGroupEditUrl = function (id) {\r\n return this.usersRouter.groupEditUrl(id);\r\n };\r\n GroupsController.prototype.activateGroup = function (id) {\r\n var _this = this;\r\n this.usersService.setActiveGroupWithChildren(true, id)\r\n .then(function (result) {\r\n _this.groupsGridModel.loadCurrentPage();\r\n });\r\n };\r\n GroupsController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n GroupsController.prototype.convertIsActive = function (isActive) {\r\n return isActive != undefined\r\n ? isActive ? 'Yes' : 'No'\r\n : undefined;\r\n };\r\n GroupsController.prototype.startLoading = function () {\r\n };\r\n GroupsController.prototype.endLoading = function () {\r\n TreeElementsInfoFiller_1.TreeElementsInfoFiller.fillHierarchyInfoWithMaxLevel(this.groupsGridModel.entries, Number.MAX_VALUE);\r\n };\r\n GroupsController.prototype.hasUserSameBusinessUnits = function (businessUnitId) {\r\n if (this.currentUser) {\r\n if (businessUnitId == null && this.currentUser && this.currentUser.businessUnits != null) {\r\n return false;\r\n }\r\n return CheckBusinessUnitId_1.CheckBusinessUnitId.hasUserSameBusinessUnits(this.currentUser.businessUnits, businessUnitId);\r\n }\r\n return false;\r\n };\r\n GroupsController.prototype.getBusinessUnitById = function (businessUnitId) {\r\n var result = null;\r\n if (businessUnitId != null && this.businessUnits) {\r\n result = this.businessUnits.filter(function (bu) { return bu.id == businessUnitId; })[0].name;\r\n }\r\n return result;\r\n };\r\n GroupsController.NAME = \"users.GroupsController\";\r\n GroupsController.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME,\r\n UserService_1.UserService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n AuthService_1.AuthService.NAME,\r\n ReferenceService_1.ReferenceService.NAME,\r\n ReferenceUtils_1.ReferenceUtils.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME\r\n ];\r\n return GroupsController;\r\n})();\r\nexports.GroupsController = GroupsController;\r\n},{\"../auth/AuthService\":18,\"../businessUnits/BusinessUnitsService\":44,\"../reference/ReferenceService\":409,\"../reference/ReferenceUtils\":410,\"../utils/CheckBusinessUnitId\":508,\"./../IGridModel\":3,\"./../IHttpGridService\":4,\"./../security/PermissionsService\":418,\"./../tree/TreeElementsInfoFiller\":460,\"./../urls/UsersRouter\":493,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./../utils/UrlService\":528,\"./UserService\":499}],498:[function(require,module,exports){\nvar IGroup_1 = require(\"./models/IGroup\");\r\nvar IUser_1 = require(\"./models/IUser\");\r\nvar UserService_1 = require(\"./UserService\");\r\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar IReferenceEntitiesParams_1 = require(\"../reference/models/IReferenceEntitiesParams\");\r\nvar ReferenceService_1 = require(\"../reference/ReferenceService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar UserRole_1 = require(\"./models/UserRole\");\r\nvar LogonProviderEnum_1 = require(\"../security/LogonProviderEnum\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar BillingPlanService_1 = require(\"../finances/BillingPlanService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar UserEditController = (function () {\r\n function UserEditController($scope, $rootScope, $timeout, $log, $http, $q, $routeParams, $location, $uploader, userService, settingsService, permissionsService, usersRouter, url, authService, dialogService, referenceService, businessUnitsService, billingPlanService) {\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$timeout = $timeout;\r\n this.$log = $log;\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.$uploader = $uploader;\r\n this.userService = userService;\r\n this.settingsService = settingsService;\r\n this.permissionsService = permissionsService;\r\n this.usersRouter = usersRouter;\r\n this.url = url;\r\n this.authService = authService;\r\n this.dialogService = dialogService;\r\n this.referenceService = referenceService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.billingPlanService = billingPlanService;\r\n this.notify = false;\r\n this.isResetPreview = false;\r\n this.viewType = \"GENERAL_INFO\";\r\n this.userProfile = {\r\n fullName: \"\",\r\n isActive: true,\r\n newGroups: [],\r\n locale: null,\r\n userLogons: [],\r\n businessUnitIds: undefined,\r\n creditsList: [],\r\n creditTypes: \"\",\r\n previewId: null,\r\n previewUrl: \"\",\r\n ipAddressRanges: []\r\n };\r\n this.logonProviders = [];\r\n this.logonProvidersForAdd = [];\r\n this.minPasswordLength = UserService_1.UserService.minPasswordLength;\r\n this.disableSaveButton = false;\r\n this.isInitialized = false;\r\n this.currentUser = {};\r\n this.groupById = new Map();\r\n this.userGroupList = new Map();\r\n this.availableCreditTypes = [];\r\n this.ipAddressRange = {};\r\n this.isAddRowVisible = false;\r\n this.editingIpAddressRange = false;\r\n this.showedIpAddressTab = false;\r\n this.userRole = UserRole_1.UserRole;\r\n this.availableRoles = [];\r\n this.unavailableRole = null;\r\n this.nextRoleByPriorityName = null;\r\n this.roleUnavailableMessage = \"\";\r\n this.nextRoleByPriorityMessage = \"\";\r\n this.userRoles = new Map();\r\n this.logonProvider = \"default\";\r\n this.isLoadingLogonProvider = false;\r\n this.isFreePlanBuFull = false;\r\n this.isFormValid = false;\r\n this.currentDynamicIP = false;\r\n this.isCheckPassword = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_USERS_MENU_KEY);\r\n this.userId = this.$routeParams[\"userId\"];\r\n permissionsService.getSystemPermissions().then(function (p) {\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader()\r\n .addActionLinkIf(p.createUser, '+ New', _this.usersRouter.addUrl()).update();\r\n _this.systemPermissions = p;\r\n });\r\n authService.getCurrentUser().then(function (u) { return _this.currentUser = u; });\r\n this.$q.all([\r\n this.loadAllowedBusinessUnits(),\r\n this.loadGroups(),\r\n this.loadLogonProviders(),\r\n this.loadAvailableLocales()\r\n ])\r\n .then(function () {\r\n if (_this.userId) {\r\n return _this.loadUser().then(function () {\r\n _this.checkFreePlanForBU();\r\n });\r\n }\r\n else {\r\n PageHeaderHelper_1.PageHeader.set().header(\"New User\").update();\r\n _this.userProfile.businessUnitIds = [];\r\n return _this.$q.when(null);\r\n }\r\n })\r\n .then(function () {\r\n return _this.loadRoles();\r\n })\r\n .then(function () { return _this.isInitialized = true; });\r\n this.billingPlanService.getMaxFreePlanUsers().then(function (data) { return _this.maxFreePlanUsers = data; });\r\n this.listenerAvatarImage();\r\n this.userRoles.set(UserRole_1.UserRole[UserRole_1.UserRole.ADMINISTRATOR], \"Administrator\");\r\n this.userRoles.set(UserRole_1.UserRole[UserRole_1.UserRole.INSTRUCTOR], \"Instructor\");\r\n this.userRoles.set(UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER], \"Attendee manager\");\r\n this.userRoles.set(UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR], \"Author\");\r\n this.userRoles.set(UserRole_1.UserRole[UserRole_1.UserRole.LEARNER], \"Learner\");\r\n this.settingsService.isCheckPassword()\r\n .then(function (isCheck) { return _this.isCheckPassword = isCheck; });\r\n }\r\n UserEditController.prototype.changeLogonProvider = function () {\r\n this.addUserLogon(this.logonProvider);\r\n this.logonProvider = \"default\";\r\n };\r\n UserEditController.prototype.listenerAvatarImage = function () {\r\n var _this = this;\r\n this.$scope.$on('avatar.update.img', function (event, preview) {\r\n _this.preview = preview;\r\n });\r\n this.$scope.$on('avatar.reset.img', function (event, preview, previewUrl, isResetPreview) {\r\n _this.preview = preview;\r\n _this.userProfile.previewUrl = previewUrl;\r\n _this.isResetPreview = isResetPreview;\r\n });\r\n };\r\n UserEditController.prototype.cancelUserEdit = function () {\r\n var _this = this;\r\n if (this.isCreatePage()) {\r\n this.$location.url(this.usersRouter.indexUrl());\r\n }\r\n else {\r\n this.preview = null;\r\n this.logonProvider = \"\";\r\n this.avatarErrors = {};\r\n this.loadUser().then(function () {\r\n _this.isResetPreview = !_this.userProfile.previewUrl;\r\n _this.$rootScope.$emit('avatar.update.img', _this.userProfile.previewUrl);\r\n });\r\n }\r\n };\r\n UserEditController.prototype.loadUser = function () {\r\n var _this = this;\r\n this.isDeletionAllowed = this.isDeactivationAllowed = !(this.userId in IUser_1.PredefinedUsersEnum);\r\n this.isEverythingDisabled = (this.userId == IUser_1.PredefinedUsersEnum.GUEST);\r\n return this.userService.get(this.userId).then(function (u) {\r\n PageHeaderHelper_1.PageHeader.set().header(u.fullName).update();\r\n angular.copy(u, _this.userProfile);\r\n _this.userProfile.newGroups = [];\r\n _this.userProfile.userLogons = [];\r\n _this.userProfile.ipAddressRanges = [];\r\n _this.currentDynamicIP = u.dynamicIp;\r\n _this.loadUserGroups();\r\n return _this.$q.all([\r\n _this.loadUserBusinessUnits(),\r\n _this.loadUserLogons(),\r\n _this.loadIpAddressRanges()\r\n ]);\r\n });\r\n };\r\n UserEditController.prototype.loadGroups = function () {\r\n if (this.isCreatePage()) {\r\n return this.loadGroupsOnCreate();\r\n }\r\n else {\r\n return this.loadGroupsOnEdit();\r\n }\r\n };\r\n UserEditController.prototype.onlyUniqueRoles = function () {\r\n return this.availableRoles.filter(function (x, i, a) { return a.indexOf(x) == i; });\r\n };\r\n UserEditController.prototype.capitalizeFirstLetter = function (string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\r\n };\r\n UserEditController.prototype.loadRoles = function () {\r\n var _this = this;\r\n if (this.isCreatePage()) {\r\n this.availableRoles = [];\r\n if (this.userProfile && this.userProfile.groupsList) {\r\n this.userProfile.groupsList.forEach(function (group) {\r\n _this.availableRoles.push(group.businessRole);\r\n });\r\n }\r\n return this.$q.when(null);\r\n }\r\n else {\r\n return this.userService.getAvailableUserRoles(this.userId).then(function (roles) {\r\n _this.availableRoles = angular.copy(roles);\r\n if (roles.length != 0 && _this.userProfile.businessRole != undefined && roles.indexOf(_this.userProfile.businessRole) < 0) {\r\n _this.unavailableRole = _this.userProfile.businessRole;\r\n }\r\n else {\r\n _this.unavailableRole = null;\r\n }\r\n _this.nextRoleByPriorityName = roles[0].toString();\r\n _this.roleUnavailableMessage = \"Selected role is unavailable. \" + _this.nextRoleByPriorityName + \" will be used.\";\r\n _this.nextRoleByPriorityMessage = \"No role selected. Role \" + _this.nextRoleByPriorityName + \" will be used.\";\r\n if (_this.userProfile.businessRole && _this.availableRoles.indexOf(_this.userProfile.businessRole) < 0) {\r\n _this.availableRoles.push(_this.userProfile.businessRole);\r\n }\r\n });\r\n }\r\n };\r\n UserEditController.prototype.isCreatePage = function () {\r\n return typeof this.userId === \"undefined\";\r\n };\r\n UserEditController.prototype.loadGroupsOnEdit = function () {\r\n var _this = this;\r\n return this.userService.getGroups(this.userProfile.businessUnitIds).then(function (groups) {\r\n _this.userGroupsListForEditing = angular.copy(groups);\r\n _this.userGroupsListForEditing.forEach(function (g) { return _this.groupById.set(g.id, g); });\r\n _this.userService.getUserGroups(_this.userId).then(function (userGroups) {\r\n _this.userGroups = angular.copy(userGroups);\r\n _this.userGroups.forEach(function (g) { return _this.userGroupList.set(g.id, g); });\r\n });\r\n _this.loadUserGroups();\r\n });\r\n };\r\n UserEditController.prototype.loadGroupsOnCreate = function () {\r\n var _this = this;\r\n return this.userService.getGroups(this.userProfile.businessUnitIds).then(function (groups) {\r\n _this.userGroupsListForEditing = angular.copy(groups);\r\n _this.userGroupsListForEditing.forEach(function (g) { return _this.groupById.set(g.id, g); });\r\n if (_this.userProfile.groupsList != null) {\r\n _this.userProfile.groupsList.forEach(function (g) {\r\n if (!_this.groupById.has(g.id)) {\r\n _this.userProfile.groupsList.splice(_this.userProfile.groupsList.indexOf(g), 1);\r\n }\r\n });\r\n }\r\n _this.loadUserGroups();\r\n });\r\n };\r\n UserEditController.prototype.loadAllowedBusinessUnits = function () {\r\n var _this = this;\r\n return this.userService.getAllowedBusinessUnits().then(function (businessUnits) {\r\n _this.allowedBusinessUnits = businessUnits;\r\n });\r\n };\r\n UserEditController.prototype.loadLogonProviders = function () {\r\n var _this = this;\r\n return this.authService.getProviders()\r\n .then(function (result) {\r\n _this.logonProviders = result;\r\n _this.recalculateAvailableLogonProviders();\r\n });\r\n };\r\n UserEditController.prototype.loadUserGroups = function () {\r\n var _this = this;\r\n if (this.userGroupsListForEditing) {\r\n this.userGroupsListForEditing.forEach(function (group) {\r\n group.selected = false;\r\n group.canBeRemoved = !(_this.userProfile.id == IUser_1.PredefinedUsersEnum.ADMIN && group.id == IGroup_1.GroupEnum.SYS_ADMINS) || !_this.userProfile.id;\r\n if (_this.userProfile.groupsList) {\r\n _this.userProfile.groupsList.forEach(function (userGroup) {\r\n if (group.id == userGroup.id) {\r\n group.selected = true;\r\n }\r\n if (!_this.userGroupsListForEditing.some(function (id) { return id.id === userGroup.id; })) {\r\n userGroup.selected = true;\r\n userGroup.canBeRemoved = false;\r\n _this.userGroupsListForEditing.push(angular.copy(userGroup));\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (this.userProfile.groupsList && this.userGroupsListForEditing.length == 0) {\r\n this.userProfile.groupsList.forEach(function (userGroup) {\r\n userGroup.selected = true;\r\n userGroup.canBeRemoved = false;\r\n _this.userGroupsListForEditing.push(angular.copy(userGroup));\r\n });\r\n }\r\n this.modificationGroups = angular.copy(this.userGroupsListForEditing);\r\n };\r\n UserEditController.prototype.loadUserLogons = function () {\r\n var _this = this;\r\n return this.userService.getUserLogons(this.userProfile.id).then(function (result) {\r\n _this.userProfile.userLogons.splice(0, _this.userProfile.userLogons.length);\r\n result.forEach(function (r) { return _this.userProfile.userLogons.push(r); });\r\n _this.recalculateAvailableLogonProviders();\r\n });\r\n };\r\n UserEditController.prototype.loadUserBusinessUnits = function () {\r\n var _this = this;\r\n return this.userService.getUserBusinessUnits(this.userProfile.id).then(function (result) {\r\n _this.userProfile.businessUnitIds = result;\r\n _this.getSecurityConfiguration();\r\n _this.onBusinessUnitChange();\r\n });\r\n };\r\n UserEditController.prototype.loadAvailableLocales = function () {\r\n var _this = this;\r\n return this.settingsService.getAvailableLocales().then(function (locales) {\r\n if (!_this.userId) {\r\n for (var i = 0; i < locales.length; i++) {\r\n var localeInfo = locales[i];\r\n if (localeInfo.defaultLocale) {\r\n _this.userProfile.locale = localeInfo.locale;\r\n }\r\n }\r\n }\r\n _this.availableLocales = locales;\r\n });\r\n };\r\n UserEditController.prototype.save = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n if (this.isCheckPassword && this.userProfile.userLogons\r\n && this.userProfile.userLogons.length != 0 && this.currentUser.id == this.userId) {\r\n var localLogonProvider = this.userProfile.userLogons\r\n .filter(function (logon) { return logon.providerKey === LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL]; });\r\n if (localLogonProvider && localLogonProvider.length != 0\r\n && localLogonProvider[0].password != undefined\r\n && !this.authService.checkPassword(localLogonProvider[0].password)) {\r\n this.error = \"Password must contain at least 1 letter, 1 number, 1 special character from !@#$%^&* and must be 8 or more characters\";\r\n INotifier_1.notifier.error(this.error);\r\n this.disableSaveButton = false;\r\n return;\r\n }\r\n }\r\n this.businessUnitsService.isFreeBusinessUnitsFull(this.businessUnitIdsWithFreePlan)\r\n .then(function (result) {\r\n _this.isFreePlanBuFull = result;\r\n if (!result || _this.userId) {\r\n if (_this.userProfile.businessRole && _this.userProfile.businessRole !== UserRole_1.UserRole[UserRole_1.UserRole.LEARNER]) {\r\n if (_this.availableRoles && _this.availableRoles.length === 0) {\r\n _this.dialogService.confirm(\"To select a role, you must select User Group.\", {\r\n title: \"Warning\",\r\n confirmButton: \"Ok\",\r\n hideCancelButton: true\r\n }).finally(function () {\r\n _this.disableSaveButton = false;\r\n });\r\n return;\r\n }\r\n else if (_this.availableRoles.indexOf(_this.userProfile.businessRole) === -1\r\n || _this.userProfile.businessRole == _this.unavailableRole) {\r\n var dialogMessage;\r\n dialogMessage = \"

    Can't apply this user role. You can choose only the next roles:

    \";\r\n for (var i = 0; i < _this.availableRoles.length; i++) {\r\n if (_this.availableRoles[i] == _this.unavailableRole) {\r\n continue;\r\n }\r\n var role = _this.userRoles.get(_this.availableRoles[i]);\r\n dialogMessage += \"

    \" + (i + 1) + \". \" + role + \"

    \";\r\n }\r\n _this.dialogService.confirm(dialogMessage, {\r\n title: \"Warning\",\r\n confirmButton: \"Ok\",\r\n hideCancelButton: true\r\n }).finally(function () {\r\n _this.disableSaveButton = false;\r\n });\r\n return;\r\n }\r\n }\r\n _this.userProfile.userLogons.forEach(function (logon) {\r\n if (_this.userProfile.notify) {\r\n logon.resetPassword = true;\r\n }\r\n if (!logon.password && _this.userProfile.notify) {\r\n logon.password = _this.generateRandomPassword();\r\n }\r\n else if (!logon.password) {\r\n logon.password = undefined;\r\n }\r\n });\r\n _this.confirmPassword = null;\r\n if (_this.userProfile.groupsList) {\r\n _this.userProfile.newGroups = [];\r\n _this.userProfile.groupsList.forEach(function (group) {\r\n _this.userProfile.newGroups.push(group.id);\r\n });\r\n }\r\n else {\r\n _this.userProfile.newGroups = [];\r\n }\r\n if (_this.userProfile.businessRole == '') {\r\n _this.userProfile.businessRole = null;\r\n }\r\n var promise = _this.userId\r\n ? _this.userService.update(_this.userProfile, _this.isResetPreview, _this.preview)\r\n : _this.userService.create(_this.userProfile);\r\n promise.then(function (u) {\r\n INotifier_1.notifier.success(\"User '\" + _this.userProfile.fullName + \"' has been saved\");\r\n _this.userService.notifyCreated(_this.userProfile, u.id).catch(function (response) {\r\n if (response.status == 409 && response.data.code == \"error.notification.template.disabled\") {\r\n _this.error = \"Notification template is disabled. Email has not been sent.\";\r\n INotifier_1.notifier.error(_this.error);\r\n }\r\n });\r\n if (_this.userId == null) {\r\n _this.systemPermissions.editUser\r\n ? _this.$location.path(_this.usersRouter.editUrl(u.id))\r\n : _this.$location.path(_this.usersRouter.indexUrl());\r\n }\r\n else {\r\n var upload = _this.preview\r\n ? _this.upload(_this.preview, _this.userId, \"preview\")\r\n : _this.$q.when(null);\r\n upload.then(function () {\r\n return _this.loadUser();\r\n });\r\n }\r\n if (_this.userId == _this.currentUser.id) {\r\n _this.$rootScope.$broadcast('avatar.upload.img', _this.preview, _this.isResetPreview);\r\n }\r\n }).then(function () {\r\n return _this.loadRoles();\r\n }).catch(function (response) {\r\n if (response.status == 409 && response.data.error) {\r\n switch (response.data.error) {\r\n case \"error.user.duplicate.name\":\r\n _this.error = \"Full name \" + _this.userProfile.fullName + \" already exists\";\r\n break;\r\n case \"error.user.duplicate.email\":\r\n _this.error = \"Email \" + _this.userProfile.email + \" already exists\";\r\n break;\r\n case \"error.duplicate.logon.provider\":\r\n _this.error = \"Only one logon for each type is allowed\";\r\n break;\r\n case \"error.user.password.short\":\r\n _this.error = \"The length of password must be at least 8 characters\";\r\n break;\r\n case \"error.invalid.password\":\r\n _this.error = \"Password must contain at least 1 letter, 1 number, 1 special character from !@#$%^&* and must be 8 or more characters\";\r\n break;\r\n default:\r\n if (response.data.error.indexOf(\"error.duplicate.login.for.provider.\") == 0) {\r\n var providerKey = response.data.error.substring(\"error.duplicate.login.for.provider.\".length);\r\n var logonFound = null;\r\n for (var j = 0; j < _this.userProfile.userLogons.length; j++) {\r\n if (_this.userProfile.userLogons[j].providerKey == providerKey) {\r\n logonFound = _this.userProfile.userLogons[j].name;\r\n break;\r\n }\r\n }\r\n if (logonFound) {\r\n _this.error = \"Username \" + logonFound + \" already exists\";\r\n }\r\n else {\r\n _this.error = \"Query has failed: please contact your system administrator or help desk\";\r\n }\r\n }\r\n else {\r\n _this.error = \"Query has failed: please contact your system administrator or help desk\";\r\n }\r\n }\r\n }\r\n INotifier_1.notifier.error(_this.error);\r\n })\r\n .finally(function () { return _this.disableSaveButton = false; });\r\n }\r\n else {\r\n INotifier_1.notifier.error(_this.getFreePlanMessage());\r\n _this.disableSaveButton = false;\r\n return;\r\n }\r\n });\r\n };\r\n UserEditController.prototype.upload = function (file, userId, fileType) {\r\n var urlBuilder = this.url.base(\"/api/users/upload?userId=:userId&fileType=:fileType\")\r\n .param(\":userId\", userId)\r\n .param(\":fileType\", fileType);\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(urlBuilder)\r\n .service(),\r\n file: file\r\n });\r\n };\r\n UserEditController.prototype.deactivate = function () {\r\n var _this = this;\r\n var promise = this.userService.setActive(this.userProfile.id, false);\r\n promise.then(function (u) {\r\n _this.$location.url(_this.usersRouter.indexUrl());\r\n });\r\n };\r\n UserEditController.prototype.activate = function () {\r\n var _this = this;\r\n this.businessUnitsService.isFreeBusinessUnitsFull(this.businessUnitIdsWithFreePlan)\r\n .then(function (result) {\r\n _this.isFreePlanBuFull = result;\r\n if (result == false) {\r\n _this.disableSaveButton = true;\r\n return _this.userService.setActive(_this.userProfile.id, true)\r\n .then(function (u) { return _this.loadUser(); })\r\n .finally(function () { return _this.disableSaveButton = false; });\r\n }\r\n else {\r\n INotifier_1.notifier.error(_this.getFreePlanMessage());\r\n _this.disableSaveButton = false;\r\n return;\r\n }\r\n });\r\n };\r\n UserEditController.prototype.selectGroup = function (index) {\r\n var group = this.modificationGroups[index];\r\n group.selected = true;\r\n };\r\n UserEditController.prototype.safeGroupSelect = function (index, immutable, $event) {\r\n console.log(index, immutable);\r\n console.log($event.target.checked);\r\n if (immutable) {\r\n return;\r\n }\r\n var group = this.modificationGroups[index];\r\n group.selected = $event.target.checked;\r\n };\r\n UserEditController.prototype.unselectGroup = function (index) {\r\n var group = this.modificationGroups[index];\r\n group.selected = false;\r\n };\r\n UserEditController.prototype.clearSelection = function () {\r\n this.loadGroups();\r\n };\r\n UserEditController.prototype.addGroups = function () {\r\n var _this = this;\r\n this.userProfile.groupsList = [];\r\n this.modificationGroups.forEach(function (g) {\r\n if (g.selected) {\r\n _this.userProfile.groupsList.push(g);\r\n }\r\n });\r\n $('#groupsModal').modal('hide');\r\n if (this.userId) {\r\n this.disableSaveButton = true;\r\n this.userService.updateUserGroups(this.userProfile.id, this.userProfile.version, this.userProfile.groupsList.map(function (userGroup) { return userGroup.id; }))\r\n .then(function (user) {\r\n INotifier_1.notifier.success(\"User groups successfully updated\");\r\n })\r\n .then(function () {\r\n _this.loadRoles();\r\n })\r\n .catch(function () {\r\n INotifier_1.notifier.error(\"Failed to update user groups\");\r\n })\r\n .finally(function () { return _this.disableSaveButton = false; });\r\n }\r\n else {\r\n this.loadRoles();\r\n }\r\n };\r\n UserEditController.prototype.deleteGroup = function (groupId) {\r\n var _this = this;\r\n this.modificationGroups.forEach(function (group) {\r\n if (group.id == groupId) {\r\n group.selected = false;\r\n }\r\n });\r\n this.userProfile.groupsList = [];\r\n this.modificationGroups.forEach(function (r) {\r\n if (r.selected) {\r\n _this.userProfile.groupsList.push(r);\r\n }\r\n });\r\n this.loadRoles();\r\n };\r\n UserEditController.prototype.recalculateAvailableLogonProviders = function () {\r\n var _this = this;\r\n this.isLoadingLogonProvider = false;\r\n this.logonProvidersForAdd.splice(0, this.logonProvidersForAdd.length);\r\n this.logonProviders.forEach(function (p) {\r\n var found = false;\r\n for (var j = 0; j < _this.userProfile.userLogons.length; j++) {\r\n if (_this.userProfile.userLogons[j].providerKey == p.key) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n _this.logonProvidersForAdd.push(p);\r\n }\r\n });\r\n this.isLoadingLogonProvider = true;\r\n };\r\n UserEditController.prototype.getLogonProviderName = function (providerKey) {\r\n for (var i = 0; i < this.logonProviders.length; i++) {\r\n if (providerKey == this.logonProviders[i].key) {\r\n return this.logonProviders[i].name;\r\n }\r\n }\r\n return undefined;\r\n };\r\n UserEditController.prototype.addUserLogon = function (providerKey) {\r\n var userLogon = {\r\n id: null,\r\n userId: this.userProfile.id,\r\n providerKey: providerKey,\r\n name: null,\r\n password: null,\r\n isActive: true,\r\n resetPassword: false\r\n };\r\n this.userProfile.userLogons.push(userLogon);\r\n this.recalculateAvailableLogonProviders();\r\n };\r\n UserEditController.prototype.removeUserLogon = function (providerKey) {\r\n var logonIndex = -1;\r\n for (var i = 0; i < this.userProfile.userLogons.length; i++) {\r\n if (this.userProfile.userLogons[i].providerKey == providerKey) {\r\n logonIndex = i;\r\n break;\r\n }\r\n }\r\n if (logonIndex != -1) {\r\n this.userProfile.userLogons.splice(logonIndex, 1);\r\n this.recalculateAvailableLogonProviders();\r\n this.logonProvider = '';\r\n }\r\n };\r\n UserEditController.prototype.onBusinessUnitChange = function () {\r\n this.loadGroups();\r\n this.checkFreePlanForBU();\r\n };\r\n UserEditController.prototype.isPasswordMatchedConfirmPassword = function () {\r\n var result = true;\r\n this.userProfile.userLogons.forEach(function (logon) {\r\n if (logon.password == logon.confirmPassword)\r\n result = true;\r\n else {\r\n result = (logon.password == \"\" || logon.password == undefined) &&\r\n (logon.confirmPassword == \"\" || logon.confirmPassword == undefined);\r\n }\r\n });\r\n return result;\r\n };\r\n UserEditController.prototype.deleteAccount = function () {\r\n var _this = this;\r\n this.dialogService.confirm(\"You are about to permanently delete the account \" + this.userProfile.fullName + \". Are you sure?\", {\r\n title: \"Account deleting\",\r\n confirmButton: \"Delete\",\r\n cancelButton: \"Cancel\"\r\n })\r\n .then(function () {\r\n var promise = _this.userService.deleteAccount(_this.userProfile.id);\r\n promise.then(function (u) {\r\n _this.$location.url(_this.usersRouter.indexUrl());\r\n });\r\n });\r\n };\r\n UserEditController.prototype.isUserAccessedToBusinessUnit = function (groupId) {\r\n if (this.userGroupList.has(groupId)) {\r\n var businessUnitId = this.userGroupList.get(groupId).businessUnitId;\r\n if (this.currentUser.businessUnits) {\r\n return this.currentUser.businessUnits.some(function (id) { return id == businessUnitId; });\r\n }\r\n return true;\r\n }\r\n return false;\r\n };\r\n UserEditController.prototype.loadCreditTypesAvailableForUser = function (user) {\r\n var _this = this;\r\n var forBusinessUnit = this.userProfile.businessUnitIds && this.userProfile.businessUnitIds.length == 1 ? this.userProfile.businessUnitIds[0] : undefined;\r\n var nullableBusinessUnit = this.userProfile.businessUnitIds && this.userProfile.businessUnitIds.length == 0 && !user.allBusinessUnits;\r\n return this.referenceService.getActiveReferenceEntitiesForSelector(\"creditTypes\", new IReferenceEntitiesParams_1.ReferenceEntitiesParams(undefined, undefined, undefined, undefined, forBusinessUnit, nullableBusinessUnit), null)\r\n .then(function (result) {\r\n _this.availableCreditTypes = result.map(function (i) { return i.name; });\r\n _this.userProfile.creditsList = _this.userProfile.creditsList.filter(function (s) { return _this.availableCreditTypes.indexOf(s) != -1; });\r\n return _this.availableCreditTypes;\r\n });\r\n };\r\n UserEditController.prototype.setViewType = function (viewType) {\r\n var _this = this;\r\n switch (viewType) {\r\n case \"GENERAL_INFO\":\r\n this.viewType = \"GENERAL_INFO\";\r\n break;\r\n case 'PROFILE':\r\n this.loadUserCreditTypes()\r\n .then(function () { return _this.viewType = \"PROFILE\"; });\r\n break;\r\n case 'CE_CREDITS':\r\n this.viewType = \"CE_CREDITS\";\r\n break;\r\n case 'IP_ADDRESS':\r\n this.viewType = \"IP_ADDRESS\";\r\n break;\r\n }\r\n };\r\n UserEditController.prototype.loadUserCreditTypes = function () {\r\n var _this = this;\r\n return this.userService.getUserCreditTypes(this.userProfile.id)\r\n .then(function (result) {\r\n _this.userProfile.creditTypes = result;\r\n _this.userProfile.creditsList = result && result.length > 0 ? result.split(\",\") : [];\r\n return _this.loadCreditTypesAvailableForUser(_this.userProfile)\r\n .then(function () {\r\n return _this.userProfile.creditTypes;\r\n });\r\n });\r\n };\r\n UserEditController.prototype.updateUserCreditTypes = function () {\r\n var newCredits = this.userProfile.creditsList && this.userProfile.creditsList.length > 0 ? this.userProfile.creditsList.join(\",\") : \"\";\r\n return this.userService.updateUserCreditTypes(this.userProfile.id, newCredits)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(\"Successfully saved\");\r\n return result;\r\n });\r\n };\r\n UserEditController.prototype.loadIpAddressRanges = function () {\r\n var _this = this;\r\n return this.userService.getIpAddressRanges(this.userProfile.id).then(function (result) {\r\n _this.userProfile.ipAddressRanges.splice(0, _this.userProfile.ipAddressRanges.length);\r\n result.forEach(function (r) { return _this.userProfile.ipAddressRanges.push(r); });\r\n });\r\n };\r\n UserEditController.prototype.clearIpAddressRangeForm = function () {\r\n var _this = this;\r\n this.ipAddressRange = {};\r\n setTimeout(function () { return _this.editingIpAddressRange = false; }, 0);\r\n };\r\n UserEditController.prototype.saveIpAddressRange = function () {\r\n var _this = this;\r\n var ipAddressRange = {};\r\n ipAddressRange.userId = this.userId;\r\n ipAddressRange.fromIp = this.ipAddressRange.fromIp;\r\n ipAddressRange.toIp = this.ipAddressRange.toIp;\r\n ipAddressRange.isIPv6 = this.ipAddressRange.isIPv6 === undefined ? false : this.ipAddressRange.isIPv6;\r\n if (!this.ipAddressRange.id) {\r\n this.userService.saveIpAddressRange(ipAddressRange)\r\n .then(function () {\r\n _this.isAddRowVisible = false;\r\n _this.loadIpAddressRanges();\r\n _this.clearIpAddressRangeForm();\r\n INotifier_1.notifier.success(\"IP range has been added\");\r\n }).catch(function (response) {\r\n INotifier_1.notifier.error(\"IP range failed added\");\r\n });\r\n }\r\n else {\r\n ipAddressRange.id = this.ipAddressRange.id;\r\n ipAddressRange.version = this.ipAddressRange.version;\r\n this.userService.updateIpAddressRange(ipAddressRange)\r\n .then(function () {\r\n _this.isAddRowVisible = false;\r\n _this.loadIpAddressRanges();\r\n _this.clearIpAddressRangeForm();\r\n INotifier_1.notifier.success(\"IP range successfully updated\");\r\n }).catch(function (response) {\r\n INotifier_1.notifier.error(\"IP range failed updated\");\r\n });\r\n }\r\n };\r\n UserEditController.prototype.saveDynamicIp = function () {\r\n var _this = this;\r\n this.userService.updateDynamicIp(this.userId).then(function () {\r\n _this.loadUser();\r\n INotifier_1.notifier.success(\"Dynamic IP successfully updated\");\r\n });\r\n };\r\n UserEditController.prototype.cancelIpAddressRangeAdd = function () {\r\n this.clearIpAddressRangeForm();\r\n this.isAddRowVisible = false;\r\n };\r\n UserEditController.prototype.editIpAddressRange = function (ipAddressRange) {\r\n this.ipAddressRange = {};\r\n this.isAddRowVisible = false;\r\n this.editingIpAddressRange = true;\r\n this.ipAddressRange.id = ipAddressRange.id;\r\n this.ipAddressRange.version = ipAddressRange.version;\r\n };\r\n UserEditController.prototype.removeIpAddressRange = function (ipAddressRangeId) {\r\n var _this = this;\r\n this.userService.removeIpAddressRange(ipAddressRangeId)\r\n .then(function () {\r\n _this.loadIpAddressRanges();\r\n INotifier_1.notifier.success(\"Selected IP range has been removed\");\r\n });\r\n };\r\n UserEditController.prototype.getSecurityConfiguration = function () {\r\n var _this = this;\r\n if (this.userProfile.businessUnitIds && this.userProfile.businessUnitIds.length == 1\r\n && (this.systemPermissions.manageAnyBusinessUnit || this.systemPermissions.configureBusinessUnitSettings)) {\r\n this.businessUnitsService.getSecurityConfiguration(this.userProfile.businessUnitIds[0])\r\n .then(function (result) { return _this.showedIpAddressTab = result.enforceIpVerification; });\r\n }\r\n };\r\n UserEditController.prototype.validateSaveForm = function () {\r\n var _this = this;\r\n this.isFormValid = false;\r\n if (this.ipAddressRange.isIPv6 === undefined) {\r\n this.ipAddressRange.isIPv6 = false;\r\n }\r\n if (this.timeoutId) {\r\n clearTimeout(this.timeoutId);\r\n }\r\n this.timeoutId = setTimeout(function () {\r\n _this.userService.validateIpAddressRange(_this.ipAddressRange).then(function (res) {\r\n _this.isFormValid = res;\r\n });\r\n }, 1500);\r\n };\r\n UserEditController.prototype.showModalDialog = function () {\r\n var modal = $(\".groups-modal .modal-dialog\");\r\n if (window.innerWidth < 1200) {\r\n modal.css('margin-right', 'auto');\r\n modal.css('margin-left', 'auto');\r\n }\r\n else {\r\n var element = document.getElementById(\"filter__main\");\r\n if (element != null) {\r\n var leftWidth = element.offsetLeft - 50;\r\n modal.css('margin-left', leftWidth + 'px');\r\n }\r\n }\r\n };\r\n UserEditController.prototype.getGroupEditUrl = function (groupId) {\r\n return this.usersRouter.groupEditUrl(groupId);\r\n };\r\n UserEditController.prototype.isShowGroupLink = function (group) {\r\n if (group && group.businessUnitId) {\r\n return this.currentUser.allBusinessUnits || this.currentUser.businessUnits.indexOf(group.businessUnitId) != -1;\r\n }\r\n return this.currentUser.allBusinessUnits;\r\n };\r\n UserEditController.prototype.isRightPassword = function (password) {\r\n if (this.isCheckPassword && password) {\r\n return this.authService.checkPassword(password);\r\n }\r\n return true;\r\n };\r\n UserEditController.prototype.selectAllBU = function () {\r\n this.userProfile.businessUnitIds = this.userProfile.businessUnitIds.length === this.allowedBusinessUnits.length ? []\r\n : this.allowedBusinessUnits.map(function (bu) { return bu.id; });\r\n };\r\n UserEditController.prototype.selectDeselectBU = function (itemId) {\r\n var _this = this;\r\n if (this.userProfile && this.userProfile.businessUnitIds.indexOf(itemId) === -1) {\r\n this.userProfile.businessUnitIds.push(itemId);\r\n }\r\n else {\r\n this.userProfile.businessUnitIds = this.userProfile.businessUnitIds.filter(function (bu) { return bu !== itemId; });\r\n }\r\n if (this.userProfile.businessUnitIds.length == 1) {\r\n this.businessUnitsService.getBusinessUnitById(this.userProfile.businessUnitIds[0]).then(function (businessUnit) {\r\n _this.userProfile.locale = businessUnit.locale ? businessUnit.locale : AppProperties_1.AppProperties.defaultLocale;\r\n });\r\n }\r\n else {\r\n this.userProfile.locale = AppProperties_1.AppProperties.defaultLocale;\r\n }\r\n };\r\n UserEditController.prototype.isSelected = function (item) {\r\n return this.userProfile && this.userProfile.businessUnitIds && this.userProfile.businessUnitIds.indexOf(item.id) !== -1;\r\n };\r\n UserEditController.prototype.getFreePlanMessage = function () {\r\n return StringBuilder_1.StringBuilder.interpolate(\"You have reached maximum :number active users allowed for Free Plan\")\r\n .with(\":number\", this.maxFreePlanUsers).build();\r\n };\r\n UserEditController.prototype.checkFreePlanForBU = function () {\r\n var _this = this;\r\n var result;\r\n if (this.userProfile.businessUnitIds.length == 0) {\r\n this.isFreePlanBuFull = false;\r\n return;\r\n }\r\n this.businessUnitsService.getBusinessUnitsWithFreePlan(this.userProfile.businessUnitIds)\r\n .then(function (id) {\r\n _this.businessUnitIdsWithFreePlan = id;\r\n if (_this.businessUnitIdsWithFreePlan.length == _this.userProfile.businessUnitIds.length) {\r\n _this.businessUnitIdsWithFreePlan.forEach(function (id) {\r\n _this.businessUnitsService.isAvailableCreatingNewUserForFreePlan(id)\r\n .then(function (res) { result = res; }).then(function () {\r\n if (!result) {\r\n _this.isFreePlanBuFull = true;\r\n return;\r\n }\r\n });\r\n });\r\n }\r\n });\r\n };\r\n UserEditController.prototype.generateRandomPassword = function () {\r\n var numbers = '0123456789';\r\n var symbols = '!@#$%^&*';\r\n var alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n var passwordLength = 12;\r\n var password = '';\r\n for (var i = 0; i <= passwordLength / 4; i++) {\r\n var rand = Math.floor(Math.random() * alphabet.length);\r\n password += alphabet.substring(rand, rand + 1);\r\n rand = Math.floor(Math.random() * numbers.length);\r\n password += numbers.substring(rand, rand + 1);\r\n rand = Math.floor(Math.random() * symbols.length);\r\n password += symbols.substring(rand, rand + 1);\r\n }\r\n return password;\r\n };\r\n UserEditController.prototype.decodeLogonProvider = function (name) {\r\n var result = name;\r\n switch (name) {\r\n case \"Internal accounts\": {\r\n result = \"Internal accounts\";\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n UserEditController.prototype.loginAsUser = function (userId) {\r\n var _this = this;\r\n this.userService.loginAsThisUser(userId)\r\n .then(function () {\r\n _this.$location.path('/');\r\n })\r\n .catch(function (e) {\r\n if (e.code === \"error.users.logons.is.empty\") {\r\n INotifier_1.notifier.warning(\"User must have at least one logon way for authorization\");\r\n }\r\n else {\r\n INotifier_1.notifier.warning(\"Login as this user failed\");\r\n }\r\n });\r\n };\r\n UserEditController.NAME = \"users.UserEditController\";\r\n UserEditController.$inject = [\r\n \"$scope\",\r\n \"$rootScope\",\r\n \"$timeout\",\r\n \"$log\",\r\n \"$http\",\r\n \"$q\",\r\n \"$routeParams\",\r\n \"$location\",\r\n \"Upload\",\r\n UserService_1.UserService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n DialogService_1.DialogService.NAME,\r\n ReferenceService_1.ReferenceService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n BillingPlanService_1.BillingPlanService.NAME\r\n ];\r\n return UserEditController;\r\n})();\r\nexports.UserEditController = UserEditController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../businessUnits/BusinessUnitsService\":44,\"../components/dialog/DialogService\":166,\"../finances/BillingPlanService\":231,\"../reference/ReferenceService\":409,\"../reference/models/IReferenceEntitiesParams\":411,\"../security/LogonProviderEnum\":416,\"../security/PermissionsService\":418,\"../settings/SettingsService\":427,\"../urls/UsersRouter\":493,\"../utils/AppProperties\":\"AppProperties\",\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./UserService\":499,\"./models/IGroup\":505,\"./models/IUser\":506,\"./models/UserRole\":507}],499:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar ExpirationCache_1 = require(\"../common/ExpirationCache\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar UserService = (function () {\r\n function UserService($http, url, authService, $uploader) {\r\n this.$http = $http;\r\n this.url = url;\r\n this.authService = authService;\r\n this.$uploader = $uploader;\r\n this.expCache = new ExpirationCache_1.ExpirationCache();\r\n }\r\n UserService.prototype.get = function (id) {\r\n return this.$http.get(this.url.base(\"/api/users/:id\").param(\":id\", id).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.create = function (user) {\r\n return this.$http.post(this.url.service(\"/api/users\"), user)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.notifyCreated = function (user, userId) {\r\n user.id = userId;\r\n user.version = 1;\r\n return this.$http.post(this.url.service(\"/api/users/notify\"), user)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.selfSignup = function (user) {\r\n return this.$http.post(this.url.service(\"/api/users/selfSignup\"), user)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.startTrial = function (companyName, companyDomain, user) {\r\n return this.$http.post(this.url.base(\"/api/users/startTrial?companyName=:companyName&companyDomain=:companyDomain\")\r\n .param(\":companyName\", companyName)\r\n .param(\":companyDomain\", companyDomain)\r\n .service(), user)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.update = function (user, isResetPreview, preview) {\r\n user.preview = preview != null\r\n ? { name: preview.name, type: preview.type, size: preview.size }\r\n : null;\r\n user.isResetPreview = isResetPreview;\r\n return this.$http.put(this.url.service(\"/api/users\"), user)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.updateUserGroups = function (userId, version, newGroups) {\r\n var parameters = {\r\n version: version,\r\n newGroups: newGroups\r\n };\r\n return this.$http.put(this.url.base(\"/api/users/:userId/groups\")\r\n .param(\":userId\", userId)\r\n .service(), parameters)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.setActive = function (id, isActive) {\r\n return this.$http.put(this.url.base(\"/api/users/:id/setActive/:isActive\")\r\n .param(\":id\", id)\r\n .param(\":isActive\", isActive).service(), undefined)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.deleteAccount = function (userId) {\r\n return this.$http.put(this.url.base(\"/api/users/:userId/deleteAccount\")\r\n .param(\":userId\", userId).service(), undefined)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.deleteMyAccount = function (userId) {\r\n return this.$http.put(this.url.base(\"/api/users/:userId/deleteMyAccount\")\r\n .param(\":userId\", userId).service(), undefined)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.mergeUsers = function (presentUserId, presentUserVersion, outdatedUserId, outdatedUserVersion) {\r\n return this.$http.put(this.url.base(\"/api/users/:presentUserId/:presentUserVersion/mergeWith/:outdatedUserId/:outdatedUserVersion\")\r\n .param(\":presentUserId\", presentUserId)\r\n .param(\":presentUserVersion\", presentUserVersion)\r\n .param(\":outdatedUserId\", outdatedUserId)\r\n .param(\":outdatedUserVersion\", outdatedUserVersion)\r\n .service(), undefined)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getGroups = function (businessUnitIds) {\r\n return this.$http.get(this.url.service(\"/api/users/groups\"), { params: { businessUnitIds: businessUnitIds } })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getUserLogons = function (userId) {\r\n return this.$http.get(this.url.base(\"/api/users/:userId/logons\").param(\":userId\", userId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getCurrentUserProfile = function () {\r\n return this.$http.get(this.url.service(\"/api/users/currentProfile\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getCurrentUserLocalLogon = function () {\r\n return this.$http.get(this.url.service(\"/api/users/current/localLogon\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.updatePageViewMode = function (pageViewMode, userId) {\r\n if (userId) {\r\n return this.$http.put(this.url.base(\"/api/users/:id/pageViewMode\")\r\n .param(\":id\", userId)\r\n .service(), JSON.stringify(pageViewMode))\r\n .then(function (result) { return result.data; });\r\n }\r\n else {\r\n return this.$http.put(this.url.base(\"/api/users/current/pageViewMode\")\r\n .service(), JSON.stringify(pageViewMode))\r\n .then(function (result) { return result.data; });\r\n }\r\n };\r\n UserService.prototype.updateCurrentUserProfile = function (user, password, preview, isResetPreview) {\r\n var userUpdateInput = angular.copy(user);\r\n userUpdateInput.isResetPreview = isResetPreview;\r\n userUpdateInput.password = password;\r\n userUpdateInput.preview = preview != null\r\n ? { name: preview.name, type: preview.type, size: preview.size }\r\n : null;\r\n return this.$http.put(this.url.service(\"/api/users/currentProfile\"), userUpdateInput)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getUsersWithoutExcludedUsersForSelector = function (businessUnitId, excludedUserIds) {\r\n var params = {\r\n businessUnitId: businessUnitId,\r\n excludedUserIds: excludedUserIds\r\n };\r\n return this.$http.get(this.url.service(\"/api/userSelector/users\"), { params: params })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.sendEmailGroupMembersNotification = function (groupId, message, subject) {\r\n return this.$http.post(this.url.base(\"api/users/groups/\" + groupId + \"/sendEmails\").service(), { message: message, subject: subject })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getManagedUsersForSelector = function (businessUnitId) {\r\n return this.$http.get(this.url.service(\"/api/userSelector/managedUsers\"), { params: { businessUnitId: businessUnitId } })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getGroupsWithoutExcludedGroupsForSelector = function (businessUnitId, excludedGroupIds) {\r\n var params = {\r\n businessUnitId: businessUnitId,\r\n excludedGroupIds: excludedGroupIds\r\n };\r\n return this.$http.get(this.url.service(\"/api/userSelector/groups\"), { params: params })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getManagedGroupsForSelector = function (businessUnitId) {\r\n return this.$http.get(this.url.service(\"/api/userSelector/managedGroups\"), { params: { businessUnitId: businessUnitId } })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.setActiveGroupWithChildren = function (isActive, parentId) {\r\n return this.$http.put(this.url.base(\"/api/users/groups/setActive/:isActive/with/children/:parentId\")\r\n .param(\":isActive\", isActive)\r\n .param(\":parentId\", parentId).service(), undefined)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getGroup = function (groupId) {\r\n return this.$http.get(this.url.base(\"/api/users/groups/:groupId\").param(\":groupId\", groupId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getCurrentUserBusinessRole = function () {\r\n return this.$http.get(this.url.base(\"/api/users/current/businessRole\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.createGroup = function (group) {\r\n return this.$http.post(this.url.service(\"/api/users/groups\"), group)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.updateGroup = function (group) {\r\n return this.$http.put(this.url.service(\"/api/users/groups\"), group)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.updateGroupPermissions = function (groupId, version, permissionsIds) {\r\n return this.$http.put(this.url.base(\"/api/users/groups/:groupId/permissions?version=:version\")\r\n .param(\":groupId\", groupId)\r\n .param(\":version\", version)\r\n .service(), permissionsIds)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getActiveGroupsNoChildren = function (parentId) {\r\n return this.$http.get(this.url.base(\"/api/users/groups/active/no/children/:parentId\")\r\n .param(\":parentId\", parentId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getActiveGroups = function (businessUnitId) {\r\n return this.$http.get(this.url.service(\"/api/users/groups/active\"), { params: { businessUnitId: businessUnitId } })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.changeUserNotificationFrequency = function (frequencyId) {\r\n return this.$http.post(this.url.service(\"/api/users/notifications/frequency\"), JSON.stringify(frequencyId))\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getAllowedBusinessUnits = function () {\r\n return this.$http.get(this.url.service(\"/api/users/allowedBusinessUnits\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getUserBusinessUnits = function (userId) {\r\n return this.$http.get(this.url.base(\"/api/users/:userId/businessUnits\").param(\":userId\", userId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getUserGroups = function (userId) {\r\n return this.$http.get(this.url.base(\"/api/users/:userId/groups\").param(\":userId\", userId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getAvailableUserRoles = function (userId) {\r\n return this.$http.get(this.url.base(\"/api/users/:userId/availableRoles\").param(\":userId\", userId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getAvailableUserRolesForCurrentUser = function () {\r\n return this.$http.get(this.url.base(\"/api/users/current/availableRoles\").service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getUserCreditTypes = function (userId) {\r\n return this.$http.get(this.url.service(\"/api/users/\" + userId + \"/creditTypes\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.updateUserCreditTypes = function (userId, newCreditTypes) {\r\n return this.$http.put(this.url.service(\"/api/users/\" + userId + \"/creditTypes\"), newCreditTypes && newCreditTypes.length > 0 ? JSON.stringify(newCreditTypes) : null)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.deleteUserCredit = function (userId, userCreditId) {\r\n return this.$http.delete(this.url.service(\"/api/users/\" + userId + \"/credits/\" + userCreditId))\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getUserCredit = function (userId, userCreditId) {\r\n return this.$http.get(this.url.service(\"/api/users/\" + userId + \"/credits/\" + userCreditId))\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.updateUserCredit = function (userId, userCreditId, updatedCredit) {\r\n return this.$http.put(this.url.service(\"/api/users/\" + userId + \"/credits/\" + userCreditId), updatedCredit)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.createUserCredit = function (userId, newUserCredit) {\r\n return this.$http.post(this.url.service(\"/api/users/\" + userId + \"/credits\"), newUserCredit)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.uploadUserCreditAttachment = function (userCreditId, attachment) {\r\n return this.$uploader.upload({\r\n method: \"POST\",\r\n url: angular.copy(this.url.base(\"/api/users/credits/:id/attachment/upload\")\r\n .param(\":id\", userCreditId))\r\n .service(),\r\n file: attachment\r\n }).then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.exportUserCredits = function (parameters) {\r\n var _this = this;\r\n var reportType = 'USER_CE_CREDIT_LOG';\r\n return this.$http.post(this.url.base(\"/api/reports/downloadToken/:reportType\")\r\n .param(\":reportType\", reportType)\r\n .service(), {\r\n parameters: JSON.stringify(parameters)\r\n }).then(function (result) { return _this.url.base(\"/api/reports/download/:token\").param(\":token\", result.data.token).service(); });\r\n };\r\n UserService.prototype.isUserInstructor = function (courseId) {\r\n return this.$http.get(this.url.service(\"/api/users/\" + courseId + \"/isInstructor\"), { cache: this.expCache })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.isUserResponsibleTeacher = function (courseId) {\r\n return this.$http.get(this.url.service(\"/api/users/\" + courseId + \"/isTeacher\"), { cache: this.expCache })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.isUserSystemAdministrator = function () {\r\n return this.$http.get(this.url.service(\"/api/users/isSystemAdministrator\"), { cache: this.expCache })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.isUserAdministrator = function (courseId) {\r\n return this.$http.get(this.url.service(\"/api/users/\" + courseId + \"/isAdministrator\"), { cache: this.expCache })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getOwnersUrl = function () {\r\n return this.$http.get(this.url.service(\"/api/userSelector/usersForCurrentUser\"))\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getIpAddressRanges = function (userId) {\r\n return this.$http.get(this.url.base(\"/api/users/:userId/ipRanges\").param(\":userId\", userId).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.saveIpAddressRange = function (ipAddressRange) {\r\n return this.$http.post(this.url.service(\"/api/users/ipRange\"), ipAddressRange)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.updateIpAddressRange = function (ipAddressRange) {\r\n return this.$http.put(this.url.service(\"/api/users/ipRange\"), ipAddressRange)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.removeIpAddressRange = function (ipAddressRangeId) {\r\n return this.$http.delete(this.url.base(\"/api/users/ipRange/:ipAddressRangeId\")\r\n .param(\":ipAddressRangeId\", ipAddressRangeId)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.addIpAddressRange = function (username) {\r\n return this.$http.put(this.url.base(\"/api/users/ipRange/:username/add\")\r\n .param(\":username\", username)\r\n .service(), null)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.validateIpAddressRange = function (ipAddressRange) {\r\n return this.$http.post(this.url.service(\"/api/users/ipRange/validate\"), ipAddressRange)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getMenuConfiguration = function (businessRole) {\r\n return this.$http.get(this.url.service(\"/api/users/menu/learner/configuration/\" + businessRole))\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getLogoByUserId = function (id) {\r\n return this.$http.get(this.url.base(\"/api/users/logo/:id\").param(\":id\", id).service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getUserGroupsForFilter = function (businessUnitId) {\r\n return this.$http.get(this.url.service(\"/api/users/groups/forFilter\"), { params: { businessUnitId: businessUnitId } })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.updateDynamicIp = function (id) {\r\n return this.$http.put(this.url.base(\"/api/users/:id/dynamicIp\")\r\n .param(\":id\", id).service(), undefined)\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getUserEmailByLogonName = function (logonName) {\r\n return this.$http.get(this.url.base(\"/api/users/emailByLogonName/:logonName\")\r\n .param(\":logonName\", logonName)\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.getUserPageViewMode = function () {\r\n return this.$http.get(this.url.base(\"/api/users/current/viewMode\")\r\n .service())\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.prototype.loginAsThisUser = function (userId) {\r\n var _this = this;\r\n return this.$http.post(this.url.base(\"/api/users/generateToken/:userId\")\r\n .param(\":userId\", userId)\r\n .service(), {})\r\n .then(function (result) {\r\n return _this.authService.changeTokenInfo(result, true);\r\n });\r\n };\r\n UserService.prototype.isAllowedCreditsSelfReportingForUser = function (userId) {\r\n return this.$http.get(this.url.service(\"/api/users/\" + userId + \"/allowCreditsSelfReporting\"), { cache: this.expCache })\r\n .then(function (result) { return result.data; });\r\n };\r\n UserService.NAME = \"users.UserService\";\r\n UserService.minPasswordLength = 1;\r\n UserService.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n \"Upload\"\r\n ];\r\n return UserService;\r\n})();\r\nexports.UserService = UserService;\r\n},{\"../auth/AuthService\":18,\"../common/ExpirationCache\":55,\"./../utils/UrlService\":528}],500:[function(require,module,exports){\nvar IGroup_1 = require(\"./models/IGroup\");\r\nvar UserService_1 = require(\"./UserService\");\r\nvar SettingsService_1 = require(\"./../settings/SettingsService\");\r\nvar AuthRouter_1 = require(\"./../urls/AuthRouter\");\r\nvar MenuHelper_1 = require(\"./../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"./../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar MainRouter_1 = require(\"./../urls/MainRouter\");\r\nvar AuthRedirect_1 = require(\"./../authcore/AuthRedirect\");\r\nvar SecurityService_1 = require(\"./../security/SecurityService\");\r\nvar LogonProviderEnum_1 = require(\"./../security/LogonProviderEnum\");\r\nvar PoliciesRouter_1 = require(\"../urls/PoliciesRouter\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar HomepageHelper_1 = require(\"../utils/HomepageHelper\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar LogOnController_1 = require(\"../auth/LogOnController\");\r\nvar AuthManager_1 = require(\"../authcore/AuthManager\");\r\nvar DialogService_1 = require(\"../components/dialog/DialogService\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar UserSignupController = (function () {\r\n function UserSignupController($location, $window, userApi, settingsApi, authRouter, authRedirect, mainRouter, securityService, url, authApi, authManager, settingsService, policiesRouter, dialogService, businessUnitsService, authService) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.userApi = userApi;\r\n this.settingsApi = settingsApi;\r\n this.authRouter = authRouter;\r\n this.authRedirect = authRedirect;\r\n this.mainRouter = mainRouter;\r\n this.securityService = securityService;\r\n this.url = url;\r\n this.authApi = authApi;\r\n this.authManager = authManager;\r\n this.settingsService = settingsService;\r\n this.policiesRouter = policiesRouter;\r\n this.dialogService = dialogService;\r\n this.businessUnitsService = businessUnitsService;\r\n this.authService = authService;\r\n this.isTermsOfUseAndPrivacyPolicyAccepted = false;\r\n this.userLogon = {\r\n name: \"\",\r\n password: \"\",\r\n providerKey: LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL],\r\n isActive: true\r\n };\r\n this.user = {\r\n fullName: \"\",\r\n isActive: true,\r\n newGroups: [IGroup_1.GroupEnum.REGISTERED_USERS],\r\n locale: null,\r\n userLogons: [this.userLogon]\r\n };\r\n this.disableSaveButton = false;\r\n this.minPasswordLength = UserService_1.UserService.minPasswordLength;\r\n this.isCheckPassword = false;\r\n if (this.authManager.isAuthenticated()) {\r\n this.dialogService.confirm(\"You are already logged on to the system. Please logout first before attempting to sign up\", {\r\n title: \"Log out\" + \"?\",\r\n confirmButton: \"Log out\",\r\n cancelButton: \"Cancel\"\r\n }).then(function () {\r\n _this.authApi.logOff()\r\n .then(function () {\r\n location.reload();\r\n });\r\n }).catch(function () {\r\n _this.$location.url(_this.mainRouter.mainUrl());\r\n });\r\n }\r\n else {\r\n this.securityService.demandNotAuthenticated();\r\n this.loadAvailableLocales();\r\n var execDomain = new RegExp(\"(?:https*:\\/\\/)[^/]*\", \"s\").exec(AppProperties_1.AppProperties.baseUrl);\r\n var baseUrl = execDomain != null ? execDomain[0] : \"\";\r\n if (this.$window.location.origin != baseUrl) {\r\n var domain = this.$window.location.origin.indexOf(\"http\") != -1 ?\r\n this.$window.location.origin.split(\"//\")[1].split(\".\")\r\n : this.$window.location.origin.split(\".\");\r\n this.businessUnitsService.getBusinessUnitByDomain(domain[0]).then(function (r) {\r\n r != \"\" ? _this.user.businessUnitIds = [r] : _this.user.businessUnitIds = [];\r\n });\r\n }\r\n else {\r\n var buIdInvite = this.$location.search()[AuthRouter_1.AuthRouter.BUSINESS_UNIT_ID_PARAM];\r\n if (buIdInvite != null && buIdInvite != undefined && !isNaN(buIdInvite)) {\r\n this.user.businessUnitIds = [parseInt(buIdInvite)];\r\n }\r\n }\r\n }\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.MAIN_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Core ACHIEVE - Sign Up\").update();\r\n this.settingsService.isCheckPassword()\r\n .then(function (isCheck) { return _this.isCheckPassword = isCheck; });\r\n }\r\n UserSignupController.prototype.loadAvailableLocales = function () {\r\n var _this = this;\r\n this.settingsApi.getAvailableLocales().then(function (locales) {\r\n for (var i = 0; i < locales.length; i++) {\r\n var localeInfo = locales[i];\r\n if (localeInfo.defaultLocale) {\r\n _this.user.locale = localeInfo.locale;\r\n }\r\n }\r\n _this.availableLocales = locales;\r\n });\r\n };\r\n UserSignupController.prototype.save = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n this.confirmPassword = null;\r\n if (this.isCheckPassword && !this.authService.checkPassword(this.userLogon.password)) {\r\n this.error = \"Password must contain at least 1 letter, 1 number, 1 special character from !@#$%^&* and must be 8 or more characters\";\r\n this.disableSaveButton = false;\r\n return;\r\n }\r\n var promise = this.userApi.selfSignup(this.user);\r\n promise.then(function () {\r\n _this.disableSaveButton = false;\r\n INotifier_1.notifier.success(\"User '\" + _this.user.fullName + \"' has been saved\");\r\n }).then(function (response) {\r\n _this.authApi.logOn(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL] + \":\" + _this.user.userLogons[0].name, _this.user.userLogons[0].password).then(function (user) {\r\n var locale = user.locale ? user.locale : AppProperties_1.AppProperties.currentLocale;\r\n if (!LogOnController_1.LogOnController.reloadApplicationForLocaleIfNeeded(locale, false)) {\r\n _this.authManager.enableAutoSso();\r\n _this.settingsService.getHomepage().then(function (homepage) {\r\n _this.authRedirect.returnAfterLogOn(false, HomepageHelper_1.HomepageHelper.getHomepageUrl(homepage));\r\n });\r\n }\r\n });\r\n }).catch(function (response) {\r\n _this.disableSaveButton = false;\r\n if (response.status == 409 && response.data.error) {\r\n switch (response.data.error) {\r\n case \"error.user.duplicate.name\":\r\n _this.error = \"Full name \" + _this.user.fullName + \" already exists\";\r\n break;\r\n case \"error.user.duplicate.email\":\r\n _this.error = \"Email \" + _this.user.email + \" already exists\";\r\n break;\r\n case \"error.duplicate.logon.provider\":\r\n _this.error = \"Only one logon for each type is allowed\";\r\n break;\r\n case \"error.user.password.short\":\r\n _this.error = \"The length of password must be at least 8 characters\";\r\n break;\r\n case \"error.invalid.password\":\r\n _this.error = \"Password must contain at least 1 letter, 1 number, 1 special character from !@#$%^&* and must be 8 or more characters\";\r\n break;\r\n default:\r\n if (response.data.error.indexOf(\"error.duplicate.login.for.provider.\") === 0) {\r\n var providerKey = response.data.error.substring(\"error.duplicate.login.for.provider.\".length);\r\n var logonFound = null;\r\n for (var j = 0; j < _this.user.userLogons.length; j++) {\r\n if (_this.user.userLogons[j].providerKey == providerKey) {\r\n logonFound = _this.user.userLogons[j].name;\r\n break;\r\n }\r\n }\r\n if (logonFound) {\r\n _this.error = \"Username \" + logonFound + \" already exists\";\r\n }\r\n else {\r\n _this.error = \"Query has failed: please contact your system administrator or help desk\";\r\n }\r\n }\r\n else {\r\n _this.error = \"Query has failed: please contact your system administrator or help desk\";\r\n }\r\n }\r\n }\r\n INotifier_1.notifier.error(_this.error);\r\n });\r\n };\r\n UserSignupController.prototype.doCancel = function () {\r\n if (this.$window.history.length > 1) {\r\n this.$window.history.back();\r\n }\r\n else {\r\n this.$location.url(this.mainRouter.mainUrl());\r\n }\r\n };\r\n UserSignupController.prototype.redirectToPrivacyPolicy = function () {\r\n var baseUrl = this.$window.location.href.split(\"#\")[0], url = baseUrl + \"#\" + this.policiesRouter.privacyPolicyUrl();\r\n this.$window.open(url);\r\n };\r\n UserSignupController.prototype.redirectToTermsOfUse = function () {\r\n var baseUrl = this.$window.location.href.split(\"#\")[0], url = baseUrl + \"#\" + this.policiesRouter.termsOfUseUrl();\r\n this.$window.open(url);\r\n };\r\n UserSignupController.prototype.isRightPassword = function () {\r\n if (this.isCheckPassword && this.userLogon.password) {\r\n return this.authService.checkPassword(this.userLogon.password);\r\n }\r\n return true;\r\n };\r\n UserSignupController.NAME = \"users.UserSignupController\";\r\n UserSignupController.$inject = [\r\n \"$location\",\r\n \"$window\",\r\n UserService_1.UserService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n MainRouter_1.MainRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthManager_1.AuthManager.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n PoliciesRouter_1.PoliciesRouter.NAME,\r\n DialogService_1.DialogService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n AuthService_1.AuthService.NAME\r\n ];\r\n return UserSignupController;\r\n})();\r\nexports.UserSignupController = UserSignupController;\r\n},{\"../auth/AuthService\":18,\"../auth/LogOnController\":21,\"../authcore/AuthManager\":25,\"../businessUnits/BusinessUnitsService\":44,\"../components/dialog/DialogService\":166,\"../urls/PoliciesRouter\":485,\"../utils/AppProperties\":\"AppProperties\",\"../utils/HomepageHelper\":512,\"../utils/UrlService\":528,\"./../INotifier\":5,\"./../authcore/AuthRedirect\":26,\"./../security/LogonProviderEnum\":416,\"./../security/SecurityService\":420,\"./../settings/SettingsService\":427,\"./../urls/AuthRouter\":463,\"./../urls/MainRouter\":479,\"./../utils/MenuHelper\":517,\"./../utils/PageHeaderHelper\":521,\"./UserService\":499,\"./models/IGroup\":505}],501:[function(require,module,exports){\nvar UserService_1 = require(\"./UserService\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar AuthRedirect_1 = require(\"../authcore/AuthRedirect\");\r\nvar MainRouter_1 = require(\"../urls/MainRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar PoliciesRouter_1 = require(\"../urls/PoliciesRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar LogonProviderEnum_1 = require(\"../security/LogonProviderEnum\");\r\nvar IGroup_1 = require(\"./models/IGroup\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar SsoReasonType_1 = require(\"../security/SsoReasonType\");\r\nvar AppProperties_1 = require(\"../utils/AppProperties\");\r\nvar LogOnController_1 = require(\"../auth/LogOnController\");\r\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar BusinessUnitsRouter_1 = require(\"../urls/BusinessUnitsRouter\");\r\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar UserStartTrialController = (function () {\r\n function UserStartTrialController($location, $window, $scope, userService, settingsService, authService, authRouter, authRedirect, mainRouter, businessUnitRouter, securityService, url, policiesRouter, usersRouter) {\r\n var _this = this;\r\n this.$location = $location;\r\n this.$window = $window;\r\n this.$scope = $scope;\r\n this.userService = userService;\r\n this.settingsService = settingsService;\r\n this.authService = authService;\r\n this.authRouter = authRouter;\r\n this.authRedirect = authRedirect;\r\n this.mainRouter = mainRouter;\r\n this.businessUnitRouter = businessUnitRouter;\r\n this.securityService = securityService;\r\n this.url = url;\r\n this.policiesRouter = policiesRouter;\r\n this.usersRouter = usersRouter;\r\n this.isLegalAgreementAccepted = false;\r\n this.userLogon = {\r\n name: \"\",\r\n password: \"\",\r\n providerKey: LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL],\r\n isActive: true\r\n };\r\n this.user = {\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n isActive: true,\r\n newGroups: [IGroup_1.GroupEnum.SYS_ADMINS],\r\n userLogons: [this.userLogon]\r\n };\r\n this.companyDomain = \"\";\r\n this.disableSaveButton = false;\r\n this.signUpMode = false;\r\n this.isCheckPassword = false;\r\n if (AppProperties_1.AppProperties.allowStartTrial == \"false\") {\r\n this.authRedirect.forwardToAccessDenied();\r\n }\r\n this.securityService.demandNotAuthenticated();\r\n if (\"MICROSOFT_AD_SSO\" === this.$location.search()[\"autoSSO\"]) {\r\n this.redirectToAutoSso();\r\n }\r\n this.proceedTrialAfterSsoExchange = \"true\" === this.$location.search()[\"proceedTrialAfterSsoExchange\"];\r\n if (this.proceedTrialAfterSsoExchange) {\r\n var encodedUserInfo = this.$location.search()[\"encodedUserInfo\"];\r\n if (encodedUserInfo && encodedUserInfo.length > 0) {\r\n this.getUserInfo(encodedUserInfo);\r\n }\r\n }\r\n if ($location.url().indexOf(UsersRouter_1.UsersRouter.signUpRoute) > -1) {\r\n this.signUpMode = true;\r\n }\r\n document.body.setAttribute(\"class\", document.body.getAttribute(\"class\") + \" freePlan\");\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.MAIN_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Core ACHIEVE - Start for FREE\").update();\r\n this.loadAvailableLocales();\r\n this.settingsService.isCheckPassword()\r\n .then(function (isCheck) { return _this.isCheckPassword = isCheck; });\r\n this.$scope.$on(\"$destroy\", function () {\r\n document.body.setAttribute(\"class\", document.body.getAttribute(\"class\").replace(\"freePlan\", \"\"));\r\n });\r\n }\r\n UserStartTrialController.prototype.loadAvailableLocales = function () {\r\n var _this = this;\r\n this.settingsService.getAvailableLocales().then(function (locales) {\r\n var defaultLocale;\r\n for (var i = 0; i < locales.length; i++) {\r\n var localeInfo = locales[i];\r\n if (localeInfo.defaultLocale) {\r\n _this.user.locale = localeInfo.locale;\r\n _this.defaultLocale = localeInfo;\r\n defaultLocale = localeInfo.locale;\r\n }\r\n }\r\n if (AppProperties_1.AppProperties.currentLocale != defaultLocale) {\r\n _this.user.locale = locales.filter(function (l) { return l.locale == AppProperties_1.AppProperties.currentLocale; })[0].locale;\r\n _this.defaultLocale = locales.filter(function (l) { return l.locale == AppProperties_1.AppProperties.currentLocale; })[0];\r\n }\r\n _this.availableLocales = locales;\r\n });\r\n };\r\n UserStartTrialController.prototype.save = function () {\r\n var _this = this;\r\n this.disableSaveButton = true;\r\n this.userLogon.name = this.user.email;\r\n this.userService.startTrial(this.companyName, this.companyDomain, this.user)\r\n .then(function (businessUnitId) {\r\n _this.disableSaveButton = false;\r\n _this.authRedirect.clearRedirection();\r\n _this.logOnAfterRegistration(businessUnitId);\r\n })\r\n .catch(function (response) {\r\n _this.disableSaveButton = false;\r\n if (response.status == 409 && response.data.error) {\r\n switch (response.data.error) {\r\n case \"error.references.duplicate\":\r\n _this.error = \"Company name \" + _this.companyName + \" already exists\";\r\n break;\r\n case \"error.user.duplicate.name\":\r\n _this.error = \"Full name \" + _this.user.fullName + \" already exists\";\r\n break;\r\n case \"error.user.duplicate.email\":\r\n _this.error = \"Email \" + _this.user.email + \" already exists\";\r\n break;\r\n case \"error.duplicate.logon.provider\":\r\n _this.error = \"Only one logon for each type is allowed\";\r\n break;\r\n case \"error.company.name.is.not.unique\":\r\n _this.error = \"Company name not unique\";\r\n break;\r\n case \"error.company.domain.is.not.unique\":\r\n _this.error = \"Company domain not unique\";\r\n break;\r\n case \"error.invalid.company.name\":\r\n _this.error = \"Company name required\";\r\n break;\r\n case \"error.invalid.company.domain\":\r\n _this.error = \"Company domain is invalid\";\r\n break;\r\n case \"error.invalid.password\":\r\n _this.error = \"Password must contain at least 1 letter, 1 number, 1 special character from !@#$%^&* and must be 8 or more characters\";\r\n break;\r\n default:\r\n _this.error = \"Query has failed: please contact your system administrator or help desk\";\r\n }\r\n }\r\n INotifier_1.notifier.error(_this.error);\r\n });\r\n };\r\n UserStartTrialController.prototype.logOnAfterRegistration = function (businessUnitId) {\r\n var _this = this;\r\n this.authService.logOn(LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.LOCAL] + \":\" + this.user.email, this.user.userLogons[0].password).then(function (user) {\r\n _this.businessUnitSubscriptions = _this.businessUnitRouter.subscriptionUrl(user.businessUnits[0]);\r\n _this.$location.url(_this.businessUnitSubscriptions);\r\n });\r\n };\r\n UserStartTrialController.prototype.isDomainValid = function () {\r\n var inputMask = new RegExp(\"^[a-z0-9]{3,50}$\");\r\n return inputMask.test(this.companyDomain);\r\n };\r\n UserStartTrialController.prototype.doCancel = function () {\r\n if (!this.proceedTrialAfterSsoExchange && this.$window.history.length > 1) {\r\n this.$window.history.back();\r\n }\r\n else {\r\n this.$location.url(this.mainRouter.mainUrl());\r\n }\r\n };\r\n UserStartTrialController.prototype.redirectToLogin = function () {\r\n this.$location.url(this.authRouter.logonUrl());\r\n };\r\n UserStartTrialController.prototype.redirectToTermsOfUse = function () {\r\n var baseUrl = this.$window.location.href.split(\"#\")[0], url = baseUrl + \"#\" + this.policiesRouter.termsOfUseUrl();\r\n this.$window.open(url);\r\n };\r\n UserStartTrialController.prototype.redirectToPrivacyPolicy = function () {\r\n var baseUrl = this.$window.location.href.split(\"#\")[0], url = baseUrl + \"#\" + this.policiesRouter.privacyPolicyUrl();\r\n this.$window.open(url);\r\n };\r\n UserStartTrialController.prototype.redirectToAutoSso = function () {\r\n this.$window.location.href = this.url.base(\"/api/sso/start?ssoProvider=:ssoProvider&ssoReason=:ssoReason\")\r\n .param(\":ssoProvider\", LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.MICROSOFT_AD_SSO])\r\n .param(\":ssoReason\", SsoReasonType_1.SsoReasonType[SsoReasonType_1.SsoReasonType.START_TRIAL])\r\n .service();\r\n };\r\n UserStartTrialController.prototype.getUserInfo = function (base64String) {\r\n if (base64String) {\r\n var userInfo = JSON.parse(atob(base64String));\r\n this.user.fullName = userInfo.fullName;\r\n this.user.email = userInfo.email;\r\n if (userInfo.providerKey && userInfo.externalUserId) {\r\n this.user.userLogons.push({\r\n name: userInfo.externalUserId,\r\n password: null,\r\n providerKey: LogonProviderEnum_1.LogonProviderEnum[LogonProviderEnum_1.LogonProviderEnum.MICROSOFT_AD_SSO],\r\n isActive: true\r\n });\r\n }\r\n }\r\n };\r\n UserStartTrialController.prototype.reloadApplicationForLocaleIfNeeded = function (userLocale) {\r\n if (AppProperties_1.AppProperties.currentLocale != userLocale.locale) {\r\n this.user.locale = userLocale.locale;\r\n this.defaultLocale = userLocale;\r\n LogOnController_1.LogOnController.changeApplicationLocaleInStorage(userLocale.locale);\r\n numeral.language(userLocale.locale.substr(0, 2));\r\n window.location.reload();\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n };\r\n UserStartTrialController.prototype.showClosePassword = function (elementId) {\r\n var passwordElement = $(elementId);\r\n if (passwordElement.attr(\"type\") === \"password\") {\r\n passwordElement.attr(\"type\", \"text\");\r\n }\r\n else {\r\n passwordElement.attr(\"type\", \"password\");\r\n }\r\n };\r\n UserStartTrialController.prototype.isUnicodeValue = function (value) {\r\n var pattern = /^[\\x20-\\x7E]*$/;\r\n return !pattern.test(value);\r\n };\r\n UserStartTrialController.prototype.isRightPassword = function () {\r\n if (this.isCheckPassword && this.user.userLogons[0].password) {\r\n return this.authService.checkPassword(this.user.userLogons[0].password);\r\n }\r\n return true;\r\n };\r\n UserStartTrialController.NAME = \"users.UserStartTrialController\";\r\n UserStartTrialController.$inject = [\r\n \"$location\",\r\n \"$window\",\r\n \"$scope\",\r\n UserService_1.UserService.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n AuthRouter_1.AuthRouter.NAME,\r\n AuthRedirect_1.AuthRedirect.NAME,\r\n MainRouter_1.MainRouter.NAME,\r\n BusinessUnitsRouter_1.BusinessUnitsRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UrlService_1.UrlService.NAME,\r\n PoliciesRouter_1.PoliciesRouter.NAME,\r\n UsersRouter_1.UsersRouter.NAME\r\n ];\r\n return UserStartTrialController;\r\n})();\r\nexports.UserStartTrialController = UserStartTrialController;\r\n},{\"../INotifier\":5,\"../auth/AuthService\":18,\"../auth/LogOnController\":21,\"../authcore/AuthRedirect\":26,\"../security/LogonProviderEnum\":416,\"../security/SecurityService\":420,\"../security/SsoReasonType\":422,\"../settings/SettingsService\":427,\"../urls/AuthRouter\":463,\"../urls/BusinessUnitsRouter\":464,\"../urls/MainRouter\":479,\"../urls/PoliciesRouter\":485,\"../urls/UsersRouter\":493,\"../utils/AppProperties\":\"AppProperties\",\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/UrlService\":528,\"./UserService\":499,\"./models/IGroup\":505}],502:[function(require,module,exports){\nvar AuthService_1 = require(\"../auth/AuthService\");\r\nvar PermissionsService_1 = require(\"../security/PermissionsService\");\r\nvar UrlService_1 = require(\"../utils/UrlService\");\r\nvar UserService_1 = require(\"./UserService\");\r\nvar IGridModel_1 = require(\"../IGridModel\");\r\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar IHttpGridService_1 = require(\"../IHttpGridService\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar BusinessUnitsService_1 = require(\"../businessUnits/BusinessUnitsService\");\r\nvar StringBuilder_1 = require(\"../utils/StringBuilder\");\r\nvar BillingPlanService_1 = require(\"../finances/BillingPlanService\");\r\nvar UsersListController = (function () {\r\n function UsersListController($timeout, $log, $http, usersApi, permissionsApi, usersRouter, url, authApi, businessUnitsService, billingPlanService) {\r\n var _this = this;\r\n this.$timeout = $timeout;\r\n this.$log = $log;\r\n this.usersApi = usersApi;\r\n this.permissionsApi = permissionsApi;\r\n this.usersRouter = usersRouter;\r\n this.url = url;\r\n this.authApi = authApi;\r\n this.businessUnitsService = businessUnitsService;\r\n this.billingPlanService = billingPlanService;\r\n this.isFreePlanBuFull = false;\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_USERS_MENU_KEY);\r\n PageHeaderHelper_1.PageHeader.set().header(\"Users\").update();\r\n permissionsApi.getSystemPermissions().then(function (p) {\r\n _this.systemPermissions = p;\r\n });\r\n this.usersGridModel = new IGridModel_1.GridModel(IHttpGridService_1.HttpGridHelper.createLoader($http, this.url.service(\"/api/users\")));\r\n authApi.getCurrentUser().then(function (user) {\r\n _this.currentUserBusinessUnitIds = user.businessUnits;\r\n _this.businessUnitsService.getBusinessUnitsWithFreePlan(_this.currentUserBusinessUnitIds).then(function (result) {\r\n _this.businessUnitIdsWithFreePlan = result;\r\n _this.businessUnitsService.isFreeBusinessUnitsFull(result)\r\n .then(function (result) {\r\n _this.isFreePlanBuFull = result;\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader()\r\n .addActionLinkIf(_this.systemPermissions.createUser, '+ New', _this.getAddRoute(), result).update();\r\n });\r\n });\r\n });\r\n this.billingPlanService.getMaxFreePlanUsers().then(function (data) { return _this.maxFreePlanUsers = data; });\r\n }\r\n UsersListController.prototype.getAddRoute = function () {\r\n if (this.isFreePlanBuFull == false) {\r\n return this.usersRouter.addUrl();\r\n }\r\n else {\r\n return \"/users\";\r\n }\r\n };\r\n UsersListController.prototype.hasUserSameBusinessUnits = function (arr) {\r\n if (this.currentUserBusinessUnitIds) {\r\n var s_1 = false;\r\n this.currentUserBusinessUnitIds.forEach(function (n) {\r\n if (!s_1) {\r\n s_1 = arr.some(function (m) { return m === n; });\r\n }\r\n });\r\n return s_1;\r\n }\r\n return true;\r\n };\r\n UsersListController.prototype.getIsActiveGridStyle = function (isActive) {\r\n return isActive\r\n ? {}\r\n : { \"color\": \"#999999\" };\r\n };\r\n UsersListController.prototype.deactivateLink = function () {\r\n return this.isFreePlanBuFull\r\n ? { \"color\": \"#999999\", \"pointer-events\": \"none\" }\r\n : {};\r\n };\r\n UsersListController.prototype.convertIsActive = function (isActive) {\r\n return isActive != undefined\r\n ? isActive ? 'Yes' : 'No'\r\n : undefined;\r\n };\r\n UsersListController.prototype.activate = function (index, id) {\r\n var _this = this;\r\n this.businessUnitsService.isFreeBusinessUnitsFull(this.businessUnitIdsWithFreePlan)\r\n .then(function (result) {\r\n _this.isFreePlanBuFull = result;\r\n if (result == false) {\r\n var promise = _this.usersApi.setActive(id, true);\r\n promise.then(function (u) {\r\n INotifier_1.notifier.success(\"User '\" + u.fullName + \"' has been activated\");\r\n angular.copy(_this.usersGridModel.entries[index].businessUnitsIdList, u.businessUnitsIdList);\r\n _this.usersGridModel.entries[index] = u;\r\n }).then(function () { return _this.businessUnitsService.isFreeBusinessUnitsFull(_this.businessUnitIdsWithFreePlan)\r\n .then(function (result) {\r\n _this.isFreePlanBuFull = result;\r\n PageHeaderHelper_1.PageHeader.set().preserveHeader()\r\n .addActionLinkIf(_this.systemPermissions.createUser, '+ New', _this.usersRouter.addUrl(), result).update();\r\n }); });\r\n }\r\n else {\r\n INotifier_1.notifier.error(_this.getFreePlanMessage());\r\n }\r\n });\r\n };\r\n UsersListController.prototype.getFreePlanMessage = function () {\r\n return StringBuilder_1.StringBuilder.interpolate(\"You have reached maximum :number active users allowed for Free Plan\")\r\n .with(\":number\", this.maxFreePlanUsers).build();\r\n };\r\n UsersListController.NAME = \"users.UsersListController\";\r\n UsersListController.$inject = [\r\n \"$timeout\",\r\n \"$log\",\r\n \"$http\",\r\n UserService_1.UserService.NAME,\r\n PermissionsService_1.PermissionsService.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n UrlService_1.UrlService.NAME,\r\n AuthService_1.AuthService.NAME,\r\n BusinessUnitsService_1.BusinessUnitsService.NAME,\r\n BillingPlanService_1.BillingPlanService.NAME\r\n ];\r\n return UsersListController;\r\n})();\r\nexports.UsersListController = UsersListController;\r\n},{\"../IGridModel\":3,\"../IHttpGridService\":4,\"../INotifier\":5,\"../auth/AuthService\":18,\"../businessUnits/BusinessUnitsService\":44,\"../finances/BillingPlanService\":231,\"../security/PermissionsService\":418,\"../urls/UsersRouter\":493,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"../utils/StringBuilder\":525,\"../utils/UrlService\":528,\"./UserService\":499}],503:[function(require,module,exports){\nvar IUser_1 = require(\"./models/IUser\");\r\nvar UserService_1 = require(\"./UserService\");\r\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar SecurityService_1 = require(\"../security/SecurityService\");\r\nvar MenuHelper_1 = require(\"../utils/MenuHelper\");\r\nvar PageHeaderHelper_1 = require(\"../utils/PageHeaderHelper\");\r\nvar INotifier_1 = require(\"../INotifier\");\r\nvar UsersMergeController = (function () {\r\n function UsersMergeController($log, $window, $routeParams, usersApi, usersRouter, securityService, userService) {\r\n var _this = this;\r\n this.$log = $log;\r\n this.$window = $window;\r\n this.$routeParams = $routeParams;\r\n this.usersApi = usersApi;\r\n this.usersRouter = usersRouter;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.presentUser = {\r\n fullName: \"\",\r\n isActive: true,\r\n newGroups: [],\r\n locale: null,\r\n userLogons: [],\r\n businessUnitIds: undefined\r\n };\r\n this.outdatedUser = {\r\n fullName: \"\",\r\n isActive: true,\r\n newGroups: [],\r\n locale: null,\r\n userLogons: [],\r\n businessUnitIds: undefined\r\n };\r\n this.excludedUserIds = [];\r\n this.outdatedUserChangeCallback = function (selected, id, name) {\r\n if (selected) {\r\n _this.outdatedUserId = id;\r\n _this.loadOutdatedUser();\r\n }\r\n else {\r\n _this.outdatedUser = {\r\n fullName: \"\",\r\n isActive: true,\r\n newGroups: [],\r\n locale: null,\r\n userLogons: [],\r\n businessUnitIds: undefined\r\n };\r\n }\r\n };\r\n this.presentUserId = this.$routeParams[\"userId\"];\r\n this.securityService.demandAuthentication()\r\n .demandSystemPermissions(function (systemPermissions) { return systemPermissions.editUser; });\r\n MenuHelper_1.MenuHelper.setCurrentMenuItem(MenuHelper_1.MenuHelper.ADMINISTRATION_USERS_MENU_KEY);\r\n this.excludedUserIds.push(this.presentUserId);\r\n this.excludedUserIds.push(IUser_1.PredefinedUsersEnum.ADMIN);\r\n this.excludedUserIds.push(IUser_1.PredefinedUsersEnum.GUEST);\r\n this.loadPresentUser();\r\n }\r\n UsersMergeController.prototype.loadPresentUser = function () {\r\n var _this = this;\r\n this.usersApi.get(this.presentUserId).then(function (user) {\r\n PageHeaderHelper_1.PageHeader.set().header(user.fullName).update();\r\n angular.copy(user, _this.presentUser);\r\n _this.loadPresentUserLogons();\r\n });\r\n };\r\n UsersMergeController.prototype.loadOutdatedUser = function () {\r\n var _this = this;\r\n this.usersApi.get(this.outdatedUserId).then(function (user) {\r\n angular.copy(user, _this.outdatedUser);\r\n _this.loadOutdatedUserLogons();\r\n });\r\n };\r\n UsersMergeController.prototype.loadPresentUserLogons = function () {\r\n var _this = this;\r\n this.usersApi.getUserLogons(this.presentUserId)\r\n .then(function (result) {\r\n if (_this.presentUser.userLogons) {\r\n _this.presentUser.userLogons.splice(0, _this.presentUser.userLogons.length);\r\n }\r\n else {\r\n _this.presentUser.userLogons = [];\r\n }\r\n result.forEach(function (r) { return _this.presentUser.userLogons.push(r); });\r\n });\r\n };\r\n UsersMergeController.prototype.loadOutdatedUserLogons = function () {\r\n var _this = this;\r\n this.usersApi.getUserLogons(this.outdatedUserId)\r\n .then(function (result) {\r\n if (_this.outdatedUser.userLogons) {\r\n _this.outdatedUser.userLogons.splice(0, _this.outdatedUser.userLogons.length);\r\n }\r\n else {\r\n _this.outdatedUser.userLogons = [];\r\n }\r\n result.forEach(function (r) { return _this.outdatedUser.userLogons.push(r); });\r\n });\r\n };\r\n UsersMergeController.prototype.getAvailableUsersUrl = function (excludedUserIds) {\r\n var url = \"/api/userSelector/users?\";\r\n if (excludedUserIds && excludedUserIds.length > 0) {\r\n excludedUserIds.forEach(function (id) { return url += \"excludedUserIds=\" + id + \"&\"; });\r\n }\r\n return url;\r\n };\r\n UsersMergeController.prototype.mergeAccounts = function () {\r\n var _this = this;\r\n this.userService.mergeUsers(this.presentUserId, this.presentUser.version, this.outdatedUserId, this.outdatedUser.version)\r\n .then(function (result) {\r\n INotifier_1.notifier.success(\"Accounts successfully merged\");\r\n _this.redirectToEditUser(result.id);\r\n });\r\n };\r\n UsersMergeController.prototype.redirectToEditUser = function (id) {\r\n var baseUrl = this.$window.location.href.split(\"#\")[0], url = baseUrl + \"#\" + this.usersRouter.editUrl(id);\r\n this.$window.location.replace(url);\r\n };\r\n UsersMergeController.NAME = \"users.UsersMergeController\";\r\n UsersMergeController.$inject = [\r\n \"$log\",\r\n \"$window\",\r\n \"$routeParams\",\r\n UserService_1.UserService.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n SecurityService_1.SecurityService.NAME,\r\n UserService_1.UserService.NAME\r\n ];\r\n return UsersMergeController;\r\n})();\r\nexports.UsersMergeController = UsersMergeController;\r\n},{\"../INotifier\":5,\"../security/SecurityService\":420,\"../urls/UsersRouter\":493,\"../utils/MenuHelper\":517,\"../utils/PageHeaderHelper\":521,\"./UserService\":499,\"./models/IUser\":506}],504:[function(require,module,exports){\nvar UserService_1 = require(\"./UserService\");\r\nvar CurrentUserProfileController_1 = require(\"./CurrentUserProfileController\");\r\nvar UserEditController_1 = require(\"./UserEditController\");\r\nvar UserSignupController_1 = require(\"./UserSignupController\");\r\nvar UserStartTrialController_1 = require(\"./UserStartTrialController\");\r\nvar UsersListController_1 = require(\"./UsersListController\");\r\nvar GroupsController_1 = require(\"./GroupsController\");\r\nvar GroupEditController_1 = require(\"./GroupEditController\");\r\nvar UsersMergeController_1 = require(\"./UsersMergeController\");\r\nvar SettingsModule_1 = require(\"../settings/SettingsModule\");\r\nvar SecurityModule_1 = require(\"../security/SecurityModule\");\r\nvar UrlsModule_1 = require(\"../urls/UrlsModule\");\r\nvar GroupManagePermissionsController_1 = require(\"./GroupManagePermissionsController\");\r\nexports.UsersModule = angular\r\n .module(\"users\", [\r\n SettingsModule_1.SettingsModule.name,\r\n SecurityModule_1.SecurityModule.name,\r\n UrlsModule_1.UrlsModule.name\r\n])\r\n .service(UserService_1.UserService.NAME, UserService_1.UserService)\r\n .controller(CurrentUserProfileController_1.CurrentUserProfileController.NAME, CurrentUserProfileController_1.CurrentUserProfileController)\r\n .controller(UserSignupController_1.UserSignupController.NAME, UserSignupController_1.UserSignupController)\r\n .controller(UserStartTrialController_1.UserStartTrialController.NAME, UserStartTrialController_1.UserStartTrialController)\r\n .controller(UserEditController_1.UserEditController.NAME, UserEditController_1.UserEditController)\r\n .controller(UsersListController_1.UsersListController.NAME, UsersListController_1.UsersListController)\r\n .controller(GroupsController_1.GroupsController.NAME, GroupsController_1.GroupsController)\r\n .controller(GroupEditController_1.GroupEditController.NAME, GroupEditController_1.GroupEditController)\r\n .controller(GroupManagePermissionsController_1.GroupManagePermissionsController.NAME, GroupManagePermissionsController_1.GroupManagePermissionsController)\r\n .controller(UsersMergeController_1.UsersMergeController.NAME, UsersMergeController_1.UsersMergeController);\r\n},{\"../security/SecurityModule\":419,\"../settings/SettingsModule\":426,\"../urls/UrlsModule\":492,\"./CurrentUserProfileController\":494,\"./GroupEditController\":495,\"./GroupManagePermissionsController\":496,\"./GroupsController\":497,\"./UserEditController\":498,\"./UserService\":499,\"./UserSignupController\":500,\"./UserStartTrialController\":501,\"./UsersListController\":502,\"./UsersMergeController\":503}],505:[function(require,module,exports){\n(function (GroupEnum) {\r\n GroupEnum[GroupEnum[\"EVERYONE\"] = 1] = \"EVERYONE\";\r\n GroupEnum[GroupEnum[\"SYS_ADMINS\"] = 2] = \"SYS_ADMINS\";\r\n GroupEnum[GroupEnum[\"MODERATORS\"] = 3] = \"MODERATORS\";\r\n GroupEnum[GroupEnum[\"REGISTERED_USERS\"] = 4] = \"REGISTERED_USERS\";\r\n GroupEnum[GroupEnum[\"BU_ADMINISTRATORS\"] = 5] = \"BU_ADMINISTRATORS\";\r\n})(exports.GroupEnum || (exports.GroupEnum = {}));\r\nvar GroupEnum = exports.GroupEnum;\r\n},{}],506:[function(require,module,exports){\n(function (PredefinedUsersEnum) {\r\n PredefinedUsersEnum[PredefinedUsersEnum[\"ADMIN\"] = 1] = \"ADMIN\";\r\n PredefinedUsersEnum[PredefinedUsersEnum[\"GUEST\"] = 2] = \"GUEST\";\r\n PredefinedUsersEnum[PredefinedUsersEnum[\"SYSTEM\"] = 3] = \"SYSTEM\";\r\n})(exports.PredefinedUsersEnum || (exports.PredefinedUsersEnum = {}));\r\nvar PredefinedUsersEnum = exports.PredefinedUsersEnum;\r\n},{}],507:[function(require,module,exports){\n(function (UserRole) {\r\n UserRole[UserRole[\"LEARNER\"] = 0] = \"LEARNER\";\r\n UserRole[UserRole[\"INSTRUCTOR\"] = 1] = \"INSTRUCTOR\";\r\n UserRole[UserRole[\"ATTENDEE_MANAGER\"] = 2] = \"ATTENDEE_MANAGER\";\r\n UserRole[UserRole[\"AUTHOR\"] = 3] = \"AUTHOR\";\r\n UserRole[UserRole[\"ADMINISTRATOR\"] = 4] = \"ADMINISTRATOR\";\r\n})(exports.UserRole || (exports.UserRole = {}));\r\nvar UserRole = exports.UserRole;\r\n},{}],508:[function(require,module,exports){\nvar CheckBusinessUnitId = (function () {\r\n function CheckBusinessUnitId() {\r\n }\r\n CheckBusinessUnitId.hasUserSameBusinessUnits = function (currentUserBUIds, businessUnitId) {\r\n if (currentUserBUIds) {\r\n return currentUserBUIds.some(function (m) { return businessUnitId == m; });\r\n }\r\n return true;\r\n };\r\n CheckBusinessUnitId.NAME = \"checkBusinessUnitId\";\r\n return CheckBusinessUnitId;\r\n})();\r\nexports.CheckBusinessUnitId = CheckBusinessUnitId;\r\n},{}],509:[function(require,module,exports){\nvar MaterialType_1 = require(\"./../materials/models/MaterialType\");\r\nvar ContentUtils = (function () {\r\n function ContentUtils() {\r\n }\r\n ContentUtils.getFileExt = function (fileName) {\r\n return fileName.substr((~-fileName.lastIndexOf(\".\") >>> 0) + 2);\r\n };\r\n ContentUtils.getFileWithoutExt = function (fileName) {\r\n return fileName.substring(0, fileName.lastIndexOf('.'));\r\n };\r\n ContentUtils.checkFileExt = function (materialTypeId, fileExt) {\r\n return (ContentUtils.MAP_FILE_EXTENSIONS_TO_MATERIAL_TYPES[fileExt.toLowerCase()] === materialTypeId);\r\n };\r\n ContentUtils.findMaterialTypeByFileExtension = function (fileExt) {\r\n return ContentUtils.MAP_FILE_EXTENSIONS_TO_MATERIAL_TYPES[fileExt.toLowerCase()];\r\n };\r\n ContentUtils.MAP_FILE_EXTENSIONS_TO_MATERIAL_TYPES = {\r\n 'mp3': MaterialType_1.MaterialTypeEnum.AUDIO,\r\n 'mp4': MaterialType_1.MaterialTypeEnum.VIDEO,\r\n 'mov': MaterialType_1.MaterialTypeEnum.VIDEO,\r\n 'jpg': MaterialType_1.MaterialTypeEnum.PHOTO,\r\n 'png': MaterialType_1.MaterialTypeEnum.PHOTO,\r\n 'txt': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n 'doc': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n 'docx': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n 'ppt': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n 'pptx': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n 'pdf': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n 'xls': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n 'xlsx': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n 'html': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n 'epub': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n 'zip': MaterialType_1.MaterialTypeEnum.DOCUMENTS,\r\n '7z': MaterialType_1.MaterialTypeEnum.DOCUMENTS\r\n };\r\n return ContentUtils;\r\n})();\r\nexports.ContentUtils = ContentUtils;\r\n},{\"./../materials/models/MaterialType\":347}],510:[function(require,module,exports){\nvar RandomUtils_1 = require(\"./RandomUtils\");\r\nvar ContentUtils_1 = require(\"./ContentUtils\");\r\nvar CourseBundleUtils = (function () {\r\n function CourseBundleUtils() {\r\n }\r\n CourseBundleUtils.getPreparedBundleInputInfoFromBlob = function (bundleId, bundleVersion, blob, fileNamePrefix) {\r\n var bundleInputInfo = {};\r\n bundleInputInfo.addedBundleFile = {\r\n file: CourseBundleUtils.blobToFile(blob, fileNamePrefix),\r\n relativePath: \"\"\r\n };\r\n bundleInputInfo.recordName = bundleInputInfo.addedBundleFile.file.name;\r\n bundleInputInfo.recordUrl = URL.createObjectURL(blob);\r\n var addedFiles = [];\r\n addedFiles.push({\r\n name: bundleInputInfo.addedBundleFile.file.name,\r\n type: bundleInputInfo.addedBundleFile.file.type,\r\n size: bundleInputInfo.addedBundleFile.file.size,\r\n path: bundleInputInfo.addedBundleFile.relativePath\r\n });\r\n bundleInputInfo.bundleInput = {\r\n id: bundleId,\r\n version: bundleVersion,\r\n addedFiles: addedFiles,\r\n deletedFileIds: []\r\n };\r\n return bundleInputInfo;\r\n };\r\n CourseBundleUtils.blobToFile = function (blob, fileNamePrefix) {\r\n var file = blob;\r\n file.lastModifiedDate = new Date();\r\n if (file.name) {\r\n file.name = RandomUtils_1.RandomUtils.generateRandomId(fileNamePrefix) + \".\" + ContentUtils_1.ContentUtils.getFileExt(file.name);\r\n }\r\n else {\r\n file.name = RandomUtils_1.RandomUtils.generateRandomId(fileNamePrefix) + \".wav\";\r\n }\r\n return file;\r\n };\r\n return CourseBundleUtils;\r\n})();\r\nexports.CourseBundleUtils = CourseBundleUtils;\r\n},{\"./ContentUtils\":509,\"./RandomUtils\":523}],511:[function(require,module,exports){\nvar DomUtils = (function () {\r\n function DomUtils() {\r\n }\r\n DomUtils.findParentWithClass = function (sourceElement, targetClass) {\r\n var parent = sourceElement.parent();\r\n while (parent) {\r\n if (parent.hasClass(targetClass)) {\r\n return $(parent[0]);\r\n }\r\n parent = parent.parent();\r\n }\r\n return null;\r\n };\r\n DomUtils.findParentWithAttr = function (sourceElement, attrName) {\r\n var parent = sourceElement.parent();\r\n while (parent && parent.length > 0) {\r\n if (parent.length > 0 && parent.attr(attrName) != undefined) {\r\n return $(parent[0]);\r\n }\r\n parent = parent.parent();\r\n }\r\n return null;\r\n };\r\n return DomUtils;\r\n})();\r\nexports.DomUtils = DomUtils;\r\n},{}],512:[function(require,module,exports){\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar HomepageTypeEnum_1 = require(\"../settings/models/HomepageTypeEnum\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar HomepageHelper = (function () {\r\n function HomepageHelper() {\r\n }\r\n HomepageHelper.getHomepageUrl = function (homepage) {\r\n var result;\r\n switch (homepage.value) {\r\n case HomepageTypeEnum_1.HomepageTypeEnum[HomepageTypeEnum_1.HomepageTypeEnum.LEARNING_PATHS]: {\r\n result = LearningPathsRouter_1.LearningPathsRouter.indexRoute;\r\n break;\r\n }\r\n case HomepageTypeEnum_1.HomepageTypeEnum[HomepageTypeEnum_1.HomepageTypeEnum.COURSES]: {\r\n result = CoursesRouter_1.CoursesRouter.indexRoute;\r\n break;\r\n }\r\n case HomepageTypeEnum_1.HomepageTypeEnum[HomepageTypeEnum_1.HomepageTypeEnum.MATERIALS]: {\r\n result = MaterialsRouter_1.MaterialsRouter.indexRoute;\r\n break;\r\n }\r\n case HomepageTypeEnum_1.HomepageTypeEnum[HomepageTypeEnum_1.HomepageTypeEnum.CATALOG]: {\r\n result = FinancesRouter_1.FinancesRouter.productsCatalogRoute;\r\n break;\r\n }\r\n case HomepageTypeEnum_1.HomepageTypeEnum[HomepageTypeEnum_1.HomepageTypeEnum.HOME]: {\r\n result = HomeRouter_1.HomeRouter.indexRoute;\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n return HomepageHelper;\r\n})();\r\nexports.HomepageHelper = HomepageHelper;\r\n},{\"../settings/models/HomepageTypeEnum\":432,\"../urls/CoursesRouter\":468,\"../urls/FinancesRouter\":471,\"../urls/HomeRouter\":473,\"../urls/LearningPathsRouter\":477,\"../urls/MaterialsRouter\":480}],513:[function(require,module,exports){\n(function (ShapeType) {\r\n ShapeType[ShapeType[\"SELECTED_POINT\"] = 0] = \"SELECTED_POINT\";\r\n ShapeType[ShapeType[\"RECTANGLE\"] = 1] = \"RECTANGLE\";\r\n ShapeType[ShapeType[\"CIRCLE\"] = 2] = \"CIRCLE\";\r\n ShapeType[ShapeType[\"POLYGON\"] = 3] = \"POLYGON\";\r\n})(exports.ShapeType || (exports.ShapeType = {}));\r\nvar ShapeType = exports.ShapeType;\r\n(function (ShapeDrawingMode) {\r\n ShapeDrawingMode[ShapeDrawingMode[\"EDIT\"] = 0] = \"EDIT\";\r\n ShapeDrawingMode[ShapeDrawingMode[\"ORDINARY\"] = 1] = \"ORDINARY\";\r\n ShapeDrawingMode[ShapeDrawingMode[\"SELECTED\"] = 2] = \"SELECTED\";\r\n ShapeDrawingMode[ShapeDrawingMode[\"CORRECT\"] = 3] = \"CORRECT\";\r\n ShapeDrawingMode[ShapeDrawingMode[\"WRONG\"] = 4] = \"WRONG\";\r\n})(exports.ShapeDrawingMode || (exports.ShapeDrawingMode = {}));\r\nvar ShapeDrawingMode = exports.ShapeDrawingMode;\r\nvar SelectedPoint = (function () {\r\n function SelectedPoint() {\r\n this.type = ShapeType[ShapeType.SELECTED_POINT];\r\n this.dragging = false;\r\n this.selected = false;\r\n }\r\n SelectedPoint.prototype.draw = function (context, shapeDrawingMode) {\r\n context.beginPath();\r\n context.arc(this.centerX, this.centerY, SelectedPoint.EXTERNAL_RADIUS, 0, 2 * Math.PI, false);\r\n context.lineWidth = 0;\r\n if (shapeDrawingMode == ShapeDrawingMode.SELECTED) {\r\n context.fillStyle = \"rgba(255, 255, 255, 0.2)\";\r\n }\r\n else {\r\n context.fillStyle = \"rgba(255, 255, 255, 1)\";\r\n }\r\n context.fill();\r\n context.stroke();\r\n context.beginPath();\r\n context.arc(this.centerX, this.centerY, SelectedPoint.INTERNAL_RADIUS, 0, 2 * Math.PI, false);\r\n context.lineWidth = 0;\r\n if (shapeDrawingMode == ShapeDrawingMode.CORRECT) {\r\n context.fillStyle = \"rgb(93,175,11)\";\r\n }\r\n else if (shapeDrawingMode == ShapeDrawingMode.WRONG) {\r\n context.fillStyle = \"rgb(245,133,103)\";\r\n }\r\n else {\r\n context.fillStyle = \"rgb(247, 171, 17)\";\r\n }\r\n context.fill();\r\n context.stroke();\r\n };\r\n SelectedPoint.prototype.isPointInside = function (point) {\r\n return Math.sqrt(Math.pow(Math.abs(this.centerX - point.x), 2)\r\n + Math.pow(Math.abs(this.centerY - point.y), 2)) < SelectedPoint.EXTERNAL_RADIUS;\r\n };\r\n SelectedPoint.prototype.move = function (dX, dY) {\r\n this.centerX += dX;\r\n this.centerY += dY;\r\n };\r\n SelectedPoint.INTERNAL_RADIUS = 5;\r\n SelectedPoint.EXTERNAL_RADIUS = 10;\r\n return SelectedPoint;\r\n})();\r\nexports.SelectedPoint = SelectedPoint;\r\nvar Rectangle = (function () {\r\n function Rectangle() {\r\n this.type = ShapeType[ShapeType.RECTANGLE];\r\n this.dragging = false;\r\n this.selected = false;\r\n }\r\n Rectangle.prototype.draw = function (context, shapeDrawingMode) {\r\n context.beginPath();\r\n context.rect(this.topLeftX, this.topLeftY, this.width, this.height);\r\n context.lineWidth = 2;\r\n context.strokeStyle = '#000000';\r\n if (shapeDrawingMode == ShapeDrawingMode.EDIT) {\r\n context.setLineDash([10, 5]);\r\n }\r\n else {\r\n context.setLineDash([]);\r\n }\r\n if (shapeDrawingMode == ShapeDrawingMode.SELECTED) {\r\n context.fillStyle = \"rgba(255, 255, 255, 0.5)\";\r\n }\r\n else if (shapeDrawingMode == ShapeDrawingMode.CORRECT) {\r\n context.fillStyle = \"rgb(93,175,11,0.5)\";\r\n }\r\n else if (shapeDrawingMode == ShapeDrawingMode.WRONG) {\r\n context.fillStyle = \"rgb(245,133,103,0.5)\";\r\n }\r\n else {\r\n context.fillStyle = \"rgba(142, 214, 255, 0.3)\";\r\n }\r\n context.fill();\r\n context.stroke();\r\n };\r\n Rectangle.prototype.isPointInside = function (point) {\r\n return point.x > this.topLeftX && point.x < this.topLeftX + this.width\r\n && point.y > this.topLeftY && point.y < this.topLeftY + this.height;\r\n };\r\n Rectangle.prototype.move = function (dX, dY) {\r\n this.topLeftX += dX;\r\n this.topLeftY += dY;\r\n };\r\n Rectangle.prototype.normalize = function () {\r\n if (this.width < 0) {\r\n this.topLeftX = this.topLeftX + this.width;\r\n this.width = this.width * -1;\r\n }\r\n if (this.height < 0) {\r\n this.topLeftY = this.topLeftY + this.height;\r\n this.height = this.height * -1;\r\n }\r\n };\r\n return Rectangle;\r\n})();\r\nexports.Rectangle = Rectangle;\r\nvar Circle = (function () {\r\n function Circle() {\r\n this.type = ShapeType[ShapeType.CIRCLE];\r\n this.dragging = false;\r\n this.selected = false;\r\n }\r\n Circle.prototype.draw = function (context, shapeDrawingMode) {\r\n context.beginPath();\r\n context.arc(this.centerX, this.centerY, this.radius, 0, 2 * Math.PI, false);\r\n context.lineWidth = 2;\r\n context.strokeStyle = '#000000';\r\n if (shapeDrawingMode == ShapeDrawingMode.EDIT) {\r\n context.setLineDash([10, 5]);\r\n }\r\n else {\r\n context.setLineDash([]);\r\n }\r\n if (shapeDrawingMode == ShapeDrawingMode.SELECTED) {\r\n context.fillStyle = \"rgba(255, 255, 255, 0.5)\";\r\n }\r\n else if (shapeDrawingMode == ShapeDrawingMode.CORRECT) {\r\n context.fillStyle = \"rgb(93,175,11,0.5)\";\r\n }\r\n else if (shapeDrawingMode == ShapeDrawingMode.WRONG) {\r\n context.fillStyle = \"rgb(245,133,103,0.5)\";\r\n }\r\n else {\r\n context.fillStyle = \"rgba(142, 214, 255, 0.3)\";\r\n }\r\n context.fill();\r\n context.stroke();\r\n };\r\n Circle.prototype.isPointInside = function (point) {\r\n return Math.sqrt(Math.pow(Math.abs(this.centerX - point.x), 2)\r\n + Math.pow(Math.abs(this.centerY - point.y), 2)) < this.radius;\r\n };\r\n Circle.prototype.move = function (dX, dY) {\r\n this.centerX += dX;\r\n this.centerY += dY;\r\n };\r\n return Circle;\r\n})();\r\nexports.Circle = Circle;\r\nvar Polygon = (function () {\r\n function Polygon() {\r\n this.type = ShapeType[ShapeType.POLYGON];\r\n this.dragging = false;\r\n this.selected = false;\r\n this.points = new Array();\r\n }\r\n Polygon.prototype.draw = function (context, shapeDrawingMode) {\r\n context.beginPath();\r\n context.moveTo(this.points[0].x, this.points[0].y);\r\n for (var i = 1; i < this.points.length; i++) {\r\n context.lineTo(this.points[i].x, this.points[i].y);\r\n }\r\n if (shapeDrawingMode == ShapeDrawingMode.EDIT && this.lastPoint) {\r\n context.lineTo(this.lastPoint.x, this.lastPoint.y);\r\n }\r\n context.closePath();\r\n context.lineWidth = 2;\r\n context.strokeStyle = '#000000';\r\n if (shapeDrawingMode == ShapeDrawingMode.EDIT) {\r\n context.setLineDash([10, 5]);\r\n }\r\n else {\r\n context.setLineDash([]);\r\n }\r\n if (shapeDrawingMode == ShapeDrawingMode.SELECTED) {\r\n context.fillStyle = \"rgba(255, 255, 255, 0.5)\";\r\n }\r\n else if (shapeDrawingMode == ShapeDrawingMode.CORRECT) {\r\n context.fillStyle = \"rgb(93,175,11,0.5)\";\r\n }\r\n else if (shapeDrawingMode == ShapeDrawingMode.WRONG) {\r\n context.fillStyle = \"rgb(245,133,103,0.5)\";\r\n }\r\n else {\r\n context.fillStyle = \"rgba(142, 214, 255, 0.3)\";\r\n }\r\n context.fill();\r\n context.stroke();\r\n };\r\n Polygon.prototype.isPointInside = function (point) {\r\n var tmp = { x: 99999, y: point.y };\r\n var exline = { p1: point, p2: tmp };\r\n var count = 0;\r\n var i = 0;\r\n do {\r\n var side = { p1: this.points[i], p2: this.points[(i + 1) % this.points.length] };\r\n if (this.isIntersect(side, exline)) {\r\n if (this.direction(side.p1, point, side.p2) == 0)\r\n return this.onLine(side, point);\r\n count++;\r\n }\r\n i = (i + 1) % this.points.length;\r\n } while (i != 0);\r\n return count % 2 !== 0;\r\n };\r\n Polygon.prototype.move = function (dX, dY) {\r\n this.points.forEach(function (p) {\r\n p.x += dX;\r\n p.y += dY;\r\n });\r\n };\r\n Polygon.prototype.onLine = function (l, p) {\r\n return p.x <= Math.max(l.p1.x, l.p2.x)\r\n && p.x >= Math.min(l.p1.x, l.p2.x)\r\n && (p.y <= Math.max(l.p1.y, l.p2.y)\r\n && p.y >= Math.min(l.p1.y, l.p2.y));\r\n };\r\n Polygon.prototype.direction = function (a, b, c) {\r\n var val = (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y);\r\n if (val == 0) {\r\n return 0;\r\n }\r\n else if (val < 0) {\r\n return 2;\r\n }\r\n return 1;\r\n };\r\n Polygon.prototype.isIntersect = function (l1, l2) {\r\n var dir1 = this.direction(l1.p1, l1.p2, l2.p1);\r\n var dir2 = this.direction(l1.p1, l1.p2, l2.p2);\r\n var dir3 = this.direction(l2.p1, l2.p2, l1.p1);\r\n var dir4 = this.direction(l2.p1, l2.p2, l1.p2);\r\n if (dir1 != dir2 && dir3 != dir4)\r\n return true;\r\n if (dir1 == 0 && this.onLine(l1, l2.p1))\r\n return true;\r\n if (dir2 == 0 && this.onLine(l1, l2.p2))\r\n return true;\r\n if (dir3 == 0 && this.onLine(l2, l1.p1))\r\n return true;\r\n if (dir4 == 0 && this.onLine(l2, l1.p2))\r\n return true;\r\n return false;\r\n };\r\n return Polygon;\r\n})();\r\nexports.Polygon = Polygon;\r\nvar SceneUtils = (function () {\r\n function SceneUtils() {\r\n }\r\n SceneUtils.scaleSelectedPoint = function (selectedPoint, scaleFactor) {\r\n var scaledSelectedPoint = new SelectedPoint();\r\n scaledSelectedPoint.centerX = selectedPoint.centerX * scaleFactor;\r\n scaledSelectedPoint.centerY = selectedPoint.centerY * scaleFactor;\r\n return scaledSelectedPoint;\r\n };\r\n SceneUtils.scaleRectangle = function (rectangle, scaleFactor) {\r\n var scaledRectangle = new Rectangle();\r\n scaledRectangle.topLeftX = rectangle.topLeftX * scaleFactor;\r\n scaledRectangle.topLeftY = rectangle.topLeftY * scaleFactor;\r\n scaledRectangle.width = rectangle.width * scaleFactor;\r\n scaledRectangle.height = rectangle.height * scaleFactor;\r\n return scaledRectangle;\r\n };\r\n SceneUtils.scaleCircle = function (circle, scaleFactor) {\r\n var scaledCircle = new Circle();\r\n scaledCircle.centerX = circle.centerX * scaleFactor;\r\n scaledCircle.centerY = circle.centerY * scaleFactor;\r\n scaledCircle.radius = circle.radius * scaleFactor;\r\n return scaledCircle;\r\n };\r\n SceneUtils.scalePolygon = function (polygon, scaleFactor) {\r\n var _this = this;\r\n var scaledPolygon = new Polygon();\r\n scaledPolygon.points = polygon.points.map(function (p) { return _this.scalePoint(p, scaleFactor); });\r\n return scaledPolygon;\r\n };\r\n SceneUtils.scalePoint = function (point, scaleFactor) {\r\n return {\r\n x: point.x * scaleFactor,\r\n y: point.y * scaleFactor\r\n };\r\n };\r\n SceneUtils.scaleShapes = function (shapes, scaleFactor) {\r\n var result = [];\r\n for (var _i = 0; _i < shapes.length; _i++) {\r\n var shape = shapes[_i];\r\n if (shape.type == ShapeType[ShapeType.RECTANGLE]) {\r\n result.push(SceneUtils.scaleRectangle(shape, scaleFactor));\r\n }\r\n else if (shape.type == ShapeType[ShapeType.CIRCLE]) {\r\n result.push(SceneUtils.scaleCircle(shape, scaleFactor));\r\n }\r\n else if (shape.type == ShapeType[ShapeType.POLYGON]) {\r\n result.push(SceneUtils.scalePolygon(shape, scaleFactor));\r\n }\r\n }\r\n return result;\r\n };\r\n SceneUtils.serializeShapes = function (shapesToSerialize) {\r\n var shapes = shapesToSerialize.map(function (s) {\r\n if (s.type == ShapeType[ShapeType.RECTANGLE]) {\r\n return {\r\n type: s.type,\r\n topLeftX: s.topLeftX,\r\n topLeftY: s.topLeftY,\r\n width: s.width,\r\n height: s.height\r\n };\r\n }\r\n else if (s.type == ShapeType[ShapeType.CIRCLE]) {\r\n return {\r\n type: s.type,\r\n centerX: s.centerX,\r\n centerY: s.centerY,\r\n radius: s.radius\r\n };\r\n }\r\n else if (s.type == ShapeType[ShapeType.POLYGON]) {\r\n return {\r\n type: s.type,\r\n points: s.points.map(function (p) {\r\n return { x: p.x, y: p.y };\r\n })\r\n };\r\n }\r\n });\r\n return JSON.stringify(shapes);\r\n };\r\n SceneUtils.loadShapes = function (jsonData) {\r\n var result = [];\r\n var shapes = jsonData\r\n ? JSON.parse(jsonData)\r\n : null;\r\n if (shapes) {\r\n shapes.forEach(function (s) {\r\n if (s.type === ShapeType[ShapeType.RECTANGLE]) {\r\n var rectangle = new Rectangle();\r\n rectangle.topLeftX = s.topLeftX;\r\n rectangle.topLeftY = s.topLeftY;\r\n rectangle.width = s.width;\r\n rectangle.height = s.height;\r\n result.push(rectangle);\r\n }\r\n else if (s.type === ShapeType[ShapeType.CIRCLE]) {\r\n var circle = new Circle();\r\n circle.centerX = s.centerX;\r\n circle.centerY = s.centerY;\r\n circle.radius = s.radius;\r\n result.push(circle);\r\n }\r\n else if (s.type === ShapeType[ShapeType.POLYGON]) {\r\n var polygon = new Polygon();\r\n polygon.points = s.points;\r\n result.push(polygon);\r\n }\r\n });\r\n }\r\n return result;\r\n };\r\n SceneUtils.getMouseCoords = function (canvas, event) {\r\n var canvasCoords = canvas.getBoundingClientRect();\r\n return {\r\n x: event.clientX - canvasCoords.left,\r\n y: event.clientY - canvasCoords.top\r\n };\r\n };\r\n return SceneUtils;\r\n})();\r\nexports.SceneUtils = SceneUtils;\r\n},{}],514:[function(require,module,exports){\nvar Keys = (function () {\r\n function Keys() {\r\n }\r\n Keys.ESCAPE = 27;\r\n Keys.ENTER = 13;\r\n return Keys;\r\n})();\r\nexports.Keys = Keys;\r\n},{}],515:[function(require,module,exports){\nvar AuthRouter_1 = require(\"../urls/AuthRouter\");\r\nvar MainRouter_1 = require(\"../urls/MainRouter\");\r\nvar LocationChangeHelper = (function () {\r\n function LocationChangeHelper() {\r\n }\r\n LocationChangeHelper.isEnablePreventLocationChange = function (newLocation) {\r\n if (newLocation && (newLocation.indexOf(MainRouter_1.MainRouter.mainRoute) != -1 || newLocation.indexOf(AuthRouter_1.AuthRouter.accessDeniedRoute) != -1)) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n return LocationChangeHelper;\r\n})();\r\nexports.LocationChangeHelper = LocationChangeHelper;\r\n},{\"../urls/AuthRouter\":463,\"../urls/MainRouter\":479}],516:[function(require,module,exports){\nvar MenuHelper_1 = require(\"./MenuHelper\");\r\nvar MaterialsRouter_1 = require(\"../urls/MaterialsRouter\");\r\nvar StatisticsRouter_1 = require(\"../urls/StatisticsRouter\");\r\nvar NewsRouter_1 = require(\"../urls/NewsRouter\");\r\nvar InfoRouter_1 = require(\"../urls/InfoRouter\");\r\nvar UsersRouter_1 = require(\"../urls/UsersRouter\");\r\nvar CoursesRouter_1 = require(\"../urls/CoursesRouter\");\r\nvar LearningPathsRouter_1 = require(\"../urls/LearningPathsRouter\");\r\nvar QuizzesRouter_1 = require(\"../urls/QuizzesRouter\");\r\nvar PersonalRouter_1 = require(\"../urls/PersonalRouter\");\r\nvar SystemSettingsRouter_1 = require(\"../urls/SystemSettingsRouter\");\r\nvar LogsRouter_1 = require(\"../urls/LogsRouter\");\r\nvar JobsRouter_1 = require(\"../urls/JobsRouter\");\r\nvar ReferenceRouter_1 = require(\"../urls/ReferenceRouter\");\r\nvar MainRouter_1 = require(\"../urls/MainRouter\");\r\nvar CertificateTemplatesRouter_1 = require(\"../urls/CertificateTemplatesRouter\");\r\nvar SettingsService_1 = require(\"../settings/SettingsService\");\r\nvar AssessmentsRouter_1 = require(\"../urls/AssessmentsRouter\");\r\nvar BusinessUnitsRouter_1 = require(\"../urls/BusinessUnitsRouter\");\r\nvar NotificationTemplatesRouter_1 = require(\"../urls/NotificationTemplatesRouter\");\r\nvar FinancesRouter_1 = require(\"../urls/FinancesRouter\");\r\nvar ImportRouter_1 = require(\"../urls/ImportRouter\");\r\nvar ExternalResourcesRouter_1 = require(\"../urls/ExternalResourcesRouter\");\r\nvar HomeRouter_1 = require(\"../urls/HomeRouter\");\r\nvar UserRole_1 = require(\"../users/models/UserRole\");\r\nvar SlideTemplatesRouter_1 = require(\"../urls/SlideTemplatesRouter\");\r\nvar AppProperties_1 = require(\"./AppProperties\");\r\nvar GamificationRouter_1 = require(\"../urls/GamificationRouter\");\r\nvar MenuConfiguratorService = (function () {\r\n function MenuConfiguratorService(materialsRouter, statisticsRouter, newsRouter, infoRouter, usersRouter, coursesRouter, learningPathsRouter, quizzesRouter, personalRouter, systemSettingsRouter, logsRouter, jobsRouter, referenceRouter, mainRouter, certificateTemplatesRouter, settingsService, assessmentsRouter, businessUnitRouter, notificationTemplatesRouter, financesRouter, importRouter, externalRouter, homeRouter, gamificationRouter, slideTemplatesRouter) {\r\n this.materialsRouter = materialsRouter;\r\n this.statisticsRouter = statisticsRouter;\r\n this.newsRouter = newsRouter;\r\n this.infoRouter = infoRouter;\r\n this.usersRouter = usersRouter;\r\n this.coursesRouter = coursesRouter;\r\n this.learningPathsRouter = learningPathsRouter;\r\n this.quizzesRouter = quizzesRouter;\r\n this.personalRouter = personalRouter;\r\n this.systemSettingsRouter = systemSettingsRouter;\r\n this.logsRouter = logsRouter;\r\n this.jobsRouter = jobsRouter;\r\n this.referenceRouter = referenceRouter;\r\n this.mainRouter = mainRouter;\r\n this.certificateTemplatesRouter = certificateTemplatesRouter;\r\n this.settingsService = settingsService;\r\n this.assessmentsRouter = assessmentsRouter;\r\n this.businessUnitRouter = businessUnitRouter;\r\n this.notificationTemplatesRouter = notificationTemplatesRouter;\r\n this.financesRouter = financesRouter;\r\n this.importRouter = importRouter;\r\n this.externalRouter = externalRouter;\r\n this.homeRouter = homeRouter;\r\n this.gamificationRouter = gamificationRouter;\r\n this.slideTemplatesRouter = slideTemplatesRouter;\r\n }\r\n MenuConfiguratorService.prototype.getHomeMenuByRole = function (authenticated, userBusinessRole, systemPermissions) {\r\n var learnerMenuGroup = {\r\n key: MenuHelper_1.MenuHelper.HOME_INDEX_KEY,\r\n name: \"Home\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.indexUrl(),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_COURSES_KEY,\r\n name: \"Courses\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.coursesUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_LEARNING_PATH_KEY,\r\n name: \"Learning Paths\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.learningPathsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_MATERIALS_KEY,\r\n name: \"Materials\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.materialsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_FLASHCARDS_KEY,\r\n name: \"Flashcards\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.flashcardsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_REPORTS_KEY,\r\n name: \"Reports\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.reportsUrl(),\r\n items: []\r\n },\r\n ]\r\n };\r\n var administratorMenuGroup = {\r\n key: MenuHelper_1.MenuHelper.HOME_INDEX_KEY,\r\n name: \"Home\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.indexUrl(),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_ADMINISTRATION_MENU_KEY,\r\n name: \"Menu\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.administrationMenuUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_ADMINISTRATION_REPORTS_KEY,\r\n name: \"Reports\",\r\n allowed: authenticated && systemPermissions && systemPermissions.viewMyAnalytics,\r\n url: '#' + this.homeRouter.administrationReportsUrl(),\r\n items: []\r\n }\r\n ]\r\n };\r\n var attendeeManagerGroup = {\r\n key: MenuHelper_1.MenuHelper.HOME_INDEX_KEY,\r\n name: \"Home\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.indexUrl(),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_PARTICIPANTS_KEY,\r\n name: \"Progress\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.participantsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_COURSES_KEY,\r\n name: \"Courses\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.attendeeManagerCoursesUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_LEARNING_PATHS_KEY,\r\n name: \"Learning Paths\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.attendeeManagerLearningPathsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_USERS_KEY,\r\n name: \"Users\",\r\n allowed: authenticated && systemPermissions && systemPermissions.viewUsers,\r\n url: '#' + this.usersRouter.indexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_ATTENDEE_MANAGER_REPORTS_KEY,\r\n name: \"Reports\",\r\n allowed: authenticated && systemPermissions && systemPermissions.viewMyAnalytics,\r\n url: '#' + this.homeRouter.attendeeManagerReportsUrl(),\r\n items: []\r\n }\r\n ]\r\n };\r\n var instructorGroup = {\r\n key: MenuHelper_1.MenuHelper.HOME_INDEX_KEY,\r\n name: \"Home\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.indexUrl(),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_INSTRUCTOR_COURSES_KEY,\r\n name: \"Courses\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.instructorCoursesUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_INSTRUCTOR_LEARNING_PATHS_KEY,\r\n name: \"Learning Paths\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.instructorLearningPathsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_INSTRUCTOR_ASSESSMENTS_KEY,\r\n name: \"Assessments\",\r\n allowed: authenticated && systemPermissions && (systemPermissions.scoreAssessments || systemPermissions.scoreAnyAssessments),\r\n url: '#' + this.assessmentsRouter.assessmentsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_INSTRUCTOR_PARTICIPANTS_KEY,\r\n name: \"Progress\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.participantsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_INSTRUCTOR_REPORTS_KEY,\r\n name: \"Reports\",\r\n allowed: authenticated && systemPermissions && systemPermissions.viewMyAnalytics,\r\n url: '#' + this.homeRouter.instructorReportsUrl(),\r\n items: []\r\n }\r\n ]\r\n };\r\n var authorGroup = {\r\n key: MenuHelper_1.MenuHelper.HOME_INDEX_KEY,\r\n name: \"Home\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.indexUrl(),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_AUTHOR_COURSES_KEY,\r\n name: \"Courses\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.authorCoursesUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_AUTHOR_LEARNING_PATH_KEY,\r\n name: \"Learning Paths\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.authorLearningPathsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_AUTHOR_QUIZZES_KEY,\r\n name: \"Quizzes\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.authorQuizzesUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_AUTHOR_SURVEYS_KEY,\r\n name: \"Surveys\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.authorSurveysUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_AUTHOR_FLASHCARDS_KEY,\r\n name: \"Flashcards\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.authorFlashcardsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_AUTHOR_MATERIALS_KEY,\r\n name: \"Materials\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.authorMaterialsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_AUTHOR_REPORTS_KEY,\r\n name: \"Reports\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.authorReportsUrl(),\r\n items: []\r\n },\r\n ]\r\n };\r\n switch (userBusinessRole) {\r\n case \"ADMINISTRATOR\": {\r\n return administratorMenuGroup;\r\n }\r\n case \"INSTRUCTOR\": {\r\n return instructorGroup;\r\n }\r\n case \"ATTENDEE_MANAGER\": {\r\n return attendeeManagerGroup;\r\n }\r\n case \"AUTHOR\": {\r\n return authorGroup;\r\n }\r\n case \"LEARNER\": {\r\n return learnerMenuGroup;\r\n }\r\n default: {\r\n return learnerMenuGroup;\r\n }\r\n }\r\n };\r\n MenuConfiguratorService.prototype.getAllHomeMenu = function (authenticated, systemPermissions) {\r\n var result = [];\r\n result.push(this.getHomeMenuByRole(authenticated, UserRole_1.UserRole[UserRole_1.UserRole.ADMINISTRATOR], systemPermissions));\r\n result.push(this.getHomeMenuByRole(authenticated, UserRole_1.UserRole[UserRole_1.UserRole.INSTRUCTOR], systemPermissions));\r\n result.push(this.getHomeMenuByRole(authenticated, UserRole_1.UserRole[UserRole_1.UserRole.ATTENDEE_MANAGER], systemPermissions));\r\n result.push(this.getHomeMenuByRole(authenticated, UserRole_1.UserRole[UserRole_1.UserRole.AUTHOR], systemPermissions));\r\n result.push(this.getHomeMenuByRole(authenticated, UserRole_1.UserRole[UserRole_1.UserRole.LEARNER], systemPermissions));\r\n return result;\r\n };\r\n MenuConfiguratorService.prototype.getAdministrationMenu = function (authenticated, systemPermissions, hasAllBusinessUnits, businessUnitId) {\r\n return {\r\n key: MenuHelper_1.MenuHelper.HOME_ADMINISTRATION_MENU_KEY,\r\n name: 'Menu',\r\n allowed: authenticated && systemPermissions && (systemPermissions.viewUsers ||\r\n systemPermissions.viewGroups ||\r\n systemPermissions.editStoragePlaces ||\r\n systemPermissions.viewReferenceData ||\r\n systemPermissions.viewSystemLog ||\r\n systemPermissions.editSystemConfiguration ||\r\n systemPermissions.viewSecurityLog ||\r\n systemPermissions.viewAnyLearningObject ||\r\n systemPermissions.manageAnyBusinessUnit ||\r\n systemPermissions.configureBusinessUnitSettings ||\r\n systemPermissions.editNotificationTemplates ||\r\n systemPermissions.importInformation ||\r\n systemPermissions.viewCertificateTemplates),\r\n url: '#' + this.homeRouter.administrationMenuUrl(),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_LEARNING_CONTENT_MENU_KEY,\r\n name: \"Learning Content\",\r\n previewUrl: 'themes/default/img/icons/admin-menu-learning-content.svg',\r\n allowed: authenticated && systemPermissions && systemPermissions.manageAnyLearningObject,\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY,\r\n name: \"Courses\",\r\n allowed: authenticated,\r\n url: '#' + this.coursesRouter.indexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY,\r\n name: \"Learning Paths\",\r\n allowed: authenticated,\r\n url: '#' + this.learningPathsRouter.indexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_QUIZZES_MENU_KEY,\r\n name: \"Quizzes\",\r\n allowed: authenticated,\r\n url: '#' + this.quizzesRouter.quizzesIndexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_SURVEYS_MENU_KEY,\r\n name: \"Surveys\",\r\n allowed: authenticated,\r\n url: '#' + this.quizzesRouter.surveysIndexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_FLASHCARDS_MENU_KEY,\r\n name: \"Flashcards\",\r\n allowed: authenticated,\r\n url: '#' + this.quizzesRouter.flashcardsIndexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_MATERIALS_MENU_KEY,\r\n name: \"Materials\",\r\n allowed: authenticated,\r\n url: '#' + this.materialsRouter.indexUrl(),\r\n items: []\r\n },\r\n ]\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_DICTIONARIES_MENU_KEY,\r\n name: \"Dictionaries\",\r\n url: '#' + this.referenceRouter.indexUrl(\"languages\"),\r\n previewUrl: 'themes/default/img/icons/admin-menu-dictionaries.svg',\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_TEMPLATE_KEY,\r\n name: \"Templates\",\r\n previewUrl: 'themes/default/img/icons/admin-menu-certificate.svg',\r\n allowed: authenticated && systemPermissions && (systemPermissions.viewAnyLearningObject || systemPermissions.viewCertificateTemplates),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_CERTIFICATE_TEMPLATE_KEY,\r\n name: \"Certificate Templates\",\r\n url: '#' + this.certificateTemplatesRouter.indexUrl(),\r\n allowed: authenticated && systemPermissions && (systemPermissions.viewAnyLearningObject || systemPermissions.viewCertificateTemplates),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SLIDE_TEMPLATE_KEY,\r\n name: \"Slide Templates\",\r\n url: '#' + this.slideTemplatesRouter.indexUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewAnyLearningObject,\r\n items: []\r\n },\r\n ]\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_BUSINESS_UNITS_MENU_KEY,\r\n name: \"Business Units\",\r\n url: '#' + this.businessUnitRouter.indexUrl(),\r\n previewUrl: 'themes/default/img/icons/admin-menu-business-units.svg',\r\n allowed: authenticated && systemPermissions && (systemPermissions.manageAnyBusinessUnit || systemPermissions.configureBusinessUnitSettings),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.BUSINESS_UNIT_GENERAL_KEY,\r\n name: \"General\",\r\n url: '#' + this.businessUnitRouter.generalUrl(businessUnitId),\r\n allowed: authenticated && systemPermissions && (systemPermissions.manageAnyBusinessUnit || systemPermissions.configureBusinessUnitSettings) && businessUnitId != null,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.BUSINESS_UNIT_BRANDING_KEY,\r\n name: \"Branding\",\r\n url: '#' + this.businessUnitRouter.brandingUrl(businessUnitId),\r\n allowed: authenticated && systemPermissions && (systemPermissions.manageAnyBusinessUnit || systemPermissions.configureBusinessUnitSettings) && businessUnitId != null,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.BUSINESS_UNIT_SUBSCRIPTION_KEY,\r\n name: \"Menu items\",\r\n url: '#' + this.businessUnitRouter.menuItemsUrl(businessUnitId),\r\n allowed: authenticated && systemPermissions && (systemPermissions.manageAnyBusinessUnit || systemPermissions.configureBusinessUnitSettings) && businessUnitId != null,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.BUSINESS_UNIT_MENU_ITEMS_KEY,\r\n name: \"Subscription\",\r\n url: '#' + this.businessUnitRouter.subscriptionUrl(businessUnitId),\r\n allowed: authenticated && systemPermissions && (systemPermissions.manageAnyBusinessUnit || systemPermissions.configureBusinessUnitSettings) && businessUnitId != null && AppProperties_1.AppProperties.freePlanLimits === 'true',\r\n items: []\r\n },\r\n ]\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_USERS_MENU_KEY,\r\n name: \"Users\",\r\n url: '#' + this.usersRouter.indexUrl(),\r\n previewUrl: 'themes/default/img/icons/admin-menu-user.svg',\r\n allowed: authenticated && systemPermissions && systemPermissions.viewUsers,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_GROUPS_MENU_KEY,\r\n name: \"User Groups\",\r\n url: '#' + this.usersRouter.groupsIndexUrl(),\r\n previewUrl: 'themes/default/img/icons/admin-menu-user-groups.svg',\r\n allowed: authenticated && systemPermissions && systemPermissions.viewGroups,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.HOME_INSTRUCTOR_ASSESSMENTS_KEY,\r\n previewUrl: 'themes/default/img/icons/admin-menu-learning-content.svg',\r\n name: \"Assessments\",\r\n allowed: authenticated && systemPermissions && (systemPermissions.scoreAssessments || systemPermissions.scoreAnyAssessments),\r\n url: '#' + this.assessmentsRouter.assessmentsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ANALYTICS_POWER_BI_REPORT_MENU_KEY,\r\n name: \"Analytics\",\r\n url: '#' + this.statisticsRouter.powerBiReportUrl(),\r\n previewUrl: 'themes/default/img/icons/admin-menu-analytics.svg',\r\n allowed: authenticated && systemPermissions && systemPermissions.viewAnalytics,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_IMPORT_EXPORT_KEY,\r\n name: \"Import | Export\",\r\n previewUrl: 'themes/default/img/icons/admin-menu-import.svg',\r\n url: '#' + this.importRouter.indexUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.importInformation,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_NOTIFICATION_TEMPLATE_KEY,\r\n name: \"Notification Templates\",\r\n url: '#' + this.notificationTemplatesRouter.indexUrl(),\r\n previewUrl: 'themes/default/img/icons/admin-menu-notification.svg',\r\n allowed: authenticated && systemPermissions && systemPermissions.editNotificationTemplates,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_PROGRESS_KEY,\r\n name: \"Progress\",\r\n allowed: authenticated,\r\n url: '#' + this.homeRouter.participantsUrl(),\r\n previewUrl: 'themes/default/img/icons/admin-menu-progress.svg',\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_MENU_KEY,\r\n name: \"System\",\r\n previewUrl: 'themes/default/img/icons/admin-menu-system.svg',\r\n allowed: authenticated && systemPermissions && (systemPermissions.editStoragePlaces ||\r\n (systemPermissions.editReferenceData && hasAllBusinessUnits) ||\r\n systemPermissions.manageCronJobs ||\r\n systemPermissions.editSystemConfiguration),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_STORAGE_PLACES_MENU_KEY,\r\n name: \"Storages\",\r\n url: '#' + this.systemSettingsRouter.storagePlacesIndexUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.editStoragePlaces,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_BUNDLE_MENU_KEY,\r\n name: \"System files\",\r\n url: '#' + this.systemSettingsRouter.systemBundleEditUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.editReferenceData && hasAllBusinessUnits,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_CRON_JOBS_KEY,\r\n name: \"Background Jobs\",\r\n url: '#' + this.jobsRouter.jobsUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.manageCronJobs,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_SETTING_KEY,\r\n name: \"System configurations\",\r\n url: '#' + this.systemSettingsRouter.systemSettingsUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.editSystemConfiguration,\r\n items: []\r\n },\r\n ]\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_LOGS_MENU_KEY,\r\n name: \"Logs\",\r\n previewUrl: 'themes/default/img/icons/admin-menu-logs.svg',\r\n allowed: authenticated && systemPermissions && (systemPermissions.viewSecurityLog || systemPermissions.viewSystemLog),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_LOGS_KEY,\r\n name: \"System Logs\",\r\n url: '#' + this.logsRouter.systemLogsUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewSystemLog,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SECURITY_LOGS_KEY,\r\n name: \"Security Logs\",\r\n url: '#' + this.logsRouter.securityLogsUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewSecurityLog,\r\n items: []\r\n }\r\n ]\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_GAMIFICATION_MENU_KEY,\r\n name: 'Gamification',\r\n previewUrl: 'themes/default/img/icons/admin-menu-gamification.svg',\r\n allowed: authenticated && systemPermissions && systemPermissions.viewAnyLearningObject,\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_BADGES_KEY,\r\n name: 'Badges',\r\n url: '#' + this.gamificationRouter.badgesUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewAnyLearningObject,\r\n items: []\r\n },\r\n ]\r\n }\r\n ]\r\n };\r\n };\r\n ;\r\n MenuConfiguratorService.prototype.fillMenuByPermissionsItemsArray = function (authenticated, systemPermissions, systemAdministrator, BUZoomVisibility, hasAllBusinessUnits, userBusinessRole, menuItemsAvailability) {\r\n var menuByPermissions = [\r\n this.getHomeMenuByRole(authenticated, userBusinessRole, systemPermissions),\r\n {\r\n key: MenuHelper_1.MenuHelper.CATALOG_MENU_KEY,\r\n name: \"Catalog\",\r\n allowed: menuItemsAvailability.showCatalog,\r\n allowedForSystem: menuItemsAvailability.showCatalog\r\n || (systemPermissions && systemPermissions.manageAnyLearningObject),\r\n url: '#' + this.financesRouter.productsCatalogUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_COURSES_MENU_KEY,\r\n name: \"Courses\",\r\n allowed: menuItemsAvailability.showCourses,\r\n allowedForSystem: menuItemsAvailability.showCourses\r\n || (systemPermissions && systemPermissions.manageAnyLearningObject),\r\n url: '#' + this.coursesRouter.indexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY,\r\n name: \"Learning Paths\",\r\n allowed: menuItemsAvailability.showLearningPaths,\r\n allowedForSystem: menuItemsAvailability.showLearningPaths\r\n || (systemPermissions && systemPermissions.manageAnyLearningObject),\r\n url: '#' + this.learningPathsRouter.indexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ANALYTICS_MENU_KEY,\r\n name: \"Analytics\",\r\n allowed: authenticated && systemPermissions && systemPermissions.viewAnalytics,\r\n dynamicUrl: true,\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.ANALYTICS_POWER_BI_REPORT_MENU_KEY,\r\n name: \"Analytics\",\r\n url: '#' + this.statisticsRouter.powerBiReportUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewAnalytics,\r\n items: []\r\n }\r\n ]\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.STUDENTS_OFFERS_MENU_KEY,\r\n name: 'Discussion Board',\r\n allowed: menuItemsAvailability.showDiscussionBoard,\r\n allowedForSystem: menuItemsAvailability.showDiscussionBoard,\r\n url: '#' + this.newsRouter.newsSearchUrl('DISCUSSION'),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ZOOM_MENU_KEY,\r\n name: \"Zoom\",\r\n url: '#' + this.externalRouter.zoomUrl(),\r\n allowed: authenticated && BUZoomVisibility\r\n && systemPermissions && (systemPermissions.scoreAssessments || systemPermissions.scoreAnyAssessments),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_MENU_KEY,\r\n name: \"Administration\",\r\n allowed: authenticated && systemPermissions && (systemPermissions.viewUsers ||\r\n systemPermissions.viewGroups ||\r\n systemPermissions.editStoragePlaces ||\r\n systemPermissions.viewReferenceData ||\r\n systemPermissions.viewSystemLog ||\r\n systemPermissions.editSystemConfiguration ||\r\n systemPermissions.viewSecurityLog ||\r\n systemPermissions.viewAnyLearningObject ||\r\n systemPermissions.manageAnyBusinessUnit ||\r\n systemPermissions.configureBusinessUnitSettings ||\r\n systemPermissions.editNotificationTemplates ||\r\n systemPermissions.importInformation ||\r\n systemPermissions.viewCertificateTemplates),\r\n url: '#' + this.homeRouter.administrationMenuUrl(),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_USERS_MENU_KEY,\r\n name: \"Users\",\r\n url: '#' + this.usersRouter.indexUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewUsers,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_GROUPS_MENU_KEY,\r\n name: \"User Groups\",\r\n url: '#' + this.usersRouter.groupsIndexUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewGroups,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_BUSINESS_UNITS_MENU_KEY,\r\n name: \"Business Units\",\r\n url: '#' + this.businessUnitRouter.indexUrl(),\r\n allowed: authenticated && systemPermissions && (systemPermissions.manageAnyBusinessUnit || systemPermissions.configureBusinessUnitSettings),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_STORAGE_PLACES_MENU_KEY,\r\n name: \"Storages\",\r\n url: '#' + this.systemSettingsRouter.storagePlacesIndexUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.editStoragePlaces,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_BUNDLE_MENU_KEY,\r\n name: \"System files\",\r\n url: '#' + this.systemSettingsRouter.systemBundleEditUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.editReferenceData && hasAllBusinessUnits,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_DICTIONARIES_MENU_KEY,\r\n name: \"Dictionaries\",\r\n url: '#' + this.referenceRouter.indexUrl(\"languages\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SUBJECTS_MENU_KEY,\r\n name: \"Subjects\",\r\n url: '#' + this.referenceRouter.indexUrl(\"subjects\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_LANGUAGES_MENU_KEY,\r\n name: \"Languages\",\r\n url: '#' + this.referenceRouter.indexUrl(\"languages\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_LEARNING_PATH_TYPES_MENU_KEY,\r\n name: \"Learning path types\",\r\n url: '#' + this.referenceRouter.indexUrl(\"learningPathTypes\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_COURSE_TYPES_MENU_KEY,\r\n name: \"Course types\",\r\n url: '#' + this.referenceRouter.indexUrl(\"courseTypes\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SOURCES_MENU_KEY,\r\n name: \"Sources\",\r\n url: '#' + this.referenceRouter.indexUrl(\"sources\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SOURCE_TYPES_MENU_KEY,\r\n name: \"Source types\",\r\n url: '#' + this.referenceRouter.indexUrl(\"sourceTypes\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_COMPLEXITY_LEVELS_MENU_KEY,\r\n name: \"Complexity levels\",\r\n url: '#' + this.referenceRouter.indexUrl(\"complexityLevels\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_CREDIT_TYPES_MENU_KEY,\r\n name: \"Credit types\",\r\n url: '#' + this.referenceRouter.indexUrl(\"creditTypes\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_LOCATION_TYPES_MENU_KEY,\r\n name: \"Location types\",\r\n url: '#' + this.referenceRouter.indexUrl(\"locationTypes\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_LOCATIONS_MENU_KEY,\r\n name: \"Locations\",\r\n url: '#' + this.referenceRouter.indexUrl(\"locations\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_EQUIPMENTS_MENU_KEY,\r\n name: \"Equipment\",\r\n url: '#' + this.referenceRouter.indexUrl(\"equipment\"),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewReferenceData,\r\n items: []\r\n }\r\n ]\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_TEMPLATE_KEY,\r\n name: \"Templates\",\r\n previewUrl: 'themes/default/img/icons/admin-menu-certificate.svg',\r\n allowed: authenticated && systemPermissions && (systemPermissions.viewAnyLearningObject || systemPermissions.viewCertificateTemplates),\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_CERTIFICATE_TEMPLATE_KEY,\r\n name: \"Certificate Templates\",\r\n url: '#' + this.certificateTemplatesRouter.indexUrl(),\r\n allowed: authenticated && systemPermissions && (systemPermissions.viewAnyLearningObject || systemPermissions.viewCertificateTemplates),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SLIDE_TEMPLATE_KEY,\r\n name: \"Slide Templates\",\r\n url: '#' + this.slideTemplatesRouter.indexUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewAnyLearningObject,\r\n items: []\r\n },\r\n ]\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_NOTIFICATION_TEMPLATE_KEY,\r\n name: \"Notification Templates\",\r\n url: '#' + this.notificationTemplatesRouter.indexUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.editNotificationTemplates,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SECURITY_LOGS_KEY,\r\n name: \"Security Logs\",\r\n url: '#' + this.logsRouter.securityLogsUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewSecurityLog,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_IMPORT_EXPORT_KEY,\r\n name: \"Import | Export\",\r\n url: '#' + this.importRouter.indexUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.importInformation,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_LOGS_KEY,\r\n name: \"System Logs\",\r\n url: '#' + this.logsRouter.systemLogsUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewSystemLog,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_CRON_JOBS_KEY,\r\n name: \"Background Jobs\",\r\n url: '#' + this.jobsRouter.jobsUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.manageCronJobs,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_SYSTEM_SETTING_KEY,\r\n name: \"System configurations\",\r\n url: '#' + this.systemSettingsRouter.systemSettingsUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.editSystemConfiguration,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_GAMIFICATION_MENU_KEY,\r\n name: 'Gamification',\r\n previewUrl: 'themes/default/img/icons/admin-menu-logs.svg',\r\n allowed: authenticated && systemPermissions && systemPermissions.viewAnyLearningObject,\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.ADMINISTRATION_BADGES_KEY,\r\n name: 'Badges',\r\n url: '#' + this.gamificationRouter.badgesUrl(),\r\n allowed: authenticated && systemPermissions && systemPermissions.viewAnyLearningObject,\r\n items: []\r\n },\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.FAQ_MENU_KEY,\r\n name: \"Help\",\r\n url: '#' + this.newsRouter.helpUrl(1000),\r\n allowed: true,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ASSESSMENTS_MENU_KEY,\r\n name: \"Assessments\",\r\n allowed: false,\r\n url: '#' + this.assessmentsRouter.assessmentsUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.ALL_NEWS_MENU_KEY,\r\n name: \"News\",\r\n url: '#' + this.newsRouter.newsSearchUrl('NEWS'),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.STUDENTS_OFFERS_MENU_KEY,\r\n name: \"Discussion board\",\r\n url: '#' + this.newsRouter.newsSearchUrl('DISCUSSION'),\r\n allowed: false,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_MATERIALS_MENU_KEY,\r\n name: \"Materials\",\r\n allowed: menuItemsAvailability.showMaterials\r\n || (systemPermissions && systemPermissions.manageAnyLearningObject),\r\n url: '#' + this.materialsRouter.indexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_QUIZZES_MENU_KEY,\r\n name: \"Quizzes\",\r\n allowed: menuItemsAvailability.showQuizzes\r\n || (systemPermissions && systemPermissions.manageAnyLearningObject),\r\n url: '#' + this.quizzesRouter.quizzesIndexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_SURVEYS_MENU_KEY,\r\n name: \"Surveys\",\r\n allowed: menuItemsAvailability.showQuizzes\r\n || (systemPermissions && systemPermissions.manageAnyLearningObject),\r\n url: '#' + this.quizzesRouter.surveysIndexUrl(),\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.EDUCATION_FLASHCARDS_MENU_KEY,\r\n name: \"Flashcards\",\r\n allowed: menuItemsAvailability.showQuizzes\r\n || (systemPermissions && systemPermissions.manageAnyLearningObject),\r\n url: '#' + this.quizzesRouter.flashcardsIndexUrl(),\r\n items: []\r\n }\r\n ];\r\n return menuByPermissions;\r\n };\r\n MenuConfiguratorService.prototype.fillPersonalAccountItems = function (authenticated, systemPermissions) {\r\n var personalAccount = {\r\n key: MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_MENU_KEY,\r\n name: \"My profile\",\r\n url: '#' + this.personalRouter.settingsUrl(),\r\n allowed: authenticated,\r\n items: [\r\n {\r\n key: MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_COURSES_CERTIFICATES_MENU_KEY,\r\n name: \"My certificates\",\r\n url: '#' + this.personalRouter.certificatesUrl(),\r\n allowed: authenticated,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_CREDITS_MENU_KEY,\r\n name: \"My credits\",\r\n url: '#' + this.personalRouter.creditsUrl(),\r\n allowed: authenticated,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.PERSONAL_PURCHASED_ORDERS_MENU_KEY,\r\n name: \"My purchases\",\r\n url: '#' + this.personalRouter.purchasedOrdersUrl(),\r\n allowed: authenticated,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_BADGES_MENU_KEY,\r\n name: 'My badges',\r\n url: '#' + this.personalRouter.badgesUrl(),\r\n allowed: authenticated,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_NEW_COMMENTS_MENU_KEY,\r\n name: \"My comments\",\r\n url: '#' + this.personalRouter.newCommentsUrl(),\r\n allowed: authenticated,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_SETTINGS_MENU_KEY,\r\n name: \"Settings\",\r\n url: '#' + this.personalRouter.settingsUrl(),\r\n allowed: authenticated,\r\n items: []\r\n },\r\n {\r\n key: MenuHelper_1.MenuHelper.PERSONAL_ACCOUNT_SUPPORT_MENU_KEY,\r\n name: \"Support\",\r\n url: '#' + this.personalRouter.supportUrl(),\r\n allowed: authenticated,\r\n items: []\r\n },\r\n ]\r\n };\r\n return personalAccount;\r\n };\r\n MenuConfiguratorService.NAME = \"utils.MenuConfiguratorService\";\r\n MenuConfiguratorService.$inject = [\r\n MaterialsRouter_1.MaterialsRouter.NAME,\r\n StatisticsRouter_1.StatisticsRouter.NAME,\r\n NewsRouter_1.NewsRouter.NAME,\r\n InfoRouter_1.InfoRouter.NAME,\r\n UsersRouter_1.UsersRouter.NAME,\r\n CoursesRouter_1.CoursesRouter.NAME,\r\n LearningPathsRouter_1.LearningPathsRouter.NAME,\r\n QuizzesRouter_1.QuizzesRouter.NAME,\r\n PersonalRouter_1.PersonalRouter.NAME,\r\n SystemSettingsRouter_1.SystemSettingsRouter.NAME,\r\n LogsRouter_1.LogsRouter.NAME,\r\n JobsRouter_1.JobsRouter.NAME,\r\n ReferenceRouter_1.ReferenceRouter.NAME,\r\n MainRouter_1.MainRouter.NAME,\r\n CertificateTemplatesRouter_1.CertificateTemplatesRouter.NAME,\r\n SettingsService_1.SettingsService.NAME,\r\n AssessmentsRouter_1.AssessmentsRouter.NAME,\r\n BusinessUnitsRouter_1.BusinessUnitsRouter.NAME,\r\n NotificationTemplatesRouter_1.NotificationTemplatesRouter.NAME,\r\n FinancesRouter_1.FinancesRouter.NAME,\r\n ImportRouter_1.ImportRouter.NAME,\r\n ExternalResourcesRouter_1.ExternalResourcesRouter.NAME,\r\n HomeRouter_1.HomeRouter.NAME,\r\n GamificationRouter_1.GamificationRouter.NAME,\r\n SlideTemplatesRouter_1.SlideTemplatesRouter.NAME\r\n ];\r\n return MenuConfiguratorService;\r\n})();\r\nexports.MenuConfiguratorService = MenuConfiguratorService;\r\n},{\"../settings/SettingsService\":427,\"../urls/AssessmentsRouter\":462,\"../urls/BusinessUnitsRouter\":464,\"../urls/CertificateTemplatesRouter\":465,\"../urls/CoursesRouter\":468,\"../urls/ExternalResourcesRouter\":470,\"../urls/FinancesRouter\":471,\"../urls/GamificationRouter\":472,\"../urls/HomeRouter\":473,\"../urls/ImportRouter\":474,\"../urls/InfoRouter\":475,\"../urls/JobsRouter\":476,\"../urls/LearningPathsRouter\":477,\"../urls/LogsRouter\":478,\"../urls/MainRouter\":479,\"../urls/MaterialsRouter\":480,\"../urls/NewsRouter\":481,\"../urls/NotificationTemplatesRouter\":482,\"../urls/PersonalRouter\":484,\"../urls/QuizzesRouter\":486,\"../urls/ReferenceRouter\":487,\"../urls/SlideTemplatesRouter\":488,\"../urls/StatisticsRouter\":489,\"../urls/SystemSettingsRouter\":490,\"../urls/UsersRouter\":493,\"../users/models/UserRole\":507,\"./AppProperties\":\"AppProperties\",\"./MenuHelper\":517}],517:[function(require,module,exports){\nvar MenuHelper = (function () {\r\n function MenuHelper() {\r\n }\r\n MenuHelper.setCurrentMenuItem = function (menuItemKey) {\r\n var oldMenuItemKey = this.currentMenuItemKey;\r\n this.currentMenuItemKey = menuItemKey;\r\n for (var i = 0; i < this.updateMenuListeners.length; i++) {\r\n this.updateMenuListeners[i].onMenuItemUpdate(this.currentMenuItemKey, oldMenuItemKey);\r\n }\r\n };\r\n MenuHelper.addMenuUpdateListener = function (listener) {\r\n if (this.updateMenuListeners.indexOf(listener) == -1) {\r\n this.updateMenuListeners.push(listener);\r\n }\r\n };\r\n MenuHelper.removeMenuUpdateListener = function (listener) {\r\n var index = this.updateMenuListeners.indexOf(listener);\r\n if (index > -1) {\r\n this.updateMenuListeners.splice(index, 1);\r\n }\r\n };\r\n MenuHelper.getCurrentMenuItemKey = function () {\r\n return this.currentMenuItemKey;\r\n };\r\n MenuHelper.ADMINISTRATION_MENU_KEY = 'administration';\r\n MenuHelper.ADMINISTRATION_USERS_MENU_KEY = 'administration_users';\r\n MenuHelper.ADMINISTRATION_GROUPS_MENU_KEY = 'administration_groups';\r\n MenuHelper.ADMINISTRATION_COMMON_SETTINGS_MENU_KEY = 'administration_commonSettings';\r\n MenuHelper.ADMINISTRATION_STORAGE_PLACES_MENU_KEY = 'administration_storagePlaces';\r\n MenuHelper.ADMINISTRATION_SYSTEM_BUNDLE_MENU_KEY = 'administration_systemBundle';\r\n MenuHelper.ADMINISTRATION_SYSTEM_DICTIONARIES_MENU_KEY = 'administration_systemDictionaries';\r\n MenuHelper.ADMINISTRATION_BUSINESS_UNITS_MENU_KEY = 'administration_businessUnits';\r\n MenuHelper.ADMINISTRATION_SUBJECTS_MENU_KEY = 'administration_subjects';\r\n MenuHelper.ADMINISTRATION_LANGUAGES_MENU_KEY = 'administration_languages';\r\n MenuHelper.ADMINISTRATION_LEARNING_PATH_TYPES_MENU_KEY = 'administration_learningPathTypes';\r\n MenuHelper.ADMINISTRATION_COURSE_TYPES_MENU_KEY = 'administration_courseTypes';\r\n MenuHelper.ADMINISTRATION_CERTIFICATE_TEMPLATE_KEY = 'administration_certificateTemplates';\r\n MenuHelper.ADMINISTRATION_NOTIFICATION_TEMPLATE_KEY = 'administration_notificationTemplates';\r\n MenuHelper.ADMINISTRATION_SOURCES_MENU_KEY = 'administration_sources';\r\n MenuHelper.ADMINISTRATION_SOURCE_TYPES_MENU_KEY = 'administration_sourceTypes';\r\n MenuHelper.ADMINISTRATION_COMPLEXITY_LEVELS_MENU_KEY = 'administration_complexityLevels';\r\n MenuHelper.ADMINISTRATION_CREDIT_TYPES_MENU_KEY = 'administration_creditTypes';\r\n MenuHelper.ADMINISTRATION_LOCATION_TYPES_MENU_KEY = 'administration_locationTypes';\r\n MenuHelper.ADMINISTRATION_LOCATIONS_MENU_KEY = 'administration_locations';\r\n MenuHelper.ADMINISTRATION_EQUIPMENTS_MENU_KEY = 'administration_equipment';\r\n MenuHelper.ADMINISTRATION_SYSTEM_LOGS_KEY = 'administration__systemLogs';\r\n MenuHelper.ADMINISTRATION_BADGES_KEY = 'administration__badges';\r\n MenuHelper.ADMINISTRATION_GAME_PROGRAMS_KEY = 'administration__games';\r\n MenuHelper.ADMINISTRATION_CRON_JOBS_KEY = 'administration__cronJobs';\r\n MenuHelper.ADMINISTRATION_SYSTEM_SETTING_KEY = 'administration__systemSetting';\r\n MenuHelper.ADMINISTRATION_SECURITY_LOGS_KEY = 'administration_securityLogs';\r\n MenuHelper.ADMINISTRATION_IMPORT_EXPORT_KEY = 'administration_importExport';\r\n MenuHelper.ADMINISTRATION_SYSTEM_MENU_KEY = 'administration_system';\r\n MenuHelper.ADMINISTRATION_LOGS_MENU_KEY = 'administration_logs';\r\n MenuHelper.ADMINISTRATION_GAMIFICATION_MENU_KEY = 'administration_gamification';\r\n MenuHelper.ADMINISTRATION_LEARNING_CONTENT_MENU_KEY = 'administration_learningContent';\r\n MenuHelper.ADMINISTRATION_PROGRESS_KEY = 'administration_progress';\r\n MenuHelper.ADMINISTRATION_TEMPLATE_KEY = 'administration_learningContent';\r\n MenuHelper.ADMINISTRATION_SLIDE_TEMPLATE_KEY = 'administration_slideTemplates';\r\n MenuHelper.USER_PROFILE_MENU_KEY = 'user_profile';\r\n MenuHelper.MAIN_MENU_KEY = 'mainpage';\r\n MenuHelper.PROFILE_MENU_KEY = 'profile';\r\n MenuHelper.CATALOG_MENU_KEY = \"catalog\";\r\n MenuHelper.EDUCATION_MENU_KEY = 'education';\r\n MenuHelper.EDUCATION_LEARNING_PATHS_MENU_KEY = 'learning_paths';\r\n MenuHelper.EDUCATION_COURSES_MENU_KEY = \"courses\";\r\n MenuHelper.EDUCATION_MATERIALS_MENU_KEY = 'materials';\r\n MenuHelper.EDUCATION_QUIZZES_MENU_KEY = \"quizzes\";\r\n MenuHelper.EDUCATION_SURVEYS_MENU_KEY = \"surveys\";\r\n MenuHelper.EDUCATION_FLASHCARDS_MENU_KEY = \"flashcards\";\r\n MenuHelper.MY_LIBRARY_MENU_KEY = 'my_library';\r\n MenuHelper.MY_LIBRARY_FAVORITES_MENU_KEY = 'favorites';\r\n MenuHelper.MY_LIBRARY_PLAYLISTS_MENU_KEY = \"playlists\";\r\n MenuHelper.ANALYTICS_MENU_KEY = 'analytics';\r\n MenuHelper.ANALYTICS_MATERIAL_STATISTICS_MENU_KEY = 'material_statistics';\r\n MenuHelper.ANALYTICS_UPLOADS_MENU_KEY = 'operations_uploads';\r\n MenuHelper.ANALYTICS_MATERIAL_VIEW_REPORT_MENU_KEY = 'analytics_material_view_report';\r\n MenuHelper.ANALYTICS_MATERIAL_DOWNLOAD_REPORT_MENU_KEY = 'analytics_material_download_report';\r\n MenuHelper.ANALYTICS_MATERIAL_UPLOAD_REPORT_MENU_KEY = 'analytics_material_upload_report';\r\n MenuHelper.ANALYTICS_POWER_BI_REPORT_MENU_KEY = 'analytics_powerbi_report';\r\n MenuHelper.OPERATIONS_ACCOUNT_MANAGEMENT_MENU_KEY = 'operations_accountManagement';\r\n MenuHelper.NEWS_MENU_KEY = 'news';\r\n MenuHelper.ALL_NEWS_MENU_KEY = 'all_news';\r\n MenuHelper.STUDENTS_OFFERS_MENU_KEY = 'students_offers';\r\n MenuHelper.ZOOM_MENU_KEY = 'zoom';\r\n MenuHelper.INFO_MENU_KEY = 'info';\r\n MenuHelper.ABOUT_PROJECT_MENU_KEY = 'about_project';\r\n MenuHelper.ABOUT_COMPANY_MENU_KEY = 'about_company';\r\n MenuHelper.FAQ_MENU_KEY = 'faq';\r\n MenuHelper.CONTACTS_MENU_KEY = 'contacts';\r\n MenuHelper.ASSESSMENTS_MENU_KEY = 'assessments';\r\n MenuHelper.PERSONAL_ACCOUNT_MENU_KEY = \"personal_account\";\r\n MenuHelper.PERSONAL_ACCOUNT_UPLOADS_MENU_KEY = \"personal_account_uploads\";\r\n MenuHelper.PERSONAL_ACCOUNT_COURSES_MENU_KEY = \"personal_account_courses\";\r\n MenuHelper.PERSONAL_ACCOUNT_LEARNING_PATHS_MENU_KEY = \"personal_account_learning_paths\";\r\n MenuHelper.PERSONAL_ACCOUNT_COURSES_CERTIFICATES_MENU_KEY = \"personal_account_courses_certificates\";\r\n MenuHelper.PERSONAL_ACCOUNT_QUIZZES_MENU_KEY = \"personal_account_quizzes\";\r\n MenuHelper.PERSONAL_ACCOUNT_PLAYLISTS_MENU_KEY = \"personal_account_playlists\";\r\n MenuHelper.PERSONAL_ACCOUNT_SUBSCRIPTIONS_MENU_KEY = \"personal_account_subscriptions\";\r\n MenuHelper.PERSONAL_ACCOUNT_NEW_COMMENTS_MENU_KEY = \"personal_account_new_comments\";\r\n MenuHelper.PERSONAL_ACCOUNT_SUPPORT_MENU_KEY = \"personal_account_support\";\r\n MenuHelper.PERSONAL_ACCOUNT_COUPONS_MENU_KEY = \"personal_account_coupons\";\r\n MenuHelper.PERSONAL_ACCOUNT_SETTINGS_MENU_KEY = \"personal_account_settings\";\r\n MenuHelper.PERSONAL_ACCOUNT_EXPIRED_COURSES_MENU_KEY = \"personal_account_expired_courses\";\r\n MenuHelper.PERSONAL_ACCOUNT_EXPIRED_LEARNING_PATHS_MENU_KEY = \"personal_account_expired_learning_paths\";\r\n MenuHelper.PERSONAL_PURCHASED_ORDERS_MENU_KEY = \"personal_purchased_orders\";\r\n MenuHelper.PERSONAL_ACCOUNT_BADGES_MENU_KEY = \"personal_account_badges\";\r\n MenuHelper.PERSONAL_ACCOUNT_CREDITS_MENU_KEY = \"personal_account_credits\";\r\n MenuHelper.PERSONAL_ACCOUNT_CALENDAR_MENU_KEY = \"personal_account_calendar\";\r\n MenuHelper.POLICIES_PRIVACY_POLICY_LINK_KEY = \"POLICIES_PRIVACY_POLICY\";\r\n MenuHelper.POLICIES_COOKIE_POLICY_LINK_KEY = \"POLICIES_COOKIE_POLICY\";\r\n MenuHelper.POLICIES_TERMS_OF_USE_LINK_KEY = \"POLICIES_TERMS_OF_USE\";\r\n MenuHelper.ACCESSIBILITY_LINK_KEY = \"accessibility\";\r\n MenuHelper.HOME_INDEX_KEY = \"home\";\r\n MenuHelper.HOME_COURSES_KEY = \"home_courses\";\r\n MenuHelper.HOME_LEARNING_PATH_KEY = \"home_learningPaths\";\r\n MenuHelper.HOME_FLASHCARDS_KEY = \"home_flashcards\";\r\n MenuHelper.HOME_MATERIALS_KEY = \"home_materials\";\r\n MenuHelper.HOME_REPORTS_KEY = \"home_reports\";\r\n MenuHelper.HOME_ADMINISTRATION_INDEX_KEY = \"home_administration\";\r\n MenuHelper.HOME_ADMINISTRATION_MENU_KEY = \"home_administration_menu\";\r\n MenuHelper.HOME_ADMINISTRATION_REPORTS_KEY = \"home_administration_reports\";\r\n MenuHelper.HOME_ATTENDEE_MANAGER_MENU_KEY = \"home_attendeeManager_menu\";\r\n MenuHelper.HOME_ATTENDEE_MANAGER_PARTICIPANTS_KEY = \"home_attendeeManager_participants\";\r\n MenuHelper.HOME_ATTENDEE_MANAGER_COURSES_KEY = \"home_attendeeManager_courses\";\r\n MenuHelper.HOME_ATTENDEE_MANAGER_LEARNING_PATHS_KEY = \"home_attendeeManager_learningPaths\";\r\n MenuHelper.HOME_ATTENDEE_MANAGER_REPORTS_KEY = \"home_attendeeManager_reports\";\r\n MenuHelper.HOME_ATTENDEE_MANAGER_USERS_KEY = \"home_attendeeManager_users\";\r\n MenuHelper.HOME_INSTRUCTOR_MENU_KEY = \"home_instructor_menu\";\r\n MenuHelper.HOME_INSTRUCTOR_PARTICIPANTS_KEY = \"home_instructor_participants\";\r\n MenuHelper.HOME_INSTRUCTOR_COURSES_KEY = \"home_instructor_courses\";\r\n MenuHelper.HOME_INSTRUCTOR_LEARNING_PATHS_KEY = \"home_instructor_learningPaths\";\r\n MenuHelper.HOME_INSTRUCTOR_ASSESSMENTS_KEY = \"home_instructor_assessments\";\r\n MenuHelper.HOME_INSTRUCTOR_REPORTS_KEY = \"home_instructor_reports\";\r\n MenuHelper.HOME_AUTHOR_MENU_KEY = \"home_author_menu\";\r\n MenuHelper.HOME_AUTHOR_COURSES_KEY = \"home_author_courses\";\r\n MenuHelper.HOME_AUTHOR_LEARNING_PATH_KEY = \"home_author_learningPaths\";\r\n MenuHelper.HOME_AUTHOR_QUIZZES_KEY = \"home_author_quizzes\";\r\n MenuHelper.HOME_AUTHOR_SURVEYS_KEY = \"home_author_surveys\";\r\n MenuHelper.HOME_AUTHOR_FLASHCARDS_KEY = \"home_author_flashcards\";\r\n MenuHelper.HOME_AUTHOR_MATERIALS_KEY = \"home_author_materials\";\r\n MenuHelper.HOME_AUTHOR_REPORTS_KEY = \"home_author_reports\";\r\n MenuHelper.BUSINESS_UNIT_GENERAL_KEY = \"businessUnit_general\";\r\n MenuHelper.BUSINESS_UNIT_BRANDING_KEY = \"businessUnit_branding\";\r\n MenuHelper.BUSINESS_UNIT_MENU_ITEMS_KEY = \"businessUnit_menuItems\";\r\n MenuHelper.BUSINESS_UNIT_SUBSCRIPTION_KEY = \"businessUnit_subscription\";\r\n MenuHelper.currentMenuItemKey = \"\";\r\n MenuHelper.updateMenuListeners = [];\r\n return MenuHelper;\r\n})();\r\nexports.MenuHelper = MenuHelper;\r\n},{}],518:[function(require,module,exports){\nvar Moment = (function () {\r\n function Moment() {\r\n }\r\n Moment.parse = function (text) {\r\n return moment(text, Moment.DEFAULT_FORMAT);\r\n };\r\n Moment.textToJavaDate = function (text, format) {\r\n if (text == null || text == \"\") {\r\n return null;\r\n }\r\n format = format || Moment.DEFAULT_FORMAT;\r\n return moment(text, format).unix() * 1000;\r\n };\r\n Moment.isValidDate = function (date) {\r\n if (date == null) {\r\n return null;\r\n }\r\n return moment(date).format(Moment.DEFAULT_FORMAT);\r\n };\r\n Moment.isAfter = function (firstDate, secondDate, minIntervalInSeconds) {\r\n if (!firstDate || !secondDate) {\r\n return false;\r\n }\r\n if (!minIntervalInSeconds) {\r\n minIntervalInSeconds = 0;\r\n }\r\n return moment.utc(firstDate).subtract(minIntervalInSeconds, \"s\").isAfter(moment.utc(secondDate));\r\n };\r\n Moment.DEFAULT_FORMAT = \"M/D/YYYY\";\r\n return Moment;\r\n})();\r\nexports.Moment = Moment;\r\n},{}],519:[function(require,module,exports){\nvar ObjectFieldResolver = (function () {\r\n function ObjectFieldResolver() {\r\n }\r\n ObjectFieldResolver.findForPath = function (target, path) {\r\n var obj = target;\r\n var paths = path.split(\".\");\r\n for (var i = 0; i < paths.length; i++) {\r\n var path = paths[i];\r\n obj = obj[path];\r\n }\r\n return obj;\r\n };\r\n return ObjectFieldResolver;\r\n})();\r\nexports.ObjectFieldResolver = ObjectFieldResolver;\r\n},{}],520:[function(require,module,exports){\nvar MaterialType_1 = require(\"./../materials/models/MaterialType\");\r\nvar MaterialType_2 = require(\"./../materials/models/MaterialType\");\r\nvar ReferencedObjectType_1 = require(\"./../ReferencedObjectType\");\r\nvar ObjectTypeUtils = (function () {\r\n function ObjectTypeUtils() {\r\n }\r\n ObjectTypeUtils.getMaterialTypeTitle = function (typeId) {\r\n switch (typeId) {\r\n case MaterialType_1.MaterialType.AUDIO: return 'Audio';\r\n case MaterialType_1.MaterialType.VIDEO: return 'Video';\r\n case MaterialType_1.MaterialType.LINK: return 'Link';\r\n case MaterialType_1.MaterialType.PHOTO: return 'Image';\r\n case MaterialType_1.MaterialType.DOCUMENTS: return 'Other documents';\r\n }\r\n };\r\n ObjectTypeUtils.getMaterialGlyphiconClass = function (typeId) {\r\n switch (typeId) {\r\n case MaterialType_1.MaterialType.AUDIO: return \"glyphicon glyphicon-headphones\";\r\n case MaterialType_1.MaterialType.VIDEO: return \"glyphicon glyphicon-play\";\r\n case MaterialType_1.MaterialType.LINK: return \"glyphicon glyphicon-link\";\r\n case MaterialType_1.MaterialType.PHOTO: return \"glyphicon glyphicon-picture\";\r\n case MaterialType_1.MaterialType.DOCUMENTS: return \"glyphicon glyphicon-file\";\r\n }\r\n };\r\n ObjectTypeUtils.getMaterialGlyphiconClassFromKey = function (typeKey) {\r\n switch (typeKey) {\r\n case MaterialType_2.MaterialTypeKeyEnum[MaterialType_2.MaterialTypeKeyEnum.AUDIO]: return \"glyphicon glyphicon-headphones\";\r\n case MaterialType_2.MaterialTypeKeyEnum[MaterialType_2.MaterialTypeKeyEnum.VIDEO]: return \"glyphicon glyphicon-play\";\r\n case MaterialType_2.MaterialTypeKeyEnum[MaterialType_2.MaterialTypeKeyEnum.LINK]: return \"glyphicon glyphicon-link\";\r\n case MaterialType_2.MaterialTypeKeyEnum[MaterialType_2.MaterialTypeKeyEnum.PHOTO]: return \"glyphicon glyphicon-picture\";\r\n case MaterialType_2.MaterialTypeKeyEnum[MaterialType_2.MaterialTypeKeyEnum.DOCUMENTS]: return \"glyphicon glyphicon-file\";\r\n }\r\n };\r\n ObjectTypeUtils.getNewsGlyphiconClass = function () {\r\n return \"glyphicon glyphicon-info-sign\";\r\n };\r\n ObjectTypeUtils.getReferenceObjectTypeTitle = function (objectType) {\r\n switch (objectType) {\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]: return 'Material';\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]: return 'Course';\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.PLAYLIST]: return 'Playlist';\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.NEWS]: return 'News';\r\n }\r\n };\r\n ObjectTypeUtils.getReferenceObjectTypeFromString = function (objectType) {\r\n switch (objectType) {\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL]: return ReferencedObjectType_1.ReferencedObjectType.MATERIAL;\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]: return ReferencedObjectType_1.ReferencedObjectType.COURSE;\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.PLAYLIST]: return ReferencedObjectType_1.ReferencedObjectType.PLAYLIST;\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.NEWS]: return ReferencedObjectType_1.ReferencedObjectType.NEWS;\r\n }\r\n };\r\n ObjectTypeUtils.getContentTypeTitle = function (contentTypeKey) {\r\n switch (contentTypeKey) {\r\n case MaterialType_2.MaterialTypeKeyEnum[MaterialType_2.MaterialTypeKeyEnum.AUDIO]: return 'Audio';\r\n case MaterialType_2.MaterialTypeKeyEnum[MaterialType_2.MaterialTypeKeyEnum.VIDEO]: return 'Video';\r\n case MaterialType_2.MaterialTypeKeyEnum[MaterialType_2.MaterialTypeKeyEnum.LINK]: return 'Link';\r\n case MaterialType_2.MaterialTypeKeyEnum[MaterialType_2.MaterialTypeKeyEnum.PHOTO]: return 'Image';\r\n case MaterialType_2.MaterialTypeKeyEnum[MaterialType_2.MaterialTypeKeyEnum.DOCUMENTS]: return 'Other documents';\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.PLAYLIST]: return 'Playlist';\r\n case ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE]: return 'Course';\r\n }\r\n };\r\n ObjectTypeUtils.isMaterialObject = function (objectType) {\r\n return objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.MATERIAL];\r\n };\r\n ObjectTypeUtils.isPlaylistObject = function (objectType) {\r\n return objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.PLAYLIST];\r\n };\r\n ObjectTypeUtils.isCourseObject = function (objectType) {\r\n return objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.COURSE];\r\n };\r\n ObjectTypeUtils.isNewObject = function (objectType) {\r\n return objectType == ReferencedObjectType_1.ReferencedObjectType[ReferencedObjectType_1.ReferencedObjectType.NEWS];\r\n };\r\n ObjectTypeUtils.getReferencedObjectTypeAsString = function (value) {\r\n if (value in ReferencedObjectType_1.ReferencedObjectType) {\r\n return (typeof value === 'string') ? value :\r\n (typeof value === 'number') ? ReferencedObjectType_1.ReferencedObjectType[value] : undefined;\r\n }\r\n else {\r\n return undefined;\r\n }\r\n };\r\n ObjectTypeUtils.getReferencedObjectTypeAsNumber = function (value) {\r\n if (value in ReferencedObjectType_1.ReferencedObjectType) {\r\n return (typeof value === 'number') ? value :\r\n (typeof value === 'string') ? ReferencedObjectType_1.ReferencedObjectType[value] : undefined;\r\n }\r\n else {\r\n return undefined;\r\n }\r\n };\r\n ObjectTypeUtils.isYoutubeUrl = function (url) {\r\n return url && (url.indexOf(\"https://www.youtube.com\") == 0 ||\r\n url.indexOf(\"http://www.youtube.com\") == 0 ||\r\n url.indexOf(\"https://youtu.be\") == 0 ||\r\n url.indexOf(\"http://youtu.be\") == 0);\r\n };\r\n ObjectTypeUtils.isAwsUrl = function (url) {\r\n return url && url.indexOf(\"https://s3.amazonaws.com/\") == 0 && url.indexOf(\".mp4\") >= 0;\r\n };\r\n ObjectTypeUtils.isVimeoUrl = function (url) {\r\n return url && url.indexOf(\"https://vimeo.com/\") == 0;\r\n };\r\n ObjectTypeUtils.extractVimeoUrl = function (url) {\r\n var re = /vimeo.*\\/(\\d+)/i;\r\n var match = url.match(re);\r\n return (match && match[1]) || null;\r\n };\r\n return ObjectTypeUtils;\r\n})();\r\nexports.ObjectTypeUtils = ObjectTypeUtils;\r\n},{\"./../ReferencedObjectType\":7,\"./../materials/models/MaterialType\":347}],521:[function(require,module,exports){\nvar PageHeader = (function () {\r\n function PageHeader() {\r\n this.actions = [];\r\n this.preserveStatusPanel = false;\r\n this.preserveActionsPanel = false;\r\n this.preservePageName = false;\r\n }\r\n PageHeader.set = function () {\r\n return new PageHeader();\r\n };\r\n PageHeader.prototype.header = function (pageName) {\r\n this.pageName = pageName;\r\n this.preservePageName = false;\r\n return this;\r\n };\r\n PageHeader.prototype.preserveHeader = function () {\r\n this.preservePageName = true;\r\n return this;\r\n };\r\n PageHeader.prototype.addActionLink = function (name, link, isDisabled) {\r\n var a = PageHeader.format(PageHeader.LINK_TEMPLATE, [link, isDisabled ? 'disabled' : '', name]);\r\n this.actions.push(a);\r\n this.preserveActionsPanel = false;\r\n return this;\r\n };\r\n PageHeader.prototype.addActionLinkIf = function (condition, name, link, isDisabled) {\r\n if (condition) {\r\n return this.addActionLink(name, link, isDisabled);\r\n }\r\n return this;\r\n };\r\n PageHeader.prototype.addParentLink = function (name, link) {\r\n this.parentLink = link;\r\n this.parentName = name;\r\n return this;\r\n };\r\n PageHeader.prototype.preserveLinks = function () {\r\n this.preserveActionsPanel = true;\r\n return this;\r\n };\r\n PageHeader.prototype.update = function () {\r\n PageHeaderHelper.updateHeader(this);\r\n };\r\n PageHeader.format = function (str, args) {\r\n var newStr = str;\r\n var i = 0;\r\n while (/%s/.test(newStr)) {\r\n newStr = newStr.replace(\"%s\", args[i++]);\r\n }\r\n return newStr;\r\n };\r\n PageHeader.STATUS_TEMPLATE = '%s %s ';\r\n PageHeader.STATUS_WITH_TOOLTIP_TEMPLATE = '%s %s ';\r\n PageHeader.LINK_TEMPLATE = '%s';\r\n return PageHeader;\r\n})();\r\nexports.PageHeader = PageHeader;\r\nvar PageHeaderHelper = (function () {\r\n function PageHeaderHelper() {\r\n }\r\n PageHeaderHelper.updateHeader = function (headerInfo) {\r\n for (var i = 0; i < this.pageHeaderListeners.length; i++) {\r\n this.pageHeaderListeners[i].onHeaderUpdate(headerInfo);\r\n }\r\n };\r\n PageHeaderHelper.addPageHeaderUpdateListener = function (listener) {\r\n if (this.pageHeaderListeners.indexOf(listener) == -1) {\r\n this.pageHeaderListeners.push(listener);\r\n }\r\n };\r\n PageHeaderHelper.removePageHeaderUpdateListener = function (listener) {\r\n var index = this.pageHeaderListeners.indexOf(listener);\r\n if (index > -1) {\r\n this.pageHeaderListeners.splice(index, 1);\r\n }\r\n };\r\n PageHeaderHelper.pageHeaderListeners = [];\r\n return PageHeaderHelper;\r\n})();\r\nexports.PageHeaderHelper = PageHeaderHelper;\r\n},{}],522:[function(require,module,exports){\nvar PredefinedLanguagesUtils = (function () {\r\n function PredefinedLanguagesUtils() {\r\n }\r\n PredefinedLanguagesUtils.determineRelatedLanguageId = function (locale) {\r\n if (locale == \"ru_RU\") {\r\n return PredefinedLanguagesUtils.DEFAULT_LANGUAGE_ID;\r\n }\r\n else if (locale == \"en_US\") {\r\n return PredefinedLanguagesUtils.ENGLISH_LANGUAGE_ID;\r\n }\r\n else if (locale == \"fr_FR\") {\r\n return PredefinedLanguagesUtils.FRENCH_LANGUAGE_ID;\r\n }\r\n else if (locale == \"es_ES\") {\r\n return PredefinedLanguagesUtils.SPANISH_LANGUAGE_ID;\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n PredefinedLanguagesUtils.DEFAULT_LANGUAGE_ID = 1;\r\n PredefinedLanguagesUtils.ENGLISH_LANGUAGE_ID = 2;\r\n PredefinedLanguagesUtils.SPANISH_LANGUAGE_ID = 3;\r\n PredefinedLanguagesUtils.FRENCH_LANGUAGE_ID = 4;\r\n return PredefinedLanguagesUtils;\r\n})();\r\nexports.PredefinedLanguagesUtils = PredefinedLanguagesUtils;\r\n},{}],523:[function(require,module,exports){\nvar RandomUtils = (function () {\r\n function RandomUtils() {\r\n }\r\n RandomUtils.generateRandomId = function (prefix) {\r\n return \"\" + (prefix ? prefix : '') + String.fromCharCode(65 + Math.floor(Math.random() * 26)) + Date.now();\r\n };\r\n return RandomUtils;\r\n})();\r\nexports.RandomUtils = RandomUtils;\r\n},{}],524:[function(require,module,exports){\nvar ResizeViewService = (function () {\r\n function ResizeViewService(viewType) {\r\n this.viewType = viewType;\r\n this.oldViewType = viewType;\r\n }\r\n ResizeViewService.prototype.setResizeViewType = function (viewType) {\r\n if (window.innerWidth < 992) {\r\n if (!viewType) {\r\n this.oldViewType = 0;\r\n }\r\n this.viewType = 1;\r\n }\r\n if (window.innerWidth >= 992) {\r\n if (!viewType && !this.oldViewType) {\r\n this.viewType = 0;\r\n this.oldViewType = 0;\r\n }\r\n else {\r\n this.viewType = this.oldViewType;\r\n }\r\n }\r\n return this.viewType;\r\n };\r\n return ResizeViewService;\r\n})();\r\nexports.ResizeViewService = ResizeViewService;\r\n},{}],525:[function(require,module,exports){\nvar StringBuilder = (function () {\r\n function StringBuilder(base) {\r\n this.base = base;\r\n }\r\n StringBuilder.interpolate = function (base) {\r\n return new StringBuilder(base);\r\n };\r\n StringBuilder.prototype.with = function (param, value) {\r\n this.base = this.base.replace(param, value);\r\n return this;\r\n };\r\n StringBuilder.prototype.add = function () {\r\n var _this = this;\r\n var strings = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n strings[_i - 0] = arguments[_i];\r\n }\r\n strings.forEach(function (str) { return _this.base = _this.base.concat(str); });\r\n return this;\r\n };\r\n StringBuilder.prototype.addIf = function (condition) {\r\n var _this = this;\r\n var strings = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n strings[_i - 1] = arguments[_i];\r\n }\r\n if (condition) {\r\n strings.forEach(function (str) { return _this.base = _this.base.concat(str); });\r\n }\r\n return this;\r\n };\r\n StringBuilder.prototype.build = function () {\r\n return this.base;\r\n };\r\n return StringBuilder;\r\n})();\r\nexports.StringBuilder = StringBuilder;\r\n},{}],526:[function(require,module,exports){\nvar TimeoutUtils = (function () {\r\n function TimeoutUtils() {\r\n this.semaphores = {};\r\n }\r\n TimeoutUtils.prototype.checkNew = function (uid, handler) {\r\n var semaphore = this.getByUid(uid);\r\n if (undefined == semaphore) {\r\n this.setByUid(uid, {\r\n handler: handler,\r\n hash: null,\r\n active: false\r\n });\r\n }\r\n };\r\n TimeoutUtils.prototype.getByUid = function (uid) {\r\n return this.semaphores[uid];\r\n };\r\n TimeoutUtils.prototype.setByUid = function (uid, semaphore) {\r\n this.semaphores[uid] = semaphore;\r\n };\r\n TimeoutUtils.prototype.processWithDelay = function (uid, handler, delay) {\r\n this.checkNew(uid, handler);\r\n var hash = new Date().getTime();\r\n this.setByUid(uid, {\r\n handler: handler,\r\n hash: hash,\r\n active: true\r\n });\r\n this.executeWithTimeout(handler, delay, uid, hash);\r\n };\r\n TimeoutUtils.prototype.executeWithTimeout = function (handler, timeout, uid, hash) {\r\n var $self = this;\r\n var timer = setTimeout(function () {\r\n if ($self.getByUid(uid).hash === hash) {\r\n handler();\r\n }\r\n }, timeout);\r\n };\r\n return TimeoutUtils;\r\n})();\r\nexports.TimeoutUtils = TimeoutUtils;\r\n},{}],527:[function(require,module,exports){\nvar UrlService_1 = require(\"./../utils/UrlService\");\r\nvar UploadsService_1 = require(\"./../storage/UploadsService\");\r\nvar StringBuilder_1 = require(\"./../utils/StringBuilder\");\r\nvar INotifier_1 = require(\"./../INotifier\");\r\nvar UploadUtils = (function () {\r\n function UploadUtils($http, url, uploadsService) {\r\n this.$http = $http;\r\n this.url = url;\r\n this.uploadsService = uploadsService;\r\n }\r\n UploadUtils.prototype.uploadLearningPathByChunks = function (file, fileId, learningPathId, url, method) {\r\n var _this = this;\r\n var successFunc = function (file) {\r\n var successUrl = _this.url.base(\"/api/learningPaths/upload/completed?fileId=:fileId&learningPathId=:learningPathId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":learningPathId\", learningPathId)\r\n .service();\r\n _this.$http.post(successUrl, null).then(function () {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"The file (:fileName) has been successfully uploaded\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n });\r\n };\r\n var abortFunc = function (file) {\r\n var abortUrl = _this.url.base(\"/api/learningPaths/upload/not/completed?fileId=:fileId&learningPathId=:learningPathId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":learningPathId\", learningPathId)\r\n .service();\r\n _this.$http.post(abortUrl, null).then(function () {\r\n INotifier_1.notifier.error(StringBuilder_1.StringBuilder.interpolate(\"Uploading of the file (:fileName) has been canceled\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n });\r\n };\r\n var errorFunc = function (file) {\r\n var errorUrl = _this.url.base(\"/api/learningPaths/upload/not/completed?fileId=:fileId&learningPathId=:learningPathId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":learningPathId\", learningPathId)\r\n .service();\r\n _this.$http.post(errorUrl, null).then(function () {\r\n INotifier_1.notifier.error(StringBuilder_1.StringBuilder.interpolate(\"Uploading of the file (:fileName) has failed\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n });\r\n };\r\n this.uploadsService.upload(file, UploadUtils.LEARNING_PATH_PREVIEW_KEY + learningPathId, url, method, successFunc, abortFunc, errorFunc);\r\n };\r\n UploadUtils.prototype.uploadMaterialByChunks = function (file, fileId, materialId, url, method, title) {\r\n var _this = this;\r\n var successFunc = function (file) {\r\n var successUrl = _this.url.base(\"/api/materials/upload/completed?fileId=:fileId&materialId=:materialId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":materialId\", materialId)\r\n .service();\r\n _this.$http.post(successUrl, null).then(function () {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"The file (:fileName) has been successfully uploaded\")\r\n .with(\":fileName\", title)\r\n .build());\r\n });\r\n };\r\n var abortFunc = function (file) {\r\n var abortUrl = _this.url.base(\"/api/materials/upload/not/completed?fileId=:fileId&materialId=:materialId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":materialId\", materialId)\r\n .service();\r\n _this.$http.post(abortUrl, null).then(function () {\r\n INotifier_1.notifier.error(StringBuilder_1.StringBuilder.interpolate(\"Uploading of the file (:fileName) has been canceled\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n });\r\n };\r\n var errorFunc = function (file) {\r\n var errorUrl = _this.url.base(\"/api/materials/upload/not/completed?fileId=:fileId&materialId=:materialId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":materialId\", materialId)\r\n .service();\r\n _this.$http.post(errorUrl, null).then(function () {\r\n INotifier_1.notifier.error(StringBuilder_1.StringBuilder.interpolate(\"Uploading of the file (:fileName) has failed\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n });\r\n };\r\n this.uploadsService.upload(file, UploadUtils.MATERIAL_PREVIEW_KEY + materialId, url, method, successFunc, abortFunc, errorFunc);\r\n };\r\n UploadUtils.prototype.uploadCourseByChunks = function (file, fileId, courseId, url, method) {\r\n var _this = this;\r\n var successFunc = function (file) {\r\n var successUrl = _this.url.base(\"/api/courses/upload/completed?fileId=:fileId&courseId=:courseId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":courseId\", courseId)\r\n .service();\r\n _this.$http.post(successUrl, null).then(function () {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"The file (:fileName) has been successfully uploaded\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n });\r\n };\r\n var abortFunc = function (file) {\r\n var abortUrl = _this.url.base(\"/api/courses/upload/not/completed?fileId=:fileId&courseId=:courseId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":courseId\", courseId)\r\n .service();\r\n _this.$http.post(abortUrl, null).then(function () {\r\n INotifier_1.notifier.error(StringBuilder_1.StringBuilder.interpolate(\"Uploading of the file (:fileName) has been canceled\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n });\r\n };\r\n var errorFunc = function (file) {\r\n var errorUrl = _this.url.base(\"/api/courses/upload/not/completed?fileId=:fileId&courseId=:courseId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":courseId\", courseId)\r\n .service();\r\n _this.$http.post(errorUrl, null).then(function () {\r\n INotifier_1.notifier.error(StringBuilder_1.StringBuilder.interpolate(\"Uploading of the file (:fileName) has failed\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n });\r\n };\r\n this.uploadsService.upload(file, UploadUtils.COURSE_PREVIEW_KEY + courseId, url, method, successFunc, abortFunc, errorFunc);\r\n };\r\n UploadUtils.prototype.uploadBundleByChunks = function (file, fileId, bundleId, url, method, callbackFunc) {\r\n var _this = this;\r\n var successFunc = function (file) {\r\n var successUrl = _this.url.base(\"/api/bundles/upload/completed?fileId=:fileId&bundleId=:bundleId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":bundleId\", bundleId)\r\n .service();\r\n _this.$http.post(successUrl, null)\r\n .then(function () {\r\n if (!callbackFunc) {\r\n INotifier_1.notifier.success(StringBuilder_1.StringBuilder.interpolate(\"The file (:fileName) has been successfully uploaded\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n }\r\n else {\r\n callbackFunc(\"SUCCESS\");\r\n }\r\n })\r\n .catch(function () {\r\n if (callbackFunc) {\r\n callbackFunc(\"ERROR_ON_POST\");\r\n }\r\n });\r\n };\r\n var abortFunc = function (file) {\r\n var abortUrl = _this.url.base(\"/api/bundles/upload/not/completed?fileId=:fileId&bundleId=:bundleId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":bundleId\", bundleId)\r\n .service();\r\n _this.$http.post(abortUrl, null)\r\n .then(function () {\r\n if (!callbackFunc) {\r\n INotifier_1.notifier.error(StringBuilder_1.StringBuilder.interpolate(\"Uploading of the file (:fileName) has been canceled\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n }\r\n else {\r\n callbackFunc(\"ABORT\");\r\n }\r\n })\r\n .catch(function () {\r\n if (callbackFunc) {\r\n callbackFunc(\"ERROR_ON_POST\");\r\n }\r\n });\r\n };\r\n var errorFunc = function (file) {\r\n var errorUrl = _this.url.base(\"/api/bundles/upload/not/completed?fileId=:fileId&bundleId=:bundleId\")\r\n .param(\":fileId\", fileId)\r\n .param(\":bundleId\", bundleId)\r\n .service();\r\n _this.$http.post(errorUrl, null)\r\n .then(function () {\r\n if (!callbackFunc) {\r\n INotifier_1.notifier.error(StringBuilder_1.StringBuilder.interpolate(\"Uploading of the file (:fileName) has failed\")\r\n .with(\":fileName\", file.name)\r\n .build());\r\n }\r\n else {\r\n callbackFunc(\"ERROR\");\r\n }\r\n })\r\n .catch(function () {\r\n if (callbackFunc) {\r\n callbackFunc(\"ERROR_ON_POST\");\r\n }\r\n });\r\n };\r\n this.uploadsService.upload(file, UploadUtils.BUNDLE_KEY + bundleId + UploadUtils.FILE_KEY + fileId, url, method, successFunc, abortFunc, errorFunc);\r\n };\r\n UploadUtils.prototype.cancelMaterialPreviews = function (materialId) {\r\n this.uploadsService.cancelByKey(UploadUtils.MATERIAL_PREVIEW_KEY + materialId);\r\n };\r\n UploadUtils.prototype.cancelMaterialSubtitles = function (materialId) {\r\n this.uploadsService.cancelByKey(UploadUtils.MATERIAL_SUBTITLES_KEY + materialId);\r\n };\r\n UploadUtils.prototype.cancelMaterialFiles = function (materialId) {\r\n this.uploadsService.cancelByKey(UploadUtils.MATERIAL_FILE_KEY + materialId);\r\n };\r\n UploadUtils.prototype.cancelLearningPathPreviews = function (learningPathId) {\r\n this.uploadsService.cancelByKey(UploadUtils.LEARNING_PATH_PREVIEW_KEY + learningPathId);\r\n };\r\n UploadUtils.prototype.cancelCoursePreviews = function (courseId) {\r\n this.uploadsService.cancelByKey(UploadUtils.COURSE_PREVIEW_KEY + courseId);\r\n };\r\n UploadUtils.NAME = \"utils.UploadUtils\";\r\n UploadUtils.LEARNING_PATH_PREVIEW_KEY = \"learning_path_preview_\";\r\n UploadUtils.MATERIAL_PREVIEW_KEY = \"material_preview_\";\r\n UploadUtils.MATERIAL_SUBTITLES_KEY = \"material_subtitles\";\r\n UploadUtils.MATERIAL_FILE_KEY = \"material_file_\";\r\n UploadUtils.COURSE_PREVIEW_KEY = \"course_preview_\";\r\n UploadUtils.BUNDLE_KEY = \"bundle_\";\r\n UploadUtils.FILE_KEY = \"_file_\";\r\n UploadUtils.$inject = [\r\n \"$http\",\r\n UrlService_1.UrlService.NAME,\r\n UploadsService_1.UploadsService.NAME\r\n ];\r\n return UploadUtils;\r\n})();\r\nexports.UploadUtils = UploadUtils;\r\n},{\"./../INotifier\":5,\"./../storage/UploadsService\":458,\"./../utils/StringBuilder\":525,\"./../utils/UrlService\":528}],528:[function(require,module,exports){\nvar UrlService = (function () {\r\n function UrlService(serviceRoot, appVersion, defaultLocale) {\r\n this.serviceRoot = \"/\";\r\n this.appVersion = \"/\";\r\n this.defaultLocale = \"en_US\";\r\n this.id = new Date();\r\n this.serviceRoot = serviceRoot[serviceRoot.length - 1] != \"/\"\r\n ? serviceRoot + \"/\"\r\n : serviceRoot;\r\n this.appVersion = appVersion;\r\n this.defaultLocale = defaultLocale;\r\n }\r\n UrlService.prototype.service = function (baseUrl) {\r\n return serviceUrl(baseUrl, this.serviceRoot, false);\r\n };\r\n UrlService.prototype.template = function (baseUrl) {\r\n return templateUrl(baseUrl, this.appVersion, this.defaultLocale);\r\n };\r\n UrlService.prototype.base = function (baseUrl) {\r\n return new UrlBuilder(baseUrl, this.serviceRoot, this.appVersion, this.defaultLocale);\r\n };\r\n UrlService.prototype.staticResourceUrl = function (baseUrl) {\r\n return staticResourceUrl(baseUrl, this.appVersion);\r\n };\r\n UrlService.NAME = \"urls.UrlService\";\r\n return UrlService;\r\n})();\r\nexports.UrlService = UrlService;\r\nvar UrlBuilder = (function () {\r\n function UrlBuilder(base, serviceRoot, appVersion, defaultLocale) {\r\n this.cache = false;\r\n this.base = base;\r\n this.appVersion = appVersion;\r\n this.serviceRoot = serviceRoot;\r\n this.defaultLocale = defaultLocale;\r\n }\r\n UrlBuilder.prototype.param = function (param, replacement) {\r\n this.base = this.base.replace(param, replacement);\r\n return this;\r\n };\r\n UrlBuilder.prototype.cacheable = function () {\r\n this.cache = true;\r\n return this;\r\n };\r\n UrlBuilder.prototype.template = function () {\r\n return templateUrl(this.base, this.appVersion, this.defaultLocale);\r\n };\r\n UrlBuilder.prototype.service = function () {\r\n return serviceUrl(this.base, this.serviceRoot, this.cache);\r\n };\r\n return UrlBuilder;\r\n})();\r\nexports.VIEWS_URL_PREFIX = \"views/\";\r\nfunction appendQueryParam(url, param, value) {\r\n return url.indexOf(\"?\") != -1\r\n ? url + \"&\" + param + \"=\" + value\r\n : url + \"?\" + param + \"=\" + value;\r\n}\r\nfunction templateUrl(base, version, defaultLocale) {\r\n var path = base.replace(\".html\", \"-\" + defaultLocale + \".html\");\r\n return exports.VIEWS_URL_PREFIX + appendQueryParam(path, \"v\", version);\r\n}\r\nfunction staticResourceUrl(base, version) {\r\n var path = base;\r\n return appendQueryParam(path, \"v\", version);\r\n}\r\nfunction serviceUrl(base, serviceRoot, cache) {\r\n if (!cache) {\r\n base = appendQueryParam(base, \"no-cache\", new Date().getTime().toString());\r\n }\r\n return serviceRoot + (base[0] === \"/\" ? base.substring(1) : base);\r\n}\r\n},{}],529:[function(require,module,exports){\nvar UploadUtils_1 = require(\"./UploadUtils\");\r\nvar MenuConfiguratorService_1 = require(\"./MenuConfiguratorService\");\r\nexports.UtilsModule = angular\r\n .module(\"utils\", [])\r\n .service(UploadUtils_1.UploadUtils.NAME, UploadUtils_1.UploadUtils)\r\n .service(MenuConfiguratorService_1.MenuConfiguratorService.NAME, MenuConfiguratorService_1.MenuConfiguratorService);\r\n},{\"./MenuConfiguratorService\":516,\"./UploadUtils\":527}],530:[function(require,module,exports){\n(function (TimeZoneType) {\r\n TimeZoneType[TimeZoneType[\"PACIFIC_DAYLIGHT_TIME\"] = 0] = \"PACIFIC_DAYLIGHT_TIME\";\r\n TimeZoneType[TimeZoneType[\"MOUNTAIN_DAYLIGHT_TIME\"] = 1] = \"MOUNTAIN_DAYLIGHT_TIME\";\r\n TimeZoneType[TimeZoneType[\"CENTRAL_DAYLIGHT_TIME\"] = 2] = \"CENTRAL_DAYLIGHT_TIME\";\r\n TimeZoneType[TimeZoneType[\"EASTERN_DAYLIGHT_TIME\"] = 3] = \"EASTERN_DAYLIGHT_TIME\";\r\n})(exports.TimeZoneType || (exports.TimeZoneType = {}));\r\nvar TimeZoneType = exports.TimeZoneType;\r\nexports.TimeZone = [\r\n {\r\n name: \"PACIFIC_DAYLIGHT_TIME\",\r\n value: \"America/Los_Angeles\",\r\n abbreviation: \"Pacific Time (US and Canada)\",\r\n offset: -7\r\n },\r\n {\r\n name: \"MOUNTAIN_DAYLIGHT_TIME\",\r\n value: \"America/Denver\",\r\n abbreviation: \"Mountain Time (US and Canada)\",\r\n offset: -6\r\n },\r\n {\r\n name: \"CENTRAL_DAYLIGHT_TIME\",\r\n value: \"America/Chicago\",\r\n abbreviation: \"Central Time (US and Canada)\",\r\n offset: -5\r\n },\r\n {\r\n name: \"EASTERN_DAYLIGHT_TIME\",\r\n value: \"America/New_York\",\r\n abbreviation: \"Eastern Time (US and Canada)\",\r\n offset: -4\r\n }\r\n];\r\nexports.getLocalDefaultTimezone = function () {\r\n var today = new Date();\r\n var currentTimeZoneOffset = -(today.getTimezoneOffset() / 60);\r\n var jan = new Date(today.getFullYear(), 0, 1);\r\n var jul = new Date(today.getFullYear(), 6, 1);\r\n var maxDate = Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());\r\n var isSummerTime = today.getTimezoneOffset() < maxDate;\r\n var minTimeOffsetDifference = Number.MAX_VALUE;\r\n var defaultTimeZone = 0;\r\n exports.TimeZone.forEach(function (timeZone, index) {\r\n var timezoneOffset = timeZone.offset;\r\n if (!isSummerTime) {\r\n timezoneOffset -= 1;\r\n }\r\n if (Math.abs((currentTimeZoneOffset - timezoneOffset)) < minTimeOffsetDifference) {\r\n minTimeOffsetDifference = Math.abs((currentTimeZoneOffset - timezoneOffset));\r\n defaultTimeZone = index;\r\n }\r\n });\r\n return TimeZoneType[defaultTimeZone];\r\n};\r\n},{}]},{},[12])\n//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJ1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXRpbHNcXEFwcFByb3BlcnRpZXMudHMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnR0LXRvLWpzb24vaW5kZXguanMiLCJzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxFbWJlZGRlZFJlcG9ydFR5cGVLZXkudHMiLCJzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxJR3JpZE1vZGVsLnRzIiwic3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcSUh0dHBHcmlkU2VydmljZS50cyIsInNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXElOb3RpZmllci50cyIsInNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXFBhZ2VNb2RlLnRzIiwic3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcUmVmZXJlbmNlZE9iamVjdFR5cGUudHMiLCJzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxTb3J0RW50cnkudHMiLCJhY2Nlc3NpYmlsaXR5XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxhY2Nlc3NpYmlsaXR5XFxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci50cyIsImFpXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxhaVxcQUlNb2R1bGUudHMiLCJhaVxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYWlcXEFJU2VydmljZS50cyIsInNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGFwcC50cyIsImFzc2Vzc21lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxhc3Nlc3NtZW50c1xcQXNzZXNzbWVudHNDb250cm9sbGVyLnRzIiwiYXNzZXNzbWVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGFzc2Vzc21lbnRzXFxBc3Nlc3NtZW50c0RldGFpbHNDb250cm9sbGVyLnRzIiwiYXNzZXNzbWVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGFzc2Vzc21lbnRzXFxBc3Nlc3NtZW50c1NlcnZpY2UudHMiLCJhc3Nlc3NtZW50c1xcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxhc3Nlc3NtZW50c1xcbW9kZWxzXFxBc3Nlc3NtZW50U3RhdHVzLnRzIiwiYXV0aFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYXV0aFxcQXV0aE1vZHVsZS50cyIsImF1dGhcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGF1dGhcXEF1dGhTZXJ2aWNlLnRzIiwiYXV0aFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYXV0aFxcQ2hlY2tWYWxpZENvZGVDb250cm9sbGVyLnRzIiwiYXV0aFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYXV0aFxcQ3JlYXRlTmV3UGFzc3dvcmRDb250cm9sbGVyLnRzIiwiYXV0aFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYXV0aFxcTG9nT25Db250cm9sbGVyLnRzIiwiYXV0aFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYXV0aFxcTG9nT3V0Q29udHJvbGxlci50cyIsImF1dGhcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGF1dGhcXFJlc3RvcmVQYXNzd29yZENvbnRyb2xsZXIudHMiLCJhdXRoY29yZVxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYXV0aGNvcmVcXEF1dGhDb3JlTW9kdWxlLnRzIiwiYXV0aGNvcmVcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGF1dGhjb3JlXFxBdXRoTWFuYWdlci50cyIsImF1dGhjb3JlXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxhdXRoY29yZVxcQXV0aFJlZGlyZWN0LnRzIiwiYXV0aGNvcmVcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGF1dGhjb3JlXFxFdmVudC50cyIsImF1dGhjb3JlXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxhdXRoY29yZVxcUmVkaXJlY3RSZWFzb24udHMiLCJhdXRoY29yZVxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYXV0aGNvcmVcXFRva2VuU3RvcmFnZS50cyIsImJyYW5kaW5nXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxicmFuZGluZ1xcQnJhbmRpbmdFZGl0TW9kZS50cyIsImJyYW5kaW5nXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxicmFuZGluZ1xcQnJhbmRpbmdMb2dvVHlwZS50cyIsImJyYW5kaW5nXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxicmFuZGluZ1xcQnJhbmRpbmdNb2R1bGUudHMiLCJicmFuZGluZ1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYnJhbmRpbmdcXEJyYW5kaW5nU2VydmljZS50cyIsImJyYW5kaW5nXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxicmFuZGluZ1xcQnJhbmRpbmdUaGVtZXNTZXJ2aWNlLnRzIiwiYnJhbmRpbmdcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGJyYW5kaW5nXFxDdXN0b21CcmFuZGluZ1NlcnZpY2UudHMiLCJidW5kbGVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxidW5kbGVzXFxCdW5kbGVTZXJ2aWNlLnRzIiwiYnVuZGxlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYnVuZGxlc1xcQnVuZGxlc01vZHVsZS50cyIsImJ1bmRsZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGJ1bmRsZXNcXFN5c3RlbUJ1bmxkZUVkaXRDb250cm9sbGVyLnRzIiwiYnVuZGxlc1xcY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYnVuZGxlc1xcY29tcG9uZW50c1xcRWRpdEJ1bmRsZURpcmVjdGl2ZS50cyIsImJ1bmRsZXNcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYnVuZGxlc1xcbW9kZWxzXFxCdW5kbGVGaWxlVHlwZS50cyIsImJ1c2luZXNzVW5pdHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGJ1c2luZXNzVW5pdHNcXEJ1c2luZXNzVW5pdHNDb250cm9sbGVyLnRzIiwiYnVzaW5lc3NVbml0c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYnVzaW5lc3NVbml0c1xcQnVzaW5lc3NVbml0c0NyZWF0ZUVkaXRDb250cm9sbGVyLnRzIiwiYnVzaW5lc3NVbml0c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcYnVzaW5lc3NVbml0c1xcQnVzaW5lc3NVbml0c01vZHVsZS50cyIsImJ1c2luZXNzVW5pdHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGJ1c2luZXNzVW5pdHNcXEJ1c2luZXNzVW5pdHNTZXJ2aWNlLnRzIiwiY2VydGlmaWNhdGVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjZXJ0aWZpY2F0ZXNcXENlcnRpZmljYXRlU2VydmljZS50cyIsImNlcnRpZmljYXRlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY2VydGlmaWNhdGVzXFxDZXJ0aWZpY2F0ZXNDb250cm9sbGVyLnRzIiwiY2VydGlmaWNhdGVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjZXJ0aWZpY2F0ZXNcXENlcnRpZmljYXRlc0NyZWF0ZUVkaXRDb250cm9sbGVyLnRzIiwiY2VydGlmaWNhdGVzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNlcnRpZmljYXRlc1xcbW9kZWxzXFxDZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZS50cyIsImNvbW1vblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tbW9uXFxDb21tb25GaWx0ZXJTZXJ2aWNlLnRzIiwiY29tbW9uXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21tb25cXENvbW1vbkhvbWVTZXJ2aWNlLnRzIiwiY29tbW9uXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21tb25cXENvbW1vbk1vZHVsZS50cyIsImNvbW1vblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tbW9uXFxDb21tb25OYXZpZ2F0aW9uLnRzIiwiY29tbW9uXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21tb25cXENvbW1vblNlcnZpY2UudHMiLCJjb21tb25cXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbW1vblxcRXZlbnQudHMiLCJjb21tb25cXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbW1vblxcRXhwaXJhdGlvbkNhY2hlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcQWNjZXB0Q29va2llc0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXEF1dG9mb2N1c0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXEF2YXRhckRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXEJ1c2luZXNzVW5pdFNlbGVjdG9yRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcQ2VydGlmaWNhdGVzRWRpdGFibGVTZWxlY3RvckRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXENvbXBvbmVudHNNb2R1bGUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxEYXRlVGltZVBpY2tlckRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXERpc2N1c3Npb25zRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcRW50aXRpZXNTZWxlY3QyU2VsZWN0b3JEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxFeHBsYW5hdGlvbnNEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxGdWxsU2NyZWVuRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcR3JpZENvbmZpZ3VyYXRpb25EaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxHcmlkRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcR3JpZEVtcHR5RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcR3JpZEV4dGVybmFsQ29uZmlndXJhdGlvbi50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXEdyaWRQYWdpbmF0aW9uRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcTG9hZEJ1bmRsZUZpbGVEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxMb2dpbkRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXE1heExlbmd0aEZpbHRlci50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXE11bHRpcGxlQ2hlY2tib3hTZWxlY3RvckRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXE5vdGlmaWNhdGlvbkV2ZW50R3JvdXBLZXkudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxQYWdlSGVhZGVyRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcUGFnZVRpdGxlRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcUGVyc29uYWxNZW51RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcUXVpelZpZXdUb3BUYWJzLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcUmVmZXJlbmNlQ2hlY2tib3hTZWxlY3RvckRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFJlZmVyZW5jZURyb3Bkb3duRWRpdGFibGVTZWxlY3RvckRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFJlZmVyZW5jZURyb3Bkb3duU2VsZWN0b3JEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxSZWZlcmVuY2VNdWx0aXBsZVNlbGVjdG9yRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcU2Vjb25kc1RvVGltZUZpbHRlci50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFNlbGVjdE9wdGlvbnNEaXNhYmxlZERpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFNlbGVjdFBsYWNlaG9sZGVyRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcU2Vzc2lvblJlc3RvcmVEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxTa2lwVG9Db250ZW50RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVG9vbHRpcERpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFVwbG9hZEFyY2hpdmVJbkNvdXJzZUVkaXREaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxVcGxvYWRzU3RhdHVzRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVXNlckF2YXRhckRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNBdWRpb1Jlc3BvbmRlckRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc0JhZGdlVGVtcGxhdGVEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNCYWRnZVRlbXBsYXRlRWRpdC50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc0NhbGVuZGFyRmlsdGVyRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzQ291cnNlRWRpdFRvcFRhYnMudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNDb3Vyc2VQdWJsaXNoRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzQ291cnNlVmlld1RvcFRhYnMudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNDcmVkaXRBc3NpZ25tZW50RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzRWRpdGFibGVUZW1wbGF0ZURpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc0VkaXRhYmxlVXNlckNyZWRpdHNEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNFbWJlZGRlZE1hdGVyaWFsRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzRmlsbGFibGVGb3JtRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzR3JvdXBFZGl0VG9wVGFicy50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc0hlbHBCb3REaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNIb21lTWVudURpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc0lMVERpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc0ltYWdlQ3JvcHBlckRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0NlcnRpZmljYXRlc0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0RldGFpbHNEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkluZm9EaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEZXRhaWxzRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzSW5kaXZpZHVhbFBhcnRpY2lwYXRpb25JbmZvRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzTGVhcm5pbmdQYXRoQ29udHJvbHNEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNMZWFybmluZ1BhdGhDb3Vyc2VzTGlzdC50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc0xlYXJuaW5nUGF0aEVkaXRUb3BUYWJzLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzTGVhcm5pbmdQYXRoT3ZlcmFsbFByb2dyZXNzRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzTGVhcm5pbmdQYXRoVG9wVGFic0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc0xlYXJuaW5nU2Vzc2lvbnNUb3BUYWJzLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzTWF0ZXJpYWxDaGVja3BvaW50c0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc01hdGVyaWFsRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzTWF0ZXJpYWxFZGl0VG9wVGFic0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc01hdGVyaWFsRWRpdGluZ0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc01lZXRpbmdDcmVhdGVFZGl0RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzTm90aWZpY2F0aW9uVGVtcGxhdGVEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNOb3RpZmljYXRpb25UZW1wbGF0ZUVkaXREaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNPdmVyYWxsUHJvZ3Jlc3NEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNQYXJ0aWNpcGFudHNEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNQYXJ0aWNpcGF0aW9uRm9ybUVkaXRpbmdEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNQYXJ0aWNpcGF0aW9uRm9ybUZpbGxpbmdEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNQcm9kdWN0SXRlbURldGFpbHMudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNQcm9kdWN0Vmlld1RvcFRhYnMudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNQcm9kdWN0c0xpc3RFZGl0aW5nRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzUHVyY2hhc2VEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNRdWl6RGV0YWlsc0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc1F1aXpJbXBvcnRFeHBvcnREaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNRdWl6U3VydmV5QW5zd2VyaW5nRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzUmVjb3JkUnRjRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzUmV0dXJuVG9Pd25BY2NvdW50RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzU2NhbGVkQW5zd2VyUXVlc3Rpb25EaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNTZWFyY2hEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNTZWxlY3RBbGxEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxWaHNTZWxlY3RMZWFybmluZ1BhdGhDb3Vyc2VzRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzU3RpY2t5RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzU3lzdGVtU2V0dGluZ3NNZW51SXRlbXNWaXNpYmlsaXR5RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzU3lzdGVtU2V0dGluZ3NUb3BUYWJzLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzVGVhbXNDcmVhdGVFZGl0RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzVGVtcGxhdGVNZW51RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzVGh1bWJuYWlsRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzVklMVERpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc1ZlcnNpb25DaGVja2VyLnRzIiwiY29tcG9uZW50c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcVmhzVmlkZW9BdWRpb0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXFZoc1dlYmluYXJDcmVhdGVFZGl0RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcYnJhbmRpbmdcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXGJyYW5kaW5nXFxWaHNCcmFuZGluZ0NvbG9yc0VkaXRpbmcudHMiLCJjb21wb25lbnRzXFxicmFuZGluZ1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcYnJhbmRpbmdcXFZoc0JyYW5kaW5nQ3NzRWRpdGluZy50cyIsImNvbXBvbmVudHNcXGJyYW5kaW5nXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxicmFuZGluZ1xcVmhzQnJhbmRpbmdMb2dvc0VkaXRpbmcudHMiLCJjb21wb25lbnRzXFxicmFuZGluZ1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcYnJhbmRpbmdcXFZoc0JyYW5kaW5nU2hhcmVFZGl0aW5nLnRzIiwiY29tcG9uZW50c1xcYnJhbmRpbmdcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXGJyYW5kaW5nXFxWaHNCcmFuZGluZ1RoZW1lc0VkaXRpbmcudHMiLCJjb21wb25lbnRzXFxkaWFsb2dcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXGRpYWxvZ1xcQ29uZmlybWF0aW9uRGlhbG9nRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcZGlhbG9nXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxkaWFsb2dcXERpYWxvZ1NlcnZpY2UudHMiLCJjb21wb25lbnRzXFxkaWFsb2dcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXGRpYWxvZ1xcRmlsbGFibGVGb3JtRGlhbG9nRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcZGlhbG9nXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxkaWFsb2dcXElucHV0Q29uZmlybWF0aW9uRGlhbG9nRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xcZGlhbG9nXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxkaWFsb2dcXE5vdGlmaWNhdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xcbW9kZWxzXFxFdmVudC50cyIsImNvbXBvbmVudHNcXHF1aXp6ZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXHF1aXp6ZXNcXFZoc0hvdHNwb3RRdWVzdGlvbkFuc3dlcmluZ0RpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHF1aXp6ZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXHF1aXp6ZXNcXFZoc0hvdHNwb3RRdWVzdGlvbkVkaXREaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxxdWl6emVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxxdWl6emVzXFxWaHNIb3RzcG90UXVlc3Rpb25FeHBsYW5hdGlvbkRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHJpY2h0ZXh0XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxyaWNodGV4dFxcQUlDb250ZW50R2VuZXJhdGlvbkRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHJpY2h0ZXh0XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxyaWNodGV4dFxcUmljaFRleHRCaW5kRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xccmljaHRleHRcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXHJpY2h0ZXh0XFxSaWNoVGV4dENvbnRlbnRMb2FkaW5nU3luY2hyb25pemVyLnRzIiwiY29tcG9uZW50c1xccmljaHRleHRcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXHJpY2h0ZXh0XFxSaWNoVGV4dEVkaXRvckRpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHJpY2h0ZXh0XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxyaWNodGV4dFxcVmhzQWRkQmxvY2tEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxyaWNodGV4dFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xccmljaHRleHRcXFZoc0FkZFRhYmxlRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xccmljaHRleHRcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXHJpY2h0ZXh0XFxWaHNDb252ZXJ0VGVtcGxhdGVEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxyaWNodGV4dFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xccmljaHRleHRcXFZoc0Rvd25sb2FkQnVuZGxlRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xccmljaHRleHRcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXHJpY2h0ZXh0XFxWaHNFbWJlZGRlZEJ1bmRsZURpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHJpY2h0ZXh0XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxyaWNodGV4dFxcVmhzTG9hZEZyb21UZW1wbGF0ZURpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHJpY2h0ZXh0XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxyaWNodGV4dFxcVmhzU2FuZGJveERpcmVjdGl2ZS50cyIsImNvbXBvbmVudHNcXHJpY2h0ZXh0XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb21wb25lbnRzXFxyaWNodGV4dFxcVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVEaXJlY3RpdmUudHMiLCJjb21wb25lbnRzXFxyaWNodGV4dFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xccmljaHRleHRcXFZoc1NlbGVjdE1hdGVyaWFsRGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xccmljaHRleHRcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXHJpY2h0ZXh0XFxWaHNTZWxlY3RTYW5kYm94RGlyZWN0aXZlLnRzIiwiY29tcG9uZW50c1xccmljaHRleHRcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbXBvbmVudHNcXHJpY2h0ZXh0XFxWaHNUZW1wbGF0ZVNlcnZpY2UudHMiLCJjb21wb25lbnRzXFxyaWNodGV4dFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29tcG9uZW50c1xccmljaHRleHRcXFZoc1VzZXJOb3RlRGlyZWN0aXZlLnRzIiwiY29udGVudFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY29udGVudFxcQ29udGVudE1vZHVsZS50cyIsImNvbnRlbnRcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvbnRlbnRcXENvbnRlbnRTZXJ2aWNlLnRzIiwiY291cnNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcQ291cnNlQnVuZGxlRWRpdENvbnRyb2xsZXIudHMiLCJjb3Vyc2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb3Vyc2VzXFxDb3Vyc2VDcmVhdGVFZGl0Q29udHJvbGxlci50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXENvdXJzZURldGFpbHNDb250cm9sbGVyLnRzIiwiY291cnNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcQ291cnNlRGV0YWlsc1V0aWxzLnRzIiwiY291cnNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcQ291cnNlRGlzY3Vzc2lvbkNvbnRyb2xsZXIudHMiLCJjb3Vyc2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb3Vyc2VzXFxDb3Vyc2VFeHBvcnRJbXBvcnRFZGl0Q29udHJvbGxlci50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXENvdXJzZUdhbWlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyLnRzIiwiY291cnNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcQ291cnNlSUxUQ29udHJvbGxlci50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXENvdXJzZUlMVFNlcnZpY2UudHMiLCJjb3Vyc2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb3Vyc2VzXFxDb3Vyc2VJbmZvQ29udHJvbGxlci50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXENvdXJzZUxhbmRpbmdQYWdlRWRpdENvbnRyb2xsZXIudHMiLCJjb3Vyc2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb3Vyc2VzXFxDb3Vyc2VOb3RpZmljYXRpb25EZXRhaWxzQ29udHJvbGxlci50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXENvdXJzZU5vdGlmaWNhdGlvbkRldGFpbHNFZGl0Q29udHJvbGxlci50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXENvdXJzZVBhcnRpY2lwYXRpb25Gb3JtRWRpdENvbnRyb2xsZXIudHMiLCJjb3Vyc2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb3Vyc2VzXFxDb3Vyc2VQZXJtaXNzaW9uc0RlbGVnYXRpb25Db250cm9sbGVyLnRzIiwiY291cnNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcQ291cnNlUHJvZ3Jlc3NDb250cm9sbGVyLnRzIiwiY291cnNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcQ291cnNlUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXIudHMiLCJjb3Vyc2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb3Vyc2VzXFxDb3Vyc2VTY29ybTIwMDRBZGFwdGVyLnRzIiwiY291cnNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcQ291cnNlU2Nvcm1BZGFwdGVyLnRzIiwiY291cnNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcQ291cnNlU2VydmljZS50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXENvdXJzZVN0cnVjdHVyZUVkaXRDb250cm9sbGVyLnRzIiwiY291cnNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcQ291cnNlU3VydmV5UmVzdWx0c0NvbnRyb2xsZXIudHMiLCJjb3Vyc2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb3Vyc2VzXFxDb3Vyc2VXZWJpbmFyQ29udHJvbGxlci50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXENvdXJzZXNDb250cm9sbGVyLnRzIiwiY291cnNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcQ291cnNlc01vZHVsZS50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXEVucm9sbG1lbnRDcmVhdGVFZGl0Q29udHJvbGxlci50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXEVucm9sbG1lbnREZXRhaWxzQ29udHJvbGxlci50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXFByb2dyZXNzU2VydmljZS50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXFF1aXpEZXRhaWxzQ29udHJvbGxlci50cyIsImNvdXJzZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXFVzZXJOb3Rlc1NlcnZpY2UudHMiLCJjb3Vyc2VzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXG1vZGVsc1xcQ291cnNlUHJvZ3Jlc3NTdGF0dXMudHMiLCJjb3Vyc2VzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXG1vZGVsc1xcRW5yb2xsbWVudFNlYXRTdGF0dXMudHMiLCJjb3Vyc2VzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXG1vZGVsc1xcUXVpekNvcnJlY3RBbnN3ZXJzVHlwZS50cyIsImNvdXJzZXNcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcbW9kZWxzXFxTZWN0aW9uQWNjZXNzUnVsZXMudHMiLCJjb3Vyc2VzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGNvdXJzZXNcXG1vZGVsc1xcU2VjdGlvblBhc3NpbmdUeXBlLnRzIiwiY291cnNlc1xcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxjb3Vyc2VzXFxtb2RlbHNcXFNlY3Rpb25Qcm9ncmVzc1N0YXR1cy50cyIsImNvdXJzZXNcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcY291cnNlc1xcbW9kZWxzXFxTZWN0aW9uVHlwZS50cyIsImV4dGVybmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxleHRlcm5hbFxcRXh0ZXJuYWxSZXNvdXJjZXNNb2R1bGUudHMiLCJleHRlcm5hbFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcZXh0ZXJuYWxcXFpvb21Db250cm9sbGVyLnRzIiwiZmluYW5jZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGZpbmFuY2VzXFxCaWxsaW5nUGxhblNlcnZpY2UudHMiLCJmaW5hbmNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcZmluYW5jZXNcXENhdGFsb2dDb250cm9sbGVyLnRzIiwiZmluYW5jZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGZpbmFuY2VzXFxGaW5hbmNlc01vZHVsZS50cyIsImZpbmFuY2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxmaW5hbmNlc1xcT3JkZXJQcm9kdWN0c0NvbnRyb2xsZXIudHMiLCJmaW5hbmNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcZmluYW5jZXNcXFByb2R1Y3REZXRhaWxzQ29udHJvbGxlci50cyIsImZpbmFuY2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxmaW5hbmNlc1xcUHJvZHVjdEVkaXRDb250cm9sbGVyLnRzIiwiZmluYW5jZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGZpbmFuY2VzXFxQdXJjaGFzZVNlcnZpY2UudHMiLCJmaW5hbmNlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcZmluYW5jZXNcXFB1cmNoYXNlZE9yZGVyQ29udHJvbGxlci50cyIsImZpbmFuY2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxmaW5hbmNlc1xcUHVyY2hhc2VkUHJvZHVjdENvbnRyb2xsZXIudHMiLCJnYW1pZmljYXRpb25cXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGdhbWlmaWNhdGlvblxcQWN0aXZpdHlCYWRnZUVkaXRDb250cm9sbGVyLnRzIiwiZ2FtaWZpY2F0aW9uXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxnYW1pZmljYXRpb25cXEJhZGdlVGVtcGxhdGVFZGl0Q29udHJvbGxlci50cyIsImdhbWlmaWNhdGlvblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcZ2FtaWZpY2F0aW9uXFxCYWRnZVRlbXBsYXRlc0NvbnRyb2xsZXIudHMiLCJnYW1pZmljYXRpb25cXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGdhbWlmaWNhdGlvblxcQmFkZ2VzQ29udHJvbGxlci50cyIsImdhbWlmaWNhdGlvblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcZ2FtaWZpY2F0aW9uXFxCYWRnZXNDcmVhdGVFZGl0Q29udHJvbGxlci50cyIsImdhbWlmaWNhdGlvblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcZ2FtaWZpY2F0aW9uXFxCYWRnZXNTZXJ2aWNlLnRzIiwiZ2FtaWZpY2F0aW9uXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxnYW1pZmljYXRpb25cXEdhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2UudHMiLCJnYW1pZmljYXRpb25cXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGdhbWlmaWNhdGlvblxcR2FtZVByb2dyYW1zQ29udHJvbGxlci50cyIsImdhbWlmaWNhdGlvblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcZ2FtaWZpY2F0aW9uXFxHYW1lUHJvZ3JhbXNDcmVhdGVFZGl0Q29udHJvbGxlci50cyIsImdhbWlmaWNhdGlvblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcZ2FtaWZpY2F0aW9uXFxHYW1pZmljYXRpb25Nb2R1bGUudHMiLCJnYW1pZmljYXRpb25cXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGdhbWlmaWNhdGlvblxcR2FtaWZpY2F0aW9uU2VydmljZS50cyIsImdhbWlmaWNhdGlvblxcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxnYW1pZmljYXRpb25cXG1vZGVsc1xcQmFkZ2VUZW1wbGF0ZVNjb3BlLnRzIiwiZ2FtaWZpY2F0aW9uXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGdhbWlmaWNhdGlvblxcbW9kZWxzXFxSZXdhcmRBY3Rpb25UeXBlLnRzIiwiaG9tZVxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaG9tZVxcSG9tZUNvbnRyb2xsZXIudHMiLCJob21lXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxob21lXFxIb21lTW9kdWxlLnRzIiwiaG9tZVxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaG9tZVxcSG9tZVBhcnRpY2lwYW50c0NvbnRyb2xsZXIudHMiLCJob21lXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxob21lXFxIb21lU2VydmljZS50cyIsImhvbWVcXGFkbWluaW5zdHJhdGlvblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaG9tZVxcYWRtaW5pbnN0cmF0aW9uXFxIb21lQWRtaW5pc3RyYXRpb25NZW51Q29udHJvbGxlci50cyIsImhvbWVcXGFkbWluaW5zdHJhdGlvblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaG9tZVxcYWRtaW5pbnN0cmF0aW9uXFxIb21lQWRtaW5pc3RyYXRpb25SZXBvcnRzQ29udHJvbGxlci50cyIsImhvbWVcXGF0dGVuZGVlXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxob21lXFxhdHRlbmRlZVxcSG9tZUF0dGVuZGVlTWFuYWdlckNvdXJzZXNDb250cm9sbGVyLnRzIiwiaG9tZVxcYXR0ZW5kZWVcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGhvbWVcXGF0dGVuZGVlXFxIb21lQXR0ZW5kZWVNYW5hZ2VyTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIudHMiLCJob21lXFxhdHRlbmRlZVxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaG9tZVxcYXR0ZW5kZWVcXEhvbWVBdHRlbmRlZU1hbmFnZXJSZXBvcnRzQ29udHJvbGxlci50cyIsImhvbWVcXGF1dGhvclxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaG9tZVxcYXV0aG9yXFxIb21lQXV0aG9yQ291cnNlc0NvbnRyb2xsZXIudHMiLCJob21lXFxhdXRob3JcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGhvbWVcXGF1dGhvclxcSG9tZUF1dGhvckZsYXNoY2FyZHNDb250cm9sbGVyLnRzIiwiaG9tZVxcYXV0aG9yXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxob21lXFxhdXRob3JcXEhvbWVBdXRob3JMZWFybmluZ1BhdGhzQ29udHJvbGxlci50cyIsImhvbWVcXGF1dGhvclxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaG9tZVxcYXV0aG9yXFxIb21lQXV0aG9yTWF0ZXJpYWxzQ29udHJvbGxlci50cyIsImhvbWVcXGF1dGhvclxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaG9tZVxcYXV0aG9yXFxIb21lQXV0aG9yUXVpenplc0NvbnRyb2xsZXIudHMiLCJob21lXFxhdXRob3JcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGhvbWVcXGF1dGhvclxcSG9tZUF1dGhvclJlcG9ydHNDb250cm9sbGVyLnRzIiwiaG9tZVxcYXV0aG9yXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxob21lXFxhdXRob3JcXEhvbWVBdXRob3JTdXJ2ZXlzQ29udHJvbGxlci50cyIsImhvbWVcXGluc3RydWN0b3JcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGhvbWVcXGluc3RydWN0b3JcXEhvbWVJbnN0cnVjdG9yQ291cnNlc0NvbnRyb2xsZXIudHMiLCJob21lXFxpbnN0cnVjdG9yXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxob21lXFxpbnN0cnVjdG9yXFxIb21lSW5zdHJ1Y3RvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLnRzIiwiaG9tZVxcaW5zdHJ1Y3Rvclxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaG9tZVxcaW5zdHJ1Y3RvclxcSG9tZUluc3RydWN0b3JSZXBvcnRzQ29udHJvbGxlci50cyIsImhvbWVcXGxlYXJuZXJcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGhvbWVcXGxlYXJuZXJcXEhvbWVDb3Vyc2VzQ29udHJvbGxlci50cyIsImhvbWVcXGxlYXJuZXJcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGhvbWVcXGxlYXJuZXJcXEhvbWVGbGFzaGNhcmRzQ29udHJvbGxlci50cyIsImhvbWVcXGxlYXJuZXJcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGhvbWVcXGxlYXJuZXJcXEhvbWVMZWFybmluZ1BhdGhzQ29udHJvbGxlci50cyIsImhvbWVcXGxlYXJuZXJcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGhvbWVcXGxlYXJuZXJcXEhvbWVNYXRlcmlhbHNDb250cm9sbGVyLnRzIiwiaG9tZVxcbGVhcm5lclxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaG9tZVxcbGVhcm5lclxcSG9tZVJlcG9ydHNDb250cm9sbGVyLnRzIiwiaG9tZVxcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxob21lXFxtb2RlbHNcXE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLnRzIiwiaG9tZVxcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxob21lXFxtb2RlbHNcXFVzZXJSb2xlLnRzIiwiaHR0cFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaHR0cFxcSHR0cEludGVyY2VwdG9yLnRzIiwiaHR0cFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaHR0cFxcSHR0cE1vZHVsZS50cyIsImlsdFxcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbHRcXG1vZGVsc1xcSUxUUmVwZWF0VHlwZS50cyIsImlsdFxcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbHRcXG1vZGVsc1xcSUxUU2Vzc2lvbkF0dGVuZGFuY2VTdGF0dXMudHMiLCJpbHRcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaWx0XFxtb2RlbHNcXElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMudHMiLCJpbHRcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaWx0XFxtb2RlbHNcXElMVFNlc3Npb25TdGF0dXMudHMiLCJpbXBvcnRFeHBvcnRcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGltcG9ydEV4cG9ydFxcRXhwb3J0Q29udHJvbGxlci50cyIsImltcG9ydEV4cG9ydFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaW1wb3J0RXhwb3J0XFxJbXBvcnRDb250cm9sbGVyLnRzIiwiaW1wb3J0RXhwb3J0XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbXBvcnRFeHBvcnRcXEltcG9ydEV4cG9ydE1vZHVsZS50cyIsImltcG9ydEV4cG9ydFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaW1wb3J0RXhwb3J0XFxJbXBvcnRFeHBvcnRTZXJ2aWNlLnRzIiwiaW5mb1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaW5mb1xcQWJvdXRDb21wYW55Q29udHJvbGxlci50cyIsImluZm9cXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGluZm9cXEZBUUNvbnRyb2xsZXIudHMiLCJpbmZvXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbmZvXFxJbmZvTW9kdWxlLnRzIiwiaW5mb1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaW5mb1xcSW50cm9TZXJ2aWNlLnRzIiwiaW5mcmFzdHJ1Y3R1cmVcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGluZnJhc3RydWN0dXJlXFxFdmVudFNlcnZpY2UudHMiLCJpbmZyYXN0cnVjdHVyZVxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaW5mcmFzdHJ1Y3R1cmVcXEluZnJhc3RydWN0dXJlTW9kdWxlLnRzIiwiaW5mcmFzdHJ1Y3R1cmVcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGluZnJhc3RydWN0dXJlXFxTdG9yYWdlLnRzIiwiaW50ZWdyYXRpb25cXGF1dGhvcml6ZW5ldFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaW50ZWdyYXRpb25cXGF1dGhvcml6ZW5ldFxcQXV0aG9yaXplTmV0TW9kdWxlLnRzIiwiaW50ZWdyYXRpb25cXGF1dGhvcml6ZW5ldFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcaW50ZWdyYXRpb25cXGF1dGhvcml6ZW5ldFxcQXV0aG9yaXplTmV0U2VydmljZS50cyIsImludGVncmF0aW9uXFxhenVyZUNvZ25pdGl2ZVNlcnZpY2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbnRlZ3JhdGlvblxcYXp1cmVDb2duaXRpdmVTZXJ2aWNlc1xcQXp1cmVDb2duaXRpdmVTZXJ2aWNlc01vZHVsZS50cyIsImludGVncmF0aW9uXFxhenVyZUNvZ25pdGl2ZVNlcnZpY2VzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbnRlZ3JhdGlvblxcYXp1cmVDb2duaXRpdmVTZXJ2aWNlc1xcQXp1cmVDb2duaXRpdmVTZXJ2aWNlc1NlcnZpY2UudHMiLCJpbnRlZ3JhdGlvblxcYXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbnRlZ3JhdGlvblxcYXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrXFxBenVyZVdlYmNoYXRCb3RmcmFtZXdvcmtNb2R1bGUudHMiLCJpbnRlZ3JhdGlvblxcYXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbnRlZ3JhdGlvblxcYXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrXFxBenVyZVdlYmNoYXRCb3RmcmFtZXdvcmtTZXJ2aWNlLnRzIiwiaW50ZWdyYXRpb25cXGZyZWVlbnJvbGxtZW50XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbnRlZ3JhdGlvblxcZnJlZWVucm9sbG1lbnRcXEZyZWVFbnJvbGxtZW50TW9kdWxlLnRzIiwiaW50ZWdyYXRpb25cXGZyZWVlbnJvbGxtZW50XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbnRlZ3JhdGlvblxcZnJlZWVucm9sbG1lbnRcXEZyZWVFbnJvbGxtZW50U2VydmljZS50cyIsImludGVncmF0aW9uXFxwYXlwYWxcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGludGVncmF0aW9uXFxwYXlwYWxcXFBheVBhbE9yZGVyQ2FuY2VsbGF0aW9uQ29udHJvbGxlci50cyIsImludGVncmF0aW9uXFxwYXlwYWxcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGludGVncmF0aW9uXFxwYXlwYWxcXFBheVBhbE9yZGVyQ29uZmlybWF0aW9uQ29udHJvbGxlci50cyIsImludGVncmF0aW9uXFxwYXlwYWxcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGludGVncmF0aW9uXFxwYXlwYWxcXFBheVBhbFNlcnZpY2UudHMiLCJpbnRlZ3JhdGlvblxccGF5cGFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxpbnRlZ3JhdGlvblxccGF5cGFsXFxQYXlwYWxNb2R1bGUudHMiLCJqb2JzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxqb2JzXFxKb2JzQ29udHJvbGxlci50cyIsImpvYnNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGpvYnNcXEpvYnNNb2R1bGUudHMiLCJsZWFybmluZ1BhdGhzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxsZWFybmluZ1BhdGhzXFxMZWFybmluZ1BhdGhDcmVhdGVFZGl0Q29udHJvbGxlci50cyIsImxlYXJuaW5nUGF0aHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGxlYXJuaW5nUGF0aHNcXExlYXJuaW5nUGF0aERldGFpbHNDb250cm9sbGVyLnRzIiwibGVhcm5pbmdQYXRoc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbGVhcm5pbmdQYXRoc1xcTGVhcm5pbmdQYXRoR2FtaWZpY2F0aW9uRGV0YWlsc0NvbnRyb2xsZXIudHMiLCJsZWFybmluZ1BhdGhzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxsZWFybmluZ1BhdGhzXFxMZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uRm9ybUVkaXRDb250cm9sbGVyLnRzIiwibGVhcm5pbmdQYXRoc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbGVhcm5pbmdQYXRoc1xcTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkZvcm1GaWxsQ29udHJvbGxlci50cyIsImxlYXJuaW5nUGF0aHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGxlYXJuaW5nUGF0aHNcXExlYXJuaW5nUGF0aFBlcm1pc3Npb25zRGVsZWdhdGlvbkNvbnRyb2xsZXIudHMiLCJsZWFybmluZ1BhdGhzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxsZWFybmluZ1BhdGhzXFxMZWFybmluZ1BhdGhQZXJtaXNzaW9uc0VkaXRDb250cm9sbGVyLnRzIiwibGVhcm5pbmdQYXRoc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbGVhcm5pbmdQYXRoc1xcTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDb250cm9sbGVyLnRzIiwibGVhcm5pbmdQYXRoc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbGVhcm5pbmdQYXRoc1xcTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLnRzIiwibGVhcm5pbmdQYXRoc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbGVhcm5pbmdQYXRoc1xcTGVhcm5pbmdQYXRoUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXIudHMiLCJsZWFybmluZ1BhdGhzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxsZWFybmluZ1BhdGhzXFxMZWFybmluZ1BhdGhTZXJ2aWNlLnRzIiwibGVhcm5pbmdQYXRoc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbGVhcm5pbmdQYXRoc1xcTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIudHMiLCJsZWFybmluZ1BhdGhzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxsZWFybmluZ1BhdGhzXFxMZWFybmluZ1BhdGhzTW9kdWxlLnRzIiwibGVhcm5pbmdQYXRoc1xcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxsZWFybmluZ1BhdGhzXFxtb2RlbHNcXENvdXJzZUNvbXBsZXRpb25PcmRlci50cyIsImxlYXJuaW5nUGF0aHNcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbGVhcm5pbmdQYXRoc1xcbW9kZWxzXFxMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlLnRzIiwibG9nc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbG9nc1xcSVNlY3VyaXR5TG9nLnRzIiwibG9nc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbG9nc1xcSVN5c3RlbUxvZy50cyIsImxvZ3NcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXGxvZ3NcXExvZ3NNb2R1bGUudHMiLCJsb2dzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxsb2dzXFxTZWN1cml0eUxvZ0NvbnRyb2xsZXIudHMiLCJsb2dzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxsb2dzXFxTeXN0ZW1Mb2dDb250cm9sbGVyLnRzIiwibWFpblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbWFpblxcTWFpbkNvbnRyb2xsZXIudHMiLCJtYWluXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxtYWluXFxNYWluTW9kdWxlLnRzIiwibWFpblxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbWFpblxcTWFpblNlcnZpY2UudHMiLCJtYXRlcmlhbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG1hdGVyaWFsc1xcRWRpdE1hdGVyaWFsQ29udHJvbGxlci50cyIsIm1hdGVyaWFsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbWF0ZXJpYWxzXFxNYXRlcmlhbENvbnRyb2xsZXIudHMiLCJtYXRlcmlhbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG1hdGVyaWFsc1xcTWF0ZXJpYWxQZXJtaXNzaW9uc0VkaXRDb250cm9sbGVyLnRzIiwibWF0ZXJpYWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxtYXRlcmlhbHNcXE1hdGVyaWFsUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXIudHMiLCJtYXRlcmlhbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG1hdGVyaWFsc1xcTWF0ZXJpYWxTZXJ2aWNlLnRzIiwibWF0ZXJpYWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxtYXRlcmlhbHNcXE1hdGVyaWFsc01vZHVsZS50cyIsIm1hdGVyaWFsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbWF0ZXJpYWxzXFxNeURvd25sb2Fkc0NvbnRyb2xsZXIudHMiLCJtYXRlcmlhbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG1hdGVyaWFsc1xcUGxheWxpc3REZXRhaWxzQ29udHJvbGxlci50cyIsIm1hdGVyaWFsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbWF0ZXJpYWxzXFxQbGF5bGlzdEVkaXRDb250cm9sbGVyLnRzIiwibWF0ZXJpYWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxtYXRlcmlhbHNcXFBsYXlsaXN0U2VydmljZS50cyIsIm1hdGVyaWFsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbWF0ZXJpYWxzXFxQbGF5bGlzdHNDb250cm9sbGVyLnRzIiwibWF0ZXJpYWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxtYXRlcmlhbHNcXFNlYXJjaENvbnRyb2xsZXIudHMiLCJtYXRlcmlhbHNcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbWF0ZXJpYWxzXFxtb2RlbHNcXENoZWNrcG9pbnRUeXBlLnRzIiwibWF0ZXJpYWxzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG1hdGVyaWFsc1xcbW9kZWxzXFxJTXVsdGltZWRpYU1hdGVyaWFsU2V0dGluZ3MudHMiLCJtYXRlcmlhbHNcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbWF0ZXJpYWxzXFxtb2RlbHNcXE1hdGVyaWFsVHlwZS50cyIsIm1hdGVyaWFsc1xcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxtYXRlcmlhbHNcXG1vZGVsc1xcTm9BbnN3ZXJFZmZlY3RUeXBlLnRzIiwibWF0ZXJpYWxzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG1hdGVyaWFsc1xcbW9kZWxzXFxWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS50cyIsIm5ld3NcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG5ld3NcXEhlbHBEZXRhaWxzQ29udHJvbGxlci50cyIsIm5ld3NcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG5ld3NcXE5ld3NFZGl0Q29udHJvbGxlci50cyIsIm5ld3NcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG5ld3NcXE5ld3NNb2R1bGUudHMiLCJuZXdzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxuZXdzXFxOZXdzU2VhcmNoQ29udHJvbGxlci50cyIsIm5ld3NcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG5ld3NcXE5ld3NTZXJ2aWNlLnRzIiwibmV3c1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbmV3c1xcT25lTmV3c0NvbnRyb2xsZXIudHMiLCJuZXdzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXG5ld3NcXG1vZGVsc1xcTmV3c0tleS50cyIsIm5vdGlmaWNhdGlvblRlbXBsYXRlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbm90aWZpY2F0aW9uVGVtcGxhdGVzXFxOb3RpZmljYXRpb25Db250cm9sbGVyLnRzIiwibm90aWZpY2F0aW9uVGVtcGxhdGVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxub3RpZmljYXRpb25UZW1wbGF0ZXNcXE5vdGlmaWNhdGlvbkNyZWF0ZUVkaXRDb250cm9sbGVyLnRzIiwibm90aWZpY2F0aW9uVGVtcGxhdGVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxub3RpZmljYXRpb25UZW1wbGF0ZXNcXE5vdGlmaWNhdGlvbk1vZHVsZS50cyIsIm5vdGlmaWNhdGlvblRlbXBsYXRlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbm90aWZpY2F0aW9uVGVtcGxhdGVzXFxOb3RpZmljYXRpb25TZXJ2aWNlLnRzIiwibm90aWZpY2F0aW9uVGVtcGxhdGVzXFxtb2RlbFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcbm90aWZpY2F0aW9uVGVtcGxhdGVzXFxtb2RlbFxcTm90aWZpY2F0aW9uRXZlbnRLZXkudHMiLCJub3RpZmljYXRpb25UZW1wbGF0ZXNcXG1vZGVsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxub3RpZmljYXRpb25UZW1wbGF0ZXNcXG1vZGVsXFxOb3RpZmljYXRpb25UZW1wbGF0ZXNTY29wZS50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcQXNzZXNzbWVudHNNb2R1bGUudHMiLCJwZXJzb25hbFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccGVyc29uYWxcXENhbGVuZGFyQ29udHJvbGxlci50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcQ2VydGlmaWNhdGVzQ29udHJvbGxlci50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcQ291cG9uc0NvbnRyb2xsZXIudHMiLCJwZXJzb25hbFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccGVyc29uYWxcXENvdXJzZXNDb250cm9sbGVyLnRzIiwicGVyc29uYWxcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHBlcnNvbmFsXFxDcmVkaXRzQ29udHJvbGxlci50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcRXhwaXJlZENvdXJzZXNDb250cm9sbGVyLnRzIiwicGVyc29uYWxcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHBlcnNvbmFsXFxFeHBpcmVkTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIudHMiLCJwZXJzb25hbFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccGVyc29uYWxcXEZhdm9yaXRlc0NvbnRyb2xsZXIudHMiLCJwZXJzb25hbFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccGVyc29uYWxcXExlYXJuaW5nUGF0aHNDb250cm9sbGVyLnRzIiwicGVyc29uYWxcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHBlcnNvbmFsXFxNeUJhZGdlc0NvbnRyb2xsZXIudHMiLCJwZXJzb25hbFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccGVyc29uYWxcXE5ld0NvbW1lbnRzQ29udHJvbGxlci50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcUGVyc29uYWxNYWluQ29udHJvbGxlci50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcUGVyc29uYWxNb2R1bGUudHMiLCJwZXJzb25hbFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccGVyc29uYWxcXFBlcnNvbmFsU2VydmljZS50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcUGxheWxpc3RzQ29udHJvbGxlci50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcUHVyY2hhc2VkT3JkZXJzQ29udHJvbGxlci50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcUXVpekRldGFpbHNDb250cm9sbGVyLnRzIiwicGVyc29uYWxcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHBlcnNvbmFsXFxRdWl6emVzQ29udHJvbGxlci50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcU2V0dGluZ3NDb250cm9sbGVyLnRzIiwicGVyc29uYWxcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHBlcnNvbmFsXFxTdWJzY3JpcHRpb25zQ29udHJvbGxlci50cyIsInBlcnNvbmFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwZXJzb25hbFxcU3VwcG9ydENvbnRyb2xsZXIudHMiLCJwZXJzb25hbFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccGVyc29uYWxcXFVwbG9hZHNDb250cm9sbGVyLnRzIiwicGVyc29uYWxcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccGVyc29uYWxcXG1vZGVsc1xcQ2FsZW5kYXJFdmVudFR5cGVFbnVtLnRzIiwicGVyc29uYWxcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccGVyc29uYWxcXG1vZGVsc1xcU2Vzc2lvblR5cGVFbnVtLnRzIiwicG9saWNpZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHBvbGljaWVzXFxDb29raWVQb2xpY3lDb250cm9sbGVyLnRzIiwicG9saWNpZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHBvbGljaWVzXFxQb2xpY2llc01vZHVsZS50cyIsInBvbGljaWVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxwb2xpY2llc1xcUHJpdmFjeVBvbGljeUNvbnRyb2xsZXIudHMiLCJwb2xpY2llc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccG9saWNpZXNcXFRlcm1zT2ZVc2VDb250cm9sbGVyLnRzIiwicXVpenplc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccXVpenplc1xcUXVpekNvbnRyb2xsZXIudHMiLCJxdWl6emVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxxdWl6emVzXFxRdWl6RWRpdENvbnRyb2xsZXIudHMiLCJxdWl6emVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxxdWl6emVzXFxRdWl6SW1wb3J0RXhwb3J0U2VydmljZS50cyIsInF1aXp6ZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHF1aXp6ZXNcXFF1aXpQYXNzaW5nQ29udHJvbGxlci50cyIsInF1aXp6ZXNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHF1aXp6ZXNcXFF1aXpTZXJ2aWNlLnRzIiwicXVpenplc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccXVpenplc1xcUXVpenplc0NvbnRyb2xsZXIudHMiLCJxdWl6emVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxxdWl6emVzXFxRdWl6emVzTW9kdWxlLnRzIiwicXVpenplc1xcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxxdWl6emVzXFxtb2RlbHNcXElRdWl6SW1wb3J0RXhwb3J0RXJyb3JDb2RlLnRzIiwicXVpenplc1xcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxxdWl6emVzXFxtb2RlbHNcXE5leHRRdWVzdGlvblR5cGUudHMiLCJxdWl6emVzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHF1aXp6ZXNcXG1vZGVsc1xcUXVlc3Rpb25UeXBlLnRzIiwicXVpenplc1xcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxxdWl6emVzXFxtb2RlbHNcXFF1aXpSZXN1bHRTdGF0dXMudHMiLCJxdWl6emVzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHF1aXp6ZXNcXG1vZGVsc1xcUXVpelR5cGUudHMiLCJxdWl6emVzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHF1aXp6ZXNcXG1vZGVsc1xcU2NhbGVkQW5zd2VyUXVlc3Rpb25UeXBlLnRzIiwicmVmZXJlbmNlXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxyZWZlcmVuY2VcXFJlZmVyZW5jZUNvbnRyb2xsZXIudHMiLCJyZWZlcmVuY2VcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHJlZmVyZW5jZVxcUmVmZXJlbmNlRWRpdENvbnRyb2xsZXIudHMiLCJyZWZlcmVuY2VcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHJlZmVyZW5jZVxcUmVmZXJlbmNlTW9kdWxlLnRzIiwicmVmZXJlbmNlXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxyZWZlcmVuY2VcXFJlZmVyZW5jZVJlZGlyZWN0LnRzIiwicmVmZXJlbmNlXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxyZWZlcmVuY2VcXFJlZmVyZW5jZVNlcnZpY2UudHMiLCJyZWZlcmVuY2VcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHJlZmVyZW5jZVxcUmVmZXJlbmNlVXRpbHMudHMiLCJyZWZlcmVuY2VcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccmVmZXJlbmNlXFxtb2RlbHNcXElSZWZlcmVuY2VFbnRpdGllc1BhcmFtcy50cyIsInJlZmVyZW5jZVxcdmFsaWRhdG9yc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccmVmZXJlbmNlXFx2YWxpZGF0b3JzXFxSZWZlcmVuY2VJc1JlcXVpcmVkVmFsaWRhdG9yLnRzIiwicmVmZXJlbmNlXFx2YWxpZGF0b3JzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxyZWZlcmVuY2VcXHZhbGlkYXRvcnNcXFJlZmVyZW5jZU1heExlbmd0aFZhbGlkYXRvci50cyIsInJlZmVyZW5jZVxcdmFsaWRhdG9yc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccmVmZXJlbmNlXFx2YWxpZGF0b3JzXFxSZWZlcmVuY2VNaW5WYWx1ZVZhbGlkYXRvci50cyIsInJlZmVyZW5jZVxcdmFsaWRhdG9yc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xccmVmZXJlbmNlXFx2YWxpZGF0b3JzXFxSZWZlcmVuY2VSZXF1aXJlZEF0dHJpYnV0ZXNHcm91cFZhbGlkYXRvci50cyIsInNlY3VyaXR5XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzZWN1cml0eVxcTG9nb25Qcm92aWRlckVudW0udHMiLCJzZWN1cml0eVxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc2VjdXJpdHlcXFBlcm1pc3Npb25zUmVwb3NpdG9yeS50cyIsInNlY3VyaXR5XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzZWN1cml0eVxcUGVybWlzc2lvbnNTZXJ2aWNlLnRzIiwic2VjdXJpdHlcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHNlY3VyaXR5XFxTZWN1cml0eU1vZHVsZS50cyIsInNlY3VyaXR5XFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzZWN1cml0eVxcU2VjdXJpdHlTZXJ2aWNlLnRzIiwic2VjdXJpdHlcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHNlY3VyaXR5XFxTc29FcnJvcnMudHMiLCJzZWN1cml0eVxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc2VjdXJpdHlcXFNzb1JlYXNvblR5cGUudHMiLCJzZWN1cml0eVxccGVybWlzc2lvbnNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHNlY3VyaXR5XFxwZXJtaXNzaW9uc1xcSVBlcm1pc3Npb24udHMiLCJzZWN1cml0eVxccGVybWlzc2lvbnNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHNlY3VyaXR5XFxwZXJtaXNzaW9uc1xcU2VjdXJlZE9iamVjdFR5cGUudHMiLCJzZXR0aW5nc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc2V0dGluZ3NcXENvbW1vblNldHRpbmdzQ29udHJvbGxlci50cyIsInNldHRpbmdzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzZXR0aW5nc1xcU2V0dGluZ3NNb2R1bGUudHMiLCJzZXR0aW5nc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc2V0dGluZ3NcXFNldHRpbmdzU2VydmljZS50cyIsInNldHRpbmdzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzZXR0aW5nc1xcU3RvcmFnZVBsYWNlRWRpdENvbnRyb2xsZXIudHMiLCJzZXR0aW5nc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc2V0dGluZ3NcXFN0b3JhZ2VQbGFjZXNSZWdpc3RyeUNvbnRyb2xsZXIudHMiLCJzZXR0aW5nc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc2V0dGluZ3NcXFN5c3RlbUJyYW5kaW5nQ29udHJvbGxlci50cyIsInNldHRpbmdzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzZXR0aW5nc1xcU3lzdGVtU2V0dGluZ3NDb250cm9sbGVyLnRzIiwic2V0dGluZ3NcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc2V0dGluZ3NcXG1vZGVsc1xcSG9tZXBhZ2VUeXBlRW51bS50cyIsInNldHRpbmdzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHNldHRpbmdzXFxtb2RlbHNcXFN0b3JhZ2VUeXBlRW51bS50cyIsInNldHRpbmdzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHNldHRpbmdzXFxtb2RlbHNcXFN5c3RlbVByb3BlcnR5S2V5LnRzIiwic2xpZGVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzbGlkZXNcXFNsaWRlU2VydmljZS50cyIsInNsaWRlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc2xpZGVzXFxTbGlkZXNCdW5kbGVFZGl0Q29udHJvbGxlci50cyIsInNsaWRlc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc2xpZGVzXFxTbGlkZXNDb250cm9sbGVyLnRzIiwic2xpZGVzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzbGlkZXNcXFNsaWRlc0NyZWF0ZUVkaXRDb250cm9sbGVyLnRzIiwic29jaWFsXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzb2NpYWxcXFNvY2lhbE1vZHVsZS50cyIsInNvY2lhbFxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc29jaWFsXFxTb2NpYWxTZXJ2aWNlLnRzIiwic3RhdGlzdGljc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RhdGlzdGljc1xcQWN0aW9uTG9nU2VydmljZS50cyIsInN0YXRpc3RpY3NcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHN0YXRpc3RpY3NcXEJhc2VSZXBvcnRDb250cm9sbGVyLnRzIiwic3RhdGlzdGljc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RhdGlzdGljc1xcQ291cnNlQWN0aW9uTG9nU2VydmljZS50cyIsInN0YXRpc3RpY3NcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHN0YXRpc3RpY3NcXE1hdGVyaWFsRG93bmxvYWRSZXBvcnRDb250cm9sbGVyLnRzIiwic3RhdGlzdGljc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RhdGlzdGljc1xcTWF0ZXJpYWxVcGxvYWRSZXBvcnRDb250cm9sbGVyLnRzIiwic3RhdGlzdGljc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RhdGlzdGljc1xcTWF0ZXJpYWxWaWV3UmVwb3J0Q29udHJvbGxlci50cyIsInN0YXRpc3RpY3NcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHN0YXRpc3RpY3NcXFBvd2VyQmlSZXBvcnRDb250cm9sbGVyLnRzIiwic3RhdGlzdGljc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RhdGlzdGljc1xcU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UudHMiLCJzdGF0aXN0aWNzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzdGF0aXN0aWNzXFxTdGF0aXN0aWNzTW9kdWxlLnRzIiwic3RhdGlzdGljc1xcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzdGF0aXN0aWNzXFxtb2RlbHNcXEFjdGlvblR5cGUudHMiLCJzdGF0aXN0aWNzXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHN0YXRpc3RpY3NcXG1vZGVsc1xcQ291cnNlQWN0aW9uVHlwZS50cyIsInN0YXRpc3RpY3NcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RhdGlzdGljc1xcbW9kZWxzXFxNYXRlcmlhbFJlcG9ydFRhcmdldC50cyIsInN0YXRpc3RpY3NcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RhdGlzdGljc1xcbW9kZWxzXFxSZXBvcnRHcm91cFR5cGUudHMiLCJzdGF0aXN0aWNzXFx1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RhdGlzdGljc1xcdXRpbHNcXFJlcG9ydE9wdGlvbnMudHMiLCJzdGF0aXN0aWNzXFx1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RhdGlzdGljc1xcdXRpbHNcXFJlcG9ydFRhcmdldE5hbWVzTWFrZXIudHMiLCJzdGF0aXN0aWNzXFx1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RhdGlzdGljc1xcdXRpbHNcXFJlcG9ydFdyaXRlcnMudHMiLCJzdG9yYWdlXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFxzdG9yYWdlXFxTdG9yYWdlTW9kdWxlLnRzIiwic3RvcmFnZVxcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcc3RvcmFnZVxcVXBsb2Fkc1NlcnZpY2UudHMiLCJzeXN0ZW1cXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHN5c3RlbVxcU2NvcGVVdGlscy50cyIsInRyZWVcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHRyZWVcXFRyZWVFbGVtZW50c0luZm9GaWxsZXIudHMiLCJ0cmVlXFxtb2RlbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHRyZWVcXG1vZGVsc1xcVHJlZUVsZW1lbnRTdGF0ZS50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXEFzc2Vzc21lbnRzUm91dGVyLnRzIiwidXJsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXJsc1xcQXV0aFJvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXEJ1c2luZXNzVW5pdHNSb3V0ZXIudHMiLCJ1cmxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1cmxzXFxDZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXENvbW1vblJvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXENvbnRlbnRSb3V0ZXIudHMiLCJ1cmxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1cmxzXFxDb3Vyc2VzUm91dGVyLnRzIiwidXJsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXJsc1xcRXhwb3J0Um91dGVyLnRzIiwidXJsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXJsc1xcRXh0ZXJuYWxSZXNvdXJjZXNSb3V0ZXIudHMiLCJ1cmxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1cmxzXFxGaW5hbmNlc1JvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXEdhbWlmaWNhdGlvblJvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXEhvbWVSb3V0ZXIudHMiLCJ1cmxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1cmxzXFxJbXBvcnRSb3V0ZXIudHMiLCJ1cmxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1cmxzXFxJbmZvUm91dGVyLnRzIiwidXJsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXJsc1xcSm9ic1JvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXExlYXJuaW5nUGF0aHNSb3V0ZXIudHMiLCJ1cmxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1cmxzXFxMb2dzUm91dGVyLnRzIiwidXJsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXJsc1xcTWFpblJvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXE1hdGVyaWFsc1JvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXE5ld3NSb3V0ZXIudHMiLCJ1cmxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1cmxzXFxOb3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXIudHMiLCJ1cmxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1cmxzXFxQYXlQYWxSb3V0ZXIudHMiLCJ1cmxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1cmxzXFxQZXJzb25hbFJvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXFBvbGljaWVzUm91dGVyLnRzIiwidXJsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXJsc1xcUXVpenplc1JvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXFJlZmVyZW5jZVJvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXFNsaWRlVGVtcGxhdGVzUm91dGVyLnRzIiwidXJsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXJsc1xcU3RhdGlzdGljc1JvdXRlci50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXFN5c3RlbVNldHRpbmdzUm91dGVyLnRzIiwidXJsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXJsc1xcVXJsU2VydmljZVByb3ZpZGVyLnRzIiwidXJsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXJsc1xcVXJsc01vZHVsZS50cyIsInVybHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVybHNcXFVzZXJzUm91dGVyLnRzIiwidXNlcnNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVzZXJzXFxDdXJyZW50VXNlclByb2ZpbGVDb250cm9sbGVyLnRzIiwidXNlcnNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVzZXJzXFxHcm91cEVkaXRDb250cm9sbGVyLnRzIiwidXNlcnNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVzZXJzXFxHcm91cE1hbmFnZVBlcm1pc3Npb25zQ29udHJvbGxlci50cyIsInVzZXJzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1c2Vyc1xcR3JvdXBzQ29udHJvbGxlci50cyIsInVzZXJzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1c2Vyc1xcVXNlckVkaXRDb250cm9sbGVyLnRzIiwidXNlcnNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHVzZXJzXFxVc2VyU2VydmljZS50cyIsInVzZXJzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1c2Vyc1xcVXNlclNpZ251cENvbnRyb2xsZXIudHMiLCJ1c2Vyc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXNlcnNcXFVzZXJTdGFydFRyaWFsQ29udHJvbGxlci50cyIsInVzZXJzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1c2Vyc1xcVXNlcnNMaXN0Q29udHJvbGxlci50cyIsInVzZXJzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1c2Vyc1xcVXNlcnNNZXJnZUNvbnRyb2xsZXIudHMiLCJ1c2Vyc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXNlcnNcXFVzZXJzTW9kdWxlLnRzIiwidXNlcnNcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXNlcnNcXG1vZGVsc1xcSUdyb3VwLnRzIiwidXNlcnNcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXNlcnNcXG1vZGVsc1xcSVVzZXIudHMiLCJ1c2Vyc1xcbW9kZWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1c2Vyc1xcbW9kZWxzXFxVc2VyUm9sZS50cyIsInV0aWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1dGlsc1xcQ2hlY2tCdXNpbmVzc1VuaXRJZC50cyIsInV0aWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1dGlsc1xcQ29udGVudFV0aWxzLnRzIiwidXRpbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHV0aWxzXFxDb3Vyc2VCdW5kbGVVdGlscy50cyIsInV0aWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1dGlsc1xcRG9tVXRpbHMudHMiLCJ1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXRpbHNcXEhvbWVwYWdlSGVscGVyLnRzIiwidXRpbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHV0aWxzXFxIb3RzcG90UXVlc3Rpb25VdGlscy50cyIsInV0aWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1dGlsc1xcS2V5cy50cyIsInV0aWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1dGlsc1xcTG9jYXRpb25DaGFuZ2VIZWxwZXIudHMiLCJ1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXRpbHNcXE1lbnVDb25maWd1cmF0b3JTZXJ2aWNlLnRzIiwidXRpbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHV0aWxzXFxNZW51SGVscGVyLnRzIiwidXRpbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHV0aWxzXFxNb21lbnQudHMiLCJ1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXRpbHNcXE9iamVjdEZpZWxkUmVzb2x2ZXIudHMiLCJ1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXRpbHNcXE9iamVjdFR5cGVVdGlscy50cyIsInV0aWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1dGlsc1xcUGFnZUhlYWRlckhlbHBlci50cyIsInV0aWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1dGlsc1xcUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzLnRzIiwidXRpbHNcXHNyY1xcbWFpblxcYnVpbGRcXGFwcFxcZW5fVVNcXHV0aWxzXFxSYW5kb21VdGlscy50cyIsInV0aWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1dGlsc1xcUmVzaXplVmlld1NlcnZpY2UudHMiLCJ1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXRpbHNcXFN0cmluZ0J1aWxkZXIudHMiLCJ1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXRpbHNcXFRpbWVvdXRVdGlscy50cyIsInV0aWxzXFxzcmNcXG1haW5cXGJ1aWxkXFxhcHBcXGVuX1VTXFx1dGlsc1xcVXBsb2FkVXRpbHMudHMiLCJ1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXRpbHNcXFVybFNlcnZpY2UudHMiLCJ1dGlsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcdXRpbHNcXFV0aWxzTW9kdWxlLnRzIiwid2ViaW5hcnNcXG1vZGVsc1xcc3JjXFxtYWluXFxidWlsZFxcYXBwXFxlbl9VU1xcd2ViaW5hcnNcXG1vZGVsc1xcVGltZVpvbmVUeXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7SUFBQTtJQTBCQSxDQUFDO0lBekJpQiwyQkFBYSxHQUFXLE9BQU8sQ0FBQztJQUNoQyx5QkFBVyxHQUFXLHVDQUF1QyxDQUFDO0lBQzlELHdCQUFVLEdBQVcsT0FBTyxDQUFDO0lBQzdCLHlCQUFXLEdBQVcsaUJBQWlCLENBQUM7SUFDeEMsdUJBQVMsR0FBVyxjQUFjLENBQUM7SUFDbkMsMEJBQVksR0FBVyxrQkFBa0IsQ0FBQztJQUMxQyw2QkFBZSxHQUFXLE9BQU8sQ0FBQztJQUNsQywyQkFBYSxHQUFXLE9BQU8sQ0FBQztJQUNoQyw2QkFBZSxHQUFXLEVBQUUsQ0FBQztJQUM3QixxQkFBTyxHQUFXLG1EQUFtRCxDQUFDO0lBQ3RFLDRCQUFjLEdBQVcsT0FBTyxDQUFDO0lBRWpDLDJCQUFhLEdBQVcsT0FBTyxDQUFDO0lBQ2hDLHNCQUFRLEdBQVcsY0FBYyxDQUFDO0lBRWxDLDBCQUFZLEdBQVcsb0NBQW9DLENBQUM7SUFFNUQsK0JBQWlCLEdBQVksSUFBSSxDQUFDO0lBRWxDLG9EQUFzQyxHQUFXLE1BQU0sQ0FBQztJQUV4RCxxQ0FBdUIsR0FBVyxNQUFNLENBQUM7SUFDekMsdUNBQXlCLEdBQVcsT0FBTyxDQUFDO0lBRTVDLHVCQUFTLEdBQVcsRUFBRSxDQUFDO0lBQ3pDLG9CQUFDO0FBQUQsQ0ExQkEsQUEwQkMsSUFBQTtBQTFCWSxxQkFBYSxnQkEwQnpCLENBQUE7O0FDMUJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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RixJQUFJLENBQUMsNkJBQWEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUMsQ0FBQztTQUN4RixJQUFJLENBQUMsNkJBQWEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLEVBQUMsQ0FBQztTQUNoRyxJQUFJLENBQUMsNkJBQWEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUMsQ0FBQztTQUMxRixJQUFJLENBQUMsNkJBQWEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUMsQ0FBQztTQUM1RixJQUFJLENBQUMsNkJBQWEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUMsQ0FBQztTQUN4RixJQUFJLENBQUMsNkJBQWEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLEVBQUMsQ0FBQztTQUNoRyxJQUFJLENBQUMsNkJBQWEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUMsQ0FBQztTQUMxRixJQUFJLENBQUMsNkJBQWEsQ0FBQyxzQkFBc0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUMsQ0FBQztTQUMvRixJQUFJLENBQUMsNkJBQWEsQ0FBQyxxQkFBcUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUMsQ0FBQztTQUMzRixJQUFJLENBQUMsNkJBQWEsQ0FBQyxzQkFBc0IsRUFBRSxF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LENBQUM7Z0JBQ3RHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7Z0JBQzFELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQywrQkFBK0IsR0FBRyxLQUFLLENBQUM7WUFDMUUsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksdUNBQWtCLENBQUMsdUNBQWtCLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQzNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQywrQkFBK0IsR0FBRyxLQUFLLENBQUM7WUFDMUUsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksdUNBQWtCLENBQUMsdUNBQWtCLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9HLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQzNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUM7WUFDekUsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksdUNBQWtCLENBQUMsdUNBQWtCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQzNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyw2QkFBNkIsR0FBRyxJ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LEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBQ3hDLENBQUMsQ0FBQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJleHBvcnQgY2xhc3MgQXBwUHJvcGVydGllcyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRlZmF1bHRMb2NhbGU6IHN0cmluZyA9IFwiZW5fVVNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VydmljZVJvb3Q6IHN0cmluZyA9IFwiaHR0cHM6Ly9hcGktbmFjZWxlYXJuaW5nLm5hY2V3ZWIub3JnL1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBhcHBWZXJzaW9uOiBzdHJpbmcgPSBcIjQuNC43XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN2blJldmlzaW9uOiBzdHJpbmcgPSBcIjkzZDQyMDlkYTFfSEVBRFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBidWlsZERhdGU6IHN0cmluZyA9IFwiMjAyNDEyMjAxMjQwXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGF1dGhQcm92aWRlcjogc3RyaW5nID0gXCJMT0NBTCxBUFRJRllfU1NPXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGFsbG93U3RhcnRUcmlhbDogc3RyaW5nID0gXCJmYWxzZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBhbGxvd01haW5QYWdlOiBzdHJpbmcgPSBcImZhbHNlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGFkb2JlRGNDbGllbnRJZDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgYmFzZVVybDogc3RyaW5nID0gXCJodHRwczovL25hY2VsZWFybmluZy5uYWNld2ViLm9yZy9jbGllbnQvYXBwLmh0bWwjXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGZyZWVQbGFuTGltaXRzOiBzdHJpbmcgPSBcImZhbHNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjdXJyZW50TG9jYWxlOiBzdHJpbmcgPSBcImVuX1VTXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGFwcFRpdGxlOiBzdHJpbmcgPSBcIkNvcmUgQUNISUVWRVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgYnVpbGRWZXJzaW9uOiBzdHJpbmcgPSBcIjQuNC43LjkzZDQyMDlkYTFfSEVBRC4yMDI0MTIyMDEyNDBcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGF1dG9OYXZpZ2F0ZVRvU3NvOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlZ2lzdHJhdGlvbldpdGhvdXRCdXNpbmVzc1VuaXRBbGxvd2VkOiBzdHJpbmcgPSBcInRydWVcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGVuZm9yY2VQYXNzd29yZFBvbGljaWVzOiBzdHJpbmcgPSBcInRydWVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZW5mb3JjZVBhc3N3b3JkRXhwaXJhdGlvbjogc3RyaW5nID0gXCJmYWxzZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgc2VudHJ5RHNuOiBzdHJpbmcgPSBcIlwiO1xyXG59XHJcbiIsImZ1bmN0aW9uIGNvbnZlcnRWdHRUb0pzb24odnR0U3RyaW5nKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIHZhciBjdXJyZW50ID0ge31cbiAgdmFyIHNlY3Rpb25zID0gW11cbiAgdmFyIHN0YXJ0ID0gZmFsc2U7XG4gIHZhciB2dHRBcnJheSA9IHZ0dFN0cmluZy5zcGxpdCgnXFxuJyk7XG4gICB2dHRBcnJheS5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xuICAgIGlmIChsaW5lLnJlcGxhY2UoLzxcXC8/W14+XSsoPnwkKS9nLCBcIlwiKSA9PT0gXCIgXCIpe1xuICAgIH0gZWxzZSBpZiAobGluZS5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgXCJcIikgPT0gXCJcIikge1xuICAgIH0gZWxzZSBpZiAobGluZS5pbmRleE9mKCctLT4nKSAhPT0gLTEgKSB7XG4gICAgICBzdGFydCA9IHRydWU7XG5cbiAgICAgIGlmIChjdXJyZW50LnN0YXJ0KSB7XG4gICAgICAgIHNlY3Rpb25zLnB1c2goY2xvbmUoY3VycmVudCkpXG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQgPSB7XG4gICAgICAgIHN0YXJ0OiB0aW1lU3RyaW5nMm1zKGxpbmUuc3BsaXQoXCItLT5cIilbMF0udHJpbVJpZ2h0KCkuc3BsaXQoXCIgXCIpLnBvcCgpKSxcbiAgICAgICAgZW5kOiB0aW1lU3RyaW5nMm1zKGxpbmUuc3BsaXQoXCItLT5cIilbMV0udHJpbUxlZnQoKS5zcGxpdChcIiBcIikuc2hpZnQoKSksXG4gICAgICAgIHBhcnQ6ICcnXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsaW5lLnJlcGxhY2UoLzxcXC8/W14+XSsoPnwkKS9nLCBcIlwiKSA9PT0gXCJcIil7XG4gICAgfSBlbHNlIGlmIChsaW5lLnJlcGxhY2UoLzxcXC8/W14+XSsoPnwkKS9nLCBcIlwiKSA9PT0gXCIgXCIpe1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhcnQpe1xuICAgICAgICBpZiAoc2VjdGlvbnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgaWYgKHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtIDFdLnBhcnQucmVwbGFjZSgvPFxcLz9bXj5dKyg+fCQpL2csIFwiXCIpID09PSBsaW5lLnJlcGxhY2UoLzxcXC8/W14+XSsoPnwkKS9nLCBcIlwiKSkge1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5wYXJ0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBjdXJyZW50LnBhcnQgPSBsaW5lXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjdXJyZW50LnBhcnQgPSBgJHtjdXJyZW50LnBhcnR9ICR7bGluZX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBpdCdzIHRoZSBsYXN0IGxpbmUgb2YgdGhlIHN1YnRpdGxlc1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSB2dHRBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIHNlY3Rpb25zLnB1c2goY2xvbmUoY3VycmVudCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnQucGFydCA9IGxpbmVcbiAgICAgICAgICBzZWN0aW9ucy5wdXNoKGNsb25lKGN1cnJlbnQpKVxuICAgICAgICAgIGN1cnJlbnQucGFydCA9ICcnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgY3VycmVudCA9IFtdXG5cbiAgdmFyIHJlZ2V4ID0gLyg8KFswLTk6Lj5dKyk+KS9pZ1xuICBzZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgIHN0cnMgPSBzZWN0aW9uLnBhcnQuc3BsaXQoKVxuICAgIHZhciByZXN1bHRzID0gc3Rycy5tYXAoZnVuY3Rpb24ocyl7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UocmVnZXgsIGZ1bmN0aW9uKG4pe1xuICAgICAgICAgIHJldHVybiBuLnNwbGl0KCcnKS5yZWR1Y2UoZnVuY3Rpb24ocyxpKXsgcmV0dXJuIGA9PSR7bi5yZXBsYWNlKFwiPFwiLCBcIlwiKS5yZXBsYWNlKFwiPlwiLCBcIlwiKX1gIH0sIDApXG4gICAgICAgIH0pXG4gICAgfSk7XG4gICAgY2xlYW5UZXh0ID0gcmVzdWx0c1swXS5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgXCJcIik7XG4gICAgY2xlYW5BcnJheSA9IGNsZWFuVGV4dC5zcGxpdChcIiBcIilcbiAgICByZXN1bHRzQXJyYXkgPSBbXTtcbiAgICBjbGVhbkFycmF5LmZvckVhY2goZnVuY3Rpb24oaXRlbSl7XG4gICAgICBpZiAoaXRlbS5pbmRleE9mKCc9PScpID4gLTEpIHtcbiAgICAgICAgdmFyIHBhaXIgPSBpdGVtLnNwbGl0KFwiPT1cIilcbiAgICAgICAgdmFyIGtleSA9IHBhaXJbMF1cbiAgICAgICAgdmFyIHZhbHVlID0gcGFpclsxXVxuICAgICAgICBpZihrZXkgPT0gXCJcIiB8fCBrZXkgPT0gXCIjI1wiKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHNBcnJheS5wdXNoKHtcbiAgICAgICAgICB3b3JkOiBjbGVhbldvcmQoaXRlbS5zcGxpdChcIj09XCIpWzBdKSxcbiAgICAgICAgICB0aW1lOiB0aW1lU3RyaW5nMm1zKGl0ZW0uc3BsaXQoXCI9PVwiKVsxXSksXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRzQXJyYXkucHVzaCh7XG4gICAgICAgICAgd29yZDogY2xlYW5Xb3JkKGl0ZW0pLFxuICAgICAgICAgIHRpbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHNlY3Rpb24ud29yZHMgPSByZXN1bHRzQXJyYXk7XG4gICAgc2VjdGlvbi5wYXJ0ID0gc2VjdGlvbi5wYXJ0LnJlcGxhY2UoLzxcXC8/W14+XSsoPnwkKS9nLCBcIlwiKVxuICB9KVxuICAgIHJlc29sdmUoc2VjdGlvbnMpO1xuICB9KVxufVxuXG4vLyBoZWxwZXJzXG4vLyAgIGh0dHA6Ly9jb2RlcmV2aWV3LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy80NTMzNS9taWxsaXNlY29uZHMtdG8tdGltZS1zdHJpbmctdGltZS1zdHJpbmctdG8tbWlsbGlzZWNvbmRzXG5mdW5jdGlvbiB0aW1lU3RyaW5nMm1zKGEsYil7Ly8gdGltZShISDpNTTpTUy5tc3MpIC8vIG9wdGltaXplZFxuIHJldHVybiBhPWEuc3BsaXQoJy4nKSwgLy8gb3B0aW1pemVkXG4gIGI9YVsxXSoxfHwwLCAvLyBvcHRpbWl6ZWRcbiAgYT1hWzBdLnNwbGl0KCc6JyksXG4gIGIrKGFbMl0/YVswXSozNjAwK2FbMV0qNjArYVsyXSoxOmFbMV0/YVswXSo2MCthWzFdKjE6YVswXSoxKSoxZTMgLy8gb3B0aW1pemVkXG59XG5cbi8vIHJlbW92ZXMgZXZlcnl0aGluZyBidXQgY2hhcmFjdGVycyBhbmQgYXBvc3Ryb3BoZSBhbmQgZGFzaFxuZnVuY3Rpb24gY2xlYW5Xb3JkKHdvcmQpIHtcbiAgcmV0dXJuIHdvcmQucmVwbGFjZSgvW14wLTlhLXonLV0vZ2ksICcnKS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIGNsb25lKG9iaikge1xuICAgIGlmIChudWxsID09IG9iaiB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBvYmopIHJldHVybiBvYmo7XG4gICAgdmFyIGNvcHkgPSBvYmouY29uc3RydWN0b3IoKTtcbiAgICBmb3IgKHZhciBhdHRyIGluIG9iaikge1xuICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGF0dHIpKSBjb3B5W2F0dHJdID0gb2JqW2F0dHJdO1xuICAgIH1cbiAgICByZXR1cm4gY29weTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnRWdHRUb0pzb247XG4iLCJleHBvcnQgZW51bSBFbWJlZGRlZFJlcG9ydFR5cGVLZXkge1xyXG4gICAgREVGQVVMVCxcclxuICAgIEdST1VQX1BST0dSRVNTXHJcbn0iLCJpbXBvcnQge1NvcnRFbnRyeX0gZnJvbSBcIi4vU29ydEVudHJ5XCI7XHJcbmltcG9ydCB7SVBhZ2V9IGZyb20gXCIuL0lQYWdlXCI7XHJcbmltcG9ydCB7VGltZW91dFV0aWxzfSBmcm9tIFwiLi91dGlscy9UaW1lb3V0VXRpbHNcIjtcclxuaW1wb3J0IHtQYWdlTW9kZX0gZnJvbSBcIi4vUGFnZU1vZGVcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRNb2RlbDxUPiB7XHJcbiAgICBlbnRyaWVzOiBBcnJheTxUPjtcclxuICAgIGZpbHRlcjogYW55O1xyXG4gICAgbm9uUGVyc2lzdGVkRmlsdGVyRmllbGRzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgcGFnZVNpemU6IG51bWJlcjtcclxuICAgIGN1cnJlbnRQYWdlOiBudW1iZXI7XHJcbiAgICB0b3RhbENvdW50OiBudW1iZXI7XHJcbiAgICB0b3RhbENvdW50UmV2aXNlZDogbnVtYmVyO1xyXG4gICAgcmVxdWVzdHNQYWdlTW9kZTogc3RyaW5nO1xyXG4gICAgdG90YWxQYWdlQ291bnQ6IG51bWJlcjtcclxuICAgIHNlbGVjdGVkUGFnZTogbnVtYmVyO1xyXG5cclxuICAgIHNvcnRpbmc6IEFycmF5PFNvcnRFbnRyeT47XHJcbiAgICBncmlkQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj47XHJcbiAgICB2aXNpYmxlQ29sdW1uc0NvdW50OiBudW1iZXI7XHJcblxyXG4gICAgaXNMb2FkaW5nOiBib29sZWFuO1xyXG4gICAgc2hvd1NwaW5uZXI6IGJvb2xlYW47XHJcblxyXG4gICAgbG9hZFBhZ2UocGFnZU51bWJlcjogbnVtYmVyKTtcclxuICAgIGxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgbG9hZFdpdGhEZWxheSh0aW1lb3V0VXRpbHM6IFRpbWVvdXRVdGlscywgdXVpZDogYW55KTtcclxuICAgIGxvYWRQYWdlRm9yRmlsdGVyKHBhZ2VOdW1iZXI6IG51bWJlciwgZmlsdGVyOiBhbnkpO1xyXG4gICAgYWRkTG9hZGluZ0xpc3RlbmVyKGxpc3RlbmVyOiBJR3JpZExvYWRpbmdMaXN0ZW5lcik7XHJcbiAgICBjbGVhckxvYWRMaXN0ZW5lcnMoKTtcclxuICAgIGFkZENvbHVtblZpc2liaWxpdHlMaXN0ZW5lcihsaXN0ZW5lcjogSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VMaXN0ZW5lcik7XHJcbiAgICBhZGRQYWdlU2l6ZUxpc3RlbmVyKGxpc3RlbmVyOiBJUGFnZVNpemVDaGFuZ2VMaXN0ZW5lcik7XHJcbiAgICBnZXRQYWdlU2l6ZSgpOiBudW1iZXI7XHJcbiAgICBzZXREZWZhdWx0UGFnZVNpemUoKTogR3JpZE1vZGVsPFQ+O1xyXG4gICAgc2V0TWF4UGFnZVNpemUoKTogR3JpZE1vZGVsPFQ+O1xyXG5cclxuICAgIHJlY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNDb3VudCgpO1xyXG4gICAgY2hhbmdlQ29sdW1uVmlzaWJpbGl0eShjb2x1bW5JbmRleDogbnVtYmVyKTtcclxuXHJcbiAgICBvbkNoYW5nZVBhZ2VTaXplKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRMb2FkaW5nTGlzdGVuZXIge1xyXG4gICAgc3RhcnRMb2FkaW5nKCk7XHJcbiAgICBlbmRMb2FkaW5nKCk7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uVmlzaWJpbGl0eUNoYW5nZUxpc3RlbmVyIHtcclxuICAgIG9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZShjb2x1bW46IEdyaWRDb2x1bW4pO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2VTaXplQ2hhbmdlTGlzdGVuZXIge1xyXG4gICAgb25DaGFuZ2VQYWdlU2l6ZSgpO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUGVyc2lzdGVkR3JpZE1vZGVsQ29uZmlndXJhdGlvbiB7XHJcbiAgICBwdWJsaWMgZ3JpZENvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+O1xyXG4gICAgcHVibGljIHNvcnRFbnRyaWVzOiBBcnJheTxTb3J0RW50cnk+O1xyXG4gICAgcHVibGljIHBhZ2VTaXplOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZmlsdGVyOiBhbnk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBmcm9tR3JpZE1vZGVsKGdyaWRNb2RlbDogSUdyaWRNb2RlbDxhbnk+KTogUGVyc2lzdGVkR3JpZE1vZGVsQ29uZmlndXJhdGlvbiB7XHJcbiAgICAgICAgdmFyIHBlcnNpc3RlZCA9IG5ldyBQZXJzaXN0ZWRHcmlkTW9kZWxDb25maWd1cmF0aW9uKCk7XHJcbiAgICAgICAgcGVyc2lzdGVkLnBhZ2VTaXplID0gZ3JpZE1vZGVsLnBhZ2VTaXplO1xyXG4gICAgICAgIHBlcnNpc3RlZC5ncmlkQ29sdW1ucyA9IGdyaWRNb2RlbC5ncmlkQ29sdW1ucztcclxuICAgICAgICBwZXJzaXN0ZWQuc29ydEVudHJpZXMgPSBncmlkTW9kZWwuc29ydGluZztcclxuICAgICAgICBwZXJzaXN0ZWQuZmlsdGVyID0ge307XHJcbiAgICAgICAgaWYgKGdyaWRNb2RlbC5maWx0ZXIpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgZmllbGROYW1lIGluIGdyaWRNb2RlbC5maWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChncmlkTW9kZWwuZmlsdGVyLmhhc093blByb3BlcnR5KGZpZWxkTmFtZSkgJiYgZ3JpZE1vZGVsLm5vblBlcnNpc3RlZEZpbHRlckZpZWxkcy5pbmRleE9mKGZpZWxkTmFtZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyc2lzdGVkLmZpbHRlcltmaWVsZE5hbWVdID0gYW5ndWxhci5jb3B5KGdyaWRNb2RlbC5maWx0ZXJbZmllbGROYW1lXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBlcnNpc3RlZDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWRDb2x1bW4ge1xyXG4gICAgaW5kZXg6IG51bWJlcjtcclxuICAgIHBvc2l0aW9uOiBudW1iZXI7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBhbHdheXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBmaXhlZENvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyByZXZlcnNlVmlzaWJpbGl0eSgpIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZE1vZGVsPFQ+IGltcGxlbWVudHMgSUdyaWRNb2RlbDxUPiB7XHJcbiAgICBwdWJsaWMgc3RhdGljIERFRkFVTFRfUEFHRV9TSVpFOiBudW1iZXIgPSAxMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgTUFYX1VTRVJfUEFHRV9TSVpFOiBudW1iZXIgPSA1MDAwO1xyXG4gICAgcHVibGljIHN0YXRpYyBNQVhfUEFHRV9TSVpFOiBudW1iZXIgPSAyMTQ3NDgzNjQ3O1xyXG5cclxuICAgIHB1YmxpYyBlbnRyaWVzOiBBcnJheTxUPiA9IFtdO1xyXG4gICAgcHVibGljIHNvcnRpbmc6IEFycmF5PFNvcnRFbnRyeT4gPSBbXTtcclxuICAgIHB1YmxpYyBncmlkQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXTtcclxuICAgIHB1YmxpYyB2aXNpYmxlQ29sdW1uc0NvdW50OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdG90YWxDb3VudCA9IDA7XHJcbiAgICBwdWJsaWMgdG90YWxDb3VudFJldmlzZWQgPSAwO1xyXG4gICAgcHVibGljIHBhZ2VNb2RlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmVxdWVzdHNQYWdlTW9kZTogc3RyaW5nID0gUGFnZU1vZGVbUGFnZU1vZGUuRU5UUklFU19BTkRfVE9UQUxfRVNUSU1BVEVTXTtcclxuICAgIHB1YmxpYyB0b3RhbFBhZ2VDb3VudCA9IDE7XHJcbiAgICBwdWJsaWMgY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgcHVibGljIHNlbGVjdGVkUGFnZSA9IDE7XHJcbiAgICBwdWJsaWMgcGFnZVNpemUgPSBHcmlkTW9kZWwuREVGQVVMVF9QQUdFX1NJWkU7XHJcbiAgICBwdWJsaWMgZmlsdGVyOiBhbnkgPSB7fTtcclxuICAgIHB1YmxpYyBub25QZXJzaXN0ZWRGaWx0ZXJGaWVsZHM6IEFycmF5PHN0cmluZz4gPSBbXCJzZWFyY2hTdHJpbmdcIl07XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2hvd1NwaW5uZXIgPSB0cnVlO1xyXG4gICAgcHVibGljIGlzVG90YWxMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGxhdGVzdFJldmlzZWRUb3RhbEZpbHRlcjogYW55O1xyXG4gICAgcHVibGljIGRpc2FibGVQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTGlzdGVuZXJzOiBBcnJheTxJR3JpZExvYWRpbmdMaXN0ZW5lcj4gPSBbXTtcclxuICAgIHByaXZhdGUgY29sdW1uc0xpc3RlbmVyczogQXJyYXk8SUNvbHVtblZpc2liaWxpdHlDaGFuZ2VMaXN0ZW5lcj4gPSBbXTtcclxuICAgIHByaXZhdGUgcGFnZVNpemVMaXN0ZW5lcnM6IEFycmF5PElQYWdlU2l6ZUNoYW5nZUxpc3RlbmVyPiA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgbG9hZEVudGl0aWVzRnVuY3Rpb246IChncmlkTW9kZWw6IElHcmlkTW9kZWw8VD4pID0+IGFuZ3VsYXIuSVByb21pc2U8SVBhZ2U8VD4+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGxvYWRFbnRpdGllc0FwaTogKGdyaWRNb2RlbDogSUdyaWRNb2RlbDxUPikgPT4gYW5ndWxhci5JUHJvbWlzZTxJUGFnZTxUPj4pIHtcclxuICAgICAgICB0aGlzLmxvYWRFbnRpdGllc0Z1bmN0aW9uID0gbG9hZEVudGl0aWVzQXBpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREZWZhdWx0UGFnZVNpemUoKTogR3JpZE1vZGVsPFQ+IHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gR3JpZE1vZGVsLkRFRkFVTFRfUEFHRV9TSVpFO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRNYXhQYWdlU2l6ZSgpOiBHcmlkTW9kZWw8VD4ge1xyXG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBHcmlkTW9kZWwuTUFYX1BBR0VfU0laRTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkU29ydEVudHJ5KHNvcnRFbnRyeTogU29ydEVudHJ5KTogR3JpZE1vZGVsPFQ+IHtcclxuICAgICAgICB0aGlzLnNvcnRpbmcucHVzaChzb3J0RW50cnkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRMb2FkaW5nTGlzdGVuZXIobGlzdGVuZXI6IElHcmlkTG9hZGluZ0xpc3RlbmVyKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckxvYWRMaXN0ZW5lcnMoKXtcclxuICAgICAgICB0aGlzLmxvYWRMaXN0ZW5lcnMuc3BsaWNlKDAsIHRoaXMubG9hZExpc3RlbmVycy5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRDb2x1bW5WaXNpYmlsaXR5TGlzdGVuZXIobGlzdGVuZXI6IElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIpIHtcclxuICAgICAgICB0aGlzLmNvbHVtbnNMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFBhZ2VTaXplTGlzdGVuZXIobGlzdGVuZXI6IElQYWdlU2l6ZUNoYW5nZUxpc3RlbmVyKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFBhZ2UocGFnZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkUGFnZUZvckZpbHRlcihwYWdlTnVtYmVyLCB0aGlzLmZpbHRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRXaXRoRGVsYXkodGltZW91dFV0aWxzOiBUaW1lb3V0VXRpbHMsIHV1aWQ6IGFueSkge1xyXG4gICAgICAgIHRpbWVvdXRVdGlscy5wcm9jZXNzV2l0aERlbGF5KHV1aWQsIGEgPT4gdGhpcy5sb2FkUGFnZSgwKSwgMzAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZEN1cnJlbnRQYWdlKCkge1xyXG4gICAgICAgIHRoaXMubG9hZFBhZ2VGb3JGaWx0ZXIodGhpcy5jdXJyZW50UGFnZSwgdGhpcy5maWx0ZXIpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRQYWdlRm9yRmlsdGVyKHBhZ2VOdW1iZXI6IG51bWJlciwgZmlsdGVyOiBhbnksIHBhZ2VNb2RlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnaW5hdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sb2FkTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lcjogSUdyaWRMb2FkaW5nTGlzdGVuZXIgPSB0aGlzLmxvYWRMaXN0ZW5lcnNbaV07XHJcbiAgICAgICAgICAgIGxpc3RlbmVyLnN0YXJ0TG9hZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZU51bWJlcjtcclxuICAgICAgICBsZXQgaW5pdGlhbFJlcXVlc3RzTW9kZSA9IHRoaXMucmVxdWVzdHNQYWdlTW9kZTtcclxuICAgICAgICBpZiAocGFnZU1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0c1BhZ2VNb2RlID0gcGFnZU1vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUGFnZSAhPT0gcGFnZU51bWJlciArIDEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhZ2UgPSBwYWdlTnVtYmVyICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7IC8vdG9kbzpcclxuICAgICAgICB0aGlzLmxvYWRFbnRpdGllc0Z1bmN0aW9uKHRoaXMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWF4UGFnZXM6IG51bWJlciA9IE1hdGguY2VpbChyZXN1bHQudG90YWxDb3VudCAvIHRoaXMucGFnZVNpemUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1heFBhZ2VzIDwgdGhpcy5zZWxlY3RlZFBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFnZSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkRW50aXRpZXNGdW5jdGlvbih0aGlzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gdGhpcy5zZXREYXRhRnJvbVNlcnZlcihyZXN1bHQsIGZpbHRlcikpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFGcm9tU2VydmVyKHJlc3VsdCwgZmlsdGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlUGFnaW5hdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBpZiAocGFnZU1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0c1BhZ2VNb2RlID0gaW5pdGlhbFJlcXVlc3RzTW9kZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXREYXRhRnJvbVNlcnZlcihyZXN1bHQ6IElQYWdlPFQ+LCBmaWx0ZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXN1bHQudG90YWxDb3VudDtcclxuICAgICAgICBpZiAocmVzdWx0LnBhZ2VNb2RlICE9PSBcIlRPVEFMXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzID0gcmVzdWx0LmVudHJpZXM7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZU1vZGUgPSByZXN1bHQucGFnZU1vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQucGFnZU1vZGUgPT09IFwiRU5UUklFU19BTkRfVE9UQUxcIiB8fCByZXN1bHQucGFnZU1vZGUgPT09IFwiVE9UQUxcIikge1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsQ291bnRSZXZpc2VkID0gcmVzdWx0LnRvdGFsQ291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0UmV2aXNlZFRvdGFsRmlsdGVyID0gYW5ndWxhci5jb3B5KHRoaXMuZmlsdGVyKTtcclxuICAgICAgICAgICAgdGhpcy5pc1RvdGFsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnBhZ2VNb2RlID09PSBcIkVOVFJJRVNfQU5EX1RPVEFMX0VTVElNQVRFU1wiXHJcbiAgICAgICAgICAgICYmICFhbmd1bGFyLmVxdWFscyhmaWx0ZXIsIHRoaXMubGF0ZXN0UmV2aXNlZFRvdGFsRmlsdGVyKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsQ291bnRSZXZpc2VkID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5sYXRlc3RSZXZpc2VkVG90YWxGaWx0ZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubG9hZExpc3RlbmVycykge1xyXG4gICAgICAgICAgICBsaXN0ZW5lci5lbmRMb2FkaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRSZWNvcmRzQ291bnQoKSB7XHJcbiAgICAgICAgdGhpcy5sYXRlc3RSZXZpc2VkVG90YWxGaWx0ZXIgPSBhbmd1bGFyLmNvcHkodGhpcy5maWx0ZXIpO1xyXG4gICAgICAgIHRoaXMuaXNUb3RhbExvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGxldCBpbml0aWFsUmVxdWVzdHNNb2RlID0gdGhpcy5yZXF1ZXN0c1BhZ2VNb2RlO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdHNQYWdlTW9kZSA9IFwiVE9UQUxcIjtcclxuICAgICAgICB0aGlzLmxvYWRFbnRpdGllc0Z1bmN0aW9uKHRoaXMpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6SVBhZ2U8VD4pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlc3VsdC50b3RhbENvdW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5wYWdlTW9kZSA9PT0gXCJUT1RBTFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbENvdW50UmV2aXNlZCA9IHJlc3VsdC50b3RhbENvdW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RvdGFsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2VzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdHNQYWdlTW9kZSA9IGluaXRpYWxSZXF1ZXN0c01vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFBhZ2VTaXplKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VTaXplICYmICFpc05hTih0aGlzLnBhZ2VTaXplKSA/IHRoaXMucGFnZVNpemUgOiBHcmlkTW9kZWwuREVGQVVMVF9QQUdFX1NJWkU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNDb3VudCgpIHtcclxuICAgICAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmlkQ29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uOiBHcmlkQ29sdW1uID0gdGhpcy5ncmlkQ29sdW1uc1tpXTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5hbHdheXNWaXNpYmxlIHx8IGNvbHVtbi52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnNDb3VudCA9IGNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VDb2x1bW5WaXNpYmlsaXR5KGNvbHVtbkluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICB2YXIgY29sdW1uOiBHcmlkQ29sdW1uID0gbnVsbDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JpZENvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29sdW1uID0gdGhpcy5ncmlkQ29sdW1uc1tpXTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5pbmRleCA9PSBjb2x1bW5JbmRleCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2x1bW4gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb2x1bW4ucmV2ZXJzZVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVZpc2libGVDb2x1bW5zQ291bnQoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnNMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0xpc3RlbmVyc1tpXS5vbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UoY29sdW1uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DaGFuZ2VQYWdlU2l6ZSgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZVNpemVMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZUxpc3RlbmVyc1tpXS5vbkNoYW5nZVBhZ2VTaXplKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsY3VsYXRlVG90YWxQYWdlcygpIHtcclxuICAgICAgICBsZXQga25vd25Ub1VzVG90YWxDb3VudCA9IHRoaXMudG90YWxDb3VudFJldmlzZWQgPyB0aGlzLnRvdGFsQ291bnRSZXZpc2VkIDogdGhpcy50b3RhbENvdW50O1xyXG4gICAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2VTaXplIDwgMSA/IDEgOiBNYXRoLmNlaWwoa25vd25Ub1VzVG90YWxDb3VudCAvIHRoaXMucGFnZVNpemUpO1xyXG4gICAgICAgIHRoaXMudG90YWxQYWdlQ291bnQgPSBNYXRoLm1heCh0b3RhbFBhZ2VzIHx8IDAsIDEpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtJUGFnZX0gZnJvbSBcIi4vSVBhZ2VcIjtcclxuaW1wb3J0IHtTb3J0RW50cnl9IGZyb20gXCIuL1NvcnRFbnRyeVwiO1xyXG5pbXBvcnQge0lHcmlkTW9kZWx9IGZyb20gXCIuL0lHcmlkTW9kZWxcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUh0dHBHcmlkU2VydmljZTxUPiB7XHJcbiAgICBwYWdlKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlciwgcGFnZU1vZGU6IHN0cmluZyk6IElIdHRwR3JpZFNlcnZpY2U8VD47XHJcbiAgICBzb3J0aW5nKHNvcnRCeTogc3RyaW5nLCBzb3J0RGlyOiBzdHJpbmcpOiBJSHR0cEdyaWRTZXJ2aWNlPFQ+O1xyXG4gICAgY2FjaGUoKTogSUh0dHBHcmlkU2VydmljZTxUPlxyXG4gICAgZ2V0SXRlbXMocGFnZT86IG51bWJlciwgc2l6ZT86IG51bWJlciwgbW9kZT86IHN0cmluZywgZmlsdGVyPzogYW55LCBzb3J0aW5nPzogQXJyYXk8U29ydEVudHJ5Pik6IGFuZ3VsYXIuSVByb21pc2U8SVBhZ2U8VD4+O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSHR0cEdyaWRTZXJ2aWNlPFQ+IGltcGxlbWVudHMgSUh0dHBHcmlkU2VydmljZTxUPiB7XHJcblxyXG4gICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2U7XHJcbiAgICBwcml2YXRlIGFwaVVybDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBwYXJhbXM6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBlbmFibGVDYWNoZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSwgYXBpVXJsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLiRodHRwID0gJGh0dHA7XHJcbiAgICAgICAgdGhpcy5hcGlVcmwgPSBhcGlVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEl0ZW1zKHBhZ2U/OiBudW1iZXIsIHNpemU/OiBudW1iZXIsIG1vZGU/OiBzdHJpbmcsIGZpbHRlcj86IGFueSwgc29ydGluZz86IEFycmF5PFNvcnRFbnRyeT4pOiBhbmd1bGFyLklQcm9taXNlPElQYWdlPFQ+PiB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBmaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zW2tleSArIFwiRmlsdGVyXCJdID0gZmlsdGVyW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzb3J0aW5nICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zW1wic29ydGluZ1wiXSA9IHNvcnRpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVDYWNoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZE5vQ2FjaGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYWdlKHBhZ2UsIHNpemUsIG1vZGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy5hcGlVcmwsIHtwYXJhbXM6IHRoaXMucGFyYW1zfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGFnZShwYWdlOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIsIHBhZ2VNb2RlOiBzdHJpbmcpOiBJSHR0cEdyaWRTZXJ2aWNlPFQ+IHtcclxuICAgICAgICB0aGlzLnBhcmFtc1tcInBhZ2VcIl0gPSBwYWdlO1xyXG4gICAgICAgIHRoaXMucGFyYW1zW1wicGFnZVNpemVcIl0gPSBwYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLnBhcmFtc1tcInBhZ2VNb2RlXCJdID0gcGFnZU1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNvcnRpbmcoc29ydEJ5OiBzdHJpbmcsIHNvcnREaXI6IHN0cmluZyk6IElIdHRwR3JpZFNlcnZpY2U8VD4geyAvL3RvZG86XHJcbiAgICAgICAgdGhpcy5wYXJhbXNbXCJzb3J0QnlcIl0gPSBzb3J0Qnk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXNbXCJzb3J0RGlyXCJdID0gc29ydERpcjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FjaGUoKTogSUh0dHBHcmlkU2VydmljZTxUPiB7XHJcbiAgICAgICAgdGhpcy5lbmFibGVDYWNoZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGROb0NhY2hlKCkge1xyXG4gICAgICAgIHRoaXMucGFyYW1zW1wibm8tY2FjaGVcIl0gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdyaWQ8VD4oJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLCBhcGlVcmw6IHN0cmluZyk6IElIdHRwR3JpZFNlcnZpY2U8VD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgSHR0cEdyaWRTZXJ2aWNlPFQ+KCRodHRwLCBhcGlVcmwpO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEh0dHBHcmlkSGVscGVyIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUxvYWRlcjxUPigkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsIGFwaVVybDogc3RyaW5nKTogKG06IElHcmlkTW9kZWw8VD4pID0+IGFuZ3VsYXIuSVByb21pc2U8SVBhZ2U8VD4+IHtcclxuICAgICAgICB2YXIgaHR0cEdyaWRTZXJ2aWNlID0gSHR0cEdyaWRTZXJ2aWNlLmdyaWQoJGh0dHAsIGFwaVVybCk7XHJcbiAgICAgICAgcmV0dXJuIG1vZGVsID0+IGh0dHBHcmlkU2VydmljZS5nZXRJdGVtcyhtb2RlbC5jdXJyZW50UGFnZSwgbW9kZWwuZ2V0UGFnZVNpemUoKSwgbW9kZWwucmVxdWVzdHNQYWdlTW9kZSwgbW9kZWwuZmlsdGVyLCBtb2RlbC5zb3J0aW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUxvYWRlcldpdGhDYWxsYmFjazxUPigkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlVcmw6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAocGFnZTogSVBhZ2U8VD4pID0+IGFuZ3VsYXIuSVByb21pc2U8SVBhZ2U8VD4+KTogKG06IElHcmlkTW9kZWw8VD4pID0+IGFuZ3VsYXIuSVByb21pc2U8SVBhZ2U8VD4+IHtcclxuICAgICAgICB2YXIgaHR0cEdyaWRTZXJ2aWNlID0gSHR0cEdyaWRTZXJ2aWNlLmdyaWQoJGh0dHAsIGFwaVVybCk7XHJcbiAgICAgICAgcmV0dXJuIG1vZGVsID0+IGh0dHBHcmlkU2VydmljZS5nZXRJdGVtcyhtb2RlbC5jdXJyZW50UGFnZSwgbW9kZWwucGFnZVNpemUsIG1vZGVsLmZpbHRlciwgbW9kZWwuc29ydGluZylcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSVBhZ2U8VD4pID0+IGNhbGxiYWNrKHJlc3VsdCkpO1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGludGVyZmFjZSBJTm90aWZpZXJEaXNwbGF5TWV0aG9kIHtcclxuICAgIChtZXNzYWdlOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nLCBvdmVycmlkZXM/OiBUb2FzdHJPcHRpb25zKTogSlF1ZXJ5O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTm90aWZpZXIge1xyXG4gICAgcHVibGljIHN1Y2Nlc3M6IElOb3RpZmllckRpc3BsYXlNZXRob2QgPSB0aGlzLmdldE5vdGlmaWVyRGlzcGxheU1ldGhvZCh0b2FzdHIuc3VjY2Vzcyk7XHJcbiAgICBwdWJsaWMgZXJyb3I6IElOb3RpZmllckRpc3BsYXlNZXRob2QgPSB0aGlzLmdldE5vdGlmaWVyRGlzcGxheU1ldGhvZCh0b2FzdHIuZXJyb3IpO1xyXG4gICAgcHVibGljIHdhcm5pbmc6IElOb3RpZmllckRpc3BsYXlNZXRob2QgPSB0aGlzLmdldE5vdGlmaWVyRGlzcGxheU1ldGhvZCh0b2FzdHIud2FybmluZyk7XHJcbiAgICBwdWJsaWMgZXJyb3JXaXRoUmVmOiBJTm90aWZpZXJEaXNwbGF5TWV0aG9kID0gdGhpcy5nZXRIVE1MTm90aWZpZXJEaXNwbGF5TWV0aG9kKHRvYXN0ci5lcnJvcik7XHJcblxyXG4gICAgcHJpdmF0ZSBnZXROb3RpZmllckRpc3BsYXlNZXRob2QodG9hc3RyRGlzcGxheU1ldGhvZDogVG9hc3RyRGlzcGxheU1ldGhvZCk6IElOb3RpZmllckRpc3BsYXlNZXRob2Qge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBvdmVycmlkZXM6IFRvYXN0ck9wdGlvbnMpOiBKUXVlcnkge1xyXG4gICAgICAgICAgICBpZiAobWVzc2FnZSAhPSB1bmRlZmluZWQgJiYgdGl0bGUgPT0gdW5kZWZpbmVkICYmIG92ZXJyaWRlcyA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0b2FzdHJEaXNwbGF5TWV0aG9kKHMuZXNjYXBlSFRNTChtZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkICYmIHRpdGxlICE9IHVuZGVmaW5lZCAmJiBvdmVycmlkZXMgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9hc3RyRGlzcGxheU1ldGhvZChzLmVzY2FwZUhUTUwobWVzc2FnZSksIHMuZXNjYXBlSFRNTCh0aXRsZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtZXNzYWdlICE9IHVuZGVmaW5lZCAmJiB0aXRsZSAhPSB1bmRlZmluZWQgJiYgb3ZlcnJpZGVzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvYXN0ckRpc3BsYXlNZXRob2Qocy5lc2NhcGVIVE1MKG1lc3NhZ2UpLCBzLmVzY2FwZUhUTUwodGl0bGUpLCBvdmVycmlkZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0SFRNTE5vdGlmaWVyRGlzcGxheU1ldGhvZCh0b2FzdHJEaXNwbGF5TWV0aG9kOiBUb2FzdHJEaXNwbGF5TWV0aG9kKTogSU5vdGlmaWVyRGlzcGxheU1ldGhvZCB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIG92ZXJyaWRlczogVG9hc3RyT3B0aW9ucyk6IEpRdWVyeSB7XHJcbiAgICAgICAgICAgIGlmIChtZXNzYWdlICE9IHVuZGVmaW5lZCAmJiB0aXRsZSA9PSB1bmRlZmluZWQgJiYgb3ZlcnJpZGVzID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvYXN0ckRpc3BsYXlNZXRob2QobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkICYmIHRpdGxlICE9IHVuZGVmaW5lZCAmJiBvdmVycmlkZXMgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9hc3RyRGlzcGxheU1ldGhvZChtZXNzYWdlLCBzLmVzY2FwZUhUTUwodGl0bGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWVzc2FnZSAhPSB1bmRlZmluZWQgJiYgdGl0bGUgIT0gdW5kZWZpbmVkICYmIG92ZXJyaWRlcyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0b2FzdHJEaXNwbGF5TWV0aG9kKG1lc3NhZ2UsIHMuZXNjYXBlSFRNTCh0aXRsZSksIG92ZXJyaWRlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcHVibGljIGNvbW1vbkVycm9yKHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAvLyB0aGlzIGVycm9ycyBhcmUgaGFuZGxlZCBieSBpbnRlcmNlcHRvciwgaWdub3JlIGhlcmVcclxuICAgICAgICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAzXHJcbiAgICAgICAgICAgIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0IHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNTAwIHx8XHJcbiAgICAgICAgICAgIChyZXNwb25zZS5zdGF0dXMgPT09IDQwOVxyXG4gICAgICAgICAgICAmJiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PT0gXCJJbnZhbGlkU3RhdGVcIiB8fCByZXNwb25zZS5kYXRhLmVycm9yID09PSBcIk9wdGltaXN0aWNMb2NrXCIpKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgbGV0IG1zZzogc3RyaW5nID0gXCJTZXJ2ZXIgc2lkZSBlcnJvci4gVHJ5IHRvIGZpeCBkYXRhIGFuZCByZXBlYXQgb3BlcmF0aW9uLlwiO1xyXG4gICAgICAgIGlmIChyZXNwb25zZURhdGEgJiYgcmVzcG9uc2VEYXRhLnBhdGggJiYgcmVzcG9uc2VEYXRhLmVycm9yKSB7IC8vIHZhbGlkYXRpb24gZXhjZXB0aW9uXHJcbiAgICAgICAgICAgIG1zZyArPSBcIjogXCIgKyByZXNwb25zZURhdGEubWVzc2FnZSArIFwiIFwiICsgcmVzcG9uc2VEYXRhLnBhdGg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlRGF0YSAmJiByZXNwb25zZURhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIG1zZyArPSBcIiBcIiArIFwiRXJyb3Iga2V5OiBcIiArIHJlc3BvbnNlRGF0YS5lcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VEYXRhICYmIHJlc3BvbnNlRGF0YS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBtc2cgKz0gXCIgXCIgKyBcIkVycm9yIG1lc3NhZ2U6IFwiICsgcmVzcG9uc2VEYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lcnJvcihtc2cpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIG5vdGlmaWVyOiBOb3RpZmllciA9IG5ldyBOb3RpZmllcigpOyIsImV4cG9ydCBlbnVtIFBhZ2VNb2RlIHtcclxuICAgIEVOVFJJRVNfQU5EX1RPVEFMLFxyXG4gICAgRU5UUklFU19BTkRfVE9UQUxfRVNUSU1BVEVTLFxyXG4gICAgRU5UUklFUyxcclxuICAgIFRPVEFMXHJcbn0iLCJleHBvcnQgZW51bSBSZWZlcmVuY2VkT2JqZWN0VHlwZSB7XHJcbiAgICBNQVRFUklBTCxcclxuICAgIENPVVJTRSxcclxuICAgIFBMQVlMSVNULFxyXG4gICAgTkVXUyxcclxuICAgIENPTU1FTlQsXHJcbiAgICBRVUlaLFxyXG4gICAgQVNTRVNTTUVOVCxcclxuICAgIExFQVJOSU5HX1BBVEgsXHJcbiAgICBTRUNUSU9OLFxyXG4gICAgU0VTU0lPTixcclxuICAgIElMVF9TRVNTSU9OLFxyXG4gICAgTFBfQ09VUlNFXHJcbn0iLCJleHBvcnQgZW51bSBTb3J0T3JkZXIge1xyXG4gICAgQVNDLFxyXG4gICAgREVTQ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU29ydEVudHJ5IHtcclxuICAgIHB1YmxpYyBmaWVsZE5hbWU6IHN0cmluZztcclxuICAgIHB1YmxpYyBzb3J0T3JkZXI6IFNvcnRPcmRlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihmaWVsZE5hbWU6IHN0cmluZywgc29ydE9yZGVyOiBTb3J0T3JkZXIpIHtcclxuICAgICAgICB0aGlzLmZpZWxkTmFtZSA9IGZpZWxkTmFtZTtcclxuICAgICAgICB0aGlzLnNvcnRPcmRlciA9IHNvcnRPcmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmV2ZXJzZU9yZGVyKCkge1xyXG4gICAgICAgIHRoaXMuc29ydE9yZGVyID0gdGhpcy5zb3J0T3JkZXIgPT0gU29ydE9yZGVyLkFTQyA/IFNvcnRPcmRlci5ERVNDIDogU29ydE9yZGVyLkFTQztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGFzYyhmaWVsZE5hbWU6IHN0cmluZyk6IFNvcnRFbnRyeSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTb3J0RW50cnkoZmllbGROYW1lLCBTb3J0T3JkZXIuQVNDKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGRlc2MoZmllbGROYW1lOiBzdHJpbmcpOiBTb3J0RW50cnkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU29ydEVudHJ5KGZpZWxkTmFtZSwgU29ydE9yZGVyLkRFU0MpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCBJV2luZG93U2VydmljZSA9IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2U7XHJcbmltcG9ydCB7SW5mb1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvSW5mb1JvdXRlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImluZm8uQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudExvY2FsZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJGFuY2hvclNjcm9sbFwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIEluZm9Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRhbmNob3JTY3JvbGw6IGFuZ3VsYXIuSUFuY2hvclNjcm9sbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgJHdpbmRvdzogSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgaW5mb1JvdXRlcjogSW5mb1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFDQ0VTU0lCSUxJVFlfTElOS19LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiQWNjZXNzaWJpbGl0eVwiKS51cGRhdGUoKTtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2FsZSA9IGRhdGEubG9jYWxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzY3JvbGxUb0Nvb2tpZVRhYmxlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi5oYXNoKCdjb29raWVUYWJsZXMnKTtcclxuICAgICAgICB0aGlzLiRhbmNob3JTY3JvbGwoKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7QUlTZXJ2aWNlfSBmcm9tIFwiLi9BSVNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCB2YXIgQUlNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJhaVwiLCBbXSlcclxuICAgIC5zZXJ2aWNlKEFJU2VydmljZS5OQU1FLCBBSVNlcnZpY2UpOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQUlTdWJ0b3BpY3NSZXN1bHR9IGZyb20gXCIuL21vZGVscy9JQUlTdWJ0b3BpY3NSZXN1bHRcIjtcclxuaW1wb3J0IHtJQUlQYXJhZ3JhcGhSZXN1bHR9IGZyb20gXCIuL21vZGVscy9JQUlQYXJhZ3JhcGhSZXN1bHRcIjtcclxuaW1wb3J0IHtJQUlRdW90ZVJlc3VsdH0gZnJvbSBcIi4vbW9kZWxzL0lBSVF1b3RlUmVzdWx0XCI7XHJcbmltcG9ydCB7SUFJUXVlc3Rpb25SZXN1bHR9IGZyb20gXCIuL21vZGVscy9JQUlRdWVzdGlvblJlc3VsdFwiO1xyXG5pbXBvcnQge0lBSVN1YnBhcmFncmFwaFJlc3VsdH0gZnJvbSBcIi4vbW9kZWxzL0lBSVN1YnBhcmFncmFwaFJlc3VsdFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFJU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImFpLkFJU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2VuZXJhdGVTdWJ0b3BpY3MoY291cnNlSWQ6IG51bWJlciwgc3VidG9waWNzQ291bnQ6IG51bWJlciwgdG9waWM6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUFJU3VidG9waWNzUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9haS9jb21wbGV0aW9ucy9zdWJ0b3BpY3NcIikuc2VydmljZSgpLCB7IGNvdXJzZUlkOiBjb3Vyc2VJZCwgc3VidG9waWNzQ291bnQ6IHN1YnRvcGljc0NvdW50LCB0b3BpYzogdG9waWMgfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2VuZXJhdGVQYXJhZ3JhcGgoY291cnNlSWQ6IG51bWJlciwgdG9waWM6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUFJUGFyYWdyYXBoUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9haS9jb21wbGV0aW9ucy9wYXJhZ3JhcGhcIikuc2VydmljZSgpLCB7IGNvdXJzZUlkOiBjb3Vyc2VJZCwgdG9waWM6IHRvcGljIH0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdlbmVyYXRlU3VicGFyYWdyYXBoKGNvdXJzZUlkOiBudW1iZXIsIHRvcGljOiBzdHJpbmcsIHN1YnRvcGljOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElBSVN1YnBhcmFncmFwaFJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvYWkvY29tcGxldGlvbnMvc3VicGFyYWdyYXBoXCIpLnNlcnZpY2UoKSwgeyBjb3Vyc2VJZDogY291cnNlSWQsIHRvcGljOiB0b3BpYywgc3VidG9waWM6IHN1YnRvcGljIH0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdlbmVyYXRlUXVvdGUoY291cnNlSWQ6IG51bWJlciwgdG9waWM6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUFJUXVvdGVSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2FpL2NvbXBsZXRpb25zL3F1b3RlXCIpLnNlcnZpY2UoKSwgeyBjb3Vyc2VJZDogY291cnNlSWQsIHRvcGljOiB0b3BpYyB9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZW5lcmF0ZVF1ZXN0aW9uKGNvdXJzZUlkOiBudW1iZXIsIHRvcGljOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElBSVF1ZXN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9haS9jb21wbGV0aW9ucy9xdWVzdGlvblwiKS5zZXJ2aWNlKCksIHsgY291cnNlSWQ6IGNvdXJzZUlkLCB0b3BpYzogdG9waWMgfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuL3JlZmVyZW5jZXMudHNcIiAvPlxyXG5cclxuaW1wb3J0IHtJQ29tbW9uUm9vdFNjb3BlfSBmcm9tIFwiLi9jb21tb24vSUNvbW1vblJvb3RTY29wZVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuL3V0aWxzL0FwcFByb3BlcnRpZXNcIjtcclxuaW1wb3J0IHtFdmVudCBhcyBDb21wb25lbnRzRXZlbnRzfSBmcm9tIFwiLi9jb21wb25lbnRzL21vZGVscy9FdmVudFwiXHJcbmltcG9ydCB7VmhzRW1iZWRkZWRNYXRlcmlhbENvbnRyb2xsZXJ9IGZyb20gXCIuL2NvbXBvbmVudHMvVmhzRW1iZWRkZWRNYXRlcmlhbERpcmVjdGl2ZVwiXHJcbmltcG9ydCB7VmhzRW1iZWRkZWRCdW5kbGVDb250cm9sbGVyfSBmcm9tIFwiLi9jb21wb25lbnRzL3JpY2h0ZXh0L1Zoc0VtYmVkZGVkQnVuZGxlRGlyZWN0aXZlXCJcclxuaW1wb3J0IHtWaHNTYW5kYm94Q29udHJvbGxlcn0gZnJvbSBcIi4vY29tcG9uZW50cy9yaWNodGV4dC9WaHNTYW5kYm94RGlyZWN0aXZlXCJcclxuaW1wb3J0IHtWaHNEb3dubG9hZEJ1bmRsZUNvbnRyb2xsZXJ9IGZyb20gXCIuL2NvbXBvbmVudHMvcmljaHRleHQvVmhzRG93bmxvYWRCdW5kbGVEaXJlY3RpdmVcIlxyXG5pbXBvcnQge1JpY2hUZXh0RWRpdG9yQ29udHJvbGxlcn0gZnJvbSBcIi4vY29tcG9uZW50cy9yaWNodGV4dC9SaWNoVGV4dEVkaXRvckRpcmVjdGl2ZVwiXHJcbmltcG9ydCB7SVRleHRBbmd1bGFyRXZlbnREYXRhfSBmcm9tIFwiLi9jb21wb25lbnRzL21vZGVscy9JVGV4dEFuZ3VsYXJFdmVudERhdGFcIlxyXG5cclxuaW1wb3J0IHtBdXRoTW9kdWxlfSBmcm9tIFwiLi9hdXRoL0F1dGhNb2R1bGVcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0xvZ09uQ29udHJvbGxlcn0gZnJvbSBcIi4vYXV0aC9Mb2dPbkNvbnRyb2xsZXJcIjtcclxuXHJcbmltcG9ydCB7QXV0aENvcmVNb2R1bGV9IGZyb20gXCIuL2F1dGhjb3JlL0F1dGhDb3JlTW9kdWxlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi9hdXRoY29yZS9BdXRoUmVkaXJlY3RcIjtcclxuXHJcbmltcG9ydCB7Q29tcG9uZW50c01vZHVsZX0gIGZyb20gXCIuL2NvbXBvbmVudHMvQ29tcG9uZW50c01vZHVsZVwiO1xyXG5cclxuaW1wb3J0IHtIdHRwTW9kdWxlfSBmcm9tIFwiLi9odHRwL0h0dHBNb2R1bGVcIjtcclxuXHJcbmltcG9ydCB7SW5mcmFzdHJ1Y3R1cmVNb2R1bGV9IGZyb20gXCIuL2luZnJhc3RydWN0dXJlL0luZnJhc3RydWN0dXJlTW9kdWxlXCI7XHJcbmltcG9ydCB7U3RvcmFnZVdyYXBwZXIsIFN0b3JhZ2VzfSBmcm9tIFwiLi9pbmZyYXN0cnVjdHVyZS9TdG9yYWdlXCI7XHJcblxyXG5pbXBvcnQge01haW5Nb2R1bGV9IGZyb20gXCIuL21haW4vTWFpbk1vZHVsZVwiO1xyXG5cclxuaW1wb3J0IHtOZXdzTW9kdWxlfSBmcm9tIFwiLi9uZXdzL05ld3NNb2R1bGVcIjtcclxuXHJcbmltcG9ydCB7SW5mb01vZHVsZX0gZnJvbSBcIi4vaW5mby9JbmZvTW9kdWxlXCI7XHJcblxyXG5pbXBvcnQge1BlcnNvbmFsTW9kdWxlfSBmcm9tIFwiLi9wZXJzb25hbC9QZXJzb25hbE1vZHVsZVwiO1xyXG5cclxuaW1wb3J0IHtTdGF0aXN0aWNzTW9kdWxlfSBmcm9tIFwiLi9zdGF0aXN0aWNzL1N0YXRpc3RpY3NNb2R1bGVcIjtcclxuXHJcbmltcG9ydCB7TWF0ZXJpYWxzTW9kdWxlfSBmcm9tIFwiLi9tYXRlcmlhbHMvTWF0ZXJpYWxzTW9kdWxlXCI7XHJcblxyXG5pbXBvcnQge1JlZmVyZW5jZU1vZHVsZX0gZnJvbSBcIi4vcmVmZXJlbmNlL1JlZmVyZW5jZU1vZHVsZVwiO1xyXG5cclxuaW1wb3J0IHtTZWN1cml0eU1vZHVsZX0gZnJvbSBcIi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuXHJcbmltcG9ydCB7U2V0dGluZ3NNb2R1bGV9IGZyb20gXCIuL3NldHRpbmdzL1NldHRpbmdzTW9kdWxlXCI7XHJcblxyXG5pbXBvcnQge1VybHNNb2R1bGV9IGZyb20gXCIuL3VybHMvVXJsc01vZHVsZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2VQcm92aWRlcn0gZnJvbSBcIi4vdXJscy9VcmxTZXJ2aWNlUHJvdmlkZXJcIjtcclxuXHJcbmltcG9ydCB7VXNlcnNNb2R1bGV9IGZyb20gXCIuL3VzZXJzL1VzZXJzTW9kdWxlXCI7XHJcblxyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi9JTm90aWZpZXJcIjtcclxuXHJcbmltcG9ydCB7QnVuZGxlc01vZHVsZX0gZnJvbSBcIi4vYnVuZGxlcy9CdW5kbGVzTW9kdWxlXCI7XHJcblxyXG5pbXBvcnQge0NvdXJzZXNNb2R1bGV9IGZyb20gXCIuL2NvdXJzZXMvQ291cnNlc01vZHVsZVwiO1xyXG5cclxuaW1wb3J0IHtGaW5hbmNlc01vZHVsZX0gZnJvbSBcIi4vZmluYW5jZXMvRmluYW5jZXNNb2R1bGVcIlxyXG5cclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCIuL2NvbW1vbi9Db21tb25Nb2R1bGVcIjtcclxuXHJcbmltcG9ydCB7U3RvcmFnZU1vZHVsZX0gZnJvbSBcIi4vc3RvcmFnZS9TdG9yYWdlTW9kdWxlXCI7XHJcblxyXG5pbXBvcnQge1F1aXp6ZXNNb2R1bGV9IGZyb20gXCIuL3F1aXp6ZXMvUXVpenplc01vZHVsZVwiO1xyXG5cclxuaW1wb3J0IHtMb2dzTW9kdWxlfSBmcm9tIFwiLi9sb2dzL0xvZ3NNb2R1bGVcIjtcclxuaW1wb3J0IHtVdGlsc01vZHVsZX0gZnJvbSBcIi4vdXRpbHMvVXRpbHNNb2R1bGVcIjtcclxuXHJcbmltcG9ydCB7TWFpblJvdXRlcn0gZnJvbSBcIi4vdXJscy9NYWluUm91dGVyXCI7XHJcbmltcG9ydCB7TmV3c1JvdXRlcn0gZnJvbSBcIi4vdXJscy9OZXdzUm91dGVyXCI7XHJcbmltcG9ydCB7SW5mb1JvdXRlcn0gZnJvbSBcIi4vdXJscy9JbmZvUm91dGVyXCI7XHJcbmltcG9ydCB7QXV0aFJvdXRlcn0gZnJvbSBcIi4vdXJscy9BdXRoUm91dGVyXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlUm91dGVyfSAgZnJvbSBcIi4vdXJscy9SZWZlcmVuY2VSb3V0ZXJcIjtcclxuaW1wb3J0IHtTeXN0ZW1TZXR0aW5nc1JvdXRlcn0gZnJvbSBcIi4vdXJscy9TeXN0ZW1TZXR0aW5nc1JvdXRlclwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY3NSb3V0ZXJ9IGZyb20gXCIuL3VybHMvU3RhdGlzdGljc1JvdXRlclwiO1xyXG5pbXBvcnQge1VzZXJzUm91dGVyfSBmcm9tIFwiLi91cmxzL1VzZXJzUm91dGVyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi91cmxzL01hdGVyaWFsc1JvdXRlclwiO1xyXG5pbXBvcnQge0ZpbmFuY2VzUm91dGVyfSBmcm9tIFwiLi91cmxzL0ZpbmFuY2VzUm91dGVyXCI7XHJcbmltcG9ydCB7UGVyc29uYWxSb3V0ZXJ9IGZyb20gXCIuL3VybHMvUGVyc29uYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb21tb25Sb3V0ZXJ9IGZyb20gXCIuL3VybHMvQ29tbW9uUm91dGVyXCI7XHJcbmltcG9ydCB7UXVpenplc1JvdXRlcn0gZnJvbSBcIi4vdXJscy9RdWl6emVzUm91dGVyXCI7XHJcbmltcG9ydCB7TG9nc1JvdXRlcn0gZnJvbSBcIi4vdXJscy9Mb2dzUm91dGVyXCI7XHJcblxyXG5pbXBvcnQge0h0dHBJbnRlcmNlcHRvcn0gZnJvbSBcIi4vaHR0cC9IdHRwSW50ZXJjZXB0b3JcIjtcclxuaW1wb3J0IElRU2VydmljZSA9IGFuZ3VsYXIuSVFTZXJ2aWNlO1xyXG5pbXBvcnQgSVRpbWVvdXRTZXJ2aWNlID0gYW5ndWxhci5JVGltZW91dFNlcnZpY2U7XHJcbmltcG9ydCB7Sm9ic01vZHVsZX0gZnJvbSBcIi4vam9icy9Kb2JzTW9kdWxlXCI7XHJcbmltcG9ydCB7Sm9ic1JvdXRlcn0gZnJvbSBcIi4vdXJscy9Kb2JzUm91dGVyXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXJ9IGZyb20gXCIuL3VybHMvQ2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzTW9kdWxlfSBmcm9tIFwiLi9sZWFybmluZ1BhdGhzL0xlYXJuaW5nUGF0aHNNb2R1bGVcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50c01vZHVsZX0gZnJvbSBcIi4vcGVyc29uYWwvQXNzZXNzbWVudHNNb2R1bGVcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50c1JvdXRlcn0gZnJvbSBcIi4vdXJscy9Bc3Nlc3NtZW50c1JvdXRlclwiO1xyXG5pbXBvcnQge1BvbGljaWVzTW9kdWxlfSBmcm9tIFwiLi9wb2xpY2llcy9Qb2xpY2llc01vZHVsZVwiO1xyXG5pbXBvcnQge1BvbGljaWVzUm91dGVyfSBmcm9tIFwiLi91cmxzL1BvbGljaWVzUm91dGVyXCI7XHJcbmltcG9ydCB7Tm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyfSBmcm9tIFwiLi91cmxzL05vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlclwiO1xyXG5pbXBvcnQge05vdGlmaWNhdGlvbk1vZHVsZX0gZnJvbSBcIi4vbm90aWZpY2F0aW9uVGVtcGxhdGVzL05vdGlmaWNhdGlvbk1vZHVsZVwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNNb2R1bGV9IGZyb20gXCIuL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c01vZHVsZVwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNSb3V0ZXJ9IGZyb20gXCIuL3VybHMvQnVzaW5lc3NVbml0c1JvdXRlclwiO1xyXG5pbXBvcnQge1BheVBhbE1vZHVsZX0gZnJvbSBcIi4vaW50ZWdyYXRpb24vcGF5cGFsL1BheXBhbE1vZHVsZVwiO1xyXG5pbXBvcnQge1BheVBhbFJvdXRlcn0gZnJvbSBcIi4vdXJscy9QYXlQYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0ltcG9ydEV4cG9ydE1vZHVsZX0gZnJvbSBcIi4vaW1wb3J0RXhwb3J0L0ltcG9ydEV4cG9ydE1vZHVsZVwiO1xyXG5pbXBvcnQge0ltcG9ydFJvdXRlcn0gZnJvbSBcIi4vdXJscy9JbXBvcnRSb3V0ZXJcIjtcclxuaW1wb3J0IHtFeHBvcnRSb3V0ZXJ9IGZyb20gXCIuL3VybHMvRXhwb3J0Um91dGVyXCI7XHJcbmltcG9ydCB7RXh0ZXJuYWxSZXNvdXJjZXNNb2R1bGV9IGZyb20gXCIuL2V4dGVybmFsL0V4dGVybmFsUmVzb3VyY2VzTW9kdWxlXCI7XHJcbmltcG9ydCB7RXh0ZXJuYWxSZXNvdXJjZXNSb3V0ZXJ9IGZyb20gXCIuL3VybHMvRXh0ZXJuYWxSZXNvdXJjZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtBenVyZUNvZ25pdGl2ZVNlcnZpY2VzTW9kdWxlfSBmcm9tIFwiLi9pbnRlZ3JhdGlvbi9henVyZUNvZ25pdGl2ZVNlcnZpY2VzL0F6dXJlQ29nbml0aXZlU2VydmljZXNNb2R1bGVcIjtcclxuaW1wb3J0IHtWaHNVc2VyTm90ZURpcmVjdGl2ZUNvbnRyb2xsZXJ9IGZyb20gXCIuL2NvbXBvbmVudHMvcmljaHRleHQvVmhzVXNlck5vdGVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtIb21lUm91dGVyfSBmcm9tIFwiLi91cmxzL0hvbWVSb3V0ZXJcIjtcclxuaW1wb3J0IHtIb21lTW9kdWxlfSBmcm9tIFwiLi9ob21lL0hvbWVNb2R1bGVcIjtcclxuaW1wb3J0IHtCcmFuZGluZ01vZHVsZX0gZnJvbSBcIi4vYnJhbmRpbmcvQnJhbmRpbmdNb2R1bGVcIjtcclxuaW1wb3J0IHtBdXRob3JpemVOZXRNb2R1bGV9IGZyb20gXCIuL2ludGVncmF0aW9uL2F1dGhvcml6ZW5ldC9BdXRob3JpemVOZXRNb2R1bGVcIjtcclxuaW1wb3J0IHtGcmVlRW5yb2xsbWVudE1vZHVsZX0gZnJvbSBcIi4vaW50ZWdyYXRpb24vZnJlZWVucm9sbG1lbnQvRnJlZUVucm9sbG1lbnRNb2R1bGVcIjtcclxuaW1wb3J0IHtTbGlkZVRlbXBsYXRlc1JvdXRlcn0gZnJvbSBcIi4vdXJscy9TbGlkZVRlbXBsYXRlc1JvdXRlclwiO1xyXG5pbXBvcnQge0dhbWlmaWNhdGlvblJvdXRlcn0gZnJvbSBcIi4vdXJscy9HYW1pZmljYXRpb25Sb3V0ZXJcIjtcclxuaW1wb3J0IHtHYW1pZmljYXRpb25Nb2R1bGV9IGZyb20gXCIuL2dhbWlmaWNhdGlvbi9HYW1pZmljYXRpb25Nb2R1bGVcIjtcclxuaW1wb3J0IHtBSU1vZHVsZX0gZnJvbSBcIi4vYWkvQUlNb2R1bGVcIjtcclxuaW1wb3J0IHsgQXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrTW9kdWxlIH0gZnJvbSBcIi4vaW50ZWdyYXRpb24vYXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrL0F6dXJlV2ViY2hhdEJvdGZyYW1ld29ya01vZHVsZVwiO1xyXG5cclxuYW5ndWxhci5tb2R1bGUoXCJ2aHNcIiwgW1xyXG4gICAgXCJuZ1JvdXRlXCIsXHJcbiAgICBcIm5nQW5pbWF0ZVwiLFxyXG4gICAgXCJuZ1Nhbml0aXplXCIsXHJcbiAgICBcIm5nRmlsZVVwbG9hZFwiLFxyXG4gICAgXCJuZ051bWVyYWxqc1wiLFxyXG4gICAgXCJ1aS5jaGFydFwiLFxyXG4gICAgXCJ1aS5zZWxlY3RcIixcclxuICAgIFwiZHVTY3JvbGxcIixcclxuICAgIFwidGV4dEFuZ3VsYXJcIixcclxuICAgIFwidGltZXJcIixcclxuICAgIFwiZG5kTGlzdHNcIixcclxuICAgIFwiaW5maW5pdGUtc2Nyb2xsXCIsXHJcbiAgICBDb21tb25Nb2R1bGUubmFtZSxcclxuICAgIEF1dGhNb2R1bGUubmFtZSxcclxuICAgIEF1dGhDb3JlTW9kdWxlLm5hbWUsXHJcbiAgICBVcmxzTW9kdWxlLm5hbWUsXHJcbiAgICBTZWN1cml0eU1vZHVsZS5uYW1lLFxyXG4gICAgSW5mcmFzdHJ1Y3R1cmVNb2R1bGUubmFtZSxcclxuICAgIEh0dHBNb2R1bGUubmFtZSxcclxuICAgIENvbXBvbmVudHNNb2R1bGUubmFtZSxcclxuICAgIFN0YXRpc3RpY3NNb2R1bGUubmFtZSxcclxuICAgIFJlZmVyZW5jZU1vZHVsZS5uYW1lLFxyXG4gICAgVXNlcnNNb2R1bGUubmFtZSxcclxuICAgIFNldHRpbmdzTW9kdWxlLm5hbWUsXHJcbiAgICBMb2dzTW9kdWxlLm5hbWUsXHJcbiAgICBKb2JzTW9kdWxlLm5hbWUsXHJcbiAgICBNYWluTW9kdWxlLm5hbWUsXHJcbiAgICBNYXRlcmlhbHNNb2R1bGUubmFtZSxcclxuICAgIE5ld3NNb2R1bGUubmFtZSxcclxuICAgIEluZm9Nb2R1bGUubmFtZSxcclxuICAgIFBlcnNvbmFsTW9kdWxlLm5hbWUsXHJcbiAgICBCdW5kbGVzTW9kdWxlLm5hbWUsXHJcbiAgICBDb3Vyc2VzTW9kdWxlLm5hbWUsXHJcbiAgICBMZWFybmluZ1BhdGhzTW9kdWxlLm5hbWUsXHJcbiAgICBGaW5hbmNlc01vZHVsZS5uYW1lLFxyXG4gICAgU3RvcmFnZU1vZHVsZS5uYW1lLFxyXG4gICAgUXVpenplc01vZHVsZS5uYW1lLFxyXG4gICAgVXRpbHNNb2R1bGUubmFtZSxcclxuICAgIEFzc2Vzc21lbnRzTW9kdWxlLm5hbWUsXHJcbiAgICBQb2xpY2llc01vZHVsZS5uYW1lLFxyXG4gICAgQnVzaW5lc3NVbml0c01vZHVsZS5uYW1lLFxyXG4gICAgUGF5UGFsTW9kdWxlLm5hbWUsXHJcbiAgICBOb3RpZmljYXRpb25Nb2R1bGUubmFtZSxcclxuICAgIEltcG9ydEV4cG9ydE1vZHVsZS5uYW1lLFxyXG4gICAgRXh0ZXJuYWxSZXNvdXJjZXNNb2R1bGUubmFtZSxcclxuICAgIEF6dXJlQ29nbml0aXZlU2VydmljZXNNb2R1bGUubmFtZSxcclxuICAgIEF6dXJlV2ViY2hhdEJvdGZyYW1ld29ya01vZHVsZS5uYW1lLFxyXG4gICAgSG9tZU1vZHVsZS5uYW1lLFxyXG4gICAgQnJhbmRpbmdNb2R1bGUubmFtZSxcclxuICAgIEdhbWlmaWNhdGlvbk1vZHVsZS5uYW1lLFxyXG4gICAgQXV0aG9yaXplTmV0TW9kdWxlLm5hbWUsXHJcbiAgICBGcmVlRW5yb2xsbWVudE1vZHVsZS5uYW1lLFxyXG4gICAgR2FtaWZpY2F0aW9uTW9kdWxlLm5hbWUsXHJcbiAgICBBdXRob3JpemVOZXRNb2R1bGUubmFtZSxcclxuICAgIEFJTW9kdWxlLm5hbWVcclxuXSkuY29uZmlnKFtcclxuICAgIFwiJHJvdXRlUHJvdmlkZXJcIixcclxuICAgIFwiJGxvZ1Byb3ZpZGVyXCIsXHJcbiAgICBcIiRodHRwUHJvdmlkZXJcIixcclxuICAgIFVybFNlcnZpY2VQcm92aWRlci5OQU1FLFxyXG4gICAgY29uZmlndXJhdGlvblxyXG5dKS5jb25maWcoW1xyXG4gICAgXCIkcHJvdmlkZVwiLFxyXG4gICAgdGhpcmRQYXJ0eUNvbmZpZ3VyYXRpb25cclxuXSkucnVuKFtcclxuICAgIFwiJGxvZ1wiLFxyXG4gICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICBcIiRxXCIsXHJcbiAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAnJHJvdXRlJyxcclxuICAgICckbG9jYXRpb24nLFxyXG4gICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICBBdXRoUmVkaXJlY3QuTkFNRSxcclxuICAgIFN0b3JhZ2VzLkxPQ0FMX05BTUUsXHJcbiAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRSxcclxuICAgIHJ1blxyXG5dKTtcclxuXHJcbndpbmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgaWYgKCQoXCIjdXBsb2Fkcy1zdGF0dXNcIikubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgIGxldCBtZXNzYWdlID0gXCJVcGxvYWRpbmcgb2YgZmlsZXMgd2lsbCBiZSBjYW5jZWxlZCBpZiB5b3UgbGVhdmUgdGhpcyBwYWdlXCI7XHJcbiAgICBpZiAodHlwZW9mIGV2ZW50ID09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICBldmVudCA9IHdpbmRvdy5ldmVudDtcclxuICAgIH1cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gbWVzc2FnZTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXNzYWdlO1xyXG59O1xyXG5cclxuLy8gVXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nLlxyXG4vLyBOb3RlIG9ubHkgcHJvdmlkZXJzIGNhbiBiZSBpbmplY3RlZCBhcyBkZXBlbmRlbmNpZXMgaGVyZS5cclxuZnVuY3Rpb24gY29uZmlndXJhdGlvbigkcm91dGVQcm92aWRlcjogbmcucm91dGUuSVJvdXRlUHJvdmlkZXIsICRsb2dQcm92aWRlcjogbmcuSUxvZ1Byb3ZpZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICRodHRwUHJvdmlkZXI6IG5nLklIdHRwUHJvdmlkZXIsIHVybFNlcnZpY2VQcm92aWRlcjogVXJsU2VydmljZVByb3ZpZGVyKSB7XHJcbiAgICAvLyBUT0RPOiBFbmFibGUgZGVidWcgbG9nZ2luZyBiYXNlZCBvbiBzZXJ2ZXIgY29uZmlnXHJcbiAgICAvLyBUT0RPOiBDYXB0dXJlIGFsbCBsb2dnZWQgZXJyb3JzIGFuZCBzZW5kIGJhY2sgdG8gc2VydmVyXHJcbiAgICAkbG9nUHJvdmlkZXIuZGVidWdFbmFibGVkKHRydWUpO1xyXG5cclxuICAgIHVybFNlcnZpY2VQcm92aWRlclxyXG4gICAgICAgIC5zZXRTZXJ2aWNlUm9vdChBcHBQcm9wZXJ0aWVzLnNlcnZpY2VSb290KVxyXG4gICAgICAgIC5zZXRCdWlsZFZlcnNpb24oQXBwUHJvcGVydGllcy5idWlsZFZlcnNpb24pO1xyXG5cclxuICAgIC8vIEhhY2tcclxuICAgIGxldCB1cmwgPSB1cmxTZXJ2aWNlUHJvdmlkZXIuJGdldCgpO1xyXG5cclxuICAgICRyb3V0ZVByb3ZpZGVyXHJcbiAgICAgICAgLndoZW4oQ29tbW9uUm91dGVyLm5vdEZvdW5kUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tbW9uL25vdC1mb3VuZC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihNYWluUm91dGVyLm1haW5Sb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJtYWluL2luZGV4Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEF1dGhSb3V0ZXIubG9nb3V0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiYXV0aC9sb2dvdXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQXV0aFJvdXRlci5sb2dvblJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImF1dGgvbG9nb24uaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQXV0aFJvdXRlci5hY2Nlc3NEZW5pZWRSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJhdXRoL2FjY2Vzcy1kZW5pZWQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQXV0aFJvdXRlci5yZXN0b3JlUGFzc3dvcmRSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJhdXRoL3Jlc3RvcmUtcGFzc3dvcmQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQXV0aFJvdXRlci5jaGVja1ZhbGlkQ29kZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImF1dGgvY2hlY2stdmFsaWQtY29kZS5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihBdXRoUm91dGVyLmNyZWF0ZU5ld1Bhc3N3b3JkUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiYXV0aC9jcmVhdGUtbmV3LXBhc3N3b3JkLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKE1hdGVyaWFsc1JvdXRlci5pbmRleFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcIm1hdGVyaWFscy9zZWFyY2guaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oTWF0ZXJpYWxzUm91dGVyLmluZGV4UHVyY2hhc2VkUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibWF0ZXJpYWxzL3NlYXJjaC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihNYXRlcmlhbHNSb3V0ZXIuaW5kZXhQdXJjaGFzZWRPcmRlclJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcIm1hdGVyaWFscy9zZWFyY2guaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oTWF0ZXJpYWxzUm91dGVyLm15RG93bmxvYWRzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibWF0ZXJpYWxzL215RG93bmxvYWRzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKE1hdGVyaWFsc1JvdXRlci5jcmVhdGVSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJtYXRlcmlhbHMvZWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihNYXRlcmlhbHNSb3V0ZXIucGxheWxpc3RzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibWF0ZXJpYWxzL3BsYXlsaXN0cy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihNYXRlcmlhbHNSb3V0ZXIucGxheWxpc3RDcmVhdGVSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJtYXRlcmlhbHMvcGxheWxpc3RFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKE1hdGVyaWFsc1JvdXRlci5wbGF5bGlzdERldGFpbHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJtYXRlcmlhbHMvcGxheWxpc3REZXRhaWxzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKE1hdGVyaWFsc1JvdXRlci5wbGF5bGlzdEVkaXRSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJtYXRlcmlhbHMvcGxheWxpc3RFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKE1hdGVyaWFsc1JvdXRlci5tYXRlcmlhbFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcIm1hdGVyaWFscy9tYXRlcmlhbC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihNYXRlcmlhbHNSb3V0ZXIudXBkYXRlUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibWF0ZXJpYWxzL2VkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oTWF0ZXJpYWxzUm91dGVyLnJlbGF0ZWRQcm9kdWN0c1VwZGF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcIm1hdGVyaWFscy9tYXRlcmlhbFJlbGF0ZWRQcm9kdWN0c0VkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oTWF0ZXJpYWxzUm91dGVyLnBlcm1pc3Npb25zVXBkYXRlUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibWF0ZXJpYWxzL21hdGVyaWFsUGVybWlzc2lvbnNFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFN0YXRpc3RpY3NSb3V0ZXIubWF0ZXJpYWxWaWV3UmVwb3J0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwic3RhdGlzdGljcy9tYXRlcmlhbFZpZXdSZXBvcnQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oU3RhdGlzdGljc1JvdXRlci5tYXRlcmlhbERvd25sb2FkUmVwb3J0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwic3RhdGlzdGljcy9tYXRlcmlhbERvd25sb2FkUmVwb3J0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFN0YXRpc3RpY3NSb3V0ZXIubWF0ZXJpYWxVcGxvYWRSZXBvcnRSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJzdGF0aXN0aWNzL21hdGVyaWFsVXBsb2FkUmVwb3J0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFN0YXRpc3RpY3NSb3V0ZXIucG93ZXJCaVJlcG9ydFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInN0YXRpc3RpY3MvcG93ZXJCaVJlcG9ydC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihQZXJzb25hbFJvdXRlci5jZXJ0aWZpY2F0ZXNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJwZXJzb25hbC9tYWluUGFnZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oUGVyc29uYWxSb3V0ZXIuY3JlZGl0c1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInBlcnNvbmFsL21haW5QYWdlcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihQZXJzb25hbFJvdXRlci5iYWRnZXNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJwZXJzb25hbC9tYWluUGFnZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oUGVyc29uYWxSb3V0ZXIucHVyY2hhc2VkT3JkZXJzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwicGVyc29uYWwvbWFpblBhZ2VzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFBlcnNvbmFsUm91dGVyLnN1YnNjcmlwdGlvbnNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJwZXJzb25hbC9tYWluUGFnZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oUGVyc29uYWxSb3V0ZXIubmV3Q29tbWVudHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJwZXJzb25hbC9tYWluUGFnZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oUGVyc29uYWxSb3V0ZXIuc2V0dGluZ3NSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJwZXJzb25hbC9tYWluUGFnZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oUGVyc29uYWxSb3V0ZXIuc3VwcG9ydFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInBlcnNvbmFsL21haW5QYWdlcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihQZXJzb25hbFJvdXRlci5jYWxlbmRhclJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInBlcnNvbmFsL2NhbGVuZGFyLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEFzc2Vzc21lbnRzUm91dGVyLmFzc2Vzc21lbnRzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiYXNzZXNzbWVudHMvYXNzZXNzbWVudHMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQXNzZXNzbWVudHNSb3V0ZXIuYXNzZXNzbWVudERldGFpbHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJhc3Nlc3NtZW50cy9hc3Nlc3NtZW50RGV0YWlscy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihGaW5hbmNlc1JvdXRlci5wcm9kdWN0c0NhdGFsb2dSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJmaW5hbmNlcy9jYXRhbG9nLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEZpbmFuY2VzUm91dGVyLnByb2R1Y3REZXRhaWxzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiZmluYW5jZXMvcHJvZHVjdERldGFpbHMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oRmluYW5jZXNSb3V0ZXIucHVyY2hhc2VkT3JkZXJSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJmaW5hbmNlcy9wdXJjaGFzZWRPcmRlci5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihGaW5hbmNlc1JvdXRlci5uYWNlUHVyY2hhc2VkT3JkZXJSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJmaW5hbmNlcy9wdXJjaGFzZWRPcmRlci5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihGaW5hbmNlc1JvdXRlci5wdXJjaGFzZWRQcm9kdWN0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiZmluYW5jZXMvcHVyY2hhc2VkUHJvZHVjdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihGaW5hbmNlc1JvdXRlci5vcmRlclByb2R1Y3RzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiZmluYW5jZXMvb3JkZXJQcm9kdWN0cy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihGaW5hbmNlc1JvdXRlci5wcm9kdWN0RWRpdFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImZpbmFuY2VzL3Byb2R1Y3RFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEZpbmFuY2VzUm91dGVyLnJlZmVyZW5jZWRPYmplY3RQcm9kdWN0RWRpdFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImZpbmFuY2VzL3Byb2R1Y3RFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEZpbmFuY2VzUm91dGVyLnByb2R1Y3RBTmV0Q29tbXVuaWNhdG9yUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiZmluYW5jZXMvYXV0aG9yaXplQ29tbXVuaWNhdG9yLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKE5ld3NSb3V0ZXIubmV3c1NlYXJjaFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcIm5ld3MvYWxsTmV3cy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihOZXdzUm91dGVyLm9uZU5ld3NDcmVhdGVSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJuZXdzL2VkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oTmV3c1JvdXRlci5vbmVOZXdzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibmV3cy9vbmVOZXdzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKE5ld3NSb3V0ZXIub25lTmV3c0VkaXRSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJuZXdzL2VkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oTmV3c1JvdXRlci5oZWxwUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibmV3cy9oZWxwLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKE5ld3NSb3V0ZXIuaGVscEVkaXRSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJuZXdzL2VkaXRIZWxwLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEV4dGVybmFsUmVzb3VyY2VzUm91dGVyLnpvb21Sb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJleHRlcm5hbFJlc291cmNlcy96b29tLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEluZm9Sb3V0ZXIuYWJvdXRDb21wYW55Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiaW5mby9hYm91dENvbXBhbnkuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oSW5mb1JvdXRlci5mYXFSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJpbmZvL2ZhcS5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihJbmZvUm91dGVyLmFjY2Vzc2liaWxpdHlSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJhY2Nlc3NpYmlsaXR5L2FjY2Vzc2liaWxpdHkuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oUmVmZXJlbmNlUm91dGVyLmluZGV4Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwicmVmZXJlbmNlL2luZGV4Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFJlZmVyZW5jZVJvdXRlci5lZGl0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwicmVmZXJlbmNlL2VkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oVXNlcnNSb3V0ZXIuaW5kZXhSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJ1c2Vycy9pbmRleC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihVc2Vyc1JvdXRlci5hZGRSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJ1c2Vycy9lZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFVzZXJzUm91dGVyLmVkaXRSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJ1c2Vycy9lZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFVzZXJzUm91dGVyLmN1cnJlbnRQcm9maWxlUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwidXNlcnMvcHJvZmlsZS5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihVc2Vyc1JvdXRlci5ncm91cEluZGV4Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwidXNlcnMvZ3JvdXBzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFVzZXJzUm91dGVyLmdyb3VwQWRkUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwidXNlcnMvZ3JvdXBFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFVzZXJzUm91dGVyLmdyb3VwRWRpdFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInVzZXJzL2dyb3VwRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihVc2Vyc1JvdXRlci5ncm91cE1hbmFnZVBlcm1pc3Npb25zUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwidXNlcnMvZ3JvdXBNYW5hZ2VQZXJtaXNzaW9ucy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihVc2Vyc1JvdXRlci5zdGFydFRyaWFsUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwidXNlcnMvc3RhcnRUcmlhbC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihVc2Vyc1JvdXRlci5zaWduVXBSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJ1c2Vycy9zdGFydFRyaWFsLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFVzZXJzUm91dGVyLm1lcmdlUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwidXNlcnMvbWVyZ2UuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oU3lzdGVtU2V0dGluZ3NSb3V0ZXIuY29tbW9uU2V0dGluZ3NSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJzZXR0aW5ncy9jb21tb25TZXR0aW5ncy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihTeXN0ZW1TZXR0aW5nc1JvdXRlci5zdG9yYWdlUGxhY2VzSW5kZXhSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJzZXR0aW5ncy9zdG9yYWdlUGxhY2VzSW5kZXguaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oU3lzdGVtU2V0dGluZ3NSb3V0ZXIuc3RvcmFnZVBsYWNlQ3JlYXRlUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwic2V0dGluZ3Mvc3RvcmFnZVBsYWNlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihTeXN0ZW1TZXR0aW5nc1JvdXRlci5zdG9yYWdlUGxhY2VFZGl0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwic2V0dGluZ3Mvc3RvcmFnZVBsYWNlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihTeXN0ZW1TZXR0aW5nc1JvdXRlci5zeXN0ZW1TZXR0aW5nc1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInNldHRpbmdzL3N5c3RlbVNldHRpbmdzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFN5c3RlbVNldHRpbmdzUm91dGVyLnN5c3RlbUJ1bmRsZUVkaXRSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJidW5kbGVzL3N5c3RlbUJ1bmRsZUVkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oU3lzdGVtU2V0dGluZ3NSb3V0ZXIuc3lzdGVtU2V0dGluZ3NDb25maWd1cmF0aW9uUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwic2V0dGluZ3Mvc3lzdGVtU2V0dGluZ3MuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oU3lzdGVtU2V0dGluZ3NSb3V0ZXIuc3lzdGVtU2V0dGluZ3NCcmFuZGluZ1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInNldHRpbmdzL3N5c3RlbVNldHRpbmdzQnJhbmRpbmcuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oU3lzdGVtU2V0dGluZ3NSb3V0ZXIuc3lzdGVtU2V0dGluZ3NNZW51SXRlbXNWaXNpYmlsaXR5Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwic2V0dGluZ3Mvc3lzdGVtU2V0dGluZ3NNZW51SXRlbXNWaXNpYmlsaXR5Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKExvZ3NSb3V0ZXIuc3lzdGVtTG9nc1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImxvZ3Mvc3lzdGVtLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKExvZ3NSb3V0ZXIuc2VjdXJpdHlMb2dzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibG9ncy9zZWN1cml0eS5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihHYW1pZmljYXRpb25Sb3V0ZXIuYmFkZ2VUZW1wbGF0ZXNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJnYW1pZmljYXRpb24vYmFkZ2VUZW1wbGF0ZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oR2FtaWZpY2F0aW9uUm91dGVyLmJhZGdlVGVtcGxhdGVFZGl0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiZ2FtaWZpY2F0aW9uL2JhZGdlVGVtcGxhdGVFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEdhbWlmaWNhdGlvblJvdXRlci5iYWRnZXNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJnYW1pZmljYXRpb24vYmFkZ2VzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEdhbWlmaWNhdGlvblJvdXRlci5lZGl0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiZ2FtaWZpY2F0aW9uL2JhZGdlQ3JlYXRlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihHYW1pZmljYXRpb25Sb3V0ZXIuYWN0aW9uQmFkZ2VzRWRpdFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImdhbWlmaWNhdGlvbi9hY3Rpdml0eUJhZGdlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihHYW1pZmljYXRpb25Sb3V0ZXIuYWN0aW9uQmFkZ2VzVmlld1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImdhbWlmaWNhdGlvbi9hY3Rpdml0eUJhZGdlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihHYW1pZmljYXRpb25Sb3V0ZXIuY3JlYXRlUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiZ2FtaWZpY2F0aW9uL2JhZGdlQ3JlYXRlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihKb2JzUm91dGVyLmpvYnNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJqb2JzL2pvYnMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQ291cnNlc1JvdXRlci5pbmRleFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLmluZGV4UHVyY2hhc2VkUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY291cnNlcy9jb3Vyc2VzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKENvdXJzZXNSb3V0ZXIuaW5kZXhQdXJjaGFzZWRPcmRlclJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLmNyZWF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlQ3JlYXRlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLmRldGFpbHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb3Vyc2VzL2RldGFpbHMuaHRtbFwiKSwgcmVsb2FkT25TZWFyY2g6IGZhbHNlfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLnByb2dyZXNzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY291cnNlcy9wcm9ncmVzcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLndlYmluYXJSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb3Vyc2VzL3dlYmluYXJzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKENvdXJzZXNSb3V0ZXIuaWx0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY291cnNlcy9pbHQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQ291cnNlc1JvdXRlci5kaXNjdXNzaW9uUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY291cnNlcy9jb3Vyc2VEaXNjdXNzaW9uLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKENvdXJzZXNSb3V0ZXIuaW5mb1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvaW5mby5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLmVucm9sbG1lbnREZXRhaWxzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY291cnNlcy9lbnJvbGxtZW50RGV0YWlscy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLnVwZGF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlQ3JlYXRlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLmVucm9sbG1lbnRFZGl0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY291cnNlcy9lbnJvbGxtZW50Q3JlYXRlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLnN0cnVjdHVyZVVwZGF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlU3RydWN0dXJlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLnNlY3Rpb25VcGRhdGVSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb3Vyc2VzL2NvdXJzZVN0cnVjdHVyZUVkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQ291cnNlc1JvdXRlci5idW5kbGVVcGRhdGVSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb3Vyc2VzL2NvdXJzZUJ1bmRsZUVkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQ291cnNlc1JvdXRlci5wYXJ0aWNpcGF0aW9uRm9ybVVwZGF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlUGFydGljaXBhdGlvbkZvcm1FZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKENvdXJzZXNSb3V0ZXIubGFuZGluZ1BhZ2VVcGRhdGVSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb3Vyc2VzL2NvdXJzZUxhbmRpbmdQYWdlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLmV4cG9ydEltcG9ydFVwZGF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlRXhwb3J0SW1wb3J0RWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLnJlbGF0ZWRQcm9kdWN0c1VwZGF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlUmVsYXRlZFByb2R1Y3RzRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLnF1aXpEZXRhaWxzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY291cnNlcy9xdWl6RGV0YWlscy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLnBlcm1pc3Npb25zRGVsZWdhdGlvblJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlUGVybWlzc2lvbnNEZWxlZ2F0aW9uLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKENvdXJzZXNSb3V0ZXIuc2VjdGlvbkRldGFpbHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb3Vyc2VzL2RldGFpbHMuaHRtbFwiKSwgcmVsb2FkT25TZWFyY2g6IGZhbHNlfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLnN1cnZleVJlc3VsdHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb3Vyc2VzL3N1cnZleS5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLmZsYXNoY2FyZFJlc3VsdHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb3Vyc2VzL2ZsYXNoY2FyZC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDb3Vyc2VzUm91dGVyLmdhbWlmaWNhdGlvbkRldGFpbFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlR2FtaWZpY2F0aW9uRGV0YWlscy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihMZWFybmluZ1BhdGhzUm91dGVyLmluZGV4Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibGVhcm5pbmdQYXRocy9sZWFybmluZ1BhdGhzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKExlYXJuaW5nUGF0aHNSb3V0ZXIuaW5kZXhQdXJjaGFzZWRSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJsZWFybmluZ1BhdGhzL2xlYXJuaW5nUGF0aHMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oTGVhcm5pbmdQYXRoc1JvdXRlci5pbmRleFB1cmNoYXNlZE9yZGVyUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibGVhcm5pbmdQYXRocy9sZWFybmluZ1BhdGhzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKExlYXJuaW5nUGF0aHNSb3V0ZXIuY3JlYXRlUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibGVhcm5pbmdQYXRocy9sZWFybmluZ1BhdGhDcmVhdGVFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKExlYXJuaW5nUGF0aHNSb3V0ZXIudXBkYXRlUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibGVhcm5pbmdQYXRocy9sZWFybmluZ1BhdGhDcmVhdGVFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKExlYXJuaW5nUGF0aHNSb3V0ZXIuZGV0YWlsc1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImxlYXJuaW5nUGF0aHMvZGV0YWlscy5odG1sXCIpLCByZWxvYWRPblNlYXJjaDogZmFsc2V9KVxyXG4gICAgICAgIC53aGVuKExlYXJuaW5nUGF0aHNSb3V0ZXIucHJvZ3Jlc3NSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJsZWFybmluZ1BhdGhzL2xlYXJuaW5nUGF0aFByb2dyZXNzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKExlYXJuaW5nUGF0aHNSb3V0ZXIucGFydGljaXBhdGlvbkZvcm1VcGRhdGVSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJsZWFybmluZ1BhdGhzL2xlYXJuaW5nUGF0aFBhcnRpY2lwYXRpb25Gb3JtRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihMZWFybmluZ1BhdGhzUm91dGVyLnBhcnRpY2lwYXRpb25Gb3JtRmlsbFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImxlYXJuaW5nUGF0aHMvbGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkZvcm1GaWxsLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKExlYXJuaW5nUGF0aHNSb3V0ZXIucGVybWlzc2lvbnNEZWxlZ2F0aW9uUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibGVhcm5pbmdQYXRocy9sZWFybmluZ1BhdGhQZXJtaXNzaW9uc0RlbGVnYXRpb24uaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oTGVhcm5pbmdQYXRoc1JvdXRlci5yZWxhdGVkUHJvZHVjdHNVcGRhdGVSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJsZWFybmluZ1BhdGhzL2xlYXJuaW5nUGF0aFJlbGF0ZWRQcm9kdWN0c0VkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oTGVhcm5pbmdQYXRoc1JvdXRlci5wZXJtaXNzaW9uc1VwZGF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImxlYXJuaW5nUGF0aHMvbGVhcm5pbmdQYXRoUGVybWlzc2lvbnNFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKExlYXJuaW5nUGF0aHNSb3V0ZXIuZ2FtaWZpY2F0aW9uRGV0YWlsUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwibGVhcm5pbmdQYXRocy9sZWFybmluZ1BhdGhzR2FtaWZpY2F0aW9uRGV0YWlscy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihRdWl6emVzUm91dGVyLmNyZWF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInF1aXp6ZXMvZWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihRdWl6emVzUm91dGVyLnF1aXp6ZXNEZXRhaWxzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwicXVpenplcy9kZXRhaWxzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFF1aXp6ZXNSb3V0ZXIucXVpenplc1VwZGF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInF1aXp6ZXMvZWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihRdWl6emVzUm91dGVyLnF1aXp6ZXNQYXNzaW5nUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwicXVpenplcy9xdWl6UGFzc2luZy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihRdWl6emVzUm91dGVyLnF1aXp6ZXNJbmRleFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInF1aXp6ZXMvcXVpenplcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihRdWl6emVzUm91dGVyLnN1cnZleXNEZXRhaWxzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwicXVpenplcy9kZXRhaWxzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFF1aXp6ZXNSb3V0ZXIuc3VydmV5c1VwZGF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInF1aXp6ZXMvZWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihRdWl6emVzUm91dGVyLnN1cnZleXNQYXNzaW5nUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwicXVpenplcy9xdWl6UGFzc2luZy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihRdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInF1aXp6ZXMvcXVpenplcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihRdWl6emVzUm91dGVyLmZsYXNoY2FyZHNEZXRhaWxzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwicXVpenplcy9kZXRhaWxzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFF1aXp6ZXNSb3V0ZXIuZmxhc2hjYXJkc1VwZGF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInF1aXp6ZXMvZWRpdC5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihRdWl6emVzUm91dGVyLmZsYXNoY2FyZHNQYXNzaW5nUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwicXVpenplcy9xdWl6UGFzc2luZy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihRdWl6emVzUm91dGVyLmZsYXNoY2FyZHNJbmRleFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInF1aXp6ZXMvcXVpenplcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihDZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlci5pbmRleFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNlcnRpZmljYXRlcy9jZXJ0aWZpY2F0ZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQ2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXIuZWRpdFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNlcnRpZmljYXRlcy9jZXJ0aWZpY2F0ZUNyZWF0ZUVkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oUG9saWNpZXNSb3V0ZXIucHJpdmFjeVBvbGljeVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInBvbGljaWVzL3ByaXZhY3lQb2xpY3kuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oUG9saWNpZXNSb3V0ZXIuY29va2llUG9saWN5Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwicG9saWNpZXMvY29va2llUG9saWN5Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFBvbGljaWVzUm91dGVyLnRlcm1zT2ZVc2VSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJwb2xpY2llcy90ZXJtc09mVXNlLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEJ1c2luZXNzVW5pdHNSb3V0ZXIuaW5kZXhSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJidXNpbmVzc1VuaXRzL2J1c2luZXNzVW5pdHMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oQnVzaW5lc3NVbml0c1JvdXRlci5jcmVhdGVSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJidXNpbmVzc1VuaXRzL2J1c2luZXNzVW5pdHNDcmVhdGVFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEJ1c2luZXNzVW5pdHNSb3V0ZXIuZWRpdFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImJ1c2luZXNzVW5pdHMvYnVzaW5lc3NVbml0c0NyZWF0ZUVkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oUGF5UGFsUm91dGVyLm9yZGVyQ2FuY2VsbGF0aW9uUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiaW50ZWdyYXRpb24vcGF5cGFsL29yZGVyQ2FuY2VsbGF0aW9uLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKFBheVBhbFJvdXRlci5vcmRlckNvbmZpcm1hdGlvblJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImludGVncmF0aW9uL3BheXBhbC9vcmRlckNvbmZpcm1hdGlvbi5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihOb3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXIuaW5kZXhSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJub3RpZmljYXRpb25UZW1wbGF0ZXMvbm90aWZpY2F0aW9ucy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihOb3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXIuZWRpdFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcIm5vdGlmaWNhdGlvblRlbXBsYXRlcy9ub3RpZmljYXRpb25DcmVhdGVFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKENvdXJzZXNSb3V0ZXIubm90aWZpY2F0aW9uVGVtcGxhdGVzRGV0YWlsUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY291cnNlcy9jb3Vyc2VOb3RpZmljYXRpb25EZXRhaWxzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKENvdXJzZXNSb3V0ZXIubm90aWZpY2F0aW9uVGVtcGxhdGVzRWRpdFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvdXJzZXMvY291cnNlTm90aWZpY2F0aW9uRGV0YWlsc0VkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oSW1wb3J0Um91dGVyLmltcG9ydFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImltcG9ydEV4cG9ydC9pbXBvcnQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oRXhwb3J0Um91dGVyLmV4cG9ydFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImltcG9ydEV4cG9ydC9leHBvcnQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oSG9tZVJvdXRlci5pbmRleFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImhvbWUvaW5kZXguaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oSG9tZVJvdXRlci5ob21lQ291cnNlc1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImhvbWUvbGVhcm5lci9jb3Vyc2VzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEhvbWVSb3V0ZXIuaG9tZUxlYXJuaW5nUGF0aHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJob21lL2xlYXJuZXIvbGVhcm5pbmdQYXRocy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihIb21lUm91dGVyLmhvbWVNYXRlcmlhbHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJob21lL2xlYXJuZXIvbWF0ZXJpYWxzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEhvbWVSb3V0ZXIuaG9tZUZsYXNoY2FyZHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJob21lL2xlYXJuZXIvZmxhc2hjYXJkcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihIb21lUm91dGVyLmhvbWVSZXBvcnRzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiaG9tZS9sZWFybmVyL3JlcG9ydHMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oSG9tZVJvdXRlci5hZG1pbmlzdHJhdGlvbk1lbnVSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJob21lL2FkbWluaXN0cmF0aW9uL2FkbWluaXN0cmF0aW9uTWVudS5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihIb21lUm91dGVyLmFkbWluaXN0cmF0aW9uUmVwb3J0c1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImhvbWUvYWRtaW5pc3RyYXRpb24vYWRtaW5pc3RyYXRpb25SZXBvcnRzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEhvbWVSb3V0ZXIuYXV0aG9yTWVudVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImhvbWUvYXV0aG9yL2F1dGhvckNvdXJzZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oSG9tZVJvdXRlci5hdXRob3JDb3Vyc2VzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiaG9tZS9hdXRob3IvYXV0aG9yQ291cnNlcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihIb21lUm91dGVyLmF1dGhvckxlYXJuaW5nUGF0aHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJob21lL2F1dGhvci9hdXRob3JMZWFybmluZ1BhdGhzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEhvbWVSb3V0ZXIuYXV0aG9yUXVpenplc1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImhvbWUvYXV0aG9yL2F1dGhvclF1aXp6ZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oSG9tZVJvdXRlci5hdXRob3JTdXJ2ZXlzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiaG9tZS9hdXRob3IvYXV0aG9yU3VydmV5cy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihIb21lUm91dGVyLmF1dGhvckZsYXNoY2FyZHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJob21lL2F1dGhvci9hdXRob3JGbGFzaGNhcmRzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEhvbWVSb3V0ZXIuYXV0aG9yTWF0ZXJpYWxzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiaG9tZS9hdXRob3IvYXV0aG9yTWF0ZXJpYWxzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEhvbWVSb3V0ZXIuYXV0aG9yUmVwb3J0c1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImhvbWUvYXV0aG9yL2F1dGhvclJlcG9ydHMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oSG9tZVJvdXRlci5wYXJ0aWNpcGFudHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJob21lL3BhcnRpY2lwYW50cy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihIb21lUm91dGVyLmF0dGVuZGVlTWFuYWdlckNvdXJzZXNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJob21lL2F0dGVuZGVlL2F0dGVuZGVlTWFuYWdlckNvdXJzZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oSG9tZVJvdXRlci5hdHRlbmRlZU1hbmFnZXJMZWFybmluZ1BhdGhzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiaG9tZS9hdHRlbmRlZS9hdHRlbmRlZU1hbmFnZXJMZWFybmluZ1BhdGhzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEhvbWVSb3V0ZXIuYXR0ZW5kZWVNYW5hZ2VyUmVwb3J0c1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImhvbWUvYXR0ZW5kZWUvYXR0ZW5kZWVNYW5hZ2VyUmVwb3J0cy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihIb21lUm91dGVyLmluc3RydWN0b3JDb3Vyc2VzUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiaG9tZS9pbnN0cnVjdG9yL2luc3RydWN0b3JDb3Vyc2VzLmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEhvbWVSb3V0ZXIuaW5zdHJ1Y3RvckxlYXJuaW5nUGF0aHNSb3V0ZSwge3RlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJob21lL2luc3RydWN0b3IvaW5zdHJ1Y3RvckxlYXJuaW5nUGF0aHMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oSG9tZVJvdXRlci5pbnN0cnVjdG9yUmVwb3J0c1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImhvbWUvaW5zdHJ1Y3Rvci9pbnN0cnVjdG9yUmVwb3J0cy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihTbGlkZVRlbXBsYXRlc1JvdXRlci5pbmRleFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInNsaWRlcy9zbGlkZXMuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oU2xpZGVUZW1wbGF0ZXNSb3V0ZXIuZWRpdFJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcInNsaWRlcy9zbGlkZUNyZWF0ZUVkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oU2xpZGVUZW1wbGF0ZXNSb3V0ZXIuYnVuZGxlVXBkYXRlUm91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwic2xpZGVzL3NsaWRlc0J1bmRsZUVkaXQuaHRtbFwiKX0pXHJcbiAgICAgICAgLndoZW4oR2FtaWZpY2F0aW9uUm91dGVyLmdhbWVQcm9ncmFtc1JvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImdhbWlmaWNhdGlvbi9nYW1lcy5odG1sXCIpfSlcclxuICAgICAgICAud2hlbihHYW1pZmljYXRpb25Sb3V0ZXIuZ2FtZVByb2dyYW1FZGl0Um91dGUsIHt0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiZ2FtaWZpY2F0aW9uL2dhbWVDcmVhdGVFZGl0Lmh0bWxcIil9KVxyXG4gICAgICAgIC53aGVuKEdhbWlmaWNhdGlvblJvdXRlci5nYW1lUHJvZ3JhbUNyZWF0ZVJvdXRlLCB7dGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImdhbWlmaWNhdGlvbi9nYW1lQ3JlYXRlRWRpdC5odG1sXCIpfSlcclxuICAgICAgICAub3RoZXJ3aXNlKHtyZWRpcmVjdFRvOiBNYWluUm91dGVyLm1haW5Sb3V0ZX0pO1xyXG5cclxuICAgICRodHRwUHJvdmlkZXIuaW50ZXJjZXB0b3JzLnB1c2goSHR0cEludGVyY2VwdG9yLk5BTUUpO1xyXG59XHJcblxyXG4vLyBVc2UgdGhpcyBtZXRob2QgZm9yIHRoaXJkIHBhcnR5IGxpYnJhcmllcy9zZXJ2aWNlcyBjb25maWd1cmF0aW9uIG9uIG1vZHVsZSBsb2FkaW5nXHJcbi8vIE5vdGUgb25seSBwcm92aWRlcnMgY2FuIGJlIGluamVjdGVkIGFzIGRlcGVuZGVuY2llcyBoZXJlLlxyXG5mdW5jdGlvbiB0aGlyZFBhcnR5Q29uZmlndXJhdGlvbigkcHJvdmlkZTogbmcuYXV0by5JUHJvdmlkZVNlcnZpY2UpIHtcclxuICAgICRwcm92aWRlLmRlY29yYXRvcigndGFPcHRpb25zJywgWyd0YVJlZ2lzdGVyVG9vbCcsJyRyb290U2NvcGUnLCAnJGRlbGVnYXRlJywgJ3RhU2VsZWN0aW9uJywgZnVuY3Rpb24gKHRhUmVnaXN0ZXJUb29sOiBhbnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdFNjb3BlOiBJQ29tbW9uUm9vdFNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFPcHRpb25zOiBhbnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YVNlbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgY29uc3QgY2FsbEV4dGVybmFsVGFUb29sRnVuY3Rpb24gPSBmdW5jdGlvbiAodGV4dEFuZ3VsYXIsIGRlZmVycmVkLCBldmVudCwgcmVzdG9yZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBldmVudERhdGE6IElUZXh0QW5ndWxhckV2ZW50RGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGV2ZW50U291cmNlQnV0dG9uOiA8YW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5PiQodGV4dEFuZ3VsYXIuJGVsZW1lbnQpLFxyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbjogKGh0bWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRleHRBbmd1bGFyLiRlZGl0b3IoKS5kaXNwbGF5RWxlbWVudHMudGV4dFswXSkudHJpZ2dlcignZm9jdXMnKTtcclxuICAgICAgICAgICAgICAgICAgIHRleHRBbmd1bGFyLiRlZGl0b3IoKS53cmFwU2VsZWN0aW9uKCdpbnNlcnRIVE1MJywgXCJcIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0bWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dEFuZ3VsYXIuJGVkaXRvcigpLndyYXBTZWxlY3Rpb24oJ2luc2VydEhUTUwnLCBcIlwiICsgaHRtbCArIFwiPGJyPlwiLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWwsIHJhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWwuZ2V0UmFuZ2VBdCAmJiBzZWwucmFuZ2VDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgbm9kZSwgbGFzdE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gZWwuZmlyc3RDaGlsZCkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5vZGUgPSBmcmFnLmFwcGVuZENoaWxkKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShmcmFnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgc2VsZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKGxhc3ROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0ZXh0QW5ndWxhcjogdGV4dEFuZ3VsYXJcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgJHJvb3RTY29wZS4kYnJvYWRjYXN0KGV2ZW50LCBldmVudERhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgaGV4VG9SZ2IgPSBmdW5jdGlvbihoZXgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8ge1xyXG4gICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgIGI6IHBhcnNlSW50KHJlc3VsdFszXSwgMTYpXHJcbiAgICAgICAgICAgIH0gOiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGFibGVPblNlbGVjdEFjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50LCAkZWxlbWVudCwgZWRpdG9yU2NvcGUpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnRzQ291bnQgPSAkKFwiLnRkU2VsZWN0ZWRcIikubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50c0NvdW50ID09IDApIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcInRhYmxlXCIpLm9mZihcImNsaWNrXCIsIFwidGRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcInRhYmxlXCIpLm9uKCBcImNsaWNrXCIsIFwidGRcIiwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIudGRTZWxlY3RlZFwiKS5yZW1vdmVDbGFzcyhcInRkU2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwidGRTZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBmaW5pc2hFZGl0ID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGVkaXRvclNjb3BlLnVwZGF0ZVRhQmluZHRhVGV4dEVsZW1lbnQoKTtcclxuICAgICAgICAgICAgICAgIGVkaXRvclNjb3BlLmhpZGVQb3BvdmVyKCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlZGl0b3JTY29wZS5kaXNwbGF5RWxlbWVudHMucG9wb3Zlci5jc3MoJ3dpZHRoJywgJzI3NXB4Jyk7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBlZGl0b3JTY29wZS5kaXNwbGF5RWxlbWVudHMucG9wb3ZlckNvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29udGFpbmVyLmVtcHR5KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgdGFibGVFZGl0R3JvdXAgPSBhbmd1bGFyLmVsZW1lbnQoJzxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgdGFibGVQb3B1cEJ0bkdyb3VwXCI+Jyk7XHJcbiAgICAgICAgICAgIHZhciBhZGRSb3dCdXR0b24gPSBhbmd1bGFyLmVsZW1lbnQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBidG4tc21hbGxcIiB1bnNlbGVjdGFibGU9XCJvblwiIHRhYmluZGV4PVwiLTFcIj4mbmJzcDsmbmJzcDtBZGQgUm93Jm5ic3A7PC9idXR0b24+Jyk7XHJcblxyXG5cclxuICAgICAgICAgICAgYWRkUm93QnV0dG9uLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGJvZHkgPSAkZWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xudW1zID0gdGJvZHkuZmluZChcInRyOm50aC1jaGlsZCgxKVwiKS5jaGlsZHJlbigpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHZhciBjb2wgPSBcIjx0ZD4mbmJzcDs8L3RkPlwiO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFsbENvbHMgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBjb2xudW1zOyB4Kyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGFsbENvbHMgPSBhbGxDb2xzICsgY29sO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG5ld0VsZW0gPSBcIjx0cj5cIiArIGFsbENvbHMgKyBcIjwvdHI+XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgJChcIi50ZFNlbGVjdGVkXCIpLnBhcmVudCgpLmFmdGVyKG5ld0VsZW0pO1xyXG4gICAgICAgICAgICAgICAgJChcIi50ZFNlbGVjdGVkXCIpLnJlbW92ZUNsYXNzKFwidGRTZWxlY3RlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCJ0YWJsZVwiKS5vZmYoXCJjbGlja1wiLCBcInRkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCJ0YWJsZVwiKS5vbiggXCJjbGlja1wiLCBcInRkXCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiLnRkU2VsZWN0ZWRcIikucmVtb3ZlQ2xhc3MoXCJ0ZFNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcInRkU2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAgICAgICB9LCAyMDApO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBmaW5pc2hFZGl0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgICAgICB2YXIgYWRkQ29sQnV0dG9uID0gYW5ndWxhci5lbGVtZW50KCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gYnRuLXNtYWxsXCIgdW5zZWxlY3RhYmxlPVwib25cIiB0YWJpbmRleD1cIi0xXCI+QWRkIENvbHVtbjwvYnV0dG9uPicpO1xyXG5cclxuICAgICAgICAgICAgYWRkQ29sQnV0dG9uLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHRib2R5ID0gJGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sID0gXCI8dGQ+Jm5ic3A7PC90ZD5cIjtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoXCIudGRTZWxlY3RlZFwiKS5pbmRleCgpKTtcclxuICAgICAgICAgICAgICAgIHZhciBjaGlsZE51bSA9ICQoXCIudGRTZWxlY3RlZFwiKS5pbmRleCgpICsgMTtcclxuICAgICAgICAgICAgICAgIHRib2R5LmZpbmQoXCJ0clwiKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jaGlsZHJlbihcIjpudGgtY2hpbGQoXCIrY2hpbGROdW0rXCIpXCIpLmFmdGVyKGNvbCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xudW1zID0gdGJvZHkuZmluZChcInRyOm50aC1jaGlsZCgxKVwiKS5jaGlsZHJlbigpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRib2R5LmZpbmQoXCJ0cjpmaXJzdFwiKS5maW5kKFwidGRcIikuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykud2lkdGgoMTAwIC8gY29sbnVtcyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCJ0YWJsZVwiKS5vZmYoXCJjbGlja1wiLCBcInRkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCJ0YWJsZVwiKS5vbiggXCJjbGlja1wiLCBcInRkXCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiLnRkU2VsZWN0ZWRcIikucmVtb3ZlQ2xhc3MoXCJ0ZFNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcInRkU2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAgICAgICB9LCAyMDApO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBmaW5pc2hFZGl0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHRhYmxlRWRpdEdyb3VwUmVtb3ZlcyA9IGFuZ3VsYXIuZWxlbWVudCgnPGRpdiBjbGFzcz1cImJ0bi1ncm91cCB0YWJsZVBvcHVwQnRuR3JvdXBcIj4nKTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZW1Sb3dCdXR0b24gPSBhbmd1bGFyLmVsZW1lbnQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nIGJ0bi1zbSBidG4tc21hbGxcIiB1bnNlbGVjdGFibGU9XCJvblwiIHRhYmluZGV4PVwiLTFcIj4mbmJzcDsmbmJzcDtSZW1vdmUgUm93Jm5ic3A7PC9idXR0b24+Jyk7XHJcblxyXG5cclxuICAgICAgICAgICAgcmVtUm93QnV0dG9uLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgICAgICAgICAgICAgIC8vIGFsZXJ0KFwiUmVtIFJvdyBcIiArICRlbGVtZW50Lmh0bWwoKSk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRib2R5ID0gJGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgbGFzdHJvdyA9IHRib2R5LmZpbmQoJ3RyOmxhc3QnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgb3VyUm93ID0gJChcIi50ZFNlbGVjdGVkXCIpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgICAgICAgICBvdXJSb3cucmVtb3ZlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9FcnJvcjogQ291bGQgbm90IGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gZHVlIHRvIGVycm9yIDgwMGEwMjVlLlxyXG4gICAgICAgICAgICAgICAgLy9GaXggZm9yIElFIHRocm93aW5nIHRoZSBhYm92ZSBvZGQgZXJyb3JcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBsb2dpYyBvbiB0aGVzZSBlcnJvcnMgYXMgd2UncmUgZG9pbmcgZXZlcnl0aGluZyByaWdodC5cclxuICAgICAgICAgICAgICAgIC8vIFNvIHRoZSBvbmx5IHNvbHV0aW9uIHdlIGZvdW5kIGZvciB0aGlzIGlzIFwicmVzZXR0aW5nXCIgdGhlIHNlbGVjdGlvbiBBUEksXHJcbiAgICAgICAgICAgICAgICAvLyBieSBtb3ZpbmcgdGhlIGZvY3VzIHRvIGFub3RoZXIgZG9jdW1lbnQgKENLRURJVE9SLmRvY3VtZW50KVxyXG4gICAgICAgICAgICAgICAgLy8gYW5kIHRoZW4gYmFjayB0byB0aGUgZWRpdGFibGUuIEZvcnR1bmF0ZWx5IHRoaXMgc29sdmVkIHRoZSBwcm9ibGVtLFxyXG4gICAgICAgICAgICAgICAgLy8gZXZlbiBpZiBpdHMgYSBkYW1uIHVnbHkgaGFjay5cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAkKFwiLmZvY3Vzc2VkXCIpLmZvY3Vzb3V0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgd2luZG93LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICg8YW55PiBkb2N1bWVudCkuYWN0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaW5pc2hFZGl0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgIHZhciByZW1Db2xCdXR0b24gPSBhbmd1bGFyLmVsZW1lbnQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nIGJ0bi1zbSBidG4tc21hbGxcIiB1bnNlbGVjdGFibGU9XCJvblwiIHRhYmluZGV4PVwiLTFcIj5SZW1vdmUgQ29sdW1uPC9idXR0b24+Jyk7XHJcbiAgICAgICAgICAgIHJlbUNvbEJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRib2R5ID0gJGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGROdW0gPSAkKFwiLnRkU2VsZWN0ZWRcIikuaW5kZXgoKSArIDE7XHJcbiAgICAgICAgICAgICAgICB0Ym9keS5maW5kKFwidHJcIikuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZChcInRkOm50aC1jaGlsZChcIitjaGlsZE51bStcIilcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAoPGFueT4gZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICgoPGFueT4gZG9jdW1lbnQpLmJvZHkuY3JlYXRlVGV4dFJhbmdlKSB7IC8vIEFsbCBJRSBidXQgRWRnZVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9ICg8YW55PiBkb2N1bWVudCkuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaW5pc2hFZGl0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgIHRhYmxlRWRpdEdyb3VwLmFwcGVuZChhZGRSb3dCdXR0b24pO1xyXG4gICAgICAgICAgICB0YWJsZUVkaXRHcm91cC5hcHBlbmQoYWRkQ29sQnV0dG9uKTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgdGFibGVFZGl0R3JvdXBSZW1vdmVzLmFwcGVuZChyZW1Sb3dCdXR0b24pO1xyXG4gICAgICAgICAgICB0YWJsZUVkaXRHcm91cFJlbW92ZXMuYXBwZW5kKHJlbUNvbEJ1dHRvbik7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQodGFibGVFZGl0R3JvdXApO1xyXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKHRhYmxlRWRpdEdyb3VwUmVtb3Zlcyk7XHJcblxyXG5cclxuICAgICAgICAgICAgdmFyIGJ1dHRvbkdyb3VwID0gYW5ndWxhci5lbGVtZW50KCc8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIHRhYmxlUG9wdXBCdG5Hcm91cFwiPicpO1xyXG4gICAgICAgICAgICB2YXIgZnVsbEJ1dHRvbiA9IGFuZ3VsYXIuZWxlbWVudCgnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGJ0bi1zbWFsbFwiIHVuc2VsZWN0YWJsZT1cIm9uXCIgdGFiaW5kZXg9XCItMVwiPjEwMCU8L2J1dHRvbj4nKTtcclxuICAgICAgICAgICAgZnVsbEJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgJGVsZW1lbnQuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAnd2lkdGgnOiAnMTAwJScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2hlaWdodCc6ICcnXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGZpbmlzaEVkaXQoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBoYWxmQnV0dG9uID0gYW5ndWxhci5lbGVtZW50KCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc20gYnRuLXNtYWxsXCIgdW5zZWxlY3RhYmxlPVwib25cIiB0YWJpbmRleD1cIi0xXCI+NTAlJm5ic3A7PC9idXR0b24+Jyk7XHJcbiAgICAgICAgICAgIGhhbGZCdXR0b24ub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICRlbGVtZW50LmNzcyh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJzogJzUwJScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2hlaWdodCc6ICcnXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGZpbmlzaEVkaXQoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBxdWFydEJ1dHRvbiA9IGFuZ3VsYXIuZWxlbWVudCgnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGJ0bi1zbWFsbFwiIHVuc2VsZWN0YWJsZT1cIm9uXCIgdGFiaW5kZXg9XCItMVwiPjI1JSZuYnNwOzwvYnV0dG9uPicpO1xyXG4gICAgICAgICAgICBxdWFydEJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgJGVsZW1lbnQuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAnd2lkdGgnOiAnMjUlJyxcclxuICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JzogJydcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZmluaXNoRWRpdCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGJ1dHRvbkdyb3VwLmFwcGVuZChxdWFydEJ1dHRvbik7XHJcbiAgICAgICAgICAgIGJ1dHRvbkdyb3VwLmFwcGVuZChoYWxmQnV0dG9uKTtcclxuICAgICAgICAgICAgYnV0dG9uR3JvdXAuYXBwZW5kKGZ1bGxCdXR0b24pO1xyXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKGJ1dHRvbkdyb3VwKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZWxldGVHcm91cCA9IGFuZ3VsYXIuZWxlbWVudCgnPGRpdiBjbGFzcz1cImJ0bi1ncm91cCB0YWJsZVBvcHVwQnRuR3JvdXBcIj4nKTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZW1vdmUgPSBhbmd1bGFyLmVsZW1lbnQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtIGJ0bi1zbWFsbFwiIHVuc2VsZWN0YWJsZT1cIm9uXCIgdGFiaW5kZXg9XCItMVwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiPjwvaT48L2J1dHRvbj4nKTtcclxuICAgICAgICAgICAgcmVtb3ZlLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAvL3RlbXAgc29sdXRpb25cclxuICAgICAgICAgICAgICAgIGlmIChlZGl0b3JTY29wZS5kaXNwbGF5RWxlbWVudHMudGV4dFswXS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICRlbGVtZW50LmFmdGVyKFwiPHA+PGJyPjwvcD5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAoPGFueT4gZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmluaXNoRWRpdCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZGVsZXRlR3JvdXAuYXBwZW5kKHJlbW92ZSk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZGVsZXRlR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgZWRpdG9yU2NvcGUuc2hvd1BvcG92ZXIoJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAvL3RoaXMgd2FzIG1ha2luZyB1c2VycyBoYXZlIHRvIGRvdWJsZSBjbGljaywgc28gaSByZW1vdmVkIHRoZSByZXNpemUgZnVuY3Rpb25hbGl0eVxyXG4gICAgICAgICAgICAvLyBlZGl0b3JTY29wZS5zaG93UmVzaXplT3ZlcmxheSgkZWxlbWVudCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0YVJlZ2lzdGVyVG9vbChSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfRU1CRURERURfTUFURVJJQUxfQlVUVE9OLCB7XHJcbiAgICAgICAgICAgIGNvbW1hbmRLZXlDb2RlOiAnQWRkTWF0ZXJpYWwnLFxyXG4gICAgICAgICAgICBpY29uY2xhc3M6IFwiZmEgZmEtZmlsZS12aWRlby1vXCIsXHJcbiAgICAgICAgICAgIHRvb2x0aXB0ZXh0OiBcIkluc2VydCBtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKGRlZmVycmVkLCByZXN0b3JlU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbEV4dGVybmFsVGFUb29sRnVuY3Rpb24odGhpcywgZGVmZXJyZWQsIENvbXBvbmVudHNFdmVudHMuVEFfU0VMRUNUX0VNQkVEREVEX01BVEVSSUFMLCByZXN0b3JlU2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRhUmVnaXN0ZXJUb29sKFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9FTUJFRERFRF9CVU5ETEVfQlVUVE9OLCB7XHJcbiAgICAgICAgICAgIGljb25jbGFzczogXCJmYSBmYS1maWxlLXppcC1vXCIsXHJcbiAgICAgICAgICAgIHRvb2x0aXB0ZXh0OiBcIkluc2VydCBhdHRhY2hlZCBmaWxlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oZGVmZXJyZWQsIHJlc3RvcmVTZWxlY3Rpb24pe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxFeHRlcm5hbFRhVG9vbEZ1bmN0aW9uKHRoaXMsIGRlZmVycmVkLCBDb21wb25lbnRzRXZlbnRzLlRBX1NFTEVDVF9FTUJFRERFRF9CVU5ETEUsIHJlc3RvcmVTZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFSZWdpc3RlclRvb2woUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX1NBTkRCT1hfQlVUVE9OLCB7XHJcbiAgICAgICAgICAgIGljb25jbGFzczogXCJmYSBmYS1maWxlLWNvZGUtb1wiLFxyXG4gICAgICAgICAgICB0b29sdGlwdGV4dDogXCJJbnNlcnQgZXh0ZXJuYWwgY29udGVudFwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKGRlZmVycmVkLCByZXN0b3JlU2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsRXh0ZXJuYWxUYVRvb2xGdW5jdGlvbih0aGlzLCBkZWZlcnJlZCwgQ29tcG9uZW50c0V2ZW50cy5UQV9TRUxFQ1RfU0FOREJPWCwgcmVzdG9yZVNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YVJlZ2lzdGVyVG9vbChSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfRlVMTFNDUkVFTl9CVVRUT04sIHtcclxuICAgICAgICAgICAgaWNvbmNsYXNzOiBcImZhIGZhLWFycm93cy1hbHRcIixcclxuICAgICAgICAgICAgdG9vbHRpcHRleHQ6IFwiRnVsbHNjcmVlbiBtb2RlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oZGVmZXJyZWQsIHJlc3RvcmVTZWxlY3Rpb24pe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxFeHRlcm5hbFRhVG9vbEZ1bmN0aW9uKHRoaXMsIGRlZmVycmVkLCBDb21wb25lbnRzRXZlbnRzLlRBX0ZVTExTQ1JFRU4sIHJlc3RvcmVTZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFSZWdpc3RlclRvb2woUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0xPQURfRlJPTV9URU1QTEFURV9CVVRUT04sIHtcclxuICAgICAgICAgICAgaWNvbmNsYXNzOiBcImZhIGZhLWN1YmVzXCIsXHJcbiAgICAgICAgICAgIHRvb2x0aXB0ZXh0OiBcIkxvYWQgZnJvbSB0ZW1wbGF0ZVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKGRlZmVycmVkLCByZXN0b3JlU2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsRXh0ZXJuYWxUYVRvb2xGdW5jdGlvbih0aGlzLCBkZWZlcnJlZCwgQ29tcG9uZW50c0V2ZW50cy5UQV9MT0FEX0ZST01fVEVNUExBVEUsIHJlc3RvcmVTZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFSZWdpc3RlclRvb2woUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0NPTlZFUlRfVE9fTkVXX1RFTVBMQVRFX0JVVFRPTiwge1xyXG4gICAgICAgICAgICBpY29uY2xhc3M6IFwiZmEgZmEtcmVmcmVzaFwiLFxyXG4gICAgICAgICAgICB0b29sdGlwdGV4dDogXCJVcGRhdGUgZnJvbSBuZXdlciB0ZW1wbGF0ZVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKGRlZmVycmVkLCByZXN0b3JlU2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsRXh0ZXJuYWxUYVRvb2xGdW5jdGlvbih0aGlzLCBkZWZlcnJlZCwgQ29tcG9uZW50c0V2ZW50cy5UQV9DT05WRVJUX1RPX05FV19URU1QTEFURSwgcmVzdG9yZVNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YVJlZ2lzdGVyVG9vbChSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX1RJUF9CVVRUT04sIHtcclxuICAgICAgICAgICAgaWNvbmNsYXNzOiBcImZhIGZhLWxpZ2h0YnVsYi1vXCIsIC8vVE9ETzogY3VzdG9tIGljb25cclxuICAgICAgICAgICAgdG9vbHRpcHRleHQ6IFwiQWRkIHRvb2x0aXBcIixcclxuICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbihkZWZlcnJlZCwgcmVzdG9yZVNlbGVjdGlvbil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbEV4dGVybmFsVGFUb29sRnVuY3Rpb24odGhpcywgZGVmZXJyZWQsIENvbXBvbmVudHNFdmVudHMuVEFfQUREX1RJUCwgcmVzdG9yZVNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YVJlZ2lzdGVyVG9vbChSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX1FVRVNUSU9OX0JVVFRPTiwge1xyXG4gICAgICAgICAgICBpY29uY2xhc3M6IFwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlXCIsIC8vVE9ETzogY3VzdG9tIGljb25cclxuICAgICAgICAgICAgdG9vbHRpcHRleHQ6IFwiQWRkIHF1ZXN0aW9uXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oZGVmZXJyZWQsIHJlc3RvcmVTZWxlY3Rpb24pe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxFeHRlcm5hbFRhVG9vbEZ1bmN0aW9uKHRoaXMsIGRlZmVycmVkLCBDb21wb25lbnRzRXZlbnRzLlRBX0FERF9RVUVTVElPTiwgcmVzdG9yZVNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YVJlZ2lzdGVyVG9vbChSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX0FTU0VTU01FTlRfQlVUVE9OLCB7XHJcbiAgICAgICAgICAgIGljb25jbGFzczogXCJmYSBmYS1jb21tZW50LW9cIiwgLy9UT0RPOiBjdXN0b20gaWNvblxyXG4gICAgICAgICAgICB0b29sdGlwdGV4dDogXCJBZGQgYXNzZXNzbWVudFwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKGRlZmVycmVkLCByZXN0b3JlU2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsRXh0ZXJuYWxUYVRvb2xGdW5jdGlvbih0aGlzLCBkZWZlcnJlZCwgQ29tcG9uZW50c0V2ZW50cy5UQV9BRERfQVNTRVNTTUVOVCwgcmVzdG9yZVNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YVJlZ2lzdGVyVG9vbChSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfRk9OVF9DT0xPUiwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBcIjxkaXYgY2xhc3M9J2Rlc2lnbi10YS1iZy1jb2xvcic+XFxuXCIgK1xyXG4gICAgICAgICAgICAgICAgXCI8YnV0dG9uIG5nLWNsaWNrPSdhY3Rpb24nPjxpIGNsYXNzPSdmYSBmYS1mb250Jz48L2k+PC9idXR0b24+XFxuXCIgK1xyXG4gICAgICAgICAgICAgICAgXCI8aW5wdXQgbmctbW9kZWw9J2ZvbnRDb2xvck1vZGVsJyB0eXBlPVxcXCJjb2xvclxcXCIvPjwvZGl2PlwiLFxyXG4gICAgICAgICAgICB0b29sdGlwdGV4dDogXCJGb250IGNvbG9yXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZWRpdG9yKCkud3JhcFNlbGVjdGlvbignZm9yZWNvbG9yJywgdGhpcy5mb250Q29sb3JNb2RlbCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZvbnRDb2xvck1vZGVsOiBcIiMwMDAwMDBcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHRhUmVnaXN0ZXJUb29sKFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9URVhUX0hJR0hMSUdIVEVSLCB7XHJcbiAgICAgICAgLy8gICAgIGRpc3BsYXk6IFwiPGJ1dHRvbiBjbGFzcz0ndGEtdGV4dC1oaWdobGlnaHRlcicgdHlwZT0nYnV0dG9uJz48aSBjbGFzcz1cXFwiZmEgZmEtcGFpbnQtYnJ1c2hcXFwiIHN0eWxlPSdib3JkZXItbGVmdDogNHB4IHNvbGlkIHJnYigyNTUsIDI1NSwgMTI4KTsnPjwvaT48L2J1dHRvbj5cXG5cIixcclxuICAgICAgICAvLyAgICAgdG9vbHRpcHRleHQ6IFwiSGlnaGxpZ2h0ZXJcIixcclxuICAgICAgICAvLyAgICAgYWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBpZiAodGFTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKCkuc3RhcnQuZWxlbWVudC5vdXRlckhUTUwgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgIC8vICAgICAgICAgICAgICYmIHRhU2VsZWN0aW9uLmdldFNlbGVjdGlvbigpLnN0YXJ0LmVsZW1lbnQuaGFzQXR0cmlidXRlKFwic3R5bGVcIilcclxuICAgICAgICAvLyAgICAgICAgICAgICAmJiB0YVNlbGVjdGlvbi5nZXRTZWxlY3Rpb24oKS5lbmQuZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJzdHlsZVwiKVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICYmIHRhU2VsZWN0aW9uLmdldFNlbGVjdGlvbigpLnN0YXJ0LmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIikuaW5kZXhPZihcImJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMTI4KTtcIikgIT09IC0xXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgJiYgdGFTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKCkuZW5kLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIikuaW5kZXhPZihcImJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMTI4KTtcIikgICE9PSAtMSkge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiB0aGlzLiRlZGl0b3IoKS53cmFwU2VsZWN0aW9uKCdiYWNrQ29sb3InLCBcInJnYigyNTUsIDI1NSwgMjU1KVwiKTtcclxuICAgICAgICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGVkaXRvcigpLndyYXBTZWxlY3Rpb24oJ2JhY2tDb2xvcicsIFwicmdiKDI1NSwgMjU1LCAxMjgpXCIpO1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICB9LFxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIHRhUmVnaXN0ZXJUb29sKFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9CQUNLR1JPVU5EX0ZPTlRfQ09MT1IsIHtcclxuICAgICAgICAgICAgZGlzcGxheTogXCI8ZGl2IGNsYXNzPSdkZXNpZ24tdGEtYmctY29sb3InPlxcblwiICtcclxuICAgICAgICAgICAgICAgIFwiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjxpIGNsYXNzPVxcXCJmYSBmYS1wYWludC1icnVzaFxcXCI+PC9pPjwvYnV0dG9uPlxcblwiICtcclxuICAgICAgICAgICAgICAgIFwiPGlucHV0IG5nLW1vZGVsPSdiYWNrZ3JvdW5kQ29sb3JNb2RlbCcgdHlwZT1cXFwiY29sb3JcXFwiPjwvZGl2PlwiLFxyXG4gICAgICAgICAgICB0b29sdGlwdGV4dDogXCJCYWNrZ3JvdW5kIGNvbG9yXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1lID0gdGhpcztcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy4kZWRpdG9yKCkud3JhcFNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZS5hY3Rpb24obWUuYmFja2dyb3VuZENvbG9yTW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMClcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJnYiA9IGhleFRvUmdiKG1lLmJhY2tncm91bmRDb2xvck1vZGVsKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYmFja2dyb3VuZENvbG9yUkdCID0gXCJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoXCIgKyByZ2IuciArIFwiLCBcIiArIHJnYi5nICsgXCIsIFwiICsgcmdiLmIgKyBcIik7XCJcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKCkuc3RhcnQuZWxlbWVudC5vdXRlckhUTUwgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAodGFTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKCkuc3RhcnQuZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJzdHlsZVwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCB0YVNlbGVjdGlvbi5nZXRTZWxlY3Rpb24oKS5lbmQuZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJzdHlsZVwiKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHRhU2VsZWN0aW9uLmdldFNlbGVjdGlvbigpLnN0YXJ0LmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIikuaW5kZXhPZihiYWNrZ3JvdW5kQ29sb3JSR0IpICE9PSAtMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCB0YVNlbGVjdGlvbi5nZXRTZWxlY3Rpb24oKS5lbmQuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKS5pbmRleE9mKGJhY2tncm91bmRDb2xvclJHQikgIT09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZWRpdG9yKCkud3JhcFNlbGVjdGlvbignYmFja0NvbG9yJywgXCJyZ2IoMjU1LCAyNTUsIDI1NSlcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGVkaXRvcigpLndyYXBTZWxlY3Rpb24oJ2JhY2tDb2xvcicsIG1lLmJhY2tncm91bmRDb2xvck1vZGVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvck1vZGVsOiBcIiNmZmZmODBcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHRhUmVnaXN0ZXJUb29sKFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9CQUNLR1JPVU5EX0ZPTlRfQ09MT1JfUElDS0VSLCB7XHJcbiAgICAgICAgLy8gICAgIGRpc3BsYXk6IFwiPGRpdiBjbGFzcz0ndGEtYmctY29sb3InIG5nLWNsaWNrPSdhY3Rpb24nPjwvZGl2PlwiLFxyXG4gICAgICAgIC8vICAgICB0b29sdGlwdGV4dDogXCJCYWNrZ3JvdW5kIGNvbG9yXCIsXHJcbiAgICAgICAgLy8gICAgIGFjdGlvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2tncm91bmRGb250Q29sb3JJbnB1dCcpLmNsaWNrKCk7XHJcbiAgICAgICAgLy8gICAgICAgICB9LCAwKTtcclxuICAgICAgICAvLyAgICAgfSxcclxuICAgICAgICAvLyAgICAgYmFja2dyb3VuZENvbG9yTW9kZWw6IFwiI2ZmMDAwMFwiXHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgdGFSZWdpc3RlclRvb2woUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX1RPR0dMRV9CVVRUT04sIHtcclxuICAgICAgICAgICAgZGlzcGxheTogXCI8YnV0dG9uIHR5cGU9J2J1dHRvbicgbmctY2xpY2s9J2FjdGlvbic+PGltZyBjbGFzcz0naWNvbi10b2dnbGUnIG5nLXNyYz0ndGhlbWVzL2RlZmF1bHQvaW1nL2ljb24tdG9nZ2xlLnBuZycvPjwvYnV0dG9uPlwiLFxyXG4gICAgICAgICAgICB0b29sdGlwdGV4dDogXCJBZGQgdG9nZ2xlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oZGVmZXJyZWQsIHJlc3RvcmVTZWxlY3Rpb24pe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxFeHRlcm5hbFRhVG9vbEZ1bmN0aW9uKHRoaXMsIGRlZmVycmVkLCBDb21wb25lbnRzRXZlbnRzLlRBX0FERF9UT0dHTEUsIHJlc3RvcmVTZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFSZWdpc3RlclRvb2woUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX1RPR0dMRV9DT05URU5UX0JVVFRPTiwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBcIjxidXR0b24gdHlwZT0nYnV0dG9uJyBuZy1jbGljaz0nYWN0aW9uJz48aSBjbGFzcz0nZmEgZmEtY2FyZXQtc3F1YXJlLW8tZG93bicgYXJpYS1oaWRkZW49J3RydWUnPjwvaT48L2J1dHRvbj5cIixcclxuICAgICAgICAgICAgdG9vbHRpcHRleHQ6IFwiQWRkIHRvZ2dsZSBhbnN3ZXJcIixcclxuICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbihkZWZlcnJlZCwgcmVzdG9yZVNlbGVjdGlvbil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbEV4dGVybmFsVGFUb29sRnVuY3Rpb24odGhpcywgZGVmZXJyZWQsIENvbXBvbmVudHNFdmVudHMuVEFfQUREX1RPR0dMRV9DT05URU5ULCByZXN0b3JlU2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRhUmVnaXN0ZXJUb29sKFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9BRERfTk9URV9GT1JfUFJPR1JFU1NfQlVUVE9OLCB7XHJcbiAgICAgICAgICAgIGljb25jbGFzczogXCJmYSBmYS1wZW5jaWxcIixcclxuICAgICAgICAgICAgdG9vbHRpcHRleHQ6IFwiQWRkIG5vdGVcIixcclxuICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbihkZWZlcnJlZCwgcmVzdG9yZVNlbGVjdGlvbil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbEV4dGVybmFsVGFUb29sRnVuY3Rpb24odGhpcywgZGVmZXJyZWQsIENvbXBvbmVudHNFdmVudHMuVEFfQUREX05PVEVfRk9SX1BST0dSRVNTLCByZXN0b3JlU2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRhUmVnaXN0ZXJUb29sKFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9BRERfVEFCTEVfQlVUVE9OLCB7XHJcbiAgICAgICAgICAgIGljb25jbGFzczogXCJmYSBmYS10YWJsZVwiLFxyXG4gICAgICAgICAgICB0b29sdGlwdGV4dDogXCJJbnNlcnQgdGFibGVcIixcclxuICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbihkZWZlcnJlZCwgcmVzdG9yZVNlbGVjdGlvbil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbEV4dGVybmFsVGFUb29sRnVuY3Rpb24odGhpcywgZGVmZXJyZWQsIENvbXBvbmVudHNFdmVudHMuVEFfQUREX1RBQkxFLCByZXN0b3JlU2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25FbGVtZW50U2VsZWN0OiB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiAndGFibGUnLFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uOiB0YWJsZU9uU2VsZWN0QWN0aW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YVJlZ2lzdGVyVG9vbChSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUlfQ09OVEVOVF9HRU5FUkFUSU9OX0JVVFRPTiwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBcIjxidXR0b24gc3R5bGU9J3BhZGRpbmc6IDA7JyB0eXBlPSdidXR0b24nIG5nLWNsaWNrPSdhY3Rpb24nPjxpIGNsYXNzPSdyaWNoLWVkaXRvci1jaGF0LWdwdCcgYXJpYS1oaWRkZW49J3RydWUnPjwvaT48L2J1dHRvbj5cIixcclxuICAgICAgICAgICAgdG9vbHRpcHRleHQ6IFwiSW5zZXJ0IEFJIGdlbmVyYXRlZCBjb250ZW50XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oZGVmZXJyZWQsIHJlc3RvcmVTZWxlY3Rpb24pe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxFeHRlcm5hbFRhVG9vbEZ1bmN0aW9uKHRoaXMsIGRlZmVycmVkLCBDb21wb25lbnRzRXZlbnRzLlRBX0FJX0NPTlRFTlRfR0VORVJBVElPTiwgcmVzdG9yZVNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YU9wdGlvbnMua2V5TWFwcGluZ3MgPSBbXHJcbiAgICAgICAgICAgIHsgICBjb21tYW5kS2V5Q29kZTogJ1RhYktleScsXHJcbiAgICAgICAgICAgICAgICB0ZXN0Rm9yS2V5OiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHsgICBjb21tYW5kS2V5Q29kZTogJ1NoaWZ0VGFiS2V5JyxcclxuICAgICAgICAgICAgICAgIHRlc3RGb3JLZXk6IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlPTkgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFsdEtleSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kS2V5Q29kZTogJ0FkZE1hdGVyaWFsJyxcclxuICAgICAgICAgICAgICAgIHRlc3RGb3JLZXk6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC53aGljaD09NzcgJiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFsdEtleSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgICAgIHRhT3B0aW9ucy50b29sYmFyID0gW1xyXG4gICAgICAgICAgICBbUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0VNQkVEREVEX01BVEVSSUFMX0JVVFRPTiwgJ2luc2VydFZpZGVvJywgJ2luc2VydEltYWdlJyxcclxuICAgICAgICAgICAgICAgIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9FTUJFRERFRF9CVU5ETEVfQlVUVE9OLCAnaW5zZXJ0TGluaycsXHJcbiAgICAgICAgICAgICAgICBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfU0FOREJPWF9CVVRUT04sIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9MT0FEX0ZST01fVEVNUExBVEVfQlVUVE9OLFxyXG4gICAgICAgICAgICAgICAgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0NPTlZFUlRfVE9fTkVXX1RFTVBMQVRFX0JVVFRPTiwgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0FERF9UQUJMRV9CVVRUT04sXHJcbiAgICAgICAgICAgICAgICBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUlfQ09OVEVOVF9HRU5FUkFUSU9OX0JVVFRPTl0sXHJcbiAgICAgICAgICAgIFsnYm9sZCcsICdpdGFsaWNzJywgJ3VuZGVybGluZScsICdzdHJpa2VUaHJvdWdoJywgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0ZPTlRfQ09MT1IsXHJcbiAgICAgICAgICAgICAgICBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQkFDS0dST1VORF9GT05UX0NPTE9SXSxcclxuICAgICAgICAgICAgWyd1bCcsICdvbCcsICdpbmRlbnQnLCAnb3V0ZGVudCcsICdqdXN0aWZ5TGVmdCcsICdqdXN0aWZ5Q2VudGVyJywgJ2p1c3RpZnlSaWdodCcsICdqdXN0aWZ5RnVsbCddLFxyXG4gICAgICAgICAgICBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ3AnLCAncHJlJywgJ3F1b3RlJ10sXHJcbiAgICAgICAgICAgIFtSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX1RJUF9CVVRUT04sIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9BRERfUVVFU1RJT05fQlVUVE9OLFxyXG4gICAgICAgICAgICAgICAgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0FERF9BU1NFU1NNRU5UX0JVVFRPTiwgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX1RPR0dMRV9CVVRUT04sXHJcbiAgICAgICAgICAgICAgICBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfVE9HR0xFX0NPTlRFTlRfQlVUVE9OLCBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX05PVEVfRk9SX1BST0dSRVNTX0JVVFRPTl0sXHJcbiAgICAgICAgICAgIFsncmVkbycsICd1bmRvJywgJ2NsZWFyJywgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0ZVTExTQ1JFRU5fQlVUVE9OLCAnaHRtbCddLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGFPcHRpb25zLmRlZmF1bHRUYWdBdHRyaWJ1dGVzLmEudGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICAgICAgcmV0dXJuIHRhT3B0aW9ucztcclxuICAgIH1dKTtcclxuICAgICRwcm92aWRlLmRlY29yYXRvcigndGFDdXN0b21SZW5kZXJlcnMnLCBbJyRkZWxlZ2F0ZScsICckY29tcGlsZScsICckcm9vdFNjb3BlJywgJyR0aW1lb3V0JywgZnVuY3Rpb24gKHRhQ3VzdG9tUmVuZGVyZXJzOiBBcnJheTxhbnk+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21waWxlOiBhbmd1bGFyLklDb21waWxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdFNjb3BlOiBJQ29tbW9uUm9vdFNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSkge1xyXG4gICAgICAgIHRhQ3VzdG9tUmVuZGVyZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6IFZoc0VtYmVkZGVkTWF0ZXJpYWxDb250cm9sbGVyLlRBX0VMRU1FTlRfU0VMRUNUT1IsIGN1c3RvbUF0dHJpYnV0ZTogJycsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJMb2dpYzogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIFZoc0VtYmVkZGVkTWF0ZXJpYWxDb250cm9sbGVyLlRBX1JFTkRFUl9GVU5DVElPTihlbGVtZW50LCAkY29tcGlsZSwgJHJvb3RTY29wZSwgJHRpbWVvdXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRhQ3VzdG9tUmVuZGVyZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6IFZoc0VtYmVkZGVkQnVuZGxlQ29udHJvbGxlci5UQV9FTEVNRU5UX1NFTEVDVE9SLCBjdXN0b21BdHRyaWJ1dGU6ICcnLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVyTG9naWM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBWaHNFbWJlZGRlZEJ1bmRsZUNvbnRyb2xsZXIuVEFfUkVOREVSX0ZVTkNUSU9OKGVsZW1lbnQsICRjb21waWxlLCAkcm9vdFNjb3BlLCAkdGltZW91dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFDdXN0b21SZW5kZXJlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogVmhzU2FuZGJveENvbnRyb2xsZXIuVEFfRUxFTUVOVF9TRUxFQ1RPUiwgY3VzdG9tQXR0cmlidXRlOiAnJyxcclxuICAgICAgICAgICAgICAgIHJlbmRlckxvZ2ljOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgVmhzU2FuZGJveENvbnRyb2xsZXIuVEFfUkVOREVSX0ZVTkNUSU9OKGVsZW1lbnQsICRjb21waWxlLCAkcm9vdFNjb3BlLCAkdGltZW91dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFDdXN0b21SZW5kZXJlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogVmhzRG93bmxvYWRCdW5kbGVDb250cm9sbGVyLlRBX0VMRU1FTlRfU0VMRUNUT1IsIGN1c3RvbUF0dHJpYnV0ZTogJycsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJMb2dpYzogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIFZoc0Rvd25sb2FkQnVuZGxlQ29udHJvbGxlci5UQV9SRU5ERVJfRlVOQ1RJT04oZWxlbWVudCwgJGNvbXBpbGUsICRyb290U2NvcGUsICR0aW1lb3V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YUN1c3RvbVJlbmRlcmVycy5wdXNoKHtcclxuICAgICAgICAgICAgc2VsZWN0b3I6IFZoc1VzZXJOb3RlRGlyZWN0aXZlQ29udHJvbGxlci5UQV9FTEVNRU5UX1NFTEVDVE9SLCBjdXN0b21BdHRyaWJ1dGU6ICcnLFxyXG4gICAgICAgICAgICByZW5kZXJMb2dpYzogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgVmhzVXNlck5vdGVEaXJlY3RpdmVDb250cm9sbGVyLlRBX1JFTkRFUl9GVU5DVElPTihlbGVtZW50LCAkY29tcGlsZSwgJHJvb3RTY29wZSwgJHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFDdXN0b21SZW5kZXJlcnMucHVzaCh7XHJcbiAgICAgICAgICAgIHNlbGVjdG9yOiBcImFcIiwgY3VzdG9tQXR0cmlidXRlOiAnJyxcclxuICAgICAgICAgICAgcmVuZGVyTG9naWM6IGZ1bmN0aW9uKGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGhyZWYgPSBlbGVtZW50LnByb3AoXCJocmVmXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhyZWYubWF0Y2goJ3NlY3Rpb249XFxcXGQrLipcXFxcJmNoYW5nZVNlY3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXR0cihcInRhcmdldFwiLCBcIl9zZWxmXCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmF0dHIoXCJ0YXJnZXRcIiwgXCJfYmxhbmtcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGFDdXN0b21SZW5kZXJlcnM7XHJcbiAgICB9XSk7XHJcbn1cclxuXHJcbi8vIFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIHNob3VsZCBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgaW5qZWN0b3IgaXMgZG9uZSBsb2FkaW5nIGFsbCBtb2R1bGVzLlxyXG5mdW5jdGlvbiBydW4oJGxvZzogbmcuSUxvZ1NlcnZpY2UsICRyb290U2NvcGU6IElDb21tb25Sb290U2NvcGUsICRxOiBJUVNlcnZpY2UsICR0aW1lb3V0OiBJVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAkcm91dGUsICRsb2NhdGlvbiwgYXV0aEFwaTogQXV0aFNlcnZpY2UsIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0LCBsb2NhbFN0b3JhZ2U6IFN0b3JhZ2VXcmFwcGVyKSB7XHJcbiAgICBsZXQgb3JpZ2luYWwgPSAkbG9jYXRpb24ucGF0aDtcclxuICAgICRsb2NhdGlvbi5wYXRoID0gZnVuY3Rpb24gKHBhdGgsIHJlbG9hZCkge1xyXG4gICAgICAgIGlmIChyZWxvYWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0Um91dGUgPSAkcm91dGUuY3VycmVudDtcclxuICAgICAgICAgICAgbGV0IHVuID0gJHJvb3RTY29wZS4kb24oJyRsb2NhdGlvbkNoYW5nZVN1Y2Nlc3MnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkcm91dGUuY3VycmVudCA9IGxhc3RSb3V0ZTtcclxuICAgICAgICAgICAgICAgIHVuKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkoJGxvY2F0aW9uLCBbcGF0aF0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAkcm9vdFNjb3BlLmlzSW5zaWRlQ291cnNlUGFnZSA9IGZhbHNlO1xyXG4gICAgJHJvb3RTY29wZS5pc0hpZGVNYWluQnJlYWRjcnVtYnMgPSBmYWxzZTtcclxuICAgICRyb290U2NvcGUuYXBwVmVyc2lvbk51bWJlciA9IGJ1aWxkVmVyc2lvbk51bWJlcihcclxuICAgICAgICBBcHBQcm9wZXJ0aWVzLmFwcFZlcnNpb24sXHJcbiAgICAgICAgQXBwUHJvcGVydGllcy5zdm5SZXZpc2lvbixcclxuICAgICAgICBBcHBQcm9wZXJ0aWVzLmJ1aWxkRGF0ZSk7XHJcblxyXG4gICAgLy8gMSAtIGNvbXBsZXRlIFNTTywgbmF0aXZlIHJlZGlyZWN0XHJcbiAgICAvLyAyIC0gY2hlY2sgYXV0aGVudGljYXRpb25cclxuICAgIC8vIDMgLSB0cnkgdG8gcmVzdG9yZSBzZXNzaW9uXHJcbiAgICAvLyA0IC0gYXV0byBTU08gaWYgZW5hYmxlZFxyXG4gICAgLy8gISEhIHByZXZlbnQgY3ljbGVzXHJcbiAgICBsZXQgY29tcGxldGVkU3NvID0gYXV0aE1hbmFnZXIuY29tcGxldGVTc29JZk5lZWRlZCgpO1xyXG4gICAgbGV0IGF1dGhlbnRpY2F0aW9uUHJvbWlzZTtcclxuICAgIGlmIChjb21wbGV0ZWRTc28pIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlNTTyBpcyBjb21wbGV0ZWQuIFdhaXRpbmcgZm9yIHJlZGlyZWN0Li4uXCIpO1xyXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUHJvbWlzZSA9ICRxLnJlamVjdChcInJlZGlyZWN0XCIpO1xyXG4gICAgfSBlbHNlIGlmIChhdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IGF1dGhNYW5hZ2VyLmdldFRva2VuKCkubG9jYWxlICYmIGF1dGhNYW5hZ2VyLmdldFRva2VuKCkubG9jYWxlID09PSBBcHBQcm9wZXJ0aWVzLmN1cnJlbnRMb2NhbGUgP1xyXG4gICAgICAgICAgICBhdXRoTWFuYWdlci5nZXRUb2tlbigpLmxvY2FsZSA6IEFwcFByb3BlcnRpZXMuY3VycmVudExvY2FsZTtcclxuICAgICAgICBpZiAoIUxvZ09uQ29udHJvbGxlci5yZWxvYWRBcHBsaWNhdGlvbkZvckxvY2FsZUlmTmVlZGVkKGxvY2FsZSwgZmFsc2UpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSXMgYXV0aGVudGljYXRlZC4gU3RhcnQgcmVmcmVzaC5cIik7XHJcbiAgICAgICAgICAgIGF1dGhBcGkucmVzdGFydEF1dG9SZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uUHJvbWlzZSA9ICRxLndoZW4obnVsbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJXYWl0aW5nIGZvciBhcHBsaWNhdGlvbiByZWxvYWQgZm9yIG5ldyBsb2NhbGUgXCIgKyBsb2NhbGUpO1xyXG4gICAgICAgICAgICBhdXRoZW50aWNhdGlvblByb21pc2UgPSAkcS5yZWplY3QoXCJyZWRpcmVjdFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGF1dGhNYW5hZ2VyLnJlc3RvcmVBdmFpbGFibGUoKSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUmVzdG9yZSBzZXNzaW9uXCIpO1xyXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUHJvbWlzZSA9IGF1dGhBcGkucmVzdG9yZVNlc3Npb25PckNsZWFyVG9rZW4oYXV0aE1hbmFnZXIuZ2V0VG9rZW4oKS5yZWZyZXNoVG9rZW4pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7IC8vc2Vzc2lvbiByZXN0b3JlIGZhaWxlZFxyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhNYW5hZ2VyLmlzQXV0b1Nzb0F2YWlsYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhNYW5hZ2VyLnN0YXJ0U3NvRXhjaGFuZ2UodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkcS53aGVuKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoYXV0aE1hbmFnZXIuaXNBdXRvU3NvQXZhaWxhYmxlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkF1dG8gc3NvIGF2YWlsYWJsZVwiKTtcclxuICAgICAgICBhdXRoZW50aWNhdGlvblByb21pc2UgPSBhdXRoTWFuYWdlci5zdGFydFNzb0V4Y2hhbmdlKHRydWUpO1xyXG4gICAgfSBlbHNlIGlmIChhdXRoTWFuYWdlci5yZWRpcmVjdFJlcXVpcmVkKCkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlJlZGlyZWN0IG9uIEJVIGRvbWFpblwiKTtcclxuICAgICAgICBhdXRoTWFuYWdlci5yZWRpcmVjdFRvQlVEb21haW4oKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJHbyBmb3J3YXJkIHdpdGhvdXQgYXV0aGVudGljYXRpb25cIik7XHJcbiAgICAgICAgYXV0aGVudGljYXRpb25Qcm9taXNlID0gJHEud2hlbihudWxsKTtcclxuICAgIH1cclxuICAgIGF1dGhlbnRpY2F0aW9uUHJvbWlzZVxyXG4gICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgJHJvb3RTY29wZS5hcHBJc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgVkVSU0lPTl9TVE9SQUdFX0tFWSA9IFwidmhzLmFwcGxpY2F0aW9uLnZlcnNpb24ubnVtYmVyXCI7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJzdG9yYWdlIHZlcnNpb246IFwiICsgbG9jYWxTdG9yYWdlLmdldChWRVJTSU9OX1NUT1JBR0VfS0VZKSk7XHJcbiAgICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuY29udGFpbnMoVkVSU0lPTl9TVE9SQUdFX0tFWSlcclxuICAgICAgICAgICAgICAgICYmIGxvY2FsU3RvcmFnZS5nZXQoVkVSU0lPTl9TVE9SQUdFX0tFWSkgIT0gQXBwUHJvcGVydGllcy5idWlsZFZlcnNpb24pIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJBcHBsaWNhdGlvbiB2ZXJzaW9uIGhhcyBiZWVuIHVwZGF0ZWQgc2luY2UgeW91ciBsYXN0IHZpc2l0XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5wdXQoVkVSU0lPTl9TVE9SQUdFX0tFWSwgQXBwUHJvcGVydGllcy5idWlsZFZlcnNpb24pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAkdGltZW91dCgoKSA9PiAkcm9vdFNjb3BlLmFwcElzSW5pdGlhbGl6ZWQgPSB0cnVlLCAzMDAwKTtcclxuICAgICAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYnVpbGRWZXJzaW9uTnVtYmVyKGFwcFZlcnNpb246IGFueSwgc3ZuUmV2aXNpb246IGFueSwgYnVpbGREYXRlOiBhbnkpIHtcclxuICAgIGNvbnN0IHBhcnNlZCA9IG1vbWVudChidWlsZERhdGUsIFwiWVlZWU1NRERISG1tXCIpO1xyXG4gICAgcmV0dXJuIGFwcFZlcnNpb24gKyBcIi5cIiArIHN2blJldmlzaW9uICsgXCI7IFwiICsgcGFyc2VkLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW1cIik7XHJcbn1cclxuIiwiaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTG9hZGluZ0xpc3RlbmVyLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0Fzc2Vzc21lbnRzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Bc3Nlc3NtZW50c1JvdXRlclwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7QXNzZXNzbWVudHNTZXJ2aWNlfSBmcm9tIFwiLi9Bc3Nlc3NtZW50c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0lBc3Nlc3NtZW50fSBmcm9tIFwiLi9tb2RlbHMvSUFzc2Vzc21lbnRcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50U3RhdHVzfSBmcm9tIFwiLi9tb2RlbHMvQXNzZXNzbWVudFN0YXR1c1wiO1xyXG5pbXBvcnQge1Jlc2l6ZVZpZXdTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvUmVzaXplVmlld1NlcnZpY2VcIjtcclxuaW1wb3J0IHtTb3J0T3JkZXJ9IGZyb20gXCIuLi9Tb3J0RW50cnlcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBc3Nlc3NtZW50c0NvbnRyb2xsZXIgaW1wbGVtZW50cyBJR3JpZExvYWRpbmdMaXN0ZW5lciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImFzc2Vzc21lbnRzLkFzc2Vzc21lbnRzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyByb3dTaG93OiBNYXA8bnVtYmVyLCBib29sZWFuPiA9IG5ldyBNYXA8bnVtYmVyLCBib29sZWFuPigpO1xyXG4gICAgcHVibGljIHZpZXdUeXBlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgYXNzZXNzbWVudHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUFzc2Vzc21lbnQ+O1xyXG4gICAgcHVibGljIGRpc2FibGVSZW1vdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHB1YmxpYyB3aW5kb3c6IGFueTtcclxuICAgIHB1YmxpYyByZXNpemVWaWV3U2VydmljZTogUmVzaXplVmlld1NlcnZpY2U7XHJcblxyXG4gICAgcHVibGljIGNvbmZpcm1hdGlvbkRpYWxvZ1RleHQ6IHN0cmluZyA9IFwiVXNlciA6dXNlcl9uYW1lIGhhcyBhbHJlYWR5IHN0YXJ0ZWQgdGhlIHNjb3Jpbmcgb2YgdGhpcyBhc3Nlc3NtZW50LiBEbyB5b3Ugd2FudCB0byBub3RpZnkgaGltIGFuZCBzdGFydCBzY29yaW5nP1wiO1xyXG4gICAgcHVibGljIHNlbGVjdGVkQXNzZXNzbWVudDogSUFzc2Vzc21lbnQ7XHJcblxyXG4gICAgcHVibGljIHN0YXR1cyA9IFtcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIEFzc2Vzc21lbnRTdGF0dXNbQXNzZXNzbWVudFN0YXR1cy5ORVddLFxyXG4gICAgICAgIEFzc2Vzc21lbnRTdGF0dXNbQXNzZXNzbWVudFN0YXR1cy5JTl9TQ09SSU5HXSxcclxuICAgICAgICBBc3Nlc3NtZW50U3RhdHVzW0Fzc2Vzc21lbnRTdGF0dXMuU0NPUkVEXVxyXG4gICAgXTtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudFNjb3Jlck5hbWU6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBBc3Nlc3NtZW50c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBc3Nlc3NtZW50c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGFzc2Vzc21lbnRzU2VydmljZTogQXNzZXNzbWVudHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGFzc2Vzc21lbnRzUm91dGVyOiBBc3Nlc3NtZW50c1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnJhbmRpbmdTZXJ2aWNlOiBDdXN0b21CcmFuZGluZ1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5zY29yZUFzc2Vzc21lbnRzIHx8IHN5c3RlbVBlcm1pc3Npb25zLnNjb3JlQW55QXNzZXNzbWVudHMpO1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkFzc2Vzc21lbnRzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUFzc2Vzc21lbnQ+KCRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9hc3Nlc3NtZW50c1wiKSkpO1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudHNHcmlkTW9kZWwucGFnZVNpemUgPSA5O1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudHNHcmlkTW9kZWwuZmlsdGVyLnN0YXR1cyA9IHRoaXMuc3RhdHVzWzFdO1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudHNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMudmlld1R5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdy5iaW5kKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLnNldFJlc2l6ZVZpZXdUeXBlKHRoaXMudmlld1R5cGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QXNzZXNzbWVudERldGFpbHNVcmwoaWQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXNzZXNzbWVudHNSb3V0ZXIuYXNzZXNzbWVudERldGFpbHNVcmwoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydExvYWRpbmcoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuZExvYWRpbmcoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuQXNzZXNzbWVudChhc3Nlc3NtZW50OiBJQXNzZXNzbWVudCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50ID0gYXNzZXNzbWVudDtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0VG9Bc3Nlc3NtZW50RGV0YWlsVXJsKGFzc2Vzc21lbnQuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvQXNzZXNzbWVudERldGFpbFVybChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnBhdGgodGhpcy5hc3Nlc3NtZW50c1JvdXRlci5hc3Nlc3NtZW50RGV0YWlsc1VybChpZCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEFzc2Vzc21lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24ucGF0aCh0aGlzLmFzc2Vzc21lbnRzUm91dGVyLmFzc2Vzc21lbnREZXRhaWxzVXJsKHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50LmlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NvcnRpbmcoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3Nlc3NtZW50c0dyaWRNb2RlbC5zb3J0aW5nLmZpbHRlcihzID0+IHMuZmllbGROYW1lID09PSBmaWVsZE5hbWUpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU29ydGluZ0Rlc2MoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5hc3Nlc3NtZW50c0dyaWRNb2RlbC5zb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIGxldCBzb3J0RW50cnkgPSB0aGlzLmFzc2Vzc21lbnRzR3JpZE1vZGVsLnNvcnRpbmcuZmlsdGVyKHMgPT4gcy5maWVsZE5hbWUgPT09IGZpZWxkTmFtZSkucG9wKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3J0RW50cnkgJiYgc29ydEVudHJ5LnNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkRFU0M7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWNvZGVBc3Nlc3NtZW50U3RhdHVzKHN0YXR1czogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSBcIk5FV1wiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIk5ld1wiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIklOX1NDT1JJTkdcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJJbiBzY29yaW5nXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiU0NPUkVEXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiU2NvcmVkXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhclNlYXJjaEZvcm0oKSB7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50c0dyaWRNb2RlbC5maWx0ZXIgPSB7fTtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRzR3JpZE1vZGVsLmZpbHRlci5zdGF0dXMgPSB0aGlzLnN0YXR1c1sxXTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50c1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQXNzZXNzbWVudHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZExvYWRpbmdMaXN0ZW5lciwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50c1NlcnZpY2V9IGZyb20gXCIuL0Fzc2Vzc21lbnRzU2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUFzc2Vzc21lbnRSZXN1bHR9IGZyb20gXCIuL21vZGVscy9JQXNzZXNzbWVudFJlc3VsdFwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50U3RhdHVzfSBmcm9tIFwiLi9tb2RlbHMvQXNzZXNzbWVudFN0YXR1c1wiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SUFzc2Vzc21lbnR9IGZyb20gXCIuL21vZGVscy9JQXNzZXNzbWVudFwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi9idW5kbGVzL0J1bmRsZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2Vzc21lbnRzRGV0YWlsc0NvbnRyb2xsZXIgaW1wbGVtZW50cyBJR3JpZExvYWRpbmdMaXN0ZW5lciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImFzc2Vzc21lbnRzLkFzc2Vzc21lbnREZXRhaWxzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0luaXRpYWxpemVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgYXNzZXNzbWVudFJlc3VsdHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUFzc2Vzc21lbnRSZXN1bHQ+O1xyXG4gICAgcHVibGljIHF1ZXN0aW9uU2NvcmU6IE1hcDxudW1iZXIsIG51bWJlcj4gPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xyXG4gICAgcHVibGljIGlzUXVlc3Rpb25TY29yZUNhbGN1bGF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBkaXNhYmxlUmVtb3ZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHByaXZhdGUgZGlzYWJsZUxvY2F0aW9uQ2hhbmdlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcklkOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG4gICAgcHJpdmF0ZSByZWRpcmVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYXNzZXNzbWVudElkOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGFzc2Vzc21lbnQ6IElBc3Nlc3NtZW50O1xyXG4gICAgcHJpdmF0ZSBvbGRTdGF0dXM6IHN0cmluZztcclxuICAgIHByaXZhdGUgb2xkU2NvcmVySWQ6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgY29uZmlybWF0aW9uRGlhbG9nVGV4dFRlbXBsYXRlOiBzdHJpbmcgPSBcIlVzZXIgOnVzZXJfbmFtZSBoYXMgYWxyZWFkeSBzdGFydGVkIHRoZSBzY29yaW5nIG9mIHRoaXMgYXNzZXNzbWVudC4gRG8geW91IHdhbnQgdG8gbm90aWZ5IGhpbSBhbmQgc3RhcnQgc2NvcmluZz9cIjtcclxuICAgIHB1YmxpYyBjb25maXJtYXRpb25EaWFsb2dUZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGFzc2Vzc21lbnRTY29yaW5nRXJyb3JEaWFsb2dUZXh0VGVtcGxhdGU6IHN0cmluZyA9IFwiVXNlciA6dXNlcl9uYW1lIGhhcyBzdGFydGVkIHNjb3Jpbmcgb2YgdGhpcyBhc3Nlc3NtZW50LiBZb3VyIHNjb3JlcyBhbmQgY29tbWVudHMgYXJlIHJldmVydGVkLlwiO1xyXG4gICAgcHVibGljIGFzc2Vzc21lbnRTY29yaW5nRXJyb3JEaWFsb2dUZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGJ1bmRsZTogSUJ1bmRsZTtcclxuICAgIHB1YmxpYyBpbml0aWFsaXplUHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxhbnk+O1xyXG4gICAgcHVibGljIGNvcnJlY3RTaG93QW5zd2VyTWluaW1hbFNjb3JlOiBudW1iZXIgPSA1MDtcclxuICAgIHB1YmxpYyB0b3RhbFBvaW50czogbnVtYmVyO1xyXG4gICAgcHVibGljIHF1aXpTdGFydFBvaW50czogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBpc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBc3Nlc3NtZW50c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBc3Nlc3NtZW50c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBBdXRoUmVkaXJlY3QuTkFNRSxcclxuICAgICAgICBCdW5kbGVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkICRyb3V0ZVBhcmFtczogbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGFzc2Vzc21lbnRzU2VydmljZTogQXNzZXNzbWVudHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGFzc2Vzc21lbnRzUm91dGVyOiBBc3Nlc3NtZW50c1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBidW5kbGVTZXJ2aWNlOiBCdW5kbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kU3lzdGVtUGVybWlzc2lvbnMoc3lzdGVtUGVybWlzc2lvbnMgPT4gc3lzdGVtUGVybWlzc2lvbnMuc2NvcmVBc3Nlc3NtZW50cyB8fCBzeXN0ZW1QZXJtaXNzaW9ucy5zY29yZUFueUFzc2Vzc21lbnRzKTtcclxuXHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50SWQgPSB0aGlzLiRyb3V0ZVBhcmFtc1tBc3Nlc3NtZW50c1JvdXRlci5BU1NFU1NNRU5UX0lEX1BBUkFNXTtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRzU2VydmljZS5nZXRRdWl6UXVlc3Rpb25zUG9pbnRzKHRoaXMuYXNzZXNzbWVudElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxQb2ludHMgPSByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudHNTZXJ2aWNlLmdldFF1aXpRdWVzdGlvblJlc3VsdEN1cnJlbnRQb2ludHNOdW1iZXIodGhpcy5hc3Nlc3NtZW50SWQpLnRoZW4ocG9pbnRzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6U3RhcnRQb2ludHMgPSBwb2ludHM7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKVxyXG4gICAgICAgICAgICAuaGVhZGVyKFwiXCIgKyB0aGlzLmFzc2Vzc21lbnRJZClcclxuICAgICAgICAgICAgLmFkZFBhcmVudExpbmsoXCJBc3Nlc3NtZW50c1wiLFxyXG4gICAgICAgICAgICAgICAgXCIjXCIgKyB0aGlzLmFzc2Vzc21lbnRzUm91dGVyLmFzc2Vzc21lbnRzVXJsKCkpXHJcbiAgICAgICAgICAgIC51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50UmVzdWx0c0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElBc3Nlc3NtZW50UmVzdWx0PigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvYXNzZXNzbWVudHMvXCIgKyB0aGlzLmFzc2Vzc21lbnRJZCArIFwiL3Jlc3VsdHNcIikpKTtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRSZXN1bHRzR3JpZE1vZGVsLnBhZ2VTaXplID0gMzAwO1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudFJlc3VsdHNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRpYWxpemVQcm9taXNlID0gdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICBhdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLFxyXG4gICAgICAgICAgICB0aGlzLmxvYWRBc3Nlc3NtZW50KClcclxuICAgICAgICBdKVxyXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2VzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlcklkID0gcmVzcG9uc2VzWzBdLmlkO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFzc2Vzc21lbnQgPSByZXNwb25zZXNbMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzZXNzbWVudC5zdGF0dXMgPT0gQXNzZXNzbWVudFN0YXR1c1tBc3Nlc3NtZW50U3RhdHVzLlNDT1JFRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAvL3RvZG86IGRvIG5vdGhpbmdcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXNzZXNzbWVudC5zdGF0dXMgPT0gQXNzZXNzbWVudFN0YXR1c1tBc3Nlc3NtZW50U3RhdHVzLk5FV10pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydFNjb3JpbmdBc3Nlc3NtZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFzc2Vzc21lbnQuc3RhdHVzID09IEFzc2Vzc21lbnRTdGF0dXNbQXNzZXNzbWVudFN0YXR1cy5JTl9TQ09SSU5HXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhc3Nlc3NtZW50LnNjb3JlcklkICE9IHRoaXMuY3VycmVudFVzZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDb25maXJtYXRpb25EaWFsb2coKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVMb2NhdGlvbkNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LmZvcndhcmRUb0FjY2Vzc0RlbmllZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplUHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhcnRTY29yaW5nQXNzZXNzbWVudCgpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFzc2Vzc21lbnRzU2VydmljZS5zdGFydEFzc2Vzc21lbnRTY29yaW5nKHRoaXMuYXNzZXNzbWVudC5pZCwgdGhpcy5hc3Nlc3NtZW50LnZlcnNpb24pXHJcbiAgICAgICAgICAgIC50aGVuKChzdGFydGVkQXNzZXNzbWVudDogSUFzc2Vzc21lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudCA9IGFuZ3VsYXIuY29weShzdGFydGVkQXNzZXNzbWVudCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hc3Nlc3NtZW50LnNjb3JlcklkICE9IHRoaXMuY3VycmVudFVzZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbkRpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuY29tbW9uRXJyb3IocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0JhY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVMb2NhdGlvbkNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgICQoJy5tb2RhbC1iYWNrZHJvcCcpLnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmFzc2Vzc21lbnRzUm91dGVyLmFzc2Vzc21lbnRzVXJsKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLm9sZFN0YXR1cyAmJiB0aGlzLm9sZFNjb3JlcklkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudHNTZXJ2aWNlLmNhbmNlbENoYW5nZXModGhpcy5hc3Nlc3NtZW50SWQsIHRoaXMub2xkU3RhdHVzLCB0aGlzLm9sZFNjb3JlcklkKVxyXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjcmVwbGFjZVNjb3JlckNvbmZpcm1hdGlvbkRpYWxvZ1wiKS5tb2RhbChcImhpZGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnLm1vZGFsLWJhY2tkcm9wJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChcIiNyZXBsYWNlU2NvcmVyQ29uZmlybWF0aW9uRGlhbG9nXCIpLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgICAgICAgICAgJCgnLm1vZGFsLWJhY2tkcm9wJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0JhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNjb3JlQXNzZXNzbWVudCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgbGV0IHNjb3JlUHJvbWlzZSA9ICF0aGlzLmlzRWRpdFxyXG4gICAgICAgICAgICA/IHRoaXMuYXNzZXNzbWVudHNTZXJ2aWNlLnNjb3JlUXVpeih0aGlzLmFzc2Vzc21lbnQuaWQsIHRoaXMuYXNzZXNzbWVudC52ZXJzaW9uLCB0aGlzLmFzc2Vzc21lbnRSZXN1bHRzR3JpZE1vZGVsLmVudHJpZXMpXHJcbiAgICAgICAgICAgIDogdGhpcy5hc3Nlc3NtZW50c1NlcnZpY2UudXBkYXRlUXVpelNjb3Jlcyh0aGlzLmFzc2Vzc21lbnQuaWQsIHRoaXMuYXNzZXNzbWVudC52ZXJzaW9uLCB0aGlzLmFzc2Vzc21lbnRSZXN1bHRzR3JpZE1vZGVsLmVudHJpZXMpO1xyXG5cclxuICAgICAgICBzY29yZVByb21pc2VcclxuICAgICAgICAgICAgLnRoZW4oc3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiQXNzZXNzbWVudCBzdWNjZXNzZnVsbHkgc2NvcmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT09IFwiSW52YWxpZFN0YXRlXCIgfHwgcmVzcG9uc2UuZGF0YS5lcnJvciA9PT0gXCJPcHRpbWlzdGljTG9ja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgcmVzcG9uc2UuZGF0YS5lcnJvciA9PT0gXCJlcnJvci5hc3Nlc3NtZW50LmFscmVhZHkuc2NvcmVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRBc3Nlc3NtZW50KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QXNzZXNzbWVudFNjb3JpbmdEaWFsb2coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5jb21tb25FcnJvcihyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9CYWNrKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmRMb2FkaW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBdWRpb1Jlc3BvbnNlVXJscygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRBdWRpb1Jlc3BvbnNlVXJscygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0NvbmZpcm1hdGlvbkRpYWxvZygpIHtcclxuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbkRpYWxvZ1RleHQgPSB0aGlzLmNvbmZpcm1hdGlvbkRpYWxvZ1RleHRUZW1wbGF0ZVxyXG4gICAgICAgICAgICAucmVwbGFjZSgnOnVzZXJfbmFtZScsIHRoaXMuYXNzZXNzbWVudC5zY29yZXJOYW1lKTtcclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNyZXBsYWNlU2NvcmVyQ29uZmlybWF0aW9uRGlhbG9nXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0Fzc2Vzc21lbnRTY29yaW5nRGlhbG9nKCkge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudFNjb3JpbmdFcnJvckRpYWxvZ1RleHQgPSB0aGlzLmFzc2Vzc21lbnRTY29yaW5nRXJyb3JEaWFsb2dUZXh0VGVtcGxhdGVcclxuICAgICAgICAgICAgLnJlcGxhY2UoJzp1c2VyX25hbWUnLCB0aGlzLmFzc2Vzc21lbnQuc2NvcmVyTmFtZSk7XHJcbiAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICQoXCIjc2NvcmluZ0Vycm9yRGlhbG9nXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0U2NvcmVyKCkge1xyXG4gICAgICAgIHRoaXMub2xkU3RhdHVzID0gdGhpcy5hc3Nlc3NtZW50LnN0YXR1cztcclxuICAgICAgICB0aGlzLm9sZFNjb3JlcklkID0gdGhpcy5hc3Nlc3NtZW50LnNjb3JlcklkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFzc2Vzc21lbnRzU2VydmljZS5zZXRTY29yZXIodGhpcy5hc3Nlc3NtZW50SWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnQgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzc2Vzc21lbnQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmNvbW1vbkVycm9yKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0JhY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dTY29yZVRvQWxsRGlhbG9nKCkge1xyXG4gICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI3Njb3JlVG9BbGxEaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVBvcHVwKGVsZW1lbnRJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgJChcIiNcIiArIGVsZW1lbnRJZCkubW9kYWwoXCJoaWRlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTY29yZXNUb0FsbEFuc3dlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50UmVzdWx0c0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goYXNzZXNzbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnQuY29tbWVudCA9ICQoJyNnbG9iYWxDb21tZW50JykudmFsKCk7XHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnQuc2NvcmUgPSBwYXJzZUludCgkKCcjZ2xvYmFsU2NvcmVJbnB1dCcpLnZhbCgpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNsb3NlUG9wdXAoJ3Njb3JlVG9BbGxEaWFsb2cnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tFbXB0eShjb250cm9sRWxlbWVudElkOiBzdHJpbmcsIGVsZW1lbnRJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYoJCgnIycgKyBjb250cm9sRWxlbWVudElkKS52YWwoKS5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAkKCcjJyArIGVsZW1lbnRJZCkucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKCcjJyArIGVsZW1lbnRJZCkuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQXNzZXNzbWVudCgpOiBhbmd1bGFyLklQcm9taXNlPElBc3Nlc3NtZW50PiAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFzc2Vzc21lbnRzU2VydmljZS5nZXQodGhpcy5hc3Nlc3NtZW50SWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnQgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzc2Vzc21lbnQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEJ1bmRsZShidW5kbGVJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQnVuZGxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVuZGxlU2VydmljZS5nZXRCdW5kbGUoYnVuZGxlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKGJ1bmRsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1bmRsZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQXVkaW9SZXNwb25zZVVybHMoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGFzc2Vzc21lbnRzV2l0aEF1ZGlvID0gW107XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50UmVzdWx0c0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIGUucmVzcG9uc2VEYXRhID0gZS5qc29uRGF0YSA/IEpTT04ucGFyc2UoZS5qc29uRGF0YSkgOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoZS5yZXNwb25zZURhdGEgJiYgZS5yZXNwb25zZURhdGEuYnVuZGxlRmlsZUtleSkge1xyXG4gICAgICAgICAgICAgICAgYXNzZXNzbWVudHNXaXRoQXVkaW8ucHVzaChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLmFzc2Vzc21lbnQuYnVuZGxlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlKHRoaXMuYXNzZXNzbWVudC5idW5kbGVJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhc3Nlc3NtZW50c1dpdGhBdWRpby5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT4gZSkuYnVuZGxlRmlsZVVybCA9IHRoaXMuYnVuZGxlLmZpbGVzTWFwLmhhcyhlLnJlc3BvbnNlRGF0YS5idW5kbGVGaWxlS2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmJ1bmRsZS5maWxlc01hcC5nZXQoZS5yZXNwb25zZURhdGEuYnVuZGxlRmlsZUtleSkudXJsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVcmxGb3JBdHRhY2htZW50KGZpbGU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuYnVuZGxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1bmRsZS5maWxlc01hcC5oYXMoZmlsZS5idW5kbGVGaWxlS2V5KVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmJ1bmRsZS5maWxlc01hcC5nZXQoZmlsZS5idW5kbGVGaWxlS2V5KS51cmxcclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0RWRpdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRWRpdCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzY29yZWRQb2ludHMoKSB7XHJcbiAgICAgICAgbGV0IHNjb3JlZFBvaW50cyA9IHRoaXMucXVpelN0YXJ0UG9pbnRzO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNRdWVzdGlvblNjb3JlQ2FsY3VsYXRlZCAmJiB0aGlzLmFzc2Vzc21lbnRSZXN1bHRzR3JpZE1vZGVsLmVudHJpZXMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pc1F1ZXN0aW9uU2NvcmVDYWxjdWxhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50UmVzdWx0c0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goYXNzZXNzbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRzU2VydmljZS5nZXRRdWl6UXVlc3Rpb25Qb2ludHMoYXNzZXNzbWVudC5xdWVzdGlvbklkKS50aGVuKHBvaW50cyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvblNjb3JlLnNldChhc3Nlc3NtZW50LnF1ZXN0aW9uSWQsIHBvaW50cylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRSZXN1bHRzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChhc3Nlc3NtZW50cyAgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYXNzZXNzbWVudHMuc2NvcmUgPj0gdGhpcy5jb3JyZWN0U2hvd0Fuc3dlck1pbmltYWxTY29yZSkge1xyXG4gICAgICAgICAgICAgICAgc2NvcmVkUG9pbnRzKz0gdGhpcy5xdWVzdGlvblNjb3JlLmdldChhc3Nlc3NtZW50cy5xdWVzdGlvbklkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gc2NvcmVkUG9pbnRzO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50U3RhdHVzfSBmcm9tIFwiLi9tb2RlbHMvQXNzZXNzbWVudFN0YXR1c1wiO1xyXG5pbXBvcnQgSVByb21pc2UgPSBhbmd1bGFyLklQcm9taXNlO1xyXG5pbXBvcnQge0lBc3Nlc3NtZW50UmVzdWx0fSBmcm9tIFwiLi9tb2RlbHMvSUFzc2Vzc21lbnRSZXN1bHRcIjtcclxuaW1wb3J0IHtJQXNzZXNzbWVudH0gZnJvbSBcIi4vbW9kZWxzL0lBc3Nlc3NtZW50XCI7XHJcbmltcG9ydCBJUmVxdWVzdFNob3J0Y3V0Q29uZmlnID0gYW5ndWxhci5JUmVxdWVzdFNob3J0Y3V0Q29uZmlnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2Vzc21lbnRzU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImFzc2Vzc21lbnRzLkFzc2Vzc21lbnRzU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRBc3Nlc3NtZW50U2NvcmluZyhhc3Nlc3NtZW50SWQ6IG51bWJlciwgYXNzZXNzbWVudFZlcnNpb246IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUFzc2Vzc21lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvYXNzZXNzbWVudHMvOmFzc2Vzc21lbnRJZC9zdGFydFNjb3Jpbmc/YXNzZXNzbWVudFZlcnNpb249OmFzc2Vzc21lbnRWZXJzaW9uXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjphc3Nlc3NtZW50SWRcIiwgYXNzZXNzbWVudElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YXNzZXNzbWVudFZlcnNpb25cIiwgYXNzZXNzbWVudFZlcnNpb24pLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RhdHVzKGFzc2Vzc21lbnRJZDogbnVtYmVyKTogSVByb21pc2U8QXNzZXNzbWVudFN0YXR1cz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9hc3Nlc3NtZW50cy86aWQvc3RhdHVzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBhc3Nlc3NtZW50SWQpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2NvcmVySWQoYXNzZXNzbWVudElkOiBudW1iZXIpOiBJUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYXNzZXNzbWVudHMvOmlkL3Njb3JlclwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgYXNzZXNzbWVudElkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNjb3Jlck5hbWUoYXNzZXNzbWVudElkOiBudW1iZXIpOiBJUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYXNzZXNzbWVudHMvOmFzc2Vzc21lbnRJZC9zY29yZXJOYW1lXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjphc3Nlc3NtZW50SWRcIiwgYXNzZXNzbWVudElkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbENoYW5nZXMoYXNzZXNzbWVudElkOiBudW1iZXIsIGFzc2Vzc21lbnRTdGF0dXM6IHN0cmluZywgc2NvcmVySWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9hc3Nlc3NtZW50cy86aWQvY2FuY2VsP3N0YXR1cz06c3RhdHVzJnNjb3Jlcj06c2NvcmVyXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBhc3Nlc3NtZW50SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzdGF0dXNcIiwgYXNzZXNzbWVudFN0YXR1cylcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNjb3JlclwiLCBzY29yZXJJZCkuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVRdWl6U2NvcmVzKGFzc2Vzc21lbnRJZDogbnVtYmVyLCBhc3Nlc3NtZW50VmVyc2lvbjogbnVtYmVyLCBhc3Nlc3NtZW50UmVzdWx0czogSUFzc2Vzc21lbnRSZXN1bHRbXSkge1xyXG4gICAgICAgIGxldCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgIGlnbm9yZTQwOTogdHJ1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvYXNzZXNzbWVudHMvOmFzc2Vzc21lbnRJZC91cGRhdGVBc3Nlc3NtZW50UmVzdWx0P2Fzc2Vzc21lbnRWZXJzaW9uPTphc3Nlc3NtZW50VmVyc2lvblwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmFzc2Vzc21lbnRJZFwiLCBhc3Nlc3NtZW50SWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6YXNzZXNzbWVudFZlcnNpb25cIiwgYXNzZXNzbWVudFZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLCBhc3Nlc3NtZW50UmVzdWx0cywgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+IGNvbmZpZ1xyXG4gICAgICAgICkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzY29yZVF1aXooYXNzZXNzbWVudElkOiBudW1iZXIsIGFzc2Vzc21lbnRWZXJzaW9uOiBudW1iZXIsIGFzc2Vzc21lbnRSZXN1bHRzOiBJQXNzZXNzbWVudFJlc3VsdFtdKSB7XHJcbiAgICAgICAgbGV0IGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgaWdub3JlNDA5OiB0cnVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9hc3Nlc3NtZW50cy86YXNzZXNzbWVudElkL2Fzc2Vzc21lbnRSZXN1bHRzP2Fzc2Vzc21lbnRWZXJzaW9uPTphc3Nlc3NtZW50VmVyc2lvblwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmFzc2Vzc21lbnRJZFwiLCBhc3Nlc3NtZW50SWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6YXNzZXNzbWVudFZlcnNpb25cIiwgYXNzZXNzbWVudFZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLCBhc3Nlc3NtZW50UmVzdWx0cywgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+IGNvbmZpZ1xyXG4gICAgICAgICkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTY29yZXIoYXNzZXNzbWVudElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElBc3Nlc3NtZW50PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2Fzc2Vzc21lbnRzLzphc3Nlc3NtZW50SWQvc2V0U2NvcmVyXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjphc3Nlc3NtZW50SWRcIiwgYXNzZXNzbWVudElkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldChhc3Nlc3NtZW50SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUFzc2Vzc21lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYXNzZXNzbWVudHMvOmFzc2Vzc21lbnRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YXNzZXNzbWVudElkXCIsIGFzc2Vzc21lbnRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TmV3QXNzZW1lbnRzRm9ySW5zdHJ1Y3RvcigpIDogYW5ndWxhci5JUHJvbWlzZTxJQXNzZXNzbWVudFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2Fzc2Vzc21lbnRzL2luc3RydWN0b3JOZXdcIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1aXpRdWVzdGlvbnNDb3VudChhc3Nlc3NtZW50SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2Fzc2Vzc21lbnRzLzphc3Nlc3NtZW50SWQvcXVpelF1ZXN0aW9uc0NvdW50XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjphc3Nlc3NtZW50SWRcIiwgYXNzZXNzbWVudElkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1aXpRdWVzdGlvbnNQb2ludHMoYXNzZXNzbWVudElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9hc3Nlc3NtZW50cy86YXNzZXNzbWVudElkL2dldFF1aXpRdWVzdGlvbnNQb2ludHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmFzc2Vzc21lbnRJZFwiLCBhc3Nlc3NtZW50SWQpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVpelF1ZXN0aW9uUG9pbnRzKHF1ZXN0aW9uSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2Fzc2Vzc21lbnRzLzpxdWVzdGlvbklkL2dldFF1aXpRdWVzdGlvblBvaW50c1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cXVlc3Rpb25JZFwiLCBxdWVzdGlvbklkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1aXpRdWVzdGlvblJlc3VsdEN1cnJlbnRQb2ludHNOdW1iZXIoYXNzZXNzbWVudElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9hc3Nlc3NtZW50cy86YXNzZXNzbWVudElkL2dldFF1aXpRdWVzdGlvblJlc3VsdEN1cnJlbnRQb2ludHNOdW1iZXJcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmFzc2Vzc21lbnRJZFwiLCBhc3Nlc3NtZW50SWQpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiZXhwb3J0IGVudW0gQXNzZXNzbWVudFN0YXR1cyB7XHJcbiAgICBORVcsXHJcbiAgICBJTl9TQ09SSU5HLFxyXG4gICAgU0NPUkVEXHJcbn0iLCJpbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0xvZ09uQ29udHJvbGxlcn0gZnJvbSBcIi4vTG9nT25Db250cm9sbGVyXCI7XHJcbmltcG9ydCB7TG9nT3V0Q29udHJvbGxlcn0gZnJvbSBcIi4vTG9nT3V0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge1Jlc3RvcmVQYXNzd29yZENvbnRyb2xsZXJ9IGZyb20gXCIuL1Jlc3RvcmVQYXNzd29yZENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtDcmVhdGVOZXdQYXNzd29yZENvbnRyb2xsZXJ9IGZyb20gXCIuL0NyZWF0ZU5ld1Bhc3N3b3JkQ29udHJvbGxlclwiO1xyXG5cclxuaW1wb3J0IHtBdXRoQ29yZU1vZHVsZX0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aENvcmVNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi8uLi91cmxzL1VybHNNb2R1bGVcIjtcclxuaW1wb3J0IHtJbmZyYXN0cnVjdHVyZU1vZHVsZX0gZnJvbSBcIi4vLi4vaW5mcmFzdHJ1Y3R1cmUvSW5mcmFzdHJ1Y3R1cmVNb2R1bGVcIjtcclxuaW1wb3J0IHtDaGVja1ZhbGlkQ29kZUNvbnRyb2xsZXJ9IGZyb20gXCIuL0NoZWNrVmFsaWRDb2RlQ29udHJvbGxlclwiO1xyXG5cclxuZXhwb3J0IHZhciBBdXRoTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiYXV0aFwiLCBbXHJcbiAgICAgICAgQXV0aENvcmVNb2R1bGUubmFtZSxcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgSW5mcmFzdHJ1Y3R1cmVNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKEF1dGhTZXJ2aWNlLk5BTUUsIEF1dGhTZXJ2aWNlKVxyXG4gICAgLmNvbnRyb2xsZXIoTG9nT3V0Q29udHJvbGxlci5OQU1FLCBMb2dPdXRDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoTG9nT25Db250cm9sbGVyLk5BTUUsIExvZ09uQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKFJlc3RvcmVQYXNzd29yZENvbnRyb2xsZXIuTkFNRSwgUmVzdG9yZVBhc3N3b3JkQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKENyZWF0ZU5ld1Bhc3N3b3JkQ29udHJvbGxlci5OQU1FLCBDcmVhdGVOZXdQYXNzd29yZENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihDaGVja1ZhbGlkQ29kZUNvbnRyb2xsZXIuTkFNRSwgQ2hlY2tWYWxpZENvZGVDb250cm9sbGVyKTsiLCJpbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7SVRva2VuSW5mb30gZnJvbSBcIi4vLi4vYXV0aGNvcmUvSVRva2VuSW5mb1wiO1xyXG5pbXBvcnQge0lMb2dvblByb3ZpZGVyfSBmcm9tIFwiLi9JTG9nb25Qcm92aWRlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4uL2F1dGhjb3JlL0V2ZW50XCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtBdXRoUm91dGVyfSBmcm9tIFwiLi4vdXJscy9BdXRoUm91dGVyXCI7XHJcbmltcG9ydCBJUHJvbWlzZSA9IGFuZ3VsYXIuSVByb21pc2U7XHJcblxyXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJhdXRoLkF1dGhTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgVE9LRU5fUkVKRUNURURfUkVTUE9OU0UgPSBcImludmFsaWRfcmVxdWVzdFwiO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgTUFYX1JFU1RPUkVfQVRURU1QVFMgPSAzO1xyXG5cclxuICAgIHByaXZhdGUgcHJvdmlkZXJzOiBBcnJheTxJTG9nb25Qcm92aWRlcj4gPSBudWxsO1xyXG4gICAgcHJpdmF0ZSByZXN0b3JlU2Vzc2lvblByb21pc2VzTWFwOiBNYXA8c3RyaW5nLCBJUHJvbWlzZTxhbnk+PiA9IG5ldyBNYXA8c3RyaW5nLCBJUHJvbWlzZTxhbnk+PigpO1xyXG4gICAgcHJpdmF0ZSByZXN0b3JlU2Vzc2lvblRpbWVyc01hcDogTWFwPHN0cmluZywgSVByb21pc2U8YW55Pj4gPSBuZXcgTWFwPHN0cmluZywgSVByb21pc2U8YW55Pj4oKTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBBdXRoUm91dGVyLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUm91dGVyOiBBdXRoUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgICAgICAkcm9vdFNjb3BlLiRvbihFdmVudC5MT0dHRURfT0ZGLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2xlYXIgYWxsIHJlc3RvcmVTZXNzaW9uIHRpbWVycyBvbiBMT0dHRURfT0ZGIGV2ZW50XCIpO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVTZXNzaW9uVGltZXJzTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQuY2FuY2VsKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZVNlc3Npb25UaW1lcnNNYXAuY2xlYXIoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGdldFByb3ZpZGVycygpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElMb2dvblByb3ZpZGVyPj4ge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3ZpZGVycykge1xyXG4gICAgICAgICAgICB2YXIgcHJvbWlzZTogYW5ndWxhci5JRGVmZXJyZWQ8QXJyYXk8SUxvZ29uUHJvdmlkZXI+PiA9IHRoaXMuJHEuZGVmZXIoKTtcclxuICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKHRoaXMucHJvdmlkZXJzKTtcclxuICAgICAgICAgICAgcmV0dXJuIHByb21pc2UucHJvbWlzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zZXR0aW5ncy9jb21tb24vbG9nb25wcm92aWRlcnNcIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGhlUmVzdWx0OiBBcnJheTxJTG9nb25Qcm92aWRlcj4gPSA8QXJyYXk8SUxvZ29uUHJvdmlkZXI+PiByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzID0gdGhlUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoZVJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFByb3ZpZGVyc0J5QlUoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SUxvZ29uUHJvdmlkZXI+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3NldHRpbmdzL2NvbW1vbi9sb2dvbnByb3ZpZGVycy86YnVzaW5lc3NVbml0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxBcnJheTxJTG9nb25Qcm92aWRlcj4+cmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50VXNlcigpOiBhbmd1bGFyLklQcm9taXNlPElVc2VySW5mbz4ge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dGhNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEud2hlbih0aGlzLmF1dGhNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3NlY3VyaXR5L3VzZXJcIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLmxvZ09uKHJlc3VsdC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvZ09uKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElVc2VySW5mbz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhlbnRpY2F0ZShcclxuICAgICAgICAgICAge1wiZ3JhbnRfdHlwZVwiOiBcInBhc3N3b3JkXCIsIFwidXNlcm5hbWVcIjogdXNlcm5hbWUsIFwicGFzc3dvcmRcIjogcGFzc3dvcmR9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdG9yZVNlc3Npb24odG9rZW46IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SVVzZXJJbmZvPiB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzdG9yZVNlc3Npb25Qcm9taXNlc01hcC5oYXModG9rZW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc3RvcmVTZXNzaW9uUHJvbWlzZXNNYXAuZ2V0KHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTZXNzaW9uIHJlc3RvcmUgZmlyZWQhXCIpO1xyXG4gICAgICAgIHRoaXMucmVzdG9yZVNlc3Npb25Qcm9taXNlc01hcC5zZXQodG9rZW4sIHRoaXMuYXV0aGVudGljYXRlKFxyXG4gICAgICAgICAgICB7XCJncmFudF90eXBlXCI6IFwicmVmcmVzaF90b2tlblwiLCBcInJlZnJlc2hfdG9rZW5cIjogdG9rZW59KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVTZXNzaW9uUHJvbWlzZXNNYXAuZGVsZXRlKHRva2VuKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3RvcmVTZXNzaW9uUHJvbWlzZXNNYXAuZ2V0KHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGF1dGhlbnRpY2F0ZShwYXJhbXM6IGFueSk6IGFuZ3VsYXIuSVByb21pc2U8SVVzZXJJbmZvPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAoe1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwicG9zdFwiLFxyXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3Rva2VuXCIpLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIn0sXHJcbiAgICAgICAgICAgIGRhdGE6IHBhcmFtcyxcclxuICAgICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdDogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAkLnBhcmFtKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkudGhlbih0b2tlblJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYW5nZVRva2VuSW5mbyh0b2tlblJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVRva2VuSW5mbyh0b2tlblJlc3VsdCwgc2F2ZVByZXZUb2tlbj8pOiBhbmd1bGFyLklQcm9taXNlPElVc2VySW5mbz4ge1xyXG4gICAgICAgIGxldCBwcmV2VG9rZW4gPSB0aGlzLmF1dGhNYW5hZ2VyLmdldFByZXZUb2tlbigpO1xyXG4gICAgICAgIGlmIChzYXZlUHJldlRva2VuICYmICEocHJldlRva2VuICYmIHByZXZUb2tlbi5hY2Nlc3NUb2tlbiAmJiBwcmV2VG9rZW4uYWNjZXNzVG9rZW4ubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5zYXZlUHJldlRva2VuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXV0aE1hbmFnZXIubG9nT2ZmKCk7XHJcbiAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5zYXZlVG9rZW4odG9rZW5SZXN1bHQgJiYgdG9rZW5SZXN1bHQuZGF0YSA/IHtcclxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHRva2VuUmVzdWx0LmRhdGFbXCJhY2Nlc3NfdG9rZW5cIl0sXHJcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW5SZXN1bHQuZGF0YVtcInJlZnJlc2hfdG9rZW5cIl0sXHJcbiAgICAgICAgICAgIHRva2VuVHlwZTogdG9rZW5SZXN1bHQuZGF0YVtcInRva2VuX3R5cGVcIl0sXHJcbiAgICAgICAgICAgIGV4cGlyZXNJbjogdG9rZW5SZXN1bHQuZGF0YVtcImV4cGlyZXNfaW5cIl0sXHJcbiAgICAgICAgICAgIGlzc3VlZEF0OiB0b2tlblJlc3VsdC5kYXRhW1wiaXNzdWVkX2F0XCJdLFxyXG4gICAgICAgICAgICByZWNlaXZlZEF0OiBtb21lbnQudXRjKCkuZm9ybWF0KCksXHJcbiAgICAgICAgICAgIGxvY2FsZTogdG9rZW5SZXN1bHQuZGF0YVtcImxvY2FsZVwiXVxyXG4gICAgICAgIH0gOiB0b2tlblJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5zdGFydEF1dG9SZWZyZXNoKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9nT2ZmKCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdmFyIHJlZnJlc2hUb2tlbiA9IHRoaXMuYXV0aE1hbmFnZXIuZ2V0VG9rZW4oKSA/IHRoaXMuYXV0aE1hbmFnZXIuZ2V0VG9rZW4oKS5yZWZyZXNoVG9rZW4gOiBudWxsO1xyXG4gICAgICAgIHRoaXMuYXV0aE1hbmFnZXIuZGlzYWJsZUF1dG9Tc28oKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3NlY3VyaXR5L2xvZ09mZlwiKSwge3JlZnJlc2hUb2tlbjogcmVmcmVzaFRva2VufSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5sb2dPZmYoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc3RhcnRBdXRvUmVmcmVzaCgpIHtcclxuICAgICAgICBsZXQgdG9rZW46IElUb2tlbkluZm8gPSB0aGlzLmF1dGhNYW5hZ2VyLmdldFRva2VuKCk7XHJcbiAgICAgICAgaWYgKCF0b2tlbiB8fCAhdG9rZW4ucmVmcmVzaFRva2VuKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVzdGFydEF1dG9SZWZyZXNoXCIpO1xyXG4gICAgICAgIGxldCBmcm9tRGF0ZTogbW9tZW50Lk1vbWVudCA9IG1vbWVudC51dGModG9rZW4uaXNzdWVkQXQpO1xyXG4gICAgICAgIGlmICh0b2tlbi5yZWNlaXZlZEF0KSB7XHJcbiAgICAgICAgICAgIGZyb21EYXRlID0gIGZyb21EYXRlLm1heChtb21lbnQudXRjKHRva2VuLnJlY2VpdmVkQXQpLnN1YnRyYWN0KDYwLCBcInNcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZXhwaXJhdGlvbkRhdGU6IG1vbWVudC5Nb21lbnQgPSBmcm9tRGF0ZS5hZGQodG9rZW4uZXhwaXJlc0luLCBcInNcIik7XHJcblxyXG4gICAgICAgIGxldCBub3c6IG1vbWVudC5Nb21lbnQgPSBtb21lbnQudXRjKCk7XHJcbiAgICAgICAgbGV0IHRpbWVJbnRlcnZhbDogbnVtYmVyID0gZXhwaXJhdGlvbkRhdGUuZGlmZihub3csIFwic1wiKSAtIDIgKiA2MDtcclxuICAgICAgICBpZiAodGltZUludGVydmFsIDwgMCkge1xyXG4gICAgICAgICAgICB0aW1lSW50ZXJ2YWwgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVSZXN0b3JlU2Vzc2lvblRpbWVyKHRva2VuLnJlZnJlc2hUb2tlbiwgdGltZUludGVydmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdG9yZVBhc3N3b3JkKGxvZ29uTmFtZTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3NlY3VyaXR5L3Jlc3RvcmUvcGFzc3dvcmRcIiksIHtsb2dvbk5hbWU6IGxvZ29uTmFtZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVOZXdQYXNzd29yZChjb2RlOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvc2VjdXJpdHkvY3JlYXRlL25ldy9wYXNzd29yZFwiKSwge2NvZGU6IGNvZGUsIHBhc3N3b3JkOiBwYXNzd29yZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhcnRBdXRvUmVmcmVzaCgpIHtcclxuICAgICAgICBsZXQgdG9rZW46IElUb2tlbkluZm8gPSB0aGlzLmF1dGhNYW5hZ2VyLmdldFRva2VuKCk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzdG9yZVNlc3Npb25UaW1lcnNNYXAuaGFzKHRva2VuLnJlZnJlc2hUb2tlbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcInN0YXJ0IGF1dG8gcmVmcmVzaFwiKTtcclxuICAgICAgICBsZXQgdGltZUludGVydmFsID0gdG9rZW4uZXhwaXJlc0luIC0gMTgwO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwibmV4dCByZXN0b3JlIGF0IFwiICsgbW9tZW50KCkuYWRkKHRpbWVJbnRlcnZhbCwgXCJzZWNvbmRzXCIpLmZvcm1hdCgpKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZVJlc3RvcmVTZXNzaW9uVGltZXIodG9rZW4ucmVmcmVzaFRva2VuLCBNYXRoLm1heCh0aW1lSW50ZXJ2YWwsIDMwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRyeVRvQXV0b1JlZnJlc2goKSB7XHJcbiAgICAgICAgbGV0IHRva2VuOiBJVG9rZW5JbmZvID0gdGhpcy5hdXRoTWFuYWdlci5nZXRUb2tlbigpO1xyXG4gICAgICAgIGlmICghdG9rZW4gfHwgIXRva2VuLnJlZnJlc2hUb2tlbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnJlc3RvcmVTZXNzaW9uVGltZXJzTWFwLmhhcyh0b2tlbi5yZWZyZXNoVG9rZW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcmVhdGVSZXN0b3JlU2Vzc2lvblRpbWVyKHRva2VuLnJlZnJlc2hUb2tlbiwgMSwgQXV0aFNlcnZpY2UuTUFYX1JFU1RPUkVfQVRURU1QVFMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlUmVzdG9yZVNlc3Npb25UaW1lcihyZWZyZXNoVG9rZW46IHN0cmluZywgdGltZUludGVydmFsOiBudW1iZXIsIGF0dGVtcHROdW1iZXI/OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnJlc3RvcmVTZXNzaW9uVGltZXJzTWFwLnNldChyZWZyZXNoVG9rZW4sXHJcbiAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZVNlc3Npb25UaW1lcnNNYXAuZGVsZXRlKHJlZnJlc2hUb2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0aE1hbmFnZXIuZ2V0VG9rZW4oKSAmJiB0aGlzLmF1dGhNYW5hZ2VyLmdldFRva2VuKCkucmVmcmVzaFRva2VuID09PSByZWZyZXNoVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlU2Vzc2lvbk9yQ2xlYXJUb2tlbihyZWZyZXNoVG9rZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2gocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCFyZXN1bHQgfHwgIXJlc3VsdC5kYXRhIHx8IHJlc3VsdC5kYXRhLmVycm9yICE9PSBBdXRoU2VydmljZS5UT0tFTl9SRUpFQ1RFRF9SRVNQT05TRSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmF1dGhNYW5hZ2VyLmdldFRva2VuKCkgJiYgdGhpcy5hdXRoTWFuYWdlci5nZXRUb2tlbigpLnJlZnJlc2hUb2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dGVtcHROdW1iZXIgfHwgYXR0ZW1wdE51bWJlciA8IEF1dGhTZXJ2aWNlLk1BWF9SRVNUT1JFX0FUVEVNUFRTKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRyeSB0byByZXBlYXQgcmVzdG9yZSBzZXNzaW9uIHJlcXVlc3RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVJlc3RvcmVTZXNzaW9uVGltZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5nZXRUb2tlbigpLnJlZnJlc2hUb2tlbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0TnVtYmVyID8gYXR0ZW1wdE51bWJlciArIDEgOiAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOb3RpZnkgdXNlciBhYm91dCBzZXNzaW9uIHJlc3RvcmUgcHJvYmxlbXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChFdmVudC5TRVNTSU9OX1JFU1RPUkVfRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0aW1lSW50ZXJ2YWwgKiAxMDAwKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc3RvcmVTZXNzaW9uT3JDbGVhclRva2VuKHJlZnJlc2hUb2tlbjogc3RyaW5nKTogSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdG9yZVNlc3Npb24ocmVmcmVzaFRva2VuKVxyXG4gICAgICAgICAgICAuY2F0Y2gocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmVzdG9yZSBzZXNzaW9uIHJlamVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZGF0YSAmJiByZXN1bHQuZGF0YS5lcnJvciA9PT0gQXV0aFNlcnZpY2UuVE9LRU5fUkVKRUNURURfUkVTUE9OU0VcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmF1dGhNYW5hZ2VyLmdldFRva2VuKClcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmF1dGhNYW5hZ2VyLmdldFRva2VuKCkucmVmcmVzaFRva2VuID09PSByZWZyZXNoVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLmVyYXNlUmVmcmVzaFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUN1cnJlbnRVc2VyKHVzZXI6IElVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5hdXRoTWFuYWdlci51cGRhdGVDdXJyZW50VXNlckZ1bGxOYW1lKHVzZXIuZnVsbE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja1ZhbGlkQ29kZUZyb21FbWFpbChjb2RlOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9zZWN1cml0eS9jaGVjay9jb2RlLzpjb2RlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb2RlXCIsIGNvZGUpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrUGFzc3dvcmQocGFzc3dvcmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBtYXRjaCA9IHBhc3N3b3JkLm1hdGNoKCcoPz0uKlswLTldKSg/PS4qWyFAIyQlXiYqXSkoPz0uKlthLXpBLVpdKScpO1xyXG4gICAgICAgIHJldHVybiBwYXNzd29yZC5sZW5ndGggPj0gOFxyXG4gICAgICAgICAgICAmJiBwYXNzd29yZC5sZW5ndGggPCAxMDBcclxuICAgICAgICAgICAgJiYgbWF0Y2ggIT0gbnVsbFxyXG4gICAgICAgICAgICAmJiBtYXRjaC5pbnB1dC5sZW5ndGggPT0gcGFzc3dvcmQubGVuZ3RoO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuL0F1dGhTZXJ2aWNlXCI7XHJcblxyXG5pbXBvcnQge0F1dGhSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0F1dGhSb3V0ZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hlY2tWYWxpZENvZGVDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiYXV0aC5DaGVja1ZhbGlkQ29kZUNvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgY29kZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBkaXNhYmxlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbG9nb25OYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2hvcnRFbWFpbDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoUm91dGVyLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkcm91dGVQYXJhbXM6IG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhSb3V0ZXI6IEF1dGhSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKFwiXCIpO1xyXG4gICAgICAgIHRoaXMubG9nb25OYW1lID0gJGxvY2F0aW9uLnNlYXJjaCgpW0F1dGhSb3V0ZXIuTE9HT05fUEFSQU1fTkFNRV07XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvZ29uTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5hdXRoUm91dGVyLnJlc3RvcmVQYXNzd29yZCgpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldFNob3J0RW1haWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrVmFsaWRDb2RlRnJvbUVtYWlsKCkge1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuY2hlY2tWYWxpZENvZGVGcm9tRW1haWwodGhpcy5jb2RlKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5hdXRoUm91dGVyLmNyZWF0ZU5ld1Bhc3N3b3JkKHRoaXMuY29kZSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLnBhc3N3b3JkLnJlc3RvcmUuaW1wb3NzaWJsZVwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJbmNvcnJlY3QgY29kZSBvciBjb2RlIGV4cGlyZWQuIFRyeSB0byByZXN0b3JlIHRoZSBwYXNzd29yZCBhZ2Fpbi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdG9yZVBhc3N3b3JkKCkge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmF1dGhSb3V0ZXIucmVzdG9yZVBhc3N3b3JkKCkpLnNlYXJjaChBdXRoUm91dGVyLkxPR09OX1BBUkFNX05BTUUsIHRoaXMubG9nb25OYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmF1dGhSb3V0ZXIubG9nb25VcmwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNob3J0RW1haWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9nb25OYW1lLmluZGV4T2YoXCJAXCIpID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3J0aW5nRW1haWwodGhpcy5sb2dvbk5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckVtYWlsQnlMb2dvbk5hbWUodGhpcy5sb2dvbk5hbWUpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gdGhpcy5zaG9ydGluZ0VtYWlsKHJlc3VsdCkpXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4gdGhpcy5zaG9ydEVtYWlsID0gdGhpcy5sb2dvbk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvcnRpbmdFbWFpbChlbWFpbDogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGVtYWlsUGFydHMgPSBlbWFpbC5zcGxpdChcIkBcIik7XHJcbiAgICAgICAgaWYgKGVtYWlsUGFydHNbMF0ubGVuZ3RoID4gMykge1xyXG4gICAgICAgICAgICB0aGlzLnNob3J0RW1haWwgPSBlbWFpbFBhcnRzWzBdLmNoYXJBdCgwKSArIFwiLi4uXCIgKyBlbWFpbFBhcnRzWzBdLmNoYXJBdChlbWFpbFBhcnRzWzBdLmxlbmd0aC0xKSArIFwiQFwiICsgZW1haWxQYXJ0c1sxXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNob3J0RW1haWwgPSBlbWFpbFBhcnRzWzBdICsgXCJAXCIgKyBlbWFpbFBhcnRzWzFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29kZVZhbGlkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVnZXhwID0gL15bMC05XXs2fSQvZztcclxuICAgICAgICByZXR1cm4gcmVnZXhwLnRlc3QodmFsdWUpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvQXV0aFJvdXRlclwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlTmV3UGFzc3dvcmRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiYXV0aC5DcmVhdGVOZXdQYXNzd29yZENvbnRyb2xsZXJcIjtcclxuICAgIHB1YmxpYyBtaW5QYXNzd29yZExlbmd0aDogbnVtYmVyID0gVXNlclNlcnZpY2UubWluUGFzc3dvcmRMZW5ndGg7XHJcblxyXG4gICAgcHVibGljIHBhc3N3b3JkOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgZXJyb3I6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgcHVibGljIGlzQ2hlY2tQYXNzd29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRpc2FibGVTYXZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGNvZGU6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJvdXRlci5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHJvdXRlUGFyYW1zOiBuZy5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUm91dGVyOiBBdXRoUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuY29kZSA9IHRoaXMuJHJvdXRlUGFyYW1zW0F1dGhSb3V0ZXIuUEFTU1dPUkRfVE9LRU5fUEFSQU1fTkFNRV07XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKFwiXCIpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiQ3JlYXRlIE5ldyBQYXNzd29yZFwiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuaXNDaGVja1Bhc3N3b3JkKClcclxuICAgICAgICAgICAgLnRoZW4oaXNDaGVjayA9PiB0aGlzLmlzQ2hlY2tQYXNzd29yZCA9IGlzQ2hlY2spO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVOZXdQYXNzd29yZCgpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDaGVja1Bhc3N3b3JkICYmICF0aGlzLmF1dGhTZXJ2aWNlLmNoZWNrUGFzc3dvcmQodGhpcy5wYXNzd29yZCkgfHwgdGhpcy5pc1VuaWNvZGVWYWx1ZSh0aGlzLnBhc3N3b3JkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgMSBsZXR0ZXIsIDEgbnVtYmVyLCAxIHNwZWNpYWwgY2hhcmFjdGVyIGZyb20gIUAjJCVeJiogYW5kIG11c3QgYmUgOCBvciBtb3JlIGNoYXJhY3RlcnNcIjtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmNyZWF0ZU5ld1Bhc3N3b3JkKHRoaXMuY29kZSwgdGhpcy5wYXNzd29yZClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlBhc3N3b3JkIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYXV0aFJvdXRlci5sb2dvblVybCgpKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IucGFzc3dvcmQucmVzdG9yZS5pbXBvc3NpYmxlXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJbmNvcnJlY3QgY29kZSBvciBjb2RlIGV4cGlyZWQuIFRyeSB0byByZXN0b3JlIHRoZSBwYXNzd29yZCBhZ2Fpbi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmF1dGhSb3V0ZXIucmVzdG9yZVBhc3N3b3JkKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlcnJvci5pbnZhbGlkLnBhc3N3b3JkXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiUGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IDEgbGV0dGVyLCAxIG51bWJlciwgMSBzcGVjaWFsIGNoYXJhY3RlciBmcm9tICFAIyQlXiYqIGFuZCBtdXN0IGJlIDggb3IgbW9yZSBjaGFyYWN0ZXJzXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLnBhc3N3b3JkLmR1cGxpY2F0ZVwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiUGFzc3dvcmQgbXVzdCBub3QgYmUgcmVwZWF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4gdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNSaWdodFBhc3N3b3JkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ2hlY2tQYXNzd29yZCAmJiB0aGlzLnBhc3N3b3JkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmNoZWNrUGFzc3dvcmQodGhpcy5wYXNzd29yZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q2xvc2VQYXNzd29yZChlbGVtZW50SWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHBhc3N3b3JkRWxlbWVudCA9ICQoZWxlbWVudElkKTtcclxuICAgICAgICBpZiAocGFzc3dvcmRFbGVtZW50LmF0dHIoXCJ0eXBlXCIpID09PSBcInBhc3N3b3JkXCIpIHtcclxuICAgICAgICAgICAgcGFzc3dvcmRFbGVtZW50LmF0dHIoXCJ0eXBlXCIsIFwidGV4dFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwYXNzd29yZEVsZW1lbnQuYXR0cihcInR5cGVcIiwgXCJwYXNzd29yZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVW5pY29kZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcGF0dGVybiA9IC9eW1xceDIwLVxceDdFXSokLztcclxuICAgICAgICByZXR1cm4gIXBhdHRlcm4udGVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7QXV0aFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvQXV0aFJvdXRlclwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge0lMb2dvblByb3ZpZGVyfSBmcm9tIFwiLi9JTG9nb25Qcm92aWRlclwiO1xyXG5pbXBvcnQge1N0b3JhZ2VzLCBTdG9yYWdlV3JhcHBlcn0gZnJvbSBcIi4uL2luZnJhc3RydWN0dXJlL1N0b3JhZ2VcIjtcclxuaW1wb3J0IHthdXRvU3NvUHJvdmlkZXJzLCBMb2dvblByb3ZpZGVyRW51bX0gZnJvbSBcIi4uL3NlY3VyaXR5L0xvZ29uUHJvdmlkZXJFbnVtXCI7XHJcbmltcG9ydCB7U3NvUmVkaXJlY3RJbmZvfSBmcm9tIFwiLi4vYXV0aGNvcmUvU3NvUmVkaXJlY3RJbmZvXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7VXNlcnNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1VzZXJzUm91dGVyXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVByb3BlcnR5fSBmcm9tIFwiLi4vc2V0dGluZ3MvbW9kZWxzL0lTeXN0ZW1Qcm9wZXJ0eVwiO1xyXG5pbXBvcnQge0hvbWVwYWdlSGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvSG9tZXBhZ2VIZWxwZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtTG9jYWxlfSBmcm9tIFwiLi4vc2V0dGluZ3MvbW9kZWxzL0lTeXN0ZW1Mb2NhbGVcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge1Nzb0Vycm9yc30gZnJvbSBcIi4uL3NlY3VyaXR5L1Nzb0Vycm9yc1wiO1xyXG5pbXBvcnQge0lVc2VyTG9nb259IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJMb2dvblwiO1xyXG5pbXBvcnQge0dyb3VwRW51bX0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JR3JvdXBcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1BvbGljaWVzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Qb2xpY2llc1JvdXRlclwiO1xyXG5pbXBvcnQgSVByb21pc2UgPSBhbmd1bGFyLklQcm9taXNlO1xyXG5cclxuaW50ZXJmYWNlIElVc2VyRXh0ZW5kZWQgZXh0ZW5kcyBJVXNlciB7XHJcbiAgICB1c2VyTG9nb25zPzogQXJyYXk8SVVzZXJMb2dvbj5cclxuICAgIGJ1c2luZXNzVW5pdElkcz86IG51bWJlcltdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTG9nT25Db250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiYXV0aC5Mb2dPbkNvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwcml2YXRlIExBU1RfVVNFRF9QUk9WSURFUl9TVE9SQUdFX0tFWSA9IFwidmhzLmFwcGxpY2F0aW9uLmxvZ29uLmxhc3QudXNlZC5wcm92aWRlclwiO1xyXG4gICAgcHJpdmF0ZSBMT0NBTEVfQ0hBTkdFRF9CWV9VU0VSX1NUT1JBR0VfS0VZID0gXCJ2aHMuYXBwbGljYXRpb24uY3VycmVudC5sb2NhbGUuY2hhbmdlZC5ieS51c2VyXCI7XHJcblxyXG4gICAgcHVibGljIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcGFzc3dvcmQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBlcnJvcjogc3RyaW5nO1xyXG4gICAgcHVibGljIGVycm9yTGluazogc3RyaW5nO1xyXG4gICAgcHVibGljIHN0YXJ0Rm9yRnJlZUxpbms6IHN0cmluZztcclxuICAgIHB1YmxpYyBpblByb2dyZXNzOiBib29sZWFuO1xyXG4gICAgcHVibGljIHJlc3RvcmU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYWNjZXNzRGVuaWVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIHRva2VuRXhwaXJlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBsb2dvblJlcXVpcmVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIHNzb0Rpc2FibGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdElkOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHByb3ZpZGVyS2V5OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcHJvdmlkZXJzOiBBcnJheTxJTG9nb25Qcm92aWRlcj47XHJcbiAgICBwdWJsaWMgaW50ZXJuYWxQcm92aWRlcnM6IEFycmF5PElMb2dvblByb3ZpZGVyPjtcclxuICAgIHB1YmxpYyBleHRlcm5hbFByb3ZpZGVyczogQXJyYXk8SUxvZ29uUHJvdmlkZXI+O1xyXG4gICAgcHVibGljIGxvY2FsUHJvdmlkZXJBdmFpbGFibGU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYWN0aXZlRGlyZWN0b3J5TG9jYWxQcm92aWRlckF2YWlsYWJsZTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBhY3RpdmVEaXJlY3RvcnlTc29Qcm92aWRlckF2YWlsYWJsZTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBub1NzbzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgYXV0b1Nzb1Byb3ZpZGVyQXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY29tcGFueUxpbms6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgaXNCdUZyZWVBbmRGdWxsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGlzQ2hlY2tQYXNzd29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBhdmFpbGFibGVMb2NhbGVzOiBBcnJheTxJU3lzdGVtTG9jYWxlPjtcclxuICAgIHB1YmxpYyBkZWZhdWx0TG9jYWxlOiBJU3lzdGVtTG9jYWxlO1xyXG5cclxuICAgIHByaXZhdGUgY3VzdG9tRG9tYWluOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHVzZXJMb2dvbjogSVVzZXJMb2dvbiA9IHtcclxuICAgICAgICBuYW1lOiBcIlwiLFxyXG4gICAgICAgIHBhc3N3b3JkOiBcIlwiLFxyXG4gICAgICAgIHByb3ZpZGVyS2V5OiBMb2dvblByb3ZpZGVyRW51bVtMb2dvblByb3ZpZGVyRW51bS5MT0NBTF0sXHJcbiAgICAgICAgaXNBY3RpdmU6IHRydWVcclxuICAgIH07XHJcbiAgICBwdWJsaWMgdXNlckluZm86IElVc2VyRXh0ZW5kZWQgPSB7XHJcbiAgICAgICAgZmlyc3ROYW1lOiBcIlwiLFxyXG4gICAgICAgIGxhc3ROYW1lOiBcIlwiLFxyXG4gICAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgIG5ld0dyb3VwczogW0dyb3VwRW51bS5SRUdJU1RFUkVEX1VTRVJTXSxcclxuICAgICAgICBsb2NhbGU6IG51bGwsXHJcbiAgICAgICAgdXNlckxvZ29uczogW3RoaXMudXNlckxvZ29uXVxyXG4gICAgfTtcclxuICAgIHB1YmxpYyBtaW5QYXNzd29yZExlbmd0aCA9IFVzZXJTZXJ2aWNlLm1pblBhc3N3b3JkTGVuZ3RoO1xyXG4gICAgcHVibGljIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nO1xyXG4gICAgcHVibGljIGlzVGVybXNPZlVzZUFuZFByaXZhY3lQb2xpY3lBY2NlcHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBpc0FsbG93U2VsZlNpZ25VcCA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvZGU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgc2hvcnRFbWFpbDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFwiJGxvZ1wiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFN0b3JhZ2VzLkxPQ0FMX05BTUUsXHJcbiAgICAgICAgQXV0aFJvdXRlci5OQU1FLFxyXG4gICAgICAgIFVzZXJzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU2V0dGluZ3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQb2xpY2llc1JvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9nOiBhbmd1bGFyLklMb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlOiBTdG9yYWdlV3JhcHBlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBhdXRoUm91dGVyOiBBdXRoUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHVzZXJzUm91dGVyOiBVc2Vyc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJBcGk6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBwb2xpY2llc1JvdXRlcjogUG9saWNpZXNSb3V0ZXIpIHtcclxuICAgICAgICB0aGlzLmluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3RvcmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVycm9yTGluayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zdGFydEZvckZyZWVMaW5rID0gbnVsbDtcclxuICAgICAgICB0aGlzLmFjY2Vzc0RlbmllZCA9ICRsb2NhdGlvbi5zZWFyY2goKVtBdXRoUm91dGVyLkFDQ0VTU19ERU5JRURfUEFSQU1fTkFNRV07XHJcbiAgICAgICAgdGhpcy50b2tlbkV4cGlyZWQgPSAkbG9jYXRpb24uc2VhcmNoKClbQXV0aFJvdXRlci5UT0tFTl9FWFBJUkVEX1BBUkFNX05BTUVdO1xyXG4gICAgICAgIHRoaXMubG9nb25SZXF1aXJlZCA9ICRsb2NhdGlvbi5zZWFyY2goKVtBdXRoUm91dGVyLkxPR09OX1JFUVVJUkVEX1BBUkFNX05BTUVdO1xyXG5cclxuICAgICAgICBsZXQgZXhlY0RvbWFpbiA9IG5ldyBSZWdFeHAoXCIoPzpodHRwcyo6XFwvXFwvKVteL10qXCIsIFwic1wiKS5leGVjKEFwcFByb3BlcnRpZXMuYmFzZVVybCk7XHJcbiAgICAgICAgbGV0IGJhc2VVcmwgPSBleGVjRG9tYWluICE9IG51bGwgPyBleGVjRG9tYWluWzBdIDogXCJcIjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gIT0gYmFzZVVybCkge1xyXG4gICAgICAgICAgICBsZXQgZG9tYWluID0gdGhpcy4kd2luZG93LmxvY2F0aW9uLm9yaWdpbi5pbmRleE9mKFwiaHR0cFwiKSAhPSAtMSA/XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24ub3JpZ2luLnNwbGl0KFwiLy9cIilbMV0uc3BsaXQoXCIuXCIpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4uc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEJ1c2luZXNzVW5pdEJ5RG9tYWluKGRvbWFpblswXSkudGhlbigocikgPT4ge1xyXG4gICAgICAgICAgICAgICAgciAhPSBcIlwiID8gdGhpcy5idXNpbmVzc1VuaXRJZCA9IHIgOiB0aGlzLmJ1c2luZXNzVW5pdElkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFByb3ZpZGVycygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmVlUGxhbkNoZWNrZXIoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdElkID0gcGFyc2VJbnQoJGxvY2F0aW9uLnNlYXJjaCgpW0F1dGhSb3V0ZXIuQlVTSU5FU1NfVU5JVF9JRF9QQVJBTV0pIHx8IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZnJlZVBsYW5DaGVja2VyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzc29EaXNhYmxlZEluVXJsID0gISEkbG9jYXRpb24uc2VhcmNoKClbXCJzc29EaXNhYmxlZFwiXTtcclxuXHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oXCJcIik7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJDb3JlIEFDSElFVkUgLSBMb2cgSW5cIikudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmlzQ2hlY2tQYXNzd29yZCgpXHJcbiAgICAgICAgICAgIC50aGVuKGlzQ2hlY2sgPT4gdGhpcy5pc0NoZWNrUGFzc3dvcmQgPSBpc0NoZWNrKTtcclxuXHJcbiAgICAgICAgdGhpcy5zc29EaXNhYmxlZCA9IHNzb0Rpc2FibGVkSW5VcmwgfHwgIXRoaXMuYXV0aE1hbmFnZXIuaXNBdXRvU3NvQXZhaWxhYmxlKCk7XHJcblxyXG4gICAgICAgIGxldCBhdXRvU3NvUHJvbWlzZTogSVByb21pc2U8YW55PjtcclxuICAgICAgICBpZiAoIXRoaXMuc3NvRGlzYWJsZWQgJiYgdGhpcy5hdXRoTWFuYWdlci5pc0F1dG9Tc29BdmFpbGFibGUoKSAmJiAhdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICBhdXRvU3NvUHJvbWlzZSA9IHRoaXMuYXV0aE1hbmFnZXIuc3RhcnRTc29FeGNoYW5nZSh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhdXRvU3NvUHJvbWlzZSA9IHRoaXMuJHEud2hlbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkQXZhaWxhYmxlTG9jYWxlcygpO1xyXG5cclxuICAgICAgICBhdXRvU3NvUHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3NvRXJyb3JzSW5mbyA9IHRoaXMuYXV0aE1hbmFnZXIuZ2V0RmFpbGVkU3NvSW5mbygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNzb0Vycm9yc0luZm8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHNzb0Vycm9yc0luZm8uZm9yRWFjaCgodmFsdWU6IFNzb1JlZGlyZWN0SW5mbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3NvRGlzYWJsZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICghdmFsdWUubGFzdFNzb0ZhaWxlZERhdGUgfHwgTW9tZW50LmlzQWZ0ZXIodmFsdWUubGFzdFNzb0Rpc2FibGVkRGF0ZSwgdmFsdWUubGFzdFNzb0ZhaWxlZERhdGUpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciArPSBcIkF1dG9tYXRpYyBsb2dpbiAoU1NPKSBpcyBub3Qgc3VwcG9ydGVkXCIgKyBcIi4gXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubG9nb25Qcm92aWRlcktleSA9PT0gTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uTUVSQ0FET19TU09dICYmIHZhbHVlLmVycm9yQ29kZSA9PT0gU3NvRXJyb3JzLk1FUkNBRE9fSU5WQUxJRF9UT0tFTikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJUaGUgdG9rZW4gaXMgaW52YWxpZCwgcGxlYXNlIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci5cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkxvZ2luIGZhaWxlZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxvZ29uUHJvdmlkZXJLZXkgPT09IExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLk1FUkNBRE9fU1NPXSAmJiB2YWx1ZS5lcnJvckNvZGUgPT09IFNzb0Vycm9ycy5NRVJDQURPX0NPTVBBTllfTk9UX0ZPVU5EKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIlRoZSBidXNpbmVzcyB1bml0IGRvZXMgbm90IGV4aXN0LCBwbGVhc2UgY29udGFjdCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiTG9naW4gZmFpbGVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubG9nb25Qcm92aWRlcktleSA9PT0gTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uTUVSQ0FET19TU09dICYmIHZhbHVlLmVycm9yQ29kZSA9PT0gU3NvRXJyb3JzLk1FUkNBRE9fSU5WQUxJRF9UT0tFTl9TSUdOQVRVUkUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiVGhlIHRva2VuIHNpZ25hdHVyZSBpcyBpbnZhbGlkLCBwbGVhc2UgY29udGFjdCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiTG9naW4gZmFpbGVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuZXJyb3JDb2RlID09PSBTc29FcnJvcnMuQlVTSU5FU1NfVU5JVF9SRVFVSVJFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJhc2VVcmwgPSB0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yICs9IFwiQWNjb3VudCBmb3IgdGhpcyBsb2dpbiB3YXMgbm90IGZvdW5kLiBEbyB5b3Ugd2FudCB0byBcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRGb3JGcmVlTGluayA9IGJhc2VVcmwgKyBcIiNcIiArIHRoaXMudXNlcnNSb3V0ZXIuc3RhcnRUcmlhbFVybCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckxpbmsgPSBcInN0YXJ0IGJ1aWxkaW5nIHlvdXIgbGVhcm5pbmcgY29udGVudCBmb3IgRlJFRT9cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lcnJvckNvZGUgPT09IFNzb0Vycm9ycy5TRUxGX1JFR0lTVFJBVElPTl9ESVNBQkxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciArPSBcIlNlbGYgcmVnaXN0cmF0aW9uIGRpc2FibGVkIGZvciB0aGlzIGJ1c2luZXNzIHVuaXRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lcnJvckNvZGUgPT09IFNzb0Vycm9ycy5GVUxMX05BTUVfUkVRVUlSRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgKz0gXCJGdWxsIG5hbWUgcmVxdWlyZWRcIiArIFwiLiBcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lcnJvckNvZGUgPT09IFNzb0Vycm9ycy5FTUFJTF9SRVFVSVJFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciArPSBcIkVtYWlsIHJlcXVpcmVkXCIgKyBcIi4gXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuZXJyb3JDb2RlID09PSBTc29FcnJvcnMuRU1BSUxfRFVQTElDQVRFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciArPSBcIkNhbm5vdCBjcmVhdGUgbmV3IHVzZXIuIFVzZXIgd2l0aCB0aGlzIGVtYWlsIGFscmVhZHkgZXhpc3RcIiArIFwiLiBcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lcnJvckNvZGUgPT09IFNzb0Vycm9ycy5GUkVFX1BMQU5fSVNfRlVMTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciArPSBcIkFjdGl2ZSB1c2VycyBsaW1pdCByZWFjaGVkXCIgKyBcIi4gXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuZXJyb3JDb2RlID09PSBTc29FcnJvcnMuTE9HT05fTk9UX0FDVElWRVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdmFsdWUuZXJyb3JDb2RlID09PSBTc29FcnJvcnMuVVNFUl9OT1RfQUNUSVZFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yICs9IFwiWW91ciBhY2NvdW50IGlzIGluYWN0aXZlXCIgKyBcIi4gXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yICs9IFwiQXV0b21hdGljIGxvZ2luIChTU08pIGZhaWxlZFwiICsgXCIuIFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRoTWFuYWdlci5yZXN0b3JlQXZhaWxhYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFByb3ZpZGVycygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0SW5mb3JtYXRpb25Gb3JDcmVhdGVVc2VyKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kb24oJyRsb2NhdGlvbkNoYW5nZVN0YXJ0JywgKGV2ZW50LCBuZXdMb2NhdGlvbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuY2xlYXJSZWRpcmVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiR3aW5kb3cubG9jYXRpb24ub3JpZ2luICE9IGJhc2VVcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbiA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4uaW5kZXhPZihcImh0dHBcIikgIT0gLTEgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kd2luZG93LmxvY2F0aW9uLm9yaWdpbi5zcGxpdChcIi8vXCIpWzFdLnNwbGl0KFwiLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiR3aW5kb3cubG9jYXRpb24ub3JpZ2luLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRCeURvbWFpbihkb21haW5bMF0pLnRoZW4oKHIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgIT0gXCJcIiA/IHRoaXMuYnVzaW5lc3NVbml0SWQgPSByIDogdGhpcy5idXNpbmVzc1VuaXRJZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcm92aWRlcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlZVBsYW5DaGVja2VyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRJZCA9IHBhcnNlSW50KCRsb2NhdGlvbi5zZWFyY2goKVtBdXRoUm91dGVyLkJVU0lORVNTX1VOSVRfSURfUEFSQU1dKSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZWVQbGFuQ2hlY2tlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRQcm92aWRlcnMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b21Eb21haW5VcmwoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEJ1c2luZXNzVW5pdEJ5RG9tYWluKHRoaXMuY3VzdG9tRG9tYWluKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKHIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByICE9IFwiXCIgPyB0aGlzLmJ1c2luZXNzVW5pdElkID0gciA6IHRoaXMuYnVzaW5lc3NVbml0SWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvdmlkZXJzKHRoaXMuYnVzaW5lc3NVbml0SWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQcm92aWRlcnModGhpcy5idXNpbmVzc1VuaXRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlUHJvdmlkZXJzKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFByb3ZpZGVycygpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gdGhpcy5pbml0UHJvdmlkZXJzKHJlc3VsdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0UHJvdmlkZXJzQnlCVShidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLmluaXRQcm92aWRlcnMocmVzdWx0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNDdXN0b21Eb21haW5VcmwoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5jdXN0b21Eb21haW4gPSB0aGlzLmF1dGhSb3V0ZXIuZ2V0Q3VzdG9tRG9tYWluRnJvbVVybCh0aGlzLiR3aW5kb3cubG9jYXRpb24pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbURvbWFpbiAmJiB0aGlzLmN1c3RvbURvbWFpbi5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFByb3ZpZGVycyhwcm92aWRlcnM6IEFycmF5PElMb2dvblByb3ZpZGVyPikge1xyXG4gICAgICAgIHRoaXMucHJvdmlkZXJzID0gcHJvdmlkZXJzO1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxQcm92aWRlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLmV4dGVybmFsUHJvdmlkZXJzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubG9jYWxQcm92aWRlckF2YWlsYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRGlyZWN0b3J5TG9jYWxQcm92aWRlckF2YWlsYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRGlyZWN0b3J5U3NvUHJvdmlkZXJBdmFpbGFibGUgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc3NvRGlzYWJsZWQgPSAhIXRoaXMuJGxvY2F0aW9uLnNlYXJjaCgpW1wic3NvRGlzYWJsZWRcIl07XHJcblxyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLnByb3ZpZGVycywgcHJvdmlkZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAocHJvdmlkZXIua2V5ID09PSBMb2dvblByb3ZpZGVyRW51bVtMb2dvblByb3ZpZGVyRW51bS5MT0NBTF0gfHxcclxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLmtleSA9PT0gTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uUEVSU09OSUZZX1VTRVJQQVNTV09SRF0gfHxcclxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLmtleSA9PT0gTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uTE9DQUxfT1JfUEVSU09OSUZZXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbFByb3ZpZGVyQXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaChwcm92aWRlci5rZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLkxPQ0FMXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsUHJvdmlkZXJzLnB1c2goe2tleTogcHJvdmlkZXIua2V5LCBuYW1lOiBcIkludGVybmFsIHVzZXJzXCJ9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uUEVSU09OSUZZX1VTRVJQQVNTV09SRF06IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFByb3ZpZGVycy5wdXNoKHtrZXk6IHByb3ZpZGVyLmtleSwgbmFtZTogXCJQZXJzb25pZnkgVXNlciBuYW1lL1Bhc3N3b3JkIGF1dGhlbnRpY2F0aW9uXCJ9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uTE9DQUxfT1JfUEVSU09OSUZZXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsUHJvdmlkZXJzLnB1c2goe2tleTogcHJvdmlkZXIua2V5LCBuYW1lOiBcIkxvY2FsIG9yIFBlcnNvbmlmeSBhdXRoZW50aWNhdGlvblwifSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm92aWRlci5rZXkgPT09IExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLkFEX0xPQ0FMXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEaXJlY3RvcnlMb2NhbFByb3ZpZGVyQXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxQcm92aWRlcnMucHVzaCh7a2V5OiBwcm92aWRlci5rZXksIG5hbWU6IFwiQWN0aXZlRGlyZWN0b3J5IHVzZXJzXCJ9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm92aWRlci5rZXkgPT09IExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLkFEX1NTT10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGlyZWN0b3J5U3NvUHJvdmlkZXJBdmFpbGFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocHJvdmlkZXIua2V5Lmxhc3RJbmRleE9mKFwiX1NTT1wiKSA9PSBwcm92aWRlci5rZXkubGVuZ3RoIC0gNCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub1NzbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBhdXRvU3NvUHJvdmlkZXIgb2YgYXV0b1Nzb1Byb3ZpZGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKExvZ29uUHJvdmlkZXJFbnVtW2F1dG9Tc29Qcm92aWRlcl0gPT0gcHJvdmlkZXIua2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvU3NvUHJvdmlkZXJBdmFpbGFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHNzb0Rpc2FibGVkID0gZmFsc2UgfHwgc3NvRGlzYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHRlcm5hbFByb3ZpZGVycy5wdXNoKHByb3ZpZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pbnRlcm5hbFByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5wcm92aWRlcktleSA9IG51bGw7XHJcbiAgICAgICAgfSBpZiAodGhpcy5pbnRlcm5hbFByb3ZpZGVycy5sZW5ndGggPiAwICYmICghdGhpcy5leHRlcm5hbFByb3ZpZGVycyB8fCB0aGlzLmV4dGVybmFsUHJvdmlkZXJzLmxlbmd0aCA9PSAwKSkge1xyXG4gICAgICAgICAgICBsZXQgcHJldmlvdXNQcm92aWRlcjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHByZXZpb3VzUHJvdmlkZXIgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXQ8c3RyaW5nPih0aGlzLkxBU1RfVVNFRF9QUk9WSURFUl9TVE9SQUdFX0tFWSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpe1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBwcmV2aW91c1Byb3ZpZGVyRXhpc3RzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c1Byb3ZpZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2godGhpcy5pbnRlcm5hbFByb3ZpZGVycywgcHJvdmlkZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm92aWRlci5rZXkgPT0gcHJldmlvdXNQcm92aWRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1Byb3ZpZGVyRXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNQcm92aWRlciAmJiBwcmV2aW91c1Byb3ZpZGVyRXhpc3RzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyS2V5ID0gcHJldmlvdXNQcm92aWRlcjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJLZXkgPSB0aGlzLmludGVybmFsUHJvdmlkZXJzWzBdLmtleTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghc3NvRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJLZXkgPSB0aGlzLmV4dGVybmFsUHJvdmlkZXJzWzBdLmtleTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LmZvcndhcmRUb1Nzbyh0aGlzLnByb3ZpZGVyS2V5LCB0aGlzLmJ1c2luZXNzVW5pdElkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJLZXkgPSB0aGlzLmludGVybmFsUHJvdmlkZXJzWzBdLmtleTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9yY2VOZWdvdGlhdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEaXJlY3RvcnlTc29Qcm92aWRlckF2YWlsYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLmVuYWJsZUF1dG9Tc28oKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcnkgdG8gU1BORUdPIChmb3JjZWQpXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3RvcmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLnN0YXJ0U3NvRXhjaGFuZ2UoZmFsc2UsIFwiQURfU1NPXCIpXHJcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZvcmNlU3NvKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5ub1Nzbykge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLmVuYWJsZUF1dG9Tc28oKTtcclxuICAgICAgICAgICAgdGhpcy5yZXN0b3JlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5zdGFydFNzb0V4Y2hhbmdlKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2dPbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gXCJcIjtcclxuICAgICAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTE9DQUxFX0NIQU5HRURfQllfVVNFUl9TVE9SQUdFX0tFWSk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvdmlkZXJLZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UucHV0KHRoaXMuTEFTVF9VU0VEX1BST1ZJREVSX1NUT1JBR0VfS0VZLCB0aGlzLnByb3ZpZGVyS2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5sb2dPbih0aGlzLnByb3ZpZGVyS2V5ICsgXCI6XCIgKyB0aGlzLnVzZXJuYW1lLCB0aGlzLnBhc3N3b3JkKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlci5idXNpbmVzc1VuaXRzICYmIHVzZXIuYnVzaW5lc3NVbml0cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCVURvbWFpbk5hbWUodXNlci5idXNpbmVzc1VuaXRzWzBdKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZG9tYWluQWRkcmVzcyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tYWluQWRkcmVzcyAmJiB0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGRvbWFpbkFkZHJlc3MpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmNoZWNrRXhpc3RlbmNlT2ZEb21haW5JbkF6dXJlKHVzZXIuYnVzaW5lc3NVbml0c1swXSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9IHRoaXMuYXV0aE1hbmFnZXIuZ2V0VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5BZGRyZXNzID0gZG9tYWluQWRkcmVzcyArIFwiL2F1dGgvbG9nb24/cmVkaXJlY3RSZXF1aXJlZCZ0b2tlbj1cIiArIHRva2VuLmFjY2Vzc1Rva2VuICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCImdG9rZW5UeXBlPVwiICsgdG9rZW4udG9rZW5UeXBlICsgXCImbGlmZXRpbWVTZWNvbmRzPVwiICsgdG9rZW4uZXhwaXJlc0luICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCImcmVmcmVzaFRva2VuPVwiICsgdG9rZW4ucmVmcmVzaFRva2VuICsgXCImaXNzdWVkQXQ9XCIgKyB0b2tlbi5pc3N1ZWRBdCArIFwiJmxvY2FsZT1cIiArIHRva2VuLmxvY2FsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24ucmVwbGFjZShkb21haW5BZGRyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGxvY2FsZSA9IHVzZXIubG9jYWxlID8gdXNlci5sb2NhbGUgOiBBcHBQcm9wZXJ0aWVzLmN1cnJlbnRMb2NhbGU7XHJcbiAgICAgICAgICAgIGlmICghTG9nT25Db250cm9sbGVyLnJlbG9hZEFwcGxpY2F0aW9uRm9yTG9jYWxlSWZOZWVkZWQobG9jYWxlLCBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aE1hbmFnZXIuZW5hYmxlQXV0b1NzbygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0SG9tZXBhZ2UoKS50aGVuKChob21lcGFnZTogSVN5c3RlbVByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QucmV0dXJuQWZ0ZXJMb2dPbihmYWxzZSAvKm5hdGl2ZSovLCBIb21lcGFnZUhlbHBlci5nZXRIb21lcGFnZVVybChob21lcGFnZSkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnBhc3N3b3JkLnNob3VsZC5iZS5yZXNldFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24ucGF0aCh0aGlzLmF1dGhSb3V0ZXIuY3JlYXRlTmV3UGFzc3dvcmQocmVzcG9uc2UuZGF0YS5tZXNzYWdlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJZb3UgaGF2ZSB0byBjaGFuZ2UgeW91ciBwYXNzd29yZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGFbXCJlcnJvclwiXSA9PT0gXCJpbnZhbGlkX3VzZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkludmFsaWQgbG9naW4gb3IgcGFzc3dvcmRcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YVtcImVycm9yXCJdID09PSBcImxvZ29uX25vdF9hY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcmVzcG9uc2UuZGF0YVtcImVycm9yXCJdID09PSBcInVzZXJfbm90X2FjdGl2ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiWW91ciBhY2NvdW50IGlzIGluYWN0aXZlXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmRhdGFbXCJlcnJvclwiXSA9PT0gXCJpbnZhbGlkX2lwXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIllvdXIgbG9jYXRpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIG9uZSB3ZSBoYXZlIG9uIGZpbGUuIFBsZWFzZSBiZSBzdXJlIHRvIGxvZyBpbiBmcm9tIHlvdXIgb3JpZ2luYWwgbG9jYXRpb24uXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdMb2dpbiBmYWlsZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmRhdGFbXCJlcnJvclwiXSA9PT0gXCJpcF9jaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEeW5hbWljSXBEaWFsb2coKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiUXVlcnkgaGFzIGZhaWxlZDogcGxlYXNlIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBoZWxwIGRlc2tcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc3RvcmVQYXNzd29yZCgpIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5hdXRoUm91dGVyLnJlc3RvcmVQYXNzd29yZCgpKS5zZWFyY2goQXV0aFJvdXRlci5MT0dPTl9QQVJBTV9OQU1FLCB0aGlzLnVzZXJuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc3RvcmVTZXNzaW9uKCkge1xyXG4gICAgICAgIGxldCByZWZyZXNoVG9rZW4gPSB0aGlzLmF1dGhNYW5hZ2VyLmdldFRva2VuKCkucmVmcmVzaFRva2VuO1xyXG4gICAgICAgIHRoaXMucmVzdG9yZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5yZXN0b3JlU2Vzc2lvbihyZWZyZXNoVG9rZW4pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsb2NhbGUgPSB1c2VyLmxvY2FsZSA/IHVzZXIubG9jYWxlIDogQXBwUHJvcGVydGllcy5jdXJyZW50TG9jYWxlO1xyXG4gICAgICAgICAgICBpZiAoIUxvZ09uQ29udHJvbGxlci5yZWxvYWRBcHBsaWNhdGlvbkZvckxvY2FsZUlmTmVlZGVkKGxvY2FsZSwgZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRIb21lcGFnZSgpLnRoZW4oKGhvbWVwYWdlOiBJU3lzdGVtUHJvcGVydHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5yZXR1cm5BZnRlckxvZ09uKGZhbHNlIC8qbmF0aXZlKi8sIEhvbWVwYWdlSGVscGVyLmdldEhvbWVwYWdlVXJsKGhvbWVwYWdlKSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5sb2dPZmYoKTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE86IGFmdGVyIGxvZ2dpbmcgb2ZmXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcm92aWRlcnMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyByZWxvYWRBcHBsaWNhdGlvbkZvckxvY2FsZUlmTmVlZGVkKHVzZXJMb2NhbGU6IHN0cmluZywgY2hhbmdlZEJ5VXNlcjogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChjaGFuZ2VkQnlVc2VyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IExPQ0FMRV9DSEFOR0VEX0JZX1VTRVJfU1RPUkFHRV9LRVkgPSBcInZocy5hcHBsaWNhdGlvbi5jdXJyZW50LmxvY2FsZS5jaGFuZ2VkLmJ5LnVzZXJcIjtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxFX0NIQU5HRURfQllfVVNFUl9TVE9SQUdFX0tFWSwgXCJ0cnVlXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFwcFByb3BlcnRpZXMuY3VycmVudExvY2FsZSAhPSB1c2VyTG9jYWxlKSB7XHJcbiAgICAgICAgICAgIExvZ09uQ29udHJvbGxlci5jaGFuZ2VBcHBsaWNhdGlvbkxvY2FsZUluU3RvcmFnZSh1c2VyTG9jYWxlKTtcclxuICAgICAgICAgICAgbnVtZXJhbC5sYW5ndWFnZSh1c2VyTG9jYWxlLnN1YnN0cigwLCAyKSk7IC8vIGUuZy4gJ2VuJyBvciAncnUnIG9yICdlcycgb3IgJ2ZyJ1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjaGFuZ2VBcHBsaWNhdGlvbkxvY2FsZUluU3RvcmFnZSh1c2VyTG9jYWxlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBMT0NBTEVfU1RPUkFHRV9LRVkgPSBcInZocy5hcHBsaWNhdGlvbi5jdXJyZW50LmxvY2FsZVwiO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExPQ0FMRV9TVE9SQUdFX0tFWSwgdXNlckxvY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvZ29uV2l0aExpbmtlZGluU3NvKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5ub1Nzbykge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5mb3J3YXJkVG9Tc28oTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uTElOS0VESU5fU1NPXSwgdGhpcy5idXNpbmVzc1VuaXRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2dvbldpdGhNaWNyb3NvZnRTc28oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5vU3NvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LmZvcndhcmRUb1NzbyhMb2dvblByb3ZpZGVyRW51bVtMb2dvblByb3ZpZGVyRW51bS5NSUNST1NPRlRfQURfU1NPXSwgdGhpcy5idXNpbmVzc1VuaXRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2dvbldpdGhGYWNlYm9va1NzbygpIHtcclxuICAgICAgICBpZiAoIXRoaXMubm9Tc28pIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuZm9yd2FyZFRvU3NvKExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLkZBQ0VCT09LX1NTT10sIHRoaXMuYnVzaW5lc3NVbml0SWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9nb25XaXRoR29vZ2xlU3NvKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5ub1Nzbykge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5mb3J3YXJkVG9Tc28oTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uR09PR0xFX1NTT10sIHRoaXMuYnVzaW5lc3NVbml0SWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNMb2dpbldpdGhMaW5rZWRpbkF2YWlsYWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlcnMgJiYgdGhpcy5wcm92aWRlcnMubWFwKHAgPT4gcC5rZXkpLmluZGV4T2YoTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uTElOS0VESU5fU1NPXSkgIT0gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTG9naW5XaXRoTWljcm9zb2Z0QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVycyAmJiB0aGlzLnByb3ZpZGVycy5tYXAocCA9PiBwLmtleSkuaW5kZXhPZihMb2dvblByb3ZpZGVyRW51bVtMb2dvblByb3ZpZGVyRW51bS5NSUNST1NPRlRfQURfU1NPXSkgIT0gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTG9naW5XaXRoRmFjZWJvb2tBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzICYmIHRoaXMucHJvdmlkZXJzLm1hcChwID0+IHAua2V5KS5pbmRleE9mKExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLkZBQ0VCT09LX1NTT10pICE9IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0xvZ2luV2l0aEdvb2dsZUF2YWlsYWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlcnMgJiYgdGhpcy5wcm92aWRlcnMubWFwKHAgPT4gcC5rZXkpLmluZGV4T2YoTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uR09PR0xFX1NTT10pICE9IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEF2YWlsYWJsZUxvY2FsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0QXZhaWxhYmxlTG9jYWxlcygpLnRoZW4obG9jYWxlcyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IExPQ0FMRV9DSEFOR0VEX0JZX1VTRVJfU1RPUkFHRV9LRVkgPSBcInZocy5hcHBsaWNhdGlvbi5jdXJyZW50LmxvY2FsZS5jaGFuZ2VkLmJ5LnVzZXJcIjtcclxuICAgICAgICAgICAgbGV0IGxvY2FsZUNoYW5nZWRCeVVzZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMT0NBTEVfQ0hBTkdFRF9CWV9VU0VSX1NUT1JBR0VfS0VZKTtcclxuICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVMb2NhbGVzID0gbG9jYWxlcztcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5idXNpbmVzc1VuaXRJZCAmJiAhdGhpcy5hdXRoTWFuYWdlci5yZXN0b3JlQXZhaWxhYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghIWxvY2FsZUNoYW5nZWRCeVVzZXIgJiYgbG9jYWxlQ2hhbmdlZEJ5VXNlciA9PT0gXCJ0cnVlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGUgPSB0aGlzLmdldEN1cnJlbnRTdG9yYWdlTG9jYWxlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QnVzaW5lc3NVbml0QnlJZCh0aGlzLmJ1c2luZXNzVW5pdElkKS50aGVuKGJ1c2luZXNzVW5pdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdExvY2FsZSA9IGJ1c2luZXNzVW5pdC5sb2NhbGUgPyB0aGlzLmF2YWlsYWJsZUxvY2FsZXMuZmlsdGVyKGxvY2FsZSA9PiBsb2NhbGUubG9jYWxlID09PSBidXNpbmVzc1VuaXQubG9jYWxlKVswXSA6IHRoaXMuZ2V0Q3VycmVudFN0b3JhZ2VMb2NhbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nT25Db250cm9sbGVyLnJlbG9hZEFwcGxpY2F0aW9uRm9yTG9jYWxlSWZOZWVkZWQodGhpcy5kZWZhdWx0TG9jYWxlLmxvY2FsZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0TG9jYWxlID0gdGhpcy5nZXRDdXJyZW50U3RvcmFnZUxvY2FsZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50U3RvcmFnZUxvY2FsZSgpOiBJU3lzdGVtTG9jYWxlIHtcclxuICAgICAgICBjb25zdCBMT0NBTEVfU1RPUkFHRV9LRVkgPSBcInZocy5hcHBsaWNhdGlvbi5jdXJyZW50LmxvY2FsZVwiO1xyXG4gICAgICAgIGlmICh0aGlzLmF2YWlsYWJsZUxvY2FsZXMgJiYgdGhpcy5hdmFpbGFibGVMb2NhbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlTG9jYWxlcy5maWx0ZXIobCA9PiBsLmxvY2FsZSA9PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMT0NBTEVfU1RPUkFHRV9LRVkpKVswXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbG9hZEFwcGxpY2F0aW9uRm9yTG9jYWxlSWZOZWVkZWQobG9jYWxlOiBzdHJpbmcsIGNoYW5nZWRCeVVzZXI6IGJvb2xlYW4sICRldmVudDogYW5ndWxhci5JQW5ndWxhckV2ZW50KSB7XHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiBMb2dPbkNvbnRyb2xsZXIucmVsb2FkQXBwbGljYXRpb25Gb3JMb2NhbGVJZk5lZWRlZChsb2NhbGUsIGNoYW5nZWRCeVVzZXIpLCAwKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGUgPSB0aGlzLmdldEN1cnJlbnRTdG9yYWdlTG9jYWxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dDbG9zZVBhc3N3b3JkKGVsZW1lbnRJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcGFzc3dvcmRFbGVtZW50ID0gJChlbGVtZW50SWQpO1xyXG4gICAgICAgIGlmIChwYXNzd29yZEVsZW1lbnQuYXR0cihcInR5cGVcIikgPT09IFwicGFzc3dvcmRcIikge1xyXG4gICAgICAgICAgICBwYXNzd29yZEVsZW1lbnQuYXR0cihcInR5cGVcIiwgXCJ0ZXh0XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBhc3N3b3JkRWxlbWVudC5hdHRyKFwidHlwZVwiLCBcInBhc3N3b3JkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlTmV3QWNjb3VudCgpOiB2b2lkIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkxPQ0FMRV9DSEFOR0VEX0JZX1VTRVJfU1RPUkFHRV9LRVkpO1xyXG4gICAgICAgIGlmICghdGhpcy51c2VySW5mby5idXNpbmVzc1VuaXRJZHMubGVuZ3RoIHx8IHRoaXMuY29uZmlybVBhc3N3b3JkICE9PSB0aGlzLnVzZXJMb2dvbi5wYXNzd29yZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzQ2hlY2tQYXNzd29yZCAmJiAhdGhpcy5hdXRoU2VydmljZS5jaGVja1Bhc3N3b3JkKHRoaXMudXNlckxvZ29uLnBhc3N3b3JkKSB8fCB0aGlzLmlzVW5pY29kZVZhbHVlKHRoaXMudXNlckxvZ29uLnBhc3N3b3JkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgMSBsZXR0ZXIsIDEgbnVtYmVyLCAxIHNwZWNpYWwgY2hhcmFjdGVyIGZyb20gIUAjJCVeJiogYW5kIG11c3QgYmUgOCBvciBtb3JlIGNoYXJhY3RlcnNcIjtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmNoZWNrRnJlZVBsYW5PbkJ1c2luZXNzVW5pdCh0aGlzLmJ1c2luZXNzVW5pdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuaXNBdmFpbGFibGVDcmVhdGluZ05ld1VzZXJGb3JGcmVlUGxhbih0aGlzLmJ1c2luZXNzVW5pdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlU2VsZlNpZ25VcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQWN0aXZlIHVzZXJzIGxpbWl0IHJlYWNoZWQuIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZVNlbGZTaWduVXAoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV2YWx1YXRlU2VsZlNpZ25VcCgpIHtcclxuICAgICAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29uZmlybVBhc3N3b3JkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVzZXJJbmZvLmxvY2FsZSA9IHRoaXMuZGVmYXVsdExvY2FsZS5sb2NhbGU7XHJcblxyXG4gICAgICAgIGxldCBwcm9taXNlID0gdGhpcy51c2VyQXBpLnNlbGZTaWdudXAodGhpcy51c2VySW5mbyk7XHJcbiAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxOYW1lID0gdGhpcy51c2VySW5mby5maXJzdE5hbWUgKyBcIiBcIiArIHRoaXMudXNlckluZm8ubGFzdE5hbWU7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJVc2VyICdcIiArIGZ1bGxOYW1lKyBcIicgaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuYXV0aFJlZGlyZWN0LmNsZWFyUmVkaXJlY3Rpb24oKTtcclxuICAgICAgICAgICAgLy8gdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYXV0aFJvdXRlci5sb2dvblVybCgpKTtcclxuICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5sb2dPbihMb2dvblByb3ZpZGVyRW51bVtMb2dvblByb3ZpZGVyRW51bS5MT0NBTF0gKyBcIjpcIiArIHRoaXMudXNlckluZm8udXNlckxvZ29uc1swXS5uYW1lLCB0aGlzLnVzZXJJbmZvLnVzZXJMb2dvbnNbMF0ucGFzc3dvcmQpXHJcbiAgICAgICAgICAgICAgICAudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYWxlID0gdXNlci5sb2NhbGUgPyB1c2VyLmxvY2FsZSA6IEFwcFByb3BlcnRpZXMuY3VycmVudExvY2FsZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIUxvZ09uQ29udHJvbGxlci5yZWxvYWRBcHBsaWNhdGlvbkZvckxvY2FsZUlmTmVlZGVkKGxvY2FsZSwgZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aE1hbmFnZXIuZW5hYmxlQXV0b1NzbygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRIb21lcGFnZSgpLnRoZW4oKGhvbWVwYWdlOiBJU3lzdGVtUHJvcGVydHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LnJldHVybkFmdGVyTG9nT24oZmFsc2UgLypuYXRpdmUqLywgSG9tZXBhZ2VIZWxwZXIuZ2V0SG9tZXBhZ2VVcmwoaG9tZXBhZ2UpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSA0MDkgJiYgcmVzcG9uc2UuZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5kYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLnVzZXIuZHVwbGljYXRlLm5hbWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRnVsbCBuYW1lIFwiICsgdGhpcy51c2VySW5mby5mdWxsTmFtZSArIFwiIGFscmVhZHkgZXhpc3RzXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlcnJvci51c2VyLmR1cGxpY2F0ZS5lbWFpbFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbWFpbCBcIiArIHRoaXMudXNlckluZm8uZW1haWwgKyBcIiBhbHJlYWR5IGV4aXN0c1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IuZHVwbGljYXRlLmxvZ29uLnByb3ZpZGVyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIk9ubHkgb25lIGxvZ29uIGZvciBlYWNoIHR5cGUgaXMgYWxsb3dlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IudXNlci5wYXNzd29yZC5zaG9ydFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJUaGUgbGVuZ3RoIG9mIHBhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlcnJvci51c2Vycy5zZWxmLnNpZ251cC5zdHJpbmcubG9naW5cIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiSW52YWxpZCB1c2VyIGxvZ29uXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlcnJvci5pbnZhbGlkLnBhc3N3b3JkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCAxIGxldHRlciwgMSBudW1iZXIsIDEgc3BlY2lhbCBjaGFyYWN0ZXIgZnJvbSAhQCMkJV4mKiBhbmQgbXVzdCBiZSA4IG9yIG1vcmUgY2hhcmFjdGVyc1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvci5pbmRleE9mKFwiZXJyb3IuZHVwbGljYXRlLmxvZ2luLmZvci5wcm92aWRlci5cIikgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm92aWRlcktleSA9IHJlc3BvbnNlLmRhdGEuZXJyb3Iuc3Vic3RyaW5nKFwiZXJyb3IuZHVwbGljYXRlLmxvZ2luLmZvci5wcm92aWRlci5cIi5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvZ29uRm91bmQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnVzZXJJbmZvLnVzZXJMb2dvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VySW5mby51c2VyTG9nb25zW2pdLnByb3ZpZGVyS2V5ID09IHByb3ZpZGVyS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ29uRm91bmQgPSB0aGlzLnVzZXJJbmZvLnVzZXJMb2dvbnNbal0ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ29uRm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVc2VybmFtZSBcIiArIGxvZ29uRm91bmQgKyBcIiBhbHJlYWR5IGV4aXN0c1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJRdWVyeSBoYXMgZmFpbGVkOiBwbGVhc2UgY29udGFjdCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIG9yIGhlbHAgZGVza1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiUXVlcnkgaGFzIGZhaWxlZDogcGxlYXNlIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBoZWxwIGRlc2tcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKHRoaXMuZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0SW5mb3JtYXRpb25Gb3JDcmVhdGVVc2VyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZE5vdEF1dGhlbnRpY2F0ZWQoKTsgLy8gc2VsZiBzaWduLXVwIGlzIGFsbG93ZWQgdG8gZ3Vlc3QgdXNlcnMgb25seVxyXG4gICAgICAgIHRoaXMubG9hZEF2YWlsYWJsZUxvY2FsZXMoKTtcclxuICAgICAgICBsZXQgZXhlY0RvbWFpbiA9IG5ldyBSZWdFeHAoXCIoPzpodHRwcyo6XFwvXFwvKVteL10qXCIsIFwic1wiKS5leGVjKEFwcFByb3BlcnRpZXMuYmFzZVVybCk7XHJcbiAgICAgICAgbGV0IGJhc2VVcmwgPSBleGVjRG9tYWluICE9IG51bGwgPyBleGVjRG9tYWluWzBdIDogXCJcIjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gIT0gYmFzZVVybCkge1xyXG4gICAgICAgICAgICBsZXQgZG9tYWluID0gdGhpcy4kd2luZG93LmxvY2F0aW9uLm9yaWdpbi5pbmRleE9mKFwiaHR0cFwiKSAhPSAtMSA/XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24ub3JpZ2luLnNwbGl0KFwiLy9cIilbMV0uc3BsaXQoXCIuXCIpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4uc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEJ1c2luZXNzVW5pdEJ5RG9tYWluKGRvbWFpblswXSkudGhlbigocikgPT4ge1xyXG4gICAgICAgICAgICAgICAgciAhPSBcIlwiID8gdGhpcy51c2VySW5mby5idXNpbmVzc1VuaXRJZHMgPSBbcl0gOiB0aGlzLnVzZXJJbmZvLmJ1c2luZXNzVW5pdElkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRCeUlkcyh0aGlzLnVzZXJJbmZvLmJ1c2luZXNzVW5pdElkcylcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihpc0FsbG93ID0+IHRoaXMuaXNBbGxvd1NlbGZTaWduVXAgPSBpc0FsbG93KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgYnVJZEludml0ZSA9IHRoaXMuJGxvY2F0aW9uLnNlYXJjaCgpW0F1dGhSb3V0ZXIuQlVTSU5FU1NfVU5JVF9JRF9QQVJBTV07XHJcbiAgICAgICAgICAgIGlmIChidUlkSW52aXRlICE9IHVuZGVmaW5lZCAmJiAhaXNOYU4oYnVJZEludml0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlckluZm8uYnVzaW5lc3NVbml0SWRzID0gW3BhcnNlSW50KGJ1SWRJbnZpdGUpXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QnVzaW5lc3NVbml0QnlJZHModGhpcy51c2VySW5mby5idXNpbmVzc1VuaXRJZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oaXNBbGxvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBbGxvd1NlbGZTaWduVXAgPSBpc0FsbG93O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvUHJpdmFjeVBvbGljeSgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgYmFzZVVybCA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSxcclxuICAgICAgICAgICAgdXJsID0gYmFzZVVybCArIFwiI1wiICsgdGhpcy5wb2xpY2llc1JvdXRlci5wcml2YWN5UG9saWN5VXJsKCk7XHJcbiAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4odXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb1Rlcm1zT2ZVc2UoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGJhc2VVcmwgPSB0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0sXHJcbiAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyBcIiNcIiArIHRoaXMucG9saWNpZXNSb3V0ZXIudGVybXNPZlVzZVVybCgpO1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5vcGVuKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVW5pY29kZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcGF0dGVybiA9IC9eW1xceDIwLVxceDdFXSokLztcclxuICAgICAgICByZXR1cm4gIXBhdHRlcm4udGVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZyZWVQbGFuQ2hlY2tlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5idXNpbmVzc1VuaXRJZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgYnVBcnJheTogQXJyYXk8bnVtYmVyPiA9IG5ldyBBcnJheTxudW1iZXI+KCk7XHJcbiAgICAgICAgICAgIGJ1QXJyYXkucHVzaCh0aGlzLmJ1c2luZXNzVW5pdElkKTtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRzV2l0aEZyZWVQbGFuKGJ1QXJyYXkpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5pc0F2YWlsYWJsZUNyZWF0aW5nTmV3VXNlckZvckZyZWVQbGFuKGlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNCdUZyZWVBbmRGdWxsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja1ZhbGlkQ29kZUZyb21FbWFpbCgpIHtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmNoZWNrVmFsaWRDb2RlRnJvbUVtYWlsKHRoaXMuY29kZSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyQXBpLmFkZElwQWRkcmVzc1JhbmdlKHRoaXMudXNlcm5hbWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEeW5hbWljSXBEaWFsb2coKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ09uKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLnBhc3N3b3JkLnJlc3RvcmUuaW1wb3NzaWJsZVwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJbmNvcnJlY3QgY29kZSBvciBjb2RlIGV4cGlyZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNob3J0RW1haWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlcm5hbWUuaW5kZXhPZihcIkBcIikgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvcnRpbmdFbWFpbCh0aGlzLnVzZXJuYW1lKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJBcGkuZ2V0VXNlckVtYWlsQnlMb2dvbk5hbWUodGhpcy51c2VybmFtZSlcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLnNob3J0aW5nRW1haWwocmVzdWx0KSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0aGlzLnNob3J0RW1haWwgPSB0aGlzLnVzZXJuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3J0aW5nRW1haWwoZW1haWw6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBlbWFpbFBhcnRzID0gZW1haWwuc3BsaXQoXCJAXCIpO1xyXG4gICAgICAgIGlmIChlbWFpbFBhcnRzWzBdLmxlbmd0aCA+IDMpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG9ydEVtYWlsID0gZW1haWxQYXJ0c1swXS5jaGFyQXQoMCkgKyBcIi4uLlwiICsgZW1haWxQYXJ0c1swXS5jaGFyQXQoZW1haWxQYXJ0c1swXS5sZW5ndGgtMSkgKyBcIkBcIiArIGVtYWlsUGFydHNbMV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG9ydEVtYWlsID0gZW1haWxQYXJ0c1swXSArIFwiQFwiICsgZW1haWxQYXJ0c1sxXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvZGVWYWxpZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlZ2V4cCA9IC9eWzAtOV17Nn0kL2c7XHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4cC50ZXN0KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0R5bmFtaWNJcERpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdldFNob3J0RW1haWwoKTtcclxuICAgICAgICAkKCcjY2hhbmdlSXBNb2RhbCcpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJEeW5hbWljSXBEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgJChcIiNjaGFuZ2VJcE1vZGFsXCIpLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNSaWdodFBhc3N3b3JkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ2hlY2tQYXNzd29yZCAmJiB0aGlzLnVzZXJMb2dvbi5wYXNzd29yZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5jaGVja1Bhc3N3b3JkKHRoaXMudXNlckxvZ29uLnBhc3N3b3JkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbiIsImltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtNYWluUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL01haW5Sb3V0ZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2dPdXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiYXV0aC5Mb2dPdXRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTWFpblJvdXRlci5OQU1FLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCJcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoQXBpOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWFpblJvdXRlcjogTWFpblJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGUpIHtcclxuICAgICAgICB0aGlzLmF1dGhBcGkubG9nT2ZmKClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkxvZ2dlZCBPdXRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5tYWluUm91dGVyLm1haW5VcmwoKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuaXNJbnNpZGVDb3Vyc2VQYWdlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuL0F1dGhTZXJ2aWNlXCI7XHJcblxyXG5pbXBvcnQge0F1dGhSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0F1dGhSb3V0ZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZXN0b3JlUGFzc3dvcmRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiYXV0aC5SZXN0b3JlUGFzc3dvcmRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIGxvZ29uTmFtZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJvdXRlcjogQXV0aFJvdXRlcikge1xyXG4gICAgICAgIHRoaXMubG9nb25OYW1lID0gJGxvY2F0aW9uLnNlYXJjaCgpW0F1dGhSb3V0ZXIuTE9HT05fUEFSQU1fTkFNRV07XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKFwiXCIpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiUmVzdG9yZSBQYXNzd29yZFwiKS51cGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdG9yZVBhc3N3b3JkKCkge1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UucmVzdG9yZVBhc3N3b3JkKHRoaXMubG9nb25OYW1lKS50aGVuKCgpPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIGxpbmsgaGFzIGJlZW4gc2VudCB0byB5b3VyIGVtYWlsIGFkZHJlc3MuIFdoZW4geW91IHJlY2VpdmUgdGhlIGVtYWlsLCBjbGljayBvbiB0aGUgbGluayBpbnNpZGUgdG8gcmVzZXQgeW91ciBwYXNzd29yZFwiKTtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYXV0aFJvdXRlci5jaGVja1ZhbGlkQ29kZSgpKS5zZWFyY2goQXV0aFJvdXRlci5MT0dPTl9QQVJBTV9OQU1FLCB0aGlzLmxvZ29uTmFtZSk7XHJcbiAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLnBhc3N3b3JkLnJlc3RvcmUuaW1wb3NzaWJsZVwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlucHV0ID0gdGhpcy5sb2dvbk5hbWUubGVuZ3RoID4gMCA/IFwiJ1wiICsgdGhpcy5sb2dvbk5hbWUgKyBcIidcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGUgbG9naW4gb3IgZW1haWwgXCIgKyBpbnB1dCArIFwiIHlvdSBlbnRlcmVkIGRvZXNuJ3QgbWF0Y2ggb3VyIHJlY29yZHMuIFBsZWFzZSBkb3VibGUtY2hlY2sgYW5kIHRyeSBhZ2Fpbi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLmxvZ29uLm5vdC5hY3RpdmVcIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJlcnJvci51c2VyLm5vdC5hY3RpdmVcIjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiWW91ciBhY2NvdW50IGlzIGluYWN0aXZlLiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3JcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmF1dGhSb3V0ZXIubG9nb25VcmwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVW5pY29kZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcGF0dGVybiA9IC9eW1xceDIwLVxceDdFXSokLztcclxuICAgICAgICByZXR1cm4gIXBhdHRlcm4udGVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtUb2tlblN0b3JhZ2V9IGZyb20gXCIuL1Rva2VuU3RvcmFnZVwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4vQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuL0F1dGhNYW5hZ2VyXCI7XHJcblxyXG5pbXBvcnQge1VybHNNb2R1bGV9IGZyb20gXCIuLy4uL3VybHMvVXJsc01vZHVsZVwiO1xyXG5pbXBvcnQge0luZnJhc3RydWN0dXJlTW9kdWxlfSBmcm9tIFwiLi8uLi9pbmZyYXN0cnVjdHVyZS9JbmZyYXN0cnVjdHVyZU1vZHVsZVwiO1xyXG5cclxuZXhwb3J0IHZhciBBdXRoQ29yZU1vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgLm1vZHVsZShcImF1dGhjb3JlXCIsIFtcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgSW5mcmFzdHJ1Y3R1cmVNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKFRva2VuU3RvcmFnZS5OQU1FLCBUb2tlblN0b3JhZ2UpXHJcbiAgICAuc2VydmljZShBdXRoUmVkaXJlY3QuTkFNRSwgQXV0aFJlZGlyZWN0KVxyXG4gICAgLnNlcnZpY2UoQXV0aE1hbmFnZXIuTkFNRSwgQXV0aE1hbmFnZXIpOyIsImltcG9ydCB7SVRva2VuSW5mb30gZnJvbSBcIi4vSVRva2VuSW5mb1wiO1xyXG5pbXBvcnQge1Rva2VuU3RvcmFnZX0gZnJvbSBcIi4vVG9rZW5TdG9yYWdlXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi9BdXRoUmVkaXJlY3RcIjtcclxuaW1wb3J0IHtTdG9yYWdlcywgU3RvcmFnZVdyYXBwZXJ9IGZyb20gXCIuLi9pbmZyYXN0cnVjdHVyZS9TdG9yYWdlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuL0V2ZW50XCI7XHJcbmltcG9ydCB7QXBwUHJvcGVydGllc30gZnJvbSBcIi4uL3V0aWxzL0FwcFByb3BlcnRpZXNcIjtcclxuaW1wb3J0IHtJQ29tbW9uUm9vdFNjb3BlfSBmcm9tIFwiLi4vY29tbW9uL0lDb21tb25Sb290U2NvcGVcIjtcclxuaW1wb3J0IHtTc29SZWRpcmVjdEluZm99IGZyb20gXCIuL1Nzb1JlZGlyZWN0SW5mb1wiO1xyXG5pbXBvcnQgSVByb21pc2UgPSBhbmd1bGFyLklQcm9taXNlO1xyXG5pbXBvcnQgSVFTZXJ2aWNlID0gYW5ndWxhci5JUVNlcnZpY2U7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7TG9nb25Qcm92aWRlckVudW19IGZyb20gXCIuLi9zZWN1cml0eS9Mb2dvblByb3ZpZGVyRW51bVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEF1dGhNYW5hZ2VyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiYXV0aGNvcmUuQXV0aE1hbmFnZXJcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgR1VFU1RfSUQgPSAyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgU1NPX1JFVFJZX0RFTEFZX1NFQ09ORFMgPSAzMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgU1NPX0ZBSUxFRF9SRVRSWV9ERUxBWV9TRUNPTkRTID0gMzAwO1xyXG4gICAgcHVibGljIHN0YXRpYyBTU09fUFJPVklERVJTX0ZPUl9NQU5VQUxfTE9HT04gPSBbXCJMSU5LRURJTl9TU09cIiwgXCJNSUNST1NPRlRfQURfU1NPXCIsIFwiRkFDRUJPT0tfU1NPXCIsIFwiR09PR0xFX1NTT1wiXTtcclxuXHJcbiAgICBwcml2YXRlIHVzZXJJbmZvOiBJVXNlckluZm87XHJcbiAgICBwcml2YXRlIHNzb1JlZGlyZWN0c0luZm86IGFueTtcclxuICAgIHByaXZhdGUgYXV0b1Nzb0VuYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIFN0b3JhZ2VzLkxPQ0FMX05BTUUsXHJcbiAgICAgICAgVG9rZW5TdG9yYWdlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkcm9vdFNjb3BlOiBJQ29tbW9uUm9vdFNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBJUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2U6IFN0b3JhZ2VXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB0b2tlblN0b3JhZ2U6IFRva2VuU3RvcmFnZSkge1xyXG4gICAgICAgIHRoaXMudXNlckluZm8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3NvUmVkaXJlY3RzSW5mbyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldChcInZocy5hcHBsaWNhdGlvbi5zc28ucmVkaXJlY3RzLmluZm9cIik7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNzb1JlZGlyZWN0c0luZm8pIHtcclxuICAgICAgICAgICAgdGhpcy5zc29SZWRpcmVjdHNJbmZvID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXV0b1Nzb0VuYWJsZWQgPSBBcHBQcm9wZXJ0aWVzLmF1dG9OYXZpZ2F0ZVRvU3NvO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuU3RvcmFnZS5nZXQoKTtcclxuICAgICAgICByZXR1cm4gdG9rZW4gIT0gbnVsbFxyXG4gICAgICAgICAgICAmJiB0b2tlbi5hY2Nlc3NUb2tlblxyXG4gICAgICAgICAgICAmJiB0b2tlbi5pc3N1ZWRBdFxyXG4gICAgICAgICAgICAmJiAobW9tZW50LnV0Yyh0b2tlbi5pc3N1ZWRBdCkuYWRkKHRva2VuLmV4cGlyZXNJbiwgXCJzXCIpLmlzQWZ0ZXIobW9tZW50LnV0YygpKSB8fFxyXG4gICAgICAgICAgICB0b2tlbi5yZWNlaXZlZEF0ICYmIG1vbWVudC51dGModG9rZW4ucmVjZWl2ZWRBdCkuYWRkKHRva2VuLmV4cGlyZXNJbiwgXCJzXCIpLmlzQWZ0ZXIobW9tZW50LnV0YygpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc1Rva2VuKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlblN0b3JhZ2UuZ2V0KCk7XHJcbiAgICAgICAgcmV0dXJuIHRva2VuICE9IG51bGxcclxuICAgICAgICAgICAgJiYgdG9rZW4uYWNjZXNzVG9rZW4gIT0gbnVsbFxyXG4gICAgICAgICAgICAmJiB0b2tlbi5hY2Nlc3NUb2tlbiAhPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXN0b3JlQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlblN0b3JhZ2UuZ2V0KCk7XHJcbiAgICAgICAgcmV0dXJuIHRva2VuICE9IG51bGxcclxuICAgICAgICAgICAgJiYgdG9rZW4ucmVmcmVzaFRva2VuICE9IG51bGxcclxuICAgICAgICAgICAgJiYgdG9rZW4ucmVmcmVzaFRva2VuICE9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEN1cnJlbnRVc2VyKCk6IElVc2VySW5mbyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckluZm87XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRva2VuKCk6IElUb2tlbkluZm8ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuU3RvcmFnZS5nZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVRva2VuKHRva2VuOiBJVG9rZW5JbmZvKSB7XHJcbiAgICAgICAgdGhpcy50b2tlblN0b3JhZ2UucHV0KHRva2VuKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzYXZlUHJldlRva2VuKCkge1xyXG4gICAgICAgIHRoaXMudG9rZW5TdG9yYWdlLnB1dFByZXZUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja1ByZXZUb2tlbkV4aXN0KCkgOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcHJldlRva2VuID0gdGhpcy50b2tlblN0b3JhZ2UuZ2V0UHJldlRva2VuKCk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZUb2tlbiAmJiBwcmV2VG9rZW4uYWNjZXNzVG9rZW4gJiYgcHJldlRva2VuLmFjY2Vzc1Rva2VuLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFByZXZUb2tlbigpIDogSVRva2VuSW5mbyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5TdG9yYWdlLmdldFByZXZUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVQcmV2VG9rZW4oKSB7XHJcbiAgICAgICAgdGhpcy50b2tlblN0b3JhZ2UucmVtb3ZlUHJldlRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVyYXNlVG9rZW4oKSB7XHJcbiAgICAgICAgdGhpcy51c2VySW5mbyA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuU3RvcmFnZS5nZXQoKTtcclxuICAgICAgICBpZiAodG9rZW4gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0b2tlbi5hY2Nlc3NUb2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMudG9rZW5TdG9yYWdlLnB1dCh0b2tlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlcmFzZVJlZnJlc2hUb2tlbigpIHtcclxuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5TdG9yYWdlLmdldCgpO1xyXG4gICAgICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRva2VuLnJlZnJlc2hUb2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMudG9rZW5TdG9yYWdlLnB1dCh0b2tlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2dPbih1c2VyOiBJVXNlckluZm8pIHtcclxuICAgICAgICB0aGlzLnVzZXJJbmZvID0gdXNlcjtcclxuICAgICAgICBpZiAodGhpcy51c2VySW5mby5pZCAhPSBBdXRoTWFuYWdlci5HVUVTVF9JRCkge1xyXG4gICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChFdmVudC5MT0dHRURfT04pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9nT2ZmKCkge1xyXG4gICAgICAgIHRoaXMudG9rZW5TdG9yYWdlLnJlbW92ZSgpO1xyXG4gICAgICAgIGxldCB1c2VySWQ6IG51bWJlciA9IHRoaXMudXNlckluZm8gPyB0aGlzLnVzZXJJbmZvLmlkIDogbnVsbDtcclxuICAgICAgICB0aGlzLnVzZXJJbmZvID0gbnVsbDtcclxuICAgICAgICBpZiAodXNlcklkICE9IG51bGwgJiYgdXNlcklkICE9IEF1dGhNYW5hZ2VyLkdVRVNUX0lEKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHJvb3RTY29wZS4kYnJvYWRjYXN0KEV2ZW50LkxPR0dFRF9PRkYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZUF1dG9Tc28oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hdXRvU3NvRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmFibGVBdXRvU3NvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYXV0b1Nzb0VuYWJsZWQgPSBBcHBQcm9wZXJ0aWVzLmF1dG9OYXZpZ2F0ZVRvU3NvO1xyXG4gICAgICAgIGZvciAobGV0IHByb3ZpZGVyS2V5IG9mIEF1dGhNYW5hZ2VyLmZpbmRTc29Qcm92aWRlcnMoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzc29SZWRpcmVjdEluZm8gPSB0aGlzLmZpbmRTc29SZWRpcmVjdEluZm8ocHJvdmlkZXJLZXkpO1xyXG4gICAgICAgICAgICBzc29SZWRpcmVjdEluZm8uc3NvRmFpbGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNzb1JlZGlyZWN0SW5mby5zc29EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVTc29SZWRpcmVjdEluZm8oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbXBsZXRlU3NvSWZOZWVkZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFBdXRoTWFuYWdlci5nZXRVcmxWYXJzKClbXCJzc29EaXNhYmxlZFwiXSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBwcm92aWRlcktleSBvZiBBdXRoTWFuYWdlci5maW5kU3NvUHJvdmlkZXJzKCkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb21wbGV0ZWQgPSB0aGlzLmNvbXBsZXRlU1NPRXhjaGFuZ2UoPHN0cmluZz5wcm92aWRlcktleSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tcGxldGVTU09FeGNoYW5nZShsb2dvblByb3ZpZGVyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBpc0VuYWJsZWQgPSBBcHBQcm9wZXJ0aWVzLmF1dGhQcm92aWRlci5zcGxpdChcIixcIikuaW5kZXhPZihsb2dvblByb3ZpZGVyKSAhPSAtMTtcclxuICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IEF1dGhNYW5hZ2VyLmdldFVybFZhcnMoKTtcclxuICAgICAgICBpZiAobG9nb25Qcm92aWRlciAhPT0gdG9rZW5JbmZvW1wic3NvUHJvdmlkZXJcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzc29SZWRpcmVjdEluZm8gPSB0aGlzLmZpbmRTc29SZWRpcmVjdEluZm8obG9nb25Qcm92aWRlcik7XHJcblxyXG4gICAgICAgIGlmICh0b2tlbkluZm9bXCJhY2Nlc3NEZW5pZWRcIl0gJiYgdG9rZW5JbmZvW1wic3NvUHJvdmlkZXJcIl0gPT09IExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLk1FUkNBRE9fU1NPXSkge1xyXG4gICAgICAgICAgICBzc29SZWRpcmVjdEluZm8uc3NvRmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgc3NvUmVkaXJlY3RJbmZvLmxhc3RTc29GYWlsZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgc3NvUmVkaXJlY3RJbmZvLmhhc0Vycm9yc0ZvckRpc3BsYXkgPSB0cnVlO1xyXG4gICAgICAgICAgICBzc29SZWRpcmVjdEluZm8uZXJyb3JDb2RlID0gdG9rZW5JbmZvW1wiZXJyb3JDb2RlXCJdO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVTc29SZWRpcmVjdEluZm8oKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRva2VuSW5mb0Zyb21VcmwoKTtcclxuICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuZm9yd2FyZFRvTG9nT24odHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRva2VuSW5mb1tcImFjY2Vzc0RlbmllZFwiXSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFDQ0VTUyBERU5JRUQgYnkgXCIgKyBsb2dvblByb3ZpZGVyKTtcclxuICAgICAgICAgICAgc3NvUmVkaXJlY3RJbmZvLnNzb0ZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHNzb1JlZGlyZWN0SW5mby5sYXN0U3NvRmFpbGVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHNzb1JlZGlyZWN0SW5mby5oYXNFcnJvcnNGb3JEaXNwbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zYXZlU3NvUmVkaXJlY3RJbmZvKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUb2tlbkluZm9Gcm9tVXJsKCk7XHJcbiAgICAgICAgICAgIGlmICh0b2tlbkluZm9bXCJlcnJvckNvZGVcIl0pIHtcclxuICAgICAgICAgICAgICAgIHNzb1JlZGlyZWN0SW5mby5lcnJvckNvZGUgPSB0b2tlbkluZm9bXCJlcnJvckNvZGVcIl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNzb1JlZGlyZWN0SW5mby5hdXRvU3NvTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QucmV0dXJuQWZ0ZXJMb2dPbih0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LmZvcndhcmRUb0xvZ09uKGZhbHNlIC8qbmF0aXZlKi8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodG9rZW5JbmZvW1wic3NvRGlzYWJsZWRcIl0pIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRva2VuSW5mb0Zyb21VcmwoKTtcclxuICAgICAgICAgICAgc3NvUmVkaXJlY3RJbmZvLnNzb0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgc3NvUmVkaXJlY3RJbmZvLmxhc3RTc29EaXNhYmxlZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBzc29SZWRpcmVjdEluZm8uaGFzRXJyb3JzRm9yRGlzcGxheSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZVNzb1JlZGlyZWN0SW5mbygpO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5zdG9yZVVybEJlZm9yZUF1dGhSZWRpcmVjdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5yZXR1cm5BZnRlckxvZ09uKHRydWUgLypuYXRpdmUqLyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzc29SZWRpcmVjdEluZm8uYXV0b1Nzb01vZGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNhdmVTc29SZWRpcmVjdEluZm8oKTtcclxuXHJcbiAgICAgICAgaWYgKCF0b2tlbkluZm9bXCJ0b2tlblwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVUb2tlbih7XHJcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbkluZm9bXCJ0b2tlblwiXSxcclxuICAgICAgICAgICAgdG9rZW5UeXBlOiB0b2tlbkluZm9bXCJ0b2tlblR5cGVcIl0sXHJcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW5JbmZvW1wicmVmcmVzaFRva2VuXCJdLFxyXG4gICAgICAgICAgICBleHBpcmVzSW46IHRva2VuSW5mb1tcImxpZmV0aW1lU2Vjb25kc1wiXSxcclxuICAgICAgICAgICAgaXNzdWVkQXQ6IHRva2VuSW5mb1tcImlzc3VlZEF0XCJdLFxyXG4gICAgICAgICAgICByZWNlaXZlZEF0OiBtb21lbnQudXRjKCkuZm9ybWF0KCksXHJcbiAgICAgICAgICAgIGxvY2FsZTogdG9rZW5JbmZvW1wibG9jYWxlXCJdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRva2VuSW5mb1tcImxvY2FsZVwiXSkgeyAvL3N3aXRjaCBsb2NhbGUgdG8gcHJldmVudCBhZGRpdGlvbmFsIHJlbG9hZHNcclxuICAgICAgICAgICAgY29uc3QgTE9DQUxFX1NUT1JBR0VfS0VZID0gXCJ2aHMuYXBwbGljYXRpb24uY3VycmVudC5sb2NhbGVcIjtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxFX1NUT1JBR0VfS0VZLCB0b2tlbkluZm9bXCJsb2NhbGVcIl0pO1xyXG4gICAgICAgICAgICAvL3NlZSBhbHNvXHJcbiAgICAgICAgICAgIC8vIExvZ09uQ29udHJvbGxlci5jaGFuZ2VBcHBsaWNhdGlvbkxvY2FsZUluU3RvcmFnZSh0b2tlbkluZm9bXCJsb2NhbGVcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNsZWFyVG9rZW5JbmZvRnJvbVVybCgpO1xyXG4gICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LnJldHVybkFmdGVyTG9nT24odHJ1ZSAvKm5hdGl2ZSovKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNBdXRvU3NvQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRvU3NvRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHByb3ZpZGVyS2V5IG9mIEF1dGhNYW5hZ2VyLmZpbmRTc29Qcm92aWRlcnMoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNoZWNrIGZvciBwcm92aWRlciBcIiArIHByb3ZpZGVyS2V5KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNBdXRvU3NvRm9yUHJvdmlkZXJBdmFpbGFibGUocHJvdmlkZXJLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgc3NvIGZvciBwcm92aWRlciBvciBmaXJzdCBlbmFibGVkIHNzby5cclxuICAgICAqIFJlc29sdmUgcHJvbWlzZSBpZiBub3RoaW5nIHdhcyBzdGFydGVkLCByZWplY3QgaWYgd2UgYXJlIHdhaXRpbmcgZm9yIHJlZGlyZWN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGFydFNzb0V4Y2hhbmdlKGF1dG9tYXRpY01vZGU6IGJvb2xlYW4sIHRhcmdldFByb3ZpZGVyS2V5Pzogc3RyaW5nKTogSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coQXV0aE1hbmFnZXIuZ2V0VXJsVmFycygpW1wic3NvRGlzYWJsZWRcIl0pO1xyXG4gICAgICAgIGlmICghKEF1dGhNYW5hZ2VyLmdldFVybFZhcnMoKVtcInNzb0Rpc2FibGVkXCJdICYmIGF1dG9tYXRpY01vZGUpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHByb3ZpZGVyS2V5IG9mIEF1dGhNYW5hZ2VyLmZpbmRTc29Qcm92aWRlcnMoKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCghdGFyZ2V0UHJvdmlkZXJLZXkgfHwgdGFyZ2V0UHJvdmlkZXJLZXkgPT09IHByb3ZpZGVyS2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuaXNBdXRvU3NvRm9yUHJvdmlkZXJBdmFpbGFibGUocHJvdmlkZXJLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3Quc3RvcmVVcmxCZWZvcmVBdXRoUmVkaXJlY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzc29SZWRpcmVjdEluZm8gPSB0aGlzLmZpbmRTc29SZWRpcmVjdEluZm8ocHJvdmlkZXJLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNzb1JlZGlyZWN0SW5mby5hdXRvU3NvTW9kZSA9IGF1dG9tYXRpY01vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3NvUmVkaXJlY3RJbmZvLmxhc3RBdXRvU3NvRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlU3NvUmVkaXJlY3RJbmZvKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuZm9yd2FyZFRvU3NvKHByb3ZpZGVyS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5yZWplY3QoXCJyZWRpcmVjdFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNBdXRvU3NvRm9yUHJvdmlkZXJBdmFpbGFibGUocHJvdmlkZXJLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChBdXRoTWFuYWdlci5TU09fUFJPVklERVJTX0ZPUl9NQU5VQUxfTE9HT04uaW5kZXhPZihwcm92aWRlcktleSkgIT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3NvUmVkaXJlY3RJbmZvOiBTc29SZWRpcmVjdEluZm8gPSB0aGlzLmZpbmRTc29SZWRpcmVjdEluZm8ocHJvdmlkZXJLZXkpO1xyXG4gICAgICAgIGlmICghc3NvUmVkaXJlY3RJbmZvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNzb1JlZGlyZWN0SW5mby5hdXRvU3NvTW9kZVxyXG4gICAgICAgICAgICAmJiAhTW9tZW50LmlzQWZ0ZXIobmV3IERhdGUoKSwgc3NvUmVkaXJlY3RJbmZvLmxhc3RBdXRvU3NvRGF0ZSwgIEF1dGhNYW5hZ2VyLlNTT19SRVRSWV9ERUxBWV9TRUNPTkRTKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzc29SZWRpcmVjdEluZm8uc3NvRGlzYWJsZWQgJiZcclxuICAgICAgICAgICAgKHNzb1JlZGlyZWN0SW5mby5sYXN0U3VjY2VzcyAmJiAhTW9tZW50LmlzQWZ0ZXIoXHJcbiAgICAgICAgICAgICAgICBzc29SZWRpcmVjdEluZm8ubGFzdFN1Y2Nlc3MsIHNzb1JlZGlyZWN0SW5mby5sYXN0U3NvRGlzYWJsZWREYXRlLCAwXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB8fCAhc3NvUmVkaXJlY3RJbmZvLmxhc3RTdWNjZXNzICYmICFNb21lbnQuaXNBZnRlcihcclxuICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZSgpLCBzc29SZWRpcmVjdEluZm8ubGFzdFNzb0Rpc2FibGVkRGF0ZSwgQXV0aE1hbmFnZXIuU1NPX0ZBSUxFRF9SRVRSWV9ERUxBWV9TRUNPTkRTXHJcbiAgICAgICAgICAgICAgICApKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzc29SZWRpcmVjdEluZm8uc3NvRmFpbGVkICYmIChzc29SZWRpcmVjdEluZm8ubGFzdFN1Y2Nlc3MgJiYgIU1vbWVudC5pc0FmdGVyKFxyXG4gICAgICAgICAgICAgICAgc3NvUmVkaXJlY3RJbmZvLmxhc3RTdWNjZXNzLCBzc29SZWRpcmVjdEluZm8ubGFzdFNzb0ZhaWxlZERhdGUsIDBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIHx8ICFzc29SZWRpcmVjdEluZm8ubGFzdFN1Y2Nlc3MgJiYgIU1vbWVudC5pc0FmdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKCksIHNzb1JlZGlyZWN0SW5mby5sYXN0U3NvRmFpbGVkRGF0ZSwgQXV0aE1hbmFnZXIuU1NPX0ZBSUxFRF9SRVRSWV9ERUxBWV9TRUNPTkRTXHJcbiAgICAgICAgICAgICAgICApKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQXV0byBTU08gYWxsb3dlZCBmb3IgXCIgKyBwcm92aWRlcktleSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEZhaWxlZFNzb0luZm8oKTogU3NvUmVkaXJlY3RJbmZvW10ge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IFNzb1JlZGlyZWN0SW5mb1tdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgcHJvdmlkZXJLZXkgb2YgQXV0aE1hbmFnZXIuZmluZFNzb1Byb3ZpZGVycygpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNzb1JlZGlyZWN0SW5mbyA9IHRoaXMuZmluZFNzb1JlZGlyZWN0SW5mbyhwcm92aWRlcktleSk7XHJcbiAgICAgICAgICAgIGlmIChzc29SZWRpcmVjdEluZm8uaGFzRXJyb3JzRm9yRGlzcGxheSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3NvUmVkaXJlY3RJbmZvKTtcclxuICAgICAgICAgICAgICAgIHNzb1JlZGlyZWN0SW5mby5oYXNFcnJvcnNGb3JEaXNwbGF5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVTc29SZWRpcmVjdEluZm8oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGdldFVybFZhcnMoKSB7XHJcbiAgICAgICAgbGV0IHZhcnMgPSB7fSxcclxuICAgICAgICAgICAgaGFzaCxcclxuICAgICAgICAgICAgaGFzaGVzID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc2xpY2Uod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignPycpICsgMSkuc3BsaXQoJyYnKTtcclxuXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGhhc2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBoYXNoID0gaGFzaGVzW2ldLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgICAgIHZhcnNbaGFzaFswXV0gPSBoYXNoWzFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFycztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFyVG9rZW5JbmZvRnJvbVVybCgpIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi5zZWFyY2goXCJhY2Nlc3NEZW5pZWRcIiwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24uc2VhcmNoKFwic3NvRGlzYWJsZWRcIiwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24uc2VhcmNoKFwidG9rZW5cIiwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24uc2VhcmNoKFwidG9rZW5UeXBlXCIsIG51bGwpO1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnNlYXJjaChcInJlZnJlc2hUb2tlblwiLCBudWxsKTtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi5zZWFyY2goXCJsaWZldGltZVNlY29uZHNcIiwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24uc2VhcmNoKFwiaXNzdWVkQXRcIiwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24uc2VhcmNoKFwibG9jYWxlXCIsIG51bGwpO1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLiRsb2NhdGlvbi5wYXRoKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmluZFNzb1JlZGlyZWN0SW5mbyhsb2dvblByb3ZpZGVyS2V5OiBzdHJpbmcpOiBTc29SZWRpcmVjdEluZm8ge1xyXG4gICAgICAgIGlmICh0aGlzLnNzb1JlZGlyZWN0c0luZm8gJiYgdGhpcy5zc29SZWRpcmVjdHNJbmZvW2xvZ29uUHJvdmlkZXJLZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNzb1JlZGlyZWN0c0luZm9bbG9nb25Qcm92aWRlcktleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGluZm86IFNzb1JlZGlyZWN0SW5mbyA9IHtcclxuICAgICAgICAgICAgbG9nb25Qcm92aWRlcktleTogbG9nb25Qcm92aWRlcktleSxcclxuICAgICAgICAgICAgYXV0b1Nzb01vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBsYXN0U3VjY2VzczogbnVsbCxcclxuICAgICAgICAgICAgaGFzRXJyb3JzRm9yRGlzcGxheTogZmFsc2UsXHJcbiAgICAgICAgICAgIGxhc3RBdXRvU3NvRGF0ZTogbnVsbCxcclxuICAgICAgICAgICAgc3NvRGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBsYXN0U3NvRGlzYWJsZWREYXRlOiBudWxsLFxyXG4gICAgICAgICAgICBzc29GYWlsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBsYXN0U3NvRmFpbGVkRGF0ZTogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zc29SZWRpcmVjdHNJbmZvW2xvZ29uUHJvdmlkZXJLZXldID0gaW5mbztcclxuICAgICAgICB0aGlzLnNhdmVTc29SZWRpcmVjdEluZm8oKTtcclxuICAgICAgICByZXR1cm4gaW5mbztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNhdmVTc29SZWRpcmVjdEluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UucHV0KFwidmhzLmFwcGxpY2F0aW9uLnNzby5yZWRpcmVjdHMuaW5mb1wiLCB0aGlzLnNzb1JlZGlyZWN0c0luZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZmluZFNzb1Byb3ZpZGVycygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIEFwcFByb3BlcnRpZXMuYXV0aFByb3ZpZGVyLnNwbGl0KFwiLFwiKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUuaW5kZXhPZihcIl9TU09cIikgPT09IHZhbHVlLmxlbmd0aCAtIDQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVDdXJyZW50VXNlckZ1bGxOYW1lKHVzZXJGdWxsTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy51c2VySW5mby5mdWxsTmFtZSA9IHVzZXJGdWxsTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RSZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kbG9jYXRpb24udXJsKCkuaW5kZXhPZigncmVkaXJlY3RSZXF1aXJlZCcpID49IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9CVURvbWFpbigpIHtcclxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSBBdXRoTWFuYWdlci5nZXRVcmxWYXJzKCk7XHJcbiAgICAgICAgdGhpcy5zYXZlVG9rZW4oe1xyXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW5JbmZvW1widG9rZW5cIl0sXHJcbiAgICAgICAgICAgIHRva2VuVHlwZTogdG9rZW5JbmZvW1widG9rZW5UeXBlXCJdLFxyXG4gICAgICAgICAgICByZWZyZXNoVG9rZW46IHRva2VuSW5mb1tcInJlZnJlc2hUb2tlblwiXSxcclxuICAgICAgICAgICAgZXhwaXJlc0luOiB0b2tlbkluZm9bXCJsaWZldGltZVNlY29uZHNcIl0sXHJcbiAgICAgICAgICAgIGlzc3VlZEF0OiB0b2tlbkluZm9bXCJpc3N1ZWRBdFwiXSxcclxuICAgICAgICAgICAgcmVjZWl2ZWRBdDogbW9tZW50LnV0YygpLmZvcm1hdCgpLFxyXG4gICAgICAgICAgICBsb2NhbGU6IHRva2VuSW5mb1tcImxvY2FsZVwiXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2xlYXJUb2tlbkluZm9Gcm9tVXJsKCk7XHJcbiAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QucmV0dXJuQWZ0ZXJMb2dPbih0cnVlIC8qbmF0aXZlKi8pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtSZWRpcmVjdFJlYXNvbn0gZnJvbSBcIi4vUmVkaXJlY3RSZWFzb25cIjtcclxuXHJcbmltcG9ydCB7U3RvcmFnZVdyYXBwZXIsIFN0b3JhZ2VzfSBmcm9tIFwiLi8uLi9pbmZyYXN0cnVjdHVyZS9TdG9yYWdlXCI7XHJcbmltcG9ydCB7QXV0aFJvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9BdXRoUm91dGVyXCI7XHJcbmltcG9ydCB7TWFpblJvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9NYWluUm91dGVyXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0xvZ29uUHJvdmlkZXJFbnVtfSBmcm9tIFwiLi4vc2VjdXJpdHkvTG9nb25Qcm92aWRlckVudW1cIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4vQXV0aE1hbmFnZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRoUmVkaXJlY3Qge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJhdXRoY29yZS5BdXRoUmVkaXJlY3RcIjtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBLRVkgPSBcImF1dGgtcmVkaXJlY3RcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBTdG9yYWdlcy5TRVNTSU9OX05BTUUsXHJcbiAgICAgICAgQXV0aFJvdXRlci5OQU1FLFxyXG4gICAgICAgIE1haW5Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2U6IFN0b3JhZ2VXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUm91dGVyOiBBdXRoUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYWluUm91dGVyOiBNYWluUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgICAgICAvLyB0aGlzLmNsZWFyUmVkaXJlY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0xvZ09uKHJlYXNvbj86IFJlZGlyZWN0UmVhc29uLCBidXNpbmVzc1VuaXRJZD86IG51bWJlcikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUmVkaXJlY3RpbmcgdG8gTG9nIE9uLi4uXCIpO1xyXG4gICAgICAgIGxldCBjdXJyZW50UGF0aCA9IHRoaXMuJGxvY2F0aW9uLnBhdGgoKTtcclxuICAgICAgICBsZXQgY3VycmVudFVybCA9IHRoaXMuJGxvY2F0aW9uLnVybCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50UGF0aCAhPT0gdGhpcy5hdXRoUm91dGVyLmxvZ29uVXJsKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTdG9yaW5nIFVSTDogXCIgKyBjdXJyZW50VXJsKTtcclxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5wdXQoQXV0aFJlZGlyZWN0LktFWSwgY3VycmVudFVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9yd2FyZFRvTG9nT24oZmFsc2UgLypuYXRpdmUqLywgcmVhc29uLCBidXNpbmVzc1VuaXRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0b3JlVXJsQmVmb3JlQXV0aFJlZGlyZWN0KCkge1xyXG4gICAgICAgIGxldCBjdXJyZW50VXJsID0gdGhpcy4kbG9jYXRpb24udXJsKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlc3Npb25TdG9yYWdlLmNvbnRhaW5zKEF1dGhSZWRpcmVjdC5LRVkpXHJcbiAgICAgICAgICAgICYmIGN1cnJlbnRVcmwuaW5kZXhPZih0aGlzLmF1dGhSb3V0ZXIubG9nb25VcmwoKSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3RvcmluZyBVUkw6IFwiICsgY3VycmVudFVybCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UucHV0KEF1dGhSZWRpcmVjdC5LRVksIGN1cnJlbnRVcmwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9yd2FyZFRvTG9nT24obmF0aXZlOiBib29sZWFuLCByZWFzb24/OiBSZWRpcmVjdFJlYXNvbiwgYnVzaW5lc3NVbml0SWQ/OiBudW1iZXIpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkZvcndhcmRpbmcgdG8gTG9nIE9uLi4uXCIpO1xyXG4gICAgICAgIGlmICghbmF0aXZlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVhc29uKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlZGlyZWN0UmVhc29uLkFDQ0VTU19ERU5JRUQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYXV0aFJvdXRlci5sb2dvblVybChidXNpbmVzc1VuaXRJZCkpLnNlYXJjaChBdXRoUm91dGVyLkFDQ0VTU19ERU5JRURfUEFSQU1fTkFNRSwgdHJ1ZSk7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZWRpcmVjdFJlYXNvbi5UT0tFTl9FWFBJUkVEOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmF1dGhSb3V0ZXIubG9nb25VcmwoYnVzaW5lc3NVbml0SWQpKS5zZWFyY2goQXV0aFJvdXRlci5UT0tFTl9FWFBJUkVEX1BBUkFNX05BTUUsIHRydWUpOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVkaXJlY3RSZWFzb24uTE9HT05fUkVRVUlSRUQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYXV0aFJvdXRlci5sb2dvblVybChidXNpbmVzc1VuaXRJZCkpLnNlYXJjaChBdXRoUm91dGVyLkxPR09OX1JFUVVJUkVEX1BBUkFNX05BTUUsIHRydWUpOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYXV0aFJvdXRlci5sb2dvblVybChidXNpbmVzc1VuaXRJZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGJhc2VVcmwgPSB0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF07XHJcbiAgICAgICAgICAgIGxldCB1cmwgPSBiYXNlVXJsICsgXCIjXCIgKyB0aGlzLmF1dGhSb3V0ZXIubG9nb25VcmwoYnVzaW5lc3NVbml0SWQpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVSTDogXCIgKyB1cmwpO1xyXG4gICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh1cmwpO1xyXG4gICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmb3J3YXJkVG9TcG5lZ28oKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJSZWRpcmVjdGluZyB0byBTUE5FR08uLi5cIik7XHJcbiAgICAgICAgdGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zcG5lZ28vZXhjaGFuZ2VcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZvcndhcmRUb1Nzbyhwcm92aWRlcktleTogc3RyaW5nLCBidXNpbmVzc1VuaXRJZD86IG51bWJlcikge1xyXG4gICAgICAgIGlmIChwcm92aWRlcktleSA9PT0gXCJBRF9TU09cIikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlZGlyZWN0aW5nIHRvIFNQTkVHTy4uLlwiKTtcclxuICAgICAgICAgICAgdGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zcG5lZ28vZXhjaGFuZ2VcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZWRpcmVjdGluZyB0byBcIiArIHByb3ZpZGVyS2V5KTtcclxuICAgICAgICAgICAgaWYgKGJ1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvc3NvL3N0YXJ0P3Nzb1Byb3ZpZGVyPSR7cHJvdmlkZXJLZXl9JmJ1c2luZXNzVW5pdElkPSR7YnVzaW5lc3NVbml0SWR9YCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvc3NvL3N0YXJ0P3Nzb1Byb3ZpZGVyPSR7cHJvdmlkZXJLZXl9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZvcndhcmRUb0FjY2Vzc0RlbmllZCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlJlZGlyZWN0aW5nIHRvIEFjY2VzcyBEZW5pZWQuLi5cIik7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYXV0aFJvdXRlci5hY2Nlc3NEZW5pZWRVcmwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJldHVybkFmdGVyTG9nT24obmF0aXZlOiBib29sZWFuLCBob21lUGFnZVVybD86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUmV0dXJuaW5nIGFmdGVyIExvZyBPbi4uLlwiKTtcclxuICAgICAgICBsZXQgcmVkaXJlY3QgPSB0aGlzLnNlc3Npb25TdG9yYWdlLmdldDxzdHJpbmc+KEF1dGhSZWRpcmVjdC5LRVkpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJSZWRpcmVjdGlvbigpO1xyXG4gICAgICAgIHJlZGlyZWN0ID0gcmVkaXJlY3QgPyByZWRpcmVjdCA6IGhvbWVQYWdlVXJsO1xyXG4gICAgICAgIGlmICghbmF0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJGxvY2F0aW9uLnBhdGgoJ1wiICsgcmVkaXJlY3QgKyBcIicpXCIpO1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwocmVkaXJlY3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBiYXNlVXJsID0gdGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCI/XCIpWzBdO1xyXG4gICAgICAgICAgICBsZXQgdXJsID0gYmFzZVVybDtcclxuICAgICAgICAgICAgaWYgKHVybFt1cmwubGVuZ3RoIC0gMV0gPT0gJyMnKVxyXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsICsgcmVkaXJlY3Q7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFwiI1wiICsgcmVkaXJlY3Q7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCdcIiArIHVybCArIFwiJylcIik7XHJcbiAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHVybCk7XHJcbiAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyUmVkaXJlY3Rpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5yZW1vdmUoQXV0aFJlZGlyZWN0LktFWSk7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIEV2ZW50IHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTE9HR0VEX09OOiBzdHJpbmcgPSBcImF1dGg6bG9nZ2VkT25cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTE9HR0VEX09GRjogc3RyaW5nID0gXCJhdXRoOmxvZ2dlZE9mZlwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBTRVNTSU9OX1JFU1RPUkVfRkFJTEVEOiBzdHJpbmcgPSBcImF1dGg6c2Vzc2lvblJlc3RvcmVGYWlsZWRcIjtcclxufSIsImV4cG9ydCBlbnVtIFJlZGlyZWN0UmVhc29uIHtcclxuICAgIEFDQ0VTU19ERU5JRUQsXHJcbiAgICBUT0tFTl9FWFBJUkVELFxyXG4gICAgTE9HT05fUkVRVUlSRURcclxufSIsImltcG9ydCB7U3RvcmFnZVdyYXBwZXIsIFN0b3JhZ2VzfSBmcm9tIFwiLi8uLi9pbmZyYXN0cnVjdHVyZS9TdG9yYWdlXCI7XHJcbmltcG9ydCB7SVRva2VuSW5mb30gZnJvbSBcIi4vSVRva2VuSW5mb1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRva2VuU3RvcmFnZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImF1dGhjb3JlLlRva2VuU3RvcmFnZVwiO1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIFRPS0VOX0tFWSA9IFwiYWNjZXNzLXRva2VuXCI7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBQUkVWX1RPS0VOX0tFWSA9IFwicHJldi1hY2Nlc3MtdG9rZW5cIjtcclxuXHJcbiAgICBwcml2YXRlIHRva2VuSW5mbzogSVRva2VuSW5mbztcclxuICAgIHByaXZhdGUgcHJldlRva2VuSW5mbzogSVRva2VuSW5mbztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgU3RvcmFnZXMuTE9DQUxfTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2VXcmFwcGVyKSB7XHJcbiAgICAgICAgdGhpcy50b2tlbkluZm8gPSBzdG9yYWdlLmdldDxJVG9rZW5JbmZvPihUb2tlblN0b3JhZ2UuVE9LRU5fS0VZKTtcclxuICAgICAgICB0aGlzLnByZXZUb2tlbkluZm8gPSBzdG9yYWdlLmdldDxJVG9rZW5JbmZvPihUb2tlblN0b3JhZ2UuUFJFVl9UT0tFTl9LRVkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQoKTogSVRva2VuSW5mbyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5JbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwdXQodG9rZW46IElUb2tlbkluZm8pIHtcclxuICAgICAgICB0aGlzLnRva2VuSW5mbyA9IHRva2VuO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5wdXQoVG9rZW5TdG9yYWdlLlRPS0VOX0tFWSwgdG9rZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmUoKSB7XHJcbiAgICAgICAgdGhpcy50b2tlbkluZm8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoVG9rZW5TdG9yYWdlLlRPS0VOX0tFWSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9NZXRob2QgZm9yIGxvZ2luIGFzIGFub3RoZXIgdXNlciBmZWF0dXJlXHJcbiAgICBwdWJsaWMgZ2V0UHJldlRva2VuKCk6IElUb2tlbkluZm8ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXZUb2tlbkluZm87XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHB1dFByZXZUb2tlbigpIHtcclxuICAgICAgICB0aGlzLnByZXZUb2tlbkluZm8gPSB0aGlzLnRva2VuSW5mbztcclxuICAgICAgICB0aGlzLnN0b3JhZ2UucHV0KFRva2VuU3RvcmFnZS5QUkVWX1RPS0VOX0tFWSwgdGhpcy50b2tlbkluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVQcmV2VG9rZW4oKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2VG9rZW5JbmZvID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFRva2VuU3RvcmFnZS5QUkVWX1RPS0VOX0tFWSk7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGVudW0gQnJhbmRpbmdFZGl0TW9kZSB7XHJcbiAgICBUSEVNRVMsXHJcbiAgICBMT0dPUyxcclxuICAgIENTUyxcclxuICAgIENPTE9SUyxcclxuICAgIFNIQVJFXHJcbn1cclxuIiwiZXhwb3J0IGVudW0gQnJhbmRpbmdMb2dvVHlwZSB7XHJcbiAgICBMT0dPLFxyXG4gICAgTU9CSUxFX0xPR08sXHJcbiAgICBGQVZJQ09OXHJcbn1cclxuIiwiaW1wb3J0IHtBdXRoQ29yZU1vZHVsZX0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhDb3JlTW9kdWxlXCI7XHJcbmltcG9ydCB7VXJsc01vZHVsZX0gZnJvbSBcIi4uL3VybHMvVXJsc01vZHVsZVwiO1xyXG5pbXBvcnQge0luZnJhc3RydWN0dXJlTW9kdWxlfSBmcm9tIFwiLi4vaW5mcmFzdHJ1Y3R1cmUvSW5mcmFzdHJ1Y3R1cmVNb2R1bGVcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0JyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4vQnJhbmRpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QnJhbmRpbmdUaGVtZXNTZXJ2aWNlfSBmcm9tIFwiLi9CcmFuZGluZ1RoZW1lc1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCB2YXIgQnJhbmRpbmdNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJicmFuZGluZ1wiLCBbXHJcbiAgICAgICAgQXV0aENvcmVNb2R1bGUubmFtZSxcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgSW5mcmFzdHJ1Y3R1cmVNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLCBDdXN0b21CcmFuZGluZ1NlcnZpY2UpXHJcbiAgICAuc2VydmljZShCcmFuZGluZ1NlcnZpY2UuTkFNRSwgQnJhbmRpbmdTZXJ2aWNlKVxyXG4gICAgLnNlcnZpY2UoQnJhbmRpbmdUaGVtZXNTZXJ2aWNlLk5BTUUsIEJyYW5kaW5nVGhlbWVzU2VydmljZSk7XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ3VzdG9tQnJhbmRpbmd9IGZyb20gXCIuLi9idXNpbmVzc1VuaXRzL21vZGVscy9JQ3VzdG9tQnJhbmRpbmdcIjtcclxuaW1wb3J0IHtJSHR0cFByb21pc2VDYWxsYmFja0FyZ30gZnJvbSBcImFuZ3VsYXJcIjtcclxuaW1wb3J0IHtJQnJhbmRpbmdMb2dvc30gZnJvbSBcIi4vSUJyYW5kaW5nTG9nb3NcIjtcclxuaW1wb3J0IHtJQnJhbmRpbmdDb2xvcnN9IGZyb20gXCIuL0lCcmFuZGluZ0NvbG9yc1wiO1xyXG5pbXBvcnQge0lCcmFuZGluZ0N1c3RvbUNzc30gZnJvbSBcIi4vSUJyYW5kaW5nQ3VzdG9tQ3NzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQnJhbmRpbmdTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiYnJhbmRpbmcuQnJhbmRpbmdTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIlVwbG9hZFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN5c3RlbUJyYW5kaW5nU2V0dGluZ3MoKTogYW5ndWxhci5JUHJvbWlzZTxJQ3VzdG9tQnJhbmRpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvc3lzdGVtXCIpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPElDdXN0b21CcmFuZGluZz4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VzdG9tQnJhbmRpbmdTZXR0aW5ncyhidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQ3VzdG9tQnJhbmRpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmc/YnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8SUN1c3RvbUJyYW5kaW5nPikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTeXN0ZW1DdXN0b21Dc3MoKTogYW5ndWxhci5JUHJvbWlzZTxJQnJhbmRpbmdDdXN0b21Dc3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvY3VzdG9tQ3NzL3N5c3RlbVwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxJQnJhbmRpbmdDdXN0b21Dc3M+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEN1c3RvbUNzcyhidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQnJhbmRpbmdDdXN0b21Dc3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvY3VzdG9tQ3NzP2J1c2luZXNzVW5pdElkPTpidXNpbmVzc1VuaXRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPElCcmFuZGluZ0N1c3RvbUNzcz4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3lzdGVtQnJhbmRpbmdMb2dvcyh0eXBlPzogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxJQnJhbmRpbmdMb2dvcz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9icmFuZGluZy9sb2dvcy9zeXN0ZW1cIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8SUN1c3RvbUJyYW5kaW5nPikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCcmFuZGluZ0xvZ29zKGJ1c2luZXNzVW5pdElkOiBudW1iZXIsIHR5cGU/OiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElCcmFuZGluZ0xvZ29zPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2JyYW5kaW5nL2xvZ29zP2J1c2luZXNzVW5pdElkPTpidXNpbmVzc1VuaXRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPElDdXN0b21CcmFuZGluZz4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3lzdGVtQnJhbmRpbmdDb2xvcnMoKTogYW5ndWxhci5JUHJvbWlzZTxJQnJhbmRpbmdDb2xvcnM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvYnJhbmRpbmcvY29sb3JzL3N5c3RlbVwiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QnJhbmRpbmdDb2xvcnMoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUJyYW5kaW5nQ29sb3JzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2JyYW5kaW5nL2NvbG9ycz9idXNpbmVzc1VuaXRJZD06YnVzaW5lc3NVbml0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVN5c3RlbUN1c3RvbUNzcyhjc3M6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUJyYW5kaW5nQ3VzdG9tQ3NzPiB7XHJcbiAgICAgICAgbGV0IGNzc0lucHV0ID0ge1xyXG4gICAgICAgICAgICBjc3M6IGNzc1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2JyYW5kaW5nL2N1c3RvbUNzcy9zeXN0ZW1cIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgY3NzSW5wdXQpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPElCcmFuZGluZ0N1c3RvbUNzcz4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQ3VzdG9tQ3NzKGJ1c2luZXNzVW5pdElkOiBudW1iZXIsIGNzczogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxJQnJhbmRpbmdDdXN0b21Dc3M+IHtcclxuICAgICAgICBsZXQgY3NzSW5wdXQgPSB7XHJcbiAgICAgICAgICAgIGNzczogY3NzXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvY3VzdG9tQ3NzP2J1c2luZXNzVW5pdElkPTpidXNpbmVzc1VuaXRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIGNzc0lucHV0KVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxJQnJhbmRpbmdDdXN0b21Dc3M+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVN5c3RlbUxvZ28obG9nb1R5cGU6IHN0cmluZywgZmlsZTogRmlsZSk6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFByb21pc2U8RmlsZT4ge1xyXG4gICAgICAgIGxldCB1cmxCdWlsZGVyID0gdGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvbG9nb3Mvc3lzdGVtP2xvZ29UeXBlPTpsb2dvVHlwZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bG9nb1R5cGVcIiwgbG9nb1R5cGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiR1cGxvYWRlci51cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgIHVybDogYW5ndWxhci5jb3B5KHVybEJ1aWxkZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgICAgIGZpbGU6IGZpbGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJ1c2luZXNzVW5pdExvZ28oYnVzaW5lc3NVbml0SWQ6IG51bWJlciwgbG9nb1R5cGU6IHN0cmluZywgZmlsZTogRmlsZSk6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFByb21pc2U8RmlsZT4ge1xyXG4gICAgICAgIGxldCB1cmxCdWlsZGVyID0gdGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvbG9nb3M/YnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkJmxvZ29UeXBlPTpsb2dvVHlwZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpsb2dvVHlwZVwiLCBsb2dvVHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVwbG9hZGVyLnVwbG9hZCh7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBhbmd1bGFyLmNvcHkodXJsQnVpbGRlcilcclxuICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVN5c3RlbUJyYW5kaW5nQ29sb3JzKG1vYmlsZUNvbG9yOiBzdHJpbmcsIGJhckNvbG9yOiBzdHJpbmcsIG1vYmlsZUJhckNvbG9yOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElCcmFuZGluZ0NvbG9ycz4ge1xyXG4gICAgICAgIGxldCBib2R5ID0ge1xyXG4gICAgICAgICAgICBtb2JpbGVDb2xvcjogbW9iaWxlQ29sb3IsXHJcbiAgICAgICAgICAgIGJhckNvbG9yOiBiYXJDb2xvcixcclxuICAgICAgICAgICAgbW9iaWxlQmFyQ29sb3I6IG1vYmlsZUJhckNvbG9yXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvYnJhbmRpbmcvY29sb3JzL3N5c3RlbVwiKSwgYm9keSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUJyYW5kaW5nQ29sb3JzKGJ1c2luZXNzVW5pdElkOiBudW1iZXIsIG1vYmlsZUNvbG9yOiBzdHJpbmcsIGJhckNvbG9yOiBzdHJpbmcsIG1vYmlsZUJhckNvbG9yOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElCcmFuZGluZ0NvbG9ycz4ge1xyXG4gICAgICAgIGxldCBib2R5ID0ge1xyXG4gICAgICAgICAgICBtb2JpbGVDb2xvcjogbW9iaWxlQ29sb3IsXHJcbiAgICAgICAgICAgIGJhckNvbG9yOiBiYXJDb2xvcixcclxuICAgICAgICAgICAgbW9iaWxlQmFyQ29sb3I6IG1vYmlsZUJhckNvbG9yXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvY29sb3JzP2J1c2luZXNzVW5pdElkPTpidXNpbmVzc1VuaXRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpLnNlcnZpY2UoKSwgYm9keSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlU3lzdGVtU2V0dGluZ3NCcmFuZGluZygpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9icmFuZGluZy9zeXN0ZW1cIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8YW55PikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVCdXNpbmVzc1VuaXRCcmFuZGluZyhjdXN0b21CcmFuZGluZ0lkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9icmFuZGluZy86aWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGN1c3RvbUJyYW5kaW5nSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVsZXRlU3lzdGVtQ3VzdG9tQ3NzKCk6IGFuZ3VsYXIuSVByb21pc2U8SUJyYW5kaW5nQ3VzdG9tQ3NzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2JyYW5kaW5nL2N1c3RvbUNzcy9zeXN0ZW1cIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8SUJyYW5kaW5nQ3VzdG9tQ3NzPikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVDdXN0b21Dc3MoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUJyYW5kaW5nQ3VzdG9tQ3NzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2JyYW5kaW5nL2N1c3RvbUNzcz9idXNpbmVzc1VuaXRJZD06YnVzaW5lc3NVbml0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxJQnJhbmRpbmdDdXN0b21Dc3M+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZVN5c3RlbUJyYW5kaW5nTG9nb3MobG9nb1R5cGU6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2JyYW5kaW5nL2xvZ29zL3N5c3RlbT9sb2dvVHlwZT06bG9nb1R5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmxvZ29UeXBlXCIsIGxvZ29UeXBlKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxhbnk+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZUJyYW5kaW5nTG9nb3MoYnVzaW5lc3NVbml0SWQ6IG51bWJlciwgbG9nb1R5cGU6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2JyYW5kaW5nL2xvZ29zP2J1c2luZXNzVW5pdElkPTpidXNpbmVzc1VuaXRJZCZsb2dvVHlwZT06bG9nb1R5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bG9nb1R5cGVcIiwgbG9nb1R5cGUpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlU3lzdGVtQnJhbmRpbmdDb2xvcnMoYnJhbmRpbmdJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQnJhbmRpbmdDb2xvcnM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvY29sb3JzL3N5c3RlbVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnJhbmRpbmdJZFwiLCBicmFuZGluZ0lkKS5zZXJ2aWNlKCksIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVCcmFuZGluZ0NvbG9ycyhicmFuZGluZ0lkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElCcmFuZGluZ0NvbG9ycz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9icmFuZGluZy86aWQvY29sb3JzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBicmFuZGluZ0lkKS5zZXJ2aWNlKCksIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVTeXN0ZW1TaGFyZUxvZ28oZmlsZTogRmlsZSk6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFByb21pc2U8RmlsZT4ge1xyXG4gICAgICAgIGxldCB1cmxCdWlsZGVyID0gdGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvc2hhcmVMb2dvL3N5c3RlbVwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGFuZ3VsYXIuY29weSh1cmxCdWlsZGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVCdXNpbmVzc1VuaXRTaGFyZUxvZ28oYnVzaW5lc3NVbml0SWQ6IG51bWJlciwgZmlsZTogRmlsZSk6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFByb21pc2U8RmlsZT4ge1xyXG4gICAgICAgIGxldCB1cmxCdWlsZGVyID0gdGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvc2hhcmVMb2dvP2J1c2luZXNzVW5pdElkPTpidXNpbmVzc1VuaXRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiR1cGxvYWRlci51cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgIHVybDogYW5ndWxhci5jb3B5KHVybEJ1aWxkZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgICAgIGZpbGU6IGZpbGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN5c3RlbVNoYXJlTG9nbyh0eXBlPzogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvc2hhcmVMb2dvL3N5c3RlbVwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxzdHJpbmc+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNoYXJlTG9nbyhidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvc2hhcmVMb2dvP2J1c2luZXNzVW5pdElkPTpidXNpbmVzc1VuaXRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPHN0cmluZz4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBkZWxldGVTeXN0ZW1TaGFyZUxvZ28oKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5kZWxldGUodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvc2hhcmVMb2dvL3N5c3RlbVwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxhbnk+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZVNoYXJlTG9nbyhidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5kZWxldGUodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvc2hhcmVMb2dvP2J1c2luZXNzVW5pdElkPTpidXNpbmVzc1VuaXRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJyYW5kaW5nVGhlbWV9IGZyb20gXCIuL0JyYW5kaW5nVGhlbWVcIjtcclxuaW1wb3J0IHtJQnJhbmRpbmdUaGVtZUlucHV0fSBmcm9tIFwiLi9CcmFuZGluZ1RoZW1lSW5wdXRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBCcmFuZGluZ1RoZW1lc1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJicmFuZGluZy5CcmFuZGluZ1RoZW1lc1NlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJyYW5kaW5nVGhlbWVzKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElCcmFuZGluZ1RoZW1lW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvdGhlbWVzL2JyYW5kaW5nVGhlbWVzL2J1c2luZXNzVW5pdC86YnVzaW5lc3NVbml0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTeXN0ZW1CcmFuZGluZ1RoZW1lcygpOiBhbmd1bGFyLklQcm9taXNlPElCcmFuZGluZ1RoZW1lW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvYnJhbmRpbmcvdGhlbWVzL2JyYW5kaW5nVGhlbWVzL3N5c3RlbVwiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUJyYW5kaW5nVGhlbWVBc0N1c3RvbShjdXN0b21CcmFuZGluZ1RoZW1lOiBJQnJhbmRpbmdUaGVtZUlucHV0KTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2JyYW5kaW5nL3RoZW1lcy9icmFuZGluZ1RoZW1lcy9zYXZlXCIpLCBjdXN0b21CcmFuZGluZ1RoZW1lKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcHBseUJyYW5kaW5nVGhlbWUoYnVzaW5lc3NVbml0SWQ6IG51bWJlciwgdGhlbWVJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnJhbmRpbmcvdGhlbWVzL2JyYW5kaW5nVGhlbWVzL2FwcGx5L2J1c2luZXNzVW5pdC86YnVzaW5lc3NVbml0SWQ/dGhlbWVJZD06dGhlbWVJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp0aGVtZUlkXCIsIHRoZW1lSWQpLnNlcnZpY2UoKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5U3lzdGVtQnJhbmRpbmdUaGVtZSh0aGVtZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9icmFuZGluZy90aGVtZXMvYnJhbmRpbmdUaGVtZXMvYXBwbHkvc3lzdGVtP3RoZW1lSWQ9OnRoZW1lSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnRoZW1lSWRcIiwgdGhlbWVJZCkuc2VydmljZSgpLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVzaW5lc3NVbml0QnJhbmRpbmdUaGVtZShjdXN0b21CcmFuZGluZ1RoZW1lOiBJQnJhbmRpbmdUaGVtZUlucHV0KTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvYnJhbmRpbmcvdGhlbWVzL2JyYW5kaW5nVGhlbWVzL2J1c2luZXNzVW5pdC91cGRhdGVcIiksIGN1c3RvbUJyYW5kaW5nVGhlbWUpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVN5c3RlbUJyYW5kaW5nVGhlbWUoY3VzdG9tQnJhbmRpbmdUaGVtZTogSUJyYW5kaW5nVGhlbWVJbnB1dCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2JyYW5kaW5nL3RoZW1lcy9icmFuZGluZ1RoZW1lcy9zeXN0ZW0vdXBkYXRlXCIpLCBjdXN0b21CcmFuZGluZ1RoZW1lKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldEJyYW5kaW5nVGhlbWUoYnVzaW5lc3NVbml0SWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9icmFuZGluZy90aGVtZXMvYnJhbmRpbmdUaGVtZXMvYnVzaW5lc3NVbml0cy86YnVzaW5lc3NVbml0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKCc6YnVzaW5lc3NVbml0SWQnLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRTeXN0ZW1CcmFuZGluZ1RoZW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9icmFuZGluZy90aGVtZXMvYnJhbmRpbmdUaGVtZXMvc3lzdGVtXCIpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQgSVdpbmRvd1NlcnZpY2UgPSBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vYXV0aGNvcmUvRXZlbnRcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiYnJhbmRpbmcuQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50VXNlcjogSVVzZXJJbmZvO1xyXG4gICAgcHJpdmF0ZSBiYXJDb2xvcjogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IElXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQ3VzdG9tQnJhbmRpbmcoKTtcclxuXHJcbiAgICAgICAgJHJvb3RTY29wZS4kb24oRXZlbnQuTE9HR0VEX09OLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3VzdG9tQnJhbmRpbmcoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkcm9vdFNjb3BlLiRvbihFdmVudC5MT0dHRURfT0ZGLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3VzdG9tQnJhbmRpbmcoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldEhlYWRlckNvbG9yKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VDdXN0b21CcmFuZGluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IGFuZ3VsYXIuY29weSh1c2VyKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRCcmFuZGluZ0NzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEJyYW5kaW5nQ3VzdG9tQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SGVhZGVyQ29sb3IoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGYXZpY29uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRIZWFkZXJDb2xvcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4kd2luZG93LmlubmVyV2lkdGggPCA5OTIpIHtcclxuICAgICAgICAgICAgdGhpcy5iYXJDb2xvciA9IHRoaXMuY3VycmVudFVzZXIuY3VzdG9tQnJhbmRpbmcubW9iaWxlQmFyQ29sb3I7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5iYXJDb2xvciA9IHRoaXMuY3VycmVudFVzZXIuY3VzdG9tQnJhbmRpbmcuYmFyQ29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hhbmdlRmF2aWNvbigpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBvbGRMaW5rOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibGlua1tyZWwqPSdpY29uJ11cIik7XHJcbiAgICAgICAgaWYgKG9sZExpbmspIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChvbGRMaW5rKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpZVZlcnNpb246IG51bWJlcjtcclxuICAgICAgICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICAgICAgY29uc3QgdHJpZGVudDogbnVtYmVyID0gdWEuaW5kZXhPZignVHJpZGVudC8nKTtcclxuICAgICAgICBpZiAodHJpZGVudCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcnY6IG51bWJlciA9IHVhLmluZGV4T2YoJ3J2OicpO1xyXG4gICAgICAgICAgICBpZVZlcnNpb24gPSBwYXJzZUludCh1YS5zdWJzdHJpbmcocnYgKyAzLCB1YS5pbmRleE9mKCcuJywgcnYpKSwgMTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGN1c3RvbUZhdmljb24gPSB0aGlzLmN1cnJlbnRVc2VyLmN1c3RvbUJyYW5kaW5nLmZhdmljb247XHJcbiAgICAgICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xyXG4gICAgICAgIGxpbmsudHlwZSA9ICdpbWFnZS94LWljb24nO1xyXG4gICAgICAgIGxpbmsucmVsID0gaWVWZXJzaW9uID8gJ2ljb24nIDogJ3Nob3J0Y3V0IGljb24nO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9ICFjdXN0b21GYXZpY29uID8gJ3RoZW1lcy9kZWZhdWx0L2ltZy9mYXZpY29uLmljbz92PUBAYnVpbGRWZXJzaW9uJyA6IGN1c3RvbUZhdmljb247XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QmFyQ29sb3IoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXJDb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEJyYW5kaW5nQ3NzKCkge1xyXG4gICAgICAgIGxldCBjbGllbnRCYXNlVXJsOiBzdHJpbmcgPSBBcHBQcm9wZXJ0aWVzLmJhc2VVcmw7XHJcbiAgICAgICAgbGV0IGJhc2VEb21haW46IHN0cmluZyA9IChuZXcgKDxhbnk+d2luZG93KS5VUkwoY2xpZW50QmFzZVVybCkpLmhvc3RuYW1lO1xyXG5cclxuICAgICAgICBpZiAodGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihiYXNlRG9tYWluKSAhPSAtMVxyXG4gICAgICAgICAgICAmJiB0aGlzLmN1cnJlbnRVc2VyICYmIHRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0cyAmJiB0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgbGV0IGJyYW5kaW5nQ3NzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicmFuZGluZy1jc3MnKTtcclxuICAgICAgICAgICAgbGV0IGhyZWZWYWx1ZSA9IGJyYW5kaW5nQ3NzTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcclxuICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gQXBwUHJvcGVydGllcy5zZXJ2aWNlUm9vdCArICdhcGkvYnJhbmRpbmcvYnJhbmRpbmcuY3NzJyArICc/YnVzaW5lc3NVbml0SWQ9JyArIHRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0c1swXTtcclxuICAgICAgICAgICAgaWYgKGhyZWZWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGJyYW5kaW5nQ3NzTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgYnJhbmRpbmdDc3NMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JyYW5kaW5nLWNzcycpO1xyXG4gICAgICAgICAgICBsZXQgaHJlZlZhbHVlID0gYnJhbmRpbmdDc3NMaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xyXG4gICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBBcHBQcm9wZXJ0aWVzLnNlcnZpY2VSb290ICsgJ2FwaS9icmFuZGluZy9icmFuZGluZy5jc3MnO1xyXG4gICAgICAgICAgICBpZiAoaHJlZlZhbHVlICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgYnJhbmRpbmdDc3NMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEJyYW5kaW5nQ3VzdG9tQ3NzKCkge1xyXG4gICAgICAgIGxldCBjbGllbnRCYXNlVXJsOiBzdHJpbmcgPSBBcHBQcm9wZXJ0aWVzLmJhc2VVcmw7XHJcbiAgICAgICAgbGV0IGJhc2VEb21haW46IHN0cmluZyA9IChuZXcgKDxhbnk+d2luZG93KS5VUkwoY2xpZW50QmFzZVVybCkpLmhvc3RuYW1lO1xyXG5cclxuICAgICAgICBpZiAodGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihiYXNlRG9tYWluKSAhPSAtMVxyXG4gICAgICAgICAgICAmJiB0aGlzLmN1cnJlbnRVc2VyICYmIHRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0cyAmJiB0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgbGV0IGJyYW5kaW5nQ3VzdG9tQ3NzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicmFuZGluZy1jdXN0b20tY3NzJyk7XHJcbiAgICAgICAgICAgIGxldCBocmVmVmFsdWUgPSBicmFuZGluZ0N1c3RvbUNzc0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7XHJcbiAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IEFwcFByb3BlcnRpZXMuc2VydmljZVJvb3QgKyAnYXBpL2JyYW5kaW5nL2N1c3RvbS5jc3MnICsgJz9idXNpbmVzc1VuaXRJZD0nICsgdGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzWzBdO1xyXG4gICAgICAgICAgICBpZiAoaHJlZlZhbHVlICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgYnJhbmRpbmdDdXN0b21Dc3NMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBicmFuZGluZ0N1c3RvbUNzc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJhbmRpbmctY3VzdG9tLWNzcycpO1xyXG4gICAgICAgICAgICBsZXQgaHJlZlZhbHVlID0gYnJhbmRpbmdDdXN0b21Dc3NMaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xyXG4gICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBBcHBQcm9wZXJ0aWVzLnNlcnZpY2VSb290ICsgJ2FwaS9icmFuZGluZy9jdXN0b20uY3NzJztcclxuICAgICAgICAgICAgaWYgKGhyZWZWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGJyYW5kaW5nQ3VzdG9tQ3NzTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQgSVByb21pc2UgPSBhbmd1bGFyLklQcm9taXNlO1xyXG5pbXBvcnQge0lCdW5kbGV9IGZyb20gXCIuL21vZGVscy9JQnVuZGxlXCI7XHJcbmltcG9ydCB7SUJ1bmRsZUZpbGV9IGZyb20gXCIuL21vZGVscy9JQnVuZGxlRmlsZVwiO1xyXG5pbXBvcnQge0lCdW5kbGVJbnB1dH0gZnJvbSBcIi4vbW9kZWxzL0lCdW5kbGVJbnB1dFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1bmRsZVNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJidW5kbGUuQnVuZGxlU2VydmljZVwiO1xyXG5cclxuICAgIHByaXZhdGUgc3lzdGVtQnVuZGxlOiBJQnVuZGxlO1xyXG4gICAgcHJpdmF0ZSBsb2FkU3lzdGVtQnVuZGxlUHJvbWlzZTogSVByb21pc2U8SUJ1bmRsZT4gPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHBvcnQgdHlwZSBMb2FkQnVuZGxlRmlsZXNGaWx0ZXJUeXBlID0gXCJOT05FXCIgfCBcIkFMTCAoZGVmYXVsdClcIiB8IFwiTE9BREVEX0FUX1NUQVJUXCIgfCBcIkhUTUxfT1JfTE9BREVEX0FUX1NUQVJUXCIgfCBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZ2V0QnVuZGxlKGJ1bmRsZUlkOiBudW1iZXIsIGxvYWRGaWxlc0ZpbHRlcj86IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUJ1bmRsZT4ge1xyXG4gICAgICAgIGlmICghbG9hZEZpbGVzRmlsdGVyKSB7XHJcbiAgICAgICAgICAgIGxvYWRGaWxlc0ZpbHRlciA9IFwiQUxMXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFxyXG4gICAgICAgICAgICBgL2FwaS9idW5kbGVzLyR7YnVuZGxlSWR9P2xvYWRGaWxlc0ZpbHRlcj0ke2xvYWRGaWxlc0ZpbHRlcn1gXHJcbiAgICAgICAgKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBidW5kbGU6IElCdW5kbGUgPSByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsZXNNYXAoYnVuZGxlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN5c3RlbUJ1bmRsZSgpOiBJUHJvbWlzZTxJQnVuZGxlPiB7XHJcbiAgICAgICAgIGlmICh0aGlzLnN5c3RlbUJ1bmRsZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgIGlmICh0aGlzLmxvYWRTeXN0ZW1CdW5kbGVQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFN5c3RlbUJ1bmRsZVByb21pc2U7XHJcbiAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgIHRoaXMubG9hZFN5c3RlbUJ1bmRsZVByb21pc2UgPSB0aGlzLmdldEJ1bmRsZSgxLCBcIk5PTkVcIilcclxuICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUJ1bmRsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1CdW5kbGUgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTeXN0ZW1CdW5kbGVQcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFN5c3RlbUJ1bmRsZVByb21pc2U7XHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKHRoaXMuc3lzdGVtQnVuZGxlKTtcclxuICAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVCdW5kbGVGcm9tRmlsZXMoYnVuZGxlSW5wdXQ6IElCdW5kbGVJbnB1dCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1bmRsZXMvZmlsZXNcIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgYnVuZGxlSW5wdXQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVuZGxlOiBJQnVuZGxlID0gcmVzdWx0LmRhdGFbXCJidW5kbGVcIl07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbGVzTWFwKGJ1bmRsZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlRmlsZXNNYXAoYnVuZGxlOiBJQnVuZGxlKTogdm9pZCB7XHJcbiAgICAgICAgYnVuZGxlLmZpbGVzTWFwID0gbmV3IE1hcDxzdHJpbmcsIEFycmF5PElCdW5kbGVGaWxlPj4oKTtcclxuICAgICAgICBidW5kbGUuZmlsZXMuZm9yRWFjaCgoZmlsZTogSUJ1bmRsZUZpbGUpID0+IHtcclxuICAgICAgICAgICAgYnVuZGxlLmZpbGVzTWFwLnNldChmaWxlLmtleSwgZmlsZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVwbG9hZGVkRmlsZVRvQnVuZGxlQnlGaWxlS2V5KGJ1bmRsZUlkOiBudW1iZXIgLGZpbGVLZXk6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUJ1bmRsZUZpbGU+IHtcclxuICAgICAgICBmaWxlS2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVLZXkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL2J1bmRsZXMvJHtidW5kbGVJZH0vdXBsb2Fkcz9maWxlS2V5PSR7ZmlsZUtleX1gKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQWxsQnVuZGxlRmlsZXMoYnVuZGxlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvYnVuZGxlcy8ke2J1bmRsZUlkfS9maWxlc2ApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW1hZ2VGcm9tVXJsKGltYWdlVXJsOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChpbWFnZVVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuL0J1bmRsZVNlcnZpY2VcIjtcclxuXHJcbmltcG9ydCB7VXJsc01vZHVsZX0gZnJvbSBcIi4uL3VybHMvVXJsc01vZHVsZVwiO1xyXG5pbXBvcnQge1N5c3RlbUJ1bmRsZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9TeXN0ZW1CdW5sZGVFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0VkaXRCdW5kbGVEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9jb21wb25lbnRzL0VkaXRCdW5kbGVEaXJlY3RpdmVcIjtcclxuXHJcbmV4cG9ydCBsZXQgQnVuZGxlc01vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgLm1vZHVsZShcImJ1bmRsZXNcIiwgW1xyXG4gICAgICAgIFVybHNNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKEJ1bmRsZVNlcnZpY2UuTkFNRSwgQnVuZGxlU2VydmljZSlcclxuXHJcbiAgICAuY29udHJvbGxlcihTeXN0ZW1CdW5kbGVFZGl0Q29udHJvbGxlci5OQU1FLCBTeXN0ZW1CdW5kbGVFZGl0Q29udHJvbGxlcilcclxuXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzRWRpdEJ1bmRsZVwiLCBFZGl0QnVuZGxlRGlyZWN0aXZlRmFjdG9yeSk7IiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5leHBvcnQgY2xhc3MgU3lzdGVtQnVuZGxlRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJidW5kbGVzLlN5c3RlbUJ1bmRsZUVkaXRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kU3lzdGVtUGVybWlzc2lvbnMoc3lzdGVtUGVybWlzc2lvbnMgPT4gc3lzdGVtUGVybWlzc2lvbnMuZWRpdFJlZmVyZW5jZURhdGEpO1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX1NZU1RFTV9CVU5ETEVfTUVOVV9LRVkpO1xyXG5cclxuICAgIH1cclxufSIsImltcG9ydCBJQXR0cmlidXRlcyA9IGFuZ3VsYXIuSUF0dHJpYnV0ZXM7XHJcbmltcG9ydCBJU2NvcGUgPSBhbmd1bGFyLklTY29wZTtcclxuaW1wb3J0IElIdHRwU2VydmljZSA9IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlO1xyXG5pbXBvcnQgSUxvY2F0aW9uU2VydmljZSA9IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZTtcclxuaW1wb3J0IElUcmFuc2NsdWRlRnVuY3Rpb24gPSBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb247XHJcbmltcG9ydCBJQXVnbWVudGVkSlF1ZXJ5ID0gYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5pbXBvcnQgSURpcmVjdGl2ZSA9IGFuZ3VsYXIuSURpcmVjdGl2ZTtcclxuaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lCdW5kbGV9IGZyb20gXCIuLi9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJQnVuZGxlRmlsZX0gZnJvbSBcIi4uL21vZGVscy9JQnVuZGxlRmlsZVwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SUJ1bmRsZUlucHV0fSBmcm9tIFwiLi4vbW9kZWxzL0lCdW5kbGVJbnB1dFwiO1xyXG5pbXBvcnQge0lGaWxlVXBsb2FkSW5mb30gZnJvbSBcIi4uLy4uL3N0b3JhZ2UvbW9kZWxzL0lGaWxlVXBsb2FkSW5mb1wiO1xyXG5pbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi9CdW5kbGVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXBsb2FkVXRpbHN9IGZyb20gXCIuLi8uLi91dGlscy9VcGxvYWRVdGlsc1wiO1xyXG5pbXBvcnQge0lDb3Vyc2VQZXJtaXNzaW9uc30gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lDb3Vyc2VQZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFZGl0QnVuZGxlRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBJU2NvcGUge1xyXG4gICAgdm0/OiBFZGl0QnVuZGxlQ29udHJvbGxlcjtcclxuICAgIGJ1bmRsZUlkPzogbnVtYmVyO1xyXG4gICAgY3JlYXRlQnVuZGxlRnVuY3Rpb24/OiAoKSA9PiBJUHJvbWlzZTxJQnVuZGxlPjtcclxuICAgIGFsbG93TG9hZEF0U3RhcnQ/OiBib29sZWFuO1xyXG4gICAgY291cnNlUGVybWlzc2lvbnM/OiBJQ291cnNlUGVybWlzc2lvbnM7XHJcbn1cclxuXHJcbmludGVyZmFjZSBBZGRlZEJ1bmRsZUZpbGUge1xyXG4gICAgZmlsZT86IEZpbGU7XHJcbiAgICByZWxhdGl2ZVBhdGg/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0QnVuZGxlQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIGJ1bmRsZTogSUJ1bmRsZTtcclxuICAgIHB1YmxpYyBidW5kbGVGaWxlc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQnVuZGxlRmlsZT4gPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBhZGRlZEZpbGU6IEZpbGVbXSA9IFtdO1xyXG4gICAgcHVibGljIGFkZGVkQnVuZGxlRmlsZXM6IEFkZGVkQnVuZGxlRmlsZVtdID0gW107XHJcbiAgICBwdWJsaWMgcmVtb3ZlZEJ1bmRsZUZpbGVzOiBJQnVuZGxlRmlsZVtdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkT25TdGFydEZpbGVJZHNDaGFuZ2VkOiBBcnJheTxudW1iZXI+ID0gW107XHJcbiAgICBwcml2YXRlIGFsbG93TG9hZEF0U3RhcnQ6IGJvb2xlYW47XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcGxvYWRVdGlscy5OQU1FLFxyXG4gICAgICAgIEJ1bmRsZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElFZGl0QnVuZGxlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBJSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRVdGlsczogVXBsb2FkVXRpbHMsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1bmRsZVNlcnZpY2U6IEJ1bmRsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuYWxsb3dMb2FkQXRTdGFydCA9ICRzY29wZS5hbGxvd0xvYWRBdFN0YXJ0IHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUuYnVuZGxlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlKHRoaXMuJHNjb3BlLmJ1bmRsZUlkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCgpID0+IHRoaXMuYWRkZWRGaWxlLCAobmV3VmFsdWU6IEFycmF5PEZpbGU+KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBidW5kbGVGaWxlOiBBZGRlZEJ1bmRsZUZpbGUgPSB7ZmlsZTogZmlsZX07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRlZEJ1bmRsZUZpbGVzLnB1c2goYnVuZGxlRmlsZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XHJcbiAgICAgICAgICAgIGxldCBkcm9wRnJvbUVkaXRDb3Vyc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRyb3BGcm9tRWRpdENvdXJzZVwiKTtcclxuICAgICAgICAgICAgbGV0IGRyb3BGcm9tRWRpdENvdXJzZU5vdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRyb3BGcm9tRWRpdENvdXJzZU5vdGVcIik7XHJcbiAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbm9uZSc7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHJvcEZyb21FZGl0Q291cnNlID09IGVsZW0gfHwgZHJvcEZyb21FZGl0Q291cnNlTm90ZSA9PSBlbGVtKSB7XHJcbiAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy4kc2NvcGUuYnVuZGxlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoKCgpID0+IHRoaXMuJHNjb3BlLmJ1bmRsZUlkLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRCdW5kbGUodGhpcy4kc2NvcGUuYnVuZGxlSWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyByZWZyZXNoQnVuZGxlRmlsZXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5idW5kbGVGaWxlc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQnVuZGxlRmlsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVkQnVuZGxlRmlsZXMucHVzaCh0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsLmVudHJpZXNbaW5kZXhdKTtcclxuICAgICAgICB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsLmZpbHRlci5leGNsdWRlZEJ1bmRsZUZpbGVJZHMgPSB0aGlzLmdldFJlbW92ZWRCdW5kbGVGaWxlSWRzKCk7XHJcbiAgICAgICAgdGhpcy5idW5kbGVGaWxlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdG9yZUJ1bmRsZUZpbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlZEJ1bmRsZUZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5idW5kbGVGaWxlc0dyaWRNb2RlbC5maWx0ZXIuZXhjbHVkZWRCdW5kbGVGaWxlSWRzID0gdGhpcy5nZXRSZW1vdmVkQnVuZGxlRmlsZUlkcygpO1xyXG4gICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbEFkZGVkQnVuZGxlRmlsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hZGRlZEJ1bmRsZUZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2FuY2VsQWxsQWRkZWRCdW5kbGVGaWxlcyhpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hZGRlZEJ1bmRsZUZpbGVzLnNwbGljZShpbmRleCwgdGhpcy5hZGRlZEJ1bmRsZUZpbGVzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2FuY2VsQW5kUmVzdG9yZUFsbEJ1bmRsZUZpbGVzKGluZGV4OiBudW1iZXIpOiB2b2lke1xyXG4gICAgICAgIHRoaXMuY2FuY2VsQWxsQWRkZWRCdW5kbGVGaWxlcyhpbmRleCk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVkQnVuZGxlRmlsZXMuc3BsaWNlKGluZGV4LCB0aGlzLnJlbW92ZWRCdW5kbGVGaWxlcy5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwuZmlsdGVyLmV4Y2x1ZGVkQnVuZGxlRmlsZUlkcyA9IHRoaXMuZ2V0UmVtb3ZlZEJ1bmRsZUZpbGVJZHMoKTtcclxuICAgICAgICB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG59XHJcbiAgICBwdWJsaWMgY2hhbmdlQnVuZGxlRmlsZUxvYWRBdFN0YXJ0VmFsdWUoYnVuZGxlRmlsZTogSUJ1bmRsZUZpbGUpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmxvYWRPblN0YXJ0RmlsZUlkc0NoYW5nZWQuaW5kZXhPZihidW5kbGVGaWxlLmlkKTtcclxuICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkT25TdGFydEZpbGVJZHNDaGFuZ2VkLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkT25TdGFydEZpbGVJZHNDaGFuZ2VkLnB1c2goYnVuZGxlRmlsZS5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1bmRsZUZpbGUubG9hZEF0U3RhcnQgPSAhYnVuZGxlRmlsZS5sb2FkQXRTdGFydDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUJ1bmRsZUZpbGVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuYnVuZGxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiRzY29wZS5jcmVhdGVCdW5kbGVGdW5jdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuY3JlYXRlQnVuZGxlRnVuY3Rpb24oKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElCdW5kbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idW5kbGUgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwgPSB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsID09IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUJ1bmRsZUZpbGU+KHRoaXMuJGh0dHAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9idW5kbGVzLzpidW5kbGVJZC9maWxlc1wiKS5wYXJhbShcIjpidW5kbGVJZFwiLCB0aGlzLmJ1bmRsZS5pZCkuc2VydmljZSgpKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5idW5kbGVGaWxlc0dyaWRNb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idW5kbGVGaWxlc0dyaWRNb2RlbC5maWx0ZXIuZXhjbHVkZWRCdW5kbGVGaWxlSWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnVuZGxlRnJvbUZpbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkluY29ycmVjdCBjb25maWd1cmF0aW9uIHRvIGNyZWF0ZSBCdW5kbGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkluY29ycmVjdCBjb25maWd1cmF0aW9uIHRvIGNyZWF0ZSBCdW5kbGVcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVCdW5kbGVGcm9tRmlsZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQnVuZGxlKGJ1bmRsZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElCdW5kbGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idW5kbGVTZXJ2aWNlLmdldEJ1bmRsZShidW5kbGVJZCwgXCJMT0FERURfQVRfU1RBUlRcIikudGhlbihidW5kbGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUJ1bmRsZUZpbGU+KHRoaXMuJGh0dHAsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvYnVuZGxlcy86YnVuZGxlSWQvZmlsZXNcIikucGFyYW0oXCI6YnVuZGxlSWRcIiwgdGhpcy5idW5kbGUuaWQpLnNlcnZpY2UoKSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idW5kbGVGaWxlc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TG9hZGluZzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kTG9hZGluZzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwuZW50cmllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1bmRsZUZpbGUgPSB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsLmVudHJpZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkT25TdGFydEZpbGVJZHNDaGFuZ2VkLmluZGV4T2YoYnVuZGxlRmlsZS5pZCkgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVGaWxlLmxvYWRBdFN0YXJ0ID0gIWJ1bmRsZUZpbGUubG9hZEF0U3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwuZmlsdGVyLmV4Y2x1ZGVkQnVuZGxlRmlsZUlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idW5kbGVGaWxlc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idW5kbGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSZW1vdmVkQnVuZGxlRmlsZUlkcygpOiBBcnJheTxudW1iZXI+IHtcclxuICAgICAgICBsZXQgcmVtb3ZlZEJ1bmRsZUZpbGVzOiBBcnJheTxudW1iZXI+ID0gW107XHJcbiAgICAgICAgdGhpcy5yZW1vdmVkQnVuZGxlRmlsZXMuZm9yRWFjaCgoYnVuZGxlRmlsZTogSUJ1bmRsZUZpbGUpID0+IHtcclxuICAgICAgICAgICAgcmVtb3ZlZEJ1bmRsZUZpbGVzLnB1c2goYnVuZGxlRmlsZS5pZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlbW92ZWRCdW5kbGVGaWxlcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUJ1bmRsZUZyb21GaWxlcygpOiB2b2lkIHtcclxuICAgICAgICBsZXQgYWRkZWRCdW5kbGVGaWxlczogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICAgIGxldCByZW1vdmVkQnVuZGxlRmlsZUlkczogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWRkZWRCdW5kbGVGaWxlcy5mb3JFYWNoKChidW5kbGVGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGFkZGVkQnVuZGxlRmlsZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBidW5kbGVGaWxlLmZpbGUubmFtZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IGJ1bmRsZUZpbGUuZmlsZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogYnVuZGxlRmlsZS5maWxlLnNpemUsXHJcbiAgICAgICAgICAgICAgICBwYXRoOiBidW5kbGVGaWxlLnJlbGF0aXZlUGF0aFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlbW92ZWRCdW5kbGVGaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlbW92ZWRCdW5kbGVGaWxlSWRzLnB1c2goZmlsZS5maWxlSWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBidW5kbGVJbnB1dDogSUJ1bmRsZUlucHV0ID0ge1xyXG4gICAgICAgICAgICBpZDogdGhpcy5idW5kbGUuaWQsXHJcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMuYnVuZGxlLnZlcnNpb24sXHJcbiAgICAgICAgICAgIGFkZGVkRmlsZXM6IGFkZGVkQnVuZGxlRmlsZXMsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRGaWxlSWRzOiByZW1vdmVkQnVuZGxlRmlsZUlkcyxcclxuICAgICAgICAgICAgbG9hZE9uU3RhcnRGaWxlc0NoYW5nZWRJZHM6IHRoaXMubG9hZE9uU3RhcnRGaWxlSWRzQ2hhbmdlZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5idW5kbGVTZXJ2aWNlLnVwZGF0ZUJ1bmRsZUZyb21GaWxlcyhidW5kbGVJbnB1dCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgYWRkZWRCdW5kbGVGaWxlczogQXJyYXk8QWRkZWRCdW5kbGVGaWxlPiA9IHRoaXMuYWRkZWRCdW5kbGVGaWxlcztcclxuICAgICAgICAgICAgdGhpcy5hZGRlZEJ1bmRsZUZpbGVzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuYnVuZGxlID0gcmVzdWx0W1wiYnVuZGxlXCJdO1xyXG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRCdW5kbGVGaWxlcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRPblN0YXJ0RmlsZUlkc0NoYW5nZWQgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGZpbGVVcGxvYWRJbmZvczogSUZpbGVVcGxvYWRJbmZvW10gPSByZXN1bHRbXCJmaWxlVXBsb2FkSW5mb3NcIl07XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCBhZGRlZEJ1bmRsZUZpbGVzLmxlbmd0aCB8fCBqIDwgZmlsZVVwbG9hZEluZm9zLmxlbmd0aDsgKytpLCArK2opIHtcclxuICAgICAgICAgICAgICAgIGxldCBhZGRlZEZpbGU6IEZpbGUgPSBhZGRlZEJ1bmRsZUZpbGVzW2ldLmZpbGU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZVVwbG9hZEluZm86IElGaWxlVXBsb2FkSW5mbyA9IGZpbGVVcGxvYWRJbmZvc1tqXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkVXRpbHMudXBsb2FkQnVuZGxlQnlDaHVua3MoYWRkZWRGaWxlLCBmaWxlVXBsb2FkSW5mby5maWxlSWQsIHRoaXMuYnVuZGxlLmlkLCBmaWxlVXBsb2FkSW5mby51cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZVVwbG9hZEluZm8ubWV0aG9kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnN0b3JhZ2Uubm90LmF2YWlsYWJsZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIk5vIGF2YWlsYWJsZSBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzSGlkZWRSZW1vdmVCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwuZW50cmllcy5sZW5ndGggPT0gMCAmJiB0aGlzLnJlbW92ZWRCdW5kbGVGaWxlcy5sZW5ndGggPT0gMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbW92ZUJ1bmRsZUZpbGVzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmJ1bmRsZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRlZEJ1bmRsZUZpbGVzID0gW107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGJ1bmRsZUlkOiBudW1iZXIgPSB0aGlzLmJ1bmRsZS5pZDtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIkRvIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgZmlsZXNcIiArIFwiP1wiLCB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJSZW1vdmluZ1wiLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJSZW1vdmVcIixcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJDYW5jZWxcIlxyXG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlU2VydmljZS5yZW1vdmVBbGxCdW5kbGVGaWxlcyhidW5kbGVJZClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZWRCdW5kbGVGaWxlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsLmVudHJpZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkFsbCBmaWxlcyB3ZXJlIHJlbW92ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyByZW1vdmUgZmlsZXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEVkaXRCdW5kbGVEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IElEaXJlY3RpdmUge1xyXG4gICAgLy9ub2luc3BlY3Rpb24gSlNVbnVzZWRMb2NhbFN5bWJvbHNcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJU2NvcGUsIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLCBjb250cm9sbGVyOiBFZGl0QnVuZGxlQ29udHJvbGxlcixcclxuICAgICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG4gICAgICAgICRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PntcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpcmVjdGl2ZTogYW55ID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5zY29wZSA9IHtcclxuICAgICAgICBidW5kbGVJZDogXCI9P3Zoc0J1bmRsZUlkXCIsXHJcbiAgICAgICAgY3JlYXRlQnVuZGxlRnVuY3Rpb246IFwiPT92aHNDcmVhdGVCdW5kbGVGdW5jdGlvblwiLFxyXG4gICAgICAgIGFsbG93TG9hZEF0U3RhcnQ6IFwiPT92aHNBbGxvd0xvYWRBdFN0YXJ0XCIsXHJcbiAgICAgICAgY291cnNlUGVybWlzc2lvbnM6IFwiPT92aHNDb3Vyc2VQZXJtaXNzaW9uc1wiXHJcbiAgICB9O1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBFZGl0QnVuZGxlQ29udHJvbGxlcjtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImJ1bmRsZXMvY29tcG9uZW50cy9lZGl0QnVuZGxlLmh0bWxcIik7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5FZGl0QnVuZGxlRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImV4cG9ydCBlbnVtIEJ1bmRsZUZpbGVUeXBlRW51bSB7XHJcbiAgICBKUyA9IDEsXHJcbiAgICBDU1MgPSAyLFxyXG4gICAgSU1BR0UgPSAzLFxyXG4gICAgSFRNTCA9IDQsXHJcbiAgICBPVEhFUiA9IDVcclxufVxyXG5cclxuZXhwb3J0IHZhciBCVU5ETEVfRklMRV9UWVBFX0VOVU1fVkFMVUVTOiBBcnJheTxCdW5kbGVGaWxlVHlwZUVudW0+ID0gW1xyXG4gICAgQnVuZGxlRmlsZVR5cGVFbnVtLkpTLFxyXG4gICAgQnVuZGxlRmlsZVR5cGVFbnVtLkNTUyxcclxuICAgIEJ1bmRsZUZpbGVUeXBlRW51bS5JTUFHRSxcclxuICAgIEJ1bmRsZUZpbGVUeXBlRW51bS5IVE1MLFxyXG4gICAgQnVuZGxlRmlsZVR5cGVFbnVtLk9USEVSXHJcbl07IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0J1c2luZXNzVW5pdHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJQnVzaW5lc3NVbml0fSBmcm9tIFwiLi9tb2RlbHMvSUJ1c2luZXNzVW5pdFwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQnVzaW5lc3NVbml0c0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJidXNpbmVzc1VuaXQuQnVzaW5lc3NVbml0c0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgYnVFbnRpdGllc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQnVzaW5lc3NVbml0PjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogbmcuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRSb3V0ZXI6IEJ1c2luZXNzVW5pdHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1c2luZXNzVW5pdHNTZXJ2aWNlOiBCdXNpbmVzc1VuaXRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0JVU0lORVNTX1VOSVRTX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkJ1c2luZXNzIFVuaXRzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlCdXNpbmVzc1VuaXQgfHwgc3lzdGVtUGVybWlzc2lvbnMuY29uZmlndXJlQnVzaW5lc3NVbml0U2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5wcmVzZXJ2ZUhlYWRlcigpXHJcbiAgICAgICAgICAgICAgICAuYWRkQWN0aW9uTGlua0lmKHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUJ1c2luZXNzVW5pdCxcclxuICAgICAgICAgICAgICAgICAgICAnKyZuYnNwO05ldycsIHRoaXMuZ2V0QlVDcmVhdGVVcmwoKSkudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5idUVudGl0aWVzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUJ1c2luZXNzVW5pdD4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0c1wiKS5zZXJ2aWNlKCkpKTtcclxuICAgICAgICB0aGlzLmJ1RW50aXRpZXNHcmlkTW9kZWwuZmlsdGVyLmJ1c2luZXNzVW5pdFNlYXJjaFN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5idUVudGl0aWVzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRTcGxpdFBhcmFtID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJVRWRpdFVybChidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idXNpbmVzc1VuaXRSb3V0ZXIuZWRpdFVybChidXNpbmVzc1VuaXRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJVQ3JlYXRlVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVzaW5lc3NVbml0Um91dGVyLmNyZWF0ZVJvdXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlRW50aXR5QlUoaW5kZXg6IG51bWJlciwgZW50aXR5OiBJQnVzaW5lc3NVbml0KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5zZXRBY3RpdmVCdXNpbmVzc1VuaXQoZW50aXR5LmlkLCBlbnRpdHkudmVyc2lvbiwgdHJ1ZSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ1RW50aXRpZXNHcmlkTW9kZWwuZW50cmllc1tpbmRleF0gPSByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldElzQWN0aXZlR3JpZFN0eWxlKGlzQWN0aXZlOiBib29sZWFuKTogYW55IHtcclxuICAgICAgICByZXR1cm4gaXNBY3RpdmVcclxuICAgICAgICAgICAgPyB7fVxyXG4gICAgICAgICAgICA6IHtcImNvbG9yXCI6IFwiIzk5OTk5OVwifTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QnVzaW5lc3NVbml0c1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQnVzaW5lc3NVbml0c1JvdXRlclwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4vQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJQnVzaW5lc3NVbml0fSBmcm9tIFwiLi9tb2RlbHMvSUJ1c2luZXNzVW5pdFwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7QnVuZGxlU2VydmljZX0gZnJvbSBcIi4uL2J1bmRsZXMvQnVuZGxlU2VydmljZVwiO1xyXG5pbXBvcnQge1VwbG9hZFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvVXBsb2FkVXRpbHNcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SVBheVBhbENvbmZpZ3VyYXRpb259IGZyb20gXCIuL21vZGVscy9JUGF5UGFsQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge0lXZWJpbmFyU2V0dGluZ3N9IGZyb20gXCIuL21vZGVscy9JV2ViaW5hclNldHRpbmdzXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0lXZWJpbmFySW5zdHJ1Y3RvclNldHRpbmdzfSBmcm9tIFwiLi9tb2RlbHMvSVdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ3NcIjtcclxuaW1wb3J0IHtJWm9vbUluc3RydWN0b3JTZXR0aW5nc30gZnJvbSBcIi4vbW9kZWxzL0lab29tSW5zdHJ1Y3RvclNldHRpbmdzXCI7XHJcbmltcG9ydCB7SVBvd2VyQmlDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9tb2RlbHMvSVBvd2VyQmlDb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7SU1lbnVJdGVtU2V0dGluZ3N9IGZyb20gXCIuL21vZGVscy9JTWVudUl0ZW1TZXR0aW5nc1wiO1xyXG5pbXBvcnQge0lab29tU2V0dGluZ3N9IGZyb20gXCIuL21vZGVscy9JWm9vbVNldHRpbmdzXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlRW50aXRpZXNQYXJhbXN9IGZyb20gXCIuLi9yZWZlcmVuY2UvbW9kZWxzL0lSZWZlcmVuY2VFbnRpdGllc1BhcmFtc1wiO1xyXG5pbXBvcnQge1JlZmVyZW5jZVNlcnZpY2V9IGZyb20gXCIuLi9yZWZlcmVuY2UvUmVmZXJlbmNlU2VydmljZVwiO1xyXG5pbXBvcnQge0JyYW5kaW5nRWRpdE1vZGV9IGZyb20gXCIuLi9icmFuZGluZy9CcmFuZGluZ0VkaXRNb2RlXCI7XHJcbmltcG9ydCB7SVNlY3VyaXR5Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vbW9kZWxzL0lTZWN1cml0eUNvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtJQnVzaW5lc3NVbml0UGFyYW1ldGVyc30gZnJvbSBcIi4vbW9kZWxzL0lCdXNpbmVzc1VuaXRQYXJhbWV0ZXJzXCI7XHJcbmltcG9ydCB7SUF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb259IGZyb20gXCIuL21vZGVscy9JQXV0aG9yaXplTmV0Q29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge0lUZWFtc1NldHRpbmdzfSBmcm9tIFwiLi9tb2RlbHMvSVRlYW1zU2V0dGluZ3NcIjtcclxuaW1wb3J0IHtJVGVhbXNJbnN0cnVjdG9yU2V0dGluZ3N9IGZyb20gXCIuL21vZGVscy9JVGVhbXNJbnN0cnVjdG9yU2V0dGluZ3NcIjtcclxuaW1wb3J0IHtJTG9nb25Qcm92aWRlcn0gZnJvbSBcIi4uL2F1dGgvSUxvZ29uUHJvdmlkZXJcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHthdXRvU3NvUHJvdmlkZXJzLCBMb2dvblByb3ZpZGVyRW51bX0gZnJvbSBcIi4uL3NlY3VyaXR5L0xvZ29uUHJvdmlkZXJFbnVtXCI7XHJcbmltcG9ydCB7SUFkb2JlQ3JlZGVudGlhbHN9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JQWRvYmVDcmVkZW50aWFsc1wiO1xyXG5pbXBvcnQge0lSZWNlaXB0VGVtcGxhdGV9IGZyb20gXCIuL21vZGVscy9JUmVjZWlwdFRlbXBsYXRlXCI7XHJcbmltcG9ydCB7TmV3c1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTmV3c1JvdXRlclwiO1xyXG5pbXBvcnQge05ld3NLZXl9IGZyb20gXCIuLi9uZXdzL21vZGVscy9OZXdzS2V5XCI7XHJcbmltcG9ydCB7SUJpbGxpbmdQbGFufSBmcm9tIFwiLi4vZmluYW5jZXMvbW9kZWxzL0lCaWxsaW5nUGxhblwiO1xyXG5pbXBvcnQge0JpbGxpbmdQbGFuU2VydmljZX0gZnJvbSBcIi4uL2ZpbmFuY2VzL0JpbGxpbmdQbGFuU2VydmljZVwiO1xyXG5pbXBvcnQge0NlcnRpZmljYXRlU2VydmljZX0gZnJvbSBcIi4uL2NlcnRpZmljYXRlcy9DZXJ0aWZpY2F0ZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtGaW5hbmNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvRmluYW5jZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtOZXdzU2VydmljZX0gZnJvbSBcIi4uL25ld3MvTmV3c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJTmV3c30gZnJvbSBcIi4uL25ld3MvbW9kZWxzL0lOZXdzXCI7XHJcbmltcG9ydCB7QXV0aG9yaXplTmV0U2VydmljZX0gZnJvbSBcIi4uL2ludGVncmF0aW9uL2F1dGhvcml6ZW5ldC9BdXRob3JpemVOZXRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXBwUHJvcGVydGllc30gZnJvbSBcIi4uL3V0aWxzL0FwcFByb3BlcnRpZXNcIjtcclxuaW1wb3J0IHtJU3lzdGVtTG9jYWxlfSBmcm9tIFwiLi4vc2V0dGluZ3MvbW9kZWxzL0lTeXN0ZW1Mb2NhbGVcIjtcclxuXHJcbmludGVyZmFjZSBBZGRlZEJ1bmRsZUZpbGUge1xyXG4gICAgZmlsZT86IEZpbGU7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJTG9nb25Qcm92aWRlckV4dGVuZGVkIGV4dGVuZHMgSUxvZ29uUHJvdmlkZXIge1xyXG4gICAgaXNBY3RpdmU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQnVzaW5lc3NVbml0c0NyZWF0ZUVkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiYnVzaW5lc3NVbml0LkJ1c2luZXNzVW5pdHNDcmVhdGVFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBCVV9HRU5FUkFMX0RFVEFJTFM6IHN0cmluZyA9IFwiZ2VuZXJhbERldGFpbHNcIjtcclxuICAgIHB1YmxpYyBCVV9DVVNUT01fQlJBTkRJTkc6IHN0cmluZyA9IFwiY3VzdG9tQnJhbmRpbmdcIjtcclxuICAgIHB1YmxpYyBCVV9XRUJJTkFSUzogc3RyaW5nID0gXCJ3ZWJpbmFyc1wiO1xyXG4gICAgcHVibGljIEJVX0dPVE9XRUJJTkFSOiBzdHJpbmcgPSBcImdvVG9XZWJpbmFyXCI7XHJcbiAgICBwdWJsaWMgQlVfV0VCX0VYX0lOVEVHUkFUSU9OOiBzdHJpbmcgPSBcIndlYkV4SW50ZWdyYXRpb25cIjtcclxuICAgIHB1YmxpYyBCVV9QT1dFUl9CSV9JTlRFR1JBVElPTjogc3RyaW5nID0gXCJwb3dlckJJSW50ZWdyYXRpb25cIjtcclxuICAgIHB1YmxpYyBCVV9QQVlNRU5UX01FVEhPRFM6IHN0cmluZyA9IFwicGF5bWVudE1ldGhvZHNcIjtcclxuICAgIHB1YmxpYyBCVV9QQVlfUEFMOiBzdHJpbmcgPSBcInBheVBhbFwiO1xyXG4gICAgcHVibGljIEJVX0FVVEhPUklaRV9ORVQ6IHN0cmluZyA9IFwiYXV0aG9yaXplTmV0XCI7XHJcbiAgICBwdWJsaWMgQlVfQ1JFRElUX1RZUEVTID0gXCJjcmVkaXRUeXBlc1wiO1xyXG4gICAgcHVibGljIEJVX1NFQ1VSSVRZOiBzdHJpbmcgPSBcInNlY3VyaXR5XCI7XHJcbiAgICBwdWJsaWMgQlVfUEFSQU1FVEVSUyA9IFwicGFyYW1ldGVyc1wiO1xyXG4gICAgcHVibGljIEJVX0FET0JFX0FQSSA9IFwiYWRvYmVBcGlcIlxyXG5cclxuICAgIHB1YmxpYyBCVV9NRU5VX0lURU1TOiBzdHJpbmcgPSBcIm1lbnVJdGVtc1wiO1xyXG4gICAgcHVibGljIEJVX1pPT006IHN0cmluZyA9IFwiem9vbVwiO1xyXG5cclxuICAgIHB1YmxpYyBCVV9MUlM6IHN0cmluZyA9IFwibHJzXCI7XHJcbiAgICBwdWJsaWMgQlVfU1lTVEVNX0NPTkZJR1VSQVRJT046IHN0cmluZyA9IFwic3lzdGVtQ29uZmlndXJhdGlvblwiO1xyXG4gICAgcHVibGljIEJVX0JJTExfUExBTjogc3RyaW5nID0gXCJiaWxsUGxhblwiO1xyXG4gICAgcHVibGljIEJVX0JJTExfUExBTl9ORVdTX0lEX1BBUkFNOiBudW1iZXIgPSAxMDE0O1xyXG5cclxuICAgIHByaXZhdGUgc2F2ZU1hcDogTWFwPHN0cmluZywgRnVuY3Rpb24+ID0gbmV3IE1hcDxzdHJpbmcsIEZ1bmN0aW9uPigpO1xyXG4gICAgcHJpdmF0ZSB0b3BNZW51S2V5OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGJ1c2luZXNzVW5pdElkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGJ1c2luZXNzVW5pdExldmVsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaXNDcmVhdGVQYWdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXQ6IElCdXNpbmVzc1VuaXQ7XHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlUmVtb3ZlTGluazogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNQcmV2aWV3SGlkZGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcHVyY2hhc2VPcmRlckNvbnRlbnQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgdXNlcklkOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHBheVBhbENvbmZpZ3VyYXRpb246IElQYXlQYWxDb25maWd1cmF0aW9uO1xyXG4gICAgcHVibGljIGF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb246IElBdXRob3JpemVOZXRDb25maWd1cmF0aW9uO1xyXG4gICAgcHVibGljIGlzUGF5UGFsQ29uZmlndXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGN1cnJlbnRQYXltZW50Q29uZmlndXJhdGlvbjogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBuZXdSZWNlaXB0VGVtcGxhdGVGaWxlOiBGaWxlO1xyXG4gICAgcHVibGljIHJlY2VpcHRGaWxlVGl0bGU6IHN0cmluZztcclxuICAgIHB1YmxpYyByZWNlaXB0VGVtcGxhdGU6IElSZWNlaXB0VGVtcGxhdGUgPSAge2ZpbGVDb250ZW50SWQ6IG51bGx9O1xyXG4gICAgcHVibGljIGRpc2FibGVkU2F2ZVJlY2VpcHRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgbWVudUl0ZW1zU2V0dGluZ3M6IElNZW51SXRlbVNldHRpbmdzO1xyXG4gICAgcHVibGljIHpvb21TZXR0aW5nczogSVpvb21TZXR0aW5ncztcclxuICAgIHB1YmxpYyB0ZWFtc1NldHRpbmdzOiBJVGVhbXNTZXR0aW5ncztcclxuXHJcbiAgICBwdWJsaWMgaXNXZWJpbmFySW5zdHJ1Y3RvcnNTaG93ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGlzWm9vbUluc3RydWN0b3JzU2hvd2VkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBpc1RlYW1zSW5zdHJ1Y3RvcnNTaG93ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHNwZWNpYWxXZWJpbmFySW5zdHJ1Y3Rvcjogc3RyaW5nO1xyXG4gICAgcHVibGljIHNwZWNpYWxab29tSW5zdHJ1Y3Rvcjogc3RyaW5nO1xyXG4gICAgcHVibGljIHNwZWNpYWxUZWFtc0luc3RydWN0b3I6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgd2ViaW5hclNldHRpbmdzOiBJV2ViaW5hclNldHRpbmdzO1xyXG4gICAgcHVibGljIHdlYmluYXJJbnN0cnVjdG9yczogSVdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ3MgPSB7fTtcclxuICAgIHB1YmxpYyB6b29tSW5zdHJ1Y3RvcnM6IElab29tSW5zdHJ1Y3RvclNldHRpbmdzID0ge307XHJcbiAgICBwdWJsaWMgdGVhbXNJbnN0cnVjdG9yczogSVRlYW1zSW5zdHJ1Y3RvclNldHRpbmdzID0ge307XHJcbiAgICBwdWJsaWMgd2ViaW5hckluc3RydWN0b3JzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElXZWJpbmFySW5zdHJ1Y3RvclNldHRpbmdzPjtcclxuICAgIHB1YmxpYyB6b29tSW5zdHJ1Y3RvcnNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SVpvb21JbnN0cnVjdG9yU2V0dGluZ3M+O1xyXG4gICAgcHVibGljIHRlYW1zSW5zdHJ1Y3RvcnNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SVRlYW1zSW5zdHJ1Y3RvclNldHRpbmdzPjtcclxuICAgIHB1YmxpYyB3ZWJpbmFyQXZhaWxhYmxlVXNlcklkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgem9vbUF2YWlsYWJsZVVzZXJJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHRlYW1zQXZhaWxhYmxlVXNlcklkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgaXNBZGRSb3dWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY29tcGFueUxpbms6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgbGlua0ZvclNlbGZSZWdpc3RyYXRpb246IHN0cmluZztcclxuICAgIHB1YmxpYyBkb21haW5BZGRyZXNzOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcHJvdmlkZXJzOiBBcnJheTxJTG9nb25Qcm92aWRlckV4dGVuZGVkPjtcclxuXHJcbiAgICBwdWJsaWMgc2hvd0dvVG9XZWJpbmFyU2V0dGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93Wm9vbVNldHRpbmdzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2hvd1RlYW1zU2V0dGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZE9wdGlvbjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucyA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBwb3dlckJpQ29uZmlndXJhdGlvbjogSVBvd2VyQmlDb25maWd1cmF0aW9uO1xyXG4gICAgcHVibGljIGJpbGxQbGFuOiBJQmlsbGluZ1BsYW47XHJcbiAgICBwdWJsaWMgYmlsbFBsYW5zOiBBcnJheTxJQmlsbGluZ1BsYW4+ID0gbmV3IEFycmF5PElCaWxsaW5nUGxhbj4oKTtcclxuICAgIHB1YmxpYyBjdXJyZW50QmlsbFBsYW46IElCaWxsaW5nUGxhbjtcclxuICAgIHB1YmxpYyBjdXJyZW50Q3VzdG9tQmlsbFBsYW46IElCaWxsaW5nUGxhbjtcclxuICAgIHB1YmxpYyBzZWxlY3RlZEJpbGxQbGFuOiBJQmlsbGluZ1BsYW47XHJcbiAgICBwdWJsaWMgYU5ldElmcmFtZUNvbW11bmljYXRvcjogc3RyaW5nO1xyXG4gICAgcHVibGljIGFOZXRUb2tlbjogc3RyaW5nO1xyXG4gICAgcHVibGljIGFOZXRQb3N0VXJsOiBzdHJpbmcgPSBcImh0dHBzOi8vYWNjZXB0LmF1dGhvcml6ZS5uZXQvcGF5bWVudC9wYXltZW50XCI7XHJcblxyXG4gICAgcHVibGljIG1lbnVJdGVtc0F2YWlsYWJpbGl0eTogSU1lbnVJdGVtU2V0dGluZ3M7XHJcblxyXG4gICAgcHVibGljIGF2YWlsYWJsZUNyZWRpdFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcHVibGljIGNyZWRpdHNMaXN0OiBzdHJpbmdbXTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRQYXJhbWV0ZXJzOiBJQnVzaW5lc3NVbml0UGFyYW1ldGVycyA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBhZG9iZUNyZWRlbnRpYWxzOiBJQWRvYmVDcmVkZW50aWFscyA9IHt9O1xyXG4gICAgcHVibGljIGFkb2JlQXBwbGljYXRpb25Eb21haW46IHN0cmluZztcclxuICAgIHB1YmxpYyBhZG9iZUNsaWVudElkOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHNlY3VyaXR5Q29uZmlndXJhdGlvbjogSVNlY3VyaXR5Q29uZmlndXJhdGlvbjtcclxuXHJcbiAgICBwdWJsaWMgYnJhbmRpbmdNb2RlOiBzdHJpbmcgPSBCcmFuZGluZ0VkaXRNb2RlW0JyYW5kaW5nRWRpdE1vZGUuVEhFTUVTXTtcclxuXHJcbiAgICBwdWJsaWMgbGlua0ZvcldlYmhvb2s6IHN0cmluZztcclxuICAgIHB1YmxpYyB1cGdyYWRlQmlsbGluZ1BsYW46IEJvb2xlYW47XHJcbiAgICBwdWJsaWMgY2FuY2VsbGF0aW9uQmlsbGluZ1BsYW46IEJvb2xlYW47XHJcbiAgICBwdWJsaWMgbmV3czogSU5ld3MgPSB7fTtcclxuICAgIHB1YmxpYyBpc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGZyZWVQbGFuTGltaXRzID0gQXBwUHJvcGVydGllcy5mcmVlUGxhbkxpbWl0cztcclxuICAgIHB1YmxpYyBhdmFpbGFibGVMb2NhbGVzOiBBcnJheTxJU3lzdGVtTG9jYWxlPjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aG9yaXplTmV0U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1bmRsZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcGxvYWRVdGlscy5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZXR0aW5nc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBSZWZlcmVuY2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTmV3c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEZpbmFuY2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQmlsbGluZ1BsYW5TZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ2VydGlmaWNhdGVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTmV3c1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1c2luZXNzVW5pdFJvdXRlcjogQnVzaW5lc3NVbml0c1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVzaW5lc3NVbml0c1NlcnZpY2U6IEJ1c2luZXNzVW5pdHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRob3JpemVOZXRTZXJ2aWNlOiBBdXRob3JpemVOZXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidW5kbGVTZXJ2aWNlOiBCdW5kbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRVdGlsczogVXBsb2FkVXRpbHMsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlZmVyZW5jZVNlcnZpY2U6IFJlZmVyZW5jZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG5ld3NSb3V0ZXI6IE5ld3NSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGZpbmFuY2VzUm91dGVyOiBGaW5hbmNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmlsbGluZ1BsYW5TZXJ2aWNlOiBCaWxsaW5nUGxhblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgY2VydGlmaWNhdGVTZXJ2aWNlOiBDZXJ0aWZpY2F0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgbmV3c1NlcnZpY2U6IE5ld3NTZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9CVVNJTkVTU19VTklUU19NRU5VX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZFN5c3RlbVBlcm1pc3Npb25zKHN5c3RlbVBlcm1pc3Npb25zID0+IHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUJ1c2luZXNzVW5pdCB8fCBzeXN0ZW1QZXJtaXNzaW9ucy5jb25maWd1cmVCdXNpbmVzc1VuaXRTZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQXZhaWxhYmxlTG9jYWxlcygpXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4ocmVzdWx0PT50aGlzLnVzZXJJZCA9IHJlc3VsdC5pZClcclxuICAgICAgICBsZXQgYnVzaW5lc3NVbml0SWQ6IG51bWJlciA9IHBhcnNlSW50KHRoaXMuJHJvdXRlUGFyYW1zW0J1c2luZXNzVW5pdHNSb3V0ZXIuSURfUEFSQU1fTkFNRV0sIDEwKTtcclxuICAgICAgICBsZXQgYnVzaW5lc3NVbml0TGV2ZWw6IHN0cmluZyA9IHRoaXMuJHJvdXRlUGFyYW1zW0J1c2luZXNzVW5pdHNSb3V0ZXIuQlVfTEVWRUxfUEFSQU1fTkFNRV07XHJcbiAgICAgICAgbGV0IGhhc0J1c2luZXNzVW5pdElkOiBib29sZWFuID0gIWlzTmFOKGJ1c2luZXNzVW5pdElkKTtcclxuXHJcbiAgICAgICAgaWYgKGhhc0J1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0SWQgPSBidXNpbmVzc1VuaXRJZDtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRMZXZlbCA9IGJ1c2luZXNzVW5pdExldmVsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRUb3BNZW51S2V5KGJ1c2luZXNzVW5pdExldmVsKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZUJ5TGV2ZWwoYnVzaW5lc3NVbml0TGV2ZWwpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRCeUlkKGJ1c2luZXNzVW5pdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKHJlc3VsdC5uYW1lKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QnVzaW5lc3NVbml0U2V0dGluZ3MoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcm92aWRlcnMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEJVRG9tYWluTmFtZSh0aGlzLmJ1c2luZXNzVW5pdElkKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbWFpbkFkZHJlc3MgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVzaW5lc3NVbml0LmRvbWFpbk5hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBhbnlMaW5rID0gdGhpcy5nZXRDb21wYW55TGluaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtGb3JTZWxmUmVnaXN0cmF0aW9uID0gdGhpcy5nZXRMaW5rRm9yU2VsZlJlZ2lzdHJhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfSkuZmluYWxseSggKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb21haW5BZGRyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEFkb2JlQ3JlZGVudGlhbHModGhpcy5idXNpbmVzc1VuaXRJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRvYmVDcmVkZW50aWFscyA9IGFuZ3VsYXIuY29weShyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWRvYmVDcmVkZW50aWFscykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkb2JlQ2xpZW50SWQgPSB0aGlzLmFkb2JlQ3JlZGVudGlhbHMuY2xpZW50SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLndlYmluYXJJbnN0cnVjdG9yc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElXZWJpbmFySW5zdHJ1Y3RvclNldHRpbmdzPigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvYnVzaW5lc3NVbml0cy93ZWJpbmFyL2luc3RydWN0b3JzXCIpKSk7XHJcbiAgICAgICAgICAgIHRoaXMud2ViaW5hckluc3RydWN0b3JzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IHRoaXMuYnVzaW5lc3NVbml0SWQ7XHJcbiAgICAgICAgICAgIHRoaXMud2ViaW5hckluc3RydWN0b3JzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy56b29tSW5zdHJ1Y3RvcnNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJWm9vbUluc3RydWN0b3JTZXR0aW5ncz4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvem9vbS9pbnN0cnVjdG9yc1wiKSkpO1xyXG4gICAgICAgICAgICB0aGlzLnpvb21JbnN0cnVjdG9yc0dyaWRNb2RlbC5maWx0ZXIuYnVzaW5lc3NVbml0SWQgPSB0aGlzLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgICAgICB0aGlzLnpvb21JbnN0cnVjdG9yc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGVhbXNJbnN0cnVjdG9yc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElUZWFtc0luc3RydWN0b3JTZXR0aW5ncz4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvdGVhbXMvaW5zdHJ1Y3RvcnNcIikpKTtcclxuICAgICAgICAgICAgdGhpcy50ZWFtc0luc3RydWN0b3JzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IHRoaXMuYnVzaW5lc3NVbml0SWQ7XHJcbiAgICAgICAgICAgIHRoaXMudGVhbXNJbnN0cnVjdG9yc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0NyZWF0ZVBhZ2UgPSB0cnVlO1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIk5ldyBidXNpbmVzcyB1bml0XCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFRvcE1lbnVLZXkodGhpcy5CVV9HRU5FUkFMX0RFVEFJTFMpO1xyXG4gICAgICAgICAgICB0aGlzLmdldFRlbXBsYXRlQnlMZXZlbCh0aGlzLkJVX0dFTkVSQUxfREVUQUlMUyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U2F2ZUZ1bmN0aW9uc0ZvckJVTGV2ZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEJ1c2luZXNzVW5pdFNldHRpbmdzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRvcE1lbnVLZXkgPT09IHRoaXMuQlVfV0VCSU5BUlMpIHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRXZWJpbmFyU2V0dGluZ0J5QnVzaW5lc3NVbml0KHRoaXMuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2ViaW5hclNldHRpbmdzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0Wm9vbVNldHRpbmdzKHRoaXMuYnVzaW5lc3NVbml0SWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9vbVNldHRpbmdzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvb21TZXR0aW5ncyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2J1c2luZXNzVW5pdElkJzogdGhpcy5idXNpbmVzc1VuaXRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3dFbWJlZGRlZFpvb20nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldFRlYW1zU2V0dGluZ3ModGhpcy5idXNpbmVzc1VuaXRJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWFtc1NldHRpbmdzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlYW1zU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdidXNpbmVzc1VuaXRJZCc6IHRoaXMuYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9wTWVudUtleSA9PT0gdGhpcy5CVV9QQVlNRU5UX01FVEhPRFMpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF5bWVudENvbmZpZ3VyYXRpb24gPSBcIk5vbmVcIjtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRQYXlQYWxDb25maWd1cmF0aW9uKHRoaXMuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF5UGFsQ29uZmlndXJhdGlvbiA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtGb3JXZWJob29rID0gdGhpcy5nZXRMaW5rRm9yV2ViaG9vaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmNsaWVudElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBheW1lbnRDb25maWd1cmF0aW9uID0gdGhpcy5CVV9QQVlfUEFMO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb24odGhpcy5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRob3JpemVOZXRDb25maWd1cmF0aW9uID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmxvZ2luSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF5bWVudENvbmZpZ3VyYXRpb24gPSB0aGlzLkJVX0FVVEhPUklaRV9ORVQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0UmVjZWlwdFRlbXBsYXRlQnlCVUlkKHRoaXMuYnVzaW5lc3NVbml0SWQpLnRoZW4ocmVjZWlwdFRlbXBsYXRlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHJlY2VpcHRUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjZWlwdFRlbXBsYXRlID0gYW5ndWxhci5jb3B5KHJlY2VpcHRUZW1wbGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNlaXB0RmlsZVRpdGxlID0gcmVjZWlwdFRlbXBsYXRlLmZpbGVUaXRsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRvcE1lbnVLZXkgPT09IHRoaXMuQlVfUE9XRVJfQklfSU5URUdSQVRJT04pIHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRQb3dlckJpQ29uZmlndXJhdGlvbih0aGlzLmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3dlckJpQ29uZmlndXJhdGlvbiA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVSZW1vdmVMaW5rID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG93ZXJCaUNvbmZpZ3VyYXRpb24ubGluayA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmKHRoaXMudG9wTWVudUtleSA9PSB0aGlzLkJVX01FTlVfSVRFTVMpIHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRNZW51SXRlbXNTZXR0aW5ncyh0aGlzLmJ1c2luZXNzVW5pdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVJdGVtc1NldHRpbmdzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVJdGVtc1NldHRpbmdzID0geydidXNpbmVzc1VuaXRJZCc6IHRoaXMuYnVzaW5lc3NVbml0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3dDYXRhbG9nJzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3dDb3Vyc2VzJzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3dNYXRlcmlhbHMnOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvd1F1aXp6ZXMnOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvd0xlYXJuaW5nUGF0aHMnOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvd0Rpc2N1c3Npb25Cb2FyZCc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG93TmV3cyc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdob21lTG9nb1VybCc6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvbWVIZWxwVXJsJzogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG9tZUFib3V0VXNVcmwnOiBudWxsfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRvcE1lbnVLZXkgPT09IHRoaXMuQlVfU0VDVVJJVFkpIHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRTZWN1cml0eUNvbmZpZ3VyYXRpb24odGhpcy5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN1cml0eUNvbmZpZ3VyYXRpb24gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9wTWVudUtleSA9PSB0aGlzLkJVX0JJTExfUExBTikge1xyXG4gICAgICAgICAgICB0aGlzLmJpbGxpbmdQbGFuU2VydmljZS5nZXRCaWxsaW5nUGxhbnModGhpcy5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaWxsUGxhbnMgPSByZXN1bHQuZmlsdGVyKHAgPT4gcC5pc0RlZmF1bHRQbGFuKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCaWxsUGxhbiA9IHRoaXMuYmlsbFBsYW5zLmZpbHRlcihwID0+IHAuaXNDdXJyZW50UGxhbilbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEJpbGxQbGFuICYmIHRoaXMuY3VycmVudEJpbGxQbGFuLnBsYW5Db2RlID09IFwiRlJFRVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYU5ldElmcmFtZUNvbW11bmljYXRvciA9IHRoaXMuZmluYW5jZXNSb3V0ZXIuZ2V0UHJvZHVjdEFOZXRDb21tdW5pY2F0b3JVcmxCeVVybCh0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QXV0aG9yaXplTmV0RW52aXJvbm1lbnRUeXBlKG51bGwpLnRoZW4oZW52VHlwZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFOZXRQb3N0VXJsID0gZW52VHlwZS50b1VwcGVyQ2FzZSgpID09PSBcIlNBTkRCT1hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJodHRwczovL3Rlc3QuYXV0aG9yaXplLm5ldC9wYXltZW50L3BheW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJodHRwczovL2FjY2VwdC5hdXRob3JpemUubmV0L3BheW1lbnQvcGF5bWVudFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaWxsUGxhbnMuZm9yRWFjaChicCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJwLnBsYW5Db2RlICE9IFwiRlJFRVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmlsbGluZ1BsYW5TZXJ2aWNlLmdldEZvcm1Ub2tlbih0aGlzLmFOZXRJZnJhbWVDb21tdW5pY2F0b3IsIHRoaXMuYnVzaW5lc3NVbml0SWQsIGJwLmlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicC5hTmV0VG9rZW4gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZm9ybSNzZW5kX2hwdG9rZW5fXCIgKyBicC5wbGFuQ29kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWluRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYWN0aW9uXCIsIHRoaXMuYU5ldFBvc3RVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEN1c3RvbUJpbGxQbGFuID0gcmVzdWx0LmZpbHRlcihwID0+ICFwLmlzRGVmYXVsdFBsYW4gJiYgcC5pc0N1cnJlbnRQbGFuKVswXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdzU2VydmljZS5nZXROZXdzKHRoaXMuQlVfQklMTF9QTEFOX05FV1NfSURfUEFSQU0pLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5uZXdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFNhdmVGdW5jdGlvbnNGb3JCVUxldmVsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2F2ZU1hcC5zZXQodGhpcy5CVV9HRU5FUkFMX0RFVEFJTFMsICgpID0+IHRoaXMuc2F2ZUdlbmVyYWxEZXRhaWxzKCkpO1xyXG4gICAgICAgIHRoaXMuc2F2ZU1hcC5zZXQodGhpcy5CVV9XRUJJTkFSUywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZih0aGlzLnNob3dHb1RvV2ViaW5hclNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVBY2NvdW50R29Ub1dlYmluYXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHRoaXMuc2hvd1pvb21TZXR0aW5ncykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlWm9vbVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93VGVhbXNTZXR0aW5ncykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlVGVhbXNTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zYXZlTWFwLnNldCh0aGlzLkJVX1BBWU1FTlRfTUVUSE9EUywgKCkgPT4gdGhpcy5zYXZlUGF5bWVudENvbmZpZ3VyYXRpb24oKSk7XHJcbiAgICAgICAgdGhpcy5zYXZlTWFwLnNldCh0aGlzLkJVX1BPV0VSX0JJX0lOVEVHUkFUSU9OLCAoKSA9PiB0aGlzLnNhdmVQb3dlckJpQ29uZmlndXJhdGlvbigpKTtcclxuICAgICAgICB0aGlzLnNhdmVNYXAuc2V0KHRoaXMuQlVfTUVOVV9JVEVNUywgKCkgPT4gdGhpcy5zYXZlTWVudUl0ZW1zU2V0dGluZ3MoKSk7XHJcbiAgICAgICAgdGhpcy5zYXZlTWFwLnNldCh0aGlzLkJVX1BBUkFNRVRFUlMsICgpID0+IHRoaXMudXBkYXRlQnVzaW5lc3NVbml0UGFyYW1ldGVycygpKTtcclxuICAgICAgICB0aGlzLnNhdmVNYXAuc2V0KHRoaXMuQlVfU0VDVVJJVFksICgpID0+IHRoaXMuc2F2ZVNlY3VyaXR5Q29uZmlndXJhdGlvbigpKTtcclxuICAgICAgICB0aGlzLnNhdmVNYXAuc2V0KHRoaXMuQlVfQURPQkVfQVBJLCAoKSA9PiB0aGlzLnNhdmVBZG9iZUFwaURldGFpbHMoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRUb3BNZW51S2V5KGJ1c2luZXNzVW5pdExldmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKGJ1c2luZXNzVW5pdExldmVsKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJnZW5lcmFsRGV0YWlsc1wiOlxyXG4gICAgICAgICAgICBjYXNlIFwiY3VzdG9tQnJhbmRpbmdcIjpcclxuICAgICAgICAgICAgY2FzZSBcIndlYmluYXJzXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJ3ZWJFeEludGVncmF0aW9uXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJwb3dlckJJSW50ZWdyYXRpb25cIjpcclxuICAgICAgICAgICAgY2FzZSBcInBheW1lbnRNZXRob2RzXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJscnNcIjpcclxuICAgICAgICAgICAgY2FzZSBcInNlY3VyaXR5XCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJhZG9iZUFwaVwiOlxyXG4gICAgICAgICAgICBjYXNlIFwic3lzdGVtQ29uZmlndXJhdGlvblwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BNZW51S2V5ID0gYnVzaW5lc3NVbml0TGV2ZWw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1lbnVJdGVtc1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTWVudUl0ZW1zU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9wTWVudUtleSA9IGJ1c2luZXNzVW5pdExldmVsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwYXJhbWV0ZXJzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRCdXNpbmVzc1VuaXRQYXJhbWV0ZXJzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcE1lbnVLZXkgPSBidXNpbmVzc1VuaXRMZXZlbDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYmlsbFBsYW5cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMudG9wTWVudUtleSA9IGJ1c2luZXNzVW5pdExldmVsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcE1lbnVLZXkgPSB0aGlzLkJVX0dFTkVSQUxfREVUQUlMUztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVG9wTWVudUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b3BNZW51S2V5ID09IHRvcE1lbnVLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoaWxkUmVmZXJlbmNlVXJsKGNoaWxkUGFnZXM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVzaW5lc3NVbml0SWQgPyB0aGlzLmJ1c2luZXNzVW5pdFJvdXRlci5lZGl0VXJsKHRoaXMuYnVzaW5lc3NVbml0SWQsIGNoaWxkUGFnZXMpXHJcbiAgICAgICAgICAgIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGVtcGxhdGVGb3JJbmNsdWRlKGJ1c2luZXNzVW5pdExldmVsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlTGV2ZWw6IHN0cmluZyA9IHRoaXMuZ2V0VGVtcGxhdGVCeUxldmVsKGJ1c2luZXNzVW5pdExldmVsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy51cmwudGVtcGxhdGUodGVtcGxhdGVMZXZlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9CYWNrKCk6IHZvaWQge1xyXG4gICAgICAgdGhpcy5idXNpbmVzc1VuaXRMZXZlbCA9PT0gdGhpcy5CVV9QQVJBTUVURVJTXHJcbiAgICAgICAgICAgPyB0aGlzLmxvYWRCdXNpbmVzc1VuaXRQYXJhbWV0ZXJzKClcclxuICAgICAgICAgICA6IHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmJ1c2luZXNzVW5pdFJvdXRlci5pbmRleFVybCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRlbXBsYXRlQnlMZXZlbChidXNpbmVzc1VuaXRMZXZlbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgIHN3aXRjaChidXNpbmVzc1VuaXRMZXZlbCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiZ2VuZXJhbERldGFpbHNcIjogcmV0dXJuIFwiYnVzaW5lc3NVbml0cy9fZ2VuZXJhbC1kZXRhaWxzLWJ1Lmh0bWxcIjtcclxuICAgICAgICAgICAgY2FzZSBcImN1c3RvbUJyYW5kaW5nXCI6IHJldHVybiBcImJ1c2luZXNzVW5pdHMvX2N1c3RvbS1icmFuZGluZy1idS5odG1sXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ3ZWJpbmFyc1wiOiByZXR1cm4gXCJidXNpbmVzc1VuaXRzL193ZWJpbmFycy1idS5odG1sXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ3ZWJFeEludGVncmF0aW9uXCI6IHJldHVybiBcImJ1c2luZXNzVW5pdHMvX3dlYngtaW50ZWdyYXRpb24tYnUuaHRtbFwiO1xyXG4gICAgICAgICAgICBjYXNlIFwicG93ZXJCSUludGVncmF0aW9uXCI6IHJldHVybiBcImJ1c2luZXNzVW5pdHMvX3Bvd2VyQkktaW50ZWdyYXRpb24tYnUuaHRtbFwiO1xyXG4gICAgICAgICAgICBjYXNlIFwicGF5bWVudE1ldGhvZHNcIjogIHJldHVybiBcImJ1c2luZXNzVW5pdHMvX3BheW1lbnRNZXRob2RzLWJ1Lmh0bWxcIjtcclxuICAgICAgICAgICAgY2FzZSBcIm1lbnVJdGVtc1wiOiAgcmV0dXJuIFwiYnVzaW5lc3NVbml0cy9fbWVudS1pdGVtcy1idS5odG1sXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJscnNcIjogcmV0dXJuIFwiYnVzaW5lc3NVbml0cy9fbHJzLWJ1Lmh0bWxcIjtcclxuICAgICAgICAgICAgY2FzZSBcInN5c3RlbUNvbmZpZ3VyYXRpb25cIjogcmV0dXJuIFwiYnVzaW5lc3NVbml0cy9fc3lzdGVtQ29uZmlndXJhdGlvbi1idS5odG1sXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwYXJhbWV0ZXJzXCI6IHJldHVybiBcImJ1c2luZXNzVW5pdHMvX3BhcmFtZXRlcnMuaHRtbFwiO1xyXG4gICAgICAgICAgICBjYXNlIFwic2VjdXJpdHlcIjogcmV0dXJuIFwiYnVzaW5lc3NVbml0cy9fc2VjdXJpdHktYnUuaHRtbFwiO1xyXG4gICAgICAgICAgICBjYXNlIFwiYmlsbFBsYW5cIjogcmV0dXJuIFwiYnVzaW5lc3NVbml0cy9fYmlsbFBsYW4tYnUuaHRtbFwiO1xyXG4gICAgICAgICAgICBjYXNlIFwiYWRvYmVBcGlcIjogcmV0dXJuIFwiYnVzaW5lc3NVbml0cy9fYWRvYmUtYXBpLmh0bWxcIjtcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIFwiYnVzaW5lc3NVbml0cy9fZ2VuZXJhbC1kZXRhaWxzLWJ1Lmh0bWxcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDcmVhdGVQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUdlbmVyYWxEZXRhaWxzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgc2F2ZUZ1bmM6IEZ1bmN0aW9uID0gdGhpcy5zYXZlTWFwLmdldCh0aGlzLmJ1c2luZXNzVW5pdExldmVsKTtcclxuICAgICAgICAgICAgc2F2ZUZ1bmMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVHZW5lcmFsRGV0YWlscygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5pc0NyZWF0ZVBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5jcmVhdGUodGhpcy5idXNpbmVzc1VuaXQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQnVzaW5lc3MgdW5pdCBhbHJlYWR5IGV4aXN0c1wiKTtcclxuICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3ZpZGVycyAmJiB0aGlzLnByb3ZpZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdC5wcm92aWRlcnMgPSB0aGlzLnByb3ZpZGVycy5maWx0ZXIocCA9PiBwLmlzQWN0aXZlKS5tYXAocCA9PiBwLmtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS51cGRhdGUodGhpcy5idXNpbmVzc1VuaXQpLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVXBkYXRlZFwiKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJCdXNpbmVzcyB1bml0IGFscmVhZHkgZXhpc3RzXCIpO1xyXG4gICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWFjdGl2YXRlRW50aXR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2Uuc2V0QWN0aXZlQnVzaW5lc3NVbml0KHRoaXMuYnVzaW5lc3NVbml0LmlkLCB0aGlzLmJ1c2luZXNzVW5pdC52ZXJzaW9uLCBmYWxzZSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yZWRpcmVjdFRvQmFjaygpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXJsQnlDb21wYW55TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHVybDogc3RyaW5nID0gdGhpcy4kbG9jYXRpb24ucHJvdG9jb2woKSArIFwiOi8vXCIgKyB0aGlzLiRsb2NhdGlvbi5ob3N0KCkgKyBcIjpcIiArIHRoaXMuJGxvY2F0aW9uLnBvcnQoKTtcclxuICAgICAgICByZXR1cm4gYFVSTDogJHt1cmx9LyR7dGhpcy5idXNpbmVzc1VuaXQuY29tcGFueU5hbWV9L2NsaWVudC9hcHAuaHRtbGA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2hvd0RlYWN0aXZhdGVCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVzaW5lc3NVbml0ICYmICF0aGlzLmJ1c2luZXNzVW5pdC5wcmVkZWZpbmVkICYmICF0aGlzLmlzQ3JlYXRlUGFnZSAmJiB0aGlzLnRvcE1lbnVLZXkgPT09IHRoaXMuQlVfR0VORVJBTF9ERVRBSUxTXHJcbiAgICAgICAgICAgICYmIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgJiYgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlCdXNpbmVzc1VuaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2hvd1JlbW92ZUxpbmtCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVzaW5lc3NVbml0ICYmICF0aGlzLmlzQ3JlYXRlUGFnZSAmJiB0aGlzLnRvcE1lbnVLZXkgPT09IHRoaXMuQlVfUE9XRVJfQklfSU5URUdSQVRJT05cclxuICAgICAgICAgICAgJiYgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyAmJiB0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmNvbmZpZ3VyZUJ1c2luZXNzVW5pdFNldHRpbmdzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0Rpc2FibGVTYXZlQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnN5c3RlbVBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5jb25maWd1cmVCdXNpbmVzc1VuaXRTZXR0aW5ncztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvcHlUb0NsaXBib2FyZChlbGVtZW50SWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICBlbC52YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCkuaW5uZXJUZXh0O1xyXG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7XHJcbiAgICAgICAgZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgIGVsLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5yYW5nZUNvdW50ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5nZXRSYW5nZUF0KDApXHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgZWwuc2VsZWN0KCk7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIGxpbmsgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZFwiKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5hZGRSYW5nZShzZWxlY3RlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMaW5rRm9yU2VsZlJlZ2lzdHJhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCB1cmxBcnJheXM6IHN0cmluZ1tdID0gdGhpcy4kbG9jYXRpb24uYWJzVXJsKCkuc3BsaXQoXCIjXCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRvbWFpbkFkZHJlc3MgPT0gXCJcIiB8fCB0aGlzLmRvbWFpbkFkZHJlc3MgPT0gbnVsbFxyXG4gICAgICAgICAgICA/IHVybEFycmF5c1swXSArIFwiI1wiICsgYC9hdXRoL2xvZ29uP0JVaWQ9JHt0aGlzLmJ1c2luZXNzVW5pdElkfWBcclxuICAgICAgICAgICAgOiB0aGlzLmRvbWFpbkFkZHJlc3MgKyBgL2F1dGgvbG9nb25gO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93UHVyY2hhc2VPcmRlclByZXZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNQcmV2aWV3SGlkZGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQcmV2aWV3SGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRQdXJjaGFzZU9yZGVyUHJldmlldygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UHVyY2hhc2VPcmRlclByZXZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnM6IGFueSA9IHtcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQ6IHRoaXMuYnVzaW5lc3NVbml0SWQsXHJcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VySWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCByZXBvcnRUeXBlID0gJ1BVUkNIQVNFRF9PUkRFUlNfUkVQT1JUX1BSRVZJRVcnO1xyXG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVTZXJ2aWNlLmRvd25sb2FkQ2VydGlmaWNhdGUocGFyYW1ldGVycywgcmVwb3J0VHlwZSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHRoaXMucHVyY2hhc2VPcmRlckNvbnRlbnQgPSBcIjxpbWcgc3R5bGU9XFxcIndpZHRoOiAxMDAlO1xcXCIgc3JjPVxcXCJcIiArIHJlc3VsdCArIFwiXFxcIi8+XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlUHVyY2hhc2VPcmRlclByZXZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1ByZXZpZXdIaWRkZW4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDwtLVxyXG5cclxuICAgIC8vIEdvVG9XZWJpbmFyIHNldHRpbmdzIC0tPlxyXG4gICAgcHVibGljIHNhdmVBY2NvdW50R29Ub1dlYmluYXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy53ZWJpbmFyU2V0dGluZ3MuYnVzaW5lc3NVbml0SWQgPSB0aGlzLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2Uuc2F2ZVdlYmluYXJTZXR0aW5nRm9yQnVzaW5lc3NVbml0KHRoaXMud2ViaW5hclNldHRpbmdzKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyUGFzc3dvcmQoKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTZXR0aW5ncyBmb3IgR29Ub1dlYmluYXIgaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xlYXJQYXNzd29yZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy53ZWJpbmFyU2V0dGluZ3MgJiYgdGhpcy53ZWJpbmFyU2V0dGluZ3MudXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy53ZWJpbmFyU2V0dGluZ3MucGFzc3dvcmQgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QXZhaWxhYmxlVXNlcnNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgdXJsOiBzdHJpbmcgPSBcIi9hcGkvYnVzaW5lc3NVbml0cy93ZWJpbmFyL2F2YWlsYWJsZUluc3RydWN0b3JzP1wiO1xyXG4gICAgICAgIGlmICh0aGlzLmJ1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBgYnVzaW5lc3NVbml0SWQ9JHt0aGlzLmJ1c2luZXNzVW5pdElkfSZgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdmFpbGFibGVVc2Vyc1VybFpvb20oKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgdXJsOiBzdHJpbmcgPSBcIi9hcGkvYnVzaW5lc3NVbml0cy96b29tL2F2YWlsYWJsZUluc3RydWN0b3JzP1wiO1xyXG4gICAgICAgIGlmICh0aGlzLmJ1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBgYnVzaW5lc3NVbml0SWQ9JHt0aGlzLmJ1c2luZXNzVW5pdElkfSZgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlV2ViaW5hckluc3RydWN0b3JTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB3ZWJpbmFySW5zdHJ1Y3RvclNldHRpbmdzU2F2ZTogSVdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ3MgPSB7fTtcclxuICAgICAgICB3ZWJpbmFySW5zdHJ1Y3RvclNldHRpbmdzU2F2ZS51c2VySWQgPSB0aGlzLndlYmluYXJBdmFpbGFibGVVc2VySWQ7XHJcbiAgICAgICAgd2ViaW5hckluc3RydWN0b3JTZXR0aW5nc1NhdmUuYnVzaW5lc3NVbml0SWQgPSB0aGlzLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIHdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ3NTYXZlLndlYmluYXJVc2VybmFtZSA9IHRoaXMud2ViaW5hckluc3RydWN0b3JzLndlYmluYXJVc2VybmFtZTtcclxuICAgICAgICB3ZWJpbmFySW5zdHJ1Y3RvclNldHRpbmdzU2F2ZS53ZWJpbmFyUGFzc3dvcmQgPSB0aGlzLndlYmluYXJJbnN0cnVjdG9ycy53ZWJpbmFyUGFzc3dvcmQ7XHJcblxyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2Uuc2F2ZVdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ3Mod2ViaW5hckluc3RydWN0b3JTZXR0aW5nc1NhdmUpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNBZGRSb3dWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndlYmluYXJJbnN0cnVjdG9yc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJJbnN0cnVjdG9yU2V0dGluZ3NGb3JtKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZFdlYmluYXJJbnN0cnVjdG9yc1NlbGVjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU2V0dGluZ3MgZm9yIEdvVG9XZWJpbmFyIGhhcyBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVpvb21JbnN0cnVjdG9yU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgem9vbUluc3RydWN0b3JTZXR0aW5nc1NhdmU6IElab29tSW5zdHJ1Y3RvclNldHRpbmdzID0ge307XHJcbiAgICAgICAgem9vbUluc3RydWN0b3JTZXR0aW5nc1NhdmUudXNlcklkID0gdGhpcy56b29tQXZhaWxhYmxlVXNlcklkO1xyXG4gICAgICAgIHpvb21JbnN0cnVjdG9yU2V0dGluZ3NTYXZlLmJ1c2luZXNzVW5pdElkID0gdGhpcy5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICB6b29tSW5zdHJ1Y3RvclNldHRpbmdzU2F2ZS5lbWFpbCA9IHRoaXMuem9vbUluc3RydWN0b3JzLmVtYWlsO1xyXG5cclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLnNhdmVab29tSW5zdHJ1Y3RvclNldHRpbmdzKHpvb21JbnN0cnVjdG9yU2V0dGluZ3NTYXZlKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWRkUm93VmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b29tSW5zdHJ1Y3RvcnNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySW5zdHJ1Y3RvclNldHRpbmdzRm9ybVpvb20oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkWm9vbUluc3RydWN0b3JzU2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJab29tIGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuXCIpO1xyXG4gICAgICAgICAgICB9KS5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gXCJab29tIHNldHRpbmdzIG11c3Qgbm90IGJlIGVtcHR5XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlpvb20gc2V0dGluZ3MgbXVzdCBub3QgYmUgZW1wdHlcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlVGVhbXNJbnN0cnVjdG9yU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGVhbXNJbnN0cnVjdG9yU2V0dGluZ3NTYXZlOiBJVGVhbXNJbnN0cnVjdG9yU2V0dGluZ3MgPSB7fTtcclxuICAgICAgICB0ZWFtc0luc3RydWN0b3JTZXR0aW5nc1NhdmUudXNlcklkID0gdGhpcy50ZWFtc0F2YWlsYWJsZVVzZXJJZDtcclxuICAgICAgICB0ZWFtc0luc3RydWN0b3JTZXR0aW5nc1NhdmUuYnVzaW5lc3NVbml0SWQgPSB0aGlzLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIHRlYW1zSW5zdHJ1Y3RvclNldHRpbmdzU2F2ZS50ZWFtc1VzZXJuYW1lID0gdGhpcy50ZWFtc0luc3RydWN0b3JzLnRlYW1zVXNlcm5hbWU7XHJcbiAgICAgICAgdGVhbXNJbnN0cnVjdG9yU2V0dGluZ3NTYXZlLnRlYW1zUGFzc3dvcmQgPSB0aGlzLnRlYW1zSW5zdHJ1Y3RvcnMudGVhbXNQYXNzd29yZDtcclxuXHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5zYXZlVGVhbXNJbnN0cnVjdG9yU2V0dGluZ3ModGVhbXNJbnN0cnVjdG9yU2V0dGluZ3NTYXZlKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWRkUm93VmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZWFtc0luc3RydWN0b3JzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckluc3RydWN0b3JTZXR0aW5nc0Zvcm1UZWFtcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRUZWFtc0luc3RydWN0b3JzU2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUZWFtcyBjb25maWd1cmF0aW9uIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLlwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFySW5zdHJ1Y3RvclNldHRpbmdzRm9ybSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLndlYmluYXJJbnN0cnVjdG9ycy53ZWJpbmFyVXNlcm5hbWUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMud2ViaW5hckluc3RydWN0b3JzLndlYmluYXJQYXNzd29yZCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy53ZWJpbmFyQXZhaWxhYmxlVXNlcklkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc3BlY2lhbFdlYmluYXJJbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pc1dlYmluYXJJbnN0cnVjdG9yc1Nob3dlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckluc3RydWN0b3JTZXR0aW5nc0Zvcm1ab29tKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuem9vbUluc3RydWN0b3JzLmVtYWlsID0gXCJcIjtcclxuICAgICAgICB0aGlzLnpvb21BdmFpbGFibGVVc2VySWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zcGVjaWFsWm9vbUluc3RydWN0b3IgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmlzWm9vbUluc3RydWN0b3JzU2hvd2VkID0gdHJ1ZSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFySW5zdHJ1Y3RvclNldHRpbmdzRm9ybVRlYW1zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGVhbXNJbnN0cnVjdG9ycy50ZWFtc1VzZXJuYW1lID0gXCJcIjtcclxuICAgICAgICB0aGlzLnRlYW1zSW5zdHJ1Y3RvcnMudGVhbXNQYXNzd29yZCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy50ZWFtc0F2YWlsYWJsZVVzZXJJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNwZWNpYWxUZWFtc0luc3RydWN0b3IgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmlzVGVhbXNJbnN0cnVjdG9yc1Nob3dlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVsb2FkV2ViaW5hckluc3RydWN0b3JzU2VsZWN0b3IoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1dlYmluYXJJbnN0cnVjdG9yc1Nob3dlZCA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pc1dlYmluYXJJbnN0cnVjdG9yc1Nob3dlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVsb2FkWm9vbUluc3RydWN0b3JzU2VsZWN0b3IoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1pvb21JbnN0cnVjdG9yc1Nob3dlZCA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pc1pvb21JbnN0cnVjdG9yc1Nob3dlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVsb2FkVGVhbXNJbnN0cnVjdG9yc1NlbGVjdG9yKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNUZWFtc0luc3RydWN0b3JzU2hvd2VkID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmlzVGVhbXNJbnN0cnVjdG9yc1Nob3dlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVXZWJpbmFySW5zdHJ1Y3RvclNldHRpbmdzKHdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ3NJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5yZW1vdmVJbnN0cnVjdG9yU2V0dGluZ3Mod2ViaW5hckluc3RydWN0b3JTZXR0aW5nc0lkKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndlYmluYXJJbnN0cnVjdG9yc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkV2ViaW5hckluc3RydWN0b3JzU2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTZWxlY3RlZCBvcmdhbml6ZXIgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVpvb21JbnN0cnVjdG9yU2V0dGluZ3Moem9vbUluc3RydWN0b3JTZXR0aW5nc0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLnJlbW92ZVpvb21JbnN0cnVjdG9yU2V0dGluZ3Moem9vbUluc3RydWN0b3JTZXR0aW5nc0lkKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnpvb21JbnN0cnVjdG9yc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkWm9vbUluc3RydWN0b3JzU2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTZWxlY3RlZCBvcmdhbml6ZXIgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVRlYW1zSW5zdHJ1Y3RvclNldHRpbmdzKHRlYW1zSW5zdHJ1Y3RvclNldHRpbmdzSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UucmVtb3ZlVGVhbXNJbnN0cnVjdG9yU2V0dGluZ3ModGVhbXNJbnN0cnVjdG9yU2V0dGluZ3NJZClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZWFtc0luc3RydWN0b3JzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRUZWFtc0luc3RydWN0b3JzU2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTZWxlY3RlZCBvcmdhbml6ZXIgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRXZWJpbmFySW5zdHJ1Y3Rvcih3ZWJpbmFySW5zdHJ1Y3RvclNldHRpbmdzOiBJV2ViaW5hckluc3RydWN0b3JTZXR0aW5ncyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNBZGRSb3dWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1dlYmluYXJJbnN0cnVjdG9yc1Nob3dlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2ViaW5hckluc3RydWN0b3JzLndlYmluYXJQYXNzd29yZCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy53ZWJpbmFySW5zdHJ1Y3RvcnMud2ViaW5hclVzZXJuYW1lID0gd2ViaW5hckluc3RydWN0b3JTZXR0aW5ncy53ZWJpbmFyVXNlcm5hbWU7XHJcbiAgICAgICAgdGhpcy5zcGVjaWFsV2ViaW5hckluc3RydWN0b3IgPSB3ZWJpbmFySW5zdHJ1Y3RvclNldHRpbmdzLnVzZXJOYW1lO1xyXG4gICAgICAgIHRoaXMud2ViaW5hckF2YWlsYWJsZVVzZXJJZCA9IHdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ3MudXNlcklkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlZGl0Wm9vbUluc3RydWN0b3Ioem9vbUluc3RydWN0b3JTZXR0aW5nczogSVpvb21JbnN0cnVjdG9yU2V0dGluZ3MpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzQWRkUm93VmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNab29tSW5zdHJ1Y3RvcnNTaG93ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnpvb21JbnN0cnVjdG9ycy5lbWFpbCA9IHpvb21JbnN0cnVjdG9yU2V0dGluZ3MuZW1haWw7XHJcbiAgICAgICAgdGhpcy5zcGVjaWFsWm9vbUluc3RydWN0b3IgPSB6b29tSW5zdHJ1Y3RvclNldHRpbmdzLnVzZXJOYW1lO1xyXG4gICAgICAgIHRoaXMuem9vbUF2YWlsYWJsZVVzZXJJZCA9IHpvb21JbnN0cnVjdG9yU2V0dGluZ3MudXNlcklkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlZGl0VGVhbXNJbnN0cnVjdG9yKHRlYW1zSW5zdHJ1Y3RvclNldHRpbmdzOiBJVGVhbXNJbnN0cnVjdG9yU2V0dGluZ3MpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzQWRkUm93VmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNUZWFtc0luc3RydWN0b3JzU2hvd2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50ZWFtc0luc3RydWN0b3JzLnRlYW1zVXNlcm5hbWUgPSB0ZWFtc0luc3RydWN0b3JTZXR0aW5ncy50ZWFtc1VzZXJuYW1lO1xyXG4gICAgICAgIHRoaXMudGVhbXNJbnN0cnVjdG9ycy50ZWFtc1Bhc3N3b3JkID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNwZWNpYWxUZWFtc0luc3RydWN0b3IgPSB0ZWFtc0luc3RydWN0b3JTZXR0aW5ncy51c2VyTmFtZTtcclxuICAgICAgICB0aGlzLnRlYW1zQXZhaWxhYmxlVXNlcklkID0gdGVhbXNJbnN0cnVjdG9yU2V0dGluZ3MudXNlcklkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxBZGRJbnN0cnVjdG9yKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2xlYXJJbnN0cnVjdG9yU2V0dGluZ3NGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5pc0FkZFJvd1Zpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsWm9vbUFkZEluc3RydWN0b3IoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jbGVhckluc3RydWN0b3JTZXR0aW5nc0Zvcm1ab29tKCk7XHJcbiAgICAgICAgdGhpcy5pc0FkZFJvd1Zpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsVGVhbXNBZGRJbnN0cnVjdG9yKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2xlYXJJbnN0cnVjdG9yU2V0dGluZ3NGb3JtVGVhbXMoKTtcclxuICAgICAgICB0aGlzLmlzQWRkUm93VmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZVNhdmVGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy53ZWJpbmFyQXZhaWxhYmxlVXNlcklkIHx8ICF0aGlzLndlYmluYXJJbnN0cnVjdG9yc1xyXG4gICAgICAgICAgICB8fCAhdGhpcy53ZWJpbmFySW5zdHJ1Y3RvcnMud2ViaW5hclVzZXJuYW1lIHx8ICF0aGlzLndlYmluYXJJbnN0cnVjdG9ycy53ZWJpbmFyUGFzc3dvcmQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZhbGlkYXRlU2F2ZUZvcm1ab29tKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy56b29tQXZhaWxhYmxlVXNlcklkIHx8ICF0aGlzLnpvb21JbnN0cnVjdG9ycyB8fCAhdGhpcy56b29tSW5zdHJ1Y3RvcnMuZW1haWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZhbGlkYXRlU2F2ZUZvcm1UZWFtcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMudGVhbXNBdmFpbGFibGVVc2VySWQgfHwgIXRoaXMudGVhbXNJbnN0cnVjdG9yc1xyXG4gICAgICAgICAgICB8fCAhdGhpcy50ZWFtc0luc3RydWN0b3JzLnRlYW1zVXNlcm5hbWUgfHwgIXRoaXMudGVhbXNJbnN0cnVjdG9ycy50ZWFtc1Bhc3N3b3JkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja1dlYmluYXJJbnN0cnVjdG9yQ29ubmVjdGlvbih3ZWJpbmFySW5zdHJ1Y3RvcklkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmNoZWNrV2ViaW5hckluc3RydWN0b3JDb25uZWN0aW9uKHdlYmluYXJJbnN0cnVjdG9ySWQpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA/IG5vdGlmaWVyLnN1Y2Nlc3MoXCJDb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWxcIikgOlxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQ29ubmVjdGlvbiBmYWlsZWRcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja1dlYmluYXJDb25uZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy53ZWJpbmFyU2V0dGluZ3MgfHwgIXRoaXMud2ViaW5hclNldHRpbmdzLmJ1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiR29Ub1dlYmluYXIgYWNjb3VudCBpcyBub3QgY29uZmlndXJlZFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmNoZWNrV2ViaW5hckNvbm5lY3Rpb24odGhpcy5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPyBub3RpZmllci5zdWNjZXNzKFwiQ29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsXCIpIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJDb25uZWN0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDaGVja1BheVBhbERhdGFCdXR0b25BY3RpdmUoKTogYm9vbGVhbntcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1BheVBhbENvbmZpZ3VyZWQgPT0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIDwtLVxyXG5cclxuICAgIC8qUGF5bWVudCBjb25maWd1cmF0aW9uKi9cclxuXHJcbiAgICBwdWJsaWMgc2F2ZU1lbnVJdGVtc1NldHRpbmdzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UudXBkYXRlTWVudUl0ZW1zU2V0dGluZ3ModGhpcy5idXNpbmVzc1VuaXRJZCwgdGhpcy5tZW51SXRlbXNTZXR0aW5ncylcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSU1lbnVJdGVtU2V0dGluZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zU2V0dGluZ3MgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJNZW51IGl0ZW1zIHNldHRpbmdzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLlwiKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVBheW1lbnRDb25maWd1cmF0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXltZW50Q29uZmlndXJhdGlvbiA9PSB0aGlzLkJVX1BBWV9QQUwpIHtcclxuICAgICAgICAgICAgdGhpcy5zYXZlUGF5UGFsQ29uZmlndXJhdGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgICAgICAgaWYodGhpcy5uZXdSZWNlaXB0VGVtcGxhdGVGaWxlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVJlY2VpcHRUZW1wbGF0ZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kZWxldGVBdXRob3JpemVOZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYXltZW50Q29uZmlndXJhdGlvbiA9PSB0aGlzLkJVX0FVVEhPUklaRV9ORVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQXV0aG9yaXplTmV0Q29uZmlndXJhdGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVBheVBhbENvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgICAgICAgaWYodGhpcy5uZXdSZWNlaXB0VGVtcGxhdGVGaWxlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVJlY2VpcHRUZW1wbGF0ZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVBheVBhbENvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVBdXRob3JpemVOZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUGF5UGFsQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLnVwZGF0ZVBheVBhbENvbmZpZ3VyYXRpb24odGhpcy5idXNpbmVzc1VuaXRJZCwgdGhpcy5wYXlQYWxDb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJUGF5UGFsQ29uZmlndXJhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXlQYWxDb25maWd1cmF0aW9uID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlBheVBhbCBjb25maWd1cmF0aW9uIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLlwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZVBheVBhbENvbmZpZ3VyYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGF5UGFsQ29uZmlndXJhdGlvbiAmJiB0aGlzLnBheVBhbENvbmZpZ3VyYXRpb24gIT0ge30pIHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5kZWxldGVQYXlQYWxDb25maWd1cmF0aW9uKHRoaXMuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXlQYWxDb25maWd1cmF0aW9uID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlBheVBhbCBjb25maWd1cmF0aW9uIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLlwiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tQYXlQYWxDb3JyZWN0RGF0YSgpOiB2b2lke1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuY2hlY2tQYXlQYWxDb3JyZWN0RGF0YSh0aGlzLmJ1c2luZXNzVW5pdElkKS50aGVuKChyZXN1bHQpID0+e1xyXG4gICAgICAgICAgICByZXN1bHQgPyBub3RpZmllci5zdWNjZXNzKFwiQ29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsXCIpIDogbm90aWZpZXIuZXJyb3IoXCJDb25uZWN0aW9uIGZhaWxlZFwiKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExpbmtGb3JXZWJob29rKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsLmJhc2UoXCIvYXBpL2ludGVncmF0aW9uL3BheXBhbC93ZWJob29rc1wiKS5zZXJ2aWNlKClcclxuICAgIH1cclxuXHJcbiAgICAvKlBheVBhbCBjb25maWd1cmF0aW9uKi9cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS51cGRhdGVBdXRob3JpemVOZXRDb25maWd1cmF0aW9uKHRoaXMuYnVzaW5lc3NVbml0SWQsIHRoaXMuYXV0aG9yaXplTmV0Q29uZmlndXJhdGlvbilcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplTmV0Q29uZmlndXJhdGlvbiA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkF1dGhvcml6ZU5ldCBjb25maWd1cmF0aW9uIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLlwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZUF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aG9yaXplTmV0Q29uZmlndXJhdGlvbiAmJiB0aGlzLmF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb24gIT0ge30pIHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5kZWxldGVBdXRob3JpemVOZXRDb25maWd1cmF0aW9uKHRoaXMuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRob3JpemVOZXRDb25maWd1cmF0aW9uID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkF1dGhvcml6ZU5ldCBjb25maWd1cmF0aW9uIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLlwiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tBdXRob3JpemVOZXRDb3JyZWN0RGF0YSgpOiB2b2lke1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuY2hlY2tBdXRob3JpemVOZXRDb3JyZWN0RGF0YSh0aGlzLmJ1c2luZXNzVW5pdElkKS50aGVuKChyZXN1bHQpID0+e1xyXG4gICAgICAgICAgICByZXN1bHQgPyBub3RpZmllci5zdWNjZXNzKFwiQ29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsXCIpIDogbm90aWZpZXIuZXJyb3IoXCJDb25uZWN0aW9uIGZhaWxlZFwiKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF0dGFjaEZpbGUoJGZpbGUpIHtcclxuICAgICAgICBpZiAodGhpcy5uZXdSZWNlaXB0VGVtcGxhdGVGaWxlICYmICEkZmlsZS4kZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMucmVjZWlwdEZpbGVUaXRsZSA9IHRoaXMubmV3UmVjZWlwdFRlbXBsYXRlRmlsZS5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUmVjZWlwdFRlbXBsYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkU2F2ZVJlY2VpcHRCdXR0b24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZVJlY2VpcHRCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLm5ld1JlY2VpcHRUZW1wbGF0ZUZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNlaXB0VGVtcGxhdGUuZmlsZUNvbnRlbnRJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucmVjZWlwdFRlbXBsYXRlLmZpbGVUaXRsZSA9IHRoaXMubmV3UmVjZWlwdFRlbXBsYXRlRmlsZS5uYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVjZWlwdFRlbXBsYXRlLmJ1c2luZXNzVW5pdElkID0gdGhpcy5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICBsZXQgY2FsbCA9IHRoaXMucmVjZWlwdFRlbXBsYXRlLmlkXHJcbiAgICAgICAgICAgID8gdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS51cGRhdGVSZWNlaXB0VGVtcGxhdGUodGhpcy5yZWNlaXB0VGVtcGxhdGUuaWQsIHRoaXMucmVjZWlwdFRlbXBsYXRlKVxyXG4gICAgICAgICAgICA6IHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuY3JlYXRlUmVjZWlwdFRlbXBsYXRlKHRoaXMucmVjZWlwdFRlbXBsYXRlKTtcclxuICAgICAgICBjYWxsLnRoZW4ocmVjZWlwdFRlbXBsYXRlSWQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZXdSZWNlaXB0VGVtcGxhdGVGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLnVwbG9hZFJlY2VpcHRUZW1wbGF0ZShyZWNlaXB0VGVtcGxhdGVJZCwgdGhpcy5uZXdSZWNlaXB0VGVtcGxhdGVGaWxlKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRSZWNlaXB0VGVtcGxhdGUocmVjZWlwdFRlbXBsYXRlSWQpLnRoZW4ocmVjZWlwdFRlbXBsYXRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjZWlwdFRlbXBsYXRlID0gYW5ndWxhci5jb3B5KHJlY2VpcHRUZW1wbGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld1JlY2VpcHRUZW1wbGF0ZUZpbGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHVyY2hhc2VPcmRlclByZXZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZVJlY2VpcHRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVSZWNlaXB0KGlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmRlbGV0ZVJlY2VpcHRUZW1wbGF0ZShpZClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNlaXB0VGVtcGxhdGUgPSB7ZmlsZUNvbnRlbnRJZDogbnVsbH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbFJlY2VpcHQoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsUmVjZWlwdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5ld1JlY2VpcHRUZW1wbGF0ZUZpbGUgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnJlY2VpcHRUZW1wbGF0ZS5maWxlQ29udGVudElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjZWlwdEZpbGVUaXRsZSA9IHRoaXMucmVjZWlwdFRlbXBsYXRlLmZpbGVUaXRsZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlY2VpcHRGaWxlVGl0bGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbi8vICAgIFBvd2VyIEJJIENvbmZpZ3VyYXRpb25cclxuICAgIHByaXZhdGUgc2F2ZVBvd2VyQmlDb25maWd1cmF0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UudXBkYXRlUG93ZXJCaUNvbmZpZ3VyYXRpb24odGhpcy5idXNpbmVzc1VuaXRJZCwgdGhpcy5wb3dlckJpQ29uZmlndXJhdGlvbi5saW5rKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PntcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJFbWJlZGRlZCByZXBvcnRzIGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCdXNpbmVzc1VuaXRTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbi8vICAgIFJlbW92ZSBMaW5rXHJcbiAgICBwdWJsaWMgcmVtb3ZlTGluaygpOiB2b2lke1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UucmVtb3ZlTGluayh0aGlzLmJ1c2luZXNzVW5pdElkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVSZW1vdmVMaW5rID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5nZXRCdXNpbmVzc1VuaXRTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTGluayB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWRcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4vLyAgICBQb3dlciBCSSBDb25maWd1cmF0aW9uXHJcblxyXG4gICAgcHVibGljIGdldENvbXBhbnlMaW5rKCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoXCIoPzpodHRwcyo6XFwvXFwvKVteL10qXCIsIFwic1wiKS5leGVjKHRoaXMuZG9tYWluQWRkcmVzcyk7XHJcbiAgICAgICAgaWYgKHJlZ0V4cCA9PSBudWxsIHx8IHRoaXMuZG9tYWluQWRkcmVzcyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiSW5jb3JyZWN0IERvbWFpbiBGb3JtYXRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZWdFeHBbMF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvcHlDb21wYW55TGlua1RvQ2xpcGJvYXJkKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICBlbC52YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29tcGFueUxpbmtcIikuaW5uZXJUZXh0O1xyXG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7XHJcbiAgICAgICAgZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgIGVsLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5yYW5nZUNvdW50ID4gMFxyXG4gICAgICAgICAgICA/IGRvY3VtZW50LmdldFNlbGVjdGlvbigpLmdldFJhbmdlQXQoMClcclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIGVsLnNlbGVjdCgpO1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XHJcbiAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBsaW5rIGhhcyBiZWVuIGNvcGllZCB0byBjbGlwYm9hcmRcIik7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2Uoc2VsZWN0ZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHRcclxuICAgIC8qWm9vbSBjb25maWd1cmF0aW9uKi9cclxuICAgIHB1YmxpYyBzYXZlWm9vbVNldHRpbmdzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UudXBkYXRlWm9vbVNldHRpbmdzKHRoaXMuYnVzaW5lc3NVbml0SWQsIHRoaXMuem9vbVNldHRpbmdzKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJTWVudUl0ZW1TZXR0aW5ncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b29tU2V0dGluZ3MgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJab29tIGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuXCIpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja1pvb21Db25uZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy56b29tU2V0dGluZ3MgfHwgIXRoaXMuem9vbVNldHRpbmdzLmJ1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiWm9vbSBhY2NvdW50IGlzIG5vdCBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuY2hlY2tab29tQ29ubmVjdGlvbih0aGlzLmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA/IG5vdGlmaWVyLnN1Y2Nlc3MoXCJDb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWxcIikgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkNvbm5lY3Rpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja1pvb21JbnN0cnVjdG9yQ29ubmVjdGlvbih6b29tSW5zdHJ1Y3RvcklkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmNoZWNrWm9vbUluc3RydWN0b3JDb25uZWN0aW9uKHpvb21JbnN0cnVjdG9ySWQpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA/IG5vdGlmaWVyLnN1Y2Nlc3MoXCJDb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWxcIikgOlxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQ29ubmVjdGlvbiBmYWlsZWRcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLypab29tIGNvbmZpZ3VyYXRpb24qL1xyXG5cclxuICAgIC8qIFRlYW1zIGNvbmZpZ3VyYXRpb24gKi9cclxuICAgIHB1YmxpYyBzYXZlVGVhbXNTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLnVwZGF0ZVRlYW1zU2V0dGluZ3ModGhpcy5idXNpbmVzc1VuaXRJZCwgdGhpcy50ZWFtc1NldHRpbmdzKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJTWVudUl0ZW1TZXR0aW5ncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZWFtc1NldHRpbmdzID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGVhbXMgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHkgdXBkYXRlZC5cIilcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrVGVhbXNJbnN0cnVjdG9yQ29ubmVjdGlvbih0ZWFtc0luc3RydWN0b3JJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5jaGVja1RlYW1zSW5zdHJ1Y3RvckNvbm5lY3Rpb24odGVhbXNJbnN0cnVjdG9ySWQpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA/IG5vdGlmaWVyLnN1Y2Nlc3MoXCJDb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWxcIikgOlxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQ29ubmVjdGlvbiBmYWlsZWRcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyogVGVhbXMgY29uZmlndXJhdGlvbiAqL1xyXG5cclxuICAgIC8qU2VjdXJpdHkgY29uZmlndXJhdGlvbiovXHJcbiAgICBwdWJsaWMgc2F2ZVNlY3VyaXR5Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLnVwZGF0ZVNlY3VyaXR5Q29uZmlndXJhdGlvbih0aGlzLmJ1c2luZXNzVW5pdElkLCB0aGlzLnNlY3VyaXR5Q29uZmlndXJhdGlvbilcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSVNlY3VyaXR5Q29uZmlndXJhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN1cml0eUNvbmZpZ3VyYXRpb24gPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTZWN1cml0eSBjb25maWd1cmF0aW9uIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLlwiKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qU2VjdXJpdHkgY29uZmlndXJhdGlvbiovXHJcblxyXG4gICAgcHVibGljIHNhdmVBZG9iZUFwaURldGFpbHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hZG9iZUNyZWRlbnRpYWxzLmJ1c2luZXNzVW5pdElkID0gdGhpcy5idXNpbmVzc1VuaXQuaWQ7XHJcblxyXG4gICAgICAgIHRoaXMuYWRvYmVDcmVkZW50aWFscy5jbGllbnRJZCA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRpdGxlRmllbGQtaWRcIikpLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLnNldEFkb2JlQ3JlZGVudGlhbHModGhpcy5idXNpbmVzc1VuaXQuaWQsIHRoaXMuYWRvYmVDcmVkZW50aWFscylcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSVNlY3VyaXR5Q29uZmlndXJhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN1cml0eUNvbmZpZ3VyYXRpb24gPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJBZG9iZSBBUEkgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHkgdXBkYXRlZFwiKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWxlY3RvckNoYW5nZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbiA9PSBcImdvVG9XZWJpbmFyXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Wm9vbVNldHRpbmdzICA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dHb1RvV2ViaW5hclNldHRpbmdzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93VGVhbXNTZXR0aW5ncyA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZih0aGlzLnNlbGVjdGVkT3B0aW9uID09IFwiem9vbVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1pvb21TZXR0aW5ncyAgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dHb1RvV2ViaW5hclNldHRpbmdzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RlYW1zU2V0dGluZ3MgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gPT0gXCJ0ZWFtc1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RlYW1zU2V0dGluZ3MgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dab29tU2V0dGluZ3MgID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0dvVG9XZWJpbmFyU2V0dGluZ3MgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQnJhbmRpbmdcclxuICAgIHB1YmxpYyBzZXRCcmFuZGluZ01vZGUoYnJhbmRpbmdNb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmJyYW5kaW5nTW9kZSA9IGJyYW5kaW5nTW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZE1lbnVJdGVtc1NldHRpbmdzKCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmdldE1lbnVJdGVtc0F2YWlsYWJpbGl0eVNldHRpbmdzKCkudGhlbihyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXNBdmFpbGFiaWxpdHkgPSByO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYXRhbG9nR2xvYmFsVmlzaWJpbGl0eSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51SXRlbXNBdmFpbGFiaWxpdHkgJiYgdGhpcy5tZW51SXRlbXNBdmFpbGFiaWxpdHkuc2hvd0NhdGFsb2c7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvdXJzZXNHbG9iYWxWaXNpYmlsaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVJdGVtc0F2YWlsYWJpbGl0eSAmJiB0aGlzLm1lbnVJdGVtc0F2YWlsYWJpbGl0eS5zaG93Q291cnNlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc0dsb2JhbFZpc2liaWxpdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUl0ZW1zQXZhaWxhYmlsaXR5ICYmIHRoaXMubWVudUl0ZW1zQXZhaWxhYmlsaXR5LnNob3dMZWFybmluZ1BhdGhzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNjdXNzaW9uQm9hcmRHbG9iYWxWaXNpYmlsaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVJdGVtc0F2YWlsYWJpbGl0eSAmJiB0aGlzLm1lbnVJdGVtc0F2YWlsYWJpbGl0eS5zaG93RGlzY3Vzc2lvbkJvYXJkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXRlcmlhbHNHbG9iYWxWaXNpYmlsaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVJdGVtc0F2YWlsYWJpbGl0eSAmJiB0aGlzLm1lbnVJdGVtc0F2YWlsYWJpbGl0eS5zaG93TWF0ZXJpYWxzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHF1aXp6ZXNHbG9iYWxWaXNpYmlsaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVJdGVtc0F2YWlsYWJpbGl0eSAmJiB0aGlzLm1lbnVJdGVtc0F2YWlsYWJpbGl0eS5zaG93UXVpenplcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNBbnlCVVNldHRpbmdFbmFibGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVJdGVtc0F2YWlsYWJpbGl0eSAmJiB0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmNvbmZpZ3VyZUJ1c2luZXNzVW5pdFNldHRpbmdzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEJ1c2luZXNzVW5pdFBhcmFtZXRlcnMoKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRQYXJhbWV0ZXJzKHRoaXMuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFBhcmFtZXRlcnMgPSByZXN1bHQgIT09IG51bGwgPyBhbmd1bGFyLmNvcHkocmVzdWx0KSA6IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVkaXRzTGlzdCA9IHRoaXMuYnVzaW5lc3NVbml0UGFyYW1ldGVycy5jcmVkaXRUeXBlcyAmJiB0aGlzLmJ1c2luZXNzVW5pdFBhcmFtZXRlcnMuY3JlZGl0VHlwZXMubGVuZ3RoID4gMCA/IHRoaXMuYnVzaW5lc3NVbml0UGFyYW1ldGVycy5jcmVkaXRUeXBlcy5zcGxpdChcIixcIikgOiBbXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRDcmVkaXRUeXBlc0F2YWlsYWJsZUZvckJ1c2luZXNzVW5pdCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1c2luZXNzVW5pdFBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJ1c2luZXNzVW5pdFBhcmFtZXRlcnMoKTogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRQYXJhbWV0ZXJzLmNyZWRpdFR5cGVzID0gdGhpcy5jcmVkaXRzTGlzdCAmJiB0aGlzLmNyZWRpdHNMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLmNyZWRpdHNMaXN0LmpvaW4oXCIsXCIpIDogXCJcIjtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFBhcmFtZXRlcnMuYWxsb3dDcmVkaXRzU2VsZlJlcG9ydGluZyA9IHRoaXMuYnVzaW5lc3NVbml0LmFsbG93Q3JlZGl0c1NlbGZSZXBvcnRpbmc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UudXBkYXRlQnVzaW5lc3NVbml0UGFyYW1ldGVycyh0aGlzLmJ1c2luZXNzVW5pdElkLCB0aGlzLmJ1c2luZXNzVW5pdFBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFBhcmFtZXRlcnMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU3VjY2Vzc2Z1bGx5IHNhdmVkXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRDcmVkaXRUeXBlc0F2YWlsYWJsZUZvckJ1c2luZXNzVW5pdCgpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVNlcnZpY2UuZ2V0QWN0aXZlUmVmZXJlbmNlRW50aXRpZXNGb3JTZWxlY3RvcihcImNyZWRpdFR5cGVzXCIsXHJcbiAgICAgICAgICAgIG5ldyBSZWZlcmVuY2VFbnRpdGllc1BhcmFtcyh1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCx1bmRlZmluZWQsIHRoaXMuYnVzaW5lc3NVbml0SWQsXHJcbiAgICAgICAgICAgICAgICBmYWxzZSksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUNyZWRpdFR5cGVzID0gcmVzdWx0Lm1hcChpID0+IGkubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWRpdHNMaXN0ID0gdGhpcy5jcmVkaXRzTGlzdC5maWx0ZXIocyA9PiB0aGlzLmF2YWlsYWJsZUNyZWRpdFR5cGVzLmluZGV4T2YocykgIT0gLTEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlQ3JlZGl0VHlwZXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFByb3ZpZGVycygpIHtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFByb3ZpZGVycygpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLmluaXRQcm92aWRlcnMocmVzdWx0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0UHJvdmlkZXJzKHByb3ZpZGVyczogQXJyYXk8SUxvZ29uUHJvdmlkZXJFeHRlbmRlZD4pIHtcclxuICAgICAgICB0aGlzLnByb3ZpZGVycyA9IG5ldyBBcnJheTxJTG9nb25Qcm92aWRlckV4dGVuZGVkPigpO1xyXG4gICAgICAgIGxldCBzc29BbGxvd2VkID0gZmFsc2U7XHJcbiAgICAgICAgcHJvdmlkZXJzLmZvckVhY2gocHJvdmlkZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYXV0b1Nzb1Byb3ZpZGVycyAmJiBhdXRvU3NvUHJvdmlkZXJzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgIGF1dG9Tc29Qcm92aWRlcnMuaW5kZXhPZihMb2dvblByb3ZpZGVyRW51bVtwcm92aWRlci5rZXldKSA+IC0xICYmICFzc29BbGxvd2VkKSB7XHJcbiAgICAgICAgICAgICAgICBzc29BbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnB1c2goe2tleTogXCJFWFRFUk5BTF9JRF9TU09cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTU09cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJFWFRFUk5BTFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZTogdGhpcy5idXNpbmVzc1VuaXQucHJvdmlkZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5idXNpbmVzc1VuaXQucHJvdmlkZXJzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmJ1c2luZXNzVW5pdC5wcm92aWRlcnMuaW5kZXhPZihcIkVYVEVSTkFMX0lEX1NTT1wiKSA+IC0xfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvdmlkZXIudHlwZSA9PSBcIkVYVEVSTkFMXCIpIHtcclxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLm5hbWUgPSBwcm92aWRlci5uYW1lLnJlcGxhY2UoXCJMb2dpbiB3aXRoIFwiLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLmlzQWN0aXZlID0gdGhpcy5idXNpbmVzc1VuaXQucHJvdmlkZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmJ1c2luZXNzVW5pdC5wcm92aWRlcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5idXNpbmVzc1VuaXQucHJvdmlkZXJzLmluZGV4T2YocHJvdmlkZXIua2V5KSA+IC0xO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMucHVzaCg8SUxvZ29uUHJvdmlkZXJFeHRlbmRlZD5wcm92aWRlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvQXV0aG9yaXplTmV0SW50ZWdyYXRpb25IZWxwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5vcGVuKHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCcjJylbMF0gKyBcIiNcIiArIHRoaXMubmV3c1JvdXRlci5oZWxwVXJsKE5ld3NLZXkuSEVMUF9BVVRIT1JJWkVfTkVUX1BBWU1FTlRfTUVUSE9EKSwgXCJfYmxhbmtcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9QYXlQYWxJbnRlZ3JhdGlvbkhlbHAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4odGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVswXSArIFwiI1wiICsgdGhpcy5uZXdzUm91dGVyLmhlbHBVcmwoTmV3c0tleS5IRUxQX1BBWV9QQUxfUEFZTUVOVF9NRVRIT0QpLCBcIl9ibGFua1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb01TVGVhbXNJbnRlZ3JhdGlvbkhlbHAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4odGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVswXSArIFwiI1wiICsgdGhpcy5uZXdzUm91dGVyLmhlbHBVcmwoTmV3c0tleS5IRUxQX01TX1RFQU1TX1dFQklOQVJfVFlQRSksIFwiX2JsYW5rXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvWm9vbUludGVncmF0aW9uSGVscCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiR3aW5kb3cub3Blbih0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnIycpWzBdICsgXCIjXCIgKyB0aGlzLm5ld3NSb3V0ZXIuaGVscFVybChOZXdzS2V5LkhFTFBfWk9PTSksIFwiX2JsYW5rXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vYmlsZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDk5MTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlQmlsbGluZ09yZGVyKG5ld1BsYW46IElCaWxsaW5nUGxhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCaWxsUGxhbiA9IG5ld1BsYW47XHJcbiAgICAgICAgJChcIiNhdXRob3JpemVOZXRNb2RhbFwiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdWNjZXNzQ2FsbGJhY2tcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwicGxhblwiLCBuZXdQbGFuLmlkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tOZXdQYXltZW50SWQoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1Y2Nlc3NDYWxsYmFja1wiKTtcclxuICAgICAgICBsZXQgdHJhbnNhY3Rpb25JZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XHJcbiAgICAgICAgbGV0IHBsYW5JZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwicGxhblwiKTtcclxuICAgICAgICB0aGlzLmJpbGxpbmdQbGFuU2VydmljZS5jcmVhdGVQYXltZW50UHJvZmlsZSh0aGlzLmJ1c2luZXNzVW5pdElkLCB0cmFuc2FjdGlvbklkLCBwbGFuSWQpXHJcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy4kd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXV0aG9yaXplTmV0Q2FsbGJhY2soKTogdm9pZCB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrTmV3UGF5bWVudElkKCksIDEwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RCaWxsaW5nUGxhbihuZXdQbGFuOiBJQmlsbGluZ1BsYW4pOiB2b2lkIHtcclxuICAgICAgICBpZiAobmV3UGxhbi5wbGFuQ29kZSA9PSBcIkZSRUVcIikge1xyXG4gICAgICAgICAgICAvLyBjYW5jZWxhdGlvblxyXG4gICAgICAgICAgICB0aGlzLmJpbGxpbmdQbGFuU2VydmljZS5jYW5jZWxTdWJzY3JpcHRpb24odGhpcy5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdXBncmFkZSBhbmQgZG93bmdyYWRlXHJcbiAgICAgICAgICAgIHRoaXMuYmlsbGluZ1BsYW5TZXJ2aWNlLnVwZGF0ZVN1YnNjcmlwdGlvbih0aGlzLmJ1c2luZXNzVW5pdElkLCBuZXdQbGFuKVxyXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy4kd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMoKSB7XHJcbiAgICAgICAgaWYgKCQoXCIjZnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXCIpLmhhc0NsYXNzKCdoaWRkZW4nKSkge1xyXG4gICAgICAgICAgICAkKFwiI2ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1wiKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChcIiNmcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd1VwZGF0ZVBsYW5Nb2RhbChuZXdQbGFuOiBJQmlsbGluZ1BsYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQmlsbFBsYW4gPSBuZXdQbGFuO1xyXG4gICAgICAgIGlmIChuZXdQbGFuLnBsYW5OYW1lICE9PSAnRnJlZScpIHtcclxuICAgICAgICAgICAgdGhpcy51cGdyYWRlQmlsbGluZ1BsYW4gPSB0aGlzLmN1cnJlbnRCaWxsUGxhbi5wcmljZSA8IG5ld1BsYW4ucHJpY2U7XHJcbiAgICAgICAgICAgICQoXCIjdXBkYXRlUGxhbk1vZGFsXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxsYXRpb25CaWxsaW5nUGxhbiA9IHRoaXMuY3VycmVudEJpbGxQbGFuLnVzZXJSZWNvcmRzIDw9IDU7XHJcbiAgICAgICAgICAgICQoXCIjY2FuY2VsbGF0aW9uUGxhbk1vZGFsXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVBvcHVwKGVsZW1lbnRJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgJChcIiNcIiArIGVsZW1lbnRJZCkubW9kYWwoXCJoaWRlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEF2YWlsYWJsZUxvY2FsZXMoKTogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmdldEF2YWlsYWJsZUxvY2FsZXMoKS50aGVuKGxvY2FsZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxvY2FsZXMgPSBsb2NhbGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7QXV0aENvcmVNb2R1bGV9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoQ29yZU1vZHVsZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5TW9kdWxlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcbmltcG9ydCB7QnVzaW5lc3NVbml0c0NvbnRyb2xsZXJ9IGZyb20gXCIuL0J1c2luZXNzVW5pdHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7QnVzaW5lc3NVbml0c0NyZWF0ZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9CdXNpbmVzc1VuaXRzQ3JlYXRlRWRpdENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4vQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCB2YXIgQnVzaW5lc3NVbml0c01vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgLm1vZHVsZShcImJ1c2luZXNzVW5pdHNcIiwgW1xyXG4gICAgICAgIEF1dGhDb3JlTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgU2VjdXJpdHlNb2R1bGUubmFtZSxcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWUsXHJcbiAgICBdKVxyXG4gICAgLnNlcnZpY2UoQnVzaW5lc3NVbml0c1NlcnZpY2UuTkFNRSwgQnVzaW5lc3NVbml0c1NlcnZpY2UpXHJcbiAgICAuY29udHJvbGxlcihCdXNpbmVzc1VuaXRzQ29udHJvbGxlci5OQU1FLCBCdXNpbmVzc1VuaXRzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEJ1c2luZXNzVW5pdHNDcmVhdGVFZGl0Q29udHJvbGxlci5OQU1FLCBCdXNpbmVzc1VuaXRzQ3JlYXRlRWRpdENvbnRyb2xsZXIpO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJ1c2luZXNzVW5pdH0gZnJvbSBcIi4vbW9kZWxzL0lCdXNpbmVzc1VuaXRcIjtcclxuaW1wb3J0IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnID0gYW5ndWxhci5JSHR0cFByb21pc2VDYWxsYmFja0FyZztcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge0lDdXN0b21CcmFuZGluZ30gZnJvbSBcIi4vbW9kZWxzL0lDdXN0b21CcmFuZGluZ1wiO1xyXG5pbXBvcnQge0lQYXlQYWxDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9tb2RlbHMvSVBheVBhbENvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtJV2ViaW5hclNldHRpbmdzfSBmcm9tIFwiLi9tb2RlbHMvSVdlYmluYXJTZXR0aW5nc1wiO1xyXG5pbXBvcnQge0lQb3dlckJpQ29uZmlndXJhdGlvbn0gZnJvbSBcIi4vbW9kZWxzL0lQb3dlckJpQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge0lNZW51SXRlbVNldHRpbmdzfSBmcm9tIFwiLi9tb2RlbHMvSU1lbnVJdGVtU2V0dGluZ3NcIjtcclxuaW1wb3J0IHtJWm9vbVNldHRpbmdzfSBmcm9tIFwiLi9tb2RlbHMvSVpvb21TZXR0aW5nc1wiO1xyXG5pbXBvcnQge0lCdXNpbmVzc1VuaXRQYXJhbWV0ZXJzfSBmcm9tIFwiLi9tb2RlbHMvSUJ1c2luZXNzVW5pdFBhcmFtZXRlcnNcIjtcclxuaW1wb3J0IHtJU2VjdXJpdHlDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9tb2RlbHMvSVNlY3VyaXR5Q29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge0lBdXRob3JpemVOZXRDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9tb2RlbHMvSUF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtJVGVhbXNTZXR0aW5nc30gZnJvbSBcIi4vbW9kZWxzL0lUZWFtc1NldHRpbmdzXCI7XHJcbmltcG9ydCB7SVRlYW1zSW5zdHJ1Y3RvclNldHRpbmdzfSBmcm9tIFwiLi9tb2RlbHMvSVRlYW1zSW5zdHJ1Y3RvclNldHRpbmdzXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtJQWRvYmVDcmVkZW50aWFsc30gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lBZG9iZUNyZWRlbnRpYWxzXCI7XHJcbmltcG9ydCB7SVJlY2VpcHRUZW1wbGF0ZX0gZnJvbSBcIi4vbW9kZWxzL0lSZWNlaXB0VGVtcGxhdGVcIjtcclxuaW1wb3J0IHtBcHBQcm9wZXJ0aWVzfSBmcm9tIFwiLi4vdXRpbHMvQXBwUHJvcGVydGllc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1c2luZXNzVW5pdHNTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiYnVzaW5lc3NVbml0LkJ1c2luZXNzVW5pdHNTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY2VcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgXCJVcGxvYWRcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjZTogYW5ndWxhci5JU0NFU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdXBsb2FkZXI6IG5nLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEFjdGl2ZUJ1c2luZXNzVW5pdChidXNpbmVzc1VuaXRJZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIGlzQWN0aXZlOiBib29sZWFuKTogYW5ndWxhci5JUHJvbWlzZTxJQnVzaW5lc3NVbml0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvOmJ1c2luZXNzVW5pdElkL2FjdGl2ZT9pc0FjdGl2ZT06aXNBY3RpdmUmdmVyc2lvbj06dmVyc2lvblwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp2ZXJzaW9uXCIsIHZlcnNpb24pXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppc0FjdGl2ZVwiLCBpc0FjdGl2ZSkuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxJQnVzaW5lc3NVbml0PikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGUoYnVzaW5lc3NVbml0OiBJQnVzaW5lc3NVbml0KTogYW5ndWxhci5JUHJvbWlzZTxJQnVzaW5lc3NVbml0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9idXNpbmVzc1VuaXRzXCIpLCBidXNpbmVzc1VuaXQpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPElCdXNpbmVzc1VuaXQ+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShidXNpbmVzc1VuaXQ6IElCdXNpbmVzc1VuaXQpOiBhbmd1bGFyLklQcm9taXNlPElCdXNpbmVzc1VuaXQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvYnVzaW5lc3NVbml0c1wiKSwgYnVzaW5lc3NVbml0KVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxJQnVzaW5lc3NVbml0PikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCdXNpbmVzc1VuaXRCeUlkKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElCdXNpbmVzc1VuaXQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy86YnVzaW5lc3NVbml0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxJQnVzaW5lc3NVbml0PikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCdXNpbmVzc1VuaXRzRm9yU2VsZWN0b3IoKTogYW5ndWxhci5JUHJvbWlzZTxJQnVzaW5lc3NVbml0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvZm9yU2VsZWN0b3JcIikpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPElCdXNpbmVzc1VuaXQ+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJ1c2luZXNzVW5pdHNEZWFjdGl2YXRlRm9yU2VsZWN0b3IoKTogYW5ndWxhci5JUHJvbWlzZTxJQnVzaW5lc3NVbml0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvZGVhY3RpdmF0ZUZvclNlbGVjdG9yXCIpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxJQnVzaW5lc3NVbml0PikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVCdXNpbmVzc1VuaXRCdW5kbGUoYnVzaW5lc3NVbml0SWQ6IG51bWJlciwgYnVzaW5lc3NVbml0VmVyc2lvbjogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQnVuZGxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9idW5kbGVzP2J1c2luZXNzVW5pdFZlcnNpb249OmJ1c2luZXNzVW5pdFZlcnNpb25cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0VmVyc2lvblwiLCBidXNpbmVzc1VuaXRWZXJzaW9uKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxJQnVuZGxlPikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVFZGl0Q3VzdG9tQnJhbmRpbmdTZXR0aW5ncyhjdXN0b21CcmFuZGluZzogSUN1c3RvbUJyYW5kaW5nKTogYW5ndWxhci5JUHJvbWlzZTxJQ3VzdG9tQnJhbmRpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvY3VzdG9tQnJhbmRpbmdcIiksIGN1c3RvbUJyYW5kaW5nKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxJQ3VzdG9tQnJhbmRpbmc+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUVkaXRTeXN0ZW1CcmFuZGluZ1NldHRpbmdzKGN1c3RvbUJyYW5kaW5nOiBJQ3VzdG9tQnJhbmRpbmcpOiBhbmd1bGFyLklQcm9taXNlPElDdXN0b21CcmFuZGluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvYnVzaW5lc3NVbml0cy9zeXN0ZW1CcmFuZGluZ1wiKSwgY3VzdG9tQnJhbmRpbmcpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPElDdXN0b21CcmFuZGluZz4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UGF5UGFsQ29uZmlndXJhdGlvbihidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUGF5UGFsQ29uZmlndXJhdGlvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9wYXlQYWxcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN1cml0eUNvbmZpZ3VyYXRpb24oYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVNlY3VyaXR5Q29uZmlndXJhdGlvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9zZWN1cml0eVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVNlY3VyaXR5Q29uZmlndXJhdGlvbihidXNpbmVzc1VuaXRJZDogbnVtYmVyLCBzZWN1cml0eUNvbmZpZ3VyYXRpb246IElTZWN1cml0eUNvbmZpZ3VyYXRpb24pOiBhbmd1bGFyLklQcm9taXNlPElTZWN1cml0eUNvbmZpZ3VyYXRpb24+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy86YnVzaW5lc3NVbml0SWQvc2VjdXJpdHlcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBzZWN1cml0eUNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdD0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlTWVudUl0ZW1zU2V0dGluZ3MoYnVzaW5lc3NVbml0SWQ6IG51bWJlciwgdmlzaWJpbGl0eVNldHRpbmdzOiBJTWVudUl0ZW1TZXR0aW5ncyk6IGFuZ3VsYXIuSVByb21pc2U8SU1lbnVJdGVtU2V0dGluZ3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy86YnVzaW5lc3NVbml0SWQvbWVudUl0ZW1zXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgdmlzaWJpbGl0eVNldHRpbmdzKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQ9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVN5c3RlbU1lbnVJdGVtc1Zpc2liaWxpdHlTZXR0aW5ncyh2aXNpYmlsaXR5U2V0dGluZ3M6IElNZW51SXRlbVNldHRpbmdzKTogYW5ndWxhci5JUHJvbWlzZTxJTWVudUl0ZW1TZXR0aW5ncz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL3N5c3RlbS9tZW51SXRlbXNcIiksIHZpc2liaWxpdHlTZXR0aW5ncylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0PT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVQYXlQYWxDb25maWd1cmF0aW9uKGJ1c2luZXNzVW5pdElkOiBudW1iZXIsIHBheVBhbENvbmZpZ3VyYXRpb246IElQYXlQYWxDb25maWd1cmF0aW9uKTogYW5ndWxhci5JUHJvbWlzZTxJUGF5UGFsQ29uZmlndXJhdGlvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9wYXlQYWxcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBwYXlQYWxDb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVQYXlQYWxDb25maWd1cmF0aW9uKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9wYXlQYWxcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYXlQYWxDbGllbnRJZChidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy9wYXlQYWwvY2xpZW50SWQ/YnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCAoYnVzaW5lc3NVbml0SWQhPW51bGwpID8gYnVzaW5lc3NVbml0SWQgOiBcIlwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRXZWJpbmFyU2V0dGluZ0J5QnVzaW5lc3NVbml0KGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElXZWJpbmFyU2V0dGluZ3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy86YnVzaW5lc3NVbml0SWQvd2ViaW5hclwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPElXZWJpbmFyU2V0dGluZ3M+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVXZWJpbmFyU2V0dGluZ0ZvckJ1c2luZXNzVW5pdCh3ZWJpbmFyU2V0dGluZzogSVdlYmluYXJTZXR0aW5ncyk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL3dlYmluYXJcIiksIHdlYmluYXJTZXR0aW5nKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxhbnk+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVXZWJpbmFySW5zdHJ1Y3RvclNldHRpbmdzKHdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ3M6IElXZWJpbmFyU2V0dGluZ3MpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvYnVzaW5lc3NVbml0cy93ZWJpbmFyL2luc3RydWN0b3JcIiksIHdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ3MpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlSW5zdHJ1Y3RvclNldHRpbmdzKHdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ0lkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL3dlYmluYXIvaW5zdHJ1Y3Rvci86d2ViaW5hckluc3RydWN0b3JTZXR0aW5nSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOndlYmluYXJJbnN0cnVjdG9yU2V0dGluZ0lkXCIsIHdlYmluYXJJbnN0cnVjdG9yU2V0dGluZ0lkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxhbnk+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrV2ViaW5hckluc3RydWN0b3JDb25uZWN0aW9uKHdlYmluYXJJbnN0cnVjdG9ySWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL3dlYmluYXIvaW5zdHJ1Y3Rvci86d2ViaW5hckluc3RydWN0b3JJZC9jaGVja0Nvbm5lY3Rpb25cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOndlYmluYXJJbnN0cnVjdG9ySWRcIiwgd2ViaW5hckluc3RydWN0b3JJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8Ym9vbGVhbj4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tXZWJpbmFyQ29ubmVjdGlvbihidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvOmJ1c2luZXNzVW5pdElkL3dlYmluYXIvY2hlY2tDb25uZWN0aW9uXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8Ym9vbGVhbj4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tQYXlQYWxDb3JyZWN0RGF0YShidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPntcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvOmJ1c2luZXNzVW5pdElkL3BheVBhbC9jaGVja0Nvbm5lY3Rpb25cIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxib29sZWFuPikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL2dsb2JhbC9wYXlQYWwvY2hlY2tDb25uZWN0aW9uXCIpKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8Ym9vbGVhbj4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFBvd2VyQmlDb25maWd1cmF0aW9uKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElQb3dlckJpQ29uZmlndXJhdGlvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9wb3dlcmJpXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TWVudUl0ZW1zU2V0dGluZ3MoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SU1lbnVJdGVtU2V0dGluZ3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcImFwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9tZW51SXRlbXNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTeXN0ZW1NZW51SXRlbXNTZXR0aW5ncygpOiBhbmd1bGFyLklQcm9taXNlPElNZW51SXRlbVNldHRpbmdzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCJhcGkvYnVzaW5lc3NVbml0cy9zeXN0ZW0vbWVudUl0ZW1zXCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVQb3dlckJpQ29uZmlndXJhdGlvbihidXNpbmVzc1VuaXRJZDogbnVtYmVyLCBsaW5rOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9wb3dlcmJpXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwge2xpbms6IGxpbmt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVMaW5rKGJ1c2luZXNzVW5pdElkOm51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvOmJ1c2luZXNzVW5pdElkL3Bvd2VyYmlcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRab29tU2V0dGluZ3MoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVpvb21TZXR0aW5ncz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiYXBpL2J1c2luZXNzVW5pdHMvOmJ1c2luZXNzVW5pdElkL3pvb21cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVab29tU2V0dGluZ3MoYnVzaW5lc3NVbml0SWQ6IG51bWJlciwgem9vbVNldHRpbmdzOiBJWm9vbVNldHRpbmdzKTogYW5ndWxhci5JUHJvbWlzZTxJWm9vbVNldHRpbmdzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvOmJ1c2luZXNzVW5pdElkL3pvb21cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB6b29tU2V0dGluZ3MpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdD0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVpvb21JbnN0cnVjdG9yU2V0dGluZ3Moem9vbUluc3RydWN0b3JTZXR0aW5nczogSVpvb21TZXR0aW5ncyk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL3pvb20vaW5zdHJ1Y3RvclwiKSwgem9vbUluc3RydWN0b3JTZXR0aW5ncylcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8YW55PikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVab29tSW5zdHJ1Y3RvclNldHRpbmdzKHpvb21JbnN0cnVjdG9yU2V0dGluZ0lkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL3pvb20vaW5zdHJ1Y3Rvci86em9vbUluc3RydWN0b3JTZXR0aW5nSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnpvb21JbnN0cnVjdG9yU2V0dGluZ0lkXCIsIHpvb21JbnN0cnVjdG9yU2V0dGluZ0lkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxhbnk+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrWm9vbUluc3RydWN0b3JDb25uZWN0aW9uKHpvb21JbnN0cnVjdG9ySWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL3pvb20vaW5zdHJ1Y3Rvci86em9vbUluc3RydWN0b3JJZC9jaGVja0Nvbm5lY3Rpb25cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnpvb21JbnN0cnVjdG9ySWRcIiwgem9vbUluc3RydWN0b3JJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8Ym9vbGVhbj4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tab29tQ29ubmVjdGlvbihidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvOmJ1c2luZXNzVW5pdElkL3pvb20vY2hlY2tDb25uZWN0aW9uXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8Ym9vbGVhbj4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QlVEb21haW5OYW1lKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiYXBpL2J1c2luZXNzVW5pdHMvOmJ1c2luZXNzVW5pdElkL2RvbWFpblwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJ1c2luZXNzVW5pdEJ5RG9tYWluKGRvbWFpbjogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcImFwaS9idXNpbmVzc1VuaXRzLzpkb21haW4vYnVzaW5lc3NVbml0XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpkb21haW5cIiwgZG9tYWluKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxhbnk+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJ1c2luZXNzVW5pdFBhcmFtZXRlcnMoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IG5nLklQcm9taXNlPElCdXNpbmVzc1VuaXRQYXJhbWV0ZXJzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL2J1c2luZXNzVW5pdHMvJHtidXNpbmVzc1VuaXRJZH0vcGFyYW1ldGVyc2ApXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVCdXNpbmVzc1VuaXRQYXJhbWV0ZXJzKGJ1c2luZXNzVW5pdElkOiBudW1iZXIsIGJ1c2luZXNzVW5pdFBhcmFtZXRlcnM6IElCdXNpbmVzc1VuaXRQYXJhbWV0ZXJzKTogbmcuSVByb21pc2U8SUJ1c2luZXNzVW5pdFBhcmFtZXRlcnM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvYnVzaW5lc3NVbml0cy8ke2J1c2luZXNzVW5pdElkfS9wYXJhbWV0ZXJzYCksXHJcbiAgICAgICAgICAgIGJ1c2luZXNzVW5pdFBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJ1c2luZXNzVW5pdFRhZ3MoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL2J1c2luZXNzVW5pdHMvJHtidXNpbmVzc1VuaXRJZH0vYnVzaW5lc3NVbml0c1RhZ3NgKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvLy8vIEF1dGhvcml6ZU5ldCBtZXRob2RzXHJcbiAgICBwdWJsaWMgZ2V0QXV0aG9yaXplTmV0Q29uZmlndXJhdGlvbihidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogbmcuSVByb21pc2U8SUF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb24+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgL2FwaS9idXNpbmVzc1VuaXRzLyR7YnVzaW5lc3NVbml0SWR9L2F1dGhvcml6ZU5ldGApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdXRob3JpemVOZXRFbnZpcm9ubWVudFR5cGUoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IG5nLklQcm9taXNlPFN0cmluZz4ge1xyXG4gICAgICAgIGlmIChidXNpbmVzc1VuaXRJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL2J1c2luZXNzVW5pdHMvJHtidXNpbmVzc1VuaXRJZH0vYXV0aG9yaXplTmV0L2Vudmlyb25tZW50VHlwZWApKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgL2FwaS9idXNpbmVzc1VuaXRzL2dsb2JhbC9hdXRob3JpemVOZXQvZW52aXJvbm1lbnRUeXBlYCkpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQXV0aG9yaXplTmV0Q29uZmlndXJhdGlvbihidXNpbmVzc1VuaXRJZDogbnVtYmVyLCBjb25maWd1cmF0aW9uOiBJQXV0aG9yaXplTmV0Q29uZmlndXJhdGlvbik6IG5nLklQcm9taXNlPElBdXRob3JpemVOZXRDb25maWd1cmF0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvOmJ1c2luZXNzVW5pdElkL2F1dGhvcml6ZU5ldFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIGNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZUF1dGhvcml6ZU5ldENvbmZpZ3VyYXRpb24oYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IG5nLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9hdXRob3JpemVOZXRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja0F1dGhvcml6ZU5ldENvcnJlY3REYXRhKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgaWYgKGJ1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9hdXRob3JpemVOZXQvY2hlY2tDb25uZWN0aW9uXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8Ym9vbGVhbj4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvYnVzaW5lc3NVbml0cy9nbG9iYWwvYXV0aG9yaXplTmV0L2NoZWNrQ29ubmVjdGlvblwiKSlcclxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGJvb2xlYW4+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUZWFtc1NldHRpbmdzKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElUZWFtc1NldHRpbmdzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCJhcGkvYnVzaW5lc3NVbml0cy86YnVzaW5lc3NVbml0SWQvdGVhbXNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gPElUZWFtc1NldHRpbmdzPnJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVGVhbXNTZXR0aW5ncyhidXNpbmVzc1VuaXRJZDogbnVtYmVyLCB0ZWFtc1NldHRpbmdzOiBJVGVhbXNTZXR0aW5ncyk6IGFuZ3VsYXIuSVByb21pc2U8SVRlYW1zU2V0dGluZ3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy86YnVzaW5lc3NVbml0SWQvdGVhbXNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB0ZWFtc1NldHRpbmdzKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQ9PiA8SVRlYW1zU2V0dGluZ3M+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVRlYW1zSW5zdHJ1Y3RvclNldHRpbmdzKHRlYW1zSW5zdHJ1Y3RvclNldHRpbmdzOiBJVGVhbXNJbnN0cnVjdG9yU2V0dGluZ3MpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvYnVzaW5lc3NVbml0cy90ZWFtcy9pbnN0cnVjdG9yXCIpLCB0ZWFtc0luc3RydWN0b3JTZXR0aW5ncylcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8YW55PikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVUZWFtc0luc3RydWN0b3JTZXR0aW5ncyh0ZWFtc0luc3RydWN0b3JTZXR0aW5nSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvdGVhbXMvaW5zdHJ1Y3Rvci86dGVhbXNJbnN0cnVjdG9yU2V0dGluZ0lkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp0ZWFtc0luc3RydWN0b3JTZXR0aW5nSWRcIiwgdGVhbXNJbnN0cnVjdG9yU2V0dGluZ0lkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxhbnk+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrVGVhbXNJbnN0cnVjdG9yQ29ubmVjdGlvbih0ZWFtc0luc3RydWN0b3JJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvdGVhbXMvaW5zdHJ1Y3Rvci86dGVhbXNJbnN0cnVjdG9ySWQvY2hlY2tDb25uZWN0aW9uXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp0ZWFtc0luc3RydWN0b3JJZFwiLCB0ZWFtc0luc3RydWN0b3JJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8Ym9vbGVhbj4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QnVzaW5lc3NVbml0QnlJZHMoYnVzaW5lc3NVbml0SWRzOiBudW1iZXJbXSk6IGFuZ3VsYXIuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGxldCBxdWVyeTogU3RyaW5nQnVpbGRlciAgPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiL2FwaS9idXNpbmVzc1VuaXRzL2lzQWxsb3dTZWxmU2lnblVwP1wiKTtcclxuICAgICAgICBidXNpbmVzc1VuaXRJZHMuZm9yRWFjaChidSA9PiBxdWVyeS5hZGQoXCJidT1cIiArIGJ1KSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKHF1ZXJ5LmJ1aWxkKCkpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8Ym9vbGVhbj4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWRvYmVDcmVkZW50aWFscyhidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+e1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9hZG9iZUNyZWRlbnRpYWxzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRBZG9iZUNyZWRlbnRpYWxzKGJ1c2luZXNzVW5pdElkOiBudW1iZXIsIGFkb2JlQ3JlZGVudGlhbHM6IElBZG9iZUNyZWRlbnRpYWxzKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+e1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy86YnVzaW5lc3NVbml0SWQvYWRvYmVDcmVkZW50aWFsc1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIGFkb2JlQ3JlZGVudGlhbHMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFkb2JlQ2xpZW50SWRCeURvbWFpbihkb21haW46IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvYnlEb21haW4vOmRvbWFpbi9hZG9iZUNyZWRlbnRpYWxzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpkb21haW5cIiwgZG9tYWluKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRSZWNlaXB0VGVtcGxhdGUoaWQ6IChyZWNlaXB0VGVtcGxhdGUpID0+IHZvaWQpOiBhbmd1bGFyLklQcm9taXNlPElSZWNlaXB0VGVtcGxhdGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy9yZWNlaXB0LzppZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVjZWlwdFRlbXBsYXRlQnlCVUlkKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxJUmVjZWlwdFRlbXBsYXRlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvcmVjZWlwdC9ieUJ1c2luZXNzVW5pdC86YnVzaW5lc3NVbml0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVJlY2VpcHRUZW1wbGF0ZShpZDogbnVtYmVyLCByZWNlaXB0VGVtcGxhdGU6IElSZWNlaXB0VGVtcGxhdGUpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy9yZWNlaXB0LzppZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpLnNlcnZpY2UoKSwgcmVjZWlwdFRlbXBsYXRlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVSZWNlaXB0VGVtcGxhdGUocmVjZWlwdFRlbXBsYXRlOiBJUmVjZWlwdFRlbXBsYXRlKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL3JlY2VpcHRcIikuc2VydmljZSgpLCByZWNlaXB0VGVtcGxhdGUpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwbG9hZFJlY2VpcHRUZW1wbGF0ZShyZWNlaXB0VGVtcGxhdGVJZDogbnVtYmVyLCBmaWxlOiBGaWxlKTogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGFuZ3VsYXIuY29weSh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL3JlY2VpcHQvOmlkL3VwbG9hZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCByZWNlaXB0VGVtcGxhdGVJZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgICAgIGZpbGU6IGZpbGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZVJlY2VpcHRUZW1wbGF0ZShpZDogbnVtYmVyKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvcmVjZWlwdC86aWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0F2YWlsYWJsZUNyZWF0aW5nTmV3VXNlckZvckZyZWVQbGFuKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL2NoZWNrQnVzaW5lc3NVbml0Q3JlYXRlTmV3VXNlci86YnVzaW5lc3NVbml0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCdXNpbmVzc1VuaXRzV2l0aEZyZWVQbGFuKGJ1c2luZXNzVW5pdElkczogQXJyYXk8bnVtYmVyPik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvZnJlZVBsYW5CdXNpbmVzc1VuaXRzXCIpLFxyXG4gICAgICAgICAgICB7cGFyYW1zOiB7YnVzaW5lc3NVbml0SWRzOiBidXNpbmVzc1VuaXRJZHN9fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNGcmVlQnVzaW5lc3NVbml0c0Z1bGwoYnVzaW5lc3NVbml0SWRzOiBBcnJheTxudW1iZXI+KTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvYnVzaW5lc3NVbml0cy9pc0ZyZWVCdXNpbmVzc1VuaXRzRnVsbFwiKSxcclxuICAgICAgICAgICAge3BhcmFtczoge2J1c2luZXNzVW5pdElkczogYnVzaW5lc3NVbml0SWRzfX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEF2YWlsYWJsZVBsYWNlRm9yRnJlZUJ1KGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL2dldEF2YWlsYWJsZVBsYWNlRm9yRnJlZUJ1LzpidXNpbmVzc1VuaXRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrRnJlZVBsYW5PbkJ1c2luZXNzVW5pdChidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy9jaGVja0ZyZWVQbGFuT25CdXNpbmVzc1VuaXQvOmJ1c2luZXNzVW5pdElkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tFeGlzdGVuY2VPZkRvbWFpbkluQXp1cmUoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idXNpbmVzc1VuaXRzLzpidXNpbmVzc1VuaXRJZC9jaGVja0RvbWFpblwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGJvb2xlYW4+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFsbEJ1RG9tYWlucygpOiBhbmd1bGFyLklQcm9taXNlPE1hcDxudW1iZXIsIHN0cmluZz4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYnVzaW5lc3NVbml0cy9hbGxEb21haW5zXCIpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPE1hcDxudW1iZXIsIHN0cmluZz4+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lDZXJ0aWZpY2F0ZVRlbXBsYXRlfSBmcm9tIFwiLi9tb2RlbHMvSUNlcnRpZmljYXRlVGVtcGxhdGVcIjtcclxuaW1wb3J0IHtJQ291cnNlQ2VydGlmaWNhdGVUZW1wbGF0ZX0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VDZXJ0aWZpY2F0ZVRlbXBsYXRlXCI7XHJcbmltcG9ydCB7SUV4dGVuZGVkQ2VydGlmaWNhdGVUZW1wbGF0ZX0gZnJvbSBcIi4uL2NvdXJzZXMvQ291cnNlQ3JlYXRlRWRpdENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZVRlbXBsYXRlfSBmcm9tIFwiLi9tb2RlbHMvSUxlYXJuaW5nUGF0aENlcnRpZmljYXRlVGVtcGxhdGVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDZXJ0aWZpY2F0ZVNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjZXJ0aWZpY2F0ZXMuQ2VydGlmaWNhdGVTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFwiVXBsb2FkXCJcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogbmcuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogbmcuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR1cGxvYWRlcjogbmcuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QWN0aXZlRW50aXR5KGlkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgaXNBY3RpdmU6IGJvb2xlYW4pOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvY2VydGlmaWNhdGVzL2VudGl0eS86aWQ/aXNBY3RpdmU9OmlzQWN0aXZlJnZlcnNpb249OnZlcnNpb25cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dmVyc2lvblwiLCB2ZXJzaW9uKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aXNBY3RpdmVcIiwgaXNBY3RpdmUpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2VydGlmaWNhdGVUZW1wbGF0ZShpZDogbnVtYmVyKTogbmcuSVByb21pc2U8SUNlcnRpZmljYXRlVGVtcGxhdGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY2VydGlmaWNhdGVzLzppZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQ2VydGlmaWNhdGVUZW1wbGF0ZShpZDogbnVtYmVyLCBjZXJ0aWZpY2F0ZVRlbXBsYXRlOiBJQ2VydGlmaWNhdGVUZW1wbGF0ZSk6IG5nLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jZXJ0aWZpY2F0ZXMvOmlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBpZCkuc2VydmljZSgpLCBjZXJ0aWZpY2F0ZVRlbXBsYXRlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVDZXJ0aWZpY2F0ZVRlbXBsYXRlKGNlcnRpZmljYXRlVGVtcGxhdGU6IElDZXJ0aWZpY2F0ZVRlbXBsYXRlKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jZXJ0aWZpY2F0ZXNcIikuc2VydmljZSgpLCBjZXJ0aWZpY2F0ZVRlbXBsYXRlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGxvYWRDZXJ0aWZpY2F0ZVRlbXBsYXRlKGNlcnRpZmljYXRlVGVtcGxhdGVJZDogbnVtYmVyLCBmaWxlOiBGaWxlKTogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGFuZ3VsYXIuY29weSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jZXJ0aWZpY2F0ZXMvOmlkL3VwbG9hZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBjZXJ0aWZpY2F0ZVRlbXBsYXRlSWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRBY3RpdmVDZXJ0aWZpY2F0ZVRlbXBsYXRlKGlkOiBudW1iZXIsIGlzQWN0aXZlOiBib29sZWFuKTogbmcuSVByb21pc2U8SUNlcnRpZmljYXRlVGVtcGxhdGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvY2VydGlmaWNhdGVzLzppZC86aXNBY3RpdmVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aXNBY3RpdmVcIiwgaXNBY3RpdmUpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvd25sb2FkQ2VydGlmaWNhdGUocGFyYW1ldGVyczogYW55LCByZXBvcnRUeXBlOiBzdHJpbmcpOiBuZy5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9yZXBvcnRzL2Rvd25sb2FkVG9rZW4vOnJlcG9ydFR5cGVcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpyZXBvcnRUeXBlXCIsIHJlcG9ydFR5cGUpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLCB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKS50aGVuKChyZXN1bHQ6IGFueSkgPT4gdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9kb3dubG9hZC86dG9rZW5cIikucGFyYW0oXCI6dG9rZW5cIiwgcmVzdWx0LmRhdGEudG9rZW4pLnNlcnZpY2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZENlcnRpZmljYXRlVGVtcGxhdGVUb0NvdXJzZShjb3Vyc2VDZXJ0aWZpY2F0ZVRlbXBsYXRlOiBJQ291cnNlQ2VydGlmaWNhdGVUZW1wbGF0ZSk6IG5nLklQcm9taXNlPElDb3Vyc2VDZXJ0aWZpY2F0ZVRlbXBsYXRlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY2VydGlmaWNhdGVzL2FkZENlcnRpZmljYXRlVGVtcGxhdGVUb0NvdXJzZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSwgY291cnNlQ2VydGlmaWNhdGVUZW1wbGF0ZSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZUNlcnRpZmljYXRlVGVtcGxhdGVGcm9tQ291cnNlKGNlcnRpZmljYXRlVGVtcGxhdGVJZDogbnVtYmVyLCBjb3Vyc2VJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9jZXJ0aWZpY2F0ZXMvZGVsZXRlQ2VydGlmaWNhdGVUZW1wbGF0ZUZyb21Db3Vyc2U/Y2VydGlmaWNhdGVUZW1wbGF0ZUlkPTpjZXJ0aWZpY2F0ZVRlbXBsYXRlSWQmY291cnNlSWQ9OmNvdXJzZUlkXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Y2VydGlmaWNhdGVUZW1wbGF0ZUlkXCIsIGNlcnRpZmljYXRlVGVtcGxhdGVJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDZXJ0aWZpY2F0ZVRlbXBsYXRlc0ZvckNvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogbmcuSVByb21pc2U8QXJyYXk8SUNlcnRpZmljYXRlVGVtcGxhdGU+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9jZXJ0aWZpY2F0ZXMvY291cnNlLzpjb3Vyc2VJZC90ZW1wbGF0ZXNcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlQ2VydGlmaWNhdGVUZW1wbGF0ZXMoY291cnNlSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPEFycmF5PElDb3Vyc2VDZXJ0aWZpY2F0ZVRlbXBsYXRlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY2VydGlmaWNhdGVzL2NvdXJzZS86Y291cnNlSWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQ2VydGlmaWNhdGVUZW1wbGF0ZXNGb3JDb3Vyc2UoY291cnNlSWQ6IG51bWJlciwgY2VydGlmaWNhdGVUZW1wbGF0ZXM6IEFycmF5PElFeHRlbmRlZENlcnRpZmljYXRlVGVtcGxhdGU+KTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9jZXJ0aWZpY2F0ZXMvY291cnNlLzpjb3Vyc2VJZC91cGRhdGVDZXJ0aWZpY2F0ZVRlbXBsYXRlc1wiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSwgY2VydGlmaWNhdGVUZW1wbGF0ZXMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEF2YWlsYWJsZUNlcnRpZmljYXRlVGVtcGxhdGVzRm9yQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxBcnJheTxJQ2VydGlmaWNhdGVUZW1wbGF0ZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL2NlcnRpZmljYXRlcy9jb3Vyc2UvOmNvdXJzZUlkL2F2YWlsYWJsZUNlcnRpZmljYXRlVGVtcGxhdGVzXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpXHJcbiAgICAgICAgKS50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEF2YWlsYWJsZUNlcnRpZmljYXRlVGVtcGxhdGVzRm9yQnVzaW5lc3NVbml0KGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxBcnJheTxJQ2VydGlmaWNhdGVUZW1wbGF0ZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL2NlcnRpZmljYXRlcy9idXNpbmVzc1VuaXQvYXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXM/YnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQgPyBidXNpbmVzc1VuaXRJZCA6IFwiXCIpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpXHJcbiAgICAgICAgKS50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZXNGb3JDZXJ0aWZpY2F0ZVRlbXBsYXRlKGNlcnRpZmljYXRlSWQ6IG51bWJlcik6ICBuZy5JUHJvbWlzZTxBcnJheTxJQ291cnNlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY2VydGlmaWNhdGVzLzppZC9jb3Vyc2VzXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgY2VydGlmaWNhdGVJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVUZW1wbGF0ZXMobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPEFycmF5PElMZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZVRlbXBsYXRlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY2VydGlmaWNhdGVzL2xlYXJuaW5nUGF0aC86bGVhcm5pbmdQYXRoSWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCBsZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXNGb3JMZWFybmluZ1BhdGgobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPEFycmF5PElDZXJ0aWZpY2F0ZVRlbXBsYXRlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY2VydGlmaWNhdGVzL2xlYXJuaW5nUGF0aC86bGVhcm5pbmdQYXRoSWQvYXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXNcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCBsZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQ2VydGlmaWNhdGVUZW1wbGF0ZXNGb3JMZWFybmluZ1BhdGgobGVhcm5pbmdQYXRoSWQ6IG51bWJlciwgY2VydGlmaWNhdGVUZW1wbGF0ZXM6IEFycmF5PElFeHRlbmRlZENlcnRpZmljYXRlVGVtcGxhdGU+KTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9jZXJ0aWZpY2F0ZXMvbGVhcm5pbmdQYXRoLzpsZWFybmluZ1BhdGhJZC91cGRhdGVDZXJ0aWZpY2F0ZVRlbXBsYXRlc1wiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSwgY2VydGlmaWNhdGVUZW1wbGF0ZXMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbmRFbWFpbFdpdGhDZXJ0aWZpY2F0ZShyZXdhcmRVdWlkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgc3ViamVjdDogc3RyaW5nLCBlbWFpbDogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9jZXJ0aWZpY2F0ZXMvc2VuZEVtYWlsc1wiKSwge3Jld2FyZFV1aWQ6IHJld2FyZFV1aWQsIG1lc3NhZ2U6IG1lc3NhZ2UsIHN1YmplY3Q6IHN1YmplY3QsIGVtYWlsOiBlbWFpbH0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi9idW5kbGVzL0J1bmRsZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtDZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVTZXJ2aWNlfSBmcm9tIFwiLi9DZXJ0aWZpY2F0ZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ2VydGlmaWNhdGVUZW1wbGF0ZX0gZnJvbSBcIi4vbW9kZWxzL0lDZXJ0aWZpY2F0ZVRlbXBsYXRlXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7Q2hlY2tCdXNpbmVzc1VuaXRJZH0gZnJvbSBcIi4uL3V0aWxzL0NoZWNrQnVzaW5lc3NVbml0SWRcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eX0gZnJvbSBcIi4uL3JlZmVyZW5jZS9tb2RlbHMvSVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHlcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VVdGlsc30gZnJvbSBcIi4uL3JlZmVyZW5jZS9SZWZlcmVuY2VVdGlsc1wiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENlcnRpZmljYXRlc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjZXJ0aWZpY2F0ZXMuQ2VydGlmaWNhdGVzQ29udHJvbGxlclwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBCVVNJTkVTU19VTklUX0lEX1BST1BFUlRZID0gXCJidXNpbmVzc1VuaXRJZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBlbnRpdHlJZFByb3BlcnR5ID0gXCJpZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBlbnRpdHlOYW1lUHJvcGVydHkgPSBcIm5hbWVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZW50aXR5VmVyc2lvblByb3BlcnR5ID0gXCJ2ZXJzaW9uXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVudGl0eUlzQWN0aXZlUHJvcGVydHkgPSBcImlzQWN0aXZlXCI7XHJcblxyXG4gICAgcHVibGljIGNlcnRpZmljYXRlc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQ2VydGlmaWNhdGVUZW1wbGF0ZT47XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwcm90ZWN0ZWQgcmVmZXJlbmNlRGVmYXVsdFZhbHVlczogc3RyaW5nO1xyXG4gICAgcHJvdGVjdGVkIHJlZmVyZW5jZUZpbHRlcjogc3RyaW5nO1xyXG4gICAgcHJvdGVjdGVkIHJlZmVyZW5jZUFzc29jaWF0aW9uRmlsdGVyczogc3RyaW5nO1xyXG4gICAgcHVibGljIHN5c3RlbUJ1bmRsZTogSUJ1bmRsZTtcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcjogSVVzZXJJbmZvO1xyXG4gICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzOiBBcnJheTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT47XHJcblxyXG4gICAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdW5kbGVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ2VydGlmaWNhdGVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBSZWZlcmVuY2VVdGlscy5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uRmlsdGVyU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCAkaHR0cDogbmcuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkICRyb3V0ZVBhcmFtczogbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgY2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXI6IENlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVuZGxlU2VydmljZTogQnVuZGxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgY2VydGlmaWNhdGVBcGk6IENlcnRpZmljYXRlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHJlZmVyZW5jZVV0aWxzOiBSZWZlcmVuY2VVdGlscyxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVzaW5lc3NVbml0c1NlcnZpY2U6IEJ1c2luZXNzVW5pdHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW55TGVhcm5pbmdPYmplY3QgfHwgc3lzdGVtUGVybWlzc2lvbnMudmlld0NlcnRpZmljYXRlVGVtcGxhdGVzKTtcclxuXHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oXCJhZG1pbmlzdHJhdGlvbl9jZXJ0aWZpY2F0ZVRlbXBsYXRlc1wiKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcih0aGlzLmdldFBhZ2VIZWFkZXJOYW1lKCkpLnVwZGF0ZSgpO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJQ2VydGlmaWNhdGVUZW1wbGF0ZT4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY2VydGlmaWNhdGVzXCIpLnNlcnZpY2UoKSkpO1xyXG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVzR3JpZE1vZGVsLmZpbHRlci5zcGxpdFBhcmFtID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5hZGRBY3Rpb25MaW5rSWYocC5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCB8fCBwLm1hbmFnZUNlcnRpZmljYXRlVGVtcGxhdGVzLFxyXG4gICAgICAgICAgICAgICAgJysgTmV3JywgdGhpcy5nZXRDZXJ0aWZpY2F0ZUVkaXRVcmwoMCkpXHJcbiAgICAgICAgICAgICAgICAucHJlc2VydmVIZWFkZXIoKVxyXG4gICAgICAgICAgICAgICAgLnVwZGF0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmJ1bmRsZVNlcnZpY2UuZ2V0U3lzdGVtQnVuZGxlKClcclxuICAgICAgICAgICAgLnRoZW4oYiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbUJ1bmRsZSA9IGI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbUJ1bmRsZSA9IHtpZDogMX07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHVzZXI7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QnVzaW5lc3NVbml0c0RlYWN0aXZhdGVGb3JTZWxlY3RvcigpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLmJ1c2luZXNzVW5pdHMgPSA8QXJyYXk8SVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHk+PiByZXN1bHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDZXJ0aWZpY2F0ZUVkaXRVcmwoaWQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXIuZWRpdFVybChpZCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBpc0VkaXRBbGxvd2VkKGVudGl0eSkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCB8fCB0aGlzLnN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUNlcnRpZmljYXRlVGVtcGxhdGVzKVxyXG4gICAgICAgICAgICAmJiB0aGlzLmdldEVudGl0eUlzQWN0aXZlUHJvcGVydHkoZW50aXR5KVxyXG4gICAgICAgICAgICAmJiAoIWVudGl0eS5oYXNPd25Qcm9wZXJ0eShDZXJ0aWZpY2F0ZXNDb250cm9sbGVyLkJVU0lORVNTX1VOSVRfSURfUFJPUEVSVFkpIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKS5hbGxCdXNpbmVzc1VuaXRzXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5hdXRoTWFuYWdlci5nZXRDdXJyZW50VXNlcigpLmJ1c2luZXNzVW5pdHMuaW5kZXhPZihlbnRpdHlbQ2VydGlmaWNhdGVzQ29udHJvbGxlci5CVVNJTkVTU19VTklUX0lEX1BST1BFUlRZXSkgIT0gLTFcclxuICAgICAgICAgICAgICAgICkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW50aXR5SXNBY3RpdmVQcm9wZXJ0eShlbnRpdHk6IElDZXJ0aWZpY2F0ZVRlbXBsYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGVudGl0eS5pc0FjdGl2ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlRW50aXR5KGluZGV4OiBudW1iZXIsIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGVUZW1wbGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVBcGkuc2V0QWN0aXZlQ2VydGlmaWNhdGVUZW1wbGF0ZShjZXJ0aWZpY2F0ZS5pZCwgdHJ1ZSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNlcnRpZmljYXRlc0dyaWRNb2RlbC5lbnRyaWVzW2luZGV4XSA9IHJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQYWdlSGVhZGVyTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIkNlcnRpZmljYXRlIFRlbXBsYXRlc1wiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBY3RpdmVMaW5rU3RhdGUoZW50aXR5KTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlJc0FjdGl2ZVByb3BlcnR5KGVudGl0eSkgPyBcIlllc1wiIDogXCJOb1wiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJc0FjdGl2ZUdyaWRTdHlsZShpc0FjdGl2ZTogYm9vbGVhbik6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWN0aXZlXHJcbiAgICAgICAgICAgID8ge31cclxuICAgICAgICAgICAgOiB7XCJjb2xvclwiOiBcIiM5OTk5OTlcIn07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc1VzZXJTYW1lQnVzaW5lc3NVbml0cyhidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKGJ1c2luZXNzVW5pdElkID09IG51bGwgJiYgdGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQ2hlY2tCdXNpbmVzc1VuaXRJZC5oYXNVc2VyU2FtZUJ1c2luZXNzVW5pdHModGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzLCBidXNpbmVzc1VuaXRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJ1c2luZXNzVW5pdEJ5SWQoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmJ1c2luZXNzVW5pdHMuZmlsdGVyKGJ1ID0+IGJ1LmlkID09IGJ1c2luZXNzVW5pdElkKVswXS5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hLZXlQcmVzcygpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2F2ZVNlYXJjaElucHV0KENlcnRpZmljYXRlc0NvbnRyb2xsZXIuTkFNRSwgdGhpcy5zZWFyY2hJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsb3NlU2VhcmNoSW5wdXQoQ2VydGlmaWNhdGVzQ29udHJvbGxlci5OQU1FLCB3aW5kb3cpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hJbnB1dCB8fCB0aGlzLnNlYXJjaElucHV0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmNlcnRpZmljYXRlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUNlcnRpZmljYXRlVGVtcGxhdGV9IGZyb20gXCIuL21vZGVscy9JQ2VydGlmaWNhdGVUZW1wbGF0ZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtDZXJ0aWZpY2F0ZVNlcnZpY2V9IGZyb20gXCIuL0NlcnRpZmljYXRlU2VydmljZVwiO1xyXG5pbXBvcnQge0NlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9DZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlclwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENlcnRpZmljYXRlc0NyZWF0ZUVkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY2VydGlmaWNhdGVzLkNlcnRpZmljYXRlc0NyZWF0ZUVkaXRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIE1BWF9DRVJUSUZJQ0FURV9WQUxJRElUWV9QRVJJT0Q6IG51bWJlciA9IDEwMDAwMDA7XHJcblxyXG4gICAgcHVibGljIGNlcnRpZmljYXRlVGVtcGxhdGU6IElDZXJ0aWZpY2F0ZVRlbXBsYXRlID0ge25hbWU6IG51bGwsIGZpbGVDb250ZW50SWQ6IG51bGx9O1xyXG4gICAgcHVibGljIG5ld0NlcnRpZmljYXRlVGVtcGxhdGVGaWxlOiBGaWxlO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBlcnJvcnNNYXA6IE1hcDxTdHJpbmcsIFN0cmluZz4gPSBuZXcgTWFwPFN0cmluZywgU3RyaW5nPigpO1xyXG4gICAgcHVibGljIGZpbGVUaXRsZTogU3RyaW5nO1xyXG4gICAgcHVibGljIGNlcnRpZmljYXRlQ29udGVudDogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBjZXJ0aWZpY2F0ZUNvdXJzZXM6IEFycmF5PElDb3Vyc2U+ID0gW107XHJcbiAgICBwdWJsaWMgY2VydGlmaWNhdGVGaWxlVGl0bGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBpc1ByZXZpZXdIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc0FsbEJ1c2luZXNzVW5pdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIHJlZGlyZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDZXJ0aWZpY2F0ZVNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgJHJvb3RTY29wZSwgcHJvdGVjdGVkICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCAkcm91dGVQYXJhbXM6IG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgY2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXI6IENlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGNlcnRpZmljYXRlQXBpOiBDZXJ0aWZpY2F0ZVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCB8fCBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VDZXJ0aWZpY2F0ZVRlbXBsYXRlcyk7XHJcblxyXG4gICAgICAgIGxldCBjZXJ0aWZpY2F0ZUlkOiBudW1iZXIgPSB0aGlzLiRyb3V0ZVBhcmFtc1tDZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlci5DRVJUSUZJQ0FURV9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IGhhc0NlcnRpZmljYXRlSWQ6IGJvb2xlYW4gPSAhaXNOYU4oY2VydGlmaWNhdGVJZCk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oXCJhZG1pbmlzdHJhdGlvbl9jZXJ0aWZpY2F0ZVRlbXBsYXRlc1wiKTtcclxuXHJcbiAgICAgICAgaWYgKGhhc0NlcnRpZmljYXRlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUFwaS5nZXRDZXJ0aWZpY2F0ZVRlbXBsYXRlKGNlcnRpZmljYXRlSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVUZW1wbGF0ZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVGaWxlVGl0bGUgPSByZXN1bHQuZmlsZVRpdGxlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDZXJ0aWZpY2F0ZUNvdXJzZXMoKTtcclxuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJDZXJ0aWZpY2F0ZSB0ZW1wbGF0ZSBub3QgZm91bmRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIocmVzdWx0Lm5hbWUpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzID0gdXNlci5hbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTmV3IENlcnRpZmljYXRlIFRlbXBsYXRlXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJFdmVudEhhbmRsZXIpO1xyXG4gICAgICAgICRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmRyYWdvdmVyRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRyYWdvdmVyRXZlbnRIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcclxuICAgICAgICBsZXQgZHJvcENlcnRpZmljYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkcm9wQ2VydGlmaWNhdGVcIik7XHJcbiAgICAgICAgbGV0IGRyb3BDZXJ0aWZpY2F0ZU5vdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRyb3BDZXJ0aWZpY2F0ZU5vdGVcIik7XHJcbiAgICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJztcclxuXHJcbiAgICAgICAgaWYgKGRyb3BDZXJ0aWZpY2F0ZSA9PSBlbGVtIHx8IGRyb3BDZXJ0aWZpY2F0ZU5vdGUgPT0gZWxlbSkge1xyXG4gICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9CYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVkaXJlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXIuaW5kZXhVcmwoKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUNlcnRpZmljYXRlVGVtcGxhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3Q2VydGlmaWNhdGVUZW1wbGF0ZUZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlLmZpbGVDb250ZW50SWQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmNlcnRpZmljYXRlVGVtcGxhdGUuZmlsZVRpdGxlID0gdGhpcy5uZXdDZXJ0aWZpY2F0ZVRlbXBsYXRlRmlsZS5uYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjYWxsID0gdGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlLmlkXHJcbiAgICAgICAgICAgID8gdGhpcy5jZXJ0aWZpY2F0ZUFwaS51cGRhdGVDZXJ0aWZpY2F0ZVRlbXBsYXRlKHRoaXMuY2VydGlmaWNhdGVUZW1wbGF0ZS5pZCwgdGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlKVxyXG4gICAgICAgICAgICA6IHRoaXMuY2VydGlmaWNhdGVBcGkuY3JlYXRlQ2VydGlmaWNhdGVUZW1wbGF0ZSh0aGlzLmNlcnRpZmljYXRlVGVtcGxhdGUpO1xyXG4gICAgICAgIGNhbGwudGhlbihjZXJ0aWZpY2F0ZVRlbXBsYXRlSWQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZXdDZXJ0aWZpY2F0ZVRlbXBsYXRlRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUFwaS51cGxvYWRDZXJ0aWZpY2F0ZVRlbXBsYXRlKGNlcnRpZmljYXRlVGVtcGxhdGVJZCwgdGhpcy5uZXdDZXJ0aWZpY2F0ZVRlbXBsYXRlRmlsZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9CYWNrKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IubmFtZS5kdXBsaWNhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQ2VydGlmaWNhdGUgdGVtcGxhdGUgbmFtZSBtdXN0IGJlIHVuaXF1ZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVhY3RpdmF0ZUVudGl0eSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNlcnRpZmljYXRlQXBpLnNldEFjdGl2ZUNlcnRpZmljYXRlVGVtcGxhdGUodGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlLmlkLCBmYWxzZSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9CYWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVudGl0eVZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhhc0ZpbGUoKSAmJiB0aGlzLmhhc05hbWUoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIG9uQnVzaW5lc3NVbml0Q2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLiR0aW1lb3V0KGEgPT4gdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkRXJyb3JNZXNzYWdlKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsdWUgZm9yIHRoZSBmaWVsZCBcXFwiJTFcXFwiXCIucmVwbGFjZShcIiUxXCIsIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzTmFtZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2VydGlmaWNhdGVUZW1wbGF0ZS5uYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzTWFwLnNldChcIm5hbWVcIiwgdGhpcy5idWlsZEVycm9yTWVzc2FnZShcIm5hbWVcIikpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNGaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jZXJ0aWZpY2F0ZUZpbGVUaXRsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yc01hcC5zZXQoXCJmaWxlXCIsIHRoaXMuYnVpbGRFcnJvck1lc3NhZ2UoXCJmaWxlXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQ2VydGlmaWNhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZXdDZXJ0aWZpY2F0ZVRlbXBsYXRlRmlsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUZpbGVUaXRsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlLmZpbGVDb250ZW50SWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVDb250ZW50ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXR0YWNoRmlsZSgkZmlsZSkge1xyXG4gICAgICAgIGlmICh0aGlzLm5ld0NlcnRpZmljYXRlVGVtcGxhdGVGaWxlICYmICEkZmlsZS4kZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVGaWxlVGl0bGUgPSB0aGlzLm5ld0NlcnRpZmljYXRlVGVtcGxhdGVGaWxlLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFBhcmFtZXRlcnMoKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb3Vyc2VUaXRsZTogXCJCaW9sb2d5XCIsXHJcbiAgICAgICAgICAgIHVzZXJOYW1lOiBcIkpvaG4gU21pdGhcIixcclxuICAgICAgICAgICAgZm9ybWF0OiAncG5nJyxcclxuICAgICAgICAgICAgY2VydGlmaWNhdGVUZW1wbGF0ZUlkOiB0aGlzLmNlcnRpZmljYXRlVGVtcGxhdGUuaWRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q2VydGlmaWNhdGVQcmV2aWV3KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUHJldmlld0hpZGRlbikge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJldmlld0hpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2VydGlmaWNhdGVQcmV2aWV3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDZXJ0aWZpY2F0ZVByZXZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnM6IGFueSA9IHRoaXMuZ2V0UGFyYW1ldGVycygpO1xyXG4gICAgICAgIGxldCByZXBvcnRUeXBlID0gJ0NFUlRJRklDQVRFX1BSRVZJRVcnO1xyXG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVBcGkuZG93bmxvYWRDZXJ0aWZpY2F0ZShwYXJhbWV0ZXJzLCByZXBvcnRUeXBlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gdGhpcy5jZXJ0aWZpY2F0ZUNvbnRlbnQgPSBcIjxpbWcgc3R5bGU9XFxcIndpZHRoOiAxMDAlO1xcXCIgc3JjPVxcXCJcIiArIHJlc3VsdCArIFwiXFxcIi8+XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlQ2VydGlmaWNhdGVQcmV2aWV3KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNQcmV2aWV3SGlkZGVuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2VydGlmaWNhdGVDb3Vyc2VzKCkge1xyXG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVBcGkuZ2V0Q291cnNlc0ZvckNlcnRpZmljYXRlVGVtcGxhdGUodGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlLmlkKS50aGVuKGNvdXJzZXMgPT4ge1xyXG4gICAgICAgICAgICBjb3Vyc2VzLmZvckVhY2goY291cnNlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVDb3Vyc2VzLnB1c2goY291cnNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrTmFtZUZpZWxkTGVuZ3RoKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNlcnRpZmljYXRlVGVtcGxhdGUubmFtZS5sZW5ndGggPiAyNTUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgZW51bSBDZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZSB7XHJcbiAgICBBVVRPLFxyXG4gICAgTUFOVUFMXHJcbn0iLCJpbXBvcnQge1N0b3JhZ2VzLCBTdG9yYWdlV3JhcHBlcn0gZnJvbSBcIi4uL2luZnJhc3RydWN0dXJlL1N0b3JhZ2VcIjtcclxuaW1wb3J0IHtJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge01hdGVyaWFsVHlwZX0gZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvTWF0ZXJpYWxUeXBlXCI7XHJcbmltcG9ydCB7SU1hdGVyaWFsfSBmcm9tIFwiLi4vbWF0ZXJpYWxzL21vZGVscy9JTWF0ZXJpYWxcIjtcclxuaW1wb3J0IHtJSW5kaXZpZHVhbFNlY3Rpb25Qcm9ncmVzc30gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzXCI7XHJcbmltcG9ydCB7U2VjdGlvblByb2dyZXNzU3RhdHVzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvU2VjdGlvblByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7U2VjdGlvblBhc3NpbmdUeXBlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvU2VjdGlvblBhc3NpbmdUeXBlXCI7XHJcbmltcG9ydCB7SUNvdXJzZVNlY3Rpb25Qcm9ncmVzc0VudHJ5fSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVNlY3Rpb25Qcm9ncmVzc0VudHJ5XCI7XHJcbmltcG9ydCB7UXVpelR5cGV9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9RdWl6VHlwZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbW1vbkZpbHRlclNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjb21tb24uRmlsdGVyU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBTdG9yYWdlcy5TRVNTSU9OX05BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlV3JhcHBlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlU2VhcmNoSW5wdXQocGFnZU5hbWU6IHN0cmluZywgaW5wdXRWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHBhZ2VTdG9yYWdlOiBhbnkgPSB0aGlzLnN0b3JhZ2UuZ2V0KHBhZ2VOYW1lKTtcclxuICAgICAgICBpZighcGFnZVN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgcGFnZVN0b3JhZ2UgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFnZVN0b3JhZ2VbJ3NlYXJjaElucHV0J10gPSBpbnB1dFZhbHVlO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5wdXQocGFnZU5hbWUsIHBhZ2VTdG9yYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2VhcmNoSW5wdXQocGFnZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHBhZ2VTdG9yYWdlOiBhbnkgPSB0aGlzLnN0b3JhZ2UuZ2V0KHBhZ2VOYW1lKTtcclxuICAgICAgICBpZighcGFnZVN0b3JhZ2UgfHwgIXBhZ2VTdG9yYWdlWydzZWFyY2hJbnB1dCddKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhZ2VTdG9yYWdlWydzZWFyY2hJbnB1dCddO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhclNlYXJjaElucHV0KHBhZ2VOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGFnZVN0b3JhZ2U6IGFueSA9IHRoaXMuc3RvcmFnZS5nZXQocGFnZU5hbWUpO1xyXG4gICAgICAgIGlmKCFwYWdlU3RvcmFnZSkge1xyXG4gICAgICAgICAgICBwYWdlU3RvcmFnZSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYWdlU3RvcmFnZVsnc2VhcmNoSW5wdXQnXSA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5wdXQocGFnZU5hbWUsIHBhZ2VTdG9yYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUZpbHRlclZhbHVlKHBhZ2VOYW1lOiBzdHJpbmcsIGZpbHRlcjoge2lkOiBzdHJpbmcsIHZhbHVlOiBib29sZWFufSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBwYWdlU3RvcmFnZTogYW55ID0gdGhpcy5zdG9yYWdlLmdldChwYWdlTmFtZSk7XHJcbiAgICAgICAgaWYoIXBhZ2VTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIHBhZ2VTdG9yYWdlID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCEoJ2ZpbHRlcicgaW4gcGFnZVN0b3JhZ2UpKSB7XHJcbiAgICAgICAgICAgIHBhZ2VTdG9yYWdlWydmaWx0ZXInXSA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgIWZpbHRlci52YWx1ZSA/IGRlbGV0ZSBwYWdlU3RvcmFnZVsnZmlsdGVyJ11bZmlsdGVyLmlkXVxyXG4gICAgICAgICAgICA6IHBhZ2VTdG9yYWdlWydmaWx0ZXInXVtmaWx0ZXIuaWRdID0gZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgdGhpcy5zdG9yYWdlLnB1dChwYWdlTmFtZSwgcGFnZVN0b3JhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZpbHRlclZhbHVlcyhwYWdlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHBhZ2VTdG9yYWdlOiBhbnkgPSB0aGlzLnN0b3JhZ2UuZ2V0KHBhZ2VOYW1lKTtcclxuICAgICAgICBpZighcGFnZVN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgcGFnZVN0b3JhZ2UgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFnZVN0b3JhZ2VbJ2ZpbHRlciddID0ge307XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlLnB1dChwYWdlTmFtZSwgcGFnZVN0b3JhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRGaWx0ZXJWYWx1ZXMocGFnZU5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgbGV0IHBhZ2VTdG9yYWdlOiBhbnkgPSB0aGlzLnN0b3JhZ2UuZ2V0KHBhZ2VOYW1lKTtcclxuICAgICAgICBpZighcGFnZVN0b3JhZ2UgfHwgICEoJ2ZpbHRlcicgaW4gcGFnZVN0b3JhZ2UpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhZ2VTdG9yYWdlWydmaWx0ZXInXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVRvcFN0YXR1cyhwYWdlTmFtZTogc3RyaW5nLCB0b3BTdGF0dXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBwYWdlU3RvcmFnZTogYW55ID0gdGhpcy5zdG9yYWdlLmdldChwYWdlTmFtZSk7XHJcbiAgICAgICAgaWYoIXBhZ2VTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIHBhZ2VTdG9yYWdlID0ge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYWdlU3RvcmFnZVsndG9wU3RhdHVzJ10gPSB0b3BTdGF0dXM7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlLnB1dChwYWdlTmFtZSwgcGFnZVN0b3JhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUb3BTdGF0dXMocGFnZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHBhZ2VTdG9yYWdlOiBhbnkgPSB0aGlzLnN0b3JhZ2UuZ2V0KHBhZ2VOYW1lKTtcclxuICAgICAgICBpZighcGFnZVN0b3JhZ2UgfHwgIXBhZ2VTdG9yYWdlWyd0b3BTdGF0dXMnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYWdlU3RvcmFnZVsndG9wU3RhdHVzJ107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5TZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2hcIikucmVtb3ZlQ2xhc3MoXCJjbG9zZVwiKTtcclxuICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2hcIikuYWRkQ2xhc3MoXCJvcGVuXCIpO1xyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDMyNSkge1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fc2VhcmNoXCIpLmFuaW1hdGUoe3dpZHRoOiBcIjBweFwiLCBvcGFjaXR5OiBcIjBcIiwgcGFkZGluZzogXCIwXCJ9LCAyMDApO1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2hcIikuYW5pbWF0ZSh7d2lkdGg6ICcxNDVweCcsIGJvcmRlcjogXCIycHhcIiwgbWFyZ2luTGVmdDogJzAnfSwgMjAwKTtcclxuICAgICAgICAgICAgJChcIiNmaWx0ZXJfX29wZW4tc2VhcmNoIGlucHV0XCIpLmFuaW1hdGUoe3dpZHRoOiAnMTI1cHgnLCBwYWRkaW5nTGVmdDogJzMwcHgnLCBwYWRkaW5nUmlnaHQ6ICczNXB4J30sIDIwMCk7XHJcbiAgICAgICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaCAuZ2x5cGhpY29uLnZocy1pbWFnZS5zdmctc2VhcmNoXCIpLmFuaW1hdGUoe29wYWNpdHk6ICcxJ30sIDIwMCk7XHJcbiAgICAgICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaCAjY2xvc2Utc2VhcmNoLWZpbHRlclwiKS5hbmltYXRlKHtvcGFjaXR5OiAnMSd9LCAyMDApO1xyXG4gICAgICAgICAgICAkKFwiLm5hdmJhci1icmFuZFwiKS5jc3Moe3Zpc2liaWxpdHk6ICdoaWRkZW4nfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDc2OCkge1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fc2VhcmNoXCIpLmFuaW1hdGUoe3dpZHRoOiBcIjBweFwiLCBvcGFjaXR5OiBcIjBcIiwgcGFkZGluZzogXCIwXCJ9LCAyMDApO1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2hcIikuYW5pbWF0ZSh7d2lkdGg6ICcxOTBweCcsIGJvcmRlcjogXCIycHhcIiwgbWFyZ2luTGVmdDogJzAnfSwgMjAwKTtcclxuICAgICAgICAgICAgJChcIiNmaWx0ZXJfX29wZW4tc2VhcmNoIGlucHV0XCIpLmFuaW1hdGUoe3dpZHRoOiAnMTcwcHgnLCBwYWRkaW5nTGVmdDogJzMwcHgnLCBwYWRkaW5nUmlnaHQ6ICczNXB4J30sIDIwMCk7XHJcbiAgICAgICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaCAuZ2x5cGhpY29uLnZocy1pbWFnZS5zdmctc2VhcmNoXCIpLmFuaW1hdGUoe29wYWNpdHk6ICcxJ30sIDIwMCk7XHJcbiAgICAgICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaCAjY2xvc2Utc2VhcmNoLWZpbHRlclwiKS5hbmltYXRlKHtvcGFjaXR5OiAnMSd9LCAyMDApO1xyXG4gICAgICAgICAgICAkKFwiLm5hdmJhci1icmFuZFwiKS5jc3Moe3Zpc2liaWxpdHk6ICdoaWRkZW4nfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDk5Mikge1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fc2VhcmNoXCIpLmFuaW1hdGUoe3dpZHRoOiBcIjBweFwiLCBvcGFjaXR5OiBcIjBcIiwgcGFkZGluZzogXCIwXCJ9LCAyMDApO1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2hcIikuYW5pbWF0ZSh7d2lkdGg6ICcyNTAnLCBib3JkZXI6IFwiMnB4XCIsIG1hcmdpbkxlZnQ6ICcwJ30sIDIwMCk7XHJcbiAgICAgICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaCBpbnB1dFwiKS5hbmltYXRlKHt3aWR0aDogJzIxMHB4JywgcGFkZGluZ0xlZnQ6ICczMHB4JywgcGFkZGluZ1JpZ2h0OiAnMzVweCd9LCAyMDApO1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2ggLmdseXBoaWNvbi52aHMtaW1hZ2Uuc3ZnLXNlYXJjaFwiKS5hbmltYXRlKHtvcGFjaXR5OiAnMSd9LCAyMDApO1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2ggI2Nsb3NlLXNlYXJjaC1maWx0ZXJcIikuYW5pbWF0ZSh7b3BhY2l0eTogJzEnfSwgMjAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fc2VhcmNoXCIpLmFuaW1hdGUoe3dpZHRoOiBcIjBweFwiLCBvcGFjaXR5OiBcIjBcIiwgcGFkZGluZzogXCIwXCJ9LCAyMDApO1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2hcIikuYW5pbWF0ZSh7d2lkdGg6ICcyMjBweCcsIGJvcmRlcjogXCIycHhcIiwgbWFyZ2luTGVmdDogJzAnfSwgMjAwKTtcclxuICAgICAgICAgICAgJChcIiNmaWx0ZXJfX29wZW4tc2VhcmNoIGlucHV0XCIpLmFuaW1hdGUoe3dpZHRoOiAnMjAwcHgnLCBwYWRkaW5nTGVmdDogJzMwcHgnLCBwYWRkaW5nUmlnaHQ6ICczNXB4J30sIDIwMCk7XHJcbiAgICAgICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaCAuZ2x5cGhpY29uLnZocy1pbWFnZS5zdmctc2VhcmNoXCIpLmFuaW1hdGUoe29wYWNpdHk6ICcxJ30sIDIwMCk7XHJcbiAgICAgICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaCAjY2xvc2Utc2VhcmNoLWZpbHRlclwiKS5hbmltYXRlKHtvcGFjaXR5OiAnMSd9LCAyMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0ZpbHRlckRpYWxvZyh3aW5kb3c6IFdpbmRvdyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gJChcIi5maWx0ZXItbW9kYWwgLm1vZGFsLWRpYWxvZ1wiKTtcclxuICAgICAgICBtb2RhbC5jc3MoJ21hcmdpbi1yaWdodCcsICdhdXRvJyk7XHJcbiAgICAgICAgbW9kYWwuY3NzKCdtYXJnaW4tbGVmdCcsICdhdXRvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dOb3RpZmljYXRpb25zRGlhbG9nKHdpbmRvdzogV2luZG93KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSAkKFwiLm5vdGlmaWNhdGlvbnMtbW9kYWwgLm1vZGFsLWRpYWxvZ1wiKTtcclxuICAgICAgICBtb2RhbC5jc3MoJ21hcmdpbi1yaWdodCcsICdhdXRvJyk7XHJcbiAgICAgICAgbW9kYWwuY3NzKCdtYXJnaW4tbGVmdCcsICdhdXRvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2VhcmNoSW5wdXQocGFnZU5hbWU6IHN0cmluZywgd2luZG93OiBXaW5kb3cpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNsZWFyU2VhcmNoSW5wdXQocGFnZU5hbWUpO1xyXG4gICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaFwiKS5yZW1vdmVDbGFzcyhcIm9wZW5cIik7XHJcbiAgICAgICAgJChcIiNmaWx0ZXJfX29wZW4tc2VhcmNoXCIpLmFkZENsYXNzKFwiY2xvc2VcIik7XHJcbiAgICAgICAgJChcIiNmaWx0ZXJfX29wZW4tc2VhcmNoIC5nbHlwaGljb24udmhzLWltYWdlLnN2Zy1zZWFyY2hcIikuYW5pbWF0ZSh7b3BhY2l0eTogJzAnfSwyMDApO1xyXG4gICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaFwiKS5hbmltYXRlKHt3aWR0aDogJzAnLCBib3JkZXI6IFwiMHB4XCIgIH0sMjAwKTtcclxuICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2ggaW5wdXRcIikuYW5pbWF0ZSh7d2lkdGg6ICcwJywgcGFkZGluZ0xlZnQ6ICcwJywgcGFkZGluZ1JpZ2h0OiAnMCd9LDIwMCk7XHJcbiAgICAgICAgJChcIiNmaWx0ZXJfX29wZW4tc2VhcmNoICNjbG9zZS1zZWFyY2gtZmlsdGVyXCIpLmFuaW1hdGUoe29wYWNpdHk6ICcwJ30sMjAwKTtcclxuXHJcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDk5MSkge1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fc2VhcmNoXCIpLmFuaW1hdGUoe3dpZHRoOiBcIjQycHhcIiwgb3BhY2l0eTogXCIxXCIsIHBhZGRpbmdMZWZ0OiBcIjBcIixwYWRkaW5nUmlnaHQ6IFwiMFwifSwyMDApO1xyXG4gICAgICAgICAgICAkKFwiLm5hdmJhci1icmFuZFwiKS5jc3Moe3Zpc2liaWxpdHk6ICd2aXNpYmxlJ30pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQoXCIjZmlsdGVyX19zZWFyY2hcIikuYW5pbWF0ZSh7d2lkdGg6IFwiMTA5cHhcIiwgb3BhY2l0eTogXCIxXCIsIHBhZGRpbmdMZWZ0OiBcIjE1cHhcIixwYWRkaW5nUmlnaHQ6IFwiMTVweFwifSwyMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbHlHZW5lcmFsRmlsdGVyKGdyaWRNb2RlbDogSUdyaWRNb2RlbDxhbnk+KTogdm9pZCB7XHJcbiAgICAgICAgJChcIiNmaWx0ZXJNb2RhbFwiKS5tb2RhbChcImhpZGVcIik7XHJcblxyXG4gICAgICAgIGxldCBzdWJqZWN0RWxlbWVudHMgPSAkKFwiLmFjdGl2ZVwiKS5maWx0ZXIoJ1tpZF49XCJzdWJqZWN0c1wiXScpLnRvQXJyYXkoKTtcclxuICAgICAgICBsZXQgc3ViamVjdElkcyA9IFtdO1xyXG4gICAgICAgIGlmIChzdWJqZWN0RWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzdWJqZWN0RWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIHN1YmplY3RJZHMucHVzaChlbGVtZW50LmlkLnN1YnN0cmluZyhlbGVtZW50LmlkLmluZGV4T2YoXCJfXCIpICsgMSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JpZE1vZGVsLmZpbHRlci5zdWJqZWN0SWQgPSBzdWJqZWN0SWRzO1xyXG5cclxuICAgICAgICBsZXQgbGFuZ3VhZ2VFbGVtZW50cyA9ICQoXCIuYWN0aXZlXCIpLmZpbHRlcignW2lkXj1cImxhbmd1YWdlc1wiXScpLnRvQXJyYXkoKTtcclxuICAgICAgICBsZXQgbGFuZ3VhZ2VJZHMgPSBbXTtcclxuICAgICAgICBpZiAobGFuZ3VhZ2VFbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlSWRzLnB1c2goZWxlbWVudC5pZC5zdWJzdHJpbmcoZWxlbWVudC5pZC5pbmRleE9mKFwiX1wiKSArIDEpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdyaWRNb2RlbC5maWx0ZXIubGFuZ3VhZ2VJZCA9IGxhbmd1YWdlSWRzO1xyXG5cclxuICAgICAgICBsZXQgdHlwZUVsZW1lbnRzID0gJChcIi5hY3RpdmVcIikuZmlsdGVyKCdbaWRePVwidHlwZXNcIl0nKS50b0FycmF5KCk7XHJcbiAgICAgICAgbGV0IHR5cGVJZHMgPSBbXTtcclxuICAgICAgICBpZiAodHlwZUVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdHlwZUVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlSWRzLnB1c2goZWxlbWVudC5pZC5zdWJzdHJpbmcoZWxlbWVudC5pZC5pbmRleE9mKFwiX1wiKSArIDEpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGdyaWRNb2RlbC5maWx0ZXIudHlwZUlkID0gdHlwZUlkcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzaG93RXhwaXJlZEVsZW1lbnRzID0gJChcIiNzaG93LWV4cGlyZWQtY2hlY2tib3hcIik7XHJcbiAgICAgICAgaWYgKHNob3dFeHBpcmVkRWxlbWVudHMgIT0gdW5kZWZpbmVkICYmIHNob3dFeHBpcmVkRWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBncmlkTW9kZWwuZmlsdGVyLnNob3dFeHBpcmVkID0gc2hvd0V4cGlyZWRFbGVtZW50cy50b0FycmF5KClbMF0uY2hlY2tlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXIocGFnZU5hbWU6IHN0cmluZywgZ3JpZE1vZGVsOiBJR3JpZE1vZGVsPGFueT4pIHtcclxuICAgICAgICB0aGlzLmNsZWFyRmlsdGVyVmFsdWVzKHBhZ2VOYW1lKTtcclxuICAgICAgICAkKFwiI2ZpbHRlck1vZGFsIC52aHMtZmlsdGVyLXRhYmxlX19saXN0LXN1YmplY3QgPiBsaS5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgJChcIiNmaWx0ZXJNb2RhbCAudmhzLWZpbHRlci10YWJsZV9fbGlzdC10eXBlID4gbGkuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICQoXCIjZmlsdGVyTW9kYWwgLnZocy1maWx0ZXItdGFibGVfX2xpc3QtbGFuZ3VhZ2UgPiBsaS5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgICQoXCIjZmlsdGVyTW9kYWxcIikubW9kYWwoXCJoaWRlXCIpO1xyXG5cclxuICAgICAgICBncmlkTW9kZWwuZmlsdGVyLnN1YmplY3RJZCA9IG51bGw7XHJcbiAgICAgICAgaWYoIShncmlkTW9kZWwuZmlsdGVyLnR5cGVJZCA9PSBRdWl6VHlwZS5RVUlaIHx8IGdyaWRNb2RlbC5maWx0ZXIudHlwZUlkID09IFF1aXpUeXBlLlNVUlZFWSB8fCBncmlkTW9kZWwuZmlsdGVyLnR5cGVJZCA9PSBRdWl6VHlwZS5GTEFTSENBUkQpKVxyXG4gICAgICAgICAgICBncmlkTW9kZWwuZmlsdGVyLnR5cGVJZCA9IG51bGw7XHJcbiAgICAgICAgZ3JpZE1vZGVsLmZpbHRlci5sYW5ndWFnZUlkID0gbnVsbDtcclxuICAgICAgICBncmlkTW9kZWwuZmlsdGVyLnNob3dFeHBpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgZ3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVHZW5lcmFsRmlsdGVyKHR5cGU6IHN0cmluZywgcmVmZXJlbmNlT2JqZWN0OiBhbnksIHBhZ2VOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSAkKCcjJyArIHR5cGUgKyAnXycgKyByZWZlcmVuY2VPYmplY3QuaWQpO1xyXG4gICAgICAgIGNvbnN0IGlzQWN0aXZlRmlsdGVyID0gZWxlbWVudC5oYXNDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0ge1xyXG4gICAgICAgICAgICBpZDogdHlwZSArICdfJyArIHJlZmVyZW5jZU9iamVjdC5pZCxcclxuICAgICAgICAgICAgdmFsdWU6ICFpc0FjdGl2ZUZpbHRlclxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zYXZlRmlsdGVyVmFsdWUocGFnZU5hbWUsIGZpbHRlcik7XHJcbiAgICAgICAgaXNBY3RpdmVGaWx0ZXIgPyBlbGVtZW50LnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIHJldHVybiBpc0FjdGl2ZUZpbHRlciA/IC0xIDogMTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGFwcGx5U3RvcmFnZUZpbHRlcihzdG9yYWdlRmlsdGVyVmFsdWVzOiBhbnksIGdyaWRNb2RlbDogSUdyaWRNb2RlbDxhbnk+KTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgICAgIGxldCBzdWJqZWN0SWRzID0gW107XHJcbiAgICAgICAgbGV0IHR5cGVJZHMgPSBbXTtcclxuICAgICAgICBsZXQgbGFuZ3VhZ2VJZHMgPSBbXTtcclxuICAgICAgICBmb3IobGV0IGZpbHRlcklkIGluIHN0b3JhZ2VGaWx0ZXJWYWx1ZXMpIHtcclxuICAgICAgICAgICAgaWYoc3RvcmFnZUZpbHRlclZhbHVlcy5oYXNPd25Qcm9wZXJ0eShmaWx0ZXJJZCkgJiYgc3RvcmFnZUZpbHRlclZhbHVlc1tmaWx0ZXJJZF0pIHtcclxuICAgICAgICAgICAgICAgIGlmKGZpbHRlcklkLmluZGV4T2YoJ3N1YmplY3RzJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdElkcy5wdXNoKGZpbHRlcklkLnN1YnN0cmluZyhmaWx0ZXJJZC5pbmRleE9mKFwiX1wiKSArIDEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGZpbHRlcklkLmluZGV4T2YoJ3R5cGVzJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZUlkcy5wdXNoKGZpbHRlcklkLnN1YnN0cmluZyhmaWx0ZXJJZC5pbmRleE9mKFwiX1wiKSArIDEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGZpbHRlcklkLmluZGV4T2YoJ2xhbmd1YWdlcycpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlSWRzLnB1c2goZmlsdGVySWQuc3Vic3RyaW5nKGZpbHRlcklkLmluZGV4T2YoXCJfXCIpICsgMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY291bnRBY3RpdmVGaWx0ZXIrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBncmlkTW9kZWwuZmlsdGVyLmxhbmd1YWdlSWQgPSBsYW5ndWFnZUlkcztcclxuICAgICAgICBncmlkTW9kZWwuZmlsdGVyLnR5cGVJZCA9IHR5cGVJZHM7XHJcbiAgICAgICAgZ3JpZE1vZGVsLmZpbHRlci5zdWJqZWN0SWQgPSBzdWJqZWN0SWRzO1xyXG4gICAgICAgIHJldHVybiBjb3VudEFjdGl2ZUZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbHlNYXRlcmlhbFRvcFR5cGUoc3RhdHVzOiBzdHJpbmcsIGdyaWQ6IElHcmlkTW9kZWw8SU1hdGVyaWFsPikge1xyXG4gICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0FMTCc6XHJcbiAgICAgICAgICAgICAgICBncmlkLmZpbHRlci5maWxlVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQVVESU8nOlxyXG4gICAgICAgICAgICAgICAgZ3JpZC5maWx0ZXIuZmlsZVR5cGUgPSBNYXRlcmlhbFR5cGUuQVVESU87XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnVklERU8nOlxyXG4gICAgICAgICAgICAgICAgZ3JpZC5maWx0ZXIuZmlsZVR5cGUgPSBNYXRlcmlhbFR5cGUuVklERU87XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUEhPVE8nOlxyXG4gICAgICAgICAgICAgICAgZ3JpZC5maWx0ZXIuZmlsZVR5cGUgPSBNYXRlcmlhbFR5cGUuUEhPVE87XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnTElOSyc6XHJcbiAgICAgICAgICAgICAgICBncmlkLmZpbHRlci5maWxlVHlwZSA9IE1hdGVyaWFsVHlwZS5MSU5LO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0RPQ1VNRU5UUyc6XHJcbiAgICAgICAgICAgICAgICBncmlkLmZpbHRlci5maWxlVHlwZSA9IE1hdGVyaWFsVHlwZS5ET0NVTUVOVFM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGdyaWQuZmlsdGVyLmZpbGVUeXBlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbGN1bGF0ZUNvdXJzZVByb2dyZXNzKGNvdXJzZVNlY3Rpb25Qcm9ncmVzczogSUNvdXJzZVNlY3Rpb25Qcm9ncmVzc0VudHJ5KTogTWFwPHN0cmluZywgbnVtYmVyPiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcbiAgICAgICAgbGV0IHNlY3Rpb25Qcm9ncmVzc0J5U2VjdGlvbklkID0gbmV3IE1hcDxudW1iZXIsIElJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzPigpO1xyXG4gICAgICAgIGZvciAobGV0IHNlY3Rpb25Qcm9ncmVzcyBvZiBjb3Vyc2VTZWN0aW9uUHJvZ3Jlc3MuaW5kaXZpZHVhbFNlY3Rpb25Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICBzZWN0aW9uUHJvZ3Jlc3NCeVNlY3Rpb25JZC5zZXQoc2VjdGlvblByb2dyZXNzLnNlY3Rpb25JZCwgc2VjdGlvblByb2dyZXNzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IHNlY3Rpb24gb2YgY291cnNlU2VjdGlvblByb2dyZXNzLnNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBzZWN0aW9uUHJvZ3Jlc3MgPSBzZWN0aW9uUHJvZ3Jlc3NCeVNlY3Rpb25JZC5nZXQoc2VjdGlvbi5zZWN0aW9uLmlkKTtcclxuICAgICAgICAgICAgc2VjdGlvbi5zZWN0aW9uLnN0YXR1cyA9IHNlY3Rpb25Qcm9ncmVzcyA/IHNlY3Rpb25Qcm9ncmVzcy5zdGF0dXMgOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNob3duU3RhdHVzZXMgPSBbU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5DT01QTEVURURdLCBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLk9QRU5FRF1dO1xyXG4gICAgICAgIGxldCBjb3Vyc2VTZWN0aW9uc1dpdGhQcm9ncmVzcyA9IGNvdXJzZVNlY3Rpb25Qcm9ncmVzcy5zZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZC5maWx0ZXIoXHJcbiAgICAgICAgICAgIHMgPT4gcy5zZWN0aW9uLmlzQWN0aXZlXHJcbiAgICAgICAgICAgICAgICB8fCAoIXMuc2VjdGlvbi5pc0FjdGl2ZSAmJiBzZWN0aW9uUHJvZ3Jlc3NCeVNlY3Rpb25JZC5oYXMocy5zZWN0aW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHNob3duU3RhdHVzZXMuaW5kZXhPZihzZWN0aW9uUHJvZ3Jlc3NCeVNlY3Rpb25JZC5nZXQocy5zZWN0aW9uLmlkKS5zdGF0dXMpID49IDApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IGNvdW50T2ZNYW5kYXRvcnlDb21wbGV0ZWQ6IG51bWJlciA9IDA7XHJcbiAgICAgICAgbGV0IGNvdW50T2ZNYW5kYXRvcnk6IG51bWJlciA9IDA7XHJcbiAgICAgICAgbGV0IGNvdW50T2ZFbGVjdGl2ZUNvbXBsZXRlZDogbnVtYmVyID0gMDtcclxuICAgICAgICBsZXQgY291bnRPZk9wdGlvbmFsOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCBjb3VudE9mT3B0aW9uYWxDb21wbGV0ZWQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IHNlY3Rpb24gb2YgY291cnNlU2VjdGlvbnNXaXRoUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgaWYgKCFzZWN0aW9uLnNlY3Rpb24ucGFyZW50SWQgJiYgc2VjdGlvbi5zZWN0aW9uLnNlY3Rpb25QYXNzaW5nVHlwZSA9PSBTZWN0aW9uUGFzc2luZ1R5cGVbU2VjdGlvblBhc3NpbmdUeXBlLk1BTkRBVE9SWV0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLnNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2VjdGlvbi5zdGF0dXMgPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRPZk1hbmRhdG9yeUNvbXBsZXRlZCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY291bnRPZk1hbmRhdG9yeSsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoKCFzZWN0aW9uLnNlY3Rpb24ucGFyZW50SWQgJiYgc2VjdGlvbi5zZWN0aW9uLnNlY3Rpb25QYXNzaW5nVHlwZSA9PSBTZWN0aW9uUGFzc2luZ1R5cGVbU2VjdGlvblBhc3NpbmdUeXBlLkVMRUNUSVZFXSlcclxuICAgICAgICAgICAgICAgICYmIChzZWN0aW9uLnNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2VjdGlvbi5zdGF0dXMgPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdKSkge1xyXG4gICAgICAgICAgICAgICAgY291bnRPZkVsZWN0aXZlQ29tcGxldGVkKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghc2VjdGlvbi5zZWN0aW9uLnBhcmVudElkICYmIHNlY3Rpb24uc2VjdGlvbi5zZWN0aW9uUGFzc2luZ1R5cGUgPT0gU2VjdGlvblBhc3NpbmdUeXBlW1NlY3Rpb25QYXNzaW5nVHlwZS5PUFRJT05BTF0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLnNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2VjdGlvbi5zdGF0dXMgPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRPZk9wdGlvbmFsQ29tcGxldGVkKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb3VudE9mT3B0aW9uYWwrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzdWx0LnNldCgnY291bnRPZk1hbmRhdG9yeUNvbXBsZXRlZCcsIGNvdW50T2ZNYW5kYXRvcnlDb21wbGV0ZWQpO1xyXG4gICAgICAgIHJlc3VsdC5zZXQoJ2NvdW50T2ZNYW5kYXRvcnknLCBjb3VudE9mTWFuZGF0b3J5KTtcclxuICAgICAgICByZXN1bHQuc2V0KCdjb3VudE9mRWxlY3RpdmVDb21wbGV0ZWQnLCBjb3VudE9mRWxlY3RpdmVDb21wbGV0ZWQpO1xyXG4gICAgICAgIHJlc3VsdC5zZXQoJ2NvdW50T2ZPcHRpb25hbCcsIGNvdW50T2ZPcHRpb25hbCk7XHJcbiAgICAgICAgcmVzdWx0LnNldCgnY291bnRPZk9wdGlvbmFsQ29tcGxldGVkJywgY291bnRPZk9wdGlvbmFsQ29tcGxldGVkKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VQcm9ncmVzc1N0YXR1c30gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0NvdXJzZVByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7SUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRofSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aFwiO1xyXG5kZWNsYXJlIHZhciAkOiBhbnk7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbW9uSG9tZVNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjb21tb24uQ29tbW9uSG9tZVNlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc2xpZGluZ1N0YXJ0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc2xpY2tQYXJhbWV0ZXJzOiBhbnkgPSB7XHJcbiAgICAgICAgYXV0b3BsYXk6IGZhbHNlLFxyXG4gICAgICAgIGluZmluaXRlOiBmYWxzZSxcclxuICAgICAgICBkb3RzOiBmYWxzZSxcclxuICAgICAgICB2YXJpYWJsZVdpZHRoOiB0cnVlLFxyXG4gICAgICAgIHNsaWRlc1RvU2hvdzogMixcclxuICAgICAgICBzbGlkZXNUb1Njcm9sbDogMSxcclxuICAgICAgICBhcnJvd3M6IHRydWUsXHJcbiAgICAgICAgc3dpcGU6IGZhbHNlLFxyXG4gICAgICAgIHJlc3BvbnNpdmU6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYnJlYWtwb2ludDogOTkxLFxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXNUb1Nob3c6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgc3dpcGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3dpcGVUb1NsaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBicmVha3BvaW50OiA1NzUsXHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1RvU2hvdzogMSxcclxuICAgICAgICAgICAgICAgICAgICBzd2lwZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBzd2lwZVRvU2xpZGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiR3aW5kb3dcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgICBMZWFybmluZyBQYXRoIEhlbHBlciBNZXRob2RzXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlU3RhdHVzKGNvdXJzZTogSUNvdXJzZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5SRVNFVF1cclxuICAgICAgICAgICAgfHwgY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzID09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLkVYUElSRURdXHJcbiAgICAgICAgICAgIHx8IGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5DT01QTEVURURdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnQ09NUExFVEVEJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5GQUlMRURdXHJcbiAgICAgICAgICAgIHx8IGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5TVEFSVEVEXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0lOX1BST0dSRVNTJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5OT1RfU1RBUlRFRF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuICdOT1RfU1RBUlRFRCc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICdOT1RfQVZBSUxBQkxFJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlY29kZUNvdXJzZVByb2dyZXNzU3RhdHVzKHN0YXR1czogc3RyaW5nLCBpc0xlYXJuZXI/OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSBcIk5PVF9BVkFJTEFCTEVcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJOb3QgYXZhaWxhYmxlXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiTk9UX1NUQVJURURcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJOZXdcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJTVEFSVEVEXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiSW4gcHJvZ3Jlc3NcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJGQUlMRURcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJGYWlsZWRcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJDT01QTEVURURcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJDb21wbGV0ZWRcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJFWFBJUkVEXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiRXhwaXJlZFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIlJFU0VUXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzTGVhcm5lciA/IFwiTmV3XCIgOiBcIlBlcm1pc3Npb25zIHJldm9rZWRcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW5pdCBzbGlja1xyXG4gICAgcHVibGljIGluaXRpYWxpemVIZWxwZXJNZXRob2RzRm9yU2xpY2sobGVhcm5pbmdQYXRoRW50cmllcywgb3BlbkluUHJvZ3Jlc3NDYXJkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpID49IDk5Mikge1xyXG4gICAgICAgICQoJy5scF9fcGxhbnMtaXRlbXMgLnNsaWNrLW5leHQnKS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zbGlkaW5nU3RhcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkaW5nU3RhcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAkKCcuc2xpY2stcHJldjpub3QoLnNsaWNrLWRpc2FibGVkKScpLmNsb3Nlc3QoJy5scF9fcGxhbnMnKS5maW5kKCcubHBfX3BsYW5zLWRlY29yX3ByZXYnKS5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgJCgnLnNsaWNrLW5leHQuc2xpY2stZGlzYWJsZWQnKS5jbG9zZXN0KCcubHBfX3BsYW5zJykuZmluZCgnLmxwX19wbGFucy1kZWNvcl9uZXh0JykuYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKTtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Q2FyZE51bWJlcjogYW55ID0gJCh0aGlzKS5jbG9zZXN0KCcubHBfX3BsYW5zLWl0ZW1zJykuZmluZCgnLmxwX19wbGFuLmxwX19wbGFuX2JpZycpLmF0dHIoJ2RhdGEtdGFyZ2V0Jyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5scF9fcGxhbnMtaXRlbXMnKS5maW5kKCcubHBfX3BsYW4nKS5yZW1vdmVDbGFzcyhcImxwX19wbGFuX2JpZ1wiKTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRDYXJkTnVtYmVyID0gcGFyc2VJbnQoY3VycmVudENhcmROdW1iZXIpICsgMTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PiQodGhpcykuY2xvc2VzdCgnLmxwX19wbGFucy1pdGVtcycpLnNsaWNrKCdzbGlja0dvVG8nLCBjdXJyZW50Q2FyZE51bWJlciAtIDEpLCA1MDApO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcubHBfX3BsYW5zLWl0ZW1zJykuZmluZChcIiNscF9fcGxhbi1cIiArIGN1cnJlbnRDYXJkTnVtYmVyKS5hZGRDbGFzcyhcImxwX19wbGFuX2JpZ1wiKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PnRoaXMuc2xpZGluZ1N0YXJ0ZWQgPSBmYWxzZSwgODAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCcubHBfX3BsYW5zLWl0ZW1zIC5zbGljay1wcmV2JykuY2xpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2xpZGluZ1N0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGluZ1N0YXJ0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgJCgnLnNsaWNrLW5leHQ6bm90KC5zbGljay1kaXNhYmxlZCknKS5jbG9zZXN0KCcubHBfX3BsYW5zJykuZmluZCgnLmxwX19wbGFucy1kZWNvcl9uZXh0JykucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKTtcclxuICAgICAgICAgICAgICAgICQoJy5zbGljay1wcmV2LnNsaWNrLWRpc2FibGVkJykuY2xvc2VzdCgnLmxwX19wbGFucycpLmZpbmQoJy5scF9fcGxhbnMtZGVjb3JfcHJldicpLmFkZENsYXNzKFwiZGlzYWJsZWRcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudENhcmROdW1iZXI6IGFueSA9ICQodGhpcykuY2xvc2VzdCgnLmxwX19wbGFucy1pdGVtcycpLmZpbmQoJy5scF9fcGxhbi5scF9fcGxhbl9iaWcnKS5hdHRyKCdkYXRhLXRhcmdldCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcubHBfX3BsYW5zLWl0ZW1zJykuZmluZCgnLmxwX19wbGFuJykucmVtb3ZlQ2xhc3MoXCJscF9fcGxhbl9iaWdcIik7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2FyZE51bWJlciA9IHBhcnNlSW50KGN1cnJlbnRDYXJkTnVtYmVyKSAtIDE7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT4kKHRoaXMpLmNsb3Nlc3QoJy5scF9fcGxhbnMtaXRlbXMnKS5zbGljaygnc2xpY2tHb1RvJywgY3VycmVudENhcmROdW1iZXIgLSAxKSwgNTAwKTtcclxuICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLmxwX19wbGFucy1pdGVtcycpLmZpbmQoXCIjbHBfX3BsYW4tXCIgKyBjdXJyZW50Q2FyZE51bWJlcikuYWRkQ2xhc3MoXCJscF9fcGxhbl9iaWdcIik7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT50aGlzLnNsaWRpbmdTdGFydGVkID0gZmFsc2UsIDEwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVuSW5Qcm9ncmVzc0NhcmQpIHtcclxuICAgICAgICAgICAgdGhpcy4kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgKCkgPT4gdGhpcy5pbml0U2xpY2sobGVhcm5pbmdQYXRoRW50cmllcykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsICgpID0+IHRoaXMuaW5pdFNsaWNrV2l0aEZpcnN0U2xpZGUobGVhcm5pbmdQYXRoRW50cmllcykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdFNsaWNrKGxlYXJuaW5nUGF0aEVudHJpZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoJCh3aW5kb3cpLndpZHRoKCkgPj0gOTkyKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGxwIG9mIGxlYXJuaW5nUGF0aEVudHJpZXMpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzdGFydENvdXJzZSA9IDE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGxwLmRlcGVuZENvdXJzZXMgJiYgbHAuZGVwZW5kQ291cnNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBscC5kZXBlbmRDb3Vyc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb3Vyc2UgPSBscC5kZXBlbmRDb3Vyc2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRDb3Vyc2VTdGF0dXMoY291cnNlKSA9PT0gXCJJTl9QUk9HUkVTU1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmdldENvdXJzZVN0YXR1cyhjb3Vyc2UpID09PSBcIk5PVF9TVEFSVEVEXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q291cnNlID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICQoXCIjbHBfX2NhdGVnb3J5LVwiICsgbHAuaWQpLmZpbmQoXCIubHBfX3BsYW5cIikucmVtb3ZlQ2xhc3MoXCJscF9fcGxhbl9iaWdcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2xwX19jYXRlZ29yeS1cIiArIGxwLmlkICsgXCIgI2xwX19wbGFuLVwiICsgc3RhcnRDb3Vyc2UpLmFkZENsYXNzKFwibHBfX3BsYW5fYmlnXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNscF9fY2F0ZWdvcnktXCIgKyBscC5pZCArIFwiIC5scF9fcGxhbnMtaXRlbXNcIikuc2xpY2soJ3NsaWNrR29UbycsIDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdGFydENvdXJzZSA+IDUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcuc2xpY2stcHJldjpub3QoLnNsaWNrLWRpc2FibGVkKScpLmNsb3Nlc3QoJy5scF9fcGxhbnMnKS5maW5kKCcubHBfX3BsYW5zLWRlY29yX3ByZXYnKS5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcuc2xpY2stcHJldjpub3QoLnNsaWNrLWRpc2FibGVkKScpLmNsb3Nlc3QoJy5scF9fcGxhbnMnKS5maW5kKCcubHBfX3BsYW5zLWRlY29yX3ByZXYnKS5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJy5zbGljay1uZXh0LnNsaWNrLWRpc2FibGVkJykuY2xvc2VzdCgnLmxwX19wbGFucycpLmZpbmQoJy5scF9fcGxhbnMtZGVjb3JfbmV4dCcpLmFkZENsYXNzKFwiZGlzYWJsZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDk5MSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBscCBvZiBsZWFybmluZ1BhdGhFbnRyaWVzKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2xwX19jYXRlZ29yeS1cIiArIGxwLmlkKS5maW5kKFwiLmxwX19wbGFuXCIpLnJlbW92ZUNsYXNzKFwibHBfX3BsYW5fYmlnXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0U2xpY2tXaXRoRmlyc3RTbGlkZShsZWFybmluZ1BhdGhFbnRyaWVzKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpID49IDk5Mikge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBscCBvZiBsZWFybmluZ1BhdGhFbnRyaWVzKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2xwX19jYXRlZ29yeS1cIiArIGxwLmlkKS5maW5kKFwiLmxwX19wbGFuXCIpLnJlbW92ZUNsYXNzKFwibHBfX3BsYW5fYmlnXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNscF9fY2F0ZWdvcnktXCIgKyBscC5pZCArIFwiICNscF9fcGxhbi0xXCIpLmFkZENsYXNzKFwibHBfX3BsYW5fYmlnXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNscF9fY2F0ZWdvcnktXCIgKyBscC5pZCArIFwiIC5scF9fcGxhbnMtaXRlbXNcIikuc2xpY2soJ3NsaWNrR29UbycsIDApO1xyXG4gICAgICAgICAgICAgICAgJCgnLnNsaWNrLXByZXY6bm90KC5zbGljay1kaXNhYmxlZCknKS5jbG9zZXN0KCcubHBfX3BsYW5zJykuZmluZCgnLmxwX19wbGFucy1kZWNvcl9wcmV2JykucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKTtcclxuICAgICAgICAgICAgICAgICQoJy5zbGljay1uZXh0LnNsaWNrLWRpc2FibGVkJykuY2xvc2VzdCgnLmxwX19wbGFucycpLmZpbmQoJy5scF9fcGxhbnMtZGVjb3JfbmV4dCcpLmFkZENsYXNzKFwiZGlzYWJsZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDk5MSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBscCBvZiBsZWFybmluZ1BhdGhFbnRyaWVzKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2xwX19jYXRlZ29yeS1cIiArIGxwLmlkKS5maW5kKFwiLmxwX19wbGFuXCIpLnJlbW92ZUNsYXNzKFwibHBfX3BsYW5fYmlnXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0aWFsaXplU2xpY2sobGVhcm5pbmdQYXRoc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTGVhcm5pbmdQYXRoPiwgb3BlbkluUHJvZ3Jlc3NDYXJkOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgbHBJdGVtc0VsZW1lbnQgPSAkKFwiLmxwX19wbGFucy1pdGVtc1wiKTtcclxuICAgICAgICBpZiAobHBJdGVtc0VsZW1lbnQubm90KCcuc2xpY2staW5pdGlhbGl6ZWQnKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxwSXRlbXNFbGVtZW50Lm5vdCgnLnNsaWNrLWluaXRpYWxpemVkJykuc2xpY2sodGhpcy5zbGlja1BhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZW5JblByb2dyZXNzQ2FyZCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRTbGljayhsZWFybmluZ1BhdGhzR3JpZE1vZGVsLmVudHJpZXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA+PSA5OTIpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGxwIG9mIGxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZW50cmllcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkNhcmQoMSwgbHAuaWQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpYWxpemVIZWxwZXJNZXRob2RzRm9yU2xpY2sobGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5lbnRyaWVzLCBvcGVuSW5Qcm9ncmVzc0NhcmQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PnRoaXMudXBkYXRlVGFiaW5kZXgoKSwgNTAwKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0FsbExQKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBscEJsb2NrRWxlbWVudCA9ICQoXCIjbHBfX2NhdGVnb3J5LVwiICsgbGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlQnRuQWN0aXZlQ2xhc3MobGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgICAgIGxwQmxvY2tFbGVtZW50LmFkZENsYXNzKFwibHBfX2NhdGVnb3J5X29wZW5cIik7XHJcbiAgICAgICAgbHBCbG9ja0VsZW1lbnQuZmluZCgnLmxwX19wbGFucy1kZWNvcicpLmFkZENsYXNzKFwiZGlzYWJsZWRcIik7XHJcblxyXG4gICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA+PSA5OTIpIHtcclxuICAgICAgICAgICAgbHBCbG9ja0VsZW1lbnQuZmluZCgnLmxwX19wbGFuJykuYWRkQ2xhc3MoXCJscF9fcGxhbl9iaWdcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJCh3aW5kb3cpLndpZHRoKCkgPCA1NzUpIHtcclxuICAgICAgICAgICAgbHBCbG9ja0VsZW1lbnQuZmluZCgnLmxwX19wbGFuW2RhdGEtdGFyZ2V0PScgKyAxICsgJ10nKS5hZGRDbGFzcyhcImxwX19wbGFuX2JpZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKT0+dGhpcy51cGRhdGVUYWJpbmRleCgpLCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlQWxsTFAobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGxwQmxvY2tFbGVtZW50ID0gJChcIiNscF9fY2F0ZWdvcnktXCIgKyBsZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgdGhpcy50b2dnbGVCdG5BY3RpdmVDbGFzcyhsZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgbHBCbG9ja0VsZW1lbnQuZmluZCgnLmxwX19wbGFuJykucmVtb3ZlQ2xhc3MoXCJscF9fcGxhbl9iaWdcIik7XHJcbiAgICAgICAgbHBCbG9ja0VsZW1lbnQucmVtb3ZlQ2xhc3MoXCJscF9fY2F0ZWdvcnlfb3BlblwiKTtcclxuICAgICAgICBscEJsb2NrRWxlbWVudC5maW5kKCcubHBfX3BsYW5zLWRlY29yX25leHQnKS5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xyXG5cclxuICAgICAgICBpZiAoJCh3aW5kb3cpLndpZHRoKCkgPj0gOTkyKSB7XHJcbiAgICAgICAgICAgIGxwQmxvY2tFbGVtZW50LmZpbmQoJy5scF9fcGxhbltkYXRhLXRhcmdldD0nICsgMSArICddJykuYWRkQ2xhc3MoXCJscF9fcGxhbl9iaWdcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJCh3aW5kb3cpLndpZHRoKCkgPCA1NzUpIHtcclxuICAgICAgICAgICAgbHBCbG9ja0VsZW1lbnQuZmluZCgnLmxwX19wbGFuW2RhdGEtdGFyZ2V0PScgKyAxICsgJ10nKS5yZW1vdmVDbGFzcyhcImxwX19wbGFuX2JpZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKT0+dGhpcy51cGRhdGVUYWJpbmRleCgpLCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVUYWJpbmRleCgpIHtcclxuICAgICAgICBpZiAoJChcIi5scF9fcGxhbi1saW5rXCIpICYmICQoXCIubHBfX3BsYW4tbGlua1wiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBscFBsYW5zID0gJChcIi5scF9fcGxhbi1saW5rXCIpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxwUGxhbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxwUGxhbnNbaV0uc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgXCIwXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9nZ2xlQnRuQWN0aXZlQ2xhc3MobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSAkKFwiI2xwX19jYXRlZ29yeS1cIiArIGxlYXJuaW5nUGF0aElkKTtcclxuICAgICAgICBlbGVtZW50LmZpbmQoJy5scF9fYWN0aW9uJykuZmluZCgnLmJ0bicpLnRvZ2dsZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGVsZW1lbnQuZmluZCgnLmxwX19wbGFucy1pdGVtcycpLnNsaWNrKCdzbGlja0dvVG8nLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlbkNhcmQoaW5kZXhQbGFuTHA6IG51bWJlciwgbGVhcm5pbmdQYXRoSWQ6IG51bWJlciwgaXNTaG93QWxsQ2FyZHM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBsZWFybmluZ1BhdGhFbGVtZW50ID0gJChcIiNscF9fY2F0ZWdvcnktXCIgKyBsZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgY29uc3QgY2FyZEVsZW1lbnQgPSAkKFwiI2xwX19jYXRlZ29yeS1cIiArIGxlYXJuaW5nUGF0aElkICsgXCIgI2xwX19wbGFuLVwiICsgaW5kZXhQbGFuTHApO1xyXG5cclxuICAgICAgICBpZiAoIWlzU2hvd0FsbENhcmRzKSB7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50Q2FyZE51bWJlciA9IGxlYXJuaW5nUGF0aEVsZW1lbnQuZmluZCgnLmxwX19wbGFuLmxwX19wbGFuX2JpZycpLmF0dHIoJ2RhdGEtdGFyZ2V0Jyk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGVhcm5pbmdQYXRoRWxlbWVudC5maW5kKFwiLmxwX19wbGFucy1pdGVtc1wiKS5zbGljaygnc2xpY2tHb1RvJywgaW5kZXhQbGFuTHAgLSAxKTtcclxuICAgICAgICAgICAgICAgICQoJy5zbGljay1wcmV2Om5vdCguc2xpY2stZGlzYWJsZWQpJykuY2xvc2VzdCgnLmxwX19wbGFucycpLmZpbmQoJy5scF9fcGxhbnMtZGVjb3JfcHJldicpLnJlbW92ZUNsYXNzKFwiZGlzYWJsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAkKCcuc2xpY2stbmV4dC5zbGljay1kaXNhYmxlZCcpLmNsb3Nlc3QoJy5scF9fcGxhbnMnKS5maW5kKCcubHBfX3BsYW5zLWRlY29yX25leHQnKS5hZGRDbGFzcyhcImRpc2FibGVkXCIpO1xyXG4gICAgICAgICAgICB9LCBpbmRleFBsYW5McCAtIGN1cnJlbnRDYXJkTnVtYmVyID4gMSA/IDMwMCA6IDApO1xyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhFbGVtZW50LmZpbmQoJy5scF9fcGxhbicpLnJlbW92ZUNsYXNzKFwibHBfX3BsYW5fYmlnXCIpO1xyXG4gICAgICAgICAgICBjYXJkRWxlbWVudC5hZGRDbGFzcyhcImxwX19wbGFuX2JpZ1wiKTtcclxuICAgICAgICAgICAgbGVhcm5pbmdQYXRoRWxlbWVudC5maW5kKCcubHBfX2FjdGlvbiAuYnRuJykuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aEVsZW1lbnQuZmluZCgnLmxwX19hY3Rpb24gLmJ0bl9jbG9zZScpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlRGF0ZXNTdHJpbmcoY291cnNlOiBJQ291cnNlKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgbGV0IGNvdXJzZURhdGVzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICAgICAgICBpZiAoY291cnNlLmVuZERhdGUpIHtcclxuICAgICAgICAgICAgY291cnNlRGF0ZXMuc2V0KFwiZW5kRGF0ZVwiLCBuZXcgRGF0ZShjb3Vyc2UuZW5kRGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb3Vyc2UuZW5kRGF0ZSB8fCBjb3Vyc2Uuc3RhcnREYXRlID4gRGF0ZS5ub3coKSkge1xyXG4gICAgICAgICAgICBjb3Vyc2VEYXRlcy5zZXQoXCJzdGFydERhdGVcIiwgbmV3IERhdGUoY291cnNlLnN0YXJ0RGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY291cnNlRGF0ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFBvcHVwQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgICAgICBsZXQgY2FyZHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiY2FyZCBpbmZvcm1hdGlvbl90b29sdGlwXCIpKTtcclxuICAgICAgICBmb3IgKGxldCBjYXJkIG9mIGNhcmRzKSB7XHJcbiAgICAgICAgICAgIGxldCByZWM6IENsaWVudFJlY3QgPSBjYXJkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICBsZXQgcG9wdXA6IEVsZW1lbnQgPSBjYXJkLnBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInBvcHVwX29uaG92ZXJcIikuaXRlbSgwKTtcclxuICAgICAgICAgICAgaWYgKHJlYy5yaWdodCArIHBvcHVwLmNsaWVudFdpZHRoID49IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwicG9wdXBfb25ob3ZlciBsZWZ0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJyaWdodC1wb2ludGVyXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIHJpZ2h0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJsZWZ0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21tb25OYXZpZ2F0aW9ufSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vbk5hdmlnYXRpb25cIjtcclxuaW1wb3J0IHtDb21tb25TZXJ2aWNlfSBmcm9tIFwiLi9Db21tb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge0NvbW1vbkhvbWVTZXJ2aWNlfSBmcm9tIFwiLi9Db21tb25Ib21lU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IHZhciBDb21tb25Nb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJjb21tb25cIiwgW10pXHJcbiAgICAuc2VydmljZShDb21tb25TZXJ2aWNlLk5BTUUsIENvbW1vblNlcnZpY2UpXHJcbiAgICAuc2VydmljZShDb21tb25Ib21lU2VydmljZS5OQU1FLCBDb21tb25Ib21lU2VydmljZSlcclxuICAgIC5zZXJ2aWNlKENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRSwgQ29tbW9uRmlsdGVyU2VydmljZSlcclxuICAgIC5zZXJ2aWNlKENvbW1vbk5hdmlnYXRpb24uTkFNRSwgQ29tbW9uTmF2aWdhdGlvbik7XHJcbiIsImltcG9ydCB7Q29tbW9uUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL0NvbW1vblJvdXRlclwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4vRXZlbnRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb21tb25OYXZpZ2F0aW9uIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY29tbW9uLkNvbW1vbk5hdmlnYXRpb25cIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgQ29tbW9uUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgcHJpdmF0ZSBwcmV2ZW50TmF2aWdhdGlvbkZyb21Vcmw6IHN0cmluZzsgLy8gd2luZG93LmxvY2F0aW9uLmhyZWYgaXMgc3RvcmVkIGhlcmUgd2hlbiBuZWVkZWRcclxuICAgIHByaXZhdGUgZnVsbFNjcmVlblJlZ0V4cDogUmVnRXhwID0gbmV3IFJlZ0V4cCgnW1xcPyZdKGZ1bGxTY3JlZW4pKChcXD1mYWxzZSl8KFxcPXRydWUpKT8kJyk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb21tb25Sb3V0ZXI6IENvbW1vblJvdXRlcikge1xyXG4gICAgICAgICRyb290U2NvcGUuJG9uKCckbG9jYXRpb25DaGFuZ2VTdGFydCcsIChldmVudDogYW5ndWxhci5JQW5ndWxhckV2ZW50LCBuZXdVcmw6IHN0cmluZywgb2xkVXJsOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdtb2RhbC1vcGVuJyk7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJcIiArIG9sZFVybCArIFwiIC0+IFwiICsgbmV3VXJsKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcmV2ZW50TmF2aWdhdGlvbkZyb21VcmwgfHwgIXRoaXMuZXF1YWxzSWdub3JlRnVsbFNjcmVlbihvbGRVcmwsIHRoaXMucHJldmVudE5hdmlnYXRpb25Gcm9tVXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidGhpcy5wcmV2ZW50TmF2aWdhdGlvbkZyb21Vcmw6XCIsIHRoaXMucHJldmVudE5hdmlnYXRpb25Gcm9tVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXZlbnROYXZpZ2F0aW9uRnJvbVVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lcXVhbHNJZ25vcmVGdWxsU2NyZWVuKG5ld1VybCwgdGhpcy5wcmV2ZW50TmF2aWdhdGlvbkZyb21VcmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIllvdSBjYW4ndCBsZWF2ZSB0aGlzIHBhZ2UgdW5sZXNzIHlvdSBjb21wbGV0ZSBvciBjYW5jZWwgdGhlIHF1aXogKHN1cnZleSBvciBmbGFzaGNhcmRzKVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCh3aW5kb3cpLmJpbmQoXCJiZWZvcmV1bmxvYWRcIiwgKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChFdmVudC5CRUZPUkVfTkFWSUdBVElPTl9VTkxPQUQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2ZW50TmF2aWdhdGlvbkZyb21VcmwgJiYgdGhpcy5wcmV2ZW50TmF2aWdhdGlvbkZyb21VcmwgPT09IHdpbmRvdy5sb2NhdGlvbi5ocmVmKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJZb3UgY2FuJ3QgbGVhdmUgdGhpcyBwYWdlIHVubGVzcyB5b3UgY29tcGxldGUgb3IgY2FuY2VsIHRoZSBxdWl6IChzdXJ2ZXkgb3IgZmxhc2hjYXJkcylcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhbGxvd05hdmlnYXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50TmF2aWdhdGlvbkZyb21VcmwgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmV2ZW50TmF2aWdhdGlvbigpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIndpbmRvdy5sb2NhdGlvbi5ocmVmOlwiLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgbGV0IF91cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICB0aGlzLnByZXZlbnROYXZpZ2F0aW9uRnJvbVVybCA9IF91cmw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9Ob3RGb3VuZCgpIHtcclxuICAgICAgICB0aGlzLmFsbG93TmF2aWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvbW1vblJvdXRlci5ub3RGb3VuZFVybCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVxdWFsc0lnbm9yZUZ1bGxTY3JlZW4oZmlyc3RVcmw6IHN0cmluZywgc2Vjb25kVXJsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZmlyc3RVcmwgPT0gbnVsbCB8fCBmaXJzdFVybCA9PSB1bmRlZmluZWQgfHwgc2Vjb25kVXJsID09IG51bGwgfHwgc2Vjb25kVXJsID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmlyc3RVcmwgPT09IHNlY29uZFVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBtb2RpZmllZEZpcnN0VXJsOiBzdHJpbmcgPSBmaXJzdFVybC5yZXBsYWNlKHRoaXMuZnVsbFNjcmVlblJlZ0V4cCwgXCJcIik7XHJcbiAgICAgICAgbGV0IG1vZGlmaWVkU2Vjb25kVXJsOiBzdHJpbmcgPSBzZWNvbmRVcmwucmVwbGFjZSh0aGlzLmZ1bGxTY3JlZW5SZWdFeHAsIFwiXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gbW9kaWZpZWRGaXJzdFVybCA9PT0gbW9kaWZpZWRTZWNvbmRVcmw7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lQYXJ0aWNpcGF0aW9uRm9ybX0gZnJvbSBcIi4vSVBhcnRpY2lwYXRpb25Gb3JtXCI7XHJcbmltcG9ydCB7SUNvdXJzZVBhcnRpY2lwYXRpb25Gb3JtfSBmcm9tIFwiLi9JQ291cnNlUGFydGljaXBhdGlvbkZvcm1FbnRyeVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCBJUHJvbWlzZSA9IGFuZ3VsYXIuSVByb21pc2U7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbW9uU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvbW1vbi5Db21tb25TZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY2VcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjZTogYW5ndWxhci5JU0NFU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUGFydGljaXBhdGlvbkZvcm0ob2JqZWN0SWQ6IG51bWJlciwgb2JqZWN0VHlwZTogc3RyaW5nLCB2ZXJzaW9uOiBudW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYXRpb25Gb3JtOiBJUGFydGljaXBhdGlvbkZvcm0pOiBhbmd1bGFyLklQcm9taXNlPElQYXJ0aWNpcGF0aW9uRm9ybT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb21tb24vcGFydGljaXBhdGlvbkZvcm0/b2JqZWN0SWQ9Om9iamVjdElkJm9iamVjdFR5cGU9Om9iamVjdFR5cGUmdmVyc2lvbj06dmVyc2lvblwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0SWRcIiwgb2JqZWN0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvYmplY3RUeXBlXCIsIG9iamVjdFR5cGUpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp2ZXJzaW9uXCIsIHZlcnNpb24pXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHBhcnRpY2lwYXRpb25Gb3JtKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYXJ0aWNpcGF0aW9uRm9ybShvYmplY3RJZDogbnVtYmVyLCBvYmplY3RUeXBlOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElQYXJ0aWNpcGF0aW9uRm9ybT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb21tb24vcGFydGljaXBhdGlvbkZvcm0/b2JqZWN0SWQ9Om9iamVjdElkJm9iamVjdFR5cGU9Om9iamVjdFR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdElkXCIsIG9iamVjdElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0VHlwZVwiLCBvYmplY3RUeXBlKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uRm9ybXMobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZVBhcnRpY2lwYXRpb25Gb3JtW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY29tbW9uL2xlYXJuaW5nUGF0aFBhcnRpY2lwYXRpb25Gb3Jtcz9sZWFybmluZ1BhdGhJZD06bGVhcm5pbmdQYXRoSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYXJ0aWNpcGF0aW9uRm9ybVNwZWNpZmllZChvYmplY3RJZDogbnVtYmVyLCBvYmplY3RUeXBlOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcclxuICAgICAgICAgICAgICAgIGAvYXBpL2NvbW1vbi9wYXJ0aWNpcGF0aW9uRm9ybVNwZWNpZmllZD9vYmplY3RJZD0ke29iamVjdElkfSZvYmplY3RUeXBlPSR7b2JqZWN0VHlwZX1gXHJcbiAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVVSTFBhcmFtZXRlcih1cmwsIHBhcmFtLCBwYXJhbVZhbCkge1xyXG4gICAgICAgIGxldCBuZXdBZGRpdGlvbmFsVVJMID0gXCJcIjtcclxuICAgICAgICBsZXQgdGVtcEFycmF5ID0gdXJsLnNwbGl0KFwiP1wiKTtcclxuICAgICAgICBsZXQgYmFzZVVSTCA9IHRlbXBBcnJheVswXTtcclxuICAgICAgICBsZXQgYWRkaXRpb25hbFVSTCA9IHRlbXBBcnJheVsxXTtcclxuICAgICAgICBsZXQgdGVtcCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxVUkwpIHtcclxuICAgICAgICAgICAgdGVtcEFycmF5ID0gYWRkaXRpb25hbFVSTC5zcGxpdChcIiZcIik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTx0ZW1wQXJyYXkubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICAgICAgaWYodGVtcEFycmF5W2ldLnNwbGl0KCc9JylbMF0gIT0gcGFyYW0pe1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FkZGl0aW9uYWxVUkwgKz0gdGVtcCArIHRlbXBBcnJheVtpXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wID0gXCImXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByb3dzX3R4dCA9IHRlbXAgKyBcIlwiICsgcGFyYW0gKyBcIj1cIiArIHBhcmFtVmFsO1xyXG4gICAgICAgIHJldHVybiBiYXNlVVJMICsgXCI/XCIgKyBuZXdBZGRpdGlvbmFsVVJMICsgcm93c190eHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrVmVyc2lvblVwZGF0ZUlzUmVxdWlyZWQoKTogSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZlcnNpb24oKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5idWlsZFZlcnNpb24gIT0gQXBwUHJvcGVydGllcy5idWlsZFZlcnNpb25cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFZlcnNpb24oKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBsZXQgaGVhZGVycyA9IHtcclxuICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUsIG5vLXN0b3JlJyxcclxuICAgICAgICAgICAgJ0lmLU1vZGlmaWVkLVNpbmNlJzogJ1NhdCwgMSBKYW4gMjAwMCAwMDowMDowMCBHTVQnIC8vIElFXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgdXJsOiBzdHJpbmcgPSB0aGlzLmdldENsaWVudFJvb3QoKSArIGB2ZXJzaW9uLmpzb25gO1xyXG4gICAgICAgIGxldCBjb25maWc6IGFueSA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgd2l0aG91dEF1dGhvcml6YXRpb246IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh1cmwsIGNvbmZpZykudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENsaWVudFJvb3QoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgYWJzVXJsID0gdGhpcy4kbG9jYXRpb24uYWJzVXJsKCk7XHJcbiAgICAgICAgbGV0IGxhc3RTbGFzaEluZGV4ID0gdGhpcy4kbG9jYXRpb24uYWJzVXJsKCkubWF0Y2goLy4rIy8pWzBdLnNsaWNlKDAsIC0xKS5sYXN0SW5kZXhPZihcIi9cIik7XHJcbiAgICAgICAgcmV0dXJuIGFic1VybC5zbGljZSgwLCBsYXN0U2xhc2hJbmRleCArIDEpO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBFdmVudCB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEJFRk9SRV9OQVZJR0FUSU9OX1VOTE9BRDogc3RyaW5nID0gXCJjb21tb246YmVmb3JlVW5sb2FkXCI7XHJcbn0iLCIvLyB0b2RvOiBpbXByb3ZlIGNhY2hlIGZvciBoZWF2eSByZXF1ZXN0c1xyXG5leHBvcnQgY2xhc3MgRXhwaXJhdGlvbkNhY2hlIHtcclxuICAgIHByaXZhdGUgc3RvcmU7XHJcbiAgICBwcml2YXRlIHRpbWVvdXQ7XHJcblxyXG5cclxuICAgIC8vIDYwMDAwID0+IDEgbWludXRlXHJcbiAgICBjb25zdHJ1Y3Rvcih0aW1lb3V0ID0gNjAwMDApIHtcclxuICAgICAgICB0aGlzLnN0b3JlID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGtleSkge1xyXG4gICAgICAgIGtleSA9IHRoaXMucmVtb3ZlVVJMUGFyYW1ldGVyKGtleSwgXCJuby1jYWNoZVwiKTtcclxuICAgICAgICAvLyB0aGlzLnN0b3JlLmhhcyhrZXkpID8gY29uc29sZS5sb2coYGNhY2hlIGhpdGApIDogY29uc29sZS5sb2coYGNhY2hlIG1pc3NgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXQoa2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdXQoa2V5LCB2YWwpIHtcclxuICAgICAgICBrZXkgPSB0aGlzLnJlbW92ZVVSTFBhcmFtZXRlcihrZXksIFwibm8tY2FjaGVcIik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYGFkZCBrZXk6ICR7a2V5fWAsIHZhbCk7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5zZXQoa2V5LCB2YWwpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgcmVtb3ZpbmcgZXhwaXJlZCBrZXkgJHtrZXl9YCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGtleSk7XHJcbiAgICAgICAgfSwgdGhpcy50aW1lb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUoa2V5KSB7XHJcbiAgICAgICAga2V5ID0gdGhpcy5yZW1vdmVVUkxQYXJhbWV0ZXIoa2V5LCBcIm5vLWNhY2hlXCIpO1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGVsZXRlKGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQWxsKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcmUgPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQWxsQnlLZXkoa2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQga2V5cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZm9yRWFjaCgoa2V5U3RvcmUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleVN0b3JlLmluZGV4T2Yoa2V5KSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleVN0b3JlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRlbGV0ZShrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSgpIHtcclxuICAgICAgICAvL25vIG9wIGhlcmUgYmVjYXVzZSB0aGlzIGlzIHN0YW5kYWxvbmUsIG5vdCBhIHBhcnQgb2YgJGNhY2hlRmFjdG9yeVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlVVJMUGFyYW1ldGVyKHVybCwgcGFyYW1ldGVyKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgdXJscGFydHMgPSB1cmwuc3BsaXQoJz8nKTtcclxuICAgICAgICBpZiAodXJscGFydHMubGVuZ3RoID49IDIpIHtcclxuICAgICAgICAgICAgbGV0IHByZWZpeCA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXIpICsgJz0nO1xyXG4gICAgICAgICAgICBsZXQgcGFycyA9IHVybHBhcnRzWzFdLnNwbGl0KC9bJjtdL2cpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHBhcnMubGVuZ3RoOyBpLS0gPiAwOykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcnNbaV0ubGFzdEluZGV4T2YocHJlZml4LCAwKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdXJscGFydHNbMF0gKyAocGFycy5sZW5ndGggPiAwID8gJz8nICsgcGFycy5qb2luKCcmJykgOiAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UG9saWNpZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1BvbGljaWVzUm91dGVyXCI7XHJcbmltcG9ydCBJV2luZG93U2VydmljZSA9IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2U7XHJcbmltcG9ydCB7U3RvcmFnZXMsIFN0b3JhZ2VXcmFwcGVyfSBmcm9tIFwiLi4vaW5mcmFzdHJ1Y3R1cmUvU3RvcmFnZVwiO1xyXG5cclxuaW50ZXJmYWNlIElBY2NlcHRDb29raWVzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICB2bT86IEFjY2VwdENvb2tpZXNDb250cm9sbGVyXHJcbn1cclxuXHJcbmNsYXNzIEFjY2VwdENvb2tpZXNDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIEFDQ0VQVF9DT09LSUVTID0gXCJhY2NlcHRfY29va2llc1wiO1xyXG5cclxuICAgIHB1YmxpYyBhY2NlcHRDb29raWVzRXhpc3RzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBQb2xpY2llc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFN0b3JhZ2VzLkxPQ0FMX05BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElBY2NlcHRDb29raWVzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljICR3aW5kb3c6IElXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHBvbGljaWVzUm91dGVyOiBQb2xpY2llc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlOiBTdG9yYWdlV3JhcHBlcikge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgbGV0IGFjY2VwdENvb2tpZXM6IHN0cmluZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldDxzdHJpbmc+KEFjY2VwdENvb2tpZXNDb250cm9sbGVyLkFDQ0VQVF9DT09LSUVTKTtcclxuICAgICAgICBpZiAoYWNjZXB0Q29va2llcykge1xyXG4gICAgICAgICAgICB0aGlzLmFjY2VwdENvb2tpZXNFeGlzdHMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0Nvb2tpZVBvbGljeSgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgYmFzZVVybCA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSxcclxuICAgICAgICAgICAgdXJsID0gYmFzZVVybCArIFwiI1wiICsgdGhpcy5wb2xpY2llc1JvdXRlci5jb29raWVQb2xpY3lVcmwoKTtcclxuICAgICAgICB0aGlzLiR3aW5kb3cub3Blbih1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY2NlcHQoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGFjY2VwdENvb2tpZXM6IGFueSA9IHt9O1xyXG4gICAgICAgIGFjY2VwdENvb2tpZXMuY3JlYXRlZEF0ID0gbW9tZW50LnV0YygpLmZvcm1hdCgpO1xyXG4gICAgICAgIGFjY2VwdENvb2tpZXMuZG9tYWluID0gdGhpcy4kd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnB1dChBY2NlcHRDb29raWVzQ29udHJvbGxlci5BQ0NFUFRfQ09PS0lFUywgYWNjZXB0Q29va2llcyk7XHJcbiAgICAgICAgdGhpcy5hY2NlcHRDb29raWVzRXhpc3RzID0gdHJ1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFjY2VwdENvb2tpZXNEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICB2YXIgZGlyZWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0gdHJ1ZTtcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gQWNjZXB0Q29va2llc0NvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL2FjY2VwdC1jb29raWVzLmh0bWxcIik7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5BY2NlcHRDb29raWVzRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiZXhwb3J0IGZ1bmN0aW9uIEF1dG9Gb2N1c0RpcmVjdGl2ZUZhY3RvcnkoJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5KSB7XHJcbiAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBlbGVtZW50WzBdLmZvY3VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGlua1xyXG4gICAgfTtcclxufVxyXG5cclxuQXV0b0ZvY3VzRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgXCIkdGltZW91dFwiXHJcbl07IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXZhdGFyRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICB1c2VySWQ/OiBudW1iZXI7XHJcbiAgICBpc0VkaXQ/OiBib29sZWFuO1xyXG4gICAgZGVmYXVsdExvZ28/OiBzdHJpbmc7XHJcbiAgICBhdmF0YXJFcnJvcnM/OiBhbnk7XHJcblxyXG4gICAgYXZhdGFyVm0/OiBBdmF0YXJDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlIGV4dGVuZHMgRmlsZSB7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF2YXRhckNvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBwcmV2aWV3OiBJRmlsZTtcclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcbiAgICBwdWJsaWMgcHJldmlld1VybDogc3RyaW5nO1xyXG4gICAgcHVibGljIGNyb3BwZWRJbWFnZTogRmlsZTtcclxuICAgIHB1YmxpYyBoYXNQcmV2aWV3VXJsQ2FuY2VsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgZGVmYXVsdExvZ286IHN0cmluZyA9IFwidGhlbWVzL2RlZmF1bHQvaW1nL2RlbW8vZGVmYXVsdF9wcm9maWxlLnBuZ1wiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElBdmF0YXJEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLmF2YXRhclZtID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy4kc2NvcGUuZGVmYXVsdExvZ28pIHtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0TG9nbyA9IHRoaXMuJHNjb3BlLmRlZmF1bHRMb2dvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlcigpO1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJBdmF0YXJJbWFnZSgpO1xyXG5cclxuICAgICAgICAkc2NvcGUuJHdhdGNoKCdhdmF0YXJWbS4kc2NvcGUudXNlcklkJywgKHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRVc2VyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiR3YXRjaCgnYXZhdGFyVm0ucHJldmlldycsICh2YWx1ZTogSUZpbGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoJ2F2YXRhci51cGRhdGUuaW1nJywgdGhpcy5wcmV2aWV3KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJHdhdGNoKCdhdmF0YXJWbS5jcm9wcGVkSW1hZ2UnLCAodmFsdWU6IElGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNyb3BwZWRJbWFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoJ2F2YXRhci51cGRhdGUuaW1nJywgdGhpcy5jcm9wcGVkSW1hZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lckF2YXRhckltYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS4kb24oJ2F2YXRhci51cGRhdGUuaW1nJywgKGV2ZW50LCBwcmV2aWV3VXJsKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlldyA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUucHJldmlld1VybCA9IHByZXZpZXdVcmw7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLmF2YXRhckVycm9ycyA9IHt9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkVXNlcigpIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiRzY29wZS51c2VySWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzZXIuaWQgIT0gdGhpcy4kc2NvcGUudXNlcklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXQodGhpcy4kc2NvcGUudXNlcklkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1c2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHVzZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFByZXZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuY3JvcHBlZEltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLmF2YXRhckVycm9ycyA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlLnByZXZpZXdVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5wcmV2aWV3VXJsID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS4kYnJvYWRjYXN0KCdhdmF0YXIucmVzZXQuaW1nJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXN0b3JlUHJldmlld1VybCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByZXZpZXcgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3VXJsID0gdGhpcy51c2VyUHJvZmlsZS5wcmV2aWV3VXJsO1xyXG4gICAgICAgIHRoaXMuY3JvcHBlZEltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwbG9hZEZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgJCgnI3ByZXZpZXdGaWVsZCcpLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dDcm9wcGVyTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgJChcIiNpbWFnZUNyb3BwZXJNb2RhbFwiKS5tb2RhbChcInNob3dcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dDcm9wcGVyTW9kYWxBZnRlckxvYWQoKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ICE9IHVuZGVmaW5lZCB8fCB0aGlzLnByZXZpZXdVcmwgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hvd0Nyb3BwZXJNb2RhbCgpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2hvd0Nyb3BwZXJNb2RhbEFmdGVyTG9hZCgpXHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEF2YXRhckRpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogbmcuSURpcmVjdGl2ZSB7XHJcblxyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogbmcuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogbmcuSUF0dHJpYnV0ZXMsIGNvbnRyb2xsZXI6IEF2YXRhckNvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IG5nLklUcmFuc2NsdWRlRnVuY3Rpb24pIHtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9hdmF0YXIuaHRtbFwiKTtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5zY29wZSA9IHtcclxuICAgICAgICB1c2VySWQ6IFwiPT92aHNVc2VySWRcIixcclxuICAgICAgICBpc0VkaXQ6IFwiPT92aHNFZGl0XCIsXHJcbiAgICAgICAgZGVmYXVsdExvZ286IFwiPT92aHNEZWZhdWx0TG9nb1wiLFxyXG4gICAgICAgIGF2YXRhckVycm9yczogXCI9P2F2YXRhckVycm9yc1wiXHJcbiAgICB9O1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBBdmF0YXJDb250cm9sbGVyO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuQXZhdGFyRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7SVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHl9IGZyb20gXCIuLy4uL3JlZmVyZW5jZS9tb2RlbHMvSVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHlcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJ1c2luZXNzVW5pdFNlbGVjdG9yRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBuZy5JU2NvcGUge1xyXG4gICAgbW9kZWw/OiBhbnk7XHJcbiAgICBtb2RlbFByb3BlcnR5Pzogc3RyaW5nO1xyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gICAgbnVsbGFibGU/OiBib29sZWFuO1xyXG4gICAgZWxlbWVudE5hbWU/OiBzdHJpbmc7XHJcbiAgICBvblNlbGVjdG9yQ2hhbmdlPzogKCkgPT4ge307XHJcbiAgICBvblNlbGVjdG9yVmlzaWJsZT86ICgpID0+IHt9O1xyXG5cclxuICAgIHZtPzogQnVzaW5lc3NVbml0U2VsZWN0b3JDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQnVzaW5lc3NVbml0U2VsZWN0b3JDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgcmVmZXJlbmNlRW50aXRpZXM6IEFycmF5PElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5PjtcclxuICAgIHB1YmxpYyBzZWxlY3RvclZpc2libGU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYWxsQnVzaW5lc3NVbml0czogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkICRzY29wZTogSUJ1c2luZXNzVW5pdFNlbGVjdG9yRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVzaW5lc3NVbml0c1NlcnZpY2U6IEJ1c2luZXNzVW5pdHNTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RvclZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0b3JWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5hbGxCdXNpbmVzc1VuaXRzID0gdS5hbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICB2YXIgZmlsdGVyID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKCF1LmFsbEJ1c2luZXNzVW5pdHMpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlciA9IFwiaWQ6aW46XCI7XHJcbiAgICAgICAgICAgICAgICBpZiAodS5idXNpbmVzc1VuaXRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHUuYnVzaW5lc3NVbml0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciArPSBcIixcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgKz0gdS5idXNpbmVzc1VuaXRzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodS5idXNpbmVzc1VuaXRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RvclZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5tb2RlbFt0aGlzLiRzY29wZS5tb2RlbFByb3BlcnR5XSA9IHUuYnVzaW5lc3NVbml0c1swXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUub25TZWxlY3RvckNoYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5vblNlbGVjdG9yQ2hhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgKz0gXCItMVwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdG9yVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRzRm9yU2VsZWN0b3IoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlRW50aXRpZXMgPSA8QXJyYXk8SVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHk+PiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZmVyZW5jZUVudGl0aWVzLmxlbmd0aCA9PSAxICYmICF0aGlzLmFsbEJ1c2luZXNzVW5pdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3JWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5tb2RlbFt0aGlzLiRzY29wZS5tb2RlbFByb3BlcnR5XSA9IHRoaXMucmVmZXJlbmNlRW50aXRpZXNbMF0uaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUub25TZWxlY3RvckNoYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLm9uU2VsZWN0b3JDaGFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLm9uU2VsZWN0b3JWaXNpYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBCdXNpbmVzc1VuaXRTZWxlY3RvckRpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogbmcuSURpcmVjdGl2ZSB7XHJcbiAgICB2YXIgZGlyZWN0aXZlOiBuZy5JRGlyZWN0aXZlID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gQnVzaW5lc3NVbml0U2VsZWN0b3JDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0ge1xyXG4gICAgICAgIG1vZGVsOiBcIj12aHNNb2RlbFwiLFxyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6IFwiPXZoc01vZGVsUHJvcGVydHlcIixcclxuICAgICAgICBkaXNhYmxlZDogXCI9P3Zoc0Rpc2FibGVkXCIsXHJcbiAgICAgICAgcmVxdWlyZWQ6IFwiPT92aHNSZXF1aXJlZFwiLFxyXG4gICAgICAgIGVsZW1lbnROYW1lOiBcIkA/dmhzRWxlbWVudE5hbWVcIixcclxuICAgICAgICBudWxsYWJsZTogXCI9P3Zoc051bGxhYmxlXCIsXHJcbiAgICAgICAgb25TZWxlY3RvckNoYW5nZTogXCImdmhzT25DaGFuZ2VcIixcclxuICAgICAgICBvblNlbGVjdG9yVmlzaWJsZTogXCImdmhzT25TZWxlY3RvclZpc2libGVcIixcclxuICAgICAgICBmcm9tRHJvcGRvd246IFwiPT92aHNGcm9tRHJvcGRvd25cIixcclxuICAgIH07XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL2J1c2luZXNzLXVuaXQtc2VsZWN0b3IuaHRtbFwiKTtcclxuICAgIGRpcmVjdGl2ZS50cmFuc2NsdWRlID0gdHJ1ZTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblxyXG5CdXNpbmVzc1VuaXRTZWxlY3RvckRpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0NlcnRpZmljYXRlU2VydmljZX0gZnJvbSBcIi4uL2NlcnRpZmljYXRlcy9DZXJ0aWZpY2F0ZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ2VydGlmaWNhdGVUZW1wbGF0ZX0gZnJvbSBcIi4uL2NlcnRpZmljYXRlcy9tb2RlbHMvSUNlcnRpZmljYXRlVGVtcGxhdGVcIjtcclxuaW1wb3J0IHtDZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZX0gZnJvbSBcIi4uL2NlcnRpZmljYXRlcy9tb2RlbHMvQ2VydGlmaWNhdGVUZW1wbGF0ZVR5cGVcIjtcclxuaW1wb3J0IHtJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VDcmVhdGVFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDZXJ0aWZpY2F0ZXNFZGl0YWJsZVNlbGVjdG9yRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBlZHVjYXRpb25JdGVtSWQ/OiBudW1iZXI7XHJcbiAgICBlZHVjYXRpb25JdGVtQnVzaW5lc3NVbml0SWQ/OiBudW1iZXI7XHJcbiAgICBlZHVjYXRpb25JdGVtVHlwZT86IHN0cmluZztcclxuICAgIGVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXM/OiBBcnJheTxJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlPjtcclxuICAgIGN1cnJlbnRVc2VyQnVzaW5lc3NVbml0cz86IEFycmF5PG51bWJlcj47XHJcbiAgICBlZGl0YWJsZT86IGJvb2xlYW47XHJcbiAgICBzdHlsZTogYW55O1xyXG4gICAgb25TZWxlY3RvckNoYW5nZT86IChvYmplY3Q/OiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gICAgdm0/OiBDZXJ0aWZpY2F0ZXNFZGl0YWJsZVNlbGVjdG9yQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENlcnRpZmljYXRlc0VkaXRhYmxlU2VsZWN0b3JDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBNQVhfQ0VSVElGSUNBVEVfVkFMSURJVFlfUEVSSU9EOiBudW1iZXIgPSAxMDAwMDAwO1xyXG5cclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGg6IElMZWFybmluZ1BhdGggPSB7fTtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhJZDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBjaG9zZW5DZXJ0aWZpY2F0ZVRlbXBsYXRlOiBJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlO1xyXG4gICAgcHVibGljIGNob3NlbkNlcnRpZmljYXRlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjaG9zZW5DZXJ0aWZpY2F0ZUJVSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBuZXdDZXJ0aWZpY2F0ZVRlbXBsYXRlRmlsZTogRmlsZTtcclxuXHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc0FsbEJ1c2luZXNzVW5pdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlckJ1c2luZXNzVW5pdHM6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgZWRpdFdpbmRvdzogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBlcnJvcldpbmRvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjZXJ0aWZpY2F0ZVRlbXBsYXRlOiBJQ2VydGlmaWNhdGVUZW1wbGF0ZSA9IHtuYW1lOiBudWxsLCBmaWxlQ29udGVudElkOiBudWxsfTtcclxuXHJcbiAgICBwdWJsaWMgZXJyb3JzTWFwOiBNYXA8U3RyaW5nLCBTdHJpbmc+ID0gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4oKTtcclxuICAgIHB1YmxpYyBmaWxlVGl0bGU6IFN0cmluZztcclxuICAgIHB1YmxpYyBjZXJ0aWZpY2F0ZUNvbnRlbnQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgY2VydGlmaWNhdGVGaWxlVGl0bGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBpc1ByZXZpZXdIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIHJlZGlyZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgZWRpdGluZ0NlcnRpZmljYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXM6IEFycmF5PElDZXJ0aWZpY2F0ZVRlbXBsYXRlPiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBDZXJ0aWZpY2F0ZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIENlcnRpZmljYXRlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCAkc2NvcGU6IElDZXJ0aWZpY2F0ZXNFZGl0YWJsZVNlbGVjdG9yRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBjZXJ0aWZpY2F0ZUFwaTogQ2VydGlmaWNhdGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNlcnRpZmljYXRlU2VydmljZTogQ2VydGlmaWNhdGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdXBsb2FkZXI6IG5nLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJ1c2luZXNzVW5pdCgpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlc0J5QnVzaW5lc3NVbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weSh1c2VyLmJ1c2luZXNzVW5pdHMsIHRoaXMuY3VycmVudFVzZXJCdXNpbmVzc1VuaXRzKTtcclxuICAgICAgICAgICAgbGV0IGlzRWRpdDogYm9vbGVhbiA9ICEhJHNjb3BlLmVkdWNhdGlvbkl0ZW1JZDtcclxuICAgICAgICAgICAgaWYgKCFpc0VkaXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEF2YWlsYWJsZUNlcnRpZmljYXRlVGVtcGxhdGVzKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRWR1Y2F0aW9uSXRlbUNlcnRzRnJvbUF2YWlsYWJsZUNlcnRzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlc0ZvckVkdWNhdGlvbkl0ZW0odGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0V2luZG93ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRCdXNpbmVzc1VuaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlLmJ1c2luZXNzVW5pdElkID0gdGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUJ1c2luZXNzVW5pdElkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsdGVyRWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlc0J5QnVzaW5lc3NVbml0KCkge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXMgPSB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmJ1c2luZXNzVW5pdElkID09IHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1CdXNpbmVzc1VuaXRJZCB8fCBjLmJ1c2luZXNzVW5pdElkID09IG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJ1c2luZXNzVW5pdENoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy4kdGltZW91dChhID0+IHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnRhaW5BdXRvQ2VydGlmaWNhdGUoY2VydGlmaWNhdGVzOiBBcnJheTxJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlPik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBjb250YWluc0F1dG86IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAoY2VydGlmaWNhdGVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluc0F1dG87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNlcnRpZmljYXRlcy5mb3JFYWNoKGNlcnRpZmljYXRlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNBdXRvKGNlcnRpZmljYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGFpbnNBdXRvID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjb250YWluc0F1dG87XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQXV0byhjZXJ0aWZpY2F0ZTogSUV4dGVuZGVkQ2VydGlmaWNhdGVUZW1wbGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChjZXJ0aWZpY2F0ZS50eXBlID09IG51bGwgfHwgY2VydGlmaWNhdGUudHlwZSA9PSBDZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZS5NQU5VQUwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGNlcnRpZmljYXRlLnR5cGUgPT0gQ2VydGlmaWNhdGVUZW1wbGF0ZVR5cGUuQVVUTyB8fCBjZXJ0aWZpY2F0ZS50eXBlLnRvU3RyaW5nKCkgPT0gXCJBVVRPXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRBdXRvKGNlcnRpZmljYXRlOiBJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYy5pZCAhPSBjZXJ0aWZpY2F0ZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgYy50eXBlID0gQ2VydGlmaWNhdGVUZW1wbGF0ZVR5cGUuTUFOVUFMO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2VydGlmaWNhdGUudHlwZSA9IENlcnRpZmljYXRlVGVtcGxhdGVUeXBlLkFVVE87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0TWFudWFsKGNlcnRpZmljYXRlOiBJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYy5pZCA9PSBjZXJ0aWZpY2F0ZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgYy50eXBlID0gQ2VydGlmaWNhdGVUZW1wbGF0ZVR5cGUuTUFOVUFMO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVR5cGUoY2VydGlmaWNhdGU6IElFeHRlbmRlZENlcnRpZmljYXRlVGVtcGxhdGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzQXV0byhjZXJ0aWZpY2F0ZSkgPyB0aGlzLnNldE1hbnVhbChjZXJ0aWZpY2F0ZSkgOiB0aGlzLnNldEF1dG8oY2VydGlmaWNhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc29ydEJ5TmFtZShjZXJ0aWZpY2F0ZXM6IEFycmF5PElDZXJ0aWZpY2F0ZVRlbXBsYXRlPik6IHZvaWQge1xyXG4gICAgICAgIGNlcnRpZmljYXRlcy5zb3J0KChhLCBiKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgaWYgKGEubmFtZSA+PSBiLm5hbWUpIHJldHVybiAxO1xyXG4gICAgICAgICAgICBlbHNlIHJldHVybiAtMTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRDZXJ0aWZpY2F0ZVRvRWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlc0Zyb21BdmFpbGFibGVDZXJ0aWZpY2F0ZXMoY2hvc2VuQ2VydGlmaWNhdGVJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVFZHVjYXRpb25JdGVtQ2VydHNGcm9tQXZhaWxhYmxlQ2VydHMoKTtcclxuICAgICAgICBpZiAodGhpcy5jaG9zZW5DZXJ0aWZpY2F0ZVRlbXBsYXRlICYmIHRoaXMuY2hvc2VuQ2VydGlmaWNhdGVUZW1wbGF0ZS5uYW1lICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgbGV0IG5ld0NlcnRpZmljYXRlOiBJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXMuZm9yRWFjaChjZXJ0aWZpY2F0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2VydGlmaWNhdGUuaWQgPT0gY2hvc2VuQ2VydGlmaWNhdGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShjZXJ0aWZpY2F0ZSwgbmV3Q2VydGlmaWNhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3Q2VydGlmaWNhdGUudHlwZSA9IHRoaXMuY29udGFpbkF1dG9DZXJ0aWZpY2F0ZSh0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzKSA/IENlcnRpZmljYXRlVGVtcGxhdGVUeXBlLk1BTlVBTCA6IENlcnRpZmljYXRlVGVtcGxhdGVUeXBlLkFVVE87XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXMucHVzaChuZXdDZXJ0aWZpY2F0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2VydEZyb21BdmFpbGFibGVDZXJ0cyhuZXdDZXJ0aWZpY2F0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuQ2VydGlmaWNhdGVUZW1wbGF0ZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGROZXdDZXJ0aWZpY2F0ZVRvRWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcyhjaG9zZW5DZXJ0aWZpY2F0ZUlkOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBsZXQgbmV3Q2VydGlmaWNhdGU6IElFeHRlbmRlZENlcnRpZmljYXRlVGVtcGxhdGUgPSB7fTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUNlcnRpZmljYXRlVGVtcGxhdGVzLmZvckVhY2goY2VydGlmaWNhdGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2VydGlmaWNhdGUuaWQgPT0gcGFyc2VJbnQoY2hvc2VuQ2VydGlmaWNhdGVJZCkpIHtcclxuICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShjZXJ0aWZpY2F0ZSwgbmV3Q2VydGlmaWNhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG5ld0NlcnRpZmljYXRlLm5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1JZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzID0gdGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcy5maWx0ZXIoY2VydGlmaWNhdGUgPT4gY2VydGlmaWNhdGUuaWQgIT0gbmV3Q2VydGlmaWNhdGUuaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5ld0NlcnRpZmljYXRlLnR5cGUgPSB0aGlzLmNvbnRhaW5BdXRvQ2VydGlmaWNhdGUodGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcykgPyBDZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZS5NQU5VQUwgOiBDZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZS5BVVRPO1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzLnB1c2gobmV3Q2VydGlmaWNhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbW92ZUVkdWNhdGlvbkl0ZW1DZXJ0c0Zyb21BdmFpbGFibGVDZXJ0cygpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2VydEZyb21BdmFpbGFibGVDZXJ0cyhuZXdDZXJ0aWZpY2F0ZSk7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5DZXJ0aWZpY2F0ZVRlbXBsYXRlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbW92ZUVkdWNhdGlvbkl0ZW1DZXJ0c0Zyb21BdmFpbGFibGVDZXJ0cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXMgPSB0aGlzLmF2YWlsYWJsZUNlcnRpZmljYXRlVGVtcGxhdGVzLmZpbHRlcihhYyA9PiBhYy5pZCAhPSBjLmlkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbW92ZUNlcnRGcm9tQXZhaWxhYmxlQ2VydHMoY2VydGlmaWNhdGU6IElFeHRlbmRlZENlcnRpZmljYXRlVGVtcGxhdGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUNlcnRpZmljYXRlVGVtcGxhdGVzID0gdGhpcy5hdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlcy5maWx0ZXIoYWMgPT4gYWMuaWQgIT0gY2VydGlmaWNhdGUuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlQ2VydGlmaWNhdGVUZW1wbGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5uZXdDZXJ0aWZpY2F0ZVRlbXBsYXRlRmlsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNlcnRpZmljYXRlVGVtcGxhdGUuZmlsZUNvbnRlbnRJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVUZW1wbGF0ZS5maWxlVGl0bGUgPSB0aGlzLm5ld0NlcnRpZmljYXRlVGVtcGxhdGVGaWxlLm5hbWVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNhbGwgPSB0aGlzLmNlcnRpZmljYXRlVGVtcGxhdGUuaWRcclxuICAgICAgICAgICAgPyB0aGlzLmNlcnRpZmljYXRlQXBpLnVwZGF0ZUNlcnRpZmljYXRlVGVtcGxhdGUodGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlLmlkLCB0aGlzLmNlcnRpZmljYXRlVGVtcGxhdGUpXHJcbiAgICAgICAgICAgIDogdGhpcy5jZXJ0aWZpY2F0ZUFwaS5jcmVhdGVDZXJ0aWZpY2F0ZVRlbXBsYXRlKHRoaXMuY2VydGlmaWNhdGVUZW1wbGF0ZSk7XHJcbiAgICAgICAgY2FsbC50aGVuKGNlcnRpZmljYXRlVGVtcGxhdGVJZCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5ld0NlcnRpZmljYXRlVGVtcGxhdGVGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNlcnRpZmljYXRlQXBpLnVwbG9hZENlcnRpZmljYXRlVGVtcGxhdGUoY2VydGlmaWNhdGVUZW1wbGF0ZUlkLCB0aGlzLm5ld0NlcnRpZmljYXRlVGVtcGxhdGVGaWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVkaXRXaW5kb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1JZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlcygpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VydGlmaWNhdGVUZW1wbGF0ZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE5ld0NlcnRpZmljYXRlVG9FZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzKGNlcnRpZmljYXRlVGVtcGxhdGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEF2YWlsYWJsZUNlcnRpZmljYXRlVGVtcGxhdGVzRm9yRWR1Y2F0aW9uSXRlbSh0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlcnRpZmljYXRlVGVtcGxhdGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGROZXdDZXJ0aWZpY2F0ZVRvRWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcyhjZXJ0aWZpY2F0ZVRlbXBsYXRlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUlkID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRBdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlcygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQ2VydGlmaWNhdGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRm9ybSgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5uYW1lLmR1cGxpY2F0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJDZXJ0aWZpY2F0ZSB0ZW1wbGF0ZSBuYW1lIG11c3QgYmUgdW5pcXVlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENlcnRpZmljYXRlcygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbVR5cGUgPT0gXCJDb3Vyc2VcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNlcnRpZmljYXRlU2VydmljZS5nZXRDb3Vyc2VDZXJ0aWZpY2F0ZVRlbXBsYXRlcyh0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtSWQpLnRoZW4oY2VydGlmaWNhdGVzID0+IHtcclxuICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlcy5mb3JFYWNoKGNlcnRpZmljYXRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzLmZvckVhY2goaXRlbUNlcnRpZmljYXRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1DZXJ0aWZpY2F0ZS5pZCA9PSBjZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZVRlbXBsYXRlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1DZXJ0aWZpY2F0ZS50eXBlID0gY2VydGlmaWNhdGUuY2VydGlmaWNhdGVUZW1wbGF0ZVR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ2VydGlmaWNhdGUubmFtZSA9IGNlcnRpZmljYXRlLmNlcnRpZmljYXRlVGVtcGxhdGVOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1UeXBlID09IFwiTGVhcm5pbmcgUGF0aFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVTZXJ2aWNlLmdldExlYXJuaW5nUGF0aENlcnRpZmljYXRlVGVtcGxhdGVzKHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1JZCkudGhlbihjZXJ0aWZpY2F0ZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2VydGlmaWNhdGVzLmZvckVhY2goY2VydGlmaWNhdGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXMuZm9yRWFjaChpdGVtQ2VydGlmaWNhdGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUNlcnRpZmljYXRlLmlkID09IGNlcnRpZmljYXRlLmNlcnRpZmljYXRlVGVtcGxhdGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUNlcnRpZmljYXRlLnR5cGUgPSBjZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1DZXJ0aWZpY2F0ZS5uYW1lID0gY2VydGlmaWNhdGUuY2VydGlmaWNhdGVUZW1wbGF0ZU5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXNGb3JFZHVjYXRpb25JdGVtKGVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXM6IEFycmF5PElFeHRlbmRlZENlcnRpZmljYXRlVGVtcGxhdGU+KTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbVR5cGUgPT0gXCJDb3Vyc2VcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jZXJ0aWZpY2F0ZVNlcnZpY2UuZ2V0QXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXNGb3JDb3Vyc2UodGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUlkKS50aGVuKGNlcnRpZmljYXRlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUNlcnRpZmljYXRlVGVtcGxhdGVzID0gW107XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNDZXJ0aWZpY2F0ZUFkZGVkVG9UaGVFZHVjYXRpb25JdGVtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuZm9yRWFjaChjZXJ0aWZpY2F0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXMubGVuZ3RoID09MCAmJiB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXMsZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcy5mb3JFYWNoKGVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VydGlmaWNhdGUuaWQgPT0gZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDZXJ0aWZpY2F0ZUFkZGVkVG9UaGVFZHVjYXRpb25JdGVtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VydGlmaWNhdGUubmFtZSAhPSBlZHVjYXRpb25JdGVtQ2VydGlmaWNhdGUubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZHVjYXRpb25JdGVtQ2VydGlmaWNhdGUubmFtZSA9IGNlcnRpZmljYXRlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NlcnRpZmljYXRlQWRkZWRUb1RoZUVkdWNhdGlvbkl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlcy5wdXNoKGNlcnRpZmljYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NlcnRpZmljYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXMucHVzaChjZXJ0aWZpY2F0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlzQ2VydGlmaWNhdGVBZGRlZFRvVGhlRWR1Y2F0aW9uSXRlbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRCeU5hbWUodGhpcy5hdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbVR5cGUgPT0gXCJMZWFybmluZyBQYXRoXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2VydGlmaWNhdGVTZXJ2aWNlLmdldEF2YWlsYWJsZUNlcnRpZmljYXRlVGVtcGxhdGVzRm9yTGVhcm5pbmdQYXRoKHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1JZCkudGhlbihjZXJ0aWZpY2F0ZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbGV0IGlzQ2VydGlmaWNhdGVBZGRlZFRvVGhlRWR1Y2F0aW9uSXRlbTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY2VydGlmaWNhdGVzLmZvckVhY2goY2VydGlmaWNhdGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzLmxlbmd0aCA9PTAgJiYgdGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weSh0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzLGVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXMuZm9yRWFjaChlZHVjYXRpb25JdGVtQ2VydGlmaWNhdGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlcnRpZmljYXRlLmlkID09IGVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2VydGlmaWNhdGVBZGRlZFRvVGhlRWR1Y2F0aW9uSXRlbSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlcnRpZmljYXRlLm5hbWUgIT0gZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWR1Y2F0aW9uSXRlbUNlcnRpZmljYXRlLm5hbWUgPSBjZXJ0aWZpY2F0ZS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNDZXJ0aWZpY2F0ZUFkZGVkVG9UaGVFZHVjYXRpb25JdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXMucHVzaChjZXJ0aWZpY2F0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlzQ2VydGlmaWNhdGVBZGRlZFRvVGhlRWR1Y2F0aW9uSXRlbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRCeU5hbWUodGhpcy5hdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRBdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlcygpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNlcnRpZmljYXRlU2VydmljZS5nZXRBdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlc0ZvckJ1c2luZXNzVW5pdCh0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQnVzaW5lc3NVbml0SWQpLnRoZW4oY2VydGlmaWNhdGVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlcyA9IFtdO1xyXG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuZm9yRWFjaChjZXJ0aWZpY2F0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaG9zZW5DZXJ0aWZpY2F0ZUlkICE9IGNlcnRpZmljYXRlLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDZXJ0aWZpY2F0ZVRlbXBsYXRlcy5wdXNoKGNlcnRpZmljYXRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMuaWQgPT0gY2VydGlmaWNhdGUuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShjZXJ0aWZpY2F0ZSwgYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zb3J0QnlOYW1lKHRoaXMuYXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHRhY2hGaWxlKCRmaWxlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3Q2VydGlmaWNhdGVUZW1wbGF0ZUZpbGUgJiYgISRmaWxlLiRlcnJvcilcclxuICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUZpbGVUaXRsZSA9IHRoaXMubmV3Q2VydGlmaWNhdGVUZW1wbGF0ZUZpbGUubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQ2VydGlmaWNhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZXdDZXJ0aWZpY2F0ZVRlbXBsYXRlRmlsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUZpbGVUaXRsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlLmZpbGVDb250ZW50SWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVDb250ZW50ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQ2VydGlmaWNhdGVGcm9tRWR1Y2F0aW9uSXRlbShjZXJ0aWZpY2F0ZTogSUV4dGVuZGVkQ2VydGlmaWNhdGVUZW1wbGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZWRpdFdpbmRvdyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXMgPSB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ2VydGlmaWNhdGVzLmZpbHRlcihjID0+IGMuaWQgIT0gY2VydGlmaWNhdGUuaWQpO1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXMucHVzaChjZXJ0aWZpY2F0ZSk7XHJcbiAgICAgICAgdGhpcy5zb3J0QnlOYW1lKHRoaXMuYXZhaWxhYmxlQ2VydGlmaWNhdGVUZW1wbGF0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRFcnJvck1lc3NhZ2UodGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiUGxlYXNlIHNwZWNpZnkgYSB2YWx1ZSBmb3IgdGhlIGZpZWxkIFxcXCIlMVxcXCJcIi5yZXBsYWNlKFwiJTFcIiwgdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNOYW1lKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnNNYXAuc2V0KFwibmFtZVwiLCB0aGlzLmJ1aWxkRXJyb3JNZXNzYWdlKFwibmFtZVwiKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc0ZpbGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNlcnRpZmljYXRlRmlsZVRpdGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzTWFwLnNldChcImZpbGVcIiwgdGhpcy5idWlsZEVycm9yTWVzc2FnZShcImZpbGVcIikpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZvcm0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lZGl0V2luZG93ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUZpbGVUaXRsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlLmlkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNlcnRpZmljYXRlVGVtcGxhdGUuYnVzaW5lc3NVbml0SWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVUZW1wbGF0ZS5jZXJ0aWZpY2F0ZVZhbGlkaXR5UGVyaW9kID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNlcnRpZmljYXRlVGVtcGxhdGUubmFtZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGluZ0NlcnRpZmljYXRlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dDcmVhdGVFZGl0V2luZG93KGNlcnRpZmljYXRlSWQ/OiBudW1iZXIsIGNlcnRpZmljYXRlQlVJZD86IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2hvc2VuQ2VydGlmaWNhdGVCVUlkID0gY2VydGlmaWNhdGVCVUlkO1xyXG4gICAgICAgIHRoaXMuY2hvc2VuQ2VydGlmaWNhdGVJZCA9IGNlcnRpZmljYXRlSWQ7XHJcbiAgICAgICAgbGV0IGhhc0NlcnRpZmljYXRlSWQ6IGJvb2xlYW4gPSAhaXNOYU4oY2VydGlmaWNhdGVJZCk7XHJcbiAgICAgICAgaWYgKGhhc0NlcnRpZmljYXRlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUFwaS5nZXRDZXJ0aWZpY2F0ZVRlbXBsYXRlKGNlcnRpZmljYXRlSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVUZW1wbGF0ZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVGaWxlVGl0bGUgPSByZXN1bHQuZmlsZVRpdGxlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkNlcnRpZmljYXRlIHRlbXBsYXRlIG5vdCBmb3VuZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRCdXNpbmVzc1VuaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSB1c2VyLmFsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lZGl0V2luZG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdENlcnRpZmljYXRlKGNlcnRpZmljYXRlSWQ6IG51bWJlciwgY2VydGlmaWNhdGVCVUlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmVkaXRpbmdDZXJ0aWZpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93Q3JlYXRlRWRpdFdpbmRvdyhjZXJ0aWZpY2F0ZUlkLCBjZXJ0aWZpY2F0ZUJVSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlU2F2ZUVkaXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRVc2VyQnVzaW5lc3NVbml0cy5sZW5ndGggIT0gMCkgJiYgKCF0aGlzLmN1cnJlbnRVc2VyQnVzaW5lc3NVbml0cy5zb21lKGJ1ID0+IGJ1ID09IHRoaXMuY2hvc2VuQ2VydGlmaWNhdGVCVUlkKSkgJiYgdGhpcy5lZGl0aW5nQ2VydGlmaWNhdGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBDZXJ0aWZpY2F0ZXNFZGl0YWJsZVNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgdmFyIGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gQ2VydGlmaWNhdGVzRWRpdGFibGVTZWxlY3RvckNvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7XHJcbiAgICAgICAgZWR1Y2F0aW9uSXRlbUlkOiBcIj12aHNFZHVjYXRpb25JdGVtSWRcIixcclxuICAgICAgICBlZHVjYXRpb25JdGVtQnVzaW5lc3NVbml0SWQ6IFwiPXZoc0VkdWNhdGlvbkl0ZW1CdXNpbmVzc1VuaXRJZFwiLFxyXG4gICAgICAgIGVkdWNhdGlvbkl0ZW1UeXBlOiBcIj12aHNFZHVjYXRpb25JdGVtVHlwZVwiLFxyXG4gICAgICAgIGVkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXM6IFwiPXZoc0VkdWNhdGlvbkl0ZW1DZXJ0aWZpY2F0ZXNcIixcclxuICAgICAgICBjdXJyZW50VXNlckJ1c2luZXNzVW5pdHM6IFwiPXZoc0N1cnJlbnRVc2VyQnVzaW5lc3NVbml0c1wiLFxyXG4gICAgICAgIGVkaXRhYmxlOiBcIj0/dmhzRWRpdGFibGVcIixcclxuICAgICAgICBzdHlsZTogXCI9P3Zoc1N0eWxlXCIsXHJcbiAgICAgICAgb25TZWxlY3RvckNoYW5nZTogXCImdmhzT25DaGFuZ2VcIlxyXG4gICAgfTtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvY2VydGlmaWNhdGVzLWVkaXRhYmxlLXNlbGVjdG9yLmh0bWxcIik7XHJcbiAgICBkaXJlY3RpdmUudHJhbnNjbHVkZSA9IHRydWU7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5DZXJ0aWZpY2F0ZXNFZGl0YWJsZVNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7QXV0b0ZvY3VzRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vQXV0b2ZvY3VzRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7RGF0ZVRpbWVQaWNrZXJEaXJlY3RpdmVGYWN0b3J5LCBUaW1lUGlja2VyRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vRGF0ZVRpbWVQaWNrZXJEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtHcmlkQ29uZmlndXJhdGlvbkRpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL0dyaWRDb25maWd1cmF0aW9uRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7R3JpZERpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL0dyaWREaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtHcmlkRW1wdHlEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9HcmlkRW1wdHlEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtHcmlkRXh0ZXJuYWxDb25maWd1cmF0aW9uRmFjdG9yeX0gZnJvbSBcIi4vR3JpZEV4dGVybmFsQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge0dyaWRQYWdpbmF0aW9uRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vR3JpZFBhZ2luYXRpb25EaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtMb2dpbkRpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL0xvZ2luRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7TXVsdGlwbGVDaGVja2JveFNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vTXVsdGlwbGVDaGVja2JveFNlbGVjdG9yRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlckRpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1BhZ2VIZWFkZXJEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNTZWxlY3RBbGxEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNTZWxlY3RBbGxEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VDaGVja2JveFNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vUmVmZXJlbmNlQ2hlY2tib3hTZWxlY3RvckRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZURyb3Bkb3duU2VsZWN0b3JEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9SZWZlcmVuY2VEcm9wZG93blNlbGVjdG9yRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlRHJvcGRvd25FZGl0YWJsZVNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vUmVmZXJlbmNlRHJvcGRvd25FZGl0YWJsZVNlbGVjdG9yRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlTXVsdGlwbGVTZWxlY3RvckRpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1JlZmVyZW5jZU11bHRpcGxlU2VsZWN0b3JEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtUb29sdGlwRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVG9vbHRpcERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc1NlYXJjaERpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1NlYXJjaERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgTGVmdE1haW5NZW51RGlyZWN0aXZlRmFjdG9yeSxcclxuICAgIExlZnRQZXJzb25hbE1lbnVEaXJlY3RpdmVGYWN0b3J5LFxyXG4gICAgTmF2aWdhdGlvblBlcnNvbmFsTWVudURpcmVjdGl2ZUZhY3RvcnksXHJcbiAgICBQZXJzb25hbE1lbnVEaXJlY3RpdmVGYWN0b3J5LFxyXG4gICAgVmhzQnJlYWRjcnVtYnNEaXJlY3RpdmVGYWN0b3J5XHJcbn0gZnJvbSBcIi4vUGVyc29uYWxNZW51RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7QXZhdGFyRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vQXZhdGFyRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBWaHNBdWRpb0RpcmVjdGl2ZUZhY3RvcnksXHJcbiAgICBWaHNWaWRlb0RpcmVjdGl2ZUZhY3RvcnksXHJcbiAgICBWaHNZb3V0dWJlVmlkZW9EaXJlY3RpdmVGYWN0b3J5XHJcbn0gZnJvbSBcIi4vVmhzVmlkZW9BdWRpb0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc01hdGVyaWFsRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzTWF0ZXJpYWxEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtVc2Vyc0FuZEdyb3Vwc1NlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVXNlcnNBbmRHcm91cHNTZWxlY3RvckRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1NlbGVjdE9wdGlvbnNEaXNhYmxlZERpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1NlbGVjdE9wdGlvbnNEaXNhYmxlZERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1NlbGVjdFBsYWNlaG9sZGVyRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vU2VsZWN0UGxhY2Vob2xkZXJEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtVcGxvYWRzU3RhdHVzRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVXBsb2Fkc1N0YXR1c0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc1RodW1ibmFpbERpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1RodW1ibmFpbERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc01hdGVyaWFsRWRpdGluZ0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc01hdGVyaWFsRWRpdGluZ0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0NhbGVuZGFyRmlsdGVyRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzQ2FsZW5kYXJGaWx0ZXJEaXJlY3RpdmVcIlxyXG5pbXBvcnQge1Zoc0VtYmVkZGVkQnVuZGxlRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vcmljaHRleHQvVmhzRW1iZWRkZWRCdW5kbGVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNFbWJlZGRlZE1hdGVyaWFsRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzRW1iZWRkZWRNYXRlcmlhbERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc1NlbGVjdE1hdGVyaWFsRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vcmljaHRleHQvVmhzU2VsZWN0TWF0ZXJpYWxEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZURpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL3JpY2h0ZXh0L1Zoc1NlbGVjdEVtYmVkZGVkQnVuZGxlRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzU2VsZWN0U2FuZGJveERpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL3JpY2h0ZXh0L1Zoc1NlbGVjdFNhbmRib3hEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNTYW5kYm94RGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vcmljaHRleHQvVmhzU2FuZGJveERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1JpY2hUZXh0RWRpdG9yRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vcmljaHRleHQvUmljaFRleHRFZGl0b3JEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtSaWNoVGV4dEJpbmREaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9yaWNodGV4dC9SaWNoVGV4dEJpbmREaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNVc2VyTm90ZURpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL3JpY2h0ZXh0L1Zoc1VzZXJOb3RlRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzRG93bmxvYWRCdW5kbGVEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9yaWNodGV4dC9WaHNEb3dubG9hZEJ1bmRsZURpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0xvYWRCdW5kbGVGaWxlRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vTG9hZEJ1bmRsZUZpbGVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtGdWxsU2NyZWVuRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vRnVsbFNjcmVlbkRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1BhZ2VUaXRsZURpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1BhZ2VUaXRsZURpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0VudGl0aWVzU2VsZWN0MlNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vRW50aXRpZXNTZWxlY3QyU2VsZWN0b3JEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRTZWxlY3RvckRpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL0J1c2luZXNzVW5pdFNlbGVjdG9yRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVzRWRpdGFibGVTZWxlY3RvckRpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL0NlcnRpZmljYXRlc0VkaXRhYmxlU2VsZWN0b3JEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNRdWl6SW1wb3J0RXhwb3J0RGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzUXVpekltcG9ydEV4cG9ydERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1VwbG9hZEFyY2hpdmVJbkNvdXJzZUVkaXREaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9VcGxvYWRBcmNoaXZlSW5Db3Vyc2VFZGl0RGlyZWN0aXZlXCI7XHJcblxyXG5pbXBvcnQge1JpY2hUZXh0Q29udGVudExvYWRpbmdTeW5jaHJvbml6ZXJ9IGZyb20gXCIuL3JpY2h0ZXh0L1JpY2hUZXh0Q29udGVudExvYWRpbmdTeW5jaHJvbml6ZXJcIjtcclxuXHJcbmltcG9ydCB7QXV0aENvcmVNb2R1bGV9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhDb3JlTW9kdWxlXCI7XHJcbmltcG9ydCB7QXV0aE1vZHVsZX0gZnJvbSBcIi4vLi4vYXV0aC9BdXRoTW9kdWxlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlNb2R1bGV9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1NlY3VyaXR5TW9kdWxlXCI7XHJcbmltcG9ydCB7VXJsc01vZHVsZX0gZnJvbSBcIi4vLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcbmltcG9ydCB7SW5mcmFzdHJ1Y3R1cmVNb2R1bGV9IGZyb20gXCIuLy4uL2luZnJhc3RydWN0dXJlL0luZnJhc3RydWN0dXJlTW9kdWxlXCI7XHJcbmltcG9ydCB7TWFpbk1vZHVsZX0gZnJvbSBcIi4vLi4vbWFpbi9NYWluTW9kdWxlXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzTW9kdWxlfSBmcm9tIFwiLi8uLi9tYXRlcmlhbHMvTWF0ZXJpYWxzTW9kdWxlXCI7XHJcbmltcG9ydCB7TmV3c01vZHVsZX0gZnJvbSBcIi4vLi4vbmV3cy9OZXdzTW9kdWxlXCI7XHJcbmltcG9ydCB7SW5mb01vZHVsZX0gZnJvbSBcIi4vLi4vaW5mby9JbmZvTW9kdWxlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlTW9kdWxlfSBmcm9tIFwiLi8uLi9yZWZlcmVuY2UvUmVmZXJlbmNlTW9kdWxlXCI7XHJcbmltcG9ydCB7U3RvcmFnZU1vZHVsZX0gZnJvbSBcIi4vLi4vc3RvcmFnZS9TdG9yYWdlTW9kdWxlXCI7XHJcbmltcG9ydCB7TG9nc01vZHVsZX0gZnJvbSBcIi4vLi4vbG9ncy9Mb2dzTW9kdWxlXCI7XHJcbmltcG9ydCB7UG9saWNpZXNNb2R1bGV9IGZyb20gXCIuLi9wb2xpY2llcy9Qb2xpY2llc01vZHVsZVwiO1xyXG5pbXBvcnQge01heExlbmd0aEZpbHRlckZhY3Rvcnl9IGZyb20gXCIuL01heExlbmd0aEZpbHRlclwiO1xyXG5pbXBvcnQge0V4cGxhbmF0aW9uc0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL0V4cGxhbmF0aW9uc0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0Rpc2N1c3Npb25zRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vRGlzY3Vzc2lvbnNEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtTZXNzaW9uUmVzdG9yZURpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Nlc3Npb25SZXN0b3JlRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzUGFydGljaXBhdGlvbkZvcm1FZGl0aW5nRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzUGFydGljaXBhdGlvbkZvcm1FZGl0aW5nRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzUGFydGljaXBhdGlvbkZvcm1GaWxsaW5nRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzUGFydGljaXBhdGlvbkZvcm1GaWxsaW5nRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzTGVhcm5pbmdQYXRoVG9wVGFic0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc0xlYXJuaW5nUGF0aFRvcFRhYnNEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNMZWFybmluZ1BhdGhDb3Vyc2VzTGlzdERpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc0xlYXJuaW5nUGF0aENvdXJzZXNMaXN0XCI7XHJcbmltcG9ydCB7VmhzU2VsZWN0TGVhcm5pbmdQYXRoQ291cnNlc0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1NlbGVjdExlYXJuaW5nUGF0aENvdXJzZXNEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNRdWl6U3VydmV5QW5zd2VyaW5nRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzUXVpelN1cnZleUFuc3dlcmluZ0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0NvbmZpcm1hdGlvbkRpYWxvZ0ZhY3Rvcnl9IGZyb20gXCIuLy4uL2NvbXBvbmVudHMvZGlhbG9nL0NvbmZpcm1hdGlvbkRpYWxvZ0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0lucHV0Q29uZmlybWF0aW9uRGlhbG9nRmFjdG9yeX0gZnJvbSBcIi4vLi4vY29tcG9uZW50cy9kaWFsb2cvSW5wdXRDb25maXJtYXRpb25EaWFsb2dEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtOb3RpZmljYXRpb25Db25maXJtYXRpb25EaWFsb2dGYWN0b3J5fSBmcm9tIFwiLi8uLi9jb21wb25lbnRzL2RpYWxvZy9Ob3RpZmljYXRpb25Db25maXJtYXRpb25EaWFsb2dEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge1Zoc1F1aXpEZXRhaWxzRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzUXVpekRldGFpbHNEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNDb3Vyc2VWaWV3VG9wVGFic0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc0NvdXJzZVZpZXdUb3BUYWJzXCI7XHJcbmltcG9ydCB7VmhzQ291cnNlRWRpdFRvcFRhYnNEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNDb3Vyc2VFZGl0VG9wVGFic1wiO1xyXG5pbXBvcnQge1Zoc1ZJTFREaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNWSUxURGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzSW1hZ2VDcm9wcGVyRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzSW1hZ2VDcm9wcGVyRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzQ2VydGlmaWNhdGVzRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzQ2VydGlmaWNhdGVzRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzRGV0YWlsc0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0RldGFpbHNEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNJbmRpdmlkdWFsUGFydGljaXBhdGlvbkluZm9EaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNJbmRpdmlkdWFsUGFydGljaXBhdGlvbkluZm9EaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNPdmVyYWxsUHJvZ3Jlc3NEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNPdmVyYWxsUHJvZ3Jlc3NEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNMZWFybmluZ1BhdGhPdmVyYWxsUHJvZ3Jlc3NEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNMZWFybmluZ1BhdGhPdmVyYWxsUHJvZ3Jlc3NEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEZXRhaWxzRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzRGV0YWlsc0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uSW5mb0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uSW5mb0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0F1ZGlvUmVzcG9uZGVyRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzQXVkaW9SZXNwb25kZXJEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNSZWNvcmRSdGNEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNSZWNvcmRSdGNEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtTZWNvbmRzVG9UaW1lRmlsdGVyRmFjdG9yeX0gZnJvbSBcIi4vU2Vjb25kc1RvVGltZUZpbHRlclwiO1xyXG5pbXBvcnQge1NraXBUb0NvbnRlbnREaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9Ta2lwVG9Db250ZW50RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzRWRpdGFibGVUZW1wbGF0ZURpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc0VkaXRhYmxlVGVtcGxhdGVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNMb2FkRnJvbVRlbXBsYXRlRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vcmljaHRleHQvVmhzTG9hZEZyb21UZW1wbGF0ZURpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0NvbnZlcnRUZW1wbGF0ZURpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL3JpY2h0ZXh0L1Zoc0NvbnZlcnRUZW1wbGF0ZURpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0FkZEJsb2NrRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vcmljaHRleHQvVmhzQWRkQmxvY2tEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNUZW1wbGF0ZVNlcnZpY2V9IGZyb20gXCIuL3JpY2h0ZXh0L1Zoc1RlbXBsYXRlU2VydmljZVwiO1xyXG5pbXBvcnQge1Zoc1RlbXBsYXRlTWVudURpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1RlbXBsYXRlTWVudURpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1N0aWNreURpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1N0aWNreURpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0FjY2VwdENvb2tpZXNEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9BY2NlcHRDb29raWVzRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzUHJvZHVjdHNMaXN0RWRpdGluZ0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1Byb2R1Y3RzTGlzdEVkaXRpbmdEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNMZWFybmluZ1BhdGhFZGl0VG9wVGFic0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc0xlYXJuaW5nUGF0aEVkaXRUb3BUYWJzXCI7XHJcbmltcG9ydCB7VmhzU2NhbGVkQW5zd2VyUXVlc3Rpb25EaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNTY2FsZWRBbnN3ZXJRdWVzdGlvbkRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0NvdXJzZVB1Ymxpc2hEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNDb3Vyc2VQdWJsaXNoRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzTWF0ZXJpYWxFZGl0VG9wVGFic0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc01hdGVyaWFsRWRpdFRvcFRhYnNEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNDcmVkaXRBc3NpZ25tZW50RGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzQ3JlZGl0QXNzaWdubWVudERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0VkaXRhYmxlVXNlckRpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc0VkaXRhYmxlVXNlckNyZWRpdHNEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNWZXJzaW9uQ2hlY2tlckZhY3Rvcnl9IGZyb20gXCIuL1Zoc1ZlcnNpb25DaGVja2VyXCI7XHJcbmltcG9ydCB7VmhzTGVhcm5pbmdTZXNzaW9uc1RvcFRhYnNEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNMZWFybmluZ1Nlc3Npb25zVG9wVGFic1wiO1xyXG5pbXBvcnQge1Zoc0lMVERpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc0lMVERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc01lZXRpbmdDcmVhdGVFZGl0RGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzTWVldGluZ0NyZWF0ZUVkaXREaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNXZWJpbmFyQ3JlYXRlRWRpdERpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1dlYmluYXJDcmVhdGVFZGl0RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7UXVpelZpZXdUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vUXVpelZpZXdUb3BUYWJzXCI7XHJcbmltcG9ydCB7VmhzUHVyY2hhc2VEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNQdXJjaGFzZURpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc1Byb2R1Y3RWaWV3VG9wVGFic0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1Byb2R1Y3RWaWV3VG9wVGFic1wiO1xyXG5pbXBvcnQge1Zoc1Byb2R1Y3RJdGVtRGV0YWlsc0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1Byb2R1Y3RJdGVtRGV0YWlsc1wiO1xyXG5pbXBvcnQge1Zoc05vdGlmaWNhdGlvblRlbXBsYXRlRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzTm90aWZpY2F0aW9uVGVtcGxhdGVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNOb3RpZmljYXRpb25UZW1wbGF0ZUVkaXREaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNOb3RpZmljYXRpb25UZW1wbGF0ZUVkaXREaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNGaWxsYWJsZUZvcm1EaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNGaWxsYWJsZUZvcm1EaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNTeXN0ZW1TZXR0aW5nc1RvcFRhYnNEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNTeXN0ZW1TZXR0aW5nc1RvcFRhYnNcIjtcclxuaW1wb3J0IHtWaHNHcm91cEVkaXRUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzR3JvdXBFZGl0VG9wVGFic1wiO1xyXG5pbXBvcnQge1Zoc0xlYXJuaW5nUGF0aENvbnRyb2xzRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzTGVhcm5pbmdQYXRoQ29udHJvbHNEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNIb21lTWVudURpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc0hvbWVNZW51RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VmhzVXNlckF2YXRhckRpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1VzZXJBdmF0YXJEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNCcmFuZGluZ0xvZ29zRWRpdGluZ0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL2JyYW5kaW5nL1Zoc0JyYW5kaW5nTG9nb3NFZGl0aW5nXCI7XHJcbmltcG9ydCB7VmhzQnJhbmRpbmdDb2xvcnNFZGl0aW5nRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vYnJhbmRpbmcvVmhzQnJhbmRpbmdDb2xvcnNFZGl0aW5nXCI7XHJcbmltcG9ydCB7VmhzQnJhbmRpbmdUaGVtZXNFZGl0aW5nRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vYnJhbmRpbmcvVmhzQnJhbmRpbmdUaGVtZXNFZGl0aW5nXCI7XHJcbmltcG9ydCB7VmhzQnJhbmRpbmdDc3NFZGl0aW5nRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vYnJhbmRpbmcvVmhzQnJhbmRpbmdDc3NFZGl0aW5nXCI7XHJcbmltcG9ydCB7RmlsbGFibGVGb3JtRGlhbG9nRmFjdG9yeX0gZnJvbSBcIi4vZGlhbG9nL0ZpbGxhYmxlRm9ybURpYWxvZ0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc1N5c3RlbVNldHRpbmdzTWVudUl0ZW1zVmlzaWJpbGl0eURpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1N5c3RlbVNldHRpbmdzTWVudUl0ZW1zVmlzaWJpbGl0eURpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc1BhcnRpY2lwYW50c0RpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1BhcnRpY2lwYW50c0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc1RlYW1zQ3JlYXRlRWRpdERpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1RlYW1zQ3JlYXRlRWRpdERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0JyYW5kaW5nU2hhcmVFZGl0aW5nRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vYnJhbmRpbmcvVmhzQnJhbmRpbmdTaGFyZUVkaXRpbmdcIjtcclxuaW1wb3J0IHtWaHNCYWRnZVRlbXBsYXRlRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzQmFkZ2VUZW1wbGF0ZURpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0JhZGdlVGVtcGxhdGVFZGl0RGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzQmFkZ2VUZW1wbGF0ZUVkaXRcIjtcclxuaW1wb3J0IHtWaHNNYXRlcmlhbENoZWNrcG9pbnRzRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vVmhzTWF0ZXJpYWxDaGVja3BvaW50c0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0FkZFRhYmxlRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vcmljaHRleHQvVmhzQWRkVGFibGVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNBSUNvbnRlbnRHZW5lcmF0aW9uRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vcmljaHRleHQvQUlDb250ZW50R2VuZXJhdGlvbkRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc1JldHVyblRvT3duQWNjb3VudERpcmVjdGl2ZUZhY3Rvcnl9IGZyb20gXCIuL1Zoc1JldHVyblRvT3duQWNjb3VudERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0hvdHNwb3RRdWVzdGlvbkVkaXREaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9xdWl6emVzL1Zoc0hvdHNwb3RRdWVzdGlvbkVkaXREaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtWaHNIb3RzcG90UXVlc3Rpb25BbnN3ZXJpbmdEaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9xdWl6emVzL1Zoc0hvdHNwb3RRdWVzdGlvbkFuc3dlcmluZ0RpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0hvdHNwb3RRdWVzdGlvbkV4cGxhbmF0aW9uRGlyZWN0aXZlRmFjdG9yeX0gZnJvbSBcIi4vcXVpenplcy9WaHNIb3RzcG90UXVlc3Rpb25FeHBsYW5hdGlvbkRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1Zoc0hlbHBCb3REaXJlY3RpdmVGYWN0b3J5fSBmcm9tIFwiLi9WaHNIZWxwQm90RGlyZWN0aXZlXCI7XHJcblxyXG5leHBvcnQgdmFyIENvbXBvbmVudHNNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJjb21wb25lbnRzXCIsIFtcclxuICAgICAgICBBdXRoQ29yZU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIEF1dGhNb2R1bGUubmFtZSxcclxuICAgICAgICBTZWN1cml0eU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIE1haW5Nb2R1bGUubmFtZSxcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgSW5mcmFzdHJ1Y3R1cmVNb2R1bGUubmFtZSxcclxuICAgICAgICBNYXRlcmlhbHNNb2R1bGUubmFtZSxcclxuICAgICAgICBOZXdzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgSW5mb01vZHVsZS5uYW1lLFxyXG4gICAgICAgIFJlZmVyZW5jZU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIFN0b3JhZ2VNb2R1bGUubmFtZSxcclxuICAgICAgICBMb2dzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgUG9saWNpZXNNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKFJpY2hUZXh0Q29udGVudExvYWRpbmdTeW5jaHJvbml6ZXIuTkFNRSwgUmljaFRleHRDb250ZW50TG9hZGluZ1N5bmNocm9uaXplcilcclxuICAgIC5zZXJ2aWNlKERpYWxvZ1NlcnZpY2UuTkFNRSwgRGlhbG9nU2VydmljZSlcclxuICAgIC5zZXJ2aWNlKFZoc1RlbXBsYXRlU2VydmljZS5OQU1FLCBWaHNUZW1wbGF0ZVNlcnZpY2UpXHJcblxyXG4gICAgLmRpcmVjdGl2ZShcImF1dG9mb2N1c1wiLCBBdXRvRm9jdXNEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInN0aWNreVwiLCBTdGlja3lEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcImRhdGVQaWNrZXJcIiwgRGF0ZVRpbWVQaWNrZXJEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInRpbWVQaWNrZXJcIiwgVGltZVBpY2tlckRpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzR3JpZENvbmZpZ3VyYXRpb25cIiwgR3JpZENvbmZpZ3VyYXRpb25EaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0dyaWRcIiwgR3JpZERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzR3JpZEVtcHR5XCIsIEdyaWRFbXB0eURpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzR3JpZEV4dGVybmFsQ29uZmlndXJhdGlvblwiLCBHcmlkRXh0ZXJuYWxDb25maWd1cmF0aW9uRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNHcmlkUGFnaW5hdGlvblwiLCBHcmlkUGFnaW5hdGlvbkRpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwibG9naW5cIiwgTG9naW5EaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1Nlc3Npb25SZXN0b3JlXCIsIFNlc3Npb25SZXN0b3JlRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoJ211bHRpcGxlQ2hlY2tib3hTZWxlY3RvcicsIE11bHRpcGxlQ2hlY2tib3hTZWxlY3RvckRpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzUGFnZUhlYWRlclwiLCBQYWdlSGVhZGVyRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNMZWZ0TWFpbk1lbnVcIiwgTGVmdE1haW5NZW51RGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoJ3Zoc1NlbGVjdEFsbCcsIFZoc1NlbGVjdEFsbERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKCdyZWZlcmVuY2VDaGVja2JveFNlbGVjdG9yJywgUmVmZXJlbmNlQ2hlY2tib3hTZWxlY3RvckRpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKCdyZWZlcmVuY2VEcm9wZG93blNlbGVjdG9yJywgUmVmZXJlbmNlRHJvcGRvd25TZWxlY3RvckRpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKCdyZWZlcmVuY2VEcm9wZG93bkVkaXRhYmxlU2VsZWN0b3InLCBSZWZlcmVuY2VEcm9wZG93bkVkaXRhYmxlU2VsZWN0b3JEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZSgncmVmZXJlbmNlTXVsdGlwbGVTZWxlY3RvcicsIFJlZmVyZW5jZU11bHRpcGxlU2VsZWN0b3JEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInRvb2x0aXBcIiwgVG9vbHRpcERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzU2VhcmNoXCIsIFZoc1NlYXJjaERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwicGVyc29uYWxNZW51XCIsIFBlcnNvbmFsTWVudURpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwibmF2aWdhdGlvblBlcnNvbmFsTWVudVwiLCBOYXZpZ2F0aW9uUGVyc29uYWxNZW51RGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJsZWZ0UGVyc29uYWxNZW51XCIsIExlZnRQZXJzb25hbE1lbnVEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0JyZWFkY3J1bWJzXCIsIFZoc0JyZWFkY3J1bWJzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNWaWRlb1wiLCBWaHNWaWRlb0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzWW91dHViZVZpZGVvXCIsIFZoc1lvdXR1YmVWaWRlb0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQXVkaW9cIiwgVmhzQXVkaW9EaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc01hdGVyaWFsXCIsIFZoc01hdGVyaWFsRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ1c2Vyc0FuZEdyb3Vwc1NlbGVjdG9yXCIsIFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInNlbGVjdE9wdGlvbnNEaXNhYmxlZFwiLCBTZWxlY3RPcHRpb25zRGlzYWJsZWREaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInNlbGVjdFBsYWNlaG9sZGVyXCIsIFNlbGVjdFBsYWNlaG9sZGVyRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ1cGxvYWRzU3RhdHVzXCIsIFVwbG9hZHNTdGF0dXNEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1RodW1ibmFpbFwiLCBWaHNUaHVtYm5haWxEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc01hdGVyaWFsRWRpdGluZ1wiLCBWaHNNYXRlcmlhbEVkaXRpbmdEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1BhcnRpY2lwYXRpb25Gb3JtRWRpdGluZ1wiLCBWaHNQYXJ0aWNpcGF0aW9uRm9ybUVkaXRpbmdEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1BhcnRpY2lwYXRpb25Gb3JtRmlsbGluZ1wiLCBWaHNQYXJ0aWNpcGF0aW9uRm9ybUZpbGxpbmdEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0VtYmVkZGVkTWF0ZXJpYWxcIiwgVmhzRW1iZWRkZWRNYXRlcmlhbERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQ2FsZW5kYXJGaWx0ZXJcIiwgVmhzQ2FsZW5kYXJGaWx0ZXJEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1NlbGVjdE1hdGVyaWFsXCIsIFZoc1NlbGVjdE1hdGVyaWFsRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNSaWNoVGV4dEVkaXRvclwiLCBSaWNoVGV4dEVkaXRvckRpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzUmljaFRleHRCaW5kXCIsIFJpY2hUZXh0QmluZERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzVXNlck5vdGVcIiwgVmhzVXNlck5vdGVEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0VtYmVkZGVkQnVuZGxlXCIsIFZoc0VtYmVkZGVkQnVuZGxlRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNTZWxlY3RFbWJlZGRlZEJ1bmRsZVwiLCBWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZURpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzU2VsZWN0U2FuZGJveFwiLCBWaHNTZWxlY3RTYW5kYm94RGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNMb2FkRnJvbVRlbXBsYXRlXCIsIFZoc0xvYWRGcm9tVGVtcGxhdGVEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0NvbnZlcnRUZW1wbGF0ZVwiLCBWaHNDb252ZXJ0VGVtcGxhdGVEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1NhbmRib3hcIiwgVmhzU2FuZGJveERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzRG93bmxvYWRCdW5kbGVcIiwgVmhzRG93bmxvYWRCdW5kbGVEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0xvYWRCdW5kbGVGaWxlXCIsIExvYWRCdW5kbGVGaWxlRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNGdWxsU2NyZWVuXCIsIEZ1bGxTY3JlZW5EaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1BhZ2VUaXRsZVwiLCBQYWdlVGl0bGVEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcImVudGl0aWVzU2VsZWN0MlNlbGVjdG9yXCIsIEVudGl0aWVzU2VsZWN0MlNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJidXNpbmVzc1VuaXRTZWxlY3RvclwiLCBCdXNpbmVzc1VuaXRTZWxlY3RvckRpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwiZXhwbGFuYXRpb25zXCIsIEV4cGxhbmF0aW9uc0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzRGlzY3Vzc2lvbnNcIiwgRGlzY3Vzc2lvbnNEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0xlYXJuaW5nUGF0aFRvcFRhYnNcIiwgVmhzTGVhcm5pbmdQYXRoVG9wVGFic0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzTGVhcm5pbmdQYXRoQ29udHJvbHNcIiwgVmhzTGVhcm5pbmdQYXRoQ29udHJvbHNEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0xlYXJuaW5nUGF0aEVkaXRUb3BUYWJzXCIsIFZoc0xlYXJuaW5nUGF0aEVkaXRUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNMZWFybmluZ1BhdGhDb3Vyc2VzTGlzdFwiLCBWaHNMZWFybmluZ1BhdGhDb3Vyc2VzTGlzdERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzU2VsZWN0TGVhcm5pbmdQYXRoQ291cnNlc1wiLCBWaHNTZWxlY3RMZWFybmluZ1BhdGhDb3Vyc2VzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNRdWl6U3VydmV5QW5zd2VyaW5nXCIsIFZoc1F1aXpTdXJ2ZXlBbnN3ZXJpbmdEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1F1aXpEZXRhaWxzXCIsIFZoc1F1aXpEZXRhaWxzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNDb3Vyc2VWaWV3VG9wVGFic1wiLCBWaHNDb3Vyc2VWaWV3VG9wVGFic0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQ291cnNlRWRpdFRvcFRhYnNcIiwgVmhzQ291cnNlRWRpdFRvcFRhYnNEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1ZpbHRcIiwgVmhzVklMVERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzSW1hZ2VDcm9wcGVyXCIsIFZoc0ltYWdlQ3JvcHBlckRpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwiY2VydGlmaWNhdGVzRWRpdGFibGVTZWxlY3RvclwiLCBDZXJ0aWZpY2F0ZXNFZGl0YWJsZVNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNDb25maXJtYXRpb25EaWFsb2dcIiwgQ29uZmlybWF0aW9uRGlhbG9nRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNGaWxsYWJsZUZvcm1EaWFsb2dcIiwgRmlsbGFibGVGb3JtRGlhbG9nRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNJbnB1dENvbmZpcm1hdGlvbkRpYWxvZ1wiLCBJbnB1dENvbmZpcm1hdGlvbkRpYWxvZ0ZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzTm90aWZpY2F0aW9uQ29uZmlybWF0aW9uRGlhbG9nXCIsIE5vdGlmaWNhdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0ZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzXCIsIFZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzSW5kaXZpZHVhbFBhcnRpY2lwYXRpb25JbmZvXCIsIFZoc0luZGl2aWR1YWxQYXJ0aWNpcGF0aW9uSW5mb0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzRGV0YWlsc1wiLCBWaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NEZXRhaWxzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNcIiwgVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzQ2VydGlmaWNhdGVzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNPdmVyYWxsUHJvZ3Jlc3NcIiwgVmhzT3ZlcmFsbFByb2dyZXNzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NcIiwgVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEZXRhaWxzXCIsIFZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0RldGFpbHNEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0NlcnRpZmljYXRlc1wiLCBWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0xlYXJuaW5nUGF0aE92ZXJhbGxQcm9ncmVzc1wiLCBWaHNMZWFybmluZ1BhdGhPdmVyYWxsUHJvZ3Jlc3NEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uSW5mb1wiLCBWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkluZm9EaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1JlY29yZFJ0Y0F1ZGlvXCIsIFZoc1JlY29yZFJ0Y0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQXVkaW9SZXNwb25kZXJcIiwgQXVkaW9SZXNwb25kZXJEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInNraXBUb0NvbnRlbnRcIiwgU2tpcFRvQ29udGVudERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzRWRpdGFibGVUZW1wbGF0ZVwiLCBWaHNFZGl0YWJsZVRlbXBsYXRlRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNBZGRCbG9ja1wiLCBWaHNBZGRCbG9ja0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzVGVtcGxhdGVNZW51XCIsIFZoc1RlbXBsYXRlTWVudURpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwiYWNjZXB0Q29va2llc1wiLCBBY2NlcHRDb29raWVzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNSZXR1cm5Ub093bkFjY291bnRcIiwgVmhzUmV0dXJuVG9Pd25BY2NvdW50RGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNQcm9kdWN0c0xpc3RFZGl0aW5nXCIsIFZoc1Byb2R1Y3RzTGlzdEVkaXRpbmdEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1NjYWxlZEFuc3dlclF1ZXN0aW9uXCIsIFZoc1NjYWxlZEFuc3dlclF1ZXN0aW9uRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNDb3Vyc2VQdWJsaXNoXCIsIFZoc0NvdXJzZVB1Ymxpc2hEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc01hdGVyaWFsRWRpdFRvcFRhYnNcIiwgVmhzTWF0ZXJpYWxFZGl0VG9wVGFic0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQ3JlZGl0QXNzaWdubWVudFwiLCBWaHNDcmVkaXRBc3NpZ25tZW50RGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNFZGl0YWJsZVVzZXJDcmVkaXRzXCIsIFZoc0VkaXRhYmxlVXNlckRpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzVmVyc2lvbkNoZWNrZXJcIiwgVmhzVmVyc2lvbkNoZWNrZXJGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0xlYXJuaW5nU2Vzc2lvbnNUb3BUYWJzXCIsIFZoc0xlYXJuaW5nU2Vzc2lvbnNUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNJbHRcIiwgVmhzSUxURGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNNZWV0aW5nQ3JlYXRlRWRpdFwiLCBWaHNNZWV0aW5nQ3JlYXRlRWRpdERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzV2ViaW5hckNyZWF0ZUVkaXRcIiwgVmhzV2ViaW5hckNyZWF0ZUVkaXREaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1RlYW1zQ3JlYXRlRWRpdFwiLCBWaHNUZWFtc0NyZWF0ZUVkaXREaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1F1aXpUb3BUYWJzXCIsIFF1aXpWaWV3VG9wVGFic0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzUHVyY2hhc2VcIiwgVmhzUHVyY2hhc2VEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1Byb2R1Y3RWaWV3VG9wVGFic1wiLCBWaHNQcm9kdWN0Vmlld1RvcFRhYnNEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1Byb2R1Y3RJdGVtRGV0YWlsc1wiLCBWaHNQcm9kdWN0SXRlbURldGFpbHNEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc05vdGlmaWNhdGlvblRlbXBsYXRlXCIsIFZoc05vdGlmaWNhdGlvblRlbXBsYXRlRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNOb3RpZmljYXRpb25UZW1wbGF0ZUVkaXRcIiwgVmhzTm90aWZpY2F0aW9uVGVtcGxhdGVFZGl0RGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNTeXN0ZW1TZXR0aW5nc1RvcFRhYnNcIiwgVmhzU3lzdGVtU2V0dGluZ3NUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNTeXN0ZW1TZXR0aW5nc01lbnVJdGVtc1Zpc2liaWxpdHlcIiwgVmhzU3lzdGVtU2V0dGluZ3NNZW51SXRlbXNWaXNpYmlsaXR5RGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNRdWl6SW1wb3J0RXhwb3J0XCIsIFZoc1F1aXpJbXBvcnRFeHBvcnREaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcImF2YXRhclwiLCBBdmF0YXJEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0ZpbGxhYmxlRm9ybVwiLCBWaHNGaWxsYWJsZUZvcm1EaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1VwbG9hZEFyY2hpdmVJbkNvdXJzZUVkaXRcIiwgVXBsb2FkQXJjaGl2ZUluQ291cnNlRWRpdERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzR3JvdXBFZGl0VG9wVGFic1wiLCBWaHNHcm91cEVkaXRUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNIb21lTWVudVwiLCBWaHNIb21lTWVudURpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzVXNlckF2YXRhclwiLCBWaHNVc2VyQXZhdGFyRGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5kaXJlY3RpdmUoXCJ2aHNCcmFuZGluZ0xvZ29zRWRpdGluZ1wiLCBWaHNCcmFuZGluZ0xvZ29zRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQnJhbmRpbmdDb2xvcnNFZGl0aW5nXCIsIFZoc0JyYW5kaW5nQ29sb3JzRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQnJhbmRpbmdUaGVtZXNFZGl0aW5nXCIsIFZoc0JyYW5kaW5nVGhlbWVzRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQnJhbmRpbmdDc3NFZGl0aW5nXCIsIFZoc0JyYW5kaW5nQ3NzRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQnJhbmRpbmdTaGFyZUVkaXRpbmdcIiwgVmhzQnJhbmRpbmdTaGFyZUVkaXRpbmdEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc1BhcnRpY2lwYW50c1wiLCBWaHNQYXJ0aWNpcGFudHNEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0JhZGdlVGVtcGxhdGVcIiwgVmhzQmFkZ2VUZW1wbGF0ZURpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQmFkZ2VUZW1wbGF0ZUVkaXRcIiwgVmhzQmFkZ2VUZW1wbGF0ZUVkaXREaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc01hdGVyaWFsQ2hlY2twb2ludHNcIiwgVmhzTWF0ZXJpYWxDaGVja3BvaW50c0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzQWRkVGFibGVcIiwgVmhzQWRkVGFibGVEaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0hvdHNwb3RRdWVzdGlvbkVkaXRcIiwgVmhzSG90c3BvdFF1ZXN0aW9uRWRpdERpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzSG90c3BvdFF1ZXN0aW9uQW5zd2VyaW5nXCIsIFZoc0hvdHNwb3RRdWVzdGlvbkFuc3dlcmluZ0RpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzSG90c3BvdFF1ZXN0aW9uRXhwbGFuYXRpb25cIiwgVmhzSG90c3BvdFF1ZXN0aW9uRXhwbGFuYXRpb25EaXJlY3RpdmVGYWN0b3J5KVxyXG4gICAgLmRpcmVjdGl2ZShcInZoc0FpQ29udGVudEdlbmVyYXRpb25cIiwgVmhzQUlDb250ZW50R2VuZXJhdGlvbkRpcmVjdGl2ZUZhY3RvcnkpXHJcbiAgICAuZGlyZWN0aXZlKFwidmhzSGVscEJvdFwiLCBWaHNIZWxwQm90RGlyZWN0aXZlRmFjdG9yeSlcclxuICAgIC5maWx0ZXIoXCJtYXhMZW5ndGhcIiwgTWF4TGVuZ3RoRmlsdGVyRmFjdG9yeSlcclxuICAgIC5maWx0ZXIoXCJzZWNvbmRzVG9UaW1lXCIsIFNlY29uZHNUb1RpbWVGaWx0ZXJGYWN0b3J5KTtcclxuIiwiaW1wb3J0IElOZ01vZGVsQ29udHJvbGxlciA9IGFuZ3VsYXIuSU5nTW9kZWxDb250cm9sbGVyO1xyXG5pbXBvcnQgSVNjb3BlID0gYW5ndWxhci5JU2NvcGU7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi4vdXRpbHMvTW9tZW50XCI7XHJcbmludGVyZmFjZSBEYXRlVGltZVBpY2tlckF0dHJpYnV0ZXMgZXh0ZW5kcyBhbmd1bGFyLklBdHRyaWJ1dGVzIHtcclxuICAgIG5hdmlnYXRpb246IHN0cmluZztcclxuICAgIG5nTW9kZWw6IHN0cmluZztcclxuICAgIG1heEN1cnJlbnREYXRlOiBib29sZWFuXHJcbn1cclxuaW50ZXJmYWNlIERhdGVQaWNrZXJTY29wZSBleHRlbmRzIElTY29wZSB7XHJcbiAgICBtaW5EYXRlPzogc3RyaW5nO1xyXG4gICAgbWF4RGF0ZT86IHN0cmluZztcclxuICAgIG1pbkRhdGVWYWxpZGF0aW9uOiBib29sZWFuO1xyXG4gICAgbWF4RGF0ZVZhbGlkYXRpb246IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEYXRlVGltZVBpY2tlckRpcmVjdGl2ZUZhY3RvcnkoKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBEYXRlUGlja2VyU2NvcGUsIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogRGF0ZVRpbWVQaWNrZXJBdHRyaWJ1dGVzLCBuZ01vZGVsOiBJTmdNb2RlbENvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBlbGVtZW50LmRhdGV0aW1lcGlja2VyKHtcclxuICAgICAgICAgICAgcGlja1RpbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICBsYW5ndWFnZTogXCJlblwiLFxyXG5cclxuICAgICAgICAgICAgLy8gVE9ETzogYWJzZW50XHJcbiAgICAgICAgICAgIGZvcm1hdDogXCJNL0QvWVlZWVwiLFxyXG4gICAgICAgICAgICBjb2xsYXBzZTogdHJ1ZSxcclxuICAgICAgICAgICAga2V5Ym9hcmROYXZpZ2F0aW9uOiBhdHRyaWJ1dGVzLm5hdmlnYXRpb24gfHwgdHJ1ZSxcclxuICAgICAgICAgICAgbWF4RGF0ZTogJHNjb3BlLm1heERhdGVWYWxpZGF0aW9uID8gbW9tZW50KCRzY29wZS5tYXhEYXRlKS50b0RhdGUoKSA6IG51bGxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5iaW5kKFwiZHAuY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZWxlbWVudC50cmlnZ2VyKCdpbnB1dCcpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJHdhdGNoKGF0dHJpYnV0ZXMubmdNb2RlbCwgdmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQudHJpZ2dlcihcImNoYW5nZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIixcclxuICAgICAgICAgICAgKCkgPT4gZWxlbWVudC5kYXRldGltZXBpY2tlcigpLmRhdGEoJ0RhdGVUaW1lUGlja2VyJykuZGVzdHJveSgpKTtcclxuXHJcbiAgICAgICAgaWYgKCRzY29wZS5tYXhEYXRlVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICBuZ01vZGVsLiR2YWxpZGF0b3JzW1wibWF4RGF0ZVwiXSA9IChtb2RlbFZhbHVlOiBzdHJpbmcsIHZpZXdWYWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISRzY29wZS5tYXhEYXRlIHx8ICF2aWV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IG1vbWVudCgkc2NvcGUubWF4RGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBNb21lbnQucGFyc2Uodmlld1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhbWF4LmlzVmFsaWQoKSB8fCAhdmFsdWUuaXNWYWxpZCgpIHx8ICF2YWx1ZS5pc0FmdGVyKG1heCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICRzY29wZS4kd2F0Y2goXCJtYXhEYXRlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5nTW9kZWwuJHZhbGlkYXRlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCRzY29wZS5taW5EYXRlVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICBuZ01vZGVsLiR2YWxpZGF0b3JzW1wibWluRGF0ZVwiXSA9IChtb2RlbFZhbHVlOiBzdHJpbmcsIHZpZXdWYWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISRzY29wZS5taW5EYXRlIHx8ICF2aWV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pbiA9IG1vbWVudCgkc2NvcGUubWluRGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBNb21lbnQucGFyc2Uodmlld1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhbWluLmlzVmFsaWQoKSB8fCAhdmFsdWUuaXNWYWxpZCgpIHx8ICF2YWx1ZS5pc0JlZm9yZShtaW4pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAkc2NvcGUuJHdhdGNoKFwibWluRGF0ZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBuZ01vZGVsLiR2YWxpZGF0ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgcmVxdWlyZTogXCI/bmdNb2RlbFwiLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIG1pbkRhdGU6IFwiPT92aHNNaW5cIixcclxuICAgICAgICAgICAgbWF4RGF0ZTogXCI9P3Zoc01heFwiLFxyXG4gICAgICAgICAgICBtaW5EYXRlVmFsaWRhdGlvbjogXCI9P3Zoc01pbkRhdGVWYWxpZGF0aW9uXCIsXHJcbiAgICAgICAgICAgIG1heERhdGVWYWxpZGF0aW9uOiBcIj0/dmhzTWF4RGF0ZVZhbGlkYXRpb25cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGluazogbGlua1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVQaWNrZXJEaXJlY3RpdmVGYWN0b3J5KCk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogRGF0ZVBpY2tlclNjb3BlLCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IERhdGVUaW1lUGlja2VyQXR0cmlidXRlcywgbmdNb2RlbDogSU5nTW9kZWxDb250cm9sbGVyLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2NsdWRlOiBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgZWxlbWVudC5kYXRldGltZXBpY2tlcih7XHJcbiAgICAgICAgICAgIHBpY2tEYXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgcGlja1RpbWU6IHRydWUsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiBcImVuXCIsXHJcblxyXG5cclxuICAgICAgICAgICAgZm9ybWF0OiBcImhoOm1tIGFcIixcclxuICAgICAgICAgICAgY29sbGFwc2U6IHRydWUsXHJcbiAgICAgICAgICAgIGtleWJvYXJkTmF2aWdhdGlvbjogYXR0cmlidXRlcy5uYXZpZ2F0aW9uIHx8IHRydWUsXHJcbiAgICAgICAgICAgIG1heERhdGU6ICRzY29wZS5tYXhEYXRlVmFsaWRhdGlvbiA/IG1vbWVudCgkc2NvcGUubWF4RGF0ZSkudG9EYXRlKCkgOiBudWxsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYmluZChcImRwLmNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQudHJpZ2dlcignaW5wdXQnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiR3YXRjaChhdHRyaWJ1dGVzLm5nTW9kZWwsIHZhbHVlID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnRyaWdnZXIoXCJjaGFuZ2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsXHJcbiAgICAgICAgICAgICgpID0+IGVsZW1lbnQuZGF0ZXRpbWVwaWNrZXIoKS5kYXRhKCdEYXRlVGltZVBpY2tlcicpLmRlc3Ryb3koKSk7XHJcblxyXG4gICAgICAgIGlmICgkc2NvcGUubWF4RGF0ZVZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgbmdNb2RlbC4kdmFsaWRhdG9yc1tcIm1heERhdGVcIl0gPSAobW9kZWxWYWx1ZTogc3RyaW5nLCB2aWV3VmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEkc2NvcGUubWF4RGF0ZSB8fCAhdmlld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXggPSBtb21lbnQoJHNjb3BlLm1heERhdGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gTW9tZW50LnBhcnNlKHZpZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIW1heC5pc1ZhbGlkKCkgfHwgIXZhbHVlLmlzVmFsaWQoKSB8fCAhdmFsdWUuaXNBZnRlcihtYXgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAkc2NvcGUuJHdhdGNoKFwibWF4RGF0ZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBuZ01vZGVsLiR2YWxpZGF0ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgkc2NvcGUubWluRGF0ZVZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgbmdNb2RlbC4kdmFsaWRhdG9yc1tcIm1pbkRhdGVcIl0gPSAobW9kZWxWYWx1ZTogc3RyaW5nLCB2aWV3VmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEkc2NvcGUubWluRGF0ZSB8fCAhdmlld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtaW4gPSBtb21lbnQoJHNjb3BlLm1pbkRhdGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gTW9tZW50LnBhcnNlKHZpZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIW1pbi5pc1ZhbGlkKCkgfHwgIXZhbHVlLmlzVmFsaWQoKSB8fCAhdmFsdWUuaXNCZWZvcmUobWluKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgJHNjb3BlLiR3YXRjaChcIm1pbkRhdGVcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbmdNb2RlbC4kdmFsaWRhdGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIHJlcXVpcmU6IFwiP25nTW9kZWxcIixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBtaW5EYXRlOiBcIj0/dmhzTWluXCIsXHJcbiAgICAgICAgICAgIG1heERhdGU6IFwiPT92aHNNYXhcIixcclxuICAgICAgICAgICAgbWluRGF0ZVZhbGlkYXRpb246IFwiPT92aHNNaW5EYXRlVmFsaWRhdGlvblwiLFxyXG4gICAgICAgICAgICBtYXhEYXRlVmFsaWRhdGlvbjogXCI9P3Zoc01heERhdGVWYWxpZGF0aW9uXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxpbms6IGxpbmtcclxuICAgIH07XHJcbn0iLCJpbXBvcnQge1N0b3JhZ2VzLCBTdG9yYWdlV3JhcHBlcn0gZnJvbSBcIi4uL2luZnJhc3RydWN0dXJlL1N0b3JhZ2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7SURpc2N1c3Npb25UaHJlYWRDb21tZW50fSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSURpc2N1c3Npb25UaHJlYWRDb21tZW50XCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Qcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SURpc2N1c3Npb25UaHJlYWR9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JRGlzY3Vzc2lvblRocmVhZFwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJTW9kdWxlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSU1vZHVsZVwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcbmltcG9ydCB7Q291cnNlRGlzY3Vzc2lvbkNvbnRyb2xsZXJ9IGZyb20gXCIuLi9jb3Vyc2VzL0NvdXJzZURpc2N1c3Npb25Db250cm9sbGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IElBdHRyaWJ1dGVzID0gYW5ndWxhci5JQXR0cmlidXRlcztcclxuaW1wb3J0IElTY29wZSA9IGFuZ3VsYXIuSVNjb3BlO1xyXG5pbXBvcnQgSUh0dHBTZXJ2aWNlID0gYW5ndWxhci5JSHR0cFNlcnZpY2U7XHJcbmltcG9ydCBJTG9jYXRpb25TZXJ2aWNlID0gYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlO1xyXG5pbXBvcnQgSUFuY2hvclNjcm9sbFNlcnZpY2UgPSBhbmd1bGFyLklBbmNob3JTY3JvbGxTZXJ2aWNlO1xyXG5pbXBvcnQgSVRyYW5zY2x1ZGVGdW5jdGlvbiA9IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbjtcclxuaW1wb3J0IElBdWdtZW50ZWRKUXVlcnkgPSBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcbmltcG9ydCBJRGlyZWN0aXZlID0gYW5ndWxhci5JRGlyZWN0aXZlO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7QmFkZ2VzU2VydmljZX0gZnJvbSBcIi4uL2dhbWlmaWNhdGlvbi9CYWRnZXNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUFjdGlvbkJhZGdlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL21vZGVscy9JQWN0aW9uQmFkZ2VcIjtcclxuaW1wb3J0IHtQZXJzb25hbFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvUGVyc29uYWxSb3V0ZXJcIjtcclxuXHJcbmludGVyZmFjZSBJRGlzY3Vzc2lvblRocmVhZENvbW1lbnRFeHRlbmRlZCBleHRlbmRzIElEaXNjdXNzaW9uVGhyZWFkQ29tbWVudCB7XHJcbiAgICByZXBseT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmludGVyZmFjZSBJRGlzY3Vzc2lvblRocmVhZEV4dGVuZGVkIGV4dGVuZHMgSURpc2N1c3Npb25UaHJlYWQge1xyXG4gICAgZWRpdGluZz86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSURpc2N1c3Npb25zRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBJU2NvcGUge1xyXG4gICAgdm0/OiBEaXNjdXNzaW9uc0NvbnRyb2xsZXI7XHJcbiAgICBjb3Vyc2U/OiBJQ291cnNlO1xyXG4gICAgdGhyZWFkSWQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEaXNjdXNzaW9uc0NvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgY3VycmVudFVzZXI6IElVc2VySW5mbyA9IHt9O1xyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyUHJvZmlsZTogSVVzZXI7XHJcbiAgICBwdWJsaWMgcHJldmlld1VybDogYW55O1xyXG4gICAgcHVibGljIGNvdXJzZVN0YXJ0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlID0ge307XHJcbiAgICBwdWJsaWMgY291cnNlTW9kdWxlczogSU1vZHVsZVtdID0gW107XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyB0aHJlYWRJZDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBhdXRob3JOYW1lOiBTdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHRocmVhZHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SURpc2N1c3Npb25UaHJlYWRFeHRlbmRlZD47XHJcbiAgICBwdWJsaWMgY29tbWVudHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SURpc2N1c3Npb25UaHJlYWRDb21tZW50RXh0ZW5kZWQ+O1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50VGhyZWFkOiBJRGlzY3Vzc2lvblRocmVhZDtcclxuICAgIHB1YmxpYyBlZGl0aW5nVGhyZWFkOiBJRGlzY3Vzc2lvblRocmVhZEV4dGVuZGVkO1xyXG5cclxuICAgIHB1YmxpYyBuZXdUaHJlYWQ6IElEaXNjdXNzaW9uVGhyZWFkO1xyXG4gICAgcHVibGljIG5ld0NvbW1lbnQ6IElEaXNjdXNzaW9uVGhyZWFkQ29tbWVudDtcclxuICAgIHB1YmxpYyBuZXdSZXBseUNvbW1lbnQ6IElEaXNjdXNzaW9uVGhyZWFkQ29tbWVudDtcclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZUFjdGlvbkJ1dHRvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyByZXdhcmRzOiBBcnJheTxJQWN0aW9uQmFkZ2U+ID0gW107XHJcbiAgICBwdWJsaWMgcmV3YXJkVG9TaG93OiBJQWN0aW9uQmFkZ2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkYW5jaG9yU2Nyb2xsXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFByb2dyZXNzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU3RvcmFnZXMuU0VTU0lPTl9OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBCYWRnZXNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVyc29uYWxSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSURpc2N1c3Npb25zRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBJSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGFuY2hvclNjcm9sbDogSUFuY2hvclNjcm9sbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2VXcmFwcGVyOiBTdG9yYWdlV3JhcHBlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFkZ2VzU2VydmljZTogQmFkZ2VzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVyc29uYWxSb3V0ZXI6IFBlcnNvbmFsUm91dGVyKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLmNvdXJzZUlkID0gJHNjb3BlLmNvdXJzZS5pZDtcclxuICAgICAgICB0aGlzLnRocmVhZElkID0gJHNjb3BlLnRocmVhZElkO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2VcclxuICAgICAgICAgICAgLmRlbWFuZENvdXJzZVBlcm1pc3Npb25zKFwiXCIgKyB0aGlzLmNvdXJzZUlkLCBjb3Vyc2VQZXJtaXNzaW9ucyA9PiBjb3Vyc2VQZXJtaXNzaW9ucy52aWV3KTtcclxuICAgICAgICBpZiAodGhpcy5pc0F1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkodXNlciwgdGhpcy5jdXJyZW50VXNlcik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3VXJsID0gdXNlci5wcmV2aWV3VXJsO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRDb3Vyc2VNb2R1bGVzKCk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGhyZWFkc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElEaXNjdXNzaW9uVGhyZWFkRXh0ZW5kZWQ+KCRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9kaXNjdXNzaW9uL3RocmVhZHNcIikucGFyYW0oXCI6Y291cnNlSWRcIiwgdGhpcy5jb3Vyc2VJZCkuc2VydmljZSgpKSk7XHJcbiAgICAgICAgdGhpcy50aHJlYWRzR3JpZE1vZGVsLnBhZ2VTaXplID0gNTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRUaHJlYWRzR3JpZEZpbHRlcnMoKTtcclxuICAgICAgICB0aGlzLnRocmVhZHNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29tbWVudHNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJRGlzY3Vzc2lvblRocmVhZENvbW1lbnRFeHRlbmRlZD4oJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2Rpc2N1c3Npb24vdGhyZWFkcy9jb21tZW50c1wiKS5wYXJhbShcIjpjb3Vyc2VJZFwiLCB0aGlzLmNvdXJzZUlkKS5zZXJ2aWNlKCkpKTtcclxuICAgICAgICB0aGlzLmNvbW1lbnRzR3JpZE1vZGVsLnBhZ2VTaXplID0gNTtcclxuXHJcbiAgICAgICAgdGhpcy5uZXdDb21tZW50ID0ge3RleHQ6IFwiXCJ9O1xyXG4gICAgICAgIHRoaXMubmV3UmVwbHlDb21tZW50ID0ge3RleHQ6IFwiXCJ9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydExvYWRpbmcoKSB7XHJcbiAgICAgICAgLy9kbyBub3RoaW5nXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuZExvYWRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy50aHJlYWRzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaCgodDogSURpc2N1c3Npb25UaHJlYWRFeHRlbmRlZCkgPT4ge1xyXG4gICAgICAgICAgICB0LmVkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy50aHJlYWRJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25UaHJlYWRDaGFuZ2UodGhpcy50aHJlYWRzR3JpZE1vZGVsLmVudHJpZXNbMF0pO1xyXG4gICAgICAgICAgICB0aGlzLnRocmVhZElkID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy50aHJlYWRzR3JpZE1vZGVsLmZpbHRlci50aHJlYWRJZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGhyZWFkSWQ6IG51bWJlciA9ICtsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGhyZWFkSWQnKTtcclxuXHJcbiAgICAgICAgaWYgKHRocmVhZElkKSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0aHJlYWRJZCcpO1xyXG4gICAgICAgICAgICBsZXQgdGhyZWFkOiBJRGlzY3Vzc2lvblRocmVhZCA9IHRoaXMudGhyZWFkc0dyaWRNb2RlbC5lbnRyaWVzLmZpbHRlcih0ID0+IHQuaWQgPT0gdGhyZWFkSWQpWzBdO1xyXG4gICAgICAgICAgICBpZiAodGhyZWFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uVGhyZWFkQ2hhbmdlKHRocmVhZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldERlZmF1bHRUaHJlYWRzR3JpZEZpbHRlcnMoKSB7XHJcbiAgICAgICAgdGhpcy50aHJlYWRzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMudGhyZWFkc0dyaWRNb2RlbC5maWx0ZXIubW9kdWxlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudGhyZWFkc0dyaWRNb2RlbC5maWx0ZXIub25seUNvbW1vblRocmVhZHMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRocmVhZHNHcmlkTW9kZWwuZmlsdGVyLnRocmVhZElkID0gdGhpcy50aHJlYWRJZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXJzKCkge1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFRocmVhZHNHcmlkRmlsdGVycygpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkR3JpZE1vZGVscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWxvYWRHcmlkTW9kZWxzKCkge1xyXG4gICAgICAgIHRoaXMudGhyZWFkc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUaHJlYWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY29tbWVudHNHcmlkTW9kZWwuZmlsdGVyLnRocmVhZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb21tZW50c0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25UaHJlYWRDaGFuZ2UodGhyZWFkOiBJRGlzY3Vzc2lvblRocmVhZCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRocmVhZCA9IHRocmVhZDtcclxuICAgICAgICB0aGlzLmdldFRocmVhZENyZWF0b3IoKVxyXG4gICAgICAgIHRoaXMubmV3Q29tbWVudCA9IHt0ZXh0OiBcIlwifTtcclxuICAgICAgICB0aGlzLm5ld1JlcGx5Q29tbWVudCA9IHt0ZXh0OiBcIlwifTtcclxuICAgICAgICB0aGlzLmNvbW1lbnRzR3JpZE1vZGVsLmZpbHRlci50aHJlYWQgPSB0aHJlYWQgIT0gbnVsbCA/IHRocmVhZC5pZCA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb21tZW50c0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25UaHJlYWRCdXR0b25QcmVzcyh0aHJlYWQ6IElEaXNjdXNzaW9uVGhyZWFkLCBrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoa2V5Q29kZSA9PSAxMyB8fCAha2V5Q29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUaHJlYWQgPSB0aHJlYWQ7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VGhyZWFkQ3JlYXRvcigpXHJcbiAgICAgICAgICAgIHRoaXMubmV3Q29tbWVudCA9IHt0ZXh0OiBcIlwifTtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXBseUNvbW1lbnQgPSB7dGV4dDogXCJcIn07XHJcbiAgICAgICAgICAgIHRoaXMuY29tbWVudHNHcmlkTW9kZWwuZmlsdGVyLnRocmVhZCA9IHRocmVhZCAhPSBudWxsID8gdGhyZWFkLmlkIDogbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5jb21tZW50c0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dDcmVhdGVOZXdUaHJlYWREaWFsb2coKSB7XHJcbiAgICAgICAgJChcIiNjcmVhdGVOZXdUaHJlYWREaWFsb2dcIikubW9kYWwoXCJzaG93XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93VGhyZWFkUmVtb3ZhbERpYWxvZyh0aHJlYWQ6IElEaXNjdXNzaW9uVGhyZWFkKSB7XHJcbiAgICAgICAgdGhpcy5vblRocmVhZENoYW5nZSh0aHJlYWQpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIHRocmVhZD9cIiwge1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiVGhyZWFkIHJlbW92YWxcIixcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiWWVzXCIsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b246IFwiTm9cIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRocmVhZCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkVGhyZWFkKCkge1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5hZGRDb3Vyc2VUaHJlYWQodGhpcy5jb3Vyc2VJZCwgdGhpcy5uZXdUaHJlYWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRocmVhZCBoYXMgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy50aHJlYWRzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm5ld1RocmVhZCA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2Uubm90aWZ5VXNlckFmdGVyUmV3YXJkKEFycmF5KFwiRlNUX0RTQ19UUENcIikpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHJvb3RTY29wZS4kYnJvYWRjYXN0KCdub3RpZnlSZXdhcmQnLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsQWRkVGhyZWFkKCkge1xyXG4gICAgICAgIHRoaXMubmV3VGhyZWFkID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVRocmVhZCgpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVBY3Rpb25CdXR0b25zID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UucmVtb3ZlQ291cnNlVGhyZWFkKHRoaXMuY291cnNlSWQsIHRoaXMuY3VycmVudFRocmVhZC5pZCwgdGhpcy5jdXJyZW50VGhyZWFkLnZlcnNpb24pLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRocmVhZCBoYXMgYmVlbiByZW1vdmVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVBY3Rpb25CdXR0b25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudGhyZWFkc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgdGhpcy5vblRocmVhZENoYW5nZShudWxsKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRUaHJlYWRJbmxpbmVFZGl0KHRocmVhZDogSURpc2N1c3Npb25UaHJlYWRFeHRlbmRlZCkge1xyXG4gICAgICAgIHRoaXMudGhyZWFkc0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goKHQ6IElEaXNjdXNzaW9uVGhyZWFkRXh0ZW5kZWQpID0+IHtcclxuICAgICAgICAgICAgdC5lZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nVGhyZWFkID0ge307XHJcbiAgICAgICAgdGhyZWFkLmVkaXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGFuZ3VsYXIuY29weSh0aHJlYWQsIHRoaXMuZWRpdGluZ1RocmVhZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUVkaXRlZFRocmVhZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5lZGl0aW5nVGhyZWFkLnRpdGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUFjdGlvbkJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UudXBkYXRlQ291cnNlVGhyZWFkKHRoaXMuY291cnNlSWQsIHRoaXMuZWRpdGluZ1RocmVhZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQWN0aW9uQnV0dG9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0aW5nVGhyZWFkID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRocmVhZHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJQbGVhc2Ugc3BlY2lmeSB0aHJlYWQgbmFtZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZU5ld1JlcGx5Q29tbWVudChwYXJlbnRJZD86IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuY29tbWVudHNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKChjOiBJRGlzY3Vzc2lvblRocmVhZENvbW1lbnRFeHRlbmRlZCkgPT4ge1xyXG4gICAgICAgICAgICBjLnJlcGx5ID0gYy5pZCA9PSBwYXJlbnRJZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm5ld1JlcGx5Q29tbWVudC5wYXJlbnRJZCA9IHBhcmVudElkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxOZXdSZXBseUNvbW1lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21tZW50c0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goKGM6IElEaXNjdXNzaW9uVGhyZWFkQ29tbWVudEV4dGVuZGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjLmlkID09IHRoaXMubmV3UmVwbHlDb21tZW50LnBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICBjLnJlcGx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNsZWFuQ29tbWVudCh0aGlzLm5ld1JlcGx5Q29tbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFuQ29tbWVudChjb21tZW50OiBJRGlzY3Vzc2lvblRocmVhZENvbW1lbnQpIHtcclxuICAgICAgICBjb21tZW50LnRleHQgPSBcIlwiO1xyXG4gICAgICAgIGNvbW1lbnQucGFyZW50SWQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRDb21tZW50KHJlcGx5OiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQWN0aW9uQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmFkZFRocmVhZENvbW1lbnQodGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VGhyZWFkLmlkLCByZXBseSA/IHRoaXMubmV3UmVwbHlDb21tZW50IDogdGhpcy5uZXdDb21tZW50KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUFjdGlvbkJ1dHRvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkNvbW1lbnQgaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbWVudHNHcmlkTW9kZWwubG9hZFBhZ2UodGhpcy5jb21tZW50c0dyaWRNb2RlbC50b3RhbFBhZ2VDb3VudCAtIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFuQ29tbWVudChyZXBseSA/IHRoaXMubmV3UmVwbHlDb21tZW50IDogdGhpcy5uZXdDb21tZW50KTtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLm5vdGlmeVVzZXJBZnRlclJld2FyZChBcnJheShcIkZTVF9EU0NfUlBMXCIsIFwiVFRIX0RTQ19EUlBMXCIsIFwiVEZUSF9EU0NfRFJQTFwiLCBcIkhUSF9EU0NfRFJQTFwiKSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoJ25vdGlmeVJld2FyZCcsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVDb21tZW50KGNvbW1lbnQ6IElEaXNjdXNzaW9uVGhyZWFkQ29tbWVudCkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUFjdGlvbkJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5yZW1vdmVUaHJlYWRDb21tZW50KHRoaXMuY291cnNlSWQsIGNvbW1lbnQuaWQsIGNvbW1lbnQudmVyc2lvbikudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiQ29tbWVudCBoYXMgYmVlbiByZW1vdmVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVBY3Rpb25CdXR0b25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbWVudHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlTW9kdWxlcygpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0TW9kdWxlcyh0aGlzLmNvdXJzZUlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlTW9kdWxlcyA9IHJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEVudGl0aWVzVXJsKGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgY2FzZSAnbW9kdWxlcyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShDb3Vyc2VEaXNjdXNzaW9uQ29udHJvbGxlci5NT0RVTEVTX0ZJTFRFUl9VUkwpXHJcbiAgICAgICAgICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIHRoaXMuY291cnNlSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXJQcm9maWxlID0gdTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRocmVhZENyZWF0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldENvdXJzZVRocmVhZENyZWF0b3IodGhpcy5jdXJyZW50VGhyZWFkLmlkKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hdXRob3JOYW1lID0gcmVzLmZ1bGxOYW1lO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEltYWdlRm9yQWN0aXZpdHlCYWRnZShiYWRnZTogSUFjdGlvbkJhZGdlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoYmFkZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCFiYWRnZS5maWxlSWQgJiYgYmFkZ2UuYmFkZ2VLZXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgdGhlbWVzL2RlZmF1bHQvaW1nL2FjdGlvbkJhZGdlcy8ke2JhZGdlLmJhZGdlS2V5fS5wbmdgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBiYWRnZS5wcmV2aWV3VXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN1Ym1pdFJld2FyZChyZXdhcmRJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgJCgnLnJld2FyZE5vdGlmaWNhdGlvbicpLmFkZENsYXNzKCdyZXdhcmROb3RpZmljYXRpb24tdXAnKTtcclxuICAgICAgICB0aGlzLnJld2FyZHMgPSB0aGlzLnJld2FyZHMuZmlsdGVyKHIgPT4gci5pZCAhPT0gcmV3YXJkSWQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXdhcmRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkVG9TaG93ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICQoJy5yZXdhcmROb3RpZmljYXRpb24nKS5yZW1vdmVDbGFzcygncmV3YXJkTm90aWZpY2F0aW9uLXVwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRUb1Nob3cgPSB0aGlzLnJld2FyZHNbMF07XHJcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRUb1Nob3cgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERpc2N1c3Npb25zRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBJRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJU2NvcGUsIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLCBjb250cm9sbGVyOiBEaXNjdXNzaW9uc0NvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IElUcmFuc2NsdWRlRnVuY3Rpb24pIHtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXJlY3RpdmU6IGFueSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUubGluayA9IGxpbms7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7XHJcbiAgICAgICAgY291cnNlOiBcIj12aHNDb3Vyc2VcIixcclxuICAgICAgICB0aHJlYWRJZDogXCI9dmhzVGhyZWFkSWRcIlxyXG4gICAgfTtcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gRGlzY3Vzc2lvbnNDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9kaXNjdXNzaW9ucy5odG1sXCIpO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuRGlzY3Vzc2lvbnNEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSBcIi4vLi4vcmVmZXJlbmNlL1JlZmVyZW5jZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlRW50aXRpZXNQYXJhbXN9IGZyb20gXCIuLy4uL3JlZmVyZW5jZS9tb2RlbHMvSVJlZmVyZW5jZUVudGl0aWVzUGFyYW1zXCI7XHJcbmltcG9ydCBJUHJvbWlzZSA9IGFuZ3VsYXIuSVByb21pc2U7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFbnRpdGllc1NlbGVjdDJTZWxlY3RvckRpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgdXJsU3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcmVmZXJlbmNlS2V5Pzogc3RyaW5nO1xyXG4gICAgZmlsdGVyPzogYW55O1xyXG4gICAgbW9kZWw/OiBhbnk7XHJcbiAgICBtb2RlbFByb3BlcnR5Pzogc3RyaW5nO1xyXG4gICAgbXVsdGlwbGU6IGJvb2xlYW47XHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgICBudWxsYWJsZTogYm9vbGVhbjtcclxuICAgIGFjdGl2ZUVudGl0aWVzPzogYm9vbGVhbjtcclxuICAgIG51bGxhYmxlQnVzaW5lc3NVbml0PzogYm9vbGVhbjtcclxuICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gICAgb25TZWxlY3RvckNoYW5nZT86IChvYmplY3Q/OiBhbnkpID0+IHt9O1xyXG4gICAgZm9yY2VMb2FkaW5nRnJvbVNlcnZlcj86IGJvb2xlYW47XHJcbiAgICB1c2Vyc0FuZEdyb3Vwc1NlbGVjdG9yPzogYm9vbGVhbjtcclxuXHJcbiAgICB2bT86IEVudGl0aWVzU2VsZWN0MlNlbGVjdG9yQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVudGl0aWVzU2VsZWN0MlNlbGVjdG9yQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBERUZBVUxUX1BMQUNFSE9MREVSOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIHByaXZhdGUgbW9kZWxJZHM6IEFycmF5PG51bWJlcj47XHJcbiAgICBwcml2YXRlIG1vZGVsSWQ6IG51bWJlciA9IG51bGw7XHJcblxyXG4gICAgcHVibGljIGl0ZW1zOiBBcnJheTxJU2VsZWN0YWJsZT47XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55ID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgaW5maW5pdGVTY3JvbGwgPSB7XHJcbiAgICAgICAgbnVtVG9BZGQ6IDIwLFxyXG4gICAgICAgIGN1cnJlbnRJdGVtczogMjBcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBSZWZlcmVuY2VTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElFbnRpdGllc1NlbGVjdDJTZWxlY3RvckRpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogbmcuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlZmVyZW5jZUFwaTogUmVmZXJlbmNlU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSAkc2NvcGUucGxhY2Vob2xkZXIgPyAkc2NvcGUucGxhY2Vob2xkZXIgOiBFbnRpdGllc1NlbGVjdDJTZWxlY3RvckNvbnRyb2xsZXIuREVGQVVMVF9QTEFDRUhPTERFUjtcclxuXHJcbiAgICAgICAgaWYgKCRzY29wZS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsSWRzID0gJHNjb3BlLm1vZGVsWyRzY29wZS5tb2RlbFByb3BlcnR5XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsSWQgPSAkc2NvcGUubW9kZWxbJHNjb3BlLm1vZGVsUHJvcGVydHldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCRzY29wZS5mb3JjZUxvYWRpbmdGcm9tU2VydmVyID09IG51bGwgfHwgJHNjb3BlLmZvcmNlTG9hZGluZ0Zyb21TZXJ2ZXIgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICRzY29wZS5mb3JjZUxvYWRpbmdGcm9tU2VydmVyID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJHNjb3BlLmZvcmNlTG9hZGluZ0Zyb21TZXJ2ZXIpIHtcclxuICAgICAgICAgICAgaWYgKCRzY29wZS5maWx0ZXIgPT0gbnVsbCB8fCAkc2NvcGUuZmlsdGVyID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmZpbHRlciA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgkc2NvcGUuZmlsdGVyLnNlYXJjaFN0cmluZ0ZpbHRlciA9PSBudWxsIHx8ICRzY29wZS5maWx0ZXIuc2VhcmNoU3RyaW5nRmlsdGVyID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuZmlsdGVyLnNlYXJjaFN0cmluZ0ZpbHRlciA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCRzY29wZS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuZmlsdGVyLmluY2x1ZGVkSWRzID0gdGhpcy5tb2RlbElkcyA/IHRoaXMubW9kZWxJZHMgOiBbXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmZpbHRlci5pbmNsdWRlZElkcyA9IHRoaXMubW9kZWxJZCA/IFt0aGlzLm1vZGVsSWRdIDogW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy4kc2NvcGUubXVsdGlwbGUgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRFbnRpdGllc0ZvclNlbGVjdG9yKClcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCRzY29wZS5mb3JjZUxvYWRpbmdGcm9tU2VydmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuZmlsdGVyLmluY2x1ZGVkSWRzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiR3YXRjaChcImZpbHRlclwiLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhbmd1bGFyLmVxdWFscyhuZXdWYWx1ZSwgb2xkVmFsdWUpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEVudGl0aWVzRm9yU2VsZWN0b3IoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2goXCJhY3RpdmVFbnRpdGllc1wiLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PSBvbGRWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRFbnRpdGllc0ZvclNlbGVjdG9yKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoKFwibW9kZWxbbW9kZWxQcm9wZXJ0eV1cIiwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYW5ndWxhci5lcXVhbHMobmV3VmFsdWUsIG9sZFZhbHVlKSB8fFxyXG4gICAgICAgICAgICAgICAgYW5ndWxhci5lcXVhbHMobmV3VmFsdWUsIHRoaXMuJHNjb3BlLm11bHRpcGxlID8gdGhpcy5tb2RlbElkcyA6IHRoaXMubW9kZWxJZCkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmICgkc2NvcGUuZm9yY2VMb2FkaW5nRnJvbVNlcnZlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCRzY29wZS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmZpbHRlci5pbmNsdWRlZElkcyA9IHRoaXMubW9kZWxJZHMgPyB0aGlzLm1vZGVsSWRzIDogW107XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmZpbHRlci5pbmNsdWRlZElkcyA9IHRoaXMubW9kZWxJZCA/IFt0aGlzLm1vZGVsSWRdIDogW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRFbnRpdGllc0ZvclNlbGVjdG9yKClcclxuICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmZpbHRlci5pbmNsdWRlZElkcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkRW50aXRpZXNGb3JTZWxlY3RvcigpOiBJUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUucmVmZXJlbmNlS2V5ICE9IG51bGwgfHwgIXRoaXMuJHNjb3BlLmZvcmNlTG9hZGluZ0Zyb21TZXJ2ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy4kc2NvcGUubXVsdGlwbGUgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcHJvbWlzZTogSVByb21pc2U8YW55PjtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUucmVmZXJlbmNlS2V5ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMucmVmZXJlbmNlQXBpLmdldEFjdGl2ZVJlZmVyZW5jZUVudGl0aWVzRm9yU2VsZWN0b3IodGhpcy4kc2NvcGUucmVmZXJlbmNlS2V5LCBuZXcgUmVmZXJlbmNlRW50aXRpZXNQYXJhbXMoXHJcbiAgICAgICAgICAgICAgICBudWxsLCBudWxsLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy4kc2NvcGUuZmlsdGVyLCB0aGlzLiRzY29wZS5udWxsYWJsZUJ1c2luZXNzVW5pdCksIG51bGwpO1xyXG4gICAgICAgICAgICBwcm9taXNlID0gcmVzdWx0LnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm11bHRpcGxlICYmIHRoaXMubW9kZWxJZHMuaW5kZXhPZihpdGVtLmlkKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKGkgPT4gaS5pZCA9PSBpdGVtLmlkKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLiRzY29wZS5tdWx0aXBsZSAmJiB0aGlzLm1vZGVsSWQgPT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBwcm9taXNlID0gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZSh0aGlzLiRzY29wZS51cmxTdHJpbmcpLCB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHRoaXMuJHNjb3BlLmZpbHRlclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcHJvbWlzZSA9IHJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy4kc2NvcGUudXNlcnNBbmRHcm91cHNTZWxlY3RvciAmJiB0aGlzLiRzY29wZS51c2Vyc0FuZEdyb3Vwc1NlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVzZXJzID0gcmVzdWx0LmRhdGFbXCJ1c2Vyc1wiXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBzID0gcmVzdWx0LmRhdGFbXCJncm91cHNcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaCh1ID0+IHUuaXNVc2VyID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHVzZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cHMuZm9yRWFjaChnID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuaXNVc2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwcy5mb3JFYWNoKGcgPT4gZy5pc1VzZXIgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBncm91cHM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm11bHRpcGxlICYmIHRoaXMubW9kZWxJZHMuaW5kZXhPZihpdGVtLmlkKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKGkgPT4gaS5pZCA9PSBpdGVtLmlkKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLiRzY29wZS5tdWx0aXBsZSAmJiB0aGlzLm1vZGVsSWQgPT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWxJZHMgPSB0aGlzLiRzY29wZS5tb2RlbFt0aGlzLiRzY29wZS5tb2RlbFByb3BlcnR5XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsSWQgPSB0aGlzLiRzY29wZS5tb2RlbFt0aGlzLiRzY29wZS5tb2RlbFByb3BlcnR5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy4kc2NvcGUubXVsdGlwbGUgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUubXVsdGlwbGUgJiYgdGhpcy5tb2RlbElkcy5pbmRleE9mKGl0ZW0uaWQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKGkgPT4gaS5pZCA9PSBpdGVtLmlkKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy4kc2NvcGUubXVsdGlwbGUgJiYgdGhpcy5tb2RlbElkID09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWxlY3RDYWxsYmFjayhpdGVtOiBJU2VsZWN0YWJsZSwgc2VsZWN0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbElkcy5wdXNoKGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5tb2RlbC5vd25lcklkcyA9IHRoaXMubW9kZWxJZHM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gaXRlbTtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUubW9kZWxbdGhpcy4kc2NvcGUubW9kZWxQcm9wZXJ0eV0gPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsSWQgPSBpdGVtLmlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzdWx0OiBhbnkgPSBhbmd1bGFyLmNvcHkoaXRlbSk7XHJcbiAgICAgICAgcmVzdWx0LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLiRzY29wZS5vblNlbGVjdG9yQ2hhbmdlKHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUmVtb3ZlQ2FsbGJhY2soaXRlbTogSVNlbGVjdGFibGUsIHNlbGVjdDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tb2RlbElkcy5pbmRleE9mKGl0ZW0uaWQsIDApO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbElkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUubW9kZWwub3duZXJJZHMgPSB0aGlzLm1vZGVsSWRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUubW9kZWxbdGhpcy4kc2NvcGUubW9kZWxQcm9wZXJ0eV0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsSWQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzdWx0OiBhbnkgPSBhbmd1bGFyLmNvcHkoaXRlbSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4kc2NvcGUub25TZWxlY3RvckNoYW5nZShyZXN1bHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWZyZXNoSXRlbXMoc2VhcmNoU3RyaW5nOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLmZvcmNlTG9hZGluZ0Zyb21TZXJ2ZXIgfHwgdGhpcy4kc2NvcGUucmVmZXJlbmNlS2V5ICE9IG51bGwgfHxcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuZmlsdGVyLnNlYXJjaFN0cmluZ0ZpbHRlciA9PSBzZWFyY2hTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiRzY29wZS5maWx0ZXIuc2VhcmNoU3RyaW5nRmlsdGVyID0gc2VhcmNoU3RyaW5nO1xyXG4gICAgICAgIHRoaXMubG9hZEVudGl0aWVzRm9yU2VsZWN0b3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRJbmZTY3JvbGwoKSB7XHJcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbC5jdXJyZW50SXRlbXMgPSB0aGlzLmluZmluaXRlU2Nyb2xsLm51bVRvQWRkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRNb3JlSXRlbXMoKSB7XHJcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbC5jdXJyZW50SXRlbXMgKz0gdGhpcy5pbmZpbml0ZVNjcm9sbC5udW1Ub0FkZDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEVudGl0aWVzU2VsZWN0MlNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcclxuXHJcbiAgICB2YXIgZGlyZWN0aXZlOiBuZy5JRGlyZWN0aXZlID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gRW50aXRpZXNTZWxlY3QyU2VsZWN0b3JDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0ge1xyXG4gICAgICAgIHVybFN0cmluZzogXCI9P3Zoc0VudGl0aWVzVXJsXCIsXHJcbiAgICAgICAgcmVmZXJlbmNlS2V5OiBcIj0/dmhzUmVmZXJlbmNlS2V5XCIsXHJcbiAgICAgICAgZmlsdGVyOiBcIj0/dmhzRmlsdGVyXCIsXHJcbiAgICAgICAgbW9kZWw6IFwiPXZoc01vZGVsXCIsXHJcbiAgICAgICAgbW9kZWxQcm9wZXJ0eTogXCI9dmhzTW9kZWxQcm9wZXJ0eVwiLFxyXG4gICAgICAgIG11bHRpcGxlOiBcIj12aHNNdWx0aXBsZVwiLFxyXG4gICAgICAgIGRpc2FibGVkOiBcIj0/dmhzRGlzYWJsZWRcIixcclxuICAgICAgICBudWxsYWJsZTogXCI9dmhzTnVsbGFibGVcIixcclxuICAgICAgICBhY3RpdmVFbnRpdGllczogXCI9P3Zoc0FjdGl2ZUVudGl0aWVzXCIsXHJcbiAgICAgICAgbnVsbGFibGVCdXNpbmVzc1VuaXQ6IFwiPT92aHNOdWxsYWJsZUJ1c2luZXNzVW5pdFwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIj0/dmhzUGxhY2Vob2xkZXJcIixcclxuICAgICAgICBvblNlbGVjdG9yQ2hhbmdlOiBcIiZ2aHNPbkNoYW5nZVwiLFxyXG4gICAgICAgIGZvcmNlTG9hZGluZ0Zyb21TZXJ2ZXI6IFwiPT92aHNGb3JjZUxvYWRpbmdGcm9tU2VydmVyXCIsXHJcbiAgICAgICAgdXNlcnNBbmRHcm91cHNTZWxlY3RvcjogXCI9P3Zoc1VzZXJzQW5kR3JvdXBzU2VsZWN0b3JcIixcclxuICAgIH07XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL2VudGl0aWVzLXNlbGVjdDItc2VsZWN0b3IuaHRtbFwiKTtcclxuICAgIGRpcmVjdGl2ZS50cmFuc2NsdWRlID0gdHJ1ZTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcbkVudGl0aWVzU2VsZWN0MlNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiaW1wb3J0IHtJUXVpelF1ZXN0aW9ufSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpRdWVzdGlvblwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFeHBsYW5hdGlvbnNEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHF1ZXN0aW9ucz86IEFycmF5PElRdWl6UXVlc3Rpb24+O1xyXG5cclxuICAgIHZtPzogRXhwbGFuYXRpb25zQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEV4cGxhbmF0aW9uc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCJcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElFeHBsYW5hdGlvbnNEaXJlY3RpdmVTY29wZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBFeHBsYW5hdGlvbnNEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICB2YXIgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBFeHBsYW5hdGlvbnNDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0ge1xyXG4gICAgICAgIHF1ZXN0aW9uczogXCI9dmhzUXVlc3Rpb25zXCJcclxuICAgIH1cclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvZXhwbGFuYXRpb25zLmh0bWxcIik7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5FeHBsYW5hdGlvbnNEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJleHBvcnQgZnVuY3Rpb24gRnVsbFNjcmVlbkRpcmVjdGl2ZUZhY3RvcnkoJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgdmFyIEZVTExfU0NSRUVOX0xPQ0FUSU9OX1BBUkFNID0gXCJmdWxsU2NyZWVuXCI7XHJcbiAgICB2YXIgRlVMTF9TQ1JFRU5fQ0xBU1MgPSBcImZ1bGwtc2NyZWVuLXZpZXdcIjtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBhbnkpIHtcclxuICAgICAgICB2YXIgY2hlY2tGdWxsU2NyZWVuRnVuY3Rpb24gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKCRsb2NhdGlvbi5zZWFyY2goKVtGVUxMX1NDUkVFTl9MT0NBVElPTl9QQVJBTV0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmFkZENsYXNzKEZVTExfU0NSRUVOX0NMQVNTKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoRlVMTF9TQ1JFRU5fQ0xBU1MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICAkcm9vdFNjb3BlLiRvbignJGxvY2F0aW9uQ2hhbmdlU3VjY2VzcycsICgkbG9jYXRpb25FdmVudCkgPT4ge1xyXG4gICAgICAgICAgICBjaGVja0Z1bGxTY3JlZW5GdW5jdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNoZWNrRnVsbFNjcmVlbkZ1bmN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuRnVsbFNjcmVlbkRpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICBcIiRyb290U2NvcGVcIlxyXG5dOyIsImltcG9ydCB7R3JpZENvbnRyb2xsZXJ9IGZyb20gXCIuL0dyaWREaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5pbnRlcmZhY2UgR3JpZENvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzIGV4dGVuZHMgbmcuSUF0dHJpYnV0ZXMge1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gR3JpZENvbmZpZ3VyYXRpb25EaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xyXG5cclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IG5nLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IEdyaWRDb25maWd1cmF0aW9uQXR0cmlidXRlcywgY29udHJvbGxlcjogR3JpZENvbnRyb2xsZXI8YW55PixcclxuICAgICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogbmcuSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuc2V0SXNDb25maWd1cmFibGUodHJ1ZSk7XHJcbiAgICAgICAgJHNjb3BlW1wiX3Nob3dQYWdlU2l6ZVNlbGVjdG9yXCJdID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGlyZWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9ncmlkLWNvbmZpZ3VyYXRpb24uaHRtbFwiKTtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5yZXF1aXJlID0gXCJedmhzR3JpZFwiO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuR3JpZENvbmZpZ3VyYXRpb25EaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtTb3J0T3JkZXIsIFNvcnRFbnRyeX0gZnJvbSBcIi4vLi4vU29ydEVudHJ5XCI7XHJcbmltcG9ydCB7U3RvcmFnZVdyYXBwZXIsIFN0b3JhZ2VzfSBmcm9tIFwiLi8uLi9pbmZyYXN0cnVjdHVyZS9TdG9yYWdlXCI7XHJcbmltcG9ydCB7VGltZW91dFV0aWxzfSBmcm9tIFwiLi8uLi91dGlscy9UaW1lb3V0VXRpbHNcIjtcclxuaW1wb3J0IHtPYmplY3RGaWVsZFJlc29sdmVyfSBmcm9tIFwiLi8uLi91dGlscy9PYmplY3RGaWVsZFJlc29sdmVyXCI7XHJcbmltcG9ydCB7XHJcbiAgICBHcmlkQ29sdW1uLFxyXG4gICAgSUdyaWRNb2RlbCxcclxuICAgIEdyaWRNb2RlbCxcclxuICAgIElHcmlkTG9hZGluZ0xpc3RlbmVyLFxyXG4gICAgSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VMaXN0ZW5lcixcclxuICAgIElQYWdlU2l6ZUNoYW5nZUxpc3RlbmVyLFxyXG4gICAgUGVyc2lzdGVkR3JpZE1vZGVsQ29uZmlndXJhdGlvblxyXG59IGZyb20gXCIuLy4uL0lHcmlkTW9kZWxcIjtcclxuXHJcbmludGVyZmFjZSBHcmlkQXR0cmlidXRlcyBleHRlbmRzIGFuZ3VsYXIuSUF0dHJpYnV0ZXMge1xyXG4gICAgZ3JpZE1vZGVsUGF0aDogc3RyaW5nO1xyXG4gICAgdmhzR3JpZFV1aWQ6IHN0cmluZztcclxuICAgIHZoc0hhc0NvbmZpZ3VyYXRpb24/OiBib29sZWFuO1xyXG59XHJcblxyXG5jbGFzcyBFbGVtZW50U29ydGluZ0luZm8ge1xyXG4gICAgcHVibGljIHNvcnRQYXRoOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlciA9IG51bGw7XHJcbiAgICBwdWJsaWMgb3JkZXI6IFNvcnRPcmRlciA9IG51bGw7XHJcbiAgICBwdWJsaWMgbWFuZGF0b3J5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nKHN0cjogc3RyaW5nKTogRWxlbWVudFNvcnRpbmdJbmZvIHtcclxuICAgICAgICAvL2V4YW1wbGU6IHByb2plY3QubmFtZSBkZXNjKD0yKVxyXG4gICAgICAgIHZhciBpbmZvOiBFbGVtZW50U29ydGluZ0luZm8gPSBudWxsO1xyXG4gICAgICAgIGlmIChzdHIpIHtcclxuICAgICAgICAgICAgdmFyIHN0clBhcnRzOiBBcnJheTxzdHJpbmc+ID0gc3RyLnNwbGl0KC9bICgpXS9nKTtcclxuICAgICAgICAgICAgaW5mbyA9IG5ldyBFbGVtZW50U29ydGluZ0luZm8oKTtcclxuICAgICAgICAgICAgaWYgKHN0clBhcnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGluZm8uc29ydFBhdGggPSBzdHJQYXJ0c1swXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RyUGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgaW5mby5vcmRlciA9IHN0clBhcnRzWzFdID09IFwiYXNjXCIgPyBTb3J0T3JkZXIuQVNDIDogU29ydE9yZGVyLkRFU0M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0clBhcnRzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleDogc3RyaW5nID0gc3RyUGFydHNbMl07XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXguY2hhckF0KDApID09IFwiPVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mby5tYW5kYXRvcnkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXguc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5mby5pbmRleCA9ICtpbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5mbztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWRDb250cm9sbGVyPFQ+IGltcGxlbWVudHMgSUdyaWRMb2FkaW5nTGlzdGVuZXIsIElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIsIElQYWdlU2l6ZUNoYW5nZUxpc3RlbmVyIHtcclxuICAgIHB1YmxpYyBwYXJlbnRTY29wZTtcclxuICAgIHByaXZhdGUgZGlyZWN0aXZlU2NvcGU6IGFuZ3VsYXIuSVNjb3BlO1xyXG4gICAgcHVibGljIGdyaWRNb2RlbDogSUdyaWRNb2RlbDxUPjtcclxuXHJcbiAgICBwcml2YXRlIHRpbWVvdXRVdGlsczogVGltZW91dFV0aWxzO1xyXG4gICAgcHJpdmF0ZSBncmlkQ29udGFpbmVyOiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcbiAgICBwcml2YXRlIHRhYmxlQ29udGFpbmVyOiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcbiAgICBwcml2YXRlIGdyaWRVdWlkOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBoYXNDb25maWd1cmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGhhc0NoYW5nZXNGb3JUZW1wbGF0ZVJlbG9hZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB0YWJsZVRlbXBsYXRlOiBzdHJpbmc7XHJcblxyXG5cclxuICAgIHByaXZhdGUgU09SVEFCTEVfSEVBREVSU19DTEFTU0VTOiBBcnJheTxzdHJpbmc+ID0gW1wic29ydGFibGVcIiwgXCJzb3J0YWJsZS1kZXNjXCIsIFwic29ydGFibGUtYXNjXCIsIFwic29ydGFibGUtMFwiLCBcInNvcnRhYmxlLTFcIiwgXCJzb3J0YWJsZS0yXCIsIFwic29ydGFibGUtM1wiXTtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFCTEVfU0VMRUNUT1IgPSBcInRhYmxlW2RhdGEtdmhzLXRhYmxlXSBcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgU09SVEFCTEVfSEVBREVSU19TRUxFQ1RPUiA9IFwidHIgdGhbZGF0YS1zb3J0YWJsZV1cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFCTEVfSEVBREVSU19TRUxFQ1RPUiA9IFwidGhlYWQgdHIgdGhcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFCTEVfQ0VMTFNfSU5fVEVNUExBVEVfU0VMRUNUT1IgPSBcInRib2R5IHRyW25nLXJlcGVhdF0gdGRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFCTEVfQ0VMTFNfSU5fVEVNUExBVEVfU0VMRUNUT1JfRk9SX1JFUEVBVF9TVEFSVCA9IFwidGJvZHkgdHJbbmctcmVwZWF0LXN0YXJ0XTpub3QoW2RhdGEtY29sdW1ucy1hbHdheXMtdmlzaWJsZV0pIHRkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRBQkxFX0NFTExTX0lOX1RFTVBMQVRFX1NFTEVDVE9SX0ZPUl9SRVBFQVRfRU5EID0gXCJ0Ym9keSB0cltuZy1yZXBlYXQtZW5kXTpub3QoW2RhdGEtY29sdW1ucy1hbHdheXMtdmlzaWJsZV0pIHRkXCI7XHJcbiAgICBwcml2YXRlIFNFQVJDSF9FTEVNRU5UU19TRUxFQ1RPUiA9IFwiW2RhdGEtdmhzLWF1dG8tc2VhcmNoXSBzZWxlY3QsW2RhdGEtdmhzLWF1dG8tc2VhcmNoXSBpbnB1dFwiO1xyXG4gICAgcHJpdmF0ZSBNQVhfU09SVF9JTkRFWCA9IDM7XHJcbiAgICBwdWJsaWMgTUFYX1NIT1dOX1BBR0VTID0gNTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkY29tcGlsZVwiLFxyXG4gICAgICAgIFN0b3JhZ2VzLkxPQ0FMX05BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRjb21waWxlOiBhbmd1bGFyLklDb21waWxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlOiBTdG9yYWdlV3JhcHBlcikge1xyXG4gICAgICAgICRzY29wZS5ncmlkVm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucGFyZW50U2NvcGUgPSAkc2NvcGUuJHBhcmVudDtcclxuICAgICAgICB0aGlzLmRpcmVjdGl2ZVNjb3BlID0gJHNjb3BlO1xyXG4gICAgICAgIHRoaXMudGltZW91dFV0aWxzID0gbmV3IFRpbWVvdXRVdGlscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSwgbW9kZWxQYXRoSW5Db250cm9sbGVyOiBzdHJpbmcsIHV1aWQ6IHN0cmluZywgdGFibGVUZW1wbGF0ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkQ29udGFpbmVyID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyID0gdGhpcy5ncmlkQ29udGFpbmVyLmZpbmQoR3JpZENvbnRyb2xsZXIuVEFCTEVfU0VMRUNUT1IpO1xyXG4gICAgICAgIHRoaXMudGFibGVUZW1wbGF0ZSA9IHRhYmxlVGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5ncmlkVXVpZCA9IHV1aWQgPyB1dWlkIDogXCJncmlkX1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2RlbFBhdGhJbkNvbnRyb2xsZXIgIT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkTW9kZWwgPSBPYmplY3RGaWVsZFJlc29sdmVyLmZpbmRGb3JQYXRoKHRoaXMucGFyZW50U2NvcGUsIG1vZGVsUGF0aEluQ29udHJvbGxlcik7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5ncmlkTW9kZWwuYWRkQ29sdW1uVmlzaWJpbGl0eUxpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmdyaWRNb2RlbC5hZGRQYWdlU2l6ZUxpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbGxlY3RHcmlkQ29sdW1ucygpO1xyXG4gICAgICAgIHRoaXMubG9hZENvbHVtbnNDb25maWd1cmF0aW9uRnJvbVN0b3JhZ2UoKTtcclxuICAgICAgICB0aGlzLmxvYWRGaWx0ZXJGcm9tU3RvcmFnZSgpO1xyXG4gICAgICAgIHRoaXMuYWRkUHJlZGVmaW5lZFNvcnRpbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRBdXRvU2VhcmNoTGlzdGVuZXJzKCk7IC8vY3VycmVudGx5IGxpc3RlbmVycyBvbmx5IG91dHNpZGUgdGFibGVcclxuXHJcbiAgICAgICAgdGhpcy5pbml0RG9tRWxlbWVudHNIYW5kbGVycygpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2Nlc3NUZW1wbGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmdyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXREb21FbGVtZW50c0hhbmRsZXJzKCkge1xyXG4gICAgICAgIHRoaXMuYWRkSGVhZGVyc1NvcnRpbmdIYW5kbGVycygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRJc0NvbmZpZ3VyYWJsZShoYXNDb25maWd1cmF0aW9uOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5oYXNDb25maWd1cmF0aW9uID0gaGFzQ29uZmlndXJhdGlvbjtcclxuICAgICAgICBpZiAoaGFzQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NUZW1wbGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkTW9kZWwubG9hZFdpdGhEZWxheSh0aGlzLnRpbWVvdXRVdGlscywgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFNvcnRpbmcoZmllbGROYW1lOiBzdHJpbmcpOiBTb3J0RW50cnkge1xyXG4gICAgICAgIHZhciBpbmZvID0gdGhpcy5maW5kU29ydEVudHJ5SW5mbyhmaWVsZE5hbWUpO1xyXG4gICAgICAgIHZhciBzb3J0RW50cnk6IFNvcnRFbnRyeSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzb3J0RW50cnkgPSBpbmZvLnNvcnRFbnRyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNvcnRFbnRyeSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNvcnRFbnRyeSA9IFNvcnRFbnRyeS5hc2MoZmllbGROYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5ncmlkTW9kZWwuc29ydGluZy5wdXNoKHNvcnRFbnRyeSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc29ydEVudHJ5LnJldmVyc2VPcmRlcigpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIHJldHVybiBzb3J0RW50cnk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0U29ydGluZyhmaWVsZE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBpbmZvID0gdGhpcy5maW5kU29ydEVudHJ5SW5mbyhmaWVsZE5hbWUpO1xyXG4gICAgICAgIHZhciBmb3VuZEluZGV4OiBudW1iZXIgPSAtMTtcclxuICAgICAgICBpZiAoaW5mbyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZvdW5kSW5kZXggPSBpbmZvLmluZGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm91bmRJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZE1vZGVsLnNvcnRpbmcuc3BsaWNlKGZvdW5kSW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29Ub1BhZ2UocGFnZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZE1vZGVsLnRvdGFsUGFnZUNvdW50IDwgMTApIHtcclxuICAgICAgICAgICAgcGFnZU51bWJlcj1wYWdlTnVtYmVyJTEwO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFnZU51bWJlciA9PSAtMSkge1xyXG4gICAgICAgICAgICBwYWdlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocGFnZU51bWJlciA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vZG8gbm90aGluZ1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkTW9kZWwuY3VycmVudFBhZ2UgIT0gcGFnZU51bWJlciAmJiBwYWdlTnVtYmVyID49IDAgJiYgcGFnZU51bWJlciA8IHRoaXMuZ3JpZE1vZGVsLnRvdGFsUGFnZUNvdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZE1vZGVsLmxvYWRQYWdlKHBhZ2VOdW1iZXIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFnZU51bWJlciA8IDAgfHwgcGFnZU51bWJlciA+IHRoaXMuZ3JpZE1vZGVsLnRvdGFsUGFnZUNvdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZE1vZGVsLmxvYWRQYWdlKHRoaXMuZ3JpZE1vZGVsLmN1cnJlbnRQYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdyaWRNb2RlbC5sb2FkUGFnZSh0aGlzLmdyaWRNb2RlbC5jdXJyZW50UGFnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYWdlc0ZvclBhZ2luYXRpb24oKTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRQYWdlOiBudW1iZXIgPSB0aGlzLmdyaWRNb2RlbC5jdXJyZW50UGFnZTtcclxuICAgICAgICB2YXIgdG90YWxQYWdlczogbnVtYmVyID0gdGhpcy5ncmlkTW9kZWwudG90YWxQYWdlQ291bnQ7XHJcbiAgICAgICAgdmFyIHBhZ2VzOiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IGN1cnJlbnRQYWdlOyBpID49IDAgJiYgKGN1cnJlbnRQYWdlIC0gaSkgPCB0aGlzLk1BWF9TSE9XTl9QQUdFUzsgaS0tKSB7XHJcbiAgICAgICAgICAgIHBhZ2VzLnB1c2goaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhZ2VzID0gcGFnZXMucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSBjdXJyZW50UGFnZSArIDE7IGkgPCB0b3RhbFBhZ2VzICYmIChpIC0gY3VycmVudFBhZ2UpIDwgdGhpcy5NQVhfU0hPV05fUEFHRVM7IGkrKykge1xyXG4gICAgICAgICAgICBwYWdlcy5wdXNoKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFnZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0TG9hZGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkTW9kZWwuc2hvd1NwaW5uZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkQ29udGFpbmVyLmFkZENsYXNzKFwibG9hZGluZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuZExvYWRpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZE1vZGVsLnNob3dTcGlubmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZENvbnRhaW5lci5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UoY29sdW1uOiBHcmlkQ29sdW1uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29uZmlndXJhdGlvbiAmJiBjb2x1bW4gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmhhc0NoYW5nZXNGb3JUZW1wbGF0ZVJlbG9hZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1RlbXBsYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cENvbHVtblBvc2l0aW9uKGNvbHVtbjogR3JpZENvbHVtbikge1xyXG4gICAgICAgIGlmIChjb2x1bW4gJiYgdGhpcy5oYXNDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4ucG9zaXRpb24gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvVXBkYXRlQ29sdW1uUG9zaXRpb24oY29sdW1uLCBjb2x1bW4ucG9zaXRpb24gLSAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bkNvbHVtblBvc2l0aW9uKGNvbHVtbjogR3JpZENvbHVtbikge1xyXG4gICAgICAgIGlmIChjb2x1bW4gJiYgdGhpcy5oYXNDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4ucG9zaXRpb24gPCB0aGlzLmdyaWRNb2RlbC5ncmlkQ29sdW1ucy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvVXBkYXRlQ29sdW1uUG9zaXRpb24oY29sdW1uLCBjb2x1bW4ucG9zaXRpb24gKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRvVXBkYXRlQ29sdW1uUG9zaXRpb24oY29sdW1uOiBHcmlkQ29sdW1uLCBuZXdQb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRDb2x1bW5JblBvc2l0aW9uID0gdGhpcy5maW5kQ29sdW1uQnlQb3NpdGlvbihuZXdQb3NpdGlvbik7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW5JblBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRDb2x1bW5JblBvc2l0aW9uLnBvc2l0aW9uID0gY29sdW1uLnBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb2x1bW4ucG9zaXRpb24gPSBuZXdQb3NpdGlvbjtcclxuXHJcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzRm9yVGVtcGxhdGVSZWxvYWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1RlbXBsYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5kQ29sdW1uQnlQb3NpdGlvbih0YXJnZXRQb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyaWRNb2RlbC5ncmlkQ29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uOiBHcmlkQ29sdW1uID0gdGhpcy5ncmlkTW9kZWwuZ3JpZENvbHVtbnNbaV07XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4ucG9zaXRpb24gPT0gdGFyZ2V0UG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5kQ29sdW1uQnlJbmRleChjb2x1bW5JbmRleDogbnVtYmVyKTogR3JpZENvbHVtbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZE1vZGVsLmdyaWRDb2x1bW5zW2NvbHVtbkluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpeENvbHVtblBvc2l0aW9ucygpIHtcclxuICAgICAgICB2YXIgb3JkZXJlZENvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyaWRNb2RlbC5ncmlkQ29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBvcmRlcmVkQ29sdW1ucy5wdXNoKHRoaXMuZ3JpZE1vZGVsLmdyaWRDb2x1bW5zW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3JkZXJlZENvbHVtbnMuc29ydCgobzEsIG8yKSA9PiB7XHJcbiAgICAgICAgICAgIC8vZml4ZWQgY29sdW1ucyB0byB0aGUgZW5kIG9mIGxpc3RcclxuICAgICAgICAgICAgaWYgKG8xLmZpeGVkQ29sdW1uICYmIG8yLmZpeGVkQ29sdW1uKSByZXR1cm4gMDtcclxuICAgICAgICAgICAgaWYgKG8xLmZpeGVkQ29sdW1uICYmICFvMi5maXhlZENvbHVtbikgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGlmICghbzEuZml4ZWRDb2x1bW4gJiYgbzIuZml4ZWRDb2x1bW4pIHJldHVybiAtMTtcclxuICAgICAgICAgICAgLy9jb2x1bW5zIHdpdGhvdXQgcG9zaXRpb25zIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgKGJlZm9yZSBmaXhlZCBjb2x1bW5zKVxyXG4gICAgICAgICAgICBpZiAoIW8xLnBvc2l0aW9uICYmICFvMi5wb3NpdGlvbikgcmV0dXJuIG8xLmluZGV4ID4gbzIuaW5kZXggPyAxIDogLTE7XHJcbiAgICAgICAgICAgIGlmIChvMS5wb3NpdGlvbiAmJiAhbzIucG9zaXRpb24pIHJldHVybiAxO1xyXG4gICAgICAgICAgICBpZiAoIW8xLnBvc2l0aW9uICYmIG8yLnBvc2l0aW9uKSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIC8vY29sdW1ucyB3aXRoIHNhbWUgcG9zaXRpb24gc2hvdWxkIGJlIGNvbXBhcmVkIGJ5IGluZGV4XHJcbiAgICAgICAgICAgIGlmIChvMS5wb3NpdGlvbiA9PSBvMi5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG8xLmluZGV4ID4gbzIuaW5kZXggPyAxIDogLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG8xLnBvc2l0aW9uID4gbzIucG9zaXRpb24gPyAxIDogLTE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlcmVkQ29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAob3JkZXJlZENvbHVtbnNbaV0ucG9zaXRpb24gIT0gaSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VzRm9yVGVtcGxhdGVSZWxvYWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9yZGVyZWRDb2x1bW5zW2ldLnBvc2l0aW9uID0gaTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2hhbmdlUGFnZVNpemUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmdyaWRNb2RlbC5wYWdlU2l6ZSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChpc05hTih0aGlzLmdyaWRNb2RlbC5wYWdlU2l6ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkTW9kZWwucGFnZVNpemUgPSBHcmlkTW9kZWwuREVGQVVMVF9QQUdFX1NJWkU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdyaWRNb2RlbC5wYWdlU2l6ZSA+IEdyaWRNb2RlbC5NQVhfVVNFUl9QQUdFX1NJWkUpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkTW9kZWwucGFnZVNpemUgPSBHcmlkTW9kZWwuTUFYX1VTRVJfUEFHRV9TSVpFO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdyaWRNb2RlbC5wYWdlU2l6ZSA9IE1hdGgucm91bmQodGhpcy5ncmlkTW9kZWwucGFnZVNpemUpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRDb2x1bW5zQ29uZmlndXJhdGlvbkZyb21TdG9yYWdlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRNb2RlbCkge1xyXG4gICAgICAgICAgICB2YXIgcGVyc2lzdGVkTW9kZWwgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXQ8UGVyc2lzdGVkR3JpZE1vZGVsQ29uZmlndXJhdGlvbj4odGhpcy5ncmlkVXVpZCk7XHJcbiAgICAgICAgICAgIGlmIChwZXJzaXN0ZWRNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkTW9kZWwucGFnZVNpemUgPSBwZXJzaXN0ZWRNb2RlbC5wYWdlU2l6ZTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ncmlkTW9kZWwucGFnZVNpemUgfHwgaXNOYU4odGhpcy5ncmlkTW9kZWwucGFnZVNpemUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkTW9kZWwucGFnZVNpemUgPSBHcmlkTW9kZWwuREVGQVVMVF9QQUdFX1NJWkU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE1vZGVsLnBhZ2VTaXplID0gTWF0aC5yb3VuZCh0aGlzLmdyaWRNb2RlbC5wYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JpZE1vZGVsLmdyaWRDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbjogR3JpZENvbHVtbiA9IHRoaXMuZ3JpZE1vZGVsLmdyaWRDb2x1bW5zW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGVyc2lzdGVkTW9kZWwuZ3JpZENvbHVtbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlcnNpc3RlZENvbHVtbjogR3JpZENvbHVtbiA9IHBlcnNpc3RlZE1vZGVsLmdyaWRDb2x1bW5zW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyc2lzdGVkQ29sdW1uLmluZGV4ID09IGNvbHVtbi5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi52aXNpYmxlICE9IHBlcnNpc3RlZENvbHVtbi52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VzRm9yVGVtcGxhdGVSZWxvYWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi52aXNpYmxlID0gcGVyc2lzdGVkQ29sdW1uLnZpc2libGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyc2lzdGVkQ29sdW1uLnBvc2l0aW9uICE9IHVuZGVmaW5lZCAmJiBwZXJzaXN0ZWRDb2x1bW4ucG9zaXRpb24gIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvbHVtbi5wb3NpdGlvbiAhPSBwZXJzaXN0ZWRDb2x1bW4ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZXNGb3JUZW1wbGF0ZVJlbG9hZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLnBvc2l0aW9uID0gcGVyc2lzdGVkQ29sdW1uLnBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpeENvbHVtblBvc2l0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkTW9kZWwucmVjYWxjdWxhdGVWaXNpYmxlQ29sdW1uc0NvdW50KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkRmlsdGVyRnJvbVN0b3JhZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZE1vZGVsKSB7XHJcbiAgICAgICAgICAgIHZhciBwZXJzaXN0ZWRNb2RlbCA9IHRoaXMubG9jYWxTdG9yYWdlLmdldDxQZXJzaXN0ZWRHcmlkTW9kZWxDb25maWd1cmF0aW9uPih0aGlzLmdyaWRVdWlkKTtcclxuICAgICAgICAgICAgaWYgKHBlcnNpc3RlZE1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBmaWVsZE5hbWUgaW4gcGVyc2lzdGVkTW9kZWwuZmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlcnNpc3RlZE1vZGVsLmZpbHRlci5oYXNPd25Qcm9wZXJ0eShmaWVsZE5hbWUpICYmIHRoaXMuZ3JpZE1vZGVsLm5vblBlcnNpc3RlZEZpbHRlckZpZWxkcy5pbmRleE9mKGZpZWxkTmFtZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE1vZGVsLmZpbHRlcltmaWVsZE5hbWVdID0gYW5ndWxhci5jb3B5KHBlcnNpc3RlZE1vZGVsLmZpbHRlcltmaWVsZE5hbWVdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVHcmlkQ29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5wdXQodGhpcy5ncmlkVXVpZCwgUGVyc2lzdGVkR3JpZE1vZGVsQ29uZmlndXJhdGlvbi5mcm9tR3JpZE1vZGVsKHRoaXMuZ3JpZE1vZGVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5kU29ydEVudHJ5SW5mbyhmaWVsZE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmlkTW9kZWwuc29ydGluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc29ydEVudHJ5ID0gdGhpcy5ncmlkTW9kZWwuc29ydGluZ1tpXTtcclxuICAgICAgICAgICAgaWYgKHNvcnRFbnRyeS5maWVsZE5hbWUgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtzb3J0RW50cnk6IHNvcnRFbnRyeSwgaW5kZXg6IGl9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0SGVhZGVyQ2xhc3ModGFyZ2V0Q2xhc3NlczogQXJyYXk8c3RyaW5nPiwgZWxlbWVudDogSlF1ZXJ5KSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLlNPUlRBQkxFX0hFQURFUlNfQ0xBU1NFUy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZWxDbGFzcyA9IHRoaXMuU09SVEFCTEVfSEVBREVSU19DTEFTU0VTW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0Q2xhc3Nlcy5pbmRleE9mKGVsQ2xhc3MpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmFkZENsYXNzKGVsQ2xhc3MpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcyhlbENsYXNzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUhlYWRlckNsYXNzZXMoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudGFibGVDb250YWluZXIuZmluZChHcmlkQ29udHJvbGxlci5TT1JUQUJMRV9IRUFERVJTX1NFTEVDVE9SKS5lYWNoKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoaW5kZXg6IGFueSwgZWw6IEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBqUXVlcnlFbGVtZW50OiBKUXVlcnkgPSAkKGVsKTtcclxuICAgICAgICAgICAgICAgIHZhciBzb3J0U3RyaW5nID0gRWxlbWVudFNvcnRpbmdJbmZvLmZyb21TdHJpbmcoalF1ZXJ5RWxlbWVudC5hdHRyKCdkYXRhLXNvcnRhYmxlJykpLnNvcnRQYXRoO1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZm8gPSBzZWxmLmZpbmRTb3J0RW50cnlJbmZvKHNvcnRTdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldENsYXNzZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmZvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5pbmRleCA8IHNlbGYuTUFYX1NPUlRfSU5ERVgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2xhc3Nlcy5wdXNoKFwic29ydGFibGUtXCIgKyBpbmZvLmluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2xhc3Nlcy5wdXNoKGluZm8uc29ydEVudHJ5LnNvcnRPcmRlciA9PSBTb3J0T3JkZXIuQVNDID8gXCJzb3J0YWJsZS1hc2NcIiA6IFwic29ydGFibGUtZGVzY1wiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2xhc3Nlcy5wdXNoKFwic29ydGFibGVcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNldEhlYWRlckNsYXNzKHRhcmdldENsYXNzZXMsIGpRdWVyeUVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbGxlY3RHcmlkQ29sdW1ucygpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lci5maW5kKEdyaWRDb250cm9sbGVyLlRBQkxFX0hFQURFUlNfU0VMRUNUT1IpLmVhY2goXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChpbmRleDogbnVtYmVyLCB0aDogRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsID0gJCh0aCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gbmV3IEdyaWRDb2x1bW4oKTtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLnBvc2l0aW9uID0gaW5kZXg7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sdW1uRXhjbHVkZWQgPSBlbC5hdHRyKFwiZGF0YS1jb2x1bW4tYWx3YXlzLXZpc2libGVcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgZml4ZWRDb2x1bW4gPSBlbC5hdHRyKFwiZGF0YS1jb2x1bW4tZml4ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uRXhjbHVkZWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmFsd2F5c1Zpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZpeGVkQ29sdW1uICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5maXhlZENvbHVtbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sdW1uTmFtZSA9IGVsLmF0dHIoXCJkYXRhLWNvbHVtbi1uYW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4udGl0bGUgPSBjb2x1bW5OYW1lXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi50aXRsZSA9IGVsLnRleHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGYuZ3JpZE1vZGVsLmdyaWRDb2x1bW5zLnB1c2goY29sdW1uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5ncmlkTW9kZWwucmVjYWxjdWxhdGVWaXNpYmxlQ29sdW1uc0NvdW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRIZWFkZXJzU29ydGluZ0hhbmRsZXJzKCkge1xyXG4gICAgICAgIHRoaXMudGFibGVDb250YWluZXIuZmluZChHcmlkQ29udHJvbGxlci5TT1JUQUJMRV9IRUFERVJTX1NFTEVDVE9SKS5lYWNoKChpbmRleDogYW55LCB0aDogRWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWwgPSAkKHRoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRpbmdJbmZvID0gRWxlbWVudFNvcnRpbmdJbmZvLmZyb21TdHJpbmcoZWwuYXR0cihcImRhdGEtc29ydGFibGVcIikpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydFN0cmluZyA9IHNvcnRpbmdJbmZvLnNvcnRQYXRoO1xyXG4gICAgICAgICAgICAgICAgLy8gY2hhbmdlIHNvcnRpbmdcclxuICAgICAgICAgICAgICAgIGVsLmNsaWNrKChldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTb3J0aW5nV2l0aG91dExvYWRDdXJyZW50UGFnZShzb3J0U3RyaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRFbnRyeTogU29ydEVudHJ5ID0gdGhpcy5hZGRTb3J0aW5nKHNvcnRTdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRJbmRleCA9IHRoaXMuZ3JpZE1vZGVsLnNvcnRpbmcuaW5kZXhPZihzb3J0RW50cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENsYXNzZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvcnRJbmRleCA8IHRoaXMuTUFYX1NPUlRfSU5ERVgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2xhc3Nlcy5wdXNoKFwic29ydGFibGUtXCIgKyBzb3J0SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRDbGFzc2VzLnB1c2goc29ydEVudHJ5LnNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkFTQyA/IFwic29ydGFibGUtYXNjXCIgOiBcInNvcnRhYmxlLWRlc2NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRIZWFkZXJDbGFzcyh0YXJnZXRDbGFzc2VzLCBlbCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vIHJlc2V0IHNvcnRpbmdcclxuICAgICAgICAgICAgICAgIGlmICghc29ydGluZ0luZm8ubWFuZGF0b3J5KSB7IC8vIHJlc2V0IHNvcnRpbmcgb25seSBpZiBpdCBpcyBub3QgbWFuZGF0b3J5XHJcbiAgICAgICAgICAgICAgICAgICAgZWwuZGJsY2xpY2soKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U29ydGluZyhzb3J0U3RyaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzZXRTb3J0aW5nV2l0aG91dExvYWRDdXJyZW50UGFnZShzb3J0U3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZE1vZGVsLnNvcnRpbmcubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE1vZGVsLnNvcnRpbmdbMF0uZmllbGROYW1lICE9IHNvcnRTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzb3J0aW5nID0gdGhpcy5ncmlkTW9kZWwuc29ydGluZztcclxuICAgICAgICAgICAgICAgIHNvcnRpbmcuc3BsaWNlKDAsIHNvcnRpbmcubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZFByZWRlZmluZWRTb3J0aW5nKCkge1xyXG4gICAgICAgIHZhciBwcmVkZWZpbmVkU29ydGluZzogQXJyYXk8RWxlbWVudFNvcnRpbmdJbmZvPiA9IFtdO1xyXG4gICAgICAgIHZhciBzb3J0RmllbGRzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lci5maW5kKEdyaWRDb250cm9sbGVyLlNPUlRBQkxFX0hFQURFUlNfU0VMRUNUT1IpLmVhY2goXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChpbmRleDogYW55LCB0aDogRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsID0gJCh0aCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc29ydGluZ0luZm8gPSBFbGVtZW50U29ydGluZ0luZm8uZnJvbVN0cmluZyhlbC5hdHRyKCdkYXRhLXNvcnRhYmxlJykpO1xyXG4gICAgICAgICAgICAgICAgc29ydEZpZWxkcy5wdXNoKHNvcnRpbmdJbmZvLnNvcnRQYXRoKTtcclxuICAgICAgICAgICAgICAgIGlmIChzb3J0aW5nSW5mby5vcmRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZGVmaW5lZFNvcnRpbmcucHVzaChzb3J0aW5nSW5mbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBwcmVkZWZpbmVkU29ydGluZy5zb3J0KChvMTogRWxlbWVudFNvcnRpbmdJbmZvLCBvMjogRWxlbWVudFNvcnRpbmdJbmZvKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvMS5pbmRleCA9PSBudWxsICYmIG8yLmluZGV4ID09IG51bGwpIHJldHVybiAwO1xyXG4gICAgICAgICAgICBpZiAobzEuaW5kZXggIT0gbnVsbCAmJiBvMi5pbmRleCA9PSBudWxsKSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIGlmIChvMS5pbmRleCA9PSBudWxsICYmIG8yLmluZGV4ICE9IG51bGwpIHJldHVybiAxO1xyXG4gICAgICAgICAgICBpZiAobzEuaW5kZXggPiBvMi5pbmRleCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGlmIChvMS5pbmRleCA8IG8yLmluZGV4KSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgcGVyc2lzdGVkU29ydGluZzogQXJyYXk8U29ydEVudHJ5PiA9IFtdO1xyXG4gICAgICAgIHZhciBwZXJzaXN0ZWRNb2RlbCA9IHRoaXMubG9jYWxTdG9yYWdlLmdldDxQZXJzaXN0ZWRHcmlkTW9kZWxDb25maWd1cmF0aW9uPih0aGlzLmdyaWRVdWlkKTtcclxuICAgICAgICBpZiAocGVyc2lzdGVkTW9kZWwgJiYgcGVyc2lzdGVkTW9kZWwuc29ydEVudHJpZXMpIHtcclxuICAgICAgICAgICAgLy9maWx0ZXIgcGVyc2lzdGVkIGNvbHVtbnMgYnkgZXhpc3RlbmNlIGluIG5ldyB0YWJsZSBkZWZpbml0aW9uXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGVyc2lzdGVkTW9kZWwuc29ydEVudHJpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChzb3J0RmllbGRzLmluZGV4T2YocGVyc2lzdGVkTW9kZWwuc29ydEVudHJpZXNbaV0uZmllbGROYW1lKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyc2lzdGVkU29ydGluZy5wdXNoKHBlcnNpc3RlZE1vZGVsLnNvcnRFbnRyaWVzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3JlbW92ZSBub24tbWFuZGF0b3J5IGNvbHVtbnMgZnJvbSBjdXJyZW50IGRlZmluaXRpb24gYW5kIG1hbmRhdG9yeSBmcm9tIHBlcnNpc3RlZFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gcHJlZGVmaW5lZFNvcnRpbmcubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmVkZWZpbmVkU29ydGluZ0luZm8gPSBwcmVkZWZpbmVkU29ydGluZ1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmVkZWZpbmVkU29ydGluZ0luZm8ubWFuZGF0b3J5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcnNpc3RlZEluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwZXJzaXN0ZWRTb3J0aW5nLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJzaXN0ZWRTb3J0aW5nW2pdLmZpZWxkTmFtZSA9PSBwcmVkZWZpbmVkU29ydGluZ0luZm8uc29ydFBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNpc3RlZEluZGV4ID0gajtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZXJzaXN0ZWRJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWRlZmluZWRTb3J0aW5nW2ldLm9yZGVyID0gcGVyc2lzdGVkU29ydGluZ1twZXJzaXN0ZWRJbmRleF0uc29ydE9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJzaXN0ZWRTb3J0aW5nLnNwbGljZShwZXJzaXN0ZWRJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVkZWZpbmVkU29ydGluZy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9hZGQgcGVyc2lzdGVkIGNvbHVtbnMgdG8gZGVmYXVsdCBzb3J0aW5nXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGVyc2lzdGVkU29ydGluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNvcnRpbmdJbmZvID0gbmV3IEVsZW1lbnRTb3J0aW5nSW5mbygpO1xyXG4gICAgICAgICAgICAgICAgc29ydGluZ0luZm8ub3JkZXIgPSBwZXJzaXN0ZWRTb3J0aW5nW2ldLnNvcnRPcmRlcjtcclxuICAgICAgICAgICAgICAgIHNvcnRpbmdJbmZvLnNvcnRQYXRoID0gcGVyc2lzdGVkU29ydGluZ1tpXS5maWVsZE5hbWU7XHJcbiAgICAgICAgICAgICAgICBwcmVkZWZpbmVkU29ydGluZy5wdXNoKHNvcnRpbmdJbmZvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVkZWZpbmVkU29ydGluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc29ydGluZzogRWxlbWVudFNvcnRpbmdJbmZvID0gcHJlZGVmaW5lZFNvcnRpbmdbaV07XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUHJlZGVmaW5lZFNvcnRpbmdUb01vZGVsKHNvcnRpbmcuc29ydFBhdGgsIHNvcnRpbmcub3JkZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZFByZWRlZmluZWRTb3J0aW5nVG9Nb2RlbChmaWVsZE5hbWU6IHN0cmluZywgc29ydE9yZGVyOiBTb3J0T3JkZXIpIHtcclxuICAgICAgICB2YXIgc29ydEVudHJ5ID0gbmV3IFNvcnRFbnRyeShmaWVsZE5hbWUsIHNvcnRPcmRlcik7XHJcbiAgICAgICAgaWYgKHRoaXMuZmluZFNvcnRFbnRyeUluZm8oZmllbGROYW1lKSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZE1vZGVsLnNvcnRpbmcucHVzaChzb3J0RW50cnkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZEF1dG9TZWFyY2hMaXN0ZW5lcnMoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuZ3JpZENvbnRhaW5lci5maW5kKHRoaXMuU0VBUkNIX0VMRU1FTlRTX1NFTEVDVE9SKS5lYWNoKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoaW5kZXg6IGFueSwgZWw6IEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbnB1dEVsZW1lbnQ6IEpRdWVyeSA9ICQoZWwpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbiAoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXRFbGVtZW50LnByb3AoXCJ0eXBlXCIpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdjaGVja2JveCc6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmFkaW8nOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQuY2xpY2soZnVuYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQua2V5dXAoZnVuYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudC5jaGFuZ2UoZnVuYyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc1RlbXBsYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXNGb3JUZW1wbGF0ZVJlbG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyLmh0bWwodGhpcy50YWJsZVRlbXBsYXRlKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjZWxsc1Bvc2l0aW9uc01hcDogTWFwPG51bWJlciwgbnVtYmVyPiA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmlkTW9kZWwuZ3JpZENvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2x1bW46IEdyaWRDb2x1bW4gPSB0aGlzLmdyaWRNb2RlbC5ncmlkQ29sdW1uc1tpXTtcclxuICAgICAgICAgICAgICAgIGNlbGxzUG9zaXRpb25zTWFwLnNldChjb2x1bW4ucG9zaXRpb24sIGNvbHVtbi5pbmRleCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1RhYmxlQ2VsbHNJblRlbXBsYXRlKHRoaXMudGFibGVDb250YWluZXIuZmluZChHcmlkQ29udHJvbGxlci5UQUJMRV9IRUFERVJTX1NFTEVDVE9SKSwgY2VsbHNQb3NpdGlvbnNNYXApO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NUYWJsZUNlbGxzSW5UZW1wbGF0ZSh0aGlzLnRhYmxlQ29udGFpbmVyLmZpbmQoR3JpZENvbnRyb2xsZXIuVEFCTEVfQ0VMTFNfSU5fVEVNUExBVEVfU0VMRUNUT1IpLCBjZWxsc1Bvc2l0aW9uc01hcCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1RhYmxlQ2VsbHNJblRlbXBsYXRlKHRoaXMudGFibGVDb250YWluZXIuZmluZChHcmlkQ29udHJvbGxlci5UQUJMRV9DRUxMU19JTl9URU1QTEFURV9TRUxFQ1RPUl9GT1JfUkVQRUFUX1NUQVJUKSwgY2VsbHNQb3NpdGlvbnNNYXApO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NUYWJsZUNlbGxzSW5UZW1wbGF0ZSh0aGlzLnRhYmxlQ29udGFpbmVyLmZpbmQoR3JpZENvbnRyb2xsZXIuVEFCTEVfQ0VMTFNfSU5fVEVNUExBVEVfU0VMRUNUT1JfRk9SX1JFUEVBVF9FTkQpLCBjZWxsc1Bvc2l0aW9uc01hcCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLiRjb21waWxlKHRoaXMudGFibGVDb250YWluZXIuY29udGVudHMoKSkodGhpcy5kaXJlY3RpdmVTY29wZSk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlc0ZvclRlbXBsYXRlUmVsb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdERvbUVsZW1lbnRzSGFuZGxlcnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzVGFibGVDZWxsc0luVGVtcGxhdGUoY2VsbHM6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSwgcG9zaXRpb25zTWFwOiBNYXA8bnVtYmVyLCBudW1iZXI+KSB7XHJcbiAgICAgICAgdmFyIGhpZGVDb2x1bW5GdW5jID0gKGluZGV4OiBudW1iZXIsIHRkOiBFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBjb2x1bW46IEdyaWRDb2x1bW4gPSB0aGlzLmZpbmRDb2x1bW5CeUluZGV4KGluZGV4KTtcclxuICAgICAgICAgICAgaWYgKCFjb2x1bW4uZml4ZWRDb2x1bW4gJiYgIWNvbHVtbi52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRkKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIGNlbGxzUG9zaXRpb25zOiBNYXA8bnVtYmVyLCBKUXVlcnk+ID0gbmV3IE1hcDxudW1iZXIsIEpRdWVyeT4oKTtcclxuICAgICAgICBmb3IgKHZhciBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgdGhpcy5ncmlkTW9kZWwuZ3JpZENvbHVtbnMubGVuZ3RoOyBwb3NpdGlvbisrKSB7XHJcbiAgICAgICAgICAgIHZhciBwb3NpdGlvbkluZGV4OiBudW1iZXIgPSBwb3NpdGlvbnNNYXAuZ2V0KHBvc2l0aW9uKTtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uSW5kZXggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGxJblBvc2l0aW9uOiBKUXVlcnkgPSBjZWxscy5lcShwb3NpdGlvbkluZGV4KTtcclxuICAgICAgICAgICAgICAgIGNlbGxzUG9zaXRpb25zLnNldChwb3NpdGlvbiwgY2VsbEluUG9zaXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCB0aGlzLmdyaWRNb2RlbC5ncmlkQ29sdW1ucy5sZW5ndGg7IHBvc2l0aW9uKyspIHtcclxuICAgICAgICAgICAgdmFyIGNlbGxJblBvc2l0aW9uOiBKUXVlcnkgPSBjZWxsc1Bvc2l0aW9ucy5nZXQocG9zaXRpb24pO1xyXG4gICAgICAgICAgICB2YXIgcHJldmlvdXNDZWxsOiBKUXVlcnkgPSBwb3NpdGlvbiA+IDAgPyBjZWxsc1Bvc2l0aW9ucy5nZXQocG9zaXRpb24gLSAxKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0NlbGwpIHtcclxuICAgICAgICAgICAgICAgICQoY2VsbEluUG9zaXRpb24pLmluc2VydEFmdGVyKCQocHJldmlvdXNDZWxsKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2VsbHMuZWFjaChoaWRlQ29sdW1uRnVuYyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBHcmlkRGlyZWN0aXZlRmFjdG9yeSgpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgdmFyIHRhYmxlVGVtcGxhdGU7XHJcblxyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IEdyaWRBdHRyaWJ1dGVzLCBjb250cm9sbGVyOiBHcmlkQ29udHJvbGxlcjxhbnk+LFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2NsdWRlOiBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb24pIHtcclxuICAgICAgICBlbGVtZW50LmFkZENsYXNzKFwiZ3JpZC1jb250YWluZXJcIik7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KGVsZW1lbnQsIGF0dHJpYnV0ZXMuZ3JpZE1vZGVsUGF0aCwgYXR0cmlidXRlcy52aHNHcmlkVXVpZCwgdGFibGVUZW1wbGF0ZSk7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMudmhzSGFzQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgICAgICBjb250cm9sbGVyLnNldElzQ29uZmlndXJhYmxlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGlyZWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLmNvbXBpbGUgPSBmdW5jdGlvbiBjb21waWxlKGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogYW5ndWxhci5JVHJhbnNjbHVkZUZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdGFibGVUZW1wbGF0ZSA9ICQoZWxlbWVudCkuZmluZChHcmlkQ29udHJvbGxlci5UQUJMRV9TRUxFQ1RPUikuaHRtbCgpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByZTogbnVsbCxcclxuICAgICAgICAgICAgcG9zdDogbGlua1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBHcmlkQ29udHJvbGxlcjtcclxuICAgIGRpcmVjdGl2ZS5zY29wZSA9IHRydWU7XHJcbiAgICBkaXJlY3RpdmUudHJ1bnNjbHVkZSA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufSIsImltcG9ydCB7R3JpZENvbnRyb2xsZXJ9IGZyb20gXCIuL0dyaWREaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5pbnRlcmZhY2UgR3JpZEVtcHR5QXR0cmlidXRlcyBleHRlbmRzIGFuZ3VsYXIuSUF0dHJpYnV0ZXMge1xyXG4gICAgdmhzRW1wdHlNZXNzYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBHcmlkRW1wdHlEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcblxyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IEdyaWRFbXB0eUF0dHJpYnV0ZXMsIGNvbnRyb2xsZXI6IEdyaWRDb250cm9sbGVyPGFueT4sXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG4gICAgICAgICRzY29wZVtcIl9lbXB0eU1lc3NhZ2VcIl0gPSBhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMudmhzRW1wdHlNZXNzYWdlIFxyXG4gICAgICAgICAgICA/IGF0dHJpYnV0ZXMudmhzRW1wdHlNZXNzYWdlIFxyXG4gICAgICAgICAgICA6ICdObyByZWNvcmRzIGZvdW5kJztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGlyZWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLnJlcGxhY2UgPSB0cnVlO1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9ncmlkLWVtcHR5Lmh0bWxcIik7XHJcbiAgICBkaXJlY3RpdmUucmVxdWlyZSA9IFwiXj92aHNHcmlkXCI7IC8vdG9kbzogdGVtcCBzb2x1dGlvbiwgc2hvdWxkIGJlIG1hbmRhdG9yeS4gQ3VycmVudGx5IHRoZXJlIGlzIGFuIGVycm9yIGR1cmluZyB0ZW1wbGF0ZSByZXByb2Nlc3NpbmcgZm9yIGdyaWRcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcbkdyaWRFbXB0eURpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge09iamVjdEZpZWxkUmVzb2x2ZXJ9IGZyb20gXCIuLy4uL3V0aWxzL09iamVjdEZpZWxkUmVzb2x2ZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5pbnRlcmZhY2UgR3JpZEV4dGVybmFsQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXMgZXh0ZW5kcyBhbmd1bGFyLklBdHRyaWJ1dGVzIHtcclxuICAgIGdyaWRNb2RlbFBhdGg6IHN0cmluZztcclxuICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gR3JpZEV4dGVybmFsQ29uZmlndXJhdGlvbkZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuXHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogYW5ndWxhci5JU2NvcGUsIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogR3JpZEV4dGVybmFsQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXMsIGNvbnRyb2xsZXI6IGFueSxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogYW5ndWxhci5JVHJhbnNjbHVkZUZ1bmN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmdyaWRNb2RlbFBhdGggIT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IE9iamVjdEZpZWxkUmVzb2x2ZXIuZmluZEZvclBhdGgoJHNjb3BlLCBhdHRyaWJ1dGVzLmdyaWRNb2RlbFBhdGgpO1xyXG4gICAgICAgICAgICAkc2NvcGVbXCJncmlkVm1cIl0gPSB7Z3JpZE1vZGVsOiBvYmp9O1xyXG4gICAgICAgICAgICAkc2NvcGVbXCJfc2hvd1BhZ2VTaXplU2VsZWN0b3JcIl0gPSAhYXR0cmlidXRlcy5oaWRlUGFnZVNpemVTZWxlY3RvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRpcmVjdGl2ZTogYW55ID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvZ3JpZC1jb25maWd1cmF0aW9uLmh0bWxcIik7XHJcbiAgICBkaXJlY3RpdmUubGluayA9IGxpbms7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5HcmlkRXh0ZXJuYWxDb25maWd1cmF0aW9uRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEdyaWRQYWdpbmF0aW9uRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgdmFyIGRpcmVjdGl2ZTogYW55ID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvZ3JpZC1wYWdpbmF0aW9uLmh0bWxcIik7XHJcbiAgICBkaXJlY3RpdmUucmVxdWlyZSA9IFwiXnZoc0dyaWRcIjtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcbkdyaWRQYWdpbmF0aW9uRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIlxyXG5cclxuaW1wb3J0IHtJQnVuZGxlRmlsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVGaWxlXCI7XHJcbmltcG9ydCB7QnVuZGxlRmlsZVR5cGVFbnVtfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvQnVuZGxlRmlsZVR5cGVcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc0xvYWRCdW5kbGVEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGJ1bmRsZUZpbGU/OiBJQnVuZGxlRmlsZTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0xvYWRCdW5kbGVGaWxlQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIGJ1bmRsZUZpbGU6IElCdW5kbGVGaWxlO1xyXG5cclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc0xvYWRCdW5kbGVEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzTG9hZEJ1bmRsZURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLmJ1bmRsZUZpbGUgPSAkc2NvcGUuYnVuZGxlRmlsZTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9jZXNzQnVuZGxlRmlsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcm9jZXNzQnVuZGxlRmlsZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYnVuZGxlRmlsZSB8fCAhdGhpcy5idW5kbGVGaWxlLnVybCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJ1bmRsZUZpbGUudHlwZSA9PSBCdW5kbGVGaWxlVHlwZUVudW1bQnVuZGxlRmlsZVR5cGVFbnVtLkpTXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy5idW5kbGVGaWxlLnVybCwgdGhpcy5nZXRIdHRwQ29uZmlnKCkpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoY29udGVudDogc3RyaW5nKSA9PiB0aGlzLnByb2Nlc3NGaWxlQ29udGVudChjb250ZW50LCB0aGlzLmJ1bmRsZUZpbGUpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYnVuZGxlRmlsZS50eXBlID09IEJ1bmRsZUZpbGVUeXBlRW51bVtCdW5kbGVGaWxlVHlwZUVudW0uQ1NTXSkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVwbGFjZVdpdGgoXCI8bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9XCIgKyB0aGlzLmJ1bmRsZUZpbGUudXJsICsgXCI+XCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5idW5kbGVGaWxlLnR5cGUgPT0gQnVuZGxlRmlsZVR5cGVFbnVtW0J1bmRsZUZpbGVUeXBlRW51bS5JTUFHRV0gJiYgdGhpcy5lbGVtZW50LmlzKCdpbWcnKSkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXR0cihcInNyY1wiLCB0aGlzLmJ1bmRsZUZpbGUudXJsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnSW5jb3JyZWN0IGJ1bmRsZSBmaWxlIHR5cGUgZm9yIGxvYWQ6ICcgKyB0aGlzLmJ1bmRsZUZpbGUudHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc0ZpbGVDb250ZW50KGZpbGVDb250ZW50OiBzdHJpbmcsIGJ1bmRsZUZpbGU6IElCdW5kbGVGaWxlKSB7XHJcbiAgICAgICAgaWYgKGZpbGVDb250ZW50ICYmIGJ1bmRsZUZpbGUpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChidW5kbGVGaWxlLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgQnVuZGxlRmlsZVR5cGVFbnVtW0J1bmRsZUZpbGVUeXBlRW51bS5KU106XHJcbiAgICAgICAgICAgICAgICAgICAgJC5nbG9iYWxFdmFsKCdcInVzZSBzdHJpY3RcIjsnICsgZmlsZUNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0SHR0cENvbmZpZygpIDogYW55IHtcclxuICAgICAgICByZXR1cm4geyBjYWNoZTogdHJ1ZSwgd2l0aG91dEF1dGhvcml6YXRpb246IHRydWUsIGlnbm9yZTQwNDogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTG9hZEJ1bmRsZUZpbGVEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc0xvYWRCdW5kbGVEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNMb2FkQnVuZGxlRmlsZUNvbnRyb2xsZXIpIHtcclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQUVcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0xvYWRCdW5kbGVGaWxlQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBidW5kbGVGaWxlOiBcIj12aHNCdW5kbGVGaWxlXCJcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuTG9hZEJ1bmRsZUZpbGVEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge0F1dGhSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvQXV0aFJvdXRlclwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi8uLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi8uLi9hdXRoY29yZS9FdmVudFwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi8uLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7TWFpblJvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9NYWluUm91dGVyXCI7XHJcbmltcG9ydCB7UGVyc29uYWxSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvUGVyc29uYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHtVc2Vyc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9Vc2Vyc1JvdXRlclwiO1xyXG5pbXBvcnQge1F1aXp6ZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1F1aXp6ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL01hdGVyaWFsc1JvdXRlclwiO1xyXG5pbXBvcnQge05ld3NSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL05ld3NSb3V0ZXJcIjtcclxuaW1wb3J0IHtJTWVudUdyb3VwfSBmcm9tIFwiLi9QZXJzb25hbE1lbnVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge0lNZW51SXRlbVNldHRpbmdzfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9tb2RlbHMvSU1lbnVJdGVtU2V0dGluZ3NcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7SG9tZVJvdXRlcn0gZnJvbSBcIi4uL3VybHMvSG9tZVJvdXRlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1NldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzU2VydmljZVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7RXZlbnQgYXMgQ29tcG9uZW50c0V2ZW50c30gZnJvbSBcIi4vbW9kZWxzL0V2ZW50XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMb2dpbkRpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgdmhzTWVudU1hcDogTWFwPHN0cmluZywgSU1lbnVHcm91cD47XHJcbiAgICB2aHNNZW51SXRlbXNWaXNpYmlsaXR5OiBJTWVudUl0ZW1TZXR0aW5ncztcclxuICAgIHZoc01lbnVCdUl0ZW1zVmlzaWJpbGl0eTogSU1lbnVJdGVtU2V0dGluZ3M7XHJcblxyXG4gICAgdm06IExvZ2luQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExvZ2luQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHJpdmF0ZSBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHB1YmxpYyBhdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIHVzZXI6IElVc2VyO1xyXG5cclxuICAgIHB1YmxpYyBhbmFseXRpY3NEYXRhOiBJTWVudUdyb3VwO1xyXG4gICAgcHVibGljIGFkbWluaXN0cmF0aW9uRGF0YTogSU1lbnVHcm91cDtcclxuICAgIHB1YmxpYyBjYWxlbmRhclZpc2liaWxpdHk6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZnJlZVBsYW5MaW1pdHMgPSBBcHBQcm9wZXJ0aWVzLmZyZWVQbGFuTGltaXRzLnRvTG93ZXJDYXNlKCkgPT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgcHVibGljIHBlcnNvbmFsSXRlbXM7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIE1haW5Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBBdXRoUm91dGVyLk5BTUUsXHJcbiAgICAgICAgVXNlcnNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFJvdXRlci5OQU1FLFxyXG4gICAgICAgIFF1aXp6ZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBOZXdzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEhvbWVSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBTZXR0aW5nc1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkICRzY29wZTogSUxvZ2luRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhBcGk6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYWluUm91dGVyOiBNYWluUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGF1dGhSb3V0ZXI6IEF1dGhSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgdXNlcnNSb3V0ZXI6IFVzZXJzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHBlcnNvbmFsUm91dGVyOiBQZXJzb25hbFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBxdWl6emVzUm91dGVyOiBRdWl6emVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG5ld3NSb3V0ZXI6IE5ld3NSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBob21lUm91dGVyOiBIb21lUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGxlYXJuaW5nUGF0aFJvdXRlcjogTGVhcm5pbmdQYXRoc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGVkID0gYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUGVybWlzc2lvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEYXRhRm9yTWVudSgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRDYWxlbmRhclZpc2liaWxpdHkoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyVmlzaWJpbGl0eSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICRzY29wZS4kb24oRXZlbnQuTE9HR0VEX09OLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQZXJtaXNzaW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRDYWxlbmRhclZpc2liaWxpdHkoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyVmlzaWJpbGl0eSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5MT0dHRURfT0ZGLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyVmlzaWJpbGl0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0ge307XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kd2F0Y2goXCJ2aHNNZW51TWFwXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hbmFseXRpY3NEYXRhID0gdGhpcy4kc2NvcGUudmhzTWVudU1hcC5nZXQoTWVudUhlbHBlci5BTkFMWVRJQ1NfTUVOVV9LRVkpO1xyXG4gICAgICAgICAgICB0aGlzLmFkbWluaXN0cmF0aW9uRGF0YSA9IHRoaXMuJHNjb3BlLnZoc01lbnVNYXAuZ2V0KE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fTUVOVV9LRVkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hhbmdlRGF0YUZvck1lbnUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hbmFseXRpY3NEYXRhID0gdGhpcy4kc2NvcGUudmhzTWVudU1hcC5nZXQoTWVudUhlbHBlci5BTkFMWVRJQ1NfTUVOVV9LRVkpO1xyXG4gICAgICAgIHRoaXMuYWRtaW5pc3RyYXRpb25EYXRhID0gdGhpcy4kc2NvcGUudmhzTWVudU1hcC5nZXQoTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9NRU5VX0tFWSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmF1dGhBcGkuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIgPSB1O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlUGVybWlzc2lvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5hdXRoQXBpLmdldEN1cnJlbnRVc2VyKCkudGhlbih1ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHUucGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9Mb2dpblBhZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYXV0aFJvdXRlci5sb2dvblVybCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG93QW5hbHl0aWNzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFuYWx5dGljc0RhdGEgJiYgdGhpcy5hbmFseXRpY3NEYXRhLml0ZW1zLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgJiYgdGhpcy5hbmFseXRpY3NEYXRhLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uYWxsb3dlZCkubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG93QWRtaW5pc3RyYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRtaW5pc3RyYXRpb25EYXRhICYmIHRoaXMuYWRtaW5pc3RyYXRpb25EYXRhLml0ZW1zLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgJiYgdGhpcy5hZG1pbmlzdHJhdGlvbkRhdGEuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5hbGxvd2VkKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuVGFibGV0TmF2aWdhdGlvbk1lbnUoKTogdm9pZCB7XHJcbiAgICAgICAgJChcIiN2aHMtcmlnaHQtbW9iaWxlLXNpZGViYXIgLnBhbmVsLXdyYXAgLnBhbmVsXCIpLnNjcm9sbFRvcCgwKTtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInZocy1yaWdodC1tb2JpbGUtc2lkZWJhclwiKS5jbGFzc0xpc3QuYWRkKFwiaW5cIik7XHJcbiAgICAgICAgJChcImJvZHlcIikuY3NzKFwib3ZlcmZsb3dcIiwgXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlVGFibGV0TmF2aWdhdGlvbk1lbnUoKTogdm9pZCB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ2aHMtcmlnaHQtbW9iaWxlLXNpZGViYXJcIikuY2xhc3NMaXN0LnJlbW92ZShcImluXCIpO1xyXG4gICAgICAgICQoXCJib2R5XCIpLmNzcyhcIm92ZXJmbG93XCIsIFwiYXV0b1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzQ3VzdG9tRG9tYWluVXJsKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBjdXN0b21Eb21haW4gPSB0aGlzLmF1dGhSb3V0ZXIuZ2V0Q3VzdG9tRG9tYWluRnJvbVVybCh0aGlzLiR3aW5kb3cubG9jYXRpb24pO1xyXG4gICAgICAgIHJldHVybiBjdXN0b21Eb21haW4gJiYgY3VzdG9tRG9tYWluLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWRpcmVjdFRvRnJlZVBsYW5QYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnVzZXJzUm91dGVyLnN0YXJ0VHJpYWxVcmwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5IZWxwQm90KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS4kYnJvYWRjYXN0KENvbXBvbmVudHNFdmVudHMuSEVMUF9CT1RfT1BFTl9DTE9TRSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2dpbkRpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLCBjb250cm9sbGVyOiBMb2dpbkNvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkaXJlY3RpdmU6IGFueSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL2xvZ2luLmh0bWxcIik7XHJcbiAgICBkaXJlY3RpdmUubGluayA9IGxpbms7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7XHJcbiAgICAgICAgdmhzTWVudU1hcDogXCI9P1wiLFxyXG4gICAgICAgIHZoc01lbnVJdGVtc1Zpc2liaWxpdHk6IFwiPT9cIixcclxuICAgICAgICB2aHNNZW51QnVJdGVtc1Zpc2liaWxpdHk6IFwiPT9cIixcclxuICAgIH07XHJcbiAgICBkaXJlY3RpdmUuY29udHJvbGxlciA9IExvZ2luQ29udHJvbGxlcjtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcbkxvZ2luRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImV4cG9ydCBmdW5jdGlvbiBNYXhMZW5ndGhGaWx0ZXJGYWN0b3J5KCkge1xyXG4gICAgcmV0dXJuICh2YWx1ZSwgbWF4LCB0YWlsKSA9PiB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBtYXggPSBwYXJzZUludChtYXgsIDEwKTtcclxuICAgICAgICBpZiAoIW1heCkgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPD0gbWF4KSByZXR1cm4gdmFsdWU7XHJcblxyXG4gICAgICAgIHZhciBjdXRWYWx1ZSA9IHZhbHVlLnN1YnN0cigwLCBtYXgpO1xyXG4gICAgICAgIC8vdmFyIGxhc3RzcGFjZSA9IGN1dFZhbHVlLmxhc3RJbmRleE9mKCcgJyk7XHJcbiAgICAgICAgLy9pZiAobGFzdHNwYWNlICE9PSAtMSkge1xyXG4gICAgICAgIC8vICAgIC8vQWxzbyByZW1vdmUgLiBhbmQgLCBzbyBpdHMgZ2l2ZXMgYSBjbGVhbmVyIHJlc3VsdC5cclxuICAgICAgICAvLyAgICBpZiAoY3V0VmFsdWUuY2hhckF0KGxhc3RzcGFjZSAtIDEpID09ICcuJyB8fCBjdXRWYWx1ZS5jaGFyQXQobGFzdHNwYWNlIC0gMSkgPT0gJywnKSB7XHJcbiAgICAgICAgLy8gICAgICAgIGxhc3RzcGFjZSA9IGxhc3RzcGFjZSAtIDE7XHJcbiAgICAgICAgLy8gICAgfVxyXG4gICAgICAgIC8vICAgIGN1dFZhbHVlID0gY3V0VmFsdWUuc3Vic3RyKDAsIGxhc3RzcGFjZSk7XHJcbiAgICAgICAgLy99XHJcblxyXG4gICAgICAgIHJldHVybiAnPHNwYW4gdGl0bGU9XCInICsgdmFsdWUgKyAnXCI+JyArIGN1dFZhbHVlICsgKHRhaWwgfHwgJyDigKYnKSArICc8L3NwYW4+JztcclxuICAgIH07XHJcbn0iLCJpbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi8uLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU11bHRpcGxlQ2hlY2tib3hTZWxlY3RvckRpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgZW50aXRpZXM/OiBBcnJheTxJU2VsZWN0YWJsZT47XHJcbiAgICBtb2RlbD86IEFycmF5PG51bWJlcj47XHJcblxyXG4gICAgdm0/OiBNdWx0aXBsZUNoZWNrYm94U2VsZWN0b3JDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVDaGVja2JveFNlbGVjdG9yQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSU11bHRpcGxlQ2hlY2tib3hTZWxlY3RvckRpcmVjdGl2ZVNjb3BlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5wdXNoRGF0YU1vZGVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHB1c2hEYXRhTW9kZWwoKTogdm9pZCB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRzY29wZS5lbnRpdGllcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5OiBJU2VsZWN0YWJsZSA9IHRoaXMuJHNjb3BlLmVudGl0aWVzW2ldO1xyXG4gICAgICAgICAgICBlbnRpdHlbXCJzZWxlY3RlZFwiXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJHNjb3BlLm1vZGVsLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLiRzY29wZS5tb2RlbFtqXTtcclxuICAgICAgICAgICAgICAgIGlmIChlbnRpdHkuaWQgPT0gaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlbXCJzZWxlY3RlZFwiXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGl0ZW1TZWxlY3Rpb24oZW50aXR5OiBJU2VsZWN0YWJsZSk6IHZvaWQge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kc2NvcGUubW9kZWwubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gdGhpcy4kc2NvcGUubW9kZWxbaV07XHJcbiAgICAgICAgICAgIGlmIChpZCA9PSBlbnRpdHkuaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLm1vZGVsLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiRzY29wZS5tb2RlbC5wdXNoKGVudGl0eS5pZCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBNdWx0aXBsZUNoZWNrYm94U2VsZWN0b3JEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICB2YXIgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBNdWx0aXBsZUNoZWNrYm94U2VsZWN0b3JDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0ge1xyXG4gICAgICAgIGVudGl0aWVzOiBcIj12aHNFbnRpdGllc1wiLFxyXG4gICAgICAgIG1vZGVsOiBcIj12aHNNb2RlbFwiXHJcbiAgICB9O1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9tdWx0aXBsZS1jaGVja2JveC1zZWxlY3Rvci5odG1sXCIpO1xyXG4gICAgZGlyZWN0aXZlLnRyYW5zY2x1ZGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuTXVsdGlwbGVDaGVja2JveFNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImV4cG9ydCBlbnVtIE5vdGlmaWNhdGlvbkV2ZW50R3JvdXBLZXkge1xyXG4gICAgQ09VUlNFLFxyXG4gICAgTUFURVJJQUwsXHJcbiAgICBTWVNURU1cclxufSIsImltcG9ydCB7U3RvcmFnZVdyYXBwZXIsIFN0b3JhZ2VzfSBmcm9tIFwiLi8uLi9pbmZyYXN0cnVjdHVyZS9TdG9yYWdlXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0V2ZW50XCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgSU1lbnVVcGRhdGVMaXN0ZW5lcixcclxuICAgIE1lbnVIZWxwZXJcclxufSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7XHJcbiAgICBJUGFnZUhlYWRlclVwZGF0ZUxpc3RlbmVyLFxyXG4gICAgUGFnZUhlYWRlckhlbHBlcixcclxuICAgIFBhZ2VIZWFkZXJcclxufSBmcm9tIFwiLi8uLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcblxyXG5pbnRlcmZhY2UgUGFnZUhlYWRlckF0dHJpYnV0ZXMgZXh0ZW5kcyBhbmd1bGFyLklBdHRyaWJ1dGVzIHtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFBhZ2VIZWFkZXJDb250cm9sbGVyIGltcGxlbWVudHMgSU1lbnVVcGRhdGVMaXN0ZW5lciwgSVBhZ2VIZWFkZXJVcGRhdGVMaXN0ZW5lciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBNVUxUSVBMRV9BQ1RJT05TX0xJTktfVEVNUExBVEVfU1RBUlQgPSAnPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIj4nO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgTVVMVElQTEVfQUNUSU9OU19MSU5LX1RFTVBMQVRFX0VORCA9ICc8L2xpPic7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBWSFNfU0VTU0lPTl9ISVNUT1JZX0tFWSA9IFwidmhzX3Nlc3Npb25fbmF2aWdhdGlvbl9oaXN0b3J5XCI7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBNQVhfSElTVE9SWV9ERVBUSCA9IDM7XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRQYWdlTmFtZTogc3RyaW5nID0gXCImbmJzcDtcIjtcclxuICAgIHB1YmxpYyBhY3Rpb25zUGFuZWxIdG1sOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc3RhdHVzUGFuZWxIdG1sOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbXVsdGlwbGVBY3Rpb25zT25QYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc0hpc3Rvcnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoaXN0b3J5OiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBTdG9yYWdlcy5TRVNTSU9OX05BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2U6IFN0b3JhZ2VXcmFwcGVyKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgLy9zdWJzY3JpYmUgdG8gdXBkYXRlIGV2ZW50c1xyXG4gICAgICAgIE1lbnVIZWxwZXIuYWRkTWVudVVwZGF0ZUxpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXJIZWxwZXIuYWRkUGFnZUhlYWRlclVwZGF0ZUxpc3RlbmVyKHRoaXMpO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKEV2ZW50LkxPR0dFRF9PTiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhpc3Rvcnkuc3BsaWNlKDAsIHRoaXMuaGlzdG9yeS5sZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLmhhc0hpc3RvcnkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zYXZlSGlzdG9yeSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICRzY29wZS4kb24oRXZlbnQuTE9HR0VEX09GRiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhpc3Rvcnkuc3BsaWNlKDAsIHRoaXMuaGlzdG9yeS5sZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLmhhc0hpc3RvcnkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zYXZlSGlzdG9yeSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlLmNvbnRhaW5zKFBhZ2VIZWFkZXJDb250cm9sbGVyLlZIU19TRVNTSU9OX0hJU1RPUllfS0VZKSkge1xyXG4gICAgICAgICAgICB2YXIgc3RvcmVkSGlzdG9yeSA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0PHN0cmluZz4oUGFnZUhlYWRlckNvbnRyb2xsZXIuVkhTX1NFU1NJT05fSElTVE9SWV9LRVkpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0b3JlZEhpc3RvcnkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHN0b3JlZEhpc3RvcnlbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaGFzSGlzdG9yeSA9IHRoaXMuaGlzdG9yeS5sZW5ndGggPiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29CYWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0hpc3RvcnkpIHtcclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnBvcCgpOyAvLyBmb3Jnb3QgY3VycmVudCB1cmxcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuaGlzdG9yeS5wb3AoKTtcclxuICAgICAgICAgICAgdGhpcy5zYXZlSGlzdG9yeSgpO1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5oYXNIaXN0b3J5ID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+IDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uTWVudUl0ZW1VcGRhdGUobmV3TWVudUl0ZW1LZXk6IHN0cmluZywgb2xkTWVudUl0ZW1LZXk6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VOYW1lID0gXCImbmJzcDtcIjtcclxuICAgICAgICB0aGlzLmFjdGlvbnNQYW5lbEh0bWwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzUGFuZWxIdG1sID0gXCJcIjtcclxuICAgICAgICB0aGlzLm11bHRpcGxlQWN0aW9uc09uUGFuZWwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxO1xyXG4gICAgICAgIGlmIChsYXN0SW5kZXggPCAwIHx8IHRoaXMuaGlzdG9yeVtsYXN0SW5kZXhdICE9IHRoaXMuJGxvY2F0aW9uLnBhdGgoKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oaXN0b3J5Lmxlbmd0aCA+IFBhZ2VIZWFkZXJDb250cm9sbGVyLk1BWF9ISVNUT1JZX0RFUFRIKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3Rvcnkuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzSGlzdG9yeSA9IHRoaXMuaGlzdG9yeS5sZW5ndGggPiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVIaXN0b3J5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkhlYWRlclVwZGF0ZShwYWdlSGVhZGVyOiBQYWdlSGVhZGVyKSB7XHJcbiAgICAgICAgaWYgKCFwYWdlSGVhZGVyLnByZXNlcnZlUGFnZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZU5hbWUgPSBwYWdlSGVhZGVyLnBhZ2VOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXBhZ2VIZWFkZXIucHJlc2VydmVBY3Rpb25zUGFuZWwpIHtcclxuICAgICAgICAgICAgdmFyIGh0bWwgPSBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlQWN0aW9uc09uUGFuZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHBhZ2VIZWFkZXIuYWN0aW9ucy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgaHRtbCA9IHBhZ2VIZWFkZXIuYWN0aW9uc1swXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYWdlSGVhZGVyLmFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlSGVhZGVyLmFjdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9IFBhZ2VIZWFkZXJDb250cm9sbGVyLk1VTFRJUExFX0FDVElPTlNfTElOS19URU1QTEFURV9TVEFSVCArIHBhZ2VIZWFkZXIuYWN0aW9uc1tpXSArIFBhZ2VIZWFkZXJDb250cm9sbGVyLk1VTFRJUExFX0FDVElPTlNfTElOS19URU1QTEFURV9FTkQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlQWN0aW9uc09uUGFuZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1BhbmVsSHRtbCA9IHRoaXMuJHNjZS5nZXRUcnVzdGVkSHRtbChodG1sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwYWdlSGVhZGVyLnByZXNlcnZlU3RhdHVzUGFuZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXNQYW5lbEh0bWwgPSB0aGlzLiRzY2UuZ2V0VHJ1c3RlZEh0bWwocGFnZUhlYWRlci5zdGF0dXNQYW5lbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2F2ZUhpc3RvcnkoKSB7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5wdXQoUGFnZUhlYWRlckNvbnRyb2xsZXIuVkhTX1NFU1NJT05fSElTVE9SWV9LRVksIHRoaXMuaGlzdG9yeSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQYWdlSGVhZGVyRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFBhZ2VIZWFkZXJBdHRyaWJ1dGVzLCBjb250cm9sbGVyOiBQYWdlSGVhZGVyQ29udHJvbGxlcixcclxuICAgICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogYW5ndWxhci5JVHJhbnNjbHVkZUZ1bmN0aW9uKSB7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRpcmVjdGl2ZTogYW55ID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5zY29wZSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBQYWdlSGVhZGVyQ29udHJvbGxlcjtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvcGFnZS1oZWFkZXIuaHRtbFwiKTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblBhZ2VIZWFkZXJEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtTdG9yYWdlcywgU3RvcmFnZVdyYXBwZXJ9IGZyb20gXCIuLy4uL2luZnJhc3RydWN0dXJlL1N0b3JhZ2VcIjtcclxuaW1wb3J0IHtBcHBQcm9wZXJ0aWVzfSBmcm9tIFwiLi8uLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7SVBhZ2VIZWFkZXJVcGRhdGVMaXN0ZW5lciwgUGFnZUhlYWRlciwgUGFnZUhlYWRlckhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlVGl0bGVDb250cm9sbGVyIGltcGxlbWVudHMgSVBhZ2VIZWFkZXJVcGRhdGVMaXN0ZW5lciB7XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRQYWdlTmFtZTogc3RyaW5nID0gQXBwUHJvcGVydGllcy5hcHBUaXRsZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRzY2VcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFN0b3JhZ2VzLlNFU1NJT05fTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcigkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY2U6IGFuZ3VsYXIuSVNDRVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZTogU3RvcmFnZVdyYXBwZXIpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICAvL3N1YnNjcmliZSB0byB1cGRhdGUgZXZlbnRzXHJcbiAgICAgICAgUGFnZUhlYWRlckhlbHBlci5hZGRQYWdlSGVhZGVyVXBkYXRlTGlzdGVuZXIodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uSGVhZGVyVXBkYXRlKHBhZ2VIZWFkZXI6IFBhZ2VIZWFkZXIpIHtcclxuICAgICAgICBpZiAoIXBhZ2VIZWFkZXIucHJlc2VydmVQYWdlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlTmFtZSA9IHBhZ2VIZWFkZXIucGFnZU5hbWU7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gdGhpcy5jdXJyZW50UGFnZU5hbWUgPyB0aGlzLmN1cnJlbnRQYWdlTmFtZSA6IEFwcFByb3BlcnRpZXMuYXBwVGl0bGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUGFnZVRpdGxlRGlyZWN0aXZlRmFjdG9yeSgpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsIGNvbnRyb2xsZXI6IFBhZ2VUaXRsZUNvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkaXJlY3RpdmU6IGFueSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUubGluayA9IGxpbms7XHJcbiAgICBkaXJlY3RpdmUuY29udHJvbGxlciA9IFBhZ2VUaXRsZUNvbnRyb2xsZXI7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcbiIsImltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLy4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvRXZlbnRcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SU1lbnVVcGRhdGVMaXN0ZW5lciwgTWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge01hdGVyaWFsc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTdGF0aXN0aWNzUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL1N0YXRpc3RpY3NSb3V0ZXJcIjtcclxuaW1wb3J0IHtGaW5hbmNlc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9GaW5hbmNlc1JvdXRlclwiO1xyXG5pbXBvcnQge05ld3NSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvTmV3c1JvdXRlclwiO1xyXG5pbXBvcnQge0luZm9Sb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvSW5mb1JvdXRlclwiO1xyXG5pbXBvcnQge1VzZXJzUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL1VzZXJzUm91dGVyXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7UXVpenplc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9RdWl6emVzUm91dGVyXCI7XHJcbmltcG9ydCB7UGVyc29uYWxSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvUGVyc29uYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50c1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQXNzZXNzbWVudHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvUmVmZXJlbmNlUm91dGVyXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvQ2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtMb2dzUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL0xvZ3NSb3V0ZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVBhZ2VIZWFkZXJVcGRhdGVMaXN0ZW5lciwgUGFnZUhlYWRlckhlbHBlciwgUGFnZUhlYWRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1N5c3RlbVNldHRpbmdzUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL1N5c3RlbVNldHRpbmdzUm91dGVyXCI7XHJcbmltcG9ydCB7TWFpblJvdXRlcn0gZnJvbSBcIi4uL3VybHMvTWFpblJvdXRlclwiO1xyXG5pbXBvcnQge0pvYnNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0pvYnNSb3V0ZXJcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SG9tZXBhZ2VIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9Ib21lcGFnZUhlbHBlclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1Qcm9wZXJ0eX0gZnJvbSBcIi4uL3NldHRpbmdzL21vZGVscy9JU3lzdGVtUHJvcGVydHlcIjtcclxuaW1wb3J0IHtNZW51Q29uZmlndXJhdG9yU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL01lbnVDb25maWd1cmF0b3JTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7SVFTZXJ2aWNlfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5pbXBvcnQge0lNZW51SXRlbVNldHRpbmdzfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9tb2RlbHMvSU1lbnVJdGVtU2V0dGluZ3NcIjtcclxuaW1wb3J0IHtQb2xpY2llc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvUG9saWNpZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtIb21lUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Ib21lUm91dGVyXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSBcIi4uL3JlZmVyZW5jZS9SZWZlcmVuY2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvQXV0aFJvdXRlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtTbGlkZVRlbXBsYXRlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvU2xpZGVUZW1wbGF0ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJQmFkZ2V9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vbW9kZWxzL0lCYWRnZVwiO1xyXG5pbXBvcnQge0V2ZW50IGFzIENvbXBvbmVudHNFdmVudHN9IGZyb20gXCIuL21vZGVscy9FdmVudFwiO1xyXG5cclxuaW50ZXJmYWNlIElNZW51SXRlbSB7XHJcbiAgICBrZXk/OiBzdHJpbmc7XHJcbiAgICBuYW1lPzogc3RyaW5nO1xyXG4gICAgdXJsPzogc3RyaW5nO1xyXG4gICAgdXJsRnVuYz86IEZ1bmN0aW9uO1xyXG4gICAgcm91dGVQYXJhbUtleT86IHN0cmluZztcclxuICAgIGFsbG93ZWQ/OiBib29sZWFuO1xyXG4gICAgYWxsb3dGdW5jPzogKHApID0+IGJvb2xlYW47XHJcbiAgICBpdGVtcz86IEFycmF5PElNZW51SXRlbT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1lbnVHcm91cCB7XHJcbiAgICBrZXk/OiBzdHJpbmc7XHJcbiAgICBpbWdLZXk/OiBzdHJpbmc7XHJcbiAgICBuYW1lPzogc3RyaW5nO1xyXG4gICAgdXJsPzogc3RyaW5nO1xyXG4gICAgaXRlbXM/OiBBcnJheTxJTWVudUl0ZW0+O1xyXG4gICAgYWxsb3dlZD86IGJvb2xlYW47XHJcbiAgICBkeW5hbWljVXJsPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQnJlYWRjcnVtYiB7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbiAgICB1cmw6IHN0cmluZztcclxufVxyXG5cclxuY2xhc3MgUGVyc29uYWxNZW51Q29udHJvbGxlciBpbXBsZW1lbnRzIElNZW51VXBkYXRlTGlzdGVuZXIsIElQYWdlSGVhZGVyVXBkYXRlTGlzdGVuZXIge1xyXG5cclxuICAgIC8vcHJpdmF0ZSBzdGF0aWMgUFJPSkVDVF9QQVRIX1BBUkFNID0gXCJwcm9qZWN0SWRcIjtcclxuXHJcbiAgICBwcml2YXRlIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgcHVibGljIG1lbnU6IEFycmF5PElNZW51R3JvdXA+ID0gW107XHJcbiAgICBwdWJsaWMgY3VycmVudFRvcE1lbnU6IEFycmF5PElNZW51SXRlbT4gPSBbXTtcclxuICAgIHB1YmxpYyBjdXJyZW50TWVudUl0ZW1LZXk6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVHcm91cEtleTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBtZW51TWFwOiBNYXA8c3RyaW5nLCBJTWVudUdyb3VwPiA9IG5ldyBNYXA8c3RyaW5nLCBJTWVudUdyb3VwPigpO1xyXG4gICAgcHVibGljIG1lbnVJdGVtTWFwOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICAgIHB1YmxpYyBwYXJlbnRNYXA6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG4gICAgcHVibGljIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgc3lzdGVtQWRtaW5pc3RyYXRvcjogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBoYXNBbGxCdXNpbmVzc1VuaXRzOiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzTWVudUhpZGRlbjogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzeXN0ZW1Ib21lUGFnZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBicmVhZGNydW1iczogQXJyYXk8SUJyZWFkY3J1bWI+ID0gW107XHJcbiAgICBwcml2YXRlIGJyZWFkY3J1bWJzUGFnZU5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgYnJlYWRjcnVtYnNQYXJlbnROYW1lOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGJyZWFkY3J1bWJzUGFyZW50TGluazogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBpc01lbnVGdWxsOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcjogSVVzZXJJbmZvO1xyXG4gICAgcHVibGljIGhlYWRlckNvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHVzZXJCdXNpbmVzc1JvbGU6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgY2FsZW5kYXJWaXNpYmlsaXR5OiBib29sZWFuO1xyXG4gICAgcHVibGljIEJVWm9vbVZpc2liaWxpdHk6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbWVudUl0ZW1zVmlzaWJpbGl0eVNldHRpbmdzOiBJTWVudUl0ZW1TZXR0aW5ncztcclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBzZWFyY2hUaW1lb3V0O1xyXG5cclxuICAgIC8vICAgIFJlZmVyZW5jZSBkYXRhXHJcbiAgICBwdWJsaWMgcmVmZXJlbmNlU3ViamVjdDtcclxuICAgIHB1YmxpYyByZWZlcmVuY2VUeXBlO1xyXG4gICAgcHVibGljIHJlZmVyZW5jZUxhbmd1YWdlO1xyXG4gICAgcHVibGljIHJlZmVyZW5jZUxlYXJuaW5nUGF0aFR5cGU7XHJcbiAgICBwdWJsaWMgcmVmZXJlbmNlT2JqZWN0TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuXHJcbiAgICAvLyB0b2RvOiBjaGVjayBwcml2YWN5IG1vZGlmaWVyc1xyXG4gICAgcHVibGljIGlzSW5zaWRlQ291cnNlUGFnZSA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc0FsbENvdXJzZUluc2lkZVBhZ2UgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0luc2lkZUxlYXJuaW5nUGF0aFBhZ2UgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0luc2lkZVF1aXpQYWdlcyA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzSW5zaWRlU3VydmV5UGFnZXMgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0luc2lkZUZsYXNoY2FyZFBhZ2VzID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNFeHRlcm5hbEFjY291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0luc2lkZUdhbWVzUGFnZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0luc2lkZUNhdGFsb2dQYWdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFVybExvZ29Vcmw7XHJcbiAgICBwdWJsaWMgcmVkaXJlY3RVcmxIZWxwUGFnZTtcclxuICAgIHB1YmxpYyByZWRpcmVjdEFib3V0VXNQYWdlO1xyXG4gICAgcHVibGljIGZhcVVybDtcclxuXHJcbiAgICBwcml2YXRlIHJld2FyZHM6IEFycmF5PElCYWRnZT4gPSBbXTtcclxuICAgIHByaXZhdGUgcmV3YXJkVG9TaG93OiBJQmFkZ2U7XHJcblxyXG4gICAgcHVibGljIG1lbnVIZWxwZXIgPSBNZW51SGVscGVyO1xyXG4gICAgcHJpdmF0ZSB0aW1lb3V0ID0gMDtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgTWF0ZXJpYWxzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU3RhdGlzdGljc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEZpbmFuY2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTmV3c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEluZm9Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBVc2Vyc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUXVpenplc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFBlcnNvbmFsUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU3lzdGVtU2V0dGluZ3NSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMb2dzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgSm9ic1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVJvdXRlci5OQU1FLFxyXG4gICAgICAgIE1haW5Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBDZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEFzc2Vzc21lbnRzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTWVudUNvbmZpZ3VyYXRvclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQb2xpY2llc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBSZWZlcmVuY2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgSG9tZVJvdXRlci5OQU1FLFxyXG4gICAgICAgIEF1dGhSb3V0ZXIuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2xpZGVUZW1wbGF0ZXNSb3V0ZXIuTkFNRSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkcm9vdFNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgJGh0dHA6IG5nLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoQXBpOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc3RhdGlzdGljc1JvdXRlcjogU3RhdGlzdGljc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZmluYW5jZXNSb3V0ZXI6IEZpbmFuY2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBuZXdzUm91dGVyOiBOZXdzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBpbmZvUm91dGVyOiBJbmZvUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2Vyc1JvdXRlcjogVXNlcnNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHF1aXp6ZXNSb3V0ZXI6IFF1aXp6ZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsUm91dGVyOiBQZXJzb25hbFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc3lzdGVtU2V0dGluZ3NSb3V0ZXI6IFN5c3RlbVNldHRpbmdzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsb2dzUm91dGVyOiBMb2dzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBqb2JzUm91dGVyOiBKb2JzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWZlcmVuY2VSb3V0ZXI6IFJlZmVyZW5jZVJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWFpblJvdXRlcjogTWFpblJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXI6IENlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXNzZXNzbWVudHNSb3V0ZXI6IEFzc2Vzc21lbnRzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtZW51Q29uZmlndXJhdG9yU2VydmljZTogTWVudUNvbmZpZ3VyYXRvclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcG9saWNpZXNSb3V0ZXI6IFBvbGljaWVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogUmVmZXJlbmNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBob21lUm91dGVyOiBIb21lUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGF1dGhSb3V0ZXI6IEF1dGhSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNsaWRlVGVtcGxhdGVzUm91dGVyOiBTbGlkZVRlbXBsYXRlc1JvdXRlcikge1xyXG4gICAgICAgICRzY29wZS5tZW51Vk0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS5pc0luc2lkZUNvdXJzZVBhZ2UgPSB0aGlzLmlzSW5zaWRlQ291cnNlUGFnZTtcclxuICAgICAgICB0aGlzLiRyb290U2NvcGUuaXNJbnNpZGVMZWFybmluZ1BhdGggPSB0aGlzLmlzSW5zaWRlTGVhcm5pbmdQYXRoUGFnZTtcclxuICAgICAgICB0aGlzLiRyb290U2NvcGUuaXNJbnNpZGVRdWl6UGFnZXMgPSB0aGlzLmlzSW5zaWRlUXVpelBhZ2VzO1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS5pc0luc2lkZVN1cnZleVBhZ2VzID0gdGhpcy5pc0luc2lkZVN1cnZleVBhZ2VzO1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS5pc0luc2lkZUZsYXNoY2FyZFBhZ2VzID0gdGhpcy5pc0luc2lkZUZsYXNoY2FyZFBhZ2VzO1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS5pc0luc2lkZUdhbWVzUGFnZXMgPSB0aGlzLmlzSW5zaWRlR2FtZXNQYWdlcztcclxuICAgICAgICB0aGlzLiRyb290U2NvcGUuaXNJbnNpZGVDYXRhbG9nUGFnZXMgPSB0aGlzLmlzSW5zaWRlQ2F0YWxvZ1BhZ2VzO1xyXG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtQWRtaW5pc3RyYXRvciA9IGF1dGhNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkgJiYgYXV0aE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKS5pZCA9PT0gMTtcclxuICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSBhdXRoTWFuYWdlci5nZXRDdXJyZW50VXNlcigpICYmIGF1dGhNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkuYWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICB0aGlzLmlzTWVudUhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkTWVudUJ5Um9sZSgpO1xyXG5cclxuICAgICAgICAvL3RvZG86IFZIUy0yMjY1XHJcbiAgICAgICAgLy8gdGhpcy5nZXRNZW51SXRlbXNBdmFpbGFiaWxpdHkoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAvLyAgICAgdGhpcy5sb2FkTWVudSgpOyAvLyB0aGlzIHdhcyBpbiAnZWxzZScgc2VjdGlvbiBiZWxvdywgYnV0IGZvciBicmVhZGNydW1icyBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBpdCBoZXJlXHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBlcm1pc3Npb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmdldENhbGVuZGFyVmlzaWJpbGl0eSgpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJWaXNpYmlsaXR5ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VCb2R5Q3NzKCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VDdXN0b21CcmFuZGluZygpO1xyXG4gICAgICAgIHRoaXMuYWRkUmVzaXplRXZlbnRMaXN0ZW5lcigpO1xyXG4gICAgICAgIHRoaXMubG9hZFJlZmVyZW5jZURhdGEoKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5MT0dHRURfT04sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0dGluZ3NTZXJ2aWNlLmdldENhbGVuZGFyVmlzaWJpbGl0eSgpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJWaXNpYmlsaXR5ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1BZG1pbmlzdHJhdG9yID0gYXV0aE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKSAmJiBhdXRoTWFuYWdlci5nZXRDdXJyZW50VXNlcigpLmlkID09PSAxO1xyXG4gICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSBhdXRoTWFuYWdlci5nZXRDdXJyZW50VXNlcigpICYmIGF1dGhNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkuYWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQZXJtaXNzaW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZUJvZHlDc3MoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VDdXN0b21CcmFuZGluZygpO1xyXG4gICAgICAgICAgICB0aGlzLmdldFJlZGlyZWN0TG9nb1VybEZyb21CVUFuZFN5c3RlbVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFJlZmVyZW5jZURhdGEoKTtcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlckxvY2FsTG9nb24oKS50aGVuKGxvZ29uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFeHRlcm5hbEFjY291bnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0V4dGVybmFsQWNjb3VudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5MT0dHRURfT0ZGLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlT2JqZWN0TG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbUFkbWluaXN0cmF0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5tZW51LnNwbGljZSgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9wTWVudS5zcGxpY2UoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZE1lbnVCeVJvbGUoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VCb2R5Q3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3VzdG9tQnJhbmRpbmcoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRSZWRpcmVjdExvZ29VcmxGcm9tQlVBbmRTeXN0ZW1TZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB0aGlzLmlzRXh0ZXJuYWxBY2NvdW50ID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJHJvb3RTY29wZS4kb24oXCIkcm91dGVDaGFuZ2VTdGFydFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW51SGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkcm9vdFNjb3BlLiRvbihcImNoYW5nZUZpbHRlckV2ZW50XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVmZXJlbmNlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRyb290U2NvcGUuJG9uKCdub3RpZnlSZXdhcmQnLCAoZXZlbnQsIHJlc3VsdDogSUJhZGdlW10pID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zb21lKGJhZGdlID0+IGJhZGdlLmJhZGdlS2V5ID09PSBcIkNfQ01QTFwiIHx8IGJhZGdlLmJhZGdlS2V5ID09PSBcIkxQX0NNUExcIikpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGltZW91dCA9IDQwMDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmZvckVhY2gociA9PiB0aGlzLnJld2FyZHMucHVzaChyKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXdhcmRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEltYWdlc0ZvckFjdGl2aXR5QmFkZ2VzKHRoaXMucmV3YXJkcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRUb1Nob3cgPSB0aGlzLnJld2FyZHNbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHRoaXMudGltZW91dCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vc3Vic2NyaWJlIHRvIG1lbnUgdXBkYXRlIGV2ZW50c1xyXG4gICAgICAgIE1lbnVIZWxwZXIuYWRkTWVudVVwZGF0ZUxpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIC8vc3Vic2NyaWJlIHRvIHBhZ2UgaGVhZGVyIHVwZGF0ZSBldmVudHNcclxuICAgICAgICBQYWdlSGVhZGVySGVscGVyLmFkZFBhZ2VIZWFkZXJVcGRhdGVMaXN0ZW5lcih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0SG9tZXBhZ2UoKS50aGVuKChob21lcGFnZTogSVN5c3RlbVByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtSG9tZVBhZ2UgPSBIb21lcGFnZUhlbHBlci5nZXRIb21lcGFnZVVybChob21lcGFnZSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZ2V0UmVkaXJlY3RMb2dvVXJsRnJvbUJVQW5kU3lzdGVtU2V0dGluZ3MoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0V4dGVybmFsQWNjb3VudCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlckxvY2FsTG9nb24oKS50aGVuKGxvZ29uID0+IHtcclxuICAgICAgICAgICAgaWYgKGxvZ29uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRXh0ZXJuYWxBY2NvdW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZE1lbnVCeVJvbGUoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IG1lbnVWaXNpYmlsaXR5ID0gdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0TWVudUl0ZW1zVmlzaWJpbGl0eVNldHRpbmcoKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51SXRlbXNWaXNpYmlsaXR5U2V0dGluZ3MgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNZW51KCk7IC8vIHRoaXMgd2FzIGluICdlbHNlJyBzZWN0aW9uIGJlbG93LCBidXQgZm9yIGJyZWFkY3J1bWJzIGl0IGlzIGJldHRlciB0byBoYXZlIGl0IGhlcmVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGJ1c2luZXNzVXNlclJvbGUgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyQnVzaW5lc3NSb2xlKClcclxuICAgICAgICAgICAgLnRoZW4ocm9sZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJCdXNpbmVzc1JvbGUgPSByb2xlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICBtZW51VmlzaWJpbGl0eSxcclxuICAgICAgICAgICAgYnVzaW5lc3NVc2VyUm9sZSxcclxuICAgICAgICBdKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkTWVudSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UmVkaXJlY3RMb2dvVXJsRnJvbUJVQW5kU3lzdGVtU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5hdXRoQXBpLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0UmVkaXJlY3RMb2dvVVJMKClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLnJlZGlyZWN0VXJsTG9nb1VybCA9IHJlc3VsdCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRSZWRpcmVjdEhlbHBVUkwoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHRoaXMucmVkaXJlY3RVcmxIZWxwUGFnZSA9IHJlc3VsdCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRSZWRpcmVjdEFib3V0VXNVUkwoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHRoaXMucmVkaXJlY3RBYm91dFVzUGFnZSA9IHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVQZXJtaXNzaW9ucygpIHtcclxuICAgICAgICB0aGlzLmF1dGhBcGkuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gdXNlci5wZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgaWYgKHVzZXIuYnVzaW5lc3NVbml0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVJdGVtc1Zpc2liaWxpdHlTZXR0aW5ncyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWVudUl0ZW1zUHJvbWlzZSA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmdldE1lbnVJdGVtc1Zpc2liaWxpdHlTZXR0aW5nKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihkYXRhID0+IHRoaXMubWVudUl0ZW1zVmlzaWJpbGl0eVNldHRpbmdzID0gZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgem9vbVByb21pc2UgPSB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRCVVpvb21WaXNpYmlsaXR5U2V0dGluZyh1c2VyLmJ1c2luZXNzVW5pdHMpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuQlVab29tVmlzaWJpbGl0eSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJ1c2luZXNzVXNlclJvbGUgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyQnVzaW5lc3NSb2xlKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyb2xlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyQnVzaW5lc3NSb2xlID0gcm9sZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLiRxLmFsbChbXHJcbiAgICAgICAgICAgICAgICAgICAgem9vbVByb21pc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW1zUHJvbWlzZSxcclxuICAgICAgICAgICAgICAgICAgICBtZW51SXRlbXNQcm9taXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1c2luZXNzVXNlclJvbGVcclxuICAgICAgICAgICAgICAgIF0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE1lbnUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5CVVpvb21WaXNpYmlsaXR5ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyQnVzaW5lc3NSb2xlKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyb2xlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyQnVzaW5lc3NSb2xlID0gcm9sZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTWVudSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZU1lbnVWaXNpYmlsaXR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNNZW51SGlkZGVuID0gIXRoaXMuaXNNZW51SGlkZGVuO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkTWVudSgpIHtcclxuICAgICAgICBsZXQgbWVudUJ5UGVybWlzc2lvbnM6IEFycmF5PElNZW51R3JvdXA+ID0gdGhpcy5tZW51Q29uZmlndXJhdG9yU2VydmljZS5maWxsTWVudUJ5UGVybWlzc2lvbnNJdGVtc0FycmF5KFxyXG4gICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQsIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMsIHRoaXMuc3lzdGVtQWRtaW5pc3RyYXRvciwgdGhpcy5CVVpvb21WaXNpYmlsaXR5LFxyXG4gICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMsIHRoaXMudXNlckJ1c2luZXNzUm9sZSwgdGhpcy5tZW51SXRlbXNWaXNpYmlsaXR5U2V0dGluZ3MpO1xyXG4gICAgICAgIG1lbnVCeVBlcm1pc3Npb25zLnB1c2goLi4udGhpcy5tZW51Q29uZmlndXJhdG9yU2VydmljZS5nZXRBbGxIb21lTWVudSh0aGlzLmF1dGhlbnRpY2F0ZWQsIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMpKTtcclxuICAgICAgICBtZW51QnlQZXJtaXNzaW9ucy5maWx0ZXIoKGl0ZW0sIHBvcykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVudUJ5UGVybWlzc2lvbnMuaW5kZXhPZihpdGVtKSA9PSBwb3M7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgbGV0IHBlcnNvbmFsQWNjb3VudDogSU1lbnVHcm91cCA9IHRoaXMubWVudUNvbmZpZ3VyYXRvclNlcnZpY2UuZmlsbFBlcnNvbmFsQWNjb3VudEl0ZW1zKHRoaXMuYXV0aGVudGljYXRlZCwgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNNZW51RnVsbCA9IG1lbnVCeVBlcm1pc3Npb25zICE9IG51bGwgJiYgcGVyc29uYWxBY2NvdW50ICE9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMubWVudS5zcGxpY2UoMCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW51QnlQZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnUucHVzaChtZW51QnlQZXJtaXNzaW9uc1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1lbnVNYXAuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLnBhcmVudE1hcC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMubWVudUl0ZW1NYXAuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLm1lbnVNYXAgPSBuZXcgTWFwPHN0cmluZywgSU1lbnVHcm91cD4oKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1lbnUubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgbGV0IG1lbnVHcm91cDogSU1lbnVHcm91cCA9IHRoaXMubWVudVtpXTtcclxuICAgICAgICAgICAgdGhpcy5tZW51TWFwLnNldChtZW51R3JvdXAua2V5LCBtZW51R3JvdXApO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtTWFwLnNldChtZW51R3JvdXAua2V5LCBtZW51R3JvdXApO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1lbnVHcm91cC5pdGVtcy5sZW5ndGg7ICsraikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1lbnVJdGVtOiBJTWVudUl0ZW0gPSBtZW51R3JvdXAuaXRlbXNbal07XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVNYXAuc2V0KG1lbnVJdGVtLmtleSwgbWVudUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50TWFwLnNldChtZW51SXRlbS5rZXksIG1lbnVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVJdGVtTWFwLnNldChtZW51SXRlbS5rZXksIG1lbnVJdGVtKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWVudUl0ZW0uaXRlbXMubGVuZ3RoOyArK2spIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbWVudUl0ZW0yOiBJTWVudUl0ZW0gPSBtZW51SXRlbS5pdGVtc1trXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE1hcC5zZXQobWVudUl0ZW0yLmtleSwgbWVudUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudUl0ZW1NYXAuc2V0KG1lbnVJdGVtMi5rZXksIG1lbnVJdGVtMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mYXFVcmwgPSB0aGlzLm1lbnVNYXAuZ2V0KE1lbnVIZWxwZXIuRkFRX01FTlVfS0VZKS51cmw7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGVyc29uYWxBY2NvdW50Lml0ZW1zLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIGxldCBtZW51SXRlbTogSU1lbnVJdGVtID0gcGVyc29uYWxBY2NvdW50Lml0ZW1zW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudE1hcC5zZXQobWVudUl0ZW0ua2V5LCBwZXJzb25hbEFjY291bnQpO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtTWFwLnNldChtZW51SXRlbS5rZXksIG1lbnVJdGVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudE1lbnVJdGVtS2V5ID0gTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNZW51R3JvdXBLZXkgPSB0aGlzLmdldEN1cnJlbnRNZW51R3JvdXBLZXkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEN1cnJlbnRNZW51R3JvdXBLZXkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWVudU1hcC5oYXMoTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVudU1hcC5nZXQoTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKSkua2V5O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25NZW51SXRlbVVwZGF0ZShuZXdNZW51SXRlbUtleTogc3RyaW5nLCBvbGRNZW51SXRlbUtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TWVudUl0ZW1LZXkgPSBuZXdNZW51SXRlbUtleTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNZW51R3JvdXBLZXkgPSB0aGlzLmdldEN1cnJlbnRNZW51R3JvdXBLZXkoKTtcclxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJzUGFnZU5hbWUgPSAnJzsgLy8gVE9ETzogcGVlciByZXZpZXdcclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoYW5nZUJvZHlDc3MoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ2xvZ2luJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdsb2dpbicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25IZWFkZXJVcGRhdGUocGFnZUhlYWRlcjogUGFnZUhlYWRlcikge1xyXG4gICAgICAgIHRoaXMuYnJlYWRjcnVtYnNQYWdlTmFtZSA9IHBhZ2VIZWFkZXIucGFnZU5hbWU7XHJcbiAgICAgICAgdGhpcy5icmVhZGNydW1ic1BhcmVudE5hbWUgPSBwYWdlSGVhZGVyLnBhcmVudE5hbWU7XHJcbiAgICAgICAgdGhpcy5icmVhZGNydW1ic1BhcmVudExpbmsgPSBwYWdlSGVhZGVyLnBhcmVudExpbms7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ05ldyBwYWdlIGhlYWRlcjogJyArIHRoaXMuYnJlYWRjcnVtYnNQYWdlTmFtZSk7XHJcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzSW5zaWRlU3BlY2lmaWNQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW5zaWRlQ291cnNlUGFnZSB8fCB0aGlzLmlzSW5zaWRlTGVhcm5pbmdQYXRoUGFnZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUlzSW5zaWRlU3BlY2lmaWNQYWdlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUlzSW5zaWRlQ291cnNlKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJc0luc2lkZUxlYXJuaW5nUGF0aCgpO1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS5pc0luc2lkZVNwZWNpZmljUGFnZXMgPSB0aGlzLmlzSW5zaWRlU3BlY2lmaWNQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXBkYXRlSXNJbnNpZGVTcGVjaWZpY1BhZ2VzKCk7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRNZW51SXRlbSA9IHRoaXMubWVudUl0ZW1NYXAuZ2V0KHRoaXMuY3VycmVudE1lbnVJdGVtS2V5KTtcclxuICAgICAgICBpZiAoIWN1cnJlbnRNZW51SXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzID0gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhhc093bkhvbWVJdGVtID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGluY2x1ZGVCcmVhZGNydW1ic1BhZ2VOYW1lID0gdHJ1ZTsgLy8gZmFsc2UgPSBkbyBub3QgaW5jbHVkZSBQYWdlSGVhZGVyLnBhZ2VOYW1lIGluIGJyZWFkY3J1bWJzXHJcbiAgICAgICAgbGV0IHRlbXBDdXJyZW50TWVudUl0ZW0gPSBjdXJyZW50TWVudUl0ZW07XHJcbiAgICAgICAgd2hpbGUgKHRoaXMucGFyZW50TWFwLmhhcyh0ZW1wQ3VycmVudE1lbnVJdGVtLmtleSkpIHtcclxuICAgICAgICAgICAgdGVtcEN1cnJlbnRNZW51SXRlbSA9IHRoaXMucGFyZW50TWFwLmdldCh0ZW1wQ3VycmVudE1lbnVJdGVtLmtleSk7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wQ3VycmVudE1lbnVJdGVtLmhhc093bkhvbWVJdGVtID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGhhc093bkhvbWVJdGVtID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGVtcEN1cnJlbnRNZW51SXRlbS5pbmNsdWRlQnJlYWRjcnVtYnNQYWdlTmFtZSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgaW5jbHVkZUJyZWFkY3J1bWJzUGFnZU5hbWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGJyZWFkY3J1bWJzOiBBcnJheTxJQnJlYWRjcnVtYj4gPSBbXTtcclxuICAgICAgICBpZiAoKHRoaXMuYnJlYWRjcnVtYnNQYXJlbnROYW1lID09IFwiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBjb3Vyc2UgZGV0YWlsc1wiIHx8IHRoaXMuYnJlYWRjcnVtYnNQYXJlbnROYW1lID09IFwiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBsZWFybmluZyBwYXRoIGRldGFpbHNcIikgJiYgdGhpcy5icmVhZGNydW1ic1BhZ2VOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnNQYWdlTmFtZSA9IHRoaXMuYnJlYWRjcnVtYnNQYXJlbnROYW1lO1xyXG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzUGFyZW50TmFtZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYnNQYWdlTmFtZSAmJiB0aGlzLmJyZWFkY3J1bWJzUGFnZU5hbWUgIT0gXCJcIiAmJiB0aGlzLmJyZWFkY3J1bWJzUGFnZU5hbWUgIT0gY3VycmVudE1lbnVJdGVtLm5hbWUgJiYgaW5jbHVkZUJyZWFkY3J1bWJzUGFnZU5hbWUpIHtcclxuICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmJyZWFkY3J1bWJzUGFnZU5hbWUsXHJcbiAgICAgICAgICAgICAgICB1cmw6IG51bGxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJyZWFkY3J1bWJzUGFyZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5icmVhZGNydW1ic1BhcmVudE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzLmJyZWFkY3J1bWJzUGFyZW50TGlua1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWRjcnVtYnMucHVzaCh7XHJcbiAgICAgICAgICAgIHRleHQ6IGN1cnJlbnRNZW51SXRlbS5uYW1lLFxyXG4gICAgICAgICAgICB1cmw6IGJyZWFkY3J1bWJzLmxlbmd0aCA+IDAgPyBjdXJyZW50TWVudUl0ZW0udXJsIDogbnVsbFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB3aGlsZSAodGhpcy5wYXJlbnRNYXAuaGFzKGN1cnJlbnRNZW51SXRlbS5rZXkpKSB7XHJcbiAgICAgICAgICAgIGxldCBwcmV2aW91c1VybDogc3RyaW5nID0gY3VycmVudE1lbnVJdGVtLnVybDtcclxuICAgICAgICAgICAgY3VycmVudE1lbnVJdGVtID0gdGhpcy5wYXJlbnRNYXAuZ2V0KGN1cnJlbnRNZW51SXRlbS5rZXkpO1xyXG4gICAgICAgICAgICBicmVhZGNydW1icy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IGN1cnJlbnRNZW51SXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBjdXJyZW50TWVudUl0ZW0uZHluYW1pY1VybCA/IHByZXZpb3VzVXJsIDogY3VycmVudE1lbnVJdGVtLnVybFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmVudE1lbnU6IGFueSA9IHRoaXMucGFyZW50TWFwLmdldChjdXJyZW50TWVudUl0ZW0ua2V5KTtcclxuICAgICAgICBpZiAoKHBhcmVudE1lbnUgJiYgcGFyZW50TWVudS5rZXkgPT09IE1lbnVIZWxwZXIuSE9NRV9JTkRFWF9LRVkpXHJcbiAgICAgICAgICAgIHx8IGN1cnJlbnRNZW51SXRlbS5rZXkgPT09IE1lbnVIZWxwZXIuSE9NRV9JTkRFWF9LRVkgfHwgYnJlYWRjcnVtYnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnMgPSBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnJlYWRjcnVtYnMgPSBicmVhZGNydW1icy5yZXZlcnNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbG9hZElmTmVlZGVkKG1lbnU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChtZW51ID09PSBcImNvdXJzZVwiICYmICEhdGhpcy5icmVhZGNydW1ic1BhcmVudExpbmspIHtcclxuICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChcInJlbG9hZC5jb3Vyc2UuZGV0YWlsc1wiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVJc0luc2lkZUNvdXJzZSgpIHtcclxuICAgICAgICBjb25zdCBwYXRoOiBzdHJpbmcgPSB0aGlzLiRsb2NhdGlvbi5wYXRoKCk7XHJcbiAgICAgICAgbGV0IHBhdGhTcGxpdDogc3RyaW5nW10gPSBwYXRoLnN1YnN0cmluZygxLCBwYXRoLmxlbmd0aCAtIDEpLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICB0aGlzLmlzSW5zaWRlQ291cnNlUGFnZSA9IHBhdGhTcGxpdFswXSA9PT0gTWVudUhlbHBlci5FRFVDQVRJT05fQ09VUlNFU19NRU5VX0tFWSAmJiAhaXNOYU4oK3BhdGhTcGxpdFsxXSkgJiYgcGF0aFNwbGl0Lmxlbmd0aCA9PT0gMjtcclxuICAgICAgICB0aGlzLmlzSW5zaWRlUXVpelBhZ2VzID0gcGF0aFNwbGl0WzBdID09PSBNZW51SGVscGVyLkVEVUNBVElPTl9RVUlaWkVTX01FTlVfS0VZO1xyXG4gICAgICAgIHRoaXMuaXNJbnNpZGVTdXJ2ZXlQYWdlcyA9IHBhdGhTcGxpdFswXSA9PT0gTWVudUhlbHBlci5FRFVDQVRJT05fU1VSVkVZU19NRU5VX0tFWTtcclxuICAgICAgICB0aGlzLmlzSW5zaWRlRmxhc2hjYXJkUGFnZXMgPSBwYXRoU3BsaXRbMF0gPT09IE1lbnVIZWxwZXIuRURVQ0FUSU9OX0ZMQVNIQ0FSRFNfTUVOVV9LRVk7XHJcbiAgICAgICAgdGhpcy5pc0luc2lkZUdhbWVzUGFnZXMgPSBwYXRoU3BsaXRbMV0gPT09ICdwcm9ncmFtJztcclxuICAgICAgICB0aGlzLmlzSW5zaWRlQ2F0YWxvZ1BhZ2VzID0gcGF0aFNwbGl0WzBdID09PSBNZW51SGVscGVyLkNBVEFMT0dfTUVOVV9LRVk7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLmlzSW5zaWRlQ291cnNlUGFnZSA9IHRoaXMuaXNJbnNpZGVDb3Vyc2VQYWdlO1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS5pc0luc2lkZVF1aXpQYWdlcyA9IHRoaXMuaXNJbnNpZGVRdWl6UGFnZXM7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLmlzSW5zaWRlU3VydmV5UGFnZXMgPSB0aGlzLmlzSW5zaWRlU3VydmV5UGFnZXM7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLmlzSW5zaWRlRmxhc2hjYXJkUGFnZXMgPSB0aGlzLmlzSW5zaWRlRmxhc2hjYXJkUGFnZXM7XHJcbiAgICAgICAgdGhpcy5pc0FsbENvdXJzZUluc2lkZVBhZ2UgPSBwYXRoLmluZGV4T2YoQ291cnNlc1JvdXRlci5pbmRleFJvdXRlKSA+PSAwO1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS5pc0FsbENvdXJzZUluc2lkZVBhZ2UgPSB0aGlzLmlzQWxsQ291cnNlSW5zaWRlUGFnZTtcclxuICAgICAgICB0aGlzLiRyb290U2NvcGUuaXNJbnNpZGVHYW1lc1BhZ2VzID0gdGhpcy5pc0luc2lkZUdhbWVzUGFnZXM7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLmlzSW5zaWRlQ2F0YWxvZ1BhZ2VzID0gdGhpcy5pc0luc2lkZUNhdGFsb2dQYWdlcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUlzSW5zaWRlTGVhcm5pbmdQYXRoKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBhdGg6IHN0cmluZyA9IHRoaXMuJGxvY2F0aW9uLnBhdGgoKTtcclxuICAgICAgICBsZXQgcGF0aFNwbGl0OiBzdHJpbmdbXSA9IHBhdGguc3Vic3RyaW5nKDEsIHBhdGgubGVuZ3RoKS5zcGxpdChcIi9cIik7XHJcblxyXG4gICAgICAgIGxldCBpc0hhc051bWJlckludG9QYXRoID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgcGF0aFN0cmluZyBvZiBwYXRoU3BsaXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOdW1lcmljKHBhdGhTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICBpc0hhc051bWJlckludG9QYXRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzSW5zaWRlTGVhcm5pbmdQYXRoUGFnZSA9IChwYXRoU3BsaXQuaW5kZXhPZihcImxlYXJuaW5nUGF0aHNcIikgIT0gLTEgJiYgaXNIYXNOdW1iZXJJbnRvUGF0aClcclxuICAgICAgICAgICAgfHwgKHBhdGhTcGxpdC5pbmRleE9mKFwibGVhcm5pbmdQYXRoc1wiKSAhPSAtMSAmJiBwYXRoU3BsaXQuaW5kZXhPZihcImNyZWF0ZVwiKSAhPSAtMSk7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLmlzSW5zaWRlTGVhcm5pbmdQYXRoUGFnZSA9IHRoaXMuaXNJbnNpZGVMZWFybmluZ1BhdGhQYWdlO1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS5pc0hpZGVNYWluQnJlYWRjcnVtYnMgPSB0aGlzLmlzSW5zaWRlTGVhcm5pbmdQYXRoUGFnZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTnVtZXJpYyhzdHIpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodHlwZW9mIHN0ciAhPSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2UgLy8gd2Ugb25seSBwcm9jZXNzIHN0cmluZ3MhXHJcbiAgICAgICAgcmV0dXJuICFpc05hTihzdHIpICYmIC8vIHVzZSB0eXBlIGNvZXJjaW9uIHRvIHBhcnNlIHRoZSBfZW50aXJldHlfIG9mIHRoZSBzdHJpbmcgKGBwYXJzZUZsb2F0YCBhbG9uZSBkb2VzIG5vdCBkbyB0aGlzKS4uLlxyXG4gICAgICAgICAgICAhaXNOYU4ocGFyc2VGbG9hdChzdHIpKSAvLyAuLi5hbmQgZW5zdXJlIHN0cmluZ3Mgb2Ygd2hpdGVzcGFjZSBmYWlsXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRSZXNpemVFdmVudExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRIZWFkZXJDb2xvcigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hhbmdlQ3VzdG9tQnJhbmRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hdXRoQXBpLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29sb3JGb3JIZWFkZXJCeVdpbmRvd1NpemUoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGYXZpY29uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb2xvckZvckhlYWRlckJ5V2luZG93U2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQodGhpcy4kd2luZG93KS5iaW5kKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRIZWFkZXJDb2xvcigpLCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0SGVhZGVyQ29sb3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEhlYWRlckNvbG9yKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyLmN1c3RvbUJyYW5kaW5nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiR3aW5kb3cuaW5uZXJXaWR0aCA8IDk5Mikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDb2xvciA9IHRoaXMuY3VycmVudFVzZXIuY3VzdG9tQnJhbmRpbmcubW9iaWxlQ29sb3I7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckNvbG9yID0gdGhpcy5jdXJyZW50VXNlci5jdXN0b21CcmFuZGluZy5jb2xvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuaGVhZGVyQ29sb3IgPSB0aGlzLmhlYWRlckNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoYW5nZUZhdmljb24oKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgb2xkTGluazogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImxpbmtbcmVsKj0naWNvbiddXCIpO1xyXG4gICAgICAgIGlmIChvbGRMaW5rKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQob2xkTGluayk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaWVWZXJzaW9uOiBudW1iZXI7XHJcbiAgICAgICAgY29uc3QgdWE6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgICAgIGNvbnN0IHRyaWRlbnQ6IG51bWJlciA9IHVhLmluZGV4T2YoJ1RyaWRlbnQvJyk7XHJcbiAgICAgICAgaWYgKHRyaWRlbnQgPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJ2OiBudW1iZXIgPSB1YS5pbmRleE9mKCdydjonKTtcclxuICAgICAgICAgICAgaWVWZXJzaW9uID0gcGFyc2VJbnQodWEuc3Vic3RyaW5nKHJ2ICsgMywgdWEuaW5kZXhPZignLicsIHJ2KSksIDEwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjdXN0b21GYXZpY29uID0gdGhpcy5jdXJyZW50VXNlci5jdXN0b21CcmFuZGluZy5mYXZpY29uO1xyXG4gICAgICAgIGNvbnN0IGxpbms6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcclxuICAgICAgICBsaW5rLnR5cGUgPSAnaW1hZ2UveC1pY29uJztcclxuICAgICAgICBsaW5rLnJlbCA9IGllVmVyc2lvbiA/ICdpY29uJyA6ICdzaG9ydGN1dCBpY29uJztcclxuICAgICAgICBsaW5rLmhyZWYgPSAhY3VzdG9tRmF2aWNvbiA/ICd0aGVtZXMvZGVmYXVsdC9pbWcvZmF2aWNvbi5pY28/dj1AQGJ1aWxkVmVyc2lvbicgOiBjdXN0b21GYXZpY29uO1xyXG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvUHJpdmFjeVBvbGljeSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5wb2xpY2llc1JvdXRlci5wcml2YWN5UG9saWN5VXJsKCkpO1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5zY3JvbGwoMCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9Db29raWVQb2xpY3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucG9saWNpZXNSb3V0ZXIuY29va2llUG9saWN5VXJsKCkpO1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5zY3JvbGwoMCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9UZXJtc09mVXNlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnBvbGljaWVzUm91dGVyLnRlcm1zT2ZVc2VVcmwoKSk7XHJcbiAgICAgICAgdGhpcy4kd2luZG93LnNjcm9sbCgwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0Fib3V0VXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVkaXJlY3RBYm91dFVzUGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLiR3aW5kb3cub3Blbih0aGlzLnJlZGlyZWN0QWJvdXRVc1BhZ2UsICdfYmxhbmsnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5pbmZvUm91dGVyLmFib3V0Q29tcGFueVVybCgpKTtcclxuICAgICAgICAgICAgdGhpcy4kd2luZG93LnNjcm9sbCgwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9NeVByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucGVyc29uYWxSb3V0ZXIuc2V0dGluZ3NVcmwoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYXV0aFJvdXRlci5sb2dvblVybCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4kd2luZG93LnNjcm9sbCgwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0FjY2Vzc2liaWxpdHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuaW5mb1JvdXRlci5hY2Nlc3NpYmlsaXR5VXJsKCkpO1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5zY3JvbGwoMCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENsYXNzRm9yTWVudShrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgY2FzZSBNZW51SGVscGVyLkVEVUNBVElPTl9DT1VSU0VTX01FTlVfS0VZOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2aHMtaW1hZ2VfX2NvdXJzZVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgTWVudUhlbHBlci5FRFVDQVRJT05fTEVBUk5JTkdfUEFUSFNfTUVOVV9LRVk6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcInZocy1pbWFnZV9fbGVhcm5pbmctcGF0aFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgTWVudUhlbHBlci5GQVFfTUVOVV9LRVk6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcInZocy1pbWFnZV9faGVscFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgTWVudUhlbHBlci5DQVRBTE9HX01FTlVfS0VZOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Zocy1pbWFnZV9fY2F0YWxvZyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBNZW51SGVscGVyLkhPTUVfSU5ERVhfS0VZOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Zocy1pbWFnZV9faG9tZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEljb25Gb3JMb2dvdXQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9XCJmYXEtbWVudS1rZXlcIiB3aWR0aD0yMFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyMCAxOFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHN0eWxlPVwid2lkdGg6MTAwJVwiPlxcbicgK1xyXG4gICAgICAgICAgICAnPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTAuNTEyNjM0IDAuOUMwLjUxMjYzNCAwLjQwMjk0NCAwLjkwODU1MSAwIDEuMzk2OTQgMEgxMS40MDIyQzExLjg5MDYgMCAxMi4yODY1IDAuNDAyOTQ0IDEyLjI4NjUgMC45VjguMUgxNS4zMDc3TDEzLjkzMzEgNi41Njk3OUMxMy42MDM1IDYuMjAyOTUgMTMuNjI4NiA1LjYzMzY3IDEzLjk4OSA1LjI5ODI3QzE0LjM0OTUgNC45NjI4OCAxNC45MDg4IDQuOTg4MzcgMTUuMjM4NCA1LjM1NTIxTDE4LjUxMjYgOUwxNS4yMzg0IDEyLjY0NDhDMTQuOTA4OCAxMy4wMTE2IDE0LjM0OTUgMTMuMDM3MSAxMy45ODkgMTIuNzAxN0MxMy42Mjg2IDEyLjM2NjMgMTMuNjAzNSAxMS43OTcgMTMuOTMzMSAxMS40MzAyTDE1LjMwNzcgOS45SDEyLjI4NjVWMTcuMUMxMi4yODY1IDE3LjU5NzEgMTEuODkwNiAxOCAxMS40MDIyIDE4SDEuMzk2OTRDMC45MDg1NTEgMTggMC41MTI2MzQgMTcuNTk3MSAwLjUxMjYzNCAxNy4xVjAuOVpNMTAuNTE3OSA4LjFIOS4xMjgyOUM4LjYzOTkxIDguMSA4LjI0Mzk5IDguNTAyOTQgOC4yNDM5OSA5QzguMjQzOTkgOS40OTcwNiA4LjYzOTkxIDkuOSA5LjEyODI5IDkuOUgxMC41MTc5VjE2LjJIMi4yODEyNFYxLjhIMTAuNTE3OVY4LjFaXCIgc3Ryb2tlPVwiYmxhY2tcIiBzdHJva2Utd2lkdGg9XCIwXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxcbicgK1xyXG4gICAgICAgICAgICAnPC9zdmc+JztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SWNvbkZvck1lbnUoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgTWVudUhlbHBlci5FRFVDQVRJT05fQ09VUlNFU19NRU5VX0tFWToge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPVwiY291cnNlcy1tZW51LXN2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjAgMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHBhdGggZD1cIk0xMCAxN0MxMCAxNyAxMCAzIDEwIDNNMTAgMTdDMTAgMTcgOC4wMDAwMSAxNSA2IDE1QzMuOTk5OTkgMTUgMSAxNyAxIDE3QzEgMTcgMSAzIDEgM0MxIDMgNCAxIDYgMUM4IDEgMTAgMyAxMCAzTTEwIDE3QzEwIDE3IDEyIDE1IDE0IDE1QzE2IDE1IDE5IDE3IDE5IDE3QzE5IDE3IDE5IDMgMTkgM0MxOSAzIDE2IDEgMTQgMUMxMiAxIDEwIDMgMTAgM1wiIHN0cm9rZT1cImJsYWNrXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9zdmc+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIE1lbnVIZWxwZXIuRURVQ0FUSU9OX0xFQVJOSU5HX1BBVEhTX01FTlVfS0VZOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJzxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxcbicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8cGF0aCBkPVwiTTYgM0M2IDEuODk1NDMgNi44OTU0MyAxIDggMUM5LjEwNDU3IDEgMTAgMS44OTU0MyAxMCAzVjVIMTVWMTBIMTdDMTguMTA0NiAxMCAxOSAxMC44OTU0IDE5IDEyQzE5IDEzLjEwNDYgMTguMTA0NiAxNCAxNyAxNEgxNVYxOUgxMFYxN0MxMCAxNS44OTU0IDkuMTA0NTcgMTUgOCAxNUM2Ljg5NTQzIDE1IDYgMTUuODk1NCA2IDE3VjE5SDFWMTRIM0M0LjEwNDU3IDE0IDUgMTMuMTA0NiA1IDEyQzUgMTAuODk1NCA0LjEwNDU3IDEwIDMgMTBIMVY1SDZWM1pcIiBzdHJva2U9XCJibGFja1wiIHN0cm9rZS13aWR0aD1cIjJcIi8+XFxuJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvc3ZnPic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBNZW51SGVscGVyLkZBUV9NRU5VX0tFWToge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPVwiZmFxLW1lbnUta2V5XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiIHZpZXdCb3g9XCIwIDAgMjAgMjFcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjBcIj5cXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHBhdGggZD1cIk0xOSA5LjQwODAySDE3VjExLjQwOEgxOVY5LjQwODAyWk0xNCAxMi40MDhWMTQuNDA4SDE2VjEyLjQwOEgxNFpNMjAgMTQuNDA4VjEwLjQwOEgxOFYxNC40MDhIMjBaTTIwIDEwLjQwOEMyMCA0Ljg4NTE3IDE1LjUyMjggMC40MDgwMiAxMCAwLjQwODAyVjIuNDA4MDJDMTQuNDE4MyAyLjQwODAyIDE4IDUuOTg5NzQgMTggMTAuNDA4SDIwWk0xMCAwLjQwODAyQzQuNDc3MTUgMC40MDgwMiAwIDQuODg1MTcgMCAxMC40MDhIMkMyIDUuOTg5NzQgNS41ODE3MiAyLjQwODAyIDEwIDIuNDA4MDJWMC40MDgwMlpNMCAxMC40MDhWMTQuNDA4SDJWMTAuNDA4SDBaTTYgMTQuNDA4VjEyLjQwOEg0VjE0LjQwOEg2Wk0zIDkuNDA4MDJIMVYxMS40MDhIM1Y5LjQwODAyWk02IDEyLjQwOEM2IDEwLjc1MTIgNC42NTY4NSA5LjQwODAyIDMgOS40MDgwMlYxMS40MDhDMy41NTIyOCAxMS40MDggNCAxMS44NTU3IDQgMTIuNDA4SDZaTTMgMTcuNDA4QzQuNjU2ODUgMTcuNDA4IDYgMTYuMDY0OSA2IDE0LjQwOEg0QzQgMTQuOTYwMyAzLjU1MjI4IDE1LjQwOCAzIDE1LjQwOFYxNy40MDhaTTE3IDE3LjQwOEMxOC42NTY5IDE3LjQwOCAyMCAxNi4wNjQ5IDIwIDE0LjQwOEgxOEMxOCAxNC45NjAzIDE3LjU1MjMgMTUuNDA4IDE3IDE1LjQwOFYxNy40MDhaTTAgMTQuNDA4QzAgMTYuMDY0OSAxLjM0MzE1IDE3LjQwOCAzIDE3LjQwOFYxNS40MDhDMi40NDc3MiAxNS40MDggMiAxNC45NjAzIDIgMTQuNDA4SDBaTTE0IDE0LjQwOEMxNCAxNi4wNjQ5IDE1LjM0MzEgMTcuNDA4IDE3IDE3LjQwOFYxNS40MDhDMTYuNDQ3NyAxNS40MDggMTYgMTQuOTYwMyAxNiAxNC40MDhIMTRaTTE3IDkuNDA4MDJDMTUuMzQzMSA5LjQwODAyIDE0IDEwLjc1MTIgMTQgMTIuNDA4SDE2QzE2IDExLjg1NTcgMTYuNDQ3NyAxMS40MDggMTcgMTEuNDA4VjkuNDA4MDJaTTE4IDEyLjQwOFYxNi40MDhIMjBWMTIuNDA4SDE4Wk0xOSAxNi40MDhDMTggMTYuNDA4IDE4IDE2LjQwNzcgMTggMTYuNDA3NEMxOCAxNi40MDczIDE4IDE2LjQwNyAxOCAxNi40MDY4QzE4IDE2LjQwNjUgMTggMTYuNDA2MiAxOCAxNi40MDU5QzE4IDE2LjQwNTQgMTggMTYuNDA1MSAxOCAxNi40MDQ5QzE4IDE2LjQwNDYgMTggMTYuNDA0OSAxOCAxNi40MDU5QzE4IDE2LjQwNzkgMTcuOTk5OSAxNi40MTI1IDE3Ljk5OTggMTYuNDE5NUMxNy45OTk0IDE2LjQzMzYgMTcuOTk4NyAxNi40NTc0IDE3Ljk5NzIgMTYuNDg5NEMxNy45OTQyIDE2LjU1MzYgMTcuOTg3OCAxNi42NDk2IDE3Ljk3NDkgMTYuNzY2M0MxNy45NDg0IDE3LjAwNDkgMTcuODk2OCAxNy4zMDU0IDE3LjgwMTMgMTcuNTkxOEMxNy41OTQ5IDE4LjIxMTEgMTcuMzM1NyAxOC40MDggMTcgMTguNDA4VjIwLjQwOEMxOC42NjQzIDIwLjQwOCAxOS40MDUxIDE5LjEwNDkgMTkuNjk4NyAxOC4yMjQyQzE5Ljg1MzIgMTcuNzYwNiAxOS45MjY2IDE3LjMxMTIgMTkuOTYyNiAxNi45ODcyQzE5Ljk4MDkgMTYuODIyNyAxOS45OTAyIDE2LjY4NDMgMTkuOTk1IDE2LjU4NDVDMTkuOTk3MyAxNi41MzQ1IDE5Ljk5ODYgMTYuNDkzOCAxOS45OTkzIDE2LjQ2MzlDMTkuOTk5NiAxNi40NDkgMTkuOTk5OCAxNi40MzY4IDE5Ljk5OTkgMTYuNDI3NEMxOS45OTk5IDE2LjQyMjcgMjAgMTYuNDE4NyAyMCAxNi40MTU1QzIwIDE2LjQxMzkgMjAgMTYuNDEyNCAyMCAxNi40MTEyQzIwIDE2LjQxMDYgMjAgMTYuNDEgMjAgMTYuNDA5NUMyMCAxNi40MDkyIDIwIDE2LjQwODggMjAgMTYuNDA4N0MyMCAxNi40MDg0IDIwIDE2LjQwOCAxOSAxNi40MDhaTTE3IDE4LjQwOEMxNi45OTYxIDE4LjQwOCAxNi45OTIyIDE4LjQwOCAxNi45ODgzIDE4LjQwOEMxNi45ODQ0IDE4LjQwOCAxNi45ODA0IDE4LjQwOCAxNi45NzY1IDE4LjQwOEMxNi45NzI2IDE4LjQwOCAxNi45Njg3IDE4LjQwOCAxNi45NjQ3IDE4LjQwOEMxNi45NjA4IDE4LjQwOCAxNi45NTY5IDE4LjQwOCAxNi45NTI5IDE4LjQwOEMxNi45NDkgMTguNDA4IDE2Ljk0NTEgMTguNDA4IDE2Ljk0MTEgMTguNDA4QzE2LjkzNzIgMTguNDA4IDE2LjkzMzIgMTguNDA4IDE2LjkyOTMgMTguNDA4QzE2LjkyNTMgMTguNDA4IDE2LjkyMTQgMTguNDA4IDE2LjkxNzQgMTguNDA4QzE2LjkxMzUgMTguNDA4IDE2LjkwOTUgMTguNDA4IDE2LjkwNTUgMTguNDA4QzE2LjkwMTYgMTguNDA4IDE2Ljg5NzYgMTguNDA4IDE2Ljg5MzYgMTguNDA4QzE2Ljg4OTcgMTguNDA4IDE2Ljg4NTcgMTguNDA4IDE2Ljg4MTcgMTguNDA4QzE2Ljg3NzcgMTguNDA4IDE2Ljg3MzcgMTguNDA4IDE2Ljg2OTcgMTguNDA4QzE2Ljg2NTggMTguNDA4IDE2Ljg2MTggMTguNDA4IDE2Ljg1NzggMTguNDA4QzE2Ljg1MzggMTguNDA4IDE2Ljg0OTggMTguNDA4IDE2Ljg0NTggMTguNDA4QzE2Ljg0MTggMTguNDA4IDE2LjgzNzggMTguNDA4IDE2LjgzMzggMTguNDA4QzE2LjgyOTggMTguNDA4IDE2LjgyNTggMTguNDA4IDE2LjgyMTcgMTguNDA4QzE2LjgxNzcgMTguNDA4IDE2LjgxMzcgMTguNDA4IDE2LjgwOTcgMTguNDA4QzE2LjgwNTcgMTguNDA4IDE2LjgwMTYgMTguNDA4IDE2Ljc5NzYgMTguNDA4QzE2Ljc5MzYgMTguNDA4IDE2Ljc4OTYgMTguNDA4IDE2Ljc4NTUgMTguNDA4QzE2Ljc4MTUgMTguNDA4IDE2Ljc3NzUgMTguNDA4IDE2Ljc3MzQgMTguNDA4QzE2Ljc2OTQgMTguNDA4IDE2Ljc2NTMgMTguNDA4IDE2Ljc2MTMgMTguNDA4QzE2Ljc1NzIgMTguNDA4IDE2Ljc1MzIgMTguNDA4IDE2Ljc0OTEgMTguNDA4QzE2Ljc0NTEgMTguNDA4IDE2Ljc0MSAxOC40MDggMTYuNzM3IDE4LjQwOEMxNi43MzI5IDE4LjQwOCAxNi43Mjg4IDE4LjQwOCAxNi43MjQ4IDE4LjQwOEMxNi43MjA3IDE4LjQwOCAxNi43MTY2IDE4LjQwOCAxNi43MTI2IDE4LjQwOEMxNi43MDg1IDE4LjQwOCAxNi43MDQ0IDE4LjQwOCAxNi43MDAzIDE4LjQwOEMxNi42OTYzIDE4LjQwOCAxNi42OTIyIDE4LjQwOCAxNi42ODgxIDE4LjQwOEMxNi42ODQgMTguNDA4IDE2LjY3OTkgMTguNDA4IDE2LjY3NTggMTguNDA4QzE2LjY3MTcgMTguNDA4IDE2LjY2NzcgMTguNDA4IDE2LjY2MzYgMTguNDA4QzE2LjY1OTUgMTguNDA4IDE2LjY1NTQgMTguNDA4IDE2LjY1MTMgMTguNDA4QzE2LjY0NzIgMTguNDA4IDE2LjY0MzEgMTguNDA4IDE2LjYzODkgMTguNDA4QzE2LjYzNDggMTguNDA4IDE2LjYzMDcgMTguNDA4IDE2LjYyNjYgMTguNDA4QzE2LjYyMjUgMTguNDA4IDE2LjYxODQgMTguNDA4IDE2LjYxNDMgMTguNDA4QzE2LjYxMDEgMTguNDA4IDE2LjYwNiAxOC40MDggMTYuNjAxOSAxOC40MDhDMTYuNTk3OCAxOC40MDggMTYuNTkzNiAxOC40MDggMTYuNTg5NSAxOC40MDhDMTYuNTg1NCAxOC40MDggMTYuNTgxMiAxOC40MDggMTYuNTc3MSAxOC40MDhDMTYuNTczIDE4LjQwOCAxNi41Njg4IDE4LjQwOCAxNi41NjQ3IDE4LjQwOEMxNi41NjA1IDE4LjQwOCAxNi41NTY0IDE4LjQwOCAxNi41NTIyIDE4LjQwOEMxNi41NDgxIDE4LjQwOCAxNi41NDQgMTguNDA4IDE2LjUzOTggMTguNDA4QzE2LjUzNTYgMTguNDA4IDE2LjUzMTUgMTguNDA4IDE2LjUyNzMgMTguNDA4QzE2LjUyMzIgMTguNDA4IDE2LjUxOSAxOC40MDggMTYuNTE0OCAxOC40MDhDMTYuNTEwNyAxOC40MDggMTYuNTA2NSAxOC40MDggMTYuNTAyMyAxOC40MDhDMTYuNDk4MiAxOC40MDggMTYuNDk0IDE4LjQwOCAxNi40ODk4IDE4LjQwOEMxNi40ODU3IDE4LjQwOCAxNi40ODE1IDE4LjQwOCAxNi40NzczIDE4LjQwOEMxNi40NzMxIDE4LjQwOCAxNi40Njg5IDE4LjQwOCAxNi40NjQ4IDE4LjQwOEMxNi40NjA2IDE4LjQwOCAxNi40NTY0IDE4LjQwOCAxNi40NTIyIDE4LjQwOEMxNi40NDggMTguNDA4IDE2LjQ0MzggMTguNDA4IDE2LjQzOTYgMTguNDA4QzE2LjQzNTQgMTguNDA4IDE2LjQzMTIgMTguNDA4IDE2LjQyNyAxOC40MDhDMTYuNDIyOCAxOC40MDggMTYuNDE4NiAxOC40MDggMTYuNDE0NCAxOC40MDhDMTYuNDEwMiAxOC40MDggMTYuNDA2IDE4LjQwOCAxNi40MDE4IDE4LjQwOEMxNi4zOTc2IDE4LjQwOCAxNi4zOTM0IDE4LjQwOCAxNi4zODkyIDE4LjQwOEMxNi4zODUgMTguNDA4IDE2LjM4MDcgMTguNDA4IDE2LjM3NjUgMTguNDA4QzE2LjM3MjMgMTguNDA4IDE2LjM2ODEgMTguNDA4IDE2LjM2MzkgMTguNDA4QzE2LjM1OTYgMTguNDA4IDE2LjM1NTQgMTguNDA4IDE2LjM1MTIgMTguNDA4QzE2LjM0NyAxOC40MDggMTYuMzQyNyAxOC40MDggMTYuMzM4NSAxOC40MDhDMTYuMzM0MyAxOC40MDggMTYuMzMgMTguNDA4IDE2LjMyNTggMTguNDA4QzE2LjMyMTYgMTguNDA4IDE2LjMxNzMgMTguNDA4IDE2LjMxMzEgMTguNDA4QzE2LjMwODkgMTguNDA4IDE2LjMwNDYgMTguNDA4IDE2LjMwMDQgMTguNDA4QzE2LjI5NjEgMTguNDA4IDE2LjI5MTkgMTguNDA4IDE2LjI4NzYgMTguNDA4QzE2LjI4MzQgMTguNDA4IDE2LjI3OTEgMTguNDA4IDE2LjI3NDkgMTguNDA4QzE2LjI3MDYgMTguNDA4IDE2LjI2NjQgMTguNDA4IDE2LjI2MjEgMTguNDA4QzE2LjI1NzkgMTguNDA4IDE2LjI1MzYgMTguNDA4IDE2LjI0OTMgMTguNDA4QzE2LjI0NTEgMTguNDA4IDE2LjI0MDggMTguNDA4IDE2LjIzNjUgMTguNDA4QzE2LjIzMjMgMTguNDA4IDE2LjIyOCAxOC40MDggMTYuMjIzNyAxOC40MDhDMTYuMjE5NSAxOC40MDggMTYuMjE1MiAxOC40MDggMTYuMjEwOSAxOC40MDhDMTYuMjA2NyAxOC40MDggMTYuMjAyNCAxOC40MDggMTYuMTk4MSAxOC40MDhDMTYuMTkzOCAxOC40MDggMTYuMTg5NiAxOC40MDggMTYuMTg1MyAxOC40MDhDMTYuMTgxIDE4LjQwOCAxNi4xNzY3IDE4LjQwOCAxNi4xNzI0IDE4LjQwOEMxNi4xNjgyIDE4LjQwOCAxNi4xNjM5IDE4LjQwOCAxNi4xNTk2IDE4LjQwOEMxNi4xNTUzIDE4LjQwOCAxNi4xNTEgMTguNDA4IDE2LjE0NjcgMTguNDA4QzE2LjE0MjQgMTguNDA4IDE2LjEzODEgMTguNDA4IDE2LjEzMzggMTguNDA4QzE2LjEyOTUgMTguNDA4IDE2LjEyNTIgMTguNDA4IDE2LjEyMDkgMTguNDA4QzE2LjExNjYgMTguNDA4IDE2LjExMjMgMTguNDA4IDE2LjEwOCAxOC40MDhDMTYuMTAzNyAxOC40MDggMTYuMDk5NCAxOC40MDggMTYuMDk1MSAxOC40MDhDMTYuMDkwOCAxOC40MDggMTYuMDg2NSAxOC40MDggMTYuMDgyMiAxOC40MDhDMTYuMDc3OSAxOC40MDggMTYuMDczNiAxOC40MDggMTYuMDY5MyAxOC40MDhDMTYuMDY1IDE4LjQwOCAxNi4wNjA3IDE4LjQwOCAxNi4wNTY0IDE4LjQwOEMxNi4wNTIgMTguNDA4IDE2LjA0NzcgMTguNDA4IDE2LjA0MzQgMTguNDA4QzE2LjAzOTEgMTguNDA4IDE2LjAzNDggMTguNDA4IDE2LjAzMDUgMTguNDA4QzE2LjAyNjEgMTguNDA4IDE2LjAyMTggMTguNDA4IDE2LjAxNzUgMTguNDA4QzE2LjAxMzIgMTguNDA4IDE2LjAwODggMTguNDA4IDE2LjAwNDUgMTguNDA4QzE2LjAwMDIgMTguNDA4IDE1Ljk5NTkgMTguNDA4IDE1Ljk5MTUgMTguNDA4QzE1Ljk4NzIgMTguNDA4IDE1Ljk4MjkgMTguNDA4IDE1Ljk3ODUgMTguNDA4QzE1Ljk3NDIgMTguNDA4IDE1Ljk2OTkgMTguNDA4IDE1Ljk2NTUgMTguNDA4QzE1Ljk2MTIgMTguNDA4IDE1Ljk1NjkgMTguNDA4IDE1Ljk1MjUgMTguNDA4QzE1Ljk0ODIgMTguNDA4IDE1Ljk0MzkgMTguNDA4IDE1LjkzOTUgMTguNDA4QzE1LjkzNTIgMTguNDA4IDE1LjkzMDggMTguNDA4IDE1LjkyNjUgMTguNDA4QzE1LjkyMjIgMTguNDA4IDE1LjkxNzggMTguNDA4IDE1LjkxMzUgMTguNDA4QzE1LjkwOTEgMTguNDA4IDE1LjkwNDggMTguNDA4IDE1LjkwMDQgMTguNDA4QzE1Ljg5NjEgMTguNDA4IDE1Ljg5MTcgMTguNDA4IDE1Ljg4NzQgMTguNDA4QzE1Ljg4MyAxOC40MDggMTUuODc4NyAxOC40MDggMTUuODc0MyAxOC40MDhDMTUuODcgMTguNDA4IDE1Ljg2NTYgMTguNDA4IDE1Ljg2MTMgMTguNDA4QzE1Ljg1NjkgMTguNDA4IDE1Ljg1MjYgMTguNDA4IDE1Ljg0ODIgMTguNDA4QzE1Ljg0MzkgMTguNDA4IDE1LjgzOTUgMTguNDA4IDE1LjgzNTEgMTguNDA4QzE1LjgzMDggMTguNDA4IDE1LjgyNjQgMTguNDA4IDE1LjgyMjEgMTguNDA4QzE1LjgxNzcgMTguNDA4IDE1LjgxMzMgMTguNDA4IDE1LjgwOSAxOC40MDhDMTUuODA0NiAxOC40MDggMTUuODAwMyAxOC40MDggMTUuNzk1OSAxOC40MDhDMTUuNzkxNSAxOC40MDggMTUuNzg3MiAxOC40MDggMTUuNzgyOCAxOC40MDhDMTUuNzc4NCAxOC40MDggMTUuNzc0MSAxOC40MDggMTUuNzY5NyAxOC40MDhDMTUuNzY1MyAxOC40MDggMTUuNzYxIDE4LjQwOCAxNS43NTY2IDE4LjQwOEMxNS43NTIyIDE4LjQwOCAxNS43NDc5IDE4LjQwOCAxNS43NDM1IDE4LjQwOEMxNS43MzkxIDE4LjQwOCAxNS43MzQ3IDE4LjQwOCAxNS43MzA0IDE4LjQwOEMxNS43MjYgMTguNDA4IDE1LjcyMTYgMTguNDA4IDE1LjcxNzIgMTguNDA4QzE1LjcxMjkgMTguNDA4IDE1LjcwODUgMTguNDA4IDE1LjcwNDEgMTguNDA4QzE1LjY5OTcgMTguNDA4IDE1LjY5NTQgMTguNDA4IDE1LjY5MSAxOC40MDhDMTUuNjg2NiAxOC40MDggMTUuNjgyMiAxOC40MDggMTUuNjc3OSAxOC40MDhDMTUuNjczNSAxOC40MDggMTUuNjY5MSAxOC40MDggMTUuNjY0NyAxOC40MDhDMTUuNjYwMyAxOC40MDggMTUuNjU2IDE4LjQwOCAxNS42NTE2IDE4LjQwOEMxNS42NDcyIDE4LjQwOCAxNS42NDI4IDE4LjQwOCAxNS42Mzg0IDE4LjQwOEMxNS42MzQxIDE4LjQwOCAxNS42Mjk3IDE4LjQwOCAxNS42MjUzIDE4LjQwOEMxNS42MjA5IDE4LjQwOCAxNS42MTY1IDE4LjQwOCAxNS42MTIxIDE4LjQwOEMxNS42MDc3IDE4LjQwOCAxNS42MDM0IDE4LjQwOCAxNS41OTkgMTguNDA4QzE1LjU5NDYgMTguNDA4IDE1LjU5MDIgMTguNDA4IDE1LjU4NTggMTguNDA4QzE1LjU4MTQgMTguNDA4IDE1LjU3NyAxOC40MDggMTUuNTcyNyAxOC40MDhDMTUuNTY4MyAxOC40MDggMTUuNTYzOSAxOC40MDggMTUuNTU5NSAxOC40MDhDMTUuNTU1MSAxOC40MDggMTUuNTUwNyAxOC40MDggMTUuNTQ2MyAxOC40MDhDMTUuNTQxOSAxOC40MDggMTUuNTM3NSAxOC40MDggMTUuNTMzMiAxOC40MDhDMTUuNTI4OCAxOC40MDggMTUuNTI0NCAxOC40MDggMTUuNTIgMTguNDA4QzE1LjUxNTYgMTguNDA4IDE1LjUxMTIgMTguNDA4IDE1LjUwNjggMTguNDA4QzE1LjUwMjQgMTguNDA4IDE1LjQ5OCAxOC40MDggMTUuNDkzNiAxOC40MDhDMTUuNDg5MiAxOC40MDggMTUuNDg0OCAxOC40MDggMTUuNDgwNSAxOC40MDhDMTUuNDc2MSAxOC40MDggMTUuNDcxNyAxOC40MDggMTUuNDY3MyAxOC40MDhDMTUuNDYyOSAxOC40MDggMTUuNDU4NSAxOC40MDggMTUuNDU0MSAxOC40MDhDMTUuNDQ5NyAxOC40MDggMTUuNDQ1MyAxOC40MDggMTUuNDQwOSAxOC40MDhDMTUuNDM2NSAxOC40MDggMTUuNDMyMSAxOC40MDggMTUuNDI3NyAxOC40MDhDMTUuNDIzMyAxOC40MDggMTUuNDE4OSAxOC40MDggMTUuNDE0NSAxOC40MDhDMTUuNDEwMiAxOC40MDggMTUuNDA1OCAxOC40MDggMTUuNDAxNCAxOC40MDhDMTUuMzk3IDE4LjQwOCAxNS4zOTI2IDE4LjQwOCAxNS4zODgyIDE4LjQwOEMxNS4zODM4IDE4LjQwOCAxNS4zNzk0IDE4LjQwOCAxNS4zNzUgMTguNDA4QzE1LjM3MDYgMTguNDA4IDE1LjM2NjIgMTguNDA4IDE1LjM2MTggMTguNDA4QzE1LjM1NzQgMTguNDA4IDE1LjM1MyAxOC40MDggMTUuMzQ4NiAxOC40MDhDMTUuMzQ0MiAxOC40MDggMTUuMzM5OCAxOC40MDggMTUuMzM1NSAxOC40MDhDMTUuMzMxMSAxOC40MDggMTUuMzI2NyAxOC40MDggMTUuMzIyMyAxOC40MDhDMTUuMzE3OSAxOC40MDggMTUuMzEzNSAxOC40MDggMTUuMzA5MSAxOC40MDhDMTUuMzA0NyAxOC40MDggMTUuMzAwMyAxOC40MDggMTUuMjk1OSAxOC40MDhDMTUuMjkxNSAxOC40MDggMTUuMjg3MSAxOC40MDggMTUuMjgyNyAxOC40MDhDMTUuMjc4MyAxOC40MDggMTUuMjczOSAxOC40MDggMTUuMjY5NSAxOC40MDhDMTUuMjY1MiAxOC40MDggMTUuMjYwOCAxOC40MDggMTUuMjU2NCAxOC40MDhDMTUuMjUyIDE4LjQwOCAxNS4yNDc2IDE4LjQwOCAxNS4yNDMyIDE4LjQwOEMxNS4yMzg4IDE4LjQwOCAxNS4yMzQ0IDE4LjQwOCAxNS4yMyAxOC40MDhDMTUuMjI1NiAxOC40MDggMTUuMjIxMiAxOC40MDggMTUuMjE2OCAxOC40MDhDMTUuMjEyNSAxOC40MDggMTUuMjA4MSAxOC40MDggMTUuMjAzNyAxOC40MDhDMTUuMTk5MyAxOC40MDggMTUuMTk0OSAxOC40MDggMTUuMTkwNSAxOC40MDhDMTUuMTg2MSAxOC40MDggMTUuMTgxNyAxOC40MDggMTUuMTc3MyAxOC40MDhDMTUuMTczIDE4LjQwOCAxNS4xNjg2IDE4LjQwOCAxNS4xNjQyIDE4LjQwOEMxNS4xNTk4IDE4LjQwOCAxNS4xNTU0IDE4LjQwOCAxNS4xNTEgMTguNDA4QzE1LjE0NjYgMTguNDA4IDE1LjE0MjMgMTguNDA4IDE1LjEzNzkgMTguNDA4QzE1LjEzMzUgMTguNDA4IDE1LjEyOTEgMTguNDA4IDE1LjEyNDcgMTguNDA4QzE1LjEyMDMgMTguNDA4IDE1LjExNTkgMTguNDA4IDE1LjExMTYgMTguNDA4QzE1LjEwNzIgMTguNDA4IDE1LjEwMjggMTguNDA4IDE1LjA5ODQgMTguNDA4QzE1LjA5NCAxOC40MDggMTUuMDg5NyAxOC40MDggMTUuMDg1MyAxOC40MDhDMTUuMDgwOSAxOC40MDggMTUuMDc2NSAxOC40MDggMTUuMDcyMSAxOC40MDhDMTUuMDY3OCAxOC40MDggMTUuMDYzNCAxOC40MDggMTUuMDU5IDE4LjQwOEMxNS4wNTQ2IDE4LjQwOCAxNS4wNTAzIDE4LjQwOCAxNS4wNDU5IDE4LjQwOEMxNS4wNDE1IDE4LjQwOCAxNS4wMzcxIDE4LjQwOCAxNS4wMzI4IDE4LjQwOEMxNS4wMjg0IDE4LjQwOCAxNS4wMjQgMTguNDA4IDE1LjAxOTYgMTguNDA4QzE1LjAxNTMgMTguNDA4IDE1LjAxMDkgMTguNDA4IDE1LjAwNjUgMTguNDA4QzE1LjAwMjEgMTguNDA4IDE0Ljk5NzggMTguNDA4IDE0Ljk5MzQgMTguNDA4QzE0Ljk4OSAxOC40MDggMTQuOTg0NyAxOC40MDggMTQuOTgwMyAxOC40MDhDMTQuOTc1OSAxOC40MDggMTQuOTcxNiAxOC40MDggMTQuOTY3MiAxOC40MDhDMTQuOTYyOCAxOC40MDggMTQuOTU4NSAxOC40MDggMTQuOTU0MSAxOC40MDhDMTQuOTQ5NyAxOC40MDggMTQuOTQ1NCAxOC40MDggMTQuOTQxIDE4LjQwOEMxNC45MzY3IDE4LjQwOCAxNC45MzIzIDE4LjQwOCAxNC45Mjc5IDE4LjQwOEMxNC45MjM2IDE4LjQwOCAxNC45MTkyIDE4LjQwOCAxNC45MTQ5IDE4LjQwOEMxNC45MTA1IDE4LjQwOCAxNC45MDYxIDE4LjQwOCAxNC45MDE4IDE4LjQwOEMxNC44OTc0IDE4LjQwOCAxNC44OTMxIDE4LjQwOCAxNC44ODg3IDE4LjQwOEMxNC44ODQ0IDE4LjQwOCAxNC44OCAxOC40MDggMTQuODc1NyAxOC40MDhDMTQuODcxMyAxOC40MDggMTQuODY3IDE4LjQwOCAxNC44NjI2IDE4LjQwOEMxNC44NTgzIDE4LjQwOCAxNC44NTM5IDE4LjQwOCAxNC44NDk2IDE4LjQwOEMxNC44NDUyIDE4LjQwOCAxNC44NDA5IDE4LjQwOCAxNC44MzY1IDE4LjQwOEMxNC44MzIyIDE4LjQwOCAxNC44Mjc4IDE4LjQwOCAxNC44MjM1IDE4LjQwOEMxNC44MTkyIDE4LjQwOCAxNC44MTQ4IDE4LjQwOCAxNC44MTA1IDE4LjQwOEMxNC44MDYxIDE4LjQwOCAxNC44MDE4IDE4LjQwOCAxNC43OTc1IDE4LjQwOEMxNC43OTMxIDE4LjQwOCAxNC43ODg4IDE4LjQwOCAxNC43ODQ1IDE4LjQwOEMxNC43ODAxIDE4LjQwOCAxNC43NzU4IDE4LjQwOCAxNC43NzE1IDE4LjQwOEMxNC43NjcxIDE4LjQwOCAxNC43NjI4IDE4LjQwOCAxNC43NTg1IDE4LjQwOEMxNC43NTQxIDE4LjQwOCAxNC43NDk4IDE4LjQwOCAxNC43NDU1IDE4LjQwOEMxNC43NDEyIDE4LjQwOCAxNC43MzY4IDE4LjQwOCAxNC43MzI1IDE4LjQwOEMxNC43MjgyIDE4LjQwOCAxNC43MjM5IDE4LjQwOCAxNC43MTk1IDE4LjQwOEMxNC43MTUyIDE4LjQwOCAxNC43MTA5IDE4LjQwOCAxNC43MDY2IDE4LjQwOEMxNC43MDIzIDE4LjQwOCAxNC42OTggMTguNDA4IDE0LjY5MzYgMTguNDA4QzE0LjY4OTMgMTguNDA4IDE0LjY4NSAxOC40MDggMTQuNjgwNyAxOC40MDhDMTQuNjc2NCAxOC40MDggMTQuNjcyMSAxOC40MDggMTQuNjY3OCAxOC40MDhDMTQuNjYzNSAxOC40MDggMTQuNjU5MiAxOC40MDggMTQuNjU0OSAxOC40MDhDMTQuNjUwNiAxOC40MDggMTQuNjQ2MyAxOC40MDggMTQuNjQyIDE4LjQwOEMxNC42Mzc3IDE4LjQwOCAxNC42MzM0IDE4LjQwOCAxNC42MjkxIDE4LjQwOEMxNC42MjQ4IDE4LjQwOCAxNC42MjA1IDE4LjQwOCAxNC42MTYyIDE4LjQwOEMxNC42MTE5IDE4LjQwOCAxNC42MDc2IDE4LjQwOCAxNC42MDMzIDE4LjQwOEMxNC41OTkgMTguNDA4IDE0LjU5NDcgMTguNDA4IDE0LjU5MDQgMTguNDA4QzE0LjU4NjEgMTguNDA4IDE0LjU4MTggMTguNDA4IDE0LjU3NzYgMTguNDA4QzE0LjU3MzMgMTguNDA4IDE0LjU2OSAxOC40MDggMTQuNTY0NyAxOC40MDhDMTQuNTYwNCAxOC40MDggMTQuNTU2MiAxOC40MDggMTQuNTUxOSAxOC40MDhDMTQuNTQ3NiAxOC40MDggMTQuNTQzMyAxOC40MDggMTQuNTM5MSAxOC40MDhDMTQuNTM0OCAxOC40MDggMTQuNTMwNSAxOC40MDggMTQuNTI2MyAxOC40MDhDMTQuNTIyIDE4LjQwOCAxNC41MTc3IDE4LjQwOCAxNC41MTM1IDE4LjQwOEMxNC41MDkyIDE4LjQwOCAxNC41MDQ5IDE4LjQwOCAxNC41MDA3IDE4LjQwOEMxNC40OTY0IDE4LjQwOCAxNC40OTIxIDE4LjQwOCAxNC40ODc5IDE4LjQwOEMxNC40ODM2IDE4LjQwOCAxNC40Nzk0IDE4LjQwOCAxNC40NzUxIDE4LjQwOEMxNC40NzA5IDE4LjQwOCAxNC40NjY2IDE4LjQwOCAxNC40NjI0IDE4LjQwOEMxNC40NTgxIDE4LjQwOCAxNC40NTM5IDE4LjQwOCAxNC40NDk2IDE4LjQwOEMxNC40NDU0IDE4LjQwOCAxNC40NDExIDE4LjQwOCAxNC40MzY5IDE4LjQwOEMxNC40MzI3IDE4LjQwOCAxNC40Mjg0IDE4LjQwOCAxNC40MjQyIDE4LjQwOEMxNC40MiAxOC40MDggMTQuNDE1NyAxOC40MDggMTQuNDExNSAxOC40MDhDMTQuNDA3MyAxOC40MDggMTQuNDAzIDE4LjQwOCAxNC4zOTg4IDE4LjQwOEMxNC4zOTQ2IDE4LjQwOCAxNC4zOTA0IDE4LjQwOCAxNC4zODYxIDE4LjQwOEMxNC4zODE5IDE4LjQwOCAxNC4zNzc3IDE4LjQwOCAxNC4zNzM1IDE4LjQwOEMxNC4zNjkzIDE4LjQwOCAxNC4zNjUgMTguNDA4IDE0LjM2MDggMTguNDA4QzE0LjM1NjYgMTguNDA4IDE0LjM1MjQgMTguNDA4IDE0LjM0ODIgMTguNDA4QzE0LjM0NCAxOC40MDggMTQuMzM5OCAxOC40MDggMTQuMzM1NiAxOC40MDhDMTQuMzMxNCAxOC40MDggMTQuMzI3MiAxOC40MDggMTQuMzIzIDE4LjQwOEMxNC4zMTg4IDE4LjQwOCAxNC4zMTQ2IDE4LjQwOCAxNC4zMTA0IDE4LjQwOEMxNC4zMDYyIDE4LjQwOCAxNC4zMDIgMTguNDA4IDE0LjI5NzggMTguNDA4QzE0LjI5MzYgMTguNDA4IDE0LjI4OTQgMTguNDA4IDE0LjI4NTIgMTguNDA4QzE0LjI4MTEgMTguNDA4IDE0LjI3NjkgMTguNDA4IDE0LjI3MjcgMTguNDA4QzE0LjI2ODUgMTguNDA4IDE0LjI2NDMgMTguNDA4IDE0LjI2MDIgMTguNDA4QzE0LjI1NiAxOC40MDggMTQuMjUxOCAxOC40MDggMTQuMjQ3NyAxOC40MDhDMTQuMjQzNSAxOC40MDggMTQuMjM5MyAxOC40MDggMTQuMjM1MiAxOC40MDhDMTQuMjMxIDE4LjQwOCAxNC4yMjY4IDE4LjQwOCAxNC4yMjI3IDE4LjQwOEMxNC4yMTg1IDE4LjQwOCAxNC4yMTQ0IDE4LjQwOCAxNC4yMTAyIDE4LjQwOEMxNC4yMDYgMTguNDA4IDE0LjIwMTkgMTguNDA4IDE0LjE5NzggMTguNDA4QzE0LjE5MzYgMTguNDA4IDE0LjE4OTUgMTguNDA4IDE0LjE4NTMgMTguNDA4QzE0LjE4MTIgMTguNDA4IDE0LjE3NyAxOC40MDggMTQuMTcyOSAxOC40MDhDMTQuMTY4OCAxOC40MDggMTQuMTY0NiAxOC40MDggMTQuMTYwNSAxOC40MDhDMTQuMTU2NCAxOC40MDggMTQuMTUyMiAxOC40MDggMTQuMTQ4MSAxOC40MDhDMTQuMTQ0IDE4LjQwOCAxNC4xMzk5IDE4LjQwOCAxNC4xMzU3IDE4LjQwOEMxNC4xMzE2IDE4LjQwOCAxNC4xMjc1IDE4LjQwOCAxNC4xMjM0IDE4LjQwOEMxNC4xMTkzIDE4LjQwOCAxNC4xMTUyIDE4LjQwOCAxNC4xMTExIDE4LjQwOEMxNC4xMDY5IDE4LjQwOCAxNC4xMDI4IDE4LjQwOCAxNC4wOTg3IDE4LjQwOEMxNC4wOTQ2IDE4LjQwOCAxNC4wOTA1IDE4LjQwOCAxNC4wODY0IDE4LjQwOEMxNC4wODIzIDE4LjQwOCAxNC4wNzgzIDE4LjQwOCAxNC4wNzQyIDE4LjQwOEMxNC4wNzAxIDE4LjQwOCAxNC4wNjYgMTguNDA4IDE0LjA2MTkgMTguNDA4QzE0LjA1NzggMTguNDA4IDE0LjA1MzcgMTguNDA4IDE0LjA0OTcgMTguNDA4QzE0LjA0NTYgMTguNDA4IDE0LjA0MTUgMTguNDA4IDE0LjAzNzQgMTguNDA4QzE0LjAzMzQgMTguNDA4IDE0LjAyOTMgMTguNDA4IDE0LjAyNTIgMTguNDA4QzE0LjAyMTIgMTguNDA4IDE0LjAxNzEgMTguNDA4IDE0LjAxMyAxOC40MDhDMTQuMDA5IDE4LjQwOCAxNC4wMDQ5IDE4LjQwOCAxNC4wMDA5IDE4LjQwOEMxMy45OTY4IDE4LjQwOCAxMy45OTI4IDE4LjQwOCAxMy45ODg3IDE4LjQwOEMxMy45ODQ3IDE4LjQwOCAxMy45ODA2IDE4LjQwOCAxMy45NzY2IDE4LjQwOEMxMy45NzI1IDE4LjQwOCAxMy45Njg1IDE4LjQwOCAxMy45NjQ1IDE4LjQwOEMxMy45NjA0IDE4LjQwOCAxMy45NTY0IDE4LjQwOCAxMy45NTI0IDE4LjQwOEMxMy45NDg0IDE4LjQwOCAxMy45NDQzIDE4LjQwOCAxMy45NDAzIDE4LjQwOEMxMy45MzYzIDE4LjQwOCAxMy45MzIzIDE4LjQwOCAxMy45MjgzIDE4LjQwOEMxMy45MjQyIDE4LjQwOCAxMy45MjAyIDE4LjQwOCAxMy45MTYyIDE4LjQwOEMxMy45MTIyIDE4LjQwOCAxMy45MDgyIDE4LjQwOCAxMy45MDQyIDE4LjQwOEMxMy45MDAyIDE4LjQwOCAxMy44OTYyIDE4LjQwOCAxMy44OTIyIDE4LjQwOEMxMy44ODgyIDE4LjQwOCAxMy44ODQyIDE4LjQwOCAxMy44ODAzIDE4LjQwOEMxMy44NzYzIDE4LjQwOCAxMy44NzIzIDE4LjQwOCAxMy44NjgzIDE4LjQwOEMxMy44NjQzIDE4LjQwOCAxMy44NjAzIDE4LjQwOCAxMy44NTY0IDE4LjQwOEMxMy44NTI0IDE4LjQwOCAxMy44NDg0IDE4LjQwOCAxMy44NDQ1IDE4LjQwOEMxMy44NDA1IDE4LjQwOCAxMy44MzY1IDE4LjQwOCAxMy44MzI2IDE4LjQwOEMxMy44Mjg2IDE4LjQwOCAxMy44MjQ3IDE4LjQwOCAxMy44MjA3IDE4LjQwOEMxMy44MTY4IDE4LjQwOCAxMy44MTI4IDE4LjQwOCAxMy44MDg5IDE4LjQwOEMxMy44MDQ5IDE4LjQwOCAxMy44MDEgMTguNDA4IDEzLjc5NzEgMTguNDA4QzEzLjc5MzEgMTguNDA4IDEzLjc4OTIgMTguNDA4IDEzLjc4NTMgMTguNDA4QzEzLjc4MTMgMTguNDA4IDEzLjc3NzQgMTguNDA4IDEzLjc3MzUgMTguNDA4QzEzLjc2OTYgMTguNDA4IDEzLjc2NTYgMTguNDA4IDEzLjc2MTcgMTguNDA4QzEzLjc1NzggMTguNDA4IDEzLjc1MzkgMTguNDA4IDEzLjc1IDE4LjQwOEMxMy43NDYxIDE4LjQwOCAxMy43NDIyIDE4LjQwOCAxMy43MzgzIDE4LjQwOEMxMy43MzQ0IDE4LjQwOCAxMy43MzA1IDE4LjQwOCAxMy43MjY2IDE4LjQwOEMxMy43MjI3IDE4LjQwOCAxMy43MTg4IDE4LjQwOCAxMy43MTQ5IDE4LjQwOEMxMy43MTExIDE4LjQwOCAxMy43MDcyIDE4LjQwOCAxMy43MDMzIDE4LjQwOEMxMy42OTk0IDE4LjQwOCAxMy42OTU2IDE4LjQwOCAxMy42OTE3IDE4LjQwOEMxMy42ODc4IDE4LjQwOCAxMy42ODQgMTguNDA4IDEzLjY4MDEgMTguNDA4QzEzLjY3NjIgMTguNDA4IDEzLjY3MjQgMTguNDA4IDEzLjY2ODUgMTguNDA4QzEzLjY2NDcgMTguNDA4IDEzLjY2MDggMTguNDA4IDEzLjY1NyAxOC40MDhDMTMuNjUzMiAxOC40MDggMTMuNjQ5MyAxOC40MDggMTMuNjQ1NSAxOC40MDhDMTMuNjQxNiAxOC40MDggMTMuNjM3OCAxOC40MDggMTMuNjM0IDE4LjQwOEMxMy42MzAyIDE4LjQwOCAxMy42MjYzIDE4LjQwOCAxMy42MjI1IDE4LjQwOEMxMy42MTg3IDE4LjQwOCAxMy42MTQ5IDE4LjQwOCAxMy42MTExIDE4LjQwOEMxMy42MDczIDE4LjQwOCAxMy42MDM1IDE4LjQwOCAxMy41OTk3IDE4LjQwOEMxMy41OTU5IDE4LjQwOCAxMy41OTIxIDE4LjQwOCAxMy41ODgzIDE4LjQwOEMxMy41ODQ1IDE4LjQwOCAxMy41ODA3IDE4LjQwOCAxMy41NzY5IDE4LjQwOEMxMy41NzMxIDE4LjQwOCAxMy41NjkzIDE4LjQwOCAxMy41NjU2IDE4LjQwOEMxMy41NjE4IDE4LjQwOCAxMy41NTggMTguNDA4IDEzLjU1NDIgMTguNDA4QzEzLjU1MDUgMTguNDA4IDEzLjU0NjcgMTguNDA4IDEzLjU0MjkgMTguNDA4QzEzLjUzOTIgMTguNDA4IDEzLjUzNTQgMTguNDA4IDEzLjUzMTcgMTguNDA4QzEzLjUyNzkgMTguNDA4IDEzLjUyNDIgMTguNDA4IDEzLjUyMDQgMTguNDA4QzEzLjUxNjcgMTguNDA4IDEzLjUxMyAxOC40MDggMTMuNTA5MiAxOC40MDhDMTMuNTA1NSAxOC40MDggMTMuNTAxOCAxOC40MDggMTMuNDk4IDE4LjQwOEMxMy40OTQzIDE4LjQwOCAxMy40OTA2IDE4LjQwOCAxMy40ODY5IDE4LjQwOEMxMy40ODMyIDE4LjQwOCAxMy40Nzk1IDE4LjQwOCAxMy40NzU4IDE4LjQwOEMxMy40NzIgMTguNDA4IDEzLjQ2ODMgMTguNDA4IDEzLjQ2NDYgMTguNDA4QzEzLjQ2MSAxOC40MDggMTMuNDU3MyAxOC40MDggMTMuNDUzNiAxOC40MDhDMTMuNDQ5OSAxOC40MDggMTMuNDQ2MiAxOC40MDggMTMuNDQyNSAxOC40MDhDMTMuNDM4OCAxOC40MDggMTMuNDM1MiAxOC40MDggMTMuNDMxNSAxOC40MDhDMTMuNDI3OCAxOC40MDggMTMuNDI0MiAxOC40MDggMTMuNDIwNSAxOC40MDhDMTMuNDE2OCAxOC40MDggMTMuNDEzMiAxOC40MDggMTMuNDA5NSAxOC40MDhDMTMuNDA1OSAxOC40MDggMTMuNDAyMiAxOC40MDggMTMuMzk4NiAxOC40MDhDMTMuMzk1IDE4LjQwOCAxMy4zOTEzIDE4LjQwOCAxMy4zODc3IDE4LjQwOEMxMy4zODQxIDE4LjQwOCAxMy4zODA0IDE4LjQwOCAxMy4zNzY4IDE4LjQwOEMxMy4zNzMyIDE4LjQwOCAxMy4zNjk2IDE4LjQwOCAxMy4zNjYgMTguNDA4QzEzLjM2MjQgMTguNDA4IDEzLjM1ODcgMTguNDA4IDEzLjM1NTEgMTguNDA4QzEzLjM1MTUgMTguNDA4IDEzLjM0NzkgMTguNDA4IDEzLjM0NDMgMTguNDA4QzEzLjM0MDggMTguNDA4IDEzLjMzNzIgMTguNDA4IDEzLjMzMzYgMTguNDA4QzEzLjMzIDE4LjQwOCAxMy4zMjY0IDE4LjQwOCAxMy4zMjI4IDE4LjQwOEMxMy4zMTkzIDE4LjQwOCAxMy4zMTU3IDE4LjQwOCAxMy4zMTIxIDE4LjQwOEMxMy4zMDg2IDE4LjQwOCAxMy4zMDUgMTguNDA4IDEzLjMwMTUgMTguNDA4QzEzLjI5NzkgMTguNDA4IDEzLjI5NDQgMTguNDA4IDEzLjI5MDggMTguNDA4QzEzLjI4NzMgMTguNDA4IDEzLjI4MzcgMTguNDA4IDEzLjI4MDIgMTguNDA4QzEzLjI3NjcgMTguNDA4IDEzLjI3MzEgMTguNDA4IDEzLjI2OTYgMTguNDA4QzEzLjI2NjEgMTguNDA4IDEzLjI2MjYgMTguNDA4IDEzLjI1OTEgMTguNDA4QzEzLjI1NTYgMTguNDA4IDEzLjI1MiAxOC40MDggMTMuMjQ4NSAxOC40MDhDMTMuMjQ1IDE4LjQwOCAxMy4yNDE1IDE4LjQwOCAxMy4yMzgxIDE4LjQwOEMxMy4yMzQ2IDE4LjQwOCAxMy4yMzExIDE4LjQwOCAxMy4yMjc2IDE4LjQwOEMxMy4yMjQxIDE4LjQwOCAxMy4yMjA2IDE4LjQwOCAxMy4yMTcyIDE4LjQwOEMxMy4yMTM3IDE4LjQwOCAxMy4yMTAyIDE4LjQwOCAxMy4yMDY4IDE4LjQwOEMxMy4yMDMzIDE4LjQwOCAxMy4xOTk4IDE4LjQwOCAxMy4xOTY0IDE4LjQwOEMxMy4xOTI5IDE4LjQwOCAxMy4xODk1IDE4LjQwOCAxMy4xODYxIDE4LjQwOEMxMy4xODI2IDE4LjQwOCAxMy4xNzkyIDE4LjQwOCAxMy4xNzU4IDE4LjQwOEMxMy4xNzIzIDE4LjQwOCAxMy4xNjg5IDE4LjQwOCAxMy4xNjU1IDE4LjQwOEMxMy4xNjIxIDE4LjQwOCAxMy4xNTg3IDE4LjQwOCAxMy4xNTUzIDE4LjQwOEMxMy4xNTE4IDE4LjQwOCAxMy4xNDg0IDE4LjQwOCAxMy4xNDUgMTguNDA4QzEzLjE0MTYgMTguNDA4IDEzLjEzODMgMTguNDA4IDEzLjEzNDkgMTguNDA4QzEzLjEzMTUgMTguNDA4IDEzLjEyODEgMTguNDA4IDEzLjEyNDcgMTguNDA4QzEzLjEyMTQgMTguNDA4IDEzLjExOCAxOC40MDggMTMuMTE0NiAxOC40MDhDMTMuMTExMyAxOC40MDggMTMuMTA3OSAxOC40MDggMTMuMTA0NiAxOC40MDhDMTMuMTAxMiAxOC40MDggMTMuMDk3OSAxOC40MDggMTMuMDk0NSAxOC40MDhDMTMuMDkxMiAxOC40MDggMTMuMDg3OCAxOC40MDggMTMuMDg0NSAxOC40MDhDMTMuMDgxMiAxOC40MDggMTMuMDc3OSAxOC40MDggMTMuMDc0NSAxOC40MDhDMTMuMDcxMiAxOC40MDggMTMuMDY3OSAxOC40MDggMTMuMDY0NiAxOC40MDhDMTMuMDYxMyAxOC40MDggMTMuMDU4IDE4LjQwOCAxMy4wNTQ3IDE4LjQwOEMxMy4wNTE0IDE4LjQwOCAxMy4wNDgxIDE4LjQwOCAxMy4wNDQ4IDE4LjQwOEMxMy4wNDE1IDE4LjQwOCAxMy4wMzgzIDE4LjQwOCAxMy4wMzUgMTguNDA4QzEzLjAzMTcgMTguNDA4IDEzLjAyODQgMTguNDA4IDEzLjAyNTIgMTguNDA4QzEzLjAyMTkgMTguNDA4IDEzLjAxODcgMTguNDA4IDEzLjAxNTQgMTguNDA4QzEzLjAxMjIgMTguNDA4IDEzLjAwODkgMTguNDA4IDEzLjAwNTcgMTguNDA4QzEzLjAwMjQgMTguNDA4IDEyLjk5OTIgMTguNDA4IDEyLjk5NiAxOC40MDhDMTIuOTkyOCAxOC40MDggMTIuOTg5NSAxOC40MDggMTIuOTg2MyAxOC40MDhDMTIuOTgzMSAxOC40MDggMTIuOTc5OSAxOC40MDggMTIuOTc2NyAxOC40MDhDMTIuOTczNSAxOC40MDggMTIuOTcwMyAxOC40MDggMTIuOTY3MSAxOC40MDhDMTIuOTYzOSAxOC40MDggMTIuOTYwNyAxOC40MDggMTIuOTU3NiAxOC40MDhDMTIuOTU0NCAxOC40MDggMTIuOTUxMiAxOC40MDggMTIuOTQ4IDE4LjQwOEMxMi45NDQ5IDE4LjQwOCAxMi45NDE3IDE4LjQwOCAxMi45Mzg2IDE4LjQwOEMxMi45MzU0IDE4LjQwOCAxMi45MzIzIDE4LjQwOCAxMi45MjkxIDE4LjQwOEMxMi45MjYgMTguNDA4IDEyLjkyMjggMTguNDA4IDEyLjkxOTcgMTguNDA4QzEyLjkxNjYgMTguNDA4IDEyLjkxMzUgMTguNDA4IDEyLjkxMDMgMTguNDA4QzEyLjkwNzIgMTguNDA4IDEyLjkwNDEgMTguNDA4IDEyLjkwMSAxOC40MDhDMTIuODk3OSAxOC40MDggMTIuODk0OCAxOC40MDggMTIuODkxNyAxOC40MDhDMTIuODg4NiAxOC40MDggMTIuODg1NSAxOC40MDggMTIuODgyNCAxOC40MDhDMTIuODc5NCAxOC40MDggMTIuODc2MyAxOC40MDggMTIuODczMiAxOC40MDhDMTIuODcwMiAxOC40MDggMTIuODY3MSAxOC40MDggMTIuODY0IDE4LjQwOEMxMi44NjEgMTguNDA4IDEyLjg1NzkgMTguNDA4IDEyLjg1NDkgMTguNDA4QzEyLjg1MTggMTguNDA4IDEyLjg0ODggMTguNDA4IDEyLjg0NTggMTguNDA4QzEyLjg0MjggMTguNDA4IDEyLjgzOTcgMTguNDA4IDEyLjgzNjcgMTguNDA4QzEyLjgzMzcgMTguNDA4IDEyLjgzMDcgMTguNDA4IDEyLjgyNzcgMTguNDA4QzEyLjgyNDcgMTguNDA4IDEyLjgyMTcgMTguNDA4IDEyLjgxODcgMTguNDA4QzEyLjgxNTcgMTguNDA4IDEyLjgxMjcgMTguNDA4IDEyLjgwOTcgMTguNDA4QzEyLjgwNjggMTguNDA4IDEyLjgwMzggMTguNDA4IDEyLjgwMDggMTguNDA4QzEyLjc5NzkgMTguNDA4IDEyLjc5NDkgMTguNDA4IDEyLjc5MTkgMTguNDA4QzEyLjc4OSAxOC40MDggMTIuNzg2IDE4LjQwOCAxMi43ODMxIDE4LjQwOEMxMi43ODAyIDE4LjQwOCAxMi43NzcyIDE4LjQwOCAxMi43NzQzIDE4LjQwOEMxMi43NzE0IDE4LjQwOCAxMi43Njg1IDE4LjQwOCAxMi43NjU2IDE4LjQwOEMxMi43NjI2IDE4LjQwOCAxMi43NTk3IDE4LjQwOCAxMi43NTY4IDE4LjQwOEMxMi43NTM5IDE4LjQwOCAxMi43NTEgMTguNDA4IDEyLjc0ODIgMTguNDA4QzEyLjc0NTMgMTguNDA4IDEyLjc0MjQgMTguNDA4IDEyLjczOTUgMTguNDA4QzEyLjczNjYgMTguNDA4IDEyLjczMzggMTguNDA4IDEyLjczMDkgMTguNDA4QzEyLjcyODEgMTguNDA4IDEyLjcyNTIgMTguNDA4IDEyLjcyMjQgMTguNDA4QzEyLjcxOTUgMTguNDA4IDEyLjcxNjcgMTguNDA4IDEyLjcxMzkgMTguNDA4QzEyLjcxMSAxOC40MDggMTIuNzA4MiAxOC40MDggMTIuNzA1NCAxOC40MDhDMTIuNzAyNiAxOC40MDggMTIuNjk5NyAxOC40MDggMTIuNjk2OSAxOC40MDhDMTIuNjk0MSAxOC40MDggMTIuNjkxMyAxOC40MDggMTIuNjg4NiAxOC40MDhDMTIuNjg1OCAxOC40MDggMTIuNjgzIDE4LjQwOCAxMi42ODAyIDE4LjQwOEMxMi42Nzc0IDE4LjQwOCAxMi42NzQ3IDE4LjQwOCAxMi42NzE5IDE4LjQwOEMxMi42NjkxIDE4LjQwOCAxMi42NjY0IDE4LjQwOCAxMi42NjM2IDE4LjQwOEMxMi42NjA5IDE4LjQwOCAxMi42NTgxIDE4LjQwOCAxMi42NTU0IDE4LjQwOEMxMi42NTI3IDE4LjQwOCAxMi42NDk5IDE4LjQwOCAxMi42NDcyIDE4LjQwOEMxMi42NDQ1IDE4LjQwOCAxMi42NDE4IDE4LjQwOCAxMi42MzkxIDE4LjQwOEMxMi42MzY0IDE4LjQwOCAxMi42MzM3IDE4LjQwOCAxMi42MzEgMTguNDA4QzEyLjYyODMgMTguNDA4IDEyLjYyNTYgMTguNDA4IDEyLjYyMjkgMTguNDA4QzEyLjYyMDIgMTguNDA4IDEyLjYxNzYgMTguNDA4IDEyLjYxNDkgMTguNDA4QzEyLjYxMjIgMTguNDA4IDEyLjYwOTYgMTguNDA4IDEyLjYwNjkgMTguNDA4QzEyLjYwNDMgMTguNDA4IDEyLjYwMTcgMTguNDA4IDEyLjU5OSAxOC40MDhDMTIuNTk2NCAxOC40MDggMTIuNTkzOCAxOC40MDggMTIuNTkxMSAxOC40MDhDMTIuNTg4NSAxOC40MDggMTIuNTg1OSAxOC40MDggMTIuNTgzMyAxOC40MDhDMTIuNTgwNyAxOC40MDggMTIuNTc4MSAxOC40MDggMTIuNTc1NSAxOC40MDhDMTIuNTcyOSAxOC40MDggMTIuNTcwMyAxOC40MDggMTIuNTY3NyAxOC40MDhDMTIuNTY1MiAxOC40MDggMTIuNTYyNiAxOC40MDggMTIuNTYgMTguNDA4QzEyLjU1NzUgMTguNDA4IDEyLjU1NDkgMTguNDA4IDEyLjU1MjQgMTguNDA4QzEyLjU0OTggMTguNDA4IDEyLjU0NzMgMTguNDA4IDEyLjU0NDggMTguNDA4QzEyLjU0MjIgMTguNDA4IDEyLjUzOTcgMTguNDA4IDEyLjUzNzIgMTguNDA4QzEyLjUzNDcgMTguNDA4IDEyLjUzMjIgMTguNDA4IDEyLjUyOTcgMTguNDA4QzEyLjUyNzIgMTguNDA4IDEyLjUyNDcgMTguNDA4IDEyLjUyMjIgMTguNDA4QzEyLjUxOTcgMTguNDA4IDEyLjUxNzIgMTguNDA4IDEyLjUxNDcgMTguNDA4QzEyLjUxMjMgMTguNDA4IDEyLjUwOTggMTguNDA4IDEyLjUwNzMgMTguNDA4QzEyLjUwNDkgMTguNDA4IDEyLjUwMjQgMTguNDA4IDEyLjUgMTguNDA4QzEyLjQ5NzYgMTguNDA4IDEyLjQ5NTEgMTguNDA4IDEyLjQ5MjcgMTguNDA4QzEyLjQ5MDMgMTguNDA4IDEyLjQ4NzkgMTguNDA4IDEyLjQ4NTQgMTguNDA4QzEyLjQ4MyAxOC40MDggMTIuNDgwNiAxOC40MDggMTIuNDc4MiAxOC40MDhDMTIuNDc1OCAxOC40MDggMTIuNDczNSAxOC40MDggMTIuNDcxMSAxOC40MDhDMTIuNDY4NyAxOC40MDggMTIuNDY2MyAxOC40MDggMTIuNDY0IDE4LjQwOEMxMi40NjE2IDE4LjQwOCAxMi40NTkyIDE4LjQwOCAxMi40NTY5IDE4LjQwOEMxMi40NTQ1IDE4LjQwOCAxMi40NTIyIDE4LjQwOCAxMi40NDk5IDE4LjQwOEMxMi40NDc1IDE4LjQwOCAxMi40NDUyIDE4LjQwOCAxMi40NDI5IDE4LjQwOEMxMi40NDA2IDE4LjQwOCAxMi40MzgzIDE4LjQwOCAxMi40MzYgMTguNDA4QzEyLjQzMzcgMTguNDA4IDEyLjQzMTQgMTguNDA4IDEyLjQyOTEgMTguNDA4QzEyLjQyNjggMTguNDA4IDEyLjQyNDUgMTguNDA4IDEyLjQyMjIgMTguNDA4QzEyLjQyIDE4LjQwOCAxMi40MTc3IDE4LjQwOCAxMi40MTU1IDE4LjQwOEMxMi40MTMyIDE4LjQwOCAxMi40MTEgMTguNDA4IDEyLjQwODcgMTguNDA4QzEyLjQwNjUgMTguNDA4IDEyLjQwNDMgMTguNDA4IDEyLjQwMiAxOC40MDhDMTIuMzk5OCAxOC40MDggMTIuMzk3NiAxOC40MDggMTIuMzk1NCAxOC40MDhDMTIuMzkzMiAxOC40MDggMTIuMzkxIDE4LjQwOCAxMi4zODg4IDE4LjQwOEMxMi4zODY2IDE4LjQwOCAxMi4zODQ0IDE4LjQwOCAxMi4zODIyIDE4LjQwOEMxMi4zODAxIDE4LjQwOCAxMi4zNzc5IDE4LjQwOCAxMi4zNzU4IDE4LjQwOEMxMi4zNzM2IDE4LjQwOCAxMi4zNzE0IDE4LjQwOCAxMi4zNjkzIDE4LjQwOEMxMi4zNjcyIDE4LjQwOCAxMi4zNjUgMTguNDA4IDEyLjM2MjkgMTguNDA4QzEyLjM2MDggMTguNDA4IDEyLjM1ODcgMTguNDA4IDEyLjM1NjYgMTguNDA4QzEyLjM1NDUgMTguNDA4IDEyLjM1MjQgMTguNDA4IDEyLjM1MDMgMTguNDA4QzEyLjM0ODIgMTguNDA4IDEyLjM0NjEgMTguNDA4IDEyLjM0NCAxOC40MDhDMTIuMzQxOSAxOC40MDggMTIuMzM5OSAxOC40MDggMTIuMzM3OCAxOC40MDhDMTIuMzM1OCAxOC40MDggMTIuMzMzNyAxOC40MDggMTIuMzMxNyAxOC40MDhDMTIuMzI5NiAxOC40MDggMTIuMzI3NiAxOC40MDggMTIuMzI1NiAxOC40MDhDMTIuMzIzNSAxOC40MDggMTIuMzIxNSAxOC40MDggMTIuMzE5NSAxOC40MDhDMTIuMzE3NSAxOC40MDggMTIuMzE1NSAxOC40MDggMTIuMzEzNSAxOC40MDhDMTIuMzExNSAxOC40MDggMTIuMzA5NSAxOC40MDggMTIuMzA3NiAxOC40MDhDMTIuMzA1NiAxOC40MDggMTIuMzAzNiAxOC40MDggMTIuMzAxNyAxOC40MDhDMTIuMjk5NyAxOC40MDggMTIuMjk3OCAxOC40MDggMTIuMjk1OCAxOC40MDhDMTIuMjkzOSAxOC40MDggMTIuMjkyIDE4LjQwOCAxMi4yOSAxOC40MDhDMTIuMjg4MSAxOC40MDggMTIuMjg2MiAxOC40MDggMTIuMjg0MyAxOC40MDhDMTIuMjgyNCAxOC40MDggMTIuMjgwNSAxOC40MDggMTIuMjc4NiAxOC40MDhDMTIuMjc2NyAxOC40MDggMTIuMjc0OCAxOC40MDggMTIuMjczIDE4LjQwOEMxMi4yNzExIDE4LjQwOCAxMi4yNjkyIDE4LjQwOCAxMi4yNjc0IDE4LjQwOEMxMi4yNjU1IDE4LjQwOCAxMi4yNjM3IDE4LjQwOCAxMi4yNjE4IDE4LjQwOEMxMi4yNiAxOC40MDggMTIuMjU4MiAxOC40MDggMTIuMjU2NCAxOC40MDhDMTIuMjU0NSAxOC40MDggMTIuMjUyNyAxOC40MDggMTIuMjUwOSAxOC40MDhDMTIuMjQ5MSAxOC40MDggMTIuMjQ3MyAxOC40MDggMTIuMjQ1NiAxOC40MDhDMTIuMjQzOCAxOC40MDggMTIuMjQyIDE4LjQwOCAxMi4yNDAyIDE4LjQwOEMxMi4yMzg1IDE4LjQwOCAxMi4yMzY3IDE4LjQwOCAxMi4yMzUgMTguNDA4QzEyLjIzMzIgMTguNDA4IDEyLjIzMTUgMTguNDA4IDEyLjIyOTcgMTguNDA4QzEyLjIyOCAxOC40MDggMTIuMjI2MyAxOC40MDggMTIuMjI0NiAxOC40MDhDMTIuMjIyOSAxOC40MDggMTIuMjIxMiAxOC40MDggMTIuMjE5NSAxOC40MDhDMTIuMjE3OCAxOC40MDggMTIuMjE2MSAxOC40MDggMTIuMjE0NCAxOC40MDhDMTIuMjEyNyAxOC40MDggMTIuMjExMSAxOC40MDggMTIuMjA5NCAxOC40MDhDMTIuMjA3OCAxOC40MDggMTIuMjA2MSAxOC40MDggMTIuMjA0NSAxOC40MDhDMTIuMjAyOCAxOC40MDggMTIuMjAxMiAxOC40MDggMTIuMTk5NiAxOC40MDhDMTIuMTk4IDE4LjQwOCAxMi4xOTYzIDE4LjQwOCAxMi4xOTQ3IDE4LjQwOEMxMi4xOTMxIDE4LjQwOCAxMi4xOTE1IDE4LjQwOCAxMi4xODk5IDE4LjQwOEMxMi4xODg0IDE4LjQwOCAxMi4xODY4IDE4LjQwOCAxMi4xODUyIDE4LjQwOEMxMi4xODM3IDE4LjQwOCAxMi4xODIxIDE4LjQwOCAxMi4xODA1IDE4LjQwOEMxMi4xNzkgMTguNDA4IDEyLjE3NzUgMTguNDA4IDEyLjE3NTkgMTguNDA4QzEyLjE3NDQgMTguNDA4IDEyLjE3MjkgMTguNDA4IDEyLjE3MTQgMTguNDA4QzEyLjE2OTkgMTguNDA4IDEyLjE2ODMgMTguNDA4IDEyLjE2NjkgMTguNDA4QzEyLjE2NTQgMTguNDA4IDEyLjE2MzkgMTguNDA4IDEyLjE2MjQgMTguNDA4QzEyLjE2MDkgMTguNDA4IDEyLjE1OTUgMTguNDA4IDEyLjE1OCAxOC40MDhDMTIuMTU2NSAxOC40MDggMTIuMTU1MSAxOC40MDggMTIuMTUzNyAxOC40MDhDMTIuMTUyMiAxOC40MDggMTIuMTUwOCAxOC40MDggMTIuMTQ5NCAxOC40MDhDMTIuMTQ4IDE4LjQwOCAxMi4xNDY2IDE4LjQwOCAxMi4xNDUyIDE4LjQwOEMxMi4xNDM4IDE4LjQwOCAxMi4xNDI0IDE4LjQwOCAxMi4xNDEgMTguNDA4QzEyLjEzOTYgMTguNDA4IDEyLjEzODIgMTguNDA4IDEyLjEzNjkgMTguNDA4QzEyLjEzNTUgMTguNDA4IDEyLjEzNDIgMTguNDA4IDEyLjEzMjggMTguNDA4QzEyLjEzMTUgMTguNDA4IDEyLjEzMDEgMTguNDA4IDEyLjEyODggMTguNDA4QzEyLjEyNzUgMTguNDA4IDEyLjEyNjIgMTguNDA4IDEyLjEyNDkgMTguNDA4QzEyLjEyMzYgMTguNDA4IDEyLjEyMjMgMTguNDA4IDEyLjEyMSAxOC40MDhDMTIuMTE5NyAxOC40MDggMTIuMTE4NCAxOC40MDggMTIuMTE3MiAxOC40MDhDMTIuMTE1OSAxOC40MDggMTIuMTE0NiAxOC40MDggMTIuMTEzNCAxOC40MDhDMTIuMTEyMSAxOC40MDggMTIuMTEwOSAxOC40MDggMTIuMTA5NyAxOC40MDhDMTIuMTA4NSAxOC40MDggMTIuMTA3MiAxOC40MDggMTIuMTA2IDE4LjQwOEMxMi4xMDQ4IDE4LjQwOCAxMi4xMDM2IDE4LjQwOCAxMi4xMDI0IDE4LjQwOEMxMi4xMDEyIDE4LjQwOCAxMi4xMDAxIDE4LjQwOCAxMi4wOTg5IDE4LjQwOEMxMi4wOTc3IDE4LjQwOCAxMi4wOTY2IDE4LjQwOCAxMi4wOTU0IDE4LjQwOEMxMi4wOTQzIDE4LjQwOCAxMi4wOTMxIDE4LjQwOCAxMi4wOTIgMTguNDA4QzEyLjA5MDkgMTguNDA4IDEyLjA4OTggMTguNDA4IDEyLjA4ODYgMTguNDA4QzEyLjA4NzUgMTguNDA4IDEyLjA4NjQgMTguNDA4IDEyLjA4NTMgMTguNDA4QzEyLjA4NDMgMTguNDA4IDEyLjA4MzIgMTguNDA4IDEyLjA4MjEgMTguNDA4QzEyLjA4MSAxOC40MDggMTIuMDggMTguNDA4IDEyLjA3ODkgMTguNDA4QzEyLjA3NzkgMTguNDA4IDEyLjA3NjggMTguNDA4IDEyLjA3NTggMTguNDA4QzEyLjA3NDggMTguNDA4IDEyLjA3MzggMTguNDA4IDEyLjA3MjcgMTguNDA4QzEyLjA3MTcgMTguNDA4IDEyLjA3MDcgMTguNDA4IDEyLjA2OTcgMTguNDA4QzEyLjA2ODggMTguNDA4IDEyLjA2NzggMTguNDA4IDEyLjA2NjggMTguNDA4QzEyLjA2NTggMTguNDA4IDEyLjA2NDkgMTguNDA4IDEyLjA2MzkgMTguNDA4QzEyLjA2MyAxOC40MDggMTIuMDYyIDE4LjQwOCAxMi4wNjExIDE4LjQwOEMxMi4wNjAyIDE4LjQwOCAxMi4wNTkzIDE4LjQwOCAxMi4wNTg0IDE4LjQwOEMxMi4wNTc0IDE4LjQwOCAxMi4wNTY1IDE4LjQwOCAxMi4wNTU3IDE4LjQwOEMxMi4wNTQ4IDE4LjQwOCAxMi4wNTM5IDE4LjQwOCAxMi4wNTMgMTguNDA4QzEyLjA1MjIgMTguNDA4IDEyLjA1MTMgMTguNDA4IDEyLjA1MDUgMTguNDA4QzEyLjA0OTYgMTguNDA4IDEyLjA0ODggMTguNDA4IDEyLjA0NzkgMTguNDA4QzEyLjA0NzEgMTguNDA4IDEyLjA0NjMgMTguNDA4IDEyLjA0NTUgMTguNDA4QzEyLjA0NDcgMTguNDA4IDEyLjA0MzkgMTguNDA4IDEyLjA0MzEgMTguNDA4QzEyLjA0MjMgMTguNDA4IDEyLjA0MTUgMTguNDA4IDEyLjA0MDggMTguNDA4QzEyLjA0IDE4LjQwOCAxMi4wMzkzIDE4LjQwOCAxMi4wMzg1IDE4LjQwOEMxMi4wMzc4IDE4LjQwOCAxMi4wMzcgMTguNDA4IDEyLjAzNjMgMTguNDA4QzEyLjAzNTYgMTguNDA4IDEyLjAzNDkgMTguNDA4IDEyLjAzNDIgMTguNDA4QzEyLjAzMzUgMTguNDA4IDEyLjAzMjggMTguNDA4IDEyLjAzMjEgMTguNDA4QzEyLjAzMTQgMTguNDA4IDEyLjAzMDggMTguNDA4IDEyLjAzMDEgMTguNDA4QzEyLjAyOTQgMTguNDA4IDEyLjAyODggMTguNDA4IDEyLjAyODEgMTguNDA4QzEyLjAyNzUgMTguNDA4IDEyLjAyNjkgMTguNDA4IDEyLjAyNjMgMTguNDA4QzEyLjAyNTYgMTguNDA4IDEyLjAyNSAxOC40MDggMTIuMDI0NCAxOC40MDhDMTIuMDIzOCAxOC40MDggMTIuMDIzMyAxOC40MDggMTIuMDIyNyAxOC40MDhDMTIuMDIyMSAxOC40MDggMTIuMDIxNSAxOC40MDggMTIuMDIxIDE4LjQwOEMxMi4wMjA0IDE4LjQwOCAxMi4wMTk5IDE4LjQwOCAxMi4wMTk0IDE4LjQwOEMxMi4wMTg4IDE4LjQwOCAxMi4wMTgzIDE4LjQwOCAxMi4wMTc4IDE4LjQwOEMxMi4wMTczIDE4LjQwOCAxMi4wMTY4IDE4LjQwOCAxMi4wMTYzIDE4LjQwOEMxMi4wMTU4IDE4LjQwOCAxMi4wMTUzIDE4LjQwOCAxMi4wMTQ5IDE4LjQwOEMxMi4wMTQ0IDE4LjQwOCAxMi4wMTM5IDE4LjQwOCAxMi4wMTM1IDE4LjQwOEMxMi4wMTMgMTguNDA4IDEyLjAxMjYgMTguNDA4IDEyLjAxMjIgMTguNDA4QzEyLjAxMTggMTguNDA4IDEyLjAxMTQgMTguNDA4IDEyLjAxMSAxOC40MDhDMTIuMDEwNSAxOC40MDggMTIuMDEwMiAxOC40MDggMTIuMDA5OCAxOC40MDhDMTIuMDA5NCAxOC40MDggMTIuMDA5IDE4LjQwOCAxMi4wMDg3IDE4LjQwOEMxMi4wMDgzIDE4LjQwOCAxMi4wMDggMTguNDA4IDEyLjAwNzYgMTguNDA4QzEyLjAwNzMgMTguNDA4IDEyLjAwNyAxOC40MDggMTIuMDA2NiAxOC40MDhDMTIuMDA2MyAxOC40MDggMTIuMDA2IDE4LjQwOCAxMi4wMDU3IDE4LjQwOEMxMi4wMDU0IDE4LjQwOCAxMi4wMDUyIDE4LjQwOCAxMi4wMDQ5IDE4LjQwOEMxMi4wMDQ2IDE4LjQwOCAxMi4wMDQ0IDE4LjQwOCAxMi4wMDQxIDE4LjQwOEMxMi4wMDM5IDE4LjQwOCAxMi4wMDM2IDE4LjQwOCAxMi4wMDM0IDE4LjQwOEMxMi4wMDMyIDE4LjQwOCAxMi4wMDMgMTguNDA4IDEyLjAwMjggMTguNDA4QzEyLjAwMjYgMTguNDA4IDEyLjAwMjQgMTguNDA4IDEyLjAwMjIgMTguNDA4QzEyLjAwMiAxOC40MDggMTIuMDAxOCAxOC40MDggMTIuMDAxNyAxOC40MDhDMTIuMDAxNSAxOC40MDggMTIuMDAxNCAxOC40MDggMTIuMDAxMiAxOC40MDhDMTIuMDAxMSAxOC40MDggMTIuMDAxIDE4LjQwOCAxMi4wMDA5IDE4LjQwOEMxMi4wMDA3IDE4LjQwOCAxMi4wMDA2IDE4LjQwOCAxMi4wMDA1IDE4LjQwOEMxMi4wMDA1IDE4LjQwOCAxMi4wMDA0IDE4LjQwOCAxMi4wMDAzIDE4LjQwOEMxMi4wMDAyIDE4LjQwOCAxMi4wMDAyIDE4LjQwOCAxMi4wMDAxIDE4LjQwOEMxMi4wMDAxIDE4LjQwOCAxMi4wMDAxIDE4LjQwOCAxMiAxOC40MDhDMTIgMTguNDA4IDEyIDE4LjQwOCAxMiAxOS40MDhDMTIgMjAuNDA4IDEyIDIwLjQwOCAxMiAyMC40MDhDMTIuMDAwMSAyMC40MDggMTIuMDAwMSAyMC40MDggMTIuMDAwMSAyMC40MDhDMTIuMDAwMiAyMC40MDggMTIuMDAwMiAyMC40MDggMTIuMDAwMyAyMC40MDhDMTIuMDAwNCAyMC40MDggMTIuMDAwNSAyMC40MDggMTIuMDAwNSAyMC40MDhDMTIuMDAwNiAyMC40MDggMTIuMDAwNyAyMC40MDggMTIuMDAwOSAyMC40MDhDMTIuMDAxIDIwLjQwOCAxMi4wMDExIDIwLjQwOCAxMi4wMDEyIDIwLjQwOEMxMi4wMDE0IDIwLjQwOCAxMi4wMDE1IDIwLjQwOCAxMi4wMDE3IDIwLjQwOEMxMi4wMDE4IDIwLjQwOCAxMi4wMDIgMjAuNDA4IDEyLjAwMjIgMjAuNDA4QzEyLjAwMjQgMjAuNDA4IDEyLjAwMjYgMjAuNDA4IDEyLjAwMjggMjAuNDA4QzEyLjAwMyAyMC40MDggMTIuMDAzMiAyMC40MDggMTIuMDAzNCAyMC40MDhDMTIuMDAzNiAyMC40MDggMTIuMDAzOSAyMC40MDggMTIuMDA0MSAyMC40MDhDMTIuMDA0NCAyMC40MDggMTIuMDA0NiAyMC40MDggMTIuMDA0OSAyMC40MDhDMTIuMDA1MiAyMC40MDggMTIuMDA1NCAyMC40MDggMTIuMDA1NyAyMC40MDhDMTIuMDA2IDIwLjQwOCAxMi4wMDYzIDIwLjQwOCAxMi4wMDY2IDIwLjQwOEMxMi4wMDcgMjAuNDA4IDEyLjAwNzMgMjAuNDA4IDEyLjAwNzYgMjAuNDA4QzEyLjAwOCAyMC40MDggMTIuMDA4MyAyMC40MDggMTIuMDA4NyAyMC40MDhDMTIuMDA5IDIwLjQwOCAxMi4wMDk0IDIwLjQwOCAxMi4wMDk4IDIwLjQwOEMxMi4wMTAyIDIwLjQwOCAxMi4wMTA1IDIwLjQwOCAxMi4wMTEgMjAuNDA4QzEyLjAxMTQgMjAuNDA4IDEyLjAxMTggMjAuNDA4IDEyLjAxMjIgMjAuNDA4QzEyLjAxMjYgMjAuNDA4IDEyLjAxMyAyMC40MDggMTIuMDEzNSAyMC40MDhDMTIuMDEzOSAyMC40MDggMTIuMDE0NCAyMC40MDggMTIuMDE0OSAyMC40MDhDMTIuMDE1MyAyMC40MDggMTIuMDE1OCAyMC40MDggMTIuMDE2MyAyMC40MDhDMTIuMDE2OCAyMC40MDggMTIuMDE3MyAyMC40MDggMTIuMDE3OCAyMC40MDhDMTIuMDE4MyAyMC40MDggMTIuMDE4OCAyMC40MDggMTIuMDE5NCAyMC40MDhDMTIuMDE5OSAyMC40MDggMTIuMDIwNCAyMC40MDggMTIuMDIxIDIwLjQwOEMxMi4wMjE1IDIwLjQwOCAxMi4wMjIxIDIwLjQwOCAxMi4wMjI3IDIwLjQwOEMxMi4wMjMzIDIwLjQwOCAxMi4wMjM4IDIwLjQwOCAxMi4wMjQ0IDIwLjQwOEMxMi4wMjUgMjAuNDA4IDEyLjAyNTYgMjAuNDA4IDEyLjAyNjMgMjAuNDA4QzEyLjAyNjkgMjAuNDA4IDEyLjAyNzUgMjAuNDA4IDEyLjAyODEgMjAuNDA4QzEyLjAyODggMjAuNDA4IDEyLjAyOTQgMjAuNDA4IDEyLjAzMDEgMjAuNDA4QzEyLjAzMDggMjAuNDA4IDEyLjAzMTQgMjAuNDA4IDEyLjAzMjEgMjAuNDA4QzEyLjAzMjggMjAuNDA4IDEyLjAzMzUgMjAuNDA4IDEyLjAzNDIgMjAuNDA4QzEyLjAzNDkgMjAuNDA4IDEyLjAzNTYgMjAuNDA4IDEyLjAzNjMgMjAuNDA4QzEyLjAzNyAyMC40MDggMTIuMDM3OCAyMC40MDggMTIuMDM4NSAyMC40MDhDMTIuMDM5MyAyMC40MDggMTIuMDQgMjAuNDA4IDEyLjA0MDggMjAuNDA4QzEyLjA0MTUgMjAuNDA4IDEyLjA0MjMgMjAuNDA4IDEyLjA0MzEgMjAuNDA4QzEyLjA0MzkgMjAuNDA4IDEyLjA0NDcgMjAuNDA4IDEyLjA0NTUgMjAuNDA4QzEyLjA0NjMgMjAuNDA4IDEyLjA0NzEgMjAuNDA4IDEyLjA0NzkgMjAuNDA4QzEyLjA0ODggMjAuNDA4IDEyLjA0OTYgMjAuNDA4IDEyLjA1MDUgMjAuNDA4QzEyLjA1MTMgMjAuNDA4IDEyLjA1MjIgMjAuNDA4IDEyLjA1MyAyMC40MDhDMTIuMDUzOSAyMC40MDggMTIuMDU0OCAyMC40MDggMTIuMDU1NyAyMC40MDhDMTIuMDU2NSAyMC40MDggMTIuMDU3NCAyMC40MDggMTIuMDU4NCAyMC40MDhDMTIuMDU5MyAyMC40MDggMTIuMDYwMiAyMC40MDggMTIuMDYxMSAyMC40MDhDMTIuMDYyIDIwLjQwOCAxMi4wNjMgMjAuNDA4IDEyLjA2MzkgMjAuNDA4QzEyLjA2NDkgMjAuNDA4IDEyLjA2NTggMjAuNDA4IDEyLjA2NjggMjAuNDA4QzEyLjA2NzggMjAuNDA4IDEyLjA2ODggMjAuNDA4IDEyLjA2OTcgMjAuNDA4QzEyLjA3MDcgMjAuNDA4IDEyLjA3MTcgMjAuNDA4IDEyLjA3MjcgMjAuNDA4QzEyLjA3MzggMjAuNDA4IDEyLjA3NDggMjAuNDA4IDEyLjA3NTggMjAuNDA4QzEyLjA3NjggMjAuNDA4IDEyLjA3NzkgMjAuNDA4IDEyLjA3ODkgMjAuNDA4QzEyLjA4IDIwLjQwOCAxMi4wODEgMjAuNDA4IDEyLjA4MjEgMjAuNDA4QzEyLjA4MzIgMjAuNDA4IDEyLjA4NDMgMjAuNDA4IDEyLjA4NTMgMjAuNDA4QzEyLjA4NjQgMjAuNDA4IDEyLjA4NzUgMjAuNDA4IDEyLjA4ODYgMjAuNDA4QzEyLjA4OTggMjAuNDA4IDEyLjA5MDkgMjAuNDA4IDEyLjA5MiAyMC40MDhDMTIuMDkzMSAyMC40MDggMTIuMDk0MyAyMC40MDggMTIuMDk1NCAyMC40MDhDMTIuMDk2NiAyMC40MDggMTIuMDk3NyAyMC40MDggMTIuMDk4OSAyMC40MDhDMTIuMTAwMSAyMC40MDggMTIuMTAxMiAyMC40MDggMTIuMTAyNCAyMC40MDhDMTIuMTAzNiAyMC40MDggMTIuMTA0OCAyMC40MDggMTIuMTA2IDIwLjQwOEMxMi4xMDcyIDIwLjQwOCAxMi4xMDg1IDIwLjQwOCAxMi4xMDk3IDIwLjQwOEMxMi4xMTA5IDIwLjQwOCAxMi4xMTIxIDIwLjQwOCAxMi4xMTM0IDIwLjQwOEMxMi4xMTQ2IDIwLjQwOCAxMi4xMTU5IDIwLjQwOCAxMi4xMTcyIDIwLjQwOEMxMi4xMTg0IDIwLjQwOCAxMi4xMTk3IDIwLjQwOCAxMi4xMjEgMjAuNDA4QzEyLjEyMjMgMjAuNDA4IDEyLjEyMzYgMjAuNDA4IDEyLjEyNDkgMjAuNDA4QzEyLjEyNjIgMjAuNDA4IDEyLjEyNzUgMjAuNDA4IDEyLjEyODggMjAuNDA4QzEyLjEzMDEgMjAuNDA4IDEyLjEzMTUgMjAuNDA4IDEyLjEzMjggMjAuNDA4QzEyLjEzNDIgMjAuNDA4IDEyLjEzNTUgMjAuNDA4IDEyLjEzNjkgMjAuNDA4QzEyLjEzODIgMjAuNDA4IDEyLjEzOTYgMjAuNDA4IDEyLjE0MSAyMC40MDhDMTIuMTQyNCAyMC40MDggMTIuMTQzOCAyMC40MDggMTIuMTQ1MiAyMC40MDhDMTIuMTQ2NiAyMC40MDggMTIuMTQ4IDIwLjQwOCAxMi4xNDk0IDIwLjQwOEMxMi4xNTA4IDIwLjQwOCAxMi4xNTIyIDIwLjQwOCAxMi4xNTM3IDIwLjQwOEMxMi4xNTUxIDIwLjQwOCAxMi4xNTY1IDIwLjQwOCAxMi4xNTggMjAuNDA4QzEyLjE1OTUgMjAuNDA4IDEyLjE2MDkgMjAuNDA4IDEyLjE2MjQgMjAuNDA4QzEyLjE2MzkgMjAuNDA4IDEyLjE2NTQgMjAuNDA4IDEyLjE2NjkgMjAuNDA4QzEyLjE2ODMgMjAuNDA4IDEyLjE2OTkgMjAuNDA4IDEyLjE3MTQgMjAuNDA4QzEyLjE3MjkgMjAuNDA4IDEyLjE3NDQgMjAuNDA4IDEyLjE3NTkgMjAuNDA4QzEyLjE3NzUgMjAuNDA4IDEyLjE3OSAyMC40MDggMTIuMTgwNSAyMC40MDhDMTIuMTgyMSAyMC40MDggMTIuMTgzNyAyMC40MDggMTIuMTg1MiAyMC40MDhDMTIuMTg2OCAyMC40MDggMTIuMTg4NCAyMC40MDggMTIuMTg5OSAyMC40MDhDMTIuMTkxNSAyMC40MDggMTIuMTkzMSAyMC40MDggMTIuMTk0NyAyMC40MDhDMTIuMTk2MyAyMC40MDggMTIuMTk4IDIwLjQwOCAxMi4xOTk2IDIwLjQwOEMxMi4yMDEyIDIwLjQwOCAxMi4yMDI4IDIwLjQwOCAxMi4yMDQ1IDIwLjQwOEMxMi4yMDYxIDIwLjQwOCAxMi4yMDc4IDIwLjQwOCAxMi4yMDk0IDIwLjQwOEMxMi4yMTExIDIwLjQwOCAxMi4yMTI3IDIwLjQwOCAxMi4yMTQ0IDIwLjQwOEMxMi4yMTYxIDIwLjQwOCAxMi4yMTc4IDIwLjQwOCAxMi4yMTk1IDIwLjQwOEMxMi4yMjEyIDIwLjQwOCAxMi4yMjI5IDIwLjQwOCAxMi4yMjQ2IDIwLjQwOEMxMi4yMjYzIDIwLjQwOCAxMi4yMjggMjAuNDA4IDEyLjIyOTcgMjAuNDA4QzEyLjIzMTUgMjAuNDA4IDEyLjIzMzIgMjAuNDA4IDEyLjIzNSAyMC40MDhDMTIuMjM2NyAyMC40MDggMTIuMjM4NSAyMC40MDggMTIuMjQwMiAyMC40MDhDMTIuMjQyIDIwLjQwOCAxMi4yNDM4IDIwLjQwOCAxMi4yNDU2IDIwLjQwOEMxMi4yNDczIDIwLjQwOCAxMi4yNDkxIDIwLjQwOCAxMi4yNTA5IDIwLjQwOEMxMi4yNTI3IDIwLjQwOCAxMi4yNTQ1IDIwLjQwOCAxMi4yNTY0IDIwLjQwOEMxMi4yNTgyIDIwLjQwOCAxMi4yNiAyMC40MDggMTIuMjYxOCAyMC40MDhDMTIuMjYzNyAyMC40MDggMTIuMjY1NSAyMC40MDggMTIuMjY3NCAyMC40MDhDMTIuMjY5MiAyMC40MDggMTIuMjcxMSAyMC40MDggMTIuMjczIDIwLjQwOEMxMi4yNzQ4IDIwLjQwOCAxMi4yNzY3IDIwLjQwOCAxMi4yNzg2IDIwLjQwOEMxMi4yODA1IDIwLjQwOCAxMi4yODI0IDIwLjQwOCAxMi4yODQzIDIwLjQwOEMxMi4yODYyIDIwLjQwOCAxMi4yODgxIDIwLjQwOCAxMi4yOSAyMC40MDhDMTIuMjkyIDIwLjQwOCAxMi4yOTM5IDIwLjQwOCAxMi4yOTU4IDIwLjQwOEMxMi4yOTc4IDIwLjQwOCAxMi4yOTk3IDIwLjQwOCAxMi4zMDE3IDIwLjQwOEMxMi4zMDM2IDIwLjQwOCAxMi4zMDU2IDIwLjQwOCAxMi4zMDc2IDIwLjQwOEMxMi4zMDk1IDIwLjQwOCAxMi4zMTE1IDIwLjQwOCAxMi4zMTM1IDIwLjQwOEMxMi4zMTU1IDIwLjQwOCAxMi4zMTc1IDIwLjQwOCAxMi4zMTk1IDIwLjQwOEMxMi4zMjE1IDIwLjQwOCAxMi4zMjM1IDIwLjQwOCAxMi4zMjU2IDIwLjQwOEMxMi4zMjc2IDIwLjQwOCAxMi4zMjk2IDIwLjQwOCAxMi4zMzE3IDIwLjQwOEMxMi4zMzM3IDIwLjQwOCAxMi4zMzU4IDIwLjQwOCAxMi4zMzc4IDIwLjQwOEMxMi4zMzk5IDIwLjQwOCAxMi4zNDE5IDIwLjQwOCAxMi4zNDQgMjAuNDA4QzEyLjM0NjEgMjAuNDA4IDEyLjM0ODIgMjAuNDA4IDEyLjM1MDMgMjAuNDA4QzEyLjM1MjQgMjAuNDA4IDEyLjM1NDUgMjAuNDA4IDEyLjM1NjYgMjAuNDA4QzEyLjM1ODcgMjAuNDA4IDEyLjM2MDggMjAuNDA4IDEyLjM2MjkgMjAuNDA4QzEyLjM2NSAyMC40MDggMTIuMzY3MiAyMC40MDggMTIuMzY5MyAyMC40MDhDMTIuMzcxNCAyMC40MDggMTIuMzczNiAyMC40MDggMTIuMzc1OCAyMC40MDhDMTIuMzc3OSAyMC40MDggMTIuMzgwMSAyMC40MDggMTIuMzgyMiAyMC40MDhDMTIuMzg0NCAyMC40MDggMTIuMzg2NiAyMC40MDggMTIuMzg4OCAyMC40MDhDMTIuMzkxIDIwLjQwOCAxMi4zOTMyIDIwLjQwOCAxMi4zOTU0IDIwLjQwOEMxMi4zOTc2IDIwLjQwOCAxMi4zOTk4IDIwLjQwOCAxMi40MDIgMjAuNDA4QzEyLjQwNDMgMjAuNDA4IDEyLjQwNjUgMjAuNDA4IDEyLjQwODcgMjAuNDA4QzEyLjQxMSAyMC40MDggMTIuNDEzMiAyMC40MDggMTIuNDE1NSAyMC40MDhDMTIuNDE3NyAyMC40MDggMTIuNDIgMjAuNDA4IDEyLjQyMjIgMjAuNDA4QzEyLjQyNDUgMjAuNDA4IDEyLjQyNjggMjAuNDA4IDEyLjQyOTEgMjAuNDA4QzEyLjQzMTQgMjAuNDA4IDEyLjQzMzcgMjAuNDA4IDEyLjQzNiAyMC40MDhDMTIuNDM4MyAyMC40MDggMTIuNDQwNiAyMC40MDggMTIuNDQyOSAyMC40MDhDMTIuNDQ1MiAyMC40MDggMTIuNDQ3NSAyMC40MDggMTIuNDQ5OSAyMC40MDhDMTIuNDUyMiAyMC40MDggMTIuNDU0NSAyMC40MDggMTIuNDU2OSAyMC40MDhDMTIuNDU5MiAyMC40MDggMTIuNDYxNiAyMC40MDggMTIuNDY0IDIwLjQwOEMxMi40NjYzIDIwLjQwOCAxMi40Njg3IDIwLjQwOCAxMi40NzExIDIwLjQwOEMxMi40NzM1IDIwLjQwOCAxMi40NzU4IDIwLjQwOCAxMi40NzgyIDIwLjQwOEMxMi40ODA2IDIwLjQwOCAxMi40ODMgMjAuNDA4IDEyLjQ4NTQgMjAuNDA4QzEyLjQ4NzkgMjAuNDA4IDEyLjQ5MDMgMjAuNDA4IDEyLjQ5MjcgMjAuNDA4QzEyLjQ5NTEgMjAuNDA4IDEyLjQ5NzYgMjAuNDA4IDEyLjUgMjAuNDA4QzEyLjUwMjQgMjAuNDA4IDEyLjUwNDkgMjAuNDA4IDEyLjUwNzMgMjAuNDA4QzEyLjUwOTggMjAuNDA4IDEyLjUxMjMgMjAuNDA4IDEyLjUxNDcgMjAuNDA4QzEyLjUxNzIgMjAuNDA4IDEyLjUxOTcgMjAuNDA4IDEyLjUyMjIgMjAuNDA4QzEyLjUyNDcgMjAuNDA4IDEyLjUyNzIgMjAuNDA4IDEyLjUyOTcgMjAuNDA4QzEyLjUzMjIgMjAuNDA4IDEyLjUzNDcgMjAuNDA4IDEyLjUzNzIgMjAuNDA4QzEyLjUzOTcgMjAuNDA4IDEyLjU0MjIgMjAuNDA4IDEyLjU0NDggMjAuNDA4QzEyLjU0NzMgMjAuNDA4IDEyLjU0OTggMjAuNDA4IDEyLjU1MjQgMjAuNDA4QzEyLjU1NDkgMjAuNDA4IDEyLjU1NzUgMjAuNDA4IDEyLjU2IDIwLjQwOEMxMi41NjI2IDIwLjQwOCAxMi41NjUyIDIwLjQwOCAxMi41Njc3IDIwLjQwOEMxMi41NzAzIDIwLjQwOCAxMi41NzI5IDIwLjQwOCAxMi41NzU1IDIwLjQwOEMxMi41NzgxIDIwLjQwOCAxMi41ODA3IDIwLjQwOCAxMi41ODMzIDIwLjQwOEMxMi41ODU5IDIwLjQwOCAxMi41ODg1IDIwLjQwOCAxMi41OTExIDIwLjQwOEMxMi41OTM4IDIwLjQwOCAxMi41OTY0IDIwLjQwOCAxMi41OTkgMjAuNDA4QzEyLjYwMTcgMjAuNDA4IDEyLjYwNDMgMjAuNDA4IDEyLjYwNjkgMjAuNDA4QzEyLjYwOTYgMjAuNDA4IDEyLjYxMjIgMjAuNDA4IDEyLjYxNDkgMjAuNDA4QzEyLjYxNzYgMjAuNDA4IDEyLjYyMDIgMjAuNDA4IDEyLjYyMjkgMjAuNDA4QzEyLjYyNTYgMjAuNDA4IDEyLjYyODMgMjAuNDA4IDEyLjYzMSAyMC40MDhDMTIuNjMzNyAyMC40MDggMTIuNjM2NCAyMC40MDggMTIuNjM5MSAyMC40MDhDMTIuNjQxOCAyMC40MDggMTIuNjQ0NSAyMC40MDggMTIuNjQ3MiAyMC40MDhDMTIuNjQ5OSAyMC40MDggMTIuNjUyNyAyMC40MDggMTIuNjU1NCAyMC40MDhDMTIuNjU4MSAyMC40MDggMTIuNjYwOSAyMC40MDggMTIuNjYzNiAyMC40MDhDMTIuNjY2NCAyMC40MDggMTIuNjY5MSAyMC40MDggMTIuNjcxOSAyMC40MDhDMTIuNjc0NyAyMC40MDggMTIuNjc3NCAyMC40MDggMTIuNjgwMiAyMC40MDhDMTIuNjgzIDIwLjQwOCAxMi42ODU4IDIwLjQwOCAxMi42ODg2IDIwLjQwOEMxMi42OTEzIDIwLjQwOCAxMi42OTQxIDIwLjQwOCAxMi42OTY5IDIwLjQwOEMxMi42OTk3IDIwLjQwOCAxMi43MDI2IDIwLjQwOCAxMi43MDU0IDIwLjQwOEMxMi43MDgyIDIwLjQwOCAxMi43MTEgMjAuNDA4IDEyLjcxMzkgMjAuNDA4QzEyLjcxNjcgMjAuNDA4IDEyLjcxOTUgMjAuNDA4IDEyLjcyMjQgMjAuNDA4QzEyLjcyNTIgMjAuNDA4IDEyLjcyODEgMjAuNDA4IDEyLjczMDkgMjAuNDA4QzEyLjczMzggMjAuNDA4IDEyLjczNjYgMjAuNDA4IDEyLjczOTUgMjAuNDA4QzEyLjc0MjQgMjAuNDA4IDEyLjc0NTMgMjAuNDA4IDEyLjc0ODIgMjAuNDA4QzEyLjc1MSAyMC40MDggMTIuNzUzOSAyMC40MDggMTIuNzU2OCAyMC40MDhDMTIuNzU5NyAyMC40MDggMTIuNzYyNiAyMC40MDggMTIuNzY1NiAyMC40MDhDMTIuNzY4NSAyMC40MDggMTIuNzcxNCAyMC40MDggMTIuNzc0MyAyMC40MDhDMTIuNzc3MiAyMC40MDggMTIuNzgwMiAyMC40MDggMTIuNzgzMSAyMC40MDhDMTIuNzg2IDIwLjQwOCAxMi43ODkgMjAuNDA4IDEyLjc5MTkgMjAuNDA4QzEyLjc5NDkgMjAuNDA4IDEyLjc5NzkgMjAuNDA4IDEyLjgwMDggMjAuNDA4QzEyLjgwMzggMjAuNDA4IDEyLjgwNjggMjAuNDA4IDEyLjgwOTcgMjAuNDA4QzEyLjgxMjcgMjAuNDA4IDEyLjgxNTcgMjAuNDA4IDEyLjgxODcgMjAuNDA4QzEyLjgyMTcgMjAuNDA4IDEyLjgyNDcgMjAuNDA4IDEyLjgyNzcgMjAuNDA4QzEyLjgzMDcgMjAuNDA4IDEyLjgzMzcgMjAuNDA4IDEyLjgzNjcgMjAuNDA4QzEyLjgzOTcgMjAuNDA4IDEyLjg0MjggMjAuNDA4IDEyLjg0NTggMjAuNDA4QzEyLjg0ODggMjAuNDA4IDEyLjg1MTggMjAuNDA4IDEyLjg1NDkgMjAuNDA4QzEyLjg1NzkgMjAuNDA4IDEyLjg2MSAyMC40MDggMTIuODY0IDIwLjQwOEMxMi44NjcxIDIwLjQwOCAxMi44NzAyIDIwLjQwOCAxMi44NzMyIDIwLjQwOEMxMi44NzYzIDIwLjQwOCAxMi44Nzk0IDIwLjQwOCAxMi44ODI0IDIwLjQwOEMxMi44ODU1IDIwLjQwOCAxMi44ODg2IDIwLjQwOCAxMi44OTE3IDIwLjQwOEMxMi44OTQ4IDIwLjQwOCAxMi44OTc5IDIwLjQwOCAxMi45MDEgMjAuNDA4QzEyLjkwNDEgMjAuNDA4IDEyLjkwNzIgMjAuNDA4IDEyLjkxMDMgMjAuNDA4QzEyLjkxMzUgMjAuNDA4IDEyLjkxNjYgMjAuNDA4IDEyLjkxOTcgMjAuNDA4QzEyLjkyMjggMjAuNDA4IDEyLjkyNiAyMC40MDggMTIuOTI5MSAyMC40MDhDMTIuOTMyMyAyMC40MDggMTIuOTM1NCAyMC40MDggMTIuOTM4NiAyMC40MDhDMTIuOTQxNyAyMC40MDggMTIuOTQ0OSAyMC40MDggMTIuOTQ4IDIwLjQwOEMxMi45NTEyIDIwLjQwOCAxMi45NTQ0IDIwLjQwOCAxMi45NTc2IDIwLjQwOEMxMi45NjA3IDIwLjQwOCAxMi45NjM5IDIwLjQwOCAxMi45NjcxIDIwLjQwOEMxMi45NzAzIDIwLjQwOCAxMi45NzM1IDIwLjQwOCAxMi45NzY3IDIwLjQwOEMxMi45Nzk5IDIwLjQwOCAxMi45ODMxIDIwLjQwOCAxMi45ODYzIDIwLjQwOEMxMi45ODk1IDIwLjQwOCAxMi45OTI4IDIwLjQwOCAxMi45OTYgMjAuNDA4QzEyLjk5OTIgMjAuNDA4IDEzLjAwMjQgMjAuNDA4IDEzLjAwNTcgMjAuNDA4QzEzLjAwODkgMjAuNDA4IDEzLjAxMjIgMjAuNDA4IDEzLjAxNTQgMjAuNDA4QzEzLjAxODcgMjAuNDA4IDEzLjAyMTkgMjAuNDA4IDEzLjAyNTIgMjAuNDA4QzEzLjAyODQgMjAuNDA4IDEzLjAzMTcgMjAuNDA4IDEzLjAzNSAyMC40MDhDMTMuMDM4MyAyMC40MDggMTMuMDQxNSAyMC40MDggMTMuMDQ0OCAyMC40MDhDMTMuMDQ4MSAyMC40MDggMTMuMDUxNCAyMC40MDggMTMuMDU0NyAyMC40MDhDMTMuMDU4IDIwLjQwOCAxMy4wNjEzIDIwLjQwOCAxMy4wNjQ2IDIwLjQwOEMxMy4wNjc5IDIwLjQwOCAxMy4wNzEyIDIwLjQwOCAxMy4wNzQ1IDIwLjQwOEMxMy4wNzc5IDIwLjQwOCAxMy4wODEyIDIwLjQwOCAxMy4wODQ1IDIwLjQwOEMxMy4wODc4IDIwLjQwOCAxMy4wOTEyIDIwLjQwOCAxMy4wOTQ1IDIwLjQwOEMxMy4wOTc5IDIwLjQwOCAxMy4xMDEyIDIwLjQwOCAxMy4xMDQ2IDIwLjQwOEMxMy4xMDc5IDIwLjQwOCAxMy4xMTEzIDIwLjQwOCAxMy4xMTQ2IDIwLjQwOEMxMy4xMTggMjAuNDA4IDEzLjEyMTQgMjAuNDA4IDEzLjEyNDcgMjAuNDA4QzEzLjEyODEgMjAuNDA4IDEzLjEzMTUgMjAuNDA4IDEzLjEzNDkgMjAuNDA4QzEzLjEzODMgMjAuNDA4IDEzLjE0MTYgMjAuNDA4IDEzLjE0NSAyMC40MDhDMTMuMTQ4NCAyMC40MDggMTMuMTUxOCAyMC40MDggMTMuMTU1MyAyMC40MDhDMTMuMTU4NyAyMC40MDggMTMuMTYyMSAyMC40MDggMTMuMTY1NSAyMC40MDhDMTMuMTY4OSAyMC40MDggMTMuMTcyMyAyMC40MDggMTMuMTc1OCAyMC40MDhDMTMuMTc5MiAyMC40MDggMTMuMTgyNiAyMC40MDggMTMuMTg2MSAyMC40MDhDMTMuMTg5NSAyMC40MDggMTMuMTkyOSAyMC40MDggMTMuMTk2NCAyMC40MDhDMTMuMTk5OCAyMC40MDggMTMuMjAzMyAyMC40MDggMTMuMjA2OCAyMC40MDhDMTMuMjEwMiAyMC40MDggMTMuMjEzNyAyMC40MDggMTMuMjE3MiAyMC40MDhDMTMuMjIwNiAyMC40MDggMTMuMjI0MSAyMC40MDggMTMuMjI3NiAyMC40MDhDMTMuMjMxMSAyMC40MDggMTMuMjM0NiAyMC40MDggMTMuMjM4MSAyMC40MDhDMTMuMjQxNSAyMC40MDggMTMuMjQ1IDIwLjQwOCAxMy4yNDg1IDIwLjQwOEMxMy4yNTIgMjAuNDA4IDEzLjI1NTYgMjAuNDA4IDEzLjI1OTEgMjAuNDA4QzEzLjI2MjYgMjAuNDA4IDEzLjI2NjEgMjAuNDA4IDEzLjI2OTYgMjAuNDA4QzEzLjI3MzEgMjAuNDA4IDEzLjI3NjcgMjAuNDA4IDEzLjI4MDIgMjAuNDA4QzEzLjI4MzcgMjAuNDA4IDEzLjI4NzMgMjAuNDA4IDEzLjI5MDggMjAuNDA4QzEzLjI5NDQgMjAuNDA4IDEzLjI5NzkgMjAuNDA4IDEzLjMwMTUgMjAuNDA4QzEzLjMwNSAyMC40MDggMTMuMzA4NiAyMC40MDggMTMuMzEyMSAyMC40MDhDMTMuMzE1NyAyMC40MDggMTMuMzE5MyAyMC40MDggMTMuMzIyOCAyMC40MDhDMTMuMzI2NCAyMC40MDggMTMuMzMgMjAuNDA4IDEzLjMzMzYgMjAuNDA4QzEzLjMzNzIgMjAuNDA4IDEzLjM0MDggMjAuNDA4IDEzLjM0NDMgMjAuNDA4QzEzLjM0NzkgMjAuNDA4IDEzLjM1MTUgMjAuNDA4IDEzLjM1NTEgMjAuNDA4QzEzLjM1ODcgMjAuNDA4IDEzLjM2MjQgMjAuNDA4IDEzLjM2NiAyMC40MDhDMTMuMzY5NiAyMC40MDggMTMuMzczMiAyMC40MDggMTMuMzc2OCAyMC40MDhDMTMuMzgwNCAyMC40MDggMTMuMzg0MSAyMC40MDggMTMuMzg3NyAyMC40MDhDMTMuMzkxMyAyMC40MDggMTMuMzk1IDIwLjQwOCAxMy4zOTg2IDIwLjQwOEMxMy40MDIyIDIwLjQwOCAxMy40MDU5IDIwLjQwOCAxMy40MDk1IDIwLjQwOEMxMy40MTMyIDIwLjQwOCAxMy40MTY4IDIwLjQwOCAxMy40MjA1IDIwLjQwOEMxMy40MjQyIDIwLjQwOCAxMy40Mjc4IDIwLjQwOCAxMy40MzE1IDIwLjQwOEMxMy40MzUyIDIwLjQwOCAxMy40Mzg4IDIwLjQwOCAxMy40NDI1IDIwLjQwOEMxMy40NDYyIDIwLjQwOCAxMy40NDk5IDIwLjQwOCAxMy40NTM2IDIwLjQwOEMxMy40NTczIDIwLjQwOCAxMy40NjEgMjAuNDA4IDEzLjQ2NDYgMjAuNDA4QzEzLjQ2ODMgMjAuNDA4IDEzLjQ3MiAyMC40MDggMTMuNDc1OCAyMC40MDhDMTMuNDc5NSAyMC40MDggMTMuNDgzMiAyMC40MDggMTMuNDg2OSAyMC40MDhDMTMuNDkwNiAyMC40MDggMTMuNDk0MyAyMC40MDggMTMuNDk4IDIwLjQwOEMxMy41MDE4IDIwLjQwOCAxMy41MDU1IDIwLjQwOCAxMy41MDkyIDIwLjQwOEMxMy41MTMgMjAuNDA4IDEzLjUxNjcgMjAuNDA4IDEzLjUyMDQgMjAuNDA4QzEzLjUyNDIgMjAuNDA4IDEzLjUyNzkgMjAuNDA4IDEzLjUzMTcgMjAuNDA4QzEzLjUzNTQgMjAuNDA4IDEzLjUzOTIgMjAuNDA4IDEzLjU0MjkgMjAuNDA4QzEzLjU0NjcgMjAuNDA4IDEzLjU1MDUgMjAuNDA4IDEzLjU1NDIgMjAuNDA4QzEzLjU1OCAyMC40MDggMTMuNTYxOCAyMC40MDggMTMuNTY1NiAyMC40MDhDMTMuNTY5MyAyMC40MDggMTMuNTczMSAyMC40MDggMTMuNTc2OSAyMC40MDhDMTMuNTgwNyAyMC40MDggMTMuNTg0NSAyMC40MDggMTMuNTg4MyAyMC40MDhDMTMuNTkyMSAyMC40MDggMTMuNTk1OSAyMC40MDggMTMuNTk5NyAyMC40MDhDMTMuNjAzNSAyMC40MDggMTMuNjA3MyAyMC40MDggMTMuNjExMSAyMC40MDhDMTMuNjE0OSAyMC40MDggMTMuNjE4NyAyMC40MDggMTMuNjIyNSAyMC40MDhDMTMuNjI2MyAyMC40MDggMTMuNjMwMiAyMC40MDggMTMuNjM0IDIwLjQwOEMxMy42Mzc4IDIwLjQwOCAxMy42NDE2IDIwLjQwOCAxMy42NDU1IDIwLjQwOEMxMy42NDkzIDIwLjQwOCAxMy42NTMyIDIwLjQwOCAxMy42NTcgMjAuNDA4QzEzLjY2MDggMjAuNDA4IDEzLjY2NDcgMjAuNDA4IDEzLjY2ODUgMjAuNDA4QzEzLjY3MjQgMjAuNDA4IDEzLjY3NjIgMjAuNDA4IDEzLjY4MDEgMjAuNDA4QzEzLjY4NCAyMC40MDggMTMuNjg3OCAyMC40MDggMTMuNjkxNyAyMC40MDhDMTMuNjk1NiAyMC40MDggMTMuNjk5NCAyMC40MDggMTMuNzAzMyAyMC40MDhDMTMuNzA3MiAyMC40MDggMTMuNzExMSAyMC40MDggMTMuNzE0OSAyMC40MDhDMTMuNzE4OCAyMC40MDggMTMuNzIyNyAyMC40MDggMTMuNzI2NiAyMC40MDhDMTMuNzMwNSAyMC40MDggMTMuNzM0NCAyMC40MDggMTMuNzM4MyAyMC40MDhDMTMuNzQyMiAyMC40MDggMTMuNzQ2MSAyMC40MDggMTMuNzUgMjAuNDA4QzEzLjc1MzkgMjAuNDA4IDEzLjc1NzggMjAuNDA4IDEzLjc2MTcgMjAuNDA4QzEzLjc2NTYgMjAuNDA4IDEzLjc2OTYgMjAuNDA4IDEzLjc3MzUgMjAuNDA4QzEzLjc3NzQgMjAuNDA4IDEzLjc4MTMgMjAuNDA4IDEzLjc4NTMgMjAuNDA4QzEzLjc4OTIgMjAuNDA4IDEzLjc5MzEgMjAuNDA4IDEzLjc5NzEgMjAuNDA4QzEzLjgwMSAyMC40MDggMTMuODA0OSAyMC40MDggMTMuODA4OSAyMC40MDhDMTMuODEyOCAyMC40MDggMTMuODE2OCAyMC40MDggMTMuODIwNyAyMC40MDhDMTMuODI0NyAyMC40MDggMTMuODI4NiAyMC40MDggMTMuODMyNiAyMC40MDhDMTMuODM2NSAyMC40MDggMTMuODQwNSAyMC40MDggMTMuODQ0NSAyMC40MDhDMTMuODQ4NCAyMC40MDggMTMuODUyNCAyMC40MDggMTMuODU2NCAyMC40MDhDMTMuODYwMyAyMC40MDggMTMuODY0MyAyMC40MDggMTMuODY4MyAyMC40MDhDMTMuODcyMyAyMC40MDggMTMuODc2MyAyMC40MDggMTMuODgwMyAyMC40MDhDMTMuODg0MiAyMC40MDggMTMuODg4MiAyMC40MDggMTMuODkyMiAyMC40MDhDMTMuODk2MiAyMC40MDggMTMuOTAwMiAyMC40MDggMTMuOTA0MiAyMC40MDhDMTMuOTA4MiAyMC40MDggMTMuOTEyMiAyMC40MDggMTMuOTE2MiAyMC40MDhDMTMuOTIwMiAyMC40MDggMTMuOTI0MiAyMC40MDggMTMuOTI4MyAyMC40MDhDMTMuOTMyMyAyMC40MDggMTMuOTM2MyAyMC40MDggMTMuOTQwMyAyMC40MDhDMTMuOTQ0MyAyMC40MDggMTMuOTQ4NCAyMC40MDggMTMuOTUyNCAyMC40MDhDMTMuOTU2NCAyMC40MDggMTMuOTYwNCAyMC40MDggMTMuOTY0NSAyMC40MDhDMTMuOTY4NSAyMC40MDggMTMuOTcyNSAyMC40MDggMTMuOTc2NiAyMC40MDhDMTMuOTgwNiAyMC40MDggMTMuOTg0NyAyMC40MDggMTMuOTg4NyAyMC40MDhDMTMuOTkyOCAyMC40MDggMTMuOTk2OCAyMC40MDggMTQuMDAwOSAyMC40MDhDMTQuMDA0OSAyMC40MDggMTQuMDA5IDIwLjQwOCAxNC4wMTMgMjAuNDA4QzE0LjAxNzEgMjAuNDA4IDE0LjAyMTIgMjAuNDA4IDE0LjAyNTIgMjAuNDA4QzE0LjAyOTMgMjAuNDA4IDE0LjAzMzQgMjAuNDA4IDE0LjAzNzQgMjAuNDA4QzE0LjA0MTUgMjAuNDA4IDE0LjA0NTYgMjAuNDA4IDE0LjA0OTcgMjAuNDA4QzE0LjA1MzcgMjAuNDA4IDE0LjA1NzggMjAuNDA4IDE0LjA2MTkgMjAuNDA4QzE0LjA2NiAyMC40MDggMTQuMDcwMSAyMC40MDggMTQuMDc0MiAyMC40MDhDMTQuMDc4MyAyMC40MDggMTQuMDgyMyAyMC40MDggMTQuMDg2NCAyMC40MDhDMTQuMDkwNSAyMC40MDggMTQuMDk0NiAyMC40MDggMTQuMDk4NyAyMC40MDhDMTQuMTAyOCAyMC40MDggMTQuMTA2OSAyMC40MDggMTQuMTExMSAyMC40MDhDMTQuMTE1MiAyMC40MDggMTQuMTE5MyAyMC40MDggMTQuMTIzNCAyMC40MDhDMTQuMTI3NSAyMC40MDggMTQuMTMxNiAyMC40MDggMTQuMTM1NyAyMC40MDhDMTQuMTM5OSAyMC40MDggMTQuMTQ0IDIwLjQwOCAxNC4xNDgxIDIwLjQwOEMxNC4xNTIyIDIwLjQwOCAxNC4xNTY0IDIwLjQwOCAxNC4xNjA1IDIwLjQwOEMxNC4xNjQ2IDIwLjQwOCAxNC4xNjg4IDIwLjQwOCAxNC4xNzI5IDIwLjQwOEMxNC4xNzcgMjAuNDA4IDE0LjE4MTIgMjAuNDA4IDE0LjE4NTMgMjAuNDA4QzE0LjE4OTUgMjAuNDA4IDE0LjE5MzYgMjAuNDA4IDE0LjE5NzggMjAuNDA4QzE0LjIwMTkgMjAuNDA4IDE0LjIwNiAyMC40MDggMTQuMjEwMiAyMC40MDhDMTQuMjE0NCAyMC40MDggMTQuMjE4NSAyMC40MDggMTQuMjIyNyAyMC40MDhDMTQuMjI2OCAyMC40MDggMTQuMjMxIDIwLjQwOCAxNC4yMzUyIDIwLjQwOEMxNC4yMzkzIDIwLjQwOCAxNC4yNDM1IDIwLjQwOCAxNC4yNDc3IDIwLjQwOEMxNC4yNTE4IDIwLjQwOCAxNC4yNTYgMjAuNDA4IDE0LjI2MDIgMjAuNDA4QzE0LjI2NDMgMjAuNDA4IDE0LjI2ODUgMjAuNDA4IDE0LjI3MjcgMjAuNDA4QzE0LjI3NjkgMjAuNDA4IDE0LjI4MTEgMjAuNDA4IDE0LjI4NTIgMjAuNDA4QzE0LjI4OTQgMjAuNDA4IDE0LjI5MzYgMjAuNDA4IDE0LjI5NzggMjAuNDA4QzE0LjMwMiAyMC40MDggMTQuMzA2MiAyMC40MDggMTQuMzEwNCAyMC40MDhDMTQuMzE0NiAyMC40MDggMTQuMzE4OCAyMC40MDggMTQuMzIzIDIwLjQwOEMxNC4zMjcyIDIwLjQwOCAxNC4zMzE0IDIwLjQwOCAxNC4zMzU2IDIwLjQwOEMxNC4zMzk4IDIwLjQwOCAxNC4zNDQgMjAuNDA4IDE0LjM0ODIgMjAuNDA4QzE0LjM1MjQgMjAuNDA4IDE0LjM1NjYgMjAuNDA4IDE0LjM2MDggMjAuNDA4QzE0LjM2NSAyMC40MDggMTQuMzY5MyAyMC40MDggMTQuMzczNSAyMC40MDhDMTQuMzc3NyAyMC40MDggMTQuMzgxOSAyMC40MDggMTQuMzg2MSAyMC40MDhDMTQuMzkwNCAyMC40MDggMTQuMzk0NiAyMC40MDggMTQuMzk4OCAyMC40MDhDMTQuNDAzIDIwLjQwOCAxNC40MDczIDIwLjQwOCAxNC40MTE1IDIwLjQwOEMxNC40MTU3IDIwLjQwOCAxNC40MiAyMC40MDggMTQuNDI0MiAyMC40MDhDMTQuNDI4NCAyMC40MDggMTQuNDMyNyAyMC40MDggMTQuNDM2OSAyMC40MDhDMTQuNDQxMSAyMC40MDggMTQuNDQ1NCAyMC40MDggMTQuNDQ5NiAyMC40MDhDMTQuNDUzOSAyMC40MDggMTQuNDU4MSAyMC40MDggMTQuNDYyNCAyMC40MDhDMTQuNDY2NiAyMC40MDggMTQuNDcwOSAyMC40MDggMTQuNDc1MSAyMC40MDhDMTQuNDc5NCAyMC40MDggMTQuNDgzNiAyMC40MDggMTQuNDg3OSAyMC40MDhDMTQuNDkyMSAyMC40MDggMTQuNDk2NCAyMC40MDggMTQuNTAwNyAyMC40MDhDMTQuNTA0OSAyMC40MDggMTQuNTA5MiAyMC40MDggMTQuNTEzNSAyMC40MDhDMTQuNTE3NyAyMC40MDggMTQuNTIyIDIwLjQwOCAxNC41MjYzIDIwLjQwOEMxNC41MzA1IDIwLjQwOCAxNC41MzQ4IDIwLjQwOCAxNC41MzkxIDIwLjQwOEMxNC41NDMzIDIwLjQwOCAxNC41NDc2IDIwLjQwOCAxNC41NTE5IDIwLjQwOEMxNC41NTYyIDIwLjQwOCAxNC41NjA0IDIwLjQwOCAxNC41NjQ3IDIwLjQwOEMxNC41NjkgMjAuNDA4IDE0LjU3MzMgMjAuNDA4IDE0LjU3NzYgMjAuNDA4QzE0LjU4MTggMjAuNDA4IDE0LjU4NjEgMjAuNDA4IDE0LjU5MDQgMjAuNDA4QzE0LjU5NDcgMjAuNDA4IDE0LjU5OSAyMC40MDggMTQuNjAzMyAyMC40MDhDMTQuNjA3NiAyMC40MDggMTQuNjExOSAyMC40MDggMTQuNjE2MiAyMC40MDhDMTQuNjIwNSAyMC40MDggMTQuNjI0OCAyMC40MDggMTQuNjI5MSAyMC40MDhDMTQuNjMzNCAyMC40MDggMTQuNjM3NyAyMC40MDggMTQuNjQyIDIwLjQwOEMxNC42NDYzIDIwLjQwOCAxNC42NTA2IDIwLjQwOCAxNC42NTQ5IDIwLjQwOEMxNC42NTkyIDIwLjQwOCAxNC42NjM1IDIwLjQwOCAxNC42Njc4IDIwLjQwOEMxNC42NzIxIDIwLjQwOCAxNC42NzY0IDIwLjQwOCAxNC42ODA3IDIwLjQwOEMxNC42ODUgMjAuNDA4IDE0LjY4OTMgMjAuNDA4IDE0LjY5MzYgMjAuNDA4QzE0LjY5OCAyMC40MDggMTQuNzAyMyAyMC40MDggMTQuNzA2NiAyMC40MDhDMTQuNzEwOSAyMC40MDggMTQuNzE1MiAyMC40MDggMTQuNzE5NSAyMC40MDhDMTQuNzIzOSAyMC40MDggMTQuNzI4MiAyMC40MDggMTQuNzMyNSAyMC40MDhDMTQuNzM2OCAyMC40MDggMTQuNzQxMiAyMC40MDggMTQuNzQ1NSAyMC40MDhDMTQuNzQ5OCAyMC40MDggMTQuNzU0MSAyMC40MDggMTQuNzU4NSAyMC40MDhDMTQuNzYyOCAyMC40MDggMTQuNzY3MSAyMC40MDggMTQuNzcxNSAyMC40MDhDMTQuNzc1OCAyMC40MDggMTQuNzgwMSAyMC40MDggMTQuNzg0NSAyMC40MDhDMTQuNzg4OCAyMC40MDggMTQuNzkzMSAyMC40MDggMTQuNzk3NSAyMC40MDhDMTQuODAxOCAyMC40MDggMTQuODA2MSAyMC40MDggMTQuODEwNSAyMC40MDhDMTQuODE0OCAyMC40MDggMTQuODE5MiAyMC40MDggMTQuODIzNSAyMC40MDhDMTQuODI3OCAyMC40MDggMTQuODMyMiAyMC40MDggMTQuODM2NSAyMC40MDhDMTQuODQwOSAyMC40MDggMTQuODQ1MiAyMC40MDggMTQuODQ5NiAyMC40MDhDMTQuODUzOSAyMC40MDggMTQuODU4MyAyMC40MDggMTQuODYyNiAyMC40MDhDMTQuODY3IDIwLjQwOCAxNC44NzEzIDIwLjQwOCAxNC44NzU3IDIwLjQwOEMxNC44OCAyMC40MDggMTQuODg0NCAyMC40MDggMTQuODg4NyAyMC40MDhDMTQuODkzMSAyMC40MDggMTQuODk3NCAyMC40MDggMTQuOTAxOCAyMC40MDhDMTQuOTA2MSAyMC40MDggMTQuOTEwNSAyMC40MDggMTQuOTE0OSAyMC40MDhDMTQuOTE5MiAyMC40MDggMTQuOTIzNiAyMC40MDggMTQuOTI3OSAyMC40MDhDMTQuOTMyMyAyMC40MDggMTQuOTM2NyAyMC40MDggMTQuOTQxIDIwLjQwOEMxNC45NDU0IDIwLjQwOCAxNC45NDk3IDIwLjQwOCAxNC45NTQxIDIwLjQwOEMxNC45NTg1IDIwLjQwOCAxNC45NjI4IDIwLjQwOCAxNC45NjcyIDIwLjQwOEMxNC45NzE2IDIwLjQwOCAxNC45NzU5IDIwLjQwOCAxNC45ODAzIDIwLjQwOEMxNC45ODQ3IDIwLjQwOCAxNC45ODkgMjAuNDA4IDE0Ljk5MzQgMjAuNDA4QzE0Ljk5NzggMjAuNDA4IDE1LjAwMjEgMjAuNDA4IDE1LjAwNjUgMjAuNDA4QzE1LjAxMDkgMjAuNDA4IDE1LjAxNTMgMjAuNDA4IDE1LjAxOTYgMjAuNDA4QzE1LjAyNCAyMC40MDggMTUuMDI4NCAyMC40MDggMTUuMDMyOCAyMC40MDhDMTUuMDM3MSAyMC40MDggMTUuMDQxNSAyMC40MDggMTUuMDQ1OSAyMC40MDhDMTUuMDUwMyAyMC40MDggMTUuMDU0NiAyMC40MDggMTUuMDU5IDIwLjQwOEMxNS4wNjM0IDIwLjQwOCAxNS4wNjc4IDIwLjQwOCAxNS4wNzIxIDIwLjQwOEMxNS4wNzY1IDIwLjQwOCAxNS4wODA5IDIwLjQwOCAxNS4wODUzIDIwLjQwOEMxNS4wODk3IDIwLjQwOCAxNS4wOTQgMjAuNDA4IDE1LjA5ODQgMjAuNDA4QzE1LjEwMjggMjAuNDA4IDE1LjEwNzIgMjAuNDA4IDE1LjExMTYgMjAuNDA4QzE1LjExNTkgMjAuNDA4IDE1LjEyMDMgMjAuNDA4IDE1LjEyNDcgMjAuNDA4QzE1LjEyOTEgMjAuNDA4IDE1LjEzMzUgMjAuNDA4IDE1LjEzNzkgMjAuNDA4QzE1LjE0MjMgMjAuNDA4IDE1LjE0NjYgMjAuNDA4IDE1LjE1MSAyMC40MDhDMTUuMTU1NCAyMC40MDggMTUuMTU5OCAyMC40MDggMTUuMTY0MiAyMC40MDhDMTUuMTY4NiAyMC40MDggMTUuMTczIDIwLjQwOCAxNS4xNzczIDIwLjQwOEMxNS4xODE3IDIwLjQwOCAxNS4xODYxIDIwLjQwOCAxNS4xOTA1IDIwLjQwOEMxNS4xOTQ5IDIwLjQwOCAxNS4xOTkzIDIwLjQwOCAxNS4yMDM3IDIwLjQwOEMxNS4yMDgxIDIwLjQwOCAxNS4yMTI1IDIwLjQwOCAxNS4yMTY4IDIwLjQwOEMxNS4yMjEyIDIwLjQwOCAxNS4yMjU2IDIwLjQwOCAxNS4yMyAyMC40MDhDMTUuMjM0NCAyMC40MDggMTUuMjM4OCAyMC40MDggMTUuMjQzMiAyMC40MDhDMTUuMjQ3NiAyMC40MDggMTUuMjUyIDIwLjQwOCAxNS4yNTY0IDIwLjQwOEMxNS4yNjA4IDIwLjQwOCAxNS4yNjUyIDIwLjQwOCAxNS4yNjk1IDIwLjQwOEMxNS4yNzM5IDIwLjQwOCAxNS4yNzgzIDIwLjQwOCAxNS4yODI3IDIwLjQwOEMxNS4yODcxIDIwLjQwOCAxNS4yOTE1IDIwLjQwOCAxNS4yOTU5IDIwLjQwOEMxNS4zMDAzIDIwLjQwOCAxNS4zMDQ3IDIwLjQwOCAxNS4zMDkxIDIwLjQwOEMxNS4zMTM1IDIwLjQwOCAxNS4zMTc5IDIwLjQwOCAxNS4zMjIzIDIwLjQwOEMxNS4zMjY3IDIwLjQwOCAxNS4zMzExIDIwLjQwOCAxNS4zMzU1IDIwLjQwOEMxNS4zMzk4IDIwLjQwOCAxNS4zNDQyIDIwLjQwOCAxNS4zNDg2IDIwLjQwOEMxNS4zNTMgMjAuNDA4IDE1LjM1NzQgMjAuNDA4IDE1LjM2MTggMjAuNDA4QzE1LjM2NjIgMjAuNDA4IDE1LjM3MDYgMjAuNDA4IDE1LjM3NSAyMC40MDhDMTUuMzc5NCAyMC40MDggMTUuMzgzOCAyMC40MDggMTUuMzg4MiAyMC40MDhDMTUuMzkyNiAyMC40MDggMTUuMzk3IDIwLjQwOCAxNS40MDE0IDIwLjQwOEMxNS40MDU4IDIwLjQwOCAxNS40MTAyIDIwLjQwOCAxNS40MTQ1IDIwLjQwOEMxNS40MTg5IDIwLjQwOCAxNS40MjMzIDIwLjQwOCAxNS40Mjc3IDIwLjQwOEMxNS40MzIxIDIwLjQwOCAxNS40MzY1IDIwLjQwOCAxNS40NDA5IDIwLjQwOEMxNS40NDUzIDIwLjQwOCAxNS40NDk3IDIwLjQwOCAxNS40NTQxIDIwLjQwOEMxNS40NTg1IDIwLjQwOCAxNS40NjI5IDIwLjQwOCAxNS40NjczIDIwLjQwOEMxNS40NzE3IDIwLjQwOCAxNS40NzYxIDIwLjQwOCAxNS40ODA1IDIwLjQwOEMxNS40ODQ4IDIwLjQwOCAxNS40ODkyIDIwLjQwOCAxNS40OTM2IDIwLjQwOEMxNS40OTggMjAuNDA4IDE1LjUwMjQgMjAuNDA4IDE1LjUwNjggMjAuNDA4QzE1LjUxMTIgMjAuNDA4IDE1LjUxNTYgMjAuNDA4IDE1LjUyIDIwLjQwOEMxNS41MjQ0IDIwLjQwOCAxNS41Mjg4IDIwLjQwOCAxNS41MzMyIDIwLjQwOEMxNS41Mzc1IDIwLjQwOCAxNS41NDE5IDIwLjQwOCAxNS41NDYzIDIwLjQwOEMxNS41NTA3IDIwLjQwOCAxNS41NTUxIDIwLjQwOCAxNS41NTk1IDIwLjQwOEMxNS41NjM5IDIwLjQwOCAxNS41NjgzIDIwLjQwOCAxNS41NzI3IDIwLjQwOEMxNS41NzcgMjAuNDA4IDE1LjU4MTQgMjAuNDA4IDE1LjU4NTggMjAuNDA4QzE1LjU5MDIgMjAuNDA4IDE1LjU5NDYgMjAuNDA4IDE1LjU5OSAyMC40MDhDMTUuNjAzNCAyMC40MDggMTUuNjA3NyAyMC40MDggMTUuNjEyMSAyMC40MDhDMTUuNjE2NSAyMC40MDggMTUuNjIwOSAyMC40MDggMTUuNjI1MyAyMC40MDhDMTUuNjI5NyAyMC40MDggMTUuNjM0MSAyMC40MDggMTUuNjM4NCAyMC40MDhDMTUuNjQyOCAyMC40MDggMTUuNjQ3MiAyMC40MDggMTUuNjUxNiAyMC40MDhDMTUuNjU2IDIwLjQwOCAxNS42NjAzIDIwLjQwOCAxNS42NjQ3IDIwLjQwOEMxNS42NjkxIDIwLjQwOCAxNS42NzM1IDIwLjQwOCAxNS42Nzc5IDIwLjQwOEMxNS42ODIyIDIwLjQwOCAxNS42ODY2IDIwLjQwOCAxNS42OTEgMjAuNDA4QzE1LjY5NTQgMjAuNDA4IDE1LjY5OTcgMjAuNDA4IDE1LjcwNDEgMjAuNDA4QzE1LjcwODUgMjAuNDA4IDE1LjcxMjkgMjAuNDA4IDE1LjcxNzIgMjAuNDA4QzE1LjcyMTYgMjAuNDA4IDE1LjcyNiAyMC40MDggMTUuNzMwNCAyMC40MDhDMTUuNzM0NyAyMC40MDggMTUuNzM5MSAyMC40MDggMTUuNzQzNSAyMC40MDhDMTUuNzQ3OSAyMC40MDggMTUuNzUyMiAyMC40MDggMTUuNzU2NiAyMC40MDhDMTUuNzYxIDIwLjQwOCAxNS43NjUzIDIwLjQwOCAxNS43Njk3IDIwLjQwOEMxNS43NzQxIDIwLjQwOCAxNS43Nzg0IDIwLjQwOCAxNS43ODI4IDIwLjQwOEMxNS43ODcyIDIwLjQwOCAxNS43OTE1IDIwLjQwOCAxNS43OTU5IDIwLjQwOEMxNS44MDAzIDIwLjQwOCAxNS44MDQ2IDIwLjQwOCAxNS44MDkgMjAuNDA4QzE1LjgxMzMgMjAuNDA4IDE1LjgxNzcgMjAuNDA4IDE1LjgyMjEgMjAuNDA4QzE1LjgyNjQgMjAuNDA4IDE1LjgzMDggMjAuNDA4IDE1LjgzNTEgMjAuNDA4QzE1LjgzOTUgMjAuNDA4IDE1Ljg0MzkgMjAuNDA4IDE1Ljg0ODIgMjAuNDA4QzE1Ljg1MjYgMjAuNDA4IDE1Ljg1NjkgMjAuNDA4IDE1Ljg2MTMgMjAuNDA4QzE1Ljg2NTYgMjAuNDA4IDE1Ljg3IDIwLjQwOCAxNS44NzQzIDIwLjQwOEMxNS44Nzg3IDIwLjQwOCAxNS44ODMgMjAuNDA4IDE1Ljg4NzQgMjAuNDA4QzE1Ljg5MTcgMjAuNDA4IDE1Ljg5NjEgMjAuNDA4IDE1LjkwMDQgMjAuNDA4QzE1LjkwNDggMjAuNDA4IDE1LjkwOTEgMjAuNDA4IDE1LjkxMzUgMjAuNDA4QzE1LjkxNzggMjAuNDA4IDE1LjkyMjIgMjAuNDA4IDE1LjkyNjUgMjAuNDA4QzE1LjkzMDggMjAuNDA4IDE1LjkzNTIgMjAuNDA4IDE1LjkzOTUgMjAuNDA4QzE1Ljk0MzkgMjAuNDA4IDE1Ljk0ODIgMjAuNDA4IDE1Ljk1MjUgMjAuNDA4QzE1Ljk1NjkgMjAuNDA4IDE1Ljk2MTIgMjAuNDA4IDE1Ljk2NTUgMjAuNDA4QzE1Ljk2OTkgMjAuNDA4IDE1Ljk3NDIgMjAuNDA4IDE1Ljk3ODUgMjAuNDA4QzE1Ljk4MjkgMjAuNDA4IDE1Ljk4NzIgMjAuNDA4IDE1Ljk5MTUgMjAuNDA4QzE1Ljk5NTkgMjAuNDA4IDE2LjAwMDIgMjAuNDA4IDE2LjAwNDUgMjAuNDA4QzE2LjAwODggMjAuNDA4IDE2LjAxMzIgMjAuNDA4IDE2LjAxNzUgMjAuNDA4QzE2LjAyMTggMjAuNDA4IDE2LjAyNjEgMjAuNDA4IDE2LjAzMDUgMjAuNDA4QzE2LjAzNDggMjAuNDA4IDE2LjAzOTEgMjAuNDA4IDE2LjA0MzQgMjAuNDA4QzE2LjA0NzcgMjAuNDA4IDE2LjA1MiAyMC40MDggMTYuMDU2NCAyMC40MDhDMTYuMDYwNyAyMC40MDggMTYuMDY1IDIwLjQwOCAxNi4wNjkzIDIwLjQwOEMxNi4wNzM2IDIwLjQwOCAxNi4wNzc5IDIwLjQwOCAxNi4wODIyIDIwLjQwOEMxNi4wODY1IDIwLjQwOCAxNi4wOTA4IDIwLjQwOCAxNi4wOTUxIDIwLjQwOEMxNi4wOTk0IDIwLjQwOCAxNi4xMDM3IDIwLjQwOCAxNi4xMDggMjAuNDA4QzE2LjExMjMgMjAuNDA4IDE2LjExNjYgMjAuNDA4IDE2LjEyMDkgMjAuNDA4QzE2LjEyNTIgMjAuNDA4IDE2LjEyOTUgMjAuNDA4IDE2LjEzMzggMjAuNDA4QzE2LjEzODEgMjAuNDA4IDE2LjE0MjQgMjAuNDA4IDE2LjE0NjcgMjAuNDA4QzE2LjE1MSAyMC40MDggMTYuMTU1MyAyMC40MDggMTYuMTU5NiAyMC40MDhDMTYuMTYzOSAyMC40MDggMTYuMTY4MiAyMC40MDggMTYuMTcyNCAyMC40MDhDMTYuMTc2NyAyMC40MDggMTYuMTgxIDIwLjQwOCAxNi4xODUzIDIwLjQwOEMxNi4xODk2IDIwLjQwOCAxNi4xOTM4IDIwLjQwOCAxNi4xOTgxIDIwLjQwOEMxNi4yMDI0IDIwLjQwOCAxNi4yMDY3IDIwLjQwOCAxNi4yMTA5IDIwLjQwOEMxNi4yMTUyIDIwLjQwOCAxNi4yMTk1IDIwLjQwOCAxNi4yMjM3IDIwLjQwOEMxNi4yMjggMjAuNDA4IDE2LjIzMjMgMjAuNDA4IDE2LjIzNjUgMjAuNDA4QzE2LjI0MDggMjAuNDA4IDE2LjI0NTEgMjAuNDA4IDE2LjI0OTMgMjAuNDA4QzE2LjI1MzYgMjAuNDA4IDE2LjI1NzkgMjAuNDA4IDE2LjI2MjEgMjAuNDA4QzE2LjI2NjQgMjAuNDA4IDE2LjI3MDYgMjAuNDA4IDE2LjI3NDkgMjAuNDA4QzE2LjI3OTEgMjAuNDA4IDE2LjI4MzQgMjAuNDA4IDE2LjI4NzYgMjAuNDA4QzE2LjI5MTkgMjAuNDA4IDE2LjI5NjEgMjAuNDA4IDE2LjMwMDQgMjAuNDA4QzE2LjMwNDYgMjAuNDA4IDE2LjMwODkgMjAuNDA4IDE2LjMxMzEgMjAuNDA4QzE2LjMxNzMgMjAuNDA4IDE2LjMyMTYgMjAuNDA4IDE2LjMyNTggMjAuNDA4QzE2LjMzIDIwLjQwOCAxNi4zMzQzIDIwLjQwOCAxNi4zMzg1IDIwLjQwOEMxNi4zNDI3IDIwLjQwOCAxNi4zNDcgMjAuNDA4IDE2LjM1MTIgMjAuNDA4QzE2LjM1NTQgMjAuNDA4IDE2LjM1OTYgMjAuNDA4IDE2LjM2MzkgMjAuNDA4QzE2LjM2ODEgMjAuNDA4IDE2LjM3MjMgMjAuNDA4IDE2LjM3NjUgMjAuNDA4QzE2LjM4MDcgMjAuNDA4IDE2LjM4NSAyMC40MDggMTYuMzg5MiAyMC40MDhDMTYuMzkzNCAyMC40MDggMTYuMzk3NiAyMC40MDggMTYuNDAxOCAyMC40MDhDMTYuNDA2IDIwLjQwOCAxNi40MTAyIDIwLjQwOCAxNi40MTQ0IDIwLjQwOEMxNi40MTg2IDIwLjQwOCAxNi40MjI4IDIwLjQwOCAxNi40MjcgMjAuNDA4QzE2LjQzMTIgMjAuNDA4IDE2LjQzNTQgMjAuNDA4IDE2LjQzOTYgMjAuNDA4QzE2LjQ0MzggMjAuNDA4IDE2LjQ0OCAyMC40MDggMTYuNDUyMiAyMC40MDhDMTYuNDU2NCAyMC40MDggMTYuNDYwNiAyMC40MDggMTYuNDY0OCAyMC40MDhDMTYuNDY4OSAyMC40MDggMTYuNDczMSAyMC40MDggMTYuNDc3MyAyMC40MDhDMTYuNDgxNSAyMC40MDggMTYuNDg1NyAyMC40MDggMTYuNDg5OCAyMC40MDhDMTYuNDk0IDIwLjQwOCAxNi40OTgyIDIwLjQwOCAxNi41MDIzIDIwLjQwOEMxNi41MDY1IDIwLjQwOCAxNi41MTA3IDIwLjQwOCAxNi41MTQ4IDIwLjQwOEMxNi41MTkgMjAuNDA4IDE2LjUyMzIgMjAuNDA4IDE2LjUyNzMgMjAuNDA4QzE2LjUzMTUgMjAuNDA4IDE2LjUzNTYgMjAuNDA4IDE2LjUzOTggMjAuNDA4QzE2LjU0NCAyMC40MDggMTYuNTQ4MSAyMC40MDggMTYuNTUyMiAyMC40MDhDMTYuNTU2NCAyMC40MDggMTYuNTYwNSAyMC40MDggMTYuNTY0NyAyMC40MDhDMTYuNTY4OCAyMC40MDggMTYuNTczIDIwLjQwOCAxNi41NzcxIDIwLjQwOEMxNi41ODEyIDIwLjQwOCAxNi41ODU0IDIwLjQwOCAxNi41ODk1IDIwLjQwOEMxNi41OTM2IDIwLjQwOCAxNi41OTc4IDIwLjQwOCAxNi42MDE5IDIwLjQwOEMxNi42MDYgMjAuNDA4IDE2LjYxMDEgMjAuNDA4IDE2LjYxNDMgMjAuNDA4QzE2LjYxODQgMjAuNDA4IDE2LjYyMjUgMjAuNDA4IDE2LjYyNjYgMjAuNDA4QzE2LjYzMDcgMjAuNDA4IDE2LjYzNDggMjAuNDA4IDE2LjYzODkgMjAuNDA4QzE2LjY0MzEgMjAuNDA4IDE2LjY0NzIgMjAuNDA4IDE2LjY1MTMgMjAuNDA4QzE2LjY1NTQgMjAuNDA4IDE2LjY1OTUgMjAuNDA4IDE2LjY2MzYgMjAuNDA4QzE2LjY2NzcgMjAuNDA4IDE2LjY3MTcgMjAuNDA4IDE2LjY3NTggMjAuNDA4QzE2LjY3OTkgMjAuNDA4IDE2LjY4NCAyMC40MDggMTYuNjg4MSAyMC40MDhDMTYuNjkyMiAyMC40MDggMTYuNjk2MyAyMC40MDggMTYuNzAwMyAyMC40MDhDMTYuNzA0NCAyMC40MDggMTYuNzA4NSAyMC40MDggMTYuNzEyNiAyMC40MDhDMTYuNzE2NiAyMC40MDggMTYuNzIwNyAyMC40MDggMTYuNzI0OCAyMC40MDhDMTYuNzI4OCAyMC40MDggMTYuNzMyOSAyMC40MDggMTYuNzM3IDIwLjQwOEMxNi43NDEgMjAuNDA4IDE2Ljc0NTEgMjAuNDA4IDE2Ljc0OTEgMjAuNDA4QzE2Ljc1MzIgMjAuNDA4IDE2Ljc1NzIgMjAuNDA4IDE2Ljc2MTMgMjAuNDA4QzE2Ljc2NTMgMjAuNDA4IDE2Ljc2OTQgMjAuNDA4IDE2Ljc3MzQgMjAuNDA4QzE2Ljc3NzUgMjAuNDA4IDE2Ljc4MTUgMjAuNDA4IDE2Ljc4NTUgMjAuNDA4QzE2Ljc4OTYgMjAuNDA4IDE2Ljc5MzYgMjAuNDA4IDE2Ljc5NzYgMjAuNDA4QzE2LjgwMTYgMjAuNDA4IDE2LjgwNTcgMjAuNDA4IDE2LjgwOTcgMjAuNDA4QzE2LjgxMzcgMjAuNDA4IDE2LjgxNzcgMjAuNDA4IDE2LjgyMTcgMjAuNDA4QzE2LjgyNTggMjAuNDA4IDE2LjgyOTggMjAuNDA4IDE2LjgzMzggMjAuNDA4QzE2LjgzNzggMjAuNDA4IDE2Ljg0MTggMjAuNDA4IDE2Ljg0NTggMjAuNDA4QzE2Ljg0OTggMjAuNDA4IDE2Ljg1MzggMjAuNDA4IDE2Ljg1NzggMjAuNDA4QzE2Ljg2MTggMjAuNDA4IDE2Ljg2NTggMjAuNDA4IDE2Ljg2OTcgMjAuNDA4QzE2Ljg3MzcgMjAuNDA4IDE2Ljg3NzcgMjAuNDA4IDE2Ljg4MTcgMjAuNDA4QzE2Ljg4NTcgMjAuNDA4IDE2Ljg4OTcgMjAuNDA4IDE2Ljg5MzYgMjAuNDA4QzE2Ljg5NzYgMjAuNDA4IDE2LjkwMTYgMjAuNDA4IDE2LjkwNTUgMjAuNDA4QzE2LjkwOTUgMjAuNDA4IDE2LjkxMzUgMjAuNDA4IDE2LjkxNzQgMjAuNDA4QzE2LjkyMTQgMjAuNDA4IDE2LjkyNTMgMjAuNDA4IDE2LjkyOTMgMjAuNDA4QzE2LjkzMzIgMjAuNDA4IDE2LjkzNzIgMjAuNDA4IDE2Ljk0MTEgMjAuNDA4QzE2Ljk0NTEgMjAuNDA4IDE2Ljk0OSAyMC40MDggMTYuOTUyOSAyMC40MDhDMTYuOTU2OSAyMC40MDggMTYuOTYwOCAyMC40MDggMTYuOTY0NyAyMC40MDhDMTYuOTY4NyAyMC40MDggMTYuOTcyNiAyMC40MDggMTYuOTc2NSAyMC40MDhDMTYuOTgwNCAyMC40MDggMTYuOTg0NCAyMC40MDggMTYuOTg4MyAyMC40MDhDMTYuOTkyMiAyMC40MDggMTYuOTk2MSAyMC40MDggMTcgMjAuNDA4VjE4LjQwOFpcIiBmaWxsPVwiI0Y1RjVGNVwiLz5cXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9zdmc+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIE1lbnVIZWxwZXIuQ0FUQUxPR19NRU5VX0tFWToge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHJvbGU9XCJpbWdcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMnB4XCIgaGVpZ2h0PVwiMjJweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWxhYmVsbGVkYnk9XCJib29rSWNvblRpdGxlXCIgc3Ryb2tlPVwiIzAwMDAwMFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInNxdWFyZVwiIHN0cm9rZS1saW5lam9pbj1cIm1pdGVyXCIgZmlsbD1cIm5vbmVcIiBjb2xvcj1cIiMwMDAwMDBcIj4gPHRpdGxlIGlkPVwiYm9va0ljb25UaXRsZVwiPkJvb2s8L3RpdGxlPiA8cGF0aCBkPVwiTTE5IDN2MThIOGEzIDMgMCAwIDEtMy0zVjZhMyAzIDAgMCAxIDMtM2gxMXpcIi8+IDxwYXRoIGQ9XCJNNSAxOGEzIDMgMCAwIDEgMy0zaDExXCIvPiA8L3N2Zz4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgTWVudUhlbHBlci5IT01FX0lOREVYX0tFWToge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDIyIDIxXCIgZmlsbD1cIm5vbmVcIj5cXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHBhdGggZD1cIk0yMSAxMUwxOCA4LjNNMTggOC4zTDExIDJMNCA4LjNNMTggOC4zVjIwSDRWOC4zTTQgOC4zTDEgMTFcIiBzdHJva2U9XCJyZWRcIiBzdHJva2Utd2lkdGg9XCIyXCI+PC9wYXRoPlxcbicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L3N2Zz4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgTWVudUhlbHBlci5TVFVERU5UU19PRkZFUlNfTUVOVV9LRVk6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnPHN2ZyB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDIxIDIxXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XFxuJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxwYXRoIHN0cm9rZT1cIiMwMDAwMDBcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk0gMC4wMTI1IDEuMjI1NiBNIDIuMDc4MyAyLjMxMjkgViAxNC4yNzMgSCA1LjE3NyBDIDUuNzQ3NSAxNC4yNzMgNi4yMDk5IDE0Ljc1OTggNi4yMDk5IDE1LjM2MDMgViAxNy42Nzc4IEwgMTAuODAxNiAxNC40NTU2IEMgMTAuOTcxMiAxNC4zMzY1IDExLjE3MDYgMTQuMjczIDExLjM3NDUgMTQuMjczIEggMTguNjA0OSBWIDIuMzEyOSBIIDIuMDc4M1wiLz5cXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9zdmc+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SG9tZU1lbnUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51TWFwLmdldChNZW51SGVscGVyLkhPTUVfSU5ERVhfS0VZKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFJlZmVyZW5jZURhdGEoKTogdm9pZCB7XHJcblxyXG4gICAgICAgIGxldCBzdWJqZWN0UHJvbWlzZSA9IHRoaXMucmVmZXJlbmNlU2VydmljZS5nZXRBY3RpdmVSZWZlcmVuY2VFbnRpdGllcygnc3ViamVjdHMnLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZWZlcmVuY2VTdWJqZWN0IHx8IHRoaXMucmVmZXJlbmNlU3ViamVjdC5sZW5ndGggIT0gcmVzdWx0LmVudGl0aWVzLmxlbmd0aCB8fCF0aGlzLmlzQXJyYXlJdGVtc0VxdWFscyh0aGlzLnJlZmVyZW5jZVN1YmplY3QsIHJlc3VsdC5lbnRpdGllcykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZVN1YmplY3QgPSByZXN1bHQuZW50aXRpZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgY291cnNlVHlwZXNQcm9taXNlID0gdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLmdldEFjdGl2ZVJlZmVyZW5jZUVudGl0aWVzKCdjb3Vyc2VUeXBlcycsIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlZmVyZW5jZVR5cGUgfHwgdGhpcy5yZWZlcmVuY2VUeXBlLmxlbmd0aCAhPSByZXN1bHQuZW50aXRpZXMubGVuZ3RoIHx8IXRoaXMuaXNBcnJheUl0ZW1zRXF1YWxzKHRoaXMucmVmZXJlbmNlVHlwZSwgcmVzdWx0LmVudGl0aWVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlVHlwZSA9IHJlc3VsdC5lbnRpdGllcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBsYW5ndWFnZXNQcm9taXNlID0gdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLmdldEFjdGl2ZVJlZmVyZW5jZUVudGl0aWVzKCdsYW5ndWFnZXMnLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZWZlcmVuY2VMYW5ndWFnZSB8fCB0aGlzLnJlZmVyZW5jZUxhbmd1YWdlLmxlbmd0aCAhPSByZXN1bHQuZW50aXRpZXMubGVuZ3RoIHx8ICF0aGlzLmlzQXJyYXlJdGVtc0VxdWFscyh0aGlzLnJlZmVyZW5jZUxhbmd1YWdlLCByZXN1bHQuZW50aXRpZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VMYW5ndWFnZSA9IHJlc3VsdC5lbnRpdGllcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBsZWFybmluZ1BhdGhUeXBlc1Byb21pc2UgPSB0aGlzLnJlZmVyZW5jZVNlcnZpY2UuZ2V0QWN0aXZlUmVmZXJlbmNlRW50aXRpZXMoJ2xlYXJuaW5nUGF0aFR5cGVzJywge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlTGVhcm5pbmdQYXRoVHlwZSB8fCB0aGlzLnJlZmVyZW5jZUxlYXJuaW5nUGF0aFR5cGUubGVuZ3RoICE9IHJlc3VsdC5lbnRpdGllcy5sZW5ndGggfHwgIXRoaXMuaXNBcnJheUl0ZW1zRXF1YWxzKHRoaXMucmVmZXJlbmNlTGVhcm5pbmdQYXRoVHlwZSwgcmVzdWx0LmVudGl0aWVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlTGVhcm5pbmdQYXRoVHlwZSA9IHJlc3VsdC5lbnRpdGllcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICBzdWJqZWN0UHJvbWlzZSxcclxuICAgICAgICAgICAgY291cnNlVHlwZXNQcm9taXNlLFxyXG4gICAgICAgICAgICBsYW5ndWFnZXNQcm9taXNlLFxyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhUeXBlc1Byb21pc2VcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVkaXJlY3RMb2dvVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5yZWRpcmVjdFVybExvZ29VcmwgPyB0aGlzLnJlZGlyZWN0VXJsTG9nb1VybCA6ICcjJyArIHRoaXMuc3lzdGVtSG9tZVBhZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICcjJyArIHRoaXMuYXV0aFJvdXRlci5sb2dvblVybCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVkaXJlY3RNZW51UGFnZVVybChtZW51R3JvdXA6IElNZW51R3JvdXApOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChtZW51R3JvdXAua2V5ID09PSBNZW51SGVscGVyLkZBUV9NRU5VX0tFWSkge1xyXG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLnJlZGlyZWN0VXJsSGVscFBhZ2UgPyB0aGlzLnJlZGlyZWN0VXJsSGVscFBhZ2UgOiBtZW51R3JvdXAudXJsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZW51R3JvdXAudXJsID8gbWVudUdyb3VwLnVybCA6ICcjLyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuVGFibGV0TmF2aWdhdGlvbk1lbnUoKTogdm9pZCB7XHJcbiAgICAgICAgJChcIiN2aHMtcmlnaHQtbW9iaWxlLXNpZGViYXIgLnBhbmVsLXdyYXAgLnBhbmVsXCIpLnNjcm9sbFRvcCgwKTtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInZocy1yaWdodC1tb2JpbGUtc2lkZWJhclwiKS5jbGFzc0xpc3QuYWRkKFwiaW5cIik7XHJcbiAgICAgICAgJChcImJvZHlcIikuY3NzKFwib3ZlcmZsb3dcIiwgXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlVGFibGV0TmF2aWdhdGlvbk1lbnUoKTogdm9pZCB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ2aHMtcmlnaHQtbW9iaWxlLXNpZGViYXJcIikuY2xhc3NMaXN0LnJlbW92ZShcImluXCIpO1xyXG4gICAgICAgICQoXCJib2R5XCIpLmNzcyhcIm92ZXJmbG93XCIsIFwiYXV0b1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG93QWRtaW5pc3RyYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMubWVudU1hcCAmJiB0aGlzLm1lbnVNYXAuZ2V0KHRoaXMubWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9NRU5VX0tFWSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVudU1hcC5nZXQodGhpcy5tZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX01FTlVfS0VZKS5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmFsbG93ZWQpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG93QW5hbHl0aWNzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm1lbnVNYXAgJiYgdGhpcy5tZW51TWFwLmdldCh0aGlzLm1lbnVIZWxwZXIuQU5BTFlUSUNTX01FTlVfS0VZKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tZW51TWFwLmdldCh0aGlzLm1lbnVIZWxwZXIuQU5BTFlUSUNTX01FTlVfS0VZKS5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmFsbG93ZWQpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlUGF0aEZvclBlcnNvbmFsKGl0ZW06IElNZW51SXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1lbnVHcm91cEtleSA9IGl0ZW0ua2V5O1xyXG5cclxuICAgICAgICBjb25zdCBwYXRoID0gaXRlbS51cmwuc3Vic3RyaW5nKDEsIGl0ZW0udXJsLmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoJ3BlcnNvbmFsLmNoYW5nZS5yb3V0ZScsIHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1Nob3dNZW51SXRlbShtZW51R3JvdXBLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtZW51R3JvdXBLZXkgIT09IHRoaXMubWVudUhlbHBlci5FRFVDQVRJT05fTUFURVJJQUxTX01FTlVfS0VZXHJcbiAgICAgICAgICAgICYmIG1lbnVHcm91cEtleSAhPT0gdGhpcy5tZW51SGVscGVyLkVEVUNBVElPTl9RVUlaWkVTX01FTlVfS0VZXHJcbiAgICAgICAgICAgICYmIG1lbnVHcm91cEtleSAhPT0gdGhpcy5tZW51SGVscGVyLkVEVUNBVElPTl9TVVJWRVlTX01FTlVfS0VZXHJcbiAgICAgICAgICAgICYmIG1lbnVHcm91cEtleSAhPT0gdGhpcy5tZW51SGVscGVyLkVEVUNBVElPTl9GTEFTSENBUkRTX01FTlVfS0VZO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNBcnJheUl0ZW1zRXF1YWxzKGZpcnN0OiBBcnJheTxhbnk+LCBzZWNvbmQ6IEFycmF5PGFueT4pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY29uZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIWZpcnN0IHx8IGZpcnN0W2ldLmlkICE9IHNlY29uZFtpXS5pZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbWFnZUZvckJhZGdlKGJhZGdlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoYmFkZ2UuYmFkZ2VUeXBlID09IFwiQkFER0VcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRJbWFnZUJhZGdlKGJhZGdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWJhZGdlLnByZXZpZXdVcmwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgdGhlbWVzL2RlZmF1bHQvaW1nL2FjdGlvbkJhZGdlcy8ke2JhZGdlLmJhZGdlS2V5fS5wbmdgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBiYWRnZS5wcmV2aWV3VXJsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW1hZ2VCYWRnZShiYWRnZTogSUJhZGdlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoYmFkZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCFiYWRnZS5wcmV2aWV3VXJsICYmIGJhZGdlLmJhZGdlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2VOYW1lID0gYmFkZ2UuYmFkZ2VOYW1lLnNwbGl0KCcgJykuam9pbignJyk7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGJhZGdlLmJhZGdlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkNfQ01QTFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU5hbWUgPSBcIkNvdXJzZUZpbmlzaGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJMUF9DTVBMXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlTmFtZSA9IFwiTGVhcm5pbmdQYXRoRmluaXNoZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYHRoZW1lcy9kZWZhdWx0L2ltZy9iYWRnZXMvJHtpbWFnZU5hbWV9LnBuZ2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJhZGdlLnByZXZpZXdVcmwgPyBiYWRnZS5wcmV2aWV3VXJsIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRJbWFnZXNGb3JBY3Rpdml0eUJhZGdlcyhiYWRnZXM6IElCYWRnZVtdKTogdm9pZCB7XHJcbiAgICAgICAgYmFkZ2VzLmZvckVhY2goYiA9PiB7XHJcbiAgICAgICAgICAgIGIucHJldmlld1VybCA9IHRoaXMuZ2V0SW1hZ2VGb3JCYWRnZShiKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdWJtaXRSZXdhcmQocmV3YXJkSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGxldCB0ZW1wUmV3YXJkcyA9IHRoaXMucmV3YXJkcy5maWx0ZXIociA9PiByLmlkICE9PSByZXdhcmRJZCk7XHJcbiAgICAgICAgaWYgKHRlbXBSZXdhcmRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICQoJy5yZXdhcmROb3RpZmljYXRpb24nKS5hZGRDbGFzcygncmV3YXJkTm90aWZpY2F0aW9uLXVwJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRzID0gdGVtcFJld2FyZHM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJld2FyZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRUb1Nob3cgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnLnJld2FyZE5vdGlmaWNhdGlvbicpLnJlbW92ZUNsYXNzKCdyZXdhcmROb3RpZmljYXRpb24tZG93bicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkVG9TaG93ID0gdGhpcy5yZXdhcmRzWzBdO1xyXG4gICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJld2FyZFRvU2hvdyA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuSGVscEJvdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChDb21wb25lbnRzRXZlbnRzLkhFTFBfQk9UX09QRU5fQ0xPU0UpO1xyXG4gICAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgUGVyc29uYWxNZW51QXR0cmlidXRlcyBleHRlbmRzIGFuZ3VsYXIuSUF0dHJpYnV0ZXMge1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUGVyc29uYWxNZW51RGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFBlcnNvbmFsTWVudUF0dHJpYnV0ZXMsIGNvbnRyb2xsZXI6IFBlcnNvbmFsTWVudUNvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkaXJlY3RpdmU6IGFueSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUubGluayA9IGxpbms7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB0cnVlO1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBQZXJzb25hbE1lbnVDb250cm9sbGVyO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuUGVyc29uYWxNZW51RGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTmF2aWdhdGlvblBlcnNvbmFsTWVudURpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuXHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogYW5ndWxhci5JU2NvcGUsIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcywgY29udHJvbGxlcjogUGVyc29uYWxNZW51Q29udHJvbGxlcixcclxuICAgICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogYW5ndWxhci5JVHJhbnNjbHVkZUZ1bmN0aW9uKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW55ID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvbWVudS9uYXZpZ2F0aW9uLXBlcnNvbmFsLW1lbnUuaHRtbFwiKTtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5yZXF1aXJlID0gXCJecGVyc29uYWxNZW51XCI7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5OYXZpZ2F0aW9uUGVyc29uYWxNZW51RGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGVmdFBlcnNvbmFsTWVudURpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuXHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogYW55LCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsIGNvbnRyb2xsZXI6IFBlcnNvbmFsTWVudUNvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFueSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL21lbnUvbGVmdC1wZXJzb25hbC1tZW51Lmh0bWxcIik7XHJcbiAgICBkaXJlY3RpdmUubGluayA9IGxpbms7XHJcbiAgICBkaXJlY3RpdmUucmVxdWlyZSA9IFwiXnBlcnNvbmFsTWVudVwiO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuTGVmdFBlcnNvbmFsTWVudURpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0JyZWFkY3J1bWJzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcclxuXHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBuZy5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBuZy5JQXR0cmlidXRlcywgY29udHJvbGxlcjogUGVyc29uYWxNZW51Q29udHJvbGxlcixcclxuICAgICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogbmcuSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFueSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1icmVhZGNydW1icy5odG1sXCIpO1xyXG4gICAgZGlyZWN0aXZlLmxpbmsgPSBsaW5rO1xyXG4gICAgZGlyZWN0aXZlLnJlcXVpcmUgPSBcIl5wZXJzb25hbE1lbnVcIjtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc0JyZWFkY3J1bWJzRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGVmdE1haW5NZW51RGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogbmcuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogbmcuSUF0dHJpYnV0ZXMsIGNvbnRyb2xsZXI6IFBlcnNvbmFsTWVudUNvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IG5nLklUcmFuc2NsdWRlRnVuY3Rpb24pIHtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9tZW51L2xlZnQtbWFpbi1tZW51Lmh0bWxcIik7XHJcbiAgICBkaXJlY3RpdmUubGluayA9IGxpbms7XHJcbiAgICBkaXJlY3RpdmUucmVxdWlyZSA9IFwiXnBlcnNvbmFsTWVudVwiO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuTGVmdE1haW5NZW51RGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtRdWl6emVzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9RdWl6emVzUm91dGVyXCI7XHJcbmltcG9ydCB7UXVpelNlcnZpY2V9IGZyb20gXCIuLi9xdWl6emVzL1F1aXpTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4vZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVF1aXp9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpelwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUXVpelZpZXdUb3BUYWJzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBxdWl6PzogSVF1aXo7XHJcbiAgICB0b3BNZW51S2V5OiBzdHJpbmc7XHJcblxyXG4gICAgdm0/OiBRdWl6Vmlld1RvcFRhYnNDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVpelZpZXdUb3BUYWJzQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIElORk9fVEFCX0tFWTogc3RyaW5nID0gXCJpbmZvXCI7XHJcbiAgICBwdWJsaWMgRURJVF9UQUJfS0VZOiBzdHJpbmcgPSBcImVkaXRcIjtcclxuXHJcbiAgICBwdWJsaWMgcXVpejogSVF1aXo7XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBpc1Nob3dEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFF1aXp6ZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBRdWl6U2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJUXVpelZpZXdUb3BUYWJzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6emVzUm91dGVyOiBRdWl6emVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6U2VydmljZTogUXVpelNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnJhbmRpbmdTZXJ2aWNlOiBDdXN0b21CcmFuZGluZ1NlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucXVpeiA9ICRzY29wZS5xdWl6O1xyXG4gICAgICAgIHRoaXMuaXNTaG93RGVsZXRlQnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJUXVpelZpZXdUb3BUYWJzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzU2hvd0RlbGV0ZUJ1dHRvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbigodXNlcjogSVVzZXJJbmZvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMucXVpeiAmJiB0aGlzLnF1aXoucGVybWlzc2lvbnMgJiYgdGhpcy5xdWl6LnBlcm1pc3Npb25zLmRlbGV0ZSkgfHwgKHRoaXMuc3lzdGVtUGVybWlzc2lvbnMubWFuYWdlQW55TGVhcm5pbmdPYmplY3QgJiYgdXNlci5hbGxCdXNpbmVzc1VuaXRzKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8ICh0aGlzLnN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUxlYXJuaW5nT2JqZWN0ICYmICEhdXNlci5idXNpbmVzc1VuaXRzICYmIHVzZXIuYnVzaW5lc3NVbml0cy5pbmRleE9mKHRoaXMucXVpei5idXNpbmVzc1VuaXRJZCkgPiAtMSkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb3BNZW51QWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS50b3BNZW51S2V5ID09IHRvcE1lbnVLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZVF1aXoocXVpeklkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgYWxsb3dFdmVudCA9IG5ldyBFdmVudChcImFsbG93TmF2aWdhdGlvblwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWl6U2VydmljZS5nZXREZXBlbmRlbnRDb3Vyc2VzRnJvbVF1aXpTdXJ2ZXkocXVpeklkKVxyXG4gICAgICAgICAgICAudGhlbigoY291cnNlczogSUNvdXJzZVtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGlhbG9nVGl0bGU6IHN0cmluZyA9IHRoaXMucXVpei5xdWl6VHlwZSA9PT0gXCJRVUlaXCIgP1xyXG4gICAgICAgICAgICAgICAgICAgIFwiRGVsZXRlIHF1aXpcIiA6IHRoaXMucXVpei5xdWl6VHlwZSA9PT0gXCJTVVJWRVlcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRGVsZXRlIHN1cnZleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJEZWxldGUgZmxhc2hjYXJkXCI7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGlhbG9nTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb3Vyc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdG9kYXkgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHBpcmVkQ291cnNlcyA9IGNvdXJzZXMuZmlsdGVyKGMgPT4gYy5lbmREYXRlICYmIGMuZW5kRGF0ZSA8PSB0b2RheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGlyZWRDb3Vyc2VzLmxlbmd0aCAhPSBjb3Vyc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dNZXNzYWdlID0gdGhpcy5xdWl6LnF1aXpUeXBlID09PSBcIlFVSVpcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjxwPlRoZSBxdWl6IGNhbm5vdCBiZSByZW1vdmVkLiBJdCBpcyB1c2VkIGluIHRoZSBjb3Vyc2VzOjwvcD5cIiA6IHRoaXMucXVpei5xdWl6VHlwZSA9PT0gXCJTVVJWRVlcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI8cD5UaGUgc3VydmV5IGNhbm5vdCBiZSByZW1vdmVkLiBJdCBpcyB1c2VkIGluIHRoZSBjb3Vyc2VzOjwvcD5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCI8cD5UaGUgZmxhc2hjYXJkIGNhbm5vdCBiZSByZW1vdmVkLiBJdCBpcyB1c2VkIGluIHRoZSBjb3Vyc2VzOjwvcD5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGl2ZUNvdXJzZXMgPSBjb3Vyc2VzLmZpbHRlcihjID0+IGV4cGlyZWRDb3Vyc2VzLmluZGV4T2YoYykgPCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVDb3Vyc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0aXZlQ291cnNlID0gYWN0aXZlQ291cnNlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ01lc3NhZ2UgKz0gXCI8cD5cIiArIChpICsgMSkgKyBcIi4gXCIgKyBhY3RpdmVDb3Vyc2UudG9waWMgKyBcIjwvcD5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShkaWFsb2dNZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGlhbG9nVGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ01lc3NhZ2UgPSB0aGlzLnF1aXoucXVpelR5cGUgPT09IFwiUVVJWlwiID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPHA+VGhpcyBxdWl6IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uIEl0IGlzIHVzZWQgaW4gdGhlIGNvdXJzZXM6IDpjb3Vyc2VzIENvbnRpbnVlPzwvcD5cIiA6IHRoaXMucXVpei5xdWl6VHlwZSA9PT0gXCJTVVJWRVlcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI8cD5UaGlzIHN1cnZleSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBJdCBpcyB1c2VkIGluIHRoZSBjb3Vyc2VzOiA6Y291cnNlcyBDb250aW51ZT88L3A+XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiPHA+VGhpcyBmbGFzaGNhcmQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gSXQgaXMgdXNlZCBpbiB0aGUgY291cnNlczogOmNvdXJzZXMgQ29udGludWU/PC9wPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW5kRGlhbG9nTWVzc2FnZSA9IGRpYWxvZ01lc3NhZ2Uuc3BsaXQoXCI6Y291cnNlc1wiKVsxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nTWVzc2FnZSA9IGRpYWxvZ01lc3NhZ2Uuc3BsaXQoXCI6Y291cnNlc1wiKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBpcmVkQ291cnNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cGlyZWRDb3Vyc2UgPSBleHBpcmVkQ291cnNlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ01lc3NhZ2UgKz0gXCI8cD5cIiArIChpICsgMSkgKyBcIi4gXCIgKyBleHBpcmVkQ291cnNlLnRvcGljICsgXCI8L3A+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nTWVzc2FnZSArPSBlbmREaWFsb2dNZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShkaWFsb2dNZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGlhbG9nVGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGFsbG93RXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6U2VydmljZS5pbmFjdGl2ZVF1aXpTdXJ2ZXkodGhpcy5xdWl6LmlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucXVpei5xdWl6VHlwZSA9PT0gXCJRVUlaXCIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgcXVpeiBoYXMgYmVlbiByZW1vdmVkXCIgOiB0aGlzLnF1aXoucXVpelR5cGUgPT09IFwiU1VSVkVZXCIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlIHN1cnZleSBoYXMgYmVlbiByZW1vdmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiVGhlIGZsYXNoY2FyZCBoYXMgYmVlbiByZW1vdmVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1aXoucXVpelR5cGUgPT09IFwiUVVJWlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLnF1aXp6ZXNJbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1aXoucXVpelR5cGUgPT09IFwiU1VSVkVZXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnF1aXp6ZXNSb3V0ZXIuc3VydmV5c0luZGV4VXJsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucXVpenplc1JvdXRlci5mbGFzaGNhcmRzSW5kZXhVcmwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkaWFsb2dNZXNzYWdlID0gdGhpcy5xdWl6LnF1aXpUeXBlID09PSBcIlFVSVpcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhpcyBxdWl6IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uIENvbnRpbnVlP1wiIDogdGhpcy5xdWl6LnF1aXpUeXBlID09PSBcIlNVUlZFWVwiID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhpcyBzdXJ2ZXkgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gQ29udGludWU/XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJUaGlzIGZsYXNoY2FyZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBDb250aW51ZT9cIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oZGlhbG9nTWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGlhbG9nVGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiWWVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGFsbG93RXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXpTZXJ2aWNlLmluYWN0aXZlUXVpelN1cnZleSh0aGlzLnF1aXouaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucXVpei5xdWl6VHlwZSA9PT0gXCJRVUlaXCIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSBxdWl6IGhhcyBiZWVuIHJlbW92ZWRcIiA6IHRoaXMucXVpei5xdWl6VHlwZSA9PT0gXCJTVVJWRVlcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSBzdXJ2ZXkgaGFzIGJlZW4gcmVtb3ZlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiVGhlIGZsYXNoY2FyZCBoYXMgYmVlbiByZW1vdmVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWl6LnF1aXpUeXBlID09PSBcIlFVSVpcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLnF1aXp6ZXNJbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucXVpei5xdWl6VHlwZSA9PT0gXCJTVVJWRVlcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLmZsYXNoY2FyZHNJbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVVcmwocXVpeklkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLiRsb2NhdGlvbi5wYXRoKCkuaW5kZXhPZihRdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFJvdXRlKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVpenplc1JvdXRlci5zdXJ2ZXlzVXBkYXRlVXJsKHF1aXpJZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiRsb2NhdGlvbi5wYXRoKCkuaW5kZXhPZihRdWl6emVzUm91dGVyLnF1aXp6ZXNJbmRleFJvdXRlKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzVXBkYXRlVXJsKHF1aXpJZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiRsb2NhdGlvbi5wYXRoKCkuaW5kZXhPZihRdWl6emVzUm91dGVyLmZsYXNoY2FyZHNJbmRleFJvdXRlKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVpenplc1JvdXRlci5mbGFzaGNhcmRzVXBkYXRlVXJsKHF1aXpJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXRhaWxVcmwocXVpeklkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLiRsb2NhdGlvbi5wYXRoKCkuaW5kZXhPZihRdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFJvdXRlKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVpenplc1JvdXRlci5zdXJ2ZXlzRGV0YWlsc1VybChxdWl6SWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4kbG9jYXRpb24ucGF0aCgpLmluZGV4T2YoUXVpenplc1JvdXRlci5xdWl6emVzSW5kZXhSb3V0ZSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1aXp6ZXNSb3V0ZXIucXVpenplc0RldGFpbHNVcmwocXVpeklkKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJGxvY2F0aW9uLnBhdGgoKS5pbmRleE9mKFF1aXp6ZXNSb3V0ZXIuZmxhc2hjYXJkc0luZGV4Um91dGUpICE9PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWl6emVzUm91dGVyLmZsYXNoY2FyZHNEZXRhaWxzVXJsKHF1aXpJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUXVpelZpZXdUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElRdWl6Vmlld1RvcFRhYnNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBRdWl6Vmlld1RvcFRhYnNDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFF1aXpWaWV3VG9wVGFic0NvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgcXVpejogXCI9dmhzUXVpelwiLFxyXG4gICAgICAgICAgICB0b3BNZW51S2V5OiBcIj12aHNUb3BNZW51S2V5XCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtcXVpei10b3AtdGFicy5odG1sXCIpLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblF1aXpWaWV3VG9wVGFic0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eX0gZnJvbSBcIi4vLi4vcmVmZXJlbmNlL21vZGVscy9JU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZVNlcnZpY2V9IGZyb20gXCIuLy4uL3JlZmVyZW5jZS9SZWZlcmVuY2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlVXRpbHN9IGZyb20gXCIuLy4uL3JlZmVyZW5jZS9SZWZlcmVuY2VVdGlsc1wiO1xyXG5pbXBvcnQge1JlZmVyZW5jZUVudGl0aWVzUGFyYW1zfSBmcm9tIFwiLi8uLi9yZWZlcmVuY2UvbW9kZWxzL0lSZWZlcmVuY2VFbnRpdGllc1BhcmFtc1wiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi9tb2RlbHMvRXZlbnRcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVJlZmVyZW5jZUNoZWNrYm94U2VsZWN0b3JEaXJlY3RpdmVTY29wZSBleHRlbmRzIG5nLklTY29wZSB7XHJcbiAgICByZWZlcmVuY2VOYW1lPzogc3RyaW5nO1xyXG4gICAgcmVmZXJlbmNlRmlsdGVyPzogc3RyaW5nO1xyXG4gICAgcmVmZXJlbmNlRGlzYWJsZWRJZHM/OiBudW1iZXJbXTtcclxuICAgIHJlZmVyZW5jZVNvcnRpbmc/OiBzdHJpbmc7XHJcbiAgICBidXNpbmVzc1VuaXRGaWx0ZXI/OiBudW1iZXI7XHJcbiAgICBudWxsYWJsZUJ1c2luZXNzVW5pdD86IGJvb2xlYW47XHJcbiAgICBtb2RlbD86IGFueTtcclxuICAgIG1vZGVsUHJvcGVydHk/OiBzdHJpbmc7XHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgICBvblJlZmVyZW5jZUVudGl0aWVzQ2hhbmdlPzogYW55O1xyXG5cclxuICAgIHZtPzogUmVmZXJlbmNlQ2hlY2tib3hTZWxlY3RvckNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VDaGVja2JveFNlbGVjdG9yQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIHJlZmVyZW5jZUVudGl0aWVzOiBBcnJheTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT47XHJcbiAgICBwdWJsaWMgc2VsZWN0QWxsOiBib29sZWFuO1xyXG5cclxuICAgIHByaXZhdGUgbW9kZWxJZHM6IEFycmF5PG51bWJlcj47XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgUmVmZXJlbmNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVV0aWxzLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElSZWZlcmVuY2VDaGVja2JveFNlbGVjdG9yRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlZmVyZW5jZUFwaTogUmVmZXJlbmNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVmZXJlbmNlVXRpbHM6IFJlZmVyZW5jZVV0aWxzKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLnJlZmVyZW5jZUFwaS5nZXRBY3RpdmVSZWZlcmVuY2VFbnRpdGllc0ZvclNlbGVjdG9yKHRoaXMuJHNjb3BlLnJlZmVyZW5jZU5hbWUsIG5ldyBSZWZlcmVuY2VFbnRpdGllc1BhcmFtcyhcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUucmVmZXJlbmNlRmlsdGVyLCB0aGlzLiRzY29wZS5yZWZlcmVuY2VTb3J0aW5nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0RmlsdGVyLCB0aGlzLiRzY29wZS5udWxsYWJsZUJ1c2luZXNzVW5pdCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0aWVzID0gcmVzdWx0O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLiR3YXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRzY29wZS5tb2RlbFskc2NvcGUubW9kZWxQcm9wZXJ0eV1cclxuICAgICAgICAgICAgICAgIH0sIChuZXdWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxJZHMgPSAkc2NvcGUubW9kZWxbJHNjb3BlLm1vZGVsUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERhdGFNb2RlbCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0l0ZW1EaXNhYmxlZChlbnRpdHk6IElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNjb3BlLnJlZmVyZW5jZURpc2FibGVkSWRzLmZpbHRlcihpZCA9PiBpZCA9PSBlbnRpdHkuaWQpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHB1c2hEYXRhTW9kZWwoKTogdm9pZCB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJlZmVyZW5jZUVudGl0aWVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRpdHk6IElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5ID0gdGhpcy5yZWZlcmVuY2VFbnRpdGllc1tpXTtcclxuICAgICAgICAgICAgZW50aXR5W1wic2VsZWN0ZWRcIl0gPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLm1vZGVsSWRzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLm1vZGVsSWRzW2pdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eS5pZCA9PSBpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVtcInNlbGVjdGVkXCJdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRTZWxlY3RBbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXRlbVNlbGVjdGlvbihlbnRpdHk6IElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5KTogdm9pZCB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1vZGVsSWRzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBpZCA9IHRoaXMubW9kZWxJZHNbaV07XHJcbiAgICAgICAgICAgIGlmIChpZCA9PSBlbnRpdHkuaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWxJZHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUub25SZWZlcmVuY2VFbnRpdGllc0NoYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubW9kZWxJZHMucHVzaChlbnRpdHkuaWQpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLm9uUmVmZXJlbmNlRW50aXRpZXNDaGFuZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdFNlbGVjdEFsbCgpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgYXZhaWxhYmxlUmVmZXJlbmNlRW50aXRpZXMgPSB0aGlzLnJlZmVyZW5jZUVudGl0aWVzLmZpbHRlcihlbnRpdHkgPT5cclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUucmVmZXJlbmNlRGlzYWJsZWRJZHMuZmlsdGVyKGlkID0+IGlkID09IGVudGl0eS5pZCkubGVuZ3RoID09IDApO1xyXG4gICAgICAgIGxldCBjb3VudFNlbGVjdGVkID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmVmZXJlbmNlRW50aXR5IG9mIGF2YWlsYWJsZVJlZmVyZW5jZUVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VFbnRpdHlbXCJzZWxlY3RlZFwiXSkge1xyXG4gICAgICAgICAgICAgICAgY291bnRTZWxlY3RlZCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RBbGwgPSB0aGlzLnJlZmVyZW5jZUVudGl0aWVzICYmIGNvdW50U2VsZWN0ZWQgPT0gYXZhaWxhYmxlUmVmZXJlbmNlRW50aXRpZXMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGlja1NlbGVjdEFsbCgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgYXZhaWxhYmxlUmVmZXJlbmNlRW50aXRpZXMgPSB0aGlzLnJlZmVyZW5jZUVudGl0aWVzLmZpbHRlcihlbnRpdHkgPT5cclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUucmVmZXJlbmNlRGlzYWJsZWRJZHMuZmlsdGVyKGlkID0+IGlkID09IGVudGl0eS5pZCkubGVuZ3RoID09IDApO1xyXG4gICAgICAgIGlmICghdGhpcy5pbml0U2VsZWN0QWxsKCkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZW50aXR5IG9mIGF2YWlsYWJsZVJlZmVyZW5jZUVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlbElkcy5pbmRleE9mKGVudGl0eS5pZCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtU2VsZWN0aW9uKGVudGl0eSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBlbnRpdHkgb2YgYXZhaWxhYmxlUmVmZXJlbmNlRW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsSWRzLmluZGV4T2YoZW50aXR5LmlkKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtU2VsZWN0aW9uKGVudGl0eSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wdXNoRGF0YU1vZGVsKCk7XHJcbiAgICAgICAgdGhpcy5pbml0U2VsZWN0QWxsKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBSZWZlcmVuY2VDaGVja2JveFNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcclxuICAgIHZhciBkaXJlY3RpdmU6IG5nLklEaXJlY3RpdmUgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBSZWZlcmVuY2VDaGVja2JveFNlbGVjdG9yQ29udHJvbGxlcjtcclxuICAgIGRpcmVjdGl2ZS5zY29wZSA9IHtcclxuICAgICAgICByZWZlcmVuY2VOYW1lOiBcIj12aHNSZWZlcmVuY2VOYW1lXCIsXHJcbiAgICAgICAgcmVmZXJlbmNlRmlsdGVyOiBcIj0/dmhzUmVmZXJlbmNlRmlsdGVyXCIsXHJcbiAgICAgICAgcmVmZXJlbmNlRGlzYWJsZWRJZHM6IFwiPT92aHNSZWZlcmVuY2VEaXNhYmxlZElkc1wiLFxyXG4gICAgICAgIHJlZmVyZW5jZVNvcnRpbmc6IFwiPT92aHNSZWZlcmVuY2VTb3J0aW5nXCIsXHJcbiAgICAgICAgYnVzaW5lc3NVbml0RmlsdGVyOiBcIj0/dmhzQnVzaW5lc3NVbml0RmlsdGVyXCIsXHJcbiAgICAgICAgbnVsbGFibGVCdXNpbmVzc1VuaXQ6IFwiPT92aHNOdWxsYWJsZUJ1c2luZXNzVW5pdFwiLFxyXG4gICAgICAgIG1vZGVsOiBcIj12aHNNb2RlbFwiLFxyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6IFwiPXZoc01vZGVsUHJvcGVydHlcIixcclxuICAgICAgICBkaXNhYmxlZDogXCI9P3Zoc0Rpc2FibGVkXCIsXHJcbiAgICAgICAgb25SZWZlcmVuY2VFbnRpdGllc0NoYW5nZTogXCI9P3Zoc09uUmVmZXJlbmNlRW50aXRpZXNDaGFuZ2VcIlxyXG4gICAgfTtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvcmVmZXJlbmNlLWNoZWNrYm94LXNlbGVjdG9yLmh0bWxcIik7XHJcbiAgICBkaXJlY3RpdmUudHJhbnNjbHVkZSA9IHRydWU7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5SZWZlcmVuY2VDaGVja2JveFNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5fSBmcm9tIFwiLi8uLi9yZWZlcmVuY2UvbW9kZWxzL0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5XCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSBcIi4vLi4vcmVmZXJlbmNlL1JlZmVyZW5jZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VFbnRpdGllc1BhcmFtc30gZnJvbSBcIi4vLi4vcmVmZXJlbmNlL21vZGVscy9JUmVmZXJlbmNlRW50aXRpZXNQYXJhbXNcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlVXRpbHN9IGZyb20gXCIuLi9yZWZlcmVuY2UvUmVmZXJlbmNlVXRpbHNcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0lSZWZlcmVuY2VFbnRpdHlNZXRhZGF0YX0gZnJvbSBcIi4uL3JlZmVyZW5jZS9tb2RlbHMvUmVmZXJlbmNlTWV0YWRhdGFcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VNYXhMZW5ndGhWYWxpZGF0b3J9IGZyb20gXCIuLi9yZWZlcmVuY2UvdmFsaWRhdG9ycy9SZWZlcmVuY2VNYXhMZW5ndGhWYWxpZGF0b3JcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VSZXF1aXJlZEF0dHJpYnV0ZXNHcm91cFZhbGlkYXRvcn0gZnJvbSBcIi4uL3JlZmVyZW5jZS92YWxpZGF0b3JzL1JlZmVyZW5jZVJlcXVpcmVkQXR0cmlidXRlc0dyb3VwVmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlSXNSZXF1aXJlZFZhbGlkYXRvcn0gZnJvbSBcIi4uL3JlZmVyZW5jZS92YWxpZGF0b3JzL1JlZmVyZW5jZUlzUmVxdWlyZWRWYWxpZGF0b3JcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL1NlY3VyZWRPYmplY3RUeXBlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElSZWZlcmVuY2VFZGl0YWJsZURyb3Bkb3duU2VsZWN0b3JEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHJlZmVyZW5jZU5hbWU/OiBzdHJpbmc7XHJcbiAgICByZWZlcmVuY2VGaWx0ZXI/OiBzdHJpbmc7XHJcbiAgICByZWZlcmVuY2VTb3J0aW5nPzogc3RyaW5nO1xyXG4gICAgYnVzaW5lc3NVbml0RmlsdGVyPzogbnVtYmVyO1xyXG4gICAgbnVsbGFibGVCdXNpbmVzc1VuaXQ/OiBib29sZWFuO1xyXG4gICAgbW9kZWw/OiBhbnk7XHJcbiAgICBtb2RlbFByb3BlcnR5Pzogc3RyaW5nO1xyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gICAgZWxlbWVudE5hbWU/OiBzdHJpbmc7XHJcbiAgICBudWxsYWJsZT86IGJvb2xlYW47XHJcbiAgICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICAgIGVkaXRhYmxlPzogYm9vbGVhbjtcclxuICAgIHN0eWxlOiBhbnk7XHJcbiAgICBvblNlbGVjdG9yQ2hhbmdlPzogKG9iamVjdD86IGFueSkgPT4gdm9pZDtcclxuICAgIGhpZGVFZGl0PzogYm9vbGVhbjtcclxuXHJcbiAgICB2bT86IFJlZmVyZW5jZURyb3Bkb3duRWRpdGFibGVTZWxlY3RvckNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VEcm9wZG93bkVkaXRhYmxlU2VsZWN0b3JDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIHJlZmVyZW5jZUVudGl0aWVzOiBBcnJheTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT47XHJcbiAgICBwcml2YXRlIHJlZmVyZW5jZUVudGl0aWVzTWFwOiBNYXA8bnVtYmVyLCBJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT47XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRSZWZlcmVuY2VFbnRpdHk6IE1hcDxzdHJpbmcsIGFueT47XHJcbiAgICBwdWJsaWMgY3VycmVudFJlZmVyZW5jZU1ldGFkYXRhOiBJUmVmZXJlbmNlRW50aXR5TWV0YWRhdGE7XHJcbiAgICBwdWJsaWMgY3VycmVudFJlZmVyZW5jZVZhbGlkYXRpb25FcnJvcnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0U2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoYXNBbGxCdXNpbmVzc1VuaXRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdXNlckJ1c2luZXNzVW5pdHM6IEFycmF5PG51bWJlcj47XHJcblxyXG4gICAgcHVibGljIGVkaXRXaW5kb3c6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZXJyb3JXaW5kb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgUmVmZXJlbmNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVV0aWxzLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgJHNjb3BlOiBJUmVmZXJlbmNlRWRpdGFibGVEcm9wZG93blNlbGVjdG9yRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCByZWZlcmVuY2VBcGk6IFJlZmVyZW5jZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyByZWZlcmVuY2VVdGlsczogUmVmZXJlbmNlVXRpbHMsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlZmVyZW5jZUFwaS5nZXRBY3RpdmVSZWZlcmVuY2VFbnRpdGllc0ZvclNlbGVjdG9yKHRoaXMuJHNjb3BlLnJlZmVyZW5jZU5hbWUsIG5ldyBSZWZlcmVuY2VFbnRpdGllc1BhcmFtcyhcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUucmVmZXJlbmNlRmlsdGVyLCB0aGlzLiRzY29wZS5yZWZlcmVuY2VTb3J0aW5nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0RmlsdGVyLCB0aGlzLiRzY29wZS5udWxsYWJsZUJ1c2luZXNzVW5pdCksIG51bGwpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VFbnRpdGllcyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VFbnRpdGllc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT4oKTtcclxuICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VFbnRpdGllcy5mb3JFYWNoKChlbnRpdHk6IElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0aWVzTWFwLnNldChlbnRpdHkuaWQsIGVudGl0eSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmVkaXRXaW5kb3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWZlcmVuY2VWYWxpZGF0aW9uRXJyb3JzTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzID0gdXNlci5hbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJCdXNpbmVzc1VuaXRzID0gdXNlci5idXNpbmVzc1VuaXRzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0QnVzaW5lc3NVbml0KCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFJlZmVyZW5jZUVudGl0eVtcImJ1c2luZXNzVW5pdElkXCJdID0gdGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0RmlsdGVyO1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RWRpdFdpbmRvdyhiOiBib29sZWFuLCByZWZlcmVuY2VOYW1lOiBzdHJpbmcsIGVudGl0eUlkOiBudW1iZXIpOiB2b2lke1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlQXBpLmdldFJlZmVyZW5jZUVudGl0eShyZWZlcmVuY2VOYW1lLCBlbnRpdHlJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSZWZlcmVuY2VFbnRpdHkgPSByZXN1bHQuZW50aXR5O1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSZWZlcmVuY2VNZXRhZGF0YSA9IHJlc3VsdC5tZXRhZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRSZWZlcmVuY2VFbnRpdHlbXCJ0eXBlXCJdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRSZWZlcmVuY2VFbnRpdHlbXCJ0eXBlXCJdID0gdGhpcy5jdXJyZW50UmVmZXJlbmNlRW50aXR5W1widHlwZVwiXVtcImlkXCJdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMucmVmZXJlbmNlVXRpbHMuaGFzVXNlclRoZVNhbWVCdXNpbmVzVW5pdHNXaXRoRW50aXR5KHRoaXMudXNlckJ1c2luZXNzVW5pdHMsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRSZWZlcmVuY2VFbnRpdHkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRXaW5kb3cgPSBiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcldpbmRvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRXaW5kb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JlYXRlV2luZG93KGI6IGJvb2xlYW4sIHJlZmVyZW5jZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZXJyb3JXaW5kb3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlZmVyZW5jZUFwaS5nZXRFbXB0eVJlZmVyZW5jZUVudGl0eShyZWZlcmVuY2VOYW1lKS50aGVuKHJlc3VsdCA9PntcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVmZXJlbmNlRW50aXR5ID0gcmVzdWx0LmVudGl0eTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVmZXJlbmNlTWV0YWRhdGEgPSByZXN1bHQubWV0YWRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QnVzaW5lc3NVbml0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5lZGl0V2luZG93ID0gYjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUVudGl0eSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcmVmZXJlbmNlTmFtZTogc3RyaW5nID0gdGhpcy5jdXJyZW50UmVmZXJlbmNlTWV0YWRhdGEua2V5O1xyXG4gICAgICAgIGxldCBpZDogbnVtYmVyID0gdGhpcy5jdXJyZW50UmVmZXJlbmNlRW50aXR5W1JlZmVyZW5jZVV0aWxzLmVudGl0eUlkUHJvcGVydHldO1xyXG4gICAgICAgIGxldCBjYWxsOiBuZy5JUHJvbWlzZTxhbnk+ID0gaWQgIT0gbnVsbFxyXG4gICAgICAgICAgICA/IHRoaXMucmVmZXJlbmNlQXBpLnVwZGF0ZVJlZmVyZW5jZUVudGl0eShyZWZlcmVuY2VOYW1lLCBpZCwgdGhpcy5jdXJyZW50UmVmZXJlbmNlRW50aXR5KVxyXG4gICAgICAgICAgICA6IHRoaXMucmVmZXJlbmNlQXBpLmNyZWF0ZVJlZmVyZW5jZUVudGl0eShyZWZlcmVuY2VOYW1lLCB0aGlzLmN1cnJlbnRSZWZlcmVuY2VFbnRpdHkpO1xyXG5cclxuICAgICAgICBjYWxsLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRW50aXRpZXNMaXN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFdpbmRvdyA9IGZhbHNlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IucmVmZXJlbmNlcy5kdXBsaWNhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiUmVmZXJlbmNlZCBkYXRhIGVsZW1lbnQgYWxyZWFkeSBleGlzdHNcIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmNvbW1vbkVycm9yKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGVFbnRpdHkoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHJlZmVyZW5jZU5hbWU6IHN0cmluZyA9IHRoaXMuY3VycmVudFJlZmVyZW5jZU1ldGFkYXRhLmtleTtcclxuICAgICAgICBsZXQgaWQ6IG51bWJlciA9IHRoaXMuY3VycmVudFJlZmVyZW5jZUVudGl0eVtSZWZlcmVuY2VVdGlscy5lbnRpdHlJZFByb3BlcnR5XTtcclxuICAgICAgICBsZXQgdmVyc2lvbjogbnVtYmVyID0gdGhpcy5jdXJyZW50UmVmZXJlbmNlRW50aXR5W1JlZmVyZW5jZVV0aWxzLmVudGl0eVZlcnNpb25Qcm9wZXJ0eV07XHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VBcGkuc2V0QWN0aXZlUmVmZXJlbmNlRW50aXR5KHJlZmVyZW5jZU5hbWUsIGlkLCB2ZXJzaW9uLCBmYWxzZSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hFbnRpdGllc0xpc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5lZGl0V2luZG93ID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRFbnRpdHlWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWZlcmVuY2VWYWxpZGF0aW9uRXJyb3JzTWFwLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWZlcmVuY2VNYXhMZW5ndGhWYWxpZGF0b3IodGhpcy5yZWZlcmVuY2VVdGlscywgdGhpcy5jdXJyZW50UmVmZXJlbmNlRW50aXR5LCB0aGlzLmN1cnJlbnRSZWZlcmVuY2VNZXRhZGF0YSxcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVmZXJlbmNlVmFsaWRhdGlvbkVycm9yc01hcClcclxuICAgICAgICAgICAgICAgIC52YWxpZCgpXHJcbiAgICAgICAgICAgICYmICh0aGlzLmN1cnJlbnRSZWZlcmVuY2VNZXRhZGF0YS5yZXF1aXJlZEF0dHJpYnV0ZXNHcm91cFxyXG4gICAgICAgICAgICAgICAgPyBuZXcgUmVmZXJlbmNlUmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXBWYWxpZGF0b3IodGhpcy5yZWZlcmVuY2VVdGlscywgdGhpcy5jdXJyZW50UmVmZXJlbmNlRW50aXR5LCB0aGlzLmN1cnJlbnRSZWZlcmVuY2VNZXRhZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRSZWZlcmVuY2VWYWxpZGF0aW9uRXJyb3JzTWFwKVxyXG4gICAgICAgICAgICAgICAgICAgIC52YWxpZCgpXHJcbiAgICAgICAgICAgICAgICA6IG5ldyBSZWZlcmVuY2VJc1JlcXVpcmVkVmFsaWRhdG9yKHRoaXMucmVmZXJlbmNlVXRpbHMsIHRoaXMuY3VycmVudFJlZmVyZW5jZUVudGl0eSwgdGhpcy5jdXJyZW50UmVmZXJlbmNlTWV0YWRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVmZXJlbmNlVmFsaWRhdGlvbkVycm9yc01hcClcclxuICAgICAgICAgICAgICAgICAgICAudmFsaWQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2hFbnRpdGllc0xpc3QoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VFbnRpdGllc01hcC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlQXBpLmdldEFjdGl2ZVJlZmVyZW5jZUVudGl0aWVzRm9yU2VsZWN0b3IodGhpcy4kc2NvcGUucmVmZXJlbmNlTmFtZSwgbmV3IFJlZmVyZW5jZUVudGl0aWVzUGFyYW1zKFxyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5yZWZlcmVuY2VGaWx0ZXIsIHRoaXMuJHNjb3BlLnJlZmVyZW5jZVNvcnRpbmcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRGaWx0ZXIsIHRoaXMuJHNjb3BlLm51bGxhYmxlQnVzaW5lc3NVbml0KSwgbnVsbCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0aWVzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0aWVzTWFwID0gbmV3IE1hcDxudW1iZXIsIElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5PigpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0aWVzLmZvckVhY2goKGVudGl0eTogSVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlRW50aXRpZXNNYXAuc2V0KGVudGl0eS5pZCwgZW50aXR5KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxldCBuZXdFbnRpdHkgPSB0aGlzLnJlZmVyZW5jZUVudGl0aWVzXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGVudGl0eSA9PiBlbnRpdHlbUmVmZXJlbmNlVXRpbHMuZW50aXR5TmFtZVByb3BlcnR5XSA9PT0gdGhpcy5jdXJyZW50UmVmZXJlbmNlRW50aXR5W1JlZmVyZW5jZVV0aWxzLmVudGl0eU5hbWVQcm9wZXJ0eV0pWzBdO1xyXG4gICAgICAgICAgICBpZiAobmV3RW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3SWQgPSBuZXdFbnRpdHlbUmVmZXJlbmNlVXRpbHMuZW50aXR5SWRQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5tb2RlbFt0aGlzLiRzY29wZS5tb2RlbFByb3BlcnR5XSA9IG5ld0lkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlQ2FsbGJhY2sgPSAoaWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLm9uU2VsZWN0b3JDaGFuZ2UodGhpcy5yZWZlcmVuY2VFbnRpdGllc01hcC5nZXQoaWQpKTtcclxuICAgICAgICB0aGlzLmVkaXRXaW5kb3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVycm9yV2luZG93ID0gZmFsc2U7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBvbkJ1c2luZXNzVW5pdENoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy4kdGltZW91dChhID0+IHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVjb2RlVGl0bGUodGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRpdGxlO1xyXG4gICAgICAgIHN3aXRjaCAodGl0bGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIk5hbWVcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJOYW1lXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiU291cmNlIHR5cGVcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJTb3VyY2UgdHlwZVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFJlZmVyZW5jZURyb3Bkb3duRWRpdGFibGVTZWxlY3RvckRpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIHZhciBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUuY29udHJvbGxlciA9IFJlZmVyZW5jZURyb3Bkb3duRWRpdGFibGVTZWxlY3RvckNvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7XHJcbiAgICAgICAgcmVmZXJlbmNlTmFtZTogXCI9dmhzUmVmZXJlbmNlTmFtZVwiLFxyXG4gICAgICAgIHJlZmVyZW5jZUZpbHRlcjogXCI9P3Zoc1JlZmVyZW5jZUZpbHRlclwiLFxyXG4gICAgICAgIHJlZmVyZW5jZVNvcnRpbmc6IFwiPT92aHNSZWZlcmVuY2VTb3J0aW5nXCIsXHJcbiAgICAgICAgYnVzaW5lc3NVbml0RmlsdGVyOiBcIj0/dmhzQnVzaW5lc3NVbml0RmlsdGVyXCIsXHJcbiAgICAgICAgbnVsbGFibGVCdXNpbmVzc1VuaXQ6IFwiPT92aHNOdWxsYWJsZUJ1c2luZXNzVW5pdFwiLFxyXG4gICAgICAgIG1vZGVsOiBcIj12aHNNb2RlbFwiLFxyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6IFwiPXZoc01vZGVsUHJvcGVydHlcIixcclxuICAgICAgICBkaXNhYmxlZDogXCI9P3Zoc0Rpc2FibGVkXCIsXHJcbiAgICAgICAgcmVxdWlyZWQ6IFwiPT92aHNSZXF1aXJlZFwiLFxyXG4gICAgICAgIGVsZW1lbnROYW1lOiBcIkA/dmhzRWxlbWVudE5hbWVcIixcclxuICAgICAgICBudWxsYWJsZTogXCI9P3Zoc051bGxhYmxlXCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiPT92aHNQbGFjZWhvbGRlclwiLFxyXG4gICAgICAgIGVkaXRhYmxlOiBcIj0/dmhzRWRpdGFibGVcIixcclxuICAgICAgICBzdHlsZTogXCI9P3Zoc1N0eWxlXCIsXHJcbiAgICAgICAgb25TZWxlY3RvckNoYW5nZTogXCImdmhzT25DaGFuZ2VcIixcclxuICAgICAgICBoaWRlRWRpdDogXCI9P3Zoc0hpZGVFZGl0XCJcclxuICAgIH07XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3JlZmVyZW5jZS1kcm9wZG93bi1lZGl0YWJsZS1zZWxlY3Rvci5odG1sXCIpO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuUmVmZXJlbmNlRHJvcGRvd25FZGl0YWJsZVNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5fSBmcm9tIFwiLi8uLi9yZWZlcmVuY2UvbW9kZWxzL0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5XCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSBcIi4vLi4vcmVmZXJlbmNlL1JlZmVyZW5jZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VSZWRpcmVjdH0gZnJvbSBcIi4vLi4vcmVmZXJlbmNlL1JlZmVyZW5jZVJlZGlyZWN0XCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlRW50aXRpZXNQYXJhbXN9IGZyb20gXCIuLy4uL3JlZmVyZW5jZS9tb2RlbHMvSVJlZmVyZW5jZUVudGl0aWVzUGFyYW1zXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVJlZmVyZW5jZURyb3Bkb3duU2VsZWN0b3JEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHJlZmVyZW5jZU5hbWU/OiBzdHJpbmc7XHJcbiAgICByZWZlcmVuY2VGaWx0ZXI/OiBzdHJpbmc7XHJcbiAgICByZWZlcmVuY2VTb3J0aW5nPzogc3RyaW5nO1xyXG4gICAgYnVzaW5lc3NVbml0RmlsdGVyPzogbnVtYmVyO1xyXG4gICAgbnVsbGFibGVCdXNpbmVzc1VuaXQ/OiBib29sZWFuO1xyXG4gICAgbW9kZWw/OiBhbnk7XHJcbiAgICBtb2RlbFByb3BlcnR5Pzogc3RyaW5nO1xyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gICAgZWxlbWVudE5hbWU/OiBzdHJpbmc7XHJcbiAgICBudWxsYWJsZT86IGJvb2xlYW47XHJcbiAgICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICAgIGVkaXRhYmxlPzogYm9vbGVhbjtcclxuICAgIHN0eWxlOiBhbnk7XHJcbiAgICBvblNlbGVjdG9yQ2hhbmdlPzogKG9iamVjdD86IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgICB2bT86IFJlZmVyZW5jZURyb3Bkb3duU2VsZWN0b3JDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVmZXJlbmNlRHJvcGRvd25TZWxlY3RvckNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgcmVmZXJlbmNlRW50aXRpZXM6IEFycmF5PElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5PjtcclxuICAgIHByaXZhdGUgcmVmZXJlbmNlRW50aXRpZXNNYXA6IE1hcDxudW1iZXIsIElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5PjtcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgUmVmZXJlbmNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVJlZGlyZWN0Lk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgJHNjb3BlOiBJUmVmZXJlbmNlRHJvcGRvd25TZWxlY3RvckRpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHJlZmVyZW5jZUFwaTogUmVmZXJlbmNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCByZWZlcmVuY2VSZWRpcmVjdDogUmVmZXJlbmNlUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihwID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFhdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5udWxsYWJsZUJ1c2luZXNzVW5pdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlQXBpLmdldEFjdGl2ZVJlZmVyZW5jZUVudGl0aWVzRm9yU2VsZWN0b3IodGhpcy4kc2NvcGUucmVmZXJlbmNlTmFtZSwgbmV3IFJlZmVyZW5jZUVudGl0aWVzUGFyYW1zKFxyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5yZWZlcmVuY2VGaWx0ZXIsIHRoaXMuJHNjb3BlLnJlZmVyZW5jZVNvcnRpbmcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRGaWx0ZXIsIHRoaXMuJHNjb3BlLm51bGxhYmxlQnVzaW5lc3NVbml0KSwgbnVsbCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0aWVzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0aWVzTWFwID0gbmV3IE1hcDxudW1iZXIsIElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5PigpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0aWVzLmZvckVhY2goKGVudGl0eTogSVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlRW50aXRpZXNNYXAuc2V0KGVudGl0eS5pZCwgZW50aXR5KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZUNhbGxiYWNrID0gKGlkOiBudW1iZXIpID0+IHtcclxuICAgICAgICB0aGlzLiRzY29wZS5vblNlbGVjdG9yQ2hhbmdlKHRoaXMucmVmZXJlbmNlRW50aXRpZXNNYXAuZ2V0KGlkKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvTmV3UmVmZXJlbmNlSXRlbSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlZmVyZW5jZVJlZGlyZWN0LnJlZGlyZWN0VG9FZGl0UmVmZXJlbmNlSXRlbSh0aGlzLiRzY29wZS5yZWZlcmVuY2VOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0VkaXRSZWZlcmVuY2VJdGVtKHJlZmVyZW5jZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlZmVyZW5jZVJlZGlyZWN0LnJlZGlyZWN0VG9FZGl0UmVmZXJlbmNlSXRlbSh0aGlzLiRzY29wZS5yZWZlcmVuY2VOYW1lLCByZWZlcmVuY2VJZCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBSZWZlcmVuY2VEcm9wZG93blNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgdmFyIGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gUmVmZXJlbmNlRHJvcGRvd25TZWxlY3RvckNvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7XHJcbiAgICAgICAgcmVmZXJlbmNlTmFtZTogXCI9dmhzUmVmZXJlbmNlTmFtZVwiLFxyXG4gICAgICAgIHJlZmVyZW5jZUZpbHRlcjogXCI9P3Zoc1JlZmVyZW5jZUZpbHRlclwiLFxyXG4gICAgICAgIHJlZmVyZW5jZVNvcnRpbmc6IFwiPT92aHNSZWZlcmVuY2VTb3J0aW5nXCIsXHJcbiAgICAgICAgYnVzaW5lc3NVbml0RmlsdGVyOiBcIj0/dmhzQnVzaW5lc3NVbml0RmlsdGVyXCIsXHJcbiAgICAgICAgbnVsbGFibGVCdXNpbmVzc1VuaXQ6IFwiPT92aHNOdWxsYWJsZUJ1c2luZXNzVW5pdFwiLFxyXG4gICAgICAgIG1vZGVsOiBcIj12aHNNb2RlbFwiLFxyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6IFwiPXZoc01vZGVsUHJvcGVydHlcIixcclxuICAgICAgICBkaXNhYmxlZDogXCI9P3Zoc0Rpc2FibGVkXCIsXHJcbiAgICAgICAgcmVxdWlyZWQ6IFwiPT92aHNSZXF1aXJlZFwiLFxyXG4gICAgICAgIGVsZW1lbnROYW1lOiBcIkA/dmhzRWxlbWVudE5hbWVcIixcclxuICAgICAgICBudWxsYWJsZTogXCI9P3Zoc051bGxhYmxlXCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiPT92aHNQbGFjZWhvbGRlclwiLFxyXG4gICAgICAgIGVkaXRhYmxlOiBcIj0/dmhzRWRpdGFibGVcIixcclxuICAgICAgICBzdHlsZTogXCI9P3Zoc1N0eWxlXCIsXHJcbiAgICAgICAgb25TZWxlY3RvckNoYW5nZTogXCImdmhzT25DaGFuZ2VcIlxyXG4gICAgfTtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvcmVmZXJlbmNlLWRyb3Bkb3duLXNlbGVjdG9yLmh0bWxcIik7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5SZWZlcmVuY2VEcm9wZG93blNlbGVjdG9yRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5fSBmcm9tIFwiLi8uLi9yZWZlcmVuY2UvbW9kZWxzL0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5XCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlRW50aXRpZXNQYXJhbXN9IGZyb20gXCIuLy4uL3JlZmVyZW5jZS9tb2RlbHMvSVJlZmVyZW5jZUVudGl0aWVzUGFyYW1zXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlVXRpbHN9IGZyb20gXCIuLy4uL3JlZmVyZW5jZS9SZWZlcmVuY2VVdGlsc1wiO1xyXG5pbXBvcnQge1JlZmVyZW5jZVNlcnZpY2V9IGZyb20gXCIuLy4uL3JlZmVyZW5jZS9SZWZlcmVuY2VTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElJUmVmZXJlbmNlTXVsdGlwbGVTZWxlY3RvckRpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgbmcuSVNjb3BlIHtcclxuICAgIHJlZmVyZW5jZU5hbWU/OiBzdHJpbmc7XHJcbiAgICByZWZlcmVuY2VGaWx0ZXI/OiBzdHJpbmc7XHJcbiAgICByZWZlcmVuY2VTb3J0aW5nPzogc3RyaW5nO1xyXG4gICAgYnVzaW5lc3NVbml0RmlsdGVyPzogbnVtYmVyO1xyXG4gICAgbnVsbGFibGVCdXNpbmVzc1VuaXQ/OiBib29sZWFuO1xyXG4gICAgbW9kZWw/OiBhbnk7XHJcbiAgICBtb2RlbFByb3BlcnR5Pzogc3RyaW5nO1xyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG5cclxuICAgIHZtPzogUmVmZXJlbmNlTXVsdGlwbGVTZWxlY3RvckNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VNdWx0aXBsZVNlbGVjdG9yQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIHNlbGVjdGVkSWRzOiBBcnJheTxudW1iZXI+O1xyXG4gICAgcHVibGljIHJlZmVyZW5jZUVudGl0aWVzOiBBcnJheTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT47XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgUmVmZXJlbmNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVV0aWxzLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkICRzY29wZTogSUlSZWZlcmVuY2VNdWx0aXBsZVNlbGVjdG9yRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcmVmZXJlbmNlQXBpOiBSZWZlcmVuY2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHJlZmVyZW5jZVV0aWxzOiBSZWZlcmVuY2VVdGlscykge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IGFuZ3VsYXIuY29weSh0aGlzLiRzY29wZS5tb2RlbFt0aGlzLiRzY29wZS5tb2RlbFByb3BlcnR5XSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiR3YXRjaCgoKSA9PiB0aGlzLiRzY29wZS5tb2RlbFt0aGlzLiRzY29wZS5tb2RlbFByb3BlcnR5XSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gYW5ndWxhci5jb3B5KHRoaXMuJHNjb3BlLm1vZGVsW3RoaXMuJHNjb3BlLm1vZGVsUHJvcGVydHldKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlbElkcyh0aGlzLnNlbGVjdGVkSWRzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VBcGkuZ2V0QWN0aXZlUmVmZXJlbmNlRW50aXRpZXNGb3JTZWxlY3Rvcih0aGlzLiRzY29wZS5yZWZlcmVuY2VOYW1lLCBuZXcgUmVmZXJlbmNlRW50aXRpZXNQYXJhbXMoXHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLnJlZmVyZW5jZUZpbHRlciwgdGhpcy4kc2NvcGUucmVmZXJlbmNlU29ydGluZywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdEZpbHRlciwgdGhpcy4kc2NvcGUubnVsbGFibGVCdXNpbmVzc1VuaXQpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VFbnRpdGllcyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldE1vZGVsSWRzKHNlbGVjdGVkSWRzOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRzY29wZS5tb2RlbFt0aGlzLiRzY29wZS5tb2RlbFByb3BlcnR5XS5zcGxpY2UoMCwgdGhpcy4kc2NvcGUubW9kZWxbdGhpcy4kc2NvcGUubW9kZWxQcm9wZXJ0eV0ubGVuZ3RoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkSWRzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm1vZGVsW3RoaXMuJHNjb3BlLm1vZGVsUHJvcGVydHldLnB1c2goc2VsZWN0ZWRJZHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFJlZmVyZW5jZU11bHRpcGxlU2VsZWN0b3JEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xyXG4gICAgdmFyIGRpcmVjdGl2ZTogbmcuSURpcmVjdGl2ZSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUuY29udHJvbGxlciA9IFJlZmVyZW5jZU11bHRpcGxlU2VsZWN0b3JDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0ge1xyXG4gICAgICAgIHJlZmVyZW5jZU5hbWU6IFwiPXZoc1JlZmVyZW5jZU5hbWVcIixcclxuICAgICAgICByZWZlcmVuY2VGaWx0ZXI6IFwiPT92aHNSZWZlcmVuY2VGaWx0ZXJcIixcclxuICAgICAgICByZWZlcmVuY2VTb3J0aW5nOiBcIj0/dmhzUmVmZXJlbmNlU29ydGluZ1wiLFxyXG4gICAgICAgIGJ1c2luZXNzVW5pdEZpbHRlcjogXCI9P3Zoc0J1c2luZXNzVW5pdEZpbHRlclwiLFxyXG4gICAgICAgIG51bGxhYmxlQnVzaW5lc3NVbml0OiBcIj0/dmhzTnVsbGFibGVCdXNpbmVzc1VuaXRcIixcclxuICAgICAgICBtb2RlbDogXCI9dmhzTW9kZWxcIixcclxuICAgICAgICBtb2RlbFByb3BlcnR5OiBcIj12aHNNb2RlbFByb3BlcnR5XCIsXHJcbiAgICAgICAgZGlzYWJsZWQ6IFwiPT92aHNEaXNhYmxlZFwiXHJcbiAgICB9O1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9yZWZlcmVuY2UtbXVsdGlwbGUtc2VsZWN0b3IuaHRtbFwiKTtcclxuICAgIGRpcmVjdGl2ZS50cmFuc2NsdWRlID0gdHJ1ZTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblJlZmVyZW5jZU11bHRpcGxlU2VsZWN0b3JEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW50ZXJmYWNlIFRpbWVyIHtcclxuICAgIGhvdXJzOiBudW1iZXI7XHJcbiAgICBtaW51dGVzOiBudW1iZXI7XHJcbiAgICBzZWNvbmRzOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBTZWNvbmRzVG9UaW1lRmlsdGVyRmFjdG9yeSgpIHtcclxuICAgIHJldHVybiAoc2Vjb25kczogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgICAgICBpZiAoIXNlY29uZHMpIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdDogVGltZXIgPSB7XHJcbiAgICAgICAgICAgIGhvdXJzOiAwLFxyXG4gICAgICAgICAgICBtaW51dGVzOiAwLFxyXG4gICAgICAgICAgICBzZWNvbmRzOiAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXN1bHQuaG91cnMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyAzNjAwKTtcclxuICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyAtIHJlc3VsdC5ob3VycyAqIDM2MDA7XHJcbiAgICAgICAgcmVzdWx0Lm1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7XHJcbiAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgLSByZXN1bHQubWludXRlcyAqIDYwO1xyXG4gICAgICAgIHJlc3VsdC5zZWNvbmRzID0gc2Vjb25kcztcclxuXHJcbiAgICAgICAgbGV0IHN0cjogc3RyaW5nID0gJyc7XHJcbiAgICAgICAgc3RyID0gcmVzdWx0LmhvdXJzID8gc3RyICsgcmVzdWx0LmhvdXJzICsgXCI6XCIgOiBzdHI7XHJcbiAgICAgICAgc3RyID0gc3RyICsgKFwiMFwiICsgcmVzdWx0Lm1pbnV0ZXMpLnNsaWNlKC0yKSArIFwiOlwiICsgKFwiMFwiICsgcmVzdWx0LnNlY29uZHMpLnNsaWNlKC0yKTtcclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG59IiwiaW50ZXJmYWNlIFNlbGVjdE9wdGlvbnNEaXNhYmxlZEF0dHJpYnV0ZXMgZXh0ZW5kcyBhbmd1bGFyLklBdHRyaWJ1dGVzIHtcclxuICAgIHNlbGVjdE9wdGlvbnNEaXNhYmxlZDogc3RyaW5nO1xyXG4gICAgbmdNb2RlbDogc3RyaW5nO1xyXG59XHJcblxyXG5TZWxlY3RPcHRpb25zRGlzYWJsZWREaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBcIiRwYXJzZVwiXHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0T3B0aW9uc0Rpc2FibGVkRGlyZWN0aXZlRmFjdG9yeSgkcGFyc2U6IGFuZ3VsYXIuSVBhcnNlU2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gZGlzYWJsZU9wdGlvbnMoJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgYXR0cmlidXRlOiBzdHJpbmcsIGVsZW1lbnQ6IGFueSwgZGF0YTogYW55LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5EaXNhYmxlSWZUcnVlOiBhbmd1bGFyLklDb21waWxlZEV4cHJlc3Npb24pIHtcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IGVsZW1lbnQuZmluZChcIm9wdGlvblwiKTtcclxuICAgICAgICBmb3IgKGxldCBwb3MgPSAwLCBpbmRleCA9IDA7IHBvcyA8IG9wdGlvbnMubGVuZ3RoOyBwb3MrKykge1xyXG4gICAgICAgICAgICBsZXQgZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChvcHRpb25zW3Bvc10pO1xyXG4gICAgICAgICAgICBpZiAoZWxlbS52YWwoKSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxzID0ge307XHJcbiAgICAgICAgICAgICAgICBsb2NhbHNbYXR0cmlidXRlXSA9IGRhdGFbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5hdHRyKFwiZGlzYWJsZWRcIiwgZm5EaXNhYmxlSWZUcnVlKCRzY29wZSwgbG9jYWxzKSk7XHJcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgZWxlbWVudDogYW55LCBhdHRyaWJ1dGVzOiBTZWxlY3RPcHRpb25zRGlzYWJsZWRBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgbGV0IGV4cEVsZW1lbnRzOiBSZWdFeHBNYXRjaEFycmF5ID0gYXR0cmlidXRlcy5zZWxlY3RPcHRpb25zRGlzYWJsZWQubWF0Y2goL15cXHMqKC4rKVxccytmb3JcXHMrKC4rKVxccytpblxccysoLispP1xccyovKTtcclxuICAgICAgICBsZXQgYXR0clRvV2F0Y2g6IHN0cmluZyA9IGV4cEVsZW1lbnRzWzNdO1xyXG4gICAgICAgIGxldCBmbkRpc2FibGVJZlRydWU6IGFuZ3VsYXIuSUNvbXBpbGVkRXhwcmVzc2lvbiA9ICRwYXJzZShleHBFbGVtZW50c1sxXSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kd2F0Y2goYXR0clRvV2F0Y2gsIChuZXdWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVPcHRpb25zKCRzY29wZSwgZXhwRWxlbWVudHNbMl0sIGVsZW1lbnQsIG5ld1ZhbHVlLCBmbkRpc2FibGVJZlRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kd2F0Y2goYXR0cmlidXRlcy5uZ01vZGVsLCAobmV3VmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdmFyIGRpc09wdGlvbnMgPSAkcGFyc2UoYXR0clRvV2F0Y2gpKCRzY29wZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZU9wdGlvbnMoJHNjb3BlLCBleHBFbGVtZW50c1syXSwgZWxlbWVudCwgZGlzT3B0aW9ucywgZm5EaXNhYmxlSWZUcnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkaXJlY3RpdmU6IG5nLklEaXJlY3RpdmUgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5wcmlvcml0eSA9IDA7XHJcbiAgICBkaXJlY3RpdmUucmVxdWlyZSA9ICduZ01vZGVsJztcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn0iLCJpbnRlcmZhY2UgU2VsZWN0UGxhY2Vob2xkZXJBdHRyaWJ1dGVzIGV4dGVuZHMgYW5ndWxhci5JQXR0cmlidXRlcyB7XHJcbiAgICBuZ01vZGVsOiBzdHJpbmc7XHJcbn1cclxuXHJcblNlbGVjdFBsYWNlaG9sZGVyRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG5dO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdFBsYWNlaG9sZGVyRGlyZWN0aXZlRmFjdG9yeSgpOiBuZy5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIHNldFBsYWNlaG9sZGVyKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gZWxlbWVudC5maW5kKFwib3B0aW9uOnNlbGVjdGVkXCIpO1xyXG4gICAgICAgIGxldCBlbGVtID0gYW5ndWxhci5lbGVtZW50KG9wdGlvbnNbMF0pO1xyXG4gICAgICAgIGlmIChlbGVtLnZhbCgpID09IFwiXCIpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcyhcInNpbXBsZS10ZXh0LWNvbG9yXCIpO1xyXG4gICAgICAgICAgICBlbGVtZW50LmFkZENsYXNzKFwicGxhY2Vob2xkZXItY29sb3JcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcyhcInBsYWNlaG9sZGVyLWNvbG9yXCIpO1xyXG4gICAgICAgICAgICBlbGVtZW50LmFkZENsYXNzKFwic2ltcGxlLXRleHQtY29sb3JcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvcHRpb25zID0gZWxlbWVudC5maW5kKFwib3B0aW9uXCIpO1xyXG4gICAgICAgIGZvciAobGV0IHBvcyA9IDA7IHBvcyA8IG9wdGlvbnMubGVuZ3RoOyBwb3MrKykge1xyXG4gICAgICAgICAgICBsZXQgZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChvcHRpb25zW3Bvc10pO1xyXG4gICAgICAgICAgICBpZiAoZWxlbS52YWwoKSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKFwic2ltcGxlLXRleHQtY29sb3JcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKFwicGxhY2Vob2xkZXItY29sb3JcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCBlbGVtZW50OiBhbnksIGF0dHJpYnV0ZXM6IFNlbGVjdFBsYWNlaG9sZGVyQXR0cmlidXRlcykge1xyXG4gICAgICAgICRzY29wZS4kd2F0Y2goYXR0cmlidXRlcy5uZ01vZGVsLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFBsYWNlaG9sZGVyKGVsZW1lbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkaXJlY3RpdmU6IG5nLklEaXJlY3RpdmUgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5wcmlvcml0eSA9IDA7XHJcbiAgICBkaXJlY3RpdmUucmVxdWlyZSA9IFsnbmdNb2RlbCddO1xyXG4gICAgZGlyZWN0aXZlLmxpbmsgPSBsaW5rO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufSIsImltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vYXV0aGNvcmUvRXZlbnRcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU2Vzc2lvblJlc3RvcmVEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtOiBTZXNzaW9uUmVzdG9yZUNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uUmVzdG9yZUNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHNob3dSZXN0b3JlU2Vzc2lvbkZhaWxlZE1lc3NhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjb3BlOiBJU2Vzc2lvblJlc3RvcmVEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aEFwaTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcikge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5MT0dHRURfT04sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVzdG9yZVNlc3Npb25GYWlsZWRNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5MT0dHRURfT0ZGLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1Jlc3RvcmVTZXNzaW9uRmFpbGVkTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICRzY29wZS4kb24oRXZlbnQuU0VTU0lPTl9SRVNUT1JFX0ZBSUxFRCwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dSZXN0b3JlU2Vzc2lvbkZhaWxlZE1lc3NhZ2UgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0cnlTZXNzaW9uUmVzdG9yZSgpIHtcclxuICAgICAgICB0aGlzLmF1dGhBcGkudHJ5VG9BdXRvUmVmcmVzaCgpO1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc3RvcmVTZXNzaW9uRmFpbGVkTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlUmVzdG9yZVNlc3Npb25GYWlsZWRNZXNzYWdlKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc3RvcmVTZXNzaW9uRmFpbGVkTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gU2Vzc2lvblJlc3RvcmVEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogYW5ndWxhci5JU2NvcGUsIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcywgY29udHJvbGxlcjogU2Vzc2lvblJlc3RvcmVDb250cm9sbGVyLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2NsdWRlOiBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb24pIHtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXJlY3RpdmU6IGFueSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Nlc3Npb24tcmVzdG9yZS5odG1sXCIpO1xyXG4gICAgZGlyZWN0aXZlLmxpbmsgPSBsaW5rO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0gdHJ1ZTtcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gU2Vzc2lvblJlc3RvcmVDb250cm9sbGVyO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuU2Vzc2lvblJlc3RvcmVEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5pbnRlcmZhY2UgSVNraXBUb0NvbnRlbnREaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtPzogU2tpcFRvQ29udGVudENvbnRyb2xsZXJcclxufVxyXG5cclxuY2xhc3MgU2tpcFRvQ29udGVudENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRhbmNob3JTY3JvbGxcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGU6IElTa2lwVG9Db250ZW50RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRhbmNob3JTY3JvbGw6IGFuZ3VsYXIuSUFuY2hvclNjcm9sbFNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLiRzY29wZS52bSA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNraXBUb0NvbnRlbnQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24uaGFzaCgnbWFpbkNvbnRlbnQnKTtcclxuICAgICAgICB0aGlzLiRhbmNob3JTY3JvbGwoKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFNraXBUb0NvbnRlbnREaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICB2YXIgZGlyZWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0gdHJ1ZTtcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gU2tpcFRvQ29udGVudENvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3NraXAtdG8tY29udGVudC5odG1sXCIpO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuU2tpcFRvQ29udGVudERpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImludGVyZmFjZSBUb29sdGlwQXR0cmlidXRlcyBleHRlbmRzIGFuZ3VsYXIuSUF0dHJpYnV0ZXMge1xyXG59XHJcblxyXG5jbGFzcyBUb29sdGlwQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkdGltZW91dFwiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1ha2VUb29sdGlwKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoYSA9PiBlbGVtZW50LnRvb2x0aXAoKSwgMCwgZmFsc2UpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVG9vbHRpcERpcmVjdGl2ZUZhY3RvcnkoKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgZWxlbWVudDogYW55LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBUb29sdGlwQXR0cmlidXRlcywgY29udHJvbGxlcjogVG9vbHRpcENvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIubWFrZVRvb2x0aXAoZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRpcmVjdGl2ZTogYW55ID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gVG9vbHRpcENvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB0cnVlO1xyXG4gICAgZGlyZWN0aXZlLnRydW5zY2x1ZGUgPSBmYWxzZTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuIiwiaW1wb3J0IElTY29wZSA9IGFuZ3VsYXIuSVNjb3BlO1xyXG5pbXBvcnQgSVByb21pc2UgPSBhbmd1bGFyLklQcm9taXNlO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJ1bmRsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVcIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QnVuZGxlU2VydmljZX0gZnJvbSBcIi4uL2J1bmRsZXMvQnVuZGxlU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXBsb2FkQXJjaGl2ZUluQ291cnNlRWRpdERpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgSVNjb3BlIHtcclxuICAgIGJ1bmRsZUlkPzogbnVtYmVyO1xyXG4gICAgY3JlYXRlQnVuZGxlRnVuY3Rpb24/OiAoKSA9PiBJUHJvbWlzZTxJQnVuZGxlPjtcclxuXHJcbiAgICB2bT86IFVwbG9hZEFyY2hpdmVJbkNvdXJzZUVkaXREaXJlY3RpdmVDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXBsb2FkQXJjaGl2ZUluQ291cnNlRWRpdERpcmVjdGl2ZUNvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBpc0luaXRpYWxpemVkOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBidW5kbGU6IElCdW5kbGU7XHJcbiAgICBwdWJsaWMgYXJjaGl2ZTogRmlsZTtcclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBidW5kbGVGaWxlc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGFyY2hpdmVJbXBvcnRUYXJnZXREaXI6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgcHVibGljIGNvbmZpcm1hdGlvbkRpYWxvZ01lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIlVwbG9hZFwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdW5kbGVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVXBsb2FkQXJjaGl2ZUluQ291cnNlRWRpdERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdXBsb2FkZXI6IG5nLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVuZGxlU2VydmljZTogQnVuZGxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJZCA9ICRyb3V0ZVBhcmFtc1tDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IGhhc0NvdXJzZUlkOiBib29sZWFuID0gdGhpcy5jb3Vyc2VJZCAhPSBudWxsO1xyXG4gICAgICAgIGxldCBjb3Vyc2VJZFN0cjogc3RyaW5nID0gU3RyaW5nKHRoaXMuY291cnNlSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9uc0lmKGhhc0NvdXJzZUlkLCBjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMuZWRpdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRCdW5kbGUodGhpcy4kc2NvcGUuYnVuZGxlSWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLmJ1bmRsZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiR3YXRjaCgoKSA9PiB0aGlzLiRzY29wZS5idW5kbGVJZCwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlKHRoaXMuJHNjb3BlLmJ1bmRsZUlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGxvYWRBcmNoaXZlVG9QYXRoKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5hcmNoaXZlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idW5kbGVGaWxlc1NhdmluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJ1bmRsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUuY3JlYXRlQnVuZGxlRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmNyZWF0ZUJ1bmRsZUZ1bmN0aW9uKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0OiBJQnVuZGxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5idW5kbGVJZCA9IHJlc3VsdC5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybUFyY2hpdmVVcGxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiSW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gdG8gY3JlYXRlIEJ1bmRsZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1bmRsZUZpbGVzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiSW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gdG8gY3JlYXRlIEJ1bmRsZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVyZm9ybUFyY2hpdmVVcGxvYWQoKVxyXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBlcmZvcm1BcmNoaXZlVXBsb2FkKCkge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldERpciA9IHRoaXMuYXJjaGl2ZUltcG9ydFRhcmdldERpciB8fCBcIlwiO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiR1cGxvYWRlci51cGxvYWQoe1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLmJhc2UoJy9hcGkvYnVuZGxlcy9jb3Vyc2UvOmJ1bmRsZUlkL2FyY2hpdmU/YnVuZGxlVmVyc2lvbj06YnVuZGxlVmVyc2lvbiZ0YXJnZXREaXI9OnRhcmdldERpciZjb3Vyc2VJZD06Y291cnNlSWQnKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmJ1bmRsZUlkXCIsIHRoaXMuJHNjb3BlLmJ1bmRsZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmJ1bmRsZVZlcnNpb25cIiwgdGhpcy5idW5kbGUudmVyc2lvbilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjp0YXJnZXREaXJcIiwgdGFyZ2V0RGlyKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICBmaWxlOiB0aGlzLmFyY2hpdmVcclxuICAgICAgICB9KS5zdWNjZXNzKCgpID0+IHtcclxuICAgICAgICAgICAgLy9ub3RpZmllci5zdWNjZXNzKFwiVGhlIGFyY2hpdmUgd2FzIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25EaWFsb2dNZXNzYWdlID0gXCJUaGUgYXJjaGl2ZSB3YXMgc3VjY2Vzc2Z1bGx5IGltcG9ydGVkXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbkRpYWxvZygpO1xyXG4gICAgICAgIH0pLmVycm9yKCgpID0+IHtcclxuICAgICAgICAgICAgLy9ub3RpZmllci5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBhcmNoaXZlIGltcG9ydFwiKTtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25EaWFsb2dNZXNzYWdlID0gXCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgYXJjaGl2ZSBpbXBvcnRcIjtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29uZmlybWF0aW9uRGlhbG9nKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQnVuZGxlKGJ1bmRsZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElCdW5kbGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idW5kbGVTZXJ2aWNlLmdldEJ1bmRsZShidW5kbGVJZCwgXCJMT0FERURfQVRfU1RBUlRcIikudGhlbihidW5kbGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVuZGxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93VXBsb2FkSW5zdHJ1Y3Rpb25zKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI3VwbG9hZEluc3RydWN0aW9uc0RpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dDb25maXJtYXRpb25EaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICQoXCIjZGlhbG9nTWVzc2FnZVwiKS5odG1sKHRoaXMuY29uZmlybWF0aW9uRGlhbG9nTWVzc2FnZSk7XHJcbiAgICAgICAgJChcIiNjb25maXJtYXRpb25EaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVXBsb2FkQXJjaGl2ZUluQ291cnNlRWRpdERpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVXBsb2FkQXJjaGl2ZUluQ291cnNlRWRpdERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFVwbG9hZEFyY2hpdmVJbkNvdXJzZUVkaXREaXJlY3RpdmVDb250cm9sbGVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBVcGxvYWRBcmNoaXZlSW5Db3Vyc2VFZGl0RGlyZWN0aXZlQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBidW5kbGVJZDogXCI9P3Zoc0J1bmRsZUlkXCIsXHJcbiAgICAgICAgICAgIGNyZWF0ZUJ1bmRsZUZ1bmN0aW9uOiBcIj0/dmhzQ3JlYXRlQnVuZGxlRnVuY3Rpb25cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdXBsb2FkLWFyY2hpdmUtaW4tY291cnNlLWVkaXQuaHRtbFwiKSxcclxuICAgIH07XHJcbn1cclxuXHJcblVwbG9hZEFyY2hpdmVJbkNvdXJzZUVkaXREaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuXHJcbiIsImltcG9ydCB7VXBsb2Fkc1NlcnZpY2UsIEN1cnJlbnRseVVwbG9hZGFibGVGaWxlfSBmcm9tIFwiLi8uLi9zdG9yYWdlL1VwbG9hZHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5cclxuaW50ZXJmYWNlIElVcGxvYWRzU3RhdHVzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICB2bT86IFVwbG9hZHNTdGF0dXNDb250cm9sbGVyXHJcbn1cclxuXHJcbmNsYXNzIFVwbG9hZHNTdGF0dXNDb250cm9sbGVyIHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBDVVJSRU5UTFlfVVBMT0FEQUJMRV9GSUxFU19ERUxBWSA9IDEwMDA7XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50bHlVcGxvYWRhYmxlRmlsZXM6IEFycmF5PEN1cnJlbnRseVVwbG9hZGFibGVGaWxlPiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBzaG93RmlsZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGludGVydmFsXCIsXHJcbiAgICAgICAgVXBsb2Fkc1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVVwbG9hZHNTdGF0dXNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGludGVydmFsOiBhbmd1bGFyLklJbnRlcnZhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVwbG9hZHNTZXJ2aWNlOiBVcGxvYWRzU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLiRpbnRlcnZhbCh0aGlzLmN1cnJlbnRseVVwbG9hZGFibGVGaWxlc0Z1bmMsIFVwbG9hZHNTdGF0dXNDb250cm9sbGVyLkNVUlJFTlRMWV9VUExPQURBQkxFX0ZJTEVTX0RFTEFZKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsKGZpbGU6IEN1cnJlbnRseVVwbG9hZGFibGVGaWxlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGxvYWRzU2VydmljZS5jYW5jZWwoZmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZUZpbGVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd0ZpbGVzID0gIXRoaXMuc2hvd0ZpbGVzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3VycmVudGx5VXBsb2FkYWJsZUZpbGVzRnVuYzogKCkgPT4gdm9pZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRseVVwbG9hZGFibGVGaWxlcyA9IHRoaXMudXBsb2Fkc1NlcnZpY2UuZ2V0Q3VycmVudGx5VXBsb2FkYWJsZUZpbGVzKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcblVwbG9hZHNTdGF0dXNEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBVcGxvYWRzU3RhdHVzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgdmFyIGRpcmVjdGl2ZTogYW55ID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5zY29wZSA9IHRydWU7XHJcbiAgICBkaXJlY3RpdmUuY29udHJvbGxlciA9IFVwbG9hZHNTdGF0dXNDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy91cGxvYWRzLXN0YXR1cy5odG1sXCIpO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufSIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJBdmF0YXJEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHVzZXJJZD86IG51bWJlcjtcclxuICAgIHByb2ZpbGVQaG90bz86IHN0cmluZztcclxuXHJcbiAgICBhdmF0YXJWbT86IFVzZXJBdmF0YXJDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckF2YXRhckNvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyB1c2VyQXZhdGFyOiBJVXNlcjtcclxuICAgIHB1YmxpYyB1c2VySWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwcm9maWxlUGhvdG86IHN0cmluZztcclxuICAgIHB1YmxpYyBpc0luaXRpYWxpemVkID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElVc2VyQXZhdGFyRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLmF2YXRhclZtID0gdGhpcztcclxuICAgICAgICB0aGlzLnByb2ZpbGVQaG90byA9IHRoaXMuJHNjb3BlLnByb2ZpbGVQaG90bztcclxuXHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoR3JvdXAoW1xyXG4gICAgICAgICAgICBcInVzZXJJZFwiXHJcbiAgICAgICAgXSwgKChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBvbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXNlcklkID0gdGhpcy4kc2NvcGUudXNlcklkO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRVc2VyKCk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRVc2VyKCk7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lckF2YXRhckltYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lckF2YXRhckltYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbignYXZhdGFyLnVwbG9hZC5pbWcnLCAoZXZlbnQsIHByZXZpZXcsIGlzUmVzZXQpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFwcmV2aWV3ICYmICFpc1Jlc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyQXZhdGFyLnByZXZpZXdVcmwgPSBwcmV2aWV3O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyQXZhdGFyLnByZXZpZXdVcmwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb2ZpbGVQaG90byA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51c2VySWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyQXZhdGFyID0gdXNlcjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0TG9nb0J5VXNlcklkKHRoaXMudXNlcklkKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGxvZ29VcmwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJBdmF0YXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3VXJsOiBsb2dvVXJsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNVc2VyQXZhdGFyRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcclxuXHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBuZy5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBuZy5JQXR0cmlidXRlcywgY29udHJvbGxlcjogVXNlckF2YXRhckNvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IG5nLklUcmFuc2NsdWRlRnVuY3Rpb24pIHtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy91c2VyLWF2YXRhci5odG1sXCIpO1xyXG4gICAgZGlyZWN0aXZlLmxpbmsgPSBsaW5rO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0ge1xyXG4gICAgICAgIHVzZXJJZDogXCI9P3Zoc1VzZXJJZFwiLFxyXG4gICAgICAgIHByb2ZpbGVQaG90bzogXCI9P3Zoc1Byb2ZpbGVQaG90b1wiXHJcbiAgICB9O1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBVc2VyQXZhdGFyQ29udHJvbGxlcjtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc1VzZXJBdmF0YXJEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4vLi4vSVNlbGVjdGFibGVcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SU1hdGVyaWFsfSBmcm9tIFwiLi8uLi9tYXRlcmlhbHMvbW9kZWxzL0lNYXRlcmlhbFwiO1xyXG5pbXBvcnQge0lQbGF5bGlzdH0gZnJvbSBcIi4vLi4vbWF0ZXJpYWxzL21vZGVscy9JUGxheWxpc3RcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi8uLi9jb3Vyc2VzL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7SVF1aXp9IGZyb20gXCIuLy4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6XCI7XHJcbmltcG9ydCB7U2VjdXJlZE9iamVjdFR5cGV9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL1NlY3VyZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzXCI7XHJcbmltcG9ydCB7QWxsVXNlcnNQZXJtaXNzaW9ucywgSVBlcm1pc3Npb259IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lQZXJtaXNzaW9uXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVc2Vyc0FuZEdyb3Vwc1NlbGVjdG9yRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBuZy5JU2NvcGUge1xyXG4gICAgb2JqZWN0TW9kZWw6IGFueTtcclxuICAgIG9iamVjdE1vZGVsUHJvcGVydHk6IHN0cmluZztcclxuICAgIGN1cnJlbnRVc2VySWRNb2RlbDogYW55LFxyXG4gICAgY3VycmVudFVzZXJJZE1vZGVsUHJvcGVydHk6IHN0cmluZyxcclxuICAgIGN1cnJlbnRVc2VyTmFtZU1vZGVsOiBhbnksXHJcbiAgICBjdXJyZW50VXNlck5hbWVNb2RlbFByb3BlcnR5OiBzdHJpbmcsXHJcblxyXG4gICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHNNb2RlbDogSVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHNbXTtcclxuICAgIGJ1c2luZXNzVW5pdEZpbHRlcj86IG51bWJlcjtcclxuICAgIGRpc2FibGVkOiBib29sZWFuO1xyXG4gICAgaXNQZXJtaXNzaW9uc0RlbGVnYXRpb246IGJvb2xlYW47XHJcbiAgICBncm91cHNTZWxlY3RvckRpc2FibGVkPzogYm9vbGVhbjtcclxuICAgIHZoc09iamVjdE1vZGVsVHlwZTogc3RyaW5nO1xyXG4gICAgdmhzUmVkZXNpZ25Nb2RlPzogYm9vbGVhbjtcclxuXHJcbiAgICBvbkFzc2lnblBlcm1pc3Npb25zPzogKCkgPT4ge307XHJcbiAgICBvbkNoYW5nZVVzZXJQZXJtaXNzaW9uPzogKCkgPT4ge307XHJcblxyXG4gICAgdm0/OiBVc2Vyc0FuZEdyb3Vwc1NlbGVjdG9yQ29udHJvbGxlcjtcclxufVxyXG5cclxuaW50ZXJmYWNlIElFeHRQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzIGV4dGVuZHMgSVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHMge1xyXG4gICAgaXNFZGl0aW5nPzogYm9vbGVhbjtcclxuICAgIGlzVXNlcnNTaG93ZWQ/OiBib29sZWFuO1xyXG4gICAgaXNHcm91cHNTaG93ZWQ/OiBib29sZWFuO1xyXG5cclxuICAgIGN1cnJlbnRBdmFpbGFibGVVc2VySWRzPzogbnVtYmVyW107XHJcbiAgICBjdXJyZW50QXZhaWxhYmxlR3JvdXBJZHM/OiBudW1iZXJbXTtcclxuICAgIGN1cnJlbnRBdmFpbGFibGVVc2VyQW5kR3JvdXBJZHM/OiBudW1iZXJbXTtcclxuICAgIGN1cnJlbnRBdmFpbGFibGVVc2Vycz86IElTZWxlY3RhYmxlW107XHJcbiAgICBjdXJyZW50QXZhaWxhYmxlR3JvdXBzPzogSVNlbGVjdGFibGVbXTtcclxuICAgIGN1cnJlbnRBdmFpbGFibGVVc2Vyc0FuZEdyb3Vwcz86IElTZWxlY3RhYmxlW107XHJcbiAgICBjdXJyZW50U2VsZWN0ZWRVc2Vycz86IElTZWxlY3RhYmxlW107XHJcbiAgICBjdXJyZW50U2VsZWN0ZWRHcm91cHM/OiBJU2VsZWN0YWJsZVtdO1xyXG4gICAgY3VycmVudFNlbGVjdGVkVXNlcnNBbmRHcm91cHM/OiBJU2VsZWN0YWJsZVtdO1xyXG4gICAgdXNlcklkcz86IG51bWJlcltdO1xyXG4gICAgZ3JvdXBJZHM/OiBudW1iZXJbXTtcclxuICAgIHVzZXJBbmRHcm91cElkcz86IG51bWJlcltdO1xyXG5cclxuICAgIGN1cnJlbnRBdmFpbGFibGVVc2Vyc0NoYW5nZUNhbGxiYWNrPzogKHNlbGVjdGVkOiBib29sZWFuLCBpZDogbnVtYmVyLCBuYW1lOiBzdHJpbmcpID0+IHZvaWQ7XHJcbiAgICBjdXJyZW50QXZhaWxhYmxlR3JvdXBzQ2hhbmdlQ2FsbGJhY2s/OiAoc2VsZWN0ZWQ6IGJvb2xlYW4sIGlkOiBudW1iZXIsIG5hbWU6IHN0cmluZykgPT4gdm9pZDtcclxuICAgIGN1cnJlbnRBdmFpbGFibGVVc2Vyc0FuZEdyb3Vwc0NoYW5nZUNhbGxiYWNrPzogKHNlbGVjdGVkOiBib29sZWFuLCBpZDogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIGlzVXNlcjogYm9vbGVhbikgPT4gdm9pZDtcclxufVxyXG5cclxuaW50ZXJmYWNlIElFeHRVc2VyIGV4dGVuZHMgSVNlbGVjdGFibGUge1xyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSUhpZGRlblNlbGVjdGFibGUgZXh0ZW5kcyBJU2VsZWN0YWJsZSB7XHJcbiAgICBoaWRkZW4/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlcnNBbmRHcm91cHNTZWxlY3RvckNvbnRyb2xsZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgQUxMX1VTRVJTX0dST1VQX0lEOiBudW1iZXIgPSAxO1xyXG5cclxuICAgIHB1YmxpYyBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwczogSUV4dFBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHNbXSA9IFtdO1xyXG4gICAgcHVibGljIHVzZXJzOiBJSGlkZGVuU2VsZWN0YWJsZVtdID0gW107XHJcbiAgICBwdWJsaWMgZ3JvdXBzOiBJSGlkZGVuU2VsZWN0YWJsZVtdID0gW107XHJcbiAgICBwdWJsaWMgdXNlcklkczogbnVtYmVyW10gPSBbXTtcclxuICAgIHB1YmxpYyBncm91cElkczogbnVtYmVyW10gPSBbXTtcclxuICAgIHB1YmxpYyBpc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgcHVibGljIHBlcm1pc3Npb25TZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNlbGVjdGVkUGVybWlzc2lvbjogSUV4dFBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHMgPSB7fTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFBlcm1pc3Npb25zOiBJRXh0UGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc1tdID0gW107XHJcblxyXG4gICAgcHVibGljIHNlYXJjaE5hbWVGaWVsZDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgJHNjb3BlOiBJVXNlcnNBbmRHcm91cHNTZWxlY3RvckRpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgJHNjb3BlLmdyb3Vwc1NlbGVjdG9yRGlzYWJsZWQgPSAkc2NvcGUuZ3JvdXBzU2VsZWN0b3JEaXNhYmxlZCA/ICRzY29wZS5ncm91cHNTZWxlY3RvckRpc2FibGVkIDogZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLmRpc2FibGVkID0gdGhpcy4kc2NvcGUuZGlzYWJsZWQgIT0gbnVsbFxyXG4gICAgICAgICAgICA/IHRoaXMuJHNjb3BlLmRpc2FibGVkXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIHRoaXMuJHNjb3BlLmlzUGVybWlzc2lvbnNEZWxlZ2F0aW9uID0gdGhpcy4kc2NvcGUuaXNQZXJtaXNzaW9uc0RlbGVnYXRpb24gIT0gbnVsbFxyXG4gICAgICAgIC8vICAgICA/IHRoaXMuJHNjb3BlLmlzUGVybWlzc2lvbnNEZWxlZ2F0aW9uXHJcbiAgICAgICAgLy8gICAgIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuaXNQZXJtaXNzaW9uc0RlbGVnYXRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gdGhpcy4kc2NvcGUucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHNNb2RlbDtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLmZvckVhY2goKHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXA6IElFeHRQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzKSA9PiB7XHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAuaXNFZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAuaXNVc2Vyc1Nob3dlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAuaXNHcm91cHNTaG93ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50QXZhaWxhYmxlVXNlcklkcyA9IFtdO1xyXG4gICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVHcm91cElkcyA9IFtdO1xyXG4gICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVVc2VyQW5kR3JvdXBJZHMgPSBbXTtcclxuICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50QXZhaWxhYmxlVXNlcnMgPSBbXTtcclxuICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50QXZhaWxhYmxlR3JvdXBzID0gW107XHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAuY3VycmVudEF2YWlsYWJsZVVzZXJzQW5kR3JvdXBzID0gW107XHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAuY3VycmVudFNlbGVjdGVkVXNlcnMgPSBbXTtcclxuICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50U2VsZWN0ZWRHcm91cHMgPSBbXTtcclxuICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50U2VsZWN0ZWRVc2Vyc0FuZEdyb3VwcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXI6IElTZWxlY3RhYmxlID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLm9iamVjdE1vZGVsW3RoaXMuJHNjb3BlLm9iamVjdE1vZGVsUHJvcGVydHldLmlkICYmIGN1cnJlbnRVc2VyLmlkICYmIGN1cnJlbnRVc2VyLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RXh0VXNlcjogSUV4dFVzZXIgPSBjdXJyZW50VXNlcjtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRFeHRVc2VyLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAudXNlcnMucHVzaChjdXJyZW50RXh0VXNlcik7XHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLnVzZXJzLnNvcnQodGhpcy51c2Vyc0NvbXBhcmVGbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAudXNlckFuZEdyb3VwSWRzID0gW107XHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAudXNlcklkcyA9IFtdO1xyXG4gICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLnVzZXJzLmZvckVhY2godXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VySWRzLmluZGV4T2YodXNlci5pZCkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VySWRzLnB1c2godXNlci5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2Vycy5wdXNoKHVzZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC51c2VySWRzLnB1c2godXNlci5pZCk7XHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLnVzZXJBbmRHcm91cElkcy5wdXNoKHVzZXIuaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5ncm91cElkcyA9IFtdO1xyXG4gICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwSWRzLmluZGV4T2YoZ3JvdXAuaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBJZHMucHVzaChncm91cC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cHMucHVzaChncm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmdyb3VwSWRzLnB1c2goZ3JvdXAuaWQpO1xyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC51c2VyQW5kR3JvdXBJZHMucHVzaChncm91cC5pZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50QXZhaWxhYmxlVXNlcnNDaGFuZ2VDYWxsYmFjayA9IChzZWxlY3RlZDogYm9vbGVhbiwgaWQ6IG51bWJlciwgbmFtZTogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVVc2Vycy5wdXNoKHtpZDogaWQsIG5hbWU6IG5hbWV9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVVc2Vycy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudEF2YWlsYWJsZVVzZXI6IElTZWxlY3RhYmxlID0gcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50QXZhaWxhYmxlVXNlcnNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QXZhaWxhYmxlVXNlci5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAuY3VycmVudEF2YWlsYWJsZVVzZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVHcm91cHNDaGFuZ2VDYWxsYmFjayA9IChzZWxlY3RlZDogYm9vbGVhbiwgaWQ6IG51bWJlciwgbmFtZTogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVHcm91cHMucHVzaCh7aWQ6IGlkLCBuYW1lOiBuYW1lfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50QXZhaWxhYmxlR3JvdXBzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50QXZhaWxhYmxlR3JvdXA6IElTZWxlY3RhYmxlID0gcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50QXZhaWxhYmxlR3JvdXBzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEF2YWlsYWJsZUdyb3VwLmlkID09PSBpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50QXZhaWxhYmxlR3JvdXBzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVVc2Vyc0FuZEdyb3Vwc0NoYW5nZUNhbGxiYWNrID0gKHNlbGVjdGVkOiBib29sZWFuLCBpZDogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIGlzVXNlcjogYm9vbGVhbik6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVVc2Vycy5wdXNoKHtpZDogaWQsIG5hbWU6IG5hbWV9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVHcm91cHMucHVzaCh7aWQ6IGlkLCBuYW1lOiBuYW1lfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVc2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC5jdXJyZW50QXZhaWxhYmxlVXNlcnMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50QXZhaWxhYmxlVXNlcjogSVNlbGVjdGFibGUgPSBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVVc2Vyc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QXZhaWxhYmxlVXNlci5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVVc2Vycy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAuY3VycmVudEF2YWlsYWJsZUdyb3Vwcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRBdmFpbGFibGVHcm91cDogSVNlbGVjdGFibGUgPSBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmN1cnJlbnRBdmFpbGFibGVHcm91cHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEF2YWlsYWJsZUdyb3VwLmlkID09PSBpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAuY3VycmVudEF2YWlsYWJsZUdyb3Vwcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLnZoc1JlZGVzaWduTW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzWzBdLmlzRWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGVybWlzc2lvbih0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzWzBdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiR3YXRjaCgoJHNjb3BlOiBJVXNlcnNBbmRHcm91cHNTZWxlY3RvckRpcmVjdGl2ZVNjb3BlKSA9PiB0aGlzLiRzY29wZS52bS5nZXRDdXJyZW50VXNlcklkKCksIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICE9IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLmZvckVhY2goKHA6IElFeHRQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcC5pc1VzZXJzU2hvd2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXI6IElTZWxlY3RhYmxlID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JDb250cm9sbGVyLm1vdmVJdGVtczxJU2VsZWN0YWJsZT4oW2N1cnJlbnRVc2VyXSwgcC51c2Vycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgVXNlcnNBbmRHcm91cHNTZWxlY3RvckNvbnRyb2xsZXIubW92ZUl0ZW1JZHM8SVNlbGVjdGFibGU+KFtjdXJyZW50VXNlcl0sIHAudXNlcklkcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwLnVzZXJzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHU6IElTZWxlY3RhYmxlID0gcC51c2Vyc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUuaWQgPT09IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnVzZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHAudXNlcklkcy5zcGxpY2UocC51c2VySWRzLmluZGV4T2Yob2xkVmFsdWUpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBwLmN1cnJlbnRBdmFpbGFibGVVc2VySWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcC5jdXJyZW50QXZhaWxhYmxlVXNlcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBwLmN1cnJlbnRTZWxlY3RlZFVzZXJzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcC51c2Vycy5zb3J0KHRoaXMudXNlcnNDb21wYXJlRm4pO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcC5pc1VzZXJzU2hvd2VkID0gdHJ1ZSwgMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUuaXNQZXJtaXNzaW9uc0RlbGVnYXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRNYW5hZ2VkVXNlcnNGb3JTZWxlY3Rvcih0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRGaWx0ZXIpLnRoZW4oKHVzZXJzOiBBcnJheTxJU2VsZWN0YWJsZT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJzTWFwOiBNYXA8bnVtYmVyLCBJU2VsZWN0YWJsZT4gPSBuZXcgTWFwPG51bWJlciwgSVNlbGVjdGFibGU+KCk7XHJcbiAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKHVzZXIgPT4gdXNlcnNNYXAuc2V0KHVzZXIuaWQsIHVzZXIpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMuZm9yRWFjaCgocGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cDogSUV4dFBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC51c2Vycy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXJzTWFwLmhhcyhwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLnVzZXJzW2pdLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cC51c2Vycy5zcGxpY2UoaiwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldE1hbmFnZWRHcm91cHNGb3JTZWxlY3Rvcih0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRGaWx0ZXIpLnRoZW4oKGdyb3VwczogQXJyYXk8SVNlbGVjdGFibGU+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cHNNYXA6IE1hcDxudW1iZXIsIElTZWxlY3RhYmxlPiA9IG5ldyBNYXA8bnVtYmVyLCBJU2VsZWN0YWJsZT4oKTtcclxuICAgICAgICAgICAgICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IGdyb3Vwc01hcC5zZXQoZ3JvdXAuaWQsIGdyb3VwKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLmZvckVhY2goKHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXA6IElFeHRQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAuZ3JvdXBzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ3JvdXBzTWFwLmhhcyhwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwLmdyb3Vwc1tqXS5pZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXAuZ3JvdXBzLnNwbGljZShqLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlZGl0aW5nKHA6IElFeHRQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzKTogdm9pZCB7XHJcbiAgICAgICAgcC5pc0VkaXRpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlZGl0ZWQocDogSUV4dFBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHMpOiB2b2lkIHtcclxuICAgICAgICBwLmlzRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RVc2VycyhwOiBJRXh0UGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcyk6IHZvaWQge1xyXG4gICAgICAgIHAuaXNVc2Vyc1Nob3dlZCA9IGZhbHNlO1xyXG4gICAgICAgIFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JDb250cm9sbGVyLm1vdmVJdGVtczxJU2VsZWN0YWJsZT4ocC5jdXJyZW50QXZhaWxhYmxlVXNlcnMsIHAudXNlcnMpO1xyXG4gICAgICAgIFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JDb250cm9sbGVyLm1vdmVJdGVtSWRzPElTZWxlY3RhYmxlPihwLmN1cnJlbnRBdmFpbGFibGVVc2VycywgcC51c2VySWRzKTtcclxuICAgICAgICBwLmN1cnJlbnRBdmFpbGFibGVVc2VySWRzID0gW107XHJcbiAgICAgICAgcC5jdXJyZW50QXZhaWxhYmxlVXNlcnMgPSBbXTtcclxuICAgICAgICBwLnVzZXJzLnNvcnQodGhpcy51c2Vyc0NvbXBhcmVGbik7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwLmlzVXNlcnNTaG93ZWQgPSB0cnVlLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5zZWxlY3RVc2VycyhwOiBJRXh0UGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcyk6IHZvaWQge1xyXG4gICAgICAgIHAuaXNVc2Vyc1Nob3dlZCA9IGZhbHNlO1xyXG4gICAgICAgIHAuY3VycmVudFNlbGVjdGVkVXNlcnMuZm9yRWFjaCh1c2VyID0+IHtcclxuICAgICAgICAgICAgcC51c2Vycy5zcGxpY2UocC51c2Vycy5pbmRleE9mKHVzZXIpLCAxKTtcclxuICAgICAgICAgICAgcC51c2VySWRzLnNwbGljZShwLnVzZXJJZHMuaW5kZXhPZih1c2VyLmlkKSwgMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcC5jdXJyZW50U2VsZWN0ZWRVc2VycyA9IFtdO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcC5pc1VzZXJzU2hvd2VkID0gdHJ1ZSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdEdyb3VwcyhwOiBJRXh0UGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcyk6IHZvaWQge1xyXG4gICAgICAgIHAuaXNHcm91cHNTaG93ZWQgPSBmYWxzZTtcclxuICAgICAgICBVc2Vyc0FuZEdyb3Vwc1NlbGVjdG9yQ29udHJvbGxlci5tb3ZlSXRlbXM8SVNlbGVjdGFibGU+KHAuY3VycmVudEF2YWlsYWJsZUdyb3VwcywgcC5ncm91cHMpO1xyXG4gICAgICAgIFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JDb250cm9sbGVyLm1vdmVJdGVtSWRzPElTZWxlY3RhYmxlPihwLmN1cnJlbnRBdmFpbGFibGVHcm91cHMsIHAuZ3JvdXBJZHMpO1xyXG4gICAgICAgIHAuY3VycmVudEF2YWlsYWJsZUdyb3VwSWRzID0gW107XHJcbiAgICAgICAgcC5jdXJyZW50QXZhaWxhYmxlR3JvdXBzID0gW107XHJcbiAgICAgICAgcC5ncm91cHMuc29ydCh0aGlzLmdyb3Vwc0NvbXBhcmVGbik7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwLmlzR3JvdXBzU2hvd2VkID0gdHJ1ZSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVuc2VsZWN0R3JvdXBzKHA6IElFeHRQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzKTogdm9pZCB7XHJcbiAgICAgICAgcC5pc0dyb3Vwc1Nob3dlZCA9IGZhbHNlO1xyXG4gICAgICAgIHAuY3VycmVudFNlbGVjdGVkR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICAgICAgICBwLmdyb3Vwcy5zcGxpY2UocC5ncm91cHMuaW5kZXhPZihncm91cCksIDEpO1xyXG4gICAgICAgICAgICBwLmdyb3VwSWRzLnNwbGljZShwLmdyb3VwSWRzLmluZGV4T2YoZ3JvdXAuaWQpLCAxKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBwLmN1cnJlbnRTZWxlY3RlZEdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcC5pc0dyb3Vwc1Nob3dlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RVc2Vyc0FuZEdyb3VwcygpOiB2b2lkIHtcclxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkUGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudEF2YWlsYWJsZVVzZXJJZHMgPSB0aGlzLnNlbGVjdGVkUGVybWlzc2lvbi5jdXJyZW50QXZhaWxhYmxlVXNlcnM7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50QXZhaWxhYmxlVXNlcnMgPSB0aGlzLnNlbGVjdGVkUGVybWlzc2lvbi5jdXJyZW50QXZhaWxhYmxlVXNlcnM7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50QXZhaWxhYmxlR3JvdXBJZHMgPSB0aGlzLnNlbGVjdGVkUGVybWlzc2lvbi5jdXJyZW50QXZhaWxhYmxlR3JvdXBzO1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudEF2YWlsYWJsZUdyb3VwcyA9IHRoaXMuc2VsZWN0ZWRQZXJtaXNzaW9uLmN1cnJlbnRBdmFpbGFibGVHcm91cHM7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGVybWlzc2lvbnMuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgICAgIFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JDb250cm9sbGVyLm1vdmVJdGVtczxJU2VsZWN0YWJsZT4oY3VycmVudEF2YWlsYWJsZVVzZXJJZHMsIHAudXNlcnMpO1xyXG4gICAgICAgICAgICAgICAgVXNlcnNBbmRHcm91cHNTZWxlY3RvckNvbnRyb2xsZXIubW92ZUl0ZW1JZHM8SVNlbGVjdGFibGU+KGN1cnJlbnRBdmFpbGFibGVVc2VycywgcC51c2VySWRzKTtcclxuICAgICAgICAgICAgICAgIFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JDb250cm9sbGVyLm1vdmVJdGVtczxJU2VsZWN0YWJsZT4oY3VycmVudEF2YWlsYWJsZUdyb3VwSWRzLCBwLmdyb3Vwcyk7XHJcbiAgICAgICAgICAgICAgICBVc2Vyc0FuZEdyb3Vwc1NlbGVjdG9yQ29udHJvbGxlci5tb3ZlSXRlbUlkczxJU2VsZWN0YWJsZT4oY3VycmVudEF2YWlsYWJsZUdyb3VwcywgcC5ncm91cElkcyk7XHJcbiAgICAgICAgICAgICAgICBwLmN1cnJlbnRBdmFpbGFibGVVc2VySWRzID0gW107XHJcbiAgICAgICAgICAgICAgICBwLmN1cnJlbnRBdmFpbGFibGVVc2VycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcC5jdXJyZW50QXZhaWxhYmxlR3JvdXBJZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHAuY3VycmVudEF2YWlsYWJsZUdyb3VwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcC51c2Vycy5zb3J0KHRoaXMudXNlcnNDb21wYXJlRm4pO1xyXG4gICAgICAgICAgICAgICAgcC5ncm91cHMuc29ydCh0aGlzLmdyb3Vwc0NvbXBhcmVGbik7XHJcbiAgICAgICAgICAgICAgICBwLmlzRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcC51c2Vycy5mb3JFYWNoKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXJJZHMuaW5kZXhPZih1c2VyLmlkKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VySWRzLnB1c2godXNlci5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcnMucHVzaCh1c2VyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHAuZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwSWRzLmluZGV4T2YoZ3JvdXAuaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwSWRzLnB1c2goZ3JvdXAuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGVybWlzc2lvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm9uQXNzaWduUGVybWlzc2lvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVVzZXJQZXJtaXNzaW9uKHA6IElFeHRQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzLCB1c2VyOiBJU2VsZWN0YWJsZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChwLnVzZXJJZHMuaW5kZXhPZih1c2VyLmlkKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgVXNlcnNBbmRHcm91cHNTZWxlY3RvckNvbnRyb2xsZXIubW92ZUl0ZW1zPElTZWxlY3RhYmxlPihbdXNlcl0sIHAudXNlcnMpO1xyXG4gICAgICAgICAgICBVc2Vyc0FuZEdyb3Vwc1NlbGVjdG9yQ29udHJvbGxlci5tb3ZlSXRlbUlkczxJU2VsZWN0YWJsZT4oW3VzZXJdLCBwLnVzZXJJZHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHAudXNlcnMuc3BsaWNlKHAudXNlcnMuaW5kZXhPZih1c2VyKSwgMSk7XHJcbiAgICAgICAgICAgIHAudXNlcklkcy5zcGxpY2UocC51c2VySWRzLmluZGV4T2YodXNlci5pZCksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiRzY29wZS5vbkNoYW5nZVVzZXJQZXJtaXNzaW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZUdyb3VwUGVybWlzc2lvbihwOiBJRXh0UGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3VwcywgZ3JvdXA6IElTZWxlY3RhYmxlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHAuZ3JvdXBJZHMuaW5kZXhPZihncm91cC5pZCkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JDb250cm9sbGVyLm1vdmVJdGVtczxJU2VsZWN0YWJsZT4oW2dyb3VwXSwgcC5ncm91cHMpO1xyXG4gICAgICAgICAgICBVc2Vyc0FuZEdyb3Vwc1NlbGVjdG9yQ29udHJvbGxlci5tb3ZlSXRlbUlkczxJU2VsZWN0YWJsZT4oW2dyb3VwXSwgcC5ncm91cElkcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcC5ncm91cHMuc3BsaWNlKHAuZ3JvdXBzLmluZGV4T2YoZ3JvdXApLCAxKTtcclxuICAgICAgICAgICAgcC5ncm91cElkcy5zcGxpY2UocC5ncm91cElkcy5pbmRleE9mKGdyb3VwLmlkKSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuJHNjb3BlLm9uQ2hhbmdlVXNlclBlcm1pc3Npb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZVVzZXIodXNlcjogSVNlbGVjdGFibGUsIHA6IElFeHRQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzKTogYm9vbGVhbiB7XHJcbiAgICAgICAgc3dpdGNoIChwLnBlcm1pc3Npb24udHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFNlY3VyZWRPYmplY3RUeXBlLk1BVEVSSUFMLm5hbWUudG9VcHBlckNhc2UoKTpcclxuICAgICAgICAgICAgICAgIGxldCBtYXRlcmlhbDogSU1hdGVyaWFsID0gdGhpcy4kc2NvcGUub2JqZWN0TW9kZWxbdGhpcy4kc2NvcGUub2JqZWN0TW9kZWxQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0ZXJpYWwub3duZXJJZCA9PSB1c2VyLmlkO1xyXG4gICAgICAgICAgICBjYXNlIFNlY3VyZWRPYmplY3RUeXBlLlBMQVlMSVNULm5hbWUudG9VcHBlckNhc2UoKTpcclxuICAgICAgICAgICAgICAgIGxldCBwbGF5bGlzdDogSVBsYXlsaXN0ID0gdGhpcy4kc2NvcGUub2JqZWN0TW9kZWxbdGhpcy4kc2NvcGUub2JqZWN0TW9kZWxQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGxheWxpc3Qub3duZXJJZCA9PSB1c2VyLmlkO1xyXG4gICAgICAgICAgICBjYXNlIFNlY3VyZWRPYmplY3RUeXBlLkNPVVJTRS5uYW1lLnRvVXBwZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgICBsZXQgY291cnNlOiBJQ291cnNlID0gdGhpcy4kc2NvcGUub2JqZWN0TW9kZWxbdGhpcy4kc2NvcGUub2JqZWN0TW9kZWxQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY291cnNlLm93bmVySWRzLmluZGV4T2YodXNlci5pZCkgIT0gLTE7XHJcbiAgICAgICAgICAgIGNhc2UgU2VjdXJlZE9iamVjdFR5cGUuUVVJWi5uYW1lLnRvVXBwZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgICBsZXQgcXVpejogSVF1aXogPSB0aGlzLiRzY29wZS5vYmplY3RNb2RlbFt0aGlzLiRzY29wZS5vYmplY3RNb2RlbFByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBxdWl6Lm93bmVySWQgPT0gdXNlci5pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdmFpbGFibGVVc2Vyc1VybChidXNpbmVzc1VuaXQ6IG51bWJlciwgZXhjbHVkZWRVc2VySWRzOiBudW1iZXJbXSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy4kc2NvcGUuaXNQZXJtaXNzaW9uc0RlbGVnYXRpb25cclxuICAgICAgICAgICAgPyBcIi9hcGkvdXNlclNlbGVjdG9yL21hbmFnZWRVc2Vycz9cIlxyXG4gICAgICAgICAgICA6IFwiL2FwaS91c2VyU2VsZWN0b3IvdXNlcnM/XCI7XHJcbiAgICAgICAgaWYgKGJ1c2luZXNzVW5pdCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gYGJ1c2luZXNzVW5pdElkPSR7YnVzaW5lc3NVbml0fSZgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXhjbHVkZWRVc2VySWRzICYmIGV4Y2x1ZGVkVXNlcklkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGV4Y2x1ZGVkVXNlcklkcy5mb3JFYWNoKGlkID0+IHVybCArPSBgZXhjbHVkZWRVc2VySWRzPSR7aWR9JmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdmFpbGFibGVHcm91cHNVcmwoYnVzaW5lc3NVbml0OiBudW1iZXIsIGV4Y2x1ZGVkR3JvdXBJZHM6IG51bWJlcltdLCBwZXJtaXNzaW9uSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy4kc2NvcGUuaXNQZXJtaXNzaW9uc0RlbGVnYXRpb25cclxuICAgICAgICAgICAgPyBcIi9hcGkvdXNlclNlbGVjdG9yL21hbmFnZWRHcm91cHM/XCJcclxuICAgICAgICAgICAgOiBcIi9hcGkvdXNlclNlbGVjdG9yL2dyb3Vwcz9cIjtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0KSB7XHJcbiAgICAgICAgICAgIHVybCArPSBgYnVzaW5lc3NVbml0SWQ9JHtidXNpbmVzc1VuaXR9JmA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBleGNsdWRlZEFsbFVzZXJzR3JvdXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXhjbHVkZWRHcm91cElkcyAmJiBleGNsdWRlZEdyb3VwSWRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZXhjbHVkZWRHcm91cElkcy5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICAgIHVybCArPSBgZXhjbHVkZWRHcm91cElkcz0ke2lkfSZgO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFleGNsdWRlZEFsbFVzZXJzR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlZEFsbFVzZXJzR3JvdXAgPSBpZCA9PT0gVXNlcnNBbmRHcm91cHNTZWxlY3RvckNvbnRyb2xsZXIuQUxMX1VTRVJTX0dST1VQX0lEO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFleGNsdWRlZEFsbFVzZXJzR3JvdXAgJiYgQWxsVXNlcnNQZXJtaXNzaW9ucy5QRVJNSVNTSU9OU19JRFMuaW5kZXhPZihwZXJtaXNzaW9uSWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICB1cmwgKz0gYGV4Y2x1ZGVkR3JvdXBJZHM9JHtVc2Vyc0FuZEdyb3Vwc1NlbGVjdG9yQ29udHJvbGxlci5BTExfVVNFUlNfR1JPVVBfSUR9JmA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEF2YWlsYWJsZVVzZXJzQW5kR3JvdXBzVXJsKGJ1c2luZXNzVW5pdDogbnVtYmVyLCBleGNsdWRlZFVzZXJJZHM6IG51bWJlcltdLCBleGNsdWRlZEdyb3VwSWRzOiBudW1iZXJbXSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy4kc2NvcGUuaXNQZXJtaXNzaW9uc0RlbGVnYXRpb25cclxuICAgICAgICAgICAgPyBcIi9hcGkvdXNlclNlbGVjdG9yL21hbmFnZWRVc2Vyc0FuZEdyb3Vwcz9cIlxyXG4gICAgICAgICAgICA6IFwiL2FwaS91c2VyU2VsZWN0b3IvdXNlcnNBbmRHcm91cHM/XCI7XHJcbiAgICAgICAgaWYgKGJ1c2luZXNzVW5pdCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gYGJ1c2luZXNzVW5pdElkPSR7YnVzaW5lc3NVbml0fSZgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXhjbHVkZWRVc2VySWRzICYmIGV4Y2x1ZGVkVXNlcklkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGV4Y2x1ZGVkVXNlcklkcy5mb3JFYWNoKGlkID0+IHVybCArPSBgZXhjbHVkZWRVc2VySWRzPSR7aWR9JmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZXhjbHVkZWRBbGxVc2Vyc0dyb3VwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGV4Y2x1ZGVkR3JvdXBJZHMgJiYgZXhjbHVkZWRHcm91cElkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGV4Y2x1ZGVkR3JvdXBJZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB1cmwgKz0gYGV4Y2x1ZGVkR3JvdXBJZHM9JHtpZH0mYDtcclxuICAgICAgICAgICAgICAgIGlmICghZXhjbHVkZWRBbGxVc2Vyc0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRBbGxVc2Vyc0dyb3VwID0gaWQgPT09IFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JDb250cm9sbGVyLkFMTF9VU0VSU19HUk9VUF9JRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmICghZXhjbHVkZWRBbGxVc2Vyc0dyb3VwICYmIEFsbFVzZXJzUGVybWlzc2lvbnMuUEVSTUlTU0lPTlNfSURTLmluZGV4T2YocGVybWlzc2lvbklkKSA9PT0gLTEpIHtcclxuICAgICAgICAvLyAgICAgdXJsICs9IGBleGNsdWRlZEdyb3VwSWRzPSR7VXNlcnNBbmRHcm91cHNTZWxlY3RvckNvbnRyb2xsZXIuQUxMX1VTRVJTX0dST1VQX0lEfSZgO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJJZCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5jdXJyZW50VXNlcklkTW9kZWwgJiYgdGhpcy4kc2NvcGUuY3VycmVudFVzZXJJZE1vZGVsUHJvcGVydHlcclxuICAgICAgICAgICAgPyB0aGlzLiRzY29wZS5jdXJyZW50VXNlcklkTW9kZWxbdGhpcy4kc2NvcGUuY3VycmVudFVzZXJJZE1vZGVsUHJvcGVydHldXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEN1cnJlbnRVc2VyTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5jdXJyZW50VXNlck5hbWVNb2RlbCAmJiB0aGlzLiRzY29wZS5jdXJyZW50VXNlck5hbWVNb2RlbFByb3BlcnR5XHJcbiAgICAgICAgICAgID8gdGhpcy4kc2NvcGUuY3VycmVudFVzZXJOYW1lTW9kZWxbdGhpcy4kc2NvcGUuY3VycmVudFVzZXJOYW1lTW9kZWxQcm9wZXJ0eV1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFVzZXIoKTogSVNlbGVjdGFibGUge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmdldEN1cnJlbnRVc2VySWQoKSxcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRDdXJyZW50VXNlck5hbWUoKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1c2Vyc0NvbXBhcmVGbiA9IChmaXJzdDogSVNlbGVjdGFibGUsIHNlY29uZDogSVNlbGVjdGFibGUpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgIGlmIChmaXJzdC5uYW1lID4gc2Vjb25kLm5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaXJzdC5uYW1lIDwgc2Vjb25kLm5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBncm91cHNDb21wYXJlRm4gPSAoZmlyc3Q6IElTZWxlY3RhYmxlLCBzZWNvbmQ6IElTZWxlY3RhYmxlKTogbnVtYmVyID0+IHtcclxuICAgICAgICBpZiAoZmlyc3QubmFtZSA+IHNlY29uZC5uYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3QubmFtZSA8IHNlY29uZC5uYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIG1vdmVJdGVtczxUIGV4dGVuZHMgSVNlbGVjdGFibGU+KGl0ZW1zOiBUW10sIGRlc3RpbmF0aW9uOiBUW10pOiB2b2lkIHtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBUKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBkZXN0aW5hdGlvbklkczogQXJyYXk8bnVtYmVyPiA9IGRlc3RpbmF0aW9uLm1hcChkZXN0aW5hdGlvbkl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uSXRlbS5pZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IGRlc3RpbmF0aW9uSWRzLmluZGV4T2YoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBtb3ZlSXRlbUlkczxUIGV4dGVuZHMgSVNlbGVjdGFibGU+KGl0ZW1zOiBUW10sIGRlc3RpbmF0aW9uOiBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IFQpID0+IHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gZGVzdGluYXRpb24uaW5kZXhPZihpdGVtLmlkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24ucHVzaChpdGVtLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQZXJtaXNzaW9uTmFtZShwZXJtaXNzaW9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoISF0aGlzLiRzY29wZS52aHNPYmplY3RNb2RlbFR5cGUgJiYgdGhpcy4kc2NvcGUudmhzT2JqZWN0TW9kZWxUeXBlID09PSAnU1VSVkVZJykge1xyXG4gICAgICAgICAgICByZXR1cm4gcGVybWlzc2lvbk5hbWUucmVwbGFjZSgncXVpeicsICdzdXJ2ZXknKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCEhdGhpcy4kc2NvcGUudmhzT2JqZWN0TW9kZWxUeXBlICYmIHRoaXMuJHNjb3BlLnZoc09iamVjdE1vZGVsVHlwZSA9PT0gJ0ZMQVNIQ0FSRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25OYW1lLnJlcGxhY2UoJ3F1aXonLCAnZmxhc2hjYXJkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9uTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVjb2RlUGVybWlzc2lvbk5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbmFtZTtcclxuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIlZpZXcgdGhlIG1hdGVyaWFsXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiVmlld1wiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkVkaXQgdGhlIG1hdGVyaWFsXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiRWRpdFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIlJlbW92ZSB0aGUgbWF0ZXJpYWxcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJSZW1vdmUgdGhlIG1hdGVyaWFsXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiRG93bmxvYWQgdGhlIG1hdGVyaWFsXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiRG93bmxvYWQgdGhlIG1hdGVyaWFsXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiQ29tbWVudCB0aGUgbWF0ZXJpYWxcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJDb21tZW50IHRoZSBtYXRlcmlhbFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIlVzZSB0aGlzIG1hdGVyaWFsIGluIGNvdXJzZXNcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJVc2UgdGhpcyBtYXRlcmlhbCBpbiBjb3Vyc2VzXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiVmlldyB0aGUgY291cnNlXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiVmlldyB0aGUgY291cnNlXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiRWRpdCB0aGUgY291cnNlXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiRWRpdCB0aGUgY291cnNlXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiQ291cnNlIEF0dGVuZGVlcyBtYW5hZ2VtZW50XCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiQ291cnNlIEF0dGVuZGVlcyBtYW5hZ2VtZW50XCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiU3RhcnQgdGhlIGNvdXJzZVwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIlN0YXJ0IHRoZSBjb3Vyc2VcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJWaWV3IExlYXJuaW5nIFBhdGhcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJWaWV3IExlYXJuaW5nIFBhdGhcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJTdGFydCBMZWFybmluZyBQYXRoXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiU3RhcnQgTGVhcm5pbmcgUGF0aFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkFzc2VzcyAocHV0IG1hcmtzIGZvcikgdGhlIHF1aXpcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJBc3Nlc3MgKHB1dCBtYXJrcyBmb3IpIHRoZSBxdWl6XCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiVmlldyB0aGUgcXVpelwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIlZpZXcgdGhlIHF1aXpcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJFZGl0IHRoZSBxdWl6XCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiRWRpdCB0aGUgcXVpelwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIlJlbW92ZSB0aGUgcXVpelwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIlJlbW92ZSB0aGUgcXVpelwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIlVzZSBpbiBjb3Vyc2VzXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiVXNlIGluIGNvdXJzZXNcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJBc3Nlc3MgKHB1dCBtYXJrcyBmb3IpIHRoZSBzdXJ2ZXlcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJBc3Nlc3MgKHB1dCBtYXJrcyBmb3IpIHRoZSBzdXJ2ZXlcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJWaWV3IHRoZSBzdXJ2ZXlcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJWaWV3IHRoZSBzdXJ2ZXlcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJFZGl0IHRoZSBzdXJ2ZXlcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJFZGl0IHRoZSBzdXJ2ZXlcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJSZW1vdmUgdGhlIHN1cnZleVwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIlJlbW92ZSB0aGUgc3VydmV5XCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiQXNzZXNzIChwdXQgbWFya3MgZm9yKSB0aGUgZmxhc2hjYXJkXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiQXNzZXNzIChwdXQgbWFya3MgZm9yKSB0aGUgZmxhc2hjYXJkXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiVmlldyB0aGUgZmxhc2hjYXJkXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiVmlldyB0aGUgZmxhc2hjYXJkXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiRWRpdCB0aGUgZmxhc2hjYXJkXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiRWRpdCB0aGUgZmxhc2hjYXJkXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiUmVtb3ZlIHRoZSBmbGFzaGNhcmRcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJSZW1vdmUgdGhlIGZsYXNoY2FyZFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0UGVybWlzc2lvbihwZXJtaXNzaW9uOiBJRXh0UGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChwZXJtaXNzaW9uLmlzRWRpdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGVybWlzc2lvbnMucHVzaChwZXJtaXNzaW9uKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBlcm1pc3Npb24gPSB0aGlzLnNlbGVjdGVkUGVybWlzc2lvbnNbMF07XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGVybWlzc2lvbnMuc3BsaWNlKHRoaXMuc2VsZWN0ZWRQZXJtaXNzaW9ucy5pbmRleE9mKHBlcm1pc3Npb24pLCAxKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGVybWlzc2lvbiA9IHRoaXMuc2VsZWN0ZWRQZXJtaXNzaW9uc1swXTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQZXJtaXNzaW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHVibGljIHVuc2VsZWN0VXNlcihwOiBJRXh0UGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3VwcywgdXNlcjogSVNlbGVjdGFibGUpOiB2b2lkIHtcclxuICAgIC8vICAgICBwLnVzZXJzLnNwbGljZShwLnVzZXJzLmluZGV4T2YodXNlciksIDEpO1xyXG4gICAgLy8gICAgIHAudXNlcklkcy5zcGxpY2UocC51c2VySWRzLmluZGV4T2YodXNlci5pZCksIDEpO1xyXG4gICAgLy8gfVxyXG4gICAgLy9cclxuICAgIC8vIHB1YmxpYyB1bnNlbGVjdEdyb3VwKHA6IElFeHRQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzLCBncm91cDogSVNlbGVjdGFibGUpOiB2b2lkIHtcclxuICAgIC8vICAgICBwLmdyb3Vwcy5zcGxpY2UocC5ncm91cHMuaW5kZXhPZihncm91cCksIDEpO1xyXG4gICAgLy8gICAgIHAuZ3JvdXBJZHMuc3BsaWNlKHAuZ3JvdXBJZHMuaW5kZXhPZihncm91cC5pZCksIDEpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVVc2VyUGVybWlzc2lvbnModXNlcjogSVNlbGVjdGFibGUpIHtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwLnVzZXJJZHMuaW5kZXhPZih1c2VyLmlkKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBwLnVzZXJzLnNwbGljZShwLnVzZXJzLmluZGV4T2YodXNlciksIDEpO1xyXG4gICAgICAgICAgICAgICAgcC51c2VySWRzLnNwbGljZShwLnVzZXJJZHMuaW5kZXhPZih1c2VyLmlkKSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnVzZXJzLnNwbGljZSh0aGlzLnVzZXJzLmluZGV4T2YodXNlciksIDEpO1xyXG4gICAgICAgIHRoaXMudXNlcklkcy5zcGxpY2UodGhpcy51c2VySWRzLmluZGV4T2YodXNlci5pZCksIDEpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLm9uQXNzaWduUGVybWlzc2lvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlR3JvdXBQZXJtaXNzaW9ucyhncm91cDogSVNlbGVjdGFibGUpIHtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwLmdyb3VwSWRzLmluZGV4T2YoZ3JvdXAuaWQpID49IDApIHtcclxuICAgICAgICAgICAgICAgIHAuZ3JvdXBzLnNwbGljZShwLmdyb3Vwcy5pbmRleE9mKGdyb3VwKSwgMSk7XHJcbiAgICAgICAgICAgICAgICBwLmdyb3VwSWRzLnNwbGljZShwLmdyb3VwSWRzLmluZGV4T2YoZ3JvdXAuaWQpLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBzLnNwbGljZSh0aGlzLmdyb3Vwcy5pbmRleE9mKGdyb3VwKSwgMSk7XHJcbiAgICAgICAgdGhpcy5ncm91cElkcy5zcGxpY2UodGhpcy5ncm91cElkcy5pbmRleE9mKGdyb3VwLmlkKSwgMSk7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUub25Bc3NpZ25QZXJtaXNzaW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hVc2VyT3JHcm91cEJ5TmFtZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hOYW1lRmllbGQgIT0gbnVsbCAmJiB0aGlzLnNlYXJjaE5hbWVGaWVsZCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcnMuZm9yRWFjaCh1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIHVzZXIuaGlkZGVuID0gdXNlci5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnNlYXJjaE5hbWVGaWVsZC50b0xvd2VyQ2FzZSgpKSA8IDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgICAgICAgICAgIGdyb3VwLmhpZGRlbiA9IGdyb3VwLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuc2VhcmNoTmFtZUZpZWxkLnRvTG93ZXJDYXNlKCkpIDwgMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51c2Vycy5mb3JFYWNoKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdXNlci5oaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXAuaGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxyXG5cclxuVXNlcnNBbmRHcm91cHNTZWxlY3RvckRpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xyXG4gICAgdmFyIGRpcmVjdGl2ZTogbmcuSURpcmVjdGl2ZSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUuY29udHJvbGxlciA9IFVzZXJzQW5kR3JvdXBzU2VsZWN0b3JDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0ge1xyXG4gICAgICAgIG9iamVjdE1vZGVsOiBcIj12aHNPYmplY3RNb2RlbFwiLFxyXG4gICAgICAgIG9iamVjdE1vZGVsUHJvcGVydHk6IFwiPXZoc09iamVjdE1vZGVsUHJvcGVydHlcIixcclxuICAgICAgICBjdXJyZW50VXNlcklkTW9kZWw6IFwiPT92aHNDdXJyZW50VXNlcklkTW9kZWxcIixcclxuICAgICAgICBjdXJyZW50VXNlcklkTW9kZWxQcm9wZXJ0eTogXCI9P3Zoc0N1cnJlbnRVc2VySWRNb2RlbFByb3BlcnR5XCIsXHJcbiAgICAgICAgY3VycmVudFVzZXJOYW1lTW9kZWw6IFwiPT92aHNDdXJyZW50VXNlck5hbWVNb2RlbFwiLFxyXG4gICAgICAgIGN1cnJlbnRVc2VyTmFtZU1vZGVsUHJvcGVydHk6IFwiPT92aHNDdXJyZW50VXNlck5hbWVNb2RlbFByb3BlcnR5XCIsXHJcbiAgICAgICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHNNb2RlbDogXCI9dmhzUGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHNNb2RlbFwiLFxyXG4gICAgICAgIGJ1c2luZXNzVW5pdEZpbHRlcjogXCI9P3Zoc0J1c2luZXNzVW5pdEZpbHRlclwiLFxyXG4gICAgICAgIGRpc2FibGVkOiBcIj0/dmhzRGlzYWJsZWRcIixcclxuICAgICAgICBpc1Blcm1pc3Npb25zRGVsZWdhdGlvbjogXCJAP3Zoc0lzUGVybWlzc2lvbnNEZWxlZ2F0aW9uXCIsXHJcbiAgICAgICAgZ3JvdXBzU2VsZWN0b3JEaXNhYmxlZDogXCI9P3Zoc0dyb3Vwc1NlbGVjdG9yRGlzYWJsZWRcIixcclxuICAgICAgICB2aHNPYmplY3RNb2RlbFR5cGU6IFwiPT92aHNPYmplY3RNb2RlbFR5cGVcIixcclxuICAgICAgICB2aHNSZWRlc2lnbk1vZGU6IFwiPT92aHNSZWRlc2lnbk1vZGVcIixcclxuICAgICAgICBvbkFzc2lnblBlcm1pc3Npb25zOiBcIiZ2aHNPbkFzc2lnblBlcm1pc3Npb25zXCIsXHJcbiAgICAgICAgb25DaGFuZ2VVc2VyUGVybWlzc2lvbjogXCImdmhzT25DaGFuZ2VVc2VyUGVybWlzc2lvblwiLFxyXG4gICAgfTtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdXNlcnMtYW5kLWdyb3Vwcy1zZWxlY3Rvci5odG1sXCIpO1xyXG4gICAgZGlyZWN0aXZlLnRyYW5zY2x1ZGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCBJUGFyc2VTZXJ2aWNlID0gYW5ndWxhci5JUGFyc2VTZXJ2aWNlO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXVkaW9SZXNwb25kZXJEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtPzogQXVkaW9SZXNwb25kZXJDb250cm9sbGVyO1xyXG4gICAgdmhzSWQ/OiBzdHJpbmc7XHJcbiAgICB2aHNBbGxvd1BhdXNlPzogYm9vbGVhbjtcclxuICAgIHZoc0FsbG93U2F2ZVJlY29yZGluZz86IGJvb2xlYW47XHJcbiAgICB2aHNBbGxvd1BsYXliYWNrPzogYm9vbGVhbjtcclxuICAgIHZoc01heExlbmd0aD86IG51bWJlcjtcclxuICAgIHZoc09uQ29tcGxldGVSZWNvcmRpbmdDYWxsYmFjazogc3RyaW5nOyAvLyhibG9iOiBCbG9iLCByZWNvcmRpbmdQcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPGFueT4sIC4uLmFyZ3M/OiBhbnkpID0+IGFuZ3VsYXIuSVByb21pc2U8YW55PlxyXG4gICAgdmhzUmVjb3JkaW5nSW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xyXG4gICAgdmhzT25CZWZvcmVSZWNvcmRpbmdTdGFydGVkQ2FsbGJhY2s/OiAocmVjb3JkaW5nU3RhdHVzPzogYm9vbGVhbikgPT4gYW5ndWxhci5JUHJvbWlzZTxhbnk+O1xyXG4gICAgdmhzT25QYXVzZVJlY29yZGluZ0NhbGxiYWNrPzogKHBhdXNlZDogYm9vbGVhbikgPT4gdm9pZDtcclxuICAgIHZoc09uU3RhcnRSZWNvcmRpbmdDYWxsYmFjaz86IChyZWNvZGluZ1Byb21pc2U/OiBhbmd1bGFyLklQcm9taXNlPGFueT4pID0+IGFuZ3VsYXIuSVByb21pc2U8YW55PjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvUmVzcG9uZGVyQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIGFsbG93UGF1c2U6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYWxsb3dTYXZlUmVjb3JkaW5nOiBib29sZWFuO1xyXG4gICAgcHVibGljIGFsbG93UGxheWJhY2s6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgb25Db21wbGV0ZVJlY29yZGluZ0NhbGxiYWNrOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGlzUmVjb3JkaW5nOiBib29sZWFuO1xyXG4gICAgcHVibGljIHJlY29yZFVybDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyByZWNvcmRpbmdJbnN0cnVjdGlvbnM6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgb25CZWZvcmVSZWNvcmRpbmdTdGFydGVkQ2FsbGJhY2s6IChyZWNvcmRpbmdTdGF0dXM/OiBib29sZWFuKSA9PiBhbmd1bGFyLklQcm9taXNlPGFueT47XHJcbiAgICBwdWJsaWMgb25QYXVzZVJlY29yZGluZ0NhbGxiYWNrOiAocGF1c2VkOiBib29sZWFuKSA9PiB2b2lkO1xyXG4gICAgcHVibGljIG9uU3RhcnRSZWNvcmRpbmdDYWxsYmFjazogKHJlY29kaW5nUHJvbWlzZT86IGFuZ3VsYXIuSVByb21pc2U8YW55PikgPT4gYW5ndWxhci5JUHJvbWlzZTxhbnk+O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHBhcnNlXCJcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IgKHByaXZhdGUgJHNjb3BlOiBJQXVkaW9SZXNwb25kZXJEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICBwdWJsaWMgICRwYXJzZTogSVBhcnNlU2VydmljZSkge1xyXG5cclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuYWxsb3dQYXVzZSA9IHRoaXMuJHNjb3BlLnZoc0FsbG93UGF1c2U7XHJcbiAgICAgICAgdGhpcy5hbGxvd1NhdmVSZWNvcmRpbmcgPSB0aGlzLiRzY29wZS52aHNBbGxvd1NhdmVSZWNvcmRpbmc7XHJcbiAgICAgICAgdGhpcy5hbGxvd1BsYXliYWNrID0gdGhpcy4kc2NvcGUudmhzQWxsb3dQbGF5YmFjaztcclxuICAgICAgICB0aGlzLm1heExlbmd0aCA9IHRoaXMuJHNjb3BlLnZoc01heExlbmd0aDtcclxuICAgICAgICB0aGlzLm9uQ29tcGxldGVSZWNvcmRpbmdDYWxsYmFjayA9IHRoaXMuJHNjb3BlLnZoc09uQ29tcGxldGVSZWNvcmRpbmdDYWxsYmFjaztcclxuICAgICAgICB0aGlzLnJlY29yZFVybCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRpbmdJbnN0cnVjdGlvbnMgPSB0aGlzLiRzY29wZS52aHNSZWNvcmRpbmdJbnN0cnVjdGlvbnM7XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZVJlY29yZGluZ1N0YXJ0ZWRDYWxsYmFjayA9IHRoaXMuJHNjb3BlLnZoc09uQmVmb3JlUmVjb3JkaW5nU3RhcnRlZENhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMub25QYXVzZVJlY29yZGluZ0NhbGxiYWNrID0gdGhpcy4kc2NvcGUudmhzT25QYXVzZVJlY29yZGluZ0NhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMub25TdGFydFJlY29yZGluZ0NhbGxiYWNrID0gdGhpcy4kc2NvcGUudmhzT25TdGFydFJlY29yZGluZ0NhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSUF1ZGlvUmVzcG9uZGVyRGlyZWN0aXZlU2NvcGUpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9wYXJzZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHBhcmVudCBzY29wZSBmb3IgdXNpbmcgZXh0ZXJuYWwgdmFyaWFibGVzIGFuZCByZXR1cm4gdGhlIGZ1bmN0aW9uIHZhbHVlIHRvIGNhbGxlci5cclxuICAgIHB1YmxpYyBpbnZva2VDYWxsYmFjayhibG9iOiBCbG9iLCByZWNvcmRpbmdQcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPGFueT4pOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiNy4gY2FsbGJhY2sgb24gd3JhcHBlciBkaXJlY3RpdmUgY2FsbGVkLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kcGFyc2UodGhpcy4kc2NvcGUudmhzT25Db21wbGV0ZVJlY29yZGluZ0NhbGxiYWNrKSh0aGlzLiRzY29wZS4kcGFyZW50LCB7YmxvYjogYmxvYiwgcmVjb3JkaW5nUHJvbWlzZTogcmVjb3JkaW5nUHJvbWlzZX0pO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEF1ZGlvUmVzcG9uZGVyRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElBdWRpb1Jlc3BvbmRlckRpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBBdWRpb1Jlc3BvbmRlckNvbnRyb2xsZXIpIHtcclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLmxpbmsgPSBsaW5rO1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBBdWRpb1Jlc3BvbmRlckNvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7XHJcbiAgICAgICAgdmhzSWQ6IFwiPT9cIixcclxuICAgICAgICB2aHNBbGxvd1BhdXNlOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzQWxsb3dTYXZlUmVjb3JkaW5nOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzQWxsb3dQbGF5YmFjazogXCI9P1wiLFxyXG4gICAgICAgIHZoc01heExlbmd0aDogXCI9P1wiLFxyXG4gICAgICAgIHZoc09uQ29tcGxldGVSZWNvcmRpbmdDYWxsYmFjazogXCJAXCIsXHJcbiAgICAgICAgdmhzUmVjb3JkaW5nSW5zdHJ1Y3Rpb25zOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzT25CZWZvcmVSZWNvcmRpbmdTdGFydGVkQ2FsbGJhY2s6IFwiPT9cIixcclxuICAgICAgICB2aHNPblBhdXNlUmVjb3JkaW5nQ2FsbGJhY2s6IFwiPT9cIixcclxuICAgICAgICB2aHNPblN0YXJ0UmVjb3JkaW5nQ2FsbGJhY2s6IFwiPT9cIixcclxuICAgIH07XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1hdWRpby1yZXNwb25kZXIuaHRtbFwiKTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcbkF1ZGlvUmVzcG9uZGVyRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7aGlkZGVuRXZlbnRzLCBzeXN0ZW1FdmVudHN9IGZyb20gXCIuLi9ub3RpZmljYXRpb25UZW1wbGF0ZXMvbW9kZWwvTm90aWZpY2F0aW9uRXZlbnRLZXlcIjtcclxuaW1wb3J0IHtCYWRnZXNTZXJ2aWNlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL0JhZGdlc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtHYW1pZmljYXRpb25Sb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0dhbWlmaWNhdGlvblJvdXRlclwiO1xyXG5pbXBvcnQge0lCYWRnZVRlbXBsYXRlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL21vZGVscy9JQmFkZ2VUZW1wbGF0ZVwiO1xyXG5pbXBvcnQge0JhZGdlVGVtcGxhdGVTY29wZX0gZnJvbSBcIi4uL2dhbWlmaWNhdGlvbi9tb2RlbHMvQmFkZ2VUZW1wbGF0ZVNjb3BlXCI7XHJcblxyXG5pbnRlcmZhY2UgSVZoc0JhZGdlVGVtcGxhdGVEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtOiBWaHNCYWRnZVRlbXBsYXRlRGlyZWN0aXZlQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0JhZGdlVGVtcGxhdGVEaXJlY3RpdmVDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBiYWRnZUdyaWRNb2RlbDogSUdyaWRNb2RlbDxJQmFkZ2VUZW1wbGF0ZT47XHJcbiAgICBwdWJsaWMgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHZpc2libGVCVVNlbGVjdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdXNlcjogSVVzZXJJbmZvO1xyXG4gICAgcHVibGljIHRlbXBsYXRlRGV0YWlsc0RlbGV0aW9uSW5Qcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJhZGdlc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBHYW1pZmljYXRpb25Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNCYWRnZVRlbXBsYXRlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBuZy5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFkZ2VTZXJ2aWNlOiBCYWRnZXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBnYW1pZmljYXRpb25Sb3V0ZXI6IEdhbWlmaWNhdGlvblJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuYmFkZ2VHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJQmFkZ2VUZW1wbGF0ZT4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvYmFkZ2VzL3RlbXBsYXRlc1wiKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSkpO1xyXG5cclxuICAgICAgICB0aGlzLmJhZGdlR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5iYWRnZUdyaWRNb2RlbC5maWx0ZXIuZXZlbnQgPSBcIlwiO1xyXG5cclxuICAgICAgICB0aGlzLnZpc2libGVCVVNlbGVjdG9yID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgIC50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyA9IHVzZXIuYWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWRnZUdyaWRNb2RlbC5maWx0ZXIuYnVzaW5lc3NVbml0SWQgPSB1c2VyLmJ1c2luZXNzVW5pdHNbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWaXNpYmxlQ29udGVudCgpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgdmlzaWJsZUFsbElmVXNlckhhdmVNdWx0aXBseUJVOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgJiYgdGhpcy5iYWRnZUdyaWRNb2RlbC5maWx0ZXIuYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgfHwgIXRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyAmJiB0aGlzLnVzZXIgJiYgdGhpcy51c2VyLmJ1c2luZXNzVW5pdHMgJiYgdGhpcy51c2VyLmJ1c2luZXNzVW5pdHMubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICAgIHx8IHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cykge1xyXG4gICAgICAgICAgICB2aXNpYmxlQWxsSWZVc2VySGF2ZU11bHRpcGx5QlUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmlzaWJsZUFsbElmVXNlckhhdmVNdWx0aXBseUJVO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJc0FjdGl2ZUdyaWRTdHlsZShpc0FjdGl2ZTogYm9vbGVhbik6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWN0aXZlXHJcbiAgICAgICAgICAgID8ge31cclxuICAgICAgICAgICAgOiB7XCJjb2xvclwiOiBcIiM5OTk5OTlcIn07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnZlcnRJc0FjdGl2ZShpc0FjdGl2ZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWN0aXZlICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGlzQWN0aXZlID8gJ1llcycgOiAnTm8nXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMaW5rRm9yRWRpdEJhZGdlVGVtcGxhdGUodGVtcGxhdGVJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuZ2FtaWZpY2F0aW9uUm91dGVyLnRlbXBsYXRlRWRpdFVybCh0ZW1wbGF0ZUlkLCB0aGlzLmJhZGdlR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJ1c2luZXNzVW5pdENoYW5nZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJhZGdlR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRBY3RpdmVQcm9wZXJ0eShpbmRleDogbnVtYmVyLCBiYWRnZTogSUJhZGdlVGVtcGxhdGUsIGFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGlmICghYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgICAgICAgICAgXCJCYWRnZSB3aWxsIGJlIGRlYWN0aXZhdGVkLiBDb250aW51ZT9cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkRlYWN0aXZhdGVcIixcclxuICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIlllc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlUHJvcGVydHlIZWxwZXIoaW5kZXgsIGJhZGdlLCBhY3RpdmUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVQcm9wZXJ0eUhlbHBlcihpbmRleCwgYmFkZ2UsIGFjdGl2ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0QWN0aXZlUHJvcGVydHlIZWxwZXIoaW5kZXg6IG51bWJlciwgYmFkZ2VUZW1wbGF0ZTogSUJhZGdlVGVtcGxhdGUsIGFjdGl2ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuYmFkZ2VTZXJ2aWNlLnNldEFjdGl2ZVByb3BlcnR5KGJhZGdlVGVtcGxhdGUuaWQsIGJhZGdlVGVtcGxhdGUudmVyc2lvbiwgYWN0aXZlLCB0aGlzLmJhZGdlR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUJhZGdlVGVtcGxhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VHcmlkTW9kZWwuZW50cmllc1tpbmRleF0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVCYWRnZVRlbXBsYXRlRGV0YWlscyhub3RpZmljYXRpb25UZW1wbGF0ZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJhZGdlU2VydmljZS5yZW1vdmVCYWRnZVRlbXBsYXRlRGV0YWlscyhub3RpZmljYXRpb25UZW1wbGF0ZUlkKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiQmFkZ2UgdGVtcGxhdGUgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudGVtcGxhdGVEZXRhaWxzRGVsZXRpb25JblByb2dyZXNzID0gZmFsc2UsIDgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNFdmVudEhpZGRlbihldmVudEtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN5c3RlbUV2ZW50cy5pbmRleE9mKGV2ZW50S2V5KSAhPSAtMSAmJiAoIXRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyB8fCB0aGlzLmJhZGdlR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgfHwgaGlkZGVuRXZlbnRzLmluZGV4T2YoZXZlbnRLZXkpICE9IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93UmV2ZXJ0QnV0dG9uKGJhZGdlVGVtcGxhdGU6IElCYWRnZVRlbXBsYXRlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGJhZGdlVGVtcGxhdGUuaXNBY3RpdmVcclxuICAgICAgICAgICAgJiYgYmFkZ2VUZW1wbGF0ZS5zY29wZSAhPSBCYWRnZVRlbXBsYXRlU2NvcGVbQmFkZ2VUZW1wbGF0ZVNjb3BlLkRFRkFVTFRdXHJcbiAgICAgICAgICAgICYmICh0aGlzLmJhZGdlR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9PSBudWxsIHx8IGJhZGdlVGVtcGxhdGUuc2NvcGUgPT0gQmFkZ2VUZW1wbGF0ZVNjb3BlW0JhZGdlVGVtcGxhdGVTY29wZS5CVVNJTkVTU19VTklUXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhpZGVBY3RpdmVCdXR0b24oYmFkZ2VUZW1wbGF0ZTogSUJhZGdlVGVtcGxhdGUpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgc2VsZiA9IGJhZGdlVGVtcGxhdGUuc2NvcGUgPT0gdGhpcy5iYWRnZUdyaWRNb2RlbC5maWx0ZXIuYnVzaW5lc3NVbml0SWQgIT0gbnVsbCAmJiBiYWRnZVRlbXBsYXRlLnNjb3BlID09IEJhZGdlVGVtcGxhdGVTY29wZVtCYWRnZVRlbXBsYXRlU2NvcGUuQlVTSU5FU1NfVU5JVF1cclxuICAgICAgICAgICAgfHwgdGhpcy5iYWRnZUdyaWRNb2RlbC5maWx0ZXIuYnVzaW5lc3NVbml0SWQgPT0gbnVsbCAmJiBiYWRnZVRlbXBsYXRlLnNjb3BlID09IEJhZGdlVGVtcGxhdGVTY29wZVtCYWRnZVRlbXBsYXRlU2NvcGUuU1lTVEVNXTtcclxuICAgICAgICByZXR1cm4gIXNlbGYgfHwgYmFkZ2VUZW1wbGF0ZS5pc0FjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RlYWN0aXZhdGVCdXR0b24oYmFkZ2VUZW1wbGF0ZTogSUJhZGdlVGVtcGxhdGUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gYmFkZ2VUZW1wbGF0ZS5pc0FjdGl2ZSAmJiAoIWJhZGdlVGVtcGxhdGUuaXNEaXNhYmxlZFBhcmVudCB8fCBiYWRnZVRlbXBsYXRlLnNjb3BlID09IEJhZGdlVGVtcGxhdGVTY29wZVtCYWRnZVRlbXBsYXRlU2NvcGUuREVGQVVMVF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5iYWRnZUdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QmFkZ2VUZW1wbGF0ZUltZ1VybChiYWRnZVRlbXBsYXRlOiBJQmFkZ2VUZW1wbGF0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGJhZGdlVGVtcGxhdGUucHJldmlld1VybCA/IGJhZGdlVGVtcGxhdGUucHJldmlld1VybCA6IGB0aGVtZXMvZGVmYXVsdC9pbWcvYWN0aW9uQmFkZ2VzLyR7YmFkZ2VUZW1wbGF0ZS5hY3Rpdml0eUJhZGdlRXZlbnRLZXl9LnBuZ2A7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNCYWRnZVRlbXBsYXRlRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNCYWRnZVRlbXBsYXRlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzQmFkZ2VUZW1wbGF0ZURpcmVjdGl2ZUNvbnRyb2xsZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0JhZGdlVGVtcGxhdGVEaXJlY3RpdmVDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtYmFkZ2UtdGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5WaHNCYWRnZVRlbXBsYXRlRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0JhZGdlc1NlcnZpY2V9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vQmFkZ2VzU2VydmljZVwiO1xyXG5pbXBvcnQge0dhbWlmaWNhdGlvblJvdXRlcn0gZnJvbSBcIi4uL3VybHMvR2FtaWZpY2F0aW9uUm91dGVyXCI7XHJcbmltcG9ydCB7SUJhZGdlVGVtcGxhdGVEZXRhaWxzfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL21vZGVscy9JQmFkZ2VUZW1wbGF0ZURldGFpbHNcIjtcclxuaW1wb3J0IHtJQmFkZ2VUZW1wbGF0ZURldGFpbHNTYXZlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL21vZGVscy9JQmFkZ2VUZW1wbGF0ZURldGFpbHNTYXZlXCI7XHJcbmltcG9ydCB7VXBsb2FkVXRpbHN9IGZyb20gXCIuLi91dGlscy9VcGxvYWRVdGlsc1wiO1xyXG5pbXBvcnQge0lRU2VydmljZX0gZnJvbSBcImFuZ3VsYXJcIjtcclxuaW1wb3J0IHtCYWRnZVRlbXBsYXRlU2NvcGV9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vbW9kZWxzL0JhZGdlVGVtcGxhdGVTY29wZVwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5pbXBvcnQge0lCdXNpbmVzc1VuaXR9IGZyb20gXCIuLi9idXNpbmVzc1VuaXRzL21vZGVscy9JQnVzaW5lc3NVbml0XCI7XHJcblxyXG5pbnRlcmZhY2UgSVZoc0JhZGdlVGVtcGxhdGVFZGl0RGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBiYWRnZVR5cGU/OiBzdHJpbmc7XHJcbiAgICB2bTogVmhzQmFkZ2VUZW1wbGF0ZUVkaXRDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzQmFkZ2VUZW1wbGF0ZUVkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBlcnJvck1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgcHVibGljIGJhZGdlVGVtcGxhdGVEZXRhaWxzOiBJQmFkZ2VUZW1wbGF0ZURldGFpbHM7XHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0TmFtZTogc3RyaW5nID0gXCJBbGxcIjtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGJhZGdlVGVtcGxhdGVJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHN1YmplY3RUb29sYmFyID0gW1tdXTtcclxuICAgIHB1YmxpYyB0b29sYmFyID0gW1tdXTtcclxuXHJcbiAgICBwdWJsaWMgcHJldmlldzogRmlsZTtcclxuICAgIHB1YmxpYyBwcmV2aWV3VXJsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaGFzUHJldmlld1VybENhbmNlbGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY3JvcHBlZEltYWdlOiBGaWxlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIlVwbG9hZFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXBsb2FkVXRpbHMuTkFNRSxcclxuICAgICAgICBCYWRnZXNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBBdXRoUmVkaXJlY3QuTkFNRSxcclxuICAgICAgICBHYW1pZmljYXRpb25Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc0JhZGdlVGVtcGxhdGVFZGl0RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IElRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRVdGlsczogVXBsb2FkVXRpbHMsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJhZGdlc1NlcnZpY2U6IEJhZGdlc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGdhbWlmaWNhdGlvblJvdXRlcjogR2FtaWZpY2F0aW9uUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmJhZGdlVGVtcGxhdGVJZCA9ICRyb3V0ZVBhcmFtc1tHYW1pZmljYXRpb25Sb3V0ZXIuVEVNUExBVEVfSURfUEFSQU1dO1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0SWQgPSAkcm91dGVQYXJhbXNbR2FtaWZpY2F0aW9uUm91dGVyLkJVU0lORVNTX1VOSVRfSURfUEFSQU1dO1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICBhdXRoUmVkaXJlY3QucmVkaXJlY3RUb0xvZ09uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5iYWRnZVRlbXBsYXRlSWQpIHtcclxuICAgICAgICAgICAgbGV0IHNjb3BlID0gQmFkZ2VUZW1wbGF0ZVNjb3BlW0JhZGdlVGVtcGxhdGVTY29wZS5TWVNURU1dO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5idXNpbmVzc1VuaXRJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzY29wZSA9IEJhZGdlVGVtcGxhdGVTY29wZVtCYWRnZVRlbXBsYXRlU2NvcGUuQlVTSU5FU1NfVU5JVF07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1c2luZXNzVW5pdElkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QnVzaW5lc3NVbml0QnlJZCh0aGlzLmJ1c2luZXNzVW5pdElkKS50aGVuKChyZXN1bHQ6IElCdXNpbmVzc1VuaXQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdE5hbWUgPSByZXN1bHQubmFtZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UuZ2V0QmFkZ2VUZW1wbGF0ZURldGFpbHNCeUlkKHRoaXMuYmFkZ2VUZW1wbGF0ZUlkLCBzY29wZSlcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWRnZVRlbXBsYXRlRGV0YWlscyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdVcmwgPSB0aGlzLmJhZGdlVGVtcGxhdGVEZXRhaWxzLnByZXZpZXdVcmwgPyB0aGlzLmJhZGdlVGVtcGxhdGVEZXRhaWxzLnByZXZpZXdVcmwgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWRpcmVjdEluZGV4UGFnZUJ5QmFkZ2VUeXBlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbmFjdGl2ZVByb3BlcnR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgICAgICBcIk5vdGlmaWNhdGlvbiB3aWxsIGJlIGRlYWN0aXZhdGVkLiBDb250aW51ZT9cIiwge1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRGVhY3RpdmF0ZVwiLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJZZXNcIixcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5zZXRBY3RpdmVQcm9wZXJ0eSh0aGlzLmJhZGdlVGVtcGxhdGVEZXRhaWxzLmlkLCB0aGlzLmJhZGdlVGVtcGxhdGVEZXRhaWxzLnZlcnNpb24sIGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdEluZGV4UGFnZUJ5QmFkZ2VUeXBlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlVGVtcGxhdGVEZXRhaWxzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlRGV0YWlsczogSUJhZGdlVGVtcGxhdGVEZXRhaWxzU2F2ZSA9IHt9O1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IFwiXCI7XHJcblxyXG4gICAgICAgIGxldCBoYXNQcmV2aWV3VXJsQ2FuY2VsZWQ6IGJvb2xlYW4gPSB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZDtcclxuICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcmV2aWV3OiBGaWxlID0gdGhpcy5jcm9wcGVkSW1hZ2UgPT0gdW5kZWZpbmVkID8gdGhpcy5wcmV2aWV3IDogdGhpcy5jcm9wcGVkSW1hZ2U7XHJcblxyXG4gICAgICAgIHRlbXBsYXRlRGV0YWlscy5pZCA9IHRoaXMuYmFkZ2VUZW1wbGF0ZURldGFpbHMuaWQ7XHJcbiAgICAgICAgdGVtcGxhdGVEZXRhaWxzLmJ1c2luZXNzVW5pdElkID0gdGhpcy5iYWRnZVRlbXBsYXRlRGV0YWlscy5idXNpbmVzc1VuaXRJZCA/IHRoaXMuYmFkZ2VUZW1wbGF0ZURldGFpbHMuYnVzaW5lc3NVbml0SWQgOiB0aGlzLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIHRlbXBsYXRlRGV0YWlscy5ldmVudElkID0gdGhpcy5iYWRnZVRlbXBsYXRlRGV0YWlscy5ldmVudElkO1xyXG4gICAgICAgIHRlbXBsYXRlRGV0YWlscy5uYW1lVGVtcGxhdGUgPSB0aGlzLmJhZGdlVGVtcGxhdGVEZXRhaWxzLm5hbWU7XHJcbiAgICAgICAgdGVtcGxhdGVEZXRhaWxzLnN1YmplY3RUZW1wbGF0ZSA9IHRoaXMuYmFkZ2VUZW1wbGF0ZURldGFpbHMuc3ViamVjdDtcclxuICAgICAgICB0ZW1wbGF0ZURldGFpbHMubWVzc2FnZVRlbXBsYXRlID0gdGhpcy5iYWRnZVRlbXBsYXRlRGV0YWlscy5tZXNzYWdlO1xyXG4gICAgICAgIHRlbXBsYXRlRGV0YWlscy5pc1Jlc2V0UHJldmlldyA9IGhhc1ByZXZpZXdVcmxDYW5jZWxlZDtcclxuICAgICAgICB0ZW1wbGF0ZURldGFpbHMubmV3SW1hZ2VTZWxlY3RlZCA9IHByZXZpZXcgIT0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLnNhdmVCYWRnZVRlbXBsYXRlRGV0YWlscyh0ZW1wbGF0ZURldGFpbHMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlVGVtcGxhdGVEZXRhaWxzID0gcmVzdWx0O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCB1cGxvYWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkID0gdGhpcy51cGxvYWQocHJldmlldywgdGhpcy5iYWRnZVRlbXBsYXRlRGV0YWlscy5pZCwgXCJwcmV2aWV3XCIpLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5zdG9yYWdlLm5vdC5hdmFpbGFibGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZS4gVGh1bWJuYWlsIGhhcyBub3QgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnByZXZpZXcudHlwZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkludmFsaWQgZmlsZSBmb3JtYXQ6IHBsZWFzZSBzZWxlY3QgYSBmaWxlIHdpdGggLmpwZyBvciAucG5nIGV4dGVuc2lvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWQgPSB0aGlzLiRxLndoZW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB1cGxvYWQudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdEluZGV4UGFnZUJ5QmFkZ2VUeXBlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkJhZGdlIHRlbXBsYXRlIGhhcyBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVCYWRnZVRlbXBsYXRlRGV0YWlscygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UucmVtb3ZlQmFkZ2VUZW1wbGF0ZURldGFpbHModGhpcy5iYWRnZVRlbXBsYXRlRGV0YWlscy5pZClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdEluZGV4UGFnZUJ5QmFkZ2VUeXBlKCk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiQmFkZ2UgdGVtcGxhdGUgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc2FibGVTYXZlQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5iYWRnZVRlbXBsYXRlRGV0YWlscy5zdWJqZWN0IHx8ICF0aGlzLmJhZGdlVGVtcGxhdGVEZXRhaWxzLm1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWRpcmVjdEVkaXRQYWdlQnlCYWRnZVR5cGUodGVtcGxhdGVJZDogbnVtYmVyLCBidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLiRzY29wZS5iYWRnZVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIm1haW5cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmdhbWlmaWNhdGlvblJvdXRlci50ZW1wbGF0ZUVkaXRVcmwodGVtcGxhdGVJZCwgYnVzaW5lc3NVbml0SWQpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlZGlyZWN0SW5kZXhQYWdlQnlCYWRnZVR5cGUoKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLiRzY29wZS5iYWRnZVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIm1haW5cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmdhbWlmaWNhdGlvblJvdXRlci5iYWRnZXNVcmwoKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0UHJldmlldygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHJldmlld1VybCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXdVcmwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3JvcHBlZEltYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JvcHBlZEltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0Nyb3BwZXJNb2RhbEFmdGVyTG9hZCgpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ICE9IHVuZGVmaW5lZCB8fCB0aGlzLnByZXZpZXdVcmwgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hvd0Nyb3BwZXJNb2RhbCgpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2hvd0Nyb3BwZXJNb2RhbEFmdGVyTG9hZCgpXHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0Nyb3BwZXJNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICAkKFwiI2ltYWdlQ3JvcHBlck1vZGFsXCIpLm1vZGFsKFwic2hvd1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdG9yZVByZXZpZXdVcmwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucHJldmlld1VybCA9IHRoaXMuYmFkZ2VUZW1wbGF0ZURldGFpbHMucHJldmlld1VybDtcclxuICAgICAgICB0aGlzLmNyb3BwZWRJbWFnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBsb2FkKGZpbGU6IEZpbGUsIGJhZGdlVGVtcGxhdGVEZXRhaWxzSWQ6IG51bWJlciwgZmlsZVR5cGU6IHN0cmluZyk6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFByb21pc2U8RmlsZT4ge1xyXG4gICAgICAgIGxldCB1cmxCdWlsZGVyID0gdGhpcy51cmwuYmFzZShcIi9hcGkvYmFkZ2VzL3RlbXBsYXRlcy91cGxvYWQ/YmFkZ2VUZW1wbGF0ZURldGFpbHNJZD06YmFkZ2VUZW1wbGF0ZURldGFpbHNJZCZmaWxlVHlwZT06ZmlsZVR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJhZGdlVGVtcGxhdGVEZXRhaWxzSWRcIiwgYmFkZ2VUZW1wbGF0ZURldGFpbHNJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmZpbGVUeXBlXCIsIGZpbGVUeXBlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGFuZ3VsYXIuY29weSh1cmxCdWlsZGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCYWRnZVRlbXBsYXRlSW1nVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGB0aGVtZXMvZGVmYXVsdC9pbWcvYWN0aW9uQmFkZ2VzLyR7dGhpcy5iYWRnZVRlbXBsYXRlRGV0YWlscy5iYWRnZUtleX0ucG5nYDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0JhZGdlVGVtcGxhdGVFZGl0RGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNCYWRnZVRlbXBsYXRlRWRpdERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0JhZGdlVGVtcGxhdGVFZGl0Q29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzQmFkZ2VUZW1wbGF0ZUVkaXRDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGJhZGdlVHlwZTogXCJAXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1iYWRnZS10ZW1wbGF0ZS1lZGl0Lmh0bWxcIilcclxuICAgIH1cclxufVxyXG5cclxuVmhzQmFkZ2VUZW1wbGF0ZUVkaXREaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNDYWxlbmRhckZpbHRlckRpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgcmVnaXN0ZXJlZE9yV2FpdGxpc3RlZDogYm9vbGVhbjtcclxuICAgIGlsdFNlc3Npb246IGJvb2xlYW47XHJcbiAgICB2aWx0U2Vzc2lvbjogYm9vbGVhbjtcclxuICAgIG5vdEF2YWlsYWJsZUZvclJlZ2lzdHJhdGlvbjogYm9vbGVhbjtcclxuICAgIGNvdXJzZTogYm9vbGVhbjtcclxuICAgIHNlYXJjaFN0cmluZzogc3RyaW5nO1xyXG5cclxuICAgIGZpbHRlcjogKCkgPT4gdm9pZDtcclxuICAgIGNsZWFyRmlsdGVyOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIHZtPzogVmhzQ2FsZW5kYXJGaWx0ZXJDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzQ2FsZW5kYXJGaWx0ZXJDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJlZE9yV2FpdGxpc3RlZElkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY291cnNlSWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBpbHRTZXNzaW9uSWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyB2aWx0U2Vzc2lvbklkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbm90QXZhaWxhYmxlRm9yUmVnaXN0cmF0aW9uSWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBzZWFyY2hTdHJpbmdJZDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzQ2FsZW5kYXJGaWx0ZXJEaXJlY3RpdmVTY29wZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZE9yV2FpdGxpc3RlZElkID0gdGhpcy5nZW5lcmF0ZUlkKCk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJZCA9IHRoaXMuZ2VuZXJhdGVJZCgpO1xyXG4gICAgICAgIHRoaXMuaWx0U2Vzc2lvbklkID0gdGhpcy5nZW5lcmF0ZUlkKCk7XHJcbiAgICAgICAgdGhpcy52aWx0U2Vzc2lvbklkID0gdGhpcy5nZW5lcmF0ZUlkKCk7XHJcbiAgICAgICAgdGhpcy5ub3RBdmFpbGFibGVGb3JSZWdpc3RyYXRpb25JZCA9IHRoaXMuZ2VuZXJhdGVJZCgpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nSWQgPSB0aGlzLmdlbmVyYXRlSWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlSWQoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgbGV0IGNoYXJhY3RlcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xyXG4gICAgICAgIGxldCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBjaGFyYWN0ZXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNDYWxlbmRhckZpbHRlckRpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzQ2FsZW5kYXJGaWx0ZXJEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNDYWxlbmRhckZpbHRlckNvbnRyb2xsZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzQ2FsZW5kYXJGaWx0ZXJDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIHJlZ2lzdGVyZWRPcldhaXRsaXN0ZWQ6IFwiPXZoc1JlZ2lzdGVyZWRPcldhaXRsaXN0ZWRcIixcclxuICAgICAgICAgICAgaWx0U2Vzc2lvbjogXCI9dmhzSWx0U2Vzc2lvblwiLFxyXG4gICAgICAgICAgICB2aWx0U2Vzc2lvbjogXCI9dmhzVmlsdFNlc3Npb25cIixcclxuICAgICAgICAgICAgbm90QXZhaWxhYmxlRm9yUmVnaXN0cmF0aW9uOiBcIj12aHNOb3RBdmFpbGFibGVGb3JSZWdpc3RyYXRpb25cIixcclxuICAgICAgICAgICAgY291cnNlOiBcIj12aHNDb3Vyc2VcIixcclxuICAgICAgICAgICAgc2VhcmNoU3RyaW5nOiBcIj12aHNTZWFyY2hTdHJpbmdcIixcclxuICAgICAgICAgICAgZmlsdGVyOiBcIj12aHNGaWx0ZXJcIixcclxuICAgICAgICAgICAgY2xlYXJGaWx0ZXI6IFwiPXZoc0NsZWFyRmlsdGVyXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1jYWxlbmRhci1maWx0ZXIuaHRtbFwiKSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNDYWxlbmRhckZpbHRlckRpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1VwbG9hZHNTZXJ2aWNlfSBmcm9tIFwiLi4vc3RvcmFnZS9VcGxvYWRzU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzQ291cnNlRWRpdFRvcFRhYnNEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGNvdXJzZUlkOiBudW1iZXI7XHJcbiAgICB0b3BNZW51S2V5OiBzdHJpbmc7XHJcbiAgICBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHZtPzogVmhzQ291cnNlRWRpdFRvcFRhYnNDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzQ291cnNlRWRpdFRvcFRhYnNDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgQUJPVVRfVEFCX0tFWTogc3RyaW5nID0gXCJhYm91dFwiO1xyXG4gICAgcHVibGljIFNUUlVDVFVSRV9UQUJfS0VZOiBzdHJpbmcgPSBcInN0cnVjdHVyZVwiO1xyXG4gICAgcHVibGljIEVOUk9MTE1FTlRTX1RBQl9LRVk6IHN0cmluZyA9IFwiZW5yb2xsbWVudHNcIjtcclxuICAgIHB1YmxpYyBMQU5ESU5HX1BBR0VfVEFCX0tFWTogc3RyaW5nID0gXCJsYW5kaW5nUGFnZVwiO1xyXG4gICAgcHVibGljIFBBUlRJQ0lQQVRJT05fRk9STV9UQUJfS0VZOiBzdHJpbmcgPSBcInBhcnRpY2lwYXRpb25Gb3JtXCI7XHJcbiAgICBwdWJsaWMgQVRUQUNIRURfRklMRVNfVEFCX0tFWTogc3RyaW5nID0gXCJhdHRhY2hlZEZpbGVzXCI7XHJcbiAgICBwdWJsaWMgRVhQT1JUX0lNUE9SVF9UQUJfS0VZOiBzdHJpbmcgPSBcImV4cG9ydEltcG9ydFwiO1xyXG4gICAgcHVibGljIFJFTEFURURfUFJPRFVDVFNfVEFCX0tFWTogc3RyaW5nID0gXCJyZWxhdGVkUHJvZHVjdHNcIjtcclxuICAgIHB1YmxpYyBOT1RJRklDQVRJT05fVEVNUExBVEVfVEFCX0tFWTogc3RyaW5nID0gXCJub3RpZmljYXRpb25UZW1wbGF0ZXNcIjtcclxuICAgIHB1YmxpYyBHQU1JRklDQVRJT05fVEFCX0tFWTogc3RyaW5nID0gXCJnYW1pZmljYXRpb25cIjtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudFRvcEVkaXRQYWdlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzQ291cnNlRWRpdFRvcFRhYnNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRUb3BFZGl0UGFnZSA9IHRoaXMuZ2V0Q3VycmVudFRhYigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVZoc0NvdXJzZUVkaXRUb3BUYWJzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb3BNZW51QWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS50b3BNZW51S2V5ID09IHRvcE1lbnVLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVRvcEVkaXRQYXRoKCkge1xyXG4gICAgICAgIHRoaXMucmVkaXJlY3RUb1VybCh0aGlzLmN1cnJlbnRUb3BFZGl0UGFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9VcmwodXJsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEN1cnJlbnRUYWIoKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2godGhpcy4kc2NvcGUudG9wTWVudUtleSkge1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuQUJPVVRfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZXNSb3V0ZXIudXBkYXRlVXJsKHRoaXMuJHNjb3BlLmNvdXJzZUlkKTtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlNUUlVDVFVSRV9UQUJfS0VZOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci5zdHJ1Y3R1cmVVcGRhdGVVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuRU5ST0xMTUVOVFNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZXNSb3V0ZXIuZW5yb2xsbWVudEVkaXRVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuTEFORElOR19QQUdFX1RBQl9LRVk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VzUm91dGVyLmxhbmRpbmdQYWdlVXBkYXRlVXJsKHRoaXMuJHNjb3BlLmNvdXJzZUlkKTtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlBBUlRJQ0lQQVRJT05fRk9STV9UQUJfS0VZOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci5wYXJ0aWNpcGF0aW9uRm9ybVVwZGF0ZVVybCh0aGlzLiRzY29wZS5jb3Vyc2VJZCk7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5BVFRBQ0hFRF9GSUxFU19UQUJfS0VZOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci5idW5kbGVVcGRhdGVVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuRVhQT1JUX0lNUE9SVF9UQUJfS0VZOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci5leHBvcnRJbXBvcnRVcGRhdGVVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuUkVMQVRFRF9QUk9EVUNUU19UQUJfS0VZOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci5yZWxhdGVkUHJvZHVjdHNVcGRhdGVVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuTk9USUZJQ0FUSU9OX1RFTVBMQVRFX1RBQl9LRVk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VzUm91dGVyLm5vdGlmaWNhdGlvbkRldGFpbHNVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuR0FNSUZJQ0FUSU9OX1RBQl9LRVk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VzUm91dGVyLmdhbWlmaWNhdGlvbkRldGFpbHNVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci51cGRhdGVVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0NvdXJzZUVkaXRUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNDb3Vyc2VFZGl0VG9wVGFic0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0NvdXJzZUVkaXRUb3BUYWJzQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNDb3Vyc2VFZGl0VG9wVGFic0NvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgY291cnNlSWQ6IFwiPXZoc0NvdXJzZUlkXCIsXHJcbiAgICAgICAgICAgIHRvcE1lbnVLZXk6IFwiPXZoc1RvcE1lbnVLZXlcIixcclxuICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnM6IFwiPXZoc1N5c3RlbVBlcm1pc3Npb25zXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1jb3Vyc2UtZWRpdC10b3AtdGFicy5odG1sXCIpLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc0NvdXJzZUVkaXRUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIi4uL3V0aWxzL01vbWVudFwiO1xyXG5pbXBvcnQge0lNYXBwZWRTZWN0aW9uc1BhaXJ9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JTWFwcGVkU2VjdGlvbnNQYWlyXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SU1vZHVsZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lNb2R1bGVcIjtcclxuaW1wb3J0IHtJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWR9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JU2VjdGlvbkluSGllcmFyY2h5XCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4uL2NvdXJzZXMvQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNlbGVjdGFibGVTZWN0aW9uIGV4dGVuZHMgSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkIHtcclxuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU2VsZWN0YWJsZVNlY3Rpb25zUGFpciB7XHJcbiAgICBwdWJsaXNoZWRDb3Vyc2VTZWN0aW9uPzogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkO1xyXG4gICAgc291cmNlQ291cnNlU2VjdGlvbj86IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZDtcclxuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzQ291cnNlUHVibGlzaERpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgcHVibGlzaGVkQ291cnNlSWQ6IG51bWJlcjtcclxuICAgIG9uU3VjY2Vzc0NhbGxiYWNrOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIHZtOiBWaHNDb3Vyc2VQdWJsaXNoRGlyZWN0aXZlQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0NvdXJzZVB1Ymxpc2hEaXJlY3RpdmVDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQ291cnNlPjtcclxuXHJcbiAgICBwcml2YXRlIHB1Ymxpc2hlZENvdXJzZUlkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHB1Ymxpc2hlZENvdXJzZTogSUNvdXJzZSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBwdWJsaXNoZWRDb3Vyc2VNb2R1bGVzOiBBcnJheTxJTW9kdWxlPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSBwdWJsaXNoZWRDb3Vyc2VTZWN0aW9uczogQXJyYXk8SVNlbGVjdGFibGVTZWN0aW9uPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSBwdWJsaXNoZWRDb3Vyc2VTZWN0aW9uc01hcDogTWFwPG51bWJlciwgQXJyYXk8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkPj4gPSBuZXcgTWFwPG51bWJlciwgQXJyYXk8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkPj4oKTtcclxuXHJcbiAgICBwcml2YXRlIHNvdXJjZUNvdXJzZUlkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHNvdXJjZUNvdXJzZTogSUNvdXJzZSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBzb3VyY2VDb3Vyc2VNb2R1bGVzOiBBcnJheTxJTW9kdWxlPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSBzb3VyY2VDb3Vyc2VTZWN0aW9uczogQXJyYXk8SVNlbGVjdGFibGVTZWN0aW9uPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSBzb3VyY2VDb3Vyc2VTZWN0aW9uc01hcDogTWFwPG51bWJlciwgQXJyYXk8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkPj4gPSBuZXcgTWFwPG51bWJlciwgQXJyYXk8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkPj4oKTtcclxuXHJcbiAgICBwcml2YXRlIHB1Ymxpc2hlZENvdXJzZVNlbGVjdGVkU2VjdGlvbjogSVNlbGVjdGFibGVTZWN0aW9uO1xyXG4gICAgcHJpdmF0ZSBzb3VyY2VDb3Vyc2VTZWxlY3RlZFNlY3Rpb246IElTZWxlY3RhYmxlU2VjdGlvbjtcclxuXHJcbiAgICBwcml2YXRlIHNlY3Rpb25QYWlyczogQXJyYXk8SVNlbGVjdGFibGVTZWN0aW9uc1BhaXI+ID0gW107XHJcbiAgICBwcml2YXRlIHNlbGVjdGVkU2VjdGlvblBhaXI6IElTZWxlY3RhYmxlU2VjdGlvbnNQYWlyO1xyXG5cclxuICAgIHByaXZhdGUgaXNQdWJsaXNoaW5nU3RhcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzQ291cnNlUHVibGlzaERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnB1Ymxpc2hlZENvdXJzZUlkID0gJHNjb3BlLnB1Ymxpc2hlZENvdXJzZUlkO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRQdWJsaXNoZWRDb3Vyc2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUNvdXJzZT4oJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvY291cnNlcy9zZWFyY2gvYWxsP2V4Y2x1ZGVkQ291cnNlSWRzPSR7dGhpcy5wdWJsaXNoZWRDb3Vyc2VJZH1gKSkpO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlU3RhdHVzID0gXCJOT1RfU1RBUlRFRCxJTl9QUk9HUkVTUyxDT01QTEVURURcIlxyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DaGFuZ2VTb3VyY2VDb3Vyc2UoY291cnNlOiBJQ291cnNlKSB7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VDb3Vyc2VJZCA9IGNvdXJzZS5pZDtcclxuICAgICAgICBpZiAodGhpcy5zb3VyY2VDb3Vyc2VJZCAmJiB0aGlzLnNvdXJjZUNvdXJzZUlkICE9IHRoaXMucHVibGlzaGVkQ291cnNlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wdWJsaXNoZWRDb3Vyc2VTZWN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnB1Ymxpc2hlZENvdXJzZVNlY3Rpb25zTWFwLmZvckVhY2gobW9kdWxlU2VjdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlU2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uRXh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0YWJsZVNlY3Rpb246IElTZWxlY3RhYmxlU2VjdGlvbiA9IGFuZ3VsYXIuY29weShzZWN0aW9uRXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlU2VjdGlvbi5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVibGlzaGVkQ291cnNlU2VjdGlvbnMucHVzaChzZWxlY3RhYmxlU2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNvdXJzZU1vZHVsZXMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VDb3Vyc2VTZWN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNvdXJzZVNlY3Rpb25zTWFwLmNsZWFyKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnB1Ymxpc2hlZENvdXJzZVNlbGVjdGVkU2VjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ291cnNlU2VsZWN0ZWRTZWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uUGFpcnMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZFNvdXJjZUNvdXJzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY291cnNlU2VsZWN0aW9uIChjb3Vyc2U6IElDb3Vyc2UpIHtcclxuICAgICAgICBsZXQgdG9waWMgPSBjb3Vyc2UudG9waWM7XHJcbiAgICAgICAgaWYgKHRvcGljLmxlbmd0aCA+IDY1KXtcclxuICAgICAgICAgICAgbGV0IHRtcCA9IHRvcGljLnNwbGl0KCcnKTtcclxuICAgICAgICAgICAgdG9waWMgPSAnJztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2NTsgaSsrKXtcclxuICAgICAgICAgICAgICAgIHRvcGljICs9IHRtcFtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b3BpYyArPSAnIC4uLidcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvdXJzZS5lbmREYXRlICE9IG51bGwgJiYgY291cnNlLmVuZERhdGUgPCBEYXRlLm5vdygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b3BpYyArICcgKCcgKyBNb21lbnQuaXNWYWxpZERhdGUoY291cnNlLmVuZERhdGUpICsgJyknO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG9waWM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEZ1bGxQYXRoIChzZWxlY3RhYmxlU2VjdGlvbjogSVNlbGVjdGFibGVTZWN0aW9uLCBtb2R1bGVzLCBzZWN0aW9ucykge1xyXG4gICAgICAgIGxldCBwYXJlbnRzUGF0aCA9ICcnO1xyXG4gICAgICAgIHRoaXMuZ2V0U2VjdGlvbnNQYXJlbnRzKHNlbGVjdGFibGVTZWN0aW9uLCBzZWN0aW9ucykuZm9yRWFjaCggc3RyID0+IHBhcmVudHNQYXRoICs9ICcgLyAnICsgc3RyKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGVCeUlkKHNlbGVjdGFibGVTZWN0aW9uLnNlY3Rpb24ubW9kdWxlSWQsIG1vZHVsZXMpLm5hbWUgKyBwYXJlbnRzUGF0aDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TW9kdWxlQnlJZChtb2R1bGVJZCwgbW9kdWxlcykge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVzLmZpbHRlcihtb2R1bGU9Pm1vZHVsZS5pZCA9PT0gbW9kdWxlSWQpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN0aW9uc1BhcmVudHMoc2VsZWN0YWJsZVNlY3Rpb246IElTZWxlY3RhYmxlU2VjdGlvbiwgc2VjdGlvbnMpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcbiAgICAgICAgIGlmIChzZWxlY3RhYmxlU2VjdGlvbi5wYXJlbnRJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnQgPSBzZWN0aW9ucy5maWx0ZXIoc2VjdGlvbiA9PiBzZWN0aW9uLmlkID09IHNlbGVjdGFibGVTZWN0aW9uLnBhcmVudElkKVswXTtcclxuICAgICAgICAgICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyZW50LnNlY3Rpb24ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZihwYXJlbnQucGFyZW50SWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlY3Rpb25zLmZpbHRlcihzZWN0aW9uID0+IHNlY3Rpb24uaWQgPT0gcGFyZW50LnBhcmVudElkKVswXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBwYXJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICByZXN1bHQucHVzaChzZWxlY3RhYmxlU2VjdGlvbi5zZWN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChzZWxlY3RhYmxlU2VjdGlvbi5zZWN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0UHVibGlzaGVkQ291cnNlU2VjdGlvbihzZWxlY3RhYmxlU2VjdGlvbjogSVNlbGVjdGFibGVTZWN0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RhYmxlU2VjdGlvbi5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnB1Ymxpc2hlZENvdXJzZVNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiBzZWN0aW9uLnNlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgICAgICAgICBzZWxlY3RhYmxlU2VjdGlvbi5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucHVibGlzaGVkQ291cnNlU2VsZWN0ZWRTZWN0aW9uID0gc2VsZWN0YWJsZVNlY3Rpb247XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0YWJsZVNlY3Rpb24uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wdWJsaXNoZWRDb3Vyc2VTZWxlY3RlZFNlY3Rpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0U291cmNlQ291cnNlU2VjdGlvbihzZWxlY3RhYmxlU2VjdGlvbjogSVNlbGVjdGFibGVTZWN0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RhYmxlU2VjdGlvbi5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNvdXJzZVNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiBzZWN0aW9uLnNlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgICAgICAgICBzZWxlY3RhYmxlU2VjdGlvbi5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ291cnNlU2VsZWN0ZWRTZWN0aW9uID0gc2VsZWN0YWJsZVNlY3Rpb247XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0YWJsZVNlY3Rpb24uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VDb3Vyc2VTZWxlY3RlZFNlY3Rpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWFrZVNlY3Rpb25zUGFpcigpOiB2b2lkIHtcclxuICAgICAgICBsZXQgc2VsZWN0YWJsZVBhaXI6IElTZWxlY3RhYmxlU2VjdGlvbnNQYWlyID0ge307XHJcbiAgICAgICAgc2VsZWN0YWJsZVBhaXIucHVibGlzaGVkQ291cnNlU2VjdGlvbiA9IHRoaXMucHVibGlzaGVkQ291cnNlU2VsZWN0ZWRTZWN0aW9uO1xyXG4gICAgICAgIHNlbGVjdGFibGVQYWlyLnNvdXJjZUNvdXJzZVNlY3Rpb24gPSB0aGlzLnNvdXJjZUNvdXJzZVNlbGVjdGVkU2VjdGlvbjtcclxuICAgICAgICBzZWxlY3RhYmxlUGFpci5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VjdGlvblBhaXJzLnB1c2goc2VsZWN0YWJsZVBhaXIpO1xyXG4gICAgICAgIHRoaXMuc2VjdGlvblBhaXJzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgaWYoYS5zb3VyY2VDb3Vyc2VTZWN0aW9uLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoIDwgYi5zb3VyY2VDb3Vyc2VTZWN0aW9uLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoYS5zb3VyY2VDb3Vyc2VTZWN0aW9uLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoID4gYi5zb3VyY2VDb3Vyc2VTZWN0aW9uLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgcHVibGlzaGVkU2VjdGlvbkluZGV4OiBudW1iZXIgPSB0aGlzLnB1Ymxpc2hlZENvdXJzZVNlY3Rpb25zLmluZGV4T2YodGhpcy5wdWJsaXNoZWRDb3Vyc2VTZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgIGlmIChwdWJsaXNoZWRTZWN0aW9uSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHVibGlzaGVkQ291cnNlU2VjdGlvbnMuc3BsaWNlKHB1Ymxpc2hlZFNlY3Rpb25JbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc291cmNlU2VjdGlvbkluZGV4OiBudW1iZXIgPSB0aGlzLnNvdXJjZUNvdXJzZVNlY3Rpb25zLmluZGV4T2YodGhpcy5zb3VyY2VDb3Vyc2VTZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgIGlmIChzb3VyY2VTZWN0aW9uSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ291cnNlU2VjdGlvbnMuc3BsaWNlKHNvdXJjZVNlY3Rpb25JbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnB1Ymxpc2hlZENvdXJzZVNlbGVjdGVkU2VjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VDb3Vyc2VTZWxlY3RlZFNlY3Rpb24gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RTZWN0aW9uc1BhaXIoc2VsZWN0YWJsZVBhaXI6IElTZWxlY3RhYmxlU2VjdGlvbnNQYWlyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RhYmxlUGFpci5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25QYWlycy5mb3JFYWNoKHBhaXIgPT4gcGFpci5zZWxlY3RlZCA9IGZhbHNlKTtcclxuICAgICAgICAgICAgc2VsZWN0YWJsZVBhaXIuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvblBhaXIgPSBzZWxlY3RhYmxlUGFpcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWxlY3RhYmxlUGFpci5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvblBhaXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlU2VjdGlvbnNQYWlyKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBwdWJsaXNoZWRDb3Vyc2VTZWN0aW9uOiBJU2VsZWN0YWJsZVNlY3Rpb24gPSBhbmd1bGFyLmNvcHkodGhpcy5zZWxlY3RlZFNlY3Rpb25QYWlyLnB1Ymxpc2hlZENvdXJzZVNlY3Rpb24pO1xyXG4gICAgICAgIGxldCBzb3VyY2VDb3Vyc2VTZWN0aW9uOiBJU2VsZWN0YWJsZVNlY3Rpb24gPSBhbmd1bGFyLmNvcHkodGhpcy5zZWxlY3RlZFNlY3Rpb25QYWlyLnNvdXJjZUNvdXJzZVNlY3Rpb24pO1xyXG5cclxuICAgICAgICBwdWJsaXNoZWRDb3Vyc2VTZWN0aW9uLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgc291cmNlQ291cnNlU2VjdGlvbi5zZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnB1Ymxpc2hlZENvdXJzZVNlY3Rpb25zLnB1c2gocHVibGlzaGVkQ291cnNlU2VjdGlvbik7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VDb3Vyc2VTZWN0aW9ucy5wdXNoKHNvdXJjZUNvdXJzZVNlY3Rpb24pO1xyXG4gICAgICAgIHRoaXMucHVibGlzaGVkQ291cnNlU2VjdGlvbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBpZihhLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoIDwgYi5zZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGEuc2VjdGlvbi5jb3Vyc2V3aWRlU29ydFBhdGggPiBiLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc291cmNlQ291cnNlU2VjdGlvbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBpZihhLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoIDwgYi5zZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGEuc2VjdGlvbi5jb3Vyc2V3aWRlU29ydFBhdGggPiBiLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgcGFpckluZGV4OiBudW1iZXIgPSB0aGlzLnNlY3Rpb25QYWlycy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRTZWN0aW9uUGFpcik7XHJcbiAgICAgICAgaWYgKHBhaXJJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uUGFpcnMuc3BsaWNlKHBhaXJJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvblBhaXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFB1Ymxpc2hlZENvdXJzZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0KHRoaXMucHVibGlzaGVkQ291cnNlSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5wdWJsaXNoZWRDb3Vyc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnB1Ymxpc2hlZENvdXJzZS5lbmREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShyZXN1bHQuZW5kRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucHVibGlzaGVkQ291cnNlLnN0YXJ0RGF0ZVRleHQgPSBNb21lbnQuaXNWYWxpZERhdGUocmVzdWx0LnN0YXJ0RGF0ZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0TW9kdWxlcyh0aGlzLnB1Ymxpc2hlZENvdXJzZUlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0LCB0aGlzLnB1Ymxpc2hlZENvdXJzZU1vZHVsZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wdWJsaXNoZWRDb3Vyc2VNb2R1bGVzLmZvckVhY2gobW9kdWxlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0TW9kdWxlU2VjdGlvbnModGhpcy5wdWJsaXNoZWRDb3Vyc2VJZCwgbW9kdWxlLmlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVibGlzaGVkQ291cnNlU2VjdGlvbnNNYXAuc2V0KG1vZHVsZS5pZCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goc2VjdGlvbkV4dCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0YWJsZVNlY3Rpb246IElTZWxlY3RhYmxlU2VjdGlvbiA9IGFuZ3VsYXIuY29weShzZWN0aW9uRXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGVTZWN0aW9uLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnB1Ymxpc2hlZENvdXJzZVNlY3Rpb25zLnB1c2goc2VsZWN0YWJsZVNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpPT50aGlzLnB1Ymxpc2hlZENvdXJzZVNlY3Rpb25zLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYS5zZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCA8IGIuc2VjdGlvbi5jb3Vyc2V3aWRlU29ydFBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoID4gYi5zZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkU291cmNlQ291cnNlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXQodGhpcy5zb3VyY2VDb3Vyc2VJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0LCB0aGlzLnNvdXJjZUNvdXJzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ291cnNlLmVuZERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKHJlc3VsdC5lbmREYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VDb3Vyc2Uuc3RhcnREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShyZXN1bHQuc3RhcnREYXRlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRNb2R1bGVzKHRoaXMuc291cmNlQ291cnNlSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMuc291cmNlQ291cnNlTW9kdWxlcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNvdXJzZU1vZHVsZXMuZm9yRWFjaChtb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRNb2R1bGVTZWN0aW9ucyh0aGlzLnNvdXJjZUNvdXJzZUlkLCBtb2R1bGUuaWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDb3Vyc2VTZWN0aW9uc01hcC5zZXQobW9kdWxlLmlkLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZm9yRWFjaChzZWN0aW9uRXh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3RhYmxlU2VjdGlvbjogSVNlbGVjdGFibGVTZWN0aW9uID0gYW5ndWxhci5jb3B5KHNlY3Rpb25FeHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZVNlY3Rpb24uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ291cnNlU2VjdGlvbnMucHVzaChzZWxlY3RhYmxlU2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUluaXRpYWxNYXBwaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwdWJsaXNoQ291cnNlKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBtYXBwZWRTZWN0aW9uUGFpcnM6IEFycmF5PElNYXBwZWRTZWN0aW9uc1BhaXI+ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uUGFpcnMuZm9yRWFjaChzZWN0aW9uc1BhaXIgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbWFwcGVkU2VjdGlvbnNQYWlyOiBJTWFwcGVkU2VjdGlvbnNQYWlyID0ge307XHJcbiAgICAgICAgICAgIG1hcHBlZFNlY3Rpb25zUGFpci5wdWJsaXNoU2VjdGlvbklkID0gc2VjdGlvbnNQYWlyLnB1Ymxpc2hlZENvdXJzZVNlY3Rpb24uaWQ7XHJcbiAgICAgICAgICAgIG1hcHBlZFNlY3Rpb25zUGFpci5zb3VyY2VTZWN0aW9uSWQgPSBzZWN0aW9uc1BhaXIuc291cmNlQ291cnNlU2VjdGlvbi5pZDtcclxuICAgICAgICAgICAgbWFwcGVkU2VjdGlvblBhaXJzLnB1c2gobWFwcGVkU2VjdGlvbnNQYWlyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1B1Ymxpc2hpbmdTdGFydGVkID0gdHJ1ZTtcclxuICAgICAgICBub3RpZmllci53YXJuaW5nKFwiUHVibGlzaGluZyBvZiB0aGUgY291cnNlIHN0YXJ0ZWQuIFB1Ymxpc2hlZCBjb3Vyc2UgcGFnZSB3aWxsIG9wZW4gYXV0b21hdGljYWxseSB3aGVuIHByb2Nlc3MgaXMgY29tcGxldGUuIERvIG5vdCBsZWF2ZSB0aGUgY3VycmVudCBwYWdlLlwiKTtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UucHVibGlzaENvdXJzZSh0aGlzLnB1Ymxpc2hlZENvdXJzZUlkLCB0aGlzLnNvdXJjZUNvdXJzZUlkLCBtYXBwZWRTZWN0aW9uUGFpcnMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIGNvdXJzZSB3YXMgc3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZFwiKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRzY29wZS5vblN1Y2Nlc3NDYWxsYmFjayAmJiBhbmd1bGFyLmlzRnVuY3Rpb24odGhpcy4kc2NvcGUub25TdWNjZXNzQ2FsbGJhY2spKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUub25TdWNjZXNzQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0NvdXJzZURldGFpbHMoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5pc1B1Ymxpc2hpbmdTdGFydGVkID0gZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVkaXJlY3RUb0NvdXJzZURldGFpbHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kZXRhaWxzVXJsKHRoaXMucHVibGlzaGVkQ291cnNlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbGN1bGF0ZUluaXRpYWxNYXBwaW5nKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBuZXdQdWJsaXNoZWRTZWN0aW9uczogQXJyYXk8SVNlbGVjdGFibGVTZWN0aW9uPiA9IFtdO1xyXG4gICAgICAgIHRoaXMucHVibGlzaGVkQ291cnNlU2VjdGlvbnMuZm9yRWFjaChwdWJsaXNoZWRTZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgbGV0IHNvdXJjZVNlY3Rpb25JbmRleDogbnVtYmVyID0gLTE7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zb3VyY2VDb3Vyc2VTZWN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ291cnNlU2VjdGlvbnNbaV0uc2VjdGlvbi5uYW1lID09PSBwdWJsaXNoZWRTZWN0aW9uLnNlY3Rpb24ubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuc291cmNlQ291cnNlU2VjdGlvbnNbaV0uc2VjdGlvbi50eXBlS2V5ID09IHB1Ymxpc2hlZFNlY3Rpb24uc2VjdGlvbi50eXBlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlU2VjdGlvbkluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZVNlY3Rpb25JbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGFibGVQYWlyOiBJU2VsZWN0YWJsZVNlY3Rpb25zUGFpciA9IHt9O1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZVBhaXIucHVibGlzaGVkQ291cnNlU2VjdGlvbiA9IHB1Ymxpc2hlZFNlY3Rpb247XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlUGFpci5zb3VyY2VDb3Vyc2VTZWN0aW9uID0gdGhpcy5zb3VyY2VDb3Vyc2VTZWN0aW9uc1tzb3VyY2VTZWN0aW9uSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZVBhaXIuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvblBhaXJzLnB1c2goc2VsZWN0YWJsZVBhaXIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uUGFpcnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGEuc291cmNlQ291cnNlU2VjdGlvbi5zZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCA8IGIuc291cmNlQ291cnNlU2VjdGlvbi5zZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGEuc291cmNlQ291cnNlU2VjdGlvbi5zZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCA+IGIuc291cmNlQ291cnNlU2VjdGlvbi5zZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDb3Vyc2VTZWN0aW9ucy5zcGxpY2Uoc291cmNlU2VjdGlvbkluZGV4LCAxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld1B1Ymxpc2hlZFNlY3Rpb25zLnB1c2gocHVibGlzaGVkU2VjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hlZENvdXJzZVNlY3Rpb25zID0gbmV3UHVibGlzaGVkU2VjdGlvbnM7XHJcblxyXG4gICAgICAgIHRoaXMucHVibGlzaGVkQ291cnNlU2VjdGlvbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBpZihhLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoIDwgYi5zZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGEuc2VjdGlvbi5jb3Vyc2V3aWRlU29ydFBhdGggPiBiLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc291cmNlQ291cnNlU2VjdGlvbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBpZihhLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoIDwgYi5zZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGEuc2VjdGlvbi5jb3Vyc2V3aWRlU29ydFBhdGggPiBiLnNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzQ291cnNlUHVibGlzaERpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzQ291cnNlUHVibGlzaERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0NvdXJzZVB1Ymxpc2hEaXJlY3RpdmVDb250cm9sbGVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNDb3Vyc2VQdWJsaXNoRGlyZWN0aXZlQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBwdWJsaXNoZWRDb3Vyc2VJZDogXCI9P3Zoc1B1Ymxpc2hlZENvdXJzZUlkXCIsXHJcbiAgICAgICAgICAgIG9uU3VjY2Vzc0NhbGxiYWNrOiBcIiY/dmhzT25TdWNjZXNzXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1jb3Vyc2UtcHVibGlzaC5odG1sXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblZoc0NvdXJzZVB1Ymxpc2hEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJQ291cnNlUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JQ291cnNlUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJQ291cnNlUHJvZ3Jlc3N9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JQ291cnNlUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuLi9jb3Vyc2VzL1Byb2dyZXNzU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZVByb2dyZXNzU3RhdHVzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvQ291cnNlUHJvZ3Jlc3NTdGF0dXNcIjtcclxuaW1wb3J0IHtDb3Vyc2VJTFRTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VJTFRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4vZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtDb25maXJtYXRpb25BcmdzfSBmcm9tIFwiLi9kaWFsb2cvQ29uZmlybWF0aW9uRGlhbG9nXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tQnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vYnJhbmRpbmcvQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlZE9iamVjdFR5cGV9IGZyb20gXCIuLi9SZWZlcmVuY2VkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge0lQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0fSBmcm9tIFwiLi4vZmluYW5jZXMvbW9kZWxzL0lQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0XCI7XHJcbmltcG9ydCB7UHVyY2hhc2VTZXJ2aWNlfSBmcm9tIFwiLi4vZmluYW5jZXMvUHVyY2hhc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi4vSVNlbGVjdGFibGVcIjtcclxuaW1wb3J0IHtQZXJzb25hbFNlcnZpY2V9IGZyb20gXCIuLi9wZXJzb25hbC9QZXJzb25hbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4vbW9kZWxzL0V2ZW50XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNDb3Vyc2VWaWV3VG9wVGFic0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIGNvdXJzZVByb2dyZXNzPzogSUNvdXJzZVByb2dyZXNzO1xyXG4gICAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgY291cnNlUGVybWlzc2lvbnM6IElDb3Vyc2VQZXJtaXNzaW9ucztcclxuICAgIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgdG9wTWVudUtleTogc3RyaW5nO1xyXG4gICAgZ29Ub0Z1bGxTY3JlZW5Nb2RlPzogKCkgPT4gdm9pZDtcclxuICAgIGNvdXJzZURldGFpbHNVcmw/OiAoKSA9PiBzdHJpbmc7XHJcbiAgICBlZGl0Q291cnNlVXJsPzogKCkgPT4gc3RyaW5nO1xyXG5cclxuICAgIGN1c3RvbUFjdGlvbnM/OiBJVG9wVGFiQ3VzdG9tQnV0dG9uW107XHJcblxyXG4gICAgdm0/OiBWaHNDb3Vyc2VWaWV3VG9wVGFic0NvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRvcFRhYkN1c3RvbUJ1dHRvbiB7XHJcbiAgICBrZXk/OiBzdHJpbmc7XHJcbiAgICBjb250ZW50Pzogc3RyaW5nO1xyXG4gICAgYWN0aW9uPzogKCkgPT4gdm9pZDtcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzQ291cnNlVmlld1RvcFRhYnNDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgQ09VUlNFX1RBQl9LRVk6IHN0cmluZyA9IFwiY291cnNlXCI7XHJcbiAgICBwdWJsaWMgSU5GT19UQUJfS0VZOiBzdHJpbmcgPSBcImluZm9cIjtcclxuICAgIHB1YmxpYyBQUk9HUkVTU19UQUJfS0VZOiBzdHJpbmcgPSBcInByb2dyZXNzXCI7XHJcbiAgICBwdWJsaWMgRElTQ1VTU0lPTl9UQUJfS0VZOiBzdHJpbmcgPSBcImRpc2N1c3Npb25cIjtcclxuICAgIHB1YmxpYyBFRElUX1RBQl9LRVk6IHN0cmluZyA9IFwiZWRpdFwiO1xyXG4gICAgcHVibGljIExFQVJORVJTX1RBQjogc3RyaW5nID0gXCJsZWFybmVyc1wiO1xyXG4gICAgcHVibGljIFBFUk1JU1NJT05TX0RFTEVHQVRJT05fVEFCX0tFWTogc3RyaW5nID0gXCJwZXJtaXNzaW9uc0RlbGVnYXRpb25cIjtcclxuICAgIHB1YmxpYyBTVVJWRVlTX1RBQl9LRVk6IHN0cmluZyA9IFwic3VydmV5c1wiO1xyXG4gICAgcHVibGljIElMVF9UQUJfS0VZOiBzdHJpbmcgPSBcImlsdFwiO1xyXG4gICAgcHVibGljIFdFQklOQVJTX1RBQl9LRVk6IHN0cmluZyA9IFwid2ViaW5hcnNcIjtcclxuXHJcbiAgICBwdWJsaWMgaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvdXJzZVByb2dyZXNzOiBJQ291cnNlUHJvZ3Jlc3M7XHJcbiAgICBwdWJsaWMgY291cnNlU3RhcnRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBhbnlXZWJpbmFyU2VjdGlvbnNFeGlzdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBhbnlJTFRTZWN0aW9uc0V4aXN0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgaXNBY3RpdmVDb3Vyc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNVc2VyQW5JbnN0cnVjdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzVXNlckFUZWFjaGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzVXNlckFTeXN0ZW1BZG1pbmlzdHJhdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzVXNlckFuQWRtaW5pc3RyYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBjb3Vyc2VCdXNpbmVzc1VuaXQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgdXNlcjogSVVzZXJJbmZvO1xyXG4gICAgcHJpdmF0ZSBjb3Vyc2U6IElDb3Vyc2UgPSB7fTtcclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VDZXJ0aWZpY2F0ZXM6IEFycmF5PElTZWxlY3RhYmxlPiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUHJvZ3Jlc3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlSUxUU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFB1cmNoYXNlU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzQ291cnNlVmlld1RvcFRhYnNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHJvZ3Jlc3NTZXJ2aWNlOiBQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZUlMVFNlcnZpY2U6IENvdXJzZUlMVFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHVyY2hhc2VTZXJ2aWNlOiBQdXJjaGFzZVNlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZUlkID0gTnVtYmVyKCRyb3V0ZVBhcmFtc1tDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTV0pO1xyXG5cclxuICAgICAgICB0aGlzLmdldENvdXJzZVByb2dyZXNzKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkQ291cnNlQ2VydGlmaWNhdGVzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0QW55V2ViaW5hclNlY3Rpb25zRXhpc3RzKCk7XHJcbiAgICAgICAgdGhpcy5nZXRBbnlJTFRTZWN0aW9uc0V4aXN0cygpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q291cnNlKCk7XHJcblxyXG4gICAgICAgIGF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAgICAgLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXIgPSB1O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldCh0aGlzLiRzY29wZS5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4oKGNvdXJzZTogSUNvdXJzZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuY291cnNlUHJvZ3Jlc3Muc3RhdHVzID0gY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKEV2ZW50LkNPVVJTRV9QUk9HUkVTU19SRUNBTENVTEFURUQsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDb3Vyc2VQcm9ncmVzcygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmlzVXNlckluc3RydWN0b3IodGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogYm9vbGVhbikgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VyQW5JbnN0cnVjdG9yID0gcmVzdWx0KTtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmlzVXNlclJlc3BvbnNpYmxlVGVhY2hlcih0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBib29sZWFuKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1VzZXJBVGVhY2hlciA9IHJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5pc1VzZXJTeXN0ZW1BZG1pbmlzdHJhdG9yKClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogYm9vbGVhbikgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VyQVN5c3RlbUFkbWluaXN0cmF0b3IgPSByZXN1bHQpO1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuaXNVc2VyQWRtaW5pc3RyYXRvcih0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBib29sZWFuKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1VzZXJBbkFkbWluaXN0cmF0b3IgPSByZXN1bHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q291cnNlUHJvZ3Jlc3MoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzICE9PSBudWxsICYmIHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzcyA9IHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzO1xyXG4gICAgICAgICAgICB0aGlzLnNldENvdXJzZVN0YXJ0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDb3Vyc2VQcm9ncmVzcygpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb3Vyc2VTdGFydGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNDb3Vyc2VWaWV3VG9wVGFic0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdvVG9GdWxsU2NyZWVuTW9kZSgpIHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUuZ29Ub0Z1bGxTY3JlZW5Nb2RlICE9PSBudWxsICYmIHRoaXMuJHNjb3BlLmdvVG9GdWxsU2NyZWVuTW9kZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLmdvVG9GdWxsU2NyZWVuTW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb3BNZW51QWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS50b3BNZW51S2V5ID09IHRvcE1lbnVLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2hvd1Byb2dyZXNzVGFiKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5pc0NvdXJzZVByb2dyZXNzU3RhcnRlZCgpIHx8IHRoaXMuJHNjb3BlLmNvdXJzZVBlcm1pc3Npb25zKVxyXG4gICAgICAgICAgICAmJiB0aGlzLiRzY29wZS5pc0F1dGhlbnRpY2F0ZWQgfHwgdGhpcy4kc2NvcGUudG9wTWVudUtleSA9PSB0aGlzLlBST0dSRVNTX1RBQl9LRVk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2hvd0xlYXJuaW5nU2Vzc2lvbnNUYWIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNjb3BlLnRvcE1lbnVLZXkgPT0gdGhpcy5JTFRfVEFCX0tFWVxyXG4gICAgICAgICAgICB8fCB0aGlzLiRzY29wZS50b3BNZW51S2V5ID09IHRoaXMuV0VCSU5BUlNfVEFCX0tFWVxyXG4gICAgICAgICAgICB8fCAodGhpcy4kc2NvcGUuaXNBdXRoZW50aWNhdGVkICYmIHRoaXMuaXNVc2VyQVRlYWNoZXIgfHwgdGhpcy4kc2NvcGUuaXNBdXRoZW50aWNhdGVkICYmIHRoaXMuaXNVc2VyQW5JbnN0cnVjdG9yIHx8IHRoaXMuJHNjb3BlLmlzQXV0aGVudGljYXRlZCAmJiB0aGlzLmlzVXNlckFTeXN0ZW1BZG1pbmlzdHJhdG9yIHx8IHRoaXMuJHNjb3BlLmlzQXV0aGVudGljYXRlZCAmJiB0aGlzLmlzVXNlckFuQWRtaW5pc3RyYXRvcilcclxuICAgICAgICAgICAgJiYgKHRoaXMuYW55V2ViaW5hclNlY3Rpb25zRXhpc3RzIHx8IHRoaXMuYW55SUxUU2VjdGlvbnNFeGlzdHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1Nob3dTdXJ2ZXlSZXN1bHRzVGFiKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5pc0F1dGhlbnRpY2F0ZWQgJiYgKHRoaXMuJHNjb3BlLnN5c3RlbVBlcm1pc3Npb25zICYmIHRoaXMuJHNjb3BlLnN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUNvdXJzZXNBdHRlbmRlZXNBbnlcclxuICAgICAgICAgICAgfHwgdGhpcy4kc2NvcGUuY291cnNlUGVybWlzc2lvbnMgJiYgdGhpcy4kc2NvcGUuY291cnNlUGVybWlzc2lvbnMudmlld090aGVyVXNlcnNQcm9ncmVzcylcclxuICAgICAgICAgICAgfHwgdGhpcy4kc2NvcGUudG9wTWVudUtleSA9PSB0aGlzLlNVUlZFWVNfVEFCX0tFWTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG93RGlzY3Vzc2lvbnNUYWIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNjb3BlLmNvdXJzZVBlcm1pc3Npb25zICYmIHRoaXMuJHNjb3BlLmNvdXJzZVBlcm1pc3Npb25zLmFjY2Vzc1RvRGlzY3Vzc2lvbnNcclxuICAgICAgICAgICAgJiYgKHRoaXMuJHNjb3BlLmNvdXJzZVBlcm1pc3Npb25zLmF0dGVuZGVlTWFuYWdlbWVudCB8fCB0aGlzLmNvdXJzZVN0YXJ0ZWQgfHwgdGhpcy4kc2NvcGUuY291cnNlUGVybWlzc2lvbnMudmlldylcclxuICAgICAgICAgICAgfHwgdGhpcy4kc2NvcGUudG9wTWVudUtleSA9PSB0aGlzLkRJU0NVU1NJT05fVEFCX0tFWTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG93UmVtb3ZlVGFiKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5zeXN0ZW1QZXJtaXNzaW9ucyAmJiB0aGlzLiRzY29wZS5zeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCAmJiB0aGlzLmlzQWN0aXZlQ291cnNlXHJcbiAgICAgICAgICAgICYmICghIXRoaXMuY291cnNlQnVzaW5lc3NVbml0IHx8ICghIXRoaXMudXNlciAmJiB0aGlzLnVzZXIuYWxsQnVzaW5lc3NVbml0cykpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VEZXRhaWxzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLmNvdXJzZURldGFpbHNVcmwgIT0gbnVsbCAmJiB0aGlzLiRzY29wZS5jb3Vyc2VEZXRhaWxzVXJsICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUuY291cnNlRGV0YWlsc1VybCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlZGl0Q291cnNlVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLmVkaXRDb3Vyc2VVcmwgIT0gbnVsbCAmJiB0aGlzLiRzY29wZS5lZGl0Q291cnNlVXJsICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUuZWRpdENvdXJzZVVybCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VzUm91dGVyLnVwZGF0ZVVybCh0aGlzLiRzY29wZS5jb3Vyc2VJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxlYXJuaW5nU2Vzc2lvbnNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUudG9wTWVudUtleSA9PSB0aGlzLklMVF9UQUJfS0VZKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZXNSb3V0ZXIuaWx0VXJsKHRoaXMuJHNjb3BlLmNvdXJzZUlkKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHNjb3BlLnRvcE1lbnVLZXkgPT0gdGhpcy5XRUJJTkFSU19UQUJfS0VZKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZXNSb3V0ZXIud2ViaW5hcnNVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hbnlJTFRTZWN0aW9uc0V4aXN0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VzUm91dGVyLmlsdFVybCh0aGlzLiRzY29wZS5jb3Vyc2VJZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci53ZWJpbmFyc1VybCh0aGlzLiRzY29wZS5jb3Vyc2VJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvdXJzZVByb2dyZXNzKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRDb3Vyc2VQcm9ncmVzcyh0aGlzLiRzY29wZS5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3MgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDb3Vyc2VDZXJ0aWZpY2F0ZXMoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldENvdXJzZVN0YXJ0ZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTdGFydGVkID0gdGhpcy5jb3Vyc2VQcm9ncmVzcyAmJiB0aGlzLmNvdXJzZVByb2dyZXNzLnN0YXR1cyAhPSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5OT1RfU1RBUlRFRF07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRBbnlXZWJpbmFyU2VjdGlvbnNFeGlzdHMoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UuZ2V0QW55U2VjdGlvbldlYmluYXIodGhpcy4kc2NvcGUuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFueVdlYmluYXJTZWN0aW9uc0V4aXN0cyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRBbnlJTFRTZWN0aW9uc0V4aXN0cygpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuZ2V0QW55SUxUU2VjdGlvbnNFeGlzdHModGhpcy4kc2NvcGUuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFueUlMVFNlY3Rpb25zRXhpc3RzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzQ291cnNlUHJvZ3Jlc3NTdGFydGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5jb3Vyc2VQcm9ncmVzc1xyXG4gICAgICAgICAgICA/IHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzLnN0YXR1cyAhPSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5OT1RfU1RBUlRFRF1cclxuICAgICAgICAgICAgOiB0aGlzLmNvdXJzZVN0YXJ0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZUNvdXJzZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnB1cmNoYXNlU2VydmljZS5nZXRSZWZlcmVuY2VkT2JqZWN0UHJvZHVjdHNMaXN0KHRoaXMuJHNjb3BlLmNvdXJzZUlkLCBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0VdKS50aGVuKHByb2R1Y3RzID0+IHtcclxuICAgICAgICAgICAgaWYgKHByb2R1Y3RzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0UmVsYXRlZExlYXJuaW5nUGF0aHModGhpcy4kc2NvcGUuY291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aFtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkaWFsb2dNZXNzYWdlOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkaWFsb2dUaXRsZTogc3RyaW5nID0gXCJEZWxldGUgY291cnNlXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFsZWFybmluZ1BhdGggJiYgbGVhcm5pbmdQYXRoLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ01lc3NhZ2UgPSBcIjxwPlRoZSBjb3Vyc2UgY2Fubm90IGJlIHJlbW92ZWQuIEl0IGlzIHVzZWQgaW4gdGhlIGxlYXJuaW5nIHBhdGhzOjwvcD5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVhcm5pbmdQYXRoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdXJzZSA9IGxlYXJuaW5nUGF0aFtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dNZXNzYWdlICs9IFwiPHA+XCIgKyAoaSArIDEpICsgXCIuIFwiICsgY291cnNlLm5hbWUgKyBcIjwvcD5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKGRpYWxvZ01lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGlhbG9nVGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVW5jb21wbGV0ZWRVc2Vyc0NvdXJzZShkaWFsb2dUaXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRGdW5jOiAocHJvZHVjdDogSVByb2R1Y3RUb1JlZmVyZW5jZWRPYmplY3QsIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyA9IChwcm9kdWN0OiBJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdCwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIjxwPlwiICsgKGluZGV4ICsgMSkgKyBcIi4gXCIgKyBwcm9kdWN0Lm5hbWUgKyBcIi4gXCIgKyAocHJvZHVjdC5kZXNjcmlwdGlvbiA9PSBudWxsID8gXCJcIiA6IHByb2R1Y3QuZGVzY3JpcHRpb24pICsgXCI8L3A+XCI7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZyA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCI8cD5UaGUgY291cnNlIGNhbm5vdCBiZSByZW1vdmVkLiBJdCBjb250YWlucyB0aGUgZm9sbG93aW5nIHByb2R1Y3RzOjpwcm9kdWN0czwvcD5cIilcclxuICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpwcm9kdWN0c1wiLCB0aGlzLmdldEl0ZW1zRm9ybWF0dGVkU3RyaW5nPElQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0Pihwcm9kdWN0cywgZm9ybWF0dGVkRnVuYywgXCJcXG5cIikpXHJcbiAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShtZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiRGVsZXRlIGNvdXJzZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRJdGVtc0Zvcm1hdHRlZFN0cmluZzxUPihpdGVtczogQXJyYXk8VD4sIGZvcm1hdHRlZEZ1bmM6IChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBmb3JtYXR0ZWRGdW5jKGl0ZW0sIGluZGV4KSArIHNlcGFyYXRvcjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tVbmNvbXBsZXRlZFVzZXJzQ291cnNlKGRpYWxvZ1RpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRTdGFydGVkQ291cnNlUHJvZ3Jlc3NVc2Vyc0J5Q291cnNlKHRoaXMuJHNjb3BlLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbigoY291bnRVc2Vyc1VuY29tcGxldGVkQ291cnNlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkaWFsb2dNZXNzYWdlOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9uczogQ29uZmlybWF0aW9uQXJncztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISFjb3VudFVzZXJzVW5jb21wbGV0ZWRDb3Vyc2UgJiYgY291bnRVc2Vyc1VuY29tcGxldGVkQ291cnNlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ01lc3NhZ2UgPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiVGhlcmUgYXJlIDpjb3VudFVzZXJzVW5jb21wbGV0ZWRDb3Vyc2UgdXNlcnMgd2hvIGhhdmUgc3RhcnRlZCBjb3Vyc2UgYW5kIHdpbGwgYmUgdW5hYmxlIHRvIGNvbXBsZXRlIGl0LiBZb3UgY2FuIGNoZWNrIGxpc3Qgb2YgdXNlcnMgb24gUHJvZ3Jlc3MgdGFiLiBSZW1vdmUgY291cnNlP1wiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpjb3VudFVzZXJzVW5jb21wbGV0ZWRDb3Vyc2VcIiwgY291bnRVc2Vyc1VuY29tcGxldGVkQ291cnNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGlhbG9nVGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiWWVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nTWVzc2FnZSA9IFwiVGhpcyBjb3Vyc2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gQ29udGludWU/XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRpYWxvZ1RpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oZGlhbG9nTWVzc2FnZSwgb3B0aW9ucykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oJ0RvIHlvdSB3YW50IHRvIHJlbW92ZSBwZXJtaXNzaW9ucz8nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnUmVtb3ZlIHBlcm1pc3Npb25zJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogJ1llcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogJ05vJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5yZW1vdmVQZXJtaXNzaW9uQXNzaWdubWVudHModGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmluYWN0aXZlQ291cnNlKHRoaXMuJHNjb3BlLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBjb3Vyc2UgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5pbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuaW5hY3RpdmVDb3Vyc2UodGhpcy4kc2NvcGUuY291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBjb3Vyc2UgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmluZGV4VXJsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb3Vyc2UoKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldCh0aGlzLiRzY29wZS5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4oKGNvdXJzZTogSUNvdXJzZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZUNvdXJzZSA9IGNvdXJzZS5hY3RpdmU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUJ1c2luZXNzVW5pdCA9IGNvdXJzZS5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlID0gYW5ndWxhci5jb3B5KGNvdXJzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFjb3Vyc2UuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJHNjb3BlLnN5c3RlbVBlcm1pc3Npb25zICYmICF0aGlzLiRzY29wZS5zeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAhIXRoaXMuJHNjb3BlLnN5c3RlbVBlcm1pc3Npb25zLnZpZXdBbnlMZWFybmluZ09iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgY291cnNlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmluZGV4VXJsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCB8fCBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW55TGVhcm5pbmdPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlQ2VydGlmaWNhdGVzKCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlUHJvZ3Jlc3MgJiYgdGhpcy5jb3Vyc2VQcm9ncmVzcy5pZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFVzZXJDZXJ0aWZpY2F0ZXModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2VQcm9ncmVzcy5pZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VDZXJ0aWZpY2F0ZXMuc3BsaWNlKDApO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VDZXJ0aWZpY2F0ZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBjLmNlcnRpZmljYXRlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGMub2JqZWN0TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRDZXJ0aWZpY2F0ZXMoKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VDZXJ0aWZpY2F0ZXMuZm9yRWFjaChjID0+XHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uYWxTZXJ2aWNlLmRvd25sb2FkQ2VydGlmaWNhdGUoYy5pZCkudGhlbihyZXN1bHQgPT4gdGhpcy4kd2luZG93Lm9wZW4ocmVzdWx0KSkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzQ291cnNlVmlld1RvcFRhYnNEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc0NvdXJzZVZpZXdUb3BUYWJzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzQ291cnNlVmlld1RvcFRhYnNDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0NvdXJzZVZpZXdUb3BUYWJzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBjb3Vyc2VJZDogXCI9dmhzQ291cnNlSWRcIixcclxuICAgICAgICAgICAgY291cnNlUHJvZ3Jlc3M6IFwiPT92aHNDb3Vyc2VQcm9ncmVzc1wiLFxyXG4gICAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IFwiPXZoc0lzQXV0aGVudGljYXRlZFwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VQZXJtaXNzaW9uczogXCI9dmhzQ291cnNlUGVybWlzc2lvbnNcIixcclxuICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnM6IFwiPXZoc1N5c3RlbVBlcm1pc3Npb25zXCIsXHJcbiAgICAgICAgICAgIHRvcE1lbnVLZXk6IFwiPXZoc1RvcE1lbnVLZXlcIixcclxuICAgICAgICAgICAgZ29Ub0Z1bGxTY3JlZW5Nb2RlOiBcIj0/dmhzR29Ub0Z1bGxTY3JlZW5Nb2RlXCIsXHJcbiAgICAgICAgICAgIGNvdXJzZURldGFpbHNVcmw6IFwiPT92aHNDb3Vyc2VEZXRhaWxzVXJsXCIsXHJcbiAgICAgICAgICAgIGVkaXRDb3Vyc2VVcmw6IFwiPT92aHNFZGl0Q291cnNlVXJsXCIsXHJcbiAgICAgICAgICAgIGN1c3RvbUFjdGlvbnM6IFwiPT92aHNDdXN0b21BY3Rpb25zXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1jb3Vyc2Utdmlldy10b3AtdGFicy5odG1sXCIpLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc0NvdXJzZVZpZXdUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ3JlZGl0QXNzaWdubWVudH0gZnJvbSBcIi4uL2NyZWRpdHMvbW9kZWxzL0lDcmVkaXRBc3NpZ25tZW50XCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlRW50aXRpZXNQYXJhbXN9IGZyb20gXCIuLi9yZWZlcmVuY2UvbW9kZWxzL0lSZWZlcmVuY2VFbnRpdGllc1BhcmFtc1wiO1xyXG5pbXBvcnQge1JlZmVyZW5jZVNlcnZpY2V9IGZyb20gXCIuLi9yZWZlcmVuY2UvUmVmZXJlbmNlU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5fSBmcm9tIFwiLi4vcmVmZXJlbmNlL21vZGVscy9JU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eVwiO1xyXG5pbXBvcnQgSVFTZXJ2aWNlID0gYW5ndWxhci5JUVNlcnZpY2U7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDcmVkaXRBc3NpZ25tZW50RXh0ZW5kZWQgZXh0ZW5kcyBJQ3JlZGl0QXNzaWdubWVudCB7XHJcbiAgICBpc0VkaXRpbmc/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNDcmVkaXRBc3NpZ25tZW50RGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBlZHVjYXRpb25JdGVtSWQ6IG51bWJlcjtcclxuICAgIGVkdWNhdGlvbkl0ZW1UeXBlOiBzdHJpbmc7XHJcbiAgICBlZHVjYXRpb25JdGVtQnVzaW5lc3NVbml0SWQ/OiBudW1iZXI7XHJcbiAgICBlZHVjYXRpb25JdGVtQ3JlZGl0czogSUNyZWRpdEFzc2lnbm1lbnRbXTtcclxuICAgIGN1cnJlbnRVc2VyQnVzaW5lc3NVbml0SWRzPzogQXJyYXk8bnVtYmVyPjtcclxuICAgIG9uQ2hhbmdlQ2FsbGJhY2s/OiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIHZtPzogVmhzQ3JlZGl0QXNzaWdubWVudENvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNDcmVkaXRBc3NpZ25tZW50Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEVYUElSRV9JTl9EQVlTX01JTl9WQUxVRSA9IDE7XHJcbiAgICBwdWJsaWMgc3RhdGljIEVYUElSRV9JTl9EQVlTX01BWF9WQUxVRSA9IDEwMDAwMDA7XHJcbiAgICBwdWJsaWMgc3RhdGljIENSRURJVF9NQVhfVkFMVUUgPSA5OTkuOTk7XHJcbiAgICBwdWJsaWMgc3RhdGljIENSRURJVF9NSU5fVkFMVUUgPSAwO1xyXG4gICAgcHVibGljIGF2YWlsYWJsZUNyZWRpdFR5cGVzOiBJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eVtdID0gW107XHJcbiAgICBwdWJsaWMgbmV3QXNzaWdubWVudDogSUNyZWRpdEFzc2lnbm1lbnQgPSB7XHJcbiAgICAgICAgZXhwaXJlSW5EYXlzOiBudWxsXHJcbiAgICB9O1xyXG4gICAgcHVibGljIGxvYWRSZWZlcmVuY2VFbnRpdGllc1Byb21pc2U6IGFuZ3VsYXIuSVByb21pc2U8YW55PjtcclxuICAgIHB1YmxpYyBlZGl0aW5nQXNzaWdubWVudHM6IE1hcDxudW1iZXIsIElDcmVkaXRBc3NpZ25tZW50RXh0ZW5kZWQ+ID0gbmV3IE1hcDxudW1iZXIsIElDcmVkaXRBc3NpZ25tZW50RXh0ZW5kZWQ+KCk7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBSZWZlcmVuY2VTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljICRzY29wZTogSVZoc0NyZWRpdEFzc2lnbm1lbnREaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkcTogSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHJlZmVyZW5jZVNlcnZpY2U6IFJlZmVyZW5jZVNlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRSZWZlcmVuY2VFbnRpdGllc1Byb21pc2UgPSB0aGlzLmxvYWRSZWZlcmVuY2VFbnRpdGllcygpXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMubG9hZFJlZmVyZW5jZUVudGl0aWVzUHJvbWlzZSA9IG51bGwpO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2hHcm91cChbXHJcbiAgICAgICAgICAgIFwiZWR1Y2F0aW9uSXRlbUlkXCIsXHJcbiAgICAgICAgICAgIFwiZWR1Y2F0aW9uSXRlbVR5cGVcIixcclxuICAgICAgICAgICAgXCJlZHVjYXRpb25JdGVtQ3JlZGl0c1wiLFxyXG4gICAgICAgICAgICBcImVkdWNhdGlvbkl0ZW1CdXNpbmVzc1VuaXRJZFwiXHJcbiAgICAgICAgXSwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgPT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWVbMF0gIT0gb2xkVmFsdWVbMF0gLyplZHVjYXRpb25JdGVtSWQqL1xyXG4gICAgICAgICAgICAgICAgfHwgbmV3VmFsdWVbMV0gIT0gb2xkVmFsdWVbMV0gLyplZHVjYXRpb25JdGVtVHlwZSovKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0Fzc2lnbm1lbnQgPSB7ZXhwaXJlSW5EYXlzOiBudWxsfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5uZXdBc3NpZ25tZW50ID0ge2V4cGlyZUluRGF5czogbnVsbH07XHJcbiAgICAgICAgICAgIHRoaXMuJHEud2hlbih0aGlzLmxvYWRSZWZlcmVuY2VFbnRpdGllc1Byb21pc2UpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVmZXJlbmNlRW50aXRpZXNQcm9taXNlID0gdGhpcy5sb2FkUmVmZXJlbmNlRW50aXRpZXMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRSZWZlcmVuY2VFbnRpdGllc1Byb21pc2UgPSBudWxsKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkUmVmZXJlbmNlRW50aXRpZXMoKTogYW5ndWxhci5JUHJvbWlzZTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlU2VydmljZS5nZXRBY3RpdmVSZWZlcmVuY2VFbnRpdGllc0ZvclNlbGVjdG9yKFwiY3JlZGl0VHlwZXNcIixcclxuICAgICAgICAgICAgbmV3IFJlZmVyZW5jZUVudGl0aWVzUGFyYW1zKHVuZGVmaW5lZCwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1CdXNpbmVzc1VuaXRJZCxcclxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCksXHJcbiAgICAgICAgICAgIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKGNyZWRpdFR5cGVzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUNyZWRpdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ3JlZGl0cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGFscmVhZHlVc2VkQ3JlZGl0VHlwZUlkcyA9IHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DcmVkaXRzLm1hcChpID0+IGkuY3JlZGl0VHlwZUlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ3JlZGl0VHlwZXMgPSBjcmVkaXRUeXBlcy5maWx0ZXIoaSA9PiBhbHJlYWR5VXNlZENyZWRpdFR5cGVJZHMuaW5kZXhPZihpLmlkKSA9PSAtMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNyZWRpdFR5cGVzSWRzID0gY3JlZGl0VHlwZXMubWFwKGN0ID0+IGN0LmlkKTtcclxuICAgICAgICAgICAgICAgIGxldCBjcmVkaXRzVG9EZWxldGUgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DcmVkaXRzLmZvckVhY2goKGljKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWRpdFR5cGVzSWRzLmluZGV4T2YoaWMuY3JlZGl0VHlwZUlkKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlZGl0c1RvRGVsZXRlLnB1c2goaWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY3JlZGl0c1RvRGVsZXRlLmZvckVhY2goY3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DcmVkaXRzLnNwbGljZSh0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ3JlZGl0cy5pbmRleE9mKGN0KSwgMSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjcmVkaXRUeXBlcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRDcmVkaXRBc3NpZ25tZW50KGNyZWRpdEFzc2lnbm1lbnQ6IElDcmVkaXRBc3NpZ25tZW50RXh0ZW5kZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY3JlZGl0QXNzaWdubWVudC5pc0VkaXRpbmcpIHtcclxuICAgICAgICAgICAgY3JlZGl0QXNzaWdubWVudC5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy9zYXZlIGNoYW5nZXNcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUNyZWRpdHMubWFwKGEgPT4gYS5pZCkuaW5kZXhPZihjcmVkaXRBc3NpZ25tZW50LmlkKTtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUNyZWRpdHNbaW5kZXhdID0gdGhpcy5lZGl0aW5nQXNzaWdubWVudHMuZ2V0KGNyZWRpdEFzc2lnbm1lbnQuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdBc3NpZ25tZW50cy5kZWxldGUoY3JlZGl0QXNzaWdubWVudC5pZCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiRzY29wZS5vbkNoYW5nZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5vbkNoYW5nZUNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdBc3NpZ25tZW50cy5zZXQoY3JlZGl0QXNzaWdubWVudC5pZCwgYW5ndWxhci5jb3B5KGNyZWRpdEFzc2lnbm1lbnQpKTtcclxuICAgICAgICAgICAgY3JlZGl0QXNzaWdubWVudC5pc0VkaXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENyZWRpdEFzc2lnbm1lbnQoY3JlZGl0QXNzaWdubWVudDogSUNyZWRpdEFzc2lnbm1lbnRFeHRlbmRlZCk6IElDcmVkaXRBc3NpZ25tZW50RXh0ZW5kZWQge1xyXG4gICAgICAgIGlmICghY3JlZGl0QXNzaWdubWVudC5pc0VkaXRpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWRpdEFzc2lnbm1lbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdGluZ0Fzc2lnbm1lbnRzLmdldChjcmVkaXRBc3NpZ25tZW50LmlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlQ3JlZGl0RnJvbUVkdWNhdGlvbkl0ZW0oY3JlZGl0QXNzaWdubWVudDogSUNyZWRpdEFzc2lnbm1lbnRFeHRlbmRlZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ3JlZGl0VHlwZXMucHVzaCh7XHJcbiAgICAgICAgICAgIGlkOiBjcmVkaXRBc3NpZ25tZW50LmNyZWRpdFR5cGVJZCxcclxuICAgICAgICAgICAgbmFtZTogY3JlZGl0QXNzaWdubWVudC5jcmVkaXRUeXBlTmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBhc3NpZ25tZW50SW5kZXggPSB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtQ3JlZGl0c1xyXG4gICAgICAgICAgICAubWFwKGNhID0+IGNhLmNyZWRpdFR5cGVJZClcclxuICAgICAgICAgICAgLmluZGV4T2YoY3JlZGl0QXNzaWdubWVudC5jcmVkaXRUeXBlSWQpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLmVkdWNhdGlvbkl0ZW1DcmVkaXRzLnNwbGljZShhc3NpZ25tZW50SW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ3JlZGl0VHlwZXMuc29ydCh0aGlzLmNvbXBhcmVDcmVkaXRUeXBlRm4pO1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5vbkNoYW5nZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm9uQ2hhbmdlQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRGlzYWJsZWRBZGRpbmdDcmVkaXRUb0VkdWNhdGlvbkl0ZW0oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm5ld0Fzc2lnbm1lbnQuY3JlZGl0VHlwZUlkIHx8ICF0aGlzLmlzQ3JlZGl0VmFsdWVWYWxpZCh0aGlzLm5ld0Fzc2lnbm1lbnQpXHJcbiAgICAgICAgfHwgIXRoaXMuaXNFeHBpcmF0aW9uRGF0ZVZhbGlkKHRoaXMubmV3QXNzaWdubWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhZmVBZGRDcmVkaXRUb0VkdWNhdGlvbkl0ZW0oKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuaXNEaXNhYmxlZEFkZGluZ0NyZWRpdFRvRWR1Y2F0aW9uSXRlbSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkQ3JlZGl0VG9FZHVjYXRpb25JdGVtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRDcmVkaXRUb0VkdWNhdGlvbkl0ZW0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuZWR1Y2F0aW9uSXRlbUNyZWRpdHMucHVzaCh7XHJcbiAgICAgICAgICAgIHJlZmVyZW5jZWRPYmplY3RUeXBlOiB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtVHlwZSxcclxuICAgICAgICAgICAgcmVmZXJlbmNlZE9iamVjdElkOiB0aGlzLiRzY29wZS5lZHVjYXRpb25JdGVtSWQsXHJcbiAgICAgICAgICAgIGNyZWRpdFR5cGVJZDogdGhpcy5uZXdBc3NpZ25tZW50LmNyZWRpdFR5cGVJZCxcclxuICAgICAgICAgICAgY3JlZGl0VHlwZU5hbWU6IHRoaXMuYXZhaWxhYmxlQ3JlZGl0VHlwZXMuZmlsdGVyKGkgPT4gaS5pZCA9PT0gdGhpcy5uZXdBc3NpZ25tZW50LmNyZWRpdFR5cGVJZCkucG9wKCkubmFtZSxcclxuICAgICAgICAgICAgY3JlZGl0OiB0aGlzLm5ld0Fzc2lnbm1lbnQuY3JlZGl0LFxyXG4gICAgICAgICAgICBleHBpcmVJbkRheXM6IHRoaXMubmV3QXNzaWdubWVudC5leHBpcmVJbkRheXNcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgYXZhaWxhYmxlSW5kZXggPSB0aGlzLmF2YWlsYWJsZUNyZWRpdFR5cGVzLm1hcChpID0+IGkuaWQpLmluZGV4T2YodGhpcy5uZXdBc3NpZ25tZW50LmNyZWRpdFR5cGVJZCk7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVDcmVkaXRUeXBlcy5zcGxpY2UoYXZhaWxhYmxlSW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMubmV3QXNzaWdubWVudCA9IHtcclxuICAgICAgICAgICAgZXhwaXJlSW5EYXlzOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUub25DaGFuZ2VDYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5vbkNoYW5nZUNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tcGFyZUNyZWRpdFR5cGVGbiA9IChmaXJzdDogSVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHksIHNlY29uZDogSVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHkpID0+IHtcclxuICAgICAgICBpZiAoZmlyc3QubmFtZSA+IHNlY29uZC5uYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3QubmFtZSA8IHNlY29uZC5uYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBpc0NyZWRpdFZhbHVlVmFsaWQoYXNzaWdubWVudDogSUNyZWRpdEFzc2lnbm1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0NyZWRpdFZhbHVlR0VNaW4oYXNzaWdubWVudCkgJiYgdGhpcy5pc0NyZWRpdFZhbHVlTEVNYXgoYXNzaWdubWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ3JlZGl0VmFsdWVHRU1pbihhc3NpZ25tZW50OiBJQ3JlZGl0QXNzaWdubWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBhbmd1bGFyLmlzTnVtYmVyKGFzc2lnbm1lbnQuY3JlZGl0KVxyXG4gICAgICAgICAgICAmJiBhc3NpZ25tZW50LmNyZWRpdCA+PSBWaHNDcmVkaXRBc3NpZ25tZW50Q29udHJvbGxlci5DUkVESVRfTUlOX1ZBTFVFXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ3JlZGl0VmFsdWVMRU1heChhc3NpZ25tZW50OiBJQ3JlZGl0QXNzaWdubWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBhbmd1bGFyLmlzTnVtYmVyKGFzc2lnbm1lbnQuY3JlZGl0KVxyXG4gICAgICAgICAgICAmJiBhc3NpZ25tZW50LmNyZWRpdCA8PSBWaHNDcmVkaXRBc3NpZ25tZW50Q29udHJvbGxlci5DUkVESVRfTUFYX1ZBTFVFXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRXhwaXJhdGlvbkRhdGVWYWxpZChhc3NpZ25tZW50OiBJQ3JlZGl0QXNzaWdubWVudCkge1xyXG4gICAgICAgIHJldHVybiAoYXNzaWdubWVudC5leHBpcmVJbkRheXMgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHx8IGFuZ3VsYXIuaXNOdW1iZXIoYXNzaWdubWVudC5leHBpcmVJbkRheXMpXHJcbiAgICAgICAgICAgICYmIGFzc2lnbm1lbnQuZXhwaXJlSW5EYXlzID49IFZoc0NyZWRpdEFzc2lnbm1lbnRDb250cm9sbGVyLkVYUElSRV9JTl9EQVlTX01JTl9WQUxVRVxyXG4gICAgICAgICAgICAmJiBhc3NpZ25tZW50LmV4cGlyZUluRGF5cyA8PSBWaHNDcmVkaXRBc3NpZ25tZW50Q29udHJvbGxlci5FWFBJUkVfSU5fREFZU19NQVhfVkFMVUU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNDcmVkaXRBc3NpZ25tZW50RGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzQ3JlZGl0QXNzaWdubWVudENvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgZWR1Y2F0aW9uSXRlbUlkOiBcIj12aHNFZHVjYXRpb25JdGVtSWRcIixcclxuICAgICAgICAgICAgZWR1Y2F0aW9uSXRlbVR5cGU6IFwiPXZoc0VkdWNhdGlvbkl0ZW1UeXBlXCIsXHJcbiAgICAgICAgICAgIGVkdWNhdGlvbkl0ZW1CdXNpbmVzc1VuaXRJZDogXCI9P3Zoc0VkdWNhdGlvbkl0ZW1CdXNpbmVzc1VuaXRJZFwiLFxyXG4gICAgICAgICAgICBlZHVjYXRpb25JdGVtQ3JlZGl0czogXCI9dmhzRWR1Y2F0aW9uSXRlbUNyZWRpdHNcIixcclxuICAgICAgICAgICAgY3VycmVudFVzZXJCdXNpbmVzc1VuaXRJZHM6IFwiPXZoc0N1cnJlbnRVc2VyQnVzaW5lc3NVbml0SWRzXCIsXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlQ2FsbGJhY2s6IFwiJnZoc09uQ2hhbmdlXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1jcmVkaXQtYXNzaWdubWVudC5odG1sXCIpLFxyXG4gICAgICAgIHRyYW5zY2x1ZGU6IHRydWVcclxuICAgIH1cclxuXHJcbn1cclxuXHJcblZoc0NyZWRpdEFzc2lnbm1lbnREaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUNvbW1vblJvb3RTY29wZX0gZnJvbSBcIi4uL2NvbW1vbi9JQ29tbW9uUm9vdFNjb3BlXCI7XHJcbmltcG9ydCBJQXVnbWVudGVkSlF1ZXJ5ID0gYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5pbXBvcnQgSVRpbWVvdXRTZXJ2aWNlID0gYW5ndWxhci5JVGltZW91dFNlcnZpY2U7XHJcbmltcG9ydCBJTmdNb2RlbENvbnRyb2xsZXIgPSBhbmd1bGFyLklOZ01vZGVsQ29udHJvbGxlcjtcclxuaW1wb3J0IHtSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXJ9IGZyb20gXCIuL3JpY2h0ZXh0L1JpY2hUZXh0RWRpdG9yRGlyZWN0aXZlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFZGl0YWJsZVRlbXBsYXRlRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICB2bT86IFZoc0VkaXRhYmxlVGVtcGxhdGVDb250cm9sbGVyO1xyXG4gICAgb25jaGFuZ2U6ICgpID0+IHt9O1xyXG4gICAgYnVuZGxlSWQ/OiBudW1iZXI7XHJcbiAgICBidXNpbmVzc1VuaXRJZD86IG51bWJlcjtcclxuICAgIGNvdXJzZUlkPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzRWRpdGFibGVUZW1wbGF0ZUNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIGh0bWxDb250ZW50OiBhbnk7XHJcbiAgICBwdWJsaWMgdGV4dENvbnRlbnQ6IGFueTtcclxuICAgIHB1YmxpYyB0YXJnZXQ6IEhUTUxFbGVtZW50O1xyXG4gICAgcHVibGljIHRhcmdldENvbnRlbnRFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAgIHB1YmxpYyB0YXJnZXRIZWFkZXJFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAgIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcclxuICAgIHB1YmxpYyBzaG93RWRpdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNBY3RpdmU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNPcHRpb25hbDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1ByaW50T25seTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyB0b29sYmFyOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdG9vbGJhcklzUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgbmdNb2RlbDogSU5nTW9kZWxDb250cm9sbGVyO1xyXG4gICAgcHJpdmF0ZSBsb2NhbE1vZGVsVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcblxyXG4gICAgcHJpdmF0ZSBBRERfQ09OVEVOVF9UT09MUzogc3RyaW5nID1cclxuICAgICAgICBcIlsnXCIgK1xyXG4gICAgICAgIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9FTUJFRERFRF9NQVRFUklBTF9CVVRUT04gKyBcIicsICdpbnNlcnRWaWRlbycsICdpbnNlcnRJbWFnZScsICdcIiArXHJcbiAgICAgICAgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0VNQkVEREVEX0JVTkRMRV9CVVRUT04gKyBcIicsICdpbnNlcnRMaW5rJywgJ1wiICtcclxuICAgICAgICBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfU0FOREJPWF9CVVRUT04gKyBcIicsICdcIiArXHJcbiAgICAgICAgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0xPQURfRlJPTV9URU1QTEFURV9CVVRUT04gKyBcIicsICdcIiArXHJcbiAgICAgICAgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0NPTlZFUlRfVE9fTkVXX1RFTVBMQVRFX0JVVFRPTiArIFwiJywgJ1wiICtcclxuICAgICAgICBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX1RBQkxFX0JVVFRPTiArIFwiJywgJ1wiICtcclxuICAgICAgICBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUlfQ09OVEVOVF9HRU5FUkFUSU9OX0JVVFRPTiArIFwiJ10sXCI7XHJcbiAgICBwcml2YXRlIEZPTlRfVE9PTFM6IHN0cmluZyA9XHJcbiAgICAgICAgXCJbJ2JvbGQnLCAnaXRhbGljcycsICd1bmRlcmxpbmUnLCAnc3RyaWtlVGhyb3VnaCcsICdcIiArXHJcbiAgICAgICAgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0ZPTlRfQ09MT1IgKyBcIicsICdcIiArXHJcbiAgICAgICAgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0JBQ0tHUk9VTkRfRk9OVF9DT0xPUiArIFwiJ10sXCI7XHJcbiAgICBwcml2YXRlIFBBUkFHUkFQSF9UT09MUzogc3RyaW5nID0gXCJbJ3VsJywgJ29sJywgJ2luZGVudCcsICdvdXRkZW50JywgJ2p1c3RpZnlMZWZ0JywgJ2p1c3RpZnlDZW50ZXInLCAnanVzdGlmeVJpZ2h0JywgJ2p1c3RpZnlGdWxsJ10sXCI7XHJcbiAgICBwcml2YXRlIFNUWUxFU19UT09MUzogc3RyaW5nID0gXCJbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ3AnLCAncHJlJywgJ3F1b3RlJ10sXCI7XHJcbiAgICBwcml2YXRlIFRPT0xUSVBTX1RPT0xTOiBzdHJpbmcgPVxyXG4gICAgICAgIFwiWydcIiArXHJcbiAgICAgICAgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0FERF9USVBfQlVUVE9OICsgXCInLCAnXCIgK1xyXG4gICAgICAgIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9BRERfUVVFU1RJT05fQlVUVE9OICsgXCInLCAnXCIgK1xyXG4gICAgICAgIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9BRERfQVNTRVNTTUVOVF9CVVRUT04gKyBcIicsICdcIiArXHJcbiAgICAgICAgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX1RPR0dMRV9CVVRUT04gKyBcIicsICdcIiArXHJcbiAgICAgICAgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX1RPR0dMRV9DT05URU5UX0JVVFRPTiArIFwiJywgJ1wiICtcclxuICAgICAgICBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX05PVEVfRk9SX1BST0dSRVNTX0JVVFRPTiArIFwiJ10sXCI7XHJcbiAgICBwcml2YXRlIE9USEVSX1RPT0xTOiBzdHJpbmcgPSBcIlsncmVkbycsICd1bmRvJywgJ2NsZWFyJywgJ1wiICsgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0ZVTExTQ1JFRU5fQlVUVE9OICsgXCInLCAnaHRtbCddLFwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRyb290U2NvcGU6IElDb21tb25Sb290U2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY29wZTogSUVkaXRhYmxlVGVtcGxhdGVEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IElUaW1lb3V0U2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJRWRpdGFibGVUZW1wbGF0ZURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpRdWVyeSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsID0gdGhpcy5lbGVtZW50LmNvbnRyb2xsZXIoXCJuZ01vZGVsXCIpO1xyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRJbmxpbmVFZGl0b3JzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJHNjb3BlLiR3YXRjaCgoKSA9PiB0aGlzLm5nTW9kZWwuJG1vZGVsVmFsdWUsIHZhbHVlID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcyBjaGFuZ2Ugd2FzIGRvbmUgb3V0c2lkZSB0aGUgY29tcG9uZW50IC0+IHRyaWdnZXIgY2hhbmdlIHRvIHJlc2V0IEpRdWVyeSBkYXRlcGlja2VyIHN0YXRlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxvY2FsTW9kZWxWYWx1ZSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxNb2RlbFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB0aGlzLmluaXRJbmxpbmVFZGl0b3JzKCksIDApO1xyXG4gICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRJbmxpbmVFZGl0b3JzKCkge1xyXG4gICAgICAgIGxldCBibG9ja3MgPSB0aGlzLmVsZW1lbnQuZmluZChcIi5lZGl0YWJsZS1ibG9jayA+IC5ibG9jay1jb250ZW50XCIpO1xyXG4gICAgICAgIGxldCBsaW5lcyA9IHRoaXMuZWxlbWVudC5maW5kKFwiLmVkaXRhYmxlLWxpbmVcIik7XHJcblxyXG4gICAgICAgIGJsb2Nrcy5vbihcImNsaWNrXCIsIChlOiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9ICg8SFRNTEVsZW1lbnQ+IGUuY3VycmVudFRhcmdldCkucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRDb250ZW50RWxlbWVudCA9IDxIVE1MRWxlbWVudD4gZS5jdXJyZW50VGFyZ2V0O1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldEhlYWRlckVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+JCh0aGlzLnRhcmdldCkuY2hpbGRyZW4oXCIuYmxvY2staGVhZGVyXCIpLmdldCgwKTtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXIgPSB0aGlzLnRhcmdldEhlYWRlckVsZW1lbnQgPyB0aGlzLnRhcmdldEhlYWRlckVsZW1lbnQuaW5uZXJUZXh0IDogXCJzbGlkZSBlZGl0b3JcIjtcclxuICAgICAgICAgICAgdGhpcy5odG1sQ29udGVudCA9IHRoaXMudGFyZ2V0Q29udGVudEVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gIXRoaXMudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImluYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVG9vbGJhcih0aGlzLnRhcmdldC5jbGFzc0xpc3QpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChcIi5tb2RhbC5ibG9jay1lZGl0b3JcIikubW9kYWwoe1xyXG4gICAgICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBsaW5lcy5vbihcImNsaWNrXCIsIChlOiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IDxIVE1MRWxlbWVudD4gZS5jdXJyZW50VGFyZ2V0O1xyXG4gICAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gdGhpcy50YXJnZXQuaW5uZXJUZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJpbnRPbmx5ID0gdGhpcy50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicHJpbnQtb25seVwiKTtcclxuICAgICAgICAgICAgdGhpcy5pc09wdGlvbmFsID0gdGhpcy50YXJnZXQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJvcHRpb25hbFwiKSB8fCB0aGlzLmlzUHJpbnRPbmx5O1xyXG4gICAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gIXRoaXMudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaW5hY3RpdmVcIikgJiYgIXRoaXMuaXNQcmludE9ubHk7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5maW5kKFwiLm1vZGFsLmxpbmUtZWRpdG9yXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVRvb2xiYXIoY2xhc3NMaXN0OiBET01Ub2tlbkxpc3QpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJJc1JlYWR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b29sYmFyID0gXCJbXCI7XHJcbiAgICAgICAgdGhpcy50b29sYmFyICs9IHRoaXMuQUREX0NPTlRFTlRfVE9PTFMgKyB0aGlzLkZPTlRfVE9PTFMgKyB0aGlzLlBBUkFHUkFQSF9UT09MUyArIHRoaXMuU1RZTEVTX1RPT0xTICsgdGhpcy5UT09MVElQU19UT09MUyArIHRoaXMuT1RIRVJfVE9PTFM7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGlmICh0aGlzLnRvb2xiYXJbdGhpcy50b29sYmFyLmxlbmd0aCAtIDFdID09PSBcIixcIikge1xyXG4gICAgICAgICAgICB0aGlzLnRvb2xiYXIgPSB0aGlzLnRvb2xiYXIuc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRvb2xiYXIgKz0gXCJdXCI7XHJcbiAgICAgICAgdGhpcy50b29sYmFySXNSZWFkeSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5U3R5bGVzVG9UZXh0KCkge1xyXG4gICAgICAgIGxldCBpbWdUYWdSeCA9IC88aW1nKFxcc3NyYz1cImRhdGE6aW1hZ2VcXFMrPyk+L2dpO1xyXG5cclxuICAgICAgICBsZXQgc3Vic3RpdHV0ZWRMaW5lcyA9IFtdO1xyXG4gICAgICAgIGxldCBhZGRlZEltYWdlO1xyXG4gICAgICAgIHdoaWxlICgoYWRkZWRJbWFnZSA9IGltZ1RhZ1J4LmV4ZWModGhpcy5odG1sQ29udGVudCkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgc3Vic3RpdHV0ZWRMaW5lcy5wdXNoKGFkZGVkSW1hZ2VbMF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3Vic3RpdHV0ZWRMaW5lcy5tYXAoKGxpbmUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5odG1sQ29udGVudCA9IHRoaXMuaHRtbENvbnRlbnQucmVwbGFjZShsaW5lLCBsaW5lLnNsaWNlKDAsIC0yKSArICcgc3R5bGU9XCJ3aWR0aDogMTAwJVwiLz4nKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVRleHQoKXtcclxuICAgICAgICB0aGlzLnNob3dFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRhcmdldC5pbm5lclRleHQgPSB0aGlzLnRleHRDb250ZW50O1xyXG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImluYWN0aXZlXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImluYWN0aXZlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc09wdGlvbmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxvY2FsTW9kZWxWYWx1ZSA9IHRoaXMuZWxlbWVudC5maW5kKFwiLmVkaXRhYmxlLXRlbXBsYXRlLWNvbnRlbnQtYXJlYVwiKS5odG1sKCk7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLiRzZXRWaWV3VmFsdWUodGhpcy5sb2NhbE1vZGVsVmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5vbmNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5vbmNoYW5nZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUh0bWwoKXtcclxuICAgICAgICB0aGlzLnNob3dFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRhcmdldENvbnRlbnRFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuaHRtbENvbnRlbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQuY2xhc3NMaXN0LnJlbW92ZShcImluYWN0aXZlXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJpbmFjdGl2ZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5odG1sQ29udGVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0Q29udGVudEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVhZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzQWN0aXZlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRvb2xiYXIgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMudG9vbGJhcklzUmVhZHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvY2FsTW9kZWxWYWx1ZSA9IHRoaXMuZWxlbWVudC5maW5kKFwiLmVkaXRhYmxlLXRlbXBsYXRlLWNvbnRlbnQtYXJlYVwiKS5odG1sKCk7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLiRzZXRWaWV3VmFsdWUodGhpcy5sb2NhbE1vZGVsVmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5vbmNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5vbmNoYW5nZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0VkaXRvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaHRtbENvbnRlbnQgPSB0aGlzLnRleHRDb250ZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRvb2xiYXIgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMudG9vbGJhcklzUmVhZHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzRWRpdGFibGVUZW1wbGF0ZURpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJRWRpdGFibGVUZW1wbGF0ZURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0VkaXRhYmxlVGVtcGxhdGVDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0VkaXRhYmxlVGVtcGxhdGVDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIG9uY2hhbmdlOiBcIiZ2aHNPbmNoYW5nZVwiLFxyXG4gICAgICAgICAgICBidW5kbGVJZDogXCJAP3Zoc0J1bmRsZUlkXCIsXHJcbiAgICAgICAgICAgIGJ1c2luZXNzVW5pdElkOiBcIkA/dmhzQnVzaW5lc3NVbml0SWRcIixcclxuICAgICAgICAgICAgY291cnNlSWQ6IFwiPT92aHNDb3Vyc2VJZFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2NsdWRlOiBmYWxzZSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtZWRpdGFibGUtdGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc0VkaXRhYmxlVGVtcGxhdGVEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJDcmVkaXR9IGZyb20gXCIuLi9jcmVkaXRzL21vZGVscy9JVXNlckNyZWRpdFwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtNb21lbnR9IGZyb20gXCIuLi91dGlscy9Nb21lbnRcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtTb3J0T3JkZXJ9IGZyb20gXCIuLi9Tb3J0RW50cnlcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuLi9jb3Vyc2VzL1Byb2dyZXNzU2VydmljZVwiO1xyXG5pbXBvcnQge1BlcnNvbmFsUm91dGVyfSBmcm9tIFwiLi4vdXJscy9QZXJzb25hbFJvdXRlclwiO1xyXG5pbXBvcnQgSUh0dHBTZXJ2aWNlID0gYW5ndWxhci5JSHR0cFNlcnZpY2U7XHJcbmltcG9ydCBJV2luZG93U2VydmljZSA9IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2U7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzRWRpdGFibGVVc2VyQ3JlZGl0c0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgdXNlcklkOiBudW1iZXI7XHJcbiAgICBpc0VkaXRhYmxlOiBib29sZWFuO1xyXG5cclxuICAgIHZtOiBWaHNFZGl0YWJsZVVzZXJDcmVkaXRzQ29udHJvbGxlcjtcclxufVxyXG5cclxuaW50ZXJmYWNlIElVc2VyQ3JlZGl0RXh0ZW5kZWQgZXh0ZW5kcyBJVXNlckNyZWRpdCB7XHJcbiAgICByZWNlaXB0RGF0ZVRleHQ/OiBzdHJpbmcsXHJcbiAgICBleHBpcmF0aW9uRGF0ZVRleHQ/OiBzdHJpbmcsXHJcbiAgICBpc0VkaXRpbmc/OiBib29sZWFuLFxyXG4gICAgaXNEZWxldGlvbkluUHJvY2VlZD86IGJvb2xlYW47XHJcbiAgICBpc0VkaXRTYXZlSW5Qcm9jZWVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0VkaXRhYmxlVXNlckNyZWRpdHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ1JFRElUX01BWF9WQUxVRSA9IDk5OS45OTtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ1JFRElUX01JTl9WQUxVRSA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSB1c2VyQ3JlZGl0c0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJVXNlckNyZWRpdD47XHJcbiAgICBwcml2YXRlIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcbiAgICBwcml2YXRlIG5ld1VzZXJDcmVkaXQ6IElVc2VyQ3JlZGl0RXh0ZW5kZWQgPSB7fTtcclxuICAgIHByaXZhdGUgZWRpdGluZ1VzZXJDcmVkaXRzQnlJZDogTWFwPG51bWJlciwgSVVzZXJDcmVkaXRFeHRlbmRlZD4gPSBuZXcgTWFwPG51bWJlciwgSVVzZXJDcmVkaXRFeHRlbmRlZD4oKTtcclxuICAgIHByaXZhdGUgaXNBZGROZXdDcmVkaXRJblByb2NlZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNBZGRSb3dWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBpc0VkaXRBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaGFzRWRpdFVzZXJQZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGFsbG93Q3JlZGl0c1NlbGZSZXBvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNQZXJzb25hbENyZWRpdHNNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGF0dGFjaG1lbnQ6IEZpbGU7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQcm9ncmVzc1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgJHNjb3BlOiBJVmhzRWRpdGFibGVVc2VyQ3JlZGl0c0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljICRodHRwOiBJSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgJHdpbmRvdzogSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHByb2dyZXNzU2VydmljZTogUHJvZ3Jlc3NTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLnVzZXJDcmVkaXRzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVVzZXJDcmVkaXQ+KHRoaXMuJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvdXNlcnMvJHt0aGlzLiRzY29wZS51c2VySWR9L2NyZWRpdHNgKSkpO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgICAgICAudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB1c2VyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNFZGl0VXNlclBlcm1pc3Npb24gPSB0aGlzLmN1cnJlbnRVc2VyLnBlcm1pc3Npb25zLmVkaXRVc2VyO1xyXG4gICAgICAgICAgICAgICAgaWYgKCRsb2NhdGlvbi51cmwoKS5pbmRleE9mKFBlcnNvbmFsUm91dGVyLmNyZWRpdHNSb3V0ZSkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQZXJzb25hbENyZWRpdHNNb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB1c2VyU2VydmljZS5pc0FsbG93ZWRDcmVkaXRzU2VsZlJlcG9ydGluZ0ZvclVzZXIodGhpcy5jdXJyZW50VXNlci5pZClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihhbGxvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFZGl0QXZhaWxhYmxlID0gdGhpcy5pc1BlcnNvbmFsQ3JlZGl0c01vZGUgPyBhbGxvdyA6IHRoaXMuaGFzRWRpdFVzZXJQZXJtaXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2VhcmNoQ3JlZGl0cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJDcmVkaXRzR3JpZE1vZGVsLmZpbHRlci5yZWNlaXZlZEZyb20gPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5maWx0ZXIucmVjZWl2ZWRGcm9tVGV4dCk7XHJcbiAgICAgICAgdGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5maWx0ZXIucmVjZWl2ZWRUbyA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLnVzZXJDcmVkaXRzR3JpZE1vZGVsLmZpbHRlci5yZWNlaXZlZFRvVGV4dCk7XHJcbiAgICAgICAgdGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzU2VhcmNoRGF0ZXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMudXNlckNyZWRpdHNHcmlkTW9kZWwuZmlsdGVyLnJlY2VpdmVkRnJvbVRleHQgfHwgIXRoaXMudXNlckNyZWRpdHNHcmlkTW9kZWwuZmlsdGVyLnJlY2VpdmVkVG9UZXh0XHJcbiAgICAgICAgICAgIHx8IHRoaXMudXNlckNyZWRpdHNHcmlkTW9kZWwuZmlsdGVyLnJlY2VpdmVkRnJvbVRleHQgJiYgdGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5maWx0ZXIucmVjZWl2ZWRUb1RleHRcclxuICAgICAgICAgICAgJiYgTW9tZW50LnBhcnNlKHRoaXMudXNlckNyZWRpdHNHcmlkTW9kZWwuZmlsdGVyLnJlY2VpdmVkVG9UZXh0KS5lbmRPZihcImRheVwiKVxyXG4gICAgICAgICAgICAgICAgLmlzQWZ0ZXIoTW9tZW50LnBhcnNlKHRoaXMudXNlckNyZWRpdHNHcmlkTW9kZWwuZmlsdGVyLnJlY2VpdmVkRnJvbVRleHQpLnN0YXJ0T2YoJ2RheScpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlbGV0ZVVzZXJDcmVkaXQoY3JlZGl0OiBJVXNlckNyZWRpdEV4dGVuZGVkKSB7XHJcbiAgICAgICAgY3JlZGl0LmlzRGVsZXRpb25JblByb2NlZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZGVsZXRlVXNlckNyZWRpdCh0aGlzLiRzY29wZS51c2VySWQsIGNyZWRpdC5pZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXJDcmVkaXRzR3JpZE1vZGVsLmVudHJpZXMubGVuZ3RoID09IDEgJiYgdGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5jdXJyZW50UGFnZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVkaXRzR3JpZE1vZGVsLmxvYWRQYWdlKHRoaXMudXNlckNyZWRpdHNHcmlkTW9kZWwuY3VycmVudFBhZ2UgLSAxKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVkaXRzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2gocmVqZWN0ID0+IGNyZWRpdC5pc0RlbGV0aW9uSW5Qcm9jZWVkID0gZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhcnRFZGl0VXNlckNyZWRpdChjcmVkaXQ6IElVc2VyQ3JlZGl0RXh0ZW5kZWQpIHtcclxuICAgICAgICBjcmVkaXQucmVjZWlwdERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKGNyZWRpdC5yZWNlaXB0RGF0ZSk7XHJcbiAgICAgICAgY3JlZGl0LmV4cGlyYXRpb25EYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShjcmVkaXQuZXhwaXJhdGlvbkRhdGUpO1xyXG4gICAgICAgIHRoaXMuZWRpdGluZ1VzZXJDcmVkaXRzQnlJZC5zZXQoY3JlZGl0LmlkLCBhbmd1bGFyLmNvcHkoY3JlZGl0KSk7XHJcbiAgICAgICAgY3JlZGl0LmlzRWRpdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlRWRpdGVkVXNlckNyZWRpdChjcmVkaXQ6IElVc2VyQ3JlZGl0RXh0ZW5kZWQpIHtcclxuICAgICAgICBsZXQgZWRpdGVkID0gdGhpcy5lZGl0aW5nVXNlckNyZWRpdHNCeUlkLmdldChjcmVkaXQuaWQpO1xyXG4gICAgICAgIGVkaXRlZC5yZWNlaXB0RGF0ZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZShlZGl0ZWQucmVjZWlwdERhdGVUZXh0KTtcclxuICAgICAgICBlZGl0ZWQuZXhwaXJhdGlvbkRhdGUgPSBNb21lbnQudGV4dFRvSmF2YURhdGUoZWRpdGVkLmV4cGlyYXRpb25EYXRlVGV4dCk7XHJcbiAgICAgICAgY3JlZGl0LmlzRWRpdFNhdmVJblByb2NlZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlVXNlckNyZWRpdCh0aGlzLiRzY29wZS51c2VySWQsIGVkaXRlZC5pZCwgZWRpdGVkKVxyXG4gICAgICAgICAgICAudGhlbih1cGRhdGVkQ3JlZGl0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBsb2FkVXNlckNyZWRpdEF0dGFjaG1lbnQoZWRpdGVkLmlkLCBlZGl0ZWQuYXR0YWNobWVudCkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuaWQgPT09IGVkaXRlZC5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZG93bmxvYWRVcmwgPSByZXNwb25zZS5kb3dubG9hZFVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbGVOYW1lID0gcmVzcG9uc2UuZmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5lbnRyaWVzLm1hcChlID0+IGUuaWQpLmluZGV4T2YodXBkYXRlZENyZWRpdC5pZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVkaXRzR3JpZE1vZGVsLmVudHJpZXNbaW5kZXhdID0gdXBkYXRlZENyZWRpdDtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlckNyZWRpdHNHcmlkTW9kZWwuZW50cmllcy5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBzZWNvbmQucmVjZWlwdERhdGUgLSBmaXJzdC5yZWNlaXB0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU3VjY2Vzc2Z1bGx5IHNhdmVkXCIpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiBjcmVkaXQuaXNFZGl0U2F2ZUluUHJvY2VlZCA9IGZhbHNlKTtcclxuICAgICAgICBjcmVkaXQuaXNFZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nVXNlckNyZWRpdHNCeUlkLmRlbGV0ZShjcmVkaXQuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FuY2VsRWRpdFVzZXJDcmVkaXQoY3JlZGl0OiBJVXNlckNyZWRpdEV4dGVuZGVkKSB7XHJcbiAgICAgICAgLy9yZXZlcnQgY2hhbmdlc1xyXG4gICAgICAgIGNyZWRpdC5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRpbmdVc2VyQ3JlZGl0c0J5SWQuZGVsZXRlKGNyZWRpdC5pZCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgc2F2ZU5ld1VzZXJDcmVkaXQoKSB7XHJcbiAgICAgICAgdGhpcy5uZXdVc2VyQ3JlZGl0LnJlY2VpcHREYXRlID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMubmV3VXNlckNyZWRpdC5yZWNlaXB0RGF0ZVRleHQpO1xyXG4gICAgICAgIHRoaXMubmV3VXNlckNyZWRpdC5leHBpcmF0aW9uRGF0ZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLm5ld1VzZXJDcmVkaXQuZXhwaXJhdGlvbkRhdGVUZXh0KTtcclxuICAgICAgICB0aGlzLmlzQWRkTmV3Q3JlZGl0SW5Qcm9jZWVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5jcmVhdGVVc2VyQ3JlZGl0KHRoaXMuJHNjb3BlLnVzZXJJZCwgdGhpcy5uZXdVc2VyQ3JlZGl0KVxyXG4gICAgICAgICAgICAudGhlbih1c2VyQ3JlZGl0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5ld1VzZXJDcmVkaXQuYXR0YWNobWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBsb2FkVXNlckNyZWRpdEF0dGFjaG1lbnQodXNlckNyZWRpdC5pZCwgdGhpcy5uZXdVc2VyQ3JlZGl0LmF0dGFjaG1lbnQpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVkaXRzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuaWQgPT09IHVzZXJDcmVkaXQuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5kb3dubG9hZFVybCA9IHJlc3BvbnNlLmRvd25sb2FkVXJsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbGVOYW1lID0gcmVzcG9uc2UuZmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJDcmVkaXRzR3JpZE1vZGVsLmVudHJpZXMucHVzaCh1c2VyQ3JlZGl0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlckNyZWRpdHNHcmlkTW9kZWwuZW50cmllcy5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBzZWNvbmQucmVjZWlwdERhdGUgLSBmaXJzdC5yZWNlaXB0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0TmV3VXNlckNyZWRpdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0FkZFJvd1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTdWNjZXNzZnVsbHkgc2F2ZWRcIik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMuaXNBZGROZXdDcmVkaXRJblByb2NlZWQgPSBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldE5ld1VzZXJDcmVkaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc0FkZFJvd1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5ld1VzZXJDcmVkaXQgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQXR0YWNobWVudCh1c2VyQ3JlZGl0OiBJVXNlckNyZWRpdCk6IHZvaWQge1xyXG4gICAgICAgIHVzZXJDcmVkaXQuYXR0YWNobWVudCA9IG51bGw7XHJcbiAgICAgICAgdXNlckNyZWRpdC5kb3dubG9hZFVybCA9IG51bGw7XHJcbiAgICAgICAgdXNlckNyZWRpdC5maWxlSWQgPSBudWxsO1xyXG4gICAgICAgIHVzZXJDcmVkaXQuZmlsZU5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vdmFsaWRhdGlvbnNcclxuICAgIHByaXZhdGUgaXNFZGl0ZWRSb3dWYWxpZChjcmVkaXQ6IElVc2VyQ3JlZGl0RXh0ZW5kZWQpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBlZGl0ZWRDcmVkaXQgPSBjcmVkaXQuaXNFZGl0aW5nXHJcbiAgICAgICAgICAgID8gdGhpcy5lZGl0aW5nVXNlckNyZWRpdHNCeUlkLmdldChjcmVkaXQuaWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5uZXdVc2VyQ3JlZGl0O1xyXG4gICAgICAgIGlmIChjcmVkaXQucmVmZXJlbmNlZE9iamVjdFR5cGUpIHtcclxuICAgICAgICAgICAgLy92YWxpZGF0aW9uIGZvciBpbnRlcm5hbFxyXG4gICAgICAgICAgICBpc1ZhbGlkID0gISFlZGl0ZWRDcmVkaXQuY3JlZGl0VHlwZSAmJiB0aGlzLmlzRGF0ZXNWYWxpZChlZGl0ZWRDcmVkaXQpICYmIHRoaXMuaXNDcmVkaXRWYWx1ZVZhbGlkKGVkaXRlZENyZWRpdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy92YWxpZGF0aW9uIGZvciBleHRlcm5hbFxyXG4gICAgICAgICAgICBpc1ZhbGlkID0gISFlZGl0ZWRDcmVkaXQuY3JlZGl0VHlwZSAmJiAhIWVkaXRlZENyZWRpdC5leHRlcm5hbE9iamVjdFR5cGUgJiYgKCEhZWRpdGVkQ3JlZGl0LmV4dGVybmFsT2JqZWN0SWQgfHwgdGhpcy5pc1BlcnNvbmFsQ3JlZGl0c01vZGUpXHJcbiAgICAgICAgICAgICAgICAmJiAhIWVkaXRlZENyZWRpdC5vYmplY3ROYW1lICYmICghIWVkaXRlZENyZWRpdC5vYmplY3REZXNjcmlwdGlvbiB8fCB0aGlzLmlzUGVyc29uYWxDcmVkaXRzTW9kZSkgJiYgdGhpcy5pc0RhdGVzVmFsaWQoZWRpdGVkQ3JlZGl0KVxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5pc0NyZWRpdFZhbHVlVmFsaWQoZWRpdGVkQ3JlZGl0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzVmFsaWRcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzRGF0ZXNWYWxpZChjcmVkaXQ6IElVc2VyQ3JlZGl0RXh0ZW5kZWQpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVjZWlwdERhdGUgPSBNb21lbnQucGFyc2UoY3JlZGl0LnJlY2VpcHREYXRlVGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHJlY2VpcHREYXRlLmlzVmFsaWQoKSAmJiB0aGlzLmlzRXhwaXJhdGlvbkRhdGVWYWxpZChjcmVkaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNFeHBpcmF0aW9uRGF0ZVZhbGlkKGNyZWRpdDogSVVzZXJDcmVkaXRFeHRlbmRlZCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBleHBpcmF0aW9uRGF0ZSA9IGNyZWRpdC5leHBpcmF0aW9uRGF0ZVRleHQgPyBNb21lbnQucGFyc2UoY3JlZGl0LmV4cGlyYXRpb25EYXRlVGV4dCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuICFleHBpcmF0aW9uRGF0ZSB8fCBleHBpcmF0aW9uRGF0ZSAmJiBleHBpcmF0aW9uRGF0ZS5pc1ZhbGlkKCkgJiYgTW9tZW50LnBhcnNlKGNyZWRpdC5yZWNlaXB0RGF0ZVRleHQpLmlzQmVmb3JlKGV4cGlyYXRpb25EYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDcmVkaXRWYWx1ZVZhbGlkKGFzc2lnbm1lbnQ6IElVc2VyQ3JlZGl0RXh0ZW5kZWQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0NyZWRpdFZhbHVlR0VNaW4oYXNzaWdubWVudCkgJiYgdGhpcy5pc0NyZWRpdFZhbHVlTEVNYXgoYXNzaWdubWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ3JlZGl0VmFsdWVHRU1pbihhc3NpZ25tZW50OiBJVXNlckNyZWRpdEV4dGVuZGVkKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGFuZ3VsYXIuaXNOdW1iZXIoYXNzaWdubWVudC5jcmVkaXQpXHJcbiAgICAgICAgICAgICYmIGFzc2lnbm1lbnQuY3JlZGl0ID49IFZoc0VkaXRhYmxlVXNlckNyZWRpdHNDb250cm9sbGVyLkNSRURJVF9NSU5fVkFMVUVcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDcmVkaXRWYWx1ZUxFTWF4KGFzc2lnbm1lbnQ6IElVc2VyQ3JlZGl0RXh0ZW5kZWQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gYW5ndWxhci5pc051bWJlcihhc3NpZ25tZW50LmNyZWRpdClcclxuICAgICAgICAgICAgJiYgYXNzaWdubWVudC5jcmVkaXQgPD0gVmhzRWRpdGFibGVVc2VyQ3JlZGl0c0NvbnRyb2xsZXIuQ1JFRElUX01BWF9WQUxVRVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZXhwb3J0VXNlckNyZWRpdHNUb1BkZigpOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgdXNlcklkOiB0aGlzLiRzY29wZS51c2VySWQsXHJcbiAgICAgICAgICAgIHJlY2VpdmVkRnJvbTogTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMudXNlckNyZWRpdHNHcmlkTW9kZWwuZmlsdGVyLnJlY2VpdmVkRnJvbVRleHQpLFxyXG4gICAgICAgICAgICByZWNlaXZlZFRvOiBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5maWx0ZXIucmVjZWl2ZWRUb1RleHQpLFxyXG4gICAgICAgICAgICBzb3J0RW50cmllczogdGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5zb3J0aW5nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmV4cG9ydFVzZXJDcmVkaXRzKHBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIC50aGVuKGRvd25sb2FkVXJsID0+IHRoaXMuJHdpbmRvdy5vcGVuKGRvd25sb2FkVXJsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkb3dubG9hZEdlbmVyYWxUcmFuc2NyaXB0UmVwb3J0KCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBwYXJhbWV0ZXJzOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy4kc2NvcGUudXNlcklkXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzU2VydmljZS5kb3dubG9hZEdlbmVyYWxUcmFuc2NyaXB0UmVwb3J0KHBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cub3BlbihyZXN1bHQpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NvcnRpbmcoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5zb3J0aW5nLmZpbHRlcihzID0+IHMuZmllbGROYW1lID09PSBmaWVsZE5hbWUpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU29ydGluZ0Rlc2MoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy51c2VyQ3JlZGl0c0dyaWRNb2RlbC5zb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIGxldCBzb3J0RW50cnkgPSB0aGlzLnVzZXJDcmVkaXRzR3JpZE1vZGVsLnNvcnRpbmcuZmlsdGVyKHMgPT4gcy5maWVsZE5hbWUgPT09IGZpZWxkTmFtZSkucG9wKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3J0RW50cnkgJiYgc29ydEVudHJ5LnNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkRFU0M7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RXh0ZXJuYWxDcmVkaXRzSGVscERpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNleHRlcm5hbENyZWRpdHNIZWxwRGlhbG9nXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0NyZWRpdHNFZGl0QnV0dG9ucyh1c2VyQ3JlZGl0OiBJVXNlckNyZWRpdCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzUGVyc29uYWxDcmVkaXRzTW9kZSAmJiB1c2VyQ3JlZGl0LmFkZGVkQnkgPT09IHRoaXMuY3VycmVudFVzZXIuaWRcclxuICAgICAgICAgICAgfHwgIXRoaXMuaXNQZXJzb25hbENyZWRpdHNNb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb3dubG9hZEF0dGFjaG1lbnQodXNlckNyZWRpdDogSVVzZXJDcmVkaXQpOiBhbnkge1xyXG4gICAgICAgIHRoaXMuJGh0dHAuZ2V0KHVzZXJDcmVkaXQuZG93bmxvYWRVcmwsIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXHJcbiAgICAgICAgICAgIH0pLnRoZW4oKHIgOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoW3IuZGF0YV0sIHt0eXBlOiByLmRhdGEudHlwZX0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgbGluay5pZCA9IFwidGVtcEJsb2JMaW5rXCI7XHJcbiAgICAgICAgICAgICAgICBsaW5rLnRhcmdldCA9IFwiX2JsYW5rXCI7XHJcbiAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCB1c2VyQ3JlZGl0LmZpbGVOYW1lKTtcclxuICAgICAgICAgICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNFZGl0YWJsZVVzZXJEaXJlY3RpdmVGYWN0b3J5KHVybFNlcnZpY2U6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzRWRpdGFibGVVc2VyQ3JlZGl0c0NvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgdXNlcklkOiBcIj12aHNVc2VySWRcIixcclxuICAgICAgICAgICAgaXNFZGl0YWJsZTogXCI9P3Zoc0VkaXRhYmxlXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmxTZXJ2aWNlLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtZWRpdGFibGUtdXNlci1jcmVkaXRzLmh0bWxcIilcclxuICAgIH1cclxufVxyXG5cclxuVmhzRWRpdGFibGVVc2VyRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCJcclxuXHJcbmltcG9ydCB7SU11bHRpbWVkaWFTb3VyY2V9IGZyb20gXCIuLy4uL2NvbXBvbmVudHMvbW9kZWxzL0lNdWx0aW1lZGlhXCI7XHJcbmltcG9ydCB7UmFuZG9tVXRpbHN9IGZyb20gXCIuLi91dGlscy9SYW5kb21VdGlsc1wiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxUeXBlS2V5RW51bX0gZnJvbSBcIi4vLi4vbWF0ZXJpYWxzL21vZGVscy9NYXRlcmlhbFR5cGVcIjtcclxuaW1wb3J0IHtPYmplY3RUeXBlVXRpbHN9IGZyb20gXCIuLy4uL3V0aWxzL09iamVjdFR5cGVVdGlsc1wiO1xyXG5pbXBvcnQge0lGaW5kUmljaFRleHRCaW5kQ29udHJvbGxlckV2ZW50RGF0YX0gZnJvbSBcIi4vbW9kZWxzL0lGaW5kUmljaFRleHRCaW5kQ29udHJvbGxlckV2ZW50RGF0YVwiO1xyXG5pbXBvcnQge1JpY2hUZXh0QmluZENvbnRyb2xsZXJ9IGZyb20gXCIuL3JpY2h0ZXh0L1JpY2hUZXh0QmluZERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtEb21VdGlsc30gZnJvbSBcIi4uL3V0aWxzL0RvbVV0aWxzXCI7XHJcbmltcG9ydCBJUHJvbWlzZSA9IGFuZ3VsYXIuSVByb21pc2U7XHJcbmltcG9ydCB7SUVtYmVkZGVkTWF0ZXJpYWxTb3VyY2V9IGZyb20gXCIuL21vZGVscy9JRW1iZWRkZWRNYXRlcmlhbFNvdXJjZVwiO1xyXG5pbXBvcnQge01hdGVyaWFsU2VydmljZX0gZnJvbSBcIi4uL21hdGVyaWFscy9NYXRlcmlhbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJRW1iZWRkZWRNYXRlcmlhbH0gZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvSUVtYmVkZGVkTWF0ZXJpYWxcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc0VtYmVkZGVkTWF0ZXJpYWxEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGlkPzogc3RyaW5nO1xyXG4gICAgdmhzRG93bmxvYWRMaW5rPzogYm9vbGVhbjtcclxuICAgIGxpbmtUaXRsZT86IHN0cmluZztcclxuICAgIHZoc1BkZkV4cGFuZGVkOiBib29sZWFuO1xyXG4gICAgdmhzRXB1YkV4cGFuZGVkOiBib29sZWFuO1xyXG4gICAgdmhzRW5hYmxlRG93bmxvYWQ6IGJvb2xlYW47XHJcblxyXG4gICAgdm0/OiBWaHNFbWJlZGRlZE1hdGVyaWFsQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0VtYmVkZGVkTWF0ZXJpYWxDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfRUxFTUVOVF9TRUxFQ1RPUiA9IFwicC50YS12aHMtZW1iZWRkZWQtbWF0ZXJpYWwsYS50YS12aHMtZW1iZWRkZWQtbWF0ZXJpYWxcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfRElSRUNUSVZFX0hUTUwgPSBcIjxkaXYgdmhzLWVtYmVkZGVkLW1hdGVyaWFsIGlkPSc6bWF0ZXJpYWxJZCcgdmhzLWRvd25sb2FkLWxpbms9Jzppc0Rvd25sb2FkTGluaycgdmhzLWxpbmstdGl0bGU9JzpsaW5rVGl0bGUnPjwvZGl2PlwiXHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX1JFTkRFUl9GVU5DVElPTiA9IChlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGlsZTogYW5ndWxhci5JQ29tcGlsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgbGV0IGlkOiBzdHJpbmcgPSBSYW5kb21VdGlscy5nZW5lcmF0ZVJhbmRvbUlkKCd2aHNFbWJlZGRlZE1hdGVyaWFsXycpO1xyXG4gICAgICAgIGxldCBtYXRlcmlhbElkOiBzdHJpbmcgPSBlbGVtZW50LmF0dHIoJ2lkJyk7XHJcbiAgICAgICAgbGV0IGVuZElkSW5kZXg6IG51bWJlciA9IG1hdGVyaWFsSWQgPyAgbWF0ZXJpYWxJZC5pbmRleE9mKFwiX19cIikgOiAtMTtcclxuICAgICAgICBpZiAoZW5kSWRJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsSWQgPSBtYXRlcmlhbElkLnN1YnN0cmluZygwLCBlbmRJZEluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlSW50KG1hdGVyaWFsSWQpKSkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxJZCA9IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWxJZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWF0ZXJpYWxJZCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pcyhcImFcIikpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVwbGFjZVdpdGgoXCI8c3BhbiBpZD0nXCIgKyBpZCArIFwiJz48L3NwYW4+XCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZXBsYWNlV2l0aChcIjxkaXYgaWQ9J1wiICsgaWQgKyBcIic+PC9kaXY+XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBWaHNFbWJlZGRlZE1hdGVyaWFsQ29udHJvbGxlci5UQV9DT01QSUxFX0FORF9SRVBMQUNFX0VMRU1FTlRfRlVOQ1RJT04oJyMnICsgaWQsIG1hdGVyaWFsSWQsIGVsZW1lbnQudGV4dCgpLCAkY29tcGlsZSwgJHJvb3RTY29wZSk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVwbGFjZVdpdGgoXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX0NPTVBJTEVfQU5EX1JFUExBQ0VfRUxFTUVOVF9GVU5DVElPTiA9IChlbGVtZW50U2VsZWN0b3I6IGFueSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbElkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1RpdGxlOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbXBpbGU6IGFuZ3VsYXIuSUNvbXBpbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSkgPT4ge1xyXG4gICAgICAgIGxldCBpc0Rvd25sb2FkTGluazogYm9vbGVhbiA9ICQoZWxlbWVudFNlbGVjdG9yKS5pcygnc3BhbicpO1xyXG4gICAgICAgICQoZWxlbWVudFNlbGVjdG9yKS5yZXBsYWNlV2l0aCgkY29tcGlsZShcclxuICAgICAgICAgICAgU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShWaHNFbWJlZGRlZE1hdGVyaWFsQ29udHJvbGxlci5UQV9ESVJFQ1RJVkVfSFRNTClcclxuICAgICAgICAgICAgICAgIC53aXRoKFwiOm1hdGVyaWFsSWRcIiwgbWF0ZXJpYWxJZClcclxuICAgICAgICAgICAgICAgIC53aXRoKFwiOmlzRG93bmxvYWRMaW5rXCIsIGlzRG93bmxvYWRMaW5rKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6bGlua1RpdGxlXCIsIGxpbmtUaXRsZSlcclxuICAgICAgICAgICAgICAgIC5idWlsZCgpXHJcbiAgICAgICAgKSgkc2NvcGUpKTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIG1hdGVyaWFsSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBtYXRlcmlhbDogSUVtYmVkZGVkTWF0ZXJpYWw7XHJcbiAgICBwdWJsaWMgbXVsdGltZWRpYVNvdXJjZXM6IElNdWx0aW1lZGlhU291cmNlW107XHJcbiAgICBwdWJsaWMgaXNWaWV3QWxsb3dlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc0lubGluZVZpZXc6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxUeXBlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaXNNYXRlcmlhbEVtcHR5OiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzTWF0ZXJpYWxOb3RSZWFkeTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG4gICAgcHJpdmF0ZSByaWNoVGV4dEJpbmRDb250cm9sbGVyOiBSaWNoVGV4dEJpbmRDb250cm9sbGVyO1xyXG4gICAgcHJpdmF0ZSBtYXRlcmlhbFNvdXJjZTogSUVtYmVkZGVkTWF0ZXJpYWxTb3VyY2UgPSB7fTtcclxuICAgIHByaXZhdGUgdmhzTWF0ZXJpYWxTZWN0aW9uSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwZGZFeHBhbmRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgZXB1YkV4cGFuZGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBlbmFibGVEb3dubG9hZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBNYXRlcmlhbFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc0VtYmVkZGVkTWF0ZXJpYWxEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogbmcuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYXRlcmlhbEFwaTogTWF0ZXJpYWxTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICAkc2NvcGUudmhzRG93bmxvYWRMaW5rID0gKCRzY29wZS52aHNEb3dubG9hZExpbmsgPT0gbnVsbCB8fCAkc2NvcGUudmhzRG93bmxvYWRMaW5rID09IHVuZGVmaW5lZCkgP1xyXG4gICAgICAgICAgICBmYWxzZSA6ICRzY29wZS52aHNEb3dubG9hZExpbms7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzRW1iZWRkZWRNYXRlcmlhbERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbElkID0gcGFyc2VJbnQoJHNjb3BlLmlkKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG5cclxuICAgICAgICBsZXQgZXZlbnREYXRhOiBJRmluZFJpY2hUZXh0QmluZENvbnRyb2xsZXJFdmVudERhdGEgPSB7XHJcbiAgICAgICAgICAgIHJpY2hUZXh0RWxlbWVudElkOiB0aGlzLmZpbmRSaWNoVGV4dEVsZW1lbnRJZCgpLFxyXG4gICAgICAgICAgICByaWNoVGV4dEJpbmRDb250cm9sbGVyOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChFdmVudC5UQV9GSU5EX1JJQ0hfVEVYVF9CSU5EX0NPTlRST0xMRVIsIGV2ZW50RGF0YSk7XHJcbiAgICAgICAgdGhpcy5yaWNoVGV4dEJpbmRDb250cm9sbGVyID0gZXZlbnREYXRhLnJpY2hUZXh0QmluZENvbnRyb2xsZXI7XHJcbiAgICAgICAgdGhpcy5sb2FkTWF0ZXJpYWxTb3VyY2VJbmZvKCkudGhlbihyID0+IHt0aGlzLmxvYWRNYXRlcmlhbCh0aGlzLm1hdGVyaWFsSWQpO30pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtdWx0aW1lZGlhRXJyb3JDYWxsYmFjayhjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUVtYmVkZGVkTWF0ZXJpYWw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkTWF0ZXJpYWwodGhpcy5tYXRlcmlhbElkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZE1hdGVyaWFsKG1hdGVyaWFsSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUVtYmVkZGVkTWF0ZXJpYWw+IHtcclxuICAgICAgICBpZiAoISF0aGlzLm1hdGVyaWFsU291cmNlLnNvdXJjZUlkICYmICEhdGhpcy5tYXRlcmlhbFNvdXJjZS5zb3VyY2VUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsQXBpLmdldEVtYmVkZGVkTWF0ZXJpYWwodGhpcy5tYXRlcmlhbElkLCB0aGlzLm1hdGVyaWFsU291cmNlLnNvdXJjZUlkLCB0aGlzLm1hdGVyaWFsU291cmNlLnNvdXJjZVR5cGUpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm11bHRpbWVkaWFTb3VyY2VzID0gW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogdGhpcy5pc01hdGVyaWFsWW91dHViZUxpbmsoKSB8fCB0aGlzLmlzTWF0ZXJpYWxBd3NMaW5rKCkgPyB0aGlzLm1hdGVyaWFsLmxpbmsgOiAodGhpcy5tYXRlcmlhbC5kb3dubG9hZFVybCB8fCAnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLmlzTWF0ZXJpYWxZb3V0dWJlTGluaygpID8gXCJ2aWRlby95b3V0dWJlXCIgOiAodGhpcy5pc01hdGVyaWFsQXdzTGluaygpID8gXCJ2aWRlby9tcDRcIiA6IHRoaXMubWF0ZXJpYWwuY29udGVudFR5cGUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlczogJydcclxuICAgICAgICAgICAgICAgICAgICAgICAgfV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzSW5saW5lVmlldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWF0ZXJpYWxZb3V0dWJlTGluaygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsVHlwZSA9ICdZT1VUVUJFJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNJbmxpbmVWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc01hdGVyaWFsQXdzTGluaygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsVHlwZSA9ICdWSURFTyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzSW5saW5lVmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbFR5cGUgPSB0aGlzLm1hdGVyaWFsLnR5cGVLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbFR5cGUgPT0gTWF0ZXJpYWxUeXBlS2V5RW51bVtNYXRlcmlhbFR5cGVLZXlFbnVtLlZJREVPXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxUeXBlID09IE1hdGVyaWFsVHlwZUtleUVudW1bTWF0ZXJpYWxUeXBlS2V5RW51bS5BVURJT10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzSW5saW5lVmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNYXRlcmlhbEVtcHR5ID0gdGhpcy5tYXRlcmlhbC5pZCAmJiB0aGlzLm1hdGVyaWFsLnR5cGVLZXkgIT09IE1hdGVyaWFsVHlwZUtleUVudW1bTWF0ZXJpYWxUeXBlS2V5RW51bS5MSU5LXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0aGlzLm1hdGVyaWFsLmZpbGVTdGF0dXMgfHwgdGhpcy5tYXRlcmlhbC5maWxlU3RhdHVzID09PSAnRU1QVFknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01hdGVyaWFsTm90UmVhZHkgPSAhdGhpcy5pc01hdGVyaWFsRW1wdHkgJiYgdGhpcy5tYXRlcmlhbC5pZCAmJiB0aGlzLm1hdGVyaWFsLnR5cGVLZXkgIT09IE1hdGVyaWFsVHlwZUtleUVudW1bTWF0ZXJpYWxUeXBlS2V5RW51bS5MSU5LXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5maWxlU3RhdHVzICYmIHRoaXMubWF0ZXJpYWwuZmlsZVN0YXR1cyAhPT0gJ0VNUFRZJyAmJiB0aGlzLm1hdGVyaWFsLmZpbGVTdGF0dXMgIT09ICdSRUFEWSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNWaWV3QWxsb3dlZCA9IHRoaXMubWF0ZXJpYWwubGluayAhPT0gJycgJiYgIXRoaXMuaXNNYXRlcmlhbEVtcHR5ICYmICF0aGlzLmlzTWF0ZXJpYWxOb3RSZWFkeTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXRlcmlhbExpbmtzID0gYW5ndWxhci5lbGVtZW50KCcuZG93bmxvYWQtbGluay1pY29uJykuZmluZCgnIycgKyBtYXRlcmlhbElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsTGlua3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb3dubG9hZEljb24gPSBtYXRlcmlhbExpbmtzLnBhcmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGljb25MaW5rID0gZG93bmxvYWRJY29uLmZpbmQoJy5kb3dubG9hZC1saW5rLWljb24tYScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkxpbmsuYXR0cihcImhyZWZcIiwgdGhpcy5tYXRlcmlhbC5kb3dubG9hZFVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNWaWV3QWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNYXRlcmlhbFlvdXR1YmVMaW5rKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnR5cGVLZXkgPT0gTWF0ZXJpYWxUeXBlS2V5RW51bVtNYXRlcmlhbFR5cGVLZXlFbnVtLkxJTktdICYmIE9iamVjdFR5cGVVdGlscy5pc1lvdXR1YmVVcmwodGhpcy5tYXRlcmlhbC5saW5rKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNYXRlcmlhbEF3c0xpbmsoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsICYmIHRoaXMubWF0ZXJpYWwudHlwZUtleSA9PSBNYXRlcmlhbFR5cGVLZXlFbnVtW01hdGVyaWFsVHlwZUtleUVudW0uTElOS10gJiYgT2JqZWN0VHlwZVV0aWxzLmlzQXdzVXJsKHRoaXMubWF0ZXJpYWwubGluayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5kUmljaFRleHRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmljaEVkaXRvcjogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5ID0gRG9tVXRpbHMuZmluZFBhcmVudFdpdGhBdHRyKHRoaXMuZWxlbWVudCwgXCJ2aHMtcmljaC10ZXh0LWJpbmRcIik7XHJcbiAgICAgICAgaWYgKCFyaWNoRWRpdG9yKSB7XHJcbiAgICAgICAgICAgIHJpY2hFZGl0b3IgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aEF0dHIodGhpcy5lbGVtZW50LCBcInRhLWJpbmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByaWNoRWRpdG9yID8gcmljaEVkaXRvci5hdHRyKCdpZCcpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRNYXRlcmlhbFNvdXJjZUluZm8oKTogSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJpY2hUZXh0QmluZENvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JpY2hUZXh0QmluZCBDb250cm9sbGVyIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcHJvbWlzZTogbmcuSVByb21pc2U8YW55PiA9IHRoaXMucmljaFRleHRCaW5kQ29udHJvbGxlci5nZXRFbWJlZGRlZE1hdGVyaWFsU291cmNlSW5mbygpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsU291cmNlID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJpY2hUZXh0QmluZENvbnRyb2xsZXIuZ2V0RW1iZWRkZWRNYXRlcmlhbFNlY3Rpb25JZCgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZoc01hdGVyaWFsU2VjdGlvbklkID0gaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb3dubG9hZENyb3NzT3JpZ2luQmxvYigpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLm1hdGVyaWFsLmRvd25sb2FkVXJsLnNlYXJjaChcImZpbGVuYW1lXCIpID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy5tYXRlcmlhbC5kb3dubG9hZFVybCwge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcclxuICAgICAgICAgICAgfSkudGhlbigociA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbci5kYXRhXSwge3R5cGU6IHIuZGF0YS50eXBlfSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgICAgICAgIGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgICAgICAgICBsaW5rLmlkID0gXCJ0ZW1wQmxvYkxpbmtcIlxyXG4gICAgICAgICAgICAgICAgbGluay50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG4gICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgdGhpcy5tYXRlcmlhbC5kb3dubG9hZFVybC5zcGxpdChcImZpbGVuYW1lPVwiKVsxXSk7XHJcbiAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICBsaW5rLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0VtYmVkZGVkTWF0ZXJpYWxEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc0VtYmVkZGVkTWF0ZXJpYWxEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNFbWJlZGRlZE1hdGVyaWFsQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBRVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzRW1iZWRkZWRNYXRlcmlhbENvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgaWQ6IFwiQD9cIixcclxuICAgICAgICAgICAgdmhzRG93bmxvYWRMaW5rOiBcIj0/XCIsXHJcbiAgICAgICAgICAgIHZoc0xpbmtUaXRsZTogXCJAP1wiLFxyXG4gICAgICAgICAgICB2aHNQZGZFeHBhbmRlZDogXCI9P1wiLFxyXG4gICAgICAgICAgICB2aHNFcHViRXhwYW5kZWQ6IFwiPT9cIixcclxuICAgICAgICAgICAgdmhzRW5hYmxlRG93bmxvYWQ6IFwiPT9cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLWVtYmVkZGVkLW1hdGVyaWFsLmh0bWxcIiksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzRW1iZWRkZWRNYXRlcmlhbERpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1JhbmRvbVV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvUmFuZG9tVXRpbHNcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQgSVByb21pc2UgPSBhbmd1bGFyLklQcm9taXNlO1xyXG5pbXBvcnQge1F1aXpTZXJ2aWNlfSBmcm9tIFwiLi4vcXVpenplcy9RdWl6U2VydmljZVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxDb250cm9sbGVyfSBmcm9tIFwiLi4vbWF0ZXJpYWxzL01hdGVyaWFsQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzRmlsbGFibGVGb3JtRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBmb3JtVXJsOiBzdHJpbmc7XHJcbiAgICBmb3JtTmFtZT86IHN0cmluZztcclxuICAgIHF1ZXN0aW9uSWQ6IG51bWJlcjtcclxuICAgIHBhcmVudFNhdmU6IGFueTtcclxuICAgIGFkb2JlQXBwRG9tYWluPzogc3RyaW5nO1xyXG4gICAgYWRvYmVDbGllbnRJZD86IHN0cmluZztcclxuXHJcbiAgICB2bT86IFZoc0ZpbGxhYmxlRm9ybURpcmVjdGl2ZUNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNGaWxsYWJsZUZvcm1EaXJlY3RpdmVDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgYWRvYmVEaXZJZDogc3RyaW5nO1xyXG4gICAgcHVibGljIGlzQWRkZWRWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcbiAgICBwdWJsaWMgYWRvYmVDbGllbnRJZEZvckJ1OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdmlld2VyQ29uZmlnOiBhbnkgPSB7XHJcbiAgICAgICAgc2hvd0Fubm90YXRpb25Ub29sczogZmFsc2UsXHJcbiAgICAgICAgc2hvd0Rvd25sb2FkUERGOiBmYWxzZSxcclxuICAgICAgICBzaG93UHJpbnRQREY6IGZhbHNlLFxyXG4gICAgICAgIHNob3dQYWdlQ29udHJvbHM6IHRydWVcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBRdWl6U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNGaWxsYWJsZUZvcm1EaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHF1aXpTZXJ2aWNlOiBRdWl6U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVzaW5lc3NVbml0c1NlcnZpY2U6IEJ1c2luZXNzVW5pdHNTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5hZG9iZURpdklkID0gUmFuZG9tVXRpbHMuZ2VuZXJhdGVSYW5kb21JZChcImFkb2JlLWRjLXZpZXctXCIpO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoKFwicXVlc3Rpb25JZFwiLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmluaXQodGhpcy4kc2NvcGUsIHRoaXMuZWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzRmlsbGFibGVGb3JtRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkpIHtcclxuICAgICAgICBlbGVtZW50WzBdLmlubmVySFRNTCA9IGVsZW1lbnRbMF0uaW5uZXJIVE1MLnJlcGxhY2UoXCI6YWRvYmUtZGMtdmlld1wiLCB0aGlzLmFkb2JlRGl2SWQpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRBZG9iZUNsaWVudElkQnlEb21haW4odGhpcy4kbG9jYXRpb24uYWJzVXJsKCkuc3BsaXQoJy8nKVsyXS5zcGxpdCgnOicpWzBdKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZG9iZUNsaWVudElkRm9yQnUgPSByZXN1bHQ7XHJcblxyXG4gICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGFkb2JlRENWaWV3ID0gbmV3ICg8YW55PndpbmRvdykuQWRvYmVEQy5WaWV3KHtcclxuICAgICAgICAgICAgICAgIGNsaWVudElkOiB0aGlzLmFkb2JlQ2xpZW50SWRGb3JCdSA/IHRoaXMuYWRvYmVDbGllbnRJZEZvckJ1IDogQXBwUHJvcGVydGllcy5hZG9iZURjQ2xpZW50SWQsXHJcbiAgICAgICAgICAgICAgICBkaXZJZDogdGhpcy5hZG9iZURpdklkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgcHJldmlld0ZpbGVQcm9taXNlID0gYWRvYmVEQ1ZpZXcucHJldmlld0ZpbGUoe1xyXG4gICAgICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGhpcy4kc2NvcGUuZm9ybVVybFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtZXRhRGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiB0aGlzLiRzY29wZS5mb3JtTmFtZSA/IHRoaXMuJHNjb3BlLmZvcm1OYW1lIDogXCJGaWxsYWJsZSBmb3JtXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcXVlSWQ6IHRoaXMuYWRvYmVEaXZJZFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB0aGlzLnZpZXdlckNvbmZpZyk7XHJcblxyXG4gICAgICAgICAgICBwcmV2aWV3RmlsZVByb21pc2UudGhlbihhZG9iZVZpZXdlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBhZG9iZVZpZXdlci5nZXRBUElzKCkudGhlbihhcGlzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhcGlzLmdldFpvb21BUElzKCkuc2V0Wm9vbUxldmVsKDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiBjb25zb2xlLmxvZyhyZXN1bHQpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gY29uc29sZS5sb2coZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNhdmVPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgYXV0b1NhdmVGcmVxdWVuY3k6IDAsXHJcbiAgICAgICAgICAgICAgICBlbmFibGVGb2N1c1BvbGxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2hvd1NhdmVCdXR0b246IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYWRvYmVEQ1ZpZXcucmVnaXN0ZXJDYWxsYmFjayhcclxuICAgICAgICAgICAgICAgICg8YW55PndpbmRvdykuQWRvYmVEQy5WaWV3LkVudW0uQ2FsbGJhY2tUeXBlLlNBVkVfQVBJLFxyXG4gICAgICAgICAgICAgICAgKG1ldGFEYXRhLCBjb250ZW50LCBvcHRpb25zKTogSVByb21pc2U8YW55PiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShjb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtYmVyQXJyYXkgPSBBcnJheTxudW1iZXI+KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdWludDhBcnJheS5mb3JFYWNoKGIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJBcnJheS5wdXNoKDxudW1iZXI+Yik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG51bWJlckFycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWV0YURhdGEuZmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3BkZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5wYXJlbnRTYXZlKGRhdGEsIHRoaXMuJHNjb3BlLnF1ZXN0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIEFkZCB5b3VyIGN1c3RvbSBzYXZlIGltcGxlbWVudGF0aW9uIGhlcmUuLi5hbmQgYmFzZWQgb24gdGhhdCByZXNvbHZlIG9yIHJlamVjdCByZXNwb25zZSBpbiBnaXZlbiBmb3JtYXQgKi9cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3ICg8YW55PndpbmRvdykuUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogKDxhbnk+d2luZG93KS5BZG9iZURDLlZpZXcuRW51bS5BcGlSZXNwb25zZUNvZGUuU1VDQ0VTUyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhRGF0YToge2ZpbGVOYW1lOiBtZXRhRGF0YS5maWxlTmFtZSB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNhdmVPcHRpb25zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNGaWxsYWJsZUZvcm1EaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc0ZpbGxhYmxlRm9ybURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0ZpbGxhYmxlRm9ybURpcmVjdGl2ZUNvbnRyb2xsZXIpIHtcclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzRmlsbGFibGVGb3JtRGlyZWN0aXZlQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBmb3JtVXJsOiBcIj1mb3JtVXJsXCIsXHJcbiAgICAgICAgICAgIGZvcm1OYW1lOiBcIj0/Zm9ybU5hbWVcIixcclxuICAgICAgICAgICAgcXVlc3Rpb25JZDogXCI9cXVlc3Rpb25JZFwiLFxyXG4gICAgICAgICAgICBwYXJlbnRTYXZlOiBcIj1zYXZpbmdNZXRob2RcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLWZpbGxhYmxlLWZvcm0uaHRtbFwiKSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNGaWxsYWJsZUZvcm1EaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge1VzZXJzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Vc2Vyc1JvdXRlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNHcm91cEVkaXRUb3BUYWJzU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBncm91cElkOiBudW1iZXI7XHJcbiAgICB0b3BNZW51S2V5OiBzdHJpbmc7XHJcbiAgICBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHZtPzogVmhzR3JvdXBFZGl0VG9wVGFic0NvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNHcm91cEVkaXRUb3BUYWJzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgRURJVF9UQUJfS0VZOiBzdHJpbmcgPSBcImVkaXRcIjtcclxuICAgIHB1YmxpYyBQRVJNSVNTSU9OU19UQUJfS0VZOiBzdHJpbmcgPSBcInBlcm1pc3Npb25zXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgVXNlcnNSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgJHNjb3BlOiBJVmhzR3JvdXBFZGl0VG9wVGFic1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHVzZXJzUm91dGVyOiBVc2Vyc1JvdXRlcikge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVG9wTWVudUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUudG9wTWVudUtleSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzR3JvdXBFZGl0VG9wVGFic0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzR3JvdXBFZGl0VG9wVGFic1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IElWaHNHcm91cEVkaXRUb3BUYWJzU2NvcGUpIHtcclxuICAgICAgICAvL3RvZG86XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNHcm91cEVkaXRUb3BUYWJzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBncm91cElkOiBcIj12aHNHcm91cElkXCIsXHJcbiAgICAgICAgICAgIHRvcE1lbnVLZXk6IFwiPXZoc1RvcE1lbnVLZXlcIixcclxuICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnM6IFwiPXZoc1N5c3RlbVBlcm1pc3Npb25zXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1ncm91cC1lZGl0LXRvcC10YWJzLmh0bWxcIiksXHJcbiAgICB9O1xyXG59XHJcblxyXG5WaHNHcm91cEVkaXRUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7RXZlbnR9IGZyb20gXCIuL21vZGVscy9FdmVudFwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrU2VydmljZX0gZnJvbSBcIi4uL2ludGVncmF0aW9uL2F6dXJlV2ViY2hhdEJvdGZyYW1ld29yay9BenVyZVdlYmNoYXRCb3RmcmFtZXdvcmtTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXBwUHJvcGVydGllc30gZnJvbSBcIi4uL3V0aWxzL0FwcFByb3BlcnRpZXNcIjtcclxuaW1wb3J0IHtJQm90U2V0dGluZ3N9IGZyb20gXCIuLi9pbnRlZ3JhdGlvbi9henVyZVdlYmNoYXRCb3RmcmFtZXdvcmsvbW9kZWwvSUJvdFNldHRpbmdzXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNIZWxwQm90RGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICB2bT86IFZoc0hlbHBCb3RDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzSGVscEJvdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBenVyZVdlYmNoYXRCb3RmcmFtZXdvcmtTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNIZWxwQm90RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrU2VydmljZTogQXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5IRUxQX0JPVF9PUEVOX0NMT1NFLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xyXG4gICAgICAgICAgICB0aGlzLm9uSGVscEJvdE9wZW4oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNIZWxwQm90RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZUhlbHBCb3QoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25IZWxwQm90T3BlbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLmF6dXJlV2ViY2hhdEJvdGZyYW1ld29ya1NlcnZpY2UuZ2V0U2V0dGluZ3MoKS50aGVuKChzZXR0aW5nczogSUJvdFNldHRpbmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAoPGFueT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjaGF0XCIpKS5zcmMgPSBcImh0dHBzOi8vd2ViY2hhdC5ib3RmcmFtZXdvcmsuY29tL2VtYmVkL1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKyBzZXR0aW5ncy5ib3RuYW1lICsgXCI/dD1cIiArIHNldHRpbmdzLnRva2VuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzSGVscEJvdERpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzSGVscEJvdERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0hlbHBCb3RDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0hlbHBCb3RDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7fSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtaGVscC1ib3QuaHRtbFwiKSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNIZWxwQm90RGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51Q29uZmlndXJhdG9yU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL01lbnVDb25maWd1cmF0b3JTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtJTWVudUdyb3VwfSBmcm9tIFwiLi9QZXJzb25hbE1lbnVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4uL2NvdXJzZXMvQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFNlcnZpY2V9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL0xlYXJuaW5nUGF0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtNYXRlcmlhbFNlcnZpY2V9IGZyb20gXCIuLi9tYXRlcmlhbHMvTWF0ZXJpYWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoUmVkaXJlY3RcIjtcclxuaW1wb3J0IHtIb21lUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Ib21lUm91dGVyXCI7XHJcbmltcG9ydCB7SU1lbnVDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vdXNlcnMvbW9kZWxzL0lNZW51Q29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1VzZXJSb2xlfSBmcm9tIFwiLi4vdXNlcnMvbW9kZWxzL1VzZXJSb2xlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNIb21lTWVudVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgdm0/OiBWaHNIb21lTWVudUNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNIb21lTWVudUNvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBob21lTWVudUJ5UGVybWlzc2lvbjogSU1lbnVHcm91cDtcclxuICAgIHB1YmxpYyBjdXJyZW50TWVudUl0ZW1LZXk6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVJdGVtTmFtZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBwcml2YXRlIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwcml2YXRlIHVzZXJCdXNpbmVzc1JvbGU6IHN0cmluZztcclxuICAgIHByaXZhdGUgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBpc0hpZGVIb21lTWVudTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwcml2YXRlIHJvdXRlQnVzaW5lc3NSb2xlOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIE1lbnVDb25maWd1cmF0b3JTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBNYXRlcmlhbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzSG9tZU1lbnVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG1lbnVDb25maWd1cmF0b3JTZXJ2aWNlOiBNZW51Q29uZmlndXJhdG9yU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoU2VydmljZTogTGVhcm5pbmdQYXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWF0ZXJpYWxTZXJ2aWNlOiBNYXRlcmlhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1lbnVJdGVtS2V5ID0gTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKTtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICBsZXQgc3lzdGVtUGVybWlzc2lvbnNQcm9taXNlID0gdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZUJ1c2luZXNzUm9sZSA9ICRsb2NhdGlvbi5zZWFyY2goKVtIb21lUm91dGVyLnJvbGVQYXJhbV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvdXRlQnVzaW5lc3NSb2xlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zUHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c2luZXNzVW5pdFJvbGUodGhpcy5yb3V0ZUJ1c2luZXNzUm9sZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJCdXNpbmVzc1JvbGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJvbGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSAhPT0gXCJMRUFSTkVSXCIgJiYgdGhpcy4kbG9jYXRpb24ucGF0aCgpID09PSBIb21lUm91dGVyLmhvbWVDb3Vyc2VzUm91dGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNIaWRlSG9tZU1lbnUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9uc1Byb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c2luZXNzVW5pdFJvbGUocm9sZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCRsb2NhdGlvbi5zZWFyY2goKVtDb3Vyc2VzUm91dGVyLkxPR09OX1JFUVVJUkVEXSkge1xyXG4gICAgICAgICAgICAgICAgYXV0aFJlZGlyZWN0LnJlZGlyZWN0VG9Mb2dPbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVZoc0hvbWVNZW51U2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEJ1c2luZXNzVW5pdFJvbGUocm9sZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyQnVzaW5lc3NSb2xlID0gcm9sZTtcclxuICAgICAgICBpZiAodGhpcy51c2VyQnVzaW5lc3NSb2xlID09PSBVc2VyUm9sZVtVc2VyUm9sZS5MRUFSTkVSXSkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldE1lbnVDb25maWd1cmF0aW9uKFVzZXJSb2xlW1VzZXJSb2xlLkxFQVJORVJdKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZW51Q29uZmlndXJhdGlvbjogSU1lbnVDb25maWd1cmF0aW9uID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNZW51QnlSb2xlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVNZW51SXRlbXMobWVudUNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlckJ1c2luZXNzUm9sZSA9PT0gVXNlclJvbGVbVXNlclJvbGUuQVRURU5ERUVfTUFOQUdFUl0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3lzdGVtUGVybWlzc2lvbnMubWFuYWdlQW55QnVzaW5lc3NVbml0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1lbnVCeVJvbGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0TWVudUNvbmZpZ3VyYXRpb24oVXNlclJvbGVbVXNlclJvbGUuQVRURU5ERUVfTUFOQUdFUl0pLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZW51Q29uZmlndXJhdGlvbjogSU1lbnVDb25maWd1cmF0aW9uID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TWVudUJ5Um9sZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZU1lbnVJdGVtc0ZvckF0dGVuZGVlKG1lbnVDb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRNZW51QnlSb2xlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGlkZU1lbnVJdGVtcyhtZW51Q29uZmlndXJhdGlvbjogSU1lbnVDb25maWd1cmF0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ob21lTWVudUJ5UGVybWlzc2lvbi5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZihpdGVtLmtleSA9PT0gTWVudUhlbHBlci5IT01FX0NPVVJTRVNfS0VZKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFsbG93ZWQgPSBtZW51Q29uZmlndXJhdGlvbi5oYXNMZWFybmVyQ291cnNlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihpdGVtLmtleSA9PT0gTWVudUhlbHBlci5IT01FX0xFQVJOSU5HX1BBVEhfS0VZKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFsbG93ZWQgPSBtZW51Q29uZmlndXJhdGlvbi5oYXNMZWFybmVyTGVhcm5pbmdQYXRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihpdGVtLmtleSA9PT0gTWVudUhlbHBlci5IT01FX01BVEVSSUFMU19LRVkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWxsb3dlZCA9IG1lbnVDb25maWd1cmF0aW9uLmhhc0xlYXJuZXJNYXRlcmlhbHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoaXRlbS5rZXkgPT09IE1lbnVIZWxwZXIuSE9NRV9GTEFTSENBUkRTX0tFWSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hbGxvd2VkID0gbWVudUNvbmZpZ3VyYXRpb24uaGFzTGVhcm5lckZsYXNoY2FyZHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhpZGVNZW51SXRlbXNGb3JBdHRlbmRlZShtZW51Q29uZmlndXJhdGlvbjogSU1lbnVDb25maWd1cmF0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ob21lTWVudUJ5UGVybWlzc2lvbi5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZihpdGVtLmtleSA9PT0gTWVudUhlbHBlci5IT01FX0FUVEVOREVFX01BTkFHRVJfQ09VUlNFU19LRVkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWxsb3dlZCA9IG1lbnVDb25maWd1cmF0aW9uLmhhc0xlYXJuZXJDb3Vyc2VzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGl0ZW0ua2V5ID09PSBNZW51SGVscGVyLkhPTUVfQVRURU5ERUVfTUFOQUdFUl9MRUFSTklOR19QQVRIU19LRVkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWxsb3dlZCA9IG1lbnVDb25maWd1cmF0aW9uLmhhc0xlYXJuZXJMZWFybmluZ1BhdGhzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRNZW51QnlSb2xlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaG9tZU1lbnVCeVBlcm1pc3Npb24gPSB0aGlzLm1lbnVDb25maWd1cmF0b3JTZXJ2aWNlLmdldEhvbWVNZW51QnlSb2xlKFxyXG4gICAgICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpLFxyXG4gICAgICAgICAgICB0aGlzLnVzZXJCdXNpbmVzc1JvbGUsXHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBtZW51R3JvdXAgPSB0aGlzLmhvbWVNZW51QnlQZXJtaXNzaW9uLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0ua2V5ID09PSB0aGlzLmN1cnJlbnRNZW51SXRlbUtleSkucG9wKCk7XHJcbiAgICAgICAgaWYgKG1lbnVHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNZW51SXRlbU5hbWUgPSBtZW51R3JvdXAubmFtZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VBbGxvd2VkRm9yTWVudShtZW51S2V5OiBzdHJpbmcsIGlzRXhpc3RWYWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaG9tZU1lbnVCeVBlcm1pc3Npb24uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0ua2V5ID09PSBtZW51S2V5ICYmIGlzRXhpc3RWYWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9QYWdlKGhvbWVVcmw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghaG9tZVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwoJy8nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaG9tZVVybCA9IGhvbWVVcmwucmVwbGFjZShcIiNcIiwgXCJcIik7XHJcbiAgICAgICAgaWYgKHRoaXMucm91dGVCdXNpbmVzc1JvbGUpIHtcclxuICAgICAgICAgICAgaG9tZVVybCArPSBcIj9cIiArIEhvbWVSb3V0ZXIucm9sZVBhcmFtICsgXCI9XCIgKyB0aGlzLnJvdXRlQnVzaW5lc3NSb2xlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwoaG9tZVVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUENWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDc2ODtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0hvbWVNZW51RGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNIb21lTWVudVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0hvbWVNZW51Q29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNIb21lTWVudUNvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1ob21lLW1lbnUuaHRtbFwiKSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNIb21lTWVudURpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUNvdXJzZVByb2dyZXNzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVByb2dyZXNzXCI7XHJcbmltcG9ydCB7SVNlY3Rpb259IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JU2VjdGlvblwiO1xyXG5pbXBvcnQgSUh0dHBTZXJ2aWNlID0gYW5ndWxhci5JSHR0cFNlcnZpY2U7XHJcbmltcG9ydCB7SUlMVFNlc3Npb25BdHRlbmRhbmNlfSBmcm9tIFwiLi4vaWx0L21vZGVscy9JSUxUU2Vzc2lvbkF0dGVuZGFuY2VcIjtcclxuaW1wb3J0IHtUaW1lWm9uZX0gZnJvbSBcIi4uL3dlYmluYXJzL21vZGVscy9UaW1lWm9uZVR5cGVcIjtcclxuaW1wb3J0IHtDb3Vyc2VJTFRTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VJTFRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c30gZnJvbSBcIi4uL2lsdC9tb2RlbHMvSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c1wiO1xyXG5pbXBvcnQge0lMVFNlc3Npb25BdHRlbmRhbmNlU3RhdHVzfSBmcm9tIFwiLi4vaWx0L21vZGVscy9JTFRTZXNzaW9uQXR0ZW5kYW5jZVN0YXR1c1wiO1xyXG5pbXBvcnQge0lJTFRTZXNzaW9uUGFydGljaXBhbnR9IGZyb20gXCIuLi9pbHQvbW9kZWxzL0lJTFRTZXNzaW9uUGFydGljaXBhbnRcIjtcclxuaW1wb3J0IHtJTFRTZXNzaW9uU3RhdHVzfSBmcm9tIFwiLi4vaWx0L21vZGVscy9JTFRTZXNzaW9uU3RhdHVzXCI7XHJcbmltcG9ydCB7U2VjdGlvblByb2dyZXNzU3RhdHVzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvU2VjdGlvblByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuL21vZGVscy9FdmVudFwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4vZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJSUxUU2Vzc2lvbn0gZnJvbSBcIi4uL2lsdC9tb2RlbHMvSUlMVFNlc3Npb25cIjtcclxuXHJcbmludGVyZmFjZSBWaHNJTFREaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGNvdXJzZVByb2dyZXNzOiBJQ291cnNlUHJvZ3Jlc3M7XHJcbiAgICBzZWN0aW9uOiBJU2VjdGlvbjtcclxuXHJcbiAgICB2bT86IFZoc0lMVERpcmVjdGl2ZUNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIElMVFNlc3Npb25BY3Rpb25Nb2RlIHtcclxuICAgIFRPX1RISVMsXHJcbiAgICBUT19GT0xMT1dJTkcsXHJcbiAgICBUT19BTExcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0lMVERpcmVjdGl2ZUNvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VQcm9ncmVzczogSUNvdXJzZVByb2dyZXNzO1xyXG4gICAgcHVibGljIHNlY3Rpb246IElTZWN0aW9uO1xyXG5cclxuICAgIHB1YmxpYyBzZXNzaW9uczogSUlMVFNlc3Npb25BdHRlbmRhbmNlW107XHJcbiAgICBwdWJsaWMgbW9kYWxTZXNzaW9uOiBJSUxUU2Vzc2lvbkF0dGVuZGFuY2U7XHJcbiAgICBwdWJsaWMgdGltZVpvbmUgPSBUaW1lWm9uZTtcclxuICAgIHB1YmxpYyBpc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyB1cGNvbWluZ1Nlc3Npb25zRXhpc3RzOiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzU2VsZlJlZ2lzdHJhdGlvbkFsbG93ZWRBdExlYXN0Rm9yQU9uZTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1NlbGZSZXBvcnRpbmdBbGxvd2VkQXRMZWFzdEZvckFPbmU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbGVhcm5lcklzUmVnaXN0ZXJlZEF0TGVhc3RGb3JPbmU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbGVhcm5lcklzV2FpdGxpc3RlZEF0TGVhc3RGb3JPbmU6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIElMVFNlc3Npb25BY3Rpb25Nb2RlID0gSUxUU2Vzc2lvbkFjdGlvbk1vZGU7XHJcbiAgICBwdWJsaWMgcmVnaXN0cmF0aW9uTW9kZTogSUxUU2Vzc2lvbkFjdGlvbk1vZGU7XHJcbiAgICBwdWJsaWMgY2FuY2VsaW5nTW9kZTogSUxUU2Vzc2lvbkFjdGlvbk1vZGU7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VJTFRTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IElIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjb3BlOiBWaHNJTFREaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VJTFRTZXJ2aWNlOiBDb3Vyc2VJTFRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuICAgICAgICAkc2NvcGUuJHdhdGNoR3JvdXAoW1xyXG4gICAgICAgICAgICBcImNvdXJzZVByb2dyZXNzXCIsXHJcbiAgICAgICAgICAgIFwic2VjdGlvblwiXHJcbiAgICAgICAgXSwgKG5ld1ZhbHVlOiBJU2VjdGlvbiwgb2xkVmFsdWU6IElTZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZURhdGFGcm9tU2NvcGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzID0gYW5ndWxhci5jb3B5KHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzKTtcclxuICAgICAgICB0aGlzLnNlY3Rpb24gPSBhbmd1bGFyLmNvcHkodGhpcy4kc2NvcGUuc2VjdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFNlc3Npb25zTGlzdCgpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFNlc3Npb25zTGlzdCgpOiBhbmd1bGFyLklQcm9taXNlPElJTFRTZXNzaW9uQXR0ZW5kYW5jZVtdPiB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuZ2V0U2Vzc2lvbnNMaXN0KHRoaXMuc2VjdGlvbi5jb3Vyc2VJZCwgdGhpcy5zZWN0aW9uLmlkKVxyXG4gICAgICAgICAgICAudGhlbigoc2Vzc2lvbnM6IElJTFRTZXNzaW9uQXR0ZW5kYW5jZVtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25zID0gYW5ndWxhci5jb3B5KHNlc3Npb25zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VXNlckluZm8oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFVzZXJJbmZvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXBjb21pbmdTZXNzaW9uc0V4aXN0cyA9IHRoaXMuc2Vzc2lvbnMuc29tZShzZXNzaW9uID0+IHNlc3Npb24uc3RhdHVzID09IElMVFNlc3Npb25TdGF0dXNbSUxUU2Vzc2lvblN0YXR1cy5TQ0hFRFVMRURdKTtcclxuICAgICAgICB0aGlzLmlzU2VsZlJlZ2lzdHJhdGlvbkFsbG93ZWRBdExlYXN0Rm9yQU9uZSA9IHRoaXMuc2Vzc2lvbnMuc29tZShzZXNzaW9uID0+XHJcbiAgICAgICAgICAgIHNlc3Npb24uc3RhdHVzID09IElMVFNlc3Npb25TdGF0dXNbSUxUU2Vzc2lvblN0YXR1cy5TQ0hFRFVMRURdXHJcbiAgICAgICAgICAgICYmIHNlc3Npb24uYWxsb3dTZWxmUmVnaXN0cmF0aW9uKTtcclxuICAgICAgICB0aGlzLmlzU2VsZlJlcG9ydGluZ0FsbG93ZWRBdExlYXN0Rm9yQU9uZSA9IHRoaXMuc2Vzc2lvbnMuc29tZShzZXNzaW9uID0+XHJcbiAgICAgICAgICAgIChzZXNzaW9uLnN0YXR1cyA9PSBJTFRTZXNzaW9uU3RhdHVzW0lMVFNlc3Npb25TdGF0dXMuU0NIRURVTEVEXSB8fCBzZXNzaW9uLnN0YXR1cyA9PSBJTFRTZXNzaW9uU3RhdHVzW0lMVFNlc3Npb25TdGF0dXMuRklOSVNIRURdKVxyXG4gICAgICAgICAgICAmJiBzZXNzaW9uLnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuUkVHSVNURVJFRF1cclxuICAgICAgICAgICAgJiYgc2Vzc2lvbi5hbGxvd1NlbGZSZXBvcnRpbmcpO1xyXG4gICAgICAgIHRoaXMubGVhcm5lcklzUmVnaXN0ZXJlZEF0TGVhc3RGb3JPbmUgPSB0aGlzLnNlc3Npb25zLnNvbWUoc2Vzc2lvbiA9PlxyXG4gICAgICAgICAgICBzZXNzaW9uLnN0YXR1cyA9PSBJTFRTZXNzaW9uU3RhdHVzW0lMVFNlc3Npb25TdGF0dXMuU0NIRURVTEVEXVxyXG4gICAgICAgICAgICAmJiBzZXNzaW9uLnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuUkVHSVNURVJFRF0pO1xyXG4gICAgICAgIHRoaXMubGVhcm5lcklzV2FpdGxpc3RlZEF0TGVhc3RGb3JPbmUgPSB0aGlzLnNlc3Npb25zLnNvbWUoc2Vzc2lvbiA9PlxyXG4gICAgICAgICAgICBzZXNzaW9uLnN0YXR1cyA9PSBJTFRTZXNzaW9uU3RhdHVzW0lMVFNlc3Npb25TdGF0dXMuU0NIRURVTEVEXVxyXG4gICAgICAgICAgICAmJiBzZXNzaW9uLnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuSU5fV0FJVF9MSVNUXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrUmVnaXN0ZXJPcHRpb25zKHNlc3Npb246IElJTFRTZXNzaW9uQXR0ZW5kYW5jZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1Nlcmllc1JlZ2lzdHJhdGlvbkVuYWJsZWQoc2Vzc2lvbikpXHJcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoc2Vzc2lvbik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVnaXN0cmF0aW9uTW9kZSA9IElMVFNlc3Npb25BY3Rpb25Nb2RlLlRPX1RISVM7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXNzaW9uID0gc2Vzc2lvbjtcclxuICAgICAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICAgICAkKFwiI3Nlcmllc1JlZ2lzdHJhdGlvbkRpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXIoc2Vzc2lvbjogSUlMVFNlc3Npb25BdHRlbmRhbmNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgcHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxJSUxUU2Vzc2lvblBhcnRpY2lwYW50PjtcclxuICAgICAgICBpZiAoc2Vzc2lvbi5yZWdpc3RyYXRpb25TdGF0dXMgPT0gSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c1tJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzLklOX1dBSVRfTElTVF0pIHtcclxuICAgICAgICAgICAgcHJvbWlzZSA9IHRoaXMuY291cnNlSUxUU2VydmljZS5jaGFuZ2VQYXJ0aWNpcGFudFN0YXR1cyh0aGlzLiRzY29wZS5jb3Vyc2VQcm9ncmVzcy5jb3Vyc2VJZCwgc2Vzc2lvbi5pZCxcclxuICAgICAgICAgICAgICAgIHNlc3Npb24ucGFydGljaXBhbnRJZCwgSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c1tJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzLlJFR0lTVEVSRURdLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwcm9taXNlID0gdGhpcy5jb3Vyc2VJTFRTZXJ2aWNlLmNyZWF0ZVBhcnRpY2lwYW50KHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzLmNvdXJzZUlkLCBzZXNzaW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuY291cnNlUHJvZ3Jlc3MudXNlcklkLCBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuUkVHSVNURVJFRF0sIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigocGFydGljaXBhbnQ6IElJTFRTZXNzaW9uUGFydGljaXBhbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJ0aWNpcGFudC5yZWdpc3RyYXRpb25TdGF0dXMgPT0gSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c1tJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzLlJFR0lTVEVSRURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIllvdSBoYXZlIGJlZW4gcmVnaXN0ZXJlZFwiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydGljaXBhbnQucmVnaXN0cmF0aW9uU3RhdHVzID09IElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5JTl9XQUlUX0xJU1RdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIlJlZ2lzdHJhdGlvbiBjYXBhY2l0eSBpcyByZWFjaGVkLiBZb3UgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSB3YWl0bGlzdFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkNPVVJTRV9QUk9HUkVTU19TRUNUSU9OX1BST0dSRVNTX1JFTE9BRF9QUk9HUkVTUyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja0NhbmNlbFJlZ2lzdHJhdGlvbk9wdGlvbnMoc2Vzc2lvbjogSUlMVFNlc3Npb25BdHRlbmRhbmNlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2FuY2VsU2VyaWVzRW5hYmxlZChzZXNzaW9uKSlcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxSZWdpc3RyYXRpb24oc2Vzc2lvbik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXNzaW9uID0gc2Vzc2lvbjtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxpbmdNb2RlID0gSUxUU2Vzc2lvbkFjdGlvbk1vZGUuVE9fVEhJUztcclxuICAgICAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICAgICAkKFwiI2NhbmNlbFNlcmllc1JlZ2lzdHJhdGlvbkRpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsUmVnaXN0cmF0aW9uKHNlc3Npb246IElJTFRTZXNzaW9uQXR0ZW5kYW5jZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgICAgICBcIllvdSBtYXkgbm90IGJlIGFibGUgdG8gam9pbiB0aGlzIHNlc3Npb24uXCIsIHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkFyZSB5b3Ugc3VyZT9cIixcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiWWVzXCIsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b246IFwiTm9cIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuZGVsZXRlUGFydGljaXBhbnQodGhpcy4kc2NvcGUuY291cnNlUHJvZ3Jlc3MuY291cnNlSWQsIHNlc3Npb24uaWQsIHNlc3Npb24ucGFydGljaXBhbnRJZClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJZb3UgaGF2ZSBiZWVuIHVucmVnaXN0ZXJlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGVtaXQoRXZlbnQuQ09VUlNFX1BST0dSRVNTX1NFQ1RJT05fUFJPR1JFU1NfUkVMT0FEX1BST0dSRVNTKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbFJlZ2lzdHJhdGlvblRvQWxsU2Vzc2lvbnNJblNlcmllcygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxpbmdNb2RlICE9IElMVFNlc3Npb25BY3Rpb25Nb2RlLlRPX1RISVMpIHtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0U2Vzc2lvbklkVG9EZWxldGUgPSB0aGlzLmNhbmNlbGluZ01vZGUgPT0gSUxUU2Vzc2lvbkFjdGlvbk1vZGUuVE9fRk9MTE9XSU5HID8gdGhpcy5tb2RhbFNlc3Npb24uaWQgOiBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcclxuICAgICAgICAgICAgICAgIFwiWW91IG1heSBub3QgYmUgYWJsZSB0byBqb2luIHNlc3Npb25zIGZyb20gdGhpcyBzZXJpZXNcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkFyZSB5b3Ugc3VyZT9cIixcclxuICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIlllc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuZGVsZXRlUGFydGljaXBhbnRzRnJvbVNlcmllcyh0aGlzLiRzY29wZS5jb3Vyc2VQcm9ncmVzcy5jb3Vyc2VJZCwgdGhpcy5tb2RhbFNlc3Npb24uc2VyaWVzSWQsIHN0YXJ0U2Vzc2lvbklkVG9EZWxldGUsIHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzLnVzZXJJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIllvdSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGVtaXQoRXZlbnQuQ09VUlNFX1BST0dSRVNTX1NFQ1RJT05fUFJPR1JFU1NfUkVMT0FEX1BST0dSRVNTKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgdGhpcy5jYW5jZWxSZWdpc3RyYXRpb24odGhpcy5tb2RhbFNlc3Npb24pO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsaW5nTW9kZSA9IElMVFNlc3Npb25BY3Rpb25Nb2RlLlRPX1RISVM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVNlc3Npb25BdHRlbmRhbmNlKHNlc3Npb246IElJTFRTZXNzaW9uQXR0ZW5kYW5jZSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBuZXdTdGF0dXM6IHN0cmluZyA9IHNlc3Npb24uYXR0ZW5kYW5jZVN0YXR1cyAhPSBJTFRTZXNzaW9uQXR0ZW5kYW5jZVN0YXR1c1tJTFRTZXNzaW9uQXR0ZW5kYW5jZVN0YXR1cy5BVFRFTkRFRF1cclxuICAgICAgICAgICAgPyBJTFRTZXNzaW9uQXR0ZW5kYW5jZVN0YXR1c1tJTFRTZXNzaW9uQXR0ZW5kYW5jZVN0YXR1cy5BVFRFTkRFRF1cclxuICAgICAgICAgICAgOiBJTFRTZXNzaW9uQXR0ZW5kYW5jZVN0YXR1c1tJTFRTZXNzaW9uQXR0ZW5kYW5jZVN0YXR1cy5NSVNTRURdO1xyXG4gICAgICAgIGxldCBzdWNjZXNzT3BlcmF0aW9uTWVzc2FnZTogc3RyaW5nID0gc2Vzc2lvbi5hdHRlbmRhbmNlU3RhdHVzICE9IElMVFNlc3Npb25BdHRlbmRhbmNlU3RhdHVzW0lMVFNlc3Npb25BdHRlbmRhbmNlU3RhdHVzLkFUVEVOREVEXVxyXG4gICAgICAgICAgICA/IFwiWW91IGNvbmZpcm1lZCB5b3VyIGF0dGVuZGFuY2VcIlxyXG4gICAgICAgICAgICA6IFwiWW91IGNvbmZpcm1lZCB5b3VyIGFic2VuY2VcIjtcclxuXHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY291cnNlSUxUU2VydmljZS5jaGFuZ2VQYXJ0aWNpcGFudEF0dGVuZGFuY2UodGhpcy4kc2NvcGUuY291cnNlUHJvZ3Jlc3MuY291cnNlSWQsIHNlc3Npb24uaWQsIHNlc3Npb24ucGFydGljaXBhbnRJZCwgbmV3U3RhdHVzKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKHN1Y2Nlc3NPcGVyYXRpb25NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkNPVVJTRV9QUk9HUkVTU19TRUNUSU9OX1BST0dSRVNTX1JFTE9BRF9QUk9HUkVTUyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VGltZVpvbmVPZmZzZXQodGltZVpvbmU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgbGV0IGxvY2FsVGltZTogbnVtYmVyID0gTWF0aC5mbG9vcigobm93LmdldFRpbWUoKSAvIDEwMDApKSAqIDEwMDA7XHJcbiAgICAgICAgbGV0IHRpbWVab25lVGltZTogbnVtYmVyID0gbmV3IERhdGUobm93LnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiB0aW1lWm9uZX0pKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIG5vdy5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDAgKyAobG9jYWxUaW1lIC0gdGltZVpvbmVUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRhdGVUb1RpbWVab25lRGF0ZSh0aW1lWm9uZTogYW55LCBkYXRlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBvZmZzZXQ7XHJcbiAgICAgICAgdGhpcy50aW1lWm9uZS5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodC5uYW1lID09IHRpbWVab25lKSB7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLmdldFRpbWVab25lT2Zmc2V0KHQudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIChkYXRlICsgbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDAgLSBvZmZzZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBYmJyZXZpYXRpb24odGltZVpvbmU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGFiYnJldmlhdGlvbjtcclxuICAgICAgICB0aGlzLnRpbWVab25lLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0Lm5hbWUgPT0gdGltZVpvbmUpIHtcclxuICAgICAgICAgICAgICAgIGFiYnJldmlhdGlvbiA9IHQuYWJicmV2aWF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFiYnJldmlhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2VjdGlvbkhlYWRlck1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUuc2VjdGlvbi5zdGF0dXMgPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5DT01QTEVURURdKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVwY29taW5nU2Vzc2lvbnNFeGlzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxlYXJuZXJJc1JlZ2lzdGVyZWRBdExlYXN0Rm9yT25lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxmUmVwb3J0aW5nQWxsb3dlZEF0TGVhc3RGb3JBT25lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIllvdSBhcmUgcmVnaXN0ZXJlZCBmb3IgdGhlIHNlc3Npb24ocykuIFBsZWFzZSBzdWJtaXQgeW91ciBhdHRlbmRhbmNlIGFmdGVyIHRoZSBzZXNzaW9uLlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIllvdSBhcmUgcmVnaXN0ZXJlZCBmb3IgdGhlIHNlc3Npb24ocykuIEluc3RydWN0b3Igd2lsbCBzdWJtaXQgeW91ciBhdHRlbmRhbmNlLlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxmUmVnaXN0cmF0aW9uQWxsb3dlZEF0TGVhc3RGb3JBT25lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlVwY29taW5nIHNlc3Npb25zIGFyZSBzY2hlZHVsZWQuIFBsZWFzZSBwcmVzcyBidXR0b24gUmVnaXN0ZXIgZm9yIHJlZ2lzdHJhdGlvbi5cIjtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJTZWxmLXJlZ2lzdHJhdGlvbiBmb3IgdXBjb21pbmcgc2Vzc2lvbihzKSBpc24ndCBhbGxvd2VkLiBZb3Ugd2lsbCByZWNlaXZlIG5vdGlmaWNhdGlvbiBlbWFpbCB3aGVuIGNvdXJzZSBhZG1pbmlzdHJhdG9yIHJlZ2lzdGVycyB5b3UuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiWW91IGhhdmUgYWxyZWFkeSBhdHRlbmRlZCB0aGUgc2Vzc2lvbi5cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUuc2VjdGlvbi5zdGF0dXMgPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5TVEFSVEVEXSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1NlbGZSZXBvcnRpbmdBbGxvd2VkQXRMZWFzdEZvckFPbmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIllvdSBhcmUgcmVnaXN0ZXJlZCBmb3IgdGhlIHNlc3Npb24ocykuIFBsZWFzZSBzdWJtaXQgeW91ciBhdHRlbmRhbmNlIGFmdGVyIHRoZSBzZXNzaW9uLlwiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiWW91IGFyZSByZWdpc3RlcmVkIGZvciB0aGUgc2Vzc2lvbihzKS4gSW5zdHJ1Y3RvciB3aWxsIHN1Ym1pdCB5b3VyIGF0dGVuZGFuY2UuXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCh0aGlzLiRzY29wZS5zZWN0aW9uLnN0YXR1cyA9PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLkFMTE9XRURdXHJcbiAgICAgICAgICAgIHx8IHRoaXMuJHNjb3BlLnNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuRkFJTEVEXSlcclxuICAgICAgICAgICAgJiYgIXRoaXMudXBjb21pbmdTZXNzaW9uc0V4aXN0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJUaGVyZSBhcmUgbm8gYXZhaWxhYmxlIHNlc3Npb25zIGF0IHRoZSBtb21lbnQuIFlvdSB3aWxsIHJlY2VpdmUgbm90aWZpY2F0aW9uIGVtYWlsIHdoZW4gYSBuZXcgc2Vzc2lvbiBpcyBzY2hlZHVsZWQuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5zZWN0aW9uLnN0YXR1cyA9PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLkFMTE9XRURdXHJcbiAgICAgICAgICAgIHx8IHRoaXMuJHNjb3BlLnNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuRkFJTEVEXSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sZWFybmVySXNXYWl0bGlzdGVkQXRMZWFzdEZvck9uZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiVXBjb21pbmcgc2Vzc2lvbnMgYXJlIHNjaGVkdWxlZC4gWW91IGhhdmUgYmVlbiBhZGRlZCB0byB3YWl0bGlzdCBmb3IgdGhlIHNlc3Npb24ocykuXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1NlbGZSZWdpc3RyYXRpb25BbGxvd2VkQXRMZWFzdEZvckFPbmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlVwY29taW5nIHNlc3Npb25zIGFyZSBzY2hlZHVsZWQuIFBsZWFzZSBwcmVzcyBidXR0b24gUmVnaXN0ZXIgZm9yIHJlZ2lzdHJhdGlvbi5cIjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlNlbGYtcmVnaXN0cmF0aW9uIGZvciB1cGNvbWluZyBzZXNzaW9uKHMpIGlzbid0IGFsbG93ZWQuIFlvdSB3aWxsIHJlY2VpdmUgbm90aWZpY2F0aW9uIGVtYWlsIHdoZW4gY291cnNlIGFkbWluaXN0cmF0b3IgcmVnaXN0ZXJzIHlvdS5cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2Vzc2lvbk1lc3NhZ2Uoc2Vzc2lvbjogSUlMVFNlc3Npb25BdHRlbmRhbmNlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoc2Vzc2lvbi5zdGF0dXMgPT0gSUxUU2Vzc2lvblN0YXR1c1tJTFRTZXNzaW9uU3RhdHVzLlNDSEVEVUxFRF1cclxuICAgICAgICAgICAgJiYgIXNlc3Npb24uYWxsb3dTZWxmUmVnaXN0cmF0aW9uXHJcbiAgICAgICAgICAgICYmIChzZXNzaW9uLnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICB8fCBzZXNzaW9uLnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuSU5fV0FJVF9MSVNUXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiU2VsZiAtIHJlZ2lzdHJhdGlvbiBpcyBOL0FcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb24uc3RhdHVzID09IElMVFNlc3Npb25TdGF0dXNbSUxUU2Vzc2lvblN0YXR1cy5TQ0hFRFVMRURdXHJcbiAgICAgICAgICAgICYmIHNlc3Npb24uYWxsb3dTZWxmUmVnaXN0cmF0aW9uXHJcbiAgICAgICAgICAgICYmIChzZXNzaW9uLnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICB8fCBzZXNzaW9uLnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuSU5fV0FJVF9MSVNUXSlcclxuICAgICAgICAgICAgJiYgIXNlc3Npb24uZW5hYmxlV2FpdGxpc3RcclxuICAgICAgICAgICAgJiYgc2Vzc2lvbi5yZWdpc3RyYW50c0NvdW50ID49IHNlc3Npb24ubWF4aW11bUNhcGFjaXR5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlJlZ2lzdHJhdGlvbiBpcyBjbG9zZWQuIFNlc3Npb24gY2FwYWNpdHkgaXMgcmVhY2hlZFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvbi5zdGF0dXMgPT0gSUxUU2Vzc2lvblN0YXR1c1tJTFRTZXNzaW9uU3RhdHVzLlNDSEVEVUxFRF1cclxuICAgICAgICAgICAgJiYgc2Vzc2lvbi5hbGxvd1NlbGZSZWdpc3RyYXRpb25cclxuICAgICAgICAgICAgJiYgc2Vzc2lvbi5yZWdpc3RyYXRpb25TdGF0dXMgPT0gbnVsbFxyXG4gICAgICAgICAgICAmJiBzZXNzaW9uLmVuYWJsZVdhaXRsaXN0XHJcbiAgICAgICAgICAgICYmIHNlc3Npb24ubWF4aW11bUNhcGFjaXR5ICYmIHNlc3Npb24ucmVnaXN0cmFudHNDb3VudCA+PSBzZXNzaW9uLm1heGltdW1DYXBhY2l0eSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTZXNzaW9uIGNhcGFjaXR5IGlzIHJlYWNoZWQuIFlvdSB3aWxsIGJlIGFkZGVkIHRvIHRoZSB3YWl0bGlzdFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvbi5zdGF0dXMgPT0gSUxUU2Vzc2lvblN0YXR1c1tJTFRTZXNzaW9uU3RhdHVzLlNDSEVEVUxFRF1cclxuICAgICAgICAgICAgJiYgc2Vzc2lvbi5yZWdpc3RyYXRpb25TdGF0dXMgPT0gSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c1tJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzLklOX1dBSVRfTElTVF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiWW91IGFyZSBpbiB0aGUgd2FpdGxpc3RcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb24uc3RhdHVzID09IElMVFNlc3Npb25TdGF0dXNbSUxUU2Vzc2lvblN0YXR1cy5TQ0hFRFVMRURdXHJcbiAgICAgICAgICAgICYmIHNlc3Npb24ucmVnaXN0cmF0aW9uU3RhdHVzID09IElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5SRUdJU1RFUkVEXVxyXG4gICAgICAgICAgICAmJiAhc2Vzc2lvbi5hbGxvd1NlbGZSZXBvcnRpbmdcclxuICAgICAgICAgICAgJiYgIXNlc3Npb24uYWxsb3dTZWxmUmVnaXN0cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIllvdSBhcmUgcmVnaXN0ZXJlZFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNSZWdpc3RlckJ1dHRvblZpc2libGUoc2Vzc2lvbjogSUlMVFNlc3Npb25BdHRlbmRhbmNlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHNlc3Npb24uc3RhdHVzID09IElMVFNlc3Npb25TdGF0dXNbSUxUU2Vzc2lvblN0YXR1cy5TQ0hFRFVMRURdXHJcbiAgICAgICAgICAgICYmIHNlc3Npb24uYWxsb3dTZWxmUmVnaXN0cmF0aW9uXHJcbiAgICAgICAgICAgICYmIChzZXNzaW9uLnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICB8fCBzZXNzaW9uLnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuSU5fV0FJVF9MSVNUXSlcclxuICAgICAgICAgICAgJiYgKHNlc3Npb24ubWF4aW11bUNhcGFjaXR5ID09IG51bGwgfHwgc2Vzc2lvbi5tYXhpbXVtQ2FwYWNpdHkgPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB8fCBzZXNzaW9uLnJlZ2lzdHJhbnRzQ291bnQgPCBzZXNzaW9uLm1heGltdW1DYXBhY2l0eSB8fCBzZXNzaW9uLmVuYWJsZVdhaXRsaXN0ICYmIHNlc3Npb24ucmVnaXN0cmF0aW9uU3RhdHVzID09IG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0NhbmNlbEJ1dHRvblZpc2libGUoc2Vzc2lvbjogSUlMVFNlc3Npb25BdHRlbmRhbmNlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHNlc3Npb24uc3RhdHVzID09IElMVFNlc3Npb25TdGF0dXNbSUxUU2Vzc2lvblN0YXR1cy5TQ0hFRFVMRURdXHJcbiAgICAgICAgICAgICYmIChzZXNzaW9uLnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuSU5fV0FJVF9MSVNUXVxyXG4gICAgICAgICAgICAgICAgfHwgc2Vzc2lvbi5yZWdpc3RyYXRpb25TdGF0dXMgPT0gSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c1tJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzLlJFR0lTVEVSRURdKVxyXG4gICAgICAgICAgICAmJiBzZXNzaW9uLmFsbG93U2VsZlJlZ2lzdHJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDYW5jZWxTZXJpZXNFbmFibGVkKHNlc3Npb246IElJTFRTZXNzaW9uQXR0ZW5kYW5jZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzZXNzaW9uLnN0YXR1cyA9PSBJTFRTZXNzaW9uU3RhdHVzW0lMVFNlc3Npb25TdGF0dXMuU0NIRURVTEVEXVxyXG4gICAgICAgICAgICAmJiAoc2Vzc2lvbi5yZWdpc3RyYXRpb25TdGF0dXMgPT0gSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c1tJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzLklOX1dBSVRfTElTVF1cclxuICAgICAgICAgICAgICAgIHx8IHNlc3Npb24ucmVnaXN0cmF0aW9uU3RhdHVzID09IElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5SRUdJU1RFUkVEXSlcclxuICAgICAgICAgICAgJiYgc2Vzc2lvbi5hbGxvd1NlbGZSZWdpc3RyYXRpb24gJiYgdGhpcy5nZXRJbHRTZXNzaW9uVG9SZW1vdmluZ0Zyb21TZXJpZXMoc2Vzc2lvbikubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNBdHRlbmRDb250cm9sVmlzaWJsZShzZXNzaW9uOiBJSUxUU2Vzc2lvbkF0dGVuZGFuY2UpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHNlc3Npb24uc3RhdHVzID09IElMVFNlc3Npb25TdGF0dXNbSUxUU2Vzc2lvblN0YXR1cy5TQ0hFRFVMRURdIHx8IHNlc3Npb24uc3RhdHVzID09IElMVFNlc3Npb25TdGF0dXNbSUxUU2Vzc2lvblN0YXR1cy5GSU5JU0hFRF0pXHJcbiAgICAgICAgICAgICYmIHNlc3Npb24ucmVnaXN0cmF0aW9uU3RhdHVzID09IElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5SRUdJU1RFUkVEXVxyXG4gICAgICAgICAgICAmJiBzZXNzaW9uLmFsbG93U2VsZlJlcG9ydGluZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZXJpZXNSZWdpc3RyYXRpb25FbmFibGVkKHNlc3Npb246IElJTFRTZXNzaW9uQXR0ZW5kYW5jZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChzZXNzaW9uLnNlcmllc0lkICE9IG51bGxcclxuICAgICAgICAgICAgJiYgc2Vzc2lvbi5hbGxvd1NlbGZSZWdpc3RyYXRpb25cclxuICAgICAgICAgICAgJiYgc2Vzc2lvbi5zdGF0dXMgPT0gSUxUU2Vzc2lvblN0YXR1c1tJTFRTZXNzaW9uU3RhdHVzLlNDSEVEVUxFRF1cclxuICAgICAgICAgICAgJiYgc2Vzc2lvbi5yZWdpc3RyYXRpb25TdGF0dXMgPT0gbnVsbFxyXG4gICAgICAgICAgICAmJiAoc2Vzc2lvbi5tYXhpbXVtQ2FwYWNpdHkgPT0gbnVsbCB8fCBzZXNzaW9uLm1heGltdW1DYXBhY2l0eSA9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIHx8IHNlc3Npb24ucmVnaXN0cmFudHNDb3VudCA8IHNlc3Npb24ubWF4aW11bUNhcGFjaXR5KSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SWx0U2Vzc2lvbnNGb3JTZXJpZXMoc2Vzc2lvbikgIT0gbnVsbDtcclxuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJUb0FsbFNlc3Npb25zSW5UaGVTZXJpZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZWdpc3RyYXRpb25Nb2RlICE9IElMVFNlc3Npb25BY3Rpb25Nb2RlLlRPX1RISVMpIHtcclxuICAgICAgICAgICAgbGV0IHByb21pc2U6IGFuZ3VsYXIuSVByb21pc2U8SUlMVFNlc3Npb25QYXJ0aWNpcGFudFtdPjtcclxuICAgICAgICAgICAgbGV0IGlsdFNlc3Npb25zOiBJSUxUU2Vzc2lvbkF0dGVuZGFuY2VbXSA9IHRoaXMuZ2V0SWx0U2Vzc2lvbnNGb3JTZXJpZXModGhpcy5tb2RhbFNlc3Npb24pO1xyXG4gICAgICAgICAgICBsZXQgaWx0U2Vzc2lvbnNJZHM6IG51bWJlcltdID0gW107XHJcbiAgICAgICAgICAgIGlmIChpbHRTZXNzaW9ucyAhPSBudWxsICYmIGlsdFNlc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlsdFNlc3Npb25zLmZvckVhY2gocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZ2lzdHJhdGlvbk1vZGUgPT0gSUxUU2Vzc2lvbkFjdGlvbk1vZGUuVE9fRk9MTE9XSU5HICYmIHJlc3VsdC5zdGFydERhdGUgPj0gdGhpcy5tb2RhbFNlc3Npb24uc3RhcnREYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRoaXMucmVnaXN0cmF0aW9uTW9kZSA9PSBJTFRTZXNzaW9uQWN0aW9uTW9kZS5UT19BTEwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICBpbHRTZXNzaW9uc0lkcy5wdXNoKHJlc3VsdC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHByb21pc2UgPSB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuY3JlYXRlU2VyaWVzUGFydGljaXBhbnRzKHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzLmNvdXJzZUlkLCB0aGlzLm1vZGFsU2Vzc2lvbi5zZXJpZXNJZCwgdGhpcy4kc2NvcGUuY291cnNlUHJvZ3Jlc3MudXNlcklkLFxyXG4gICAgICAgICAgICAgICAgICAgIElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5SRUdJU1RFUkVEXSwgdHJ1ZSwgaWx0U2Vzc2lvbnNJZHMpO1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChwYXJ0aWNpcGFudDogSUlMVFNlc3Npb25QYXJ0aWNpcGFudFtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJZb3UgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgdG8gYWxsIHNlc3Npb25zIGluIHRoZSBzZXJpZXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkNPVVJTRV9QUk9HUkVTU19TRUNUSU9OX1BST0dSRVNTX1JFTE9BRF9QUk9HUkVTUyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgdGhpcy5yZWdpc3Rlcih0aGlzLm1vZGFsU2Vzc2lvbik7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RyYXRpb25Nb2RlID0gSUxUU2Vzc2lvbkFjdGlvbk1vZGUuVE9fVEhJUztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldElsdFNlc3Npb25zRm9yU2VyaWVzKHNlc3Npb246IElJTFRTZXNzaW9uQXR0ZW5kYW5jZSk6IElJTFRTZXNzaW9uW10ge1xyXG4gICAgICAgIGxldCBpbHRTZXNzaW9ucyA9IHRoaXMuc2Vzc2lvbnMuZmlsdGVyKHJlc3VsdCA9PiByZXN1bHQuc2VyaWVzSWQgPT0gc2Vzc2lvbi5zZXJpZXNJZFxyXG4gICAgICAgICAgICAmJiBzZXNzaW9uLnNlcmllc0lkICE9IG51bGxcclxuICAgICAgICAgICAgJiYgcmVzdWx0LnN0YXR1cyA9PSBJTFRTZXNzaW9uU3RhdHVzW0lMVFNlc3Npb25TdGF0dXMuU0NIRURVTEVEXVxyXG4gICAgICAgICAgICAmJiByZXN1bHQucmVnaXN0cmF0aW9uU3RhdHVzICE9IElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5SRUdJU1RFUkVEXSk7XHJcbiAgICAgICAgaWYgKGlsdFNlc3Npb25zLmxlbmd0aCA+IDAgJiYgaWx0U2Vzc2lvbnMuZXZlcnkocmVzdWx0ID0+IHJlc3VsdC5zdGF0dXMgPT0gSUxUU2Vzc2lvblN0YXR1c1tJTFRTZXNzaW9uU3RhdHVzLlNDSEVEVUxFRF1cclxuICAgICAgICAgICAgJiYgcmVzdWx0LnJlZ2lzdHJhdGlvblN0YXR1cyA9PSBudWxsXHJcbiAgICAgICAgICAgICYmIChyZXN1bHQubWF4aW11bUNhcGFjaXR5ID09IG51bGwgfHwgcmVzdWx0Lm1heGltdW1DYXBhY2l0eSA9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIHx8IHJlc3VsdC5yZWdpc3RyYW50c0NvdW50IDwgcmVzdWx0Lm1heGltdW1DYXBhY2l0eSkpKVxyXG4gICAgICAgICAgICByZXR1cm4gaWx0U2Vzc2lvbnM7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRJbHRTZXNzaW9uVG9SZW1vdmluZ0Zyb21TZXJpZXMoc2Vzc2lvbjogSUlMVFNlc3Npb25BdHRlbmRhbmNlKTogSUlMVFNlc3Npb25BdHRlbmRhbmNlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb25zLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LnNlcmllc0lkID09IHNlc3Npb24uc2VyaWVzSWRcclxuICAgICAgICAgICAgJiYgc2Vzc2lvbi5zZXJpZXNJZCAhPSBudWxsXHJcbiAgICAgICAgICAgICYmIHJlc3VsdC5zdGF0dXMgPT0gSUxUU2Vzc2lvblN0YXR1c1tJTFRTZXNzaW9uU3RhdHVzLlNDSEVEVUxFRF1cclxuICAgICAgICAgICAgJiYgKHJlc3VsdC5yZWdpc3RyYXRpb25TdGF0dXMgPT0gSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c1tJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzLlJFR0lTVEVSRURdXHJcbiAgICAgICAgICAgICAgICB8fCByZXN1bHQucmVnaXN0cmF0aW9uU3RhdHVzID09IElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5JTl9XQUlUX0xJU1RdKVxyXG4gICAgICAgICAgICAmJiByZXN1bHQuc3RhcnREYXRlID4gc2Vzc2lvbi5zdGFydERhdGUpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTW9iaWxlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA3Njc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNJTFREaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogVmhzSUxURGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzSUxURGlyZWN0aXZlQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzSUxURGlyZWN0aXZlQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBjb3Vyc2VQcm9ncmVzczogXCI9dmhzQ291cnNlUHJvZ3Jlc3NcIixcclxuICAgICAgICAgICAgc2VjdGlvbjogXCI9dmhzU2VjdGlvblwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtaWx0Lmh0bWxcIilcclxuICAgIH1cclxufVxyXG5cclxuVmhzSUxURGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQgSVdpbmRvd1NlcnZpY2UgPSBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlO1xyXG5pbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi9idW5kbGVzL0J1bmRsZVNlcnZpY2VcIjtcclxuXHJcbmludGVyZmFjZSBWaHNJbWFnZUNyb3BwZXJEaXJlY3RpdmUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBhc3BlY3RSYXRpbzogbnVtYmVyO1xyXG4gICAgc291cmNlSW1hZ2U/OiBhbnk7XHJcbiAgICBjcm9wcGVkRmlsZTogRmlsZTtcclxuICAgIG1vZGFsSWQ6IHN0cmluZztcclxuXHJcbiAgICB2bTogVmhzSW1hZ2VDcm9wcGVyRGlyZWN0aXZlQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0ltYWdlQ3JvcHBlckRpcmVjdGl2ZUNvbnRyb2xsZXIge1xyXG5cclxuICAgIHByaXZhdGUgaXNTY2FsZWRYOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzU2NhbGVkWTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBmaWxlRXh0ZW5zaW9uOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGNyb3BwZXI6IGFueTtcclxuICAgIHByaXZhdGUgaXNNb2RhbFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNDcm9wcGVyRXhpc3RzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1bmRsZVNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogVmhzSW1hZ2VDcm9wcGVyRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBJV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidW5kbGVTZXJ2aWNlOiBCdW5kbGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgJCgnIycgKyB0aGlzLiRzY29wZS5tb2RhbElkKS5vbignc2hvd24uYnMubW9kYWwnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ3JvcHBlckV4aXN0cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wcGVyRGVzdHJveSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNNb2RhbFZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmdldEZpbGVFeHRlbnNpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0Q3JvcHBlcigpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCcjJyArIHRoaXMuJHNjb3BlLm1vZGFsSWQpLm9uKCdoaWRlLmJzLm1vZGFsJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzTW9kYWxWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY3JvcHBlckRlc3Ryb3koKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoKFwic291cmNlSW1hZ2VcIiwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAob2xkVmFsdWUgIT0gbmV3VmFsdWUgJiYgdGhpcy4kc2NvcGUuc291cmNlSW1hZ2UgIT0gdW5kZWZpbmVkICYmIHRoaXMuaXNNb2RhbFZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmNyb3BwZWRGaWxlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZSA9IHRoaXMuJHNjb3BlLnNvdXJjZUltYWdlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiRzY29wZS5zb3VyY2VJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBidW5kbGVTZXJ2aWNlLmdldEltYWdlRnJvbVVybCh0aGlzLiRzY29wZS5zb3VyY2VJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJChcIiNjcm9wcGVyQXJlYVwiKS5hdHRyKFwic3JjXCIsIFVSTC5jcmVhdGVPYmplY3RVUkwoc291cmNlKSkubG9hZCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcm9wcGVyRGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RmlsZUV4dGVuc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdENyb3BwZXIoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHNjb3BlLnNvdXJjZUltYWdlID09IHVuZGVmaW5lZCAmJiB0aGlzLmlzQ3JvcHBlckV4aXN0cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wcGVyRGVzdHJveSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXRDcm9wcGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNDcm9wcGVyRXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICBsZXQgaW1hZ2UgPSA8SFRNTENhbnZhc0VsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcm9wcGVyQXJlYVwiKTtcclxuICAgICAgICB0aGlzLmNyb3BwZXIgPSBuZXcgQ3JvcHBlcihpbWFnZSwge1xyXG4gICAgICAgICAgICBhc3BlY3RSYXRpbzogdGhpcy4kc2NvcGUuYXNwZWN0UmF0aW8sXHJcbiAgICAgICAgICAgIG1vZGFsOiB0cnVlLFxyXG4gICAgICAgICAgICB2aWV3TW9kZTogMFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcm9wcGVyU2F2ZUJ1dHRvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNyb3BwZXJTYXZlKCk7XHJcbiAgICAgICAgJChcIiNpbWFnZUNyb3BwZXJNb2RhbFwiKS5tb2RhbChcImhpZGVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWxlRXh0ZW5zaW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBzb3VyY2VJbWFnZU5hbWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiRzY29wZS5zb3VyY2VJbWFnZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICBzb3VyY2VJbWFnZU5hbWUgPSB0aGlzLiRzY29wZS5zb3VyY2VJbWFnZS5pbmRleE9mKFwiP1wiKSA+IDBcclxuICAgICAgICAgICAgICAgID8gdGhpcy4kc2NvcGUuc291cmNlSW1hZ2Uuc3Vic3RyaW5nKDAsIHRoaXMuJHNjb3BlLnNvdXJjZUltYWdlLmluZGV4T2YoXCI/XCIpKVxyXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VJbWFnZU5hbWUgPSB0aGlzLiRzY29wZS5zb3VyY2VJbWFnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzb3VyY2VJbWFnZU5hbWUgPSB0aGlzLiRzY29wZS5zb3VyY2VJbWFnZS5uYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNvdXJjZUltYWdlTmFtZS5zcGxpdChcIi5cIikucG9wKCkgPT0gXCJqcGdcIikge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVFeHRlbnNpb24gPSBcImpwZWdcIlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUV4dGVuc2lvbiA9IHNvdXJjZUltYWdlTmFtZS5zcGxpdChcIi5cIikucG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vY3JvcHBlciBmdW5jdGlvbmFsaXR5XHJcblxyXG4gICAgcHVibGljIHNjYWxlWSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNTY2FsZWRZKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JvcHBlci5zY2FsZVkoLTEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JvcHBlci5zY2FsZVkoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNTY2FsZWRZID0gIXRoaXMuaXNTY2FsZWRZO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzY2FsZVgoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzU2NhbGVkWCkge1xyXG4gICAgICAgICAgICB0aGlzLmNyb3BwZXIuc2NhbGVYKC0xKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNyb3BwZXIuc2NhbGVYKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzU2NhbGVkWCA9ICF0aGlzLmlzU2NhbGVkWDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbW92ZUxlZnQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jcm9wcGVyLm1vdmUoLTEwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbW92ZVJpZ2h0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3JvcHBlci5tb3ZlKDEwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbW92ZVRvcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNyb3BwZXIubW92ZSgwLCAtMTApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlQm90KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3JvcHBlci5tb3ZlKDAsIDEwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgem9vbUluKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3JvcHBlci56b29tKDAuMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHpvb21PdXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jcm9wcGVyLnpvb20oLTAuMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJvdGF0ZUxlZnQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jcm9wcGVyLnJvdGF0ZSgtNDUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByb3RhdGVSaWdodCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNyb3BwZXIucm90YXRlKDQ1KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JvcHBlckNyb3AoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jcm9wcGVyLmNyb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JvcHBlckNsZWFyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3JvcHBlci5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBidG5SZXN0b3JlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3JvcHBlci5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcm9wcGVyU2F2ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNyb3BwZXIuZ2V0Q3JvcHBlZENhbnZhcyh7XHJcbiAgICAgICAgICAgIGZpbGxDb2xvcjogJyNmZmYnXHJcbiAgICAgICAgfSkudG9CbG9iKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0Lmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuJHNjb3BlLnNvdXJjZUltYWdlLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5uYW1lID0gdGhpcy4kc2NvcGUuc291cmNlSW1hZ2UubmFtZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5uYW1lID0gdGhpcy4kc2NvcGUuc291cmNlSW1hZ2UuaW5kZXhPZihcIj9cIikgPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiRzY29wZS5zb3VyY2VJbWFnZS5zdWJzdHJpbmcodGhpcy4kc2NvcGUuc291cmNlSW1hZ2UubGFzdEluZGV4T2YoXCIvXCIpICsgMSwgdGhpcy4kc2NvcGUuc291cmNlSW1hZ2UuaW5kZXhPZihcIj9cIikpXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiRzY29wZS5zb3VyY2VJbWFnZS5zdWJzdHJpbmcodGhpcy4kc2NvcGUuc291cmNlSW1hZ2UubGFzdEluZGV4T2YoXCIvXCIpICsgMSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuY3JvcHBlZEZpbGUgPSA8RmlsZT5yZXN1bHQ7XHJcbiAgICAgICAgfSwgJ2ltYWdlL2pwZWcnLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JvcHBlckRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0Nyb3BwZXJFeGlzdHMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNyb3BwZXIuZGVzdHJveSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzSW1hZ2VDcm9wcGVyRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IFZoc0ltYWdlQ3JvcHBlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNJbWFnZUNyb3BwZXJEaXJlY3RpdmVDb250cm9sbGVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNJbWFnZUNyb3BwZXJEaXJlY3RpdmVDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGFzcGVjdFJhdGlvOiBcIj12aHNBc3BlY3RSYXRpb1wiLFxyXG4gICAgICAgICAgICBzb3VyY2VJbWFnZTogXCI9P3Zoc1NvdXJjZUltYWdlXCIsXHJcbiAgICAgICAgICAgIGNyb3BwZWRGaWxlOiBcIj0/dmhzQ3JvcHBlZEltYWdlXCIsXHJcbiAgICAgICAgICAgIG1vZGFsSWQ6IFwiPXZoc01vZGFsSWRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLWltYWdlLWNyb3BwZXIuaHRtbFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5WaHNJbWFnZUNyb3BwZXJEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge0lDb3Vyc2VQcm9ncmVzc30gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VQcm9ncmVzc1wiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge0lVc2VyQ2VydGlmaWNhdGV9IGZyb20gXCIuLi9wZXJzb25hbC9tb2RlbHMvSVVzZXJDZXJ0aWZpY2F0ZVwiO1xyXG5pbXBvcnQge1BlcnNvbmFsU2VydmljZX0gZnJvbSBcIi4uL3BlcnNvbmFsL1BlcnNvbmFsU2VydmljZVwiO1xyXG5pbXBvcnQgSVdpbmRvd1NlcnZpY2UgPSBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4uL2NvdXJzZXMvQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge1Byb2dyZXNzU2VydmljZX0gZnJvbSBcIi4uL2NvdXJzZXMvUHJvZ3Jlc3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuL21vZGVscy9FdmVudFwiXHJcbmltcG9ydCB7UmFuZG9tVXRpbHN9IGZyb20gXCIuLi91dGlscy9SYW5kb21VdGlsc1wiO1xyXG5pbXBvcnQgSVFTZXJ2aWNlID0gYW5ndWxhci5JUVNlcnZpY2U7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7QnVzaW5lc3NVbml0c1NlcnZpY2V9IGZyb20gXCIuLi9idXNpbmVzc1VuaXRzL0J1c2luZXNzVW5pdHNTZXJ2aWNlXCI7XHJcblxyXG5pbnRlcmZhY2UgSVZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0NlcnRpZmljYXRlc0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgY291cnNlOiBJQ291cnNlO1xyXG4gICAgY291cnNlUHJvZ3Jlc3NlczogSUNvdXJzZVByb2dyZXNzW107XHJcbiAgICBzZWxlY3RlZFByb2dyZXNzSWQ6IG51bWJlcjtcclxuICAgIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBjdXJyZW50VXNlcjogSVVzZXJJbmZvO1xyXG4gICAgY291cnNlQ2VydGlmaWNhdGVzOiBJU2VsZWN0YWJsZVtdO1xyXG4gICAgdXNlckNlcnRpZmljYXRlczogSVVzZXJDZXJ0aWZpY2F0ZVtdO1xyXG4gICAgdm0/OiBWaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzQ2VydGlmaWNhdGVzQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIHNlcmlhbDtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlO1xyXG4gICAgcHVibGljIGNvdXJzZVByb2dyZXNzZXM6IElDb3Vyc2VQcm9ncmVzc1tdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkUHJvZ3Jlc3NJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHNlbGVjdGVkUHJvZ3Jlc3M6IElDb3Vyc2VQcm9ncmVzcztcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGNvdXJzZVByb2dyZXNzZXNNYXBwZWRCeUlkOiBNYXA8bnVtYmVyLCBJQ291cnNlUHJvZ3Jlc3M+O1xyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcbiAgICBwdWJsaWMgY291cnNlQ2VydGlmaWNhdGVzOiBJU2VsZWN0YWJsZVtdO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyQ2VydGlmaWNhdGVzOiBBcnJheTxJVXNlckNlcnRpZmljYXRlPjtcclxuXHJcbiAgICBwdWJsaWMgaXNVc2VyUHJvZ3Jlc3NMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlQnV0dG9uczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIGNlcnRpZmljYXRlQ29udGVudDogc3RyaW5nO1xyXG4gICAgcHVibGljIGNlcnRpZmljYXRlUGFyYW1ldGVyczogYW55ID0ge1xyXG4gICAgICAgIGZvcm1hdDogJ3BkZicsXHJcbiAgICAgICAgY2VydGlmaWNhdGVUeXBlOiAnY29tcGxldGlvbidcclxuICAgIH07XHJcbiAgICBwdWJsaWMgYXBpQXBwbGljYXRpb25Vcmw6IHN0cmluZyA9ICcnO1xyXG4gICAgcHVibGljIGRvbWFpbnNNYXA6IE1hcDxudW1iZXIsIHN0cmluZz4gPSBudWxsO1xyXG4gICAgcHVibGljIHNoYXJlZENlcnRpZmljYXRlOiBJVXNlckNlcnRpZmljYXRlO1xyXG4gICAgcHVibGljIHNoYXJlZFVybDogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgdXJsRm9yRmFjZWJvb2s6IHN0cmluZyA9ICcnO1xyXG4gICAgcHVibGljIHVybEZvckxpbmtlZEluOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgUGVyc29uYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFByb2dyZXNzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyAkc2NvcGU6IElWaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkcTogSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljICR3aW5kb3c6IElXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHBlcnNvbmFsU2VydmljZTogUGVyc29uYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcHJvZ3Jlc3NTZXJ2aWNlOiBQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnVzaW5lc3NVbml0c1NlcnZpY2U6IEJ1c2luZXNzVW5pdHNTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc2VyaWFsID0gUmFuZG9tVXRpbHMuZ2VuZXJhdGVSYW5kb21JZChcIlwiKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuXHJcbiAgICAgICAgbGV0IHRtcFVybCA9IEFwcFByb3BlcnRpZXMuc2VydmljZVJvb3Quc3BsaXQoJ1xcL1xcLycpWzFdLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRBbGxCdURvbWFpbnMoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tYWluc01hcCA9IHJlcztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5hcGlBcHBsaWNhdGlvblVybCA9ICh0bXBVcmwubGVuZ3RoID09IDMgJiYgdG1wVXJsWzBdLmluZGV4T2YoJ3Zocy10ZXN0JykgPT09IC0xID8gdG1wVXJsW3RtcFVybC5sZW5ndGggLSAyXSArICcuJyArIHRtcFVybFt0bXBVcmwubGVuZ3RoIC0gMV0gOiB0bXBVcmwuam9pbignLicpKSArICdhcGkvJztcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoR3JvdXAoW1wiY291cnNlUHJvZ3Jlc3Nlc1wiLCBcInVzZXJDZXJ0aWZpY2F0ZXNcIiwgXCJjb3Vyc2VDZXJ0aWZpY2F0ZXNcIl0sIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBvbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YUZyb21TY29wZSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZURhdGFGcm9tU2NvcGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2UgPSB0aGlzLiRzY29wZS5jb3Vyc2U7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc2VzID0gdGhpcy4kc2NvcGUuY291cnNlUHJvZ3Jlc3NlcztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCA9IHRoaXMuJHNjb3BlLnNlbGVjdGVkUHJvZ3Jlc3NJZDtcclxuICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gdGhpcy4kc2NvcGUuc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHRoaXMuJHNjb3BlLmN1cnJlbnRVc2VyO1xyXG4gICAgICAgIHRoaXMuY291cnNlQ2VydGlmaWNhdGVzID0gdGhpcy4kc2NvcGUuY291cnNlQ2VydGlmaWNhdGVzO1xyXG4gICAgICAgIGlmICh0aGlzLmNvdXJzZUNlcnRpZmljYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVQYXJhbWV0ZXJzLmNlcnRpZmljYXRlSWQgPSB0aGlzLmNvdXJzZUNlcnRpZmljYXRlc1swXS5pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLnVzZXJDZXJ0aWZpY2F0ZXMgJiYgIWFuZ3VsYXIuZXF1YWxzKHRoaXMuJHNjb3BlLnVzZXJDZXJ0aWZpY2F0ZXMsIHRoaXMudXNlckNlcnRpZmljYXRlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVCdXR0b25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXNlckNlcnRpZmljYXRlcyA9IHRoaXMuJHNjb3BlLnVzZXJDZXJ0aWZpY2F0ZXM7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlUHJvZ3Jlc3NlcyAmJiB0aGlzLmNvdXJzZVByb2dyZXNzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3MgPSB0aGlzLmNvdXJzZVByb2dyZXNzZXMuZmlsdGVyKHAgPT4gcC5pZCA9PT0gdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQpLnBvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzVXNlclByb2dyZXNzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaWV3VXNlckNlcnRpZmljYXRlc1Blcm1pc3Npb25zR3JhbnRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFByb2dyZXNzICYmICh0aGlzLmN1cnJlbnRVc2VyLmlkID09IHRoaXMuc2VsZWN0ZWRQcm9ncmVzcy51c2VySWRcclxuICAgICAgICAgICAgfHwgdGhpcy5jb3Vyc2UucGVybWlzc2lvbnMudmlld090aGVyVXNlcnNQcm9ncmVzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzR2VuZXJhdGVDZXJ0aWZpY2F0ZXNQZXJtaXNzaW9uc0dyYW50ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgJiYgdGhpcy5zZWxlY3RlZFByb2dyZXNzICYmIChcclxuICAgICAgICAgICAgKHRoaXMuc3lzdGVtUGVybWlzc2lvbnMuZ2VuZXJhdGVDb3Vyc2VzTXlDZXJ0aWZpY2F0ZXMgJiYgdGhpcy5jdXJyZW50VXNlci5pZCA9PSB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3MudXNlcklkKVxyXG4gICAgICAgICAgICB8fCB0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmdlbmVyYXRlQ291cnNlc090aGVyc0NlcnRpZmljYXRlcyAmJiB0aGlzLmN1cnJlbnRVc2VyLmlkICE9IHRoaXMuc2VsZWN0ZWRQcm9ncmVzcy51c2VySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb3dubG9hZFVzZXJDZXJ0aWZpY2F0ZShpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UuZG93bmxvYWRDZXJ0aWZpY2F0ZShpZCkudGhlbihyZXN1bHQgPT4gdGhpcy4kd2luZG93Lm9wZW4ocmVzdWx0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVVzZXJDZXJ0aWZpY2F0ZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJEbyB5b3Ugd2FudCB0byByZW1vdmUgdGhlIGNlcnRpZmljYXRlcz9cIiwge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJSZW1vdmUgY2VydGlmaWNhdGVzXCJcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVCdXR0b25zID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnJlbW92ZVVzZXJDZXJ0aWZpY2F0ZXModGhpcy5jb3Vyc2UuaWQsIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVXNlciBjZXJ0aWZpY2F0ZXMgaGF2ZSBiZWVuIHJlbW92ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdChFdmVudC5DT1VSU0VfUFJPR1JFU1NfUkVMT0FEX1BST0dSRVNTKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VyUHJvZ3Jlc3NMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvd25sb2FkQ291cnNlVHJhbnNjcmlwdFJlcG9ydCgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGFyYW1ldGVyczogYW55ID0ge1xyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMuY291cnNlUHJvZ3Jlc3Nlcy5maWx0ZXIocCA9PiBwLmlkID09IHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkKVswXS51c2VySWQsXHJcbiAgICAgICAgICAgIGNvdXJzZUlkOiB0aGlzLmNvdXJzZS5pZCxcclxuICAgICAgICAgICAgY291cnNlUHJvZ3Jlc3NJZDogdGhpcy5zZWxlY3RlZFByb2dyZXNzSWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmRvd25sb2FkQ291cnNlVHJhbnNjcmlwdFJlcG9ydChwYXJhbWV0ZXJzKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4ocmVzdWx0KVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2VydGlmaWNhdGUoZG93bmxvYWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGFyYW1ldGVyczogYW55ID0gdGhpcy5nZXRQYXJhbWV0ZXJzKCk7XHJcbiAgICAgICAgaWYgKGRvd25sb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuJHEuYWxsKFtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5kb3dubG9hZENlcnRpZmljYXRlKHBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAudGhlbigocHJvbWlzZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkb3dubG9hZENlcnRVcmw6IHN0cmluZyA9IHByb21pc2VzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5vcGVuKGRvd25sb2FkQ2VydFVybCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkNPVVJTRV9QUk9HUkVTU19SRUxPQURfUFJPR1JFU1MpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVycy5mb3JtYXQgPSAncG5nJztcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmRvd25sb2FkQ2VydGlmaWNhdGUocGFyYW1ldGVycylcclxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNlcnRpZmljYXRlQ29udGVudCA9IFwiPGltZyBzdHlsZT1cXFwid2lkdGg6IDEwMCU7XFxcIiBzcmM9XFxcIlwiICsgcmVzdWx0ICsgXCJcXFwiLz5cIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlQ2VydGlmaWNhdGVGb3JVc2VyKCk6IGFuZ3VsYXIuSVByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVCdXR0b25zID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLnNhdmVDZXJ0aWZpY2F0ZUZvclVzZXIodGhpcy5nZXRQYXJhbWV0ZXJzKCkpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2F2ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkNPVVJTRV9QUk9HUkVTU19SRUxPQURfUFJPR1JFU1MpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYXJhbWV0ZXJzKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY291cnNlSWQ6IHRoaXMuY291cnNlLmlkLFxyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMuc2VsZWN0ZWRQcm9ncmVzcy51c2VySWQsXHJcbiAgICAgICAgICAgIHByb2dyZXNzSWQ6IHRoaXMuc2VsZWN0ZWRQcm9ncmVzcy5pZCxcclxuICAgICAgICAgICAgY2VydGlmaWNhdGVJZDogdGhpcy5jZXJ0aWZpY2F0ZVBhcmFtZXRlcnMuY2VydGlmaWNhdGVJZCxcclxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLmNlcnRpZmljYXRlUGFyYW1ldGVycy5mb3JtYXQsXHJcbiAgICAgICAgICAgIGNlcnRpZmljYXRlVHlwZTogdGhpcy5jZXJ0aWZpY2F0ZVBhcmFtZXRlcnMuY2VydGlmaWNhdGVUeXBlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29weVZlcmlmaWNhdGlvbkxpbmsoY2VydGlmaWNhdGU6IElVc2VyQ2VydGlmaWNhdGUpIHtcclxuICAgICAgICBsZXQgdGV4dCA9IHRoaXMuZ2V0VmVyaWZpY2F0aW9uUGFnZShjZXJ0aWZpY2F0ZSk7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtKTtcclxuICAgICAgICBlbGVtLnZhbHVlID0gXCJcIiArIHRleHQ7XHJcbiAgICAgICAgZWxlbS5zZWxlY3QoKTtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VmVyaWZpY2F0aW9uUGFnZShjZXJ0aWZpY2F0ZTogSVVzZXJDZXJ0aWZpY2F0ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmRvbWFpbnNNYXAgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgbGV0IHNwbGl0ZWRVcmwgPSBBcHBQcm9wZXJ0aWVzLnNlcnZpY2VSb290LnNwbGl0KCdcXC9cXC8nKVsxXS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICBsZXQgZG9tYWluID0gc3BsaXRlZFVybC5sZW5ndGggPT09IDMgPyBzcGxpdGVkVXJsWzBdICsgJy4nIDogJyc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRvbWFpbnNNYXAgJiYgY2VydGlmaWNhdGUuYnVzaW5lc3NVbml0SWQgJiYgdGhpcy5kb21haW5zTWFwW2NlcnRpZmljYXRlLmJ1c2luZXNzVW5pdElkXSkge1xyXG4gICAgICAgICAgICAgICAgZG9tYWluID0gdGhpcy5kb21haW5zTWFwW2NlcnRpZmljYXRlLmJ1c2luZXNzVW5pdElkXSArICcuJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gQXBwUHJvcGVydGllcy5zZXJ2aWNlUm9vdC5zcGxpdCgnXFwvXFwvJylbMF0gKyAnLy8nICsgZG9tYWluICsgKHRoaXMuYXBpQXBwbGljYXRpb25VcmwuaW5kZXhPZihcInZocy10ZXN0XCIpICE9PSAtMSAmJiBkb21haW4gPyB0aGlzLmFwaUFwcGxpY2F0aW9uVXJsLnJlcGxhY2Uoc3BsaXRlZFVybFswXSArICcuJywgJycpIDogdGhpcy5hcGlBcHBsaWNhdGlvblVybCkgKyBgdmVyaWZpY2F0aW9uL2NlcnRpZmljYXRlLyR7Y2VydGlmaWNhdGUudXVpZH1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd1NoYXJlRGlhbG9nKGNlcnRpZmljYXRlOiBJVXNlckNlcnRpZmljYXRlKSB7XHJcbiAgICAgICAgdGhpcy5zaGFyZWRDZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlO1xyXG4gICAgICAgIHRoaXMuc2hhcmVkVXJsID0gdGhpcy5nZXRWZXJpZmljYXRpb25QYWdlKGNlcnRpZmljYXRlKTtcclxuICAgICAgICB0aGlzLnVybEZvckZhY2Vib29rID0gdGhpcy4kc2NlLnRydXN0QXNSZXNvdXJjZVVybChgaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvc2hhcmVfYnV0dG9uLnBocD9ocmVmPSR7dGhpcy5zaGFyZWRVcmwgKyAnP2xhdGVzdCd9JmxheW91dD1idXR0b24mc2l6ZT1sYXJnZSZ3aWR0aD03NyZoZWlnaHQ9MjgmYXBwSWRgKTtcclxuICAgICAgICB0aGlzLmdldExpbmtGb3JMaW5rZWRJbigpO1xyXG4gICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI3NoYXJlRGlhbG9nXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTaGFyZURpYWxvZygpIHtcclxuICAgICAgICB0aGlzLnNoYXJlZENlcnRpZmljYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNoYXJlZFVybCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy51cmxGb3JGYWNlYm9vayA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy51cmxGb3JMaW5rZWRJbiA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREYXRlKGRhdGU6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEV4cGlyYXRpb25EYXRlRm9yVXJsKGRhdGU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJydcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmFsaWRUbyA9IG5ldyBEYXRlKGRhdGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gJyZleHBpcmF0aW9uWWVhcj0nICsgdmFsaWRUby5nZXRGdWxsWWVhcigpICsgJyZleHBpcmF0aW9uTW9udGg9JyArIHZhbGlkVG8uZ2V0TW9udGgoKSA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRMaW5rRm9yTGlua2VkSW4oKSB7XHJcbiAgICAgICAgY29uc3QgYnVzaW5lc3NVbml0SWQgPSB0aGlzLnNoYXJlZENlcnRpZmljYXRlLmJ1c2luZXNzVW5pdElkID8gdGhpcy5zaGFyZWRDZXJ0aWZpY2F0ZS5idXNpbmVzc1VuaXRJZCA6IDE7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRCeUlkKGJ1c2luZXNzVW5pdElkKS50aGVuKGJ1c2luZXNzVW5pdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXJsRm9yTGlua2VkSW4gPSAnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3Byb2ZpbGUvYWRkP3N0YXJ0VGFzaz1DRVJUSUZJQ0FUSU9OX05BTUUmbmFtZT0nXHJcbiAgICAgICAgICAgICAgICArIHRoaXMuc2hhcmVkQ2VydGlmaWNhdGUudGl0bGUgKyAnJm9yZ2FuaXphdGlvbk5hbWU9JyArIGJ1c2luZXNzVW5pdC5uYW1lICsgJyZpc3N1ZVllYXI9J1xyXG4gICAgICAgICAgICAgICAgKyB0aGlzLmdldERhdGUodGhpcy5zaGFyZWRDZXJ0aWZpY2F0ZS5yZWNlaXB0RGF0ZSkuZ2V0RnVsbFllYXIoKSArICcmaXNzdWVNb250aD0nXHJcbiAgICAgICAgICAgICAgICArIHRoaXMuZ2V0RGF0ZSh0aGlzLnNoYXJlZENlcnRpZmljYXRlLnJlY2VpcHREYXRlKS5nZXRNb250aCgpICsgdGhpcy5nZXRFeHBpcmF0aW9uRGF0ZUZvclVybCh0aGlzLnNoYXJlZENlcnRpZmljYXRlLnZhbGlkVG9EYXRlKVxyXG4gICAgICAgICAgICAgICAgKyAnJmNlcnRVcmw9JyArIHRoaXMuc2hhcmVkVXJsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzQ2VydGlmaWNhdGVzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzQ2VydGlmaWNhdGVzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzQ2VydGlmaWNhdGVzQ29udHJvbGxlcikge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0NlcnRpZmljYXRlc0NvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgY291cnNlOiBcIj1cIixcclxuICAgICAgICAgICAgY291cnNlUHJvZ3Jlc3NlczogXCI9XCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkUHJvZ3Jlc3NJZDogXCI9XCIsXHJcbiAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zOiBcIj1cIixcclxuICAgICAgICAgICAgY3VycmVudFVzZXI6IFwiPVwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VDZXJ0aWZpY2F0ZXM6IFwiPVwiLFxyXG4gICAgICAgICAgICB1c2VyQ2VydGlmaWNhdGVzOiBcIj1cIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1pbmRpdmlkdWFsLWNvdXJzZS1wcm9ncmVzcy1jZXJ0aWZpY2F0ZXMuaHRtbFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5WaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuXHJcblxyXG4iLCJpbXBvcnQge1Byb2dyZXNzU2VydmljZX0gZnJvbSBcIi4uL2NvdXJzZXMvUHJvZ3Jlc3NTZXJ2aWNlXCI7XHJcbmltcG9ydCBJUVNlcnZpY2UgPSBhbmd1bGFyLklRU2VydmljZTtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZH0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lTZWN0aW9uSW5IaWVyYXJjaHlcIjtcclxuaW1wb3J0IHtJSW5kaXZpZHVhbFNlY3Rpb25Qcm9ncmVzc30gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzXCI7XHJcbmltcG9ydCB7U2VjdGlvblByb2dyZXNzU3RhdHVzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvU2VjdGlvblByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7U2VjdGlvblR5cGV9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9TZWN0aW9uVHlwZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4vbW9kZWxzL0V2ZW50XCJcclxuaW1wb3J0IHtRdWl6Q29ycmVjdEFuc3dlcnNUeXBlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvUXVpekNvcnJlY3RBbnN3ZXJzVHlwZVwiO1xyXG5pbXBvcnQge0NvdXJzZURldGFpbHNVdGlsc30gZnJvbSBcIi4uL2NvdXJzZXMvQ291cnNlRGV0YWlsc1V0aWxzXCI7XHJcbmltcG9ydCB7SUluZGl2aWR1YWxRdWl6UmVzdWx0fSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSUluZGl2aWR1YWxRdWl6UmVzdWx0XCI7XHJcbmltcG9ydCB7UXVpelNlcnZpY2V9IGZyb20gXCIuLi9xdWl6emVzL1F1aXpTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SUNvdXJzZVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSUNvdXJzZVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SUNvdXJzZVByb2dyZXNzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVByb2dyZXNzXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0lTZWN0aW9ufSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSVNlY3Rpb25cIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0NvbmZpcm1hdGlvbkFyZ3N9IGZyb20gXCIuL2RpYWxvZy9Db25maXJtYXRpb25EaWFsb2dcIjtcclxuaW1wb3J0IHtRdWl6UmVzdWx0U3RhdHVzfSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvUXVpelJlc3VsdFN0YXR1c1wiO1xyXG5pbXBvcnQge0lQYWdlfSBmcm9tIFwiLi4vSVBhZ2VcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQXNzZXNzbWVudH0gZnJvbSBcIi4uL2Fzc2Vzc21lbnRzL21vZGVscy9JQXNzZXNzbWVudFwiO1xyXG5pbXBvcnQge0lUaW1lb3V0U2VydmljZX0gZnJvbSBcImFuZ3VsYXJcIjtcclxuXHJcblxyXG5pbnRlcmZhY2UgSVZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0RldGFpbHNEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGNvdXJzZTogSUNvdXJzZTtcclxuICAgIGNvdXJzZVByb2dyZXNzZXM6IElDb3Vyc2VQcm9ncmVzc1tdO1xyXG4gICAgY291cnNlU2VjdGlvbnM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdO1xyXG4gICAgc2VjdGlvblByb2dyZXNzZXM6IElJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzW107XHJcbiAgICBzZWxlY3RlZFByb2dyZXNzSWQ6IG51bWJlcjtcclxuICAgIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBjb3Vyc2VQZXJtaXNzaW9uczogSUNvdXJzZVBlcm1pc3Npb25zO1xyXG4gICAgdm0/OiBWaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NEZXRhaWxzQ29udHJvbGxlcjtcclxuICAgIHNlbGVjdGVkVXNlckZ1bGxOYW1lPzogc3RyaW5nO1xyXG4gICAgcXVpenplc0FyZUxvYWRpbmc6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkV2l0aFByb2dyZXNzIGV4dGVuZHMgSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkIHtcclxuICAgIHByb2dyZXNzPzogSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3M7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NEZXRhaWxzQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIGNvdXJzZTogSUNvdXJzZTtcclxuICAgIHB1YmxpYyBjb3Vyc2VQcm9ncmVzc2VzOiBJQ291cnNlUHJvZ3Jlc3NbXTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFByb2dyZXNzSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFByb2dyZXNzOiBJQ291cnNlUHJvZ3Jlc3M7XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgY291cnNlUGVybWlzc2lvbnM6IElDb3Vyc2VQZXJtaXNzaW9ucztcclxuXHJcbiAgICBwdWJsaWMgY291cnNlU2VjdGlvbnM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdID0gW107XHJcbiAgICBwdWJsaWMgc2VjdGlvblByb2dyZXNzZXM6IElJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzW10gPSBbXTtcclxuICAgIHB1YmxpYyBzZWN0aW9uUHJvZ3Jlc3NCeVNlY3Rpb25JZDogTWFwPG51bWJlciwgSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3M+ID0gbmV3IE1hcDxudW1iZXIsIElJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzPigpO1xyXG5cclxuICAgIHB1YmxpYyBxdWl6UmVzdWx0czogSUluZGl2aWR1YWxRdWl6UmVzdWx0W10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgc2VjdGlvblByb2dyZXNzQWxsb3dlZFN0YXR1c2VzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHVibGljIHNlY3Rpb25Qcm9ncmVzc05ld1N0YXR1czogc3RyaW5nO1xyXG4gICAgcHVibGljIHNlbGVjdGVkU2VjdGlvblByb2dyZXNzOiBJSW5kaXZpZHVhbFNlY3Rpb25Qcm9ncmVzcztcclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRRdWl6RGV0YWlsczogSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3M7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRRdWl6UmVzdWx0SWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBpc0Rpc2FibGVCdXR0b25zOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFF1aXpEZXRhaWxzSW5Qb3B1cDogSUluZGl2aWR1YWxRdWl6UmVzdWx0O1xyXG4gICAgcHVibGljIHNob3dRdWl6RGV0YWlsc0hlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBxdWl6UmVzdWx0c0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJSW5kaXZpZHVhbFF1aXpSZXN1bHQ+O1xyXG4gICAgcHVibGljIHF1aXpSZXN1bHRzUGFnZVNpemU6IG51bWJlciA9IDU7XHJcblxyXG4gICAgcHVibGljIHJvd1Nob3c6IE1hcDxudW1iZXIsIGJvb2xlYW4+ID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgaXNTaG93UXVpelJlc3VsdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzU2hvd1F1aXpSZXN1bHRNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBxdWl6emVzQXJlTG9hZGluZzogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBQcm9ncmVzc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBRdWl6U2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cCxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkc2NvcGU6IElWaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NEZXRhaWxzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgJHE6IElRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkdGltZW91dDogSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHByb2dyZXNzU2VydmljZTogUHJvZ3Jlc3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHF1aXpTZXJ2aWNlOiBRdWl6U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsU2VydmljZTogVXJsU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVHcmlkTW9kZWwoKTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiR3YXRjaEdyb3VwKFtcclxuICAgICAgICAgICAgXCJzZWxlY3RlZFByb2dyZXNzSWRcIixcclxuICAgICAgICAgICAgXCJjb3Vyc2VQcm9ncmVzc2VzXCIsXHJcbiAgICAgICAgICAgIFwic2VjdGlvblByb2dyZXNzZXNcIlxyXG4gICAgICAgIF0sICgobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgICQoXCIjcXVpelJlc3VsdHNEaWFsb2dcIikub24oXCJoaWRkZW4uYnMubW9kYWxcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc1Nob3dRdWl6UmVzdWx0TW9kYWwgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWl6emVzQXJlTG9hZGluZyA9IHRoaXMuJHNjb3BlLnF1aXp6ZXNBcmVMb2FkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEYXRhRnJvbVNjb3BlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291cnNlID0gdGhpcy4kc2NvcGUuY291cnNlO1xyXG4gICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3NlcyA9IHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzZXM7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZWN0aW9ucyA9IHRoaXMuJHNjb3BlLmNvdXJzZVNlY3Rpb25zO1xyXG4gICAgICAgIHRoaXMuc2VjdGlvblByb2dyZXNzZXMgPSB0aGlzLiRzY29wZS5zZWN0aW9uUHJvZ3Jlc3NlcztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCA9IHRoaXMuJHNjb3BlLnNlbGVjdGVkUHJvZ3Jlc3NJZDtcclxuICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gdGhpcy4kc2NvcGUuc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VQZXJtaXNzaW9ucyA9IHRoaXMuJHNjb3BlLmNvdXJzZVBlcm1pc3Npb25zO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTZWN0aW9uUHJvZ3Jlc3NlcygpO1xyXG4gICAgICAgIHRoaXMuZXh0ZW5kU2VjdGlvbnNCeVByb2dyZXNzKCk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVJbmFjdGl2ZVNlY3Rpb25zV2l0aG91dFByb2dyZXNzKCk7XHJcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVByb2dyZXNzUGVyY2VudGFnZSgpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZWN0aW9uUHJvZ3Jlc3Nlcykge1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb3Vyc2VTZWN0aW9ucyAmJiB0aGlzLnNlY3Rpb25Qcm9ncmVzc2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQnV0dG9ucyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb3Vyc2VQcm9ncmVzc2VzICYmIHRoaXMuY291cnNlUHJvZ3Jlc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmVzcyA9IHRoaXMuY291cnNlUHJvZ3Jlc3Nlcy5maWx0ZXIocCA9PiBwLmlkID09PSB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCkucG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBncm91cFNlY3Rpb25Qcm9ncmVzc2VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VjdGlvblByb2dyZXNzQnlTZWN0aW9uSWQuY2xlYXIoKTtcclxuICAgICAgICBpZiAodGhpcy5zZWN0aW9uUHJvZ3Jlc3Nlcykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBzZWN0aW9uUHJvZ3Jlc3Mgb2YgdGhpcy5zZWN0aW9uUHJvZ3Jlc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uUHJvZ3Jlc3NCeVNlY3Rpb25JZC5zZXQoc2VjdGlvblByb2dyZXNzLnNlY3Rpb25JZCwgc2VjdGlvblByb2dyZXNzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZXh0ZW5kU2VjdGlvbnNCeVByb2dyZXNzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNvdXJzZVNlY3Rpb25zICYmIHRoaXMuc2VjdGlvblByb2dyZXNzQnlTZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZWN0aW9ucy5mb3JFYWNoKChzOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRXaXRoUHJvZ3Jlc3MpID0+IHtcclxuICAgICAgICAgICAgICAgIHMucHJvZ3Jlc3MgPSB0aGlzLnNlY3Rpb25Qcm9ncmVzc0J5U2VjdGlvbklkLmdldChzLnNlY3Rpb24uaWQpO1xyXG4gICAgICAgICAgICAgICAgcy5zZWN0aW9uLnN0YXR1cyA9IHMucHJvZ3Jlc3MgPyBzLnByb2dyZXNzLnN0YXR1cyA6IG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbW92ZUluYWN0aXZlU2VjdGlvbnNXaXRob3V0UHJvZ3Jlc3MoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHNob3duU3RhdHVzZXMgPSBbU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5DT01QTEVURURdLCBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLk9QRU5FRF1dO1xyXG4gICAgICAgIGlmICghIXRoaXMuY291cnNlU2VjdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZWN0aW9ucyA9IHRoaXMuY291cnNlU2VjdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgcyA9PiBzLnNlY3Rpb24uaXNBY3RpdmVcclxuICAgICAgICAgICAgICAgICAgICB8fCAoIXMuc2VjdGlvbi5pc0FjdGl2ZSAmJiB0aGlzLnNlY3Rpb25Qcm9ncmVzc0J5U2VjdGlvbklkLmhhcyhzLnNlY3Rpb24uaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHNob3duU3RhdHVzZXMuaW5kZXhPZih0aGlzLnNlY3Rpb25Qcm9ncmVzc0J5U2VjdGlvbklkLmdldChzLnNlY3Rpb24uaWQpLnN0YXR1cykgPj0gMClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlY2FsY3VsYXRlUHJvZ3Jlc3NQZXJjZW50YWdlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNvdXJzZVNlY3Rpb25zKVxyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb25JbkhpZXJhcmNoeTogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkluSGllcmFyY2h5LmxldmVsID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgQ291cnNlRGV0YWlsc1V0aWxzLmNhbGN1bGF0ZVNlY3Rpb25Db21wbGV0aW9uUGVyY2VudGFnZShpbmRleCwgdGhpcy5jb3Vyc2VTZWN0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUaW1lU3BlbnRGb3JTZWN0aW9uKHNlY3Rpb25JZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgdGltZXNwZW50OiBzdHJpbmcgPSBcIk5vdCBTdGFydGVkXCI7XHJcbiAgICAgICAgbGV0IHByb2dyZXNzID0gdGhpcy5zZWN0aW9uUHJvZ3Jlc3NCeVNlY3Rpb25JZC5nZXQoc2VjdGlvbklkKTtcclxuICAgICAgICBpZiAocHJvZ3Jlc3MgJiYgcHJvZ3Jlc3MudG90YWxUaW1lU3BlbnQpIHtcclxuICAgICAgICAgICAgbGV0IHRpbWVTcGVudE1vbWVudCA9IG1vbWVudChwcm9ncmVzcy50b3RhbFRpbWVTcGVudCkudXRjKCk7XHJcbiAgICAgICAgICAgIGxldCBob3VycyA9IHRpbWVTcGVudE1vbWVudC5nZXQoXCJob3Vyc1wiKTtcclxuICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSB0aW1lU3BlbnRNb21lbnQuZ2V0KFwibWludXRlc1wiKTtcclxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSB0aW1lU3BlbnRNb21lbnQuZ2V0KFwic2Vjb25kc1wiKTtcclxuICAgICAgICAgICAgdGltZXNwZW50ID0gXCJcIjtcclxuICAgICAgICAgICAgdGltZXNwZW50ICs9IGhvdXJzID4gMCA/IGhvdXJzICsgXCIgaCBcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRpbWVzcGVudCArPSBtaW51dGVzID4gMCA/IG1pbnV0ZXMgKyBcIiBtIFwiIDogXCJcIjtcclxuICAgICAgICAgICAgdGltZXNwZW50ICs9IHNlY29uZHMgPiAwID8gc2Vjb25kcyArIFwiIHMgXCIgOiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGltZXNwZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMYXN0U2NvcmUoc2VjdGlvbklkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnNlY3Rpb25Qcm9ncmVzc0J5U2VjdGlvbklkKSB7XHJcbiAgICAgICAgICAgIGxldCBwcm9ncmVzcyA9IHRoaXMuc2VjdGlvblByb2dyZXNzQnlTZWN0aW9uSWQuZ2V0KHNlY3Rpb25JZCk7XHJcbiAgICAgICAgICAgIGlmIChwcm9ncmVzcyAmJiBwcm9ncmVzcy5xdWl6UmVzdWx0SWQgJiYgcHJvZ3Jlc3MudHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuUVVJWl0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9ncmVzcy5xdWl6UmVzdWx0VHlwZSA9PT0gUXVpekNvcnJlY3RBbnN3ZXJzVHlwZVtRdWl6Q29ycmVjdEFuc3dlcnNUeXBlLlBFUkNFTlRBR0VdXHJcbiAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcocHJvZ3Jlc3MucXVpelJlc3VsdFBlcmNlbnRhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcocHJvZ3Jlc3MucXVpelJlc3VsdFBvaW50cyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd1F1aXpSZXN1bHRzKHNlY3Rpb25JZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRRdWl6RGV0YWlscyAmJiB0aGlzLnNlbGVjdGVkUXVpekRldGFpbHMuc2VjdGlvbklkID09IHNlY3Rpb25JZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzU2hvd1F1aXpSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFF1aXpEZXRhaWxzID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFF1aXpSZXN1bHRJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLnF1aXp6ZXNBcmVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNTaG93UXVpelJlc3VsdE1vZGFsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRJbmRpdmlkdWFsUXVpelJlc3VsdHModGhpcy5jb3Vyc2UuaWQsIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXpSZXN1bHRzID0gcmVzdWx0LmZpbHRlcihhID0+IGEuc3RhdHVzICE9IG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6UmVzdWx0c0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgICQoXCIjcXVpelJlc3VsdHNEaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3A6IHRydWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZUdyaWRNb2RlbCgpIHtcclxuICAgICAgICB0aGlzLnF1aXpSZXN1bHRzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbDxJSW5kaXZpZHVhbFF1aXpSZXN1bHQ+KChncmlkTW9kZWw6IElHcmlkTW9kZWw8SUluZGl2aWR1YWxRdWl6UmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgICBncmlkTW9kZWwucGFnZVNpemUgPSB0aGlzLnF1aXpSZXN1bHRzUGFnZVNpemU7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhZ2U6IElQYWdlPElJbmRpdmlkdWFsUXVpelJlc3VsdD4gPSB0aGlzLmdldFBhZ2UoZ3JpZE1vZGVsLmN1cnJlbnRQYWdlLCBncmlkTW9kZWwucGFnZVNpemUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKHBhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYWdlKHBhZ2VJbmRleDogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogSVBhZ2U8SUluZGl2aWR1YWxRdWl6UmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHN0YXJ0ID0gcGFnZUluZGV4ICogcGFnZVNpemU7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMucXVpelJlc3VsdHMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgcGFnZVNpemUpO1xyXG4gICAgICAgIGxldCB0b3RhbENvdW50OiBudW1iZXIgPSB0aGlzLnF1aXpSZXN1bHRzLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4ge2VudHJpZXM6IHJlc3VsdCwgdG90YWxDb3VudDogdG90YWxDb3VudCwgcGFnZU1vZGU6IFwiRU5UUklFU19BTkRfVE9UQUxfRVNUSU1BVEVTXCJ9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlUXVpelJlc3VsdHMoKTogdm9pZCB7XHJcbiAgICAgICAgJChcIiNxdWl6UmVzdWx0c0RpYWxvZ1wiKS5tb2RhbChcImhpZGVcIik7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFF1aXpEZXRhaWxzSW5Qb3B1cCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dRdWl6RGV0YWlscyhzZWN0aW9uSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnF1aXp6ZXNBcmVMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBsZXQgZnVuYyA9IChldmVudCwgZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLnF1aXp6ZXNBcmVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kYXBwbHkoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbigncXVpenplc0FyZUxvYWRlZCcsIGZ1bmMpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUXVpekRldGFpbHMgJiYgdGhpcy5zZWxlY3RlZFF1aXpEZXRhaWxzLnNlY3Rpb25JZCA9PSBzZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1Nob3dRdWl6UmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRRdWl6RGV0YWlscyA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRRdWl6UmVzdWx0SWQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5xdWl6emVzQXJlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTaG93UXVpelJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRRdWl6UmVzdWx0SWQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUXVpekRldGFpbHMgPSB0aGlzLnNlY3Rpb25Qcm9ncmVzc0J5U2VjdGlvbklkLmdldChzZWN0aW9uSWQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFF1aXpEZXRhaWxzICYmIHRoaXMuc2VsZWN0ZWRRdWl6RGV0YWlscy5xdWl6UmVzdWx0SWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdXJzZS5wZXJtaXNzaW9ucy52aWV3T3RoZXJVc2Vyc1Byb2dyZXNzIHx8IHRoaXMuY291cnNlLnBlcm1pc3Npb25zLnZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRJbmRpdmlkdWFsUXVpelJlc3VsdHModGhpcy5jb3Vyc2UuaWQsIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHF1aXpSZXN1bHRzRm9yU2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVpelJlc3VsdHNGb3JTZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBub3QgbnVsbCBhdHRlbXB0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHF1aXpSZXN1bHRzRm9yU2VjdGlvbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWl6ID0gcXVpelJlc3VsdHNGb3JTZWN0aW9uW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVpei5jb3JyZWN0QW5zd2Vyc0NvdW50ICsgcXVpei53cm9uZ0Fuc3dlcnNDb3VudCArIHF1aXoucXVlc3Rpb25zVG9CZVNjb3JlZENvdW50ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFF1aXpSZXN1bHRJZCA9IHF1aXpSZXN1bHRzRm9yU2VjdGlvbltpXS5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93UXVpekRldGFpbHNJblBvcHVwRm9yUXVpelJlc3VsdChxdWl6UmVzdWx0OiBJSW5kaXZpZHVhbFF1aXpSZXN1bHQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFF1aXpEZXRhaWxzSW5Qb3B1cCAmJiBxdWl6UmVzdWx0ICYmIHRoaXMuc2VsZWN0ZWRRdWl6RGV0YWlsc0luUG9wdXAuaWQgPT09IHF1aXpSZXN1bHQuaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFF1aXpEZXRhaWxzSW5Qb3B1cCA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFF1aXpEZXRhaWxzSW5Qb3B1cCA9IHF1aXpSZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VTZWN0aW9uU3RhdHVzKHNlY3Rpb25JZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uUHJvZ3Jlc3NBbGxvd2VkU3RhdHVzZXMgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvblByb2dyZXNzICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uUHJvZ3Jlc3Muc2VjdGlvbklkID09PSBzZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb25Qcm9ncmVzcyA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb25Qcm9ncmVzcyA9IHRoaXMuc2VjdGlvblByb2dyZXNzQnlTZWN0aW9uSWQuZ2V0KHNlY3Rpb25JZCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvblByb2dyZXNzLnR5cGVLZXkgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uUHJvZ3Jlc3NBbGxvd2VkU3RhdHVzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFNlY3Rpb25Qcm9ncmVzc1N0YXR1cy5OT1RfQUxMT1dFRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwibm90IGFsbG93ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFNlY3Rpb25Qcm9ncmVzc1N0YXR1cy5BTExPV0VELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJhbGxvd2VkXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtrZXk6IFNlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORUQsIHZhbHVlOiBcIm9wZW5lZFwifVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvblByb2dyZXNzLnR5cGVLZXkgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlFVSVpdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25Qcm9ncmVzc0FsbG93ZWRTdGF0dXNlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLk5PVF9BTExPV0VELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJub3QgYWxsb3dlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7a2V5OiBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQUxMT1dFRCwgdmFsdWU6IFwiYWxsb3dlZFwifSxcclxuICAgICAgICAgICAgICAgICAgICB7a2V5OiBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuRkFJTEVELCB2YWx1ZTogXCJmYWlsZWRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAge2tleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLlNPUywgdmFsdWU6IFwiZmFpbGVkIE5NIGF0dC5cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFNlY3Rpb25Qcm9ncmVzc1N0YXR1cy5DT01QTEVURUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImNvbXBsZXRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvblByb2dyZXNzLnR5cGVLZXkgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OX1dJVEhfTUFOVUFMX0NPTVBMRVRJT05dKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25Qcm9ncmVzc0FsbG93ZWRTdGF0dXNlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLk5PVF9BTExPV0VELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJub3QgYWxsb3dlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLkFMTE9XRUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImFsbG93ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge2tleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLk9QRU5FRCwgdmFsdWU6IFwib3BlbmVkXCJ9XHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uUHJvZ3Jlc3MudHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuU1VSVkVZXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uUHJvZ3Jlc3NBbGxvd2VkU3RhdHVzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFNlY3Rpb25Qcm9ncmVzc1N0YXR1cy5OT1RfQUxMT1dFRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwibm90IGFsbG93ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFNlY3Rpb25Qcm9ncmVzc1N0YXR1cy5BTExPV0VELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJhbGxvd2VkXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJjb21wbGV0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvblByb2dyZXNzLnR5cGVLZXkgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLldFQklOQVJdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25Qcm9ncmVzc0FsbG93ZWRTdGF0dXNlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLk5PVF9BTExPV0VELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJub3QgYWxsb3dlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLkFMTE9XRUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImFsbG93ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFNlY3Rpb25Qcm9ncmVzc1N0YXR1cy5DT01QTEVURUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImF0dGVuZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuU1RBUlRFRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwicmVnaXN0ZXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLkZBSUxFRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwibWlzc2VkXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb25Qcm9ncmVzcy50eXBlS2V5ID09PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5JTFRdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25Qcm9ncmVzc0FsbG93ZWRTdGF0dXNlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLk5PVF9BTExPV0VELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJub3QgYWxsb3dlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLkFMTE9XRUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImFsbG93ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFNlY3Rpb25Qcm9ncmVzc1N0YXR1cy5TVEFSVEVELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJyZWdpc3RlcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJhdHRlbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLkZBSUxFRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwibWlzc2VkXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb25Qcm9ncmVzcy50eXBlS2V5ID09PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5GTEFTSENBUkRdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25Qcm9ncmVzc0FsbG93ZWRTdGF0dXNlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLk5PVF9BTExPV0VELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJub3QgYWxsb3dlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VjdGlvblByb2dyZXNzU3RhdHVzLkFMTE9XRUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImFsbG93ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFNlY3Rpb25Qcm9ncmVzc1N0YXR1cy5DT01QTEVURUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImNvbXBsZXRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25Qcm9ncmVzc05ld1N0YXR1cyA9IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1t0aGlzLnNlbGVjdGVkU2VjdGlvblByb2dyZXNzLnN0YXR1c107XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlckluU2VjdGlvblByb2dyZXNzU3RhdHVzKHN0YXR1czogc3RyaW5nLCBzZWN0aW9uVHlwZUtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoc3RhdHVzID09PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLk5PVF9BTExPV0VEXSkge1xyXG4gICAgICAgICAgICBpZiAoc2VjdGlvblR5cGVLZXkgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibm90IGFsbG93ZWRcIjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIm5vdCBhbGxvd2VkXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5BTExPV0VEXSkge1xyXG4gICAgICAgICAgICBpZiAoc2VjdGlvblR5cGVLZXkgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYWxsb3dlZFwiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYWxsb3dlZFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuT1BFTkVEXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJvcGVuZWRcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5TVEFSVEVEXSkge1xyXG4gICAgICAgICAgICBpZiAoc2VjdGlvblR5cGVLZXkgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLldFQklOQVJdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJyZWdpc3RlcmVkXCJcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWN0aW9uVHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSUxUXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwicmVnaXN0ZXJlZFwiXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzdGFydGVkXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5TVUJNSVRURURdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcInN1Ym1pdHRlZFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLkZBSUxFRF0pIHtcclxuICAgICAgICAgICAgaWYgKHNlY3Rpb25UeXBlS2V5ID09PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5XRUJJTkFSXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibWlzc2VkXCJcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWN0aW9uVHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSUxUXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibWlzc2VkXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJmYWlsZWRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLlNPU10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiZmFpbGVkIE5NIGF0dC5cIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5DT01QTEVURURdKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uVHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuV0VCSU5BUl0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImF0dGVuZGVkXCJcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWN0aW9uVHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSUxUXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0ZW5kZWRcIjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbXBsZXRlZFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiTi9BXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNhdmVTZWN0aW9uU3RhdHVzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNlY3Rpb25Qcm9ncmVzc05ld1N0YXR1cyA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW3RoaXMuc2VsZWN0ZWRTZWN0aW9uUHJvZ3Jlc3Muc3RhdHVzXSkge1xyXG4gICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiWW91IGFyZSB0cnlpbmcgdG8gc2V0IHRoZSBzYW1lIHN0YXR1cyFcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uUHJvZ3Jlc3MudHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuUVVJWl0pIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UuZ2V0SW5kaXZpZHVhbFF1aXpSZXN1bHRzKHRoaXMuY291cnNlLmlkLCB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCwgdGhpcy5zZWxlY3RlZFNlY3Rpb25Qcm9ncmVzcy5zZWN0aW9uSWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRpdmlkdWFsUXVpelJlc3VsdCA9IHJlc3VsdC5maWx0ZXIocXVpelJlc3VsdHMgPT4gcXVpelJlc3VsdHMuaWQgPT09IHRoaXMuc2VsZWN0ZWRTZWN0aW9uUHJvZ3Jlc3MucXVpelJlc3VsdElkKS5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoU2VjdGlvblByb2dyZXNzU3RhdHVzW3RoaXMuc2VjdGlvblByb2dyZXNzTmV3U3RhdHVzXSA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5BTExPV0VEXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhIWluZGl2aWR1YWxRdWl6UmVzdWx0ICYmIChpbmRpdmlkdWFsUXVpelJlc3VsdC5zdGF0dXMgPT09IFF1aXpSZXN1bHRTdGF0dXNbUXVpelJlc3VsdFN0YXR1cy5TVUJNSVRURURdIHx8IGluZGl2aWR1YWxRdWl6UmVzdWx0LnN0YXR1cyA9PT0gUXVpelJlc3VsdFN0YXR1c1tRdWl6UmVzdWx0U3RhdHVzLkZBSUxFRF0pKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uczogQ29uZmlybWF0aW9uQXJncztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRpYWxvZ01lc3NhZ2U6IHN0cmluZyA9IFwiUHJldmlvdXMgcXVpeiBhdHRlbXB0IHdpbGwgYmUgZGVsZXRlZC4gQ29udGludWU/XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJDaGFuZ2Ugc3RhdHVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIlllc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uOiBcIkNhbmNlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKGRpYWxvZ01lc3NhZ2UsIG9wdGlvbnMpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlY3Rpb25Qcm9ncmVzc1N0YXR1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VjdGlvblByb2dyZXNzU3RhdHVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldFNlY3Rpb25Qcm9ncmVzc1N0YXR1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0U2VjdGlvblByb2dyZXNzU3RhdHVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UucmVzZXRTZWN0aW9uUHJvZ3Jlc3NTdGF0dXModGhpcy5jb3Vyc2UuaWQsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uUHJvZ3Jlc3Muc2VjdGlvbklkLFxyXG4gICAgICAgICAgICBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbdGhpcy5zZWN0aW9uUHJvZ3Jlc3NOZXdTdGF0dXNdLCB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU2VjdGlvbiBzdGF0dXMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQhXCIpO1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdChFdmVudC5DT1VSU0VfUFJPR1JFU1NfUkVMT0FEX1BST0dSRVNTKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb25Qcm9ncmVzcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbXBsZXRlU2VjdGlvbldpdGhDaGlsZGVzKHNlY3Rpb25JZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVCdXR0b25zID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25Qcm9ncmVzc0FsbG93ZWRTdGF0dXNlcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb25Qcm9ncmVzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UuY29tcGxldGVTZWN0aW9uV2l0aENoaWxkZXModGhpcy5jb3Vyc2UuaWQsIHNlY3Rpb25JZCwgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkNPVVJTRV9QUk9HUkVTU19SRUxPQURfUFJPR1JFU1MpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRTZWN0aW9uV2l0aENoaWxkZXNUb0luaXRpYWwoc2VjdGlvbklkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZUJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VjdGlvblByb2dyZXNzQWxsb3dlZFN0YXR1c2VzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvblByb2dyZXNzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnByb2dyZXNzU2VydmljZS5yZXNldFNlY3Rpb25XaXRoQ2hpbGRlc1RvSW5pdGlhbCh0aGlzLmNvdXJzZS5pZCwgc2VjdGlvbklkLCB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy4kc2NvcGUuJGVtaXQoRXZlbnQuQ09VUlNFX1BST0dSRVNTX1JFTE9BRF9QUk9HUkVTUykpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FueUNoaWxkU2VjdGlvbkhhc1Byb2dyZXNzKHBhcmVudElkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgc2VjdGlvbnM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdID0gdGhpcy5maW5kQWxsQ2hpbGRyZW4ocGFyZW50SWQpO1xyXG4gICAgICAgIGZvciAobGV0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcclxuICAgICAgICAgICAgbGV0IHByb2dyZXNzID0gdGhpcy5zZWN0aW9uUHJvZ3Jlc3NCeVNlY3Rpb25JZC5nZXQoc2VjdGlvbi5zZWN0aW9uLmlkKTtcclxuICAgICAgICAgICAgaWYgKHByb2dyZXNzICE9IG51bGxcclxuICAgICAgICAgICAgICAgICYmIHByb2dyZXNzLnN0YXR1cyAhPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5OT1RfQUxMT1dFRF1cclxuICAgICAgICAgICAgICAgICYmIHByb2dyZXNzLnN0YXR1cyAhPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5BTExPV0VEXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmaW5kQWxsQ2hpbGRyZW4ocGFyZW50SWQ6IG51bWJlcik6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRbXSA9IFtdO1xyXG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLmNvdXJzZVNlY3Rpb25zLmZpbHRlcihzID0+IHMuc2VjdGlvbi5pZCA9PT0gcGFyZW50SWQpLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuICYmIHBhcmVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIHBhcmVudC5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHRoaXMuZmluZEFsbENoaWxkcmVuKGNoaWxkLnNlY3Rpb24uaWQpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlY3Rpb25Qcm9ncmVzc0NvbXBsZXRpb25EYXRlKHNlY3Rpb246IElTZWN0aW9uKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgc2VjdGlvblByb2dyZXNzID0gdGhpcy5zZWN0aW9uUHJvZ3Jlc3NCeVNlY3Rpb25JZC5nZXQoc2VjdGlvbi5pZCk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25Qcm9ncmVzcyA/IHNlY3Rpb25Qcm9ncmVzcy5jb21wbGV0aW9uRGF0ZSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2hvd1F1aXpEZXRhaWxzKHF1aXpSZXN1bHQ6IElJbmRpdmlkdWFsUXVpelJlc3VsdCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb246IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCA9IHRoaXMuY291cnNlU2VjdGlvbnMuZmlsdGVyKHNlY3Rpb24gPT4gc2VjdGlvbi5zZWN0aW9uLmlkID09PSBxdWl6UmVzdWx0LnNlY3Rpb25JZClbMF07XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb24uc2VjdGlvbi5hY2NlcHRhYmxlTnVtYmVyT2ZBdHRlbXB0cyA8PSAwIHx8IHRoaXMuY291cnNlUGVybWlzc2lvbnMudmlld090aGVyVXNlcnNQcm9ncmVzcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RldGFpbHMoaW5kZXg6IG51bWJlciwga2V5Q29kZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKChrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSAmJiB0aGlzLmlzU2hvd1F1aXpSZXN1bHQgPT09IGZhbHNlICYmIHRoaXMuaXNTaG93UXVpelJlc3VsdE1vZGFsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGluZGV4LCAhdGhpcy5yb3dTaG93LmdldChpbmRleCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SWNvbkJ5TGV2ZWwoc2VjdGlvbkxldmVsOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChzZWN0aW9uTGV2ZWwgPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMVwiIHZpZXdCb3g9XCIwIDAgMTkgMVwiIGZpbGw9XCJub25lXCI+XFxuJyArXHJcbiAgICAgICAgICAgICAgICAnPGxpbmUgeDE9XCI0LjM3MTE0ZS0wOFwiIHkxPVwiMC41XCIgeDI9XCIxOVwiIHkyPVwiMC41MDAwMDJcIiBzdHJva2U9XCJibGFja1wiLz5cXG4nICtcclxuICAgICAgICAgICAgICAgICc8L3N2Zz4nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VjdGlvbkxldmVsID09PSAyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiM1wiIHZpZXdCb3g9XCIwIDAgMyAzXCIgZmlsbD1cIm5vbmVcIj5cXG4nICtcclxuICAgICAgICAgICAgICAgICc8Y2lyY2xlIGN4PVwiMS41XCIgY3k9XCIxLjVcIiByPVwiMS41XCIgZmlsbD1cImJsYWNrXCIvPlxcbicgK1xyXG4gICAgICAgICAgICAgICAgJzwvc3ZnPic7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWN0aW9uTGV2ZWwgPT09IDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgdmlld0JveD1cIjAgMCA1IDVcIiBmaWxsPVwibm9uZVwiPlxcbicgK1xyXG4gICAgICAgICAgICAgICAgJzxwYXRoIGQ9XCJNNC45ODE5MyAwLjQzMzAwOEwyLjgxNjg3IDQuMTgzMDFMMC42NTE4MDYgMC40MzMwMDhMNC45ODE5MyAwLjQzMzAwOFpcIiBmaWxsPVwiYmxhY2tcIi8+XFxuJyArXHJcbiAgICAgICAgICAgICAgICAnPC9zdmc+JztcclxuICAgICAgICB9IGVsc2UgaWYgKHNlY3Rpb25MZXZlbCA+PSA0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNlwiIHZpZXdCb3g9XCIwIDAgNSA2XCIgZmlsbD1cIm5vbmVcIj5cXG4nICtcclxuICAgICAgICAgICAgICAgICc8cGF0aCBkPVwiTTIuNDE1MDEgMC43NjAzNThMNC4wODAwOCAxLjcyMTY4TDQuMDgwMDggMy42NDQzM0wyLjQxNTAxIDQuNjA1NjZMMC43NDk5NTEgMy42NDQzM0wwLjc0OTk1MSAxLjcyMTY4TDIuNDE1MDEgMC43NjAzNThaXCIgc3Ryb2tlPVwiYmxhY2tcIi8+XFxuJyArXHJcbiAgICAgICAgICAgICAgICAnPC9zdmc+JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEluZGVudEZvckNoaWxkU2VjdGlvbihzZWN0aW9uTGV2ZWwpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQ7XHJcbiAgICAgICAgaWYgKHNlY3Rpb25MZXZlbCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSAwO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VjdGlvbkxldmVsID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IDcgKiBzZWN0aW9uTGV2ZWw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWN0aW9uTGV2ZWwgPiAxKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9ICg3ICogc2VjdGlvbkxldmVsKSArIDE2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3B4JztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVjb2RlU3RhdHVzKHN0YXR1czogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gc3RhdHVzO1xyXG4gICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJQQVNTRURcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJQQVNTRURcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJGQUlMRURcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJGQUlMRURcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJTVUJNSVRURURcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJTVUJNSVRURURcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NEZXRhaWxzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NEZXRhaWxzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzRGV0YWlsc0NvbnRyb2xsZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0RldGFpbHNDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGNvdXJzZTogXCI9XCIsXHJcbiAgICAgICAgICAgIGNvdXJzZVByb2dyZXNzZXM6IFwiPVwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VTZWN0aW9uczogXCI9XCIsXHJcbiAgICAgICAgICAgIHNlY3Rpb25Qcm9ncmVzc2VzOiBcIj1cIixcclxuICAgICAgICAgICAgc2VsZWN0ZWRQcm9ncmVzc0lkOiBcIj1cIixcclxuICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnM6IFwiPVwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VQZXJtaXNzaW9uczogXCI9XCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkVXNlckZ1bGxOYW1lOiBcIj1cIixcclxuICAgICAgICAgICAgcXVpenplc0FyZUxvYWRpbmc6XCI9XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1pbmRpdmlkdWFsLWNvdXJzZS1wcm9ncmVzcy1kZXRhaWxzLmh0bWxcIilcclxuICAgIH1cclxufVxyXG5cclxuVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzRGV0YWlsc0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG5cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lDb3Vyc2VQcm9ncmVzc30gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VQcm9ncmVzc1wiO1xyXG5pbXBvcnQge1Byb2dyZXNzU2VydmljZX0gZnJvbSBcIi4uL2NvdXJzZXMvUHJvZ3Jlc3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3N9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JSW5kaXZpZHVhbFNlY3Rpb25Qcm9ncmVzc1wiO1xyXG5pbXBvcnQge0lTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZH0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lTZWN0aW9uSW5IaWVyYXJjaHlcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi4vSVNlbGVjdGFibGVcIjtcclxuaW1wb3J0IHtJVXNlckNlcnRpZmljYXRlfSBmcm9tIFwiLi4vcGVyc29uYWwvbW9kZWxzL0lVc2VyQ2VydGlmaWNhdGVcIjtcclxuaW1wb3J0IHtJQ291cnNlUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JQ291cnNlUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtRdWl6U2VydmljZX0gZnJvbSBcIi4uL3F1aXp6ZXMvUXVpelNlcnZpY2VcIjtcclxuaW1wb3J0IHtQYXJ0aWNpcGF0aW9uRm9ybUZpZWxkfSBmcm9tIFwiLi4vY29tbW9uL0lQYXJ0aWNpcGF0aW9uRm9ybVwiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcblxyXG5pbnRlcmZhY2UgSVZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgY291cnNlOiBJQ291cnNlO1xyXG4gICAgY291cnNlU2VjdGlvbnM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdO1xyXG4gICAgdXNlclByb2dyZXNzZXM6IElDb3Vyc2VQcm9ncmVzc1tdO1xyXG4gICAgc2VsZWN0ZWRQcm9ncmVzc0lkOiBudW1iZXI7XHJcbiAgICBzZWN0aW9uUHJvZ3Jlc3NlczogSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3NbXTtcclxuICAgIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwYXJ0aWNpcGF0aW9uRm9ybTogTWFwPHN0cmluZywgYW55PjtcclxuICAgIHBhcnRpY2lwYXRpb25Gb3JtRmllbGRzOiBQYXJ0aWNpcGF0aW9uRm9ybUZpZWxkW107XHJcbiAgICBjdXJyZW50VXNlcjogSVVzZXJJbmZvO1xyXG4gICAgY291cnNlQ2VydGlmaWNhdGVzOiBJU2VsZWN0YWJsZVtdO1xyXG4gICAgdXNlckNlcnRpZmljYXRlczogSVVzZXJDZXJ0aWZpY2F0ZVtdO1xyXG4gICAgdm0/OiBWaHNJbmRpdmlkdWFsQ291cnNlUHJvZ3Jlc3NDb250cm9sbGVyO1xyXG4gICAgc2VsZWN0ZWRVc2VyRnVsbE5hbWU/OiBzdHJpbmc7XHJcbiAgICBxdWl6emVzQXJlTG9hZGluZzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0NvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2U6IElDb3Vyc2U7XHJcblxyXG4gICAgcHVibGljIHZpZXdUeXBlOiBzdHJpbmc7IC8vIHBhcnRpY2lwYXRpb25Gb3JtIHwgcHJvZ3Jlc3NEZXRhaWxzIHwgY2VydGlmaWNhdGVzXHJcblxyXG4gICAgcHVibGljIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgIHB1YmxpYyB1c2VyUHJvZ3Jlc3NlczogSUNvdXJzZVByb2dyZXNzW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRQcm9ncmVzc0lkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRQcm9ncmVzczogSUNvdXJzZVByb2dyZXNzO1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VQZXJtaXNzaW9uczogSUNvdXJzZVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcblxyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtOiBNYXA8c3RyaW5nLCBhbnk+O1xyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtRmllbGRzOiBQYXJ0aWNpcGF0aW9uRm9ybUZpZWxkW107XHJcblxyXG4gICAgcHVibGljIGNvdXJzZUNlcnRpZmljYXRlczogSVNlbGVjdGFibGVbXTtcclxuICAgIHB1YmxpYyB1c2VyQ2VydGlmaWNhdGVzOiBJVXNlckNlcnRpZmljYXRlW107XHJcblxyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VTZWN0aW9uczogQXJyYXk8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkPiA9IFtdO1xyXG4gICAgcHVibGljIHNlY3Rpb25Qcm9ncmVzc2VzOiBJSW5kaXZpZHVhbFNlY3Rpb25Qcm9ncmVzc1tdID0gW107XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBQcm9ncmVzc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBRdWl6U2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgJHNjb3BlOiBJVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHByb2dyZXNzU2VydmljZTogUHJvZ3Jlc3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHF1aXpTZXJ2aWNlOiBRdWl6U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gXCJwcm9ncmVzc0RldGFpbHNcIjtcclxuXHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoR3JvdXAoW1xyXG4gICAgICAgICAgICBcImNvdXJzZVwiLFxyXG4gICAgICAgICAgICBcImNvdXJzZVNlY3Rpb25zXCIsXHJcbiAgICAgICAgICAgIFwidXNlclByb2dyZXNzZXNcIixcclxuICAgICAgICAgICAgXCJzZWxlY3RlZFByb2dyZXNzSWRcIixcclxuICAgICAgICAgICAgXCJzZWN0aW9uUHJvZ3Jlc3Nlc1wiLFxyXG4gICAgICAgICAgICBcInBhcnRpY2lwYXRpb25Gb3JtXCIsXHJcbiAgICAgICAgICAgIFwiY3VycmVudFVzZXJcIixcclxuICAgICAgICAgICAgXCJ1c2VyQ2VydGlmaWNhdGVzXCJcclxuICAgICAgICBdLCAoKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhRnJvbVNjb3BlKCk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEYXRhRnJvbVNjb3BlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291cnNlID0gdGhpcy4kc2NvcGUuY291cnNlO1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VjdGlvbnMgPSB0aGlzLiRzY29wZS5jb3Vyc2VTZWN0aW9ucztcclxuICAgICAgICB0aGlzLnVzZXJQcm9ncmVzc2VzID0gdGhpcy4kc2NvcGUudXNlclByb2dyZXNzZXM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQgPSB0aGlzLiRzY29wZS5zZWxlY3RlZFByb2dyZXNzSWQ7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uUHJvZ3Jlc3NlcyA9IHRoaXMuJHNjb3BlLnNlY3Rpb25Qcm9ncmVzc2VzO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSB0aGlzLiRzY29wZS5zeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICB0aGlzLmNvdXJzZVBlcm1pc3Npb25zID0gdGhpcy5jb3Vyc2UucGVybWlzc2lvbnM7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHRoaXMuJHNjb3BlLmN1cnJlbnRVc2VyO1xyXG4gICAgICAgIHRoaXMuY291cnNlQ2VydGlmaWNhdGVzID0gdGhpcy4kc2NvcGUuY291cnNlQ2VydGlmaWNhdGVzO1xyXG4gICAgICAgIHRoaXMudXNlckNlcnRpZmljYXRlcyA9IHRoaXMuJHNjb3BlLnVzZXJDZXJ0aWZpY2F0ZXM7XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSA9IHRoaXMuJHNjb3BlLnBhcnRpY2lwYXRpb25Gb3JtO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm1GaWVsZHMgPSB0aGlzLiRzY29wZS5wYXJ0aWNpcGF0aW9uRm9ybUZpZWxkcztcclxuICAgICAgICBpZiAodGhpcy51c2VyUHJvZ3Jlc3NlcyAmJiB0aGlzLnVzZXJQcm9ncmVzc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3MgPSB0aGlzLnVzZXJQcm9ncmVzc2VzLmZpbHRlcihwID0+IHAuaWQgPT09IHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkKS5wb3AoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dUYWIodGFiTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRhYk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTW9iaWxlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNzY3O1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzSW5kaXZpZHVhbENvdXJzZVByb2dyZXNzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBjb3Vyc2U6IFwiPVwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VTZWN0aW9uczogXCI9XCIsXHJcbiAgICAgICAgICAgIHVzZXJQcm9ncmVzc2VzOiBcIj1cIixcclxuICAgICAgICAgICAgc2VsZWN0ZWRQcm9ncmVzc0lkOiBcIj1cIixcclxuICAgICAgICAgICAgc2VjdGlvblByb2dyZXNzZXM6IFwiPVwiLFxyXG4gICAgICAgICAgICBwYXJ0aWNpcGF0aW9uRm9ybTogXCI9XCIsXHJcbiAgICAgICAgICAgIHBhcnRpY2lwYXRpb25Gb3JtRmllbGRzOiBcIj1cIixcclxuICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnM6IFwiPVwiLFxyXG4gICAgICAgICAgICBjdXJyZW50VXNlcjogXCI9XCIsXHJcbiAgICAgICAgICAgIGNvdXJzZUNlcnRpZmljYXRlczogXCI9XCIsXHJcbiAgICAgICAgICAgIHVzZXJDZXJ0aWZpY2F0ZXM6IFwiPVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RlZFVzZXJGdWxsTmFtZTpcIj1cIixcclxuICAgICAgICAgICAgcXVpenplc0FyZUxvYWRpbmc6XCI9XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1pbmRpdmlkdWFsLWNvdXJzZS1wcm9ncmVzcy5odG1sXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblZoc0luZGl2aWR1YWxDb3Vyc2VQcm9ncmVzc0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGFydGljaXBhdGlvbkZvcm1GaWVsZH0gZnJvbSBcIi4uL2NvbW1vbi9JUGFydGljaXBhdGlvbkZvcm1cIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoUHJvZ3Jlc3N9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JTGVhcm5pbmdQYXRoUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4vbW9kZWxzL0V2ZW50XCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL0xlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZVwiO1xyXG5cclxuaW50ZXJmYWNlIElWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkluZm9EaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGxlYXJuaW5nUGF0aElkOiBudW1iZXI7XHJcbiAgICBsZWFybmluZ1BhdGhQcm9ncmVzc2VzOiBJTGVhcm5pbmdQYXRoUHJvZ3Jlc3NbXTtcclxuICAgIHNlbGVjdGVkUHJvZ3Jlc3NJZDogbnVtYmVyO1xyXG4gICAgcGFydGljaXBhdGlvbkZvcm06IE1hcDxzdHJpbmcsIGFueT47XHJcbiAgICBwYXJ0aWNpcGF0aW9uRm9ybUZpZWxkczogUGFydGljaXBhdGlvbkZvcm1GaWVsZFtdO1xyXG4gICAgbGVhcm5pbmdQYXRoUGVybWlzc2lvbnM6IElMZWFybmluZ1BhdGhQZXJtaXNzaW9ucztcclxuICAgIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgdm0/OiBWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkluZm9Db250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFBhcnRpY2lwYXRpb25JbmZvQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NlczogSUxlYXJuaW5nUGF0aFByb2dyZXNzW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRQcm9ncmVzc0lkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcGFydGljaXBhdGlvbkZvcm06IE1hcDxzdHJpbmcsIGFueT47XHJcbiAgICBwdWJsaWMgcGFydGljaXBhdGlvbkZvcm1GaWVsZHM6IFBhcnRpY2lwYXRpb25Gb3JtRmllbGRbXTtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhQZXJtaXNzaW9uczogSUxlYXJuaW5nUGF0aFBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgcHVibGljIGlzRWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvbnRyb2xCdXR0b25zRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBlZGl0aW5nUGFydGljaXBhdGlvbkZvcm1EYXRhOiBhbnkgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgJHNjb3BlOiBJVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFBhcnRpY2lwYXRpb25JbmZvRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZTogTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2goXCJwYXJ0aWNpcGF0aW9uRm9ybVwiLCAoKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgPT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZURhdGFGcm9tU2NvcGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhJZCA9IHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3NlcyA9IHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aFByb2dyZXNzZXM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQgPSB0aGlzLiRzY29wZS5zZWxlY3RlZFByb2dyZXNzSWQ7XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSA9IHRoaXMuJHNjb3BlLnBhcnRpY2lwYXRpb25Gb3JtO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm1GaWVsZHMgPSB0aGlzLiRzY29wZS5wYXJ0aWNpcGF0aW9uRm9ybUZpZWxkcztcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFBlcm1pc3Npb25zID0gdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoUGVybWlzc2lvbnM7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHRoaXMuJHNjb3BlLnN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0VtcHR5Rm9ybSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSAhPT0gbnVsbCAmJiB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXModGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSkubGVuZ3RoID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRLZXlOYW1lQnlLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBrZXlOYW1lID0ga2V5O1xyXG4gICAgICAgIGlmICh0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRmllbGRzICYmIHRoaXMucGFydGljaXBhdGlvbkZvcm1GaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IHRoaXMucGFydGljaXBhdGlvbkZvcm1GaWVsZHMuZmlsdGVyKGYgPT4gZi5maWVsZEtleSA9PT0ga2V5KS5wb3AoKTtcclxuICAgICAgICAgICAga2V5TmFtZSA9IGZpZWxkID8gZmllbGQubmFtZSA6IGtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGtleU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0UGFydGljaXBhdGlvbkZvcm1FZGl0aW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm1GaWVsZHMuZm9yRWFjaCgoZmllbGQ6IFBhcnRpY2lwYXRpb25Gb3JtRmllbGQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0aW5nUGFydGljaXBhdGlvbkZvcm1EYXRhW2ZpZWxkLmZpZWxkS2V5XSA9IHRoaXMucGFydGljaXBhdGlvbkZvcm1bZmllbGQuZmllbGRLZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMucGFydGljaXBhdGlvbkZvcm0pLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFydGljaXBhdGlvbkZvcm1GaWVsZHMuZmlsdGVyKGYgPT4gZi5maWVsZEtleSA9PT0ga2V5KS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0aW5nUGFydGljaXBhdGlvbkZvcm1EYXRhW2tleV0gPSB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbFBhcnRpY2lwYXRpb25Gb3JtRWRpdGluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVkaXRpbmdQYXJ0aWNpcGF0aW9uRm9ybURhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdWJtaXRQYXJ0aWNpcGF0aW9uRm9ybUVkaXRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sQnV0dG9uc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5zZXRQYXJ0aWNpcGF0aW9uRm9ybURhdGEodGhpcy5sZWFybmluZ1BhdGhJZCwgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQsIHRoaXMuZWRpdGluZ1BhcnRpY2lwYXRpb25Gb3JtRGF0YSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlBhcnRpY2lwYXRpb24gRm9ybSBkYXRhIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgdXBkYXRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkxFQVJOSU5HX1BBVEhfUFJPR1JFU1NfUkVMT0FEX1BST0dSRVNTKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdGluZ1BhcnRpY2lwYXRpb25Gb3JtRGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sQnV0dG9uc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFBhcnRpY2lwYXRpb25JbmZvRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkluZm9EaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkluZm9Db250cm9sbGVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkluZm9Db250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aElkOiBcIj12aHNMZWFybmluZ1BhdGhJZFwiLFxyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhQcm9ncmVzc2VzOiBcIj12aHNMZWFybmluZ1BhdGhQcm9ncmVzc2VzXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkUHJvZ3Jlc3NJZDogXCI9dmhzU2VsZWN0ZWRQcm9ncmVzc0lkXCIsXHJcbiAgICAgICAgICAgIHBhcnRpY2lwYXRpb25Gb3JtOiBcIj12aHNQYXJ0aWNpcGF0aW9uRm9ybVwiLFxyXG4gICAgICAgICAgICBwYXJ0aWNpcGF0aW9uRm9ybUZpZWxkczogXCI9dmhzUGFydGljaXBhdGlvbkZvcm1GaWVsZHNcIixcclxuICAgICAgICAgICAgbGVhcm5pbmdQYXRoUGVybWlzc2lvbnM6IFwiPXZoc0xlYXJuaW5nUGF0aFBlcm1pc3Npb25zXCIsXHJcbiAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zOiBcIj12aHNTeXN0ZW1QZXJtaXNzaW9uc1wiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLWluZGl2aWR1YWwtbGVhcm5pbmctcGF0aC1wYXJ0aWNpcGF0aW9uLWluZm8uaHRtbFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5WaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkluZm9EaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge0lVc2VyQ2VydGlmaWNhdGV9IGZyb20gXCIuLi9wZXJzb25hbC9tb2RlbHMvSVVzZXJDZXJ0aWZpY2F0ZVwiO1xyXG5pbXBvcnQge1BlcnNvbmFsU2VydmljZX0gZnJvbSBcIi4uL3BlcnNvbmFsL1BlcnNvbmFsU2VydmljZVwiO1xyXG5pbXBvcnQgSVdpbmRvd1NlcnZpY2UgPSBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuL21vZGVscy9FdmVudFwiXHJcbmltcG9ydCB7UmFuZG9tVXRpbHN9IGZyb20gXCIuLi91dGlscy9SYW5kb21VdGlsc1wiO1xyXG5pbXBvcnQgSVFTZXJ2aWNlID0gYW5ndWxhci5JUVNlcnZpY2U7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoUHJvZ3Jlc3N9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhTZXJ2aWNlfSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9MZWFybmluZ1BhdGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4vZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBcHBQcm9wZXJ0aWVzfSBmcm9tIFwiLi4vdXRpbHMvQXBwUHJvcGVydGllc1wiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5cclxuaW50ZXJmYWNlIElWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aDtcclxuICAgIGxlYXJuaW5nUGF0aFByb2dyZXNzZXM6IElMZWFybmluZ1BhdGhQcm9ncmVzc1tdO1xyXG4gICAgc2VsZWN0ZWRQcm9ncmVzc0lkOiBudW1iZXI7XHJcbiAgICBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgY3VycmVudFVzZXI6IElVc2VySW5mbztcclxuICAgIGxlYXJuaW5nUGF0aENlcnRpZmljYXRlczogSVNlbGVjdGFibGVbXTtcclxuICAgIHVzZXJDZXJ0aWZpY2F0ZXM6IElVc2VyQ2VydGlmaWNhdGVbXTtcclxuXHJcbiAgICB2bT86IFZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0NlcnRpZmljYXRlc0NvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgc2VyaWFsO1xyXG5cclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGg6IElMZWFybmluZ1BhdGg7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NlczogSUxlYXJuaW5nUGF0aFByb2dyZXNzW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRQcm9ncmVzc0lkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRQcm9ncmVzczogSUxlYXJuaW5nUGF0aFByb2dyZXNzO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgY3VycmVudFVzZXI6IElVc2VySW5mbztcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXM6IElTZWxlY3RhYmxlW107XHJcblxyXG4gICAgcHVibGljIHVzZXJDZXJ0aWZpY2F0ZXM6IEFycmF5PElVc2VyQ2VydGlmaWNhdGU+O1xyXG5cclxuICAgIHB1YmxpYyBpc1VzZXJQcm9ncmVzc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0Rpc2FibGVCdXR0b25zOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgY2VydGlmaWNhdGVDb250ZW50OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY2VydGlmaWNhdGVQYXJhbWV0ZXJzOiBhbnkgPSB7XHJcbiAgICAgICAgZm9ybWF0OiAncGRmJyxcclxuICAgICAgICBjZXJ0aWZpY2F0ZVR5cGU6ICdjb21wbGV0aW9uJ1xyXG4gICAgfTtcclxuICAgIHB1YmxpYyBhcGlBcHBsaWNhdGlvblVybDogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgZG9tYWluc01hcDogTWFwPG51bWJlciwgc3RyaW5nPiA9IG51bGw7XHJcbiAgICBwdWJsaWMgc2hhcmVkQ2VydGlmaWNhdGU6IElVc2VyQ2VydGlmaWNhdGU7XHJcbiAgICBwdWJsaWMgc2hhcmVkVXJsOiBzdHJpbmcgPSAnJztcclxuICAgIHB1YmxpYyB1cmxGb3JGYWNlYm9vazogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgdXJsRm9yTGlua2VkSW46IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBcIiRzY2VcIixcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljICRzY29wZTogSVZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0NlcnRpZmljYXRlc0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljICRxOiBJUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgJHdpbmRvdzogSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY2U6IGFuZ3VsYXIuSVNDRVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcGVyc29uYWxTZXJ2aWNlOiBQZXJzb25hbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgbGVhcm5pbmdQYXRoU2VydmljZTogTGVhcm5pbmdQYXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJ1c2luZXNzVW5pdHNTZXJ2aWNlOiBCdXNpbmVzc1VuaXRzU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLnNlcmlhbCA9IFJhbmRvbVV0aWxzLmdlbmVyYXRlUmFuZG9tSWQoXCJcIik7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhRnJvbVNjb3BlKCk7XHJcblxyXG4gICAgICAgIGxldCB0bXBVcmwgPSBBcHBQcm9wZXJ0aWVzLnNlcnZpY2VSb290LnNwbGl0KCdcXC9cXC8nKVsxXS5zcGxpdCgnLicpO1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QWxsQnVEb21haW5zKCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRvbWFpbnNNYXAgPSByZXM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXBpQXBwbGljYXRpb25VcmwgPSAodG1wVXJsLmxlbmd0aCA9PSAzICYmIHRtcFVybFswXS5pbmRleE9mKCd2aHMtdGVzdCcpID09PSAtMSA/IHRtcFVybFt0bXBVcmwubGVuZ3RoIC0gMl0gKyAnLicgKyB0bXBVcmxbdG1wVXJsLmxlbmd0aCAtIDFdIDogdG1wVXJsLmpvaW4oJy4nKSkgKyAnYXBpLyc7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiR3YXRjaEdyb3VwKFtcclxuICAgICAgICAgICAgXCJsZWFybmluZ1BhdGhQcm9ncmVzc2VzXCIsXHJcbiAgICAgICAgICAgIFwidXNlckNlcnRpZmljYXRlc1wiLFxyXG4gICAgICAgICAgICBcImxlYXJuaW5nUGF0aENlcnRpZmljYXRlc1wiXHJcbiAgICAgICAgXSwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhRnJvbVNjb3BlKCk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRGF0YUZyb21TY29wZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aCA9IHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzZXMgPSB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhQcm9ncmVzc2VzO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkID0gdGhpcy4kc2NvcGUuc2VsZWN0ZWRQcm9ncmVzc0lkO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSB0aGlzLiRzY29wZS5zeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy4kc2NvcGUuY3VycmVudFVzZXI7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXMgPSB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXM7XHJcbiAgICAgICAgaWYgKHRoaXMubGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVBhcmFtZXRlcnMuY2VydGlmaWNhdGVJZCA9IHRoaXMubGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVzWzBdLmlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUudXNlckNlcnRpZmljYXRlcyAmJiAhYW5ndWxhci5lcXVhbHModGhpcy4kc2NvcGUudXNlckNlcnRpZmljYXRlcywgdGhpcy51c2VyQ2VydGlmaWNhdGVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUJ1dHRvbnMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51c2VyQ2VydGlmaWNhdGVzID0gdGhpcy4kc2NvcGUudXNlckNlcnRpZmljYXRlcztcclxuICAgICAgICBpZiAodGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzc2VzICYmIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmVzcyA9IHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3Nlcy5maWx0ZXIocCA9PiBwLmlkID09PSB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCkucG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNVc2VyUHJvZ3Jlc3NMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1VzZXJDZXJ0aWZpY2F0ZXNQZXJtaXNzaW9uc0dyYW50ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRQcm9ncmVzcyAmJiAodGhpcy5jdXJyZW50VXNlci5pZCA9PSB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3MudXNlcklkXHJcbiAgICAgICAgICAgIHx8IHRoaXMubGVhcm5pbmdQYXRoLnBlcm1pc3Npb25zLnZpZXdPdGhlclVzZXJzUHJvZ3Jlc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0dlbmVyYXRlQ2VydGlmaWNhdGVzUGVybWlzc2lvbnNHcmFudGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN5c3RlbVBlcm1pc3Npb25zICYmIHRoaXMuc2VsZWN0ZWRQcm9ncmVzcyAmJiAoXHJcbiAgICAgICAgICAgICh0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmdlbmVyYXRlTGVhcm5pbmdQYXRoc015Q2VydGlmaWNhdGVzICYmIHRoaXMuY3VycmVudFVzZXIuaWQgPT0gdGhpcy5zZWxlY3RlZFByb2dyZXNzLnVzZXJJZClcclxuICAgICAgICAgICAgfHwgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5nZW5lcmF0ZUxlYXJuaW5nUGF0aHNPdGhlcnNDZXJ0aWZpY2F0ZXMgJiYgdGhpcy5jdXJyZW50VXNlci5pZCAhPSB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3MudXNlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRVc2VyQ2VydGlmaWNhdGUoaWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGVyc29uYWxTZXJ2aWNlLmRvd25sb2FkQ2VydGlmaWNhdGUoaWQpLnRoZW4ocmVzdWx0ID0+IHRoaXMuJHdpbmRvdy5vcGVuKHJlc3VsdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVVc2VyQ2VydGlmaWNhdGVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiRG8geW91IHdhbnQgdG8gcmVtb3ZlIHRoZSBjZXJ0aWZpY2F0ZXM/XCIsIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiUmVtb3ZlIGNlcnRpZmljYXRlc1wiXHJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5yZW1vdmVVc2VyQ2VydGlmaWNhdGVzKHRoaXMubGVhcm5pbmdQYXRoLmlkLCB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlVzZXIgY2VydGlmaWNhdGVzIGhhdmUgYmVlbiByZW1vdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGVtaXQoRXZlbnQuTEVBUk5JTkdfUEFUSF9QUk9HUkVTU19SRUxPQURfUFJPR1JFU1MpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1VzZXJQcm9ncmVzc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2VydGlmaWNhdGUoZG93bmxvYWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGFyYW1ldGVyczogYW55ID0gdGhpcy5nZXRQYXJhbWV0ZXJzKCk7XHJcbiAgICAgICAgaWYgKGRvd25sb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuJHEuYWxsKFtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5kb3dubG9hZENlcnRpZmljYXRlKHBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAudGhlbigocHJvbWlzZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkb3dubG9hZENlcnRVcmw6IHN0cmluZyA9IHByb21pc2VzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5vcGVuKGRvd25sb2FkQ2VydFVybCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkxFQVJOSU5HX1BBVEhfUFJPR1JFU1NfUkVMT0FEX1BST0dSRVNTKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuZm9ybWF0ID0gJ3BuZyc7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5kb3dubG9hZENlcnRpZmljYXRlKHBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUNvbnRlbnQgPSBcIjxpbWcgc3R5bGU9XFxcIndpZHRoOiAxMDAlO1xcXCIgc3JjPVxcXCJcIiArIHJlc3VsdCArIFwiXFxcIi8+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUNlcnRpZmljYXRlRm9yVXNlcigpOiBhbmd1bGFyLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5zYXZlQ2VydGlmaWNhdGVGb3JVc2VyKHRoaXMuZ2V0UGFyYW1ldGVycygpKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNhdmVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdChFdmVudC5MRUFSTklOR19QQVRIX1BST0dSRVNTX1JFTE9BRF9QUk9HUkVTUyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFBhcmFtZXRlcnMoKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhJZDogdGhpcy5sZWFybmluZ1BhdGguaWQsXHJcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy5zZWxlY3RlZFByb2dyZXNzLnVzZXJJZCxcclxuICAgICAgICAgICAgcHJvZ3Jlc3NJZDogdGhpcy5zZWxlY3RlZFByb2dyZXNzLmlkLFxyXG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZUlkOiB0aGlzLmNlcnRpZmljYXRlUGFyYW1ldGVycy5jZXJ0aWZpY2F0ZUlkLFxyXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuY2VydGlmaWNhdGVQYXJhbWV0ZXJzLmZvcm1hdCxcclxuICAgICAgICAgICAgY2VydGlmaWNhdGVUeXBlOiB0aGlzLmNlcnRpZmljYXRlUGFyYW1ldGVycy5jZXJ0aWZpY2F0ZVR5cGVcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3B5VmVyaWZpY2F0aW9uTGluayhjZXJ0aWZpY2F0ZTogSVVzZXJDZXJ0aWZpY2F0ZSkge1xyXG4gICAgICAgIGxldCB0ZXh0ID0gdGhpcy5nZXRWZXJpZmljYXRpb25QYWdlKGNlcnRpZmljYXRlKVxyXG4gICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbSk7XHJcbiAgICAgICAgZWxlbS52YWx1ZSA9IFwiXCIgKyB0ZXh0O1xyXG4gICAgICAgIGVsZW0uc2VsZWN0KCk7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZlcmlmaWNhdGlvblBhZ2UoY2VydGlmaWNhdGU6IElVc2VyQ2VydGlmaWNhdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5kb21haW5zTWFwICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBzcGxpdGVkVXJsID0gQXBwUHJvcGVydGllcy5zZXJ2aWNlUm9vdC5zcGxpdCgnXFwvXFwvJylbMV0uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgbGV0IGRvbWFpbiA9IHNwbGl0ZWRVcmwubGVuZ3RoID09PSAzID8gc3BsaXRlZFVybFswXSArICcuJyA6ICcnO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kb21haW5zTWFwICYmIGNlcnRpZmljYXRlLmJ1c2luZXNzVW5pdElkICYmIHRoaXMuZG9tYWluc01hcFtjZXJ0aWZpY2F0ZS5idXNpbmVzc1VuaXRJZF0pIHtcclxuICAgICAgICAgICAgICAgIGRvbWFpbiA9IHRoaXMuZG9tYWluc01hcFtjZXJ0aWZpY2F0ZS5idXNpbmVzc1VuaXRJZF0gKyAnLic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBBcHBQcm9wZXJ0aWVzLnNlcnZpY2VSb290LnNwbGl0KCdcXC9cXC8nKVswXSArICcvLycgKyBkb21haW4gKyAodGhpcy5hcGlBcHBsaWNhdGlvblVybC5pbmRleE9mKFwidmhzLXRlc3RcIikgIT09IC0xICYmIGRvbWFpbiA/IHRoaXMuYXBpQXBwbGljYXRpb25VcmwucmVwbGFjZShzcGxpdGVkVXJsWzBdICsgJy4nLCAnJykgOiB0aGlzLmFwaUFwcGxpY2F0aW9uVXJsKSArIGB2ZXJpZmljYXRpb24vY2VydGlmaWNhdGUvJHtjZXJ0aWZpY2F0ZS51dWlkfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93U2hhcmVEaWFsb2coY2VydGlmaWNhdGU6IElVc2VyQ2VydGlmaWNhdGUpIHtcclxuICAgICAgICB0aGlzLnNoYXJlZENlcnRpZmljYXRlID0gY2VydGlmaWNhdGU7XHJcbiAgICAgICAgdGhpcy5zaGFyZWRVcmwgPSB0aGlzLmdldFZlcmlmaWNhdGlvblBhZ2UoY2VydGlmaWNhdGUpO1xyXG4gICAgICAgIHRoaXMudXJsRm9yRmFjZWJvb2sgPSB0aGlzLiRzY2UudHJ1c3RBc1Jlc291cmNlVXJsKGBodHRwczovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9zaGFyZV9idXR0b24ucGhwP2hyZWY9JHt0aGlzLnNoYXJlZFVybCArICc/bGF0ZXN0J30mbGF5b3V0PWJ1dHRvbiZzaXplPWxhcmdlJndpZHRoPTc3JmhlaWdodD0yOCZhcHBJZGApO1xyXG4gICAgICAgIHRoaXMuZ2V0TGlua0ZvckxpbmtlZEluKCk7XHJcbiAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICQoXCIjc2hhcmVEaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNoYXJlRGlhbG9nKCkge1xyXG4gICAgICAgIHRoaXMuc2hhcmVkQ2VydGlmaWNhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2hhcmVkVXJsID0gXCJcIjtcclxuICAgICAgICB0aGlzLnVybEZvckZhY2Vib29rID0gXCJcIjtcclxuICAgICAgICB0aGlzLnVybEZvckxpbmtlZEluID0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERhdGUoZGF0ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RXhwaXJhdGlvbkRhdGVGb3JVcmwoZGF0ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFkYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2YWxpZFRvID0gbmV3IERhdGUoZGF0ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiAnJmV4cGlyYXRpb25ZZWFyPScgKyB2YWxpZFRvLmdldEZ1bGxZZWFyKCkgKyAnJmV4cGlyYXRpb25Nb250aD0nICsgdmFsaWRUby5nZXRNb250aCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TGlua0ZvckxpbmtlZEluKCkge1xyXG4gICAgICAgIGNvbnN0IGJ1c2luZXNzVW5pdElkID0gdGhpcy5zaGFyZWRDZXJ0aWZpY2F0ZS5idXNpbmVzc1VuaXRJZCA/IHRoaXMuc2hhcmVkQ2VydGlmaWNhdGUuYnVzaW5lc3NVbml0SWQgOiAxO1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QnVzaW5lc3NVbml0QnlJZChidXNpbmVzc1VuaXRJZCkudGhlbihidXNpbmVzc1VuaXQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVybEZvckxpbmtlZEluID0gJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9wcm9maWxlL2FkZD9zdGFydFRhc2s9Q0VSVElGSUNBVElPTl9OQU1FJm5hbWU9J1xyXG4gICAgICAgICAgICAgICAgKyB0aGlzLnNoYXJlZENlcnRpZmljYXRlLnRpdGxlICsgJyZvcmdhbml6YXRpb25OYW1lPScgKyBidXNpbmVzc1VuaXQubmFtZSArICcmaXNzdWVZZWFyPSdcclxuICAgICAgICAgICAgICAgICsgdGhpcy5nZXREYXRlKHRoaXMuc2hhcmVkQ2VydGlmaWNhdGUucmVjZWlwdERhdGUpLmdldEZ1bGxZZWFyKCkgKyAnJmlzc3VlTW9udGg9J1xyXG4gICAgICAgICAgICAgICAgKyB0aGlzLmdldERhdGUodGhpcy5zaGFyZWRDZXJ0aWZpY2F0ZS5yZWNlaXB0RGF0ZSkuZ2V0TW9udGgoKSArIHRoaXMuZ2V0RXhwaXJhdGlvbkRhdGVGb3JVcmwodGhpcy5zaGFyZWRDZXJ0aWZpY2F0ZS52YWxpZFRvRGF0ZSlcclxuICAgICAgICAgICAgICAgICsgJyZjZXJ0VXJsPScgKyB0aGlzLnNoYXJlZFVybDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0NlcnRpZmljYXRlc0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0NlcnRpZmljYXRlc0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0NlcnRpZmljYXRlc0NvbnRyb2xsZXIpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDZXJ0aWZpY2F0ZXNDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aDogXCI9dmhzTGVhcm5pbmdQYXRoXCIsXHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aFByb2dyZXNzZXM6IFwiPXZoc0xlYXJuaW5nUGF0aFByb2dyZXNzZXNcIixcclxuICAgICAgICAgICAgc2VsZWN0ZWRQcm9ncmVzc0lkOiBcIj12aHNTZWxlY3RlZFByb2dyZXNzSWRcIixcclxuICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnM6IFwiPXZoc1N5c3RlbVBlcm1pc3Npb25zXCIsXHJcbiAgICAgICAgICAgIGN1cnJlbnRVc2VyOiBcIj12aHNDdXJyZW50VXNlclwiLFxyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXM6IFwiPXZoc0xlYXJuaW5nUGF0aENlcnRpZmljYXRlc1wiLFxyXG4gICAgICAgICAgICB1c2VyQ2VydGlmaWNhdGVzOiBcIj12aHNVc2VyQ2VydGlmaWNhdGVzXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtaW5kaXZpZHVhbC1sZWFybmluZy1wYXRoLXByb2dyZXNzLWNlcnRpZmljYXRlcy5odG1sXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0NlcnRpZmljYXRlc0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7UHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Qcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IElRU2VydmljZSA9IGFuZ3VsYXIuSVFTZXJ2aWNlO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoUHJvZ3Jlc3N9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoQ291cnNlfSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aENvdXJzZVwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhQZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lMZWFybmluZ1BhdGhQZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuL21vZGVscy9FdmVudFwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhDb3Vyc2VQcm9ncmVzc30gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhDb3Vyc2VQcm9ncmVzc1wiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcblxyXG5pbnRlcmZhY2UgSVZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0RldGFpbHNEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aDtcclxuICAgIGxlYXJuaW5nUGF0aFByb2dyZXNzZXM6IElMZWFybmluZ1BhdGhQcm9ncmVzc1tdO1xyXG4gICAgbGVhcm5pbmdQYXRoQ291cnNlczogSUxlYXJuaW5nUGF0aENvdXJzZVtdO1xyXG4gICAgY291cnNlUHJvZ3Jlc3NlczogSUxlYXJuaW5nUGF0aENvdXJzZVByb2dyZXNzW107XHJcbiAgICBzZWxlY3RlZFByb2dyZXNzSWQ6IG51bWJlcjtcclxuICAgIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBsZWFybmluZ1BhdGhQZXJtaXNzaW9uczogSUxlYXJuaW5nUGF0aFBlcm1pc3Npb25zO1xyXG5cclxuICAgIHZtPzogVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzRGV0YWlsc0NvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEZXRhaWxzQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aDtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhQcm9ncmVzc2VzOiBJTGVhcm5pbmdQYXRoUHJvZ3Jlc3NbXTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFByb2dyZXNzSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFByb2dyZXNzOiBJTGVhcm5pbmdQYXRoUHJvZ3Jlc3M7XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoUGVybWlzc2lvbnM6IElMZWFybmluZ1BhdGhQZXJtaXNzaW9ucztcclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoQ291cnNlczogSUxlYXJuaW5nUGF0aENvdXJzZVtdID0gW107XHJcbiAgICBwdWJsaWMgY291cnNlUHJvZ3Jlc3NlczogSUxlYXJuaW5nUGF0aENvdXJzZVByb2dyZXNzW10gPSBbXTtcclxuICAgIHB1YmxpYyBjb3Vyc2VQcm9ncmVzc0J5Q291cnNlSWQ6IE1hcDxudW1iZXIsIElMZWFybmluZ1BhdGhDb3Vyc2VQcm9ncmVzcz4gPSBuZXcgTWFwPG51bWJlciwgSUxlYXJuaW5nUGF0aENvdXJzZVByb2dyZXNzPigpO1xyXG5cclxuICAgIHB1YmxpYyBpc0Rpc2FibGVCdXR0b25zOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgcm93U2hvdzogTWFwPG51bWJlciwgYm9vbGVhbj4gPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgUHJvZ3Jlc3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyAkc2NvcGU6IElWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEZXRhaWxzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgJHE6IElRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBwcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YUZyb21TY29wZSgpO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2hHcm91cChbXHJcbiAgICAgICAgICAgIFwic2VsZWN0ZWRQcm9ncmVzc0lkXCIsXHJcbiAgICAgICAgICAgIFwibGVhcm5pbmdQYXRoUHJvZ3Jlc3Nlc1wiLFxyXG4gICAgICAgICAgICBcImNvdXJzZVByb2dyZXNzZXNcIlxyXG4gICAgICAgIF0sICgobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZURhdGFGcm9tU2NvcGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGggPSB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGg7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzc2VzID0gdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoUHJvZ3Jlc3NlcztcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXMgPSB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhDb3Vyc2VzO1xyXG4gICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3NlcyA9IHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzZXM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQgPSB0aGlzLiRzY29wZS5zZWxlY3RlZFByb2dyZXNzSWQ7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHRoaXMuJHNjb3BlLnN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoUGVybWlzc2lvbnMgPSB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhQZXJtaXNzaW9ucztcclxuICAgICAgICB0aGlzLmdyb3VwQ291cnNlUHJvZ3Jlc3NlcygpO1xyXG4gICAgICAgIGlmICghdGhpcy5jb3Vyc2VQcm9ncmVzc2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXMgJiYgdGhpcy5jb3Vyc2VQcm9ncmVzc2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQnV0dG9ucyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzc2VzICYmIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmVzcyA9IHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3Nlcy5maWx0ZXIocCA9PiBwLmlkID09PSB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCkucG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBncm91cENvdXJzZVByb2dyZXNzZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc0J5Q291cnNlSWQuY2xlYXIoKTtcclxuICAgICAgICBpZiAodGhpcy5jb3Vyc2VQcm9ncmVzc2VzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNvdXJzZVByb2dyZXNzIG9mIHRoaXMuY291cnNlUHJvZ3Jlc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc0J5Q291cnNlSWQuc2V0KGNvdXJzZVByb2dyZXNzLmNvdXJzZUlkLCBjb3Vyc2VQcm9ncmVzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGVDb3Vyc2VQcm9ncmVzcyhjb3Vyc2VJZDogbnVtYmVyLCBjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZUJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiRG8geW91IHdhbnQgdG8gZGVhY3RpdmF0ZSB1c2VyIHByb2dyZXNzIG9uIHRoaXMgY291cnNlP1wiLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkRlYWN0aXZhdGUgdXNlciBwcm9ncmVzc1wiXHJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmRlYWN0aXZhdGVDb3Vyc2VQcm9ncmVzcyhjb3Vyc2VJZCwgY291cnNlUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdChFdmVudC5MRUFSTklOR19QQVRIX1BST0dSRVNTX1JFTE9BRF9QUk9HUkVTUyk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmNvbW1vbkVycm9yKHJlc3BvbnNlKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUJ1dHRvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVCdXR0b25zID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbXBsZXRlQ291cnNlUHJvZ3Jlc3MoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVCdXR0b25zID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIkRvIHlvdSB3YW50IHRvIGNvbXBsZXRlIHVzZXIgcHJvZ3Jlc3Mgb24gdGhpcyBjb3Vyc2U/XCIsIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiQ29tcGxldGUgdXNlciBwcm9ncmVzc1wiXHJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmNvbXBsZXRlQ291cnNlUHJvZ3Jlc3MoY291cnNlSWQsIGNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGVtaXQoRXZlbnQuTEVBUk5JTkdfUEFUSF9QUk9HUkVTU19SRUxPQURfUFJPR1JFU1MpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5jb21tb25FcnJvcihyZXNwb25zZSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVCdXR0b25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQnV0dG9ucyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q291cnNlUHJvZ3Jlc3NEZXRhaWxzKGNvdXJzZUlkOiBudW1iZXIsIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGxldCBhcmdzID0ge1xyXG4gICAgICAgICAgICBjb3Vyc2VJZDogY291cnNlSWQsXHJcbiAgICAgICAgICAgIGNvdXJzZVByb2dyZXNzSWQ6IGNvdXJzZVByb2dyZXNzSWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkxFQVJOSU5HX1BBVEhfUFJPR1JFU1NfU0hPV19DT1VSU0VfUFJPR1JFU1NfREVUQUlMUywgYXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dEZXRhaWxzKGluZGV4OiBudW1iZXIsIGtleUNvZGU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICgodGhpcy5jb3Vyc2VQcm9ncmVzc0J5Q291cnNlSWQuZ2V0KGluZGV4KS5hY3RpdmVcclxuICAgICAgICAgICAgICAgIHx8ICh0aGlzLmNvdXJzZVByb2dyZXNzQnlDb3Vyc2VJZC5nZXQoaW5kZXgpLmFjdGl2ZSAmJiB0aGlzLmNvdXJzZVByb2dyZXNzQnlDb3Vyc2VJZC5nZXQoaW5kZXgpLnN0YXR1cyAhPSAnQ09NUExFVEVEJykpXHJcbiAgICAgICAgICAgICAgICAmJiAoa2V5Q29kZSA9PSAxMyB8fCAha2V5Q29kZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dTaG93LnNldChpbmRleCwgIXRoaXMucm93U2hvdy5nZXQoaW5kZXgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlY29kZVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdHlwZTtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIk1hbmRhdG9yeVwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIk1hbmRhdG9yeVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkVsZWN0aXZlXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiRWxlY3RpdmVcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEZXRhaWxzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEZXRhaWxzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzRGV0YWlsc0NvbnRyb2xsZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0RldGFpbHNDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aDogXCI9dmhzTGVhcm5pbmdQYXRoXCIsXHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aFByb2dyZXNzZXM6IFwiPXZoc0xlYXJuaW5nUGF0aFByb2dyZXNzZXNcIixcclxuICAgICAgICAgICAgbGVhcm5pbmdQYXRoQ291cnNlczogXCI9dmhzTGVhcm5pbmdQYXRoQ291cnNlc1wiLFxyXG4gICAgICAgICAgICBjb3Vyc2VQcm9ncmVzc2VzOiBcIj12aHNDb3Vyc2VQcm9ncmVzc2VzXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkUHJvZ3Jlc3NJZDogXCI9dmhzU2VsZWN0ZWRQcm9ncmVzc0lkXCIsXHJcbiAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zOiBcIj12aHNTeXN0ZW1QZXJtaXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhQZXJtaXNzaW9uczogXCI9dmhzTGVhcm5pbmdQYXRoUGVybWlzc2lvbnNcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLWluZGl2aWR1YWwtbGVhcm5pbmctcGF0aC1wcm9ncmVzcy1kZXRhaWxzLmh0bWxcIilcclxuICAgIH1cclxufVxyXG5cclxuVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzRGV0YWlsc0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoQ291cnNlfSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aENvdXJzZVwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhQcm9ncmVzc30gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhQcm9ncmVzc1wiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi4vSVNlbGVjdGFibGVcIjtcclxuaW1wb3J0IHtJVXNlckNlcnRpZmljYXRlfSBmcm9tIFwiLi4vcGVyc29uYWwvbW9kZWxzL0lVc2VyQ2VydGlmaWNhdGVcIjtcclxuaW1wb3J0IHtQYXJ0aWNpcGF0aW9uRm9ybUZpZWxkfSBmcm9tIFwiLi4vY29tbW9uL0lQYXJ0aWNpcGF0aW9uRm9ybVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZX0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoQ291cnNlUHJvZ3Jlc3N9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoQ291cnNlUHJvZ3Jlc3NcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBsZWFybmluZ1BhdGg6IElMZWFybmluZ1BhdGg7XHJcbiAgICBsZWFybmluZ1BhdGhDb3Vyc2VzOiBJTGVhcm5pbmdQYXRoQ291cnNlW107XHJcbiAgICB1c2VyUHJvZ3Jlc3NlczogSUxlYXJuaW5nUGF0aFByb2dyZXNzW107XHJcbiAgICBzZWxlY3RlZFByb2dyZXNzSWQ6IG51bWJlcjtcclxuICAgIGNvdXJzZVByb2dyZXNzZXM6IElMZWFybmluZ1BhdGhDb3Vyc2VQcm9ncmVzc1tdO1xyXG4gICAgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHBhcnRpY2lwYXRpb25Gb3JtOiBNYXA8c3RyaW5nLCBhbnk+O1xyXG4gICAgcGFydGljaXBhdGlvbkZvcm1GaWVsZHM6IFBhcnRpY2lwYXRpb25Gb3JtRmllbGRbXTtcclxuICAgIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcbiAgICBsZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXM6IElTZWxlY3RhYmxlW107XHJcbiAgICB1c2VyQ2VydGlmaWNhdGVzOiBJVXNlckNlcnRpZmljYXRlW107XHJcblxyXG4gICAgdm0/OiBWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIHZpZXdUeXBlOiBzdHJpbmc7IC8vIHBhcnRpY2lwYXRpb25Gb3JtIHwgcHJvZ3Jlc3NEZXRhaWxzIHwgY2VydGlmaWNhdGVzXHJcblxyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aDtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhDb3Vyc2VzOiBJTGVhcm5pbmdQYXRoQ291cnNlW107XHJcbiAgICBwdWJsaWMgdXNlclByb2dyZXNzZXM6IElMZWFybmluZ1BhdGhQcm9ncmVzc1tdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkUHJvZ3Jlc3NJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGNvdXJzZVByb2dyZXNzZXM6IElMZWFybmluZ1BhdGhDb3Vyc2VQcm9ncmVzc1tdO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgcGFydGljaXBhdGlvbkZvcm06IE1hcDxzdHJpbmcsIGFueT47XHJcbiAgICBwdWJsaWMgcGFydGljaXBhdGlvbkZvcm1GaWVsZHM6IFBhcnRpY2lwYXRpb25Gb3JtRmllbGRbXTtcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcjogSVVzZXJJbmZvO1xyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aENlcnRpZmljYXRlczogSVNlbGVjdGFibGVbXTtcclxuICAgIHB1YmxpYyB1c2VyQ2VydGlmaWNhdGVzOiBJVXNlckNlcnRpZmljYXRlW107XHJcblxyXG4gICAgcHVibGljIHNlbGVjdGVkUHJvZ3Jlc3M6IElMZWFybmluZ1BhdGhQcm9ncmVzcztcclxuICAgIHB1YmxpYyBpc0luaXRpYWxpemVkID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyAkc2NvcGU6IElWaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlOiBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSBcInByb2dyZXNzRGV0YWlsc1wiO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2hHcm91cChbXHJcbiAgICAgICAgICAgIFwibGVhcm5pbmdQYXRoXCIsXHJcbiAgICAgICAgICAgIFwibGVhcm5pbmdQYXRoQ291cnNlc1wiLFxyXG4gICAgICAgICAgICBcInVzZXJQcm9ncmVzc2VzXCIsXHJcbiAgICAgICAgICAgIFwic2VsZWN0ZWRQcm9ncmVzc0lkXCIsXHJcbiAgICAgICAgICAgIFwiY291cnNlUHJvZ3Jlc3Nlc1wiLFxyXG4gICAgICAgICAgICBcInBhcnRpY2lwYXRpb25Gb3JtXCIsXHJcbiAgICAgICAgICAgIFwiY3VycmVudFVzZXJcIixcclxuICAgICAgICAgICAgXCJ1c2VyQ2VydGlmaWNhdGVzXCJcclxuICAgICAgICBdLCAoKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhRnJvbVNjb3BlKCk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEYXRhRnJvbVNjb3BlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoID0gdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoQ291cnNlcyA9IHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aENvdXJzZXM7XHJcbiAgICAgICAgdGhpcy51c2VyUHJvZ3Jlc3NlcyA9IHRoaXMuJHNjb3BlLnVzZXJQcm9ncmVzc2VzO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkID0gdGhpcy4kc2NvcGUuc2VsZWN0ZWRQcm9ncmVzc0lkO1xyXG4gICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3NlcyA9IHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzZXM7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHRoaXMuJHNjb3BlLnN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB0aGlzLiRzY29wZS5jdXJyZW50VXNlcjtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtID0gdGhpcy4kc2NvcGUucGFydGljaXBhdGlvbkZvcm07XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybUZpZWxkcyA9IHRoaXMuJHNjb3BlLnBhcnRpY2lwYXRpb25Gb3JtRmllbGRzO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVzID0gdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVzO1xyXG4gICAgICAgIHRoaXMudXNlckNlcnRpZmljYXRlcyA9IHRoaXMuJHNjb3BlLnVzZXJDZXJ0aWZpY2F0ZXM7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlclByb2dyZXNzZXMgJiYgdGhpcy51c2VyUHJvZ3Jlc3Nlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyZXNzID0gdGhpcy51c2VyUHJvZ3Jlc3Nlcy5maWx0ZXIocCA9PiBwLmlkID09PSB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCkucG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNlbGVjdGVkUHJvZ3Jlc3NDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc2VzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVzZXJDZXJ0aWZpY2F0ZXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkxFQVJOSU5HX1BBVEhfUFJPR1JFU1NfQ0hBTkdFX1BST0dSRVNTX0VYVEVSTkFMTFksIHtzZWxlY3RlZFByb2dyZXNzSWQ6IHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dUYWIodGFiTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRhYk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlbGVjdGVkUHJvZ3Jlc3NTdGF0dXMoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFByb2dyZXNzID8gdGhpcy5zZWxlY3RlZFByb2dyZXNzLnN0YXR1cyA6IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGVMZWFybmluZ1BhdGhQcm9ncmVzcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcclxuICAgICAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBkZWFjdGl2YXRlIHVzZXIgcHJvZ3Jlc3Mgb24gdGhpcyBsZWFybmluZyBwYXRoP1wiLCB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJEZWFjdGl2YXRlIHVzZXIgcHJvZ3Jlc3M/XCIsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIlllc1wiLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uOiBcIk5vXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UuZGVhY3RpdmF0ZUxlYXJuaW5nUGF0aFByb2dyZXNzKHRoaXMubGVhcm5pbmdQYXRoLmlkLCB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3MuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdChFdmVudC5MRUFSTklOR19QQVRIX1BST0dSRVNTX1JFU0VUX1BST0dSRVNTKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuY29tbW9uRXJyb3IocmVzcG9uc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0luZGl2aWR1YWxMZWFybmluZ1BhdGhQcm9ncmVzc0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzSW5kaXZpZHVhbExlYXJuaW5nUGF0aFByb2dyZXNzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGg6IFwiPXZoc0xlYXJuaW5nUGF0aFwiLFxyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhDb3Vyc2VzOiBcIj12aHNMZWFybmluZ1BhdGhDb3Vyc2VzXCIsXHJcbiAgICAgICAgICAgIHVzZXJQcm9ncmVzc2VzOiBcIj12aHNVc2VyUHJvZ3Jlc3Nlc1wiLFxyXG4gICAgICAgICAgICBzZWxlY3RlZFByb2dyZXNzSWQ6IFwiPXZoc1NlbGVjdGVkUHJvZ3Jlc3NJZFwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VQcm9ncmVzc2VzOiBcIj12aHNDb3Vyc2VQcm9ncmVzc2VzXCIsXHJcbiAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zOiBcIj12aHNTeXN0ZW1QZXJtaXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBwYXJ0aWNpcGF0aW9uRm9ybTogXCI9dmhzUGFydGljaXBhdGlvbkZvcm1cIixcclxuICAgICAgICAgICAgcGFydGljaXBhdGlvbkZvcm1GaWVsZHM6IFwiPXZoc1BhcnRpY2lwYXRpb25Gb3JtRmllbGRzXCIsXHJcbiAgICAgICAgICAgIGN1cnJlbnRVc2VyOiBcIj12aHNDdXJyZW50VXNlclwiLFxyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXM6IFwiPXZoc0xlYXJuaW5nUGF0aENlcnRpZmljYXRlc1wiLFxyXG4gICAgICAgICAgICB1c2VyQ2VydGlmaWNhdGVzOiBcIj12aHNVc2VyQ2VydGlmaWNhdGVzXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1pbmRpdmlkdWFsLWxlYXJuaW5nLXBhdGgtcHJvZ3Jlc3MuaHRtbFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5WaHNJbmRpdmlkdWFsTGVhcm5pbmdQYXRoUHJvZ3Jlc3NEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Qcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlUHJvZ3Jlc3N9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JQ291cnNlUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IElXaW5kb3dTZXJ2aWNlID0gYW5ndWxhci5JV2luZG93U2VydmljZTtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUNvdXJzZVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSUNvdXJzZVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGFydGljaXBhdGlvbkZvcm1GaWVsZH0gZnJvbSBcIi4uL2NvbW1vbi9JUGFydGljaXBhdGlvbkZvcm1cIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi9tb2RlbHMvRXZlbnRcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzSW5kaXZpZHVhbFBhcnRpY2lwYXRpb25JbmZvRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgY291cnNlUHJvZ3Jlc3NlczogSUNvdXJzZVByb2dyZXNzW107XHJcbiAgICBzZWxlY3RlZFByb2dyZXNzSWQ6IG51bWJlcjtcclxuICAgIHBhcnRpY2lwYXRpb25Gb3JtOiBNYXA8c3RyaW5nLCBhbnk+O1xyXG4gICAgcGFydGljaXBhdGlvbkZvcm1GaWVsZHM6IFBhcnRpY2lwYXRpb25Gb3JtRmllbGRbXTtcclxuICAgIGNvdXJzZVBlcm1pc3Npb25zOiBJQ291cnNlUGVybWlzc2lvbnM7XHJcbiAgICBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgdm0/OiBWaHNJbmRpdmlkdWFsUGFydGljaXBhdGlvbkluZm9Db250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzSW5kaXZpZHVhbFBhcnRpY2lwYXRpb25JbmZvQ29udHJvbGxlciB7XHJcbiAgICBcclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGNvdXJzZVByb2dyZXNzZXM6IElDb3Vyc2VQcm9ncmVzc1tdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkUHJvZ3Jlc3NJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtOiBNYXA8c3RyaW5nLCBhbnk+O1xyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtRmllbGRzOiBQYXJ0aWNpcGF0aW9uRm9ybUZpZWxkW107XHJcbiAgICBwdWJsaWMgY291cnNlUGVybWlzc2lvbnM6IElDb3Vyc2VQZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHB1YmxpYyBpc0VkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjb250cm9sQnV0dG9uc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZWRpdGluZ1BhcnRpY2lwYXRpb25Gb3JtRGF0YTogYW55ID0ge307XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFByb2dyZXNzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgJHNjb3BlOiBJVmhzSW5kaXZpZHVhbFBhcnRpY2lwYXRpb25JbmZvRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgJHdpbmRvdzogSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBwcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSkge1xyXG5cclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YUZyb21TY29wZSgpO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2goXCJwYXJ0aWNpcGF0aW9uRm9ybVwiLCAoKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgPT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFGcm9tU2NvcGUoKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEYXRhRnJvbVNjb3BlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSB0aGlzLiRzY29wZS5jb3Vyc2VJZDtcclxuICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzZXMgPSB0aGlzLiRzY29wZS5jb3Vyc2VQcm9ncmVzc2VzO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkID0gdGhpcy4kc2NvcGUuc2VsZWN0ZWRQcm9ncmVzc0lkO1xyXG4gICAgICAgIHRoaXMuY291cnNlUGVybWlzc2lvbnMgPSB0aGlzLiRzY29wZS5jb3Vyc2VQZXJtaXNzaW9ucztcclxuICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gdGhpcy4kc2NvcGUuc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSA9IHRoaXMuJHNjb3BlLnBhcnRpY2lwYXRpb25Gb3JtO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm1GaWVsZHMgPSB0aGlzLiRzY29wZS5wYXJ0aWNpcGF0aW9uRm9ybUZpZWxkcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNFbXB0eUZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFydGljaXBhdGlvbkZvcm0gIT09IG51bGwgJiYgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSAhPT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKHRoaXMucGFydGljaXBhdGlvbkZvcm0pLmxlbmd0aCA9PT0gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0S2V5TmFtZUJ5S2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQga2V5TmFtZSA9IGtleTtcclxuICAgICAgICBpZiAodGhpcy5wYXJ0aWNpcGF0aW9uRm9ybUZpZWxkcyAmJiB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgZmllbGQgPSB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRmllbGRzLmZpbHRlcihmID0+IGYuZmllbGRLZXkgPT09IGtleSkucG9wKCk7XHJcbiAgICAgICAgICAgIGtleU5hbWUgPSBmaWVsZCA/IGZpZWxkLm5hbWUgOiBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBrZXlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydFBhcnRpY2lwYXRpb25Gb3JtRWRpdGluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRmllbGRzLmZvckVhY2goKGZpZWxkOiBQYXJ0aWNpcGF0aW9uRm9ybUZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdGluZ1BhcnRpY2lwYXRpb25Gb3JtRGF0YVtmaWVsZC5maWVsZEtleV0gPSB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtW2ZpZWxkLmZpZWxkS2V5XTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnBhcnRpY2lwYXRpb25Gb3JtKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRmllbGRzLmZpbHRlcihmID0+IGYuZmllbGRLZXkgPT09IGtleSkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdGluZ1BhcnRpY2lwYXRpb25Gb3JtRGF0YVtrZXldID0gdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxQYXJ0aWNpcGF0aW9uRm9ybUVkaXRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nUGFydGljaXBhdGlvbkZvcm1EYXRhID0ge307XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3VibWl0UGFydGljaXBhdGlvbkZvcm1FZGl0aW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udHJvbEJ1dHRvbnNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2Uuc2V0UGFydGljaXBhdGlvbkZvcm1EYXRhKHRoaXMuY291cnNlSWQsIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkLCB0aGlzLmVkaXRpbmdQYXJ0aWNpcGF0aW9uRm9ybURhdGEpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJQYXJ0aWNpcGF0aW9uIEZvcm0gZGF0YSBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdChFdmVudC5DT1VSU0VfUFJPR1JFU1NfUkVMT0FEX1BST0dSRVNTKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdGluZ1BhcnRpY2lwYXRpb25Gb3JtRGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sQnV0dG9uc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzSW5kaXZpZHVhbFBhcnRpY2lwYXRpb25JbmZvRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNJbmRpdmlkdWFsUGFydGljaXBhdGlvbkluZm9EaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNJbmRpdmlkdWFsUGFydGljaXBhdGlvbkluZm9Db250cm9sbGVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNJbmRpdmlkdWFsUGFydGljaXBhdGlvbkluZm9Db250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGNvdXJzZUlkOiBcIj1cIixcclxuICAgICAgICAgICAgY291cnNlUHJvZ3Jlc3NlczogXCI9XCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkUHJvZ3Jlc3NJZDogXCI9XCIsXHJcbiAgICAgICAgICAgIHBhcnRpY2lwYXRpb25Gb3JtOiBcIj1cIixcclxuICAgICAgICAgICAgcGFydGljaXBhdGlvbkZvcm1GaWVsZHM6IFwiPVwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VQZXJtaXNzaW9uczogXCI9XCIsXHJcbiAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zOiBcIj1cIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1pbmRpdmlkdWFsLXBhcnRpY2lwYXRpb24taW5mby5odG1sXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblZoc0luZGl2aWR1YWxQYXJ0aWNpcGF0aW9uSW5mb0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7Q29tbW9uU2VydmljZX0gZnJvbSBcIi4uL2NvbW1vbi9Db21tb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoUHJvZ3Jlc3N9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhTZXJ2aWNlfSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9MZWFybmluZ1BhdGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9MZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2VcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzTGVhcm5pbmdQYXRoQ29udHJvbHNTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGxlYXJuaW5nUGF0aElkOiBudW1iZXI7XHJcbiAgICBsZWFybmluZ1BhdGg/OiBJTGVhcm5pbmdQYXRoO1xyXG4gICAgbGVhcm5pbmdQYXRoUHJvZ3Jlc3M/OiBJTGVhcm5pbmdQYXRoUHJvZ3Jlc3M7XHJcbiAgICBpc1BhcnRpY2lwYXRpb25Gb3JtU3BlY2lmaWVkPzogYm9vbGVhbjtcclxuXHJcbiAgICB2bT86IFZoc0xlYXJuaW5nUGF0aENvbnRyb2xzQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0xlYXJuaW5nUGF0aENvbnRyb2xzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgaXNMZWFybmluZ1BhdGhMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc0xlYXJuaW5nUGF0aENvbnRyb2xzU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aFNlcnZpY2U6IExlYXJuaW5nUGF0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZTogTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICBpZiAoJHNjb3BlLmlzUGFydGljaXBhdGlvbkZvcm1TcGVjaWZpZWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0UGFydGljaXBhdGlvbkZvcm1TcGVjaWZpZWQodGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoSWQsICdMRUFSTklOR19QQVRIJylcclxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmlzUGFydGljaXBhdGlvbkZvcm1TcGVjaWZpZWQgPSAocmVzdWx0ID09PSB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGxvYWRMZWFybmluZ1BhdGhQcm9taXNlcyA9IFtdO1xyXG4gICAgICAgIGlmICgkc2NvcGUubGVhcm5pbmdQYXRoID09IG51bGwpIHtcclxuICAgICAgICAgICAgbG9hZExlYXJuaW5nUGF0aFByb21pc2VzLnB1c2godGhpcy5sb2FkTGVhcm5pbmdQYXRoKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJHNjb3BlLmxlYXJuaW5nUGF0aFByb2dyZXNzID09IG51bGwpIHtcclxuICAgICAgICAgICAgbG9hZExlYXJuaW5nUGF0aFByb21pc2VzLnB1c2godGhpcy5sb2FkTGVhcm5pbmdQYXRoUHJvZ3Jlc3MoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgkc2NvcGUuaXNQYXJ0aWNpcGF0aW9uRm9ybVNwZWNpZmllZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxvYWRMZWFybmluZ1BhdGhQcm9taXNlcy5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5nZXRQYXJ0aWNpcGF0aW9uRm9ybVNwZWNpZmllZCh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZCwgJ0xFQVJOSU5HX1BBVEgnKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuaXNQYXJ0aWNpcGF0aW9uRm9ybVNwZWNpZmllZCA9IChyZXN1bHQgPT09IHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJHEuYWxsKGxvYWRMZWFybmluZ1BhdGhQcm9taXNlcylcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZExlYXJuaW5nUGF0aCgpOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGg+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLmdldCh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnRoZW4oKGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoID0gYW5ndWxhci5jb3B5KGxlYXJuaW5nUGF0aCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRMZWFybmluZ1BhdGhQcm9ncmVzcygpOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGhQcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5nZXRMZWFybmluZ1BhdGhQcm9ncmVzcyh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnRoZW4oKGxlYXJuaW5nUGF0aFByb2dyZXNzOiBJTGVhcm5pbmdQYXRoUHJvZ3Jlc3MpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aFByb2dyZXNzID0gYW5ndWxhci5jb3B5KGxlYXJuaW5nUGF0aFByb2dyZXNzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhQcm9ncmVzcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRldGFpbHNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLmRldGFpbHNVcmwodGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmaWxsUGFydGljaXBhdGlvbkZvcm1VcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLnBhcnRpY2lwYXRpb25Gb3JtRmlsbFVybCh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByb2dyZXNzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoc1JvdXRlci5wcm9ncmVzc1VybCh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRMZWFybmluZ1BhdGhVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLnVwZGF0ZVVybCh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRQYXJ0aWNpcGF0aW9uRm9ybVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIucGFydGljaXBhdGlvbkZvcm1VcGRhdGVVcmwodGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHRlbmRlZU1hbmFnZW1lbnRVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLnBlcm1pc3Npb25zRGVsZWdhdGlvblVybCh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNMZWFybmluZ1BhdGhDb250cm9sc0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzTGVhcm5pbmdQYXRoQ29udHJvbHNTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNMZWFybmluZ1BhdGhDb250cm9sc0NvbnRyb2xsZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0xlYXJuaW5nUGF0aENvbnRyb2xzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhJZDogXCI9dmhzTGVhcm5pbmdQYXRoSWRcIixcclxuICAgICAgICAgICAgbGVhcm5pbmdQYXRoOiBcIj0/dmhzTGVhcm5pbmdQYXRoXCIsXHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aFByb2dyZXNzOiBcIj0/dmhzTGVhcm5pbmdQYXRoUHJvZ3Jlc3NcIixcclxuICAgICAgICAgICAgaXNQYXJ0aWNpcGF0aW9uRm9ybVNwZWNpZmllZDogXCI9P3Zoc1BhcnRpY2lwYXRpb25Gb3JtU3BlY2lmaWVkXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1sZWFybmluZy1wYXRoLWNvbnRyb2xzLmh0bWxcIilcclxuICAgIH07XHJcbn1cclxuXHJcblZoc0xlYXJuaW5nUGF0aENvbnRyb2xzRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRofSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aFwiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGV9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9MZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlXCI7XHJcblxyXG5pbnRlcmZhY2UgSVZoc0xlYXJuaW5nUGF0aENvdXJzZXNMaXN0RGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBsZWFybmluZ1BhdGg6IElMZWFybmluZ1BhdGg7XHJcbiAgICBsZWFybmluZ1BhdGhDb3Vyc2VzOiBJQ291cnNlW107XHJcbiAgICBvblJlbW92ZUNvdXJzZT86IChJQ291cnNlKSA9PiB2b2lkO1xyXG5cclxuICAgIHZtPzogVmhzTGVhcm5pbmdQYXRoQ291cnNlc0xpc3RDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzTGVhcm5pbmdQYXRoQ291cnNlc0xpc3RDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc0xlYXJuaW5nUGF0aENvdXJzZXNMaXN0RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICAkc2NvcGUubGVhcm5pbmdQYXRoQ291cnNlcy5mb3JFYWNoKGMgPT4gYy5jb3Vyc2VJbmNsdXNpb25UeXBlTmFtZSA9IHRoaXMuZGVjb2RlVHlwZShjLmNvdXJzZUluY2x1c2lvblR5cGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbW92ZUNvdXJzZVVwKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoaW5kZXggPD0gMCB8fCBpbmRleCA+PSB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhDb3Vyc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0bXAgPSB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhDb3Vyc2VzW2luZGV4IC0gMV07XHJcbiAgICAgICAgdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoQ291cnNlc1tpbmRleCAtIDFdID0gdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoQ291cnNlc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoQ291cnNlc1tpbmRleF0gPSB0bXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1vdmVDb3Vyc2VEb3duKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aENvdXJzZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0bXAgPSB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhDb3Vyc2VzW2luZGV4ICsgMV07XHJcbiAgICAgICAgdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoQ291cnNlc1tpbmRleCArIDFdID0gdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoQ291cnNlc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoQ291cnNlc1tpbmRleF0gPSB0bXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUNvdXJzZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm9uUmVtb3ZlQ291cnNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm9uUmVtb3ZlQ291cnNlKHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aENvdXJzZXNbaW5kZXhdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoQ291cnNlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VDb3Vyc2VJbmNsdXNpb25UeXBlKGNvdXJzZTogSUNvdXJzZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjb3Vyc2UuY291cnNlSW5jbHVzaW9uVHlwZSA9PSBMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlW0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGUuTUFOREFUT1JZXSkge1xyXG4gICAgICAgICAgICBjb3Vyc2UuY291cnNlSW5jbHVzaW9uVHlwZSA9IExlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGVbTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZS5FTEVDVElWRV1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb3Vyc2UuY291cnNlSW5jbHVzaW9uVHlwZSA9IExlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGVbTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZS5NQU5EQVRPUlldXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvdXJzZS5jb3Vyc2VJbmNsdXNpb25UeXBlTmFtZSA9IHRoaXMuZGVjb2RlVHlwZShjb3Vyc2UuY291cnNlSW5jbHVzaW9uVHlwZSk7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJGVtaXQoJ2NoYW5nZUNvdXJzZUluY2x1c2lvblR5cGUnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZENvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kZXRhaWxzVXJsKGNvdXJzZUlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlY29kZVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdHlwZTtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjYXNlIFwibWFuZGF0b3J5XCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiTWFuZGF0b3J5XCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiZWxlY3RpdmVcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJFbGVjdGl2ZVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0xlYXJuaW5nUGF0aENvdXJzZXNMaXN0RGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNMZWFybmluZ1BhdGhDb3Vyc2VzTGlzdERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0xlYXJuaW5nUGF0aENvdXJzZXNMaXN0Q29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzTGVhcm5pbmdQYXRoQ291cnNlc0xpc3RDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aDogXCI9XCIsXHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aENvdXJzZXM6IFwiPVwiLFxyXG4gICAgICAgICAgICBvblJlbW92ZUNvdXJzZTogXCI9P1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtbGVhcm5pbmctcGF0aC1jb3Vyc2VzLWxpc3QuaHRtbFwiKVxyXG4gICAgfTtcclxufVxyXG5cclxuVmhzTGVhcm5pbmdQYXRoQ291cnNlc0xpc3REaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTGVhcm5pbmdQYXRoc1JvdXRlclwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzTGVhcm5pbmdQYXRoRWRpdFRvcFRhYnNEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGxlYXJuaW5nUGF0aElkOiBudW1iZXI7XHJcbiAgICB0b3BNZW51S2V5OiBzdHJpbmc7XHJcblxyXG4gICAgdm0/OiBWaHNMZWFybmluZ1BhdGhFZGl0VG9wVGFic0NvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNMZWFybmluZ1BhdGhFZGl0VG9wVGFic0NvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBBQk9VVF9UQUJfS0VZOiBzdHJpbmcgPSBcImFib3V0XCI7XHJcbiAgICBwdWJsaWMgUkVMQVRFRF9QUk9EVUNUU19UQUJfS0VZOiBzdHJpbmcgPSBcInJlbGF0ZWRQcm9kdWN0c1wiO1xyXG4gICAgcHVibGljIFBFUk1JU1NJT05TX1RBQl9LRVk6IHN0cmluZyA9IFwicGVybWlzc2lvbnNcIjtcclxuICAgIHB1YmxpYyBHQU1JRklDQVRJT05fVEFCX0tFWTogc3RyaW5nID0gXCJnYW1pZmljYXRpb25cIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNMZWFybmluZ1BhdGhFZGl0VG9wVGFic0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNMZWFybmluZ1BhdGhFZGl0VG9wVGFic0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVG9wTWVudUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUudG9wTWVudUtleSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzTGVhcm5pbmdQYXRoRWRpdFRvcFRhYnNEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc0xlYXJuaW5nUGF0aEVkaXRUb3BUYWJzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzTGVhcm5pbmdQYXRoRWRpdFRvcFRhYnNDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0xlYXJuaW5nUGF0aEVkaXRUb3BUYWJzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhJZDogXCI9dmhzTGVhcm5pbmdQYXRoSWRcIixcclxuICAgICAgICAgICAgdG9wTWVudUtleTogXCI9dmhzVG9wTWVudUtleVwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtbGVhcm5pbmctcGF0aC1lZGl0LXRvcC10YWJzLmh0bWxcIiksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzTGVhcm5pbmdQYXRoRWRpdFRvcFRhYnNEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lDb3Vyc2VQcm9ncmVzc30gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VQcm9ncmVzc1wiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhDb3Vyc2V9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoQ291cnNlXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlfSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZVwiO1xyXG5pbXBvcnQge0NvdXJzZVByb2dyZXNzU3RhdHVzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvQ291cnNlUHJvZ3Jlc3NTdGF0dXNcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzTGVhcm5pbmdQYXRoT3ZlcmFsbFByb2dyZXNzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBsZWFybmluZ1BhdGg6IElMZWFybmluZ1BhdGg7XHJcbiAgICBsZWFybmluZ1BhdGhDb3Vyc2VzOiBJTGVhcm5pbmdQYXRoQ291cnNlW107XHJcbiAgICBjb3Vyc2VQcm9ncmVzc2VzOiBJQ291cnNlUHJvZ3Jlc3NbXTtcclxuXHJcbiAgICB2bTogVmhzTGVhcm5pbmdQYXRoT3ZlcmFsbFByb2dyZXNzQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0xlYXJuaW5nUGF0aE92ZXJhbGxQcm9ncmVzc0NvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGg6IElMZWFybmluZ1BhdGg7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoQ291cnNlczogSUxlYXJuaW5nUGF0aENvdXJzZVtdO1xyXG4gICAgcHVibGljIGNvdXJzZVByb2dyZXNzZXM6IElDb3Vyc2VQcm9ncmVzc1tdO1xyXG5cclxuICAgIHB1YmxpYyBwZXJjZW50T2ZDb21wbGV0ZWRNYW5kYXRvcnlDb3Vyc2VzOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIHBlcmNlbnRPZkNvbXBsZXRlZEVsZWN0aXZlQ291cnNlczogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBjb3VudE9mTWFuZGF0b3J5Q291cnNlczogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBjb3VudE9mRWxlY3RpdmVDb3Vyc2VzOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIHJlcXVpcmVkRWxlY3RpdmVDb3Vyc2VzTnVtYmVyOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGNvdW50T2ZNYW5kYXRvcnlDb3Vyc2VzQ29tcGxldGVkOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGNvdW50T2ZFbGVjdGl2ZUNvdXJzZXNDb21wbGV0ZWQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHVibGljIG1hbmRhdG9yeUNvdXJzZXNOYW1lczogc3RyaW5nW10gPSBbXTtcclxuICAgIHB1YmxpYyBlbGVjdGl2ZUNvdXJzZXNOYW1lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciAocHVibGljICRzY29wZTogSVZoc0xlYXJuaW5nUGF0aE92ZXJhbGxQcm9ncmVzc0RpcmVjdGl2ZVNjb3BlKSB7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aCA9IHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXMgPSB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhDb3Vyc2VzO1xyXG4gICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3NlcyA9IHRoaXMuJHNjb3BlLmNvdXJzZVByb2dyZXNzZXM7XHJcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVN0YXRpc3RpY3MoKTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoQ29sbGVjdGlvbihcImNvdXJzZVByb2dyZXNzZXNcIiwgKChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc2VzID0gdGhpcy4kc2NvcGUuY291cnNlUHJvZ3Jlc3NlcztcclxuICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlUHJvZ3Jlc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVN0YXRpc3RpY3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlY2FsY3VsYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdW50T2ZNYW5kYXRvcnlDb3Vyc2VzID0gMDtcclxuICAgICAgICB0aGlzLmNvdW50T2ZFbGVjdGl2ZUNvdXJzZXMgPSAwO1xyXG4gICAgICAgIHRoaXMuY291bnRPZk1hbmRhdG9yeUNvdXJzZXNDb21wbGV0ZWQgPSAwO1xyXG4gICAgICAgIHRoaXMuY291bnRPZkVsZWN0aXZlQ291cnNlc0NvbXBsZXRlZCA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXF1aXJlZEVsZWN0aXZlQ291cnNlc051bWJlciA9IHRoaXMubGVhcm5pbmdQYXRoLm51bWJlck9mRWxlY3RpdmVDb3Vyc2VzVG9CZUNvbXBsZXRlZDtcclxuXHJcbiAgICAgICAgdGhpcy5tYW5kYXRvcnlDb3Vyc2VzTmFtZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmVsZWN0aXZlQ291cnNlc05hbWVzID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGNvdXJzZSBvZiB0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXMpIHtcclxuICAgICAgICAgICAgbGV0IGNvdXJzZVByb2dyZXNzOiBJQ291cnNlUHJvZ3Jlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBwcm9ncmVzcyBvZiB0aGlzLmNvdXJzZVByb2dyZXNzZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcy5jb3Vyc2VJZCA9PSBjb3Vyc2UuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3Vyc2VQcm9ncmVzcyA9IHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY291cnNlLmNvdXJzZUluY2x1c2lvblR5cGUgPT0gTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZVtMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlLk1BTkRBVE9SWV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFuZGF0b3J5Q291cnNlc05hbWVzLnB1c2goY291cnNlLnRvcGljKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnRPZk1hbmRhdG9yeUNvdXJzZXMgKz0gMTtcclxuICAgICAgICAgICAgICAgIGlmIChjb3Vyc2VQcm9ncmVzcyAhPSBudWxsICYmIGNvdXJzZVByb2dyZXNzLnN0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5DT01QTEVURURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudE9mTWFuZGF0b3J5Q291cnNlc0NvbXBsZXRlZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvdXJzZS5jb3Vyc2VJbmNsdXNpb25UeXBlID09IExlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGVbTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZS5FTEVDVElWRV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWxlY3RpdmVDb3Vyc2VzTmFtZXMucHVzaChjb3Vyc2UudG9waWMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudE9mRWxlY3RpdmVDb3Vyc2VzICs9IDE7XHJcbiAgICAgICAgICAgICAgICBpZiAoY291cnNlUHJvZ3Jlc3MgIT0gbnVsbCAmJiBjb3Vyc2VQcm9ncmVzcy5zdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRPZkVsZWN0aXZlQ291cnNlc0NvbXBsZXRlZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnRPZkNvbXBsZXRlZE1hbmRhdG9yeUNvdXJzZXMgPSAodGhpcy5jb3VudE9mTWFuZGF0b3J5Q291cnNlcyA+IDApXHJcbiAgICAgICAgICAgID8gTWF0aC5yb3VuZCh0aGlzLmNvdW50T2ZNYW5kYXRvcnlDb3Vyc2VzQ29tcGxldGVkIC8gdGhpcy5jb3VudE9mTWFuZGF0b3J5Q291cnNlcyAqIDEwMCkgOiAwO1xyXG4gICAgICAgIHRoaXMucGVyY2VudE9mQ29tcGxldGVkRWxlY3RpdmVDb3Vyc2VzID0gKHRoaXMuY291bnRPZkVsZWN0aXZlQ291cnNlcyA+IDApXHJcbiAgICAgICAgICAgID8gTWF0aC5yb3VuZCh0aGlzLmNvdW50T2ZFbGVjdGl2ZUNvdXJzZXNDb21wbGV0ZWQgLyB0aGlzLmNvdW50T2ZFbGVjdGl2ZUNvdXJzZXMgKiAxMDApIDogMDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0xlYXJuaW5nUGF0aE92ZXJhbGxQcm9ncmVzc0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzTGVhcm5pbmdQYXRoT3ZlcmFsbFByb2dyZXNzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzTGVhcm5pbmdQYXRoT3ZlcmFsbFByb2dyZXNzQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzTGVhcm5pbmdQYXRoT3ZlcmFsbFByb2dyZXNzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGg6IFwiPXZoc0xlYXJuaW5nUGF0aFwiLFxyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhDb3Vyc2VzOiBcIj12aHNMZWFybmluZ1BhdGhDb3Vyc2VzXCIsXHJcbiAgICAgICAgICAgIGNvdXJzZVByb2dyZXNzZXM6IFwiPXZoc0NvdXJzZVByb2dyZXNzZXNcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLWxlYXJuaW5nLXBhdGgtb3ZlcmFsbC1wcm9ncmVzcy5odG1sXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblZoc0xlYXJuaW5nUGF0aE92ZXJhbGxQcm9ncmVzc0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTGVhcm5pbmdQYXRoc1JvdXRlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhQcm9ncmVzc30gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhQcm9ncmVzc1wiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZX0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhTZXJ2aWNlfSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9MZWFybmluZ1BhdGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtDb21tb25TZXJ2aWNlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vblNlcnZpY2VcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlZE9iamVjdFR5cGV9IGZyb20gXCIuLi9SZWZlcmVuY2VkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge0lQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0fSBmcm9tIFwiLi4vZmluYW5jZXMvbW9kZWxzL0lQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0XCI7XHJcbmltcG9ydCB7UHVyY2hhc2VTZXJ2aWNlfSBmcm9tIFwiLi4vZmluYW5jZXMvUHVyY2hhc2VTZXJ2aWNlXCI7XHJcblxyXG50eXBlIENhbGxiYWNrU2V0Vmlld1R5cGUgPSAoY2FsbGJhY2tQYXJhbWV0ZXJzOiB7IHZpZXdUeXBlOiBudW1iZXIgfSkgPT4gdm9pZDtcclxudHlwZSBDYWxsYmFja0lzVmlld1R5cGVTZWxlY3RlZCA9IChjYWxsYmFja1BhcmFtZXRlcnM6IHsgdmlld1R5cGU6IG51bWJlciB9KSA9PiBib29sZWFuO1xyXG5cclxuaW50ZXJmYWNlIElWaHNMZWFybmluZ1BhdGhUb3BUYWJzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBsZWFybmluZ1BhdGhJZDogbnVtYmVyO1xyXG4gICAgbGVhcm5pbmdQYXRoPzogSUxlYXJuaW5nUGF0aDtcclxuICAgIGlzRGVhY3RpdmF0ZUJ1dHRvbkRpc2FibGVkOiBib29sZWFuO1xyXG4gICAgaXNMZWFybmluZ1BhdGhJblVzZTogYm9vbGVhbjtcclxuICAgIGlzTGVhcm5pbmdQYXRoQ2hhbmdlZDogYm9vbGVhbjtcclxuICAgIGxlYXJuaW5nUGF0aFByb2dyZXNzPzogSUxlYXJuaW5nUGF0aFByb2dyZXNzO1xyXG4gICAgaXNQYXJ0aWNpcGF0aW9uRm9ybVNwZWNpZmllZD86IGJvb2xlYW47XHJcblxyXG4gICAgY3VycmVudFRvcE1lbnVJdGVtOiBzdHJpbmc7XHJcbiAgICBzaG93VXNlclByb2dyZXNzPzogYm9vbGVhbjtcclxuXHJcbiAgICBzaG93Vmlld1R5cGVDb250cm9scz86IGJvb2xlYW47XHJcbiAgICBjYWxsYmFja1NldFZpZXdUeXBlPzogQ2FsbGJhY2tTZXRWaWV3VHlwZTtcclxuICAgIGNhbGxiYWNrSXNWaWV3VHlwZVNlbGVjdGVkPzogQ2FsbGJhY2tJc1ZpZXdUeXBlU2VsZWN0ZWQ7XHJcblxyXG4gICAgdm0/OiBWaHNMZWFybmluZ1BhdGhUb3BUYWJzQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0xlYXJuaW5nUGF0aFRvcFRhYnNDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgTEVBUk5JTkdfUEFUSF9ERVRBSUxTX1RPUF9NRU5VX0lURU06IHN0cmluZyA9IFwiTEVBUk5JTkdfUEFUSF9ERVRBSUxTXCI7XHJcbiAgICBwdWJsaWMgRklMTF9QQVJUSUNJUEFUSU9OX0ZPUk1fVE9QX01FTlVfSVRFTTogc3RyaW5nID0gXCJGSUxMX1BBUlRJQ0lQQVRJT05fRk9STVwiO1xyXG4gICAgcHVibGljIExFQVJOSU5HX1BBVEhfUFJPR1JFU1NfVE9QX01FTlVfSVRFTTogc3RyaW5nID0gXCJMRUFSTklOR19QQVRIX1BST0dSRVNTXCI7XHJcbiAgICBwdWJsaWMgRURJVF9QQVJUSUNJUEFUSU9OX0ZPUk1fVE9QX01FTlVfSVRFTTogc3RyaW5nID0gXCJFRElUX1BBUlRJQ0lQQVRJT05fRk9STVwiO1xyXG4gICAgcHVibGljIEVESVRfTEVBUk5JTkdfUEFUSF9UT1BfTUVOVV9JVEVNOiBzdHJpbmcgPSBcIkVESVRfTEVBUk5JTkdfUEFUSFwiO1xyXG4gICAgcHVibGljIEFUVEVOREVFX01BTkFHRU1FTlRfVE9QX01FTlVfSVRFTTogc3RyaW5nID0gXCJBVFRFTkRFRV9NQU5BR0VNRU5UXCI7XHJcblxyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoSW5Vc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0xlYXJuaW5nUGF0aENoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb21tb25TZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFB1cmNoYXNlU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzTGVhcm5pbmdQYXRoVG9wVGFic0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aFNlcnZpY2U6IExlYXJuaW5nUGF0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZTogTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwdXJjaGFzZVNlcnZpY2U6IFB1cmNoYXNlU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgJHNjb3BlLnNob3dVc2VyUHJvZ3Jlc3MgPSAkc2NvcGUuc2hvd1VzZXJQcm9ncmVzcyB8fCBmYWxzZTtcclxuICAgICAgICAkc2NvcGUuc2hvd1ZpZXdUeXBlQ29udHJvbHMgPSAkc2NvcGUuc2hvd1ZpZXdUeXBlQ29udHJvbHMgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkKSB7XHJcbiAgICAgICAgICAgIGxldCBsZWFybmluZ1BhdGhJZFN0ciA9IFN0cmluZyh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZGVtYW5kTGVhcm5pbmdQYXRoUGVybWlzc2lvbnMobGVhcm5pbmdQYXRoSWRTdHIsIGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zID0+IGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zLnZpZXcpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGxvYWRMZWFybmluZ1BhdGhQcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoJHNjb3BlLmxlYXJuaW5nUGF0aCA9PSBudWxsIHx8ICRzY29wZS5sZWFybmluZ1BhdGggPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBsb2FkTGVhcm5pbmdQYXRoUHJvbWlzZXMucHVzaCh0aGlzLmxvYWRMZWFybmluZ1BhdGgoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCRzY29wZS5sZWFybmluZ1BhdGhQcm9ncmVzcyA9PSBudWxsIHx8ICRzY29wZS5sZWFybmluZ1BhdGhQcm9ncmVzcyA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRMZWFybmluZ1BhdGhQcm9taXNlcy5wdXNoKHRoaXMubG9hZExlYXJuaW5nUGF0aFByb2dyZXNzKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgkc2NvcGUuaXNQYXJ0aWNpcGF0aW9uRm9ybVNwZWNpZmllZCA9PSBudWxsIHx8ICRzY29wZS5pc1BhcnRpY2lwYXRpb25Gb3JtU3BlY2lmaWVkID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZExlYXJuaW5nUGF0aFByb21pc2VzLnB1c2godGhpcy5jb21tb25TZXJ2aWNlLmdldFBhcnRpY2lwYXRpb25Gb3JtU3BlY2lmaWVkKHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkLCAnTEVBUk5JTkdfUEFUSCcpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmlzUGFydGljaXBhdGlvbkZvcm1TcGVjaWZpZWQgPSAocmVzdWx0ID09PSB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICRxLmFsbChsb2FkTGVhcm5pbmdQYXRoUHJvbWlzZXMpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTGVhcm5pbmdQYXRoKCk6IGFuZ3VsYXIuSVByb21pc2U8SUxlYXJuaW5nUGF0aD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFNlcnZpY2UuZ2V0KHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAudGhlbigobGVhcm5pbmdQYXRoOiBJTGVhcm5pbmdQYXRoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGggPSBhbmd1bGFyLmNvcHkobGVhcm5pbmdQYXRoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGg7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZExlYXJuaW5nUGF0aFByb2dyZXNzKCk6IGFuZ3VsYXIuSVByb21pc2U8SUxlYXJuaW5nUGF0aFByb2dyZXNzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLmdldExlYXJuaW5nUGF0aFByb2dyZXNzKHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAudGhlbigobGVhcm5pbmdQYXRoUHJvZ3Jlc3M6IElMZWFybmluZ1BhdGhQcm9ncmVzcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoUHJvZ3Jlc3MgPSBhbmd1bGFyLmNvcHkobGVhcm5pbmdQYXRoUHJvZ3Jlc3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aFByb2dyZXNzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291bnRPZkNvdXJzZXMoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGgubnVtYmVyT2ZFbGVjdGl2ZUNvdXJzZXNUb0JlQ29tcGxldGVkKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJDb21wbGV0ZWQgY291cnNlczogOmNvbXBsZXRlZE1hbmRhdG9yeUNvdXJzZXMgb2YgOmFsbE1hbmRhdG9yeUNvdXJzZXMgTWFuZGF0b3J5LCA6Y29tcGxldGVkRWxlY3RpdmVDb3Vyc2VzIG9mIDpudW1iZXJPZkVsZWN0aXZlQ291cnNlc1RvQmVDb21wbGV0ZWQgRWxlY3RpdmVcIilcclxuICAgICAgICAgICAgICAgIC53aXRoKFwiOmNvbXBsZXRlZE1hbmRhdG9yeUNvdXJzZXNcIiwgdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoUHJvZ3Jlc3MuY291bnRPZkNvbXBsZXRlZE1hbmRhdG9yeUNvdXJzZXMpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjphbGxNYW5kYXRvcnlDb3Vyc2VzXCIsIHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aFByb2dyZXNzLmNvdW50T2ZNYW5kYXRvcnlDb3Vyc2VzKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6Y29tcGxldGVkRWxlY3RpdmVDb3Vyc2VzXCIsIHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aFByb2dyZXNzLmNvdW50T2ZDb21wbGV0ZWRFbGVjdGl2ZUNvdXJzZXMpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjpudW1iZXJPZkVsZWN0aXZlQ291cnNlc1RvQmVDb21wbGV0ZWRcIiwgdGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoLm51bWJlck9mRWxlY3RpdmVDb3Vyc2VzVG9CZUNvbXBsZXRlZClcclxuICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJDb21wbGV0ZWQgY291cnNlczogOmNvbXBsZXRlZE1hbmRhdG9yeUNvdXJzZXMgb2YgOmFsbE1hbmRhdG9yeUNvdXJzZXMgTWFuZGF0b3J5XCIpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjpjb21wbGV0ZWRNYW5kYXRvcnlDb3Vyc2VzXCIsIHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aFByb2dyZXNzLmNvdW50T2ZDb21wbGV0ZWRNYW5kYXRvcnlDb3Vyc2VzKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6YWxsTWFuZGF0b3J5Q291cnNlc1wiLCB0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhQcm9ncmVzcy5jb3VudE9mTWFuZGF0b3J5Q291cnNlcylcclxuICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLmNhbGxiYWNrU2V0Vmlld1R5cGUoe3ZpZXdUeXBlOiB2aWV3VHlwZX0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNjb3BlLmNhbGxiYWNrSXNWaWV3VHlwZVNlbGVjdGVkKHt2aWV3VHlwZTogdmlld1R5cGV9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNOZXdUb3BNZW51QWN0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5jdXJyZW50VG9wTWVudUl0ZW0gPT0gdGhpcy5MRUFSTklOR19QQVRIX0RFVEFJTFNfVE9QX01FTlVfSVRFTSB8fFxyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5jdXJyZW50VG9wTWVudUl0ZW0gPT0gdGhpcy5GSUxMX1BBUlRJQ0lQQVRJT05fRk9STV9UT1BfTUVOVV9JVEVNIHx8XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLmN1cnJlbnRUb3BNZW51SXRlbSA9PSB0aGlzLkxFQVJOSU5HX1BBVEhfUFJPR1JFU1NfVE9QX01FTlVfSVRFTSB8fFxyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5jdXJyZW50VG9wTWVudUl0ZW0gPT0gdGhpcy5FRElUX1BBUlRJQ0lQQVRJT05fRk9STV9UT1BfTUVOVV9JVEVNIHx8XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLmN1cnJlbnRUb3BNZW51SXRlbSA9PSB0aGlzLkVESVRfTEVBUk5JTkdfUEFUSF9UT1BfTUVOVV9JVEVNIHx8XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLmN1cnJlbnRUb3BNZW51SXRlbSA9PSB0aGlzLkFUVEVOREVFX01BTkFHRU1FTlRfVE9QX01FTlVfSVRFTTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb3BNZW51QWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5jdXJyZW50VG9wTWVudUl0ZW0gPT0gdG9wTWVudUtleTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGV0YWlsc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuZGV0YWlsc1VybCh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZpbGxQYXJ0aWNpcGF0aW9uRm9ybVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIucGFydGljaXBhdGlvbkZvcm1GaWxsVXJsKHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJvZ3Jlc3NVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLnByb2dyZXNzVXJsKHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdExlYXJuaW5nUGF0aFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIudXBkYXRlVXJsKHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdFBhcnRpY2lwYXRpb25Gb3JtVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoc1JvdXRlci5wYXJ0aWNpcGF0aW9uRm9ybVVwZGF0ZVVybCh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF0dGVuZGVlTWFuYWdlbWVudFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIucGVybWlzc2lvbnNEZWxlZ2F0aW9uVXJsKHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGVMZWFybmluZ1BhdGgoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzTGVhcm5pbmdQYXRoSW5Vc2VXYXJuaW5nTWVzc2FnZUlmTmVlZCgpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLmlzRGVhY3RpdmF0ZUJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5wdXJjaGFzZVNlcnZpY2UuZ2V0UmVmZXJlbmNlZE9iamVjdFByb2R1Y3RzTGlzdCh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZCwgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTEVBUk5JTkdfUEFUSF0pLnRoZW4ocHJvZHVjdHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocHJvZHVjdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLmdldE51bWJlck9mVXNlcnNXaXRoVW5jb21wbGV0ZWRQcm9ncmVzcyh0aGlzLiRzY29wZS5sZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigobnVtYmVyT2ZVbmNvbXBsZXRlZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25maXJtYXRpb25NZXNzYWdlOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZlVuY29tcGxldGVkID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybWF0aW9uTWVzc2FnZSA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJUaGVyZSBhcmUgOm51bWJlck9mVW5jb21wbGV0ZWQgdXNlcnMgd2hvIGhhdmUgc3RhcnRlZCBsZWFybmluZyBwYXRoIGFuZCB3aWxsIGJlIHVuYWJsZSB0byBjb21wbGV0ZSBpdC4gWW91IGNhbiBjaGVjayBsaXN0IG9mIHVzZXJzIG9uIFByb2dyZXNzIHRhYi5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpudW1iZXJPZlVuY29tcGxldGVkXCIsIG51bWJlck9mVW5jb21wbGV0ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb25NZXNzYWdlID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIlRoaXMgbGVhcm5pbmcgcGF0aCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBDb250aW51ZT9cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb25NZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiUmVtb3ZlIGxlYXJuaW5nIHBhdGhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIlllc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKCdEbyB5b3Ugd2FudCB0byByZW1vdmUgcGVybWlzc2lvbnM/Jywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnUmVtb3ZlIHBlcm1pc3Npb25zJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiAnWWVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b246ICdObydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5yZW1vdmVQZXJtaXNzaW9uQXNzaWdubWVudHModGhpcy4kc2NvcGUubGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5kZWFjdGl2YXRlTGVhcm5pbmdQYXRoKHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTGVhcm5pbmcgcGF0aCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuaW5kZXhVcmwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmlzRGVhY3RpdmF0ZUJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5kZWFjdGl2YXRlTGVhcm5pbmdQYXRoKHRoaXMuJHNjb3BlLmxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTGVhcm5pbmcgcGF0aCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuaW5kZXhVcmwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5pc0RlYWN0aXZhdGVCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuaXNEZWFjdGl2YXRlQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5pc0RlYWN0aXZhdGVCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZvcm1hdHRlZEZ1bmM6IChwcm9kdWN0OiBJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdCwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nID0gKHByb2R1Y3Q6IElQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiPHA+XCIgKyAoaW5kZXggKyAxKSArIFwiLiBcIiArIHByb2R1Y3QubmFtZSArIFwiLiBcIiArIChwcm9kdWN0LmRlc2NyaXB0aW9uID09IG51bGwgPyBcIlwiIDogcHJvZHVjdC5kZXNjcmlwdGlvbikgKyBcIjwvcD5cIjtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIjxwPlRoZSBsZWFybmluZyBwYXRoIGNhbm5vdCBiZSByZW1vdmVkLiBJdCBjb250YWlucyB0aGUgZm9sbG93aW5nIHByb2R1Y3RzOjpwcm9kdWN0czwvcD5cIilcclxuICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpwcm9kdWN0c1wiLCB0aGlzLmdldEl0ZW1zRm9ybWF0dGVkU3RyaW5nPElQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0Pihwcm9kdWN0cywgZm9ybWF0dGVkRnVuYywgXCJcXG5cIikpXHJcbiAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShtZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiUmVtb3ZlIGxlYXJuaW5nIHBhdGhcIixcclxuICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0SXRlbXNGb3JtYXR0ZWRTdHJpbmc8VD4oaXRlbXM6IEFycmF5PFQ+LCBmb3JtYXR0ZWRGdW5jOiAoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gZm9ybWF0dGVkRnVuYyhpdGVtLCBpbmRleCkgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NMZWFybmluZ1BhdGhJblVzZVdhcm5pbmdNZXNzYWdlSWZOZWVkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTGVhcm5pbmdQYXRoSW5Vc2UpIHtcclxuICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIlRoZSBjaGFuZ2VzIGNhbiBjYXVzZSBwcm9ibGVtcyBpbiBwYXNzaW5nIHRoZSBsZWFybmluZyBwYXRoIGJ5IHVzZXJzIHdobyBoYWQgYWxyZWFkeSBzdGFydGVkIGl0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzTGVhcm5pbmdQYXRoVG9wVGFic0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzTGVhcm5pbmdQYXRoVG9wVGFic0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0xlYXJuaW5nUGF0aFRvcFRhYnNDb250cm9sbGVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNMZWFybmluZ1BhdGhUb3BUYWJzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhJZDogXCI9XCIsXHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aDogXCI9P1wiLFxyXG4gICAgICAgICAgICBpc0RlYWN0aXZhdGVCdXR0b25EaXNhYmxlZDogXCI9P1wiLFxyXG4gICAgICAgICAgICBpc0xlYXJuaW5nUGF0aEluVXNlOiBcIj0/XCIsXHJcbiAgICAgICAgICAgIGlzTGVhcm5pbmdQYXRoQ2hhbmdlZDogXCI9P1wiLFxyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhQcm9ncmVzczogXCI9P1wiLFxyXG4gICAgICAgICAgICBpc1BhcnRpY2lwYXRpb25Gb3JtU3BlY2lmaWVkOiBcIj0/dmhzUGFydGljaXBhdGlvbkZvcm1TcGVjaWZpZWRcIixcclxuICAgICAgICAgICAgY3VycmVudFRvcE1lbnVJdGVtOiBcIj1cIixcclxuICAgICAgICAgICAgc2hvd1VzZXJQcm9ncmVzczogXCI9P1wiLFxyXG4gICAgICAgICAgICBzaG93Vmlld1R5cGVDb250cm9sczogXCI9P1wiLFxyXG4gICAgICAgICAgICBjYWxsYmFja1NldFZpZXdUeXBlOiBcIiY/XCIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrSXNWaWV3VHlwZVNlbGVjdGVkOiBcIiY/XCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtbGVhcm5pbmctcGF0aC10b3AtdGFicy5odG1sXCIpXHJcbiAgICB9O1xyXG59XHJcblxyXG5WaHNMZWFybmluZ1BhdGhUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc0xlYXJuaW5nU2Vzc2lvbnNUb3BUYWJzU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgdG9wTWVudUtleTogc3RyaW5nO1xyXG5cclxuICAgIHZtPzogVmhzTGVhcm5pbmdTZXNzaW9uc1RvcFRhYnNDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzTGVhcm5pbmdTZXNzaW9uc1RvcFRhYnNDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgSUxUX1RBQl9LRVk6IHN0cmluZyA9IFwiaWx0XCI7XHJcbiAgICBwdWJsaWMgV0VCSU5BUlNfVEFCX0tFWTogc3RyaW5nID0gXCJ3ZWJpbmFyc1wiO1xyXG5cclxuICAgIHB1YmxpYyBpc0luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY3VycmVudFRvcEVkaXRQYWdlXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNMZWFybmluZ1Nlc3Npb25zVG9wVGFic1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcikge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9wRWRpdFBhZ2UgPSB0aGlzLmdldEN1cnJlbnRUYWIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNMZWFybmluZ1Nlc3Npb25zVG9wVGFic1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVG9wTWVudUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUudG9wTWVudUtleSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VUb3BFZGl0UGF0aCgpIHtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0VG9VcmwodGhpcy5jdXJyZW50VG9wRWRpdFBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50VGFiKCk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoKHRoaXMuJHNjb3BlLnRvcE1lbnVLZXkpIHtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLklMVF9UQUJfS0VZOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci5pbHRVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuV0VCSU5BUlNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZXNSb3V0ZXIud2ViaW5hcnNVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci5pbHRVcmwodGhpcy4kc2NvcGUuY291cnNlSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0xlYXJuaW5nU2Vzc2lvbnNUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNMZWFybmluZ1Nlc3Npb25zVG9wVGFic1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0xlYXJuaW5nU2Vzc2lvbnNUb3BUYWJzQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNMZWFybmluZ1Nlc3Npb25zVG9wVGFic0NvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgY291cnNlSWQ6IFwiPXZoc0NvdXJzZUlkXCIsXHJcbiAgICAgICAgICAgIHRvcE1lbnVLZXk6IFwiPXZoc1RvcE1lbnVLZXlcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLWxlYXJuaW5nLXNlc3Npb25zLXRvcC10YWJzLmh0bWxcIiksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzTGVhcm5pbmdTZXNzaW9uc1RvcFRhYnNEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lNYXRlcmlhbH0gZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvSU1hdGVyaWFsXCI7XHJcbmltcG9ydCB7Q2hlY2twb2ludFR5cGV9IGZyb20gXCIuLi9tYXRlcmlhbHMvbW9kZWxzL0NoZWNrcG9pbnRUeXBlXCI7XHJcbmltcG9ydCB7SUNoZWNrcG9pbnQsIElDaGVja3BvaW50QW5zd2VyfSBmcm9tIFwiLi4vbWF0ZXJpYWxzL21vZGVscy9JQ2hlY2twb2ludFwiO1xyXG5pbXBvcnQge05vQW5zd2VyRWZmZWN0VHlwZX0gZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvTm9BbnN3ZXJFZmZlY3RUeXBlXCI7XHJcbmltcG9ydCB7VmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXl9IGZyb20gXCIuLi9tYXRlcmlhbHMvbW9kZWxzL1ZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5XCI7XHJcbmltcG9ydCBJTXVsdGltZWRpYU1hdGVyaWFsU2V0dGluZ3MgZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvSU11bHRpbWVkaWFNYXRlcmlhbFNldHRpbmdzXCI7XHJcbmltcG9ydCB7SUFuZ3VsYXJFdmVudH0gZnJvbSBcImFuZ3VsYXJcIjtcclxuaW1wb3J0IHtJbnRyb1NlcnZpY2V9IGZyb20gXCIuLi9pbmZvL0ludHJvU2VydmljZVwiO1xyXG5pbXBvcnQge05ld3NSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL05ld3NSb3V0ZXJcIjtcclxuaW1wb3J0IHtBcHBQcm9wZXJ0aWVzfSBmcm9tIFwiLi4vdXRpbHMvQXBwUHJvcGVydGllc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzTWF0ZXJpYWxDaGVja3BvaW50c0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgbWF0ZXJpYWw6IElNYXRlcmlhbDtcclxuICAgIGZpbGU6IEZpbGU7XHJcbiAgICB2bTogVmhzTWF0ZXJpYWxDaGVja3BvaW50c0RpcmVjdGl2ZUNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNNYXRlcmlhbENoZWNrcG9pbnRzRGlyZWN0aXZlQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIE5FV1NfSUQgPSAxMDIwO1xyXG5cclxuICAgIHB1YmxpYyBjaGVja3BvaW50OiBJQ2hlY2twb2ludCA9IDxJQ2hlY2twb2ludD57fTtcclxuICAgIHB1YmxpYyBjaGVja3BvaW50SW5kZXg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwb3B1cE9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNhdmVCdXR0b25Jc0FjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxTZXR0aW5nczogSU11bHRpbWVkaWFNYXRlcmlhbFNldHRpbmdzID0gbmV3IElNdWx0aW1lZGlhTWF0ZXJpYWxTZXR0aW5ncygpO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgTmV3c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEludHJvU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICBwcml2YXRlICRzY29wZTogSVZoc01hdGVyaWFsQ2hlY2twb2ludHNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbmV3c1JvdXRlcjogTmV3c1JvdXRlcixcclxuICAgICAgICBwcml2YXRlIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUubWF0ZXJpYWwuY2hlY2twb2ludHMpIHtcclxuICAgICAgICAgICAgbGV0IGNoZWNrcG9pbnRzID0gSlNPTi5wYXJzZSh0aGlzLiRzY29wZS5tYXRlcmlhbC5jaGVja3BvaW50cyk7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm1hdGVyaWFsLmNoZWNrcG9pbnRzQXJyYXkgPSBbXTtcclxuICAgICAgICAgICAgY2hlY2twb2ludHMuZm9yRWFjaChjaCA9PiB0aGlzLiRzY29wZS5tYXRlcmlhbC5jaGVja3BvaW50c0FycmF5LnB1c2goY2gpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwic2V0TmV3TXVsdGltZWRpYVNvdXJjZVwiLCAoZXZ0OiBJQW5ndWxhckV2ZW50LCBtYXRlcmlhbFNldHRpbmdzOiBJTXVsdGltZWRpYU1hdGVyaWFsU2V0dGluZ3MpID0+IHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuTUFURVJJQUxfS0VZLCBtYXRlcmlhbFNldHRpbmdzLm1hdGVyaWFsSWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxTZXR0aW5ncy5tYXRlcmlhbElkID0gdGhpcy4kc2NvcGUubWF0ZXJpYWwuaWQgPyB0aGlzLiRzY29wZS5tYXRlcmlhbC5pZC50b1N0cmluZygpIDogbnVsbDtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsU2V0dGluZ3MuJHNjb3BlID0gdGhpcy4kc2NvcGU7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuTUFURVJJQUxfS0VZKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5TT1VSQ0VfS0VZLCB0aGlzLiRzY29wZS5tYXRlcmlhbC5kb3dubG9hZFVybCk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuUE9TVEVSX1VSTF9LRVksIHRoaXMuJHNjb3BlLm1hdGVyaWFsLnByZXZpZXdVcmwpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LlRJTUVTVEFNUF9LRVksICcwJyk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuQ09ORklHVVJBVElPTl9LRVksICd7XCJjYW5TaG93Rm9yd2FyZFJld2luZEJ1dHRvbnNcIjp0cnVlLCBcImF1dG9wbGF5XCI6IGZhbHNlfScpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LkNIRUNLUE9JTlRTX0tFWSwgJ3t9Jyk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuU1VCVElUTEVTX1RSQUNLUywgXCJcIik7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuU1VCVElUTEVTX0NVUlJFTlRfVFJBQ0ssIFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdENoZWNrcG9pbnREYXRhKGNoZWNrcG9pbnQ6IElDaGVja3BvaW50KSB7XHJcbiAgICAgICAgdGhpcy5jaGVja3BvaW50LnR5cGUgPSBDaGVja3BvaW50VHlwZS5CVVRUT047XHJcbiAgICAgICAgdGhpcy5jaGVja3BvaW50LnR5cGVOYW1lID0gQ2hlY2twb2ludFR5cGVbMF0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnQudGltZSA9IDA7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm1hdGVyaWFsLmNoZWNrcG9pbnRzQXJyYXkgJiYgdGhpcy4kc2NvcGUubWF0ZXJpYWwuY2hlY2twb2ludHNBcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2twb2ludC50aW1lID0gdGhpcy4kc2NvcGUubWF0ZXJpYWwuY2hlY2twb2ludHNBcnJheVt0aGlzLiRzY29wZS5tYXRlcmlhbC5jaGVja3BvaW50c0FycmF5Lmxlbmd0aCAtIDFdLnRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVGltZU9mQ2hlY2twb2ludCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnQudGltZVN0cmluZyA9IHRoaXMudGltZVRvU3RyaW5nKHRoaXMuY2hlY2twb2ludC50aW1lKTtcclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnQudGltZVRvQW5zd2VyID0gMzA7XHJcbiAgICAgICAgdGhpcy5jaGVja3BvaW50LnRpbWVUb0Fuc3dlclN0cmluZyA9IHRoaXMudGltZVRvU3RyaW5nKHRoaXMuY2hlY2twb2ludC50aW1lVG9BbnN3ZXIpO1xyXG4gICAgICAgIHRoaXMuY2hlY2twb2ludC5idXR0b25UZXh0ID0gJ0NvbnRpbnVlJztcclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnQuYW5zd2VycyA9IEFycmF5PElDaGVja3BvaW50QW5zd2VyPih7dGV4dDogJ3llcycsIGlzQ29ycmVjdDogdHJ1ZX0sIHt0ZXh0OiAnbm8nLCBpc0NvcnJlY3Q6IGZhbHNlfSk7XHJcbiAgICAgICAgdGhpcy5jaGVja3BvaW50Lm5vQW5zd2VyRWZmZWN0ID0gTm9BbnN3ZXJFZmZlY3RUeXBlLkpVTVBfVE9fVElNRTtcclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnQudGltZVRvSnVtcElmVXNlckRvZXNOb3RBbnN3ZXIgPSAwO1xyXG4gICAgICAgIHRoaXMuY2hlY2twb2ludC50aW1lVG9KdW1wSWZVc2VyRG9lc05vdEFuc3dlclN0cmluZyA9IHRoaXMudGltZVRvU3RyaW5nKHRoaXMuY2hlY2twb2ludC50aW1lVG9KdW1wSWZVc2VyRG9lc05vdEFuc3dlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZE5ld0NoZWNrcG9pbnQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja3BvaW50ID0gPElDaGVja3BvaW50PiB7fTtcclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnRJbmRleCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbml0Q2hlY2twb2ludERhdGEodGhpcy5jaGVja3BvaW50KTtcclxuICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGlvbkJlZm9yZVNhdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2twb2ludC50eXBlID09PSBDaGVja3BvaW50VHlwZS5CVVRUT04pIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja3BvaW50LmFuc3dlcnMgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2twb2ludC5idXR0b25UZXh0ID0gJ0NvbnRpbnVlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2twb2ludC5ub0Fuc3dlckVmZmVjdCA9PT0gTm9BbnN3ZXJFZmZlY3RUeXBlLkpVTVBfVE9fVElNRSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrcG9pbnQudXJsVG9SZWRpcmVjdElmVXNlckRvZXNOb3RBbnN3ZXIgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2twb2ludC50aW1lVG9KdW1wSWZVc2VyRG9lc05vdEFuc3dlciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlQ2hlY2twb2ludCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLm1hdGVyaWFsLmNoZWNrcG9pbnRzQXJyYXkpIHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUubWF0ZXJpYWwuY2hlY2twb2ludHNBcnJheSA9IG5ldyBBcnJheTxJQ2hlY2twb2ludD4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uQmVmb3JlU2F2ZSgpO1xyXG4gICAgICAgIGlmKHRoaXMuJHNjb3BlLm1hdGVyaWFsLmNoZWNrcG9pbnRzQXJyYXkgJiYgdGhpcy4kc2NvcGUubWF0ZXJpYWwuY2hlY2twb2ludHNBcnJheS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUubWF0ZXJpYWwuaXNSZXdpbmRBbGxvd2VkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrcG9pbnRJbmRleCAhPSBudWxsICYmIHRoaXMuY2hlY2twb2ludEluZGV4ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5tYXRlcmlhbC5jaGVja3BvaW50c0FycmF5W3RoaXMuY2hlY2twb2ludEluZGV4XSA9IHRoaXMuY2hlY2twb2ludDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5tYXRlcmlhbC5jaGVja3BvaW50c0FycmF5LnB1c2godGhpcy5jaGVja3BvaW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNoZWNrcG9pbnRzQXJyYXkgPSB0aGlzLiRzY29wZS5tYXRlcmlhbC5jaGVja3BvaW50c0FycmF5O1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLm1hdGVyaWFsLmNoZWNrcG9pbnRzQXJyYXkgPSBjaGVja3BvaW50c0FycmF5LnNvcnQoKGEsIGIpID0+IChhLnRpbWUgLSBiLnRpbWUpKTtcclxuICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcclxuICAgICAgICB0aGlzLiRzY29wZS5tYXRlcmlhbC5jaGVja3BvaW50c0FycmF5LmZvckVhY2goY2ggPT4gZGVsZXRlIGNoW1wiaGFzaEtleVwiXSk7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUubWF0ZXJpYWwuY2hlY2twb2ludHMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRzY29wZS5tYXRlcmlhbC5jaGVja3BvaW50c0FycmF5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVsZXRlQ2hlY2twb2ludChjaGVja3BvaW50OiBJQ2hlY2twb2ludCkge1xyXG4gICAgICAgIGxldCBpZHggPSB0aGlzLiRzY29wZS5tYXRlcmlhbC5jaGVja3BvaW50c0FycmF5LmluZGV4T2YoY2hlY2twb2ludCk7XHJcbiAgICAgICAgaWYgKGlkeCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm1hdGVyaWFsLmNoZWNrcG9pbnRzQXJyYXkuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuJHNjb3BlLm1hdGVyaWFsLmNoZWNrcG9pbnRzQXJyYXkuZm9yRWFjaChjaCA9PiBkZWxldGUgY2hbXCJoYXNoS2V5XCJdKTtcclxuICAgICAgICB0aGlzLiRzY29wZS5tYXRlcmlhbC5jaGVja3BvaW50cyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJHNjb3BlLm1hdGVyaWFsLmNoZWNrcG9pbnRzQXJyYXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlZGl0Q2hlY2twb2ludChjaGVja3BvaW50OiBJQ2hlY2twb2ludCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuY2hlY2twb2ludCA9IGFuZ3VsYXIuY29weShjaGVja3BvaW50KTtcclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnRJbmRleCA9IGluZGV4O1xyXG4gICAgICAgIHRoaXMuY2hhbmdlVGltZU9mQ2hlY2twb2ludCgpO1xyXG4gICAgICAgIHRoaXMub3BlblBvcHVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZE5ld0Fuc3dlcigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2twb2ludC5hbnN3ZXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2twb2ludC5hbnN3ZXJzID0gbmV3IEFycmF5PElDaGVja3BvaW50QW5zd2VyPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnQuYW5zd2Vycy5wdXNoKDxJQ2hlY2twb2ludEFuc3dlcj4ge30pO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrcG9pbnQuYW5zd2VycyAmJiB0aGlzLmNoZWNrcG9pbnQuYW5zd2Vycy5maWx0ZXIoY2ggPT4gY2guaXNDb3JyZWN0KS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrcG9pbnQuYW5zd2Vyc1swXS5pc0NvcnJlY3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrU2F2ZUJ1dHRvblN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldENvcnJlY3RBbnN3ZXIoYW5zd2VyOiBJQ2hlY2twb2ludEFuc3dlcikge1xyXG4gICAgICAgIHRoaXMuY2hlY2twb2ludC5hbnN3ZXJzLmZpbHRlcihhID0+IGEuaXNDb3JyZWN0KS5mb3JFYWNoKGEgPT4gYS5pc0NvcnJlY3QgPSBmYWxzZSk7XHJcbiAgICAgICAgYW5zd2VyLmlzQ29ycmVjdCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUFuc3dlcihhbnN3ZXI6IElDaGVja3BvaW50QW5zd2VyKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja3BvaW50LmFuc3dlcnMuc3BsaWNlKHRoaXMuY2hlY2twb2ludC5hbnN3ZXJzLmluZGV4T2YoYW5zd2VyKSwgMSk7XHJcbiAgICAgICAgaWYgKGFuc3dlci5pc0NvcnJlY3QgJiYgdGhpcy5jaGVja3BvaW50LmFuc3dlcnMgJiYgdGhpcy5jaGVja3BvaW50LmFuc3dlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrcG9pbnQuYW5zd2Vyc1swXS5pc0NvcnJlY3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrU2F2ZUJ1dHRvblN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldENoZWNrcG9pbnRUeXBlKHR5cGU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuY2hlY2twb2ludC50eXBlID0gdHlwZTtcclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnQudHlwZU5hbWUgPSBDaGVja3BvaW50VHlwZVt0eXBlXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tTYXZlQnV0dG9uU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVGltZSgpIHtcclxuICAgICAgICBsZXQgdGltZXN0YW1wID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuVElNRVNUQU1QX0tFWSk7XHJcbiAgICAgICAgaWYgKHRpbWVzdGFtcCAmJiB0aW1lc3RhbXAubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrcG9pbnQudGltZSA9IHBhcnNlSW50KHRpbWVzdGFtcCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2twb2ludC50aW1lU3RyaW5nID0gdGhpcy50aW1lVG9TdHJpbmcodGhpcy5jaGVja3BvaW50LnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlVGltZU9mQ2hlY2twb2ludCgpIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5USU1FU1RBTVBfS0VZLCB0aGlzLmNoZWNrcG9pbnQudGltZS50b1N0cmluZygpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdGltZVRvU3RyaW5nKHNlY29uZHM6IG51bWJlcikgOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIGhvdXJzOiAwLFxyXG4gICAgICAgICAgICBtaW51dGVzOiAwLFxyXG4gICAgICAgICAgICBzZWNvbmRzOiAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXN1bHQuaG91cnMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyAzNjAwKTtcclxuICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyAtIHJlc3VsdC5ob3VycyAqIDM2MDA7XHJcbiAgICAgICAgcmVzdWx0Lm1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7XHJcbiAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgLSByZXN1bHQubWludXRlcyAqIDYwO1xyXG4gICAgICAgIHJlc3VsdC5zZWNvbmRzID0gc2Vjb25kcztcclxuXHJcbiAgICAgICAgbGV0IHN0cjogc3RyaW5nID0gJyc7XHJcbiAgICAgICAgc3RyID0gKFwiMFwiICsgcmVzdWx0LmhvdXJzKS5zbGljZSgtMikgKyBcIjpcIiArIChcIjBcIiArIHJlc3VsdC5taW51dGVzKS5zbGljZSgtMikgKyBcIjpcIiArIChcIjBcIiArIHJlc3VsdC5zZWNvbmRzKS5zbGljZSgtMik7XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdGltZUZyb21TdHJpbmcoc3RyaW5nVGltZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHNlY29uZHMgPSAwO1xyXG4gICAgICAgIGxldCBwYXJzZWRUaW1lID0gc3RyaW5nVGltZS5zcGxpdCgnOicpO1xyXG4gICAgICAgIHNlY29uZHMgKz0gMzYwMCAqIHBhcnNlSW50KHBhcnNlZFRpbWVbMF0pO1xyXG4gICAgICAgIHNlY29uZHMgKz0gNjAgKiBwYXJzZUludChwYXJzZWRUaW1lWzFdKTtcclxuICAgICAgICBzZWNvbmRzICs9IHBhcnNlSW50KHBhcnNlZFRpbWVbMl0pO1xyXG4gICAgICAgIHJldHVybiBzZWNvbmRzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VUaW1lU3RyaW5nRmllbGQoKSB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudC5mb3Jtc1snY2hlY2twb2ludF9mb3JtJ10udGltZUZpZWxkLiRlcnJvciAmJiB0aGlzLmNoZWNrcG9pbnQudGltZVN0cmluZyAmJiB0aGlzLmNoZWNrcG9pbnQudGltZVN0cmluZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzID0gdGhpcy50aW1lRnJvbVN0cmluZyh0aGlzLmNoZWNrcG9pbnQudGltZVN0cmluZyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2twb2ludC50aW1lID0gc2Vjb25kcyA8IDAgPyAwIDpcclxuICAgICAgICAgICAgICAgIHNlY29uZHMgPiB0aGlzLiRzY29wZS5tYXRlcmlhbC5kdXJhdGlvbiA/IHRoaXMuJHNjb3BlLm1hdGVyaWFsLmR1cmF0aW9uIDpcclxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrcG9pbnQudGltZVN0cmluZyA9IHRoaXMudGltZVRvU3RyaW5nKHRoaXMuY2hlY2twb2ludC50aW1lKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VUaW1lVG9KdW1wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VUaW1lVG9KdW1wKCkge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQuZm9ybXNbJ2NoZWNrcG9pbnRfZm9ybSddLnRpbWVUb0p1bXBGaWVsZC4kZXJyb3JcclxuICAgICAgICAgICAgJiYgdGhpcy5jaGVja3BvaW50LnRpbWVUb0p1bXBJZlVzZXJEb2VzTm90QW5zd2VyU3RyaW5nXHJcbiAgICAgICAgICAgICYmIHRoaXMuY2hlY2twb2ludC50aW1lVG9KdW1wSWZVc2VyRG9lc05vdEFuc3dlclN0cmluZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzID0gdGhpcy50aW1lRnJvbVN0cmluZyh0aGlzLmNoZWNrcG9pbnQudGltZVRvSnVtcElmVXNlckRvZXNOb3RBbnN3ZXJTdHJpbmcpO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrcG9pbnQudGltZVRvSnVtcElmVXNlckRvZXNOb3RBbnN3ZXIgPSB0aGlzLmNoZWNrcG9pbnQudGltZSAtIHNlY29uZHMgPCAwID8gdGhpcy5jaGVja3BvaW50LnRpbWUgOiBzZWNvbmRzO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrcG9pbnQudGltZVRvSnVtcElmVXNlckRvZXNOb3RBbnN3ZXJTdHJpbmcgPSB0aGlzLnRpbWVUb1N0cmluZyh0aGlzLmNoZWNrcG9pbnQudGltZVRvSnVtcElmVXNlckRvZXNOb3RBbnN3ZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlVGltZVRvQW5zd2VyKCkge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQuZm9ybXNbJ2NoZWNrcG9pbnRfZm9ybSddLnRpbWVUb0Fuc3dlckZpZWxkLiRlcnJvclxyXG4gICAgICAgICAgICAmJiB0aGlzLmNoZWNrcG9pbnQudGltZVRvQW5zd2VyU3RyaW5nXHJcbiAgICAgICAgICAgICYmIHRoaXMuY2hlY2twb2ludC50aW1lVG9BbnN3ZXJTdHJpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrcG9pbnQudGltZVRvQW5zd2VyID0gdGhpcy50aW1lRnJvbVN0cmluZyh0aGlzLmNoZWNrcG9pbnQudGltZVRvQW5zd2VyU3RyaW5nKTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja3BvaW50LnRpbWVUb0Fuc3dlciA9IHRoaXMuY2hlY2twb2ludC50aW1lVG9BbnN3ZXIgPiAxODAwID8gMTgwMCA6IHRoaXMuY2hlY2twb2ludC50aW1lVG9BbnN3ZXI7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2twb2ludC50aW1lVG9BbnN3ZXJTdHJpbmcgPSB0aGlzLnRpbWVUb1N0cmluZyh0aGlzLmNoZWNrcG9pbnQudGltZVRvQW5zd2VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrU2F2ZUJ1dHRvblN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc2F2ZUJ1dHRvbklzQWN0aXZlID0gdGhpcy5jaGVja3BvaW50LmFuc3dlcnMgJiYgdGhpcy5jaGVja3BvaW50LmFuc3dlcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICYmIHRoaXMuY2hlY2twb2ludC5hbnN3ZXJzLmZpbHRlcihhbnMgPT4gIShhbnMudGV4dCAmJiBhbnMudGV4dC5sZW5ndGggPiAwKSkubGVuZ3RoID09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5Qb3B1cCgpIHtcclxuICAgICAgICAkKFwiI2NyZWF0ZUVkaXRDaGVja3BvaW50XCIpLm1vZGFsKFwic2hvd1wiKTtcclxuICAgICAgICB0aGlzLnBvcHVwT3BlbmVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VQb3B1cCgpIHtcclxuICAgICAgICB0aGlzLnBvcHVwT3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuTUFURVJJQUxfS0VZKTtcclxuICAgICAgICAkKFwiI2NyZWF0ZUVkaXRDaGVja3BvaW50XCIpLm1vZGFsKFwidG9nZ2xlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydEludHJvKGludHJvTnVtYmVyOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmludHJvU2VydmljZS5zdGFydEVkaXRNYXRlcmlhbFBhZ2VJbnRybyhpbnRyb051bWJlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9IZWxwUGFnZSgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgYmFzZVVybCA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSxcclxuICAgICAgICB1cmwgPSBiYXNlVXJsICsgXCIjXCIgKyB0aGlzLm5ld3NSb3V0ZXIuaGVscFVybCh0aGlzLk5FV1NfSUQpO1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzTWF0ZXJpYWxDaGVja3BvaW50c0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzTWF0ZXJpYWxDaGVja3BvaW50c0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc01hdGVyaWFsQ2hlY2twb2ludHNEaXJlY3RpdmVDb250cm9sbGVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNNYXRlcmlhbENoZWNrcG9pbnRzRGlyZWN0aXZlQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBtYXRlcmlhbDogXCI9bWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgZmlsZTogXCI9ZmlsZVwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9tYXRlcmlhbC1jaGVja3BvaW50cy5odG1sXCIpLFxyXG4gICAgfTtcclxufVxyXG5cclxuVmhzTWF0ZXJpYWxDaGVja3BvaW50c0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lNdWx0aW1lZGlhU291cmNlfSBmcm9tIFwiLi9tb2RlbHMvSU11bHRpbWVkaWFcIjtcclxuaW1wb3J0IHtJTWF0ZXJpYWx9IGZyb20gXCIuLi9tYXRlcmlhbHMvbW9kZWxzL0lNYXRlcmlhbFwiO1xyXG5pbXBvcnQgSVNDRVNlcnZpY2UgPSBhbmd1bGFyLklTQ0VTZXJ2aWNlO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtSYW5kb21VdGlsc30gZnJvbSBcIi4uL3V0aWxzL1JhbmRvbVV0aWxzXCI7XHJcbmltcG9ydCB7VmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXl9IGZyb20gXCIuLi9tYXRlcmlhbHMvbW9kZWxzL1ZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5XCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Qcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJTWF0ZXJpYWxQcm9ncmVzc30gZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvSU1hdGVyaWFsUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtJQW5ndWxhckV2ZW50LCBJUHJvbWlzZSwgSVFTZXJ2aWNlLCBJUm9vdFNjb3BlU2VydmljZX0gZnJvbSBcImFuZ3VsYXJcIjtcclxuaW1wb3J0IElNdWx0aW1lZGlhTWF0ZXJpYWxTZXR0aW5ncyBmcm9tIFwiLi4vbWF0ZXJpYWxzL21vZGVscy9JTXVsdGltZWRpYU1hdGVyaWFsU2V0dGluZ3NcIjtcclxuaW1wb3J0IHtJRW1iZWRkZWRNYXRlcmlhbFNvdXJjZX0gZnJvbSBcIi4vbW9kZWxzL0lFbWJlZGRlZE1hdGVyaWFsU291cmNlXCI7XHJcbmltcG9ydCBJU3VidGl0bGVTb3VyY2UgZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvSVN1YnRpdGxlU291cmNlXCI7XHJcbmltcG9ydCB7SUh0dHBTZXJ2aWNlfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQge09iamVjdFR5cGVVdGlsc30gZnJvbSBcIi4uL3V0aWxzL09iamVjdFR5cGVVdGlsc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzTWF0ZXJpYWxEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZoc0lkPzogc3RyaW5nO1xyXG4gICAgdmhzTWF0ZXJpYWxFbnRpdHk6IElNYXRlcmlhbDtcclxuICAgIHZoc01hdGVyaWFsVHlwZTogc3RyaW5nO1xyXG4gICAgdmhzU291cmNlczogSU11bHRpbWVkaWFTb3VyY2VbXTtcclxuICAgIHZoc0NvdXJzZUlkOiBJRW1iZWRkZWRNYXRlcmlhbFNvdXJjZTtcclxuICAgIHZoc1NlY3Rpb25JZDogbnVtYmVyO1xyXG4gICAgdmhzV2lkdGg/OiBzdHJpbmc7XHJcbiAgICB2aHNIZWlnaHQ/OiBzdHJpbmc7XHJcbiAgICB2aHNQZGZFeHBhbmRlZDogYm9vbGVhbjtcclxuICAgIHZoc0VwdWJFeHBhbmRlZDogYm9vbGVhbjtcclxuICAgIHZoc0VuYWJsZURvd25sb2FkOiBib29sZWFuO1xyXG4gICAgdmhzRXJyb3JDYWxsYmFjaz86IChlcnJvckV2ZW50OiBFcnJvckV2ZW50KSA9PiBhbmd1bGFyLklQcm9taXNlPGFueT47XHJcbiAgICB2aHNEb2N1bWVudERvd25sb2FkT25jbGljaz86ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgdm0/OiBWaHNNYXRlcmlhbENvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmludGVyZmFjZSBNYXBCb29rbWFyayB7XHJcbiAgICBib29rSWQ/OiBzdHJpbmc7XHJcbiAgICBocmVmPzogc3RyaW5nO1xyXG4gICAgbmFtZT86IHN0cmluZztcclxuICAgIHBhZ2U/OiBudW1iZXI7XHJcbiAgICBjZmk/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNNYXRlcmlhbENvbnRyb2xsZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgREVGQVVMVF9XSURUSDogc3RyaW5nID0gJzEwMCUnO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgREVGQVVMVF9IRUlHSFQ6IHN0cmluZyA9ICczMDBweCc7XHJcblxyXG4gICAgcHVibGljIHdpZHRoOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaGVpZ2h0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2VsZWN0TmF2aWdhdGVPcHRpb25zOiBhbnk7XHJcbiAgICBwdWJsaWMgc2VsZWN0Qm9va21hcms6IGFueTtcclxuICAgIHB1YmxpYyBib29rOiBhbnk7XHJcbiAgICBwdWJsaWMgcmVuZGl0aW9uOiBhbnk7XHJcbiAgICBwdWJsaWMgc2VjdGlvbjogYW55O1xyXG4gICAgcHVibGljIGJvb2ttYXJrczogTWFwQm9va21hcmtbXTtcclxuICAgIHB1YmxpYyBib29rSWQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuXHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSB1c2VySWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBlbmFibGVEb3dubG9hZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwZGZFeHBhbmRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBlcHViRXhwYW5kZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNJbml0RXB1YkFyZWE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyB2aWRlb1VVSUQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxTZXR0aW5nczogSU11bHRpbWVkaWFNYXRlcmlhbFNldHRpbmdzID0gbmV3IElNdWx0aW1lZGlhTWF0ZXJpYWxTZXR0aW5ncygpO1xyXG4gICAgcHVibGljIGJvb2ttYXJrTmFtZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBwcml2YXRlIGVwdWJBcmVhOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFwiJHNjZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFByb2dyZXNzU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzTWF0ZXJpYWxEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBJU0NFU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IElIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHJvZ3Jlc3NTZXJ2aWNlOiBQcm9ncmVzc1NlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgdGhpcy51c2VySWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkuaWQudG9TdHJpbmcoKTtcclxuICAgICAgICBpZiAodGhpcy5pc0F1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2goXCJ2aHNNYXRlcmlhbEVudGl0eVwiLCAoKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldEluaXREYXRhKCk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCJzZXROZXdNdWx0aW1lZGlhU291cmNlXCIsIChldnQ6IElBbmd1bGFyRXZlbnQsIG1hdGVyaWFsU2V0dGluZ3M6IElNdWx0aW1lZGlhTWF0ZXJpYWxTZXR0aW5ncykgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXROZXdNdWx0aW1lZGlhU291cmNlKG1hdGVyaWFsU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlVG9TZW50cnkoXCJFcnJvciBpbiBvcGVuIHZpZGVvIG9yIGF1ZGlvOiBcIiArIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25QZGZFeHBhbmRDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBkZkV4cGFuZGVkID0gIXRoaXMucGRmRXhwYW5kZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRXB1YkV4cGFuZENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZXB1YkV4cGFuZGVkID0gIXRoaXMuZXB1YkV4cGFuZGVkO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZXB1YkV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBjb250cm9scyA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZXB1Yi1jb250cm9scycpKTtcclxuICAgICAgICAgICAgY29udHJvbHMuYXR0cignc3R5bGUnLCAnZGlzcGxheTogbm9uZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBjb250cm9scyA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZXB1Yi1jb250cm9scycpKTtcclxuICAgICAgICAgICAgY29udHJvbHMucmVtb3ZlQXR0cignc3R5bGUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdEVwdWJBcmVhID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGlmICghKHRoaXMucmVuZGl0aW9uID09IG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRpdGlvbi5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRFcHViRnJhbWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVwdWJGcmFtZSgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgdHJ1c3RlZFVybCA9IHRoaXMuZ2V0VHJ1c3RlZFVybCh0aGlzLiRzY29wZS52aHNNYXRlcmlhbEVudGl0eS5kb3dubG9hZFVybCk7XHJcbiAgICAgICAgdGhpcy5ib29rID0gKDxhbnk+d2luZG93KS5lUHViKHRydXN0ZWRVcmwgIT0gbnVsbCA/IHRydXN0ZWRVcmwudG9TdHJpbmcoKSA6IG51bGwpO1xyXG4gICAgICAgIHRoaXMucmVuZGl0aW9uID0gdGhpcy5ib29rLnJlbmRlclRvKHRoaXMuZXB1YkFyZWEsIHtcclxuICAgICAgICAgICAgLy8gbWFuYWdlcjogXCJjb250aW51b3VzXCIsICA8LSBmb3IgZnVsbC1zY3JvbGwgYm9va1xyXG4gICAgICAgICAgICBmbG93OiBcInBhZ2luYXRlZFwiLFxyXG4gICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXHJcbiAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlbmRpdGlvbi5kaXNwbGF5KCk7XHJcbiAgICAgICAgLy90aGlzLmlzSW5pdEVwdWJBcmVhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmJvb2tJZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJHNjb3BlLnZoc01hdGVyaWFsRW50aXR5LmlkKTtcclxuICAgICAgICB0aGlzLmJvb2ttYXJrcyA9IHRoaXMuZ2V0Qm9va21hcmtzKCk7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZSh0aGlzLmJvb2spO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuYXZpZ2F0ZShib29rOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlbmRpdGlvbi5vbihcInJlbmRlcmVkXCIsIChzZWN0aW9uKSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uID0gc2VjdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TmF2aWdhdGVPcHRpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0b2NcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgJHNlbGVjdGVkOiBhbnkgPSB0aGlzLnNlbGVjdE5hdmlnYXRlT3B0aW9ucy5xdWVyeVNlbGVjdG9yKFwib3B0aW9uW3NlbGVjdGVkXVwiKTtcclxuICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkc2VsZWN0ZWQucmVtb3ZlQXR0cmlidXRlKFwic2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0ICRvcHRpb25zOiBhbnlbXSA9IHRoaXMuc2VsZWN0TmF2aWdhdGVPcHRpb25zLnF1ZXJ5U2VsZWN0b3JBbGwoXCJvcHRpb25cIik7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgJG9wdGlvbnMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQ6IGFueSA9ICRvcHRpb25zW2ldLmdldEF0dHJpYnV0ZShcInJlZlwiKS5pbmNsdWRlcyhzZWN0aW9uLmhyZWYpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkb3B0aW9uc1tpXS5zZXRBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYm9vay5sb2FkZWQubmF2aWdhdGlvbi50aGVuKCh0b2MpID0+IHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TmF2aWdhdGVPcHRpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0b2NcIik7XHJcbiAgICAgICAgICAgIGxldCBkb2NmcmFnOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0TmF2aWdhdGVPcHRpb25zLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHRvYy5mb3JFYWNoKChzdWJjaGFwdGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLnRleHRDb250ZW50ID0gc3ViY2hhcHRlci5sYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKFwicmVmXCIsIHN1YmNoYXB0ZXIuaHJlZik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGRvY2ZyYWcuYXBwZW5kQ2hpbGQob3B0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3ROYXZpZ2F0ZU9wdGlvbnMuYXBwZW5kQ2hpbGQoZG9jZnJhZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TmF2aWdhdGVPcHRpb25zLm9uY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5zZWxlY3ROYXZpZ2F0ZU9wdGlvbnMuc2VsZWN0ZWRJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLnNlbGVjdE5hdmlnYXRlT3B0aW9ucy5vcHRpb25zW2luZGV4XS5nZXRBdHRyaWJ1dGUoXCJyZWZcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRpdGlvbi5kaXNwbGF5KHVybCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Jvb2ttYXJrcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdEJvb2ttYXJrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Qm9va21hcmsuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVuZGl0aW9uLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJldlBhZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RCb29rbWFyaykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEJvb2ttYXJrLnNlbGVjdGVkSW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbmRpdGlvbi5wcmV2KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnb1RvQm9va21hcmsgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5zZWxlY3RCb29rbWFyay5zZWxlY3RlZEluZGV4LFxyXG4gICAgICAgICAgICB1cmwgPSB0aGlzLnNlbGVjdEJvb2ttYXJrLm9wdGlvbnNbaW5kZXhdLmdldEF0dHJpYnV0ZShcInJlZlwiKVxyXG4gICAgICAgIHRoaXMucmVuZGl0aW9uLmRpc3BsYXkodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQm9va21hcmsoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ib29rLmxvY2F0aW9ucy5nZW5lcmF0ZSgpXHJcbiAgICAgICAgdGhpcy5zZWxlY3RCb29rbWFyayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYm9va21hcmtcIik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJvb2ttYXJrcyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYm9va21hcmtzID0gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY3VyTG9jYXRpb25TdGFydCA9IHRoaXMucmVuZGl0aW9uLmN1cnJlbnRMb2NhdGlvbigpLnN0YXJ0O1xyXG4gICAgICAgIGxldCBib29rbWFyazogTWFwQm9va21hcmsgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc2VsZWN0Qm9va21hcmsudmFsdWUsXHJcbiAgICAgICAgICAgIGNmaTogY3VyTG9jYXRpb25TdGFydC5jZmlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmb3IobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLmJvb2ttYXJrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ib29rbWFya3NbaV0uY2ZpID09PSBib29rbWFyay5jZmkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYm9va21hcmtzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVCb29rbWFya3MoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaG93Qm9va21hcmtzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyQm9va01hcmtzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYm9va21hcmtzID0gW107XHJcbiAgICAgICAgdGhpcy51cGRhdGVCb29rbWFya3MoKTtcclxuICAgICAgICB0aGlzLnNob3dCb29rbWFya3MoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUJvb2ttYXJrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYm9vay5sb2NhdGlvbnMuZ2VuZXJhdGUoKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0Qm9va21hcmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJvb2ttYXJrXCIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ib29rbWFya3MgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmJvb2ttYXJrcyA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGN1ckxvY2F0aW9uU3RhcnQgPSB0aGlzLnJlbmRpdGlvbi5jdXJyZW50TG9jYXRpb24oKS5zdGFydDtcclxuICAgICAgICBsZXQgYm9va21hcms6IE1hcEJvb2ttYXJrID0ge1xyXG4gICAgICAgICAgICBib29rSWQ6IHRoaXMuYm9va0lkLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmJvb2ttYXJrTmFtZSxcclxuICAgICAgICAgICAgY2ZpOiBjdXJMb2NhdGlvblN0YXJ0LmNmaVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5oYXNCb29rbWFyayhib29rbWFyaykpIHtcclxuICAgICAgICAgICAgdGhpcy5ib29rbWFya3MucHVzaChib29rbWFyayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlQm9va21hcmtzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd0Jvb2ttYXJrcygpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdEJvb2ttYXJrLm9uY2hhbmdlID0gdGhpcy5nb1RvQm9va21hcms7XHJcbiAgICAgICAgdGhpcy5ib29rbWFya05hbWUgPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Qm9va21hcmtzKCk6IHZvaWQge1xyXG5cclxuICAgICAgICBpZiAoISh0aGlzLmJvb2ttYXJrcyA9PSBudWxsKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEJvb2ttYXJrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJib29rbWFya1wiKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkb2NmcmFnOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZW1wdHlPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xyXG4gICAgICAgICAgICBlbXB0eU9wdGlvbi50ZXh0Q29udGVudCA9IFwiQ2hvb3NlIGJvb2ttYXJrXCI7XHJcbiAgICAgICAgICAgIGVtcHR5T3B0aW9uLmlkID0gXCJlbXB0eV9vcHRpb25cIjtcclxuICAgICAgICAgICAgZW1wdHlPcHRpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBlbXB0eU9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGVtcHR5T3B0aW9uLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgICAgICAgIGRvY2ZyYWcuYXBwZW5kQ2hpbGQoZW1wdHlPcHRpb24pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5ib29rbWFya3MuZm9yRWFjaCgobWFyaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XHJcbiAgICAgICAgICAgICAgICBvcHRpb24udGV4dENvbnRlbnQgPSBtYXJrLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKFwicmVmXCIsIG1hcmsuY2ZpKTtcclxuICAgICAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBTdHJpbmcobWFyay5wYWdlKSlcclxuXHJcbiAgICAgICAgICAgICAgICBkb2NmcmFnLmFwcGVuZENoaWxkKG9wdGlvbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuc2VsZWN0Qm9va21hcmsgIT0gbnVsbCAmJiB0aGlzLnNlbGVjdEJvb2ttYXJrLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Qm9va21hcmsucmVtb3ZlQ2hpbGQodGhpcy5zZWxlY3RCb29rbWFyay5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RCb29rbWFyay5hcHBlbmRDaGlsZChkb2NmcmFnKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Qm9va21hcmsub25jaGFuZ2UgPSB0aGlzLmdvVG9Cb29rbWFyaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJvb2ttYXJrcygpOiB2b2lkIHtcclxuICAgICAgICBsZXQgdXNlcnNCb29rbWFya3M6IE1hcEJvb2ttYXJrW10gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMudXNlcklkKSk7XHJcblxyXG4gICAgICAgIGlmICh1c2Vyc0Jvb2ttYXJrcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCB0aGlzQm9va0Jvb2ttYXJrcyA9IHVzZXJzQm9va21hcmtzLmZpbHRlcih1YiA9PiB1Yi5ib29rSWQgPT0gdGhpcy5ib29rSWQpO1xyXG4gICAgICAgICAgICB1c2Vyc0Jvb2ttYXJrcyA9IHVzZXJzQm9va21hcmtzLmZpbHRlcih1YiA9PiB1Yi5ib29rSWQgIT0gdGhpcy5ib29rSWQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXNCb29rQm9va21hcmtzLmxlbmd0aCA+IHRoaXMuYm9va21hcmtzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpc0Jvb2tCb29rbWFya3MgPSB0aGlzQm9va0Jvb2ttYXJrcy5maWx0ZXIodWIgPT4gdGhpcy5ib29rbWFya3MubWFwKGIgPT4gYi5jZmkpLmluZGV4T2YodWIuY2ZpKSA+PSAwKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJvb2ttYXJrcy5sZW5ndGggPiB0aGlzQm9va0Jvb2ttYXJrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNCb29rQm9va21hcmtzID0gdGhpcy5ib29rbWFya3MuZmlsdGVyKGIgPT4gdXNlcnNCb29rbWFya3MubWFwKHViID0+IHViLmNmaSkuaW5kZXhPZihiLmNmaSkgPCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzQm9va0Jvb2ttYXJrcy5mb3JFYWNoKGIgPT4gdXNlcnNCb29rbWFya3MucHVzaChiKSk7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMudXNlcklkLCBKU09OLnN0cmluZ2lmeSh1c2Vyc0Jvb2ttYXJrcykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMudXNlcklkLCBKU09OLnN0cmluZ2lmeSh0aGlzLmJvb2ttYXJrcykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Qm9va21hcmtzKCk6IE1hcEJvb2ttYXJrW10ge1xyXG4gICAgICAgIGxldCBib29rbWFya3M6IE1hcEJvb2ttYXJrW10gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMudXNlcklkKSk7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkID0gYm9va21hcmtzO1xyXG4gICAgICAgIGlmIChib29rbWFya3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZCA9IGJvb2ttYXJrcy5maWx0ZXIoYiA9PiBiLmJvb2tJZCA9PT0gdGhpcy5ib29rSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc0Jvb2ttYXJrKGNyZWF0ZWRNYXJrOiBNYXBCb29rbWFyayk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBoYXNNYXJrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ib29rbWFya3MuZm9yRWFjaCgobWFyaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hcmsubmFtZSA9PT0gY3JlYXRlZE1hcmsubmFtZSAmJiBtYXJrLmNmaSA9PT0gY3JlYXRlZE1hcmsuY2ZpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzTWFyayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBoYXNNYXJrO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUcnVzdGVkVXJsKHNyYzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2NlLnRydXN0QXNSZXNvdXJjZVVybChzcmMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFrZUlkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgICAgIGxldCBjaGFyYWN0ZXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcclxuICAgICAgICBsZXQgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0SW5pdERhdGEoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuJHNjb3BlLnZoc1dpZHRoICE9IG51bGwgPyB0aGlzLiRzY29wZS52aHNXaWR0aCA6IFZoc01hdGVyaWFsQ29udHJvbGxlci5ERUZBVUxUX1dJRFRIO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy4kc2NvcGUudmhzSGVpZ2h0ICE9IG51bGwgPyB0aGlzLiRzY29wZS52aHNIZWlnaHQgOiBWaHNNYXRlcmlhbENvbnRyb2xsZXIuREVGQVVMVF9IRUlHSFQ7XHJcbiAgICAgICAgdGhpcy5wZGZFeHBhbmRlZCA9IHRoaXMuJHNjb3BlLnZoc1BkZkV4cGFuZGVkICE9IG51bGwgPyB0aGlzLiRzY29wZS52aHNQZGZFeHBhbmRlZCA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXB1YkV4cGFuZGVkID0gdGhpcy4kc2NvcGUudmhzRXB1YkV4cGFuZGVkICE9IG51bGwgPyB0aGlzLiRzY29wZS52aHNFcHViRXhwYW5kZWQgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmVuYWJsZURvd25sb2FkID0gdGhpcy4kc2NvcGUudmhzRW5hYmxlRG93bmxvYWQgIT0gbnVsbCA/IHRoaXMuJHNjb3BlLnZoc0VuYWJsZURvd25sb2FkIDogdHJ1ZTtcclxuICAgICAgICB0aGlzLmVwdWJBcmVhID0gdGhpcy5tYWtlSWQoKTtcclxuICAgICAgICB0aGlzLmlzSW5pdEVwdWJBcmVhID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmlkZW9VVUlEID0gdGhpcy51dWlkRm9yVmlkZW8odGhpcy4kc2NvcGUudmhzTWF0ZXJpYWxFbnRpdHkuaWQpO1xyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsU2V0dGluZ3MuJHNjb3BlID0gdGhpcy4kc2NvcGU7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbFNldHRpbmdzLnNvdXJjZSA9IHRoaXMuJHNjb3BlLnZoc1NvdXJjZXNbMF0uc3JjO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxTZXR0aW5ncy5wb3N0ZXIgPSB0aGlzLiRzY29wZS52aHNNYXRlcmlhbEVudGl0eS5wcmV2aWV3VXJsO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxTZXR0aW5ncy5tYXRlcmlhbElkID0gdGhpcy52aWRlb1VVSUQ7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbFNldHRpbmdzLmNvdXJzZUlkID0gdGhpcy4kc2NvcGUudmhzQ291cnNlSWQgPyB0aGlzLiRzY29wZS52aHNDb3Vyc2VJZC5zb3VyY2VJZC50b1N0cmluZygpIDogXCJcIjtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsU2V0dGluZ3Muc2VjdGlvbklkID0gdGhpcy4kc2NvcGUudmhzU2VjdGlvbklkID8gdGhpcy4kc2NvcGUudmhzU2VjdGlvbklkLnRvU3RyaW5nKCkgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxTZXR0aW5ncy5zdWJ0aXRsZXMgPSBuZXcgQXJyYXk8SVN1YnRpdGxlU291cmNlPigpO1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS52aHNNYXRlcmlhbEVudGl0eS5zdWJ0aXRsZXNVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbFNldHRpbmdzLnN1YnRpdGxlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLiRzY29wZS52aHNNYXRlcmlhbEVudGl0eS5sYW5ndWFnZU5hbWUsXHJcbiAgICAgICAgICAgICAgICB1cmw6IHRoaXMuJHNjb3BlLnZoc01hdGVyaWFsRW50aXR5LnN1YnRpdGxlc1VybFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbFNldHRpbmdzLmN1cnJlbnRUcmFjayA9IHRoaXMuJHNjb3BlLnZoc01hdGVyaWFsRW50aXR5Lmxhbmd1YWdlTmFtZTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsU2V0dGluZ3MuY2hlY2twb2ludHMgPSB0aGlzLiRzY29wZS52aHNNYXRlcmlhbEVudGl0eS5jaGVja3BvaW50cztcclxuICAgICAgICB0aGlzLm1hdGVyaWFsU2V0dGluZ3MuaXNSZXdpbmRBbGxvd2VkID0gdGhpcy4kc2NvcGUudmhzTWF0ZXJpYWxFbnRpdHkuaXNSZXdpbmRBbGxvd2VkO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXB1YkV4cGFuZGVkID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RXB1YkZyYW1lKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUudmhzTWF0ZXJpYWxUeXBlID09PSAnVklNRU8nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VmltZW9MaW5rKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1BkZk9yRXB1YigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUudmhzTWF0ZXJpYWxFbnRpdHkuY29udGVudFR5cGUgPT0gXCJhcHBsaWNhdGlvbi9wZGZcIiB8fCB0aGlzLiRzY29wZS52aHNNYXRlcmlhbEVudGl0eS5jb250ZW50VHlwZSA9PSBcImFwcGxpY2F0aW9uL2VwdWIremlwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFsRXh0ZW5zaW9uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLnZoc01hdGVyaWFsRW50aXR5LmZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIi5cIiArIHRoaXMuJHNjb3BlLnZoc01hdGVyaWFsRW50aXR5LmZpbGVOYW1lLnNwbGl0KFwiLlwiKS5wb3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHV1aWRGb3JWaWRlbyhtYXRlcmlhbElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBSYW5kb21VdGlscy5nZW5lcmF0ZVJhbmRvbUlkKG1hdGVyaWFsSWQgKyBcIl9cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVQcm9ncmVzc09mQ3VycmVudE1hdGVyaWFsKCkge1xyXG4gICAgICAgIGNvbnN0IHZpZGVvX2NhbGxiYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVvLXBsYXllci1jYWxsYmFjaycpO1xyXG4gICAgICAgIGlmICh2aWRlb19jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB2aWRlb19jYWxsYmFjay5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UHJvZ3Jlc3NGb3JNYXRlcmlhbChtYXRlcmlhbElkLCBjb3Vyc2VJZCwgc2VjdGlvbklkKTogSVByb21pc2U8SU1hdGVyaWFsUHJvZ3Jlc3NbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRDb3Vyc2VQcm9ncmVzcyhwYXJzZUludChjb3Vyc2VJZCkpXHJcbiAgICAgICAgICAgIC50aGVuKGNvdXJzZVByb2dyZXNzID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRTZWN0aW9uUHJvZ3Jlc3NFeHRlbnNpb25Gb3JNYXRlcmlhbFByb2dyZXNzKHBhcnNlSW50KGNvdXJzZUlkKSwgY291cnNlUHJvZ3Jlc3MuaWQsIHBhcnNlSW50KHNlY3Rpb25JZCksIHBhcnNlSW50KG1hdGVyaWFsSWQpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldE5ld011bHRpbWVkaWFTb3VyY2UobWF0ZXJpYWxTZXR0aW5nczogSU11bHRpbWVkaWFNYXRlcmlhbFNldHRpbmdzKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VGaWxsaW5nKG5ldyBJTXVsdGltZWRpYU1hdGVyaWFsU2V0dGluZ3MoKSk7XHJcbiAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsU2V0dGluZ3MuY291cnNlSWQubGVuZ3RoID4gMCAmJiBtYXRlcmlhbFNldHRpbmdzLnNlY3Rpb25JZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9ncmVzc0Zvck1hdGVyaWFsKG1hdGVyaWFsU2V0dGluZ3MubWF0ZXJpYWxJZCwgbWF0ZXJpYWxTZXR0aW5ncy5jb3Vyc2VJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuU0VDVElPTl9LRVkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuVElNRVNUQU1QX0tFWSwgcmVzdWx0WzBdLnRpbWVzdGFtcC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LlRJTUVTVEFNUF9LRVksICcwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRmlsbGluZyhtYXRlcmlhbFNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LlRJTUVTVEFNUF9LRVksICcwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VGaWxsaW5nKG1hdGVyaWFsU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2NhbFN0b3JhZ2VGaWxsaW5nKG1hdGVyaWFsU2V0dGluZ3M6IElNdWx0aW1lZGlhTWF0ZXJpYWxTZXR0aW5ncykge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LlNPVVJDRV9LRVksIG1hdGVyaWFsU2V0dGluZ3Muc291cmNlKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5NQVRFUklBTF9LRVksIG1hdGVyaWFsU2V0dGluZ3MubWF0ZXJpYWxJZCk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuQ0hFQ0tQT0lOVFNfS0VZLCBtYXRlcmlhbFNldHRpbmdzLmNoZWNrcG9pbnRzKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5QT1NURVJfVVJMX0tFWSwgbWF0ZXJpYWxTZXR0aW5ncy5wb3N0ZXIpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LkNPTkZJR1VSQVRJT05fS0VZLFxyXG4gICAgICAgICAgICBcIntcXFwiY2FuU2hvd0ZvcndhcmRSZXdpbmRCdXR0b25zXFxcIjpcIiArIG1hdGVyaWFsU2V0dGluZ3MuaXNSZXdpbmRBbGxvd2VkICsgXCIsIFxcXCJhdXRvcGxheVxcXCI6IHRydWV9XCIpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LlNVQlRJVExFU19UUkFDS1MsIEpTT04uc3RyaW5naWZ5KG1hdGVyaWFsU2V0dGluZ3Muc3VidGl0bGVzKSk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuU1VCVElUTEVTX0NVUlJFTlRfVFJBQ0ssIG1hdGVyaWFsU2V0dGluZ3MuY3VycmVudFRyYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYm9va21hcmtUZXh0RmllbGRJc0ZvY3VzZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmV3Qm9va21hcmtGaWVsZFwiKSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRDcm9zc09yaWdpbkJsb2IoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUudmhzTWF0ZXJpYWxFbnRpdHkuZG93bmxvYWRVcmwuc2VhcmNoKFwiZmlsZW5hbWVcIikgPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLiRzY29wZS52aHNNYXRlcmlhbEVudGl0eS5kb3dubG9hZFVybCwge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcclxuICAgICAgICAgICAgfSkudGhlbigociA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbci5kYXRhXSwge3R5cGU6IHIuZGF0YS50eXBlfSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgICAgICAgIGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgICAgICAgICBsaW5rLmlkID0gXCJ0ZW1wQmxvYkxpbmtcIlxyXG4gICAgICAgICAgICAgICAgbGluay50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG4gICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgdGhpcy4kc2NvcGUudmhzTWF0ZXJpYWxFbnRpdHkuZG93bmxvYWRVcmwuc3BsaXQoXCJmaWxlbmFtZT1cIilbMV0pO1xyXG4gICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgbGluay5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZpbWVvTGluaygpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGxpbmsgPSAnaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLycgKyBPYmplY3RUeXBlVXRpbHMuZXh0cmFjdFZpbWVvVXJsKHRoaXMuJHNjb3BlLnZoc01hdGVyaWFsRW50aXR5LmxpbmspO1xyXG4gICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZnJhbWUtdmltZW8nKTtcclxuICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGxpbmspO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2VuZE1lc3NhZ2VUb1NlbnRyeShtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAoPGFueT53aW5kb3cpLlNlbnRyeS5jYXB0dXJlTWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdVbmFibGUgdG8gc2VuZCBTZW50cnkgbWVzc2FnZS4nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNNYXRlcmlhbERpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUuY29udHJvbGxlciA9IFZoc01hdGVyaWFsQ29udHJvbGxlcjtcclxuICAgIGRpcmVjdGl2ZS5zY29wZSA9IHtcclxuICAgICAgICB2aHNJZDogXCI9P1wiLFxyXG4gICAgICAgIHZoc01hdGVyaWFsRW50aXR5OiBcIj1cIixcclxuICAgICAgICB2aHNNYXRlcmlhbFR5cGU6IFwiPVwiLFxyXG4gICAgICAgIHZoc1NvdXJjZXM6IFwiPVwiLFxyXG4gICAgICAgIHZoc0NvdXJzZUlkOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzU2VjdGlvbklkOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzV2lkdGg6IFwiPT9cIixcclxuICAgICAgICB2aHNIZWlnaHQ6IFwiPT9cIixcclxuICAgICAgICB2aHNQZGZFeHBhbmRlZDogXCI9P1wiLFxyXG4gICAgICAgIHZoc0VwdWJFeHBhbmRlZDogXCI9P1wiLFxyXG4gICAgICAgIHZoc0VuYWJsZURvd25sb2FkOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzRXJyb3JDYWxsYmFjazogXCImP1wiLFxyXG4gICAgICAgIHZoc0RvY3VtZW50RG93bmxvYWRPbmNsaWNrOiBcIiY/XCJcclxuICAgIH07XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1tYXRlcmlhbC5odG1sXCIpO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzTWF0ZXJpYWxEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL01hdGVyaWFsc1JvdXRlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNNYXRlcmlhbEVkaXRUb3BUYWJzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBtYXRlcmlhbElkOiBudW1iZXI7XHJcbiAgICB0b3BNZW51S2V5OiBzdHJpbmc7XHJcblxyXG4gICAgdm0/OiBWaHNNYXRlcmlhbEVkaXRUb3BUYWJzQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc01hdGVyaWFsRWRpdFRvcFRhYnNDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgQUJPVVRfVEFCX0tFWTogc3RyaW5nID0gXCJhYm91dFwiO1xyXG4gICAgcHVibGljIFJFTEFURURfUFJPRFVDVFNfVEFCX0tFWTogc3RyaW5nID0gXCJyZWxhdGVkUHJvZHVjdHNcIjtcclxuICAgIHB1YmxpYyBQRVJNSVNTSU9OU19UQUJfS0VZOiBzdHJpbmcgPSBcInBlcm1pc3Npb25zXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgTWF0ZXJpYWxzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNNYXRlcmlhbEVkaXRUb3BUYWJzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNNYXRlcmlhbEVkaXRUb3BUYWJzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb3BNZW51QWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS50b3BNZW51S2V5ID09IHRvcE1lbnVLZXk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNNYXRlcmlhbEVkaXRUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNNYXRlcmlhbEVkaXRUb3BUYWJzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzTWF0ZXJpYWxFZGl0VG9wVGFic0NvbnRyb2xsZXIpIHtcclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzTWF0ZXJpYWxFZGl0VG9wVGFic0NvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgbWF0ZXJpYWxJZDogXCI9dmhzTWF0ZXJpYWxJZFwiLFxyXG4gICAgICAgICAgICB0b3BNZW51S2V5OiBcIj12aHNUb3BNZW51S2V5XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1tYXRlcmlhbC1lZGl0LXRvcC10YWJzLmh0bWxcIiksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzTWF0ZXJpYWxFZGl0VG9wVGFic0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiXHJcbmltcG9ydCB7VXBsb2FkVXRpbHN9IGZyb20gXCIuLy4uL3V0aWxzL1VwbG9hZFV0aWxzXCI7XHJcbmltcG9ydCB7VXBsb2Fkc1NlcnZpY2V9IGZyb20gXCIuLy4uL3N0b3JhZ2UvVXBsb2Fkc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi8uLi91dGlscy9Nb21lbnRcIjtcclxuaW1wb3J0IHtDb250ZW50VXRpbHN9IGZyb20gXCIuLy4uL3V0aWxzL0NvbnRlbnRVdGlsc1wiO1xyXG5pbXBvcnQge0FjdGlvbkxvZ1NlcnZpY2V9IGZyb20gXCIuLy4uL3N0YXRpc3RpY3MvQWN0aW9uTG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0FjdGlvblR5cGV9IGZyb20gXCIuLy4uL3N0YXRpc3RpY3MvbW9kZWxzL0FjdGlvblR5cGVcIjtcclxuaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvU2VjdXJlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4vLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLy4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJTXVsdGltZWRpYVNvdXJjZX0gZnJvbSBcIi4vLi4vY29tcG9uZW50cy9tb2RlbHMvSU11bHRpbWVkaWFcIjtcclxuaW1wb3J0IHtJTWF0ZXJpYWx9IGZyb20gXCIuLy4uL21hdGVyaWFscy9tb2RlbHMvSU1hdGVyaWFsXCJcclxuaW1wb3J0IHtNYXRlcmlhbFR5cGUsIE1hdGVyaWFsVHlwZUVudW0sIE1hdGVyaWFsVHlwZUtleUVudW19IGZyb20gXCIuLy4uL21hdGVyaWFscy9tb2RlbHMvTWF0ZXJpYWxUeXBlXCJcclxuaW1wb3J0IHtNYXRlcmlhbFNlcnZpY2V9IGZyb20gXCIuLy4uL21hdGVyaWFscy9NYXRlcmlhbFNlcnZpY2VcIlxyXG5pbXBvcnQge0lQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc1wiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuLy4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIlxyXG5pbXBvcnQgSVByb21pc2UgPSBhbmd1bGFyLklQcm9taXNlO1xyXG5cclxudHlwZSBDYWxsYmFja1doZW5GaW5pc2hlZCA9IChjYWxsYmFja1BhcmFtZXRlcnM6IHsgbWF0ZXJpYWxzOiBJTWF0ZXJpYWxbXSB9KSA9PiB2b2lkO1xyXG5cclxuaW50ZXJmYWNlIElGaWxlIGV4dGVuZHMgRmlsZSB7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIElWaHNNYXRlcmlhbEVkaXRpbmdEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGNvdXJzZTogSUNvdXJzZTtcclxuICAgIGNhbGxiYWNrV2hlbkZpbmlzaGVkOiBDYWxsYmFja1doZW5GaW5pc2hlZDtcclxuICAgIC8vIG1hdGVyaWFsSWQ/OiBudW1iZXI7XHJcbiAgICB2bT86IFZoc01hdGVyaWFsRWRpdGluZ0NvbnRyb2xsZXI7IC8vIHNldCBieSB0aGUgZGlyZWN0aXZlIGl0c2VsZiwgdGhlbiB1c2VkIGluIHRoZSBodG1sIHRlbXBsYXRlXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNNYXRlcmlhbEVkaXRpbmdDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBtYXRlcmlhbDogSU1hdGVyaWFsID0ge307XHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxMaXN0OiBJTWF0ZXJpYWxbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBvd25lcnM6IElTZWxlY3RhYmxlW10gPSBbXTtcclxuICAgIHByaXZhdGUgb3duZXJzTWFwOiBNYXA8bnVtYmVyLCBJU2VsZWN0YWJsZT47XHJcbiAgICBwdWJsaWMgcHJldmlldzogSUZpbGU7XHJcbiAgICBwcml2YXRlIGZpbGU6IEZpbGU7XHJcbiAgICBwcml2YXRlIGZpbGVMaXN0OiBGaWxlW10gPSBbXTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZEZpbGVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNFcnJvckZvcm1hdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBmaWxlTmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzOiBJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc1tdID0gW107XHJcblxyXG4gICAgcHVibGljIGF0dGFjaEZvcm1hdDogc3RyaW5nO1xyXG4gICAgcHVibGljIHVwbG9hZENvbnRlbnRUeXBlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbXVsdGltZWRpYVNvdXJjZXM6IElNdWx0aW1lZGlhU291cmNlW107XHJcblxyXG4gICAgcHVibGljIHNob3dVcGxvYWRCdXR0b246IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZGlzYWJsZWRTYXZlQnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIGRpc2FibGVkVXBsb2FkQnV0dG9uOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCJVcGxvYWRcIixcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEFjdGlvbkxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcGxvYWRVdGlscy5OQU1FLFxyXG4gICAgICAgIE1hdGVyaWFsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGU6IElWaHNNYXRlcmlhbEVkaXRpbmdEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdXBsb2FkZXI6IG5nLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGFjdGlvbkxvZ1NlcnZpY2U6IEFjdGlvbkxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVwbG9hZFV0aWxzOiBVcGxvYWRVdGlscyxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWF0ZXJpYWxTZXJ2aWNlOiBNYXRlcmlhbFNlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuYXR0YWNoRm9ybWF0ID0gXCJcIjtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFVwbG9hZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICQod2luZG93KS5vbihcImluaXRpYWxpemVNYXRlcmlhbFwiLCAoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZU1hdGVyaWFsKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgJHNjb3BlLnZtLnNhdmVNYXRlcmlhbCgkc2NvcGUudm0ubWF0ZXJpYWxMaXN0LCAkc2NvcGUudm0ucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XHJcbiAgICAgICAgICAgIGxldCBkcm9wRnJvbUNvdXJzZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZHJvcEZyb21Db3Vyc2VcIik7XHJcbiAgICAgICAgICAgIGxldCBkcm9wRnJvbUNvdXJzZU5vdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRyb3BGcm9tQ291cnNlTm90ZVwiKTtcclxuICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJztcclxuXHJcbiAgICAgICAgICAgIGlmIChkcm9wRnJvbUNvdXJzZSA9PSBlbGVtIHx8IGRyb3BGcm9tQ291cnNlTm90ZSA9PSBlbGVtKSB7XHJcbiAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU1hdGVyaWFsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVNYXRlcmlhbChtYXRlcmlhbHM6IElNYXRlcmlhbFtdLCBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwczogSVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHNbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkVXBsb2FkQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnZhbGlkaXR5ID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMubWF0ZXJpYWwudmFsaWRpdHlUZXh0KTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnR5cGVLZXkgPSBNYXRlcmlhbFR5cGVFbnVtW3RoaXMubWF0ZXJpYWwudHlwZUlkXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwuaWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNYXRlcmlhbChtYXRlcmlhbHMsIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLCB0aGlzLnByZXZpZXcpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVNYXRlcmlhbChtYXRlcmlhbHMsIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLCB0aGlzLnByZXZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZU1hdGVyaWFsKG1hdGVyaWFsczogSU1hdGVyaWFsW10sIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzOiBJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc1tdLCBwcmV2aWV3OiBGaWxlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwudHlwZUlkID09PSBNYXRlcmlhbFR5cGVFbnVtLkxJTkspIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVPclVwZGF0ZUxpbmsodGhpcy5tYXRlcmlhbCwgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMsIHByZXZpZXcsICdjcmVhdGUnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU9yVXBkYXRlTWF0ZXJpYWwobWF0ZXJpYWxzLCBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcywgcHJldmlldywgJ2NyZWF0ZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpPT4gdGhpcy5pbml0aWFsaXplTWF0ZXJpYWwoKSwgMjAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVNYXRlcmlhbChtYXRlcmlhbHM6IElNYXRlcmlhbFtdLCBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwczogSVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHNbXSwgcHJldmlldzogRmlsZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLm1hdGVyaWFsLnR5cGVJZCA9PT0gTWF0ZXJpYWxUeXBlRW51bS5MSU5LKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlT3JVcGRhdGVMaW5rKHRoaXMubWF0ZXJpYWwsIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLCBwcmV2aWV3LCAndXBkYXRlJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVPclVwZGF0ZU1hdGVyaWFsKG1hdGVyaWFscywgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMsIHByZXZpZXcsICd1cGRhdGUnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVPclVwZGF0ZUxpbmsobWF0ZXJpYWw6IElNYXRlcmlhbCwgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzW10sIHByZXZpZXc6IEZpbGUsIG1vZGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBwcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPElNYXRlcmlhbD47XHJcbiAgICAgICAgaWYgKG1vZGUgPT09ICdjcmVhdGUnKSB7XHJcbiAgICAgICAgICAgIHByb21pc2UgPSB0aGlzLm1hdGVyaWFsU2VydmljZS5jcmVhdGUobWF0ZXJpYWwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ3VwZGF0ZScpIHtcclxuICAgICAgICAgICAgcHJvbWlzZSA9IHRoaXMubWF0ZXJpYWxTZXJ2aWNlLnVwZGF0ZShtYXRlcmlhbCwgZmFsc2UsIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVVcGRhdGVNYXRlcmlhbFN1Y2Nlc3NDYWxsYmFjayhyZXN1bHQsIG51bGwsIHByZXZpZXcsIHRydWUpO1xyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZU9yVXBkYXRlTWF0ZXJpYWwobWF0ZXJpYWxzOiBJTWF0ZXJpYWxbXSwgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzW10sIHByZXZpZXc6IEZpbGUsIG1vZGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBzYXZlTWF0ZXJpYWxEZWZlcnJlZCA9IHRoaXMuJHEuZGVmZXIoKTtcclxuICAgICAgICBzYXZlTWF0ZXJpYWxEZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgICAgICAgbGV0IHNhdmVNYXRlcmlhbFByb21pc2U6IElQcm9taXNlPGFueT4gPSBzYXZlTWF0ZXJpYWxEZWZlcnJlZC5wcm9taXNlO1xyXG4gICAgICAgIGxldCBwcm9taXNlc0FycmF5OiBJUHJvbWlzZTxJTWF0ZXJpYWw+W10gPSBbXTtcclxuICAgICAgICBsZXQgY3JlYXRlZE1hdGVyaWFsczogSU1hdGVyaWFsW10gPSBbXTtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2gobWF0ZXJpYWxzLCAobWF0ZXJpYWwsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHNhdmVNYXRlcmlhbFByb21pc2UgPSBzYXZlTWF0ZXJpYWxQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbGU6IEZpbGUgPSB0aGlzLmZpbGVMaXN0W2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGlmIChDb250ZW50VXRpbHMuY2hlY2tGaWxlRXh0KG1hdGVyaWFsLnR5cGVJZCwgQ29udGVudFV0aWxzLmdldEZpbGVFeHQoZmlsZS5uYW1lKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxJTWF0ZXJpYWw+O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnY3JlYXRlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gdGhpcy5tYXRlcmlhbFNlcnZpY2UuY3JlYXRlKG1hdGVyaWFsLCBmaWxlLCBwcmV2aWV3KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICd1cGRhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSB0aGlzLm1hdGVyaWFsU2VydmljZS51cGRhdGUobWF0ZXJpYWwsIGZhbHNlLCBmYWxzZSwgZmlsZSwgcHJldmlldyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzQXJyYXkucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVVcGRhdGVNYXRlcmlhbFN1Y2Nlc3NDYWxsYmFjayhyZXN1bHQsIGZpbGUsIHByZXZpZXcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZE1hdGVyaWFscy5wdXNoKHRoaXMubWF0ZXJpYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gVE9ETzogYSBzcGVjaWZpYyBlcnJvciBjb2RlIHNob3VsZCBiZSBjYXVnaHQgaGVyZSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBleGNlcHRpb25zIVxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHVwbG9hZCB0aGlzIGZpbGU6IHBsZWFzZSBjaGVjayB3aGV0aGVyIHRoZSBmaWxlIGZvcm1hdCBpcyB2YWxpZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSBtYXRlcmlhbHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgc2F2ZU1hdGVyaWFsUHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUJ1dHRvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHEuYWxsKHByb21pc2VzQXJyYXkpLnRoZW4oKCkgPT4gdGhpcy4kc2NvcGUuY2FsbGJhY2tXaGVuRmluaXNoZWQoe21hdGVyaWFsczogY3JlYXRlZE1hdGVyaWFsc30pKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVVcGRhdGVNYXRlcmlhbFN1Y2Nlc3NDYWxsYmFjayhtYXRlcmlhbDogSU1hdGVyaWFsLCBmaWxlOiBGaWxlLCBwcmV2aWV3OiBGaWxlLCBuZWVkQ2FsbGJhY2s6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsID0gYW5ndWxhci5jb3B5KG1hdGVyaWFsW1VwbG9hZHNTZXJ2aWNlLk1BVEVSSUFMX0tFWV0pO1xyXG4gICAgICAgIGlmIChwcmV2aWV3KSB7XHJcbiAgICAgICAgICAgIGxldCBwcmV2aWV3VXBsb2FkVXJsOiBzdHJpbmcgPSBtYXRlcmlhbFtVcGxvYWRzU2VydmljZS5QUkVWSUVXX1VQTE9BRF9VUkxfS0VZXTtcclxuICAgICAgICAgICAgbGV0IHByZXZpZXdVcGxvYWRNZXRob2Q6IHN0cmluZyA9IG1hdGVyaWFsW1VwbG9hZHNTZXJ2aWNlLlBSRVZJRVdfVVBMT0FEX01FVEhPRF9LRVldO1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZFV0aWxzLnVwbG9hZE1hdGVyaWFsQnlDaHVua3MocHJldmlldywgdGhpcy5tYXRlcmlhbC5wcmV2aWV3SWQsIHRoaXMubWF0ZXJpYWwuaWQsIHByZXZpZXdVcGxvYWRVcmwsIHByZXZpZXdVcGxvYWRNZXRob2QsIHRoaXMubWF0ZXJpYWwudGl0bGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgICBsZXQgZmlsZVVwbG9hZFVybDogc3RyaW5nID0gbWF0ZXJpYWxbVXBsb2Fkc1NlcnZpY2UuRklMRV9VUExPQURfVVJMX0tFWV07XHJcbiAgICAgICAgICAgIGxldCBmaWxlVXBsb2FkTWV0aG9kOiBzdHJpbmcgPSBtYXRlcmlhbFtVcGxvYWRzU2VydmljZS5GSUxFX1VQTE9BRF9NRVRIT0RfS0VZXTtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRVdGlscy51cGxvYWRNYXRlcmlhbEJ5Q2h1bmtzKGZpbGUsIHRoaXMubWF0ZXJpYWwuZmlsZUlkLCB0aGlzLm1hdGVyaWFsLmlkLCBmaWxlVXBsb2FkVXJsLCBmaWxlVXBsb2FkTWV0aG9kLCB0aGlzLm1hdGVyaWFsLnRpdGxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzU3VjY2Vzc0NhbGxiYWNrKHRoaXMubWF0ZXJpYWwuaWQsIG5lZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnN0b3JhZ2Uubm90LmF2YWlsYWJsZVwiKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTm8gYXZhaWxhYmxlIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRGaWxlT3JMaW5rVHlwZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRXJyb3JGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy51cGxvYWRDb250ZW50VHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnR5cGVJZCA9IE1hdGVyaWFsVHlwZUVudW0uQVVESU87IC8vZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAgICAgICB0aGlzLnNob3dVcGxvYWRCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudHlwZUlkID0gTWF0ZXJpYWxUeXBlRW51bS5MSU5LO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5maWxlTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GaWxlc1VwbG9hZCgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgY3VycmVudEVycm9yOiBib29sZWFuID0gdGhpcy5pc0Vycm9yRm9ybWF0O1xyXG4gICAgICAgIHRoaXMuaXNFcnJvckZvcm1hdCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGVMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TWF0ZXJpYWw6IElNYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVMaXN0LmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1hdGVyaWFsID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVFeHQgPSBDb250ZW50VXRpbHMuZ2V0RmlsZUV4dChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFDb250ZW50VXRpbHMuTUFQX0ZJTEVfRVhURU5TSU9OU19UT19NQVRFUklBTF9UWVBFU1tmaWxlRXh0XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodGhpcy5tYXRlcmlhbCwgY3VycmVudE1hdGVyaWFsKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWF0ZXJpYWwudGl0bGUgPSBDb250ZW50VXRpbHMuZ2V0RmlsZVdpdGhvdXRFeHQoZmlsZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWF0ZXJpYWwudHlwZUlkID0gQ29udGVudFV0aWxzLmZpbmRNYXRlcmlhbFR5cGVCeUZpbGVFeHRlbnNpb24oZmlsZUV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNYXRlcmlhbC50eXBlSWQgPT09IE1hdGVyaWFsVHlwZUtleUVudW0uQVVESU8gfHwgY3VycmVudE1hdGVyaWFsLnR5cGVJZCA9PT0gTWF0ZXJpYWxUeXBlS2V5RW51bS5WSURFTykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWF0ZXJpYWwuaXNSZXdpbmRBbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbExpc3QucHVzaChjdXJyZW50TWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTGlzdC5tYXAoKGZpbGUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREdXJhdGlvbihmaWxlKS50aGVuKChkdXJhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsTGlzdFtpbmRleF0uZHVyYXRpb24gPSBkdXJhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVCdXR0b24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkQ29udGVudFR5cGUgPSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC50eXBlSWQgPSBNYXRlcmlhbFR5cGVFbnVtLkFVRElPOyAvL2RlZmF1bHQgdmFsdWVcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1VwbG9hZEJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yRm9ybWF0ID0gY3VycmVudEVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmFibGVCdXR0b24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkVXBsb2FkQnV0dG9uID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuYWJsZUJ1dHRvbkZvckxpbmtVcGxvYWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZChmaWxlOiBJRmlsZSwgbWF0ZXJpYWxJZDogbnVtYmVyLCBmaWxlVHlwZTogc3RyaW5nKTogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkUHJvbWlzZTxJRmlsZT4ge1xyXG4gICAgICAgIGxldCB1cmxCdWlsZGVyID0gdGhpcy51cmwuYmFzZShcIi9hcGkvbWF0ZXJpYWxzL3VwbG9hZD9tYXRlcmlhbElkPTptYXRlcmlhbElkJmZpbGVUeXBlPTpmaWxlVHlwZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bWF0ZXJpYWxJZFwiLCBtYXRlcmlhbElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6ZmlsZVR5cGVcIiwgZmlsZVR5cGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiR1cGxvYWRlci51cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgIHVybDogYW5ndWxhci5jb3B5KHVybEJ1aWxkZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgICAgIGZpbGU6IGZpbGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJldXBsb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlsZU5hbWUgPSAodGhpcy5zaG93VXBsb2FkQnV0dG9uKSA/IHRoaXMubWF0ZXJpYWwuZmlsZU5hbWUgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2hvd1VwbG9hZEJ1dHRvbiA9ICF0aGlzLnNob3dVcGxvYWRCdXR0b247XHJcbiAgICAgICAgdGhpcy5maWxlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc1N1Y2Nlc3NDYWxsYmFjayhtYXRlcmlhbElkOiBudW1iZXIsIG5lZWRDYWxsYmFjazogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aW9uTG9nU2VydmljZS5jcmVhdGUobWF0ZXJpYWxJZCwgUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUwsIEFjdGlvblR5cGUuTUFURVJJQUxfQ1JFQVRJT04pO1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgbWF0ZXJpYWwgaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgaWYgKG5lZWRDYWxsYmFjaykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUuY2FsbGJhY2tXaGVuRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmNhbGxiYWNrV2hlbkZpbmlzaGVkKHttYXRlcmlhbHM6IFt0aGlzLm1hdGVyaWFsXX0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NhbGxiYWNrIG5vdCBkZWZpbmVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkUGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoc2VjdXJlZE9iamVjdFR5cGU6IFNlY3VyZWRPYmplY3RUeXBlLCBvYmplY3RJZD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEFsbE9iamVjdFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKHNlY3VyZWRPYmplY3RUeXBlLCBvYmplY3RJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZE1hdGVyaWFsKCk6IGFuZ3VsYXIuSVByb21pc2U8SU1hdGVyaWFsPiB7XHJcbiAgICAgICAgbGV0IHByb21pc2U6IGFuZ3VsYXIuSVByb21pc2U8SU1hdGVyaWFsPiA9IHRoaXMubWF0ZXJpYWxTZXJ2aWNlLmdldCh0aGlzLm1hdGVyaWFsLmlkKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnZhbGlkaXR5VGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShyZXN1bHQudmFsaWRpdHkpO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVOYW1lID0gcmVzdWx0LmZpbGVOYW1lO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5saW5rKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZENvbnRlbnRUeXBlID0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkQ29udGVudFR5cGUgPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdGVyaWFsLnR5cGVJZCAhPSBNYXRlcmlhbFR5cGVFbnVtLkxJTkspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1VwbG9hZEJ1dHRvbiA9ICF0aGlzLm1hdGVyaWFsLmZpbGVJZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm11bHRpbWVkaWFTb3VyY2VzID0gW3tcclxuICAgICAgICAgICAgICAgIHNyYzogdGhpcy5tYXRlcmlhbC5kb3dubG9hZFVybCB8fCAnJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMubWF0ZXJpYWwuY29udGVudFR5cGUsXHJcbiAgICAgICAgICAgICAgICBkYXRhUmVzOiAnJ1xyXG4gICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkTWF0ZXJpYWxPd25lcnMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRNYXRlcmlhbE93bmVycygpOiBhbmd1bGFyLklQcm9taXNlPElTZWxlY3RhYmxlW10+IHtcclxuICAgICAgICBsZXQgcHJvbWlzZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlcnNXaXRob3V0RXhjbHVkZWRVc2Vyc0ZvclNlbGVjdG9yKHRoaXMubWF0ZXJpYWwuYnVzaW5lc3NVbml0SWQpO1xyXG4gICAgICAgIHByb21pc2UudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm93bmVycyA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICB0aGlzLm93bmVyc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBJU2VsZWN0YWJsZT4oKTtcclxuICAgICAgICAgICAgdGhpcy5vd25lcnMuZm9yRWFjaCgob3duZXI6IElTZWxlY3RhYmxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm93bmVyc01hcC5zZXQob3duZXIuaWQsIG93bmVyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplTWF0ZXJpYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGxvYWRDb250ZW50VHlwZSA9IDE7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IHt9O1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Vycm9yRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG1hdGVyaWFsSWRTdHI6IHN0cmluZyA9IFN0cmluZyh0aGlzLm1hdGVyaWFsLmlkKTtcclxuICAgICAgICBsZXQgaGFzTWF0ZXJpYWxJZDogYm9vbGVhbiA9ICEhdGhpcy5tYXRlcmlhbC5pZDtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kU3lzdGVtUGVybWlzc2lvbnNJZighaGFzTWF0ZXJpYWxJZCwgc3lzdGVtUGVybWlzc2lvbnMgPT4gc3lzdGVtUGVybWlzc2lvbnMuYWRkTWF0ZXJpYWwpXHJcbiAgICAgICAgICAgIC5kZW1hbmRNYXRlcmlhbFBlcm1pc3Npb25zSWYoaGFzTWF0ZXJpYWxJZCwgbWF0ZXJpYWxJZFN0ciwgbWF0ZXJpYWxQZXJtaXNzaW9ucyA9PiBtYXRlcmlhbFBlcm1pc3Npb25zLmVkaXQpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dVcGxvYWRCdXR0b24gPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoaGFzTWF0ZXJpYWxJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkTWF0ZXJpYWwoKTtcclxuICAgICAgICAgICAgdGhpcy5lbmFibGVCdXR0b25Gb3JMaW5rVXBsb2FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLk1BVEVSSUFMLCBtYXRlcmlhbElkU3RyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUuY291cnNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnN1YmplY3RJZCA9IHRoaXMuJHNjb3BlLmNvdXJzZS5zdWJqZWN0SWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnN1YmplY3ROYW1lID0gdGhpcy4kc2NvcGUuY291cnNlLnN1YmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC50b3BpYyA9IHRoaXMuJHNjb3BlLmNvdXJzZS50b3BpYztcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwubGFuZ3VhZ2VJZCA9IHRoaXMuJHNjb3BlLmNvdXJzZS5sYW5ndWFnZUlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5sYW5ndWFnZU5hbWUgPSB0aGlzLiRzY29wZS5jb3Vyc2UubGFuZ3VhZ2VOYW1lO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5vd25lcklkID0gdGhpcy4kc2NvcGUuY291cnNlLm93bmVySWRzWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5vd25lck5hbWUgPSAodGhpcy5tYXRlcmlhbC5vd25lcklkKSA/ICcuLi4nIDogJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnR5cGVJZCA9IE1hdGVyaWFsVHlwZUVudW0uVklERU87XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnR5cGVOYW1lID0gXCJWaWRlb1wiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC50eXBlS2V5ID0gJ1ZJREVPJztcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuYnVzaW5lc3NVbml0SWQgPSB0aGlzLiRzY29wZS5jb3Vyc2UuYnVzaW5lc3NVbml0SWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnZhbGlkaXR5ID0gdGhpcy4kc2NvcGUuY291cnNlLmVuZERhdGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmlzUmV3aW5kQWxsb3dlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sb2FkTWF0ZXJpYWxPd25lcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVwbG9hZGVySWQgPSB1c2VyLmlkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoU2VjdXJlZE9iamVjdFR5cGUuTUFURVJJQUwpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREdXJhdGlvbihmaWxlKTogSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRxKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ2aWRlb1wiKTtcclxuICAgICAgICAgICAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzb3VyY2VcIik7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2Uuc3JjID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgdmlkZW8ucHJlbG9hZCA9IFwibWV0YWRhdGFcIjtcclxuICAgICAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKHNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICB2aWRlby5vbmxvYWRlZG1ldGFkYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmlkZW8uZHVyYXRpb24pXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc01hdGVyaWFsRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzTWF0ZXJpYWxFZGl0aW5nRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzTWF0ZXJpYWxFZGl0aW5nQ29udHJvbGxlcikge1xyXG4gICAgICAgIC8vIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUpO1xyXG4gICAgICAgICRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc01hdGVyaWFsRWRpdGluZ0NvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgY291cnNlOiBcIj1cIixcclxuICAgICAgICAgICAgY2FsbGJhY2tXaGVuRmluaXNoZWQ6IFwiJj9cIlxyXG4gICAgICAgICAgICAvLyBtYXRlcmlhbElkOiBcIj0/XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1tYXRlcmlhbC1lZGl0aW5nLmh0bWxcIilcclxuICAgIH07XHJcbn1cclxuXHJcblZoc01hdGVyaWFsRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSVNlY3Rpb25JbkhpZXJhcmNoeVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge1RpbWVab25lLCBUaW1lWm9uZVR5cGV9IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvVGltZVpvbmVUeXBlXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtJVklMVFNlc3Npb259IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvSVZJTFRTZXNzaW9uXCI7XHJcblxyXG5pbnRlcmZhY2UgVmhzTWVldGluZ0NyZWF0ZUVkaXREaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIG5ld1Nlc3Npb246IElWSUxUU2Vzc2lvbjtcclxuICAgIHZpbHRTZXNzaW9uU2VjdGlvbnM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdO1xyXG4gICAgY3VycmVudFVzZXI6IElVc2VySW5mbztcclxuICAgIGNvdXJzZTogSUNvdXJzZTtcclxuICAgIGlzQ3JlYXRpb25Nb2RhbFNob3duOiBib29sZWFuO1xyXG4gICAgdm0/OiBWaHNNZWV0aW5nQ3JlYXRlRWRpdERpcmVjdGl2ZUNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNNZWV0aW5nQ3JlYXRlRWRpdERpcmVjdGl2ZUNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHRpbWVab25lID0gVGltZVpvbmU7XHJcbiAgICBwdWJsaWMgdmlsdFNlc3Npb25TZWN0aW9uczogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkW107XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdXHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IFZoc01lZXRpbmdDcmVhdGVFZGl0RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNNZWV0aW5nQ3JlYXRlRWRpdERpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBWaHNNZWV0aW5nQ3JlYXRlRWRpdERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc01lZXRpbmdDcmVhdGVFZGl0RGlyZWN0aXZlQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNNZWV0aW5nQ3JlYXRlRWRpdERpcmVjdGl2ZUNvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgbmV3U2Vzc2lvbjogXCI9XCIsXHJcbiAgICAgICAgICAgIHZpbHRTZXNzaW9uU2VjdGlvbnM6IFwiPVwiLFxyXG4gICAgICAgICAgICBjdXJyZW50VXNlcjogXCI9XCIsXHJcbiAgICAgICAgICAgIGlzQ3JlYXRpb25Nb2RhbFNob3duOiBcIj1cIixcclxuICAgICAgICAgICAgY291cnNlOiBcIj1cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLW1lZXRpbmctY3JlYXRlLWVkaXQuaHRtbFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5WaHNNZWV0aW5nQ3JlYXRlRWRpdERpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SU5vdGlmaWNhdGlvblRlbXBsYXRlfSBmcm9tIFwiLi4vbm90aWZpY2F0aW9uVGVtcGxhdGVzL21vZGVsL0lOb3RpZmljYXRpb25UZW1wbGF0ZVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge05vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Tm90aWZpY2F0aW9uU2VydmljZX0gZnJvbSBcIi4uL25vdGlmaWNhdGlvblRlbXBsYXRlcy9Ob3RpZmljYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJ1c2luZXNzVW5pdH0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvbW9kZWxzL0lCdXNpbmVzc1VuaXRcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4vZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4uL1JlZmVyZW5jZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7Tm90aWZpY2F0aW9uRXZlbnRHcm91cEtleX0gZnJvbSBcIi4vTm90aWZpY2F0aW9uRXZlbnRHcm91cEtleVwiO1xyXG5pbXBvcnQge2hpZGRlbkV2ZW50cywgTm90aWZpY2F0aW9uRXZlbnRLZXksIHN5c3RlbUV2ZW50c30gZnJvbSBcIi4uL25vdGlmaWNhdGlvblRlbXBsYXRlcy9tb2RlbC9Ob3RpZmljYXRpb25FdmVudEtleVwiO1xyXG5pbXBvcnQge0lOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHN9IGZyb20gXCIuLi9ub3RpZmljYXRpb25UZW1wbGF0ZXMvbW9kZWwvSU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsc1wiO1xyXG5pbXBvcnQge05vdGlmaWNhdGlvblRlbXBsYXRlc1Njb3BlfSBmcm9tIFwiLi4vbm90aWZpY2F0aW9uVGVtcGxhdGVzL21vZGVsL05vdGlmaWNhdGlvblRlbXBsYXRlc1Njb3BlXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuXHJcbmludGVyZmFjZSBJUmVjaXBpZW50VGFncyB7XHJcbiAgICByZWNpcGllbnRJZHM6IG51bWJlcltdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSVZoc05vdGlmaWNhdGlvblRlbXBsYXRlRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBjb3Vyc2VJZD86IG51bWJlcjtcclxuICAgIG5vdGlmaWNhdGlvblR5cGU6IHN0cmluZztcclxuICAgIHZtOiBWaHNOb3RpZmljYXRpb25UZW1wbGF0ZUNvbnRyb2xsZXJcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc05vdGlmaWNhdGlvblRlbXBsYXRlQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgbm90aWZpY2F0aW9uR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElOb3RpZmljYXRpb25UZW1wbGF0ZT47XHJcbiAgICBwdWJsaWMgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHZpc2libGVCVVNlbGVjdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdXNlcjogSVVzZXJJbmZvO1xyXG4gICAgcHVibGljIGlzQ291cnNlOiBib29sZWFuO1xyXG4gICAgcHVibGljIG5vdGlmaWNhdGlvbkV2ZW50R3JvdXBLZXk6IE5vdGlmaWNhdGlvbkV2ZW50R3JvdXBLZXk7XHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlO1xyXG4gICAgcHVibGljIHRlbXBsYXRlRGV0YWlsc0RlbGV0aW9uSW5Qcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyByZWNpcGllbnRMaXN0Rm9yUmV2ZXJ0OiBJUmVjaXBpZW50VGFncyA9IHtyZWNpcGllbnRJZHM6IFtdfTtcclxuICAgIHB1YmxpYyBjY1JlY2lwaWVudExpc3RGb3JSZXZlcnQ6IElSZWNpcGllbnRUYWdzID0ge3JlY2lwaWVudElkczogW119O1xyXG4gICAgcHVibGljIG5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsc0ZvclJldmVydDogSU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscztcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXROYW1lRm9yUmV2ZXJ0OiBzdHJpbmcgPSBcIkFsbFwiO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdElkRm9yUmV2ZXJ0OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbm90aWZpY2F0aW9uVGVtcGxhdGVJZDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIE5vdGlmaWNhdGlvblNlcnZpY2UuTkFNRSxcclxuICAgICAgICBOb3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzTm90aWZpY2F0aW9uVGVtcGxhdGVEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IG5nLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXI6IE5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uRXZlbnRHcm91cEtleSA9IE5vdGlmaWNhdGlvbkV2ZW50R3JvdXBLZXlbJHNjb3BlLm5vdGlmaWNhdGlvblR5cGUudG9VcHBlckNhc2UoKV07XHJcbiAgICAgICAgaWYgKHRoaXMubm90aWZpY2F0aW9uRXZlbnRHcm91cEtleSA9PSBOb3RpZmljYXRpb25FdmVudEdyb3VwS2V5LkNPVVJTRSkge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkdyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElCdXNpbmVzc1VuaXQ+KHRoaXMuJGh0dHAsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9ub3RpZmljYXRpb25UZW1wbGF0ZXM/ZXZlbnRLZXk9OmV2ZW50S2V5XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBhcmFtKFwiOmV2ZW50S2V5XCIsIE5vdGlmaWNhdGlvbkV2ZW50R3JvdXBLZXlbdGhpcy5ub3RpZmljYXRpb25FdmVudEdyb3VwS2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25HcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJQnVzaW5lc3NVbml0Pih0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvbm90aWZpY2F0aW9uVGVtcGxhdGVzXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNlcnZpY2UoKSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25HcmlkTW9kZWwuZmlsdGVyLmJ1c2luZXNzVW5pdElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkdyaWRNb2RlbC5maWx0ZXIuaXNSZWZlcmVuY2VPYmplY3QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uR3JpZE1vZGVsLmZpbHRlci5ldmVudCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25HcmlkTW9kZWwuZmlsdGVyLnJlY2lwaWVudCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUubm90aWZpY2F0aW9uVHlwZTtcclxuXHJcbiAgICAgICAgaWYgKCEhJHNjb3BlLmNvdXJzZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2UgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnZpc2libGVCVVNlbGVjdG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uR3JpZE1vZGVsLmZpbHRlci5pc1JlZmVyZW5jZU9iamVjdCA9ICRzY29wZS5jb3Vyc2VJZDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXQoJHNjb3BlLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKGNvdXJzZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlID0gYW5ndWxhci5jb3B5KGNvdXJzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzQ291cnNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUJVU2VsZWN0b3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgIC50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyA9IHVzZXIuYWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzICYmICF0aGlzLmlzQ291cnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25HcmlkTW9kZWwuZmlsdGVyLmJ1c2luZXNzVW5pdElkID0gdXNlci5idXNpbmVzc1VuaXRzWzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZpc2libGVDb250ZW50KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCB2aXNpYmxlQWxsSWZVc2VySGF2ZU11bHRpcGx5QlU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyAmJiB0aGlzLm5vdGlmaWNhdGlvbkdyaWRNb2RlbC5maWx0ZXIuYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgfHwgIXRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyAmJiB0aGlzLmlzQ291cnNlICYmIHRoaXMuY291cnNlICYmIHRoaXMudXNlci5idXNpbmVzc1VuaXRzLmluZGV4T2YodGhpcy5jb3Vyc2UuYnVzaW5lc3NVbml0SWQpICE9IC0xXHJcbiAgICAgICAgICAgIHx8ICF0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgJiYgdGhpcy51c2VyICYmIHRoaXMudXNlci5idXNpbmVzc1VuaXRzICYmIHRoaXMudXNlci5idXNpbmVzc1VuaXRzLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgICB8fCB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMpIHtcclxuICAgICAgICAgICAgdmlzaWJsZUFsbElmVXNlckhhdmVNdWx0aXBseUJVID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZpc2libGVBbGxJZlVzZXJIYXZlTXVsdGlwbHlCVTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SXNBY3RpdmVHcmlkU3R5bGUoaXNBY3RpdmU6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBpc0FjdGl2ZVxyXG4gICAgICAgICAgICA/IHt9XHJcbiAgICAgICAgICAgIDoge1wiY29sb3JcIjogXCIjOTk5OTk5XCJ9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb252ZXJ0SXNBY3RpdmUoaXNBY3RpdmU6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBpc0FjdGl2ZSAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpc0FjdGl2ZSA/ICdZZXMnIDogJ05vJ1xyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TGlua0ZvckVkaXROb3RpZmljYXRpb25UZW1wbGF0ZXModGVtcGxhdGVJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLm5vdGlmaWNhdGlvbkV2ZW50R3JvdXBLZXkpIHtcclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudEdyb3VwS2V5LlNZU1RFTTpcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlci5lZGl0VXJsKHRlbXBsYXRlSWQsIHRoaXMubm90aWZpY2F0aW9uR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRHcm91cEtleS5DT1VSU0U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VSb3V0ZXIubm90aWZpY2F0aW9uRWRpdFVybCh0ZW1wbGF0ZUlkLCB0aGlzLiRzY29wZS5jb3Vyc2VJZCwgdGhpcy5ub3RpZmljYXRpb25HcmlkTW9kZWwuZmlsdGVyLmJ1c2luZXNzVW5pdElkKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlY2lwaWVudHNUYWdzVG9BcnJheShyZWNpcGllbnRzVGFnczogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiByZWNpcGllbnRzVGFnc1xyXG4gICAgICAgICAgICA/IHRoaXMudXNlci5hbGxCdXNpbmVzc1VuaXRzXHJcbiAgICAgICAgICAgICAgICA/IHJlY2lwaWVudHNUYWdzLnNwbGl0KFwiLFwiKVxyXG4gICAgICAgICAgICAgICAgOiByZWNpcGllbnRzVGFncy5zcGxpdChcIixcIikuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9IFwiR2xvYmFsIGFkbWluc1wiKVxyXG4gICAgICAgICAgICAgICAgOiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CdXNpbmVzc1VuaXRDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25HcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEFjdGl2ZVByb3BlcnR5KGluZGV4OiBudW1iZXIsIG5vdGlmaWNhdGlvblRlbXBsYXRlOiBJTm90aWZpY2F0aW9uVGVtcGxhdGUsIGFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGlmICghYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgICAgICAgICAgXCJOb3RpZmljYXRpb24gd2lsbCBiZSBkZWFjdGl2YXRlZC4gQ29udGludWU/XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJEZWFjdGl2YXRlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJZZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b246IFwiTm9cIlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NvdXJzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZGVhY3RpdmF0ZUNvdXJzZVRlbXBsYXRlKG5vdGlmaWNhdGlvblRlbXBsYXRlLmlkLCB0aGlzLiRzY29wZS5jb3Vyc2VJZCwgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMubm90aWZpY2F0aW9uR3JpZE1vZGVsLmxvYWRQYWdlKDApKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVByb3BlcnR5SGVscGVyKGluZGV4LCBub3RpZmljYXRpb25UZW1wbGF0ZSwgYWN0aXZlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVByb3BlcnR5SGVscGVyKGluZGV4LCBub3RpZmljYXRpb25UZW1wbGF0ZSwgYWN0aXZlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRBY3RpdmVQcm9wZXJ0eUhlbHBlcihpbmRleDogbnVtYmVyLCBub3RpZmljYXRpb25UZW1wbGF0ZTogSU5vdGlmaWNhdGlvblRlbXBsYXRlLCBhY3RpdmU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2V0QWN0aXZlUHJvcGVydHkobm90aWZpY2F0aW9uVGVtcGxhdGUuaWQsIG5vdGlmaWNhdGlvblRlbXBsYXRlLnZlcnNpb24sIGFjdGl2ZSxcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25HcmlkTW9kZWwuZmlsdGVyLmJ1c2luZXNzVW5pdElkLCB0aGlzLiRzY29wZS5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSU5vdGlmaWNhdGlvblRlbXBsYXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkdyaWRNb2RlbC5lbnRyaWVzW2luZGV4XSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscyhub3RpZmljYXRpb25UZW1wbGF0ZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlSWQgPSB0aGlzLiRyb3V0ZVBhcmFtc1tOb3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXIuTk9USUZJQ0FUSU9OX1RFTVBMQVRFX0lEX1BBUkFNXTtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdElkRm9yUmV2ZXJ0ID0gdGhpcy4kcm91dGVQYXJhbXNbTm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyLk5PVElGSUNBVElPTl9CVVNJTkVTU19VTklUX1BBUkFNXTtcclxuICAgICAgICBpZiAobm90aWZpY2F0aW9uVGVtcGxhdGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0Tm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzRm9yUmV2ZXJ0KG5vdGlmaWNhdGlvblRlbXBsYXRlSWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzRm9yUmV2ZXJ0ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuYnVzaW5lc3NVbml0SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXROYW1lRm9yUmV2ZXJ0ID0gcmVzdWx0LmJ1c2luZXNzVW5pdE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0VXNhZ2VSZWNpcGllbnRzVGFncyhyZXN1bHQuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlY2lwaWVudHNUYWdzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNpcGllbnRzVGFncyAmJiByZWNpcGllbnRzVGFncy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2lwaWVudExpc3RGb3JSZXZlcnQucmVjaXBpZW50SWRzID0gcmVjaXBpZW50c1RhZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0VXNhZ2VDQ1JlY2lwaWVudHNUYWdzKHJlc3VsdC5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oY2NSZWNpcGllbnRzVGFncyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2NSZWNpcGllbnRzVGFncyAmJiBjY1JlY2lwaWVudHNUYWdzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2NSZWNpcGllbnRMaXN0Rm9yUmV2ZXJ0LnJlY2lwaWVudElkcyA9IGNjUmVjaXBpZW50c1RhZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ub3RpZmljYXRpb25Db25maXJtKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiUmV2ZXJ0IHRvIGRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsczogdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHNGb3JSZXZlcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwaWVudExpc3Q6IHRoaXMucmVjaXBpZW50TGlzdEZvclJldmVydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2NSZWNpcGllbnRMaXN0OiB0aGlzLmNjUmVjaXBpZW50TGlzdEZvclJldmVydFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5yZW1vdmVOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMobm90aWZpY2F0aW9uVGVtcGxhdGVJZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIk5vdGlmaWNhdGlvbiB0ZW1wbGF0ZSBoYXMgYmVlbiByZW1vdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlci5pbmRleFVybCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQWJsZVRvUmV2ZXJ0KG5vdGlmaWNhdGlvblRlbXBsYXRlOiBJTm90aWZpY2F0aW9uVGVtcGxhdGUpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAobm90aWZpY2F0aW9uVGVtcGxhdGUubm90aWZpY2F0aW9uVGVtcGxhdGVTY29wZSAhPT0gJ0RFRkFVTFQnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbkV2ZW50R3JvdXBLZXkgPT0gTm90aWZpY2F0aW9uRXZlbnRHcm91cEtleS5TWVNURU0pXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ub3RpZmljYXRpb25HcmlkTW9kZWwuZmlsdGVyLmJ1c2luZXNzVW5pdElkID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub3RpZmljYXRpb25UZW1wbGF0ZS5ub3RpZmljYXRpb25UZW1wbGF0ZVNjb3BlID09IFwiU1lTVEVNXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub3RpZmljYXRpb25UZW1wbGF0ZS5ub3RpZmljYXRpb25UZW1wbGF0ZVNjb3BlID09IFwiQlVTSU5FU1NfVU5JVFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm5vdGlmaWNhdGlvbkV2ZW50R3JvdXBLZXkgPT0gTm90aWZpY2F0aW9uRXZlbnRHcm91cEtleS5DT1VSU0UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBub3RpZmljYXRpb25UZW1wbGF0ZS5ub3RpZmljYXRpb25UZW1wbGF0ZVNjb3BlID09IFwiUkVGRVJFTkNFX0VOVElUWVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0V2ZW50SGlkZGVuKGV2ZW50S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3lzdGVtRXZlbnRzLmluZGV4T2YoZXZlbnRLZXkpICE9IC0xICYmICghdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzIHx8IHRoaXMuaXNDb3Vyc2UgfHwgdGhpcy5ub3RpZmljYXRpb25HcmlkTW9kZWwuZmlsdGVyLmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICB8fCBoaWRkZW5FdmVudHMuaW5kZXhPZihldmVudEtleSkgIT0gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dSZXZlcnRCdXR0b24obm90aWZpY2F0aW9uOiBJTm90aWZpY2F0aW9uVGVtcGxhdGUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbm90aWZpY2F0aW9uLmFjdGl2ZVxyXG4gICAgICAgICAgICAmJiBub3RpZmljYXRpb24ubm90aWZpY2F0aW9uVGVtcGxhdGVTY29wZSAhPSBOb3RpZmljYXRpb25UZW1wbGF0ZXNTY29wZVtOb3RpZmljYXRpb25UZW1wbGF0ZXNTY29wZS5ERUZBVUxUXVxyXG4gICAgICAgICAgICAmJiAodGhpcy4kc2NvcGUuY291cnNlSWQgPT0gbnVsbCB8fCBub3RpZmljYXRpb24ubm90aWZpY2F0aW9uVGVtcGxhdGVTY29wZSA9PSBOb3RpZmljYXRpb25UZW1wbGF0ZXNTY29wZVtOb3RpZmljYXRpb25UZW1wbGF0ZXNTY29wZS5SRUZFUkVOQ0VfRU5USVRZXSlcclxuICAgICAgICAgICAgJiYgKHRoaXMubm90aWZpY2F0aW9uR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9PSBudWxsIHx8IG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UZW1wbGF0ZVNjb3BlID09IE5vdGlmaWNhdGlvblRlbXBsYXRlc1Njb3BlW05vdGlmaWNhdGlvblRlbXBsYXRlc1Njb3BlLkJVU0lORVNTX1VOSVRdKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGlkZUFjdGl2ZUJ1dHRvbihub3RpZmljYXRpb246IElOb3RpZmljYXRpb25UZW1wbGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcy4kc2NvcGUuY291cnNlSWQgIT0gbnVsbCAmJiBub3RpZmljYXRpb24ubm90aWZpY2F0aW9uVGVtcGxhdGVTY29wZSA9PSBOb3RpZmljYXRpb25UZW1wbGF0ZXNTY29wZVtOb3RpZmljYXRpb25UZW1wbGF0ZXNTY29wZS5SRUZFUkVOQ0VfRU5USVRZXVxyXG4gICAgICAgICAgICB8fCB0aGlzLm5vdGlmaWNhdGlvbkdyaWRNb2RlbC5maWx0ZXIuYnVzaW5lc3NVbml0SWQgIT0gbnVsbCAmJiBub3RpZmljYXRpb24ubm90aWZpY2F0aW9uVGVtcGxhdGVTY29wZSA9PSBOb3RpZmljYXRpb25UZW1wbGF0ZXNTY29wZVtOb3RpZmljYXRpb25UZW1wbGF0ZXNTY29wZS5CVVNJTkVTU19VTklUXVxyXG4gICAgICAgICAgICB8fCB0aGlzLiRzY29wZS5jb3Vyc2VJZCA9PSBudWxsICYmIHRoaXMubm90aWZpY2F0aW9uR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9PSBudWxsICYmIG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UZW1wbGF0ZVNjb3BlID09IE5vdGlmaWNhdGlvblRlbXBsYXRlc1Njb3BlW05vdGlmaWNhdGlvblRlbXBsYXRlc1Njb3BlLlNZU1RFTV07XHJcbiAgICAgICAgcmV0dXJuICFzZWxmIHx8IG5vdGlmaWNhdGlvbi5hY3RpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dEZWFjdGl2YXRlQnV0dG9uKG5vdGlmaWNhdGlvbjogSU5vdGlmaWNhdGlvblRlbXBsYXRlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbi5hY3RpdmUgJiYgKCFub3RpZmljYXRpb24uZGlzYWJsZWRQYXJlbnQgfHwgbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblRlbXBsYXRlU2NvcGUgPT0gTm90aWZpY2F0aW9uVGVtcGxhdGVzU2NvcGVbTm90aWZpY2F0aW9uVGVtcGxhdGVzU2NvcGUuREVGQVVMVF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25HcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNOb3RpZmljYXRpb25UZW1wbGF0ZURpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzTm90aWZpY2F0aW9uVGVtcGxhdGVEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNOb3RpZmljYXRpb25UZW1wbGF0ZUNvbnRyb2xsZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc05vdGlmaWNhdGlvblRlbXBsYXRlQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBub3RpZmljYXRpb25UeXBlOiBcIkBcIixcclxuICAgICAgICAgICAgY291cnNlSWQ6IFwiPT9cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLW5vdGlmaWNhdGlvbi10ZW1wbGF0ZS5odG1sXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblZoc05vdGlmaWNhdGlvblRlbXBsYXRlRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJTm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzfSBmcm9tIFwiLi4vbm90aWZpY2F0aW9uVGVtcGxhdGVzL21vZGVsL0lOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHNcIjtcclxuaW1wb3J0IHtSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXJ9IGZyb20gXCIuL3JpY2h0ZXh0L1JpY2hUZXh0RWRpdG9yRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7Tm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Ob3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtOb3RpZmljYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vbm90aWZpY2F0aW9uVGVtcGxhdGVzL05vdGlmaWNhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7SU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsc1NhdmV9IGZyb20gXCIuLi9ub3RpZmljYXRpb25UZW1wbGF0ZXMvbW9kZWwvSU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsc1NhdmVcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4uL1JlZmVyZW5jZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4vZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtkZWxheWVkRXZlbnRzLCByZW1pbmRlcnN9IGZyb20gXCIuLi9ub3RpZmljYXRpb25UZW1wbGF0ZXMvbW9kZWwvTm90aWZpY2F0aW9uRXZlbnRLZXlcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzTm90aWZpY2F0aW9uVGVtcGxhdGVFZGl0RGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBjb3Vyc2VJZD86IG51bWJlcjtcclxuICAgIG5vdGlmaWNhdGlvblR5cGU6IHN0cmluZztcclxuICAgIHZtOiBWaHNOb3RpZmljYXRpb25UZW1wbGF0ZUVkaXRDb250cm9sbGVyXHJcbn1cclxuXHJcbmludGVyZmFjZSBJUmVjaXBpZW50VGFncyB7XHJcbiAgICByZWNpcGllbnRJZHM6IG51bWJlcltdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzTm90aWZpY2F0aW9uVGVtcGxhdGVFZGl0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcIm5vdGlmaWNhdGlvblRlbXBsYXRlcy5Ob3RpZmljYXRpb25DcmVhdGVFZGl0Q29udHJvbGxlclwiO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgU0VQQVJBVE9SOiBzdHJpbmcgPSBcIixcIjtcclxuXHJcbiAgICBwdWJsaWMgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIHB1YmxpYyByZWNpcGllbnRMaXN0OiBJUmVjaXBpZW50VGFncyA9IHtyZWNpcGllbnRJZHM6IFtdfTtcclxuICAgIHB1YmxpYyBjY1JlY2lwaWVudExpc3Q6IElSZWNpcGllbnRUYWdzID0ge3JlY2lwaWVudElkczogW119O1xyXG4gICAgcHVibGljIG5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsczogSU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscztcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXROYW1lOiBzdHJpbmcgPSBcIkFsbFwiO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbm90aWZpY2F0aW9uVGVtcGxhdGVJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHRvb2xiYXIgPVxyXG4gICAgICAgIFtbXSxbJ2JvbGQnLCAnaXRhbGljcycsICd1bmRlcmxpbmUnLCAnc3RyaWtlVGhyb3VnaCcsIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9GT05UX0NPTE9SLCBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQkFDS0dST1VORF9GT05UX0NPTE9SXSxcclxuICAgICAgICAgICAgWyd1bCcsICdvbCcsICdpbmRlbnQnLCAnb3V0ZGVudCcsICdqdXN0aWZ5TGVmdCcsICdqdXN0aWZ5Q2VudGVyJywgJ2p1c3RpZnlSaWdodCcsICdqdXN0aWZ5RnVsbCddLFxyXG4gICAgICAgICAgICBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ3AnLCAncHJlJywgJ3F1b3RlJ10sW10sXHJcbiAgICAgICAgICAgIFsncmVkbycsICd1bmRvJywgJ2NsZWFyJywgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0ZVTExTQ1JFRU5fQlVUVE9OLCAnaHRtbCddXTtcclxuXHJcbiAgICBwdWJsaWMgcmVjaXBpZW50TGlzdEZvclJldmVydDogSVJlY2lwaWVudFRhZ3MgPSB7cmVjaXBpZW50SWRzOiBbXX07XHJcbiAgICBwdWJsaWMgY2NSZWNpcGllbnRMaXN0Rm9yUmV2ZXJ0OiBJUmVjaXBpZW50VGFncyA9IHtyZWNpcGllbnRJZHM6IFtdfTtcclxuICAgIHB1YmxpYyBub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHNGb3JSZXZlcnQ6IElOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHM7XHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0TmFtZUZvclJldmVydDogc3RyaW5nID0gXCJBbGxcIjtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRJZEZvclJldmVydDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBOb3RpZmljYXRpb25TZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBBdXRoUmVkaXJlY3QuTkFNRSxcclxuICAgICAgICBOb3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG4gICAgcHJpdmF0ZSB2YXJpYWJsZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHByaXZhdGUgdGhpc0VsZW1lbnQ6IEpRdWVyeTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc05vdGlmaWNhdGlvblRlbXBsYXRlRWRpdERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlcjogTm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlSWQgPSAkcm91dGVQYXJhbXNbTm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyLk5PVElGSUNBVElPTl9URU1QTEFURV9JRF9QQVJBTV07XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRJZCA9ICRyb3V0ZVBhcmFtc1tOb3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXIuTk9USUZJQ0FUSU9OX0JVU0lORVNTX1VOSVRfUEFSQU1dO1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICBhdXRoUmVkaXJlY3QucmVkaXJlY3RUb0xvZ09uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZXROb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHNCeUlkKHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5idXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdE5hbWUgPSByZXN1bHQuYnVzaW5lc3NVbml0TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZXRVc2FnZVJlY2lwaWVudHNUYWdzKHJlc3VsdC5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVjaXBpZW50c1RhZ3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY2lwaWVudHNUYWdzICYmIHJlY2lwaWVudHNUYWdzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjaXBpZW50TGlzdC5yZWNpcGllbnRJZHMgPSByZWNpcGllbnRzVGFncztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZXRVc2FnZUNDUmVjaXBpZW50c1RhZ3MocmVzdWx0LmlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihjY1JlY2lwaWVudHNUYWdzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjY1JlY2lwaWVudHNUYWdzICYmIGNjUmVjaXBpZW50c1RhZ3MubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jY1JlY2lwaWVudExpc3QucmVjaXBpZW50SWRzID0gY2NSZWNpcGllbnRzVGFncztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0SW5kZXhQYWdlQnlOb3RpZmljYXRpb25UeXBlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdmFpbGFibGVSZWNpcGllbnRzVGFncygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgL2FwaS9ub3RpZmljYXRpb25UZW1wbGF0ZXMvJHt0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscy5pZH0vYXZhaWxhYmxlL3JlY2lwaWVudHNgO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbmFjdGl2ZVByb3BlcnR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgICAgICBcIk5vdGlmaWNhdGlvbiB3aWxsIGJlIGRlYWN0aXZhdGVkLiBDb250aW51ZT9cIiwge1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRGVhY3RpdmF0ZVwiLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJZZXNcIixcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghIXRoaXMuJHNjb3BlLmNvdXJzZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmRlYWN0aXZhdGVDb3Vyc2VUZW1wbGF0ZSh0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscy5pZCwgdGhpcy4kc2NvcGUuY291cnNlSWQsIFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucmVkaXJlY3RJbmRleFBhZ2VCeU5vdGlmaWNhdGlvblR5cGUoKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zZXRBY3RpdmVQcm9wZXJ0eSh0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscy5pZCwgdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMudmVyc2lvbiwgZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RJbmRleFBhZ2VCeU5vdGlmaWNhdGlvblR5cGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWYXJpYWJsZVRhZ3MoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscy52YXJpYWJsZXNUYWdzLnNwbGl0KFZoc05vdGlmaWNhdGlvblRlbXBsYXRlRWRpdENvbnRyb2xsZXIuU0VQQVJBVE9SKVxyXG4gICAgfVxyXG5cclxuICAgIGFkZFZhcmlhYmxlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGUgPSAnJHsnICsgdGhpcy52YXJpYWJsZSArICd9JztcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUgPT0gJ0lOUFVUJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aGlzRWxlbWVudCA9IGFuZ3VsYXIuZWxlbWVudCgkKCcjc3ViamVjdEZpZWxkJykpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzLnRoaXNFbGVtZW50KS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0UG9zID0gJCh0aGlzLnRoaXNFbGVtZW50KS5wcm9wKCdzZWxlY3Rpb25TdGFydCcpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gJCh0aGlzLnRoaXNFbGVtZW50KS52YWwoKTtcclxuICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBzdGFydFBvcykgKyB0aGlzLnZhcmlhYmxlKyB2YWx1ZS5zdWJzdHJpbmcoc3RhcnRQb3MsIHZhbHVlLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMudGhpc0VsZW1lbnQpLnZhbChuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2VsLCByYW5nZTtcclxuICAgICAgICAgICAgICAgIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWwuZ2V0UmFuZ2VBdCAmJiBzZWwucmFuZ2VDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnZhcmlhYmxlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWwuZ2V0UmFuZ2VBdCgwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrU2VuZFJlbWluZGVycygpOiBib29sZWFuIHtcclxuICAgICAgICBmdW5jdGlvbiBjaGVjayhpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtIDw9IDkwICYmIGl0ZW0gPiAwICYmIGl0ZW1bMF0gIT09ICcwJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzZW5kUmVtaW5kZXJzID0gKHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzLnNlbmRSZW1pbmRlcnMpLnNwbGl0KFZoc05vdGlmaWNhdGlvblRlbXBsYXRlRWRpdENvbnRyb2xsZXIuU0VQQVJBVE9SKTtcclxuICAgICAgICBsZXQgcGF0dGVybiA9IC9eWzEtOV1bMC05XSooLFsxLTldWzAtOV0qKXswLDEzfSQvO1xyXG5cclxuICAgICAgICBpZiAoc2VuZFJlbWluZGVycy5sZW5ndGggPiAxNCB8fCAhcGF0dGVybi50ZXN0KHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzLnNlbmRSZW1pbmRlcnMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gU3RyaW5nKFwiVGhlIGZpZWxkIGNhbiBjb25zaXN0IG9mIDEgdG8gOmNvdW50IG51bWJlcnMgc2VwYXJhdGVkIGJ5IGEgY29tbWFcIikucmVwbGFjZShcIjpjb3VudFwiLCBcIjEzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VuZFJlbWluZGVycy5ldmVyeShjaGVjaykpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBcIllvdSBjYW4gZW50ZXIgaW50ZWdlcnMgZnJvbSAxIHRvIDkwXCI7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMuc2VuZFJlbWluZGVycyA9IHNlbmRSZW1pbmRlcnMuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoYSkgLSBwYXJzZUludChiKTtcclxuICAgICAgICB9KS5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiBzZW5kUmVtaW5kZXJzLmluZGV4T2YoaXRlbSkgPT09IGluZGV4KVxyXG4gICAgICAgICAgICAuam9pbihWaHNOb3RpZmljYXRpb25UZW1wbGF0ZUVkaXRDb250cm9sbGVyLlNFUEFSQVRPUik7XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrU2VuZERlbGF5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscy5zZW5kRGVsYXkgPCAwIHx8IHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzLnNlbmREZWxheSA+IDEwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IFwiWW91IGNhbiBlbnRlciBpbnRlZ2VycyBmcm9tIDEgdG8gMTAwXCI7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlVGVtcGxhdGVEZXRhaWxzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlRGV0YWlsczogSU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsc1NhdmUgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5pc0V2ZW50UmVtaW5kZXIodGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMubm90aWZpY2F0aW9uVGVtcGxhdGVFdmVudElkKSAmJiB0aGlzLmNoZWNrU2VuZFJlbWluZGVycygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRXZlbnREZWxheWVkKHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzLm5vdGlmaWNhdGlvblRlbXBsYXRlRXZlbnRJZCkgJiYgdGhpcy5jaGVja1NlbmREZWxheSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gXCJcIjtcclxuXHJcbiAgICAgICAgdGVtcGxhdGVEZXRhaWxzLmlkID0gdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMuaWQ7XHJcbiAgICAgICAgdGVtcGxhdGVEZXRhaWxzLmJ1c2luZXNzVW5pdElkID0gdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMuYnVzaW5lc3NVbml0SWQgPyB0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscy5idXNpbmVzc1VuaXRJZCA6IHRoaXMuYnVzaW5lc3NVbml0SWQ7XHJcbiAgICAgICAgdGVtcGxhdGVEZXRhaWxzLm5vdGlmaWNhdGlvblRlbXBsYXRlRXZlbnRJZCA9IHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzLm5vdGlmaWNhdGlvblRlbXBsYXRlRXZlbnRJZDtcclxuICAgICAgICB0ZW1wbGF0ZURldGFpbHMucmVjaXBpZW50c1RhZ3MgPSB0aGlzLnJlY2lwaWVudExpc3QucmVjaXBpZW50SWRzO1xyXG4gICAgICAgIHRlbXBsYXRlRGV0YWlscy5jY1JlY2lwaWVudHMgPSB0aGlzLmNjUmVjaXBpZW50TGlzdC5yZWNpcGllbnRJZHM7XHJcbiAgICAgICAgdGVtcGxhdGVEZXRhaWxzLnN1YmplY3RUZW1wbGF0ZSA9IHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzLnN1YmplY3RUZW1wbGF0ZTtcclxuICAgICAgICB0ZW1wbGF0ZURldGFpbHMubWVzc2FnZVRlbXBsYXRlID0gdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMubWVzc2FnZVRlbXBsYXRlO1xyXG4gICAgICAgIHRlbXBsYXRlRGV0YWlscy5zZW5kUmVtaW5kZXJzID0gdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMuc2VuZFJlbWluZGVycztcclxuICAgICAgICB0ZW1wbGF0ZURldGFpbHMuc2VuZERlbGF5ID0gdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMuc2VuZERlbGF5O1xyXG5cclxuICAgICAgICBpZiAoISF0aGlzLiRzY29wZS5jb3Vyc2VJZCkge1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZURldGFpbHMucmVmZXJlbmNlT2JqSWQgPSB0aGlzLiRzY29wZS5jb3Vyc2VJZDtcclxuICAgICAgICAgICAgdGVtcGxhdGVEZXRhaWxzLnJlZmVyZW5jZU9ialR5cGUgPSBSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2F2ZU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscyh0ZW1wbGF0ZURldGFpbHMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RFZGl0UGFnZUJ5Tm90aWZpY2F0aW9uVHlwZShyZXN1bHQuaWQsIHJlc3VsdC5idXNpbmVzc1VuaXRJZCk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTm90aWZpY2F0aW9uIHRlbXBsYXRlIGhhcyBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlTm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdldE5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsc0ZvclJldmVydCh0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlSWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzRm9yUmV2ZXJ0ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuYnVzaW5lc3NVbml0SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXROYW1lRm9yUmV2ZXJ0ID0gcmVzdWx0LmJ1c2luZXNzVW5pdE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0VXNhZ2VSZWNpcGllbnRzVGFncyhyZXN1bHQuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlY2lwaWVudHNUYWdzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNpcGllbnRzVGFncyAmJiByZWNpcGllbnRzVGFncy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2lwaWVudExpc3RGb3JSZXZlcnQucmVjaXBpZW50SWRzID0gcmVjaXBpZW50c1RhZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0VXNhZ2VDQ1JlY2lwaWVudHNUYWdzKHJlc3VsdC5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oY2NSZWNpcGllbnRzVGFncyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2NSZWNpcGllbnRzVGFncyAmJiBjY1JlY2lwaWVudHNUYWdzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2NSZWNpcGllbnRMaXN0Rm9yUmV2ZXJ0LnJlY2lwaWVudElkcyA9IGNjUmVjaXBpZW50c1RhZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ub3RpZmljYXRpb25Db25maXJtKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiUmV2ZXJ0IHRvIGRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsczogdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHNGb3JSZXZlcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwaWVudExpc3Q6IHRoaXMucmVjaXBpZW50TGlzdEZvclJldmVydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2NSZWNpcGllbnRMaXN0OiB0aGlzLmNjUmVjaXBpZW50TGlzdEZvclJldmVydFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5yZW1vdmVOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHModGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZUlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0SW5kZXhQYWdlQnlOb3RpZmljYXRpb25UeXBlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIk5vdGlmaWNhdGlvbiB0ZW1wbGF0ZSBoYXMgYmVlbiByZW1vdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyLmluZGV4VXJsKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscy5zdWJqZWN0VGVtcGxhdGUgfHwgIXRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzLm1lc3NhZ2VUZW1wbGF0ZVxyXG4gICAgICAgICAgICB8fCB0aGlzLnJlY2lwaWVudExpc3QucmVjaXBpZW50SWRzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICB8fCAhdGhpcy5ub3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHMuc2VuZFJlbWluZGVycyAmJiB0aGlzLmlzRXZlbnRSZW1pbmRlcih0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscy5ub3RpZmljYXRpb25UZW1wbGF0ZUV2ZW50SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVkaXJlY3RFZGl0UGFnZUJ5Tm90aWZpY2F0aW9uVHlwZSh0ZW1wbGF0ZUlkOiBudW1iZXIsIGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuJHNjb3BlLm5vdGlmaWNhdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIm1haW5cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlci5lZGl0VXJsKHRlbXBsYXRlSWQsIGJ1c2luZXNzVW5pdElkKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImNvdXJzZVwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlUm91dGVyLm5vdGlmaWNhdGlvbkVkaXRVcmwodGVtcGxhdGVJZCwgdGhpcy4kc2NvcGUuY291cnNlSWQsIGJ1c2luZXNzVW5pdElkKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWRpcmVjdEluZGV4UGFnZUJ5Tm90aWZpY2F0aW9uVHlwZSgpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuJHNjb3BlLm5vdGlmaWNhdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIm1haW5cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlci5pbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiY291cnNlXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VSb3V0ZXIubm90aWZpY2F0aW9uRGV0YWlsc1VybCh0aGlzLiRzY29wZS5jb3Vyc2VJZCkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0V2ZW50UmVtaW5kZXIoZXZlbnRJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHJlbWluZGVycy5pbmRleE9mKGV2ZW50SWQpICE9IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0V2ZW50RGVsYXllZChldmVudElkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZGVsYXllZEV2ZW50cy5pbmRleE9mKGV2ZW50SWQpICE9IC0xO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzTm90aWZpY2F0aW9uVGVtcGxhdGVFZGl0RGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNOb3RpZmljYXRpb25UZW1wbGF0ZUVkaXREaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNOb3RpZmljYXRpb25UZW1wbGF0ZUVkaXRDb250cm9sbGVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNOb3RpZmljYXRpb25UZW1wbGF0ZUVkaXRDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvblR5cGU6IFwiQFwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VJZDogXCI9P1wiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLW5vdGlmaWNhdGlvbi10ZW1wbGF0ZS1lZGl0Lmh0bWxcIilcclxuICAgIH1cclxufVxyXG5cclxuVmhzTm90aWZpY2F0aW9uVGVtcGxhdGVFZGl0RGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3Rpb25QYXNzaW5nVHlwZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL1NlY3Rpb25QYXNzaW5nVHlwZVwiO1xyXG5pbXBvcnQge1NlY3Rpb25Qcm9ncmVzc1N0YXR1c30gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL1NlY3Rpb25Qcm9ncmVzc1N0YXR1c1wiO1xyXG5pbXBvcnQge0lTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZH0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lTZWN0aW9uSW5IaWVyYXJjaHlcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0lJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5cclxuXHJcbmludGVyZmFjZSBJVmhzT3ZlcmFsbFByb2dyZXNzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBjb3Vyc2U6IElDb3Vyc2U7XHJcbiAgICBjb3Vyc2VTZWN0aW9uczogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkW107XHJcbiAgICBzZWN0aW9uUHJvZ3Jlc3NlczogSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3NbXTtcclxuICAgIHZpZXdNb2RlOiBzdHJpbmc7XHJcbiAgICB2bTogVmhzT3ZlcmFsbFByb2dyZXNzQ29udHJvbGxlclxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzT3ZlcmFsbFByb2dyZXNzQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIHZpZXdNb2RlOiBzdHJpbmc7IC8vIFwiY291cnNlXCIgfCBcInByb2dyZXNzXCJcclxuXHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlO1xyXG4gICAgcHVibGljIGNvdXJzZVNlY3Rpb25zOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRbXTtcclxuICAgIHB1YmxpYyBjb3Vyc2VTZWN0aW9uc1dpdGhQcm9ncmVzczogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkW10gPSBbXTtcclxuICAgIHB1YmxpYyBzZWN0aW9uUHJvZ3Jlc3NlczogSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3NbXTtcclxuICAgIHB1YmxpYyBzZWN0aW9uUHJvZ3Jlc3NCeVNlY3Rpb25JZDogTWFwPG51bWJlciwgSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3M+ID0gbmV3IE1hcDxudW1iZXIsIElJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzPigpO1xyXG4gICAgcHVibGljIHBlcmNlbnRPZkNvbXBsZXRlZE9wdGlvbmFsTW9kdWxlc0xhYmVsOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIHBlcmNlbnRPZkNvbXBsZXRlZE1hbmRhdG9yeU1vZHVsZXNMYWJlbDogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBwZXJjZW50T2ZDb21wbGV0ZWRFbGVjdGl2ZU1vZHVsZXNMYWJlbDogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBjb3VudE9mT3B0aW9uYWw6IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgY291bnRPZk1hbmRhdG9yeTogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyByZXF1aXJlZEVsZWN0aXZlc051bWJlcjogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwdWJsaWMgY291bnRPZk9wdGlvbmFsQ29tcGxldGVkOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGNvdW50T2ZNYW5kYXRvcnlDb21wbGV0ZWQ6IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgY291bnRPZkVsZWN0aXZlQ29tcGxldGVkOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHB1YmxpYyBvcHRpb25hbE1vZHVsZXNOYW1lczogc3RyaW5nW10gPSBbXTtcclxuICAgIHB1YmxpYyBtYW5kYXRvcnlNb2R1bGVzTmFtZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBwdWJsaWMgZWxlY3RpdmVNb2R1bGVzTmFtZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCJcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IgKHB1YmxpYyAkc2NvcGU6IElWaHNPdmVyYWxsUHJvZ3Jlc3NEaXJlY3RpdmVTY29wZSkge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLmNvdXJzZSA9IHRoaXMuJHNjb3BlLmNvdXJzZTtcclxuICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy4kc2NvcGUudmlld01vZGU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZWN0aW9ucyA9IHRoaXMuJHNjb3BlLmNvdXJzZVNlY3Rpb25zO1xyXG4gICAgICAgIHRoaXMucmVxdWlyZWRFbGVjdGl2ZXNOdW1iZXIgPSB0aGlzLmNvdXJzZS5yZXF1aXJlZEVsZWN0aXZlc051bWJlcjtcclxuICAgICAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJwcm9ncmVzc1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblByb2dyZXNzZXMgPSB0aGlzLiRzY29wZS5zZWN0aW9uUHJvZ3Jlc3NlcztcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VjdGlvblByb2dyZXNzZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBTZWN0aW9uUHJvZ3Jlc3NlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWN0aW9uc1N0YXR1c2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckFjdGl2ZUFuZFdpdGhQcm9ncmVzc1NlY3Rpb25zKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoQ29sbGVjdGlvbihcInNlY3Rpb25Qcm9ncmVzc2VzXCIsICgobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgPT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25Qcm9ncmVzc2VzID0gdGhpcy4kc2NvcGUuc2VjdGlvblByb2dyZXNzZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWN0aW9uUHJvZ3Jlc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBTZWN0aW9uUHJvZ3Jlc3NlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VjdGlvbnNTdGF0dXNlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQWN0aXZlQW5kV2l0aFByb2dyZXNzU2VjdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlY3Rpb25TdGF0dXNlcygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdNb2RlID09PSBcImNvdXJzZVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VjdGlvbnNXaXRoUHJvZ3Jlc3MgPSB0aGlzLmNvdXJzZVNlY3Rpb25zO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ3JvdXBTZWN0aW9uUHJvZ3Jlc3NlcygpOiB2b2lkIHtcclxuICAgICAgICBmb3IgKGxldCBzZWN0aW9uUHJvZ3Jlc3Mgb2YgdGhpcy5zZWN0aW9uUHJvZ3Jlc3Nlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25Qcm9ncmVzc0J5U2VjdGlvbklkLnNldChzZWN0aW9uUHJvZ3Jlc3Muc2VjdGlvbklkLCBzZWN0aW9uUHJvZ3Jlc3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlU2VjdGlvbnNTdGF0dXNlcygpOiB2b2lkIHtcclxuICAgICAgICBmb3IgKGxldCBzZWN0aW9uIG9mIHRoaXMuY291cnNlU2VjdGlvbnMpIHtcclxuICAgICAgICAgICAgbGV0IHNlY3Rpb25Qcm9ncmVzcyA9IHRoaXMuc2VjdGlvblByb2dyZXNzQnlTZWN0aW9uSWQuZ2V0KHNlY3Rpb24uc2VjdGlvbi5pZCk7XHJcbiAgICAgICAgICAgIC8vdG9kbyB3aGF0IHRvIGRvIHdoZW4gd2UgaGF2ZSBub3QgcHJvZ3Jlc3MgZm9yIHNlY3Rpb24gKHNlY3Rpb24gYWRkZWQgYWZ0ZXIgdXNlciBzdGFydCB0aGUgY291cnNlKVxyXG4gICAgICAgICAgICBzZWN0aW9uLnNlY3Rpb24uc3RhdHVzID0gc2VjdGlvblByb2dyZXNzID8gc2VjdGlvblByb2dyZXNzLnN0YXR1cyA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFNlY3Rpb25TdGF0dXNlcygpOiB2b2lkIHtcclxuICAgICAgICBmb3IgKGxldCBzZWN0aW9uIG9mIHRoaXMuY291cnNlU2VjdGlvbnMpIHtcclxuICAgICAgICAgICAgc2VjdGlvbi5zZWN0aW9uLnN0YXR1cyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VjdGlvblByb2dyZXNzQnlTZWN0aW9uSWQuY2xlYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbHRlckFjdGl2ZUFuZFdpdGhQcm9ncmVzc1NlY3Rpb25zKCkge1xyXG4gICAgICAgIGxldCBzaG93blN0YXR1c2VzID0gW1NlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSwgU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdXTtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlY3Rpb25zV2l0aFByb2dyZXNzID0gdGhpcy5jb3Vyc2VTZWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIHMgPT4gcy5zZWN0aW9uLmlzQWN0aXZlXHJcbiAgICAgICAgICAgICAgICB8fCAoIXMuc2VjdGlvbi5pc0FjdGl2ZSAmJiB0aGlzLnNlY3Rpb25Qcm9ncmVzc0J5U2VjdGlvbklkLmhhcyhzLnNlY3Rpb24uaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgc2hvd25TdGF0dXNlcy5pbmRleE9mKHRoaXMuc2VjdGlvblByb2dyZXNzQnlTZWN0aW9uSWQuZ2V0KHMuc2VjdGlvbi5pZCkuc3RhdHVzKSA+PSAwKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdW50T2ZDb21wbGV0ZWRPcHRpb25hbE1vZHVsZXNMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjb3VudE9mT3B0aW9uYWxDb21wbGV0ZWQ6IG51bWJlciA9IDA7XHJcbiAgICAgICAgbGV0IGNvdW50T2ZPcHRpb25hbDogbnVtYmVyID0gMDtcclxuICAgICAgICB0aGlzLm9wdGlvbmFsTW9kdWxlc05hbWVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgc2VjdGlvbiBvZiB0aGlzLmNvdXJzZVNlY3Rpb25zV2l0aFByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIGlmICghc2VjdGlvbi5zZWN0aW9uLnBhcmVudElkICYmIHNlY3Rpb24uc2VjdGlvbi5zZWN0aW9uUGFzc2luZ1R5cGUgPT0gU2VjdGlvblBhc3NpbmdUeXBlW1NlY3Rpb25QYXNzaW5nVHlwZS5PUFRJT05BTF0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLnNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2VjdGlvbi5zdGF0dXMgPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRPZk9wdGlvbmFsQ29tcGxldGVkKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb3VudE9mT3B0aW9uYWwrKztcclxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uYWxNb2R1bGVzTmFtZXMucHVzaChzZWN0aW9uLnNlY3Rpb24ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wZXJjZW50T2ZDb21wbGV0ZWRPcHRpb25hbE1vZHVsZXNMYWJlbCA9IHRoaXMuZ2V0UGVyY2VudENvbXBsZXRlZE1vZHVsZXMoY291bnRPZk9wdGlvbmFsQ29tcGxldGVkLCBjb3VudE9mT3B0aW9uYWwpO1xyXG4gICAgICAgIHRoaXMuY291bnRPZk9wdGlvbmFsQ29tcGxldGVkID0gY291bnRPZk9wdGlvbmFsQ29tcGxldGVkO1xyXG4gICAgICAgIHRoaXMuY291bnRPZk9wdGlvbmFsID0gY291bnRPZk9wdGlvbmFsO1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiOmNvbXBsZXRlZENvdW50IG9mIDphbGxNb2R1bGVzQ291bnRcIilcclxuICAgICAgICAgICAgLndpdGgoXCI6Y29tcGxldGVkQ291bnRcIiwgY291bnRPZk9wdGlvbmFsQ29tcGxldGVkKVxyXG4gICAgICAgICAgICAud2l0aChcIjphbGxNb2R1bGVzQ291bnRcIiwgY291bnRPZk9wdGlvbmFsKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291bnRPZkNvbXBsZXRlZE1hbmRhdG9yeU1vZHVsZXNMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjb3VudE9mTWFuZGF0b3J5Q29tcGxldGVkOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCBjb3VudE9mTWFuZGF0b3J5OiBudW1iZXIgPSAwO1xyXG4gICAgICAgIHRoaXMubWFuZGF0b3J5TW9kdWxlc05hbWVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgc2VjdGlvbiBvZiB0aGlzLmNvdXJzZVNlY3Rpb25zV2l0aFByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIGlmICghc2VjdGlvbi5zZWN0aW9uLnBhcmVudElkICYmIHNlY3Rpb24uc2VjdGlvbi5zZWN0aW9uUGFzc2luZ1R5cGUgPT0gU2VjdGlvblBhc3NpbmdUeXBlW1NlY3Rpb25QYXNzaW5nVHlwZS5NQU5EQVRPUlldKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5zZWN0aW9uLnN0YXR1cyA9PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLkNPTVBMRVRFRF0gfHxcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuT1BFTkVEXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50T2ZNYW5kYXRvcnlDb21wbGV0ZWQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvdW50T2ZNYW5kYXRvcnkrKztcclxuICAgICAgICAgICAgICAgIHRoaXMubWFuZGF0b3J5TW9kdWxlc05hbWVzLnB1c2goc2VjdGlvbi5zZWN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGVyY2VudE9mQ29tcGxldGVkTWFuZGF0b3J5TW9kdWxlc0xhYmVsID0gdGhpcy5nZXRQZXJjZW50Q29tcGxldGVkTW9kdWxlcyhjb3VudE9mTWFuZGF0b3J5Q29tcGxldGVkLCBjb3VudE9mTWFuZGF0b3J5KTtcclxuICAgICAgICB0aGlzLmNvdW50T2ZNYW5kYXRvcnlDb21wbGV0ZWQgPSBjb3VudE9mTWFuZGF0b3J5Q29tcGxldGVkO1xyXG4gICAgICAgIHRoaXMuY291bnRPZk1hbmRhdG9yeSA9IGNvdW50T2ZNYW5kYXRvcnk7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCI6Y29tcGxldGVkQ291bnQgb2YgOmFsbE1vZHVsZXNDb3VudFwiKVxyXG4gICAgICAgICAgICAud2l0aChcIjpjb21wbGV0ZWRDb3VudFwiLCBjb3VudE9mTWFuZGF0b3J5Q29tcGxldGVkKVxyXG4gICAgICAgICAgICAud2l0aChcIjphbGxNb2R1bGVzQ291bnRcIiwgY291bnRPZk1hbmRhdG9yeSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdW50T2ZDb21wbGV0ZWRFbGVjdGl2ZU1vZHVsZXNMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjb3VudE9mRWxlY3RpdmVDb21wbGV0ZWQ6IG51bWJlciA9IDA7XHJcbiAgICAgICAgbGV0IGNvdW50T2ZFbGVjdGl2ZTogbnVtYmVyID0gMDtcclxuICAgICAgICB0aGlzLmVsZWN0aXZlTW9kdWxlc05hbWVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgc2VjdGlvbiBvZiB0aGlzLmNvdXJzZVNlY3Rpb25zV2l0aFByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIGlmICghc2VjdGlvbi5zZWN0aW9uLnBhcmVudElkICYmIHNlY3Rpb24uc2VjdGlvbi5zZWN0aW9uUGFzc2luZ1R5cGUgPT0gU2VjdGlvblBhc3NpbmdUeXBlW1NlY3Rpb25QYXNzaW5nVHlwZS5FTEVDVElWRV0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLnNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2VjdGlvbi5zdGF0dXMgPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRPZkVsZWN0aXZlQ29tcGxldGVkKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb3VudE9mRWxlY3RpdmUrKztcclxuICAgICAgICAgICAgICAgIHRoaXMuZWxlY3RpdmVNb2R1bGVzTmFtZXMucHVzaChzZWN0aW9uLnNlY3Rpb24ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wZXJjZW50T2ZDb21wbGV0ZWRFbGVjdGl2ZU1vZHVsZXNMYWJlbCA9IHRoaXMuZ2V0UGVyY2VudENvbXBsZXRlZE1vZHVsZXMoY291bnRPZkVsZWN0aXZlQ29tcGxldGVkLCB0aGlzLnJlcXVpcmVkRWxlY3RpdmVzTnVtYmVyKTtcclxuICAgICAgICB0aGlzLmNvdW50T2ZFbGVjdGl2ZUNvbXBsZXRlZCA9IGNvdW50T2ZFbGVjdGl2ZUNvbXBsZXRlZDtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIjpjb21wbGV0ZWRDb3VudCBvZiA6YWxsTW9kdWxlc0NvdW50XCIpXHJcbiAgICAgICAgICAgIC53aXRoKFwiOmNvbXBsZXRlZENvdW50XCIsIGNvdW50T2ZFbGVjdGl2ZUNvbXBsZXRlZClcclxuICAgICAgICAgICAgLndpdGgoXCI6YWxsTW9kdWxlc0NvdW50XCIsIHRoaXMucmVxdWlyZWRFbGVjdGl2ZXNOdW1iZXIpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRPdmVyYWxsQ291cnNlUHJvZ3Jlc3MoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlU2VjdGlvbnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5yZXF1aXJlZEVsZWN0aXZlc051bWJlciArIHRoaXMuY291bnRPZk1hbmRhdG9yeSkgPT09IDApIHtcclxuICAgICAgICAgICAgY29uc3QgY291bnRIZWFkU2VjdGlvbnMgPSB0aGlzLmNvdXJzZVNlY3Rpb25zLmZpbHRlcihzZWN0aW9uID0+ICFzZWN0aW9uLnBhcmVudElkKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKCh0aGlzLmNvdW50T2ZFbGVjdGl2ZUNvbXBsZXRlZCArIHRoaXMuY291bnRPZk9wdGlvbmFsQ29tcGxldGVkKS9jb3VudEhlYWRTZWN0aW9ucyAqIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKChNYXRoLm1pbih0aGlzLmNvdW50T2ZFbGVjdGl2ZUNvbXBsZXRlZCwgdGhpcy5yZXF1aXJlZEVsZWN0aXZlc051bWJlcilcclxuICAgICAgICAgICAgKyB0aGlzLmNvdW50T2ZNYW5kYXRvcnlDb21wbGV0ZWQpLyh0aGlzLnJlcXVpcmVkRWxlY3RpdmVzTnVtYmVyICsgdGhpcy5jb3VudE9mTWFuZGF0b3J5KSAqIDEwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE92ZXJhbGxDb3Vyc2VQcm9ncmVzc0xhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCI6Y29tcGxldGVkQ291bnQgb2YgOmFsbE1vZHVsZXNDb3VudFwiKVxyXG4gICAgICAgICAgICAud2l0aChcIjpjb21wbGV0ZWRDb3VudFwiLCAodGhpcy5jb3VudE9mTWFuZGF0b3J5Q29tcGxldGVkICsgKE1hdGgubWluKHRoaXMuY291bnRPZkVsZWN0aXZlQ29tcGxldGVkLCB0aGlzLnJlcXVpcmVkRWxlY3RpdmVzTnVtYmVyKSkpKVxyXG4gICAgICAgICAgICAud2l0aChcIjphbGxNb2R1bGVzQ291bnRcIiwgKHRoaXMuY291bnRPZk1hbmRhdG9yeSArIHRoaXMucmVxdWlyZWRFbGVjdGl2ZXNOdW1iZXIpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UGVyY2VudENvbXBsZXRlZE1vZHVsZXMoY29tcGxldGVkOiBudW1iZXIsIHRvdGFsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IG51bWJlciA9IDA7XHJcbiAgICAgICAgaWYgKHRvdGFsID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IDEwMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZihjb21wbGV0ZWQgJiYgdG90YWwpXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBNYXRoLnJvdW5kKChjb21wbGV0ZWQgLyB0b3RhbCkgKiAxMDApO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID4gMTAwKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gMTAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc092ZXJhbGxQcm9ncmVzc0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzT3ZlcmFsbFByb2dyZXNzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzT3ZlcmFsbFByb2dyZXNzQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzT3ZlcmFsbFByb2dyZXNzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBjb3Vyc2U6IFwiPVwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VTZWN0aW9uczogXCI9XCIsXHJcbiAgICAgICAgICAgIHNlY3Rpb25Qcm9ncmVzc2VzOiBcIj0/XCIsXHJcbiAgICAgICAgICAgIHZpZXdNb2RlOiBcIkBcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLW92ZXJhbGwtcHJvZ3Jlc3MuaHRtbFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5WaHNPdmVyYWxsUHJvZ3Jlc3NEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0NvbW1vblNlcnZpY2V9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uU2VydmljZVwiO1xyXG5pbXBvcnQge0lHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SVBhcnRpY2lwYW50c30gZnJvbSBcIi4uL2hvbWUvbW9kZWxzL0lQYXJ0aWNpcGFudHNcIjtcclxuaW1wb3J0IHtVc2Vyc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvVXNlcnNSb3V0ZXJcIjtcclxuaW1wb3J0IHtIb21lUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Ib21lUm91dGVyXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNb21lbnR9IGZyb20gXCIuLi91dGlscy9Nb21lbnRcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoU2VydmljZX0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvTGVhcm5pbmdQYXRoU2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJSb2xlfSBmcm9tIFwiLi4vdXNlcnMvbW9kZWxzL1VzZXJSb2xlXCI7XHJcbmltcG9ydCB7SUdyb3VwfSBmcm9tIFwiLi4vdXNlcnMvbW9kZWxzL0lHcm91cFwiO1xyXG5pbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuLi9jb3Vyc2VzL0NvdXJzZVNlcnZpY2VcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzUGFydGljaXBhbnRzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBwYXJ0aWNpcGFudHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SVBhcnRpY2lwYW50cz47XHJcbiAgICBtb2RlbFR5cGU6IHN0cmluZztcclxuICAgIG1vZGVsSWQ6IG51bWJlcjtcclxuICAgIGlzUHJvZ3Jlc3NQYWdlOiBib29sZWFuO1xyXG5cclxuICAgIHZtPzogSVZoc1BhcnRpY2lwYW50c0NvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJVmhzUGFydGljaXBhbnRzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgY3VycmVudFVzZXJCdXNpbmVzc1VuaXRJZHM6IEFycmF5PG51bWJlcj47XHJcbiAgICBwdWJsaWMgaXNFeGlzdExlYXJuaW5nUGF0aHM6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgdXNlckdyb3VwczogQXJyYXk8SUdyb3VwPjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgSG9tZVJvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNQYXJ0aWNpcGFudHNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyB1c2Vyc1JvdXRlcjogVXNlcnNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGhvbWVSb3V0ZXI6IEhvbWVSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoQXBpOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsZWFybmluZ1BhdGhTZXJ2aWNlOiBMZWFybmluZ1BhdGhTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLnN0YXR1cyA9IFwiXCI7XHJcblxyXG4gICAgICAgIGF1dGhBcGkuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyQnVzaW5lc3NVbml0SWRzID0gdXNlci5idXNpbmVzc1VuaXRzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5tb2RlbElkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiRzY29wZS5tb2RlbFR5cGUgPT09IEhvbWVSb3V0ZXIuUEFSVElDSVBBTlRfVFlQRV9DT1VSU0VTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0KHRoaXMuJHNjb3BlLm1vZGVsSWQpLnRoZW4oY291cnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJHcm91cHNGb3JGaWx0ZXIoY291cnNlLmJ1c2luZXNzVW5pdElkKS50aGVuKGdyb3VwcyA9PiB0aGlzLnVzZXJHcm91cHMgPSBncm91cHMpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFNlcnZpY2UuZ2V0KHRoaXMuJHNjb3BlLm1vZGVsSWQpLnRoZW4obGVhcm5pbmdQYXRoID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJHcm91cHNGb3JGaWx0ZXIobGVhcm5pbmdQYXRoLmJ1c2luZXNzVW5pdElkKS50aGVuKGdyb3VwcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckdyb3VwcyA9IGdyb3Vwc1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUubW9kZWxUeXBlID09PSBIb21lUm91dGVyLlBBUlRJQ0lQQU5UX1RZUEVfQ09VUlNFUykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckdyb3Vwc0ZvckZpbHRlcihudWxsKS50aGVuKGdyb3VwcyA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJHcm91cHMgPSBncm91cHMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckdyb3Vwc0ZvckZpbHRlcihudWxsKS50aGVuKGdyb3VwcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckdyb3VwcyA9IGdyb3Vwc1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLmlzUHJvZ3Jlc3NQYWdlKSB7XHJcbiAgICAgICAgICAgIHVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyQnVzaW5lc3NSb2xlKClcclxuICAgICAgICAgICAgICAgIC50aGVuKChidXNpbmVzc1JvbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYnVzaW5lc3NSb2xlID09PSBVc2VyUm9sZVtVc2VyUm9sZS5BVFRFTkRFRV9NQU5BR0VSXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWFybmluZ1BhdGhTZXJ2aWNlLmlzRXhpc3RQYXJ0aWNpcGFudHNJbmZvKFwiYXR0ZW5kZWVNYW5hZ2VyXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihpc0V4aXN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXhpc3RMZWFybmluZ1BhdGhzID0gaXNFeGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNFeGlzdExlYXJuaW5nUGF0aHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUubW9kZWxUeXBlID0gSG9tZVJvdXRlci5QQVJUSUNJUEFOVF9UWVBFX0NPVVJTRVM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChidXNpbmVzc1JvbGUgPT09IFVzZXJSb2xlW1VzZXJSb2xlLklOU1RSVUNUT1JdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYXJuaW5nUGF0aFNlcnZpY2UuaXNFeGlzdFBhcnRpY2lwYW50c0luZm8oXCJpbnN0cnVjdG9yXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihpc0V4aXN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXhpc3RMZWFybmluZ1BhdGhzID0gaXNFeGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNFeGlzdExlYXJuaW5nUGF0aHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUubW9kZWxUeXBlID0gSG9tZVJvdXRlci5QQVJUSUNJUEFOVF9UWVBFX0NPVVJTRVM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0R3JvdXBPcHRpb24oKSB7XHJcbiAgICAgICAgaWYgKCQoJyNncm91cEZpbHRlclNlbGVjdCcpLmNoaWxkcmVuKCdvcHRpb246Zmlyc3QtY2hpbGQnKS5pcygnOnNlbGVjdGVkJykpIHtcclxuICAgICAgICAgICAgJChcIiNncm91cEZpbHRlclNlbGVjdCBvcHRpb246Y2hlY2tlZFwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiMC42XCIpO1xyXG4gICAgICAgICAgICAkKFwiI2dyb3VwRmlsdGVyU2VsZWN0XCIpLmNzcyhcIm9wYWNpdHlcIiwgXCIwLjZcIik7XHJcbiAgICAgICAgICAgICQoXCIjZ3JvdXBGaWx0ZXJTZWxlY3Qgb3B0aW9uOm5vdCg6Y2hlY2tlZClcIikuY3NzKFwib3BhY2l0eVwiLCBcIjAuNlwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKFwiI2dyb3VwRmlsdGVyU2VsZWN0IG9wdGlvbjpjaGVja2VkXCIpLmNzcyhcIm9wYWNpdHlcIiwgXCJcIik7XHJcbiAgICAgICAgICAgICQoXCIjZ3JvdXBGaWx0ZXJTZWxlY3RcIikuY3NzKFwib3BhY2l0eVwiLCBcIlwiKTtcclxuICAgICAgICAgICAgJChcIiNncm91cEZpbHRlclNlbGVjdCBvcHRpb246bm90KDpjaGVja2VkKVwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlUGFydGljaXBhbnRzT2JqZWN0KCkge1xyXG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5jb21tb25TZXJ2aWNlLnVwZGF0ZVVSTFBhcmFtZXRlcih0aGlzLiRsb2NhdGlvbi5wYXRoKCksXHJcbiAgICAgICAgICAgIEhvbWVSb3V0ZXIuUEFSVElDSVBBTlRTX1BBUkFNLCB0aGlzLiRzY29wZS5tb2RlbFR5cGUpO1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5pc1Byb2dyZXNzUGFnZSkge1xyXG4gICAgICAgICAgICBwYXRoID0gdGhpcy5jb21tb25TZXJ2aWNlLnVwZGF0ZVVSTFBhcmFtZXRlcihwYXRoLFxyXG4gICAgICAgICAgICAgICAgSG9tZVJvdXRlci5QQVJUSUNJUEFOVFNfR1JPVVBfUEFSQU0sIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwocGF0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc1VzZXJTYW1lQnVzaW5lc3NVbml0cyhhcnI6IEFycmF5PG51bWJlcj4pOiBib29sZWFuIHtcclxuICAgICAgICBpZih0aGlzLmN1cnJlbnRVc2VyQnVzaW5lc3NVbml0SWRzKSB7XHJcbiAgICAgICAgICAgIGxldCBzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXJCdXNpbmVzc1VuaXRJZHMuZm9yRWFjaCggbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZighcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgcyA9IGFyci5zb21lKG0gPT4gbSA9PT0gbilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UHJvZ3Jlc3NVcmwob2JqZWN0SWQ6IG51bWJlciwgbGVhcm5lcklkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5tb2RlbFR5cGUgPT09IEhvbWVSb3V0ZXIuUEFSVElDSVBBTlRfVFlQRV9DT1VSU0VTKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZXNSb3V0ZXIucHJvZ3Jlc3NVcmxGb3JVc2VyKG9iamVjdElkLCBsZWFybmVySWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFJvdXRlci5wcm9ncmVzc1VybEZvclVzZXIob2JqZWN0SWQsIGxlYXJuZXJJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTaG9ydE9iamVjdE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gbmFtZS5sZW5ndGggPiA0MCA/IG5hbWUuc3Vic3RyaW5nKDAsIDQwKSArICcuLi4nIDogbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Rm9ybWF0RGF0ZShkYXRlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChkYXRlID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBNb21lbnQuaXNWYWxpZERhdGUoZGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5RmlsdGVyKCkge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIuc3RhcnRlZEZyb20gPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy4kc2NvcGUucGFydGljaXBhbnRzR3JpZE1vZGVsLmZpbHRlci5zdGFydGVkT25UZXh0KTtcclxuICAgICAgICB0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLnN0YXJ0ZWRUbyA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLnN0YXJ0ZWRUb1RleHQpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIuY29tcGxldGVkRnJvbSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLmNvbXBsZXRlZE9uVGV4dCk7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUucGFydGljaXBhbnRzR3JpZE1vZGVsLmZpbHRlci5jb21wbGV0ZWRUbyA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLmNvbXBsZXRlZFRvVGV4dCk7XHJcbiAgICAgICAgdGhpcy5pbml0R3JvdXBPcHRpb24oKTtcclxuICAgICAgICB0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyRmlsdGVycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLmxlYXJuZXJOYW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLm9iamVjdE5hbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIuc3RhcnRlZE9uVGV4dCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUucGFydGljaXBhbnRzR3JpZE1vZGVsLmZpbHRlci5zdGFydGVkVG9UZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLmNvbXBsZXRlZE9uVGV4dCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUucGFydGljaXBhbnRzR3JpZE1vZGVsLmZpbHRlci5jb21wbGV0ZWRUb1RleHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIuc3RhcnRlZEZyb20gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIuc3RhcnRlZFRvID0gbnVsbDtcclxuICAgICAgICB0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLmNvbXBsZXRlZEZyb20gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIuY29tcGxldGVkVG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIuc3RhdHVzID0gbnVsbDtcclxuICAgICAgICB0aGlzLiRzY29wZS5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLmdyb3VwID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUucGFydGljaXBhbnRzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG5cclxuICAgICAgICAkKFwiI2dyb3VwRmlsdGVyU2VsZWN0IG9wdGlvbjpjaGVja2VkXCIpLmNzcyhcIm9wYWNpdHlcIiwgXCIwLjZcIik7XHJcbiAgICAgICAgJChcIiNncm91cEZpbHRlclNlbGVjdFwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiMC42XCIpO1xyXG4gICAgICAgICQoXCIjZ3JvdXBGaWx0ZXJTZWxlY3Qgb3B0aW9uOm5vdCg6Y2hlY2tlZClcIikuY3NzKFwib3BhY2l0eVwiLCBcIjAuNlwiKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlY29kZVN0YXR1cyhzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHN0YXR1cztcclxuICAgICAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICAgICAgICBjYXNlIFwiTk9UX1NUQVJURURcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJOT1RfU1RBUlRFRFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIlNUQVJURURcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJTVEFSVEVEXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiQ09NUExFVEVEXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiQ09NUExFVEVEXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiRVhQSVJFRFwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIkNPTVBMRVRFRFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1BhcnRpY2lwYW50c0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzUGFydGljaXBhbnRzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogSVZoc1BhcnRpY2lwYW50c0NvbnRyb2xsZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IElWaHNQYXJ0aWNpcGFudHNDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50c0dyaWRNb2RlbDogXCI9dmhzUGFydGljaXBhbnRzR3JpZE1vZGVsXCIsXHJcbiAgICAgICAgICAgIG1vZGVsVHlwZTogXCI9dmhzTW9kZWxUeXBlXCIsXHJcbiAgICAgICAgICAgIG1vZGVsSWQ6IFwiPT92aHNNb2RlbElkXCIsXHJcbiAgICAgICAgICAgIGlzUHJvZ3Jlc3NQYWdlOiBcIj0/dmhzUHJvZ3Jlc3NQYWdlXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1wYXJ0aWNpcGFudHMuaHRtbFwiKVxyXG4gICAgfTtcclxufVxyXG5cclxuVmhzUGFydGljaXBhbnRzRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUGFydGljaXBhdGlvbkZvcm0sIFBhcnRpY2lwYXRpb25Gb3JtRmllbGR9IGZyb20gXCIuLi9jb21tb24vSVBhcnRpY2lwYXRpb25Gb3JtXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtDb21tb25TZXJ2aWNlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vblNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlUGFydGljaXBhdGlvbkZvcm19IGZyb20gXCIuLi9jb21tb24vSUNvdXJzZVBhcnRpY2lwYXRpb25Gb3JtRW50cnlcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzUGFydGljaXBhdGlvbkZvcm1FZGl0aW5nRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBvYmplY3RJZD86IG51bWJlcjtcclxuICAgIHZlcnNpb24/OiBudW1iZXI7XHJcbiAgICBvYmplY3RUeXBlOiBzdHJpbmc7XHJcblxyXG4gICAgdm0/OiBWaHNQYXJ0aWNpcGF0aW9uRm9ybUVkaXRpbmdDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzUGFydGljaXBhdGlvbkZvcm1FZGl0aW5nQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtOiBJUGFydGljaXBhdGlvbkZvcm07XHJcbiAgICBwdWJsaWMgcmVsYXRlZFBhcnRpY2lwYXRpb25Gb3JtczogSUNvdXJzZVBhcnRpY2lwYXRpb25Gb3JtW107XHJcblxyXG4gICAgcHVibGljIGlzUGFydGljaXBhdGlvbkZvcm1TcGVjaWZpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBkaXNhYmxlUGFydGljaXBhdGlvbkZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBDb21tb25TZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNQYXJ0aWNpcGF0aW9uRm9ybUVkaXRpbmdEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5yZWxvYWRQYXJ0aWNpcGF0aW9uRm9ybSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWxvYWRQYXJ0aWNpcGF0aW9uRm9ybShmb3JjZWQ/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGZvcmNlZCB8fCAhdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUub2JqZWN0SWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFBhcnRpY2lwYXRpb25Gb3JtKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUub2JqZWN0VHlwZSA9PSAnTEVBUk5JTkdfUEFUSCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZWxhdGVkUGFydGljaXBhdGlvbkZvcm1zKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtID0ge2ZpZWxkczogW119O1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGVbJ3BhcnRpY2lwYXRpb25Gb3JtRm9ybSddLiRzZXRQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUGFydGljaXBhdGlvbkZvcm0oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm9iamVjdElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVBhcnRpY2lwYXRpb25Gb3JtID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNhdmVQYXJ0aWNpcGF0aW9uRm9ybSh0aGlzLiRzY29wZS5vYmplY3RJZCwgdGhpcy4kc2NvcGUub2JqZWN0VHlwZSwgdGhpcy4kc2NvcGUudmVyc2lvbiwgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSlcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQYXJ0aWNpcGF0aW9uRm9ybVNwZWNpZmllZCA9IHRoaXMucGFydGljaXBhdGlvbkZvcm0uZmllbGRzLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlBhcnRpY2lwYXRpb24gZm9ybSBmaWVsZHMgaGF2ZSBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRW1wdHlGaWVsZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlWydwYXJ0aWNpcGF0aW9uRm9ybUZvcm0nXS4kc2V0UHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm9iamVjdFR5cGUgPT0gJ0xFQVJOSU5HX1BBVEgnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlbGF0ZWRQYXJ0aWNpcGF0aW9uRm9ybXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVBhcnRpY2lwYXRpb25Gb3JtID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2hhbmdlRmllbGRLZXkoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFydGljaXBhdGlvbkZvcm0uZmllbGRzW3RoaXMucGFydGljaXBhdGlvbkZvcm0uZmllbGRzLmxlbmd0aCAtIDFdLmZpZWxkS2V5LnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kRW1wdHlGaWVsZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrRmllbGRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGVuZEZpZWxkKGtleTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtLmZpZWxkcy51bnNoaWZ0KHtmaWVsZEtleToga2V5LCBuYW1lOiBuYW1lLCBlcnJvckNvZGU6IG51bGx9KTtcclxuICAgICAgICB0aGlzLmNoZWNrRmllbGRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBlbmRFbXB0eUZpZWxkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm0uZmllbGRzLnB1c2goe2ZpZWxkS2V5OiBcIlwiLCBuYW1lOiBcIlwiLCBlcnJvckNvZGU6IG51bGx9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrRmllbGRzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm0uZmllbGRzLmZvckVhY2goKGZpZWxkOiBQYXJ0aWNpcGF0aW9uRm9ybUZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGZpZWxkLmVycm9yQ29kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm0uZXJyb3JDb2RlID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogUGFydGljaXBhdGlvbkZvcm1GaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtLmZpZWxkcy5mb3JFYWNoKChmaWVsZDI6IFBhcnRpY2lwYXRpb25Gb3JtRmllbGQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZDIgJiYgZmllbGQgIT09IGZpZWxkMiAmJiBmaWVsZC5maWVsZEtleS50b0xvd2VyQ2FzZSgpID09PSBmaWVsZDIuZmllbGRLZXkudG9Mb3dlckNhc2UoKSAmJiBmaWVsZC5maWVsZEtleS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuZXJyb3JDb2RlID0gXCJub3QtdW5pcXVlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybS5lcnJvckNvZGUgPSBcIm5vdC11bmlxdWVcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkUGFydGljaXBhdGlvbkZvcm0oKTogYW5ndWxhci5JUHJvbWlzZTxJUGFydGljaXBhdGlvbkZvcm0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlLmdldFBhcnRpY2lwYXRpb25Gb3JtKHRoaXMuJHNjb3BlLm9iamVjdElkLCB0aGlzLiRzY29wZS5vYmplY3RUeXBlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1BhcnRpY2lwYXRpb25Gb3JtU3BlY2lmaWVkID0gdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybS5maWVsZHMubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRW1wdHlGaWVsZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGVbJ3BhcnRpY2lwYXRpb25Gb3JtRm9ybSddLiRzZXRQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFydGljaXBhdGlvbkZvcm07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFJlbGF0ZWRQYXJ0aWNpcGF0aW9uRm9ybXMoKTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlUGFydGljaXBhdGlvbkZvcm1bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0TGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkZvcm1zKHRoaXMuJHNjb3BlLm9iamVjdElkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRlZFBhcnRpY2lwYXRpb25Gb3JtcyA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1BhcnRpY2lwYXRpb25Gb3JtRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzUGFydGljaXBhdGlvbkZvcm1FZGl0aW5nRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzUGFydGljaXBhdGlvbkZvcm1FZGl0aW5nQ29udHJvbGxlcikge1xyXG4gICAgICAgIC8vIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzUGFydGljaXBhdGlvbkZvcm1FZGl0aW5nQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBvYmplY3RJZDogXCI9XCIsXHJcbiAgICAgICAgICAgIHZlcnNpb246IFwiPVwiLFxyXG4gICAgICAgICAgICBvYmplY3RUeXBlOiBcIj1cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLXBhcnRpY2lwYXRpb24tZm9ybS1lZGl0aW5nLmh0bWxcIilcclxuICAgIH07XHJcbn1cclxuXHJcblZoc1BhcnRpY2lwYXRpb25Gb3JtRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7Q29tbW9uU2VydmljZX0gZnJvbSBcIi4uL2NvbW1vbi9Db21tb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUGFydGljaXBhdGlvbkZvcm0sIFBhcnRpY2lwYXRpb25Gb3JtRmllbGR9IGZyb20gXCIuLi9jb21tb24vSVBhcnRpY2lwYXRpb25Gb3JtXCI7XHJcblxyXG5pbnRlcmZhY2UgSVZoc1BhcnRpY2lwYXRpb25Gb3JtRmlsbGluZ0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgb2JqZWN0SWQ6IG51bWJlcjtcclxuICAgIG9iamVjdFR5cGU6IHN0cmluZztcclxuICAgIHJlcXVpcmVBbGxGaWVsZHM6IGJvb2xlYW47XHJcbiAgICBzaG93V2FudFRvU3VibWl0T3B0aW9uPzogYm9vbGVhbjtcclxuXHJcbiAgICBnZXRQYXJ0aWNpcGF0aW9uRm9ybURhdGE/OiAoKSA9PiBhbmd1bGFyLklQcm9taXNlPGFueT47XHJcbiAgICBnZXRTb3VyY2VQYXJ0aWNpcGF0aW9uRm9ybURhdGE/OiAoKSA9PiBhbmd1bGFyLklQcm9taXNlPGFueT47XHJcbiAgICBvblN1Ym1pdD86IChhbnkpID0+IGFuZ3VsYXIuSVByb21pc2U8YW55PjtcclxuICAgIGF1dG9TdWJtaXRBbGxvd2VkPzogYm9vbGVhbjtcclxuXHJcbiAgICB2bT86IFZoc1BhcnRpY2lwYXRpb25Gb3JtRmlsbGluZ0NvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNQYXJ0aWNpcGF0aW9uRm9ybUZpbGxpbmdDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgd2FudFRvU3VibWl0UGFydGljaXBhdGlvbkZvcm06IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtRGF0YUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtU3BlY2lmaWVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtOiBJUGFydGljaXBhdGlvbkZvcm07XHJcblxyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtRGF0YTogYW55O1xyXG4gICAgcHVibGljIHNvdXJjZVBhcnRpY2lwYXRpb25Gb3JtRGF0YTogYW55O1xyXG4gICAgcHVibGljIHJlc3VsdFBhcnRpY2lwYXRpb25Gb3JtRGF0YTogYW55ID0ge307XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIENvbW1vblNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc1BhcnRpY2lwYXRpb25Gb3JtRmlsbGluZ0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgICRzY29wZS5hdXRvU3VibWl0QWxsb3dlZCA9ICRzY29wZS5hdXRvU3VibWl0QWxsb3dlZCAhPSBudWxsICYmICRzY29wZS5hdXRvU3VibWl0QWxsb3dlZCAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyAkc2NvcGUuYXV0b1N1Ym1pdEFsbG93ZWQgOiBmYWxzZTtcclxuICAgICAgICAkc2NvcGUuc2hvd1dhbnRUb1N1Ym1pdE9wdGlvbiA9ICRzY29wZS5zaG93V2FudFRvU3VibWl0T3B0aW9uICE9IG51bGwgJiYgJHNjb3BlLnNob3dXYW50VG9TdWJtaXRPcHRpb24gIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gJHNjb3BlLnNob3dXYW50VG9TdWJtaXRPcHRpb24gOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRGF0YUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVsb2FkUGFydGljaXBhdGlvbkZvcm1EYXRhKClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplUGFydGljaXBhdGlvbkZvcm0oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm1EYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWxvYWRQYXJ0aWNpcGF0aW9uRm9ybURhdGEoKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBsZXQgbG9hZFBhcnRpY2lwYXRpb25Gb3JtRGF0YVByb21pc2VzOiBBcnJheTxhbmd1bGFyLklQcm9taXNlPGFueT4+ID0gW107XHJcbiAgICAgICAgbG9hZFBhcnRpY2lwYXRpb25Gb3JtRGF0YVByb21pc2VzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5nZXRQYXJ0aWNpcGF0aW9uRm9ybSh0aGlzLiRzY29wZS5vYmplY3RJZCwgdGhpcy4kc2NvcGUub2JqZWN0VHlwZSlcclxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElQYXJ0aWNpcGF0aW9uRm9ybSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm0gPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtU3BlY2lmaWVkID0gdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybS5maWVsZHMubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFydGljaXBhdGlvbkZvcm1TcGVjaWZpZWQgJiYgdGhpcy4kc2NvcGUuYXV0b1N1Ym1pdEFsbG93ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLmdldFBhcnRpY2lwYXRpb25Gb3JtRGF0YSkge1xyXG4gICAgICAgICAgICBsb2FkUGFydGljaXBhdGlvbkZvcm1EYXRhUHJvbWlzZXMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmdldFBhcnRpY2lwYXRpb25Gb3JtRGF0YSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHBhcnRpY2lwYXRpb25Gb3JtRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm1EYXRhID0gYW5ndWxhci5jb3B5KHBhcnRpY2lwYXRpb25Gb3JtRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLmdldFNvdXJjZVBhcnRpY2lwYXRpb25Gb3JtRGF0YSkge1xyXG4gICAgICAgICAgICBsb2FkUGFydGljaXBhdGlvbkZvcm1EYXRhUHJvbWlzZXMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLmdldFNvdXJjZVBhcnRpY2lwYXRpb25Gb3JtRGF0YSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHNvdXJjZVBhcnRpY2lwYXRpb25Gb3JtRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlUGFydGljaXBhdGlvbkZvcm1EYXRhID0gYW5ndWxhci5jb3B5KHNvdXJjZVBhcnRpY2lwYXRpb25Gb3JtRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHEuYWxsKGxvYWRQYXJ0aWNpcGF0aW9uRm9ybURhdGFQcm9taXNlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplUGFydGljaXBhdGlvbkZvcm0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRQYXJ0aWNpcGF0aW9uRm9ybURhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtLmZpZWxkcy5mb3JFYWNoKGZvcm1GaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0UGFydGljaXBhdGlvbkZvcm1EYXRhW2Zvcm1GaWVsZC5maWVsZEtleV0gPSBcIlwiO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wYXJ0aWNpcGF0aW9uRm9ybURhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybS5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkOiBQYXJ0aWNpcGF0aW9uRm9ybUZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJ0aWNpcGF0aW9uRm9ybURhdGFbZm9ybUZpZWxkLmZpZWxkS2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFydGljaXBhdGlvbkZvcm1EYXRhW2Zvcm1GaWVsZC5maWVsZEtleV0gPSB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRGF0YVtmb3JtRmllbGQuZmllbGRLZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZVBhcnRpY2lwYXRpb25Gb3JtRGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQ6IFBhcnRpY2lwYXRpb25Gb3JtRmllbGQpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGxlYXJuaW5nUGF0aElkIGluIHRoaXMuc291cmNlUGFydGljaXBhdGlvbkZvcm1EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlUGFydGljaXBhdGlvbkZvcm1EYXRhLmhhc093blByb3BlcnR5KGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNvdXJjZVBhcnRpY2lwYXRpb25Gb3JtRGF0YVtsZWFybmluZ1BhdGhJZF0gIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNvdXJjZVBhcnRpY2lwYXRpb25Gb3JtRGF0YVtsZWFybmluZ1BhdGhJZF0gIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuc291cmNlUGFydGljaXBhdGlvbkZvcm1EYXRhW2xlYXJuaW5nUGF0aElkXVtmb3JtRmllbGQuZmllbGRLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMucmVzdWx0UGFydGljaXBhdGlvbkZvcm1EYXRhW2Zvcm1GaWVsZC5maWVsZEtleV0gPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcnRpY2lwYXRpb25Gb3JtRGF0YVtmb3JtRmllbGQuZmllbGRLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHRoaXMuc291cmNlUGFydGljaXBhdGlvbkZvcm1EYXRhW2xlYXJuaW5nUGF0aElkXVtmb3JtRmllbGQuZmllbGRLZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1BhcnRpY2lwYXRpb25Gb3JtVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMud2FudFRvU3VibWl0UGFydGljaXBhdGlvbkZvcm0gJiYgdGhpcy4kc2NvcGUucmVxdWlyZUFsbEZpZWxkcykge1xyXG4gICAgICAgICAgICBsZXQgZm9ybVZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybS5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXN1bHRQYXJ0aWNpcGF0aW9uRm9ybURhdGFbZmllbGQuZmllbGRLZXldID09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtVmFsaWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm9uU3VibWl0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm1EYXRhTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLm9uU3VibWl0KHRoaXMud2FudFRvU3VibWl0UGFydGljaXBhdGlvbkZvcm0gPyB0aGlzLnJlc3VsdFBhcnRpY2lwYXRpb25Gb3JtRGF0YSA6IG51bGwpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRQYXJ0aWNpcGF0aW9uRm9ybURhdGEoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVQYXJ0aWNpcGF0aW9uRm9ybSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybURhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1BhcnRpY2lwYXRpb25Gb3JtRmlsbGluZ0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzUGFydGljaXBhdGlvbkZvcm1GaWxsaW5nRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzUGFydGljaXBhdGlvbkZvcm1GaWxsaW5nQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzUGFydGljaXBhdGlvbkZvcm1GaWxsaW5nQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBvYmplY3RJZDogXCI9XCIsXHJcbiAgICAgICAgICAgIG9iamVjdFR5cGU6IFwiPVwiLFxyXG4gICAgICAgICAgICByZXF1aXJlQWxsRmllbGRzOiBcIj1cIixcclxuICAgICAgICAgICAgc2hvd1dhbnRUb1N1Ym1pdE9wdGlvbjogXCI9P1wiLFxyXG4gICAgICAgICAgICBnZXRQYXJ0aWNpcGF0aW9uRm9ybURhdGE6IFwiPT9cIixcclxuICAgICAgICAgICAgZ2V0U291cmNlUGFydGljaXBhdGlvbkZvcm1EYXRhOiBcIj0/XCIsXHJcbiAgICAgICAgICAgIG9uU3VibWl0OiBcIj0/XCIsXHJcbiAgICAgICAgICAgIGF1dG9TdWJtaXRBbGxvd2VkOiBcIj0/XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1wYXJ0aWNpcGF0aW9uLWZvcm0tZmlsbGluZy5odG1sXCIpXHJcbiAgICB9O1xyXG59XHJcblxyXG5WaHNQYXJ0aWNpcGF0aW9uRm9ybUZpbGxpbmdEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge0lDb3Vyc2VQcm9kdWN0fSBmcm9tIFwiLi4vZmluYW5jZXMvbW9kZWxzL0lDb3Vyc2VQcm9kdWN0XCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtJTWF0ZXJpYWx9IGZyb20gXCIuLi9tYXRlcmlhbHMvbW9kZWxzL0lNYXRlcmlhbFwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aENvdXJzZX0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhDb3Vyc2VcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzUHJvZHVjdEl0ZW1EZXRhaWxzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBtYXRlcmlhbD86IElNYXRlcmlhbDtcclxuICAgIGNvdXJzZT86IElDb3Vyc2VQcm9kdWN0O1xyXG4gICAgbGVhcm5pbmdQYXRoPzogSUxlYXJuaW5nUGF0aDtcclxuICAgIGxlYXJuaW5nUGF0aENvdXJzZT86IElMZWFybmluZ1BhdGhDb3Vyc2U7XHJcblxyXG4gICAgdm0/OiBWaHNQcm9kdWN0SXRlbURldGFpbHNDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzUHJvZHVjdEl0ZW1EZXRhaWxzQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCJcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNQcm9kdWN0SXRlbURldGFpbHNEaXJlY3RpdmVTY29wZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNQcm9kdWN0SXRlbURldGFpbHNEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc1Byb2R1Y3RJdGVtRGV0YWlsc0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc1Byb2R1Y3RJdGVtRGV0YWlsc0NvbnRyb2xsZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc1Byb2R1Y3RJdGVtRGV0YWlsc0NvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IFwiPT92aHNNYXRlcmlhbEl0ZW1cIixcclxuICAgICAgICAgICAgY291cnNlOiBcIj0/dmhzQ291cnNlSXRlbVwiLFxyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGg6IFwiPT92aHNMZWFybmluZ1BhdGhJdGVtXCIsXHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aENvdXJzZTogXCI9P3Zoc0xlYXJuaW5nUGF0aENvdXJzZUl0ZW1cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLXByb2R1Y3QtaXRlbS1kZXRhaWxzLmh0bWxcIilcclxuICAgIH07XHJcbn1cclxuXHJcblZoc1Byb2R1Y3RJdGVtRGV0YWlsc0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtGaW5hbmNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvRmluYW5jZXNSb3V0ZXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc1Byb2R1Y3RWaWV3VG9wVGFic0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgcHJvZHVjdElkOiBudW1iZXI7XHJcbiAgICBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgaXNBbGxvd2VkRWRpdGluZzogYm9vbGVhbjtcclxuICAgIHRvcE1lbnVLZXk6IHN0cmluZztcclxuXHJcbiAgICB2bT86IFZoc1Byb2R1Y3RWaWV3VG9wVGFic0NvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNQcm9kdWN0Vmlld1RvcFRhYnNDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgSU5GT19UQUJfS0VZOiBzdHJpbmcgPSBcImluZm9cIjtcclxuICAgIHB1YmxpYyBFRElUX1RBQl9LRVk6IHN0cmluZyA9IFwiZWRpdFwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEZpbmFuY2VzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNQcm9kdWN0Vmlld1RvcFRhYnNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBmaW5hbmNlc1JvdXRlcjogRmluYW5jZXNSb3V0ZXIpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVZoc1Byb2R1Y3RWaWV3VG9wVGFic0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVG9wTWVudUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUudG9wTWVudUtleSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1Nob3dFZGl0VGFiKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY29wZS5pc0F1dGhlbnRpY2F0ZWQgJiYgdGhpcy4kc2NvcGUuaXNBbGxvd2VkRWRpdGluZ1xyXG4gICAgICAgICAgICAmJiAodGhpcy4kc2NvcGUudG9wTWVudUtleSA9PSB0aGlzLkVESVRfVEFCX0tFWVxyXG4gICAgICAgICAgICAgICAgfHwgdGhpcy4kc2NvcGUuc3lzdGVtUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICYmICh0aGlzLiRzY29wZS5zeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCB8fCB0aGlzLiRzY29wZS5zeXN0ZW1QZXJtaXNzaW9ucy5lZGl0UHJvZHVjdHMpKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1Byb2R1Y3RWaWV3VG9wVGFic0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzUHJvZHVjdFZpZXdUb3BUYWJzRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzUHJvZHVjdFZpZXdUb3BUYWJzQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNQcm9kdWN0Vmlld1RvcFRhYnNDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIHByb2R1Y3RJZDogXCI9dmhzUHJvZHVjdElkXCIsXHJcbiAgICAgICAgICAgIGlzQXV0aGVudGljYXRlZDogXCI9dmhzSXNBdXRoZW50aWNhdGVkXCIsXHJcbiAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zOiBcIj12aHNTeXN0ZW1QZXJtaXNzaW9uc1wiLFxyXG4gICAgICAgICAgICB0b3BNZW51S2V5OiBcIj12aHNUb3BNZW51S2V5XCIsXHJcbiAgICAgICAgICAgIGlzQWxsb3dlZEVkaXRpbmc6IFwiPXZoc0lzQWxsb3dlZEVkaXRpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLXByb2R1Y3Qtdmlldy10b3AtdGFicy5odG1sXCIpLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc1Byb2R1Y3RWaWV3VG9wVGFic0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtQdXJjaGFzZVNlcnZpY2V9IGZyb20gXCIuLi9maW5hbmNlcy9QdXJjaGFzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0lQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0fSBmcm9tIFwiLi4vZmluYW5jZXMvbW9kZWxzL0lQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0XCI7XHJcbmltcG9ydCB7RmluYW5jZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0ZpbmFuY2VzUm91dGVyXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SVZJTFRTZXNzaW9ufSBmcm9tIFwiLi4vd2ViaW5hcnMvbW9kZWxzL0lWSUxUU2Vzc2lvblwiO1xyXG5pbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuLi9jb3Vyc2VzL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VjdGlvbn0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lTZWN0aW9uXCI7XHJcbmltcG9ydCB7QnVzaW5lc3NVbml0c1NlcnZpY2V9IGZyb20gXCIuLi9idXNpbmVzc1VuaXRzL0J1c2luZXNzVW5pdHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhTZXJ2aWNlfSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9MZWFybmluZ1BhdGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzUHJvZHVjdHNMaXN0RWRpdGluZ0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgb2JqZWN0SWQ6IG51bWJlcjtcclxuICAgIHZlcnNpb246IG51bWJlcjtcclxuICAgIG9iamVjdFR5cGU6IHN0cmluZztcclxuICAgIHNhdmVTdWNjZXNzQ2FsbGJhY2s6ICgpID0+IGFuZ3VsYXIuSVByb21pc2U8YW55PjtcclxuICAgIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgdm0/OiBWaHNQcm9kdWN0c0xpc3RFZGl0aW5nQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc1Byb2R1Y3RzTGlzdEVkaXRpbmdDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgbmV3UHJvZHVjdElkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmVjYWxjdWxhdGVBbGw6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcHJvZHVjdHM6IElQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0W107XHJcbiAgICBwdWJsaWMgcHJvZHVjdHNGb3JSZWdpc3RyYXRpb25MaW5rOiBJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdFtdO1xyXG5cclxuICAgIHB1YmxpYyBpc0xvYWRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1JlY2FsY3VsYXRlUGVybWlzc2lvbnNCdXR0b25EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzZWN0aW9uc0ZvclJlZ2lzdHJhdGlvbjogSVNlY3Rpb25bXTtcclxuICAgIHB1YmxpYyBjdXJyZW50QnVzaW5lc3NVbml0RG9tYWluOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlO1xyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aDtcclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgUHVyY2hhc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEZpbmFuY2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzUHJvZHVjdHNMaXN0RWRpdGluZ0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHVyY2hhc2VTZXJ2aWNlOiBQdXJjaGFzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgZmluYW5jZXNSb3V0ZXI6IEZpbmFuY2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgbGVhcm5pbmdQYXRoU2VydmljZTogTGVhcm5pbmdQYXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBidXNpbmVzc1VuaXRTZXJ2aWNlOiBCdXNpbmVzc1VuaXRzU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMucHJvZHVjdHMgPSBbXTtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzRm9yUmVnaXN0cmF0aW9uTGluayA9IFtdO1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVsb2FkUHJvZHVjdHNMaXN0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm9iamVjdFR5cGUgPT0gXCJDT1VSU0VcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0UmVsYXRlZExlYXJuaW5nUGF0aHModGhpcy4kc2NvcGUub2JqZWN0SWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKGxwID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1cmNoYXNlU2VydmljZS5nZXRSZWZlcmVuY2VkT2JqZWN0UHJvZHVjdHNMaXN0KGxwLmlkLCBcIkxFQVJOSU5HX1BBVEhcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHByb2R1Y3RzOiBJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdFtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG1wID0gcHJvZHVjdHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0IG9mIHRtcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250YWluc1JlZ2lzdHJhdGlvbkxpbmsodGhpcy5wcm9kdWN0c0ZvclJlZ2lzdHJhdGlvbkxpbmssIHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHNGb3JSZWdpc3RyYXRpb25MaW5rLnB1c2godCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldENvdXJzZVZJTFRTZWN0aW9ucyh0aGlzLiRzY29wZS5vYmplY3RJZCkudGhlbih2aWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNGb3JSZWdpc3RyYXRpb24gPSB2aWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldENvdXJzZUlMVFNlY3Rpb25zKHRoaXMuJHNjb3BlLm9iamVjdElkKS50aGVuKGlsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uc0ZvclJlZ2lzdHJhdGlvbi5wdXNoKC4uLmlsdCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXQodGhpcy4kc2NvcGUub2JqZWN0SWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDdXJyZW50QnVzaW5lc3NVbml0RG9tYWluKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuJHNjb3BlLm9iamVjdFR5cGUgPT0gXCJMRUFSTklOR19QQVRIXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLmdldCh0aGlzLiRzY29wZS5vYmplY3RJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGggPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEN1cnJlbnRCdXNpbmVzc1VuaXREb21haW4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5nZXRMZWFybmluZ1BhdGhDb3Vyc2VzKHRoaXMuJHNjb3BlLm9iamVjdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY291cnNlcyA9IHJlc3VsdC5tYXAociA9PiByLmlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VWSUxUU2VjdGlvbnNCeUNvdXJzZUlkcyhjb3Vyc2VzKS50aGVuKHZpbHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNGb3JSZWdpc3RyYXRpb24gPSB2aWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VJTFRTZWN0aW9uc0J5Q291cnNlSWRzKGNvdXJzZXMpLnRoZW4oaWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uc0ZvclJlZ2lzdHJhdGlvbi5wdXNoKC4uLmlsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDdXJyZW50QnVzaW5lc3NVbml0RG9tYWluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVsb2FkUHJvZHVjdHNMaXN0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnB1cmNoYXNlU2VydmljZS5nZXRSZWZlcmVuY2VkT2JqZWN0UHJvZHVjdHNMaXN0KHRoaXMuJHNjb3BlLm9iamVjdElkLCB0aGlzLiRzY29wZS5vYmplY3RUeXBlKVxyXG4gICAgICAgICAgICAudGhlbigocHJvZHVjdHM6IElQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0W10pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHMgPSBhbmd1bGFyLmNvcHkocHJvZHVjdHMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0ZvclJlZ2lzdHJhdGlvbkxpbmsgPSBwcm9kdWN0cztcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVQcm9kdWN0c0xpc3QoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHVyY2hhc2VTZXJ2aWNlLnNhdmVSZWZlcmVuY2VkT2JqZWN0UHJvZHVjdHNMaXN0KHRoaXMuJHNjb3BlLm9iamVjdElkLCB0aGlzLiRzY29wZS52ZXJzaW9uLFxyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5vYmplY3RUeXBlLCB0aGlzLnByb2R1Y3RzLm1hcChwID0+IHAucHJvZHVjdElkKSlcclxuICAgICAgICAgICAgLnRoZW4oKHByb2R1Y3RzOiBJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdFtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RzID0gYW5ndWxhci5jb3B5KHByb2R1Y3RzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHNGb3JSZWdpc3RyYXRpb25MaW5rID0gcHJvZHVjdHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0UmVsYXRlZExlYXJuaW5nUGF0aHModGhpcy4kc2NvcGUub2JqZWN0SWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuZm9yRWFjaChscCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVyY2hhc2VTZXJ2aWNlLmdldFJlZmVyZW5jZWRPYmplY3RQcm9kdWN0c0xpc3QobHAuaWQsIFwiTEVBUk5JTkdfUEFUSFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHByb2R1Y3RzOiBJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdFtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRtcCA9IHByb2R1Y3RzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0IG9mIHRtcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGFpbnNSZWdpc3RyYXRpb25MaW5rKHRoaXMucHJvZHVjdHNGb3JSZWdpc3RyYXRpb25MaW5rLCB0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0ZvclJlZ2lzdHJhdGlvbkxpbmsucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHNjb3BlLnNhdmVTdWNjZXNzQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlByb2R1Y3RzIGxpc3QgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IucHJvZHVjdC5pZC5ub3QudW5pcXVlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlByb2R1Y3RzIGlkZW50aWZpZXJzIG5vdCB1bmlxdWVcIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5wcm9kdWN0LmlkLmV4Y2VlZC5tYXgubGVuZ3RoXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlByb2R1Y3RzIGlkZW50aWZpZXJzIGFyZSB0b28gbG9uZ1wiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnByb2R1Y3QuYWxyZWFkeS5pbi51c2VcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiUHJvZHVjdCBpZGVudGlmaWVyIGFscmVhZHkgaW4gdXNlXCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IuaW52YWxpZC5wcm9kdWN0LmlkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGlhbG9nTWVzc2FnZSA9IFwiPHA+WW91ciBwcm9kdWN0IElEIGNhbiBvbmx5IGhhdmU6PC9wPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ01lc3NhZ2UgKz0gXCI8dWw+PGxpPjQtNTAgY2hhcmFjdGVycyB3aXRob3V0IHNwYWNlczwvbGk+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nTWVzc2FnZSArPSBcIjxsaT5VcHBlcmNhc2Ugb3IgbG93ZXJjYXNlIGxldHRlcnM8L2xpPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ01lc3NhZ2UgKz0gXCI8bGk+TnVtYmVyczwvbGk+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nTWVzc2FnZSArPSBcIjxsaT5UaGVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgX34uLTwvbGk+PC91bD5cIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oZGlhbG9nTWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiSW52YWxpZCBwcm9kdWN0IGlkZW50aWZpZXJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiT2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGROZXdQcm9kdWN0SWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3UHJvZHVjdElkID09IG51bGwpIHtcclxuICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIkluY29ycmVjdCBwcm9kdWN0IGlkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHByb2R1Y3Qgb2YgdGhpcy5wcm9kdWN0cykge1xyXG4gICAgICAgICAgICBpZiAocHJvZHVjdC5wcm9kdWN0SWQudG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5uZXdQcm9kdWN0SWQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIkR1cGxpY2F0ZSBwcm9kdWN0IGlkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvZHVjdHMucHVzaCh7cHJvZHVjdElkOiB0aGlzLm5ld1Byb2R1Y3RJZH0pO1xyXG4gICAgICAgIHRoaXMubmV3UHJvZHVjdElkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlUHJvZHVjdElkKHJlbW92ZWRQcm9kdWN0SWRJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0cy5zcGxpY2UocmVtb3ZlZFByb2R1Y3RJZEluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVjYWxjdWxhdGVBbGxQdXJjaGFzZXNQZXJtaXNzaW9ucygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzUmVjYWxjdWxhdGVQZXJtaXNzaW9uc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQWxsID0gdHJ1ZTtcclxuICAgICAgICBsZXQgY3JlYXRpb25Qcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPGFueT47XHJcbiAgICAgICAgY3JlYXRpb25Qcm9taXNlID0gdGhpcy5wdXJjaGFzZVNlcnZpY2UucmVjYWxjdWxhdGVQZXJtaXNzaW9ucyh0aGlzLiRzY29wZS5vYmplY3RJZCwgdGhpcy4kc2NvcGUub2JqZWN0VHlwZSwgdGhpcy5yZWNhbGN1bGF0ZUFsbCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJQZXJtaXNzaW9ucyB3ZXJlIHN1Y2Nlc3NmdWxseSByZWNhbGN1bGF0ZWRcIik7XHJcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VSZWNhbGN1bGF0ZURpb2xvZygpO1xyXG4gICAgICAgICAgICB0aGlzLmlzUmVjYWxjdWxhdGVQZXJtaXNzaW9uc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlY2FsY3VsYXRlT25seVN1YnNjcmlwdGlvbnNQZXJtaXNzaW9ucygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzUmVjYWxjdWxhdGVQZXJtaXNzaW9uc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQWxsID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNyZWF0aW9uUHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxhbnk+O1xyXG4gICAgICAgIGNyZWF0aW9uUHJvbWlzZSA9IHRoaXMucHVyY2hhc2VTZXJ2aWNlLnJlY2FsY3VsYXRlUGVybWlzc2lvbnModGhpcy4kc2NvcGUub2JqZWN0SWQsIHRoaXMuJHNjb3BlLm9iamVjdFR5cGUsIHRoaXMucmVjYWxjdWxhdGVBbGwpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiUGVybWlzc2lvbnMgd2VyZSBzdWNjZXNzZnVsbHkgcmVjYWxjdWxhdGVkXCIpO1xyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlUmVjYWxjdWxhdGVEaW9sb2coKTtcclxuICAgICAgICAgICAgdGhpcy5pc1JlY2FsY3VsYXRlUGVybWlzc2lvbnNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xvc2VSZWNhbGN1bGF0ZURpb2xvZygpOiB2b2lkIHtcclxuICAgICAgICAkKFwiI1JlY2FsY3VsYXRlRGlvbG9nXCIpLm1vZGFsKCdoaWRlJylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVjYWxjdWxhdGVQZXJtaXNzaW9ucygpOiB2b2lkIHtcclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNSZWNhbGN1bGF0ZURpb2xvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUHJvZHVjdElkVmFsaWQocHJvZHVjdElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcHJvZHVjdElkLmxlbmd0aCA8PSAxMjc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5SZWdpc3RyYXRpb25MaW5rc0RpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUub2JqZWN0VHlwZSA9PSBcIkNPVVJTRVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VWSUxUU2VjdGlvbnModGhpcy4kc2NvcGUub2JqZWN0SWQpLnRoZW4odmlsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zRm9yUmVnaXN0cmF0aW9uID0gdmlsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VJTFRTZWN0aW9ucyh0aGlzLiRzY29wZS5vYmplY3RJZCkudGhlbihpbHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNGb3JSZWdpc3RyYXRpb24ucHVzaCguLi5pbHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjUmVnaXN0cmF0aW9uTGlua3NEaWFsb2dcIikubW9kYWwoJ3Nob3cnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHNjb3BlLm9iamVjdFR5cGUgPT0gXCJMRUFSTklOR19QQVRIXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLmdldExlYXJuaW5nUGF0aENvdXJzZXModGhpcy4kc2NvcGUub2JqZWN0SWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBjb3Vyc2VzID0gcmVzdWx0Lm1hcChyID0+IHIuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldENvdXJzZVZJTFRTZWN0aW9uc0J5Q291cnNlSWRzKGNvdXJzZXMpLnRoZW4odmlsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uc0ZvclJlZ2lzdHJhdGlvbiA9IHZpbHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldENvdXJzZUlMVFNlY3Rpb25zQnlDb3Vyc2VJZHMoY291cnNlcykudGhlbihpbHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zRm9yUmVnaXN0cmF0aW9uLnB1c2goLi4uaWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNSZWdpc3RyYXRpb25MaW5rc0RpYWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RQcm9kdWN0UGFnZShwcm9kdWN0SW50ZXJuYWxJZCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjUmVnaXN0cmF0aW9uTGlua3NEaWFsb2dcIikubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmZpbmFuY2VzUm91dGVyLnByb2R1Y3REZXRhaWxzVXJsKHByb2R1Y3RJbnRlcm5hbElkKSksIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3B5UHVyY2hhc2VQYXRoKHBheW1lbnQ6IGJvb2xlYW4sIHByb2R1Y3RJZDogc3RyaW5nLCBjb3Vyc2VJZDogc3RyaW5nLCBzZWN0aW9uSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGxldCB0ZXh0ID0gdGhpcy5jdXJyZW50QnVzaW5lc3NVbml0RG9tYWluICsgYC9jYXRhbG9nLyR7cHJvZHVjdElkfWA7XHJcbiAgICAgICAgaWYgKHBheW1lbnQgJiYgc2VjdGlvbklkKSB7XHJcbiAgICAgICAgICAgIHRleHQgKz0gYD9wYXltZW50PVRSVUUmY291cnNlPSR7Y291cnNlSWR9JnNlY3Rpb249JHtzZWN0aW9uSWR9YFxyXG4gICAgICAgIH0gZWxzZSBpZiAocGF5bWVudCkge1xyXG4gICAgICAgICAgICB0ZXh0ICs9IGA/cGF5bWVudD1UUlVFJmNvdXJzZT0ke2NvdXJzZUlkfWBcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XHJcbiAgICAgICAgcGF5bWVudCA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNSZWdpc3RyYXRpb25MaW5rc0RpYWxvZycpLmFwcGVuZENoaWxkKGVsZW0pIDogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtKTtcclxuICAgICAgICBlbGVtLnZhbHVlID0gXCJcIiArIHRleHQ7XHJcbiAgICAgICAgZWxlbS5zZWxlY3QoKTtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XHJcbiAgICAgICAgaWYgKCFwYXltZW50KSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI1JlZ2lzdHJhdGlvbkxpbmtzRGlhbG9nJykucmVtb3ZlQ2hpbGQoZWxlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50QnVzaW5lc3NVbml0RG9tYWluKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50QnVzaW5lc3NVbml0RG9tYWluKSB7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5jb3Vyc2UgJiYgdGhpcy5jb3Vyc2UuYnVzaW5lc3NVbml0SWQpIHx8ICh0aGlzLmxlYXJuaW5nUGF0aCAmJiB0aGlzLmxlYXJuaW5nUGF0aC5idXNpbmVzc1VuaXRJZCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYnVzaW5lc3NVbml0SWQgPSB0aGlzLmNvdXJzZSA/IHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkIDogdGhpcy5sZWFybmluZ1BhdGguYnVzaW5lc3NVbml0SWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlcnZpY2UuZ2V0QlVEb21haW5OYW1lKGJ1c2luZXNzVW5pdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1VuaXREb21haW4gPSBgJHtyZXN1bHR9YDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1VuaXREb21haW4gPSBgJHt0aGlzLiRsb2NhdGlvbi5hYnNVcmwoKS5zcGxpdChcIiNcIilbMF19I2A7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzVW5pdERvbWFpbiA9IGAke3RoaXMuJGxvY2F0aW9uLmFic1VybCgpLnNwbGl0KFwiI1wiKVswXX0jYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzVW5pdERvbWFpbiA9IGAke3RoaXMuJGxvY2F0aW9uLmFic1VybCgpLnNwbGl0KFwiI1wiKVswXX0jYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnRhaW5zUmVnaXN0cmF0aW9uTGluayhhcnJheTogQXJyYXk8SVByb2R1Y3RUb1JlZmVyZW5jZWRPYmplY3Q+LCBvYmplY3Q6SVByb2R1Y3RUb1JlZmVyZW5jZWRPYmplY3QpOiBib29sZWFue1xyXG4gICAgICAgIGZvciAobGV0IGEgb2YgYXJyYXkpIHtcclxuICAgICAgICAgICAgaWYgKGEucHJvZHVjdEludGVybmFsSWQgPT09IG9iamVjdC5wcm9kdWN0SW50ZXJuYWxJZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzUHJvZHVjdHNMaXN0RWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzUHJvZHVjdHNMaXN0RWRpdGluZ0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc1Byb2R1Y3RzTGlzdEVkaXRpbmdDb250cm9sbGVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNQcm9kdWN0c0xpc3RFZGl0aW5nQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBvYmplY3RJZDogXCI9dmhzT2JqZWN0SWRcIixcclxuICAgICAgICAgICAgdmVyc2lvbjogXCI9dmhzVmVyc2lvblwiLFxyXG4gICAgICAgICAgICBvYmplY3RUeXBlOiBcIj12aHNPYmplY3RUeXBlXCIsXHJcbiAgICAgICAgICAgIHNhdmVTdWNjZXNzQ2FsbGJhY2s6IFwiPXZoc1NhdmVTdWNjZXNzQ2FsbGJhY2tcIixcclxuICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnM6IFwiPXZoc1N5c3RlbVBlcm1pc3Npb25zXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1wcm9kdWN0cy1saXN0LWVkaXRpbmcuaHRtbFwiKVxyXG4gICAgfTtcclxufVxyXG5cclxuVmhzUHJvZHVjdHNMaXN0RWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UHVyY2hhc2VTZXJ2aWNlfSBmcm9tIFwiLi4vZmluYW5jZXMvUHVyY2hhc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVByb2R1Y3R9IGZyb20gXCIuLi9maW5hbmNlcy9tb2RlbHMvSVByb2R1Y3RcIjtcclxuaW1wb3J0IHtQYXlQYWxTZXJ2aWNlfSBmcm9tIFwiLi4vaW50ZWdyYXRpb24vcGF5cGFsL1BheVBhbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoUmVkaXJlY3RcIjtcclxuaW1wb3J0IHtSZWRpcmVjdFJlYXNvbn0gZnJvbSBcIi4uL2F1dGhjb3JlL1JlZGlyZWN0UmVhc29uXCI7XHJcbmltcG9ydCB7QnVzaW5lc3NVbml0c1NlcnZpY2V9IGZyb20gXCIuLi9idXNpbmVzc1VuaXRzL0J1c2luZXNzVW5pdHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RmluYW5jZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0ZpbmFuY2VzUm91dGVyXCI7XHJcbmltcG9ydCB7Q291cnNlRGV0YWlsc0NvbnRyb2xsZXJ9IGZyb20gXCIuLi9jb3Vyc2VzL0NvdXJzZURldGFpbHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4vZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtGcmVlRW5yb2xsbWVudFNlcnZpY2V9IGZyb20gXCIuLi9pbnRlZ3JhdGlvbi9mcmVlZW5yb2xsbWVudC9GcmVlRW5yb2xsbWVudFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRob3JpemVOZXRTZXJ2aWNlfSBmcm9tIFwiLi4vaW50ZWdyYXRpb24vYXV0aG9yaXplbmV0L0F1dGhvcml6ZU5ldFNlcnZpY2VcIjtcclxuXHJcbmRlY2xhcmUgdmFyIHBheXBhbDtcclxuXHJcbmludGVyZmFjZSBWaHNQdXJjaGFzZURpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgb2JqZWN0SWQ6IG51bWJlcjtcclxuICAgIG9iamVjdFR5cGU6IHN0cmluZztcclxuICAgIG9uRXJyb3I6ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgdm0/OiBWaHNQdXJjaGFzZURpcmVjdGl2ZTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc1B1cmNoYXNlRGlyZWN0aXZlIHtcclxuXHJcbiAgICBwdWJsaWMgcHJvZHVjdHM6IElQcm9kdWN0W107XHJcbiAgICBwdWJsaWMgY2xpZW50SWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBzZWxlY3RlZFByb2R1Y3Q6IElQcm9kdWN0O1xyXG4gICAgcHVibGljIGlzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGFOZXRUb2tlbjogc3RyaW5nO1xyXG4gICAgcHVibGljIEFOZXRUcmFuc2FjdGlvbklkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgYU5ldElmcmFtZUNvbW11bmljYXRvcjogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBlbnJvbGxJblByb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQdXJjaGFzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQYXlQYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBGaW5hbmNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBGcmVlRW5yb2xsbWVudFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRob3JpemVOZXRTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IFZoc1B1cmNoYXNlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHB1cmNoYXNlU2VydmljZTogUHVyY2hhc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwYXlQYWxTZXJ2aWNlOiBQYXlQYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgZmluYW5jZXNSb3V0ZXI6IEZpbmFuY2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBmcmVlRW5yb2xsbWVudFNlcnZpY2U6IEZyZWVFbnJvbGxtZW50U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aG9yaXplTmV0U2VydmljZTogQXV0aG9yaXplTmV0U2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5sb2FkUHJvZHVjdHMoKS50aGVuKCgpID0+IHRoaXMuaXNMb2FkZWQgPSB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRQcm9kdWN0cygpOiBhbmd1bGFyLklQcm9taXNlPElQcm9kdWN0W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wdXJjaGFzZVNlcnZpY2UuZ2V0UmVmZXJlbmNlZE9iamVjdFJlbGF0ZWRQcm9kdWN0cyh0aGlzLiRzY29wZS5vYmplY3RJZCwgdGhpcy4kc2NvcGUub2JqZWN0VHlwZSlcclxuICAgICAgICAgICAgLnRoZW4oKHByb2R1Y3RzOiBJUHJvZHVjdFtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RzID0gYW5ndWxhci5jb3B5KHByb2R1Y3RzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3RzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tvdXQoKTogdm9pZCB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FOZXRQcm9kdWN0SWQnLCAnJyArIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LmlkKTtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2R1Y3QucHJpY2UgPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lbnJvbGxGb3JGcmVlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuY2hlY2tQYXlQYWxDb3JyZWN0RGF0YSh0aGlzLnNlbGVjdGVkUHJvZHVjdC5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHRQYXlQYWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0UGF5UGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYXJ0QnV0dG9uc1BheXBhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kYXRhLmVycm9yID09PSBcImVycm9yLm9yZGVyLmNyZWF0aW9uLmZhaWxlZC51c2VkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQWxsIHNlYXRzIGFyZSBhbHJlYWR5IHRha2VuLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJbmNvcnJlY3Qgc3lzdGVtIHB1cmNoYXNlIHNldHRpbmdzLiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kc2NvcGUub25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUub25FcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5jaGVja0F1dGhvcml6ZU5ldENvcnJlY3REYXRhKHRoaXMuc2VsZWN0ZWRQcm9kdWN0LmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0QU5ldCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdEFOZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hTmV0UHJlcGFyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplTmV0U2VydmljZS5nZXRUb2tlbih0aGlzLnNlbGVjdGVkUHJvZHVjdC5idXNpbmVzc1VuaXRJZCwgdGhpcy5zZWxlY3RlZFByb2R1Y3QucHJpY2UsIHRoaXMuYU5ldElmcmFtZUNvbW11bmljYXRvciwgdGhpcy5zZWxlY3RlZFByb2R1Y3QuaWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYU5ldFRva2VuID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRBdXRob3JpemVOZXRFbnZpcm9ubWVudFR5cGUodGhpcy5zZWxlY3RlZFByb2R1Y3QuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oY29uZmlnID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gY29uZmlnLnRvVXBwZXJDYXNlKCkgPT09IFwiU0FOREJPWFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiaHR0cHM6Ly90ZXN0LmF1dGhvcml6ZS5uZXQvcGF5bWVudC9wYXltZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJodHRwczovL2FjY2VwdC5hdXRob3JpemUubmV0L3BheW1lbnQvcGF5bWVudFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5mb3Jtc1snc2VuZF9ocHRva2VuJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5FbGVtZW50LnNldEF0dHJpYnV0ZShcImFjdGlvblwiLCB1cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluRWxlbWVudC5zdWJtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzZXRBTmV0VG9rZW4oKSB7XHJcbiAgICAgICAgdGhpcy5hTmV0VG9rZW4gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYU5ldFByZXBhcmluZygpIHtcclxuICAgICAgICBsZXQgYmFzZURvbWFpbiA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiOi8vXCIpWzBdICsgXCI6Ly9cIiArIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiOi8vXCIpWzFdLnNwbGl0KFwiL1wiKVswXTtcclxuICAgICAgICBpZiAodGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihcImNsaWVudFwiKSA+IDApIHtcclxuICAgICAgICAgICAgYmFzZURvbWFpbiArPSBcIi9jbGllbnRcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoXCJhcHAuaHRtbFwiKSA+IDApIHtcclxuICAgICAgICAgICAgYmFzZURvbWFpbiArPSBcIi9hcHAuaHRtbFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFOZXRJZnJhbWVDb21tdW5pY2F0b3IgPSBiYXNlRG9tYWluICsgdGhpcy5maW5hbmNlc1JvdXRlci5wcm9kdWN0QU5ldENvbW11bmljYXRvclVybCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc21hcnRCdXR0b25zUGF5cGFsKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRQYXlQYWxDbGllbnRJZCh0aGlzLnNlbGVjdGVkUHJvZHVjdC5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTY3JpcHQocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVNjcmlwdChjbGllbnRJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGF5cGFsX3NjcmlwdFwiKSkge1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGF5cGFsX3NjcmlwdFwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xyXG4gICAgICAgIHNjcmlwdEVsZW1lbnQuaWQgPSBcInBheXBhbF9zY3JpcHRcIjtcclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZFByb2R1Y3Quc3Vic2NyaXB0aW9uUGxhbklkKSB7XHJcbiAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQuc3JjID0gXCJodHRwczovL3d3dy5wYXlwYWwuY29tL3Nkay9qcz9jbGllbnQtaWQ9XCIgKyBjbGllbnRJZCArIFwiJnZhdWx0PXRydWUmaW50ZW50PXN1YnNjcmlwdGlvblwiO1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KTtcclxuICAgICAgICAgICAgc2NyaXB0RWxlbWVudC5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWJzY3JpcHRpb25CdXR0b25zKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2NyaXB0RWxlbWVudC5zcmMgPSBcImh0dHBzOi8vd3d3LnBheXBhbC5jb20vc2RrL2pzP2NsaWVudC1pZD1cIiArIGNsaWVudElkO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICBzY3JpcHRFbGVtZW50Lm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0J1dHRvbnMoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93U3Vic2NyaXB0aW9uQnV0dG9ucygpIHtcclxuICAgICAgICBwYXlwYWwuQnV0dG9ucyh7XHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ3N1YnNjcmliZSdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3JlYXRlU3Vic2NyaXB0aW9uOiAoZGF0YSwgYWN0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gYWN0aW9ucy5zdWJzY3JpcHRpb24uY3JlYXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAncGxhbl9pZCc6IHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnN1YnNjcmlwdGlvblBsYW5JZFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZS50aGVuKChzdWJzY3JpcHRpb25JZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXlQYWxTZXJ2aWNlLmNyZWF0ZVN1YnNjcmlwdGlvblB1cmNoYXNlT3JkZXIodGhpcy5zZWxlY3RlZFByb2R1Y3QuaWQsIHN1YnNjcmlwdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkFwcHJvdmU6IChkYXRhLCBhY3Rpb25zKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnB1cmNoYXNlU2VydmljZS5nZXROdW1iZXJPZkl0ZW1zSW5Qcm9kdWN0KHRoaXMuc2VsZWN0ZWRQcm9kdWN0LmlkKS50aGVuKChudW1iZXJPZkl0ZW1zSW5Qcm9kdWN0OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihudW1iZXJPZkl0ZW1zSW5Qcm9kdWN0ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXlQYWxTZXJ2aWNlLmFwcHJvdmVTdWJzY3JpcHRpb24odGhpcy5zZWxlY3RlZFByb2R1Y3QuaWQsIGRhdGEuc3Vic2NyaXB0aW9uSUQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocHVyY2hhc2VkT3JkZXJJZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuZmluYW5jZXNSb3V0ZXIucHVyY2hhc2VkUHJvZHVjdFVybChwdXJjaGFzZWRPcmRlcklkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCIxXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiV2FybmluZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBheVBhbFNlcnZpY2UuYXBwcm92ZVN1YnNjcmlwdGlvbih0aGlzLnNlbGVjdGVkUHJvZHVjdC5pZCwgZGF0YS5zdWJzY3JpcHRpb25JRClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChwdXJjaGFzZWRPcmRlcklkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCIxXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiV2FybmluZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gcHVyY2hhc2UgcHJvZHVjdC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIH0pLnJlbmRlcignI3BheXBhbC1idXR0b24tY29udGFpbmVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93QnV0dG9ucygpOiBhbmd1bGFyLklQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gcGF5cGFsLkJ1dHRvbnMoe1xyXG4gICAgICAgICAgICBjcmVhdGVPcmRlcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF5UGFsU2VydmljZS5jcmVhdGVPcmRlclNtYXJ0KHRoaXMuc2VsZWN0ZWRQcm9kdWN0LmlkKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25BcHByb3ZlOiAoZGF0YSwgYWN0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcyA9IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICBvcmRlcklEOiBkYXRhLm9yZGVySURcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVB1cmNoYXNlTW9kYWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnB1cmNoYXNlU2VydmljZS5nZXROdW1iZXJPZkl0ZW1zSW5Qcm9kdWN0KHRoaXMuc2VsZWN0ZWRQcm9kdWN0LmlkKS50aGVuKChudW1iZXJPZkl0ZW1zSW5Qcm9kdWN0OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihudW1iZXJPZkl0ZW1zSW5Qcm9kdWN0ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXlQYWxTZXJ2aWNlLmNvbmZpcm1PcmRlclNtYXJ0KHMpLnRoZW4oKHB1cmNoYXNlZE9yZGVySWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuZmluYW5jZXNSb3V0ZXIucHVyY2hhc2VkUHJvZHVjdFVybChwdXJjaGFzZWRPcmRlcklkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiWW91ciBjcmVkaXQgY2FyZCBvciBQYXlQYWwgYWNjb3VudCBoYXMgbm90IGJlZW4gY2hhcmdlZC4gUGxlYXNlIHRyeSBhZ2FpblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF5UGFsU2VydmljZS5jb25maXJtT3JkZXJTbWFydChzKS50aGVuKChwdXJjaGFzZWRPcmRlcklkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJZb3VyIGNyZWRpdCBjYXJkIG9yIFBheVBhbCBhY2NvdW50IGhhcyBub3QgYmVlbiBjaGFyZ2VkLiBQbGVhc2UgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiWW91ciBjcmVkaXQgY2FyZCBvciBQYXlQYWwgYWNjb3VudCBoYXMgbm90IGJlZW4gY2hhcmdlZC4gUGxlYXNlIHRyeSBhZ2FpblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLnJlbmRlcignI3BheXBhbC1idXR0b24tY29udGFpbmVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWFjdGl2YXRlTWFpbkNvbnRlbnQoKSB7XHJcbiAgICAgICAgbGV0IG1haW5FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggXCJkaXYjbWFpbkNvbnRlbnRcIik7XHJcbiAgICAgICAgbGV0IG1haW5Mb2FkaW5nRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIFwiZGl2I21haW5Db250ZW50TG9hZGluZ1wiKTtcclxuICAgICAgICBtYWluRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgIG1haW5Mb2FkaW5nRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWN0aXZhdGVNYWluQ29udGVudCgpIHtcclxuICAgICAgICBsZXQgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcImRpdiNtYWluQ29udGVudFwiKTtcclxuICAgICAgICBsZXQgbWFpbkxvYWRpbmdFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggXCJkaXYjbWFpbkNvbnRlbnRMb2FkaW5nXCIpO1xyXG4gICAgICAgIG1haW5FbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgbWFpbkxvYWRpbmdFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlUHVyY2hhc2VNb2RhbDogKCkgPT4gdm9pZCA9ICgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24uc2VhcmNoKENvdXJzZURldGFpbHNDb250cm9sbGVyLlBVUkNIQVNFX1BBUkFNRVRFUiwgbnVsbCkucmVwbGFjZSgpO1xyXG4gICAgICAgICQoXCIjcHVyY2hhc2VEaWFsb2dcIikubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICAkKCcubW9kYWwtYmFja2Ryb3AnKS5yZW1vdmUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvTG9nT24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QucmVkaXJlY3RUb0xvZ09uKFJlZGlyZWN0UmVhc29uLkxPR09OX1JFUVVJUkVELCB0aGlzLnByb2R1Y3RzWzBdLmJ1c2luZXNzVW5pdElkKTtcclxuICAgICAgICB0aGlzLmNsb3NlUHVyY2hhc2VNb2RhbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvUHJvZHVjdChwcm9kdWN0SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2xvc2VQdXJjaGFzZU1vZGFsKCk7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuZmluYW5jZXNSb3V0ZXIucHJvZHVjdERldGFpbHNVcmwocHJvZHVjdElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVucm9sbEZvckZyZWUoKSB7XHJcbiAgICAgICAgdGhpcy5lbnJvbGxJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICBsZXQgYnVzaW5lc3NVbml0SWQgPSB0aGlzLnNlbGVjdGVkUHJvZHVjdC5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICBsZXQgcHJvZHVjdElkID0gdGhpcy5zZWxlY3RlZFByb2R1Y3QuaWQ7XHJcbiAgICAgICAgbGV0IHJldHVyblVybCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5mcmVlRW5yb2xsbWVudFNlcnZpY2UuY3JlYXRlT3JkZXIoe2J1c2luZXNzVW5pdElkLCBwcm9kdWN0SWQsIHJldHVyblVybH0pXHJcbiAgICAgICAgICAgIC50aGVuKChwcm9kdWN0SWQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQdXJjaGFzZU1vZGFsKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5maW5hbmNlc1JvdXRlci5wdXJjaGFzZWRQcm9kdWN0VXJsKHByb2R1Y3RJZCkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJbmNvcnJlY3Qgc3lzdGVtIHB1cmNoYXNlIHNldHRpbmdzLiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuXCIpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVucm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNQdXJjaGFzZURpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBWaHNQdXJjaGFzZURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc1B1cmNoYXNlRGlyZWN0aXZlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNQdXJjaGFzZURpcmVjdGl2ZSxcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBvYmplY3RJZDogXCI9dmhzT2JqZWN0SWRcIixcclxuICAgICAgICAgICAgb2JqZWN0VHlwZTogXCI9dmhzT2JqZWN0VHlwZVwiLFxyXG4gICAgICAgICAgICBvbkVycm9yOiBcIj0/dmhzT25FcnJvclwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtcHVyY2hhc2UuaHRtbFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5WaHNQdXJjaGFzZURpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJzb25hbFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvUGVyc29uYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHtRdWl6emVzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9RdWl6emVzUm91dGVyXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UXVpelNlcnZpY2V9IGZyb20gXCIuLi9xdWl6emVzL1F1aXpTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVF1aXpBbnN3ZXJSZXN1bHR9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpekFuc3dlclJlc3VsdFwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uVHlwZX0gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL1F1ZXN0aW9uVHlwZVwiO1xyXG5pbXBvcnQge0lRdWl6UXVlc3Rpb259IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpelF1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SUFzc2Vzc21lbnRSZXN1bHR9IGZyb20gXCIuLi9hc3Nlc3NtZW50cy9tb2RlbHMvSUFzc2Vzc21lbnRSZXN1bHRcIjtcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi9idW5kbGVzL0J1bmRsZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUXVpelJlc3VsdH0gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6UmVzdWx0XCI7XHJcbmltcG9ydCBJUHJvbWlzZSA9IGFuZ3VsYXIuSVByb21pc2U7XHJcbmltcG9ydCB7SVF1aXp9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpelwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcbmltcG9ydCB7SVF1aXpRdWVzdGlvbkFuc3dlckV4cGxhbmF0aW9ufSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpRdWVzdGlvbkFuc3dlckV4cGxhbmF0aW9uXCI7XHJcblxyXG5pbnRlcmZhY2UgSVF1aXpBbnN3ZXJSZXN1bHRFeHRlbmRlZCBleHRlbmRzIElRdWl6QW5zd2VyUmVzdWx0IHtcclxuICAgIHJlc3BvbnNlRGF0YT86IGFueTtcclxuICAgIGJ1bmRsZUZpbGVVcmw/OiBzdHJpbmc7XHJcblxyXG59XHJcblxyXG5pbnRlcmZhY2UgSVZoc1F1aXpEZXRhaWxzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBxdWl6UmVzdWx0SWQ6IG51bWJlcjtcclxuICAgIHZtPzogVmhzUXVpekRldGFpbHNDb250cm9sbGVyO1xyXG4gICAgc2hvd1F1aXpEZXRhaWxzSGVhZGVyPzogYm9vbGVhbjtcclxuICAgIGNvdXJzZUlkPzogbnVtYmVyO1xyXG4gICAgcXVpelRvdGFsUG9pbnRzPzogbnVtYmVyO1xyXG4gICAgY2FuVmlld090aGVyVXNlclByb2dyZXNzPzogYm9vbGVhbjtcclxuICAgIHNlbGVjdGVkVXNlckZ1bGxOYW1lPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzUXVpekRldGFpbHNDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgcmVkaXJlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBxdWl6SWQ6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIHRvdGFsUG9pbnRzOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSByZXN1bHRQb2ludHM6IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgcXVpelJlc3VsdElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcXVpek5hbWU6IHN0cmluZyA9ICcnO1xyXG4gICAgcHVibGljIHF1aXpBbnN3ZXJSZXN1bHRzOiBJUXVpekFuc3dlclJlc3VsdEV4dGVuZGVkW10gPSBbXTtcclxuICAgIHB1YmxpYyBxdWl6OiBJUXVpejtcclxuICAgIHB1YmxpYyBjdXJyZW50UXVpejogSVF1aXogPSB7fTtcclxuICAgIHB1YmxpYyBxdWl6UXVlc3Rpb25zOiBJUXVpelF1ZXN0aW9uW10gPSBbXTtcclxuICAgIHB1YmxpYyBxdWVzdGlvbnNGb3JTaG93OiBJUXVpelF1ZXN0aW9uW10gPSBbXTtcclxuICAgIHB1YmxpYyBzaG93UXVpekRldGFpbHNIZWFkZXI6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgY3VycmVudFBvaW50c051bWJlcjogbnVtYmVyO1xyXG4gICAgcHVibGljIGN1cnJlbnRDb3JyZWN0QW5zd2Vyc1BlcmNlbnRhZ2U6IG51bWJlcjtcclxuICAgIHB1YmxpYyBxdWl6VG90YWxQb2ludHM6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgY29ycmVjdFF1ZXN0aW9uczogbnVtYmVyO1xyXG4gICAgcHVibGljIHRvdGFsUXVlc3Rpb25zOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGJ1bmRsZTogSUJ1bmRsZTtcclxuXHJcbiAgICBwdWJsaWMgcXVpelJlc3VsdDogSVF1aXpSZXN1bHQ7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUXVpelNlcnZpY2UuTkFNRSxcclxuICAgICAgICBRdWl6emVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUGVyc29uYWxSb3V0ZXIuTkFNRSxcclxuICAgICAgICBCdW5kbGVTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNRdWl6RGV0YWlsc0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkICRyb3V0ZVBhcmFtczogbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcXVpelNlcnZpY2U6IFF1aXpTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHF1aXp6ZXNSb3V0ZXI6IFF1aXp6ZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcGVyc29uYWxSb3V0ZXI6IFBlcnNvbmFsUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJ1bmRsZVNlcnZpY2U6IEJ1bmRsZVNlcnZpY2UpIHtcclxuXHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLnNob3dRdWl6RGV0YWlsc0hlYWRlciA9ICh0aGlzLiRzY29wZS5zaG93UXVpekRldGFpbHNIZWFkZXIgIT0gbnVsbFxyXG4gICAgICAgICAgICAmJiB0aGlzLiRzY29wZS5zaG93UXVpekRldGFpbHNIZWFkZXIgIT0gdW5kZWZpbmVkKSA/IHRoaXMuJHNjb3BlLnNob3dRdWl6RGV0YWlsc0hlYWRlciA6IGZhbHNlO1xyXG4gICAgICAgICRzY29wZS4kd2F0Y2goXCJxdWl6UmVzdWx0SWRcIiwgKHZhbHVlOiBudW1iZXIpICA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpelJlc3VsdElkID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UXVpeigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UXVpeigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnF1aXpTZXJ2aWNlLmdldFF1aXoodGhpcy5xdWl6UmVzdWx0SWQpLnRoZW4ocXVpeiA9PiB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuJHJvdXRlUGFyYW1zW1wicXVpeklkXCJdKXtcclxuICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShxdWl6LCB0aGlzLmN1cnJlbnRRdWl6KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnF1aXogPSBxdWl6O1xyXG4gICAgICAgICAgICB0aGlzLnF1aXpJZCA9IHF1aXouaWQ7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFF1aXpSZXN1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUXVpelF1ZXN0aW9ucygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFF1aXpRdWVzdGlvbnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5xdWl6U2VydmljZS5nZXRBbGxRdWl6UXVlc3Rpb25zRm9yUXVpeih0aGlzLnF1aXpJZCwgdHJ1ZSkudGhlbihxdWl6UXVlc3Rpb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6VG90YWxQb2ludHMgPSAwO1xyXG4gICAgICAgICAgICBxdWl6UXVlc3Rpb25zLmZvckVhY2gocXVpeiA9PiB0aGlzLnF1aXpUb3RhbFBvaW50cyArPSBxdWl6LnBvaW50cyk7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShxdWl6UXVlc3Rpb25zLCB0aGlzLnF1aXpRdWVzdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5xdWl6U2VydmljZS5nZXRBc3Nlc3NtZW50UmVzdWx0cyh0aGlzLnF1aXpSZXN1bHRJZCwgdGhpcy5xdWl6UXVlc3Rpb25zLm1hcChxdWl6ID0+IHF1aXouaWQpKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKGFzc2Vzc21lbnRSZXN1bHRzOiBJQXNzZXNzbWVudFJlc3VsdFtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2Vzc21lbnRSZXN1bHRzID09IG51bGwgfHwgYXNzZXNzbWVudFJlc3VsdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25zLmZvckVhY2gocXVlc3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VhcmNoQXNzZXNzbWVudFJlc3VsdHMgPSBhc3Nlc3NtZW50UmVzdWx0cy5maWx0ZXIoYXNzZXNzbWVudFJlc3VsdCA9PiBhc3Nlc3NtZW50UmVzdWx0LnF1ZXN0aW9uSWQgPT09IHF1ZXN0aW9uLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFzc2Vzc21lbnRSZXN1bHQgPSBzZWFyY2hBc3Nlc3NtZW50UmVzdWx0cy5sZW5ndGggPiAwID8gc2VhcmNoQXNzZXNzbWVudFJlc3VsdHNbMF0gOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2Vzc21lbnRSZXN1bHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24uc2NvcmUgPSBhc3Nlc3NtZW50UmVzdWx0LnNjb3JlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2Vzc21lbnRSZXN1bHQuY29tbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLmNvbW1lbnQgPSBhc3Nlc3NtZW50UmVzdWx0LmNvbW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkQW5zd2VyUmVzdWx0cygpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGF1ZGlvUmVzcG9uc2VzID0gdGhpcy5xdWl6QW5zd2VyUmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHFhID0+IHRoaXMucXVpelF1ZXN0aW9ucy5zb21lKHEgPT4gcS5pZCA9PSBxYS5xdWVzdGlvbklkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBxLnR5cGUgIT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuSE9UU1BPVF9TSU5HTEVfQ0hPSUNFXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcS50eXBlICE9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkhPVFNQT1RfTVVMVElQTEVfQ0hPSUNFXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIocWEgPT4gISFxYS5qc29uRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvUmVzcG9uc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6U2VydmljZS5nZXRCdW5kbGVJZEZvclF1aXpSZXN1bHQodGhpcy5xdWl6SWQsIHRoaXMucXVpelJlc3VsdElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYnVuZGxlSWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRBdWRpb1Jlc3BvbnNlVXJscyhidW5kbGVJZCwgYXVkaW9SZXNwb25zZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYnVuZGxlIGZvciB0aGlzIHF1aXogcmVzdWx0IHdhcyBub3QgZm91bmRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXpBbnN3ZXJSZXN1bHRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIocWEgPT4gdGhpcy5xdWl6UXVlc3Rpb25zLnNvbWUocSA9PiBxLmlkID09IHFhLnF1ZXN0aW9uSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChxLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuSE9UU1BPVF9TSU5HTEVfQ0hPSUNFXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHEudHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5IT1RTUE9UX01VTFRJUExFX0NIT0lDRV0pKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihxYSA9PiAhIXFhLmpzb25EYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChxYSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLnF1aXpRdWVzdGlvbnMuZmlsdGVyKHEgPT4gcS5pZCA9PSBxYS5xdWVzdGlvbklkKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLnJlc3BvbnNlRGF0YSA9IEpTT04ucGFyc2UocWEuanNvbkRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEFuc3dlclJlc3VsdHMoKTogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5jbGVhclF1aXpQb2ludHMoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6U2VydmljZS5nZXRRdWl6QW5zd2VyUmVzdWx0c0ZvclF1aXpSZXN1bHQodGhpcy5xdWl6UmVzdWx0SWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5xdWl6QW5zd2VyUmVzdWx0cyk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWl6QW5zd2VyUmVzdWx0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5xdWl6UXVlc3Rpb25zLmZpbHRlcihxID0+IHEuaWQgPT0gdGhpcy5xdWl6QW5zd2VyUmVzdWx0c1tpXS5xdWVzdGlvbklkKVswXTtcclxuICAgICAgICAgICAgICAgIHZhciBhbnN3ZXIgPSB0aGlzLnF1aXpBbnN3ZXJSZXN1bHRzW2ldO1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24uaXNDb3JyZWN0ID0gdGhpcy5xdWl6QW5zd2VyUmVzdWx0c1tpXS5pc0NvcnJlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUG9pbnRzICs9IHF1ZXN0aW9uLnBvaW50cztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiAocXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl0gfHwgcXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9BVURJT19SRVNQT05TRV1cclxuICAgICAgICAgICAgICAgIC8vICAgICB8fCBxdWVzdGlvbi50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0hPUlRfQU5TV0VSX1dJVEhfVVBMT0FEXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCBxdWVzdGlvblNjb3JlOiBudW1iZXIgPSBxdWVzdGlvbi5zY29yZSAhPSBudWxsICYmIHF1ZXN0aW9uLnNjb3JlICE9IHVuZGVmaW5lZCA/IHF1ZXN0aW9uLnNjb3JlIDogMDtcclxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnJlc3VsdFBvaW50cyArPSBNYXRoLnJvdW5kKHF1ZXN0aW9uLnBvaW50cyAqIHF1ZXN0aW9uU2NvcmUgLyAxMDAuMCk7XHJcbiAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGlmIChxdWVzdGlvbi5pc0NvcnJlY3QpIHtcclxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5yZXN1bHRQb2ludHMgKz0gcXVlc3Rpb24ucG9pbnRzO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbi5zaG9ydEFuc3dlciA9IGFuc3dlci5hbnN3ZXJUZXh0O1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24ucmVzcG9uc2VEYXRhID0gYW5zd2VyLnJlc3BvbnNlRGF0YTtcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLmFuc3dlcnMuZm9yRWFjaChhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLmFuc3dlcklkcy5maWx0ZXIoYUlkID0+IGFJZCA9PSBhLmlkKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VyLmdyYWRlcy5mb3JFYWNoKGdyYWRlRW50cnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihncmFkZUVudHJ5LmFuc3dlcklkID09IGEuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuZ3JhZGUgPSBncmFkZUVudHJ5LmdyYWRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuaXNBbnlPZk1hdGNoaW5nc1F1ZXN0aW9uVHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2hpbmdQb2ludHMgPSB0aGlzLnF1aXpBbnN3ZXJSZXN1bHRzW2ldLmdyYWRlcy5maWx0ZXIoZyA9PiBnLmdyYWRlPjApLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5wb2ludHMgPSBtYXRjaGluZ1BvaW50cyAqIHF1ZXN0aW9uLnBvaW50cyAvIHF1ZXN0aW9uLmFuc3dlcnMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLmFuc3dlcnMuZm9yRWFjaChhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYS5vcHRpb24gPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhLmlzQ29ycmVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXIuZ3JhZGVzLmZvckVhY2goZyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihnLmFuc3dlcklkID09IGEuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmlzQ29ycmVjdCA9IGcuZ3JhZGUgPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEub3B0aW9uID0gZy5vcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JTaG93LnB1c2gocXVlc3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UG9pbnRzTnVtYmVyID0gdGhpcy5xdWl6UmVzdWx0LmN1cnJlbnRQb2ludHNOdW1iZXIgfHwgdGhpcy5xdWl6UmVzdWx0LmN1cnJlbnRQb2ludHNOdW1iZXIgPT09IDAgP1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6UmVzdWx0LmN1cnJlbnRQb2ludHNOdW1iZXIgOiB0aGlzLnF1aXpSZXN1bHQucG9pbnRzTnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsUG9pbnRzID0gdGhpcy5xdWl6UmVzdWx0LmN1cnJlbnRQb2ludHNOdW1iZXIgfHwgdGhpcy5xdWl6UmVzdWx0LmN1cnJlbnRQb2ludHNOdW1iZXIgPT09IDAgP1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFBvaW50cyA6IHRoaXMucXVpelRvdGFsUG9pbnRzO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb3JyZWN0UXVlc3Rpb25zID0gMDtcclxuICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNBbnlPZk1hdGNoaW5nc1F1ZXN0aW9uVHlwZShpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWxRdWVzdGlvbnMrKztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pc0NvcnJlY3QpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ycmVjdFF1ZXN0aW9ucysrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvcnJlY3RRdWVzdGlvbnMgKz0gaXRlbS5ncmFkZXMuZmlsdGVyKGcgPT4gZy5ncmFkZT4wKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsUXVlc3Rpb25zID0gcmVzdWx0Lmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29ycmVjdEFuc3dlcnNQZXJjZW50YWdlID0gTWF0aC5yb3VuZCh0aGlzLmNvcnJlY3RRdWVzdGlvbnMgKiAxMDAgLyB0aGlzLnRvdGFsUXVlc3Rpb25zKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdCgncXVpenplc0FyZUxvYWRlZCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUXVlc3Rpb25IYXNBbnN3ZXIocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgYW5zd2VyID0gdGhpcy5nZXRBbnN3ZXJGb3JRdWVzdGlvbihxdWVzdGlvbik7XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0hPUlRfQU5TV0VSXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYW5zd2VyICYmICEhYW5zd2VyLmFuc3dlclRleHQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9BVURJT19SRVNQT05TRV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFuc3dlciAmJiAhIWFuc3dlci5qc29uRGF0YTtcclxuICAgICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0hPUlRfQU5TV0VSX1dJVEhfVVBMT0FEXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYW5zd2VyICYmICghIWFuc3dlci5hbnN3ZXJUZXh0IHx8ICEhYW5zd2VyLmpzb25EYXRhKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuRklMTEFCTEVfRk9STV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhcXVlc3Rpb24ucmVzcG9uc2VEYXRhLmJ1bmRsZUZpbGVLZXk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhYW5zd2VyXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmludFF1aXpQcm9ncmVzc1N0YXRpc3RpY3MoZGl2SWQ6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBwcmludFVzZXIgPSBcIlwiO1xyXG4gICAgICAgIGxldCBwcmludEdyb3VwID0gXCJcIjtcclxuICAgICAgICBsZXQgaHRtbCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZ1bGxOYW1lID0gdGhpcy4kc2NvcGUuc2VsZWN0ZWRVc2VyRnVsbE5hbWU7XHJcbiAgICAgICAgaWYgKGZ1bGxOYW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZnVsbE5hbWUgPSBmdWxsTmFtZS5zcGxpdChcIihcIilbMF07XHJcbiAgICAgICAgICAgIGh0bWwgPSAnPGRpdj48aDU+PHN0cm9uZz46bGFiZWxVc2VyPC9zdHJvbmc+PHNwYW4+OnVzZXJOYW1lPC9zcGFuPjwvaDU+PC9kaXY+JztcclxuICAgICAgICAgICAgcHJpbnRVc2VyID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShodG1sKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6bGFiZWxVc2VyXCIsIFwiVXNlciBuYW1lOiBcIilcclxuICAgICAgICAgICAgICAgIC53aXRoKFwiOnVzZXJOYW1lXCIsIGZ1bGxOYW1lKVxyXG4gICAgICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbGlua1RhZ1RlbXBsYXRlID0gJzxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwiOnN0eWxlU2hlZXRIcmVmXCIgLz4nO1xyXG4gICAgICAgIGxldCBsaW5rVGFnczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLmhyZWYpIHtcclxuICAgICAgICAgICAgICAgIGxpbmtUYWdzLnB1c2goU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShsaW5rVGFnVGVtcGxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6c3R5bGVTaGVldEhyZWZcIiwgZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0uaHJlZilcclxuICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBub2RlID0gYW5ndWxhci5lbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGl2SWQpKTtcclxuICAgICAgICBsZXQgdmhzR3JpZFBhZ2luYXRpb24gPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Zoc0dyaWRQYWdpbmF0aW9uJykpO1xyXG4gICAgICAgIGxldCBwcm9ncmVzc1N0YXRpc3RpY3NRdWVzdGlvbnNTY3JvbGwgPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnByb2dyZXNzLXN0YXRpc3RpY3MtcXVlc3Rpb25zLXNjcm9sbCcpKTtcclxuICAgICAgICBwcm9ncmVzc1N0YXRpc3RpY3NRdWVzdGlvbnNTY3JvbGwuYXR0cignY2xhc3MnLCAnJyk7XHJcbiAgICAgICAgdmhzR3JpZFBhZ2luYXRpb24uaGlkZSgpO1xyXG5cclxuICAgICAgICBsZXQgcHJpbnRhYmxlQ29udGVudCA9IG5vZGUuaHRtbCgpO1xyXG4gICAgICAgIHByaW50YWJsZUNvbnRlbnQgPSBwcmludGFibGVDb250ZW50LnJlcGxhY2UoXCJxdWl6LWl0ZW0gcXVpei1pdGVtX19sYXN0LXJlc3VsdFwiLCBcInF1aXotaXRlbSBxdWl6LWl0ZW1fX2xhc3QtcmVzdWx0IHF1aXotaXRlbV9fcHJpbnRhYmxlXCIpO1xyXG4gICAgICAgIHByb2dyZXNzU3RhdGlzdGljc1F1ZXN0aW9uc1Njcm9sbC5hdHRyKCdjbGFzcycsICdwcm9ncmVzcy1zdGF0aXN0aWNzLXF1ZXN0aW9ucy1zY3JvbGwnKTtcclxuICAgICAgICB2aHNHcmlkUGFnaW5hdGlvbi5zaG93KCk7XHJcblxyXG4gICAgICAgIGxldCBwb3B1cFdpbiA9IHdpbmRvdy5vcGVuKCcnLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgcG9wdXBXaW4uZG9jdW1lbnQub3BlbigpO1xyXG4gICAgICAgIHBvcHVwV2luLmRvY3VtZW50LndyaXRlKCc8aHRtbD48aGVhZD4nKTtcclxuICAgICAgICBsaW5rVGFncy5mb3JFYWNoKGwgPT4ge1xyXG4gICAgICAgICAgICBwb3B1cFdpbi5kb2N1bWVudC53cml0ZShsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBwb3B1cFdpbi5kb2N1bWVudC53cml0ZSgnPC9oZWFkPicpO1xyXG4gICAgICAgIHBvcHVwV2luLmRvY3VtZW50LndyaXRlKCc8Ym9keSBvbmxvYWQ9XCJ3aW5kb3cucHJpbnQoKVwiPicgKyBwcmludFVzZXIgKyBwcmludEdyb3VwICsgcHJpbnRhYmxlQ29udGVudCArICc8L2JvZHk+PC9odG1sPicpO1xyXG4gICAgICAgIHBvcHVwV2luLmRvY3VtZW50LmNsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFuc3dlckZvclF1ZXN0aW9uKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogSVF1aXpBbnN3ZXJSZXN1bHRFeHRlbmRlZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVpekFuc3dlclJlc3VsdHMuZmlsdGVyKGFyID0+IGFyLnF1ZXN0aW9uSWQgPT09IHF1ZXN0aW9uLmlkKS5wb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFyUXVpelBvaW50cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlc3VsdFBvaW50cyA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbFBvaW50cyA9IDA7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JTaG93ID0gW107XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvQmFjaygpOiBzdHJpbmcge1xyXG4gICAgICAgIHRoaXMucmVkaXJlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnBlcnNvbmFsUm91dGVyLnF1aXp6ZXNVcmwoKSkuYWJzVXJsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQW55T2ZNYXRjaGluZ3NRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgKFxyXG4gICAgICAgICAgICAgICBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLk1BVENISU5HX0FOU1dFUl0gfHxcclxuICAgICAgICAgICAgICAgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5ISURJTkdfT1BUSU9OU19NQVRDSElOR19BTlNXRVJdXHJcbiAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0ZpbGxJblRoZUJsYW5rUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuRklMTF9JTl9USEVfQkxBTktdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc011bHRpcGxlQ2hvaWNlTXVsdGlwbGVBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5NVUxUSVBMRV9DSE9JQ0VfTVVMVElQTEVfQU5TV0VSXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNdWx0aXBsZUNob2ljZVNpbmdsZUFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLk1VTFRJUExFX0NIT0lDRV9TSU5HTEVfQU5TV0VSXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG9ydEFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2hvcnRBbnN3ZXJBdWRpb1Jlc3BvbnNlUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0hPUlRfQU5TV0VSX0FVRElPX1JFU1BPTlNFXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG9ydEFuc3dlcldpdGhVcGxvYWRRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJfV0lUSF9VUExPQURdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0ZpbGxhYmxlRm9ybVF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiAgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5GSUxMQUJMRV9GT1JNXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTY2FsZWRBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNDQUxFRF9BTlNXRVJdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0hvdHNwb3RTaW5nbGVDaG9pY2VRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkhPVFNQT1RfU0lOR0xFX0NIT0lDRV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzSG90c3BvdE11bHRpcGxlQ2hvaWNlUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5IT1RTUE9UX01VTFRJUExFX0NIT0lDRV07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQnVuZGxlKGJ1bmRsZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElCdW5kbGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idW5kbGVTZXJ2aWNlLmdldEJ1bmRsZShidW5kbGVJZClcclxuICAgICAgICAgICAgLnRoZW4oYnVuZGxlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVuZGxlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRBdWRpb1Jlc3BvbnNlVXJscyhidW5kbGVJZDogbnVtYmVyLCBhdWRpb1Jlc3BvbnNlczogSVF1aXpBbnN3ZXJSZXN1bHRFeHRlbmRlZFtdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sb2FkQnVuZGxlKGJ1bmRsZUlkKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhdWRpb1Jlc3BvbnNlcy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHIucmVzcG9uc2VEYXRhID0gSlNPTi5wYXJzZShyLmpzb25EYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoci5yZXNwb25zZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5idW5kbGVGaWxlVXJsID0gdGhpcy5idW5kbGUuZmlsZXNNYXAuaGFzKHIucmVzcG9uc2VEYXRhLmJ1bmRsZUZpbGVLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYnVuZGxlLmZpbGVzTWFwLmdldChyLnJlc3BvbnNlRGF0YS5idW5kbGVGaWxlS2V5KS51cmxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkUXVpelJlc3VsdCgpOiBJUHJvbWlzZTxJUXVpelJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1aXpTZXJ2aWNlLmdldFF1aXpSZXN1bHQodGhpcy5xdWl6SWQsIHRoaXMucXVpelJlc3VsdElkLCB0aGlzLiRzY29wZS5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHRoaXMucXVpelJlc3VsdCA9IHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVybEZvckF0dGFjaG1lbnQoZmlsZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5idW5kbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVuZGxlLmZpbGVzTWFwLmhhcyhmaWxlLmJ1bmRsZUZpbGVLZXkpXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuYnVuZGxlLmZpbGVzTWFwLmdldChmaWxlLmJ1bmRsZUZpbGVLZXkpLnVybFxyXG4gICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1F1aXpEZXRhaWxzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNRdWl6RGV0YWlsc0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc1F1aXpEZXRhaWxzQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzUXVpekRldGFpbHNDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIHF1aXpSZXN1bHRJZDogXCI9XCIsXHJcbiAgICAgICAgICAgIHNob3dRdWl6RGV0YWlsc0hlYWRlcjogXCI9P3Zoc1Nob3dRdWl6RGV0YWlsc0hlYWRlclwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VJZDogXCI9P3Zoc0NvdXJzZUlkXCIsXHJcbiAgICAgICAgICAgIHF1aXpUb3RhbFBvaW50czogXCI9P3F1aXpUb3RhbFBvaW50c1wiLFxyXG4gICAgICAgICAgICBjYW5WaWV3T3RoZXJVc2VyUHJvZ3Jlc3M6IFwiPT92aWV3T3RoZXJVc2VyUHJvZ3Jlc3NcIixcclxuICAgICAgICAgICAgc2VsZWN0ZWRVc2VyRnVsbE5hbWU6IFwiPVwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtcXVpei1kZXRhaWxzLmh0bWxcIilcclxuICAgIH1cclxufVxyXG5cclxuVmhzUXVpekRldGFpbHNEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0lCdXNpbmVzc1VuaXR9IGZyb20gXCIuLi9idXNpbmVzc1VuaXRzL21vZGVscy9JQnVzaW5lc3NVbml0XCI7XHJcbmltcG9ydCB7QnVzaW5lc3NVbml0c1NlcnZpY2V9IGZyb20gXCIuLi9idXNpbmVzc1VuaXRzL0J1c2luZXNzVW5pdHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UXVpekltcG9ydEV4cG9ydFNlcnZpY2V9IGZyb20gXCIuLi9xdWl6emVzL1F1aXpJbXBvcnRFeHBvcnRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVF1aXpSb3dJbnB1dH0gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6Um93SW5wdXRcIjtcclxuaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL1NlY3VyZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge1ByZWRlZmluZWRMYW5ndWFnZXNVdGlsc30gZnJvbSBcIi4uL3V0aWxzL1ByZWRlZmluZWRMYW5ndWFnZXNVdGlsc1wiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge1NldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzU2VydmljZVwiO1xyXG5pbXBvcnQge0lRdWl6fSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpcIjtcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtRdWl6Q29ycmVjdEFuc3dlcnNUeXBlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvUXVpekNvcnJlY3RBbnN3ZXJzVHlwZVwiO1xyXG5pbXBvcnQge1F1aXp6ZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1F1aXp6ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJUXVpekltcG9ydEV4cG9ydEVycm9yQ29kZX0gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6SW1wb3J0RXhwb3J0RXJyb3JDb2RlXCI7XHJcbmltcG9ydCB7SURpc2N1c3Npb25UaHJlYWR9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JRGlzY3Vzc2lvblRocmVhZFwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtRdWVzdGlvblR5cGV9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9RdWVzdGlvblR5cGVcIjtcclxuaW1wb3J0IExpc3QgPSBfLkxpc3Q7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlIGV4dGVuZHMgRmlsZSB7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzUXVpekltcG9ydEV4cG9ydERpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgaXNBYmxlVG9TYXZlOiBib29sZWFuO1xyXG5cclxuICAgIHZtOiBWaHNRdWl6SW1wb3J0RXhwb3J0RGlyZWN0aXZlQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc1F1aXpJbXBvcnRFeHBvcnREaXJlY3RpdmVDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUkNFTlRBR0VfVFlQRSA9IFwiUEVSQ0VOVEFHRVwiO1xyXG5cclxuICAgIHB1YmxpYyBxdWl6OiBJUXVpeiA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRzOiBBcnJheTxJQnVzaW5lc3NVbml0PiA9IFtdO1xyXG4gICAgcHVibGljIGZpbGU6IEZpbGU7XHJcbiAgICBwdWJsaWMgc3lzdGVtQWRtaW5pc3RyYXRvcjogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdElkOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGFyZVF1ZXN0aW9uc1RhZ3NMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBxdWVzdGlvbnNUYWdzOiBzdHJpbmdbXTtcclxuICAgIHB1YmxpYyBvbmVRdWVzdGlvbkF0QVRpbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93Q29ycmVjdEFuc3dlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc1Jlc2V0UHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzUXVpejogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNDaG9pY2VRdWVzdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzU3VydmV5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNGbGFzaGNhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgcHJldmlldzogSUZpbGU7XHJcbiAgICBwdWJsaWMgcHJldmlld1VybDogc3RyaW5nO1xyXG4gICAgcHVibGljIGhhc1ByZXZpZXdVcmxDYW5jZWxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBxdWVzdGlvbk9yZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcGVyY2VudGFnZU51bWJlcjogbnVtYmVyO1xyXG4gICAgcHVibGljIHBvaW50c051bWJlcjogbnVtYmVyO1xyXG4gICAgcHVibGljIGRpc2FibGVkU2F2ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBpc0FibGVUb1NhdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpbXBvcnRRdWl6Um93TGlzdDogTGlzdDxJUXVpelJvd0lucHV0PjtcclxuICAgIHB1YmxpYyBuZXdUaHJlYWQ6IElEaXNjdXNzaW9uVGhyZWFkO1xyXG5cclxuICAgIHB1YmxpYyBET1dOTE9BRF9URU1QTEFURV9MSU5LOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgRE9XTkxPQURfRkxBU0hDQVJEX1RFTVBMQVRFX0xJTks6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IEFycmF5PElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzPiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBkZWZhdWx0UXVpejogSVF1aXo7XHJcblxyXG4gICAgcHVibGljIHVzZXI6IElVc2VySW5mbztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2V0dGluZ3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUXVpekltcG9ydEV4cG9ydFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBRdWl6emVzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSAkc2NvcGU6IElWaHNRdWl6SW1wb3J0RXhwb3J0RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYnVzaW5lc3NVbml0c1NlcnZpY2U6IEJ1c2luZXNzVW5pdHNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBxdWl6SW1wb3J0RXhwb3J0U2VydmljZTogUXVpekltcG9ydEV4cG9ydFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBxdWl6emVzUm91dGVyOiBRdWl6emVzUm91dGVyKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0UXVpeiA9IHtcclxuICAgICAgICAgICAgcXVlc3Rpb25zOiBbXSxcclxuICAgICAgICAgICAgY29ycmVjdEFuc3dlcnNUeXBlOiAnUEVSQ0VOVEFHRScsXHJcbiAgICAgICAgICAgIGdlbmVyYXRlRnJvbUJhbms6IGZhbHNlLFxyXG4gICAgICAgICAgICBudW1iZXJPZlF1ZXN0aW9uczogbnVsbCxcclxuICAgICAgICAgICAgb25lUXVlc3Rpb25BdEFUaW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvd0NvcnJlY3RBbnN3ZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICByZXF1aXJlQWxsQW5zd2VyczogZmFsc2UsXHJcbiAgICAgICAgICAgIGV4Y2x1ZGVDb3JyZWN0bHlBbnN3ZXJlZFF1ZXN0aW9uczogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0UXVpei5vd25lcklkID0gdXNlci5pZDtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0UXVpei5vd25lck5hbWUgPSB1c2VyLmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSB1c2VyLmFsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgIGlmICh1c2VyLmFsbEJ1c2luZXNzVW5pdHMgfHwgdXNlci5idXNpbmVzc1VuaXRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLlFVSVopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFF1aXoubGFuZ3VhZ2VJZCA9IFByZWRlZmluZWRMYW5ndWFnZXNVdGlscy5kZXRlcm1pbmVSZWxhdGVkTGFuZ3VhZ2VJZCh1c2VyLmxvY2FsZSk7XHJcbiAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weSh0aGlzLmRlZmF1bHRRdWl6LCB0aGlzLnF1aXopO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZFF1ZXN0aW9uc1RhZ3MoKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkQnVzaW5lc3NVbml0cygpO1xyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnRhZ2VOdW1iZXIgPSA3MDtcclxuXHJcbiAgICAgICAgdGhpcy5ET1dOTE9BRF9URU1QTEFURV9MSU5LID0gdGhpcy5nZXREb3dubG9hZFRlbXBsYXRlTGluaygpO1xyXG4gICAgICAgIHRoaXMuRE9XTkxPQURfRkxBU0hDQVJEX1RFTVBMQVRFX0xJTksgPSB0aGlzLmdldERvd25sb2FkRmxhc2hjYXJkVGVtcGxhdGVMaW5rKCk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUltcG9ydFR5cGUoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS4kb24oRXZlbnQuUVVJWl9TVVJWRVlfSU1QT1JUX1VQREFURSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUltcG9ydFR5cGUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChcIiNjYW5jZWxCdXR0b25cIikub24oXCJjbGlja1wiLCAoZTogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm0oKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoXCIjY2xvc2VCdXR0b25cIikub24oXCJjbGlja1wiLCAoZTogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm0oKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyAkKCcubW9kYWwnKS5vbihcImhpZGRlbi5icy5tb2RhbFwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIC8vICAgICBpZiAoJCgnLm1vZGFsOnZpc2libGUnKS5sZW5ndGgpIHtcclxuICAgICAgICAvLyAgICAgICAgICQoJ2JvZHknKS5hZGRDbGFzcygnbW9kYWwtb3BlbicpO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVJbXBvcnRUeXBlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLiRsb2NhdGlvbi5wYXRoKCkuaW5kZXhPZihRdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFJvdXRlKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25CdXR0b25UeXBlQ2xpY2soJ1NVUlZFWScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4kbG9jYXRpb24ucGF0aCgpLmluZGV4T2YoUXVpenplc1JvdXRlci5xdWl6emVzSW5kZXhSb3V0ZSkgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uQnV0dG9uVHlwZUNsaWNrKCdRVUlaJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiRsb2NhdGlvbi5wYXRoKCkuaW5kZXhPZihRdWl6emVzUm91dGVyLmZsYXNoY2FyZHNJbmRleFJvdXRlKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25CdXR0b25UeXBlQ2xpY2soJ0ZMQVNIQ0FSRCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWxlY3REaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5idXNpbmVzc1VuaXRzID09IHVuZGVmaW5lZCB8fCB0aGlzLmJ1c2luZXNzVW5pdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQnVzaW5lc3NVbml0cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEJ1c2luZXNzVW5pdHNGb3JTZWxlY3RvcigpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzID0gPEFycmF5PElCdXNpbmVzc1VuaXQ+PnJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QnVzaW5lc3NVbml0U2VsZWN0b3JWaXNpYmxlKCkge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0VmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQnVzaW5lc3NVbml0Q2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvYWRQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhTZWN1cmVkT2JqZWN0VHlwZS5RVUlaKTtcclxuICAgICAgICB0aGlzLiR0aW1lb3V0KGEgPT4gdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKHNlY3VyZWRPYmplY3RUeXBlOiBTZWN1cmVkT2JqZWN0VHlwZSwgb2JqZWN0SWQ/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gW107XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0QWxsT2JqZWN0UGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoc2VjdXJlZE9iamVjdFR5cGUsIG9iamVjdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMgPSByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkUXVlc3Rpb25zVGFncygpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRRdWVzdGlvbnNUYWdzKG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKChxdWVzdGlvbnNUYWdzOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zVGFncyA9IHF1ZXN0aW9uc1RhZ3Muc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih0YWcgPT4gdGFnICE9IHVuZGVmaW5lZCAmJiB0YWcgIT0gbnVsbCAmJiB0YWcubGVuZ3RoID4gMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFyZVF1ZXN0aW9uc1RhZ3NMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRQcmV2aWV3KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2aWV3VXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlld1VybCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5oYXNQcmV2aWV3VXJsQ2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUmVzZXRQcmV2aWV3ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0T3duZXJzVXJsKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBiYXNlVXJsOiBzdHJpbmcgPSBcIi9hcGkvdXNlclNlbGVjdG9yL3VzZXJzXCI7XHJcbiAgICAgICAgcmV0dXJuIGJ1c2luZXNzVW5pdElkXHJcbiAgICAgICAgICAgID8gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShiYXNlVXJsICsgXCI/YnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkXCIpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC5idWlsZCgpXHJcbiAgICAgICAgICAgIDogYmFzZVVybDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3duZXJDaGFuZ2VDYWxsYmFjayA9IChzZWxlY3RlZDogYm9vbGVhbiwgbmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWl6Lm93bmVyTmFtZSA9IHNlbGVjdGVkID8gbmFtZSA6IG51bGw7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBpc1NhdmVBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBYmxlVG9TYXZlID0gdGhpcy5maWxlICE9IG51bGwgJiYgdGhpcy5xdWl6LnN1YmplY3RJZCAhPSBudWxsICYmIHRoaXMucXVpei5sYW5ndWFnZUlkICE9IG51bGwgJiYgdGhpcy5xdWl6Lm93bmVySWQgIT0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25HZW5lcmF0ZUZyb21CYW5rQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5xdWl6LmdlbmVyYXRlRnJvbUJhbmsgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1aXoubnVtYmVyT2ZRdWVzdGlvbnMgPSAxO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXouY29ycmVjdEFuc3dlcnNUeXBlID0gUXVpekNvcnJlY3RBbnN3ZXJzVHlwZVtRdWl6Q29ycmVjdEFuc3dlcnNUeXBlLlBFUkNFTlRBR0VdO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXoucXVlc3Rpb25zSW5BY2NvcmRhbmNlV2l0aFNlcXVlbmNlTnVtYmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25PcmRlciA9ICF0aGlzLnF1aXoucXVlc3Rpb25zSW5BY2NvcmRhbmNlV2l0aFNlcXVlbmNlTnVtYmVyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWl6LmdlbmVyYXRlRnJvbUJhbmsgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6Lm51bWJlck9mUXVlc3Rpb25zID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNGbGFzaGNhcmQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpei5leGNsdWRlQ29ycmVjdGx5QW5zd2VyZWRRdWVzdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbmRFcnJvcnMocXVpelJvd0xpc3Q6IEFycmF5PElRdWl6Um93SW5wdXQ+KTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGlzSGFzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICBxdWl6Um93TGlzdC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUuZXJyb3JGbGFnID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGlzSGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlzSGFzRXJyb3I7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVycm9yTWVzc2FnZUJ5RXJyb3JDb2RlKGNvZGVJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gSVF1aXpJbXBvcnRFeHBvcnRFcnJvckNvZGVbY29kZUlkXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW1wb3J0UXVpekZyb21GaWxlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2F2ZUF2YWlsYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMucXVpekltcG9ydEV4cG9ydFNlcnZpY2UuZ2V0UXVpelJvdyh0aGlzLmZpbGUsIHRoaXMuaXNRdWl6ID8gJ1F1aXonIDogdGhpcy5pc1N1cnZleSA/ICdTdXJ2ZXknIDogXCJGbGFzaGNhcmRcIikudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCAhPSAwIHx8IHJlc3VsdC5sZW5ndGggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDaG9pY2VRdWVzdGlvbiA9IHRoaXMuY2hlY2tRdWl6V2l0aENob2ljZVR5cGUocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maW5kRXJyb3JzKHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRRdWl6Um93TGlzdCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRXJyb3JEaWFsb2coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXouY29ycmVjdEFuc3dlcnNOdW1iZXIgPSB0aGlzLnF1aXouY29ycmVjdEFuc3dlcnNUeXBlID09IFZoc1F1aXpJbXBvcnRFeHBvcnREaXJlY3RpdmVDb250cm9sbGVyLlBFUkNFTlRBR0VfVFlQRSA/IHRoaXMucGVyY2VudGFnZU51bWJlciA6IHRoaXMucG9pbnRzTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpei5xdWl6VHlwZSA9IHRoaXMuaXNRdWl6ID8gXCJRVUlaXCIgOiB0aGlzLmlzU3VydmV5ID8gXCJTVVJWRVlcIiA6IFwiRkxBU0hDQVJEXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6LnF1ZXN0aW9uc0luQWNjb3JkYW5jZVdpdGhTZXF1ZW5jZU51bWJlciA9ICF0aGlzLnF1ZXN0aW9uT3JkZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNRdWl6KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIocmVzID0+IHJlcy50eXBlLnRvU3RyaW5nKCkgIT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TQ0FMRURfQU5TV0VSXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ZsYXNoY2FyZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXoub25lUXVlc3Rpb25BdEFUaW1lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6LnNob3dDb3JyZWN0QW5zd2VycyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXpJbXBvcnRFeHBvcnRTZXJ2aWNlLmNyZWF0ZVF1aXpGcm9tRmlsZShyZXN1bHQsIHRoaXMucXVpeikudGhlbigoY3JlYXRlZFF1aXpJZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZWRRdWl6SWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGaWxlIHN0cnVjdHVyZSBpcyBpbnZhbGlkIG9yIHVua25vd24gZW5jb2Rpbmcgd2FzIHByb3ZpZGVkLiBBY2NlcHRlZCBlbmNvZGluZ3MgYXJlOiBVVEYtOCwgYW5zaS5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3ModGhpcy5pc1F1aXogPyBcIlF1aXogc3VjY2Vzc2Z1bGx5IGFkZGVkXCIgOiB0aGlzLmlzU3VydmV5ID8gXCJTdXJ2ZXkgc3VjY2Vzc2Z1bGx5IGFkZGVkXCIgOiBcIkZsYXNoY2FyZCBzdWNjZXNzZnVsbHkgYWRkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmlzUXVpeiA/IHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzVXBkYXRlVXJsKGNyZWF0ZWRRdWl6SWQpIDogdGhpcy5pc1N1cnZleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnF1aXp6ZXNSb3V0ZXIuc3VydmV5c1VwZGF0ZVVybChjcmVhdGVkUXVpeklkKSA6IHRoaXMucXVpenplc1JvdXRlci5mbGFzaGNhcmRzVXBkYXRlVXJsKGNyZWF0ZWRRdWl6SWQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcIi5jbG9zZVwiKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygnbW9kYWwtb3BlbicpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJy5tb2RhbC1iYWNrZHJvcCcpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZpbGUgc3RydWN0dXJlIGlzIGludmFsaWQgb3IgdW5rbm93biBlbmNvZGluZyB3YXMgcHJvdmlkZWQuIEFjY2VwdGVkIGVuY29kaW5ncyBhcmU6IFVURi04LCBhbnNpLlwiKTtcclxuICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAkKCcjaW5mb0RpYWxvZycpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgICAgICAgICAkKCcjaW5mb0ZsYXNoY2FyZERpYWxvZycpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ21vZGFsLW9wZW4nKTtcclxuICAgICAgICAgICAgICAgICQoJy5tb2RhbC1iYWNrZHJvcCcpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkNoZWNrIGNvcnJlY3RuZXNzIG9mIGVudGVyZWQgZGF0YVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERvd25sb2FkVGVtcGxhdGVMaW5rKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVpekltcG9ydEV4cG9ydFNlcnZpY2UuZ2V0RG93bmxvYWRUZW1wbGF0ZVVybCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREb3dubG9hZEZsYXNoY2FyZFRlbXBsYXRlTGluaygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1aXpJbXBvcnRFeHBvcnRTZXJ2aWNlLmdldERvd25sb2FkRmxhc2hjYXJkVGVtcGxhdGVVcmwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3Blbk1vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjaW5mb0RpYWxvZ1wiKS5tb2RhbChcInRvZ2dsZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlbkZsYXNoY2FyZE1vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjaW5mb0ZsYXNoY2FyZERpYWxvZ1wiKS5tb2RhbChcInRvZ2dsZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsRXJyb3JEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgJChcIiNlcnJvckRpYWxvZ1wiKS5yZW1vdmVDbGFzcyhcImluXCIpO1xyXG4gICAgICAgICQoXCIjZXJyb3JEaWFsb2dcIikuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlbkVycm9yRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjZXJyb3JEaWFsb2dcIikuYWRkQ2xhc3MoXCJpblwiKTtcclxuICAgICAgICAkKFwiI2Vycm9yRGlhbG9nXCIpLmNzcygnZGlzcGxheScsICdibG9jaycpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CdXR0b25UeXBlQ2xpY2sodHlwZU9mQ3JlYXRpb246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0eXBlT2ZDcmVhdGlvbiA9PSAnUVVJWicpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1F1aXogPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmlzU3VydmV5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNGbGFzaGNhcmQgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVPZkNyZWF0aW9uID09ICdTVVJWRVknKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNRdWl6ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdXJ2ZXkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRmxhc2hjYXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucXVpei5zaG93Q29ycmVjdEFuc3dlcnMgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVPZkNyZWF0aW9uID09ICdGTEFTSENBUkQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNRdWl6ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdXJ2ZXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0ZsYXNoY2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucXVpei5xdWVzdGlvbnNJbkFjY29yZGFuY2VXaXRoU2VxdWVuY2VOdW1iZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbk9yZGVyID0gIXRoaXMucXVpei5xdWVzdGlvbnNJbkFjY29yZGFuY2VXaXRoU2VxdWVuY2VOdW1iZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZvcm0oKSB7XHJcbiAgICAgICAgdGhpcy5maWxlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucXVpei5idXNpbmVzc1VuaXRJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnF1aXouc3ViamVjdElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucXVpei5sYW5ndWFnZUlkID0gUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzLmRldGVybWluZVJlbGF0ZWRMYW5ndWFnZUlkKHRoaXMudXNlci5sb2NhbGUpO1xyXG4gICAgICAgIHRoaXMucXVpei5vd25lcklkID0gdGhpcy51c2VyLmlkO1xyXG4gICAgICAgIHRoaXMucXVpei5zdW1tYXJ5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucXVpei5vbmVRdWVzdGlvbkF0QVRpbWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnF1aXouZ2VuZXJhdGVGcm9tQmFuayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucXVpei5zaG93Q29ycmVjdEFuc3dlcnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucXVpei5leGNsdWRlQ29ycmVjdGx5QW5zd2VyZWRRdWVzdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnF1aXouc2hvd1F1ZXN0aW9uTnVtYmVycyA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMucXVpei5yZXF1aXJlQWxsQW5zd2VycyA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbk9yZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5xdWl6Lm51bWJlck9mUXVlc3Rpb25zID0gbnVsbDtcclxuICAgICAgICAkKFwiI2lucHV0Rm9ybVVybFwiKS5zY3JvbGxUb3AoMClcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrUXVpeldpdGhDaG9pY2VUeXBlKHF1aXpSb3dMaXN0OiBBcnJheTxJUXVpelJvd0lucHV0Pik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICBxdWl6Um93TGlzdC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUudG9TdHJpbmcoKSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLk1VTFRJUExFX0NIT0lDRV9NVUxUSVBMRV9BTlNXRVJdIHx8IHZhbHVlLnR5cGUudG9TdHJpbmcoKSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLk1VTFRJUExFX0NIT0lDRV9TSU5HTEVfQU5TV0VSXS50b1N0cmluZygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlYWN0aXZhdGVNYWluQ29udGVudCgpIHtcclxuICAgICAgICBsZXQgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZGl2I21haW5Db250ZW50XCIpO1xyXG4gICAgICAgIGxldCBtYWluTG9hZGluZ0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZGl2I21haW5Db250ZW50TG9hZGluZ1wiKTtcclxuICAgICAgICBtYWluRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgIG1haW5Mb2FkaW5nRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWN0aXZhdGVNYWluQ29udGVudCgpIHtcclxuICAgICAgICBsZXQgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZGl2I21haW5Db250ZW50XCIpO1xyXG4gICAgICAgIGxldCBtYWluTG9hZGluZ0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZGl2I21haW5Db250ZW50TG9hZGluZ1wiKTtcclxuICAgICAgICBtYWluRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgIG1haW5Mb2FkaW5nRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xlYXJJbXBvcnRNb2RhbCgpIHtcclxuICAgICAgICB0aGlzLmZpbGUgPSBudWxsO1xyXG4gICAgICAgIGFuZ3VsYXIuY29weSh0aGlzLmRlZmF1bHRRdWl6LCB0aGlzLnF1aXopO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1F1aXpJbXBvcnRFeHBvcnREaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc1F1aXpJbXBvcnRFeHBvcnREaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNRdWl6SW1wb3J0RXhwb3J0RGlyZWN0aXZlQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiRUFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc1F1aXpJbXBvcnRFeHBvcnREaXJlY3RpdmVDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIElzQWJsZVRvU2F2ZTogXCI9P3Zoc0lzQWJsZVRvU2F2ZVwiLFxyXG4gICAgICAgICAgICBmaWxlOiBcIj0/dmhzSW1wb3J0RmlsZVwiLFxyXG4gICAgICAgICAgICBxdWl6OiBcIj0/dmhzSW1wb3J0UXVpelwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9pbXBvcnQtcXVpei10ZW1wbGF0ZS5odG1sXCIpLFxyXG4gICAgfTtcclxufVxyXG5cclxuVmhzUXVpekltcG9ydEV4cG9ydERpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG5cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUXVpen0gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6XCI7XHJcbmltcG9ydCBJUHJvbWlzZSA9IGFuZ3VsYXIuSVByb21pc2U7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4uL2NvdXJzZXMvQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge1F1aXpTZXJ2aWNlfSBmcm9tIFwiLi4vcXVpenplcy9RdWl6U2VydmljZVwiO1xyXG5pbXBvcnQge0lRdWl6UmVzdWx0fSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpSZXN1bHRcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0lRdWl6UXVlc3Rpb259IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpelF1ZXN0aW9uXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVF1aXpBbnN3ZXJ9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpekFuc3dlclwiO1xyXG5pbXBvcnQge0lRdWl6QW5zd2VyUmVzdWx0fSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpBbnN3ZXJSZXN1bHRcIjtcclxuaW1wb3J0IHtDb21tb25OYXZpZ2F0aW9ufSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vbk5hdmlnYXRpb25cIjtcclxuaW1wb3J0IHtJU2VjdGlvbn0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lTZWN0aW9uXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25UeXBlfSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvUXVlc3Rpb25UeXBlXCI7XHJcbmltcG9ydCB7Q291cnNlRGV0YWlsc0NvbnRyb2xsZXJ9IGZyb20gXCIuLi9jb3Vyc2VzL0NvdXJzZURldGFpbHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuL21vZGVscy9FdmVudFwiO1xyXG5pbXBvcnQge1F1aXpSZXN1bHRTdGF0dXN9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9RdWl6UmVzdWx0U3RhdHVzXCI7XHJcbmltcG9ydCB7UXVpenplc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvUXVpenplc1JvdXRlclwiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlQnVuZGxlVXRpbHMsIElCdW5kbGVJbnB1dEluZm99IGZyb20gXCIuLi91dGlscy9Db3Vyc2VCdW5kbGVVdGlsc1wiO1xyXG5pbXBvcnQge0lGaWxlVXBsb2FkSW5mb30gZnJvbSBcIi4uL3N0b3JhZ2UvbW9kZWxzL0lGaWxlVXBsb2FkSW5mb1wiO1xyXG5pbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi9idW5kbGVzL0J1bmRsZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtVcGxvYWRVdGlsc30gZnJvbSBcIi4uL3V0aWxzL1VwbG9hZFV0aWxzXCI7XHJcbmltcG9ydCB7SUJ1bmRsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVcIjtcclxuaW1wb3J0IHtJQnVuZGxlRmlsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVGaWxlXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Qcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VjdGlvblByb2dyZXNzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSVNlY3Rpb25Qcm9ncmVzc1wiO1xyXG5pbXBvcnQge0NvbnRlbnRVdGlsc30gZnJvbSBcIi4uL3V0aWxzL0NvbnRlbnRVdGlsc1wiO1xyXG5pbXBvcnQge1VwbG9hZHNTZXJ2aWNlfSBmcm9tIFwiLi4vc3RvcmFnZS9VcGxvYWRzU2VydmljZVwiO1xyXG5pbXBvcnQge1JhbmRvbVV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvUmFuZG9tVXRpbHNcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0lRdWl6T3B0aW9ufSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpPcHRpb25cIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSAnLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZSc7XHJcblxyXG5pbnRlcmZhY2UgSVF1aXpRdWVzdGlvbkV4dGVuZGVkIGV4dGVuZHMgSVF1aXpRdWVzdGlvbiB7XHJcbiAgICBmaWxlTGlzdD86IElGaWxlRXh0ZW5kZWRbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIElGaWxlRXh0ZW5kZWQgZXh0ZW5kcyBGaWxlIHtcclxuICAgIGJ1bmRsZUZpbGVLZXk/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJVmhzUXVpelN1cnZleUFuc3dlcmluZ0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgY291cnNlUHJvZ3Jlc3NJZD86IG51bWJlcjtcclxuICAgIHNlY3Rpb24/OiBJU2VjdGlvbjtcclxuICAgIGxhc3RTZWN0aW9uSW5Db3Vyc2U/OiBib29sZWFuO1xyXG4gICAgcXVpeklkOiBudW1iZXI7XHJcbiAgICBwcm9ncmVzc0J1bmRsZT86IElCdW5kbGU7XHJcbiAgICBxdWl6UGFzc2luZz86IGJvb2xlYW47XHJcbiAgICB2bT86IFZoc1F1aXpTdXJ2ZXlBbnN3ZXJpbmdDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzUXVpelN1cnZleUFuc3dlcmluZ0NvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgTUFYX1JFQ1VSU0lPTl9ERVBUSCA9IDM7XHJcblxyXG4gICAgcHVibGljIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGNvdXJzZTogSUNvdXJzZSA9IHt9O1xyXG4gICAgcHVibGljIG1vZHVsZUlkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2VjdGlvbklkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2VjdGlvbjogSVNlY3Rpb247XHJcbiAgICBwdWJsaWMgaXNRdWl6TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvbXBsaXRlUmVzdWx0SWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzaG93RWRpdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgcXVpeklkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcXVpejogSVF1aXogPSB7fTtcclxuICAgIHB1YmxpYyBxdWl6UmVzdWx0czogQXJyYXk8SVF1aXpSZXN1bHQ+ID0gW107XHJcbiAgICBwdWJsaWMgcXVpekN1cnJlbnRSZXN1bHQ6IElRdWl6UmVzdWx0ID0ge307XHJcbiAgICBwdWJsaWMgbGFzdFF1aXpSZXN1bHQ6IElRdWl6UmVzdWx0ID0ge307XHJcbiAgICBwdWJsaWMgcXVpekR1cmF0aW9uOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcXVpeldhcm5pbmdUaW1lb3V0SWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBxdWl6UGFzc2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHF1aXpDdXJyZW50UXVlc3Rpb246IElRdWl6UXVlc3Rpb24gPSB7fTtcclxuICAgIHB1YmxpYyBxdWl6Q3VycmVudFF1ZXN0aW9uSW5kZXg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBxdWl6UXVlc3Rpb25BbnN3ZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHF1aXpFbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRpc2FibGVDb21wbGV0ZVF1aXpCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBkaXNhYmxlQW5zd2VyczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHF1aXpDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBkaXNhYmxlU3VibWl0Q3VycmVudFF1ZXN0aW9uQW5zd2VyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbGFzdFNlY3Rpb25JbkNvdXJzZTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBsbXNRdWl6Q29tcGxldGVMaXN0ZW5lcnM6IEFycmF5PCgpID0+IGFueT4gPSBbXTtcclxuICAgIHB1YmxpYyBjdXJyZW50UWl1elF1ZXN0aW9uczogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBwcm9ncmVzc0J1bmRsZTogSUJ1bmRsZTtcclxuICAgIHB1YmxpYyBpc1JlY29yZGVyUmVzZXQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcmVjb3JkaW5nUHJvbWlzZXM6IGFuZ3VsYXIuSVByb21pc2U8YW55PltdO1xyXG4gICAgcHVibGljIHJlY29yZFVybEZvclF1ZXN0aW9uSWQ6IE1hcDxudW1iZXIsIHN0cmluZz47XHJcbiAgICBwdWJsaWMgdXBkYXRlQnVuZGxlUHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxhbnk+O1xyXG5cclxuICAgIHByaXZhdGUgc2VjdGlvblByb2dyZXNzOiBJU2VjdGlvblByb2dyZXNzO1xyXG5cclxuICAgIHB1YmxpYyBpc1RhZ3NTZWxlY3Rpb25Nb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGlzYWJsZVRhZ3NTZWxlY3Rpb25CdXR0b25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcXVlc3Rpb25zVGFnczogc3RyaW5nW107XHJcbiAgICBwdWJsaWMgY3VycmVudFF1ZXN0aW9uc1RhZ3M6IHN0cmluZ1tdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkUXVpelRhZ3M6IHN0cmluZ1tdO1xyXG4gICAgcHVibGljIGlzRmlsZVVwbG9hZHNFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGlzYWJsZWRTdGFydEJ1dHRvbjogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBjaGVja0ZsYXNoY2FyZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNob3dDYXJkQWdhaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBxdWl6Q3VycmVudFF1ZXN0aW9uSW5kZXhDb3VudDogbnVtYmVyO1xyXG4gICAgcHVibGljIGZsYXNoY2FyZEN1cnJlbnRDYXJkSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHVibGljIHF1aXp6ZXNBcmVMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcmVjdXJzaW9uRGVwdGg6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nRGlhbG9nSWQ6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUXVpelNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZXR0aW5nc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb21tb25OYXZpZ2F0aW9uLk5BTUUsXHJcbiAgICAgICAgUXVpenplc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvbW1vbk5hdmlnYXRpb24uTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVuZGxlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVwbG9hZFV0aWxzLk5BTUUsXHJcbiAgICAgICAgUHJvZ3Jlc3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXBsb2Fkc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzUXVpelN1cnZleUFuc3dlcmluZ0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6U2VydmljZTogUXVpelNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb21tb25OYXZpZ2F0aW9uOiBDb21tb25OYXZpZ2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6emVzUm91dGVyOiBRdWl6emVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VEZXRhaWxzQ29udHJvbGxlcjogQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1bmRsZVNlcnZpY2U6IEJ1bmRsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVwbG9hZFV0aWxzOiBVcGxvYWRVdGlscyxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHJvZ3Jlc3NTZXJ2aWNlOiBQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVwbG9hZHNTZXJ2aWNlOiBVcGxvYWRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVzaW5lc3NVbml0c1NlcnZpY2U6IEJ1c2luZXNzVW5pdHNTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLnJlY29yZGluZ1Byb21pc2VzID0gW107XHJcbiAgICAgICAgdGhpcy5yZWNvcmRVcmxGb3JRdWVzdGlvbklkID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcclxuICAgICAgICAvKnRoaXMuY2xlYXJTZWN0aW9uUXVpelBhcmFtZXRlcnMoKTtcclxuICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzSWQgPSB0aGlzLiRzY29wZS5jb3Vyc2VQcm9ncmVzc0lkO1xyXG4gICAgICAgIHRoaXMubGFzdFNlY3Rpb25JbkNvdXJzZSA9IHRoaXMuJHNjb3BlLmxhc3RTZWN0aW9uSW5Db3Vyc2U7Ki9cclxuXHJcbiAgICAgICAgaWYgKCRzY29wZS5zZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWN0aW9uUXVpelBhcmFtZXRlcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkID0gdGhpcy4kc2NvcGUuY291cnNlUHJvZ3Jlc3NJZDtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0J1bmRsZSA9IHRoaXMuJHNjb3BlLnByb2dyZXNzQnVuZGxlO1xyXG4gICAgICAgICAgICAvKnRoaXMuY291cnNlSWQgPSB0aGlzLiRzY29wZS5zZWN0aW9uLmNvdXJzZUlkO1xyXG4gICAgICAgICAgICB0aGlzLm1vZHVsZUlkID0gdGhpcy4kc2NvcGUuc2VjdGlvbi5tb2R1bGVJZDsqL1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RTZWN0aW9uSW5Db3Vyc2UgPSB0aGlzLiRzY29wZS5sYXN0U2VjdGlvbkluQ291cnNlO1xyXG5cclxuICAgICAgICAgICAgJHNjb3BlLiR3YXRjaChcInNlY3Rpb25cIiwgdmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUlkID0gdGhpcy5zZWN0aW9uLmNvdXJzZUlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVJZCA9IHRoaXMuc2VjdGlvbi5tb2R1bGVJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXQodGhpcy5jb3Vyc2VJZCkudGhlbihyZXN1bHQgPT4gYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5jb3Vyc2UpKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlY3Rpb25JZCAhPSB0aGlzLnNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25JZCA9IHRoaXMuc2VjdGlvbi5pZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTZWN0aW9uKHRoaXMuc2VjdGlvbi5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFNlY3Rpb25Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1TdGF0aXN0aWNzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCRzY29wZS5xdWl6SWQpIHtcclxuICAgICAgICAgICAgJHNjb3BlLiR3YXRjaChcInF1aXpJZFwiLCB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXpJZCA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRRdWl6KHRoaXMucXVpeklkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNRdWl6TW9kZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1TdGF0aXN0aWNzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJFdmVudEhhbmRsZXIpO1xyXG4gICAgICAgICRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmRyYWdvdmVyRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRyYWdvdmVyRXZlbnRIYW5kbGVyOiAoZSkgPT4gdm9pZCA9IChlKSA9PiB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbm9uZSc7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc0ZpbGVVcGxvYWRzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkcm9wQXJlYUVsZW1lbnRzOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgICBcIi5maWxlLXVwbG9hZCBkaXZbbmdmLWRyb3BdLCAuZmlsZS11cGxvYWQgZGl2W25nZi1kcm9wXSBzcGFuXCJcclxuICAgICAgICApO1xyXG4gICAgICAgIGRyb3BBcmVhRWxlbWVudHMuZm9yRWFjaChlbGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW0gPT0gZS50YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkU2VjdGlvbihzZWN0aW9uSWQ6IG51bWJlcik6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0U2VjdGlvblF1aXoodGhpcy5jb3Vyc2VJZCwgdGhpcy5tb2R1bGVJZCwgc2VjdGlvbklkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMucXVpeik7XHJcbiAgICAgICAgICAgIHRoaXMucXVpeklkID0gdGhpcy5xdWl6LmlkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWl6LmlkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkU2VjdGlvblJlc3VsdHModGhpcy5xdWl6LmlkLCB0aGlzLnNlY3Rpb24uaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkUXVpeihxdWl6SWQ6IG51bWJlcik6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1aXpTZXJ2aWNlLmdldFF1aXpJbmZvKHRoaXMucXVpeklkKS50aGVuKHEgPT4ge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkocSwgdGhpcy5xdWl6KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkVXNlclF1aXpSZXN1bHQocXVpeklkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbG9hZFVzZXJRdWl6UmVzdWx0KHF1aXpJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5xdWl6U2VydmljZS5nZXRDdXJyZW50VXNlclF1aXpSZXN1bHRzKHF1aXpJZCwgXCJRVUlaXCIpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5xdWl6UmVzdWx0cyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy90aGlzLnF1aXpTZXJ2aWNlLnJlbW92ZUN1cnJlbnRSZXN1bHQodGhpcy5jb21wbGl0ZVJlc3VsdElkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUXVpelJlc3VsdChxdWl6SWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMucXVpelNlcnZpY2UuZ2V0Q3VycmVudFVzZXJRdWl6UmVzdWx0cyhxdWl6SWQsIFwiUVVJWlwiKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMucXVpelJlc3VsdHMpO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXpEdXJhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkU2VjdGlvblJlc3VsdHMocXVpeklkOiBudW1iZXIsIHNlY3Rpb25JZD86IG51bWJlcik6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1aXpTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUXVpelJlc3VsdHMocXVpeklkLCBcIkNPVVJTRVwiLCBzZWN0aW9uSWQsIHRoaXMuY291cnNlUHJvZ3Jlc3NJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdRdWl6IHJlc3VsdHMgYXJlIGxvYWRlZCcpO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0LCB0aGlzLnF1aXpSZXN1bHRzKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ291cnNlQ2VydGlmaWNhdGVzKCk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRMYXN0UXVpelJlc3VsdChxdWl6SWQ6IG51bWJlcik6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1aXpTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUXVpelJlc3VsdHMocXVpeklkLCBcIkNPVVJTRVwiLCB0aGlzLnNlY3Rpb25JZCwgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMucXVpelJlc3VsdHMpO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSwgdGhpcy5sYXN0UXVpelJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlQ2VydGlmaWNhdGVzKCk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmxhc3RTZWN0aW9uSW5Db3Vyc2UgJiYgdGhpcy5pc1F1aXpQYXNzZWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VEZXRhaWxzQ29udHJvbGxlci5sb2FkQ291cnNlQ2VydGlmaWNhdGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1F1aXooKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVpei5xdWl6VHlwZSA9PSBcIlFVSVpcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTdXJ2ZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVpei5xdWl6VHlwZSA9PSBcIlNVUlZFWVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0ZsYXNoY2FyZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6LnF1aXpUeXBlID09IFwiRkxBU0hDQVJEXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0UXVpeihmbGFzaGNhcmRNb2RlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1aXp6ZXNBcmVMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0FyZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRRdWVzdGlvbnNUYWdzKHRoaXMucXVpeklkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uc1RhZ3MubGVuZ3RoID4gMCAmJiB0aGlzLmN1cnJlbnRRdWVzdGlvbnNUYWdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFF1aXpUYWdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVRhZ3NTZWxlY3Rpb25CdXR0b25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUYWdzU2VsZWN0aW9uTW9kZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYXNoY2FyZE1vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRRdWl6SW50ZXJuYWwoZmxhc2hjYXJkTW9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0UXVpekludGVybmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0aGlzLnF1aXp6ZXNBcmVMb2FkaW5nID0gZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRRdWVzdGlvbnNUYWdzKHF1aXpJZD86IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICBsZXQgYnVzaW5lc3NVbml0VGFncyA9IFtdO1xyXG4gICAgICAgIGxldCBzeXN0ZW1UYWdzID0gW107XHJcbiAgICAgICAgbGV0IGN1cnJlbnRRdWl6VGFncyA9IFtdO1xyXG5cclxuICAgICAgICBsZXQgbG9hZEJ1c2luZXNzVW5pdFRhZ3MgPSB0aGlzLnF1aXouYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgPyB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEJ1c2luZXNzVW5pdFRhZ3ModGhpcy5xdWl6LmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKHF1ZXN0aW9uc1RhZ3M6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1c2luZXNzVW5pdFRhZ3MgPSBxdWVzdGlvbnNUYWdzLnNwbGl0KFwiLFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHRhZyA9PiB0YWcgIT0gdW5kZWZpbmVkICYmIHRhZy5sZW5ndGggPiAwKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVzaW5lc3NVbml0VGFncztcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIDogdGhpcy4kcS53aGVuKG51bGwpO1xyXG5cclxuICAgICAgICBsZXQgbG9hZFN5c3RlbVRhZ3MgPSB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRRdWVzdGlvbnNUYWdzKHF1aXpJZClcclxuICAgICAgICAgICAgLnRoZW4oKHF1ZXN0aW9uc1RhZ3M6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3lzdGVtVGFncyA9IHF1ZXN0aW9uc1RhZ3Muc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih0YWcgPT4gdGFnICE9IHVuZGVmaW5lZCAmJiB0YWcubGVuZ3RoID4gMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3lzdGVtVGFncztcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBsb2FkQ3VycmVudFF1aXpUYWdzID0gdGhpcy5xdWl6U2VydmljZS5nZXRRdWl6Rm9yUGFzc2luZyh0aGlzLnF1aXpJZCwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocXVpeiA9PiB7XHJcbiAgICAgICAgICAgICAgICBxdWl6LnF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXN0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UXVpelRhZ3MucHVzaC5hcHBseShjdXJyZW50UXVpelRhZ3MsIChxdWVzdGlvbi50YWdzICE9IG51bGwgJiYgcXVlc3Rpb24udGFncyAhPSB1bmRlZmluZWQgJiYgcXVlc3Rpb24udGFncy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHF1ZXN0aW9uLnRhZ3Muc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogW10pXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UXVpelRhZ3M7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICBsb2FkQnVzaW5lc3NVbml0VGFncyxcclxuICAgICAgICAgICAgbG9hZFN5c3RlbVRhZ3MsXHJcbiAgICAgICAgICAgIGxvYWRDdXJyZW50UXVpelRhZ3NcclxuICAgICAgICBdKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNUYWdzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uc1RhZ3MgPSBbXTtcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0VGFncy5mb3JFYWNoKHQgPT4gdGhpcy5xdWVzdGlvbnNUYWdzLnB1c2godCkpO1xyXG4gICAgICAgICAgICBzeXN0ZW1UYWdzLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbnNUYWdzLmluZGV4T2YodCkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1RhZ3MucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGN1cnJlbnRRdWl6VGFncy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uc1RhZ3MuaW5kZXhPZih0KSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uc1RhZ3MucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc1RhZ3M7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN1Ym1pdFRhZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlVGFnc1NlbGVjdGlvbkJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhcnRRdWl6SW50ZXJuYWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsVGFncygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzVGFnc1NlbGVjdGlvbk1vZGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXJ0UXVpekludGVybmFsKGZsYXNoY2FyZE1vZGU/OiBzdHJpbmcpIHtcclxuICAgICAgICBpZighdGhpcy5xdWl6UGFzc2luZyAmJiB0aGlzLnJlY3Vyc2lvbkRlcHRoIDwgVmhzUXVpelN1cnZleUFuc3dlcmluZ0NvbnRyb2xsZXIuTUFYX1JFQ1VSU0lPTl9ERVBUSCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlY3Vyc2lvbkRlcHRoKys7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0VkaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU3VibWl0Q3VycmVudFF1ZXN0aW9uQW5zd2VyQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0SXNRdWl6RmlsZXNVcGxvYWRzRW5hYmxlZCgpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gdGhpcy5pc0ZpbGVVcGxvYWRzRW5hYmxlZCA9IHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHRoaXMucXVpelNlcnZpY2Uuc3RhcnRRdWl6QnlVc2VyKHRoaXMucXVpeklkLCBcIlFVSVpcIixcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRRdWl6VGFncyAmJiB0aGlzLnNlbGVjdGVkUXVpelRhZ3MubGVuZ3RoID4gMCA/IHRoaXMuc2VsZWN0ZWRRdWl6VGFncyA6IG51bGwsIG51bGwsIG51bGwsIG51bGwsIGZsYXNoY2FyZE1vZGUpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdXJzaW9uRGVwdGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpelNlcnZpY2UuZ2V0UXVpekZvclBhc3NpbmcodGhpcy5xdWl6SWQsIHJlc3VsdC5pZCkudGhlbihxID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHEsIHRoaXMucXVpeik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMucXVpekN1cnJlbnRSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXoucXVlc3Rpb25zLmZvckVhY2gocXVlc3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5vcHRpb25FbnRpdGllcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJPcHRpb25zID0gcXVlc3Rpb24ub3B0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1ck9wdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24ub3B0aW9uRW50aXRpZXMucHVzaCg8SVF1aXpPcHRpb24+e2lkOiBpLCB0ZXh0OiBjdXJPcHRpb25zW2ldfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGl0ZVJlc3VsdElkID0gcmVzdWx0LmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVDb21wbGV0ZVF1aXpCdXR0b24gPSAhdGhpcy5xdWl6Lm9uZVF1ZXN0aW9uQXRBVGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU3VibWl0Q3VycmVudFF1ZXN0aW9uQW5zd2VyQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpelBhc3NpbmcgPSB0aGlzLiRzY29wZS5xdWl6UGFzc2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUYWdzU2VsZWN0aW9uTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodGhpcy5xdWl6LnF1ZXN0aW9uc1swXSwgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb25JbmRleENvdW50ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25OYXZpZ2F0aW9uLnByZXZlbnROYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpekN1cnJlbnRSZXN1bHQuYW5zd2VycyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6RHVyYXRpb24gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5zdGFydC5xdWl6Lm5vLnF1ZXN0aW9uc1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIllvdSBoYXZlIGFscmVhZHkgYW5zd2VyZWQgb24gYWxsIHF1ZXN0aW9ucyBpbiB0aGF0IHF1aXpcIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5uby5zdWl0YWJsZS5xdWVzdGlvbnNcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJObyBzdWl0YWJsZSBxdWVzdGlvbiBmb3VuZCB0byBkaXNwbGF5XCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib3B0aW1pc3RpYy5sb2NraW5nLmZhaWxlZC5jYXRjaGVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0UXVpekludGVybmFsKGZsYXNoY2FyZE1vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RhZ3NTZWxlY3Rpb25Nb2RlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNBcmVMb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5xdWl6emVzQXJlTG9hZGluZyA9IGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0KGZsYXNoY2FyZE5leHRSb3VuZD8pIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZFN0YXJ0QnV0dG9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFN0YXJ0QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5xdWl6LnBvcFVwTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLFwiYXV0b1wiKTtcclxuICAgICAgICAgICAgJChcIiNzdGFydFF1aXpQb3BVcFwiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWZ0ZXJTdGFydChmbGFzaGNhcmROZXh0Um91bmQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFmdGVyU3RhcnQoZmxhc2hjYXJkTmV4dFJvdW5kPykge1xyXG4gICAgICAgIGlmKCF0aGlzLnF1aXpQYXNzaW5nICYmIHRoaXMucmVjdXJzaW9uRGVwdGggPCBWaHNRdWl6U3VydmV5QW5zd2VyaW5nQ29udHJvbGxlci5NQVhfUkVDVVJTSU9OX0RFUFRIKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjdXJzaW9uRGVwdGgrKztcclxuICAgICAgICAgICAgdGhpcy5zaG93RWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXp6ZXNBcmVMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU3VibWl0Q3VycmVudFF1ZXN0aW9uQW5zd2VyQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0SXNRdWl6RmlsZXNVcGxvYWRzRW5hYmxlZCgpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gdGhpcy5pc0ZpbGVVcGxvYWRzRW5hYmxlZCA9IHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHRoaXMucXVpelNlcnZpY2Uuc3RhcnRRdWl6QnlVc2VyKHRoaXMucXVpei5pZCwgXCJDT1VSU0VcIiwgbnVsbCwgdGhpcy5jb3Vyc2VJZCwgdGhpcy5zZWN0aW9uLmlkLCB0aGlzLmNvdXJzZVByb2dyZXNzSWQsIGZsYXNoY2FyZE5leHRSb3VuZClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN1cnNpb25EZXB0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6U2VydmljZS5nZXRRdWl6Rm9yUGFzc2luZyh0aGlzLnF1aXouaWQsIHJlc3VsdC5pZCwgdGhpcy5jb3Vyc2VJZCkudGhlbihxID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHEsIHRoaXMucXVpeik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMucXVpekN1cnJlbnRSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXoucXVlc3Rpb25zLmZvckVhY2gocXVlc3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5vcHRpb25FbnRpdGllcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJPcHRpb25zID0gcXVlc3Rpb24ub3B0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1ck9wdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24ub3B0aW9uRW50aXRpZXMucHVzaCg8SVF1aXpPcHRpb24+e2lkOiBpLCB0ZXh0OiBjdXJPcHRpb25zW2ldfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gIXRoaXMucXVpei5vbmVRdWVzdGlvbkF0QVRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVN1Ym1pdEN1cnJlbnRRdWVzdGlvbkFuc3dlckJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXpQYXNzaW5nID0gdGhpcy4kc2NvcGUucXVpelBhc3NpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodGhpcy5xdWl6LnF1ZXN0aW9uc1swXSwgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb25JbmRleENvdW50ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25OYXZpZ2F0aW9uLnByZXZlbnROYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpekN1cnJlbnRSZXN1bHQuYW5zd2VycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNBcmVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdXJzZS5hdXRvZmlsbFF1ZXN0aW9ucyA9PSB0cnVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QW5zd2VyUmVzdWx0QnlRdWVzdGlvbkNvZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWl6LmR1cmF0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmdldEN1cnJlbnREYXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoc2VydmVyVGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpekR1cmF0aW9uID0gTWF0aC5yb3VuZCh0aGlzLnF1aXouZHVyYXRpb24gLSBNYXRoLm1heChzZXJ2ZXJUaW1lIC0gcmVzdWx0LnN0YXJ0VGltZSwgMCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucXVpekR1cmF0aW9uICE9IG51bGwgJiYgdGhpcy5xdWl6RHVyYXRpb24gPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlUXVpeigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucXVpekR1cmF0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpeldhcm5pbmdUaW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIllvdSBoYXZlIDEgbWludXRlIHJlbWFpbmluZ1wiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgKHRoaXMucXVpekR1cmF0aW9uIC0gNjApICogMTAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kYnJvYWRjYXN0KCd0aW1lci1zZXQtY291bnRkb3duJywgdGhpcy5xdWl6RHVyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGJyb2FkY2FzdCgndGltZXItc3RhcnQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6RHVyYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRTdGFydEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkU3RhcnRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnN0YXJ0LnF1aXoubm8ucXVlc3Rpb25zXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIllvdSBoYXZlIGFscmVhZHkgYW5zd2VyZWQgb24gYWxsIHF1ZXN0aW9ucyBpbiB0aGF0IHF1aXpcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iubm8uc3VpdGFibGUucXVlc3Rpb25zXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIk5vIHN1aXRhYmxlIHF1ZXN0aW9uIGZvdW5kIHRvIGRpc3BsYXlcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib3B0aW1pc3RpYy5sb2NraW5nLmZhaWxlZC5jYXRjaGVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZnRlclN0YXJ0KGZsYXNoY2FyZE5leHRSb3VuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RvcChjb25maXJtOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucXVpekR1cmF0aW9uICE9IG51bGwgJiYgIWNvbmZpcm0pIHtcclxuICAgICAgICAgICAgY29uc3QgaXNRdWl6ID0gdGhpcy5pc1F1aXooKTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oaXNRdWl6ID8gXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoZSBxdWl6PyBXaGVuIHRoZSB0aW1lciBpcyBleHBpcmVkLCB0aGUgJ0ZhaWxlZCcgcmVzdWx0IHdpbGwgYmUgc2F2ZWQuXCIgOlxyXG4gICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoZSBzdXJ2ZXk/IFdoZW4gdGhlIHRpbWVyIGlzIGV4cGlyZWQsIHlvdXIgYW5zd2VycyB3aWxsIGJlIHNhdmVkLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGlzUXVpeiA/IFwiQ2FuY2VsIHRoZSBxdWl6XCIgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNhbmNlbCB0aGUgc3VydmV5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJZZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b246IFwiTm9cIlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3AodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5xdWl6V2FybmluZ1RpbWVvdXRJZCk7XHJcbiAgICAgICAgICAgIHRoaXMucXVpelBhc3NpbmcgPSB0aGlzLiRzY29wZS5xdWl6UGFzc2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dFZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25BbnN3ZXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXoucXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XHJcbiAgICAgICAgICAgICAgICBxLmFuc3dlcnMuZm9yRWFjaCgoYTogSVF1aXpBbnN3ZXIpID0+IGEuc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vbk5hdmlnYXRpb24uYWxsb3dOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RRdWl6Q3VycmVudEFuc3dlcihxdWVzdGlvbjogSVF1aXpRdWVzdGlvbiwgYW5zd2VyOiBJUXVpekFuc3dlcik6IHZvaWQge1xyXG4gICAgICAgIHF1ZXN0aW9uLmFuc3dlcnMuZm9yRWFjaCgoYTogSVF1aXpBbnN3ZXIpID0+IHtcclxuICAgICAgICAgICAgYS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFuc3dlci5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZVF1aXpCdXR0b25DaGVja2VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFuc3dlcnNGb3JDdXJyZW50TWF0Y2hpbmcocXVlc3Rpb246IElRdWl6UXVlc3Rpb24sIGFuc3dlcjogSVF1aXpBbnN3ZXIpOiBJUXVpek9wdGlvbltdIHtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRPcHRpb25zID0gcXVlc3Rpb24gJiYgcXVlc3Rpb24uYW5zd2VycyA/IHF1ZXN0aW9uLmFuc3dlcnMuZmlsdGVyKGEgPT4gYS5vcHRpb25FbnRpdHkgJiYgYS5pZCAhPSBhbnN3ZXIuaWQpLm1hcCgoYTpJUXVpekFuc3dlcikgPT4gYS5vcHRpb25FbnRpdHkuaWQpIDogbnVsbDtcclxuICAgICAgICBsZXQgY3VycmVudFNlbGVjdGFibGVBbnN3ZXJzID0gc2VsZWN0ZWRPcHRpb25zID8gcXVlc3Rpb24ub3B0aW9uRW50aXRpZXMuZmlsdGVyKG9wID0+IHNlbGVjdGVkT3B0aW9ucy5pbmRleE9mKG9wLmlkKT09LTEpIDogcXVlc3Rpb24ub3B0aW9uRW50aXRpZXM7XHJcblxyXG4gICAgICAgIGN1cnJlbnRTZWxlY3RhYmxlQW5zd2Vycy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYS50ZXh0LnRvTG93ZXJDYXNlKCkgPD0gYi50ZXh0LnRvTG93ZXJDYXNlKCkgPyAtMSA6IDE7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50U2VsZWN0YWJsZUFuc3dlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZU9uTWF0Y2hpbmdBbnN3ZXJTZWxlY3RpbmcocXVlc3Rpb246IElRdWl6UXVlc3Rpb24sIGFuc3dlcjogSVF1aXpBbnN3ZXIpOiB2b2lkIHtcclxuICAgICAgICBpZihhbnN3ZXIub3B0aW9uRW50aXR5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1aXoucXVlc3Rpb25zLmluZGV4T2YocXVlc3Rpb24pID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpei5xdWVzdGlvbnNbdGhpcy5xdWl6LnF1ZXN0aW9ucy5pbmRleE9mKHF1ZXN0aW9uKV1cclxuICAgICAgICAgICAgICAgICAgICAuYW5zd2Vyc1txdWVzdGlvbi5hbnN3ZXJzLmluZGV4T2YoYW5zd2VyKV0ub3B0aW9uID0gYW5zd2VyLm9wdGlvbkVudGl0eS50ZXh0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24uYW5zd2Vyc1txdWVzdGlvbi5hbnN3ZXJzLmluZGV4T2YoYW5zd2VyKV0ub3B0aW9uID0gYW5zd2VyLm9wdGlvbkVudGl0eS50ZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlc3Rpb24uYW5zd2Vyc1txdWVzdGlvbi5hbnN3ZXJzLmluZGV4T2YoYW5zd2VyKV0ub3B0aW9uID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUXVpekJyYW5jaGluZ0FsbG93ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVpei5vbmVRdWVzdGlvbkF0QVRpbWUgJiYgdGhpcy5xdWl6LnF1ZXN0aW9uc0luQWNjb3JkYW5jZVdpdGhTZXF1ZW5jZU51bWJlclxyXG4gICAgICAgICAgICAmJiAhdGhpcy5xdWl6LmdlbmVyYXRlRnJvbUJhbmsgJiYgIXRoaXMucXVpei5leGNsdWRlQ29ycmVjdGx5QW5zd2VyZWRRdWVzdGlvbnMgJiYgIXRoaXMuaXNGbGFzaGNhcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVpek5leHRRdWVzdGlvbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc1F1aXpCcmFuY2hpbmdBbGxvd2VkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6U2VydmljZS5nZXRRdWl6Rm9yUGFzc2luZyh0aGlzLnF1aXouaWQsIHRoaXMucXVpekN1cnJlbnRSZXN1bHQuaWQsIHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihxID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uUmVzdWx0cyA9IHEucXVlc3Rpb25zLmZpbHRlcihxdWVzdGlvbiA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXoucXVlc3Rpb25zLmZpbHRlcihxdWl6UXVlc3Rpb24gPT4gcXVpelF1ZXN0aW9uLmlkID09IHF1ZXN0aW9uLmlkKS5sZW5ndGggPT0gMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uSW5kZXggPSBxLnF1ZXN0aW9ucy5pbmRleE9mKG5leHRRdWVzdGlvblJlc3VsdHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShxLCB0aGlzLnF1aXopO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpei5xdWVzdGlvbnMuZm9yRWFjaChxdWVzdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuaXNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLm9wdGlvbkVudGl0aWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VyT3B0aW9ucyA9IHF1ZXN0aW9uLm9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgY3VyT3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLm9wdGlvbkVudGl0aWVzLnB1c2goPElRdWl6T3B0aW9uPntpZDogaSwgdGV4dDogY3VyT3B0aW9uc1tpXX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25BbnN3ZXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weSh0aGlzLnF1aXoucXVlc3Rpb25zW3RoaXMucXVpekN1cnJlbnRRdWVzdGlvbkluZGV4XSwgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpelF1ZXN0aW9uQW5zd2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uSW5kZXggKz0gMTtcclxuICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uSW5kZXhDb3VudCArPSAxO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93Q2FyZEFnYWluICYmIHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbkluZGV4Q291bnQgPT09IHRoaXMucXVpei5xdWVzdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2FyZHMgPSB0aGlzLnF1aXoucXVlc3Rpb25zLmZpbHRlcihxID0+IHEuc2hvd0FnYWluKTtcclxuICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXNoY2FyZEN1cnJlbnRDYXJkSW5kZXggPSB0aGlzLmZsYXNoY2FyZEN1cnJlbnRDYXJkSW5kZXggPCBjYXJkcy5sZW5ndGggPyB0aGlzLmZsYXNoY2FyZEN1cnJlbnRDYXJkSW5kZXggOiAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6LnF1ZXN0aW9ucy5mb3JFYWNoKHEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmlkID09PSBjYXJkc1t0aGlzLmZsYXNoY2FyZEN1cnJlbnRDYXJkSW5kZXhdLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbkluZGV4ID0gY291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHEuc2hvd0FnYWluID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NhcmRBZ2FpbiA9IGNhcmRzLmxlbmd0aCA+IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxhc2hjYXJkQ3VycmVudENhcmRJbmRleCArPSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uSW5kZXhDb3VudCAtPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weSh0aGlzLnF1aXoucXVlc3Rpb25zW3RoaXMucXVpekN1cnJlbnRRdWVzdGlvbkluZGV4XSwgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN1Ym1pdFF1aXpDdXJyZW50UXVlc3Rpb25BbnN3ZXIoY2FyZEtub3dsZWRnZVN0YXR1cz86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZVN1Ym1pdEN1cnJlbnRRdWVzdGlvbkFuc3dlckJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5xdWl6Q3VycmVudFJlc3VsdC5hbnN3ZXJUZXh0ID0gdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLnNob3J0QW5zd2VyO1xyXG4gICAgICAgIHRoaXMucXVpekN1cnJlbnRSZXN1bHQucmVzcG9uc2VEYXRhID0gdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLnJlc3BvbnNlRGF0YTtcclxuICAgICAgICBjb25zdCBhbnN3ZXJSZXN1bHQ6IElRdWl6QW5zd2VyUmVzdWx0ID0ge1xyXG4gICAgICAgICAgICBxdWl6UmVzdWx0SWQ6IHRoaXMucXVpekN1cnJlbnRSZXN1bHQuaWQsXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbi5pZCxcclxuICAgICAgICAgICAgYW5zd2VySWRzOiB0aGlzLmlzU2NhbGVkQW5zd2VyUXVlc3Rpb25UeXBlKHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbilcclxuICAgICAgICAgICAgICAgID8gdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLmFuc3dlcnMuZmlsdGVyKChhOiBJUXVpekFuc3dlcikgPT4gYS5ncmFkZSAhPSBudWxsICYmIGEuZ3JhZGUgIT0gdW5kZWZpbmVkKS5tYXAoKGE6IElRdWl6QW5zd2VyKSA9PiBhLmlkKVxyXG4gICAgICAgICAgICAgICAgOiAodGhpcy5pc01hdGNoaW5nUXVlc3Rpb25UeXBlKHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbikgfHwgdGhpcy5pc0hpZGluZ09wdGlvbnNNYXRjaGluZ1F1ZXN0aW9uVHlwZSh0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24uYW5zd2Vycy5maWx0ZXIoKGE6IElRdWl6QW5zd2VyKSA9PiBhLm9wdGlvbiAhPSBudWxsICYmIGEub3B0aW9uICE9IHVuZGVmaW5lZCkubWFwKChhOiBJUXVpekFuc3dlcikgPT4gYS5pZClcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbi5hbnN3ZXJzLmZpbHRlcigoYTogSVF1aXpBbnN3ZXIpID0+IGEuc2VsZWN0ZWQpLm1hcCgoYTogSVF1aXpBbnN3ZXIpID0+IGEuaWQpKSxcclxuICAgICAgICAgICAgZ3JhZGVzOiB0aGlzLmlzU2NhbGVkQW5zd2VyUXVlc3Rpb25UeXBlKHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbilcclxuICAgICAgICAgICAgICAgID8gdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLmFuc3dlcnMuZmlsdGVyKChhOiBJUXVpekFuc3dlcikgPT4gYS5ncmFkZSAhPSBudWxsICYmIGEuZ3JhZGUgIT0gdW5kZWZpbmVkKS5tYXAoKGE6IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHthbnN3ZXJJZDogYS5pZCwgZ3JhZGU6IGEuZ3JhZGUsIG9wdGlvbjogbnVsbH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgOiAodGhpcy5pc01hdGNoaW5nUXVlc3Rpb25UeXBlKHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbikgfHwgdGhpcy5pc0hpZGluZ09wdGlvbnNNYXRjaGluZ1F1ZXN0aW9uVHlwZSh0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24uYW5zd2Vycy5maWx0ZXIoKGE6IElRdWl6QW5zd2VyKSA9PiBhLm9wdGlvbiAhPSBudWxsICYmIGEub3B0aW9uICE9IHVuZGVmaW5lZCkubWFwKChhOiBJUXVpekFuc3dlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2Fuc3dlcklkOiBhLmlkLCBncmFkZTogbnVsbCwgb3B0aW9uOiBhLm9wdGlvbn07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICA6IG51bGwpLFxyXG4gICAgICAgICAgICBhbnN3ZXJUZXh0OiB0aGlzLmlzRmxhc2hjYXJkUXVlc3Rpb25UeXBlKHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbikgPyBjYXJkS25vd2xlZGdlU3RhdHVzIDogdGhpcy5xdWl6Q3VycmVudFJlc3VsdC5hbnN3ZXJUZXh0LFxyXG4gICAgICAgICAgICBqc29uRGF0YTogISF0aGlzLnF1aXpDdXJyZW50UmVzdWx0LnJlc3BvbnNlRGF0YSA/IEpTT04uc3RyaW5naWZ5KHRoaXMucXVpekN1cnJlbnRSZXN1bHQucmVzcG9uc2VEYXRhKSA6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLmlzRmxhc2hjYXJkKCkgJiYgY2FyZEtub3dsZWRnZVN0YXR1cyA9PT0gXCJJIGRvbid0IGtub3cgdGhpcyBjYXJkXCIgJiYgIXRoaXMucXVpei5nZW5lcmF0ZUZyb21CYW5rKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpei5xdWVzdGlvbnNbdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uSW5kZXhdLnNob3dBZ2FpbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NhcmRBZ2FpbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucmVjdXJzaW9uRGVwdGggPCBWaHNRdWl6U3VydmV5QW5zd2VyaW5nQ29udHJvbGxlci5NQVhfUkVDVVJTSU9OX0RFUFRIKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjdXJzaW9uRGVwdGgrKztcclxuICAgICAgICAgICAgdGhpcy5xdWl6U2VydmljZS5jb21wbGV0ZVF1ZXN0aW9uQnlVc2VyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFJlc3VsdC5xdWl6SWQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXpDdXJyZW50UmVzdWx0LmlkLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFJlc3VsdC52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgYW5zd2VyUmVzdWx0LCB0aGlzLmNvdXJzZUlkKS50aGVuKChxOiBJUXVpelF1ZXN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN1cnNpb25EZXB0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLmFuc3dlcnMuZm9yRWFjaCgoYUZyb206IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHEuYW5zd2Vycy5mb3JFYWNoKChhVG86IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYUZyb20uaWQgPT09IGFUby5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUby5zZWxlY3RlZCA9IGFGcm9tLnNlbGVjdGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBxLmFuc3dlcnMuc29ydCgoYTEsIGEyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleEZvckExOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleEZvckEyOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbi5hbnN3ZXJzLmZvckVhY2goKGE6IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5pZCA9PT0gYTEuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckExID0gdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLmFuc3dlcnMuaW5kZXhPZihhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLmlkID09PSBhMi5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQTIgPSB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24uYW5zd2Vycy5pbmRleE9mKGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Rm9yQTEgLSBpbmRleEZvckEyO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHEuc2hvcnRBbnN3ZXIgPSB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24uc2hvcnRBbnN3ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgcS5yZXNwb25zZURhdGEgPSB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24ucmVzcG9uc2VEYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRmlsbEluVGhlQmxhbmtRdWVzdGlvblR5cGUocSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcS5hbnN3ZXJzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocS5zaG9ydEFuc3dlciAmJiBhLnRleHQgJiYgcS5zaG9ydEFuc3dlci50b0xvd2VyQ2FzZSgpID09IGEudGV4dC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5pc0NvcnJlY3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNYXRjaGluZ1F1ZXN0aW9uVHlwZSh0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuaXNIaWRpbmdPcHRpb25zTWF0Y2hpbmdRdWVzdGlvblR5cGUodGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxLmFuc3dlcnMuZm9yRWFjaChhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJPcHRpb24gPSB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24uYW5zd2Vycy5maWx0ZXIoYW5zID0+IGFucy5pZCA9PSBhLmlkKVswXS5vcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmlzQ29ycmVjdCA9IGEub3B0aW9uICYmIGN1ck9wdGlvbiAmJiBhLm9wdGlvbi50b0xvd2VyQ2FzZSgpID09IGN1ck9wdGlvbi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5vcHRpb24gPSBjdXJPcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSG90c3BvdFNpbmdsZUNob2ljZVF1ZXN0aW9uVHlwZSh0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24pIHx8IHRoaXMuaXNIb3RzcG90TXVsdGlwbGVDaG9pY2VRdWVzdGlvblR5cGUodGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxLnJlc3BvbnNlRGF0YSA9IHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbi5yZXNwb25zZURhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHEuYXR0YWNoZWRGaWxlVXJsID0gdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLmF0dGFjaGVkRmlsZVVybDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHEsIHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNRdWl6KCkgfHwgdGhpcy5pc1N1cnZleSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpelF1ZXN0aW9uQW5zd2VyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy90b2RvOiBkb24ndCBmZXRjaCBxdWl6IHJlc3VsdCAtIG9ubHkgdmVyc2lvbiBpcyBuZWVkZWRcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWl6U2VydmljZS5nZXRVc2VyUXVpelJlc3VsdCh0aGlzLnF1aXpDdXJyZW50UmVzdWx0LnF1aXpJZCwgdGhpcy5xdWl6Q3VycmVudFJlc3VsdC5pZCkudGhlbigocmVzdWx0OiBJUXVpelJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0LCB0aGlzLnF1aXpDdXJyZW50UmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU3VibWl0Q3VycmVudFF1ZXN0aW9uQW5zd2VyQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1aXoub25lUXVlc3Rpb25BdEFUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIXRoaXMucXVpei5zaG93Q29ycmVjdEFuc3dlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9BVURJT19SRVNQT05TRV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9XSVRIX1VQTE9BRF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnF1aXpDdXJyZW50UmVzdWx0LnN0YXR1cyAmJiAhdGhpcy5zaG93Q2FyZEFnYWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlUXVpeigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1aXoub25lUXVlc3Rpb25BdEFUaW1lICYmIHRoaXMucXVpei5zaG93Q29ycmVjdEFuc3dlcnMgJiYgdGhpcy5xdWl6Q3VycmVudFJlc3VsdC5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNvbXBsZXRlUXVpekJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1aXoub25lUXVlc3Rpb25BdEFUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIXRoaXMucXVpei5zaG93Q29ycmVjdEFuc3dlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9BVURJT19SRVNQT05TRV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9XSVRIX1VQTE9BRF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIXRoaXMucXVpekN1cnJlbnRSZXN1bHQuc3RhdHVzIHx8IHRoaXMuc2hvd0NhcmRBZ2FpbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2hvcnRBbnN3ZXJBdWRpb1Jlc3BvbnNlUXVlc3Rpb25UeXBlKHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0UmVjb3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tGbGFzaGNhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UXVpek5leHRRdWVzdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWl6Lm9uZVF1ZXN0aW9uQXRBVGltZSAmJiB0aGlzLnNlY3Rpb24uYWNjZXB0YWJsZU51bWJlck9mQXR0ZW1wdHMgIT0gLTEgJiYgIXRoaXMuY291cnNlLnBlcm1pc3Npb25zLnZpZXdPdGhlclVzZXJzUHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh0aGlzLnF1aXouc2hvd0NvcnJlY3RBbnN3ZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLnR5cGUgIT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJfQVVESU9fUkVTUE9OU0VdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLnR5cGUgIT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLnR5cGUgIT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJfV0lUSF9VUExPQURdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnF1aXpDdXJyZW50UmVzdWx0LnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UXVpek5leHRRdWVzdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1aXpDdXJyZW50UmVzdWx0LnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVRdWl6KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9wdGltaXN0aWMubG9ja2luZy5mYWlsZWQuY2F0Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCByZXNwb25zZS5kYXRhLmVycm9yID09IFwic3RhbGUub2JqZWN0LnN0YXRlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpekNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRRdWl6Q3VycmVudFF1ZXN0aW9uQW5zd2VyKGNhcmRLbm93bGVkZ2VTdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBiZWZvcmVRdWl6Q29tcGxldGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVjb3JkaW5nUHJvbWlzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjQuIFF1aXogdGltZXIgZW5kcy4gQnJvYWRjYXN0IGV2ZW50IGZvciBmb3JjZSBzdG9wIHJlY29yZGluZy5cIik7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRicm9hZGNhc3QoRXZlbnQuUkVDT1JERVJfU1RPUF9SRUNPUkRfRVhURVJOQUxMWSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiNS4gV2FpdCB3aGlsZSBhbGwgcmVjb3JkaW5nIHByb21pc2VzIHJlc29sdmVcIik7XHJcbiAgICAgICAgICAgIHRoaXMuJHEuYWxsKHRoaXMucmVjb3JkaW5nUHJvbWlzZXMpXHJcbiAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWxsIHJlY29yZHMgc3RvcHBlZC5cIiwgcmVzdWx0cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRpbmdQcm9taXNlcy5zcGxpY2UoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVF1aXooKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQW4gZXJyb3Igd2hpbGUgc2F2ZSBhdWRpbyByZXNwb25zZVwiLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVF1aXooKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN1Ym1pdFF1aXooKTogdm9pZCB7XHJcbiAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIixcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNzdWJtaXRRdWl6RGlhbG9nXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29tcGxldGVRdWl6KCkge1xyXG4gICAgICAgIHRoaXMucXVpekNvbXBsZXRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQW5zd2VycyA9IHRydWU7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucXVpeldhcm5pbmdUaW1lb3V0SWQpO1xyXG4gICAgICAgIHRoaXMucXVpelF1ZXN0aW9uQW5zd2VyZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVDb21wbGV0ZVF1aXpCdXR0b24gPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5xdWl6Lm9uZVF1ZXN0aW9uQXRBVGltZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVBbnN3ZXJzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucXVpekVuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5xdWl6Q29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZExhc3RRdWl6UmVzdWx0KHRoaXMucXVpeklkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJDb21wbGV0ZVF1aXooKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHJvb3RTY29wZS4kYnJvYWRjYXN0KEV2ZW50LlFVSVpfU1VSVkVZX0NPTVBMRVRFRCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0FyZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXoucXVlc3Rpb25zLmZvckVhY2goKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IElRdWl6QW5zd2VyUmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1aXpSZXN1bHRJZDogcXVlc3Rpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogcXVlc3Rpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VySWRzOiB0aGlzLmlzU2NhbGVkQW5zd2VyUXVlc3Rpb25UeXBlKHF1ZXN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHF1ZXN0aW9uLmFuc3dlcnMuZmlsdGVyKChhOiBJUXVpekFuc3dlcikgPT4gYS5ncmFkZSAhPSBudWxsICYmIGEuZ3JhZGUgIT0gdW5kZWZpbmVkKS5tYXAoKGE6IElRdWl6QW5zd2VyKSA9PiBhLmlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICh0aGlzLmlzTWF0Y2hpbmdRdWVzdGlvblR5cGUocXVlc3Rpb24pIHx8IHRoaXMuaXNIaWRpbmdPcHRpb25zTWF0Y2hpbmdRdWVzdGlvblR5cGUocXVlc3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHF1ZXN0aW9uLmFuc3dlcnMuZmlsdGVyKChhOiBJUXVpekFuc3dlcikgPT4gYS5vcHRpb24gIT0gbnVsbCAmJiBhLm9wdGlvbiAhPSB1bmRlZmluZWQpLm1hcCgoYTogSVF1aXpBbnN3ZXIpID0+IGEuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHF1ZXN0aW9uLmFuc3dlcnMuZmlsdGVyKChhOiBJUXVpekFuc3dlcikgPT4gYS5zZWxlY3RlZCkubWFwKChhOiBJUXVpekFuc3dlcikgPT4gYS5pZCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIGdyYWRlczogdGhpcy5pc1NjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBxdWVzdGlvbi5hbnN3ZXJzLmZpbHRlcigoYTogSVF1aXpBbnN3ZXIpID0+IGEuZ3JhZGUgIT0gbnVsbCAmJiBhLmdyYWRlICE9IHVuZGVmaW5lZCkubWFwKChhOiBJUXVpekFuc3dlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHthbnN3ZXJJZDogYS5pZCwgZ3JhZGU6IGEuZ3JhZGUsIG9wdGlvbjogbnVsbH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKHRoaXMuaXNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxdWVzdGlvbikgfHwgdGhpcy5pc0hpZGluZ09wdGlvbnNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxdWVzdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcXVlc3Rpb24uYW5zd2Vycy5maWx0ZXIoKGE6IElRdWl6QW5zd2VyKSA9PiBhLm9wdGlvbiAhPSBudWxsICYmIGEub3B0aW9uICE9IHVuZGVmaW5lZCkubWFwKChhOiBJUXVpekFuc3dlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7YW5zd2VySWQ6IGEuaWQsIGdyYWRlOiBudWxsLCBvcHRpb246IGEub3B0aW9ufTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlclRleHQ6IHF1ZXN0aW9uLnNob3J0QW5zd2VyLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25EYXRhOiAhIXF1ZXN0aW9uLnJlc3BvbnNlRGF0YSA/IEpTT04uc3RyaW5naWZ5KHF1ZXN0aW9uLnJlc3BvbnNlRGF0YSkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6Q3VycmVudFJlc3VsdC5hbnN3ZXJzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWl6LnF1ZXN0aW9ucy5sZW5ndGggPj0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdEaWFsb2dJZCA9IHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtQW5kUmV0dXJuRGlhbG9nSWQoXCJMb2FkaW5nLi4uXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJQbGVhc2UsIHdhaXRcIixcclxuICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVDb25maXJtQnV0dG9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYodGhpcy5yZWN1cnNpb25EZXB0aCA8IFZoc1F1aXpTdXJ2ZXlBbnN3ZXJpbmdDb250cm9sbGVyLk1BWF9SRUNVUlNJT05fREVQVEgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVjdXJzaW9uRGVwdGgrKztcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpelNlcnZpY2UuY29tcGxldGVRdWl6QnlVc2VyKHRoaXMucXVpekN1cnJlbnRSZXN1bHQsIHRoaXMuY291cnNlSWQpLnRoZW4oKHF1aXo6IElRdWl6KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTGFzdFF1aXpSZXN1bHQodGhpcy5xdWl6SWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3Vyc2lvbkRlcHRoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBRdWl6UXVlc3Rpb25zOiBBcnJheTxJUXVpelF1ZXN0aW9uPiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodGhpcy5xdWl6LnF1ZXN0aW9ucywgdGVtcFF1aXpRdWVzdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWl6LnF1ZXN0aW9ucy5mb3JFYWNoKHEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudHlwZSAhPSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxKSAmJiAhdGhpcy5pc0hpZGluZ09wdGlvbnNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmFuc3dlcnMuZm9yRWFjaCgoYTogSVF1aXpBbnN3ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBRdWl6UXVlc3Rpb25zLmZvckVhY2godGVtcHEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmlkID09IHRlbXBxLmlkICYmIHEucXVpeklkID09IHRlbXBxLnF1aXpJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wcS5hbnN3ZXJzLmZvckVhY2goKHRlbXBhOiBJUXVpekFuc3dlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuaWQgPT0gdGVtcGEuaWQgJiYgYS5xdWVzdGlvbklkID09IHRlbXBhLnF1ZXN0aW9uSWQgJiYgdGVtcGEuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnNlbGVjdGVkID0gdGVtcGEuc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuaXNDb3JyZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuaXNDb3JyZWN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWF0Y2hpbmdRdWVzdGlvblR5cGUocSkgfHwgdGhpcy5pc0hpZGluZ09wdGlvbnNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcHEgPSB0ZW1wUXVpelF1ZXN0aW9ucy5maWx0ZXIodCA9PiB0LmlkID09IHEuaWQpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmFuc3dlcnMuZm9yRWFjaCgoYTogSVF1aXpBbnN3ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wYSA9IHRlbXBxLmFuc3dlcnMuZmlsdGVyKHRhID0+IHRhLmlkID09IGEuaWQpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5pc0NvcnJlY3QgPSBhLm9wdGlvbiAmJiB0ZW1wYS5vcHRpb24gJiYgKGEub3B0aW9uLnRvTG93ZXJDYXNlKCkgPT0gdGVtcGEub3B0aW9uLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5vcHRpb24gPSB0ZW1wYS5vcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmlzQ29ycmVjdCA9ICB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmFuc3dlcnMuZm9yRWFjaCgoYTogSVF1aXpBbnN3ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYS5pc0NvcnJlY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmlzQ29ycmVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGaWxsSW5UaGVCbGFua1F1ZXN0aW9uVHlwZShxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcFF1aXpRdWVzdGlvbnMgJiYgdGVtcFF1aXpRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBxID0gdGVtcFF1aXpRdWVzdGlvbnMuZmlsdGVyKHQgPT4gdC5pZCA9PSBxLmlkKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuc2hvcnRBbnN3ZXIgPSB0ZW1wcS5zaG9ydEFuc3dlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuYW5zd2Vycy5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLnNob3J0QW5zd2VyICYmIGEudGV4dCAmJiBxLnNob3J0QW5zd2VyLnRvTG93ZXJDYXNlKCkgPT0gYS50ZXh0LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5pc0NvcnJlY3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSG90c3BvdFNpbmdsZUNob2ljZVF1ZXN0aW9uVHlwZShxKSB8fCB0aGlzLmlzSG90c3BvdE11bHRpcGxlQ2hvaWNlUXVlc3Rpb25UeXBlKHEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBRdWl6UXVlc3Rpb25zLmZvckVhY2godGVtcHEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuaWQgPT0gdGVtcHEuaWQgJiYgcS5xdWl6SWQgPT0gdGVtcHEucXVpeklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5yZXNwb25zZURhdGEgPSB0ZW1wcS5yZXNwb25zZURhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5hdHRhY2hlZEZpbGVVcmwgPSB0ZW1wcS5hdHRhY2hlZEZpbGVVcmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShxdWl6LnF1ZXN0aW9ucywgdGhpcy5jdXJyZW50UWl1elF1ZXN0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJDb21wbGV0ZVF1aXooKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib3B0aW1pc3RpYy5sb2NraW5nLmZhaWxlZC5jYXRjaGVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpekNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVF1aXooKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpekNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUXVpek1vZGUgfHwgdGhpcy5pc1N1cnZleSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybVN0YXRpc3RpY3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoRXZlbnQuUVVJWl9TVVJWRVlfQ09NUExFVEVEKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb21wbGV0ZVF1aXpCdXR0b25DaGVja2VyKCkge1xyXG4gICAgICAgIC8vdG9kbyBjaGVjayB0aGlzIHZhbGlkYXRpb24gZm9yIGNvcnJlY3QuIElzIG9ubHkgb25lIHF1ZXN0aW9uIHJlc3BvbnNlIHJlcXVpcmVkIGluIHF1aXo/XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMucXVpei5vbmVRdWVzdGlvbkF0QVRpbWUgJiYgIXRoaXMucXVpei5yZXF1aXJlQWxsQW5zd2Vycykge1xyXG4gICAgICAgICAgICB0aGlzLnF1aXoucXVlc3Rpb25zLmZvckVhY2goKHE6IElRdWl6UXVlc3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChxLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHEuc2hvcnRBbnN3ZXIgIT0gbnVsbCAmJiBxLnNob3J0QW5zd2VyICE9IHVuZGVmaW5lZCAmJiBxLnNob3J0QW5zd2VyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHEudHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9XSVRIX1VQTE9BRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISFxLnJlc3BvbnNlRGF0YSB8fCAoISFxLnNob3J0QW5zd2VyICYmIHEuc2hvcnRBbnN3ZXIubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHEudHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkZJTExfSU5fVEhFX0JMQU5LXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHEuc2hvcnRBbnN3ZXIgJiYgcS5zaG9ydEFuc3dlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNvbXBsZXRlUXVpekJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5NQVRDSElOR19BTlNXRVJdXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgcS50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuSElESU5HX09QVElPTlNfTUFUQ0hJTkdfQU5TV0VSXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHEuYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXI6IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIub3B0aW9uICYmIGFuc3dlci5vcHRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocS50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuRklMTEFCTEVfRk9STV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocS5yZXNwb25zZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHEudHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9BVURJT19SRVNQT05TRV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWNvcmRVcmxGb3JRdWVzdGlvbklkLnNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlY29yZFVybEZvclF1ZXN0aW9uSWQuaGFzKHEuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVDb21wbGV0ZVF1aXpCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocS50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0NBTEVEX0FOU1dFUl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocS5hbnN3ZXJzLmZpbHRlcihhID0+IGEuZ3JhZGUgPT0gMCB8fCBhLmdyYWRlID09IDEpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5IT1RTUE9UX1NJTkdMRV9DSE9JQ0VdIHx8IHEudHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkhPVFNQT1RfTVVMVElQTEVfQ0hPSUNFXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxLnJlc3BvbnNlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVDb21wbGV0ZVF1aXpCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcS5hbnN3ZXJzLmZvckVhY2goKGE6IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVDb21wbGV0ZVF1aXpCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uIHx8IHRoaXMucmVjb3JkaW5nUHJvbWlzZXMubGVuZ3RoID4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnF1aXoucmVxdWlyZUFsbEFuc3dlcnMgJiYgIXRoaXMucXVpei5vbmVRdWVzdGlvbkF0QVRpbWUpIHtcclxuICAgICAgICAgICAgbGV0IGFuc3dlcmVkID0gMDtcclxuICAgICAgICAgICAgdGhpcy5xdWl6LnF1ZXN0aW9ucy5mb3JFYWNoKChxOiBJUXVpelF1ZXN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHEudHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl0gfHwgcS50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0hPUlRfQU5TV0VSX1dJVEhfVVBMT0FEXSkgJiYgcS5zaG9ydEFuc3dlciAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocS5zaG9ydEFuc3dlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyZWQrKztcclxuICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5NVUxUSVBMRV9DSE9JQ0VfU0lOR0xFX0FOU1dFUl0gfHwgcS50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuTVVMVElQTEVfQ0hPSUNFX01VTFRJUExFX0FOU1dFUl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2luZ2VPck11bHRpcGxlUXVlc3Rpb25Jc0Fuc3dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcS5hbnN3ZXJzLmZvckVhY2goKHMgOiBJUXVpekFuc3dlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5zZWxlY3RlZCAmJiAhc2luZ2VPck11bHRpcGxlUXVlc3Rpb25Jc0Fuc3dlcmVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdlT3JNdWx0aXBsZVF1ZXN0aW9uSXNBbnN3ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2luZ2VPck11bHRpcGxlUXVlc3Rpb25Jc0Fuc3dlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlcmVkKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHEudHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9BVURJT19SRVNQT05TRV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWNvcmRVcmxGb3JRdWVzdGlvbklkLnNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNVcmxGb3JTb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWNvcmRVcmxGb3JRdWVzdGlvbklkLmhhcyhxLmlkKSAmJiAhaGFzVXJsRm9yU291bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1VybEZvclNvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVXJsRm9yU291bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlcmVkKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHEudHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLk1BVENISU5HX0FOU1dFUl1cclxuICAgICAgICAgICAgICAgICAgICB8fCBxLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5ISURJTkdfT1BUSU9OU19NQVRDSElOR19BTlNXRVJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzQXRMZWFzdE9uZUVtcHR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcS5hbnN3ZXJzLmZvckVhY2goKGFuc3dlcjpJUXVpekFuc3dlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihhbnN3ZXIub3B0aW9uID09IG51bGwgfHwgYW5zd2VyLm9wdGlvbiA9PSB1bmRlZmluZWQgfHwgYW5zd2VyLm9wdGlvbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBdExlYXN0T25lRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzQXRMZWFzdE9uZUVtcHR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlcmVkKys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5GSUxMX0lOX1RIRV9CTEFOS10pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZihxLnNob3J0QW5zd2VyICYmIHEuc2hvcnRBbnN3ZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXJlZCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocS50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuRklMTEFCTEVfRk9STV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocS5yZXNwb25zZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyZWQrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHEudHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNDQUxFRF9BTlNXRVJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHEuYW5zd2Vycy5maWx0ZXIoYSA9PiBhLmdyYWRlID09IHVuZGVmaW5lZCkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyZWQrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHEudHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkhPVFNQT1RfU0lOR0xFX0NIT0lDRV0gfHwgcS50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuSE9UU1BPVF9NVUxUSVBMRV9DSE9JQ0VdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHEucmVzcG9uc2VEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlcmVkKys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1aXoucXVlc3Rpb25zLmxlbmd0aCA8PSBhbnN3ZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ29tcGxldGVRdWl6QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY29uZmlybVN0YXRpc3RpY3MoKSB7XHJcbiAgICAgICAgdGhpcy5xdWl6RW5kZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRRaXV6UXVlc3Rpb25zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZnRlckNvbXBsZXRlUXVpeigpIHtcclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nRGlhbG9nSWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICQoXCIjXCIgKyB0aGlzLmxvYWRpbmdEaWFsb2dJZCkubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zaG93RWRpdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25OYXZpZ2F0aW9uLmFsbG93TmF2aWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbXBsZXRlUXVpekJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucXVpei5xdWVzdGlvbnMuZm9yRWFjaChxID0+IHtcclxuICAgICAgICAgICAgcS5hbnN3ZXJzLmZvckVhY2goKGE6IElRdWl6QW5zd2VyKSA9PiBhLnNlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRicm9hZGNhc3QoJ3RpbWVyLWNsZWFyJyk7XHJcbiAgICAgICAgdGhpcy5xdWl6RHVyYXRpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMucXVpekVuZGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnF1aXpQYXNzaW5nID0gdGhpcy4kc2NvcGUucXVpelBhc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVBbnN3ZXJzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc1F1aXpNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb24odGhpcy5zZWN0aW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5xdWl6emVzQXJlTG9hZGluZyA9IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2FkQ291cnNlQ2VydGlmaWNhdGVzKCkpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG1zUXVpekNvbXBsZXRlTGlzdGVuZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sbXNRdWl6Q29tcGxldGVMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sbXNRdWl6Q29tcGxldGVMaXN0ZW5lcnNbaV0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2RvIG5vdGhpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxtc1F1aXpDb21wbGV0ZUxpc3RlbmVycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmxvYWRTZWN0aW9uUHJvZ3Jlc3MoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWxvYWRVc2VyUXVpelJlc3VsdCh0aGlzLnF1aXpJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xlYXJTZWN0aW9uUXVpelBhcmFtZXRlcnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5xdWl6ID0ge307XHJcbiAgICAgICAgdGhpcy5xdWl6UmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMucXVpekN1cnJlbnRSZXN1bHQgPSB7fTtcclxuICAgICAgICB0aGlzLmxhc3RRdWl6UmVzdWx0ID0ge307XHJcbiAgICAgICAgdGhpcy5xdWl6UGFzc2luZyA9IHRoaXMuJHNjb3BlLnF1aXpQYXNzaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93RWRpdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25OYXZpZ2F0aW9uLmFsbG93TmF2aWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1F1aXpQYXNzZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy9jb25zdCBwYXNzZWRSZXN1bHRzID0gdGhpcy5xdWl6UmVzdWx0cy5maWx0ZXIoKHA6IElRdWl6UmVzdWx0KSA9PiBwLnBhc3NlZCk7XHJcbiAgICAgICAgY29uc3QgcGFzc2VkUmVzdWx0cyA9IHRoaXMucXVpelJlc3VsdHMuZmlsdGVyKChwOiBJUXVpelJlc3VsdCkgPT4gcC5zdGF0dXMgPT0gUXVpelJlc3VsdFN0YXR1cy5QQVNTRUQpO1xyXG4gICAgICAgIHJldHVybiBwYXNzZWRSZXN1bHRzLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRmlsbGFibGVGb3JtUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuRklMTEFCTEVfRk9STV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRmlsbEluVGhlQmxhbmtRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5GSUxMX0lOX1RIRV9CTEFOS107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQW55VmFsaWRNYXRjaGluZyhxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBhbnN3ZXJlZCA9IHF1ZXN0aW9uLmFuc3dlcnMuZmlsdGVyKGEgPT4gYS5vcHRpb24gIT0gbnVsbCAmJiBhLm9wdGlvbiAhPSBcIlwiICYmIGEub3B0aW9uICE9IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgcmV0dXJuIChhbnN3ZXJlZCAmJiAodGhpcy5xdWl6LnJlcXVpcmVBbGxBbnN3ZXJzID9cclxuICAgICAgICAgICAgYW5zd2VyZWQubGVuZ3RoID09IHF1ZXN0aW9uLmFuc3dlcnMubGVuZ3RoIDogYW5zd2VyZWQubGVuZ3RoID4gMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01hdGNoaW5nUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuTUFUQ0hJTkdfQU5TV0VSXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNIaWRpbmdPcHRpb25zTWF0Y2hpbmdRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5ISURJTkdfT1BUSU9OU19NQVRDSElOR19BTlNXRVJdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc011bHRpcGxlQ2hvaWNlTXVsdGlwbGVBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5NVUxUSVBMRV9DSE9JQ0VfTVVMVElQTEVfQU5TV0VSXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNdWx0aXBsZUNob2ljZVNpbmdsZUFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLk1VTFRJUExFX0NIT0lDRV9TSU5HTEVfQU5TV0VSXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG9ydEFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2hvcnRBbnN3ZXJBdWRpb1Jlc3BvbnNlUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uLnR5cGUgJiYgcXVlc3Rpb24udHlwZS50b1N0cmluZygpID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0hPUlRfQU5TV0VSX0FVRElPX1JFU1BPTlNFXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG9ydEFuc3dlcldpdGhVcGxvYWRRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJfV0lUSF9VUExPQURdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0NBTEVEX0FOU1dFUl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRmxhc2hjYXJkUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5GTEFTSF9DQVJEXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNIb3RzcG90U2luZ2xlQ2hvaWNlUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5IT1RTUE9UX1NJTkdMRV9DSE9JQ0VdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0hvdHNwb3RNdWx0aXBsZUNob2ljZVF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuSE9UU1BPVF9NVUxUSVBMRV9DSE9JQ0VdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1Rvb0xvbmdBbnN3ZXJGb3IocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAocXVlc3Rpb24uc2hvcnRBbnN3ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHF1ZXN0aW9uLnNob3J0QW5zd2VyLmxlbmd0aCA+PSBxdWVzdGlvbi5zaG9ydEFuc3dlck1heExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNTaG9ydEFuc3dlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6LnF1ZXN0aW9ucy5zb21lKHF1ZXN0aW9uID0+IHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0hPUlRfQU5TV0VSXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ29tcGxldGVSZWNvcmRpbmdDYWxsYmFjayhibG9iOiBCbG9iLCByZWNvcmRpbmdQcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPGFueT4sIHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjkuIGludm9rZSBjYWxsYmFjayBvbiBwYXJlbnRcIik7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRVcmxGb3JRdWVzdGlvbklkLnNldChxdWVzdGlvbi5pZCwgVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZUJ1bmRsZVByb21pc2UpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVCdW5kbGVQcm9taXNlID0gdGhpcy5wcmVwYXJlQnVuZGxlRmlsZXMoYmxvYiwgcmVjb3JkaW5nUHJvbWlzZSwgcXVlc3Rpb24pO1xyXG4gICAgICAgICAgICB0aGlzLnJlY29yZGluZ1Byb21pc2VzLnNwbGljZSh0aGlzLnJlY29yZGluZ1Byb21pc2VzLmluZGV4T2YocmVjb3JkaW5nUHJvbWlzZSksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1bmRsZVByb21pc2UuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1bmRsZVByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQnVuZGxlUHJvbWlzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVCdW5kbGVQcm9taXNlXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRpbmdQcm9taXNlcy5zcGxpY2UodGhpcy5yZWNvcmRpbmdQcm9taXNlcy5pbmRleE9mKHJlY29yZGluZ1Byb21pc2UpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVCdW5kbGVQcm9taXNlID0gdGhpcy5wcmVwYXJlQnVuZGxlRmlsZXMoYmxvYiwgcmVjb3JkaW5nUHJvbWlzZSwgcXVlc3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1bmRsZVByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmVwYXJlQnVuZGxlRmlsZXMoYmxvYjogQmxvYiwgcmVjb3JkaW5nUHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxhbnk+LCBxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlQnVuZGxlKClcclxuICAgICAgICAgICAgICAgIC50aGVuKGJ1bmRsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0J1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYnVuZGxlSW5wdXRJbmZvOiBJQnVuZGxlSW5wdXRJbmZvID0gQ291cnNlQnVuZGxlVXRpbHMuZ2V0UHJlcGFyZWRCdW5kbGVJbnB1dEluZm9Gcm9tQmxvYih0aGlzLnByb2dyZXNzQnVuZGxlLmlkLCB0aGlzLnByb2dyZXNzQnVuZGxlLnZlcnNpb24sIGJsb2IsIFwicXVpei1hdWRpb1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24ucmVzcG9uc2VEYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYmxvYi50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlRmlsZUtleTogYnVuZGxlSW5wdXRJbmZvLnJlY29yZE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVGaWxlVXJsOiBidW5kbGVJbnB1dEluZm8ucmVjb3JkVXJsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUJ1bmRsZUZyb21GaWxlKGJ1bmRsZUlucHV0SW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJRdWVzdGlvbiBmb3IgcmVjb3JkZWQgYXVkaW8gd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLndoZW4obnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5zdG9yYWdlLm5vdC5hdmFpbGFibGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29yZFVybEZvclF1ZXN0aW9uSWQuZGVsZXRlKHF1ZXN0aW9uLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlNlY3Rpb24gb3IgUHJvZ3Jlc3MgQnVuZGxlIGFyZSBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLndoZW4obnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJlZm9yZVJlY29yZGluZ1N0YXJ0Q2FsbGJhY2sgPSAocmVjb3JkaW5nU3RhdHVzPzogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIC8vZG8gbm90aGluZ1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRxLndoZW4obnVsbCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBvblBhdXNlUmVjb3JkaW5nQ2FsbGJhY2sgPSAoaXNQYXVzZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAvL2RvIG5vdGhpbmdcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIG9uU3RhcnRSZWNvcmRpbmdDYWxsYmFjayA9IChyZWNvcmRpbmdQcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPGFueT4pID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjMuIFJlY2VpdmUgcHJvbWlzZSBpbiBwYXJlbnQgd2hpY2ggd2FpdCBpdC5cIiwgcmVjb3JkaW5nUHJvbWlzZSk7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRpbmdQcm9taXNlcy5wdXNoKHJlY29yZGluZ1Byb21pc2UpO1xyXG4gICAgICAgIHJldHVybiByZWNvcmRpbmdQcm9taXNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgcHJlcGFyZUJ1bmRsZSgpOiBhbmd1bGFyLklQcm9taXNlPElCdW5kbGU+IHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvZ3Jlc3NCdW5kbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmdldFByb2dyZXNzQnVuZGxlSWQodGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmNyZWF0ZVByb2dyZXNzQnVuZGxlKHRoaXMuY291cnNlSWQsIHRoaXMuY291cnNlUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGlkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idW5kbGVTZXJ2aWNlLmdldEJ1bmRsZShpZCwgXCJBTExcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYnVuZGxlID0+IGJ1bmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idW5kbGVTZXJ2aWNlLmdldEJ1bmRsZShpZCwgXCJBTExcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGJ1bmRsZSA9PiBidW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLndoZW4odGhpcy5wcm9ncmVzc0J1bmRsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQnVuZGxlRnJvbUZpbGVzKGJ1bmRsZUlucHV0SW5mbzogSUJ1bmRsZUlucHV0SW5mbyk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbXBsZXRlUXVpekJ1dHRvbiA9IHRoaXMuZGlzYWJsZVN1Ym1pdEN1cnJlbnRRdWVzdGlvbkFuc3dlckJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVuZGxlU2VydmljZS51cGRhdGVCdW5kbGVGcm9tRmlsZXMoYnVuZGxlSW5wdXRJbmZvLmJ1bmRsZUlucHV0KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbGVVcGxvYWRJbmZvczogQXJyYXk8SUZpbGVVcGxvYWRJbmZvPiA9IHJlc3VsdFtcImZpbGVVcGxvYWRJbmZvc1wiXTtcclxuICAgICAgICAgICAgICAgIGxldCBidW5kbGVGaWxlS2V5QnlGaWxlSWQ6IGFueSA9IHJlc3VsdFtcImJ1bmRsZUZpbGVLZXlCeUZpbGVJZFwiXTtcclxuICAgICAgICAgICAgICAgIGZpbGVVcGxvYWRJbmZvcy5mb3JFYWNoKGFkZGVkRmlsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVLZXkgPSBidW5kbGVGaWxlS2V5QnlGaWxlSWRbYWRkZWRGaWxlLmZpbGVJZF07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVwbG9hZENhbGxiYWNrID0gKHVwbG9hZFN0YXR1czogc3RyaW5nKSA9PiB0aGlzLmdldFVwbG9hZGVkRmlsZSh0aGlzLnByb2dyZXNzQnVuZGxlLCBmaWxlS2V5LCB1cGxvYWRTdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWxlID0gYnVuZGxlSW5wdXRJbmZvLmFkZGVkRmlsZXNNYXBbZmlsZUtleV07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVdGlscy51cGxvYWRCdW5kbGVCeUNodW5rcyhmaWxlLCBhZGRlZEZpbGUuZmlsZUlkLCB0aGlzLnByb2dyZXNzQnVuZGxlLmlkLCBhZGRlZEZpbGUudXJsLCBhZGRlZEZpbGUubWV0aG9kLCB1cGxvYWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGJ1bmRsZUlucHV0SW5mby5idW5kbGVJbnB1dC5kZWxldGVkRmlsZUlkcy5mb3JFYWNoKGZpbGVJZCA9PiB0aGlzLmRlbGV0ZUZpbGVGcm9tQnVuZGxlQWZ0ZXJVcGRhdGUoZmlsZUlkKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnN0b3JhZ2Uubm90LmF2YWlsYWJsZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVF1aXpCdXR0b25DaGVja2VyKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTdWJtaXRDdXJyZW50UXVlc3Rpb25BbnN3ZXJCdXR0b24gPSBmYWxzZTsgLy90b2RvXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUJ1bmRsZUZyb21GaWxlKGJ1bmRsZUlucHV0SW5mbzogSUJ1bmRsZUlucHV0SW5mbyk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbXBsZXRlUXVpekJ1dHRvbiA9IHRoaXMuZGlzYWJsZVN1Ym1pdEN1cnJlbnRRdWVzdGlvbkFuc3dlckJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVuZGxlU2VydmljZS51cGRhdGVCdW5kbGVGcm9tRmlsZXMoYnVuZGxlSW5wdXRJbmZvLmJ1bmRsZUlucHV0KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbGVVcGxvYWRJbmZvczogQXJyYXk8SUZpbGVVcGxvYWRJbmZvPiA9IHJlc3VsdFtcImZpbGVVcGxvYWRJbmZvc1wiXTtcclxuICAgICAgICAgICAgICAgIGxldCBmaWxlVXBsb2FkSW5mbzogSUZpbGVVcGxvYWRJbmZvID0gZmlsZVVwbG9hZEluZm9zWzBdO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFkZGVkRmlsZSA9IGJ1bmRsZUlucHV0SW5mby5hZGRlZEJ1bmRsZUZpbGUuZmlsZTtcclxuICAgICAgICAgICAgICAgIGxldCB1cGxvYWRDYWxsYmFjayA9ICh1cGxvYWRTdGF0dXM6IHN0cmluZykgPT4gdGhpcy5nZXRVcGxvYWRlZEZpbGUodGhpcy5wcm9ncmVzc0J1bmRsZSwgYWRkZWRGaWxlLm5hbWUsIHVwbG9hZFN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFV0aWxzLnVwbG9hZEJ1bmRsZUJ5Q2h1bmtzKGFkZGVkRmlsZSwgZmlsZVVwbG9hZEluZm8uZmlsZUlkLCB0aGlzLnByb2dyZXNzQnVuZGxlLmlkLCBmaWxlVXBsb2FkSW5mby51cmwsIGZpbGVVcGxvYWRJbmZvLm1ldGhvZCwgdXBsb2FkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5zdG9yYWdlLm5vdC5hdmFpbGFibGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTm8gYXZhaWxhYmxlIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVRdWl6QnV0dG9uQ2hlY2tlcigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU3VibWl0Q3VycmVudFF1ZXN0aW9uQW5zd2VyQnV0dG9uID0gZmFsc2VcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVcGxvYWRlZEZpbGUoYnVuZGxlOiBJQnVuZGxlLCBmaWxlS2V5OiBzdHJpbmcsIHVwbG9hZFN0YXR1czogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh1cGxvYWRTdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSBcIlNVQ0NFU1NcIjoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRVcGxvYWRlZEZpbGVUb0J1bmRsZUJ5RmlsZUtleShidW5kbGUuaWQsIGZpbGVLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGZpbGU6IElCdW5kbGVGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGUuZmlsZXNNYXAuaGFzKGZpbGVLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnVuZGxlRmlsZSA9IGJ1bmRsZS5maWxlc01hcC5nZXQoZmlsZUtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1bmRsZUZpbGUudXJsICYmIGZpbGUudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlRmlsZS51cmwgPSBmaWxlLnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5maWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlLmZpbGVzTWFwLnNldChmaWxlS2V5LCBmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSByZWNvcmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkFCT1JUXCI6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlRmlsZUFmdGVyVXBsb2FkRmFpbHVyZShmaWxlS2V5KTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVXBsb2FkaW5nIG9mIHRoZSByZWNvcmQgaGFzIGJlZW4gY2FuY2VsZWRcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiRVJST1JcIjoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWxlQWZ0ZXJVcGxvYWRGYWlsdXJlKGZpbGVLZXkpO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJVcGxvYWRpbmcgb2YgdGhlIHJlY29yZCBoYXMgZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkVSUk9SX09OX1BPU1RcIjoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWxlQWZ0ZXJVcGxvYWRGYWlsdXJlKGZpbGVLZXkpO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJVcGxvYWRpbmcgb2YgdGhlIHJlY29yZCBoYXMgZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VXBsb2FkZWRGaWxlVG9CdW5kbGVCeUZpbGVLZXkoYnVuZGxlSWQ6IG51bWJlciwgZmlsZUtleTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxJQnVuZGxlRmlsZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1bmRsZVNlcnZpY2UuZ2V0VXBsb2FkZWRGaWxlVG9CdW5kbGVCeUZpbGVLZXkoYnVuZGxlSWQsIGZpbGVLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzZXRSZWNvcmRlcigpIHtcclxuICAgICAgICB0aGlzLmlzUmVjb3JkZXJSZXNldCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB0aGlzLmlzUmVjb3JkZXJSZXNldCA9IGZhbHNlLCAwLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRmlsZVVwbG9hZGVkKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uRXh0ZW5kZWQsIGZpbGU6IElGaWxlRXh0ZW5kZWQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1bmRsZSAmJiB0aGlzLnByb2dyZXNzQnVuZGxlLmZpbGVzTWFwLmhhcyhmaWxlLmJ1bmRsZUZpbGVLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZpbGVTZWxlY3RBbmRVcGxvYWQocXVlc3Rpb246IElRdWl6UXVlc3Rpb25FeHRlbmRlZCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChxdWVzdGlvbi5maWxlTGlzdCAmJiBxdWVzdGlvbi5maWxlTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLmZpbGVMaXN0ICYmIHF1ZXN0aW9uLmZpbGVMaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kcS53aGVuKHRoaXMudXBkYXRlQnVuZGxlUHJvbWlzZSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnVuZGxlUHJvbWlzZSA9IHRoaXMucHJlcGFyZUJ1bmRsZUZpbGVzT25VcGxvYWQocXVlc3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVCdW5kbGVQcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1bmRsZVByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVGaWxlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uRXh0ZW5kZWQsIGZpbGU6IElGaWxlRXh0ZW5kZWQpOiB2b2lkIHtcclxuICAgICAgICBsZXQgYnVuZGxlRmlsZUtleSA9IGZpbGUuYnVuZGxlRmlsZUtleTtcclxuICAgICAgICB0aGlzLmRlbGV0ZUZpbGVGcm9tUXVlc3Rpb25JZkV4aXN0KHF1ZXN0aW9uLCBidW5kbGVGaWxlS2V5KTtcclxuICAgICAgICAvL3RvZG8gdGJkXHJcbiAgICAgICAgLy9kZWxldGUgZmlsZSBmcm9tIHNlcnZlcj9cclxuICAgICAgICBpZiAodGhpcy5pc0ZpbGVVcGxvYWRlZChxdWVzdGlvbiwgZmlsZSkpIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVJZCA9IHRoaXMucHJvZ3Jlc3NCdW5kbGUuZmlsZXNNYXAuZ2V0KGJ1bmRsZUZpbGVLZXkpLmZpbGVJZDtcclxuICAgICAgICAgICAgbGV0IGJ1bmRsZUlucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvZ3Jlc3NCdW5kbGUuaWQsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLnByb2dyZXNzQnVuZGxlLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBhZGRlZEZpbGVzOiBbXSxcclxuICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWxlSWRzOiBbZmlsZUlkXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBsZXQgYnVuZGxlSW5wdXRJbmZvID0ge2J1bmRsZUlucHV0OiBidW5kbGVJbnB1dH07XHJcbiAgICAgICAgICAgIHRoaXMuJHEud2hlbih0aGlzLnVwZGF0ZUJ1bmRsZVByb21pc2UpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVCdW5kbGVQcm9taXNlID0gdGhpcy51cGRhdGVCdW5kbGVGcm9tRmlsZXMoYnVuZGxlSW5wdXRJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVCdW5kbGVQcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1bmRsZVByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVsZXRlRmlsZUFmdGVyVXBsb2FkRmFpbHVyZShmaWxlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5xdWl6Lm9uZVF1ZXN0aW9uQXRBVGltZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUZpbGVGcm9tUXVlc3Rpb25JZkV4aXN0KHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbiwgZmlsZUtleSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcXVlc3Rpb24gb2YgdGhpcy5xdWl6LnF1ZXN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlRmlsZUZyb21RdWVzdGlvbklmRXhpc3QocXVlc3Rpb24sIGZpbGVLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWxldGVBbGxGaWxlc0Zyb21RdWVzdGlvbihxdWVzdGlvbjogSVF1aXpRdWVzdGlvbkV4dGVuZGVkKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCEhcXVlc3Rpb24uZmlsZUxpc3QgJiYgcXVlc3Rpb24uZmlsZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBxdWVzdGlvbi5maWxlTGlzdC5mb3JFYWNoKGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWxlRnJvbVF1ZXN0aW9uSWZFeGlzdChxdWVzdGlvbiwgZi5idW5kbGVGaWxlS2V5KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWxldGVGaWxlRnJvbVF1ZXN0aW9uSWZFeGlzdChxdWVzdGlvbjogSVF1aXpRdWVzdGlvbkV4dGVuZGVkLCBmaWxlS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgZmlsZURlbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgYXR0YWNoRGVsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChxdWVzdGlvbi5maWxlTGlzdCAmJiBxdWVzdGlvbi5maWxlTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVJbmRleCA9IHF1ZXN0aW9uLmZpbGVMaXN0Lm1hcChmID0+IGYuYnVuZGxlRmlsZUtleSkuaW5kZXhPZihmaWxlS2V5KTtcclxuICAgICAgICAgICAgaWYgKGZpbGVJbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24uZmlsZUxpc3Quc3BsaWNlKGZpbGVJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICBmaWxlRGVsZXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLnJlc3BvbnNlRGF0YSAmJiBxdWVzdGlvbi5yZXNwb25zZURhdGEuZmlsZXNBdHRhY2hlZCkge1xyXG4gICAgICAgICAgICBsZXQgZmlsZUF0dGFjaEluZGV4ID0gcXVlc3Rpb24ucmVzcG9uc2VEYXRhLmZpbGVzQXR0YWNoZWRcclxuICAgICAgICAgICAgICAgIC5tYXAoZiA9PiBmLmJ1bmRsZUZpbGVLZXkpXHJcbiAgICAgICAgICAgICAgICAuaW5kZXhPZihmaWxlS2V5KTtcclxuICAgICAgICAgICAgaWYgKGZpbGVBdHRhY2hJbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24ucmVzcG9uc2VEYXRhLmZpbGVzQXR0YWNoZWQuc3BsaWNlKGZpbGVBdHRhY2hJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24ucmVzcG9uc2VEYXRhLmZpbGVzQXR0YWNoZWQubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5yZXNwb25zZURhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXR0YWNoRGVsZXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnJlc3BvbnNlRGF0YSkge1xyXG4gICAgICAgICAgICBxdWVzdGlvbi5yZXNwb25zZURhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnJlY29yZFVybEZvclF1ZXN0aW9uSWQuZGVsZXRlKHF1ZXN0aW9uLmlkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVF1aXpCdXR0b25DaGVja2VyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmlsZURlbGV0ZWQgJiYgYXR0YWNoRGVsZXRlZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlbGV0ZUZpbGVGcm9tQnVuZGxlQWZ0ZXJVcGRhdGUoZmlsZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0J1bmRsZSkge1xyXG4gICAgICAgICAgICBsZXQgZmlsZSA9IHRoaXMucHJvZ3Jlc3NCdW5kbGUuZmlsZXMuZmlsdGVyKGZpbGUgPT4gZmlsZS5maWxlSWQgPT09IGZpbGVJZCkucG9wKCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzQnVuZGxlLmZpbGVzLnNwbGljZSh0aGlzLnByb2dyZXNzQnVuZGxlLmZpbGVzLmluZGV4T2YoZmlsZSksIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0J1bmRsZS5maWxlc01hcC5kZWxldGUoZmlsZS5rZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmVwYXJlQnVuZGxlRmlsZXNPblVwbG9hZChxdWVzdGlvbjogSVF1aXpRdWVzdGlvbkV4dGVuZGVkKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVCdW5kbGUoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oYnVuZGxlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzQnVuZGxlID0gYnVuZGxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBidW5kbGVJbnB1dEluZm86IElCdW5kbGVJbnB1dEluZm8gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBidW5kbGVJbnB1dEluZm8uYWRkZWRGaWxlc01hcCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhZGRlZEZpbGVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5maWxlTGlzdC5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1bmRsZUZpbGVLZXkgPSBSYW5kb21VdGlscy5nZW5lcmF0ZVJhbmRvbUlkKFwicXVpei11cGxvYWRcIikgKyBcIi5cIiArIENvbnRlbnRVdGlscy5nZXRGaWxlRXh0KGZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZEZpbGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJ1bmRsZUZpbGVLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZUlucHV0SW5mby5hZGRlZEZpbGVzTWFwW2J1bmRsZUZpbGVLZXldID0gZmlsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuYnVuZGxlRmlsZUtleSA9IGJ1bmRsZUZpbGVLZXk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWVzdGlvbi5yZXNwb25zZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24ucmVzcG9uc2VEYXRhID0ge2ZpbGVzQXR0YWNoZWQ6IFtdfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24ucmVzcG9uc2VEYXRhLmZpbGVzQXR0YWNoZWQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlRmlsZUtleTogYnVuZGxlRmlsZUtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlRmlsZVVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZUlucHV0SW5mby5idW5kbGVJbnB1dCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBidW5kbGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBidW5kbGUudmVyc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkRmlsZXM6IGFkZGVkRmlsZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRmlsZUlkczogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUJ1bmRsZUZyb21GaWxlcyhidW5kbGVJbnB1dEluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUXVlc3Rpb24gZm9yIHVwbG9hZGluZyBmaWxlIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc3RvcmFnZS5ub3QuYXZhaWxhYmxlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVBbGxGaWxlc0Zyb21RdWVzdGlvbihxdWVzdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTm8gYXZhaWxhYmxlIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTZWN0aW9uIG9yIFByb2dyZXNzIEJ1bmRsZSBhcmUgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgICAgICBxdWVzdGlvbi5maWxlTGlzdC5zcGxpY2UoMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLndoZW4obnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFNlY3Rpb25Qcm9ncmVzcygpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRTZWN0aW9uUHJvZ3Jlc3ModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkLCB0aGlzLnNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnRoZW4oc2VjdGlvblByb2dyZXNzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvblByb2dyZXNzID0gc2VjdGlvblByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvblByb2dyZXNzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tTaG9ydEFuc3dlckxlbmd0aChxdWVzdGlvbjogSVF1aXpRdWVzdGlvbikge1xyXG4gICAgICAgIGlmIChxdWVzdGlvbi5zaG9ydEFuc3dlci5sZW5ndGggPiBxdWVzdGlvbi5zaG9ydEFuc3dlck1heExlbmd0aCkge1xyXG4gICAgICAgICAgICBxdWVzdGlvbi5zaG9ydEFuc3dlciA9IHF1ZXN0aW9uLnNob3J0QW5zd2VyLnNsaWNlKDAsIHF1ZXN0aW9uLnNob3J0QW5zd2VyTWF4TGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlY29kZVF1aXpTZWN0aW9uU3RhdHVzKHNlY3Rpb25TdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgICAgIGlmIChzZWN0aW9uU3RhdHVzID09PSAnQ09NUExFVEVEJykge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBcIkNvbXBsZXRlZFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VjdGlvblN0YXR1cyA9PT0gJ0ZBSUxFRCcgfHwgc2VjdGlvblN0YXR1cyA9PT0gJ1NPUycpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gXCJGYWlsZWRcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHNlY3Rpb25TdGF0dXMgPT09ICdTVUJNSVRURUQnKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IFwiU3VibWl0dGVkIGZvciBhc3Nlc3NtZW50XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExhc3RRdWl6UmVzdWx0U3RhdHVzKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMucXVpelJlc3VsdHMgJiYgdGhpcy5xdWl6UmVzdWx0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBzb3J0ZWRRdWl6UmVzdWx0cyA9IHRoaXMucXVpelJlc3VsdHMuc29ydCgocjEsIHIyKSA9PiByMS5hdHRlbXB0IC0gcjIuYXR0ZW1wdCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3J0ZWRRdWl6UmVzdWx0c1tzb3J0ZWRRdWl6UmVzdWx0cy5sZW5ndGggLSAxXS5zdGF0dXMudG9TdHJpbmcoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRBbnN3ZXJSZXN1bHRCeVF1ZXN0aW9uQ29kZSgpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6LnF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXN0aW9uID0+XHJcbiAgICAgICAgICAgIHRoaXMucXVpelNlcnZpY2UuZ2V0QW5zd2VyUmVzdWx0QnlRdWVzdGlvbkNvZGUodGhpcy5jb3Vyc2VQcm9ncmVzc0lkLCBxdWVzdGlvbi5xdWVzdGlvbkNvZGUpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiBxdWVzdGlvbi5zaG9ydEFuc3dlciA9IHJlc3VsdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlRmlsbGFibGVGb3JtVG9CdW5kbGUgPSAoZGF0YTogYW55LCBxdWVzdGlvbklkOiBudW1iZXIpID0+IHtcclxuICAgICAgICBpZih0aGlzLmNvdXJzZUlkICYmIHRoaXMuY291cnNlUHJvZ3Jlc3NJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVCdW5kbGUoKS50aGVuKGJ1bmRsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXpTZXJ2aWNlLnNhdmVGaWxsYWJsZUZvcm0odGhpcy5xdWl6SWQsIHF1ZXN0aW9uSWQsIGJ1bmRsZS5pZCwgdGhpcy5jb3Vyc2VJZCwgZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihqc29uRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5xdWl6Lm9uZVF1ZXN0aW9uQXRBVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5xdWl6LnF1ZXN0aW9ucy5maWx0ZXIocSA9PiBxLmlkID09IHF1ZXN0aW9uSWQpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24ucmVzcG9uc2VEYXRhID0gPE1hcDxTdHJpbmcsIFN0cmluZz4+anNvbkRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24ucmVzcG9uc2VEYXRhID0gPE1hcDxTdHJpbmcsIFN0cmluZz4+anNvbkRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVF1aXpCdXR0b25DaGVja2VyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJGaWxsYWJsZSBmb3JtIHNhdmVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIkZpbGxhYmxlIGZvcm0gY2Fubm90IGJlIHNhdmVkLCB3aGlsZSBxdWl6IGlzIG5vdCBhIHBhcnQgb2YgYSBjb3Vyc2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIkZpbGxhYmxlIGZvcm0gY2Fubm90IGJlIHNhdmVkLCB3aGlsZSBxdWl6IGlzIG5vdCBhIHBhcnQgb2YgYSBjb3Vyc2VcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJGaWxsYWJsZSBmb3JtIGNhbm5vdCBiZSBzYXZlZCwgd2hpbGUgcXVpeiBpcyBub3QgYSBwYXJ0IG9mIGEgY291cnNlXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHNob3dMYXN0UmVzdWx0UXVpeigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRJbmRpdmlkdWFsUXVpelJlc3VsdHModGhpcy5jb3Vyc2UuaWQsIHRoaXMuY291cnNlUHJvZ3Jlc3NJZCwgdGhpcy5zZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHF1aXpSZXN1bHRzRm9yU2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVpelJlc3VsdHNGb3JTZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBub3QgbnVsbCBhdHRlbXB0XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkUXVpelJlc3VsdElkO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBxdWl6UmVzdWx0c0ZvclNlY3Rpb24ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVpeiA9IHF1aXpSZXN1bHRzRm9yU2VjdGlvbltpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1aXouY29ycmVjdEFuc3dlcnNDb3VudCArIHF1aXoud3JvbmdBbnN3ZXJzQ291bnQgKyBxdWl6LnF1ZXN0aW9uc1RvQmVTY29yZWRDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUXVpelJlc3VsdElkID0gcXVpelJlc3VsdHNGb3JTZWN0aW9uW2ldLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFF1aXpSZXN1bHRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJMYXN0IHJlc3VsdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDb25maXJtQnV0dG9uOiB0cnVlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicXVpelwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlOiB0aGlzLmNvdXJzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RRdWl6UmVzdWx0SWQ6IHNlbGVjdGVkUXVpelJlc3VsdElkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJEb24ndCBoYXZlIG5vdCBudWxsIGF0dGVtcHRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dNb2RhbFdpdGhGaWxsYWJsZUZvcm0ocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pIHtcclxuICAgICAgICAvLyBsZXQgZGlhbG9nID0gJChcIiNmaWxsYWJsZUZvcm1Nb2RhbFwiK3F1ZXN0aW9uSWQpO1xyXG4gICAgICAgIC8vIGRpYWxvZy5tb2RhbChcInNob3dcIik7XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtRmlsbGFibGVGb3JtKHtcclxuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxyXG4gICAgICAgICAgICBzYXZlRmlsbGFibGVGb3JtVG9CdW5kbGU6IHRoaXMuc2F2ZUZpbGxhYmxlRm9ybVRvQnVuZGxlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhpZGVNb2RhbFdpdGhGaWxsYWJsZUZvcm0ocXVlc3Rpb25JZDogSVF1aXpRdWVzdGlvbikge1xyXG4gICAgICAgIGxldCBkaWFsb2cgPSAkKFwiI2ZpbGxhYmxlRm9ybU1vZGFsXCIrcXVlc3Rpb25JZCk7XHJcbiAgICAgICAgZGlhbG9nLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNGdWxsV2lkdGhBbnN3ZXIocXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuaXNTaG9ydEFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbikgfHwgdGhpcy5pc1Nob3J0QW5zd2VyV2l0aFVwbG9hZFF1ZXN0aW9uVHlwZShxdWVzdGlvbikpXHJcbiAgICAgICAgICAgIHx8IHRoaXMuaXNGaWxsSW5UaGVCbGFua1F1ZXN0aW9uVHlwZShxdWVzdGlvbilcclxuICAgICAgICAgICAgfHwgKHRoaXMuaXNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxdWVzdGlvbikgfHwgdGhpcy5pc0hpZGluZ09wdGlvbnNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxdWVzdGlvbikpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1Nob3dpbmdRdWVzdGlvbkV4cGxhbmF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoIXRoaXMuaXNRdWl6TW9kZSAmJiAhdGhpcy5pc1N1cnZleSgpICYmIHRoaXMuc2VjdGlvblByb2dyZXNzICYmIHRoaXMuc2VjdGlvblByb2dyZXNzLmF0dGVtcHRzVGFrZW5cclxuICAgICAgICAgICAgJiYgdGhpcy5zZWN0aW9uLmFjY2VwdGFibGVOdW1iZXJPZkF0dGVtcHRzIC0gdGhpcy5zZWN0aW9uUHJvZ3Jlc3MuYXR0ZW1wdHNUYWtlbiA8PSAwXHJcbiAgICAgICAgICAgICYmIHRoaXMuc2VjdGlvbi5ibG9ja2luZ1Byb2dyZXNzQWZ0ZXJGYWlsICYmIHRoaXMuc2VjdGlvblByb2dyZXNzLnN0YXR1cyAhPSAnU09TJ1xyXG4gICAgICAgICAgICAmJiB0aGlzLnNlY3Rpb24uYWNjZXB0YWJsZU51bWJlck9mQXR0ZW1wdHMgIT0gLTEpXHJcbiAgICAgICAgICAgIHx8ICghdGhpcy5pc1F1aXooKSAmJiAhdGhpcy5pc1F1aXpNb2RlKVxyXG4gICAgICAgICAgICB8fCAoKCF0aGlzLmlzUXVpek1vZGUgfHwgKCF0aGlzLnF1aXpQYXNzaW5nICYmIHRoaXMuaXNRdWl6TW9kZSkpICYmIHRoaXMuc2VjdGlvbi5zdGF0dXMgPT09ICdTT1MnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmxpcFRoZUNhcmQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrRmxhc2hjYXJkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tGbGFzaGNhcmQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCQoXCIuZmxhc2hjYXJkX2Zyb250XCIpLmhhc0NsYXNzKFwiZmxhc2hjYXJkX2ZsaXBcIikpIHtcclxuICAgICAgICAgICAgJChcIi5mbGFzaGNhcmRfZnJvbnRcIikucmVtb3ZlQ2xhc3MoXCJmbGFzaGNhcmRfZmxpcFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKFwiLmZsYXNoY2FyZF9mcm9udFwiKS5hZGRDbGFzcyhcImZsYXNoY2FyZF9mbGlwXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCQoXCIjZnJvbnRTaWRlVGl0bGVcIikuaGFzQ2xhc3MoXCJoaWRkZW5cIikpIHtcclxuICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2Zyb250U2lkZUNsaWNrVG9GbGlwXCIpLnJlbW92ZUNsYXNzKFwiZmxhc2hjYXJkX2NsaWNrVG9GbGlwLWxhYmVsXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIaWRkZW4oXCJiYWNrU2lkZVRpdGxlXCIsIFwiZnJvbnRTaWRlVGl0bGVcIiwgXCJiYWNrU2lkZUJvZHlcIixcclxuICAgICAgICAgICAgICAgICAgICBcImZyb250U2lkZUJvZHlcIiwgXCJiYWNrU2lkZUxhYmVsXCIsIFwiZnJvbnRTaWRlTGFiZWxcIilcclxuICAgICAgICAgICAgfSwgMjUwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICQoXCIjZnJvbnRTaWRlQ2xpY2tUb0ZsaXBcIikuYWRkQ2xhc3MoXCJmbGFzaGNhcmRfY2xpY2tUb0ZsaXAtbGFiZWxcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEhpZGRlbihcImZyb250U2lkZVRpdGxlXCIsIFwiYmFja1NpZGVUaXRsZVwiLCBcImZyb250U2lkZUJvZHlcIixcclxuICAgICAgICAgICAgICAgICAgICBcImJhY2tTaWRlQm9keVwiLCBcImZyb250U2lkZUxhYmVsXCIsIFwiYmFja1NpZGVMYWJlbFwiKVxyXG4gICAgICAgICAgICB9LCAyNTApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRmxhc2hjYXJkUGFnZSgpIHtcclxuICAgICAgICBpZiAoJChcIiNmcm9udFNpZGVUaXRsZVwiKS5oYXNDbGFzcyhcImhpZGRlblwiKSkge1xyXG4gICAgICAgICAgICAkKFwiLmZsYXNoY2FyZF9mcm9udFwiKS5yZW1vdmVDbGFzcyhcImZsYXNoY2FyZF9mbGlwXCIpO1xyXG4gICAgICAgICAgICAkKFwiI2Zyb250U2lkZUNsaWNrVG9GbGlwXCIpLnJlbW92ZUNsYXNzKFwiZmxhc2hjYXJkX2NsaWNrVG9GbGlwLWxhYmVsXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEhpZGRlbihcImJhY2tTaWRlVGl0bGVcIiwgXCJmcm9udFNpZGVUaXRsZVwiLCBcImJhY2tTaWRlQm9keVwiLFxyXG4gICAgICAgICAgICAgICAgXCJmcm9udFNpZGVCb2R5XCIsIFwiYmFja1NpZGVMYWJlbFwiLCBcImZyb250U2lkZUxhYmVsXCIpXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tGbGFzaGNhcmQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEhpZGRlbihmaXJzdFNpZGVGb3JTZXRIaWRkZW46IHN0cmluZywgZmlyc3RTaWRlRm9yUmVtb3ZlSGlkZGVuOiBzdHJpbmcsIHNlY29uZFNpZGVGb3JTZXRIaWRkZW46IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgc2Vjb25kU2lkZUZvclJlbW92ZUhpZGRlbjogc3RyaW5nLCB0aGlyZFNpZGVGb3JTZXRIaWRkZW46IHN0cmluZywgdGhpcmRTaWRlRm9yUmVtb3ZlSGlkZGVuOiBzdHJpbmcpIHtcclxuICAgICAgICAkKFwiI1wiICsgZmlyc3RTaWRlRm9yU2V0SGlkZGVuKS5hZGRDbGFzcyhcImhpZGRlblwiKTtcclxuICAgICAgICAkKFwiI1wiICsgc2Vjb25kU2lkZUZvclNldEhpZGRlbikuYWRkQ2xhc3MoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgJChcIiNcIiArIHRoaXJkU2lkZUZvclNldEhpZGRlbikuYWRkQ2xhc3MoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgJChcIiNcIiArIGZpcnN0U2lkZUZvclJlbW92ZUhpZGRlbikucmVtb3ZlQ2xhc3MoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgJChcIiNcIiArIHNlY29uZFNpZGVGb3JSZW1vdmVIaWRkZW4pLnJlbW92ZUNsYXNzKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICQoXCIjXCIgKyB0aGlyZFNpZGVGb3JSZW1vdmVIaWRkZW4pLnJlbW92ZUNsYXNzKFwiaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RXhwbGFuYXRpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlY3Rpb24gPT0gdW5kZWZpbmVkICYmIHRoaXMucXVpei5vbmVRdWVzdGlvbkF0QVRpbWUgJiYgdGhpcy5xdWl6Q3VycmVudFF1ZXN0aW9uLmV4cGxhbmF0aW9ucyAmJiB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24uZXhwbGFuYXRpb25zLmxlbmd0aCA+IDAgJiYgdGhpcy5xdWl6UXVlc3Rpb25BbnN3ZXJlZFxyXG4gICAgICAgICAgICB8fCB0aGlzLnF1aXpRdWVzdGlvbkFuc3dlcmVkICYmIHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbi5pZFxyXG4gICAgICAgICAgICAmJiB0aGlzLnF1aXpDdXJyZW50UXVlc3Rpb24uZXhwbGFuYXRpb25zICYmIHRoaXMucXVpekN1cnJlbnRRdWVzdGlvbi5leHBsYW5hdGlvbnMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAmJiB0aGlzLnNlY3Rpb24uYWNjZXB0YWJsZU51bWJlck9mQXR0ZW1wdHMgLSB0aGlzLnNlY3Rpb25Qcm9ncmVzcy5hdHRlbXB0c1Rha2VuIDw9IDBcclxuICAgICAgICAgICAgJiYgKHRoaXMuc2VjdGlvbi5hY2NlcHRhYmxlTnVtYmVyT2ZBdHRlbXB0cyAhPSAtMSAmJiB0aGlzLmNvdXJzZS5wZXJtaXNzaW9ucy52aWV3T3RoZXJVc2Vyc1Byb2dyZXNzICYmIHRoaXMucXVpei5zaG93Q29ycmVjdEFuc3dlcnNcclxuICAgICAgICAgICAgICAgIHx8IHRoaXMuc2VjdGlvbi5hY2NlcHRhYmxlTnVtYmVyT2ZBdHRlbXB0cyA9PSAtMSAmJiB0aGlzLnF1aXouc2hvd0NvcnJlY3RBbnN3ZXJzKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1F1aXpTdXJ2ZXlBbnN3ZXJpbmdEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc1F1aXpTdXJ2ZXlBbnN3ZXJpbmdEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNRdWl6U3VydmV5QW5zd2VyaW5nQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzUXVpelN1cnZleUFuc3dlcmluZ0NvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgY291cnNlUHJvZ3Jlc3NJZDogXCI9P1wiLFxyXG4gICAgICAgICAgICBzZWN0aW9uOiBcIj0/XCIsXHJcbiAgICAgICAgICAgIGxhc3RTZWN0aW9uSW5Db3Vyc2U6IFwiPT9cIixcclxuICAgICAgICAgICAgcXVpeklkOiBcIj1cIixcclxuICAgICAgICAgICAgcHJvZ3Jlc3NCdW5kbGU6IFwiPT9cIixcclxuICAgICAgICAgICAgcXVpelBhc3Npbmc6IFwiPT9cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLXF1aXotc3VydmV5LWFuc3dlcmluZy5odG1sXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblZoc1F1aXpTdXJ2ZXlBbnN3ZXJpbmdEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi9tb2RlbHMvRXZlbnRcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc1JlY29yZFJ0Y0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgdmhzSWQ/OiBzdHJpbmc7XHJcbiAgICB2aHNBbGxvd1BhdXNlPzogYm9vbGVhbjtcclxuICAgIHZoc0FsbG93U2F2ZVJlY29yZGluZz86IGJvb2xlYW47XHJcbiAgICB2aHNBbGxvd1BsYXliYWNrPzogYm9vbGVhbjtcclxuICAgIHZoc01heExlbmd0aD86IG51bWJlcjtcclxuICAgIHZoc09uQ29tcGxldGVSZWNvcmRpbmdDYWxsYmFjaz86IHN0cmluZzsgLy8oYmxvYjogQmxvYiwgcmVjb3JkaW5nUHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxhbnk+LCAuLi5hcmdzPzogYW55KSA9PiBhbmd1bGFyLklQcm9taXNlPGFueT5cclxuICAgIHZoc0lzUmVjb3JkaW5nPzogYm9vbGVhbjtcclxuICAgIHZoc1JlY29yZFVybD86IHN0cmluZztcclxuICAgIHZoc09uQmVmb3JlUmVjb3JkaW5nU3RhcnRlZENhbGxiYWNrPzogKHJlY29yZGluZ1N0YXR1cz86IGJvb2xlYW4pID0+IGFuZ3VsYXIuSVByb21pc2U8YW55PjtcclxuICAgIHZoc09uUGF1c2VSZWNvcmRpbmdDYWxsYmFjaz86IChwYXVzZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XHJcbiAgICB2aHNPblN0YXJ0UmVjb3JkaW5nQ2FsbGJhY2s6IChyZWNvZGluZ1Byb21pc2U/OiBhbmd1bGFyLklQcm9taXNlPGFueT4pID0+IGFuZ3VsYXIuSVByb21pc2U8YW55PjtcclxuXHJcbiAgICB2bT86IFZoc1JlY29yZFJ0Y0NvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNSZWNvcmRSdGNDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5cclxuICAgIHB1YmxpYyBhbGxvd1BhdXNlOiBib29sZWFuO1xyXG4gICAgcHVibGljIGFsbG93U2F2ZVJlY29yZGluZzogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBhbGxvd1BsYXliYWNrOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBpc0FjdGl2ZVN0YXJ0UmVjb3JkaW5nQnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzQWN0aXZlU3RvcFJlY29yZGluZ0J1dHRvbjogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc0FjdGl2ZVBhdXNlUmVjb3JkaW5nQnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzQWN0aXZlUmVzdW1lUmVjb3JkaW5nQnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzQWN0aXZlU2F2ZVJlY29yZGluZ0J1dHRvbjogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1JlY29yZGluZzogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1JlY29yZE9uUGF1c2U6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHJlY29yZGluZ1RpbWU6IG51bWJlciA9IG51bGw7XHJcbiAgICBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICAgIHByaXZhdGUgbWVkaWFTdHJlYW06IGFueTtcclxuICAgIHByaXZhdGUgcmVjb3JkUnRjUmVjb3JkZXI6IGFueTtcclxuXHJcbiAgICBwcml2YXRlIGF1ZGlvQ29udGV4dDogQXVkaW9Db250ZXh0O1xyXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lBcnJheTogVWludDhBcnJheTtcclxuICAgIHByaXZhdGUgYW5hbHlzZXI6IEFuYWx5c2VyTm9kZTtcclxuICAgIHByaXZhdGUgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgIHByaXZhdGUgY2FudmFzQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xyXG4gICAgcHJpdmF0ZSB0aW1lcjogYW55O1xyXG5cclxuICAgIHByaXZhdGUgcmVjb3JkVXJsOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBpbnN0cnVjdGlvbnM6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgYXVkaW9XaWR0aDogbnVtYmVyID0gNDUwO1xyXG4gICAgcHVibGljIGF1ZGlvSGVpZ2h0OiBudW1iZXIgPSAzMDtcclxuICAgIC8qIFRPRE86IE1vdmUgYWxsIHN0eWxlIHRoaW5ncyB0byBjc3MgKi9cclxuXHJcbiAgICBwcml2YXRlIG1lZGlhQ29uc3RyYWludHMgPSB7XHJcbiAgICAgICAgYXVkaW86IHRydWUsXHJcbiAgICAgICAgdmlkZW86IGZhbHNlXHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgb25CZWZvcmVSZWNvcmRpbmdTdGFydGVkQ2FsbGJhY2s6IChyZWNvcmRpbmdTdGF0dXM/OiBib29sZWFuKSA9PiBhbmd1bGFyLklQcm9taXNlPGFueT47XHJcbiAgICBwcml2YXRlIG9uUGF1c2VSZWNvcmRpbmdDYWxsYmFjazogKHBhdXNlZDogYm9vbGVhbikgPT4gdm9pZDtcclxuXHJcbiAgICBwdWJsaWMgcmVjb3JkaW5nRGVmZXJyZWQ6IGFuZ3VsYXIuSURlZmVycmVkPGFueT47XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcGFyc2VcIixcclxuICAgICAgICBcIiRxXCJcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNSZWNvcmRSdGNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkcGFyc2U6IGFuZ3VsYXIuSVBhcnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkcTogYW5ndWxhci5JUVNlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAoPGFueT50aGlzLmF1ZGlvQ29udGV4dCkuY2xvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzUmVjb3JkUnRjRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG5cclxuICAgICAgICB0aGlzLmFsbG93UGF1c2UgPSB0aGlzLiRzY29wZS52aHNBbGxvd1BhdXNlO1xyXG4gICAgICAgIHRoaXMuYWxsb3dTYXZlUmVjb3JkaW5nID0gdGhpcy4kc2NvcGUudmhzQWxsb3dTYXZlUmVjb3JkaW5nO1xyXG4gICAgICAgIHRoaXMuYWxsb3dQbGF5YmFjayA9IHRoaXMuJHNjb3BlLnZoc0FsbG93UGxheWJhY2s7XHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSB0aGlzLiRzY29wZS52aHNNYXhMZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBY3RpdmVTdGFydFJlY29yZGluZ0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc0FjdGl2ZVN0b3BSZWNvcmRpbmdCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQWN0aXZlUGF1c2VSZWNvcmRpbmdCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQWN0aXZlUmVzdW1lUmVjb3JkaW5nQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0FjdGl2ZVNhdmVSZWNvcmRpbmdCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGFuZ3VsYXIuaXNEZWZpbmVkKHRoaXMuJHNjb3BlLnZoc0lzUmVjb3JkaW5nKSA/IHRoaXMuJHNjb3BlLnZoc0lzUmVjb3JkaW5nIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRVcmwgPSBhbmd1bGFyLmlzRGVmaW5lZCh0aGlzLiRzY29wZS52aHNSZWNvcmRVcmwpID8gdGhpcy4kc2NvcGUudmhzUmVjb3JkVXJsIDogXCJcIjtcclxuICAgICAgICB0aGlzLmlzUmVjb3JkT25QYXVzZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcyA9IDxhbnk+IGVsZW1lbnQuZmluZCgnY2FudmFzLmF1ZGlvQ2FudmFzJylbMF07XHJcbiAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZVJlY29yZGluZ1N0YXJ0ZWRDYWxsYmFjayA9IHRoaXMuJHNjb3BlLnZoc09uQmVmb3JlUmVjb3JkaW5nU3RhcnRlZENhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMub25QYXVzZVJlY29yZGluZ0NhbGxiYWNrID0gdGhpcy4kc2NvcGUudmhzT25QYXVzZVJlY29yZGluZ0NhbGxiYWNrO1xyXG4gICAgICAgIGlmICh0aGlzLm9uQmVmb3JlUmVjb3JkaW5nU3RhcnRlZENhbGxiYWNrICYmIHRoaXMub25QYXVzZVJlY29yZGluZ0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRvbihcInBhdXNlUmVjb3JkaW5nRXZlbnRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblBhdXNlUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oRXZlbnQuUkVDT1JERVJfU1RPUF9SRUNPUkRfRVhURVJOQUxMWSwgKCkgPT4gdGhpcy5vblN0b3BSZWNvcmRpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGFydFJlY29yZGluZygpIHtcclxuICAgICAgICAoPGFueT4gd2luZG93KS5uYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh0aGlzLm1lZGlhQ29uc3RyYWludHMpXHJcbiAgICAgICAgICAgIC50aGVuKChzdHJlYW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGlvVHJhY2tzID0gc3RyZWFtLmdldEF1ZGlvVHJhY2tzKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnR290IHN0cmVhbSB3aXRoIGNvbnN0cmFpbnRzOicsIHRoaXMubWVkaWFDb25zdHJhaW50cyk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVXNpbmcgYXVkaW8gZGV2aWNlOiAnICsgYXVkaW9UcmFja3NbMF0ubGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgc3RyZWFtLm9uaW5hY3RpdmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3RyZWFtIGVuZGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVN0cmVhbSA9IHN0cmVhbTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBWaXN1YWxpemF0aW9uIG1pYyBpbnB1dFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hdWRpb0NvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9TdHJlYW0gPSAoPGFueT4gdGhpcy5hdWRpb0NvbnRleHQpLmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHN0cmVhbSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuYWx5c2VyID0gdGhpcy5hdWRpb0NvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTtcclxuICAgICAgICAgICAgICAgIGF1ZGlvU3RyZWFtLmNvbm5lY3QodGhpcy5hbmFseXNlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IDAuNztcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZSA9IDIwNDg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZVN0YXJ0UmVjb3JkaW5nQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aXZlU3RvcFJlY29yZGluZ0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aXZlUGF1c2VSZWNvcmRpbmdCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZVJlc3VtZVJlY29yZGluZ0J1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZVNhdmVSZWNvcmRpbmdCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZFJ0Y1JlY29yZGVyID0gbmV3IFJlY29yZFJUQyh0aGlzLm1lZGlhU3RyZWFtLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2F1ZGlvJyxcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRlclR5cGU6IFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkUnRjUmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUudmhzSXNSZWNvcmRpbmcgPSB0aGlzLmlzUmVjb3JkaW5nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRVcmwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUudmhzUmVjb3JkVXJsID0gdGhpcy5yZWNvcmRVcmw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvRHJhd0xhbWJkYSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uQmVmb3JlUmVjb3JkaW5nU3RhcnRlZENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkJlZm9yZVJlY29yZGluZ1N0YXJ0ZWRDYWxsYmFjayh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCIxLiBTdGFydCByZWNvcmRpbmcuIENyZWF0ZSBkZWZlcnJlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkaW5nRGVmZXJyZWQgPSB0aGlzLiRxLmRlZmVyKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjIuIFJldHVybiBkZWZlcnJlZCBwcm9taXNlIHRvIGNvbnRyb2xsZXIgd2hpY2ggdXNlIHRoZSByZWNvcmRlclwiLCB0aGlzLnJlY29yZGluZ0RlZmVycmVkLnByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHNjb3BlLnZoc09uU3RhcnRSZWNvcmRpbmdDYWxsYmFjayh0aGlzLnJlY29yZGluZ0RlZmVycmVkLnByb21pc2UpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCduYXZpZ2F0b3IuZ2V0VXNlck1lZGlhIGVycm9yOiAnLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblN0YXJ0UmVjb3JkaW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub25CZWZvcmVSZWNvcmRpbmdTdGFydGVkQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgbGV0IHByb21pc2U6IGFuZ3VsYXIuSVByb21pc2U8YW55PiA9IHRoaXMub25CZWZvcmVSZWNvcmRpbmdTdGFydGVkQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblN0b3BSZWNvcmRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5pc0FjdGl2ZVN0YXJ0UmVjb3JkaW5nQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzQWN0aXZlU3RvcFJlY29yZGluZ0J1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNBY3RpdmVQYXVzZVJlY29yZGluZ0J1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNBY3RpdmVSZXN1bWVSZWNvcmRpbmdCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQWN0aXZlU2F2ZVJlY29yZGluZ0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnZoc0lzUmVjb3JkaW5nID0gdGhpcy5pc1JlY29yZGluZztcclxuICAgICAgICB0aGlzLmlzUmVjb3JkT25QYXVzZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVjb3JkUnRjUmVjb3JkZXIuc3RvcFJlY29yZGluZygoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkVXJsID0gdGhpcy5yZWNvcmRSdGNSZWNvcmRlci50b1VSTCgpO1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS52aHNSZWNvcmRVcmwgPSB0aGlzLnJlY29yZFVybDtcclxuICAgICAgICAgICAgbGV0IHJldHVybmVkUHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxhbnk+O1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjYuIFN0b3AgUmVjb3JkIG9uIFJlY29yZGVyLiBcIiArXHJcbiAgICAgICAgICAgIC8vICAgICBcIlBhcnNlIGNhbGxiYWNrIGZyb20gcGFyZW50LCBjYWxsIGl0IHdpdGggc2V0IHVwIGJsb2IgYW5kIHJlY29kaW5nIHByb21pc2UgdmFsdWVzLiBcIiArXHJcbiAgICAgICAgICAgIC8vICAgICBcIlRha2UgYSByZXR1cm5lZCBwcm9taXNlIGFuZCBpcyBpdCBkZWZpbmVkIC0gd2FpdCB3aGlsZSBwcm9taXNlIHJlc29sdmUsIHRoZW4gcmVzb2x2ZSByZWNvcmRpbmdQcm9taXNlLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuZWRQcm9taXNlID0gdGhpcy4kcGFyc2UodGhpcy4kc2NvcGUudmhzT25Db21wbGV0ZVJlY29yZGluZ0NhbGxiYWNrKSh0aGlzLiRzY29wZS4kcGFyZW50LCB7XHJcbiAgICAgICAgICAgICAgICBibG9iOiB0aGlzLnJlY29yZFJ0Y1JlY29yZGVyLmdldEJsb2IoKSxcclxuICAgICAgICAgICAgICAgIHJlY29yZGluZ1Byb21pc2U6IHRoaXMucmVjb3JkaW5nRGVmZXJyZWQucHJvbWlzZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHJldHVybmVkUHJvbWlzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuZWRQcm9taXNlLnRoZW4oKCkgPT4gdGhpcy5yZWNvcmRpbmdEZWZlcnJlZC5yZXNvbHZlKHRoaXMucmVjb3JkUnRjUmVjb3JkZXIuZ2V0QmxvYigpKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZGluZ0RlZmVycmVkLnJlc29sdmUodGhpcy5yZWNvcmRSdGNSZWNvcmRlci5nZXRCbG9iKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIHQuc3RvcCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25QYXVzZVJlY29yZGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1JlY29yZE9uUGF1c2UpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNvcmRSdGNSZWNvcmRlci5yZXN1bWVSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgdGhpcy5pc1JlY29yZE9uUGF1c2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25QYXVzZVJlY29yZGluZ0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGF1c2VSZWNvcmRpbmdDYWxsYmFjayhmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZXN1bWVUaW1lcigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkUnRjUmVjb3JkZXIucGF1c2VSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgdGhpcy5pc1JlY29yZE9uUGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vblBhdXNlUmVjb3JkaW5nQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25QYXVzZVJlY29yZGluZ0NhbGxiYWNrKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VUaW1lcigpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIG9uU2F2ZVJlY29yZGluZygpIHtcclxuICAgICAgICBsZXQgYmxvYiA9IHRoaXMucmVjb3JkUnRjUmVjb3JkZXIuZ2V0QmxvYigpO1xyXG5cclxuICAgICAgICBpZiAoKDxhbnk+IHdpbmRvdykuQmxvYiAmJiAoPGFueT4gd2luZG93KS5uYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYikge1xyXG4gICAgICAgICAgICAoPGFueT4gd2luZG93KS5uYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihibG9iLCAncmVjb3JkLicgKyAnd2F2Jyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgICAgIGxldCBhOmFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICAgICAgICAgICAgYS5zdHlsZSA9ICdkaXNwbGF5OiBub25lJztcclxuICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gJ3JlY29yZC4nICsgXCJ3YXZcIjtcclxuICAgICAgICAgICAgYS5jbGljaygpO1xyXG4gICAgICAgICAgICAoPGFueT4gd2luZG93KS5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhcnRUaW1lcigpe1xyXG4gICAgICAgIHRoaXMucmVjb3JkaW5nVGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXN1bWVUaW1lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RvcFRpbWVyKCl7XHJcbiAgICAgICAgdGhpcy5wYXVzZVRpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRpbmdUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBhdXNlVGltZXIoKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc3VtZVRpbWVyKCkge1xyXG4gICAgICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkaW5nVGltZSsrO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZWNvcmRpbmdUaW1lID49IHRoaXMubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3RvcFJlY29yZGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvRHJhd0xhbWJkYSA9ICgpID0+IHtcclxuICAgICAgICBsZXQgV0lEVEggPSB0aGlzLmNhbnZhcy53aWR0aDtcclxuICAgICAgICBsZXQgSEVJR0hUID0gdGhpcy5jYW52YXMuaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQuZmlsbFN0eWxlID0gJ3JnYigyMDAsIDIwMCwgMjAwKSc7XHJcbiAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIFdJRFRILCBIRUlHSFQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5kb0RyYXdMYW1iZGEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hbmFseXNlci5nZXRCeXRlRnJlcXVlbmN5RGF0YSh0aGlzLmZyZXF1ZW5jeUFycmF5KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0LmxpbmVXaWR0aCA9IDE7XHJcbiAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0LnN0cm9rZVN0eWxlID0gJ3JnYigwLCAwLCAwKSc7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgbGV0IHNsaWNlV2lkdGggPSBXSURUSCAqIDEuMCAvIHRoaXMuZnJlcXVlbmN5QXJyYXkubGVuZ3RoO1xyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMuZnJlcXVlbmN5QXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy5mcmVxdWVuY3lBcnJheVtpXSAvIDEyOC4wO1xyXG4gICAgICAgICAgICBsZXQgeSA9IHYgKiBIRUlHSFQvMjtcclxuXHJcbiAgICAgICAgICAgIGlmKGkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5tb3ZlVG8oeCwgSEVJR0hUIC0geSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQubGluZVRvKHgsIEhFSUdIVCAtIHkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB4ICs9IHNsaWNlV2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY2FudmFzQ29udGV4dC5saW5lVG8oV0lEVEgsIEhFSUdIVCAvIDIpO1xyXG4gICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5zdHJva2UoKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1JlY29yZFJ0Y0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzUmVjb3JkUnRjRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzUmVjb3JkUnRjQ29udHJvbGxlcikge1xyXG5cclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLmxpbmsgPSBsaW5rO1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBWaHNSZWNvcmRSdGNDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0ge1xyXG4gICAgICAgIHZoc0lkOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzQWxsb3dQYXVzZTogXCI9P1wiLFxyXG4gICAgICAgIHZoc0FsbG93U2F2ZVJlY29yZGluZzogXCI9P1wiLFxyXG4gICAgICAgIHZoc0FsbG93UGxheWJhY2s6IFwiPT9cIixcclxuICAgICAgICB2aHNNYXhMZW5ndGg6IFwiPT9cIixcclxuICAgICAgICB2aHNPbkNvbXBsZXRlUmVjb3JkaW5nQ2FsbGJhY2s6IFwiQD9cIixcclxuICAgICAgICB2aHNJc1JlY29yZGluZzogXCI9P1wiLFxyXG4gICAgICAgIHZoc1JlY29yZFVybDogXCI9P1wiLFxyXG4gICAgICAgIHZoc09uQmVmb3JlUmVjb3JkaW5nU3RhcnRlZENhbGxiYWNrOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzT25QYXVzZVJlY29yZGluZ0NhbGxiYWNrOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzT25TdGFydFJlY29yZGluZ0NhbGxiYWNrOiBcIj0/XCJcclxuICAgIH07XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1yZWNvcmQtcnRjLWF1ZGlvLmh0bWxcIik7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNSZWNvcmRSdGNEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuXHJcbi8qXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNDaGVja1JlY29yZFJ0Y0F1ZGlvRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNSZWNvcmRSdGNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNSZWNvcmRSdGNDb250cm9sbGVyKSB7XHJcblxyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUubGluayA9IGxpbms7XHJcbiAgICBkaXJlY3RpdmUuY29udHJvbGxlciA9IFZoc1JlY29yZFJ0Y0NvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7XHJcbiAgICAgICAgdmhzSWQ6IFwiPT9cIixcclxuICAgICAgICB2aHNBbGxvd1BhdXNlOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzTWF4TGVuZ3RoOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzT25Db21wbGV0ZVJlY29yZGluZ0NhbGxiYWNrOiBcIj0/XCJcclxuICAgIH07XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1jaGVjay1yZWNvcmQtcnRjLWF1ZGlvLmh0bWxcIik7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNDaGVja1JlY29yZFJ0Y0F1ZGlvRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07Ki9cclxuIiwiaW1wb3J0IHtJV2luZG93U2VydmljZX0gZnJvbSBcImFuZ3VsYXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzUmV0dXJuVG9Pd25BY2NvdW50RGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICB2bT86IFZoc1JldHVyblRvT3duQWNjb3VudENvbnRyb2xsZXJcclxufVxyXG5cclxuY2xhc3MgVmhzUmV0dXJuVG9Pd25BY2NvdW50Q29udHJvbGxlciB7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc1JldHVyblRvT3duQWNjb3VudERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkd2luZG93OiBJV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aEFwaTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyByZXR1cm5Vc2VyVG9Pd25BY2NvdW50KCkge1xyXG4gICAgICAgIGxldCB0b2tlbiA9IHRoaXMuYXV0aE1hbmFnZXIuZ2V0UHJldlRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5yZW1vdmVQcmV2VG9rZW4oKTtcclxuICAgICAgICB0aGlzLmF1dGhBcGkuY2hhbmdlVG9rZW5JbmZvKHRva2VuLCBmYWxzZSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24ucGF0aCgnLycpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1JldHVyblRvT3duQWNjb3VudERpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIHZhciBkaXJlY3RpdmU6IGFueSA9IHt9O1xyXG4gICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gXCJBXCI7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB0cnVlO1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBWaHNSZXR1cm5Ub093bkFjY291bnRDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtcmV0dXJuLXRvLW93bi1hY2NvdW50Lmh0bWxcIik7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNSZXR1cm5Ub093bkFjY291bnREaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VmhzU2VhcmNoQ29udHJvbGxlcn0gZnJvbSBcIi4vVmhzU2VhcmNoRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7SVF1aXpRdWVzdGlvbn0gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6UXVlc3Rpb25cIjtcclxuaW1wb3J0IHtJUXVpekFuc3dlcn0gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6QW5zd2VyXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNTY2FsZWRBbnN3ZXJRdWVzdGlvbkRpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgcXVlc3Rpb246IElRdWl6UXVlc3Rpb247XHJcbiAgICBhbnN3ZXJzOiBBcnJheTxJUXVpekFuc3dlcj47XHJcbiAgICBwcmV2aWV3OiBib29sZWFuO1xyXG4gICAgY2hlY2tlcjogYW55O1xyXG5cclxuICAgIHZtOiBWaHNTY2FsZWRBbnN3ZXJRdWVzdGlvbkNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNTY2FsZWRBbnN3ZXJRdWVzdGlvbkNvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzU2NhbGVkQW5zd2VyUXVlc3Rpb25EaXJlY3RpdmVTY29wZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNTY2FsZWRBbnN3ZXJRdWVzdGlvbkRpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLCBjb250cm9sbGVyOiBWaHNTZWFyY2hDb250cm9sbGVyLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2NsdWRlOiBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb24pIHtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IFwiQVwiO1xyXG4gICAgZGlyZWN0aXZlLmxpbmsgPSBsaW5rO1xyXG4gICAgZGlyZWN0aXZlLnNjb3BlID0ge1xyXG4gICAgICAgIHF1ZXN0aW9uOiBcIj12aHNRdWVzdGlvblwiLFxyXG4gICAgICAgIGFuc3dlcnM6IFwiPXZoc0Fuc3dlcnNcIixcclxuICAgICAgICBwcmV2aWV3OiBcIj12aHNQcmV2aWV3XCIsXHJcbiAgICAgICAgY2hlY2tlcjogXCI9dmhzQ2hlY2tlclwiXHJcbiAgICB9O1xyXG4gICAgZGlyZWN0aXZlLmNvbnRyb2xsZXIgPSBWaHNTZWFyY2hDb250cm9sbGVyO1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtc2NhbGVkLWFuc3dlci1xdWVzdGlvbi5odG1sXCIpO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzU2NhbGVkQW5zd2VyUXVlc3Rpb25EaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VhcmNoQ29udHJvbExpc3RlbmVyLCBTZWFyY2hDb250cm9sSGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9TZWFyY2hDb250cm9sSGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlckNvbnRyb2xsZXJ9IGZyb20gXCIuL1BhZ2VIZWFkZXJEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvTWF0ZXJpYWxzUm91dGVyXCI7XHJcbmltcG9ydCB7XHJcbiAgICBJTWVudVVwZGF0ZUxpc3RlbmVyLFxyXG4gICAgTWVudUhlbHBlclxyXG59IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuXHJcbmludGVyZmFjZSBWaHNTZWFyY2hBdHRyaWJ1dGVzIGV4dGVuZHMgYW5ndWxhci5JQXR0cmlidXRlcyB7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc1NlYXJjaERpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgdm06IFZoc1NlYXJjaENvbnRyb2xsZXI7XHJcbiAgICBjb250cm9sbGFibGU/OiBib29sZWFuO1xyXG4gICAgc2hvd0ZpbGVGb3JtYXQ/OiBib29sZWFuO1xyXG4gICAgaXNOYXZiYXJGb3JtPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc1NlYXJjaENvbnRyb2xsZXIgaW1wbGVtZW50cyBJTWVudVVwZGF0ZUxpc3RlbmVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgRklMRV9GT1JNQVRfUEFSQU1FVEVSID0gXCJmaWxlRm9ybWF0XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNFQVJDSF9TVFJJTkdfUEFSQU1FVEVSID0gXCJzZWFyY2hTdHJpbmdcIjtcclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc1NlYXJjaERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBuZy5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5hZGRNZW51VXBkYXRlTGlzdGVuZXIodGhpcyk7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICBpZiAoIXRoaXMuJHJvb3RTY29wZVtcIl9fdmhzU2VhcmNoSW5mb1wiXSkge1xyXG4gICAgICAgICAgICB0aGlzLiRyb290U2NvcGVbXCJfX3Zoc1NlYXJjaEluZm9cIl0gPSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlRm9ybWF0OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nOiBcIlwiXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb1N1Ym1pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5tYXRlcmlhbHNSb3V0ZXIuaW5kZXhVcmwoKSlcclxuICAgICAgICAgICAgLnNlYXJjaChWaHNTZWFyY2hDb250cm9sbGVyLkZJTEVfRk9STUFUX1BBUkFNRVRFUiwgdGhpcy4kcm9vdFNjb3BlW1wiX192aHNTZWFyY2hJbmZvXCJdLmZpbGVGb3JtYXQpXHJcbiAgICAgICAgICAgIC5zZWFyY2goVmhzU2VhcmNoQ29udHJvbGxlci5TRUFSQ0hfU1RSSU5HX1BBUkFNRVRFUiwgdGhpcy4kcm9vdFNjb3BlW1wiX192aHNTZWFyY2hJbmZvXCJdLnNlYXJjaFN0cmluZyk7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlW1wiX192aHNTZWFyY2hJbmZvXCJdID0ge1xyXG4gICAgICAgICAgICBmaWxlRm9ybWF0OiBcIlwiLFxyXG4gICAgICAgICAgICBzZWFyY2hTdHJpbmc6IFwiXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbk1lbnVJdGVtVXBkYXRlKG5ld01lbnVJdGVtS2V5OiBzdHJpbmcsIG9sZE1lbnVJdGVtS2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoKG5ld01lbnVJdGVtS2V5ID09IE1lbnVIZWxwZXIuTUFJTl9NRU5VX0tFWSB8fCBuZXdNZW51SXRlbUtleSA9PSBNZW51SGVscGVyLkVEVUNBVElPTl9NQVRFUklBTFNfTUVOVV9LRVkgfHwgbmV3TWVudUl0ZW1LZXkgPT0gXCJcIikgJiYgdGhpcy4kc2NvcGUuY29udHJvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzU2VhcmNoRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsIGNvbnRyb2xsZXI6IFZoc1NlYXJjaENvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbikge1xyXG4gICAgICAgICRzY29wZS4kb24oXCIkZGVzdHJveVwiLFxyXG4gICAgICAgICAgICAoKSA9PiBNZW51SGVscGVyLnJlbW92ZU1lbnVVcGRhdGVMaXN0ZW5lcihjb250cm9sbGVyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW55ID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5zY29wZSA9IHtcclxuICAgICAgICBjb250cm9sbGFibGU6IFwiPT92aHNDb250cm9sbGFibGVcIixcclxuICAgICAgICBzaG93RmlsZUZvcm1hdDogXCI9P3Zoc1Nob3dGaWxlRm9ybWF0XCIsXHJcbiAgICAgICAgaXNOYXZiYXJGb3JtOiBcIj0/dmhzSXNOYXZiYXJGb3JtXCJcclxuICAgIH07XHJcbiAgICBkaXJlY3RpdmUuY29udHJvbGxlciA9IFZoc1NlYXJjaENvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUudGVtcGxhdGVVcmwgPSB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1zZWFyY2guaHRtbFwiKTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc1NlYXJjaERpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5cclxuaW50ZXJmYWNlIFZoc1NlbGVjdEFsbEF0dHJpYnV0ZXMgZXh0ZW5kcyBhbmd1bGFyLklBdHRyaWJ1dGVzIHtcclxufVxyXG5cclxuY2xhc3MgVmhzU2VsZWN0QWxsQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZTtcclxuICAgIHByaXZhdGUgdGFyZ2V0RWxlbWVudDogSlF1ZXJ5O1xyXG4gICAgcHJpdmF0ZSB0aGlzRWxlbWVudDogSlF1ZXJ5O1xyXG4gICAgcHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgVElNRVJfTUlMTElTRUNPTkRTID0gMTAwMDtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkdGltZW91dFwiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQgPSAkdGltZW91dDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gIXRoaXMudGFyZ2V0RWxlbWVudCB8fCAkKHRoaXMudGFyZ2V0RWxlbWVudCkucHJvcCgnZGlzYWJsZWQnKTtcclxuICAgICAgICAkKHRoaXMudGhpc0VsZW1lbnQpLnByb3AoJ2Rpc2FibGVkJywgcmVzdWx0KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50U3RhdGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHRvdGFsID0gdGhpcy50YXJnZXRFbGVtZW50LmZpbmQoJ29wdGlvbicpLmxlbmd0aDtcclxuICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLnRhcmdldEVsZW1lbnQuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykubGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiAoc2VsZWN0ZWQgPT0gdG90YWwgJiYgdG90YWwgPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVmcmVzaFN0YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICQodGhpcy50aGlzRWxlbWVudCkucHJvcCgnY2hlY2tlZCcsIHRoaXMuZ2V0Q3VycmVudFN0YXRlKCkpO1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYWtlU2VsZWN0QWxsKGVsZW1lbnQ6IGFueSwgJHNjb3BlOiBhbmd1bGFyLklTY29wZSkge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlID0gJHNjb3BlO1xyXG4gICAgICAgICRzY29wZVtcInJlZnJlc2hTdGF0ZVwiXSA9ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFN0YXRlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudGhpc0VsZW1lbnQgPSAkKGVsZW1lbnQpLmZpbmQoJ2lucHV0Jyk7XHJcblxyXG4gICAgICAgIGxldCBwbGFjZUZvclNlbGVjdEFsbCA9ICQoZWxlbWVudCkuZmluZCgnLnBsYWNlLWZvci1zZWxlY3QtYWxsJyk7XHJcblxyXG4gICAgICAgIGlmKHBsYWNlRm9yU2VsZWN0QWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBjbG9uZWRUaGlzRWxlbWVudCA9IHRoaXMudGhpc0VsZW1lbnQuY2xvbmUoKTtcclxuICAgICAgICAgICAgcGxhY2VGb3JTZWxlY3RBbGwuYXBwZW5kKGNsb25lZFRoaXNFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0RWxlbWVudCA9ICQoZWxlbWVudCkuZmluZCgnc2VsZWN0Jyk7XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkKCk7XHJcblxyXG4gICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICRzY29wZS4kd2F0Y2goJ29wdGlvbicsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSwgVmhzU2VsZWN0QWxsQ29udHJvbGxlci5USU1FUl9NSUxMSVNFQ09ORFMpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFN0YXRlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ2J1dHRvbicsIG51bGwsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9LCBWaHNTZWxlY3RBbGxDb250cm9sbGVyLlRJTUVSX01JTExJU0VDT05EUyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCh0aGlzLnRhcmdldEVsZW1lbnQpLmNoYW5nZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hTdGF0ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQodGhpcy50YXJnZXRFbGVtZW50KS5vbignY2hhbmdlJywgJ29wdGlvbicsIFtdLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hTdGF0ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnLnNlbGVjdC1hbGwnLCAoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkKCkgfHwgZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG9wdGlvbnM6IEpRdWVyeSA9IHRoaXMudGFyZ2V0RWxlbWVudC5maW5kKCdvcHRpb24nKTtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1N0YXRlOiBib29sZWFuID0gdGhpcy5nZXRDdXJyZW50U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKG9wdGlvbnNbaV0pLnByb3AoJ3NlbGVjdGVkJykgIT0gIXByZXZpb3VzU3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChvcHRpb25zW2ldKS5wcm9wKCdzZWxlY3RlZCcsICFwcmV2aW91c1N0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChvcHRpb25zW2ldKS50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aGlzRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4vKiAgICAgICAgICAgICQodGhpcy50aGlzRWxlbWVudCkuY2hhbmdlKChldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoKSB8fCBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoU3RhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9uczogSlF1ZXJ5ID0gdGhpcy50YXJnZXRFbGVtZW50LmZpbmQoJ29wdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RhdGU6IGJvb2xlYW4gPSB0aGlzLmdldEN1cnJlbnRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQob3B0aW9uc1tpXSkucHJvcCgnc2VsZWN0ZWQnKSAhPSAhcHJldmlvdXNTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKG9wdGlvbnNbaV0pLnByb3AoJ3NlbGVjdGVkJywgIXByZXZpb3VzU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKG9wdGlvbnNbaV0pLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRoaXNFbGVtZW50LmJsdXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldEVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7Ki9cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1NlbGVjdEFsbERpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgZWxlbWVudDogYW55LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBWaHNTZWxlY3RBbGxBdHRyaWJ1dGVzLCBjb250cm9sbGVyOiBWaHNTZWxlY3RBbGxDb250cm9sbGVyLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2NsdWRlOiBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb24pIHtcclxuICAgICAgICBjb250cm9sbGVyLm1ha2VTZWxlY3RBbGwoZWxlbWVudCwgJHNjb3BlKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGlyZWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9ICdBJztcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gW1wiJHRpbWVvdXRcIiwgVmhzU2VsZWN0QWxsQ29udHJvbGxlcl07XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7fTtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZSgnY29tcG9uZW50cy92aHMtc2VsZWN0LWFsbC5odG1sJyk7XHJcbiAgICBkaXJlY3RpdmUudHJhbnNjbHVkZSA9IHRydWU7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNTZWxlY3RBbGxEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aENvdXJzZX0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhDb3Vyc2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc1NlbGVjdExlYXJuaW5nUGF0aENvdXJzZXNEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGJ1c2luZXNzVW5pdElkPzogbnVtYmVyO1xyXG4gICAgbGFuZ3VhZ2VJZD86IG51bWJlcjtcclxuICAgIG9uQ291cnNlU2VsZWN0PzogKElMZWFybmluZ1BhdGhDb3Vyc2UpID0+IHZvaWQ7XHJcbiAgICBleGNsdWRlZENvdXJzZXM/OiBJTGVhcm5pbmdQYXRoQ291cnNlW107XHJcblxyXG4gICAgdm0/OiBWaHNTZWxlY3RMZWFybmluZ1BhdGhDb3Vyc2VzQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc1NlbGVjdExlYXJuaW5nUGF0aENvdXJzZXNDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTGVhcm5pbmdQYXRoQ291cnNlPjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzU2VsZWN0TGVhcm5pbmdQYXRoQ291cnNlc0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJTGVhcm5pbmdQYXRoQ291cnNlPigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvbGVhcm5pbmdQYXRocy9zZWFyY2gvY291cnNlcy9hdmFpbGFibGVcIikpKTtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIubGFuZ3VhZ2VJZCA9IHRoaXMuJHNjb3BlLmxhbmd1YWdlSWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLmV4Y2x1ZGVkQ291cnNlcykge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLmV4Y2x1ZGVkQ291cnNlSWRzID0gdGhpcy5nZXRFeGNsdWRlZENvdXJzZUlkcyh0aGlzLiRzY29wZS5leGNsdWRlZENvdXJzZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKFwiZXhjbHVkZWRDb3Vyc2VzXCIsIChuZXdWYWx1ZTogSUxlYXJuaW5nUGF0aENvdXJzZVtdKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5leGNsdWRlZENvdXJzZUlkcyA9IHRoaXMuZ2V0RXhjbHVkZWRDb3Vyc2VJZHMobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRDb3Vyc2UoY291cnNlSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybChjb3Vyc2VJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RDb3Vyc2UoY291cnNlOiBJTGVhcm5pbmdQYXRoQ291cnNlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLm9uQ291cnNlU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGxldCByZWRpcmVjdGlvblRvUHJldmlvdXNQYWdlSXNOZWVkZWQ6IGJvb2xlYW4gPSB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuY3VycmVudFBhZ2UgPiAwXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZW50cmllcy5sZW5ndGggPT0gMTtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUub25Db3Vyc2VTZWxlY3QoY291cnNlKTtcclxuICAgICAgICAgICAgaWYgKHJlZGlyZWN0aW9uVG9QcmV2aW91c1BhZ2VJc05lZWRlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmN1cnJlbnRQYWdlID0gdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmN1cnJlbnRQYWdlIC0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEV4Y2x1ZGVkQ291cnNlSWRzKGNvdXJzZXM6IElMZWFybmluZ1BhdGhDb3Vyc2VbXSk6IG51bWJlcltdIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgIGNvdXJzZXMuZm9yRWFjaChjb3Vyc2UgPT4gcmVzdWx0LnB1c2goY291cnNlLmlkKSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1NlbGVjdExlYXJuaW5nUGF0aENvdXJzZXNEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc1NlbGVjdExlYXJuaW5nUGF0aENvdXJzZXNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNTZWxlY3RMZWFybmluZ1BhdGhDb3Vyc2VzQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNTZWxlY3RMZWFybmluZ1BhdGhDb3Vyc2VzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXRJZDogXCI9P3Zoc0J1c2luZXNzVW5pdElkXCIsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlSWQ6IFwiPT92aHNMYW5ndWFnZUlkXCIsXHJcbiAgICAgICAgICAgIG9uQ291cnNlU2VsZWN0OiBcIj0/dmhzT25Db3Vyc2VTZWxlY3RcIixcclxuICAgICAgICAgICAgZXhjbHVkZWRDb3Vyc2VzOiBcIj0/dmhzRXhjbHVkZWRDb3Vyc2VzXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1zZWxlY3QtbGVhcm5pbmctcGF0aC1jb3Vyc2VzLmh0bWxcIiksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzU2VsZWN0TGVhcm5pbmdQYXRoQ291cnNlc0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQgSUF1Z21lbnRlZEpRdWVyeSA9IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeTtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFN0aWNreURpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogbmcuSURpcmVjdGl2ZSB7XHJcbiAgICBjb25zdCBTVElDS1lfQ0xBU1MgPSBcInN0aWNreVwiO1xyXG4gICAgY29uc3QgVE9QX09GRlNFVCA9IDA7XHJcbiAgICBmdW5jdGlvbiBsaW5rKHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnksIGF0dHJzOiBhbnkpIHtcclxuICAgICAgICBsZXQgZWxlbWVudFRvcFBvc2l0aW9uID0gZWxlbWVudC5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgJCh3aW5kb3cpLnNjcm9sbCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0ZpeGVkID0gZWxlbWVudC5oYXNDbGFzcyhTVElDS1lfQ0xBU1MpO1xyXG4gICAgICAgICAgICBsZXQgYnJlYWtwb2ludCA9IGVsZW1lbnRUb3BQb3NpdGlvbiAtIFRPUF9PRkZTRVQ7XHJcbiAgICAgICAgICAgIGxldCBzaG91bGRCZUZpeGVkID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpID49IGJyZWFrcG9pbnQ7XHJcbiAgICAgICAgICAgIGlmIChzaG91bGRCZUZpeGVkICYmICFpc0ZpeGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNzcygnd2lkdGgnLCBlbGVtZW50LmlubmVyV2lkdGgoKSArICdweCcpO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5jc3MoJ3RvcCcsIFRPUF9PRkZTRVQpO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5hZGRDbGFzcyhTVElDS1lfQ0xBU1MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkQmVGaXhlZCAmJiBpc0ZpeGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNzcygndG9wJywgJycpO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5jc3MoJ3dpZHRoJywgJycpO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcyhTVElDS1lfQ0xBU1MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGlua1xyXG4gICAgfTtcclxufVxyXG5cclxuU3RpY2t5RGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUHJvcGVydHl9IGZyb20gXCIuLi9zZXR0aW5ncy9tb2RlbHMvSVN5c3RlbVByb3BlcnR5XCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U3lzdGVtU2V0dGluZ3NSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1N5c3RlbVNldHRpbmdzUm91dGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJTWVudUl0ZW1TZXR0aW5nc30gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvbW9kZWxzL0lNZW51SXRlbVNldHRpbmdzXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTeXN0ZW1TZXR0aW5nc01lbnVJdGVtc1Zpc2liaWxpdHlEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtPzogU3lzdGVtU2V0dGluZ3NNZW51SXRlbXNWaXNpYmlsaXR5Q29udHJvbGxlcjtcclxuICAgIGJ1c2luZXNzVW5pdElkOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTeXN0ZW1TZXR0aW5nc01lbnVJdGVtc1Zpc2liaWxpdHlDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBtZW51SXRlbXNWaXNpYmlsaXR5U2V0dGluZ3M6IElNZW51SXRlbVNldHRpbmdzO1xyXG4gICAgcHVibGljIGlzQnVzaW5lc3NVbml0VHlwZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIGFsbFNldHRpbmdzOiBBcnJheTxJU3lzdGVtUHJvcGVydHk+O1xyXG4gICAgcHVibGljIGRpc2FibGVTYXZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFN5c3RlbVNldHRpbmdzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElTeXN0ZW1TZXR0aW5nc01lbnVJdGVtc1Zpc2liaWxpdHlEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRTZXJ2aWNlOiBCdXNpbmVzc1VuaXRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHN5c3RlbVNldHRpbmdzUm91dGVyOiBTeXN0ZW1TZXR0aW5nc1JvdXRlcikge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU1lTVEVNX1NFVFRJTkdfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIk1lbnUgaXRlbXMgdmlzaWJpbGl0eVwiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZFN5c3RlbVBlcm1pc3Npb25zKHN5c3RlbVBlcm1pc3Npb25zID0+IHN5c3RlbVBlcm1pc3Npb25zLmVkaXRTeXN0ZW1Db25maWd1cmF0aW9uKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQnVzaW5lc3NVbml0VHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlcnZpY2UuZ2V0U3lzdGVtTWVudUl0ZW1zU2V0dGluZ3MoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVJdGVtc1Zpc2liaWxpdHlTZXR0aW5ncyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZXJ2aWNlLmdldE1lbnVJdGVtc1NldHRpbmdzKHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVJdGVtc1Zpc2liaWxpdHlTZXR0aW5ncyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRBbGxTZXR0aW5ncygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQWxsU2V0dGluZ3MoKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0QWxsU3lzdGVtUHJvcGVydGllcygpLnRoZW4ociA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsU2V0dGluZ3MgPSByO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYXRhbG9nR2xvYmFsVmlzaWJpbGl0eSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZih0aGlzLmlzQnVzaW5lc3NVbml0VHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxTZXR0aW5ncy5maWx0ZXIocyA9PiBzLm5hbWUgPT09IFwiQlVTSU5FU1NfVU5JVF9MRVZFTF9DQVRBTE9HXCIgJiYgcy52YWx1ZSA9PT0gXCJ0cnVlXCIpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VzR2xvYmFsVmlzaWJpbGl0eSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZih0aGlzLmlzQnVzaW5lc3NVbml0VHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxTZXR0aW5ncy5maWx0ZXIocyA9PiBzLm5hbWUgPT09IFwiQlVTSU5FU1NfVU5JVF9MRVZFTF9DT1VSU0VTXCIgJiYgcy52YWx1ZSA9PT0gXCJ0cnVlXCIpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzR2xvYmFsVmlzaWJpbGl0eSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZih0aGlzLmlzQnVzaW5lc3NVbml0VHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxTZXR0aW5ncy5maWx0ZXIocyA9PiBzLm5hbWUgPT09IFwiQlVTSU5FU1NfVU5JVF9MRVZFTF9MRUFSTklOR19QQVRIU1wiICYmIHMudmFsdWUgPT09IFwidHJ1ZVwiKS5sZW5ndGggPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzY3Vzc2lvbkJvYXJkR2xvYmFsVmlzaWJpbGl0eSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZih0aGlzLmlzQnVzaW5lc3NVbml0VHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxTZXR0aW5ncy5maWx0ZXIocyA9PiBzLm5hbWUgPT09IFwiQlVTSU5FU1NfVU5JVF9MRVZFTF9ESVNDVVNTSU9OX0JPQVJEXCIgJiYgcy52YWx1ZSA9PT0gXCJ0cnVlXCIpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXRlcmlhbHNHbG9iYWxWaXNpYmlsaXR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQnVzaW5lc3NVbml0VHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxTZXR0aW5ncy5maWx0ZXIocyA9PiBzLm5hbWUgPT09IFwiQlVTSU5FU1NfVU5JVF9MRVZFTF9NQVRFUklBTFNcIiAmJiBzLnZhbHVlID09PSBcInRydWVcIikubGVuZ3RoID4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHF1aXp6ZXNHbG9iYWxWaXNpYmlsaXR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmKHRoaXMuaXNCdXNpbmVzc1VuaXRUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbFNldHRpbmdzLmZpbHRlcihzID0+IHMubmFtZSA9PT0gXCJCVVNJTkVTU19VTklUX0xFVkVMX1FVSVpaRVNcIiAmJiBzLnZhbHVlID09PSBcInRydWVcIikubGVuZ3RoID4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5ld3NHbG9iYWxWaXNpYmlsaXR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmKHRoaXMuaXNCdXNpbmVzc1VuaXRUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbFNldHRpbmdzLmZpbHRlcihzID0+IHMubmFtZSA9PT0gXCJCVVNJTkVTU19VTklUX0xFVkVMX05FV1NcIiAmJiBzLnZhbHVlID09PSBcInRydWVcIikubGVuZ3RoID4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc1Blcm1pc3Npb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYodGhpcy5pc0J1c2luZXNzVW5pdFR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNBbnlCVVNldHRpbmdFbmFibGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNBbnlCVVNldHRpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFsbFNldHRpbmdzLmZpbHRlcihzID0+XHJcbiAgICAgICAgICAgIHMubmFtZSA9PT0gXCJCVVNJTkVTU19VTklUX0xFVkVMX0NBVEFMT0dcIiAmJiBzLnZhbHVlID09PSBcInRydWVcIlxyXG4gICAgICAgICAgICB8fCBzLm5hbWUgPT09IFwiQlVTSU5FU1NfVU5JVF9MRVZFTF9DT1VSU0VTXCIgJiYgcy52YWx1ZSA9PT0gXCJ0cnVlXCJcclxuICAgICAgICAgICAgfHwgcy5uYW1lID09PSBcIkJVU0lORVNTX1VOSVRfTEVWRUxfTEVBUk5JTkdfUEFUSFNcIiAmJiBzLnZhbHVlID09PSBcInRydWVcIlxyXG4gICAgICAgICAgICB8fCBzLm5hbWUgPT09IFwiQlVTSU5FU1NfVU5JVF9MRVZFTF9ESVNDVVNTSU9OX0JPQVJEXCIgJiYgcy52YWx1ZSA9PT0gXCJ0cnVlXCJcclxuICAgICAgICAgICAgfHwgcy5uYW1lID09PSBcIkJVU0lORVNTX1VOSVRfTEVWRUxfTUFURVJJQUxTXCIgJiYgcy52YWx1ZSA9PT0gXCJ0cnVlXCJcclxuICAgICAgICAgICAgfHwgcy5uYW1lID09PSBcIkJVU0lORVNTX1VOSVRfTEVWRUxfUVVJWlpFU1wiICYmIHMudmFsdWUgPT09IFwidHJ1ZVwiKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VydmljZS51cGRhdGVTeXN0ZW1NZW51SXRlbXNWaXNpYmlsaXR5U2V0dGluZ3ModGhpcy5tZW51SXRlbXNWaXNpYmlsaXR5U2V0dGluZ3MpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zVmlzaWJpbGl0eVNldHRpbmdzID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTWVudSBpdGVtcyB2aXNpYmlsaXR5IHNldHRpbmdzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLlwiKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0VHlwZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzQnVzaW5lc3NVbml0VHlwZSA9ICEhdGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9CYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnN5c3RlbVNldHRpbmdzUm91dGVyLnN5c3RlbVNldHRpbmdzVXJsKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVN5c3RlbVNldHRpbmdzTWVudUl0ZW1zVmlzaWJpbGl0eURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW55KSB7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNTeXN0ZW1TZXR0aW5nc01lbnVJdGVtc1Zpc2liaWxpdHlEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVN5c3RlbVNldHRpbmdzTWVudUl0ZW1zVmlzaWJpbGl0eURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFN5c3RlbVNldHRpbmdzTWVudUl0ZW1zVmlzaWJpbGl0eUNvbnRyb2xsZXIpIHtcclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogU3lzdGVtU2V0dGluZ3NNZW51SXRlbXNWaXNpYmlsaXR5Q29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXRJZDogXCI9dmhzQnVzaW5lc3NVbml0SWRcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1zeXN0ZW0tc2V0dGluZ3MtbWVudS1pdGVtcy12aXNpYmlsaXR5Lmh0bWxcIilcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNTeXN0ZW1TZXR0aW5nc01lbnVJdGVtc1Zpc2liaWxpdHlEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1N5c3RlbVNldHRpbmdzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9TeXN0ZW1TZXR0aW5nc1JvdXRlclwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU3lzdGVtU2V0dGluZ3NUb3BUYWJzRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICB0b3BNZW51S2V5OiBzdHJpbmc7XHJcbiAgICB2bT86IFZoc1N5c3RlbVNldHRpbmdzVG9wVGFic0NvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNTeXN0ZW1TZXR0aW5nc1RvcFRhYnNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBDT05GSUdVUkFUSU9OX1RBQl9LRVk6IHN0cmluZyA9IFwiY29uZmlndXJhdGlvbnNcIjtcclxuICAgIHB1YmxpYyBCUkFORElOR19UQUJfS0VZOiBzdHJpbmcgPSBcImJyYW5kaW5nXCI7XHJcbiAgICBwdWJsaWMgTUVOVV9JVEVNU19WSVNJQklMSVRZX1RBQl9LRVk6IHN0cmluZyA9IFwibWVudUl0ZW1zVmlzaWJpbGl0eVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgU3lzdGVtU2V0dGluZ3NSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVN5c3RlbVNldHRpbmdzVG9wVGFic0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzeXN0ZW1TZXR0aW5nc1JvdXRlcjogU3lzdGVtU2V0dGluZ3NSb3V0ZXIpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVN5c3RlbVNldHRpbmdzVG9wVGFic0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVG9wTWVudUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGUudG9wTWVudUtleSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzU3lzdGVtU2V0dGluZ3NUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElTeXN0ZW1TZXR0aW5nc1RvcFRhYnNEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNTeXN0ZW1TZXR0aW5nc1RvcFRhYnNDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzU3lzdGVtU2V0dGluZ3NUb3BUYWJzQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICB0b3BNZW51S2V5OiBcIj12aHNUb3BNZW51S2V5XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1zeXN0ZW1zLXNldHRpbmdzLXRvcC10YWJzLmh0bWxcIiksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzU3lzdGVtU2V0dGluZ3NUb3BUYWJzRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZH0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lTZWN0aW9uSW5IaWVyYXJjaHlcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtnZXRMb2NhbERlZmF1bHRUaW1lem9uZSwgVGltZVpvbmV9IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvVGltZVpvbmVUeXBlXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtJVklMVFNlc3Npb259IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvSVZJTFRTZXNzaW9uXCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4uL2NvdXJzZXMvQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcblxyXG5pbnRlcmZhY2UgVmhzVGVhbXNDcmVhdGVFZGl0RGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBuZXdTZXNzaW9uOiBJVklMVFNlc3Npb247XHJcbiAgICB2aWx0U2Vzc2lvblNlY3Rpb25zOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRbXTtcclxuICAgIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcbiAgICBjb3Vyc2U6IElDb3Vyc2U7XHJcbiAgICBpc0NyZWF0aW9uTW9kYWxTaG93bjogYm9vbGVhbjtcclxuICAgIHZtPzogVmhzVGVhbXNDcmVhdGVFZGl0RGlyZWN0aXZlQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc1RlYW1zQ3JlYXRlRWRpdERpcmVjdGl2ZUNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHRpbWVab25lID0gVGltZVpvbmU7XHJcbiAgICBwdWJsaWMgdmlsdFNlc3Npb25TZWN0aW9uczogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkW107XHJcbiAgICBwdWJsaWMgY3VycmVudFVzZXJJc0Nvbm5lY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUVcclxuICAgIF1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogVmhzVGVhbXNDcmVhdGVFZGl0RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuaXNDb25uZWN0ZWRVc2VyVG9UZWFtcyh0aGlzLiRzY29wZS5jb3Vyc2UuaWQpXHJcbiAgICAgICAgICAgIC50aGVuKChib2R5OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXJJc0Nvbm5lY3RlZCA9IGJvZHkuc3VjY2VzcztcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLm5ld1Nlc3Npb24udGltZXpvbmUgPSBnZXRMb2NhbERlZmF1bHRUaW1lem9uZSgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IuZGF0YSAmJiBlcnJvci5kYXRhLm1lc3NhZ2VGb3JVc2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoZXJyb3IuZGF0YS5tZXNzYWdlRm9yVXNlcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5pc0xvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9UZWFtc0Nvbm5lY3Rpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFRlYW1zUmVkaXJlY3RVcmwodGhpcy4kc2NvcGUuY291cnNlLmlkKVxyXG4gICAgICAgICAgICAudGhlbih1cmwgPT4gZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IHVybCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNUZWFtc0NyZWF0ZUVkaXREaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogVmhzVGVhbXNDcmVhdGVFZGl0RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzVGVhbXNDcmVhdGVFZGl0RGlyZWN0aXZlQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNUZWFtc0NyZWF0ZUVkaXREaXJlY3RpdmVDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIG5ld1Nlc3Npb246IFwiPVwiLFxyXG4gICAgICAgICAgICB2aWx0U2Vzc2lvblNlY3Rpb25zOiBcIj1cIixcclxuICAgICAgICAgICAgY3VycmVudFVzZXI6IFwiPVwiLFxyXG4gICAgICAgICAgICBpc0NyZWF0aW9uTW9kYWxTaG93bjogXCI9XCIsXHJcbiAgICAgICAgICAgIGNvdXJzZTogXCI9XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy10ZWFtcy1jcmVhdGUtZWRpdC5odG1sXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblZoc1RlYW1zQ3JlYXRlRWRpdERpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge0lDb21tb25Sb290U2NvcGV9IGZyb20gXCIuLi9jb21tb24vSUNvbW1vblJvb3RTY29wZVwiO1xyXG5pbXBvcnQgSUxvY2F0aW9uU2VydmljZSA9IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZTtcclxuaW1wb3J0IElEb2N1bWVudFNlcnZpY2UgPSBhbmd1bGFyLklEb2N1bWVudFNlcnZpY2U7XHJcbmltcG9ydCBJQXVnbWVudGVkSlF1ZXJ5ID0gYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNUZW1wbGF0ZU1lbnVEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtPzogVmhzVGVtcGxhdGVNZW51Q29udHJvbGxlcjtcclxufVxyXG5cclxuaW50ZXJmYWNlIFRlbXBsYXRlTWVudUVudHJ5IHtcclxuICAgIGFuY2hvcjogc3RyaW5nLFxyXG4gICAgdGV4dDogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNUZW1wbGF0ZU1lbnVDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG4gICAgcHVibGljIG1lbnVJdGVtczogVGVtcGxhdGVNZW51RW50cnlbXSA9IFtdO1xyXG4gICAgcHVibGljIHVybDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGRvY3VtZW50XCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRyb290U2NvcGU6IElDb21tb25Sb290U2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY29wZTogSVZoc1RlbXBsYXRlTWVudURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkZG9jdW1lbnQ6IElEb2N1bWVudFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogSUxvY2F0aW9uU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKCckbG9jYXRpb25DaGFuZ2VTdGFydCcsIChldmVudCwgbmV3TG9jYXRpb246IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlYnVpbGRNZW51KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkTWVudSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9jYXRpb25XaXRob3V0SGFzaCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCB1cmw6IHN0cmluZyA9IHRoaXMuJGxvY2F0aW9uLmFic1VybCgpO1xyXG4gICAgICAgIGxldCBoYXNoOiBzdHJpbmcgPSB0aGlzLiRsb2NhdGlvbi5oYXNoKCk7XHJcbiAgICAgICAgaWYgKGhhc2gpIHtcclxuICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIFJGQyAzOTg2IG9wdGlvbmFsIGZyYWdtZW50ICgjKSBmb2xsb3dzIHF1ZXJ5IHBhcnQgKD8pXHJcbiAgICAgICAgICAgIC8vIE1heSBhbHNvIHVzZSB1cmwucmVwbGFjZShoYXNoLCAnJyksIGJ1dCBzdWJzdHIgbG9va3Mgc2FmZXIgYmVjYXVzZSBvZiBhbmd1bGFyanMgcm91dGUgcHJlZml4XHJcbiAgICAgICAgICAgIGhhc2ggPSBcIiNcIiArIGhhc2g7XHJcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHIoMCwgdXJsLmxlbmd0aCAtIGhhc2gubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVybFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckhhc2goKTogdm9pZCB7XHJcbiAgICAgICAgLy8gTmVlZGVkIHRvIHJlLXZpc2l0IHNhbWUgbGluayBtdWx0aXBsZSB0aW1lc1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLmhhc2goJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVZoc1RlbXBsYXRlTWVudURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpRdWVyeSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkTWVudSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVidWlsZE1lbnUoKSB7XHJcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLmxvY2F0aW9uV2l0aG91dEhhc2goKTtcclxuICAgICAgICBsZXQgdGVtcGxhdGU6IElBdWdtZW50ZWRKUXVlcnkgPSB0aGlzLiRkb2N1bWVudC5maW5kKFwiLnZocy10ZW1wbGF0ZVwiKTtcclxuICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IFtdO1xyXG4gICAgICAgIGlmICh0ZW1wbGF0ZSAmJiB0ZW1wbGF0ZVswXSkge1xyXG4gICAgICAgICAgICBsZXQgZW50cmllczogTm9kZUxpc3QgPSB0ZW1wbGF0ZVswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidGVtcGxhdGUtbWVudS1lbnRyeVwiKTtcclxuICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlbnRyaWVzLCBlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZS5jbGFzc0xpc3QuY29udGFpbnMoXCJpbmFjdGl2ZVwiKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRlbXBsYXRlLW1lbnUtdGV4dFwiKS5pdGVtKDApICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRlbXBsYXRlLW1lbnUtYW5jaG9yXCIpLml0ZW0oMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQ6IHN0cmluZyA9IGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRlbXBsYXRlLW1lbnUtdGV4dFwiKS5pdGVtKDApLmlubmVyVGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFuY2hvcjogc3RyaW5nID0gXCIjXCIgKyBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ0ZW1wbGF0ZS1tZW51LWFuY2hvclwiKS5pdGVtKDApLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHt0ZXh0LCBhbmNob3J9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1RlbXBsYXRlTWVudURpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzVGVtcGxhdGVNZW51RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzVGVtcGxhdGVNZW51Q29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNUZW1wbGF0ZU1lbnVDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7fSxcclxuICAgICAgICB0cmFuc2NsdWRlOiBmYWxzZSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtdGVtcGxhdGUtbWVudS5odG1sXCIpXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzVGVtcGxhdGVNZW51RGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiaW1wb3J0IHtNYXRlcmlhbFR5cGVFbnVtfSBmcm9tIFwiLi8uLi9tYXRlcmlhbHMvbW9kZWxzL01hdGVyaWFsVHlwZVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLy4uL3V0aWxzL0FwcFByb3BlcnRpZXNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc1RodW1ibmFpbE1vZGVsIHtcclxuICAgIHByZXZpZXdVcmw/OiBzdHJpbmc7XHJcbiAgICBtYXRlcmlhbFR5cGVJZD86IG51bWJlcjtcclxuICAgIHR5cGVJZD86IG51bWJlcjtcclxuICAgIGNvbnRlbnRUeXBlS2V5Pzogc3RyaW5nO1xyXG4gICAgdHlwZUtleT86IHN0cmluZztcclxuICAgIHF1aXpUeXBlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNUaHVtYm5haWxTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZoc1RodW1ibmFpbE1vZGVsOiBJVmhzVGh1bWJuYWlsTW9kZWw7XHJcbiAgICB2aHNUaHVtYm5haWxNb2RlbE5hbWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNUaHVtYm5haWxEaXJlY3RpdmVGYWN0b3J5KCk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc1RodW1ibmFpbFNjb3BlLCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkpIHtcclxuICAgICAgICBpZiAoISRzY29wZS52aHNUaHVtYm5haWxNb2RlbC5wcmV2aWV3VXJsIHx8ICRzY29wZS52aHNUaHVtYm5haWxNb2RlbC5wcmV2aWV3VXJsLmluZGV4T2YoJ3RoZW1lcy9kZWZhdWx0L2ltZy90aHVtYm5haWwtJykgIT09IC0xXHJcbiAgICAgICAgICAgIHx8ICRzY29wZS52aHNUaHVtYm5haWxNb2RlbC5wcmV2aWV3VXJsLmluZGV4T2YoJ3RoZW1lcy9kZWZhdWx0L2ltZy9pY29ucy90aHVtYm5haWwtJykgIT09IC0xXHJcbiAgICAgICAgICAgIHx8ICRzY29wZS52aHNUaHVtYm5haWxNb2RlbC5wcmV2aWV3VXJsLmluZGV4T2YoJ3RoZW1lcy9kZWZhdWx0L2ltZy9pY29ucy9tYXRlcmlhbC90aHVtYm5haWwtJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50KCdkaXYnKS5yZW1vdmVDbGFzcygncHJldmlldy1iYWNrZ3JvdW5kJykuYWRkQ2xhc3MoJ2RlZmF1bHQtcHJldmlldycpO1xyXG4gICAgICAgICAgICBlbGVtZW50Lmhhc0NsYXNzKCdjYXJkX19tYXRlcmlhbC1pbWFnZScpID8gZWxlbWVudC5yZW1vdmVDbGFzcygnY2FyZF9fbWF0ZXJpYWwtaW1hZ2UnKSA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsTmFtZSkge1xyXG4gICAgICAgICAgICAkc2NvcGUudmhzVGh1bWJuYWlsTW9kZWwucHJldmlld1VybCA9ICRzY29wZS52aHNUaHVtYm5haWxNb2RlbC5wcmV2aWV3VXJsIHx8XHJcbiAgICAgICAgICAgICAgICAoXCJ0aGVtZXMvZGVmYXVsdC9pbWcvdGh1bWJuYWlsLVwiICtcclxuICAgICAgICAgICAgICAgICAgICAoJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLmNvbnRlbnRUeXBlS2V5IHx8ICRzY29wZS52aHNUaHVtYm5haWxNb2RlbC50eXBlS2V5KSArXHJcbiAgICAgICAgICAgICAgICAgICAgXCIucG5nP3Y9XCIgKyBBcHBQcm9wZXJ0aWVzLmJ1aWxkVmVyc2lvbikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgZGVmYXVsdE1hdGVyaWFsUHJldmlld1VybCA9IChcInRoZW1lcy9kZWZhdWx0L2ltZy9pY29ucy9tYXRlcmlhbC90aHVtYm5haWwtbWF0ZXJpYWwtXCJcclxuICAgICAgICAgICAgICAgICsgTWF0ZXJpYWxUeXBlRW51bVskc2NvcGUudmhzVGh1bWJuYWlsTW9kZWwubWF0ZXJpYWxUeXBlSWQgfHwgJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLnR5cGVJZF0gK1xyXG4gICAgICAgICAgICAgICAgXCIuc3ZnP3Y9XCIgKyBBcHBQcm9wZXJ0aWVzLmJ1aWxkVmVyc2lvbikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgbGV0IGRlZmF1bHRNYXRlcmlhbFRhYmxlUHJldmlld1VybCA9IChcInRoZW1lcy9kZWZhdWx0L2ltZy9pY29ucy9tYXRlcmlhbC90aHVtYm5haWwtdGFibGUtbWF0ZXJpYWwtXCJcclxuICAgICAgICAgICAgICAgICsgTWF0ZXJpYWxUeXBlRW51bVskc2NvcGUudmhzVGh1bWJuYWlsTW9kZWwubWF0ZXJpYWxUeXBlSWQgfHwgJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLnR5cGVJZF0gK1xyXG4gICAgICAgICAgICAgICAgXCIuc3ZnP3Y9XCIgKyBBcHBQcm9wZXJ0aWVzLmJ1aWxkVmVyc2lvbikudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQ09VUlNFJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS52aHNUaHVtYm5haWxNb2RlbC5wcmV2aWV3VXJsID0gJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLnByZXZpZXdVcmwgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKFwidGhlbWVzL2RlZmF1bHQvaW1nL2ljb25zL3RodW1ibmFpbC1cIiArICRzY29wZS52aHNUaHVtYm5haWxNb2RlbE5hbWUgK1wiLnN2Zz92PVwiICsgQXBwUHJvcGVydGllcy5idWlsZFZlcnNpb24pLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyAkc2NvcGUudmhzVGh1bWJuYWlsTW9kZWwucHJldmlld1VybCArICcpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXNlICdNQVRFUklBTCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUudmhzVGh1bWJuYWlsTW9kZWwucHJldmlld1VybCA9ICRzY29wZS52aHNUaHVtYm5haWxNb2RlbC5wcmV2aWV3VXJsIHx8IGRlZmF1bHRNYXRlcmlhbFByZXZpZXdVcmw7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXNlICdNQVRFUklBTF9SRUxBVEVEX0RFRkFVTFQnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLnByZXZpZXdVcmwgPSBkZWZhdWx0TWF0ZXJpYWxQcmV2aWV3VXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSAnTUFURVJJQUxfQ0FSRCc6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aWV3VXJsID0gJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLnByZXZpZXdVcmwgfHwgZGVmYXVsdE1hdGVyaWFsUHJldmlld1VybDtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNzcygnYmFja2dyb3VuZC1pbWFnZScsICd1cmwoJyArIHByZXZpZXdVcmwgKyAnKScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSAnTUFURVJJQUxfUExBWSc6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aWV3VXJsID0gJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLnByZXZpZXdVcmwgfHwgZGVmYXVsdE1hdGVyaWFsUHJldmlld1VybDtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmF0dHIoJ3NyYycsICcnICsgcHJldmlld1VybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXNlICdNQVRFUklBTF9UQUJMRSc6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aWV3VXJsID0gJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLnByZXZpZXdVcmwgfHwgZGVmYXVsdE1hdGVyaWFsVGFibGVQcmV2aWV3VXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXR0cignc3JjJywgJycgKyBwcmV2aWV3VXJsKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgJ01BVEVSSUFMX0RFRkFVTFQnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQoJ2RpdicpLnJlbW92ZUNsYXNzKCdwcmV2aWV3LWJhY2tncm91bmQnKS5hZGRDbGFzcygnZGVmYXVsdC1wcmV2aWV3Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyBkZWZhdWx0TWF0ZXJpYWxQcmV2aWV3VXJsICsgJyknKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgJ01BVEVSSUFMX0RFRkFVTFRfVEFCTEUnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLnByZXZpZXdVcmwgPSBkZWZhdWx0TWF0ZXJpYWxQcmV2aWV3VXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXR0cignc3JjJywgJycgKyBkZWZhdWx0TWF0ZXJpYWxUYWJsZVByZXZpZXdVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSAnUVVJWic6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVmYXVsdFF1aXpQcmV2aWV3VXJsID0gKFwidGhlbWVzL2RlZmF1bHQvaW1nL2ljb25zL3F1aXovdGh1bWJuYWlsLVwiICsgJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLnF1aXpUeXBlLnRvTG93ZXJDYXNlKCkgKyBcIi5zdmc/dj1cIiArIEFwcFByb3BlcnRpZXMuYnVpbGRWZXJzaW9uKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXdVcmwgPSAkc2NvcGUudmhzVGh1bWJuYWlsTW9kZWwucHJldmlld1VybCB8fCBkZWZhdWx0UXVpelByZXZpZXdVcmw7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyBwcmV2aWV3VXJsICsgJyknKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgJ0FETUlOX01FTlUnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQoJ2RpdicpLnJlbW92ZUNsYXNzKCdwcmV2aWV3LWJhY2tncm91bmQnKS5hZGRDbGFzcygnZGVmYXVsdC1wcmV2aWV3Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hdHRyKCdzdHlsZScsICdiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJyArICRzY29wZS52aHNUaHVtYm5haWxNb2RlbC5wcmV2aWV3VXJsICsgJyk7IGJhY2tncm91bmQtc2l6ZTogNTAlIWltcG9ydGFudDsnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUudmhzVGh1bWJuYWlsTW9kZWwucHJldmlld1VybCA9ICRzY29wZS52aHNUaHVtYm5haWxNb2RlbC5wcmV2aWV3VXJsIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChcInRoZW1lcy9kZWZhdWx0L2ltZy90aHVtYm5haWwtXCIgKyAkc2NvcGUudmhzVGh1bWJuYWlsTW9kZWxOYW1lICtcIi5wbmc/dj1cIiArIEFwcFByb3BlcnRpZXMuYnVpbGRWZXJzaW9uKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgJ3VybCgnICsgJHNjb3BlLnZoc1RodW1ibmFpbE1vZGVsLnByZXZpZXdVcmwgKyAnKScpO1xyXG4gICAgICAgICAgICAgICAgICAgIChcInRoZW1lcy9kZWZhdWx0L2ltZy90aHVtYm5haWwtXCIgKyAkc2NvcGUudmhzVGh1bWJuYWlsTW9kZWxOYW1lICsgXCIucG5nP3Y9XCIgKyBBcHBQcm9wZXJ0aWVzLmJ1aWxkVmVyc2lvbikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwcmlvcml0eTogMSxcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgdmhzVGh1bWJuYWlsTW9kZWw6IFwiPVwiLFxyXG4gICAgICAgICAgICB2aHNUaHVtYm5haWxNb2RlbE5hbWU6IFwiPT9cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGluazogbGlua1xyXG4gICAgfTtcclxufVxyXG4iLCJpbXBvcnQge0lTZWN0aW9ufSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSVNlY3Rpb25cIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7VGltZVpvbmV9IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvVGltZVpvbmVUeXBlXCI7XHJcbmltcG9ydCB7SUJ1bmRsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0lWSUxUU2Vzc2lvbn0gZnJvbSBcIi4uL3dlYmluYXJzL21vZGVscy9JVklMVFNlc3Npb25cIjtcclxuaW1wb3J0IHtJVklMVFNlc3Npb25QYXJ0aWNpcGFudH0gZnJvbSBcIi4uL3dlYmluYXJzL21vZGVscy9JVklMVFNlc3Npb25QYXJ0aWNpcGFudFwiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcblxyXG5pbnRlcmZhY2UgVmhzVklMVERpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyO1xyXG4gICAgY291cnNlQnVuZGxlOiBJQnVuZGxlO1xyXG4gICAgc2VjdGlvbjogSVNlY3Rpb247XHJcbiAgICBsYXN0U2VjdGlvbkluQ291cnNlOiBib29sZWFuO1xyXG4gICAgdm0/OiBWaHNWSUxURGlyZWN0aXZlQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc1ZJTFREaXJlY3RpdmVDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGNvdXJzZUlkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbW9kdWxlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBsYXN0U2VjdGlvbkluQ291cnNlOiBib29sZWFuO1xyXG4gICAgcHVibGljIHNlY3Rpb246IElTZWN0aW9uO1xyXG4gICAgcHVibGljIHVzZXJWSUxUU2Vzc2lvblBhcnRpY2lwYW50czogQXJyYXk8SVZJTFRTZXNzaW9uUGFydGljaXBhbnQ+ID0gW107XHJcbiAgICBwdWJsaWMgaXNBbnlBdmFpbGFibGVWSUxUU2Vzc2lvbkluU2VjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm8gPSB7fTtcclxuICAgIHB1YmxpYyBpc0RhdGFMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdGltZVpvbmUgPSBUaW1lWm9uZTtcclxuICAgIHB1YmxpYyBjb3Vyc2VCdW5kbGU6IElCdW5kbGU7XHJcbiAgICBwdWJsaWMgdmlsdFNlc3Npb25Jc09uZ29pbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjYW5jZWxQYXJ0aWNpcGFudElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY3VycmVudFZJTFRTZXNzaW9uSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzZXNzaW9uczogQXJyYXk8SVZJTFRTZXNzaW9uPjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCJVcGxvYWRcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogVmhzVklMVERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR1cGxvYWRlcjogbmcuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIGlmICgkc2NvcGUuc2VjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzSWQgPSB0aGlzLiRzY29wZS5jb3Vyc2VQcm9ncmVzc0lkO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZUJ1bmRsZSA9IHRoaXMuJHNjb3BlLmNvdXJzZUJ1bmRsZTtcclxuICAgICAgICAgICAgdGhpcy5sYXN0U2VjdGlvbkluQ291cnNlID0gdGhpcy4kc2NvcGUubGFzdFNlY3Rpb25JbkNvdXJzZTtcclxuXHJcbiAgICAgICAgICAgICRzY29wZS4kd2F0Y2goXCJzZWN0aW9uXCIsIHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUlkID0gdGhpcy5zZWN0aW9uLmNvdXJzZUlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVJZCA9IHRoaXMuc2VjdGlvbi5tb2R1bGVJZDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVXNlclZJTFRTZXNzaW9uUGFydGljaXBhbnRzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFNlc3Npb25zVmlsdExpc3QodGhpcy5zZWN0aW9uLmNvdXJzZUlkLCB0aGlzLnNlY3Rpb24uaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25zID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlsdFNlc3Npb25Jc09uZ29pbmcgPSB0aGlzLnNlc3Npb25zLnNvbWUodiA9PiAodi5zdGF0dXMgPT09IFwiT05HT0lOR1wiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBbnlTY2hlZHVsZWRXZWJpbmFycygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEN1cnJlbnRVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHVzZXIsIHRoaXMuY3VycmVudFVzZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJWSUxUU2Vzc2lvblBhcnRpY2lwYW50cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRVc2VyVklMVFNlc3Npb25QYXJ0aWNpcGFudHModGhpcy5jb3Vyc2VJZCwgdGhpcy5zZWN0aW9uLmlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMudXNlclZJTFRTZXNzaW9uUGFydGljaXBhbnRzKTtcclxuICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQW55U2NoZWR1bGVkV2ViaW5hcnMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0FueUF2YWlsYWJsZVZJTFRTZXNzaW9uSW5TZWN0aW9uID0gdGhpcy5zZXNzaW9ucy5zb21lKHYgPT4gKHYuc3RhdHVzID09PSBcIlNDSEVEVUxFRFwiIHx8IHYuc3RhdHVzID09PSBcIk9OR09JTkdcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkYXRlVG9TdHJpbmcodGltZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUodGltZSkudG9Mb2NhbGVTdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWSUxUU2Vzc2lvblBhcnRpY2lwYW50KHZpbHRTZXNzaW9uSWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJWSUxUU2Vzc2lvblBhcnRpY2lwYW50cy5zb21lKHAgPT4gKHAudmlsdFNlc3Npb25JZCA9PT0gdmlsdFNlc3Npb25JZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FueVNlbGZSZWdpc3RlclZJTFRTZXNzaW9ucygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9ucy5zb21lKHcgPT4gdy5pc1NlbGZSZWdpc3RyYXRpb25BbGxvd2VkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VklMVFNlc3Npb25QYXJ0aWNpcGFudFN0YXR1cyh2aWx0U2Vzc2lvbklkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCB2aWx0U2Vzc2lvblBhcnRpY2lwYW50ID0gdGhpcy51c2VyVklMVFNlc3Npb25QYXJ0aWNpcGFudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICBwID0+IHAudmlsdFNlc3Npb25JZCA9PSB2aWx0U2Vzc2lvbklkICYmIHAudXNlcklkID09IHRoaXMuY3VycmVudFVzZXIuaWQpWzBdO1xyXG4gICAgICAgIHJldHVybiB2aWx0U2Vzc2lvblBhcnRpY2lwYW50ID09PSB1bmRlZmluZWQgPyBcIlwiIDogdmlsdFNlc3Npb25QYXJ0aWNpcGFudC5zdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvSm9pblZJTFRTZXNzaW9uKHZpbHRTZXNzaW9uSWQ6IG51bWJlcikge1xyXG4gICAgICAgIHZhciBqb2luVXJsOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMudXNlclZJTFRTZXNzaW9uUGFydGljaXBhbnRzLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwLnZpbHRTZXNzaW9uSWQgPT09IHZpbHRTZXNzaW9uSWQpIHtcclxuICAgICAgICAgICAgICAgIGpvaW5VcmwgPSBwLmpvaW5Vcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB3aW5kb3cub3Blbihqb2luVXJsKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxmUmVnaXN0ZXIodmlsdFNlc3Npb25JZDogbnVtYmVyLCBwcm92aWRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgcGFydGljaXBhbnQ6IElWSUxUU2Vzc2lvblBhcnRpY2lwYW50ID0ge307XHJcbiAgICAgICAgcGFydGljaXBhbnQudXNlcklkID0gdGhpcy5jdXJyZW50VXNlci5pZDtcclxuXHJcbiAgICAgICAgbGV0IGZ1bmM7XHJcbiAgICAgICAgaWYgKHByb3ZpZGVyID09ICdaT09NJykge1xyXG4gICAgICAgICAgICBmdW5jID0gdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZVBhcnRpY2lwYW50TWVldGluZyh0aGlzLmNvdXJzZUlkLCB2aWx0U2Vzc2lvbklkLCBwYXJ0aWNpcGFudCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwcm92aWRlciA9PSAnVEVBTVMnKSB7XHJcbiAgICAgICAgICAgIGZ1bmMgPSB0aGlzLmNvdXJzZVNlcnZpY2UuY3JlYXRlUGFydGljaXBhbnRUZWFtcyh0aGlzLmNvdXJzZUlkLCB2aWx0U2Vzc2lvbklkLCBwYXJ0aWNpcGFudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZnVuYyA9IHRoaXMuY291cnNlU2VydmljZS5jcmVhdGVQYXJ0aWNpcGFudFdlYmluYXIodGhpcy5jb3Vyc2VJZCwgdmlsdFNlc3Npb25JZCwgcGFydGljaXBhbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmdW5jLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRVc2VyVklMVFNlc3Npb25QYXJ0aWNpcGFudHMoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoeC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHguZGF0YSAmJiB4LmRhdGEubWVzc2FnZUZvclVzZXIgJiYgeC5kYXRhLm1lc3NhZ2VGb3JVc2VyLnNlYXJjaChcInZpbHQud2FzLmNhbmNlbGxlZFwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeC5kYXRhLnNlYXJjaChcIndpdGggc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdFwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeC5kYXRhLnNlYXJjaChcIkVtYWlsIHZhbGlkYXRpb24gZmFpbGVkXCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiUGFydGljaXBhbnQgZW1haWwgdmFsaWRhdGlvbiBmYWlsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LmRhdGEuc2VhcmNoKFwiT25seSBhdmFpbGFibGUgZm9yIHBhaWQgdXNlcnNcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJab29tIGFjY291bnQgb2YgdGhlIHNlc3Npb24gY3JlYXRvciBtdXN0IGJlIHBhaWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3JOb3RpZmljYXRpb24oeC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHJlZ2lzdGVyIHBhcnRpY2lwYW50KHMpLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyIG9yIGNvbnRhY3Qgc3VwcG9ydC5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxSZWdpc3RyYXRpb24odmlsdFNlc3Npb25JZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxQYXJ0aWNpcGFudElkID0gdGhpcy51c2VyVklMVFNlc3Npb25QYXJ0aWNpcGFudHMuZmlsdGVyKHAgPT4gcC52aWx0U2Vzc2lvbklkID09PSB2aWx0U2Vzc2lvbklkKVswXS5pZDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWSUxUU2Vzc2lvbklkID0gdmlsdFNlc3Npb25JZDtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcclxuICAgICAgICAgICAgXCJZb3UgbWF5IG5vdCBiZSBhYmxlIHRvIGpvaW4gdGhpcyBzZXNzaW9uLlwiLCB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJBcmUgeW91IHN1cmU/XCIsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIlllc1wiLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uOiBcIk5vXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5zZXNzaW9ucy5maWx0ZXIobSA9PiBtLmlkID09IHRoaXMuY3VycmVudFZJTFRTZXNzaW9uSWQpWzBdLnByb3ZpZGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBmdW5jO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09ICdaT09NJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMgPSB0aGlzLmNvdXJzZVNlcnZpY2UucmVtb3ZlUGFydGljaXBhbnRNZWV0aW5nKHRoaXMuY291cnNlSWQsIHRoaXMuY3VycmVudFZJTFRTZXNzaW9uSWQsIHRoaXMuY2FuY2VsUGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3ZpZGVyID09ICdURUFNUycpIHtcclxuICAgICAgICAgICAgICAgICAgICBmdW5jID0gdGhpcy5jb3Vyc2VTZXJ2aWNlLnJlbW92ZVBhcnRpY2lwYW50VGVhbXModGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb25JZCwgdGhpcy5jYW5jZWxQYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuYyA9IHRoaXMuY291cnNlU2VydmljZS5yZW1vdmVQYXJ0aWNpcGFudFdlYmluYXIodGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb25JZCwgdGhpcy5jYW5jZWxQYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBmdW5jLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVXNlclZJTFRTZXNzaW9uUGFydGljaXBhbnRzKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmRhdGEgJiYgeC5kYXRhLm1lc3NhZ2VGb3JVc2VyICYmIHguZGF0YS5tZXNzYWdlRm9yVXNlci5zZWFyY2goXCJ2aWx0Lndhcy5jYW5jZWxsZWRcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbih4LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFiYnJpdmlhdGlvbih0aW1lWm9uZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgYWJicmV2aWF0aW9uO1xyXG4gICAgICAgIHRoaXMudGltZVpvbmUuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHQubmFtZSA9PSB0aW1lWm9uZSkge1xyXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9uID0gdC5hYmJyZXZpYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYWJicmV2aWF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkYXRlVG9UaW1lWm9uZURhdGUodGltZVpvbmU6IGFueSwgZGF0ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgb2Zmc2V0O1xyXG4gICAgICAgIHRoaXMudGltZVpvbmUuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHQubmFtZSA9PSB0aW1lWm9uZSkge1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5nZXRUaW1lWm9uZU9mZnNldCh0LnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAoZGF0ZSArIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwIC0gb2Zmc2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRpbWVab25lT2Zmc2V0KHRpbWVab25lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGxldCBsb2NhbFRpbWU6IG51bWJlciA9IE1hdGguZmxvb3IoKG5vdy5nZXRUaW1lKCkgLyAxMDAwKSkgKiAxMDAwO1xyXG4gICAgICAgIGxldCB0aW1lWm9uZVRpbWU6IG51bWJlciA9IG5ldyBEYXRlKG5vdy50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHt0aW1lWm9uZTogdGltZVpvbmV9KSkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHJldHVybiBub3cuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwICsgKGxvY2FsVGltZSAtIHRpbWVab25lVGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dNZXNzYWdlRm9ySm9pbmluZ1RvVklMVCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9ucy5zb21lKG0gPT4gbS5zdGF0dXMgIT0gXCJGSU5JU0hFRFwiICYmXHJcbiAgICAgICAgICAgIG0uaXNTZWxmUmVnaXN0cmF0aW9uQWxsb3dlZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVklMVFNlc3Npb25QYXJ0aWNpcGFudChtLmlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dNZXNzYWdlRm9yUmVnaXN0ZXJPblZJTFQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbnMuc29tZShtID0+IG0uc3RhdHVzICE9IFwiRklOSVNIRURcIiAmJlxyXG4gICAgICAgICAgICBtLmlzU2VsZlJlZ2lzdHJhdGlvbkFsbG93ZWQgJiZcclxuICAgICAgICAgICAgIXRoaXMuaXNWSUxUU2Vzc2lvblBhcnRpY2lwYW50KG0uaWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SGVscFRpcEZvclRlYW1zKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdGVhbXNIZWxwVGlwOiBzdHJpbmcgPSBcIlBsZWFzZSBlbnRlciA6ZnVsbE5hbWUgaW50byBUZWFtcyBqb2luIGRpYWxvZ1wiO1xyXG4gICAgICAgIHJldHVybiB0ZWFtc0hlbHBUaXAucmVwbGFjZShcIjpmdWxsTmFtZVwiLCB0aGlzLmN1cnJlbnRVc2VyLmZ1bGxOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dFcnJvck5vdGlmaWNhdGlvbihlcnJvckNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2aWx0Lndhcy5jYW5jZWxsZWRcIjpcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInZpbHQudW5hYmxlLnRvLnVucmVnaXN0ZXIucGFydGljaXBhbnRcIjpcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHVucmVnaXN0ZXIgcGFydGljaXBhbnQocykuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoZXJyb3JDb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTW9iaWxlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA3Njc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNWSUxURGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IFZoc1ZJTFREaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNWSUxURGlyZWN0aXZlQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzVklMVERpcmVjdGl2ZUNvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgY291cnNlUHJvZ3Jlc3NJZDogXCI9XCIsXHJcbiAgICAgICAgICAgIHNlY3Rpb246IFwiPVwiLFxyXG4gICAgICAgICAgICBsYXN0U2VjdGlvbkluQ291cnNlOiBcIj1cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLXZpbHQuaHRtbFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5WaHNWSUxURGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7QXBwUHJvcGVydGllc30gZnJvbSBcIi4uL3V0aWxzL0FwcFByb3BlcnRpZXNcIjtcclxuaW1wb3J0IHtDb21tb25TZXJ2aWNlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vblNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZoc1ZlcnNpb25DaGVja2VyU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICB2bT86IFZoc1ZlcnNpb25DaGVja2VyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzVmVyc2lvbkNoZWNrZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgVElNRU9VVDogbnVtYmVyID0gMzAgKiA2MCAqIDEwMDA7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBSRUxPQURfVElNRU9VVDogbnVtYmVyID0gNjAgKiAxMDAwO1xyXG5cclxuICAgIHByaXZhdGUgcmVsb2FkVGltZW91dFByb21pc2U6IGFuZ3VsYXIuSVByb21pc2U8YW55PjtcclxuICAgIHB1YmxpYyBlbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25Db250ZW50ID0gXCI8ZGl2IGlkPSdyZWxvYWQtbm90aWZpY2F0aW9uJyBjbGFzcz0ncmVsb2FkLW5vdGlmaWNhdGlvbic+XCIgK1xyXG4gICAgICAgICAgICBcIjxwPlwiICtcclxuICAgICAgICAgICAgICAgIFwiPHNwYW4gY2xhc3M9J2ZhIGZhLXdhcm5pbmcgZmEtM3gnPjwvc3Bhbj5cIiArXHJcbiAgICAgICAgICAgICAgICBcIjxzcGFuIGNsYXNzPSdtZXNzYWdlJz5cIisgXCJBcHBsaWNhdGlvbiB2ZXJzaW9uIGhhcyBiZWVuIHVwZGF0ZWQsIHBhZ2UgcmVsb2FkaW5nIGlzIHJlcXVpcmVkLjxici8+UGFnZSB3aWxsIGJlIHJlbG9hZGVkIGF1dG9tYXRpY2FsbHkgaW4gb25lIG1pbnV0ZS4gUGxlYXNlIHNhdmUgeW91ciB3b3JrIG5vdy5cIiArIFwiPC9zcGFuPlwiICtcclxuICAgICAgICAgICAgXCI8L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxkaXY+XCIgK1xyXG4gICAgICAgICAgICBcIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0nYnRuIGJ0bi1kZWZhdWx0JyBuZy1jbGljaz0ndm0uY2FuY2VsQXV0b1JlbG9hZCgpJz5cIlxyXG4gICAgICAgICAgICArIFwiQ2FuY2VsIHJlbG9hZFwiICsgXCI8L2J1dHRvbj5cIiArXHJcbiAgICAgICAgICAgIFwiPC9kaXY+XCIgK1xyXG4gICAgICAgIFwiPC9kaXY+XCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJGNvbXBpbGVcIixcclxuICAgICAgICBDb21tb25TZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IFZoc1ZlcnNpb25DaGVja2VyU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGNvbXBpbGU6IGFuZ3VsYXIuSUNvbXBpbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHRoaXMuY2hlY2tWZXJzaW9uKCksIFZoc1ZlcnNpb25DaGVja2VyLlRJTUVPVVQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tWZXJzaW9uKCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5jaGVja1ZlcnNpb25VcGRhdGVJc1JlcXVpcmVkKCkudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkVGltZW91dFByb21pc2UgPSB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi5zZWFyY2goXCJuby1jYWNoZVwiLCBtb21lbnQoKS52YWx1ZU9mKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0sIFZoc1ZlcnNpb25DaGVja2VyLlJFTE9BRF9USU1FT1VUKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmQodGhpcy4kY29tcGlsZSh0aGlzLm5vdGlmaWNhdGlvbkNvbnRlbnQpKHRoaXMuJHNjb3BlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB0aGlzLmNoZWNrVmVyc2lvbigpLCBWaHNWZXJzaW9uQ2hlY2tlci5USU1FT1VUKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxBdXRvUmVsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQuY2FuY2VsKHRoaXMucmVsb2FkVGltZW91dFByb21pc2UpO1xyXG4gICAgICAgIGxldCBub3RpZmljYXRpb24gPSAkKFwiI3JlbG9hZC1ub3RpZmljYXRpb25cIik7XHJcbiAgICAgICAgaWYgKG5vdGlmaWNhdGlvbi5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICBub3RpZmljYXRpb24ucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzVmVyc2lvbkNoZWNrZXJGYWN0b3J5KCk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogVmhzVmVyc2lvbkNoZWNrZXJTY29wZSwgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLCBjb250cm9sbGVyOiBWaHNWZXJzaW9uQ2hlY2tlcixcclxuICAgICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogYW5ndWxhci5JVHJhbnNjbHVkZUZ1bmN0aW9uKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc1ZlcnNpb25DaGVja2VyXHJcbiAgICB9O1xyXG59IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiXHJcbmltcG9ydCB7SU11bHRpbWVkaWFTb3VyY2V9IGZyb20gXCIuL21vZGVscy9JTXVsdGltZWRpYVwiXHJcbmltcG9ydCBJTXVsdGltZWRpYU1hdGVyaWFsU2V0dGluZ3MgZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvSU11bHRpbWVkaWFNYXRlcmlhbFNldHRpbmdzXCI7XHJcbmltcG9ydCB7UmFuZG9tVXRpbHN9IGZyb20gXCIuLi91dGlscy9SYW5kb21VdGlsc1wiO1xyXG5pbXBvcnQge1ZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5fSBmcm9tIFwiLi4vbWF0ZXJpYWxzL21vZGVscy9WaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleVwiO1xyXG5pbXBvcnQge0lDb21tb25Sb290U2NvcGV9IGZyb20gXCIuLi9jb21tb24vSUNvbW1vblJvb3RTY29wZVwiO1xyXG5kZWNsYXJlIGZ1bmN0aW9uIHJlcXVpcmUobmFtZTpzdHJpbmcpO1xyXG5jb25zdCB2dHRUb0pzb24gPSByZXF1aXJlKFwidnR0LXRvLWpzb25cIilcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc1ZpZGVvQXVkaW9EaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZoc0lkPzogc3RyaW5nO1xyXG4gICAgdmhzTWF0ZXJpYWxTZXR0aW5ncz86IElNdWx0aW1lZGlhTWF0ZXJpYWxTZXR0aW5ncztcclxuICAgIHZoc01hdGVyaWFsQ2FsbGJhY2s/OiBhbnk7XHJcbiAgICB2aHNTb3VyY2VzOiBJTXVsdGltZWRpYVNvdXJjZVtdO1xyXG4gICAgdmhzV2lkdGg/OiBudW1iZXI7XHJcbiAgICB2aHNIZWlnaHQ/OiBudW1iZXI7XHJcbiAgICB2aHNQb3N0ZXI/OiBzdHJpbmc7XHJcbiAgICB2aHNFcnJvckNhbGxiYWNrPzogKGVycm9yRXZlbnQ6IEVycm9yRXZlbnQpID0+IGFuZ3VsYXIuSVByb21pc2U8YW55PjtcclxuICAgIHZoc0lubGluZUF1ZGlvPzogYm9vbGVhbjtcclxuICAgIHZoc0F1dG9QbGF5PzogYm9vbGVhbjtcclxuXHJcbiAgICB2bT86IFZoc1ZpZGVvQXVkaW9Db250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzVmlkZW9BdWRpb0NvbnRyb2xsZXIge1xyXG4gICAgcHJpdmF0ZSBlcnJvckNvdW50OiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgR0lWRV9VUF9BRlRFUl9TT19NQU5ZX0VSUk9SUyA9IDU7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBSRVRSWV9USU1FX0lOVEVSVkFMID0gMTAwMDA7IC8vIG1zXHJcblxyXG4gICAgcHJpdmF0ZSBfcGxheWVySXNQbGF5aW5nOiBib29sZWFuO1xyXG4gICAgcHVibGljIGdldCBwbGF5ZXJJc1BsYXlpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcklzUGxheWluZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IHBsYXllcklzUGxheWluZyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3BsYXllcklzUGxheWluZyA9IHZhbHVlO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLl9wbGF5ZXJJc1BsYXlpbmcgPSAnLCB0aGlzLl9wbGF5ZXJJc1BsYXlpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3BsYXllckN1cnJlbnRUaW1lOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZ2V0IHBsYXllckN1cnJlbnRUaW1lKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllckN1cnJlbnRUaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgcGxheWVyQ3VycmVudFRpbWUodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fcGxheWVyQ3VycmVudFRpbWUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2aWRlb0pTUGxheWVyOiBWaWRlb0pTUGxheWVyO1xyXG4gICAgcHVibGljIHRleHRUcmFja0xpc3Q6IFZpZGVvSlNUZXh0VHJhY2tMaXN0O1xyXG4gICAgcHVibGljIGFjdGl2ZVRleHRUcmFjazogVmlkZW9KU1RleHRUcmFjaztcclxuICAgIHB1YmxpYyBhY3RpdmVDdWVzOiBhbnk7XHJcbiAgICBwdWJsaWMgYWN0aXZlQ3Vlc0lkczogc3RyaW5nW107XHJcbiAgICBwdWJsaWMgc2hvd1RyYW5zY3JpcHRQYW5lOiBib29sZWFuO1xyXG4gICAgcHVibGljIHZpZGVvUG9zdGVySWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBvcGVuVHJhbnNjcmlwdFBhbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjb3BlOiBJVmhzVmlkZW9BdWRpb0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCRzY29wZS52aHNNYXRlcmlhbENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9Qb3N0ZXJJZCA9ICd2aWRlby0nICsgJHNjb3BlLnZoc01hdGVyaWFsU2V0dGluZ3MubWF0ZXJpYWxJZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzVmlkZW9BdWRpb0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgaXNWaWRlb09yQXVkaW86IHN0cmluZywgaXNZb3V0dWJlOiBib29sZWFuKSB7XHJcblxyXG4gICAgICAgIGlzVmlkZW9PckF1ZGlvID0gaXNWaWRlb09yQXVkaW8udG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAoaXNWaWRlb09yQXVkaW8gIT09IFwiQVVESU9cIiAmJiBpc1ZpZGVvT3JBdWRpbyAhPT0gXCJWSURFT1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb1NlbnRyeShcIkVycm9yOiBXcm9uZyBtdWx0aW1lZGlhIGRpcmVjdGl2ZSB0eXBlIGluIGluaXQoKSAtIFwiICsgaXNWaWRlb09yQXVkaW8pO1xyXG4gICAgICAgICAgICBpc1ZpZGVvT3JBdWRpbyA9IFwiVklERU9cIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vINCX0LDQs9GA0YPQt9C60LAg0YTQsNC50LvQsCDRgdGD0LHRgtC40YLRgNC+0LIg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0LIg0L/QsNC90LXQu9C4INGC0YDQsNC90YHQutGA0LjQv9GC0LBcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUudmhzTWF0ZXJpYWxTZXR0aW5ncyAmJiB0aGlzLiRzY29wZS52aHNNYXRlcmlhbFNldHRpbmdzLmlzUmV3aW5kQWxsb3dlZCAmJlxyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS52aHNNYXRlcmlhbFNldHRpbmdzLmN1cnJlbnRUcmFjayAmJiB0aGlzLiRzY29wZS52aHNNYXRlcmlhbFNldHRpbmdzLnN1YnRpdGxlcyAmJlxyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS52aHNNYXRlcmlhbFNldHRpbmdzLnN1YnRpdGxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYW5nID0gdGhpcy4kc2NvcGUudmhzTWF0ZXJpYWxTZXR0aW5ncy5jdXJyZW50VHJhY2s7XHJcbiAgICAgICAgICAgIGxldCB2dHRVcmwgPSB0aGlzLiRzY29wZS52aHNNYXRlcmlhbFNldHRpbmdzLnN1YnRpdGxlcy5maWx0ZXIoc3ViID0+IHN1Yi5sYWJlbCA9PT0gbGFuZylbMF07XHJcblxyXG4gICAgICAgICAgICAkLmFqYXgodnR0VXJsLnVybCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdnR0VG9Kc29uKHJlcylcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlQ3VlcyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93VHJhbnNjcmlwdFBhbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IF9zZWxmOiBWaHNWaWRlb0F1ZGlvQ29udHJvbGxlciA9IHRoaXM7XHJcbiAgICAgICAgX3NlbGYuJHNjb3BlID0gJHNjb3BlO1xyXG4gICAgICAgIF9zZWxmLnNob3dUcmFuc2NyaXB0UGFuZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwbGF5ZXJWaWRlb1RhZzogSFRNTE1lZGlhRWxlbWVudCA9IDxIVE1MTWVkaWFFbGVtZW50PiBlbGVtZW50LmZpbmQoaXNWaWRlb09yQXVkaW8pLmdldCgwKTtcclxuICAgICAgICBpZiAoaXNWaWRlb09yQXVkaW8gPT0gXCJBVURJT1wiICYmICRzY29wZS52aHNNYXRlcmlhbFNldHRpbmdzICYmICRzY29wZS52aHNNYXRlcmlhbFNldHRpbmdzLnN1YnRpdGxlc1swXSkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRQbGF5ZXJTdWJ0aXRsZXMocGxheWVyVmlkZW9UYWcsICRzY29wZS52aHNNYXRlcmlhbFNldHRpbmdzLnN1YnRpdGxlc1swXS51cmwsICRzY29wZS52aHNNYXRlcmlhbFNldHRpbmdzLnN1YnRpdGxlc1swXS5sYWJlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQocGxheWVyVmlkZW9UYWcpLm9uKCdjb250ZXh0bWVudScsIChldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudCBhIHJpZ2h0LW1vdXNlIGNsaWNrIG9uIHRoZSBwbGF5ZXIgYXJlYVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChfc2VsZi4kc2NvcGUudmhzSWQpIHtcclxuICAgICAgICAgICAgcGxheWVyVmlkZW9UYWcuaWQgPSBfc2VsZi4kc2NvcGUudmhzSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2aWRlb0pzUGxheWVySWQgPSBudWxsO1xyXG4gICAgICAgIGlmICghZWxlbWVudC5hdHRyKCdpZCcpKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuYXR0cignaWQnLCBSYW5kb21VdGlscy5nZW5lcmF0ZVJhbmRvbUlkKCd2aHNfdmlkZW9qXycpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmlkZW9Kc1BsYXllcklkID0gZWxlbWVudC5hdHRyKCdpZCcpO1xyXG5cclxuICAgICAgICBsZXQgdmlkZW9qc09wdGlvbnM6IFZpZGVvSlNPcHRpb25zID0gPFZpZGVvSlNPcHRpb25zPiB7XHJcbiAgICAgICAgICAgIGF1dG9wbGF5OiBmYWxzZSxcclxuICAgICAgICAgICAgY29udHJvbHM6IHRydWUsXHJcbiAgICAgICAgICAgIGZsYXNoOiB7XHJcbiAgICAgICAgICAgICAgICBzd2Y6IFwidmVuZG9yL3N3Zi92aWRlby1qcy5zd2ZcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsb29wOiBmYWxzZSxcclxuICAgICAgICAgICAgcG9zdGVyOiBfc2VsZi4kc2NvcGUudmhzUG9zdGVyIHx8IFwiXCIsXHJcbiAgICAgICAgICAgIHByZWxvYWQ6IFwibm9uZVwiLFxyXG4gICAgICAgICAgICB0ZWNoT3JkZXI6IFsnaHRtbDUnLCAnZmxhc2gnXSxcclxuICAgICAgICAgICAgaGVpZ2h0OiAxMzAwLFxyXG4gICAgICAgICAgICBodG1sNToge1xyXG4gICAgICAgICAgICAgICAgbmF0aXZlVGV4dFRyYWNrczogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS52aHNJbmxpbmVBdWRpbykge1xyXG4gICAgICAgICAgICBsZXQgYXVkaW9JbmxpbmVPcHRpb25zOiBWaWRlb0pTT3B0aW9ucyA9IDxWaWRlb0pTT3B0aW9ucz4ge1xyXG4gICAgICAgICAgICAgICAgYmlnUGxheUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBhdXRvcGxheTogX3NlbGYuJHNjb3BlLnZoc0F1dG9QbGF5IHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY29udHJvbEJhcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxzY3JlZW5Ub2dnbGU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHZpZGVvanNPcHRpb25zID0gdmlkZW9qcy5tZXJnZU9wdGlvbnModmlkZW9qc09wdGlvbnMsIGF1ZGlvSW5saW5lT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICQocGxheWVyVmlkZW9UYWcpLmFkZENsYXNzKFwidmhzLWlubGluZS1hdWRpb1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB5b3V0dWJlT3B0aW9uczogVmlkZW9KU09wdGlvbnMgPSA8VmlkZW9KU09wdGlvbnM+IHtcclxuICAgICAgICAgICAgYXV0b3BsYXk6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb250cm9sczogdHJ1ZSxcclxuICAgICAgICAgICAgbG9vcDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBvc3RlcjogXCJcIixcclxuICAgICAgICAgICAgcHJlbG9hZDogXCJub25lXCIsXHJcbiAgICAgICAgICAgIHRlY2hPcmRlcjogWyd5b3V0dWJlJ10sXHJcbiAgICAgICAgICAgIHNvdXJjZXM6IF9zZWxmLiRzY29wZS52aHNTb3VyY2VzLFxyXG4gICAgICAgICAgICBcInlvdXR1YmVcIjoge1xyXG4gICAgICAgICAgICAgICAgXCJ5dENvbnRyb2xzXCI6IDIsXHJcbiAgICAgICAgICAgICAgICBcImVuYWJsZWpzYXBpXCI6IDFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaGVpZ2h0OiAxMzAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoaXNZb3V0dWJlKSB7XHJcbiAgICAgICAgICAgICQoZWxlbWVudCkuYWRkQ2xhc3MoXCJ2aWRlby15b3V0dWJlLWpzXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3Zocy15b3V0dWJlLXZpZGVvJylcclxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhcInZqcy0xNi05XCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoXCJ2anNfdmlkZW9fMy1kaW1lbnNpb25zXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoXCJ2anMtdXNlci1pbmFjdGl2ZVwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKFwidmpzLTE2LTlfX29wdGltaXphdGlvblwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzaG93VHJhbnNjcmlwdEJ1dHRvbkNvbXBvbmVudCA9ICg8YW55PiB2aWRlb2pzKS5nZXRDb21wb25lbnQoJ0J1dHRvbicpO1xyXG4gICAgICAgICg8YW55PiB2aWRlb2pzKS5yZWdpc3RlckNvbXBvbmVudCgnU2hvd1RyYW5zY3JpcHRCdXR0b24nLCAoPGFueT4gdmlkZW9qcykuZXh0ZW5kKHNob3dUcmFuc2NyaXB0QnV0dG9uQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzaG93VHJhbnNjcmlwdEJ1dHRvbkNvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBoYW5kbGVDbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93VHJhbnNjcmlwdFBhbmUgPSAhdGhpcy5zaG93VHJhbnNjcmlwdFBhbmU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJ1aWxkQ1NTQ2xhc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAndmpzLWNvbnRyb2wgdmpzLWJ1dHRvbiBmYSBmYS1lZGl0JztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3JlYXRlQ29udHJvbFRleHRFbDogZnVuY3Rpb24gKGJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICg8YW55PiAkKGJ1dHRvbikpLmh0bWwoJCgnJykuYXR0cigndGl0bGUnLCAnU2hvdyBUcmFuc2NyaXB0JykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBpZiAoaXNZb3V0dWJlIHx8IGlzVmlkZW9PckF1ZGlvID09IFwiQVVESU9cIikge1xyXG4gICAgICAgICAgICB2aWRlb2pzKGlzWW91dHViZSA/IHZpZGVvSnNQbGF5ZXJJZCA6IHBsYXllclZpZGVvVGFnLFxyXG4gICAgICAgICAgICAgICAgaXNZb3V0dWJlICA/IHlvdXR1YmVPcHRpb25zIDogdmlkZW9qc09wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKTogdm9pZCB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGxheWVyOiBWaWRlb0pTUGxheWVyID0gdGhpcztcclxuICAgICAgICAgICAgICAgIF9zZWxmLnZpZGVvSlNQbGF5ZXIgPSBwbGF5ZXI7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwbGF5ZXJQb3N0ZXJUYWc6IEhUTUxFbGVtZW50ID0gZWxlbWVudC5maW5kKCcudmpzLXBvc3RlcicpLmdldCgwKTtcclxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy52aWRlby1qcycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5vbignY29udGV4dG1lbnUnLCAoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBwcmV2ZW50IGEgcmlnaHQtbW91c2UgY2xpY2sgb24gdGhlIGJpZyBwbGF5IGJ1dHRvbiBhbmQgb3RoZXIgY29udHJvbCBlbGVtZW50c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLmlzQXVkaW8oaXNWaWRlb09yQXVkaW8gPT09ICdBVURJTycpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9zZWxmLl9wbGF5ZXJJc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBfc2VsZi5fcGxheWVyQ3VycmVudFRpbWUgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfc2VsZi50ZXh0VHJhY2tMaXN0ID0gcGxheWVyLnRleHRUcmFja3MoKTtcclxuICAgICAgICAgICAgICAgICAgICBfc2VsZi5idWlsZFNob3dUcmFuc2NyaXB0QnV0dG9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3NlbGYudGV4dFRyYWNrTGlzdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfc2VsZi5hY3RpdmVUZXh0VHJhY2sgIT0gbnVsbCAmJiBfc2VsZi5hY3RpdmVUZXh0VHJhY2sgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2VsZi5hY3RpdmVUZXh0VHJhY2sucmVtb3ZlRXZlbnRMaXN0ZW5lcignY3VlY2hhbmdlJywgX3NlbGYub25DdWVDaGFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLmFjdGl2ZVRleHRUcmFjayA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLmFjdGl2ZUN1ZXNJZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+IHBsYXllcikuZ2V0Q2hpbGQoJ2NvbnRyb2xCYXInKS5yZW1vdmVDaGlsZCgnU2hvd1RyYW5zY3JpcHRCdXR0b24nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3NlbGYuc2hvd1RyYW5zY3JpcHRQYW5lID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IF9zZWxmLnRleHRUcmFja0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0cmFjazogVmlkZW9KU1RleHRUcmFjayA9IF9zZWxmLnRleHRUcmFja0xpc3RbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2subW9kZSA9PSAnc2hvd2luZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2VsZi5hY3RpdmVUZXh0VHJhY2sgPSB0cmFjaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2VsZi5hY3RpdmVDdWVzSWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbGYuYWN0aXZlVGV4dFRyYWNrLmFkZEV2ZW50TGlzdGVuZXIoJ2N1ZWNoYW5nZScsIF9zZWxmLm9uQ3VlQ2hhbmdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGFueT4gcGxheWVyKS5nZXRDaGlsZCgnY29udHJvbEJhcicpLmFkZENoaWxkKCdTaG93VHJhbnNjcmlwdEJ1dHRvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLnNob3dUcmFuc2NyaXB0UGFuZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBsYXllci5vbihcInBsYXlcIiwgKCkgPT4geyAvLyBjb21wbGVtZW50YXJ5IHRvIHBsYXllci5vbihcImVuZGVkXCIsIC4uLilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJwbGF5XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfc2VsZi5fcGxheWVySXNQbGF5aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXIub24oXCJlbmRlZFwiLCAoKSA9PiB7IC8vIGNvbXBsZW1lbnRhcnkgdG8gcGxheWVyLm9uKFwicGxheVwiLCAuLi4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZW5kZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLl9wbGF5ZXJJc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyLmV4aXRGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllci5jdXJyZW50VGltZSgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gX3NlbGYuc2V0UGxheWVyUG9zdGVyKHBsYXllciwgcGxheWVyVmlkZW9UYWcsIHBsYXllclBvc3RlclRhZyk7IC8vIHNvbWV0aW1lcyBtYXkgYmUgbmVlZGVkIGZvciBhdWRpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuaGFzU3RhcnRlZChmYWxzZSk7IC8vIHRoaXMgaXMgbmVlZGVkIHRvIHNob3cgYSBwb3N0ZXIgaW1hZ2UgYWdhaW4gKHVzaW5nIENTUylcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLm9uKCdwYXVzZScsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3NlbGYuX3BsYXllcklzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXIub24oJ2NoYW5nZVJlcycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1Jlc29sdXRpb24gY2hhbmdlZCB0bzogJywgcGxheWVyWydnZXRDdXJyZW50UmVzJ10oKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLm9uKCd0aW1ldXBkYXRlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfc2VsZi5fcGxheWVySXNQbGF5aW5nID0gIXBsYXllci5wYXVzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYXllci5jdXJyZW50VGltZSgpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbGYucGxheWVyQ3VycmVudFRpbWUgPSBwbGF5ZXIuY3VycmVudFRpbWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwib24oJ3RpbWV1cGRhdGUnKTogcGxheWVyLnBhdXNlZCgpID0gXCIsIHBsYXllci5wYXVzZWQoKSwgXCIsIHRpbWUgPSBcIiwgX3NlbGYucGxheWVyQ3VycmVudFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoYXQgYSBtZXNzLi4uXHJcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLm9uKCdlcnJvcicsIChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ19zZWxmLl9wbGF5ZXJJc1BsYXlpbmc6JywgX3NlbGYuX3BsYXllcklzUGxheWluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc7IGVycm9yRXZlbnQ6ICcsIGV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzsgcGxheWVyLmVycm9yKCk6ICcsIHBsYXllci5lcnJvcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzsgcGxheWVyLmVycm9yKCkuY29kZTogJywgcGxheWVyLmVycm9yKCkuY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc7IF9zZWxmLiRzY29wZS4kaWQ6ICcsIF9zZWxmLiRzY29wZS4kaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOyBhdHRlbXB0OiAnLCBfc2VsZi5lcnJvckNvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzsgX3NlbGYuX3BsYXllckN1cnJlbnRUaW1lJywgX3NlbGYuX3BsYXllckN1cnJlbnRUaW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzWW91dHViZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLmhpZGVWaWRlb2pzRXJyb3JNZXNzYWdlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfc2VsZi5lcnJvckNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfc2VsZi5lcnJvckNvdW50ID4gVmhzVmlkZW9BdWRpb0NvbnRyb2xsZXIuR0lWRV9VUF9BRlRFUl9TT19NQU5ZX0VSUk9SUykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyLm9mZignZXJyb3InKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLmVycm9yQ291bnQtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiICsgX3NlbGYuZXJyb3JDb3VudCArIChfc2VsZi5lcnJvckNvdW50ID09PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCIgYXR0ZW1wdCB0byByZXN0b3JlIHBsYXliYWNrIGFmdGVyIGVycm9yIGhhcyBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiIGF0dGVtcHRzIHRvIHJlc3RvcmUgcGxheWJhY2sgYWZ0ZXIgZXJyb3IgaGF2ZSBcIikgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmVlbiBtYWRlIHNvIGZhci4gTm93IHdlIGdpdmUgdXAuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLnNlbmRNZXNzYWdlVG9TZW50cnkoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfc2VsZi5lcnJvckNvdW50ID09PSAxIHx8IF9zZWxmLmVycm9yQ291bnQgPT09IFZoc1ZpZGVvQXVkaW9Db250cm9sbGVyLkdJVkVfVVBfQUZURVJfU09fTUFOWV9FUlJPUlMgLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxheWVyVmlkZW9UYWcuY2FuUGxheVR5cGUgJiYgX3NlbGYuJHNjb3BlLnZoc1NvdXJjZXMgJiYgX3NlbGYuJHNjb3BlLnZoc1NvdXJjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiXCIgKyBfc2VsZi4kc2NvcGUudmhzU291cmNlc1swXS50eXBlICsgXCIgc3VwcG9ydDogXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhKHBsYXllclZpZGVvVGFnLmNhblBsYXlUeXBlKFwiXCIgKyBfc2VsZi4kc2NvcGUudmhzU291cmNlc1swXS50eXBlICsgXCI7XCIpLnJlcGxhY2UoL25vLywgJycpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxheWVyLmVycm9yKCkuY29kZSA9PT0gTWVkaWFFcnJvci5NRURJQV9FUlJfU1JDX05PVF9TVVBQT1JURUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxheWVyLmVycm9yKCkubWVzc2FnZS50b1VwcGVyQ2FzZSgpLmluZGV4T2YoXCJGTEFTSFwiKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllci5vcHRpb25zKHt0ZWNoT3JkZXI6IFsnaHRtbDUnLCAnZmxhc2gnXX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2VsZi5zZW5kTWVzc2FnZVRvU2VudHJ5KFwiU29tZSBlcnJvciBvY2N1cnJlZC4gV2Ugd2lsbCB0cnkgdG8gc3dpdGNoIHRvIEhUTUw1IG1vZGUuLi5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGxheWVyLnRlY2hOYW1lICYmIHBsYXllci50ZWNoTmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIkhUTUw1XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyLm9wdGlvbnMoe3RlY2hPcmRlcjogWydmbGFzaCcsICdodG1sNSddfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLnNlbmRNZXNzYWdlVG9TZW50cnkoXCJTb21lIGVycm9yIG9jY3VycmVkLiBXZSB3aWxsIHRyeSB0byBzd2l0Y2ggdG8gRmxhc2ggbW9kZS4uLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLnNldFBsYXllclNvdXJjZXMocGxheWVyLCBwbGF5ZXJWaWRlb1RhZywgaXNZb3V0dWJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLnJlbG9hZFBsYXllcihwbGF5ZXIsIHBsYXllclZpZGVvVGFnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfc2VsZi4kc2NvcGUudmhzRXJyb3JDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbGYuc2VuZE1lc3NhZ2VUb1NlbnRyeShcIlNvbWUgZXJyb3Igb2NjdXJyZWQuIFdlIGFyZSBub3cgdHJ5aW5nIHRvIHJlcXVlc3QgbXVsdGltZWRpYSBzb3VyY2VzIGFnYWluLi4uXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxhbnk+ID0gX3NlbGYuJHNjb3BlLnZoc0Vycm9yQ2FsbGJhY2socGxheWVyLmVycm9yKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2VsZi4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2VsZi5zZXRQbGF5ZXJQb3N0ZXIocGxheWVyLCBwbGF5ZXJWaWRlb1RhZywgcGxheWVyUG9zdGVyVGFnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGF5ZXJWaWRlb1RhZy5nZXRBdHRyaWJ1dGUoXCJzcmNcIikgIT0gX3NlbGYuJHNjb3BlLnZoc1NvdXJjZXNbMF0uc3JjKSB7IC8vIFRPRE86IHJldmlzZSBsYXRlcjogYWx3YXlzIFswXSBvciBzZWxlY3QgYSBzb3VyY2UgYnkgc29tZSBjb25kaXRpb25zP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLnNldFBsYXllclNvdXJjZXMocGxheWVyLCBwbGF5ZXJWaWRlb1RhZywgaXNZb3V0dWJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2VsZi5yZWxvYWRQbGF5ZXIocGxheWVyLCBwbGF5ZXJWaWRlb1RhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllci5vZmYoJ2Vycm9yJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9zZWxmLiRzY29wZS52aHNTb3VyY2VzICYmIF9zZWxmLiRzY29wZS52aHNTb3VyY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbGYuc2VuZE1lc3NhZ2VUb1NlbnRyeShcIldlIHJlY2VpdmVkIGV4YWN0bHkgdGhlIHNhbWUgbXVsdGltZWRpYSBVUkwuXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgV29uJ3QgcmVxdWVzdCBzb3VyY2VzIGFnYWluLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZWxmLnNlbmRNZXNzYWdlVG9TZW50cnkoXCJObyBtdWx0aW1lZGlhIHNvdXJjZXMgd2VyZSBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBWaHNWaWRlb0F1ZGlvQ29udHJvbGxlci5SRVRSWV9USU1FX0lOVEVSVkFMKTsgLy8gZW5kIG9mICR0aW1lb3V0KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgLy8gZW5kIG9mIF9zZWxmLiRzY29wZS52aHNFcnJvckNhbGxiYWNrKCkudGhlbigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTsgLy8gZW5kIG9mIHBsYXllci5vbignZXJyb3InLCAuLi4pXHJcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9zZWxmLnNlbmRNZXNzYWdlVG9TZW50cnkoXCJObyBtdWx0aW1lZGlhIHNvdXJjZXMgd2VyZSBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgX3NlbGYuc2V0UGxheWVyU291cmNlcyhwbGF5ZXIsIHBsYXllclZpZGVvVGFnLCBpc1lvdXR1YmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSAvLyBlbmQgb2YgcHVibGljIGluaXQoJHNjb3BlLCBlbGVtZW50KVxyXG5cclxuICAgIHB1YmxpYyBzZXRQbGF5ZXJTb3VyY2VzKHBsYXllcjogVmlkZW9KU1BsYXllciwgcGxheWVyVmlkZW9UYWc6IEhUTUxNZWRpYUVsZW1lbnQsIGlzWW91dHViZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChpc1lvdXR1YmUpIHJldHVybjtcclxuICAgICAgICBsZXQgX3NlbGY6IFZoc1ZpZGVvQXVkaW9Db250cm9sbGVyID0gdGhpcztcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfc2VsZi4kc2NvcGUudmhzU291cmNlcykpIHtcclxuICAgICAgICAgICAgX3NlbGYuJHNjb3BlLnZoc1NvdXJjZXMuZm9yRWFjaChzb3VyY2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS50eXBlID09PSBcInZpZGVvL3F1aWNrdGltZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnR5cGUgPSBcInZpZGVvL21wNFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGxheWVyLnNyYyhfc2VsZi4kc2NvcGUudmhzU291cmNlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0UGxheWVyU3VidGl0bGVzKHBsYXllclZpZGVvVGFnOiBIVE1MTWVkaWFFbGVtZW50LCBzdWJ0aXRsZXNVcmw6IHN0cmluZywgc3VidGl0bGVzTGFuZ3VhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChzdWJ0aXRsZXNVcmwpIHtcclxuICAgICAgICAgICAgJChwbGF5ZXJWaWRlb1RhZykuYXBwZW5kKCQoXHJcbiAgICAgICAgICAgICAgICBgPHRyYWNrIHNyYz1cIiR7c3VidGl0bGVzVXJsfVwiIHNyY2xhbmc9XCIke3N1YnRpdGxlc0xhbmd1YWdlfVwiPmBcclxuICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0N1ZUFjdGl2ZShjdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5USU1FU1RBTVBfS0VZKSk7XHJcbiAgICAgICAgcmV0dXJuIChNYXRoLmZsb29yKGN1ZS5zdGFydCowLjAwMSkgPD0gdGltZXN0YW1wKSAmJiAoTWF0aC5mbG9vcihjdWUuZW5kKjAuMDAxKSA+IHRpbWVzdGFtcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ3VlQ2hhbmdlOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCBuZXdDdWUgPSAgdGhpcy5hY3RpdmVUZXh0VHJhY2suY3Vlc1swXTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmFjdGl2ZVRleHRUcmFjay5jdWVzKTtcclxuICAgICAgICBpZihuZXdDdWUgJiYgKCFuZXdDdWUuaWQgfHwgbmV3Q3VlLmlkID09IFwiXCIpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgIHRoaXMuYWN0aXZlVGV4dFRyYWNrLmN1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlVGV4dFRyYWNrLmN1ZXNbaV0uaWQgPSBpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3RpdmVDdWVzSWRzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFjdGl2ZVRleHRUcmFjay5hY3RpdmVDdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ3Vlc0lkcy5wdXNoKHRoaXMuYWN0aXZlVGV4dFRyYWNrLmFjdGl2ZUN1ZXNbaV0uaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIFZKU0lzQ3VlQWN0aXZlKGN1ZTogVmlkZW9KU1RleHRUcmFja0N1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUN1ZXNJZHMuZmlsdGVyKChjdWVJZDogc3RyaW5nKSA9PiBjdWVJZCA9PSBjdWUuaWQpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZFNob3dUcmFuc2NyaXB0QnV0dG9uKCk6IHZvaWQge1xyXG4gICAgICAgIHZhciBzaG93VHJhbnNjcmlwdEJ1dHRvbkNvbXBvbmVudCA9ICg8YW55PiB2aWRlb2pzKS5nZXRDb21wb25lbnQoJ0J1dHRvbicpO1xyXG4gICAgICAgICg8YW55PiB2aWRlb2pzKS5yZWdpc3RlckNvbXBvbmVudCgnU2hvd1RyYW5zY3JpcHRCdXR0b24nLCAoPGFueT4gdmlkZW9qcykuZXh0ZW5kKHNob3dUcmFuc2NyaXB0QnV0dG9uQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzaG93VHJhbnNjcmlwdEJ1dHRvbkNvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBoYW5kbGVDbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93VHJhbnNjcmlwdFBhbmUgPSAhdGhpcy5zaG93VHJhbnNjcmlwdFBhbmU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJ1aWxkQ1NTQ2xhc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAndmpzLWNvbnRyb2wgdmpzLWJ1dHRvbiBmYSBmYS1lZGl0JztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3JlYXRlQ29udHJvbFRleHRFbDogZnVuY3Rpb24gKGJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICg8YW55PiAkKGJ1dHRvbikpLmh0bWwoJCgnJykuYXR0cigndGl0bGUnLCAnU2hvdyBUcmFuc2NyaXB0JykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTaGFkb3dSb290KGVsZW06IGFueSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW0uc2hhZG93Um9vdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgVkpTUmV3aW5kVG8oc2Vjb25kczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWRlb0pTUGxheWVyLmN1cnJlbnRUaW1lKHNlY29uZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXdpbmRUbyhtaWxsaXNlY29uZHM6IG51bWJlciwgbWF0ZXJpYWxJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHBsYXllckNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1hdGVyaWFsSWQpO1xyXG5cclxuICAgICAgICB0aGlzLiR3aW5kb3dbXCJWSURFTy1QTEFZRVJcIl0ucGxheWVyLnBhdXNlKCk7XHJcbiAgICAgICAgdGhpcy4kd2luZG93W1wiVklERU8tUExBWUVSXCJdLnBsYXllci5jdXJyZW50VGltZSA9IChtaWxsaXNlY29uZHMvMTAwMCk7XHJcbiAgICAgICAgdGhpcy4kd2luZG93W1wiVklERU8tUExBWUVSXCJdLnBsYXllci5wbGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERhdGVGcm9tU2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBEYXRlIHtcclxuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKDAsMCwwLDAsMCwwLDApO1xyXG4gICAgICAgIGRhdGUuc2V0U2Vjb25kcyhzZWNvbmRzKTtcclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGF0ZUZyb21NaWxsaXNlY29uZHMobWlsbGlzZWNvbmRzOiBudW1iZXIpOiBEYXRlIHtcclxuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKDAsMCwwLDAsMCwwLDApO1xyXG4gICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kcyk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRoaXNNdWx0aW1lZGlhU291cmNlT3BlbkluTG9jYWxTdG9yYWdlKG1hdGVyaWFsSWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhbWF0ZXJpYWxJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWF0ZXJpYWxJRCcpID09PSBtYXRlcmlhbElkLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5UaGlzTWF0ZXJpYWwoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUudmhzTWF0ZXJpYWxTZXR0aW5ncy4kc2NvcGUuJGJyb2FkY2FzdChcInNldE5ld011bHRpbWVkaWFTb3VyY2VcIiwgdGhpcy4kc2NvcGUudmhzTWF0ZXJpYWxTZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LkNVUlJFTlRfQ0hFQ0tQT0lOVF9LRVkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvU2VudHJ5KFwiRXJyb3IgaW4gb3BlbiB2aWRlbyBvciBhdWRpbzogXCIgKyBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVsb2FkUGxheWVyKHBsYXllcjogVmlkZW9KU1BsYXllciwgcGxheWVyVmlkZW9UYWc6IEhUTUxNZWRpYUVsZW1lbnQpIHtcclxuICAgICAgICBsZXQgX3NlbGY6IFZoc1ZpZGVvQXVkaW9Db250cm9sbGVyID0gdGhpcztcclxuICAgICAgICBwbGF5ZXIub25lKCdsb2FkZWRtZXRhZGF0YScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHBsYXllci5jdXJyZW50VGltZSgpIDwgX3NlbGYucGxheWVyQ3VycmVudFRpbWUpIHtcclxuICAgICAgICAgICAgICAgIHBsYXllci5jdXJyZW50VGltZShfc2VsZi5wbGF5ZXJDdXJyZW50VGltZSk7XHJcbiAgICAgICAgICAgICAgICBwbGF5ZXJWaWRlb1RhZ1snY3VycmVudFRpbWUnXSA9IF9zZWxmLnBsYXllckN1cnJlbnRUaW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChfc2VsZi5wbGF5ZXJJc1BsYXlpbmcpIHtcclxuICAgICAgICAgICAgICAgIHBsYXllci5vbmUoJ2NhbnBsYXknLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLnBsYXkoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcGxheWVyLnByZWxvYWQoJ2F1dG8nKTtcclxuICAgICAgICBwbGF5ZXIubG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGlkZVZpZGVvanNFcnJvck1lc3NhZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnRzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJy52anMtbW9kYWwtZGlhbG9nLWNvbnRlbnQnLCAnLnZqcy1lcnJvci1kaXNwbGF5JywgJy52anMtbG9hZGluZy1zcGlubmVyJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAkKGVsZW1lbnQpLmhpZGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UGxheWVyUG9zdGVyKHBsYXllcjogVmlkZW9KU1BsYXllciwgcGxheWVyVmlkZW9UYWc6IEhUTUxNZWRpYUVsZW1lbnQsIHBsYXllclBvc3RlclRhZzogSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICBsZXQgX3NlbGY6IFZoc1ZpZGVvQXVkaW9Db250cm9sbGVyID0gdGhpcztcclxuICAgICAgICBpZiAoX3NlbGYuJHNjb3BlLnZoc1Bvc3RlciAmJiBfc2VsZi4kc2NvcGUudmhzUG9zdGVyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gJChwbGF5ZXJQb3N0ZXJUYWcpLmNzcyhcImJhY2tncm91bmQtaW1hZ2VcIiwgJ3VybChcIicgKyAoX3NlbGYuJHNjb3BlLnZoc1Bvc3RlciB8fCBcIlwiKSArICdcIiknKTtcclxuICAgICAgICAgICAgcGxheWVyVmlkZW9UYWcuc2V0QXR0cmlidXRlKCdwb3N0ZXInLCBfc2VsZi4kc2NvcGUudmhzUG9zdGVyIHx8IFwiXCIpOyAvLyBUT0RPOiB0ZXN0IGlmIHRoaXMgbGluZSBjYW4gYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICBwbGF5ZXIucG9zdGVySW1hZ2Uuc2V0U3JjKF9zZWxmLiRzY29wZS52aHNQb3N0ZXIgfHwgXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2VuZE1lc3NhZ2VUb1NlbnRyeShtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcclxuICAgICAgICAgICAgKDxhbnk+d2luZG93KS5TZW50cnkuY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVW5hYmxlIHRvIHNlbmQgU2VudHJ5IG1lc3NhZ2UuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVUcmFuc2NyaXB0UGFuZSgpIHtcclxuICAgICAgICB0aGlzLm9wZW5UcmFuc2NyaXB0UGFuZSA9ICF0aGlzLm9wZW5UcmFuc2NyaXB0UGFuZTtcclxuXHJcbiAgICB9XHJcbn0gLy8gZW5kIG9mIFZoc1ZpZGVvQXVkaW9Db250cm9sbGVyXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzVmlkZW9EaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc1ZpZGVvQXVkaW9EaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNWaWRlb0F1ZGlvQ29udHJvbGxlcikge1xyXG5cclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50LCAndmlkZW8nLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gVmhzVmlkZW9BdWRpb0NvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7XHJcbiAgICAgICAgdmhzSWQ6IFwiPT9cIixcclxuICAgICAgICB2aHNTb3VyY2VzOiBcIj1cIixcclxuICAgICAgICB2aHNXaWR0aDogXCI9P1wiLFxyXG4gICAgICAgIHZoc0hlaWdodDogXCI9P1wiLFxyXG4gICAgICAgIHZoc1Bvc3RlcjogXCI9P1wiLFxyXG4gICAgICAgIHZoc0Vycm9yQ2FsbGJhY2s6IFwiJj9cIixcclxuICAgICAgICB2aHNNYXRlcmlhbENhbGxiYWNrOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzTWF0ZXJpYWxTZXR0aW5nczogXCI9P1wiXHJcbiAgICB9O1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMtdmlkZW8uaHRtbFwiKTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc1ZpZGVvRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzWW91dHViZVZpZGVvRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNWaWRlb0F1ZGlvRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzVmlkZW9BdWRpb0NvbnRyb2xsZXIpIHtcclxuXHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCwgJ3ZpZGVvJywgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gVmhzVmlkZW9BdWRpb0NvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7XHJcbiAgICAgICAgdmhzSWQ6IFwiPT9cIixcclxuICAgICAgICB2aHNTb3VyY2VzOiBcIj1cIixcclxuICAgICAgICB2aHNXaWR0aDogXCI9P1wiLFxyXG4gICAgICAgIHZoc0hlaWdodDogXCI9P1wiLFxyXG4gICAgICAgIHZoc1Bvc3RlcjogXCI9P1wiLFxyXG4gICAgICAgIHZoc0Vycm9yQ2FsbGJhY2s6IFwiJj9cIixcclxuICAgICAgICB2aHNNYXRlcmlhbENhbGxiYWNrOiBcIj0/XCIsXHJcbiAgICAgICAgdmhzTWF0ZXJpYWxTZXR0aW5nczogXCI9P1wiXHJcbiAgICB9O1xyXG4gICAgZGlyZWN0aXZlLnRlbXBsYXRlVXJsID0gdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy92aHMteW91dHViZS12aWRlby5odG1sXCIpO1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzWW91dHViZVZpZGVvRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzQXVkaW9EaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc1ZpZGVvQXVkaW9EaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNWaWRlb0F1ZGlvQ29udHJvbGxlcikge1xyXG5cclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50LCAnYXVkaW8nLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge307XHJcbiAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBcIkFcIjtcclxuICAgIGRpcmVjdGl2ZS5saW5rID0gbGluaztcclxuICAgIGRpcmVjdGl2ZS5jb250cm9sbGVyID0gVmhzVmlkZW9BdWRpb0NvbnRyb2xsZXI7XHJcbiAgICBkaXJlY3RpdmUuc2NvcGUgPSB7XHJcbiAgICAgICAgdmhzSWQ6IFwiPT9cIixcclxuICAgICAgICB2aHNTb3VyY2VzOiBcIj1cIixcclxuICAgICAgICB2aHNXaWR0aDogXCI9P1wiLFxyXG4gICAgICAgIHZoc0hlaWdodDogXCI9P1wiLFxyXG4gICAgICAgIHZoc1Bvc3RlcjogXCI9P1wiLFxyXG4gICAgICAgIHZoc0Vycm9yQ2FsbGJhY2s6IFwiJj9cIixcclxuICAgICAgICB2aHNJbmxpbmVBdWRpbzogXCI9P1wiLFxyXG4gICAgICAgIHZoc0F1dG9QbGF5OiBcIj0/XCIsXHJcbiAgICAgICAgdmhzTWF0ZXJpYWxDYWxsYmFjazogXCI9P1wiLFxyXG4gICAgICAgIHZoc01hdGVyaWFsU2V0dGluZ3M6IFwiPT9cIlxyXG4gICAgfTtcclxuICAgIGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLWF1ZGlvLmh0bWxcIik7XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNBdWRpb0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSVNlY3Rpb25JbkhpZXJhcmNoeVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge1RpbWVab25lLCBUaW1lWm9uZVR5cGV9IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvVGltZVpvbmVUeXBlXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtJVklMVFNlc3Npb259IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvSVZJTFRTZXNzaW9uXCI7XHJcblxyXG5pbnRlcmZhY2UgVmhzV2ViaW5hckNyZWF0ZUVkaXREaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIG5ld1Nlc3Npb246IElWSUxUU2Vzc2lvbjtcclxuICAgIHZpbHRTZXNzaW9uU2VjdGlvbnM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdO1xyXG4gICAgY3VycmVudFVzZXI6IElVc2VySW5mbztcclxuICAgIGNvdXJzZTogSUNvdXJzZTtcclxuICAgIGlzQ3JlYXRpb25Nb2RhbFNob3duOiBib29sZWFuO1xyXG4gICAgdm0/OiBWaHNXZWJpbmFyQ3JlYXRlRWRpdERpcmVjdGl2ZUNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNXZWJpbmFyQ3JlYXRlRWRpdERpcmVjdGl2ZUNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHRpbWVab25lID0gVGltZVpvbmU7XHJcbiAgICBwdWJsaWMgdmlsdFNlc3Npb25TZWN0aW9uczogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkW107XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdXHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IFZoc1dlYmluYXJDcmVhdGVFZGl0RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNXZWJpbmFyQ3JlYXRlRWRpdERpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBWaHNXZWJpbmFyQ3JlYXRlRWRpdERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc1dlYmluYXJDcmVhdGVFZGl0RGlyZWN0aXZlQ29udHJvbGxlcikge1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNXZWJpbmFyQ3JlYXRlRWRpdERpcmVjdGl2ZUNvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgbmV3U2Vzc2lvbjogXCI9XCIsXHJcbiAgICAgICAgICAgIHZpbHRTZXNzaW9uU2VjdGlvbnM6IFwiPVwiLFxyXG4gICAgICAgICAgICBjdXJyZW50VXNlcjogXCI9XCIsXHJcbiAgICAgICAgICAgIGlzQ3JlYXRpb25Nb2RhbFNob3duOiBcIj1cIixcclxuICAgICAgICAgICAgY291cnNlOiBcIj1cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLXdlYmluYXItY3JlYXRlLWVkaXQuaHRtbFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5WaHNXZWJpbmFyQ3JlYXRlRWRpdERpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7QnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYnJhbmRpbmcvQnJhbmRpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQnJhbmRpbmdDb2xvcnN9IGZyb20gXCIuLi8uLi9icmFuZGluZy9JQnJhbmRpbmdDb2xvcnNcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uLy4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzQnJhbmRpbmdDb2xvcnNFZGl0aW5nU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBidXNpbmVzc1VuaXRJZD86IG51bWJlcjtcclxuXHJcbiAgICB2bT86IFZoc0JyYW5kaW5nQ29sb3JzRWRpdGluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0JyYW5kaW5nQ29sb3JzRWRpdGluZyB7XHJcbiAgICBwdWJsaWMgYnJhbmRpbmdDb2xvcnM6IElCcmFuZGluZ0NvbG9ycztcclxuICAgIHB1YmxpYyBpc0RlbGV0ZUF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucyA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIEJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzQnJhbmRpbmdDb2xvcnNFZGl0aW5nU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJyYW5kaW5nU2VydmljZTogQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZEJyYW5kaW5nQ29sb3JzKClcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEJyYW5kaW5nQ29sb3JzKCk6IGFuZ3VsYXIuSVByb21pc2U8SUJyYW5kaW5nQ29sb3JzPiB7XHJcbiAgICAgICAgbGV0IGxvYWRCcmFuZGluZ0NvbG9yc1Byb21pc2UgPSB0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZFxyXG4gICAgICAgICAgICA/IHRoaXMuYnJhbmRpbmdTZXJ2aWNlLmdldEJyYW5kaW5nQ29sb3JzKHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICA6IHRoaXMuYnJhbmRpbmdTZXJ2aWNlLmdldFN5c3RlbUJyYW5kaW5nQ29sb3JzKCk7XHJcbiAgICAgICAgcmV0dXJuIGxvYWRCcmFuZGluZ0NvbG9yc1Byb21pc2VcclxuICAgICAgICAgICAgLnRoZW4oKGJyYW5kaW5nQ29sb3JzOiBJQnJhbmRpbmdDb2xvcnMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEZWxldGVBdmFpbGFibGUgPSBicmFuZGluZ0NvbG9ycy5pZCAmJiAoYnJhbmRpbmdDb2xvcnMubW9iaWxlQ29sb3IgIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHx8IGJyYW5kaW5nQ29sb3JzLmJhckNvbG9yICE9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB8fCBicmFuZGluZ0NvbG9ycy5tb2JpbGVCYXJDb2xvciAhPSBudWxsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ0NvbG9ycyA9IGFuZ3VsYXIuY29weShicmFuZGluZ0NvbG9ycyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5icmFuZGluZ0NvbG9ycyA9PSBudWxsIHx8ICh0aGlzLmJyYW5kaW5nQ29sb3JzLmJhckNvbG9yID09IG51bGwgJiYgdGhpcy5icmFuZGluZ0NvbG9ycy5tb2JpbGVCYXJDb2xvciA9PSBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdDb2xvcnMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyYW5kaW5nQ29sb3JzLmJhckNvbG9yID0gXCIjMzM3YWI3XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ0NvbG9ycy5tb2JpbGVCYXJDb2xvciA9IFwiIzMzN2FiN1wiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnJhbmRpbmdDb2xvcnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlQnJhbmRpbmdDb2xvcnMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBzYXZlQnJhbmRpbmdDb2xvcnNQcm9taXNlID0gdGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgPyB0aGlzLmJyYW5kaW5nU2VydmljZS5zYXZlQnJhbmRpbmdDb2xvcnMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZCxcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdDb2xvcnMubW9iaWxlQ29sb3IsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyYW5kaW5nQ29sb3JzLmJhckNvbG9yLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ0NvbG9ycy5tb2JpbGVCYXJDb2xvclxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDogdGhpcy5icmFuZGluZ1NlcnZpY2Uuc2F2ZVN5c3RlbUJyYW5kaW5nQ29sb3JzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ0NvbG9ycy5tb2JpbGVDb2xvcixcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdDb2xvcnMuYmFyQ29sb3IsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyYW5kaW5nQ29sb3JzLm1vYmlsZUJhckNvbG9yXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHNhdmVCcmFuZGluZ0NvbG9yc1Byb21pc2VcclxuICAgICAgICAgICAgLnRoZW4oKGJyYW5kaW5nQ29sb3JzOiBJQnJhbmRpbmdDb2xvcnMpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJDb2xvcnMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGVsZXRlQXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdDb2xvcnMgPSBhbmd1bGFyLmNvcHkoYnJhbmRpbmdDb2xvcnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnJhbmRpbmdDb2xvcnM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsQnJhbmRpbmdDb2xvcnMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubG9hZEJyYW5kaW5nQ29sb3JzKClcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGlzRGlzYWJsZVNhdmVCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEodGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5jb25maWd1cmVCdXNpbmVzc1VuaXRTZXR0aW5ncyB8fCB0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmVkaXRTeXN0ZW1Db25maWd1cmF0aW9uKSB8fCAhdGhpcy5pc0xvYWRlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQnJhbmRpbmdDb2xvcnMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBkZWxldGVCcmFuZGluZ0NvbG9yc1Byb21pc2UgPSB0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZFxyXG4gICAgICAgICAgICA/IHRoaXMuYnJhbmRpbmdTZXJ2aWNlLnJlbW92ZUJyYW5kaW5nQ29sb3JzKHRoaXMuYnJhbmRpbmdDb2xvcnMuaWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5icmFuZGluZ1NlcnZpY2UucmVtb3ZlU3lzdGVtQnJhbmRpbmdDb2xvcnModGhpcy5icmFuZGluZ0NvbG9ycy5pZCk7XHJcbiAgICAgICAgZGVsZXRlQnJhbmRpbmdDb2xvcnNQcm9taXNlXHJcbiAgICAgICAgICAgIC50aGVuKChicmFuZGluZ0NvbG9yczogSUJyYW5kaW5nQ29sb3JzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiQ29sb3JzIHN1Y2Nlc3NmdWxseSBkZWxldGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RlbGV0ZUF2YWlsYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ0NvbG9ycyA9IGFuZ3VsYXIuY29weShicmFuZGluZ0NvbG9ycyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5icmFuZGluZ0NvbG9ycyA9PSBudWxsIHx8ICh0aGlzLmJyYW5kaW5nQ29sb3JzLmJhckNvbG9yID09IG51bGwgJiYgdGhpcy5icmFuZGluZ0NvbG9ycy5tb2JpbGVCYXJDb2xvciA9PSBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdDb2xvcnMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyYW5kaW5nQ29sb3JzLmJhckNvbG9yID0gXCIjMzM3YWI3XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ0NvbG9ycy5tb2JpbGVCYXJDb2xvciA9IFwiIzMzN2FiN1wiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnJhbmRpbmdDb2xvcnM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNb2JpbGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA3Njg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzQnJhbmRpbmdDb2xvcnNFZGl0aW5nU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbnkpIHtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0JyYW5kaW5nQ29sb3JzRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzQnJhbmRpbmdDb2xvcnNFZGl0aW5nU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzQnJhbmRpbmdDb2xvcnNFZGl0aW5nKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNCcmFuZGluZ0NvbG9yc0VkaXRpbmcsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQ6IFwiPT92aHNCdXNpbmVzc1VuaXRJZFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9icmFuZGluZy92aHMtYnJhbmRpbmctY29sb3JzLWVkaXRpbmcuaHRtbFwiKVxyXG4gICAgfTtcclxufVxyXG5cclxuVmhzQnJhbmRpbmdDb2xvcnNFZGl0aW5nRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7QnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYnJhbmRpbmcvQnJhbmRpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQnJhbmRpbmdDdXN0b21Dc3N9IGZyb20gXCIuLi8uLi9icmFuZGluZy9JQnJhbmRpbmdDdXN0b21Dc3NcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uLy4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzQnJhbmRpbmdDc3NFZGl0aW5nU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBidXNpbmVzc1VuaXRJZD86IG51bWJlcjtcclxuXHJcbiAgICB2bT86IFZoc0JyYW5kaW5nQ3NzRWRpdGluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0JyYW5kaW5nQ3NzRWRpdGluZyB7XHJcbiAgICBwdWJsaWMgY3VzdG9tQ3NzOiBJQnJhbmRpbmdDdXN0b21Dc3M7XHJcbiAgICBwdWJsaWMgaXNEZWxldGVBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnMgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBCcmFuZGluZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc0JyYW5kaW5nQ3NzRWRpdGluZ1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBicmFuZGluZ1NlcnZpY2U6IEJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRDdXN0b21Dc3MoKVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ3VzdG9tQ3NzKCk6IGFuZ3VsYXIuSVByb21pc2U8SUJyYW5kaW5nQ3VzdG9tQ3NzPiB7XHJcbiAgICAgICAgbGV0IGxvYWRDdXN0b21Dc3NQcm9taXNlID0gdGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgPyB0aGlzLmJyYW5kaW5nU2VydmljZS5nZXRDdXN0b21Dc3ModGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5icmFuZGluZ1NlcnZpY2UuZ2V0U3lzdGVtQ3VzdG9tQ3NzKCk7XHJcbiAgICAgICAgcmV0dXJuIGxvYWRDdXN0b21Dc3NQcm9taXNlXHJcbiAgICAgICAgICAgIC50aGVuKChjdXN0b21Dc3M6IElCcmFuZGluZ0N1c3RvbUNzcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RlbGV0ZUF2YWlsYWJsZSA9IGN1c3RvbUNzcy5pZCAmJiBjdXN0b21Dc3MuY3NzICE9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUNzcyA9IGFuZ3VsYXIuY29weShjdXN0b21Dc3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQ3NzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUJyYW5kaW5nQ3NzKCkge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2F2ZUN1c3RvbUNzc1Byb21pc2UgPSB0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZFxyXG4gICAgICAgICAgICA/IHRoaXMuYnJhbmRpbmdTZXJ2aWNlLnVwZGF0ZUN1c3RvbUNzcyh0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZCwgdGhpcy5jdXN0b21Dc3MuY3NzKVxyXG4gICAgICAgICAgICA6IHRoaXMuYnJhbmRpbmdTZXJ2aWNlLnVwZGF0ZVN5c3RlbUN1c3RvbUNzcyh0aGlzLmN1c3RvbUNzcy5jc3MpO1xyXG4gICAgICAgIHJldHVybiBzYXZlQ3VzdG9tQ3NzUHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigoY3VzdG9tQ3NzOiBJQnJhbmRpbmdDdXN0b21Dc3MpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJDdXN0b20gY3NzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RlbGV0ZUF2YWlsYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUNzcyA9IGFuZ3VsYXIuY29weShjdXN0b21Dc3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQ3NzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlU2F2ZUJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISh0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmNvbmZpZ3VyZUJ1c2luZXNzVW5pdFNldHRpbmdzIHx8IHRoaXMuc3lzdGVtUGVybWlzc2lvbnMuZWRpdFN5c3RlbUNvbmZpZ3VyYXRpb24pIHx8ICF0aGlzLmlzTG9hZGVkIHx8IHRoaXMuY3VzdG9tQ3NzLmNzcyA9PSBudWxsIHx8IHRoaXMuY3VzdG9tQ3NzLmNzcy5sZW5ndGggPT0gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsQnJhbmRpbmdDc3MoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubG9hZEN1c3RvbUNzcygpXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQnJhbmRpbmdDc3MoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBkZWxldGVDdXN0b21Dc3NQcm9taXNlID0gdGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgPyB0aGlzLmJyYW5kaW5nU2VydmljZS5kZWxldGVDdXN0b21Dc3ModGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5icmFuZGluZ1NlcnZpY2UuZGVsZXRlU3lzdGVtQ3VzdG9tQ3NzKCk7XHJcbiAgICAgICAgZGVsZXRlQ3VzdG9tQ3NzUHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigoY3VzdG9tQ3NzOiBJQnJhbmRpbmdDdXN0b21Dc3MpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJDdXN0b20gY3NzIHN1Y2Nlc3NmdWxseSBkZWxldGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RlbGV0ZUF2YWlsYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21Dc3MgPSBhbmd1bGFyLmNvcHkoY3VzdG9tQ3NzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUNzcztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVZoc0JyYW5kaW5nQ3NzRWRpdGluZ1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW55KSB7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNCcmFuZGluZ0Nzc0VkaXRpbmdEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc0JyYW5kaW5nQ3NzRWRpdGluZ1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0JyYW5kaW5nQ3NzRWRpdGluZykge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzQnJhbmRpbmdDc3NFZGl0aW5nLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzVW5pdElkOiBcIj0/dmhzQnVzaW5lc3NVbml0SWRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvYnJhbmRpbmcvdmhzLWJyYW5kaW5nLWNzcy1lZGl0aW5nLmh0bWxcIilcclxuICAgIH07XHJcbn1cclxuXHJcblZoc0JyYW5kaW5nQ3NzRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge0JyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uLy4uL2JyYW5kaW5nL0JyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJyYW5kaW5nTG9nb3N9IGZyb20gXCIuLi8uLi9icmFuZGluZy9JQnJhbmRpbmdMb2dvc1wiO1xyXG5pbXBvcnQge0JyYW5kaW5nTG9nb1R5cGV9IGZyb20gXCIuLi8uLi9icmFuZGluZy9CcmFuZGluZ0xvZ29UeXBlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc0JyYW5kaW5nTG9nb3NFZGl0aW5nU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBidXNpbmVzc1VuaXRJZD86IG51bWJlcjtcclxuXHJcbiAgICB2bT86IFZoc0JyYW5kaW5nTG9nb3NFZGl0aW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzQnJhbmRpbmdMb2dvc0VkaXRpbmcge1xyXG4gICAgcHVibGljIGxvZ29QcmV2aWV3OiBGaWxlO1xyXG4gICAgcHVibGljIGxvZ29QcmV2aWV3VXJsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbW9iaWxlTG9nb1ByZXZpZXc6IEZpbGU7XHJcbiAgICBwdWJsaWMgbW9iaWxlTG9nb1ByZXZpZXdVcmw6IHN0cmluZztcclxuICAgIHB1YmxpYyBmYXZpY29uUHJldmlldzogRmlsZTtcclxuICAgIHB1YmxpYyBmYXZpY29uUHJldmlld1VybDogc3RyaW5nO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnMgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgaXNMb2dvTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNNb2JpbGVMb2dvTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNGYXZpY29uTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgQnJhbmRpbmdTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNCcmFuZGluZ0xvZ29zRWRpdGluZ1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBicmFuZGluZ1NlcnZpY2U6IEJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRCcmFuZGluZ0xvZ29zKClcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoQnJhbmRpbmdMb2dvVHlwZVtCcmFuZGluZ0xvZ29UeXBlLkxPR09dLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGVkKEJyYW5kaW5nTG9nb1R5cGVbQnJhbmRpbmdMb2dvVHlwZS5NT0JJTEVfTE9HT10sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoQnJhbmRpbmdMb2dvVHlwZVtCcmFuZGluZ0xvZ29UeXBlLkZBVklDT05dLCB0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQnJhbmRpbmdMb2dvcyhicmFuZGluZ0xvZ29UeXBlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGxvYWRCcmFuZGluZ0xvZ29zUHJvbWlzZSA9IHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkXHJcbiAgICAgICAgICAgID8gdGhpcy5icmFuZGluZ1NlcnZpY2UuZ2V0QnJhbmRpbmdMb2dvcyh0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZCwgYnJhbmRpbmdMb2dvVHlwZSlcclxuICAgICAgICAgICAgOiB0aGlzLmJyYW5kaW5nU2VydmljZS5nZXRTeXN0ZW1CcmFuZGluZ0xvZ29zKGJyYW5kaW5nTG9nb1R5cGUpO1xyXG4gICAgICAgIHJldHVybiBsb2FkQnJhbmRpbmdMb2dvc1Byb21pc2VcclxuICAgICAgICAgICAgLnRoZW4oKGJyYW5kaW5nTG9nb3M6IElCcmFuZGluZ0xvZ29zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnJhbmRpbmdMb2dvVHlwZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dvUHJldmlld1VybCA9IGJyYW5kaW5nTG9nb3MubG9nb1VybDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vYmlsZUxvZ29QcmV2aWV3VXJsID0gYnJhbmRpbmdMb2dvcy5tb2JpbGVMb2dvVXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmF2aWNvblByZXZpZXdVcmwgPSBicmFuZGluZ0xvZ29zLmZhdmljb25Vcmw7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYnJhbmRpbmdMb2dvVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJyYW5kaW5nTG9nb1R5cGVbQnJhbmRpbmdMb2dvVHlwZS5MT0dPXTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nb1ByZXZpZXdVcmwgPSBicmFuZGluZ0xvZ29zLmxvZ29Vcmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCcmFuZGluZ0xvZ29UeXBlW0JyYW5kaW5nTG9nb1R5cGUuTU9CSUxFX0xPR09dOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2JpbGVMb2dvUHJldmlld1VybCA9IGJyYW5kaW5nTG9nb3MubW9iaWxlTG9nb1VybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJyYW5kaW5nTG9nb1R5cGVbQnJhbmRpbmdMb2dvVHlwZS5GQVZJQ09OXTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmF2aWNvblByZXZpZXdVcmwgPSBicmFuZGluZ0xvZ29zLmZhdmljb25Vcmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVMb2dvKGxvZ29UeXBlOiBzdHJpbmcsIGZpbGU6IEZpbGUpIHtcclxuICAgICAgICB0aGlzLnNldExvYWRlZChsb2dvVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgIGxldCB1cGRhdGVMb2dvUHJvbWlzZSA9IHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkXHJcbiAgICAgICAgICAgID8gdGhpcy5icmFuZGluZ1NlcnZpY2UudXBkYXRlQnVzaW5lc3NVbml0TG9nbyh0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZCwgbG9nb1R5cGUsIGZpbGUpXHJcbiAgICAgICAgICAgIDogdGhpcy5icmFuZGluZ1NlcnZpY2UudXBkYXRlU3lzdGVtTG9nbyhsb2dvVHlwZSwgZmlsZSk7XHJcbiAgICAgICAgdXBkYXRlTG9nb1Byb21pc2VcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkltYWdlIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQ2hhbmdlcyhsb2dvVHlwZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkQnJhbmRpbmdMb2dvcyhsb2dvVHlwZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGVkKGxvZ29UeXBlLCB0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZUxvZ28obG9nb1R5cGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2V0TG9hZGVkKGxvZ29UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgbGV0IGRlbGV0ZUxvZ29Qcm9taXNlID0gdGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgPyB0aGlzLmJyYW5kaW5nU2VydmljZS5kZWxldGVCcmFuZGluZ0xvZ29zKHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkLCBsb2dvVHlwZSlcclxuICAgICAgICAgICAgOiB0aGlzLmJyYW5kaW5nU2VydmljZS5kZWxldGVTeXN0ZW1CcmFuZGluZ0xvZ29zKGxvZ29UeXBlKTtcclxuICAgICAgICBkZWxldGVMb2dvUHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiSW1hZ2Ugc3VjY2Vzc2Z1bGx5IGRlbGV0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbENoYW5nZXMobG9nb1R5cGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEJyYW5kaW5nTG9nb3MobG9nb1R5cGUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRlZChsb2dvVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGlzRGlzYWJsZVNhdmVCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEodGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5jb25maWd1cmVCdXNpbmVzc1VuaXRTZXR0aW5ncyB8fCB0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmVkaXRTeXN0ZW1Db25maWd1cmF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsQ2hhbmdlcyhsb2dvVHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3dpdGNoIChsb2dvVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEJyYW5kaW5nTG9nb1R5cGVbQnJhbmRpbmdMb2dvVHlwZS5MT0dPXTpcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nb1ByZXZpZXcgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQnJhbmRpbmdMb2dvVHlwZVtCcmFuZGluZ0xvZ29UeXBlLk1PQklMRV9MT0dPXTpcclxuICAgICAgICAgICAgICAgIHRoaXMubW9iaWxlTG9nb1ByZXZpZXcgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQnJhbmRpbmdMb2dvVHlwZVtCcmFuZGluZ0xvZ29UeXBlLkZBVklDT05dOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5mYXZpY29uUHJldmlldyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRMb2FkZWQobG9nb1R5cGU6IHN0cmluZywgbG9hZGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgc3dpdGNoIChCcmFuZGluZ0xvZ29UeXBlW2xvZ29UeXBlXSkge1xyXG4gICAgICAgICAgICBjYXNlIEJyYW5kaW5nTG9nb1R5cGUuTE9HTzpcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2dvTG9hZGVkID0gbG9hZGVkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQnJhbmRpbmdMb2dvVHlwZS5NT0JJTEVfTE9HTzpcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNNb2JpbGVMb2dvTG9hZGVkID0gbG9hZGVkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQnJhbmRpbmdMb2dvVHlwZS5GQVZJQ09OOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0Zhdmljb25Mb2FkZWQgPSBsb2FkZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTW9iaWxlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNzY4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVZoc0JyYW5kaW5nTG9nb3NFZGl0aW5nU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbnkpIHtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0JyYW5kaW5nTG9nb3NFZGl0aW5nRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNCcmFuZGluZ0xvZ29zRWRpdGluZ1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0JyYW5kaW5nTG9nb3NFZGl0aW5nKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNCcmFuZGluZ0xvZ29zRWRpdGluZyxcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXRJZDogXCI9P3Zoc0J1c2luZXNzVW5pdElkXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL2JyYW5kaW5nL3Zocy1icmFuZGluZy1sb2dvcy1lZGl0aW5nLmh0bWxcIilcclxuICAgIH07XHJcbn1cclxuXHJcblZoc0JyYW5kaW5nTG9nb3NFZGl0aW5nRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7QnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYnJhbmRpbmcvQnJhbmRpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uLy4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzQnJhbmRpbmdTaGFyZUVkaXRpbmdTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIGJ1c2luZXNzVW5pdElkPzogbnVtYmVyO1xyXG5cclxuICAgIHZtPzogVmhzQnJhbmRpbmdTaGFyZUVkaXRpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNCcmFuZGluZ1NoYXJlRWRpdGluZyB7XHJcbiAgICBwdWJsaWMgbG9nb1ByZXZpZXc6IEZpbGU7XHJcbiAgICBwdWJsaWMgbG9nb1ByZXZpZXdVcmw6IHN0cmluZztcclxuICAgIHB1YmxpYyBpc0xvZ29Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zID0ge307XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgQnJhbmRpbmdTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNCcmFuZGluZ1NoYXJlRWRpdGluZ1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBicmFuZGluZ1NlcnZpY2U6IEJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRTaGFyZUxvZ28oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRTaGFyZUxvZ28oKSB7XHJcbiAgICAgICAgbGV0IGxvYWRTaGFyZUxvZ29Qcm9taXNlID0gdGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgPyB0aGlzLmJyYW5kaW5nU2VydmljZS5nZXRTaGFyZUxvZ28odGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5icmFuZGluZ1NlcnZpY2UuZ2V0U3lzdGVtU2hhcmVMb2dvKCk7XHJcbiAgICAgICAgbG9hZFNoYXJlTG9nb1Byb21pc2VcclxuICAgICAgICAgICAgLnRoZW4oKGxvZ29Vcmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dvUHJldmlld1VybCA9IGxvZ29Vcmw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9nb0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlTG9nbyhmaWxlOiBGaWxlKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvZ29Mb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgdXBkYXRlTG9nb1Byb21pc2UgPSB0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZFxyXG4gICAgICAgICAgICA/IHRoaXMuYnJhbmRpbmdTZXJ2aWNlLnVwZGF0ZUJ1c2luZXNzVW5pdFNoYXJlTG9nbyh0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZCwgZmlsZSlcclxuICAgICAgICAgICAgOiB0aGlzLmJyYW5kaW5nU2VydmljZS51cGRhdGVTeXN0ZW1TaGFyZUxvZ28oZmlsZSk7XHJcbiAgICAgICAgdXBkYXRlTG9nb1Byb21pc2VcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkltYWdlIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQ2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkU2hhcmVMb2dvKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2dvTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZUxvZ28oKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvZ29Mb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgZGVsZXRlTG9nb1Byb21pc2UgPSB0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZFxyXG4gICAgICAgICAgICA/IHRoaXMuYnJhbmRpbmdTZXJ2aWNlLmRlbGV0ZVNoYXJlTG9nbyh0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgOiB0aGlzLmJyYW5kaW5nU2VydmljZS5kZWxldGVTeXN0ZW1TaGFyZUxvZ28oKTtcclxuICAgICAgICBkZWxldGVMb2dvUHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiSW1hZ2Ugc3VjY2Vzc2Z1bGx5IGRlbGV0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRTaGFyZUxvZ28oKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvZ29Mb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlU2F2ZUJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISh0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmNvbmZpZ3VyZUJ1c2luZXNzVW5pdFNldHRpbmdzIHx8IHRoaXMuc3lzdGVtUGVybWlzc2lvbnMuZWRpdFN5c3RlbUNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxDaGFuZ2VzKCkge1xyXG4gICAgICAgIHRoaXMubG9nb1ByZXZpZXcgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vYmlsZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDc2ODtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNCcmFuZGluZ1NoYXJlRWRpdGluZ1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW55KSB7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWaHNCcmFuZGluZ1NoYXJlRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzQnJhbmRpbmdTaGFyZUVkaXRpbmdTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNCcmFuZGluZ1NoYXJlRWRpdGluZykge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzQnJhbmRpbmdTaGFyZUVkaXRpbmcsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQ6IFwiPT92aHNCdXNpbmVzc1VuaXRJZFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9icmFuZGluZy92aHMtYnJhbmRpbmctc2hhcmUtZWRpdGluZy5odG1sXCIpXHJcbiAgICB9O1xyXG59XHJcblxyXG5WaHNCcmFuZGluZ1NoYXJlRWRpdGluZ0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJQnJhbmRpbmdUaGVtZX0gZnJvbSBcIi4uLy4uL2JyYW5kaW5nL0JyYW5kaW5nVGhlbWVcIjtcclxuaW1wb3J0IHtJQnJhbmRpbmdUaGVtZUlucHV0fSBmcm9tIFwiLi4vLi4vYnJhbmRpbmcvQnJhbmRpbmdUaGVtZUlucHV0XCI7XHJcbmltcG9ydCB7QnVzaW5lc3NVbml0c1NlcnZpY2V9IGZyb20gXCIuLi8uLi9idXNpbmVzc1VuaXRzL0J1c2luZXNzVW5pdHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QnJhbmRpbmdUaGVtZXNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYnJhbmRpbmcvQnJhbmRpbmdUaGVtZXNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJ1c2luZXNzVW5pdH0gZnJvbSBcIi4uLy4uL2J1c2luZXNzVW5pdHMvbW9kZWxzL0lCdXNpbmVzc1VuaXRcIjtcclxuaW1wb3J0IHtJVGhlbWVDb2xvcn0gZnJvbSBcIi4uLy4uL2JyYW5kaW5nL1RoZW1lQ29sb3JcIjtcclxuaW1wb3J0IHtCcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi8uLi9icmFuZGluZy9CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJUVNlcnZpY2UsIElXaW5kb3dTZXJ2aWNlfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzQnJhbmRpbmdUaGVtZXNFZGl0aW5nU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBidXNpbmVzc1VuaXRJZD86IG51bWJlcjtcclxuXHJcbiAgICB2bT86IFZoc0JyYW5kaW5nVGhlbWVzRWRpdGluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0JyYW5kaW5nVGhlbWVzRWRpdGluZyB7XHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0OiBJQnVzaW5lc3NVbml0O1xyXG5cclxuICAgIHB1YmxpYyBicmFuZGluZ1RoZW1lQ3VzdG9tTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBicmFuZGluZ1RoZW1lczogSUJyYW5kaW5nVGhlbWVbXTtcclxuICAgIHB1YmxpYyB0aGVtZUNvbG9yczogSVRoZW1lQ29sb3JbXTtcclxuICAgIHB1YmxpYyBpbml0VGhlbWVDb2xvcnM6IElUaGVtZUNvbG9yW107XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucyA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50QnJhbmRpbmdUaGVtZTogSUJyYW5kaW5nVGhlbWU7XHJcbiAgICBwdWJsaWMgdGhlbWVDb2xvcnNIYXNCZWVuQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzU2F2aW5nQnJhbmRpbmdUaGVtZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzQXBwbHlpbmdUaGVtZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIGJyYW5kaW5nVGhlbWVJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHRoZW1lU3BlY2lmaWVkID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnJhbmRpbmdTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnJhbmRpbmdUaGVtZXNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNCcmFuZGluZ1RoZW1lc0VkaXRpbmdTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBJUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1c2luZXNzVW5pdHNTZXJ2aWNlOiBCdXNpbmVzc1VuaXRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnJhbmRpbmdTZXJ2aWNlOiBCcmFuZGluZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJyYW5kaW5nVGhlbWVzU2VydmljZTogQnJhbmRpbmdUaGVtZXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEJ1c2luZXNzVW5pdEJ5SWQodGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGV0IGxvYWRCcmFuZGluZ1RoZW1lcyA9IHRoaXMuYnJhbmRpbmdUaGVtZXNTZXJ2aWNlLmdldEJyYW5kaW5nVGhlbWVzKHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUJyYW5kaW5nVGhlbWVzKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgbG9hZEJyYW5kaW5nU2V0dGluZ3MgPSB0aGlzLmJyYW5kaW5nU2VydmljZS5nZXRDdXN0b21CcmFuZGluZ1NldHRpbmdzKHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyYW5kaW5nVGhlbWVJZCA9IHJlc3VsdC50aGVtZUlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aGVtZVNwZWNpZmllZCA9ICEhcmVzdWx0LnRoZW1lSWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICAgICAgbG9hZEJyYW5kaW5nVGhlbWVzLFxyXG4gICAgICAgICAgICAgICAgbG9hZEJyYW5kaW5nU2V0dGluZ3NcclxuICAgICAgICAgICAgXSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGhlbWVTcGVjaWZpZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRCcmFuZGluZ1RoZW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVRoZW1lKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBsb2FkU3lzdGVtQnJhbmRpbmdUaGVtZXMgPSB0aGlzLmJyYW5kaW5nVGhlbWVzU2VydmljZS5nZXRTeXN0ZW1CcmFuZGluZ1RoZW1lcygpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlQnJhbmRpbmdUaGVtZXMocmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxldCBsb2FkU3lzdGVtQnJhbmRpbmdTZXR0aW5ncyA9IHRoaXMuYnJhbmRpbmdTZXJ2aWNlLmdldFN5c3RlbUJyYW5kaW5nU2V0dGluZ3MoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyYW5kaW5nVGhlbWVJZCA9IHJlc3VsdC50aGVtZUlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aGVtZVNwZWNpZmllZCA9ICEhcmVzdWx0LnRoZW1lSWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICAgICAgbG9hZFN5c3RlbUJyYW5kaW5nVGhlbWVzLFxyXG4gICAgICAgICAgICAgICAgbG9hZFN5c3RlbUJyYW5kaW5nU2V0dGluZ3NcclxuICAgICAgICAgICAgXSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGhlbWVTcGVjaWZpZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRCcmFuZGluZ1RoZW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVRoZW1lKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVzZUJyYW5kaW5nVGhlbWVzKGJyYW5kaW5nVGhlbWU6IElCcmFuZGluZ1RoZW1lW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJyYW5kaW5nVGhlbWVzID0gYnJhbmRpbmdUaGVtZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdGhlbWVDb2xvcnNDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50aGVtZUNvbG9yc0hhc0JlZW5DaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRpYXRlVGhlbWVDb2xvcnMoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlVGhlbWVDb2xvcnMgPSBbJ0JBQ0tHUk9VTkRfQ09MT1InLCAnQkFDS0dST1VORF9URVhUX0NPTE9SJywgJ0FDQ0VOVF9DT0xPUl8xJywgJ0FDQ0VOVF9URVhUX0NPTE9SXzEnLFxyXG4gICAgICAgICAgICAgICAgJ0FDQ0VOVF9DT0xPUl8yJywgJ0FDQ0VOVF9URVhUX0NPTE9SXzInXTtcclxuICAgICAgICB0aGlzLmJyYW5kaW5nVGhlbWVzLmZvckVhY2godGhlbWUgPT4ge1xyXG4gICAgICAgICAgICBpZih0aGVtZS5pZCA9PSB0aGlzLmJyYW5kaW5nVGhlbWVJZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QnJhbmRpbmdUaGVtZSA9IHRoZW1lO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnRoZW1lQ29sb3JzID0gYW5ndWxhci5jb3B5KHRoZW1lLmNvbG9ycyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRoZW1lQ29sb3JzID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Q29sb3JzID0gdGhlbWUuY29sb3JzLmZpbHRlcihjb2xvciA9PiBjb2xvci5jb2xvcktleS5pbmRleE9mKFwiX1RFWFRcIikgIT0gLTEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoZW1lLmNvbG9ycy5mb3JFYWNoKHRoZW1lQ29sb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGF2YWlsYWJsZVRoZW1lQ29sb3JzLmluZGV4T2YodGhlbWVDb2xvci5jb2xvcktleSkgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoZW1lQ29sb3IuY29sb3JLZXkuaW5kZXhPZihcIl9URVhUXCIpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dENvbG9yID0gdGV4dENvbG9ycy5maWx0ZXIoY29sb3IgPT4gY29sb3IuY29sb3JLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcIl9URVhUXCIsIFwiXCIpID09PSB0aGVtZUNvbG9yLmNvbG9yS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IgJiYgdGV4dENvbG9yLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lQ29sb3IuY29sb3JUZXh0SWQgPSB0ZXh0Q29sb3JbMF0uaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVDb2xvci5jb2xvclRleHRLZXkgPSB0ZXh0Q29sb3JbMF0uY29sb3JLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVDb2xvci5jb2xvclRleHRWYWx1ZSA9IHRleHRDb2xvclswXS5jb2xvclZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGVtZUNvbG9ycy5wdXNoKHRoZW1lQ29sb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmluaXRUaGVtZUNvbG9ycyA9IGFuZ3VsYXIuY29weSh0aGlzLnRoZW1lQ29sb3JzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldERlZmF1bHRCcmFuZGluZ1RoZW1lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYnJhbmRpbmdUaGVtZXMuZm9yRWFjaCh0aGVtZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGVtZS5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyYW5kaW5nVGhlbWVJZCA9IHRoZW1lLmlkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlTmFtZUZvclNhdmVBc0N1c3RvbSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBicmFuZGluZ0NvbG9yczogSUJyYW5kaW5nVGhlbWUgPSB0aGlzLmJyYW5kaW5nVGhlbWVzLmZpbHRlcih0aGVtZSA9PiB0aGVtZS5pZCA9PSB0aGlzLmJyYW5kaW5nVGhlbWVJZCkucG9wKCk7XHJcbiAgICAgICAgdGhpcy5icmFuZGluZ1RoZW1lQ3VzdG9tTmFtZSA9IGJyYW5kaW5nQ29sb3JzLm5hbWUgKyAnIChjdXN0b20pJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVRoZW1lQXNDdXN0b20oKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuICAgICAgICBsZXQgdGhlbWVJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5icmFuZGluZ1RoZW1lcy5mb3JFYWNoKHRoZW1lID0+IHtcclxuICAgICAgICAgICAgaWYodGhlbWUuaWQgPT0gdGhpcy5icmFuZGluZ1RoZW1lSWQpIHtcclxuICAgICAgICAgICAgICAgIG5hbWUgPSB0aGVtZS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgaWYoIXRoZW1lLnByZWRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGVtZUlkID0gdGhlbWUuaWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgY3VzdG9tQnJhbmRpbmdUaGVtZTogSUJyYW5kaW5nVGhlbWVJbnB1dCA9IHtcclxuICAgICAgICAgICAgaWQ6IHRoZW1lSWQsXHJcbiAgICAgICAgICAgIGJ1c2luZXNzVW5pdElkOiB0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZCxcclxuICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXHJcbiAgICAgICAgICAgIHByZWRlZmluZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB0aGVtZUNvbG9yczogdGhpcy50aGVtZUNvbG9ycyxcclxuICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMuYnJhbmRpbmdUaGVtZUlkLFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhlbWVJZCkgeyAgLy8gdXBkYXRpbmcgY3VzdG9tIHRoZW1lXHJcbiAgICAgICAgICAgIHRoaXMuaXNTYXZpbmdCcmFuZGluZ1RoZW1lID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyYW5kaW5nVGhlbWVzU2VydmljZS51cGRhdGVCdXNpbmVzc1VuaXRCcmFuZGluZ1RoZW1lKGN1c3RvbUJyYW5kaW5nVGhlbWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJCcmFuZGluZyB0aGVtZSBoYXMgYmVlbiB1cGRhdGVkXCIpXHJcbiAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2F2aW5nQnJhbmRpbmdUaGVtZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGhlbWVDb2xvcnNIYXNCZWVuQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdUaGVtZXNTZXJ2aWNlLnVwZGF0ZVN5c3RlbUJyYW5kaW5nVGhlbWUoY3VzdG9tQnJhbmRpbmdUaGVtZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkJyYW5kaW5nIHRoZW1lIGhhcyBiZWVuIHVwZGF0ZWRcIilcclxuICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTYXZpbmdCcmFuZGluZ1RoZW1lID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aGVtZUNvbG9yc0hhc0JlZW5DaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHsgLy8gY3JlYXRpbmcgY3VzdG9tIHRoZW1lIGZyb20gcHJlZGVmaW5lZFxyXG4gICAgICAgICAgICB0aGlzLmlzU2F2aW5nQnJhbmRpbmdUaGVtZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuYnJhbmRpbmdUaGVtZUN1c3RvbU5hbWUgJiYgdGhpcy5icmFuZGluZ1RoZW1lQ3VzdG9tTmFtZSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tQnJhbmRpbmdUaGVtZS5uYW1lID0gdGhpcy5icmFuZGluZ1RoZW1lQ3VzdG9tTmFtZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5icmFuZGluZ1RoZW1lc1NlcnZpY2Uuc2F2ZUJyYW5kaW5nVGhlbWVBc0N1c3RvbShjdXN0b21CcmFuZGluZ1RoZW1lKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3QnJhbmRpbmdUaGVtZUlkID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkJyYW5kaW5nIHRoZW1lIGhhcyBiZWVuIHNhdmVkIGFzIGN1c3RvbVwiKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdUaGVtZXNTZXJ2aWNlLmdldEJyYW5kaW5nVGhlbWVzKHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlVXBkYXRpbmdCcmFuZGluZ1RoZW1lcyhuZXdCcmFuZGluZ1RoZW1lSWQsIHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ1RoZW1lc1NlcnZpY2UuZ2V0U3lzdGVtQnJhbmRpbmdUaGVtZXMoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlVXBkYXRpbmdCcmFuZGluZ1RoZW1lcyhuZXdCcmFuZGluZ1RoZW1lSWQsIHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLmJyYW5kaW5nLm5hbWUuZXhpc3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBpcyBicmFuZGluZyBuYW1lIHRoZW1lIGlzIGFscmVhZHkgZXhpc3RcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NhdmluZ0JyYW5kaW5nVGhlbWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdUaGVtZUN1c3RvbU5hbWUgPSBcIlwiO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1c2VVcGRhdGluZ0JyYW5kaW5nVGhlbWVzKG5ld0JyYW5kaW5nVGhlbWVJZDogbnVtYmVyLCBicmFuZGluZ1RoZW1lczogSUJyYW5kaW5nVGhlbWVbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYnJhbmRpbmdUaGVtZXMgPSBhbmd1bGFyLmNvcHkoYnJhbmRpbmdUaGVtZXMpO1xyXG4gICAgICAgIHRoaXMuYnJhbmRpbmdUaGVtZUlkID0gTnVtYmVyKG5ld0JyYW5kaW5nVGhlbWVJZCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VUaGVtZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VUaGVtZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmluaXRpYXRlVGhlbWVDb2xvcnMoKTtcclxuICAgICAgICB0aGlzLnRoZW1lQ29sb3JzSGFzQmVlbkNoYW5nZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlZEFwcGx5VGhlbWUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbWVDb2xvcnNIYXNCZWVuQ2hhbmdlZCB8fCB0aGlzLmlzU2F2aW5nQnJhbmRpbmdUaGVtZSB8fCB0aGlzLmlzQXBwbHlpbmdUaGVtZSB8fCB0aGlzLmJyYW5kaW5nVGhlbWVJZCA9PSBudWxsXHJcbiAgICAgICAgICAgIHx8IHRoaXMuYnJhbmRpbmdUaGVtZXMgPT0gbnVsbCB8fCAhKHRoaXMuc3lzdGVtUGVybWlzc2lvbnMuY29uZmlndXJlQnVzaW5lc3NVbml0U2V0dGluZ3MgfHwgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5lZGl0U3lzdGVtQ29uZmlndXJhdGlvbik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlU2F2aW5nQnJhbmRpbmdUaGVtZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1NhdmluZ0JyYW5kaW5nVGhlbWUgfHwgISh0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmNvbmZpZ3VyZUJ1c2luZXNzVW5pdFNldHRpbmdzIHx8IHRoaXMuc3lzdGVtUGVybWlzc2lvbnMuZWRpdFN5c3RlbUNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFwcGx5VGhlbWUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0FwcGx5aW5nVGhlbWUgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmJyYW5kaW5nVGhlbWVzU2VydmljZS5hcHBseUJyYW5kaW5nVGhlbWUodGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWQsIHRoaXMuYnJhbmRpbmdUaGVtZUlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbGllZEJyYW5kaW5nVGhlbWUoKTtcclxuICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQXBwbHlpbmdUaGVtZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdUaGVtZXNTZXJ2aWNlLmFwcGx5U3lzdGVtQnJhbmRpbmdUaGVtZSh0aGlzLmJyYW5kaW5nVGhlbWVJZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGxpZWRCcmFuZGluZ1RoZW1lKCk7XHJcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0FwcGx5aW5nVGhlbWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBsaWVkQnJhbmRpbmdUaGVtZSgpOiB2b2lkIHtcclxuICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiQnJhbmRpbmcgdGhlbWUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFwcGxpZWRcIik7XHJcbiAgICAgICAgdGhpcy4kd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxDb2xvckNoYW5naW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGhlbWVDb2xvcnMgPSBhbmd1bGFyLmNvcHkodGhpcy5pbml0VGhlbWVDb2xvcnMpO1xyXG4gICAgICAgIHRoaXMudGhlbWVDb2xvcnNIYXNCZWVuQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAvLyB0aGlzLmluaXRpYXRlVGhlbWVDb2xvcnMoKTtcclxuICAgICAgICAvLyB0aGlzLnRoZW1lQ29sb3JzSGFzQmVlbkNoYW5nZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRCcmFuZGluZ1RoZW1lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNBcHBseWluZ1RoZW1lID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRoZW1lQ29sb3JzSGFzQmVlbkNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcmVzZXRQcm9taXNlID0gdGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgPyB0aGlzLmJyYW5kaW5nVGhlbWVzU2VydmljZS5yZXNldEJyYW5kaW5nVGhlbWUodGhpcy4kc2NvcGUuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5icmFuZGluZ1RoZW1lc1NlcnZpY2UucmVzZXRTeXN0ZW1CcmFuZGluZ1RoZW1lKCk7XHJcbiAgICAgICAgcmVzZXRQcm9taXNlXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGhlbWUgb2YgdGhpcy5icmFuZGluZ1RoZW1lcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGVtZS5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdUaGVtZUlkID0gdGhlbWUuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkJyYW5kaW5nIHRoZW1lIGhhcyBiZWVuIHJlc2V0XCIpO1xyXG4gICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNBcHBseWluZ1RoZW1lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb2xvcktleVRleHRGb3JIdW1hbihjb2xvcktleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgY29sb3JUZXh0ID0gY29sb3JLZXkucmVwbGFjZSgvXy9nLCBcIiBcIikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb2xvclRleHQgPSBjb2xvclRleHQuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBjb2xvclRleHQuc3Vic3RyaW5nKDEsIGNvbG9yVGV4dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNCcmFuZGluZ1RoZW1lc0VkaXRpbmdTY29wZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzQnJhbmRpbmdUaGVtZXNFZGl0aW5nRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNCcmFuZGluZ1RoZW1lc0VkaXRpbmdTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNCcmFuZGluZ1RoZW1lc0VkaXRpbmcpIHtcclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0JyYW5kaW5nVGhlbWVzRWRpdGluZyxcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXRJZDogXCI9P3Zoc0J1c2luZXNzVW5pdElkXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL2JyYW5kaW5nL3Zocy1icmFuZGluZy10aGVtZXMtZWRpdGluZy5odG1sXCIpXHJcbiAgICB9O1xyXG59XHJcblxyXG5WaHNCcmFuZGluZ1RoZW1lc0VkaXRpbmdEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtDb25maXJtYXRpb25BcmdzLCBDb25maXJtYXRpb25EaWFsb2d9IGZyb20gXCIuL0NvbmZpcm1hdGlvbkRpYWxvZ1wiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2NvcGVVdGlsc30gZnJvbSBcIi4uLy4uL3N5c3RlbS9TY29wZVV0aWxzXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4vRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuLi8uLi9jb3Vyc2VzL21vZGVscy9JQ291cnNlXCI7XHJcblxyXG5cclxuaW50ZXJmYWNlIElDb25maXJtYXRpb25EaWFsb2dEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtPzogQ29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlcjtcclxuICAgIGRpYWxvZ0lkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyIGltcGxlbWVudHMgQ29uZmlybWF0aW9uRGlhbG9ne1xyXG5cclxuICAgIHByaXZhdGUgZGlhbG9nSWQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgdGl0bGVJZDogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgdGl0bGU6IHN0cmluZztcclxuICAgIHByaXZhdGUgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjb25maXJtQnV0dG9uOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGhpZGVDb25maXJtQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGNhbmNlbEJ1dHRvbjogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBoaWRlQ2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gc2hvdyBxdWl6IGF0dGVtcHRcclxuICAgIHByaXZhdGUgdHlwZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjb3Vyc2U6IElDb3Vyc2U7XHJcbiAgICBwcml2YXRlIGxhc3RRdWl6UmVzdWx0SWQ6IG51bWJlcjtcclxuXHJcbiAgICBwcml2YXRlIGNvbmZpcm1lZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgZGlhbG9nU2hvd246IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHJlc29sdmU6IGFuZ3VsYXIuSVFSZXNvbHZlUmVqZWN0PHt9PjtcclxuICAgIHByaXZhdGUgcmVqZWN0OiBhbmd1bGFyLklRUmVzb2x2ZVJlamVjdDx7fT47XHJcblxyXG4gICAgcHJpdmF0ZSAkZGlhbG9nOiBKUXVlcnk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElDb25maXJtYXRpb25EaWFsb2dEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ0lkID0gYGNvbmZpcm1EaWFsb2cke25ldyBEYXRlKCkudmFsdWVPZigpfWA7XHJcbiAgICAgICAgdGhpcy50aXRsZUlkID0gYCR7dGhpcy5kaWFsb2dJZH1MYWJlbGA7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlZ2lzdGVyQ29uZmlybWF0aW9uKFwiJGRlZmF1bHRcIiwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuJGRpYWxvZyA9IHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oXCI6Zmlyc3RcIik7XHJcblxyXG4gICAgICAgIHRoaXMuJGRpYWxvZy5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRkaWFsb2cub24oXCJoaWRkZW4uYnMubW9kYWxcIixcclxuICAgICAgICAgICAgKCkgPT4gU2NvcGVVdGlscy5hcHBseShcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5jbG9zZUFuZFJlc29sdmVSZWplY3QoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25maXJtKG1lc3NhZ2U6IHN0cmluZywgYXJncz86IENvbmZpcm1hdGlvbkFyZ3MpOiBhbmd1bGFyLklQcm9taXNlPHt9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICB0aGlzLnRpdGxlID0gYXJncyAmJiBhcmdzLnRpdGxlID8gYXJncy50aXRsZSA6IFwiRGlhbG9nIHRpdGxlXCI7XHJcbiAgICAgICAgdGhpcy5jb25maXJtQnV0dG9uID0gYXJncyAmJiBhcmdzLmNvbmZpcm1CdXR0b24gPyBhcmdzLmNvbmZpcm1CdXR0b24gOiBcIk9rXCI7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24gPSBhcmdzICYmIGFyZ3MuY2FuY2VsQnV0dG9uID8gYXJncy5jYW5jZWxCdXR0b24gOiBcIkNhbmNlbFwiO1xyXG4gICAgICAgIHRoaXMuaGlkZUNvbmZpcm1CdXR0b24gPSBhcmdzICYmIGFyZ3MuaGlkZUNvbmZpcm1CdXR0b247XHJcbiAgICAgICAgdGhpcy5oaWRlQ2FuY2VsQnV0dG9uID0gYXJncyAmJiBhcmdzLmhpZGVDYW5jZWxCdXR0b247XHJcblxyXG4gICAgICAgIHRoaXMudHlwZSA9IGFyZ3MgJiYgYXJncy50eXBlID8gYXJncy50eXBlIDogXCJkZWZhdWx0XCI7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2UgPSBhcmdzICYmIGFyZ3MuY291cnNlID8gYXJncy5jb3Vyc2UgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5sYXN0UXVpelJlc3VsdElkID0gYXJncyAmJiBhcmdzLmxhc3RRdWl6UmVzdWx0SWQgPyBhcmdzLmxhc3RRdWl6UmVzdWx0SWQgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNob3dBbmRXYWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ29uZmlybWVkKCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLiRkaWFsb2cubW9kYWwoXCJoaWRlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd0FuZFdhaXQoKTogYW5ndWxhci5JUHJvbWlzZTx7fT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRxKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICAgICAgdGhpcy5yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2hvd24gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy4kZGlhbG9nLm1vZGFsKFwic2hvd1wiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb3NlQW5kUmVzb2x2ZVJlamVjdCgpIHtcclxuICAgICAgICB0aGlzLnR5cGUgPSBcImRlZmF1bHRcIjtcclxuICAgICAgICBpZiAodGhpcy5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHt9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlamVjdCh7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2hvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc29sdmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVqZWN0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGlhbG9nSWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kaWFsb2dJZDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpcm1hdGlvbkRpYWxvZ0ZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogbmcuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogYW5ndWxhci5JU2NvcGUsIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcywgY29udHJvbGxlcjogQ29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgpO1xyXG4gICAgICAgICRzY29wZS4kb24oXCIkZGVzdHJveVwiLFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRkaWFsb2cuZGF0YShcImJzLm1vZGFsXCIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnVucmVnaXN0ZXJDb25maXJtYXRpb24oXCIkZGVmYXVsdFwiKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogQ29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBkaWFsb2dJZDogXCI9XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL2NvbmZpcm1hdGlvbi1kaWFsb2cuaHRtbFwiKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcbkNvbmZpcm1hdGlvbkRpYWxvZ0ZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge1xyXG4gICAgQ29uZmlybWF0aW9uQXJncywgQ29uZmlybWF0aW9uRGlhbG9nLCBJbnB1dENvbmZpcm1hdGlvbkFyZ3MsXHJcbiAgICBJbnB1dENvbmZpcm1hdGlvbkRpYWxvZywgTm90aWZpY2F0aW9uQ29uZmlybWF0aW9uRGlhbG9nLCBOb3RpZmljYXRpb25Db25maXJtYXRpb25BcmdzLFxyXG4gICAgRmlsbGFibGVEaWFsb2csIEZpbGxhYmxlRm9ybUFyZ3NcclxufSBmcm9tIFwiLi9Db25maXJtYXRpb25EaWFsb2dcIjtcclxuXHJcbmludGVyZmFjZSBEaWFsb2dzUmVnaXN0cnk8VERpYWxvZz4ge1xyXG4gICAgW2tleTogc3RyaW5nXTogVERpYWxvZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjb21wb25lbnRzLkRpYWxvZ1NlcnZpY2VcIjtcclxuXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblJlZ2lzdHJ5OiBEaWFsb2dzUmVnaXN0cnk8Q29uZmlybWF0aW9uRGlhbG9nPjtcclxuICAgIHByaXZhdGUgaW5wdXRDb25maXJtYXRpb25SZWdpc3RyeTogRGlhbG9nc1JlZ2lzdHJ5PElucHV0Q29uZmlybWF0aW9uRGlhbG9nPjtcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uQ29uZmlybWF0aW9uUmVnaXN0cnk6IERpYWxvZ3NSZWdpc3RyeTxOb3RpZmljYXRpb25Db25maXJtYXRpb25EaWFsb2c+O1xyXG4gICAgcHJpdmF0ZSBmaWxsQWJsZUZvcm1SZWdpc3RyeTogRGlhbG9nc1JlZ2lzdHJ5PEZpbGxhYmxlRGlhbG9nPjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblJlZ2lzdHJ5ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICB0aGlzLmlucHV0Q29uZmlybWF0aW9uUmVnaXN0cnkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ29uZmlybWF0aW9uUmVnaXN0cnkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIHRoaXMuZmlsbEFibGVGb3JtUmVnaXN0cnkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlckNvbmZpcm1hdGlvbihpZDogc3RyaW5nLCBkaWFsb2c6IENvbmZpcm1hdGlvbkRpYWxvZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uUmVnaXN0cnlbaWRdID0gZGlhbG9nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bnJlZ2lzdGVyQ29uZmlybWF0aW9uKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5jb25maXJtYXRpb25SZWdpc3RyeVtpZF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVySW5wdXRDb25maXJtYXRpb24oaWQ6IHN0cmluZywgZGlhbG9nOiBJbnB1dENvbmZpcm1hdGlvbkRpYWxvZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW5wdXRDb25maXJtYXRpb25SZWdpc3RyeVtpZF0gPSBkaWFsb2c7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVucmVnaXN0ZXJJbnB1dENvbmZpcm1hdGlvbihpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuaW5wdXRDb25maXJtYXRpb25SZWdpc3RyeVtpZF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyTm90aWZpY2F0aW9uQ29uZmlybWF0aW9uKGlkOiBzdHJpbmcsIGRpYWxvZzogTm90aWZpY2F0aW9uQ29uZmlybWF0aW9uRGlhbG9nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25Db25maXJtYXRpb25SZWdpc3RyeVtpZF0gPSBkaWFsb2c7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVucmVnaXN0ZXJOb3RpZmljYXRpb25Db25maXJtYXRpb24oaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLm5vdGlmaWNhdGlvbkNvbmZpcm1hdGlvblJlZ2lzdHJ5W2lkXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5wdXRDb25maXJtKGFyZ3M/OiBJbnB1dENvbmZpcm1hdGlvbkFyZ3MsIGRpYWxvZ0lkPzogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGlkID0gZGlhbG9nSWQgfHwgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5pbnB1dENvbmZpcm1hdGlvblJlZ2lzdHJ5KVswXTtcclxuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmlucHV0Q29uZmlybWF0aW9uUmVnaXN0cnlbaWRdO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nLmNvbmZpcm0oYXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbmZpcm0obWVzc2FnZTogc3RyaW5nLCBhcmdzPzogQ29uZmlybWF0aW9uQXJncywgZGlhbG9nSWQ/OiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPHt9PiB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBkaWFsb2dJZCB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLmNvbmZpcm1hdGlvblJlZ2lzdHJ5KVswXTtcclxuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmNvbmZpcm1hdGlvblJlZ2lzdHJ5W2lkXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZy5jb25maXJtKG1lc3NhZ2UsIGFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBub3RpZmljYXRpb25Db25maXJtKGFyZ3M/OiBOb3RpZmljYXRpb25Db25maXJtYXRpb25BcmdzLCBkaWFsb2dJZD86IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8e30+IHtcclxuICAgICAgICBjb25zdCBpZCA9IGRpYWxvZ0lkIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMubm90aWZpY2F0aW9uQ29uZmlybWF0aW9uUmVnaXN0cnkpWzBdO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMubm90aWZpY2F0aW9uQ29uZmlybWF0aW9uUmVnaXN0cnlbaWRdO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nLmNvbmZpcm0oYXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbmZpcm1BbmRSZXR1cm5EaWFsb2dJZChtZXNzYWdlOiBzdHJpbmcsIGFyZ3M/OiBDb25maXJtYXRpb25BcmdzLCBkaWFsb2dJZD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBkaWFsb2dJZCB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLmNvbmZpcm1hdGlvblJlZ2lzdHJ5KVswXTtcclxuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmNvbmZpcm1hdGlvblJlZ2lzdHJ5W2lkXTtcclxuXHJcbiAgICAgICAgZGlhbG9nLmNvbmZpcm0obWVzc2FnZSwgYXJncyk7XHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZy5nZXREaWFsb2dJZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbGxhYmxlIGZvcm0gZGlhbG9nXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJGaWxsYWJsZUZvcm1Db25maXJtYXRpb24oaWQ6IHN0cmluZywgZGlhbG9nOiBGaWxsYWJsZURpYWxvZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlsbEFibGVGb3JtUmVnaXN0cnlbaWRdID0gZGlhbG9nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bnJlZ2lzdGVyRmlsbGFibGVGb3JtQ29uZmlybWF0aW9uKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5maWxsQWJsZUZvcm1SZWdpc3RyeVtpZF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbmZpcm1GaWxsYWJsZUZvcm0oYXJncz86IEZpbGxhYmxlRm9ybUFyZ3MsIGRpYWxvZ0lkPzogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTx7fT4ge1xyXG4gICAgICAgIGNvbnN0IGlkID0gZGlhbG9nSWQgfHwgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5maWxsQWJsZUZvcm1SZWdpc3RyeSlbMF07XHJcbiAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5maWxsQWJsZUZvcm1SZWdpc3RyeVtpZF07XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2cuY29uZmlybShhcmdzKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0ZpbGxhYmxlRGlhbG9nLCBGaWxsYWJsZUZvcm1BcmdzfSBmcm9tIFwiLi9Db25maXJtYXRpb25EaWFsb2dcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1Njb3BlVXRpbHN9IGZyb20gXCIuLi8uLi9zeXN0ZW0vU2NvcGVVdGlsc1wiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJUXVpelF1ZXN0aW9ufSBmcm9tIFwiLi4vLi4vcXVpenplcy9tb2RlbHMvSVF1aXpRdWVzdGlvblwiO1xyXG5cclxuXHJcbmludGVyZmFjZSBJQ29uZmlybWF0aW9uRGlhbG9nRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICB2bT86IEZpbGxhYmxlRm9ybURpYWxvZ0NvbnRyb2xsZXI7XHJcbiAgICBkaWFsb2dJZDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRmlsbGFibGVGb3JtRGlhbG9nQ29udHJvbGxlciBpbXBsZW1lbnRzIEZpbGxhYmxlRGlhbG9nIHtcclxuXHJcbiAgICBwcml2YXRlIGRpYWxvZ0lkOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHRpdGxlSWQ6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uO1xyXG4gICAgcHJpdmF0ZSBzYXZlRmlsbGFibGVGb3JtVG9CdW5kbGU6IChkYXRhOiBhbnksIHF1ZXN0aW9uSWQ6IG51bWJlcikgPT4gdm9pZDtcclxuXHJcbiAgICBwcml2YXRlIGNvbmZpcm1lZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgcmVzb2x2ZTogYW5ndWxhci5JUVJlc29sdmVSZWplY3Q8e30+O1xyXG4gICAgcHJpdmF0ZSByZWplY3Q6IGFuZ3VsYXIuSVFSZXNvbHZlUmVqZWN0PHt9PjtcclxuXHJcbiAgICBwcml2YXRlICRkaWFsb2c6IEpRdWVyeTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSUNvbmZpcm1hdGlvbkRpYWxvZ0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nSWQgPSBgZmlsbGFibGVEaWFsb2cke25ldyBEYXRlKCkudmFsdWVPZigpfWA7XHJcbiAgICAgICAgdGhpcy50aXRsZUlkID0gYCR7dGhpcy5kaWFsb2dJZH1MYWJlbGA7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlZ2lzdGVyRmlsbGFibGVGb3JtQ29uZmlybWF0aW9uKFwiJGRlZmF1bHRcIiwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuJGRpYWxvZyA9IHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oXCI6Zmlyc3RcIik7XHJcblxyXG4gICAgICAgIHRoaXMuJGRpYWxvZy5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRkaWFsb2cub24oXCJoaWRkZW4uYnMubW9kYWxcIixcclxuICAgICAgICAgICAgKCkgPT4gU2NvcGVVdGlscy5hcHBseShcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5jbG9zZUFuZFJlc29sdmVSZWplY3QoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25maXJtKGFyZ3M/OiBGaWxsYWJsZUZvcm1BcmdzKTogYW5ndWxhci5JUHJvbWlzZTx7fT4ge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSBhcmdzICYmIGFyZ3MucXVlc3Rpb247XHJcbiAgICAgICAgdGhpcy5zYXZlRmlsbGFibGVGb3JtVG9CdW5kbGUgPSBhcmdzICYmIGFyZ3Muc2F2ZUZpbGxhYmxlRm9ybVRvQnVuZGxlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zaG93QW5kV2FpdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNvbmZpcm1lZCgpIHtcclxuICAgICAgICB0aGlzLmNvbmZpcm1lZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy4kZGlhbG9nLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dBbmRXYWl0KCk6IGFuZ3VsYXIuSVByb21pc2U8e30+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kcSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0O1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1lZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy4kZGlhbG9nLm1vZGFsKFwic2hvd1wiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb3NlQW5kUmVzb2x2ZVJlamVjdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHt9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlamVjdCh7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzb2x2ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZWplY3QgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRmlsbGFibGVGb3JtRGlhbG9nRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLCBjb250cm9sbGVyOiBGaWxsYWJsZUZvcm1EaWFsb2dDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCk7XHJcbi8qICAgICAgICAkc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIixcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kZGlhbG9nLmRhdGEoXCJicy5tb2RhbFwiLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS51bnJlZ2lzdGVyRmlsbGFibGVGb3JtQ29uZmlybWF0aW9uKFwiJGRlZmF1bHRcIilcclxuICAgICAgICAgICAgfSk7Ki9cclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogRmlsbGFibGVGb3JtRGlhbG9nQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBkaWFsb2dJZDogXCI9XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL2ZpbGxhYmxlLWRpYWxvZy5odG1sXCIpXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuRmlsbGFibGVGb3JtRGlhbG9nRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7SW5wdXRDb25maXJtYXRpb25BcmdzLCBJbnB1dENvbmZpcm1hdGlvbkRpYWxvZ30gZnJvbSBcIi4vQ29uZmlybWF0aW9uRGlhbG9nXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTY29wZVV0aWxzfSBmcm9tIFwiLi4vLi4vc3lzdGVtL1Njb3BlVXRpbHNcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi9EaWFsb2dTZXJ2aWNlXCI7XHJcblxyXG5cclxuaW50ZXJmYWNlIElJbnB1dENvbmZpcm1hdGlvbkRpYWxvZ0RpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgdm0/OiBJbnB1dENvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXI7XHJcbiAgICBkaWFsb2dJZDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSW5wdXRDb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyIGltcGxlbWVudHMgSW5wdXRDb25maXJtYXRpb25EaWFsb2d7XHJcblxyXG4gICAgcHJpdmF0ZSBkaWFsb2dJZDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSB0aXRsZUlkOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSB0aXRsZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjb25maXJtQnV0dG9uOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGhpZGVDb25maXJtQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGNhbmNlbEJ1dHRvbjogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBoaWRlQ2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaW5wdXREYXRhOiBhbnk7XHJcbiAgICBwdWJsaWMgaW5wdXRGb3JtVXJsOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBjb25maXJtZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHJlc29sdmU6IGFuZ3VsYXIuSVFSZXNvbHZlUmVqZWN0PHt9PjtcclxuICAgIHByaXZhdGUgcmVqZWN0OiBhbmd1bGFyLklRUmVzb2x2ZVJlamVjdDx7fT47XHJcblxyXG4gICAgcHJpdmF0ZSAkZGlhbG9nOiBKUXVlcnk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJSW5wdXRDb25maXJtYXRpb25EaWFsb2dEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmxTZXJ2aWNlOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ0lkID0gYGNvbmZpcm1EaWFsb2cke25ldyBEYXRlKCkudmFsdWVPZigpfWA7XHJcbiAgICAgICAgdGhpcy50aXRsZUlkID0gYCR7dGhpcy5kaWFsb2dJZH1MYWJlbGA7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlZ2lzdGVySW5wdXRDb25maXJtYXRpb24oXCIkaW5wdXRcIiwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuJGRpYWxvZyA9IHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oXCI6Zmlyc3RcIik7XHJcblxyXG4gICAgICAgIHRoaXMuJGRpYWxvZy5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRkaWFsb2cub24oXCJoaWRkZW4uYnMubW9kYWxcIixcclxuICAgICAgICAgICAgKCkgPT4gU2NvcGVVdGlscy5hcHBseShcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5jbG9zZUFuZFJlc29sdmVSZWplY3QoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25maXJtKGFyZ3M/OiBJbnB1dENvbmZpcm1hdGlvbkFyZ3MpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRoaXMuaW5wdXREYXRhID0gYXJncyAmJiBhcmdzLmRhdGEgPyBhcmdzLmRhdGEgOiB7fTtcclxuICAgICAgICB0aGlzLnRpdGxlID0gYXJncyAmJiBhcmdzLnRpdGxlID8gYXJncy50aXRsZSA6IFwiRGlhbG9nIHRpdGxlXCI7XHJcbiAgICAgICAgdGhpcy5jb25maXJtQnV0dG9uID0gYXJncyAmJiBhcmdzLmNvbmZpcm1CdXR0b24gPyBhcmdzLmNvbmZpcm1CdXR0b24gOiBcIk9rXCI7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24gPSBhcmdzICYmIGFyZ3MuY2FuY2VsQnV0dG9uID8gYXJncy5jYW5jZWxCdXR0b24gOiBcIkNhbmNlbFwiO1xyXG4gICAgICAgIHRoaXMuaGlkZUNvbmZpcm1CdXR0b24gPSBhcmdzICYmIGFyZ3MuaGlkZUNvbmZpcm1CdXR0b24gPyBhcmdzLmhpZGVDb25maXJtQnV0dG9uIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oaWRlQ2FuY2VsQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbnB1dEZvcm1VcmwgPSBhcmdzLmlucHV0Rm9ybVVybCA/IHRoaXMudXJsU2VydmljZS50ZW1wbGF0ZShhcmdzLmlucHV0Rm9ybVVybCkgOiBcIlwiO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zaG93QW5kV2FpdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNvbmZpcm1lZCgpIHtcclxuICAgICAgICB0aGlzLmNvbmZpcm1lZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy4kZGlhbG9nLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dBbmRXYWl0KCk6IGFuZ3VsYXIuSVByb21pc2U8e30+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kcSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0O1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1lZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy4kZGlhbG9nLm1vZGFsKFwic2hvd1wiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb3NlQW5kUmVzb2x2ZVJlamVjdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuaW5wdXREYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlamVjdCh7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzb2x2ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZWplY3QgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSW5wdXRDb25maXJtYXRpb25EaWFsb2dGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsIGNvbnRyb2xsZXI6IElucHV0Q29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgpO1xyXG4gICAgICAgICRzY29wZS4kb24oXCIkZGVzdHJveVwiLFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRkaWFsb2cuZGF0YShcImJzLm1vZGFsXCIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnVucmVnaXN0ZXJJbnB1dENvbmZpcm1hdGlvbihcIiRpbnB1dFwiKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogSW5wdXRDb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGRpYWxvZ0lkOiBcIj1cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvaW5wdXQtY29uZmlybWF0aW9uLWRpYWxvZy5odG1sXCIpXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuSW5wdXRDb25maXJtYXRpb25EaWFsb2dGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge05vdGlmaWNhdGlvbkNvbmZpcm1hdGlvbkFyZ3MsIE5vdGlmaWNhdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ30gZnJvbSBcIi4vQ29uZmlybWF0aW9uRGlhbG9nXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTY29wZVV0aWxzfSBmcm9tIFwiLi4vLi4vc3lzdGVtL1Njb3BlVXRpbHNcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsc30gZnJvbSBcIi4uLy4uL25vdGlmaWNhdGlvblRlbXBsYXRlcy9tb2RlbC9JTm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzXCI7XHJcblxyXG5pbnRlcmZhY2UgSVJlY2lwaWVudFRhZ3Mge1xyXG4gICAgcmVjaXBpZW50SWRzOiBudW1iZXJbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIElOb3RpZmljYXRpb25Db25maXJtYXRpb25EaWFsb2dEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtPzogTm90aWZpY2F0aW9uQ29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlcjtcclxuICAgIGRpYWxvZ0lkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25Db25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyIGltcGxlbWVudHMgTm90aWZpY2F0aW9uQ29uZmlybWF0aW9uRGlhbG9nIHtcclxuXHJcbiAgICBwcml2YXRlIGRpYWxvZ0lkOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHRpdGxlSWQ6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGNvbmZpcm1CdXR0b246IHN0cmluZztcclxuICAgIHByaXZhdGUgaGlkZUNvbmZpcm1CdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgY2FuY2VsQnV0dG9uOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGhpZGVDYW5jZWxCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyByZWNpcGllbnRMaXN0OiBJUmVjaXBpZW50VGFncyA9IHtyZWNpcGllbnRJZHM6IFtdfTtcclxuICAgIHB1YmxpYyBjY1JlY2lwaWVudExpc3Q6IElSZWNpcGllbnRUYWdzID0ge3JlY2lwaWVudElkczogW119O1xyXG4gICAgcHVibGljIG5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsczogSU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscztcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXROYW1lOiBzdHJpbmcgPSBcIkFsbFwiO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdElkOiBudW1iZXI7XHJcblxyXG4gICAgcHJpdmF0ZSBjb25maXJtZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHJlc29sdmU6IGFuZ3VsYXIuSVFSZXNvbHZlUmVqZWN0PHt9PjtcclxuICAgIHByaXZhdGUgcmVqZWN0OiBhbmd1bGFyLklRUmVzb2x2ZVJlamVjdDx7fT47XHJcblxyXG4gICAgcHJpdmF0ZSAkZGlhbG9nOiBKUXVlcnk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElOb3RpZmljYXRpb25Db25maXJtYXRpb25EaWFsb2dEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ0lkID0gYGNvbmZpcm1EaWFsb2cke25ldyBEYXRlKCkudmFsdWVPZigpfWA7XHJcbiAgICAgICAgdGhpcy50aXRsZUlkID0gYCR7dGhpcy5kaWFsb2dJZH1MYWJlbGA7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlZ2lzdGVyTm90aWZpY2F0aW9uQ29uZmlybWF0aW9uKFwiJG5vdGlmaWNhdGlvblwiLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy4kZGlhbG9nID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbihcIjpmaXJzdFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy4kZGlhbG9nLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgICAgICAgIHNob3c6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJGRpYWxvZy5vbihcImhpZGRlbi5icy5tb2RhbFwiLFxyXG4gICAgICAgICAgICAoKSA9PiBTY29wZVV0aWxzLmFwcGx5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUsXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmNsb3NlQW5kUmVzb2x2ZVJlamVjdCgpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbmZpcm0oYXJncz86IE5vdGlmaWNhdGlvbkNvbmZpcm1hdGlvbkFyZ3MpOiBhbmd1bGFyLklQcm9taXNlPHt9PiB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IGFyZ3MgJiYgYXJncy50aXRsZSA/IGFyZ3MudGl0bGUgOiBcIkRpYWxvZyB0aXRsZVwiO1xyXG4gICAgICAgIHRoaXMuY29uZmlybUJ1dHRvbiA9IGFyZ3MgJiYgYXJncy5jb25maXJtQnV0dG9uID8gYXJncy5jb25maXJtQnV0dG9uIDogXCJPa1wiO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uID0gYXJncyAmJiBhcmdzLmNhbmNlbEJ1dHRvbiA/IGFyZ3MuY2FuY2VsQnV0dG9uIDogXCJDYW5jZWxcIjtcclxuICAgICAgICB0aGlzLmhpZGVDb25maXJtQnV0dG9uID0gYXJncyAmJiBhcmdzLmhpZGVDb25maXJtQnV0dG9uO1xyXG4gICAgICAgIHRoaXMuaGlkZUNhbmNlbEJ1dHRvbiA9IGFyZ3MgJiYgYXJncy5oaWRlQ2FuY2VsQnV0dG9uO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzID0gYXJncyAmJiBhcmdzLm5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscztcclxuICAgICAgICB0aGlzLnJlY2lwaWVudExpc3QgPSBhcmdzICYmIGFyZ3MucmVjaXBpZW50TGlzdDtcclxuICAgICAgICB0aGlzLmNjUmVjaXBpZW50TGlzdCA9IGFyZ3MgJiYgYXJncy5jY1JlY2lwaWVudExpc3Q7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0FuZFdhaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Db25maXJtZWQoKSB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuJGRpYWxvZy5tb2RhbChcImhpZGVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93QW5kV2FpdCgpOiBhbmd1bGFyLklQcm9taXNlPHt9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHEoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuJGRpYWxvZy5tb2RhbChcInNob3dcIik7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xvc2VBbmRSZXNvbHZlUmVqZWN0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpcm1lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc29sdmUoe30pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVqZWN0KHt9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXNvbHZlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJlamVjdCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEF2YWlsYWJsZVJlY2lwaWVudHNUYWdzKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAvYXBpL25vdGlmaWNhdGlvblRlbXBsYXRlcy8ke3RoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzLmlkfS9hdmFpbGFibGUvcmVjaXBpZW50c2A7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBOb3RpZmljYXRpb25Db25maXJtYXRpb25EaWFsb2dGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsIGNvbnRyb2xsZXI6IE5vdGlmaWNhdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXIpIHtcclxuICAgICAgICBjb250cm9sbGVyLmluaXQoKTtcclxuICAgICAgICAkc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIixcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kZGlhbG9nLmRhdGEoXCJicy5tb2RhbFwiLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS51bnJlZ2lzdGVyTm90aWZpY2F0aW9uQ29uZmlybWF0aW9uKFwiJG5vdGlmaWNhdGlvblwiKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogTm90aWZpY2F0aW9uQ29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBkaWFsb2dJZDogXCI9XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL25vdGlmaWNhdGlvbi1jb25maXJtYXRpb24tZGlhbG9nLmh0bWxcIilcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5Ob3RpZmljYXRpb25Db25maXJtYXRpb25EaWFsb2dGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiZXhwb3J0IGNsYXNzIEV2ZW50IHtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfU0VMRUNUX0VNQkVEREVEX01BVEVSSUFMOiBzdHJpbmcgPSBcImNvbXBvbmVudHMudGE6c2VsZWN0RW1iZWRkZWRNYXRlcmlhbFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9TRUxFQ1RfRU1CRURERURfQlVORExFOiBzdHJpbmcgPSBcImNvbXBvbmVudHMudGE6c2VsZWN0RW1iZWRkZWRCdW5kbGVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfU0VMRUNUX1NBTkRCT1g6IHN0cmluZyA9IFwiY29tcG9uZW50cy50YTpzZWxlY3RTYW5kYm94XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX0xPQURfRlJPTV9URU1QTEFURTogc3RyaW5nID0gXCJjb21wb25lbnRzLnRhOmxvYWRGcm9tVGVtcGxhdGVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfQ09OVkVSVF9UT19ORVdfVEVNUExBVEU6IHN0cmluZyA9IFwiY29tcG9uZW50cy50YTpjb252ZXJ0VG9OZXdUZW1wbGF0ZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9BRERfVElQOiBzdHJpbmcgPSBcImNvbXBvbmVudHMudGE6YWRkVGlwXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX0FERF9RVUVTVElPTjogc3RyaW5nID0gXCJjb21wb25lbnRzLnRhOmFkZFF1ZXN0aW9uXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX0FERF9BU1NFU1NNRU5UOiBzdHJpbmcgPSBcImNvbXBvbmVudHMudGE6YWRkQXNzZXNzbWVudFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9BRERfUkVEQklSRDogc3RyaW5nID0gXCJjb21wb25lbnRzLnRhOmFkZFJlZGJpcmRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfRklORF9SSUNIX1RFWFRfQklORF9DT05UUk9MTEVSOiBzdHJpbmcgPSBcImNvbXBvbmVudHMudGE6ZmluZFJpY2hUZXh0QmluZENvbnRyb2xsZXJcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfRlVMTFNDUkVFTjogc3RyaW5nID0gXCJjb21wb25lbnRzLnRhOmZ1bGxzY3JlZW5cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgU0FOREJPWF9SRU9QRU5fUE9QVVA6IHN0cmluZyA9IFwiY29tcG9uZW50cy5zYW5kYm94OnJlb3BlblBvcHVwXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIENPVVJTRV9UT0dHTEVfTUVOVV9WSVNJQklMSVRZOiBzdHJpbmcgPSBcImNvdXJzZXMuZGV0YWlsczp0b2dnbGVNZW51XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFFVSVpfU1VSVkVZX0NPTVBMRVRFRDogc3RyaW5nID0gXCJxdWl6LnN1cnZleTpjb21wbGV0ZWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfQUREX1RPR0dMRTogc3RyaW5nID0gXCJjb21wb25lbnRzLnRhOmFkZFRvZ2dsZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9BRERfVE9HR0xFX0NPTlRFTlQ6IHN0cmluZyA9IFwiY29tcG9uZW50cy50YTphZGRUb2dnbGVDb250ZW50XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX0FERF9OT1RFX0ZPUl9QUk9HUkVTUzogc3RyaW5nID0gXCJjb21wb25lbnRzLnRhOmFkZE5vdGVGb3JQcm9ncmVzc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9BSV9DT05URU5UX0dFTkVSQVRJT046IHN0cmluZyA9IFwiY29tcG9uZW50cy50YTphaUNvbnRlbnRHZW5lcmF0aW9uXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX0xPQ0FUSU9OX0NIQU5HRV9TVEFSVDogc3RyaW5nID0gXCJjb21wb25lbnRzLnRhOmxvY2F0aW9uQ2hhbmdlU3RhcnRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTk9URVNfU0VSVklDRV9JTklUSUFMSVpFRDogc3RyaW5nID0gXCJjb21wb25lbnRzLnRhOm5vdGVzSW5pdGlhbGl6ZWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfQUREX1RBQkxFOiBzdHJpbmcgPSBcImNvbXBvbmVudHMudGE6YWRkVGFibGVcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIENPVVJTRV9QUk9HUkVTU19SRVNFVF9QUk9HUkVTUzogc3RyaW5nID0gXCJjb3Vyc2VzLnByb2dyZXNzOnJlc2V0UHJvZ3Jlc3NcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ09VUlNFX1BST0dSRVNTX1JFTE9BRF9QUk9HUkVTUzogc3RyaW5nID0gXCJjb3Vyc2VzLnByb2dyZXNzOnJlbG9hZFByb2dyZXNzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIENPVVJTRV9QUk9HUkVTU19DSEFOR0VfUFJPR1JFU1NfRVhURVJOQUxMWTogc3RyaW5nID0gXCJjb3Vyc2VzLnByb2dyZXNzLmNoYW5nZVByb2dyZXNzRXh0ZXJuYWxseVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBDT1VSU0VfUFJPR1JFU1NfU0VDVElPTl9QUk9HUkVTU19SRUxPQURfUFJPR1JFU1M6IHN0cmluZyA9IFwiY291cnNlcy5wcm9ncmVzcy5zZWN0aW9ucy5wcm9ncmVzczpyZWxvYWRQcm9ncmVzc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBDT1VSU0VfUFJPR1JFU1NfUkVDQUxDVUxBVEVEOiBzdHJpbmcgPSBcImNvdXJzZXMucHJvZ3Jlc3MucmVjYWxjdWxhdGVkXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBMRUFSTklOR19QQVRIX1BST0dSRVNTX1JFU0VUX1BST0dSRVNTOiBzdHJpbmcgPSBcImxlYXJuaW5nUGF0aHMucHJvZ3Jlc3M6cmVzZXRQcm9ncmVzc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBMRUFSTklOR19QQVRIX1BST0dSRVNTX1JFTE9BRF9QUk9HUkVTUzogc3RyaW5nID0gXCJsZWFybmluZ1BhdGhzLnByb2dyZXNzOnJlbG9hZFByb2dyZXNzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIExFQVJOSU5HX1BBVEhfUFJPR1JFU1NfQ0hBTkdFX1BST0dSRVNTX0VYVEVSTkFMTFk6IHN0cmluZyA9IFwibGVhcm5pbmdQYXRocy5wcm9ncmVzcy5jaGFuZ2VQcm9ncmVzc0V4dGVybmFsbHlcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTEVBUk5JTkdfUEFUSF9QUk9HUkVTU19TSE9XX0NPVVJTRV9QUk9HUkVTU19ERVRBSUxTOiBzdHJpbmcgPSBcImxlYXJuaW5nUGF0aHMucHJvZ3Jlc3Muc2hvd0NvdXJzZVByb2dyZXNzRGV0YWlsc1wiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgUkVDT1JERVJfU1RPUF9SRUNPUkRfRVhURVJOQUxMWTogc3RyaW5nID0gXCJyZWNvcmRlci5yZWNvcmQ6c3RvcEV4dGVybmFsbHlcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUVVJWl9TVVJWRVlfSU1QT1JUX1VQREFURTogc3RyaW5nID0gXCJxdWl6LmltcG9ydDp1cGRhdGVcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEhFTFBfQk9UX09QRU5fQ0xPU0U6IHN0cmluZyA9IFwiaGVscC5ib3Q6b3BlblwiO1xyXG59XHJcbiIsImltcG9ydCB7SVF1aXpRdWVzdGlvbn0gZnJvbSBcIi4uLy4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6UXVlc3Rpb25cIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lQb2ludCwgU2NlbmVVdGlscywgU2VsZWN0ZWRQb2ludCwgU2hhcGVEcmF3aW5nTW9kZX0gZnJvbSBcIi4uLy4uL3V0aWxzL0hvdHNwb3RRdWVzdGlvblV0aWxzXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtRdWVzdGlvblR5cGV9IGZyb20gXCIuLi8uLi9xdWl6emVzL21vZGVscy9RdWVzdGlvblR5cGVcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzSG90c3BvdFF1ZXN0aW9uQW5zd2VyaW5nU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBxdWVzdGlvbj86IElRdWl6UXVlc3Rpb247XHJcbiAgICBjb21wbGV0ZVF1aXpCdXR0b25DaGVja2VyPzogKCkgPT4ge307XHJcblxyXG4gICAgdm0/OiBWaHNIb3RzcG90UXVlc3Rpb25BbnN3ZXJpbmdDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzSG90c3BvdFF1ZXN0aW9uQW5zd2VyaW5nQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeTtcclxuICAgIHByaXZhdGUgY2FudmFzQ29udGFpbmVyV2lkdGg6IG51bWJlcjtcclxuICAgIHByaXZhdGUgY2FudmFzOiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgY2FudmFzQ29udGV4dDogYW55O1xyXG4gICAgcHJpdmF0ZSB3aW5kb3c6IGFueTtcclxuICAgIHByaXZhdGUgcmVxdWVzdElEOiBhbnk7XHJcblxyXG4gICAgcHJpdmF0ZSBjYW52YXNCYWNrZ3JvdW5kOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBjYW52YXNCYWNrZ3JvdW5kTG9hZGVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBzZWxlY3RlZFBvaW50czogQXJyYXk8U2VsZWN0ZWRQb2ludD47XHJcbiAgICBwcml2YXRlIGFuc3dlckFyZWFzQ291bnQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgc2VsZWN0ZWRQb2ludHNJbkltYWdlQ29vcmRpbmF0ZXM6IEFycmF5PFNlbGVjdGVkUG9pbnQ+O1xyXG4gICAgcHJpdmF0ZSBtb3ZpbmdTdGFydDogSVBvaW50O1xyXG4gICAgcHJpdmF0ZSBpc0luTW92ZTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgaXNQb2ludFNlbGVjdGVkOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc0hvdHNwb3RRdWVzdGlvbkFuc3dlcmluZ1Njb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzSG90c3BvdFF1ZXN0aW9uQW5zd2VyaW5nU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnRzID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50c0luSW1hZ2VDb29yZGluYXRlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZFNoYXBlc0NvdW50KCk7XHJcblxyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRhaW5lcldpZHRoID0gdGhpcy5lbGVtZW50LmZpbmQoJy5ob3RzcG90LWNhbnZhcy1jb250YWluZXInKS53aWR0aCgpO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNDb250YWluZXJXaWR0aCA9IHRoaXMuZWxlbWVudC5maW5kKCcuaG90c3BvdC1jYW52YXMtY29udGFpbmVyJykud2lkdGgoKTtcclxuICAgICAgICAgICAgdGhpcy50cnlJbml0Q2FudmFzU2NlbmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvdy51bmJpbmQoJ3Jlc2l6ZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2goKCkgPT4gdGhpcy4kc2NvcGUucXVlc3Rpb24uaW5kZXhOdW1iZXIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVxdWVzdElEKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZXF1ZXN0SUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudHJ5SW5pdENhbnZhc1NjZW5lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0cnlJbml0Q2FudmFzU2NlbmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLnF1ZXN0aW9uLmF0dGFjaGVkRmlsZVVybCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYW52YXNJZCA9IGBob3RzcG90LWNhbnZhcy0ke3RoaXMuJHNjb3BlLnF1ZXN0aW9uLmluZGV4TnVtYmVyfWA7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoJy5ob3RzcG90LWNhbnZhcy1jb250YWluZXIgLmhvdHNwb3QtY2FudmFzJykucmVtb3ZlKCk7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoJy5ob3RzcG90LWNhbnZhcy1jb250YWluZXInKS5hcHBlbmQoYDxjYW52YXMgaWQ9XCIke2NhbnZhc0lkfVwiIGNsYXNzPVwiaG90c3BvdC1jYW52YXNcIj48L2NhbnZhcz5gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYW52YXNJZCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0ID0gKDxhbnk+IHRoaXMuY2FudmFzKS5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICAgIHRoaXMuaXNJbk1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzUG9pbnRTZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRJbWFnZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdENhbnZhcygpO1xyXG4gICAgICAgIHRoaXMuYW5pbWF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEltYWdlKCkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzQmFja2dyb3VuZExvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5xdWVzdGlvbi5hdHRhY2hlZEZpbGVVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNCYWNrZ3JvdW5kID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzQmFja2dyb3VuZC5zcmMgPSB0aGlzLiRzY29wZS5xdWVzdGlvbi5hdHRhY2hlZEZpbGVVcmw7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzQmFja2dyb3VuZC5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0JhY2tncm91bmRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgKDxhbnk+IHRoaXMuY2FudmFzKS53aWR0aCA9IHRoaXMuY2FudmFzQ29udGFpbmVyV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAoPGFueT4gdGhpcy5jYW52YXMpLmhlaWdodCA9IHRoaXMuY2FudmFzQ29udGFpbmVyV2lkdGggKiB0aGlzLmNhbnZhc0JhY2tncm91bmQuaGVpZ2h0IC8gdGhpcy5jYW52YXNCYWNrZ3JvdW5kLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQb2ludHNJbkN1cnJlbnRDb29yZGluYXRlcygpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRDYW52YXMoKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBtb3VzZUNvb3JkcyA9IFNjZW5lVXRpbHMuZ2V0TW91c2VDb29yZHModGhpcy5jYW52YXMsIGUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50cy5mb3JFYWNoKHMgPT4gcy5zZWxlY3RlZCA9IGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBwb2ludFdhc1NlbGVjdGVkID0gdGhpcy5pc1BvaW50U2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQb2ludFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHAgb2YgdGhpcy5zZWxlY3RlZFBvaW50cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHAuaXNQb2ludEluc2lkZSh7eDogbW91c2VDb29yZHMueCwgeTogbW91c2VDb29yZHMueX0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcC5kcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcC5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1BvaW50U2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1BvaW50U2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92aW5nU3RhcnQgPSBtb3VzZUNvb3JkcztcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNJbk1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFwb2ludFdhc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRQb2ludCA9IG5ldyBTZWxlY3RlZFBvaW50KCk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFBvaW50LmNlbnRlclggPSBtb3VzZUNvb3Jkcy54O1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRQb2ludC5jZW50ZXJZID0gbW91c2VDb29yZHMueTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2VsZWN0ZWRQb2ludChzZWxlY3RlZFBvaW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZFBvaW50c0NoYW5nZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGUgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbW91c2VDb29yZHMgPSBTY2VuZVV0aWxzLmdldE1vdXNlQ29vcmRzKHRoaXMuY2FudmFzLCBlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5Nb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnRzLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAuZHJhZ2dpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRYID0gbW91c2VDb29yZHMueCAtIHRoaXMubW92aW5nU3RhcnQueDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRZID0gbW91c2VDb29yZHMueSAtIHRoaXMubW92aW5nU3RhcnQueTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC5tb3ZlKGRYLCBkWSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmluZ1N0YXJ0ID0gbW91c2VDb29yZHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWRQb2ludHNDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnRzLmZvckVhY2gocyA9PiBzLmRyYWdnaW5nID0gZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0RlbGV0ZScpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUG9pbnRzW2ldLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUG9pbnRTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWRQb2ludHNDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRTZWxlY3RlZFBvaW50KHNlbGVjdGVkUG9pbnQ6IFNlbGVjdGVkUG9pbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5hbnN3ZXJBcmVhc0NvdW50ID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFBvaW50cy5sZW5ndGggPj0gdGhpcy5hbnN3ZXJBcmVhc0NvdW50KSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiWW914oCZdmUgYWxyZWFkeSByZWFjaGVkIG1heGltdW0gbnVtYmVyIG9mIGFuc3dlcnNcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50cy5wdXNoKHNlbGVjdGVkUG9pbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYW5pbWF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW52YXNCYWNrZ3JvdW5kICYmIHRoaXMuY2FudmFzQmFja2dyb3VuZExvYWRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzQ29udGFpbmVyV2lkdGgsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRhaW5lcldpZHRoICogdGhpcy5jYW52YXNCYWNrZ3JvdW5kLmhlaWdodCAvIHRoaXMuY2FudmFzQmFja2dyb3VuZC53aWR0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5kcmF3SW1hZ2UodGhpcy5jYW52YXNCYWNrZ3JvdW5kLCAwLCAwLCB0aGlzLmNhbnZhc0NvbnRhaW5lcldpZHRoLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXNDb250YWluZXJXaWR0aCAqIHRoaXMuY2FudmFzQmFja2dyb3VuZC5oZWlnaHQgLyB0aGlzLmNhbnZhc0JhY2tncm91bmQud2lkdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50cy5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc2hhcGVEcmF3aW5nTW9kZSA9IHAuc2VsZWN0ZWQgPyBTaGFwZURyYXdpbmdNb2RlLlNFTEVDVEVEIDogU2hhcGVEcmF3aW5nTW9kZS5PUkRJTkFSWTtcclxuICAgICAgICAgICAgcC5kcmF3KHRoaXMuY2FudmFzQ29udGV4dCwgc2hhcGVEcmF3aW5nTW9kZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdElEID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmFuaW1hdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5xdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkhPVFNQT1RfU0lOR0xFX0NIT0lDRV0pIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50cyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmlzUG9pbnRTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWRQb2ludHNDaGFuZ2VkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkUG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFBvaW50c1tpXS5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQb2ludFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdGVkUG9pbnRzQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckFsbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnRzID0gbmV3IEFycmF5PFNlbGVjdGVkUG9pbnQ+KCk7XHJcbiAgICAgICAgdGhpcy5pc1BvaW50U2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0ZWRQb2ludHNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNlbGVjdGVkUG9pbnRzQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvaW50c0luSW1hZ2VDb29yZGluYXRlcygpO1xyXG4gICAgICAgIHRoaXMuc2VyaWFsaXplUG9pbnRzKCk7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuY29tcGxldGVRdWl6QnV0dG9uQ2hlY2tlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsY3VsYXRlUG9pbnRzSW5JbWFnZUNvb3JkaW5hdGVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludHNJbkltYWdlQ29vcmRpbmF0ZXMgPSBbXTtcclxuICAgICAgICBsZXQgc2NhbGVGYWN0b3IgPSB0aGlzLmNhbnZhc0JhY2tncm91bmQud2lkdGggLyAoPGFueT4gdGhpcy5jYW52YXMpLndpZHRoO1xyXG4gICAgICAgIGZvciAobGV0IHNlbGVjdGVkUG9pbnQgb2YgdGhpcy5zZWxlY3RlZFBvaW50cykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnRzSW5JbWFnZUNvb3JkaW5hdGVzLnB1c2goU2NlbmVVdGlscy5zY2FsZVNlbGVjdGVkUG9pbnQoc2VsZWN0ZWRQb2ludCwgc2NhbGVGYWN0b3IpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVQb2ludHNJbkN1cnJlbnRDb29yZGluYXRlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnRzID0gW107XHJcbiAgICAgICAgbGV0IHNjYWxlRmFjdG9yID0gKDxhbnk+IHRoaXMuY2FudmFzKS53aWR0aCAvIHRoaXMuY2FudmFzQmFja2dyb3VuZC53aWR0aDtcclxuICAgICAgICBmb3IgKGxldCBzZWxlY3RlZFBvaW50IG9mIHRoaXMuc2VsZWN0ZWRQb2ludHNJbkltYWdlQ29vcmRpbmF0ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50cy5wdXNoKFNjZW5lVXRpbHMuc2NhbGVTZWxlY3RlZFBvaW50KHNlbGVjdGVkUG9pbnQsIHNjYWxlRmFjdG9yKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFNoYXBlc0NvdW50KCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBzaGFwZXMgPSBKU09OLnBhcnNlKHRoaXMuJHNjb3BlLnF1ZXN0aW9uLmpzb25EYXRhKTtcclxuICAgICAgICB0aGlzLmFuc3dlckFyZWFzQ291bnQgPSBzaGFwZXMgPyBzaGFwZXMubGVuZ3RoIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNlcmlhbGl6ZVBvaW50cygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFBvaW50c0luSW1hZ2VDb29yZGluYXRlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUucXVlc3Rpb24ucmVzcG9uc2VEYXRhID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5xdWVzdGlvbi5yZXNwb25zZURhdGEgPSB0aGlzLnNlbGVjdGVkUG9pbnRzSW5JbWFnZUNvb3JkaW5hdGVzLm1hcChwID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyWDogcC5jZW50ZXJYLFxyXG4gICAgICAgICAgICAgICAgICAgIGNlbnRlclk6IHAuY2VudGVyWVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzSG90c3BvdFF1ZXN0aW9uQW5zd2VyaW5nRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNIb3RzcG90UXVlc3Rpb25BbnN3ZXJpbmdTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNIb3RzcG90UXVlc3Rpb25BbnN3ZXJpbmdDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNIb3RzcG90UXVlc3Rpb25BbnN3ZXJpbmdDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uOiBcIj0/dmhzUXVlc3Rpb25cIixcclxuICAgICAgICAgICAgY29tcGxldGVRdWl6QnV0dG9uQ2hlY2tlcjogXCImdmhzQ29tcGxldGVRdWl6QnV0dG9uQ2hlY2tlclwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9xdWl6emVzL3Zocy1ob3RzcG90LXF1ZXN0aW9uLWFuc3dlcmluZy5odG1sXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblZoc0hvdHNwb3RRdWVzdGlvbkFuc3dlcmluZ0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUXVpelF1ZXN0aW9ufSBmcm9tIFwiLi4vLi4vcXVpenplcy9tb2RlbHMvSVF1aXpRdWVzdGlvblwiO1xyXG5pbXBvcnQge1xyXG4gICAgQ2lyY2xlLFxyXG4gICAgSVBvaW50LFxyXG4gICAgSVNoYXBlLFxyXG4gICAgUG9seWdvbixcclxuICAgIFJlY3RhbmdsZSxcclxuICAgIFNjZW5lVXRpbHMsXHJcbiAgICBTaGFwZURyYXdpbmdNb2RlXHJcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL0hvdHNwb3RRdWVzdGlvblV0aWxzXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25UeXBlfSBmcm9tIFwiLi4vLi4vcXVpenplcy9tb2RlbHMvUXVlc3Rpb25UeXBlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi8uLi9JTm90aWZpZXJcIjtcclxuXHJcbmludGVyZmFjZSBJUXVpelF1ZXN0aW9uRXh0ZW5kZWQgZXh0ZW5kcyBJUXVpelF1ZXN0aW9uIHtcclxuICAgIGZpbGVGb3JtPzogRmlsZTtcclxuICAgIGlzRXJyb3JGaWxlRm9ybWF0PzogYm9vbGVhbjtcclxuICAgIGlzUXVlc3Rpb25WYWxpZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmludGVyZmFjZSBJVmhzSG90c3BvdFF1ZXN0aW9uRWRpdFNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgcXVlc3Rpb24/OiBJUXVpelF1ZXN0aW9uRXh0ZW5kZWQ7XHJcblxyXG4gICAgdm0/OiBWaHNIb3RzcG90UXVlc3Rpb25FZGl0Q29udHJvbGxlcjtcclxufVxyXG5cclxuZW51bSBTaGFwZVR5cGUge1xyXG4gICAgUkVDVEFOR0xFLFxyXG4gICAgQ0lSQ0xFLFxyXG4gICAgUE9MWUdPTlxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzSG90c3BvdFF1ZXN0aW9uRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHJpdmF0ZSBNSU5fUkVDVEFOR0xFX1NJREUgPSAyMDtcclxuICAgIHByaXZhdGUgTUlOX0NJUkNMRV9SQURJVVMgPSAxMDtcclxuXHJcbiAgICBwdWJsaWMgc2hhcGVUeXBlID0gU2hhcGVUeXBlO1xyXG4gICAgcHVibGljIHF1ZXN0aW9uVHlwZSA9IFF1ZXN0aW9uVHlwZTtcclxuXHJcbiAgICBwcml2YXRlIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeTtcclxuICAgIHByaXZhdGUgY2FudmFzQ29udGFpbmVyV2lkdGg6IG51bWJlcjtcclxuICAgIHByaXZhdGUgY2FudmFzOiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgY2FudmFzQ29udGV4dDogYW55O1xyXG4gICAgcHJpdmF0ZSB3aW5kb3c6IGFueTtcclxuICAgIHB1YmxpYyBuZXdGaWxlOiBGaWxlO1xyXG4gICAgcHJpdmF0ZSByZXF1ZXN0SUQ6IGFueTtcclxuXHJcbiAgICBwcml2YXRlIGNhbnZhc0JhY2tncm91bmQ6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIGNhbnZhc0JhY2tncm91bmRMb2FkZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHNlbGVjdGVkU2hhcGVUeXBlOiBTaGFwZVR5cGU7XHJcbiAgICBwcml2YXRlIHNoYXBlczogQXJyYXk8SVNoYXBlPjtcclxuICAgIHByaXZhdGUgc2hhcGVzSW5JbWFnZUNvb3JkaW5hdGVzOiBBcnJheTxJU2hhcGU+O1xyXG4gICAgcHJpdmF0ZSBkcmF3aW5nUmVjdGFuZ2xlOiBSZWN0YW5nbGU7XHJcbiAgICBwcml2YXRlIGRyYXdpbmdDaXJjbGU6IENpcmNsZTtcclxuICAgIHByaXZhdGUgZHJhd2luZ1BvbHlnb246IFBvbHlnb247XHJcbiAgICBwcml2YXRlIG1vdmluZ1N0YXJ0OiBJUG9pbnQ7XHJcbiAgICBwcml2YXRlIGlzSW5Nb3ZlOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBpc0luRHJhd2luZzogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgaXNTaGFwZVNlbGVjdGVkOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzSG90c3BvdFF1ZXN0aW9uRWRpdFNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVZoc0hvdHNwb3RRdWVzdGlvbkVkaXRTY29wZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzQ29udGFpbmVyV2lkdGggPSB0aGlzLmVsZW1lbnQuZmluZCgnLmhvdHNwb3QtY2FudmFzLWNvbnRhaW5lcicpLndpZHRoKCk7XHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRhaW5lcldpZHRoID0gdGhpcy5lbGVtZW50LmZpbmQoJy5ob3RzcG90LWNhbnZhcy1jb250YWluZXInKS53aWR0aCgpO1xyXG4gICAgICAgICAgICB0aGlzLnRyeUluaXRDYW52YXNTY2VuZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiR3YXRjaCgoKSA9PiB0aGlzLiRzY29wZS5xdWVzdGlvbi5pbmRleE51bWJlciwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXF1ZXN0SUQpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJlcXVlc3RJRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50cnlJbml0Q2FudmFzU2NlbmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoKCgpID0+IHRoaXMuJHNjb3BlLnF1ZXN0aW9uLnR5cGUsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1NoYXBlc0NvdW50KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRmlsZVNlbGVjdGVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm5ld0ZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUucXVlc3Rpb24uZmlsZUZvcm0gPSB0aGlzLm5ld0ZpbGU7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXREcmF3aW5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMudHJ5SW5pdENhbnZhc1NjZW5lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldERyYXdpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5zaGFwZXMgPSBuZXcgQXJyYXk8SVNoYXBlPigpO1xyXG4gICAgICAgIHRoaXMuc2hhcGVzSW5JbWFnZUNvb3JkaW5hdGVzID0gW107XHJcbiAgICAgICAgdGhpcy5zZXJpYWxpemVTaGFwZXMoKTtcclxuICAgICAgICB0aGlzLmNoZWNrU2hhcGVzQ291bnQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0luTW92ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNJbkRyYXdpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzU2hhcGVTZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdpbmdSZWN0YW5nbGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZHJhd2luZ0NpcmNsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kcmF3aW5nUG9seWdvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdERyYXdpbmdTaGFwZShzZWxlY3RlZFNoYXBlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2hhcGVUeXBlID0gU2hhcGVUeXBlW3NlbGVjdGVkU2hhcGVdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdHJ5SW5pdENhbnZhc1NjZW5lKCkge1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5xdWVzdGlvbi5maWxlRm9ybSA9PSBudWxsICYmIHRoaXMuJHNjb3BlLnF1ZXN0aW9uLmF0dGFjaGVkRmlsZVVybCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZWxlbWVudC5maW5kKCcuaG90c3BvdC1jYW52YXMtY29udGFpbmVyICNob3RzcG90LWNhbnZhcycpLnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5maW5kKCcuaG90c3BvdC1jYW52YXMtY29udGFpbmVyJykuYXBwZW5kKCc8Y2FudmFzIGlkPVwiaG90c3BvdC1jYW52YXNcIj48L2NhbnZhcz4nKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhvdHNwb3QtY2FudmFzXCIpO1xyXG4gICAgICAgIHRoaXMuY2FudmFzQ29udGV4dCA9ICg8YW55PiB0aGlzLmNhbnZhcykuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2hhcGVUeXBlID0gU2hhcGVUeXBlLlJFQ1RBTkdMRTtcclxuICAgICAgICB0aGlzLnNoYXBlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZFNoYXBlcygpO1xyXG5cclxuICAgICAgICB0aGlzLmlzSW5Nb3ZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0luRHJhd2luZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRJbWFnZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdENhbnZhcygpO1xyXG4gICAgICAgIHRoaXMuYW5pbWF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEltYWdlKCkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzQmFja2dyb3VuZExvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5xdWVzdGlvbi5maWxlRm9ybSkge1xyXG4gICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwodGhpcy4kc2NvcGUucXVlc3Rpb24uZmlsZUZvcm0pO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQmFja2dyb3VuZCA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXNCYWNrZ3JvdW5kLnNyYyA9ICg8YW55PiBlLnRhcmdldCkucmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXNCYWNrZ3JvdW5kLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0JhY2tncm91bmRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICg8YW55PiB0aGlzLmNhbnZhcykud2lkdGggPSB0aGlzLmNhbnZhc0NvbnRhaW5lcldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICg8YW55PiB0aGlzLmNhbnZhcykuaGVpZ2h0ID0gdGhpcy5jYW52YXNDb250YWluZXJXaWR0aCAqIHRoaXMuY2FudmFzQmFja2dyb3VuZC5oZWlnaHQgLyB0aGlzLmNhbnZhc0JhY2tncm91bmQud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVTaGFwZXNJbkN1cnJlbnRDb29yZGluYXRlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTaGFwZXNDb3VudCgpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHNjb3BlLnF1ZXN0aW9uLmF0dGFjaGVkRmlsZVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhc0JhY2tncm91bmQgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNCYWNrZ3JvdW5kLnNyYyA9IHRoaXMuJHNjb3BlLnF1ZXN0aW9uLmF0dGFjaGVkRmlsZVVybDtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNCYWNrZ3JvdW5kLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQmFja2dyb3VuZExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAoPGFueT4gdGhpcy5jYW52YXMpLndpZHRoID0gdGhpcy5jYW52YXNDb250YWluZXJXaWR0aDtcclxuICAgICAgICAgICAgICAgICg8YW55PiB0aGlzLmNhbnZhcykuaGVpZ2h0ID0gdGhpcy5jYW52YXNDb250YWluZXJXaWR0aCAqIHRoaXMuY2FudmFzQmFja2dyb3VuZC5oZWlnaHQgLyB0aGlzLmNhbnZhc0JhY2tncm91bmQud2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVNoYXBlc0luQ3VycmVudENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU2hhcGVzQ291bnQoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0Q2FudmFzKCkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGUgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbW91c2VDb29yZHMgPSBTY2VuZVV0aWxzLmdldE1vdXNlQ29vcmRzKHRoaXMuY2FudmFzLCBlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hhcGVzLmZvckVhY2gocyA9PiBzLnNlbGVjdGVkID0gZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc1NoYXBlU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW5EcmF3aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzIG9mIHRoaXMuc2hhcGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMuaXNQb2ludEluc2lkZSh7eDogbW91c2VDb29yZHMueCwgeTogbW91c2VDb29yZHMueX0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuZHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NoYXBlU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2hhcGVTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZpbmdTdGFydCA9IG1vdXNlQ29vcmRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0luTW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNoYXBlVHlwZSA9PSBTaGFwZVR5cGUuUkVDVEFOR0xFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3aW5nUmVjdGFuZ2xlID0gbmV3IFJlY3RhbmdsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd2luZ1JlY3RhbmdsZS50b3BMZWZ0WCA9IG1vdXNlQ29vcmRzLng7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3aW5nUmVjdGFuZ2xlLnRvcExlZnRZID0gbW91c2VDb29yZHMueTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzSW5EcmF3aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNoYXBlVHlwZSA9PSBTaGFwZVR5cGUuQ0lSQ0xFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3aW5nQ2lyY2xlID0gbmV3IENpcmNsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd2luZ0NpcmNsZS5jZW50ZXJYID0gbW91c2VDb29yZHMueDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdpbmdDaXJjbGUuY2VudGVyWSA9IG1vdXNlQ29vcmRzLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0luRHJhd2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRTaGFwZVR5cGUgPT0gU2hhcGVUeXBlLlBPTFlHT04pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kcmF3aW5nUG9seWdvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd2luZ1BvbHlnb24gPSBuZXcgUG9seWdvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdpbmdQb2x5Z29uLnBvaW50cy5wdXNoKHt4OiBtb3VzZUNvb3Jkcy54LCB5OiBtb3VzZUNvb3Jkcy55fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0luRHJhd2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBlID0+IHtcclxuICAgICAgICAgICAgbGV0IG1vdXNlQ29vcmRzID0gU2NlbmVVdGlscy5nZXRNb3VzZUNvb3Jkcyh0aGlzLmNhbnZhcywgZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0luTW92ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZXMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocy5kcmFnZ2luZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZFggPSBtb3VzZUNvb3Jkcy54IC0gdGhpcy5tb3ZpbmdTdGFydC54O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZFkgPSBtb3VzZUNvb3Jkcy55IC0gdGhpcy5tb3ZpbmdTdGFydC55O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzLm1vdmUoZFgsIGRZKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNoYXBlc0NoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92aW5nU3RhcnQgPSBtb3VzZUNvb3JkcztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbkRyYXdpbmcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYXdpbmdSZWN0YW5nbGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd2luZ1JlY3RhbmdsZS53aWR0aCA9IG1vdXNlQ29vcmRzLnggLSB0aGlzLmRyYXdpbmdSZWN0YW5nbGUudG9wTGVmdFg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3aW5nUmVjdGFuZ2xlLmhlaWdodCA9IG1vdXNlQ29vcmRzLnkgLSB0aGlzLmRyYXdpbmdSZWN0YW5nbGUudG9wTGVmdFk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJhd2luZ0NpcmNsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3aW5nQ2lyY2xlLnJhZGl1cyA9IE1hdGguc3FydChcclxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5wb3coTWF0aC5hYnModGhpcy5kcmF3aW5nQ2lyY2xlLmNlbnRlclggLSBtb3VzZUNvb3Jkcy54KSwgMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyBNYXRoLnBvdyhNYXRoLmFicyh0aGlzLmRyYXdpbmdDaXJjbGUuY2VudGVyWSAtIG1vdXNlQ29vcmRzLnkpLCAyKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJhd2luZ1BvbHlnb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd2luZ1BvbHlnb24ubGFzdFBvaW50ID0ge3g6IG1vdXNlQ29vcmRzLngsIHk6IG1vdXNlQ29vcmRzLnl9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBlID0+IHtcclxuICAgICAgICAgICAgbGV0IG1vdXNlQ29vcmRzID0gU2NlbmVVdGlscy5nZXRNb3VzZUNvb3Jkcyh0aGlzLmNhbnZhcywgZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNoYXBlcy5mb3JFYWNoKHMgPT4gcy5kcmFnZ2luZyA9IGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyYXdpbmdSZWN0YW5nbGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3aW5nUmVjdGFuZ2xlLndpZHRoID0gbW91c2VDb29yZHMueCAtIHRoaXMuZHJhd2luZ1JlY3RhbmdsZS50b3BMZWZ0WDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd2luZ1JlY3RhbmdsZS5oZWlnaHQgPSBtb3VzZUNvb3Jkcy55IC0gdGhpcy5kcmF3aW5nUmVjdGFuZ2xlLnRvcExlZnRZO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3aW5nUmVjdGFuZ2xlLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJhd2luZ1JlY3RhbmdsZS53aWR0aCA+PSB0aGlzLk1JTl9SRUNUQU5HTEVfU0lERVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuZHJhd2luZ1JlY3RhbmdsZS5oZWlnaHQgPj0gdGhpcy5NSU5fUkVDVEFOR0xFX1NJREUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFNoYXBlKHRoaXMuZHJhd2luZ1JlY3RhbmdsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNoYXBlc0NoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU2hhcGVzQ291bnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd2luZ1JlY3RhbmdsZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5EcmF3aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmF3aW5nQ2lyY2xlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd2luZ0NpcmNsZS5yYWRpdXMgPSBNYXRoLnNxcnQoXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5wb3coTWF0aC5hYnModGhpcy5kcmF3aW5nQ2lyY2xlLmNlbnRlclggLSBtb3VzZUNvb3Jkcy54KSwgMilcclxuICAgICAgICAgICAgICAgICAgICArIE1hdGgucG93KE1hdGguYWJzKHRoaXMuZHJhd2luZ0NpcmNsZS5jZW50ZXJZIC0gbW91c2VDb29yZHMueSksIDIpKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYXdpbmdDaXJjbGUucmFkaXVzID49IHRoaXMuTUlOX0NJUkNMRV9SQURJVVMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFNoYXBlKHRoaXMuZHJhd2luZ0NpcmNsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNoYXBlc0NoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU2hhcGVzQ291bnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd2luZ0NpcmNsZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5EcmF3aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCBlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJhd2luZ1BvbHlnb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJhd2luZ1BvbHlnb24ucG9pbnRzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFNoYXBlKHRoaXMuZHJhd2luZ1BvbHlnb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TaGFwZXNDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1NoYXBlc0NvdW50KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdpbmdQb2x5Z29uID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNJbkRyYXdpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYXdpbmdQb2x5Z29uICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kcmF3aW5nUG9seWdvbi5wb2ludHMubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFNoYXBlKHRoaXMuZHJhd2luZ1BvbHlnb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2hhcGVzQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU2hhcGVzQ291bnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3aW5nUG9seWdvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0luRHJhd2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0RlbGV0ZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWRTaGFwZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWxldGVTZWxlY3RlZFNoYXBlKCk6IHZvaWQge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zaGFwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVzW2ldLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2hhcGVTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNoYXBlc0NoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTaGFwZXNDb3VudCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYW5pbWF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW52YXNCYWNrZ3JvdW5kICYmIHRoaXMuY2FudmFzQmFja2dyb3VuZExvYWRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzQ29udGFpbmVyV2lkdGgsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRhaW5lcldpZHRoICogdGhpcy5jYW52YXNCYWNrZ3JvdW5kLmhlaWdodCAvIHRoaXMuY2FudmFzQmFja2dyb3VuZC53aWR0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5kcmF3SW1hZ2UodGhpcy5jYW52YXNCYWNrZ3JvdW5kLCAwLCAwLCB0aGlzLmNhbnZhc0NvbnRhaW5lcldpZHRoLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXNDb250YWluZXJXaWR0aCAqIHRoaXMuY2FudmFzQmFja2dyb3VuZC5oZWlnaHQgLyB0aGlzLmNhbnZhc0JhY2tncm91bmQud2lkdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zaGFwZXMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgbGV0IHNoYXBlRHJhd2luZ01vZGUgPSBzLnNlbGVjdGVkID8gU2hhcGVEcmF3aW5nTW9kZS5TRUxFQ1RFRCA6IFNoYXBlRHJhd2luZ01vZGUuT1JESU5BUlk7XHJcbiAgICAgICAgICAgIHMuZHJhdyh0aGlzLmNhbnZhc0NvbnRleHQsIHNoYXBlRHJhd2luZ01vZGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kcmF3aW5nUmVjdGFuZ2xlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3aW5nUmVjdGFuZ2xlLmRyYXcodGhpcy5jYW52YXNDb250ZXh0LCBTaGFwZURyYXdpbmdNb2RlLkVESVQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmF3aW5nQ2lyY2xlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3aW5nQ2lyY2xlLmRyYXcodGhpcy5jYW52YXNDb250ZXh0LCBTaGFwZURyYXdpbmdNb2RlLkVESVQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmF3aW5nUG9seWdvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd2luZ1BvbHlnb24uZHJhdyh0aGlzLmNhbnZhc0NvbnRleHQsIFNoYXBlRHJhd2luZ01vZGUuRURJVCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJRCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5hbmltYXRlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TaGFwZXNDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlU2hhcGVzSW5JbWFnZUNvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgdGhpcy5zZXJpYWxpemVTaGFwZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbGN1bGF0ZVNoYXBlc0luSW1hZ2VDb29yZGluYXRlcygpOiB2b2lkIHtcclxuICAgICAgICBsZXQgc2NhbGVGYWN0b3IgPSB0aGlzLmNhbnZhc0JhY2tncm91bmQud2lkdGggLyAoPGFueT4gdGhpcy5jYW52YXMpLndpZHRoO1xyXG4gICAgICAgIHRoaXMuc2hhcGVzSW5JbWFnZUNvb3JkaW5hdGVzID0gU2NlbmVVdGlscy5zY2FsZVNoYXBlcyh0aGlzLnNoYXBlcywgc2NhbGVGYWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsY3VsYXRlU2hhcGVzSW5DdXJyZW50Q29vcmRpbmF0ZXMoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHNjYWxlRmFjdG9yID0gKDxhbnk+IHRoaXMuY2FudmFzKS53aWR0aCAvIHRoaXMuY2FudmFzQmFja2dyb3VuZC53aWR0aDtcclxuICAgICAgICB0aGlzLnNoYXBlcyA9IFNjZW5lVXRpbHMuc2NhbGVTaGFwZXModGhpcy5zaGFwZXNJbkltYWdlQ29vcmRpbmF0ZXMsIHNjYWxlRmFjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNlcmlhbGl6ZVNoYXBlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRzY29wZS5xdWVzdGlvbi5qc29uRGF0YSA9IFNjZW5lVXRpbHMuc2VyaWFsaXplU2hhcGVzKHRoaXMuc2hhcGVzSW5JbWFnZUNvb3JkaW5hdGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRTaGFwZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaGFwZXNJbkltYWdlQ29vcmRpbmF0ZXMgPSBTY2VuZVV0aWxzLmxvYWRTaGFwZXModGhpcy4kc2NvcGUucXVlc3Rpb24uanNvbkRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkU2hhcGUoc2hhcGU6IElTaGFwZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5xdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkhPVFNQT1RfU0lOR0xFX0NIT0lDRV0gJiYgdGhpcy5zaGFwZXMubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJPbmx5IG9uZSBhcmVhIGNhbiBiZSBkcmF3biBpbiBzaW5nbGUtY2hvaWNlIHF1ZXN0aW9uXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hhcGVzLnB1c2goc2hhcGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tTaGFwZXNDb3VudCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUucXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5IT1RTUE9UX1NJTkdMRV9DSE9JQ0VdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLnF1ZXN0aW9uLmlzUXVlc3Rpb25WYWxpZCA9IHRoaXMuc2hhcGVzICYmIHRoaXMuc2hhcGVzLmxlbmd0aCA9PSAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4kc2NvcGUucXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5IT1RTUE9UX01VTFRJUExFX0NIT0lDRV0pIHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUucXVlc3Rpb24uaXNRdWVzdGlvblZhbGlkID0gdGhpcy5zaGFwZXMgJiYgdGhpcy5zaGFwZXMubGVuZ3RoID49IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzSG90c3BvdFF1ZXN0aW9uRWRpdERpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzSG90c3BvdFF1ZXN0aW9uRWRpdFNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0hvdHNwb3RRdWVzdGlvbkVkaXRDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNIb3RzcG90UXVlc3Rpb25FZGl0Q29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBxdWVzdGlvbjogXCI9P3Zoc1F1ZXN0aW9uXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3F1aXp6ZXMvdmhzLWhvdHNwb3QtcXVlc3Rpb24tZWRpdC5odG1sXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblZoc0hvdHNwb3RRdWVzdGlvbkVkaXREaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVF1aXpRdWVzdGlvbn0gZnJvbSBcIi4uLy4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6UXVlc3Rpb25cIjtcclxuaW1wb3J0IHtJU2hhcGUsIFNjZW5lVXRpbHMsIFNlbGVjdGVkUG9pbnQsIFNoYXBlRHJhd2luZ01vZGV9IGZyb20gXCIuLi8uLi91dGlscy9Ib3RzcG90UXVlc3Rpb25VdGlsc1wiO1xyXG5pbXBvcnQge0lRU2VydmljZX0gZnJvbSBcImFuZ3VsYXJcIjtcclxuXHJcbmludGVyZmFjZSBJVmhzSG90c3BvdFF1ZXN0aW9uRXhwbGFuYXRpb25TY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHF1ZXN0aW9uPzogSVF1aXpRdWVzdGlvbjtcclxuICAgIHNob3dTdGF0dXM/OiBib29sZWFuO1xyXG5cclxuICAgIHZtPzogVmhzSG90c3BvdFF1ZXN0aW9uRXhwbGFuYXRpb25Db250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzSG90c3BvdFF1ZXN0aW9uRXhwbGFuYXRpb25Db250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG4gICAgcHJpdmF0ZSBjYW52YXNDb250YWluZXJXaWR0aDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBjYW52YXM6IEhUTUxFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBjYW52YXNDb250ZXh0OiBhbnk7XHJcbiAgICBwcml2YXRlIHdpbmRvdzogYW55O1xyXG4gICAgcHJpdmF0ZSByZXF1ZXN0SUQ6IGFueTtcclxuXHJcbiAgICBwcml2YXRlIGNhbnZhc0JhY2tncm91bmQ6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIGNhbnZhc0JhY2tncm91bmRMb2FkZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHNoYXBlc0luSW1hZ2VDb29yZGluYXRlczogQXJyYXk8SVNoYXBlPjtcclxuICAgIHByaXZhdGUgc2hhcGVzOiBBcnJheTxJU2hhcGU+O1xyXG4gICAgcHJpdmF0ZSBzZWxlY3RlZFBvaW50c0luSW1hZ2VDb29yZGluYXRlczogQXJyYXk8U2VsZWN0ZWRQb2ludD47XHJcbiAgICBwcml2YXRlIGNvcnJlY3RQb2ludHM6IEFycmF5PFNlbGVjdGVkUG9pbnQ+O1xyXG4gICAgcHJpdmF0ZSB3cm9uZ1BvaW50czogQXJyYXk8U2VsZWN0ZWRQb2ludD47XHJcblxyXG4gICAgcHVibGljIGlzQ29ycmVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRxXCJcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNIb3RzcG90UXVlc3Rpb25FeHBsYW5hdGlvblNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBJUVNlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzSG90c3BvdFF1ZXN0aW9uRXhwbGFuYXRpb25TY29wZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50cnlJbml0Q2FudmFzU2NlbmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvdy51bmJpbmQoJ3Jlc2l6ZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2goKCkgPT4gdGhpcy4kc2NvcGUucXVlc3Rpb24uaW5kZXhOdW1iZXIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVxdWVzdElEKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZXF1ZXN0SUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudHJ5SW5pdENhbnZhc1NjZW5lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0cnlJbml0Q2FudmFzU2NlbmUoKSB7XHJcbiAgICAgICAgbGV0IGNhbnZhc0lkID0gYGhvdHNwb3QtZXhwbGFuYXRpb24tY2FudmFzLSR7dGhpcy4kc2NvcGUucXVlc3Rpb24uaW5kZXhOdW1iZXJ9YDtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuZmluZCgnLmhvdHNwb3QtY2FudmFzLWNvbnRhaW5lciAuaG90c3BvdC1jYW52YXMnKS5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuZmluZCgnLmhvdHNwb3QtY2FudmFzLWNvbnRhaW5lcicpLmFwcGVuZChgPGNhbnZhcyBpZD1cIiR7Y2FudmFzSWR9XCIgY2xhc3M9XCJob3RzcG90LWNhbnZhc1wiPjwvY2FudmFzPmApO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbnZhc0lkKTtcclxuICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQgPSAoPGFueT4gdGhpcy5jYW52YXMpLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaGFwZXNJbkltYWdlQ29vcmRpbmF0ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnRzSW5JbWFnZUNvb3JkaW5hdGVzID0gW107XHJcbiAgICAgICAgdGhpcy5zaGFwZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvcnJlY3RQb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLndyb25nUG9pbnRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubG9hZEltYWdlKCk7XHJcbiAgICAgICAgdGhpcy5hbmltYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkSW1hZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXNCYWNrZ3JvdW5kTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLnF1ZXN0aW9uLmF0dGFjaGVkRmlsZVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhc0JhY2tncm91bmQgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNCYWNrZ3JvdW5kLnNyYyA9IHRoaXMuJHNjb3BlLnF1ZXN0aW9uLmF0dGFjaGVkRmlsZVVybDtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNCYWNrZ3JvdW5kLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FpdEZvckVsZW1lbnQoJy5ob3RzcG90LWNhbnZhcy1jb250YWluZXInKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRhaW5lcldpZHRoID0gdGhpcy5lbGVtZW50LmZpbmQoJy5ob3RzcG90LWNhbnZhcy1jb250YWluZXInKS53aWR0aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQmFja2dyb3VuZExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5jYW52YXMpLndpZHRoID0gdGhpcy5jYW52YXNDb250YWluZXJXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLmNhbnZhcykuaGVpZ2h0ID0gdGhpcy5jYW52YXNDb250YWluZXJXaWR0aCAqIHRoaXMuY2FudmFzQmFja2dyb3VuZC5oZWlnaHQgLyB0aGlzLmNhbnZhc0JhY2tncm91bmQud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2hhcGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2VsZWN0ZWRQb2ludHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUXVlc3Rpb25Db3JyZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhbmltYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbnZhc0JhY2tncm91bmQgJiYgdGhpcy5jYW52YXNCYWNrZ3JvdW5kTG9hZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXNDb250YWluZXJXaWR0aCxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQ29udGFpbmVyV2lkdGggKiB0aGlzLmNhbnZhc0JhY2tncm91bmQuaGVpZ2h0IC8gdGhpcy5jYW52YXNCYWNrZ3JvdW5kLndpZHRoKTtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0LmRyYXdJbWFnZSh0aGlzLmNhbnZhc0JhY2tncm91bmQsIDAsIDAsIHRoaXMuY2FudmFzQ29udGFpbmVyV2lkdGgsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRhaW5lcldpZHRoICogdGhpcy5jYW52YXNCYWNrZ3JvdW5kLmhlaWdodCAvIHRoaXMuY2FudmFzQmFja2dyb3VuZC53aWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNoYXBlcy5mb3JFYWNoKHMgPT4gcy5kcmF3KHRoaXMuY2FudmFzQ29udGV4dCwgU2hhcGVEcmF3aW5nTW9kZS5DT1JSRUNUKSk7XHJcbiAgICAgICAgdGhpcy5jb3JyZWN0UG9pbnRzLmZvckVhY2gocCA9PiBwLmRyYXcodGhpcy5jYW52YXNDb250ZXh0LCBTaGFwZURyYXdpbmdNb2RlLkNPUlJFQ1QpKTtcclxuICAgICAgICB0aGlzLndyb25nUG9pbnRzLmZvckVhY2gocCA9PiBwLmRyYXcodGhpcy5jYW52YXNDb250ZXh0LCBTaGFwZURyYXdpbmdNb2RlLldST05HKSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdElEID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmFuaW1hdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkU2hhcGVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hhcGVzSW5JbWFnZUNvb3JkaW5hdGVzID0gU2NlbmVVdGlscy5sb2FkU2hhcGVzKHRoaXMuJHNjb3BlLnF1ZXN0aW9uLmpzb25EYXRhKTtcclxuICAgICAgICBsZXQgc2NhbGVGYWN0b3IgPSAoPGFueT4gdGhpcy5jYW52YXMpLndpZHRoIC8gdGhpcy5jYW52YXNCYWNrZ3JvdW5kLndpZHRoO1xyXG4gICAgICAgIHRoaXMuc2hhcGVzID0gU2NlbmVVdGlscy5zY2FsZVNoYXBlcyh0aGlzLnNoYXBlc0luSW1hZ2VDb29yZGluYXRlcywgc2NhbGVGYWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFNlbGVjdGVkUG9pbnRzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLiRzY29wZS5xdWVzdGlvbi5yZXNwb25zZURhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50c0luSW1hZ2VDb29yZGluYXRlcyA9IHRoaXMuJHNjb3BlLnF1ZXN0aW9uLnJlc3BvbnNlRGF0YS5tYXAocCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRQb2ludDogU2VsZWN0ZWRQb2ludCA9IG5ldyBTZWxlY3RlZFBvaW50KCk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFBvaW50LmNlbnRlclggPSBwLmNlbnRlclg7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFBvaW50LmNlbnRlclkgPSBwLmNlbnRlclk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRQb2ludDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29ycmVjdFBvaW50c0luSW1hZ2VDb29yZGluYXRlcyA9IHRoaXMuc2VsZWN0ZWRQb2ludHNJbkltYWdlQ29vcmRpbmF0ZXMuZmlsdGVyKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhcGVzSW5JbWFnZUNvb3JkaW5hdGVzLnNvbWUocyA9PiBzLmlzUG9pbnRJbnNpZGUoeyB4OiBwLmNlbnRlclgsIHk6IHAuY2VudGVyWSB9KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgd3JvbmdQb2ludHNJbkltYWdlQ29vcmRpbmF0ZXMgPSB0aGlzLnNlbGVjdGVkUG9pbnRzSW5JbWFnZUNvb3JkaW5hdGVzLmZpbHRlcihwID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5zaGFwZXNJbkltYWdlQ29vcmRpbmF0ZXMuc29tZShzID0+IHMuaXNQb2ludEluc2lkZSh7IHg6IHAuY2VudGVyWCwgeTogcC5jZW50ZXJZIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgc2NhbGVGYWN0b3IgPSAoPGFueT50aGlzLmNhbnZhcykud2lkdGggLyB0aGlzLmNhbnZhc0JhY2tncm91bmQud2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuY29ycmVjdFBvaW50cyA9IGNvcnJlY3RQb2ludHNJbkltYWdlQ29vcmRpbmF0ZXMubWFwKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNjZW5lVXRpbHMuc2NhbGVTZWxlY3RlZFBvaW50KHAsIHNjYWxlRmFjdG9yKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMud3JvbmdQb2ludHMgPSB3cm9uZ1BvaW50c0luSW1hZ2VDb29yZGluYXRlcy5tYXAocCA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU2NlbmVVdGlscy5zY2FsZVNlbGVjdGVkUG9pbnQocCwgc2NhbGVGYWN0b3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnRzSW5JbWFnZUNvb3JkaW5hdGVzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY29ycmVjdFBvaW50cyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLndyb25nUG9pbnRzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tRdWVzdGlvbkNvcnJlY3QoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0NvcnJlY3QgPSB0aGlzLnNoYXBlc0luSW1hZ2VDb29yZGluYXRlcy5ldmVyeShzID0+XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludHNJbkltYWdlQ29vcmRpbmF0ZXMuc29tZShwID0+IHMuaXNQb2ludEluc2lkZSh7IHg6IHAuY2VudGVyWCwgeTogcC5jZW50ZXJZfSkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHdhaXRGb3JFbGVtZW50KHNlbGVjdG9yKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kcSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuZmluZChzZWxlY3Rvcikud2lkdGgoKSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuZmluZChzZWxlY3Rvcikud2lkdGgoKSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzSG90c3BvdFF1ZXN0aW9uRXhwbGFuYXRpb25EaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc0hvdHNwb3RRdWVzdGlvbkV4cGxhbmF0aW9uU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzSG90c3BvdFF1ZXN0aW9uRXhwbGFuYXRpb25Db250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNIb3RzcG90UXVlc3Rpb25FeHBsYW5hdGlvbkNvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgcXVlc3Rpb246IFwiPT92aHNRdWVzdGlvblwiLFxyXG4gICAgICAgICAgICBzaG93U3RhdHVzOiBcIj0/dmhzU2hvd1N0YXR1c1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9xdWl6emVzL3Zocy1ob3RzcG90LXF1ZXN0aW9uLWV4cGxhbmF0aW9uLmh0bWxcIilcclxuICAgIH1cclxufVxyXG5cclxuVmhzSG90c3BvdFF1ZXN0aW9uRXhwbGFuYXRpb25EaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge0RvbVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvRG9tVXRpbHNcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vbW9kZWxzL0V2ZW50XCI7XHJcbmltcG9ydCB7SVRleHRBbmd1bGFyRXZlbnREYXRhfSBmcm9tIFwiLi4vbW9kZWxzL0lUZXh0QW5ndWxhckV2ZW50RGF0YVwiO1xyXG5pbXBvcnQge0FJU2VydmljZX0gZnJvbSBcIi4uLy4uL2FpL0FJU2VydmljZVwiO1xyXG5pbXBvcnQge0lBSVN1YnRvcGljc1Jlc3VsdH0gZnJvbSBcIi4uLy4uL2FpL21vZGVscy9JQUlTdWJ0b3BpY3NSZXN1bHRcIjtcclxuaW1wb3J0IHtJQUlQYXJhZ3JhcGhSZXN1bHR9IGZyb20gXCIuLi8uLi9haS9tb2RlbHMvSUFJUGFyYWdyYXBoUmVzdWx0XCI7XHJcbmltcG9ydCB7SVFTZXJ2aWNlfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQge0lBSVF1b3RlUmVzdWx0fSBmcm9tIFwiLi4vLi4vYWkvbW9kZWxzL0lBSVF1b3RlUmVzdWx0XCI7XHJcbmltcG9ydCB7SUFJUXVlc3Rpb25SZXN1bHR9IGZyb20gXCIuLi8uLi9haS9tb2RlbHMvSUFJUXVlc3Rpb25SZXN1bHRcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFJQ29udGVudEdlbmVyYXRpb25EaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtPzogQUlDb250ZW50R2VuZXJhdGlvbkRpcmVjdGl2ZTtcclxuXHJcbiAgICBtb2RlbD86IHN0cmluZztcclxuICAgIG1vZGVsQ2hhbmdlZD86IGJvb2xlYW47XHJcbiAgICBjb3Vyc2VJZD86IG51bWJlcjtcclxufVxyXG5cclxuZW51bSBDb250ZW50R2VuZXJhdGlvblR5cGUge1xyXG4gICAgQVJUSUNMRSxcclxuICAgIFFVT1RFLFxyXG4gICAgUEFSQUdSQVBILFxyXG4gICAgUVVFU1RJT05cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFJQ29udGVudEdlbmVyYXRpb25EaXJlY3RpdmUge1xyXG5cclxuICAgIHByaXZhdGUgbGFzdEV2ZW50RGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhO1xyXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcbiAgICBwcml2YXRlIHJpY2hFZGl0b3JQYXJlbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeTtcclxuICAgIHByaXZhdGUgbG9hZFBvcHVwQ29udGVudDogYm9vbGVhbiA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwdWJsaWMgYWlQcm9tcHRUZXh0OiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIHB1YmxpYyBjb250ZW50R2VuZXJhdGlvblR5cGUgPSBDb250ZW50R2VuZXJhdGlvblR5cGU7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRDb250ZW50R2VuZXJhdGlvblR5cGU6IHN0cmluZyA9IENvbnRlbnRHZW5lcmF0aW9uVHlwZVtDb250ZW50R2VuZXJhdGlvblR5cGUuQVJUSUNMRV07XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIEFJU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJQUlDb250ZW50R2VuZXJhdGlvbkRpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhaVNlcnZpY2U6IEFJU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5UQV9BSV9DT05URU5UX0dFTkVSQVRJT04sIChldmVudDogbmcuSUFuZ3VsYXJFdmVudCwgZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXZlbnRQcm9jZXNzYWJsZShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUG9wdXBDb250ZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEV2ZW50RGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChcImRpdi5tb2RhbFwiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSUFJQ29udGVudEdlbmVyYXRpb25EaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5yaWNoRWRpdG9yUGFyZW50ID0gRG9tVXRpbHMuZmluZFBhcmVudFdpdGhDbGFzcyh0aGlzLmVsZW1lbnQsIFwidmhzLXJpY2gtZWRpdG9yLWNvbnRlbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlUG9wdXAoKSB7XHJcbiAgICAgICAgdGhpcy5haVByb21wdFRleHQgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5maW5kKFwiZGl2Lm1vZGFsXCIpLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzRXZlbnRQcm9jZXNzYWJsZShkYXRhOiBJVGV4dEFuZ3VsYXJFdmVudERhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YS5ldmVudFNvdXJjZUJ1dHRvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKGRhdGEuZXZlbnRTb3VyY2VCdXR0b24sIFwidmhzLXJpY2gtZWRpdG9yLWNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiBwYXJlbnQuaXModGhpcy5yaWNoRWRpdG9yUGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZW5lcmF0ZUNvbnRlbnQoKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkQ29udGVudEdlbmVyYXRpb25UeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQ29udGVudEdlbmVyYXRpb25UeXBlW0NvbnRlbnRHZW5lcmF0aW9uVHlwZS5BUlRJQ0xFXTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb3Vyc2VCeVRvcGljKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDb250ZW50R2VuZXJhdGlvblR5cGVbQ29udGVudEdlbmVyYXRpb25UeXBlLlFVT1RFXTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVRdW90ZUJ5VG9waWMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIENvbnRlbnRHZW5lcmF0aW9uVHlwZVtDb250ZW50R2VuZXJhdGlvblR5cGUuUEFSQUdSQVBIXTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVQYXJhZ3JhcGhCeVRvcGljKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDb250ZW50R2VuZXJhdGlvblR5cGVbQ29udGVudEdlbmVyYXRpb25UeXBlLlFVRVNUSU9OXTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVRdWVzdGlvbkJ5VG9waWMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2VuZXJhdGVDb3Vyc2VCeVRvcGljKCkge1xyXG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgbGV0IHRvcGljID0gdGhpcy5haVByb21wdFRleHQ7XHJcbiAgICAgICAgdGhpcy5haVNlcnZpY2UuZ2VuZXJhdGVTdWJ0b3BpY3ModGhpcy4kc2NvcGUuY291cnNlSWQsIDUsIHRvcGljKS50aGVuKChyZXN1bHQ6IElBSVN1YnRvcGljc1Jlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZ2VuZXJhdGVBcnRpY2xlUHJvbWlzZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQudG9waWNzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5tb2RlbCA9IHRoaXMuJHNjb3BlLm1vZGVsID09PSB1bmRlZmluZWQgPyBcIlwiIDogdGhpcy4kc2NvcGUubW9kZWw7XHJcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFydGljbGVQcm9taXNlcy5wdXNoKHRoaXMuYWlTZXJ2aWNlLmdlbmVyYXRlU3VicGFyYWdyYXBoKHRoaXMuJHNjb3BlLmNvdXJzZUlkLCB0b3BpYywgcmVzdWx0LnRvcGljc1tpXSkudGhlbigoYXJ0aWNsZTogSUFJUGFyYWdyYXBoUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUubW9kZWwgPSB0aGlzLiRzY29wZS5tb2RlbCArIFwiPGJyPlwiICsgYDxoMz4ke2FydGljbGUuc3VidG9waWN9PC9oMz5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsgYDxwPiR7YXJ0aWNsZS5hcnRpY2xlfTwvcD5gO1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuJHEuYWxsKGdlbmVyYXRlQXJ0aWNsZVByb21pc2VzKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLm1vZGVsQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4gdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCkpO1xyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4gdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZW5lcmF0ZVF1b3RlQnlUb3BpYygpIHtcclxuICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgIHRoaXMuYWlTZXJ2aWNlLmdlbmVyYXRlUXVvdGUodGhpcy4kc2NvcGUuY291cnNlSWQsIHRoaXMuYWlQcm9tcHRUZXh0KS50aGVuKChyZXN1bHQ6IElBSVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBodG1sID0gYDxibG9ja3F1b3RlPjxwcmU+JHtyZXN1bHQucXVvdGV9ICgke3Jlc3VsdC5hdXRob3J9KTwvcHJlPjwvYmxvY2txdW90ZT5gO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RFdmVudERhdGEuY2FsbGJhY2tGdW5jdGlvbihodG1sKTtcclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2VuZXJhdGVQYXJhZ3JhcGhCeVRvcGljKCkge1xyXG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgdGhpcy5haVNlcnZpY2UuZ2VuZXJhdGVQYXJhZ3JhcGgodGhpcy4kc2NvcGUuY291cnNlSWQsIHRoaXMuYWlQcm9tcHRUZXh0KS50aGVuKChhcnRpY2xlOiBJQUlQYXJhZ3JhcGhSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBcIjxicj5cIiArIGA8aDM+JHthcnRpY2xlLnRvcGljfTwvaDM+YFxyXG4gICAgICAgICAgICAgICAgKyBgPHA+JHthcnRpY2xlLmFydGljbGV9PC9wPmA7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdEV2ZW50RGF0YS5jYWxsYmFja0Z1bmN0aW9uKGh0bWwpO1xyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4gdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZW5lcmF0ZVF1ZXN0aW9uQnlUb3BpYygpIHtcclxuICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgIHRoaXMuYWlTZXJ2aWNlLmdlbmVyYXRlUXVlc3Rpb24odGhpcy4kc2NvcGUuY291cnNlSWQsIHRoaXMuYWlQcm9tcHRUZXh0KS50aGVuKChxdWVzdGlvbjogSUFJUXVlc3Rpb25SZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBcIjxkaXYgY2xhc3M9XFxcInRhLWJsb2NrIHF1ZXN0aW9uXFxcIj48cCBjbGFzcz1cXFwiYmxvY2staGVhZGVyXFxcIj48Yj5RdWVzdGlvbjwvYj48L3A+PHA+XCIgKyBxdWVzdGlvbi5xdWVzdGlvbiArIFwiPC9wPjwvZGl2PlwiXHJcbiAgICAgICAgICAgICAgICArIFwiPGRpdiBjbGFzcz1cXFwidG9nZ2xlIHRvZ2dsZS1hbnN3ZXJcXFwiPjxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgaWQ9XFxcInRvZ2dsZV9pbnB1dFxcXCIgdmFsdWU9XFxcInNlbGVjdGVkXFxcIiBjbGFzcz1cXFwidG9nZ2xlX2lucHV0XFxcIj5cIlxyXG4gICAgICAgICAgICAgICAgKyBcIjxsYWJlbD48Yj4mbmJzcDs8L2I+PC9sYWJlbD48c3Bhbj4mbmJzcDs8L3NwYW4+Jm5ic3A7PGRpdiBjbGFzcz1cXFwidG9nZ2xlX2NvbnRlbnRcXFwiPjxwPjxpPjwvaT48L3A+PHA+PGk+XCIgKyBxdWVzdGlvbi5hbnN3ZXIgKyBcIjwvaT48L3A+PHA+PC9wPjwvZGl2PjwvZGl2PlwiO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RFdmVudERhdGEuY2FsbGJhY2tGdW5jdGlvbihodG1sKTtcclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlYWN0aXZhdGVNYWluQ29udGVudCgpIHtcclxuICAgICAgICBsZXQgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcImRpdiNtYWluQ29udGVudFwiKTtcclxuICAgICAgICBsZXQgbWFpbkxvYWRpbmdFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggXCJkaXYjbWFpbkNvbnRlbnRMb2FkaW5nXCIpO1xyXG4gICAgICAgIG1haW5FbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgbWFpbkxvYWRpbmdFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZU1haW5Db250ZW50KCkge1xyXG4gICAgICAgIGxldCBtYWluRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIFwiZGl2I21haW5Db250ZW50XCIpO1xyXG4gICAgICAgIGxldCBtYWluTG9hZGluZ0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcImRpdiNtYWluQ29udGVudExvYWRpbmdcIik7XHJcbiAgICAgICAgbWFpbkVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICBtYWluTG9hZGluZ0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0FJQ29udGVudEdlbmVyYXRpb25EaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSUFJQ29udGVudEdlbmVyYXRpb25EaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBBSUNvbnRlbnRHZW5lcmF0aW9uRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IEFJQ29udGVudEdlbmVyYXRpb25EaXJlY3RpdmUsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgbW9kZWw6IFwiPT92aHNNb2RlbFwiLFxyXG4gICAgICAgICAgICBtb2RlbENoYW5nZWQ6IFwiPT92aHNNb2RlbENoYW5nZWRcIixcclxuICAgICAgICAgICAgY291cnNlSWQ6IFwiPT92aHNDb3Vyc2VJZFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0ZW1wbGF0ZVVybDogdXJsLnRlbXBsYXRlKFwiY29tcG9uZW50cy9yaWNodGV4dC92aHMtYWktY29udGVudC1nZW5lcmF0aW9uLmh0bWxcIiksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzQUlDb250ZW50R2VuZXJhdGlvbkRpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtSYW5kb21VdGlsc30gZnJvbSBcIi4uLy4uL3V0aWxzL1JhbmRvbVV0aWxzXCI7XHJcbmltcG9ydCBJUHJvbWlzZSA9IGFuZ3VsYXIuSVByb21pc2U7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuLi9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge0lCdW5kbGVGaWxlfSBmcm9tIFwiLi4vLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZUZpbGVcIjtcclxuaW1wb3J0IHtJRmluZFJpY2hUZXh0QmluZENvbnRyb2xsZXJFdmVudERhdGF9IGZyb20gXCIuLi9tb2RlbHMvSUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhXCI7XHJcbmltcG9ydCB7QnVuZGxlU2VydmljZX0gZnJvbSBcIi4vLi4vLi4vYnVuZGxlcy9CdW5kbGVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmljaFRleHRDb250ZW50TG9hZGluZ1N5bmNocm9uaXplcn0gZnJvbSBcIi4vUmljaFRleHRDb250ZW50TG9hZGluZ1N5bmNocm9uaXplclwiO1xyXG5pbXBvcnQge0lFbWJlZGRlZE1hdGVyaWFsU291cmNlfSBmcm9tIFwiLi4vbW9kZWxzL0lFbWJlZGRlZE1hdGVyaWFsU291cmNlXCI7XHJcbmltcG9ydCB7QnVuZGxlRmlsZVR5cGVFbnVtfSBmcm9tIFwiLi4vLi4vYnVuZGxlcy9tb2RlbHMvQnVuZGxlRmlsZVR5cGVcIjtcclxuaW1wb3J0IHtDb250ZW50VXRpbHN9IGZyb20gXCIuLi8uLi91dGlscy9Db250ZW50VXRpbHNcIjtcclxuaW1wb3J0IHtJQnVzaW5lc3NVbml0fSBmcm9tIFwiLi4vLi4vYnVzaW5lc3NVbml0cy9tb2RlbHMvSUJ1c2luZXNzVW5pdFwiO1xyXG5cclxuaW50ZXJmYWNlIFJpY2hUZXh0QmluZEF0dHJpYnV0ZXMgZXh0ZW5kcyBhbmd1bGFyLklBdHRyaWJ1dGVzIHtcclxuICAgIGJ1bmRsZUlkPzogbnVtYmVyO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUmljaFRleHRCaW5kU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBuZ01vZGVsPzogYW55O1xyXG4gICAgYnVuZGxlPzogSUJ1bmRsZTtcclxuICAgIG1hdGVyaWFsU291cmNlVHlwZT86IHN0cmluZztcclxuICAgIG1hdGVyaWFsU291cmNlSWQ/OiBudW1iZXI7XHJcbiAgICB2aHNNYXRlcmlhbFNlY3Rpb25JZD86IG51bWJlcjtcclxuICAgIGJ1c2luZXNzVW5pdD86IElCdXNpbmVzc1VuaXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSaWNoVGV4dEJpbmRDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIEFMTE9XX0ZBS0VfQlVORExFX0ZJbEVTX1JFVFVSTiA9IHRydWU7XHJcblxyXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcbiAgICBwcml2YXRlIGVsZW1lbnRJZDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBidW5kbGU6IElCdW5kbGU7XHJcbiAgICBwcml2YXRlIGxvYWRCdW5kbGVQcm9taXNlOiBJUHJvbWlzZTxJQnVuZGxlPjtcclxuICAgIHByaXZhdGUgd2FpdENvbnRlbnRMb2FkaW5nRGVmZXJyZWQ6IGFuZ3VsYXIuSURlZmVycmVkPGFueT47XHJcbiAgICBwcml2YXRlIGxvYWRpbmdDb250ZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG1hdGVyaWFsU291cmNlOiBJRW1iZWRkZWRNYXRlcmlhbFNvdXJjZTtcclxuICAgIHByaXZhdGUgdmhzTWF0ZXJpYWxTZWN0aW9uSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXQ6IElCdXNpbmVzc1VuaXQ7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIEJ1bmRsZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBSaWNoVGV4dENvbnRlbnRMb2FkaW5nU3luY2hyb25pemVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidW5kbGVBcGk6IEJ1bmRsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxvYWRpbmdTeW5jaHJvbml6ZXI6IFJpY2hUZXh0Q29udGVudExvYWRpbmdTeW5jaHJvbml6ZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IFJpY2hUZXh0QmluZFNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgYnVuZGxlSWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50SWQgPSBlbGVtZW50LmF0dHIoJ2lkJyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRJZCA9IFJhbmRvbVV0aWxzLmdlbmVyYXRlUmFuZG9tSWQoJ3JpY2hfdGV4dF9lbGVtZW50XycpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXR0cignaWQnLCB0aGlzLmVsZW1lbnRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgkc2NvcGUuYnVuZGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVuZGxlID0gJHNjb3BlLmJ1bmRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCRzY29wZS5idXNpbmVzc1VuaXQpIHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXQgPSAkc2NvcGUuYnVzaW5lc3NVbml0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1hdGVyaWFsU291cmNlID0ge1xyXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiAkc2NvcGUubWF0ZXJpYWxTb3VyY2VUeXBlLFxyXG4gICAgICAgICAgICBzb3VyY2VJZDogJHNjb3BlLm1hdGVyaWFsU291cmNlSWRcclxuICAgICAgICB9O1xyXG4gICAgICAgICRzY29wZS4kd2F0Y2goXCJuZ01vZGVsXCIsIHZhbHVlID0+IHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnQ2hhbmdlIHJpY2hUZXh0IG1vZGVsJyk7XHJcbiAgICAgICAgICAgIHRoaXMub25SaWNoVGV4dENoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJ1bmRsZSAmJiBidW5kbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRCdW5kbGVQcm9taXNlID0gdGhpcy5idW5kbGVBcGkuZ2V0QnVuZGxlKGJ1bmRsZUlkLCBcIkxPQURFRF9BVF9TVEFSVFwiKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlUHJvbWlzZS50aGVuKChidW5kbGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlUHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlUHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkc2NvcGUuJG9uKEV2ZW50LlRBX0ZJTkRfUklDSF9URVhUX0JJTkRfQ09OVFJPTExFUiwgKGV2ZW50OiBuZy5JQW5ndWxhckV2ZW50LCBkYXRhOiBJRmluZFJpY2hUZXh0QmluZENvbnRyb2xsZXJFdmVudERhdGEpID0+IHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnT24gZmluZCByaWNoIHRleHQgYmluZCBldmVudCcpO1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEucmljaFRleHRCaW5kQ29udHJvbGxlciAmJiBkYXRhLnJpY2hUZXh0RWxlbWVudElkICYmIGRhdGEucmljaFRleHRFbGVtZW50SWQgPT0gdGhpcy5lbGVtZW50SWQpIHtcclxuICAgICAgICAgICAgICAgIGRhdGEucmljaFRleHRCaW5kQ29udHJvbGxlciA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnZoc01hdGVyaWFsU2VjdGlvbklkID0gJHNjb3BlLnZoc01hdGVyaWFsU2VjdGlvbklkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25SaWNoVGV4dENoYW5nZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0NvbnRlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAvL3RoaXMuZWxlbWVudC5hZGRDbGFzcygncmljaC10ZXh0LWxvYWRpbmcnKTtcclxuICAgICAgICAgICAgLy8gZGVsYXkgZGlzcGxheWluZyBmb3IgMiBkaWdlc3QgY3ljbGVzICsgd2FpdGluZyBmb3IgYnVuZGxlcyBsb2FkaW5nXHJcbiAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3luY2hyb25pemVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5sb2FkQ29udGVudCh0aGlzLmVsZW1lbnRJZCwgdGhpcy4kcS53aGVuKCcnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnQWZ0ZXIgbG9hZCBpbiByaWNodGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLndhaXRDb250ZW50TG9hZGluZ0RlZmVycmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1Jlc29sdmluZyB3YWl0IGNvbnRlbnQgZGVmZXJyZWQgYWZ0ZXIgY29udGVudCBsb2FkZWQuLi4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53YWl0Q29udGVudExvYWRpbmdEZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2FpdENvbnRlbnRMb2FkaW5nRGVmZXJyZWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdDb250ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3JpY2gtdGV4dC1sb2FkaW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAwKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgY2xlYXJGaWxlc0luTG9jYWxTdG9yYWdlKGJ1bmRsZUZpbGVLZXk6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYnVuZGxlRmlsZUtleS5zcGxpdChcIi9cIikucG9wKCkpXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYnVuZGxlRmlsZUtleSk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYnVuZGxlRmlsZUtleS5zcGxpdChcIi9cIikucG9wKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCdW5kbGVGaWxlKGJ1bmRsZUZpbGVLZXk6IHN0cmluZyk6IElQcm9taXNlPElCdW5kbGVGaWxlPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuYnVuZGxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1bmRsZS5maWxlc01hcC5oYXMoYnVuZGxlRmlsZUtleSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJ1bmRsZS5maWxlc01hcC5nZXQoYnVuZGxlRmlsZUtleSkudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgUmljaFRleHRCaW5kQ29udHJvbGxlci5jbGVhckZpbGVzSW5Mb2NhbFN0b3JhZ2UoYnVuZGxlRmlsZUtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEud2hlbih0aGlzLmJ1bmRsZS5maWxlc01hcC5nZXQoYnVuZGxlRmlsZUtleSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKHRoaXMuY3JlYXRlRmFrZUZpbGUoYnVuZGxlRmlsZUtleSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFJpY2hUZXh0QmluZENvbnRyb2xsZXIuQUxMT1dfRkFLRV9CVU5ETEVfRklsRVNfUkVUVVJOICYmIHRoaXMuYnVuZGxlLnB1YmxpY1N0b3JhZ2VcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuYnVuZGxlLmJhc2VVcmwgJiYgYnVuZGxlRmlsZUtleS5pbmRleE9mKCdzZWN0aW9ucy9zbGlkZXMvJykgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKHRoaXMuY3JlYXRlRmFrZUZpbGUoYnVuZGxlRmlsZUtleSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEJ1bmRsZUZyb21TZXJ2ZXIoYnVuZGxlRmlsZUtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubG9hZEJ1bmRsZVByb21pc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEJ1bmRsZVByb21pc2UudGhlbigoYnVuZGxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVuZGxlICYmIHRoaXMuYnVuZGxlLmZpbGVzTWFwLmhhcyhidW5kbGVGaWxlS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIFJpY2hUZXh0QmluZENvbnRyb2xsZXIuY2xlYXJGaWxlc0luTG9jYWxTdG9yYWdlKGJ1bmRsZUZpbGVLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBidW5kbGUuZmlsZXNNYXAuZ2V0KGJ1bmRsZUZpbGVLZXkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChSaWNoVGV4dEJpbmRDb250cm9sbGVyLkFMTE9XX0ZBS0VfQlVORExFX0ZJbEVTX1JFVFVSTiAmJiB0aGlzLmJ1bmRsZS5wdWJsaWNTdG9yYWdlICYmIHRoaXMuYnVuZGxlLmJhc2VVcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGYWtlRmlsZShidW5kbGVGaWxlS2V5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEJ1bmRsZUZyb21TZXJ2ZXIoYnVuZGxlRmlsZUtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLiRxLndoZW4obnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQnVuZGxlRnJvbVNlcnZlcihidW5kbGVGaWxlS2V5OiBzdHJpbmcpOiBJUHJvbWlzZTxJQnVuZGxlRmlsZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1bmRsZUFwaS5nZXRCdW5kbGUodGhpcy5idW5kbGUuaWQsIFwiZmlsZTpcIiArIGJ1bmRsZUZpbGVLZXkpXHJcbiAgICAgICAgICAgICAgICAudGhlbihidW5kbGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGU6IElCdW5kbGVGaWxlID0gYnVuZGxlLmZpbGVzTWFwLmdldChidW5kbGVGaWxlS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1bmRsZS5maWxlc01hcC5zZXQoYnVuZGxlRmlsZUtleSwgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRDb250ZW50U3luY2hyb25pemVkKGxvYWREYXRhUHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxhbnk+KTogYW5ndWxhci5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3luY2hyb25pemVyLmxvYWRDb250ZW50KHRoaXMuZWxlbWVudElkLCBsb2FkRGF0YVByb21pc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB3YWl0Rm9yQ29udGVudExvYWRlZCgpOiBJUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy53YWl0Q29udGVudExvYWRpbmdEZWZlcnJlZCkge1xyXG4gICAgICAgICAgICB0aGlzLndhaXRDb250ZW50TG9hZGluZ0RlZmVycmVkLnJlamVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL3dlIHNob3VsZCB3YWl0IG1vZGVsIGNoYW5nZSBmb3IgMSBkaWdlc3QsIG90aGVyd2lzZSAtIHJlc29sdmUgUmljaFRleHQgbG9hZGluZyBkZWZlcnJlZFxyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubG9hZGluZ0NvbnRlbnQgJiYgdGhpcy53YWl0Q29udGVudExvYWRpbmdEZWZlcnJlZCkge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnUmljaFRleHQgTW9kZWwgd2FzIG5vdCBjaGFuZ2VkLCBjb250ZW50IGlzIG5vdCBsb2FkaW5nLi4uIFJlamVjdCB3YWl0Q29udGVudExvYWRpbmdEZWZlcnJlZC4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FpdENvbnRlbnRMb2FkaW5nRGVmZXJyZWQucmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhaXRDb250ZW50TG9hZGluZ0RlZmVycmVkID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDApO1xyXG4gICAgICAgIHRoaXMud2FpdENvbnRlbnRMb2FkaW5nRGVmZXJyZWQgPSB0aGlzLiRxLmRlZmVyPGFueT4oKTtcclxuICAgICAgICByZXR1cm4gdGhpcy53YWl0Q29udGVudExvYWRpbmdEZWZlcnJlZC5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbWJlZGRlZE1hdGVyaWFsU291cmNlSW5mbygpOiBJUHJvbWlzZTxJRW1iZWRkZWRNYXRlcmlhbFNvdXJjZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRxLndoZW4odGhpcy5tYXRlcmlhbFNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVtYmVkZGVkTWF0ZXJpYWxTZWN0aW9uSWQoKTogSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHEud2hlbih0aGlzLnZoc01hdGVyaWFsU2VjdGlvbklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUZha2VGaWxlKGJ1bmRsZUZpbGVLZXk6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBleHQgPSBDb250ZW50VXRpbHMuZ2V0RmlsZUV4dChidW5kbGVGaWxlS2V5KTtcclxuICAgICAgICBsZXQgZmlsZVR5cGUgPSBCdW5kbGVGaWxlVHlwZUVudW1bQnVuZGxlRmlsZVR5cGVFbnVtLk9USEVSXTtcclxuICAgICAgICBpZiAoZXh0KSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZXh0LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJwbmdcIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJqcGdcIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJqcGVnXCI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZ2lmXCI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwic3ZnXCI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiYm1wXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGJ1bmRsZUZpbGVLZXkpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVR5cGUgPSBCdW5kbGVGaWxlVHlwZUVudW1bQnVuZGxlRmlsZVR5cGVFbnVtLklNQUdFXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt1cmw6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGJ1bmRsZUZpbGVLZXkpLnNwbGl0KCdcIicpWzFdLCBrZXk6IGJ1bmRsZUZpbGVLZXksIHR5cGU6IGZpbGVUeXBlfTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlVHlwZSA9IEJ1bmRsZUZpbGVUeXBlRW51bVtCdW5kbGVGaWxlVHlwZUVudW0uSU1BR0VdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3VybDogXCIuLi8uLi9jbGllbnQvdGhlbWVzL2RlZmF1bHQvaW1nL3RodW1ibmFpbC1waG90by5wbmdcIiwga2V5OiBidW5kbGVGaWxlS2V5LCB0eXBlOiBmaWxlVHlwZX07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSBcImh0bWxcIjpcclxuICAgICAgICAgICAgICAgICAgICBmaWxlVHlwZSA9IEJ1bmRsZUZpbGVUeXBlRW51bVtCdW5kbGVGaWxlVHlwZUVudW0uSFRNTF07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiY3NzXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZVR5cGUgPSBCdW5kbGVGaWxlVHlwZUVudW1bQnVuZGxlRmlsZVR5cGVFbnVtLkNTU107XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHt1cmw6IGAke3RoaXMuYnVuZGxlLmJhc2VVcmx9LyR7dGhpcy5idW5kbGUuZmlsZXNNYXAuZ2V0KGJ1bmRsZUZpbGVLZXkpfWAsIGtleTogYnVuZGxlRmlsZUtleSwgdHlwZTogZmlsZVR5cGV9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUmljaFRleHRCaW5kRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IFJpY2hUZXh0QmluZFNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFJpY2hUZXh0QmluZEF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFJpY2hUZXh0QmluZENvbnRyb2xsZXIpIHtcclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50LCBhdHRyaWJ1dGVzLmJ1bmRsZUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBuZ01vZGVsOiBcIj0/XCIsXHJcbiAgICAgICAgICAgIGJ1bmRsZTogXCI9P3Zoc0J1bmRsZVwiLFxyXG4gICAgICAgICAgICBtYXRlcmlhbFNvdXJjZVR5cGU6IFwiPT92aHNNYXRlcmlhbFNvdXJjZVR5cGVcIixcclxuICAgICAgICAgICAgbWF0ZXJpYWxTb3VyY2VJZDogXCI9P3Zoc01hdGVyaWFsU291cmNlSWRcIixcclxuICAgICAgICAgICAgdmhzTWF0ZXJpYWxTZWN0aW9uSWQ6IFwiPT92aHNNYXRlcmlhbFNlY3Rpb25JZFwiLFxyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXQ6IFwiPT92aHNCdXNpbmVzc1VuaXRcIlxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5SaWNoVGV4dEJpbmREaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQgSVByb21pc2UgPSBhbmd1bGFyLklQcm9taXNlO1xyXG5cclxuaW50ZXJmYWNlIElSaWNoVGV4dENvbnRlbnRMb2FkaW5nRGF0YSB7XHJcbiAgICBsb2FkZXJGdW5jdGlvbj86IElQcm9taXNlPGFueT47XHJcbiAgICBkZWZlcnJlZD86IGFuZ3VsYXIuSURlZmVycmVkPHN0cmluZz47XHJcbn1cclxuXHJcbi8vIHByb3ZpZGUgb3JkZXJlZCBjYWxsYmFja3MgY2FsbCBhZnRlciBsb2FkIGFsbCBkYXRhIGluIHJpY2ggdGV4dCAobG9hZCBidW5kbGVzIGluIGFwcHJvcHJpYXRlIG9yZGVyKVxyXG5leHBvcnQgY2xhc3MgUmljaFRleHRDb250ZW50TG9hZGluZ1N5bmNocm9uaXplciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvbXBvbmVudHMuUmljaFRleHRDb250ZW50TG9hZGluZ1N5bmNocm9uaXplclwiO1xyXG5cclxuICAgIHByaXZhdGUgcmljaFRleHRMb2FkZXJzTWFwOiBNYXA8YW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LCBBcnJheTxJUmljaFRleHRDb250ZW50TG9hZGluZ0RhdGE+PiA9XHJcbiAgICAgICAgbmV3IE1hcDxhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksIEFycmF5PElSaWNoVGV4dENvbnRlbnRMb2FkaW5nRGF0YT4+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBmb3JjZWRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ29udGVudChrZXk6IGFueSwgZGF0YUxvYWRlcjogSVByb21pc2U8YW55Pik6IElQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yaWNoVGV4dExvYWRlcnNNYXAuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5yaWNoVGV4dExvYWRlcnNNYXAuc2V0KGtleSwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZGVmZXJyZWQ6IGFuZ3VsYXIuSURlZmVycmVkPHN0cmluZz4gPSB0aGlzLiRxLmRlZmVyPHN0cmluZz4oKTtcclxuICAgICAgICBsZXQgbG9hZGluZ0RhdGE6IElSaWNoVGV4dENvbnRlbnRMb2FkaW5nRGF0YSA9IHtcclxuICAgICAgICAgICAgbG9hZGVyRnVuY3Rpb246IGRhdGFMb2FkZXIsXHJcbiAgICAgICAgICAgIGRlZmVycmVkOiBkZWZlcnJlZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yaWNoVGV4dExvYWRlcnNNYXAuZ2V0KGtleSkucHVzaChsb2FkaW5nRGF0YSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcmNlZExvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JjZWRMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7dGhpcy5wZXJmb3JtTG9hZENvbnRlbnQoKTt9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwZXJmb3JtTG9hZENvbnRlbnQoKSB7XHJcbiAgICAgICAgdGhpcy5yaWNoVGV4dExvYWRlcnNNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgcHJvbWlzZXM6IEFycmF5PElQcm9taXNlPGFueT4+ID0gW107XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja3M6IEFycmF5PGFuZ3VsYXIuSURlZmVycmVkPHN0cmluZz4+ID0gW107XHJcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKGRhdGE6IElSaWNoVGV4dENvbnRlbnRMb2FkaW5nRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChkYXRhLmxvYWRlckZ1bmN0aW9uLmNhdGNoKCgpID0+IHtyZXR1cm4gbnVsbH0pKTtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGRhdGEuZGVmZXJyZWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy4kcS5hbGwocHJvbWlzZXMpLnRoZW4oKHZhbHVlczogQXJyYXk8YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh2YWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzW2ldLnJlc29sdmUoKHZhbHVlc1tpXSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZvcmNlZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJpY2hUZXh0TG9hZGVyc01hcC5jbGVhcigpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lUZXh0QW5ndWxhckV2ZW50RGF0YX0gZnJvbSBcIi4uL21vZGVscy9JVGV4dEFuZ3VsYXJFdmVudERhdGFcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4uL21vZGVscy9FdmVudFwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmljaFRleHRFZGl0b3JEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtPzogUmljaFRleHRFZGl0b3JDb250cm9sbGVyO1xyXG4gICAgYWxsb3dFbWJlZE1hdGVyaWFscz86IGJvb2xlYW47XHJcbiAgICBhbGxvd0VtYmVkVGFibGU/OiBib29sZWFuO1xyXG4gICAgYWxsb3dCdW5kbGVzPzogYm9vbGVhbjtcclxuICAgIGFsbG93U2FuZGJveD86IGJvb2xlYW47XHJcbiAgICBhbGxvd0xvYWRGcm9tVGVtcGxhdGU/OiBib29sZWFuO1xyXG4gICAgYWxsb3dVc2VyTm90ZXM/OiBib29sZWFuO1xyXG4gICAgYWxsb3dBZGRpbmdCbG9ja3M/OiBib29sZWFuO1xyXG4gICAgYWxsb3dGb250Q29sb3JCbG9jaz86IGJvb2xlYW47XHJcbiAgICBhbGxvd0FJPzogYm9vbGVhbjtcclxuICAgIGJ1bmRsZUlkPzogbnVtYmVyO1xyXG4gICAgYnVzaW5lc3NVbml0SWQ/OiBudW1iZXI7XHJcbiAgICBtb2RlbD86IHN0cmluZztcclxuICAgIG1vZGVsQ2hhbmdlZD86IGJvb2xlYW47XHJcbiAgICBjb3Vyc2VJZD86IG51bWJlcjtcclxufVxyXG5cclxuaW50ZXJmYWNlIEV4dGVuZGVkSFRNTEVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XHJcbiAgICByZXF1ZXN0RnVsbHNjcmVlbigpOiBhbnk7XHJcbiAgICB3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpOiBhbnk7XHJcbiAgICBtb3pSZXF1ZXN0RnVsbFNjcmVlbigpOiBhbnk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBFeHRlbmRlZERvY3VtZW50IGV4dGVuZHMgRG9jdW1lbnQge1xyXG4gICAgZnVsbHNjcmVlbkVsZW1lbnQ6IGFueTtcclxuICAgIG1vekZ1bGxTY3JlZW5FbGVtZW50OiBhbnk7XHJcbiAgICB3ZWJraXRGdWxsc2NyZWVuRWxlbWVudDogYW55O1xyXG4gICAgY2FuY2VsRnVsbFNjcmVlbigpOiBhbnk7XHJcbiAgICB3ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk6IGFueTtcclxuICAgIG1vekNhbmNlbEZ1bGxTY3JlZW4oKTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmljaFRleHRFZGl0b3JDb250cm9sbGVyIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX0VNQkVEREVEX01BVEVSSUFMX0JVVFRPTiA9IFwiZW1iZWRkZWRNYXRlcmlhbFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9FTUJFRERFRF9CVU5ETEVfQlVUVE9OID0gXCJlbWJlZGRlZEJ1bmRsZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9TQU5EQk9YX0JVVFRPTiA9IFwic2FuZGJveFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9GVUxMU0NSRUVOX0JVVFRPTiA9IFwiZnVsbHNjcmVlblwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9MT0FEX0ZST01fVEVNUExBVEVfQlVUVE9OID0gXCJsb2FkRnJvbVRlbXBsYXRlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX0NPTlZFUlRfVE9fTkVXX1RFTVBMQVRFX0JVVFRPTiA9IFwiY29udmVydFRvTmV3VGVtcGxhdGVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfQUREX1RJUF9CVVRUT04gPSBcImFkZFRpcFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9BRERfUVVFU1RJT05fQlVUVE9OID0gXCJhZGRRdWVzdGlvblwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9BRERfQVNTRVNTTUVOVF9CVVRUT04gPSBcImFkZEFzc2Vzc21lbnRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfRk9OVF9DT0xPUiA9IFwiZm9udENvbG9yXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX1RFWFRfSElHSExJR0hURVIgPSBcInRleHRIaWdobGlnaHRlclwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9CQUNLR1JPVU5EX0ZPTlRfQ09MT1IgPSBcImJhY2tncm91bmRGb250Q29sb3JcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfVE9HR0xFX0JVVFRPTiA9IFwiYWRkVG9nZ2xlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRBX1RPR0dMRV9DT05URU5UX0JVVFRPTiA9IFwiYWRkVG9nZ2xlQ29udGVudFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9BRERfTk9URV9GT1JfUFJPR1JFU1NfQlVUVE9OID0gXCJhZGROb3RlRm9yUHJvZ3Jlc3NcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfQUREX1RBQkxFX0JVVFRPTiA9IFwiYWRkVGFibGVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfQUlfQ09OVEVOVF9HRU5FUkFUSU9OX0JVVFRPTiA9IFwiYWlDb250ZW50R2VuZXJhdGlvblwiO1xyXG5cclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVJpY2hUZXh0RWRpdG9yRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5UQV9GVUxMU0NSRUVOLChldmVudDogbmcuSUFuZ3VsYXJFdmVudCwgZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRnVsbHNjcmVlbig8RXh0ZW5kZWRIVE1MRWxlbWVudD50aGlzLmVsZW1lbnQuZmluZChcImRpdi52aHMtcmljaC1lZGl0b3ItY29udGVudFwiKS5nZXQoMCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVJpY2hUZXh0RWRpdG9yRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIGlmICghdGhpcy4kc2NvcGUuYWxsb3dCdW5kbGVzIHx8ICF0aGlzLiRzY29wZS5hbGxvd0VtYmVkTWF0ZXJpYWxzIHx8ICF0aGlzLiRzY29wZS5hbGxvd1NhbmRib3hcclxuICAgICAgICAgICAgfHwgIXRoaXMuJHNjb3BlLmFsbG93TG9hZEZyb21UZW1wbGF0ZSB8fCAhdGhpcy4kc2NvcGUuYWxsb3dBZGRpbmdCbG9ja3MgfHwgIXRoaXMuJHNjb3BlLmJ1bmRsZUlkXHJcbiAgICAgICAgICAgIHx8ICF0aGlzLiRzY29wZS5hbGxvd1VzZXJOb3RlcyB8fCAhdGhpcy4kc2NvcGUuYWxsb3dBSSkge1xyXG4gICAgICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZUVkaXRvckJ1dHRvbnMoKTtcclxuICAgICAgICAgICAgfSwgMClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoaWRlRWRpdG9yQnV0dG9ucygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLmFsbG93QnVuZGxlcyB8fCAhdGhpcy4kc2NvcGUuYnVuZGxlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJidXR0b25bbmFtZT0nXCIgKyBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfRU1CRURERURfQlVORExFX0JVVFRPTiArIFwiJ11cIikuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLmFsbG93RW1iZWRNYXRlcmlhbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJidXR0b25bbmFtZT0nXCIgKyBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfRU1CRURERURfTUFURVJJQUxfQlVUVE9OICsgXCInXVwiKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy4kc2NvcGUuYWxsb3dTYW5kYm94IHx8ICF0aGlzLiRzY29wZS5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChcImJ1dHRvbltuYW1lPSdcIiArIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9TQU5EQk9YX0JVVFRPTiArIFwiJ11cIikuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLmFsbG93TG9hZEZyb21UZW1wbGF0ZSB8fCAhdGhpcy4kc2NvcGUuYnVuZGxlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJidXR0b25bbmFtZT0nXCIgKyBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfTE9BRF9GUk9NX1RFTVBMQVRFX0JVVFRPTiArIFwiJ11cIikuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLmFsbG93TG9hZEZyb21UZW1wbGF0ZSB8fCAhdGhpcy4kc2NvcGUuYnVuZGxlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJidXR0b25bbmFtZT0nXCIgKyBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQ09OVkVSVF9UT19ORVdfVEVNUExBVEVfQlVUVE9OICsgXCInXVwiKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy4kc2NvcGUuYWxsb3dVc2VyTm90ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJidXR0b25bbmFtZT0nXCIgKyBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX05PVEVfRk9SX1BST0dSRVNTX0JVVFRPTiArIFwiJ11cIikuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLmFsbG93QWRkaW5nQmxvY2tzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5maW5kKFwiYnV0dG9uW25hbWU9J1wiICsgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0FERF9RVUVTVElPTl9CVVRUT04gKyBcIiddXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJidXR0b25bbmFtZT0nXCIgKyBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX1RJUF9CVVRUT04gKyBcIiddXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJidXR0b25bbmFtZT0nXCIgKyBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX0FTU0VTU01FTlRfQlVUVE9OICsgXCInXVwiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5maW5kKFwiYnV0dG9uW25hbWU9J1wiICsgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX1RPR0dMRV9CVVRUT04gKyBcIiddXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJidXR0b25bbmFtZT0nXCIgKyBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQUREX05PVEVfRk9SX1BST0dSRVNTX0JVVFRPTiArIFwiJ11cIikuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuJHNjb3BlLmFsbG93Rm9udENvbG9yQmxvY2spIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJidXR0b25bbmFtZT0nXCIgKyBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfRk9OVF9DT0xPUiArIFwiJ11cIikuaGlkZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChcImJ1dHRvbltuYW1lPSdcIiArIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9CQUNLR1JPVU5EX0ZPTlRfQ09MT1IgKyBcIiddXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJpbnB1dFtuYW1lPSdcIiArIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9GT05UX0NPTE9SICsgXCInXVwiKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy4kc2NvcGUuYWxsb3dBSSkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChcImJ1dHRvbltuYW1lPSdcIiArIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9BSV9DT05URU5UX0dFTkVSQVRJT05fQlVUVE9OICsgXCInXVwiKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9nZ2xlRnVsbHNjcmVlbihlbGVtZW50OiBFeHRlbmRlZEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgbGV0IGRvYzogRXh0ZW5kZWREb2N1bWVudCA9IDxFeHRlbmRlZERvY3VtZW50PiBkb2N1bWVudDtcclxuICAgICAgICBpZiAoIWRvYy5mdWxsc2NyZWVuRWxlbWVudCAmJiAgICAvLyBhbHRlcm5hdGl2ZSBzdGFuZGFyZCBtZXRob2RcclxuICAgICAgICAgICAgIWRvYy5tb3pGdWxsU2NyZWVuRWxlbWVudCAmJiAhZG9jLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50KSB7ICAvLyBjdXJyZW50IHdvcmtpbmcgbWV0aG9kc1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZG9jLmNhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgIGRvYy5jYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9jLm1vekNhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgIGRvYy5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9jLndlYmtpdENhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgIGRvYy53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBSaWNoVGV4dEVkaXRvckRpcmVjdGl2ZUZhY3RvcnkodXJsOiBVcmxTZXJ2aWNlKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJUmljaFRleHRFZGl0b3JEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIpIHtcclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogUmljaFRleHRFZGl0b3JDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGFsbG93RW1iZWRNYXRlcmlhbHM6IFwiQD92aHNFbWJlZE1hdGVyaWFsc1wiLFxyXG4gICAgICAgICAgICBhbGxvd0J1bmRsZXM6IFwiQD92aHNFbWJlZEJ1bmRsZXNcIixcclxuICAgICAgICAgICAgYWxsb3dTYW5kYm94OiBcIkA/dmhzRW1iZWRTYW5kYm94XCIsXHJcbiAgICAgICAgICAgIGFsbG93TG9hZEZyb21UZW1wbGF0ZTogXCJAP3Zoc0Zyb21UZW1wbGF0ZVwiLFxyXG4gICAgICAgICAgICBhbGxvd1VzZXJOb3RlczogXCJAP3Zoc1VzZXJOb3Rlc1wiLFxyXG4gICAgICAgICAgICBhbGxvd0FkZGluZ0Jsb2NrczogXCJAP3Zoc0FsbG93QWRkaW5nQmxvY2tzXCIsXHJcbiAgICAgICAgICAgIGFsbG93Rm9udENvbG9yQmxvY2s6IFwiQD92aHNBbGxvd0ZvbnRDb2xvckJsb2NrXCIsXHJcbiAgICAgICAgICAgIGFsbG93QUk6IFwiQD92aHNBbGxvd0FpXCIsXHJcbiAgICAgICAgICAgIGJ1bmRsZUlkOiBcIkA/dmhzQnVuZGxlSWRcIixcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQ6IFwiQD92aHNCdXNpbmVzc1VuaXRJZFwiLFxyXG4gICAgICAgICAgICBtb2RlbDogXCI9P3Zoc01vZGVsXCIsXHJcbiAgICAgICAgICAgIG1vZGVsQ2hhbmdlZDogXCI9P3Zoc01vZGVsQ2hhbmdlZFwiLFxyXG4gICAgICAgICAgICBjb3Vyc2VJZDogXCI9P3Zoc0NvdXJzZUlkXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zY2x1ZGU6IHRydWUsXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci5odG1sXCIpXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuUmljaFRleHRFZGl0b3JEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtJVGV4dEFuZ3VsYXJFdmVudERhdGF9IGZyb20gXCIuLi9tb2RlbHMvSVRleHRBbmd1bGFyRXZlbnREYXRhXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuLi9tb2RlbHMvRXZlbnRcIlxyXG5pbXBvcnQge0RvbVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvRG9tVXRpbHNcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi8uLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcbmltcG9ydCB7UmFuZG9tVXRpbHN9IGZyb20gXCIuLi8uLi91dGlscy9SYW5kb21VdGlsc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzQWRkQmxvY2tEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHZtPzogVmhzQWRkQmxvY2tDb250cm9sbGVyO1xyXG59XHJcblxyXG5lbnVtIEJsb2NrVHlwZSB7VGlwLCBRdWVzdGlvbiwgQXNzZXNzbWVudCwgVG9nZ2xlLCBUb2dnbGVDb250ZW50LCBOb3RlfVxyXG5lbnVtIEJsb2NrQ29udGVudFR5cGUge1BMQUlOX1RFWFQsIFJJQ0hfVEVYVH1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNBZGRCbG9ja0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIGJsb2NrSGVhZGVyOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIGJsb2NrQm9keTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBibG9ja1R5cGVzRW51bSA9IEJsb2NrVHlwZTtcclxuICAgIHB1YmxpYyBibG9ja0NvbnRlbnRUeXBlc0VudW0gPSBCbG9ja0NvbnRlbnRUeXBlO1xyXG4gICAgcHVibGljIGJsb2NrVHlwZTogQmxvY2tUeXBlO1xyXG4gICAgcHVibGljIGJsb2NrQ29udGVudFR5cGU6IEJsb2NrQ29udGVudFR5cGU7XHJcbiAgICBwdWJsaWMgdG9vbGJhciA9IFwiW1tdLFsnYm9sZCcsICdpdGFsaWNzJywgJ3VuZGVybGluZSddLFsndWwnLCAnb2wnXSxbXSxbXSxbJ3JlZG8nLCAndW5kbycsICdjbGVhciddXVwiO1xyXG5cclxuICAgIHByaXZhdGUgbGFzdEV2ZW50RGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhO1xyXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcbiAgICBwcml2YXRlIHJpY2hFZGl0b3JQYXJlbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXCIkc2NvcGVcIiwgXCIkdGltZW91dFwiLCBVcmxTZXJ2aWNlLk5BTUVdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzQWRkQmxvY2tEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgICRzY29wZS4kb24oRXZlbnQuVEFfQUREX1RJUCwgKGV2ZW50OiBuZy5JQW5ndWxhckV2ZW50LCBkYXRhOiBJVGV4dEFuZ3VsYXJFdmVudERhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFdmVudFByb2Nlc3NhYmxlKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrVHlwZSA9IEJsb2NrVHlwZS5UaXA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrQ29udGVudFR5cGUgPSBCbG9ja0NvbnRlbnRUeXBlLlBMQUlOX1RFWFQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFdmVudERhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0hlYWRlciA9IFwiVGVhY2hpbmcgVGlwc1wiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0JvZHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICRzY29wZS4kb24oRXZlbnQuVEFfQUREX1FVRVNUSU9OLCAoZXZlbnQ6IG5nLklBbmd1bGFyRXZlbnQsIGRhdGE6IElUZXh0QW5ndWxhckV2ZW50RGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0V2ZW50UHJvY2Vzc2FibGUoZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tUeXBlID0gQmxvY2tUeXBlLlF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0NvbnRlbnRUeXBlID0gQmxvY2tDb250ZW50VHlwZS5QTEFJTl9URVhUO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RXZlbnREYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tIZWFkZXIgPSBcIlF1ZXN0aW9uc1wiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0JvZHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICRzY29wZS4kb24oRXZlbnQuVEFfQUREX0FTU0VTU01FTlQsIChldmVudDogbmcuSUFuZ3VsYXJFdmVudCwgZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXZlbnRQcm9jZXNzYWJsZShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja1R5cGUgPSBCbG9ja1R5cGUuQXNzZXNzbWVudDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tDb250ZW50VHlwZSA9IEJsb2NrQ29udGVudFR5cGUuUklDSF9URVhUO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RXZlbnREYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tIZWFkZXIgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0JvZHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKEV2ZW50LlRBX0FERF9UT0dHTEUsIChldmVudDogbmcuSUFuZ3VsYXJFdmVudCwgZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXZlbnRQcm9jZXNzYWJsZShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja1R5cGUgPSBCbG9ja1R5cGUuVG9nZ2xlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0NvbnRlbnRUeXBlID0gQmxvY2tDb250ZW50VHlwZS5SSUNIX1RFWFQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFdmVudERhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0hlYWRlciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrQm9keSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oRXZlbnQuVEFfQUREX1RPR0dMRV9DT05URU5ULCAoZXZlbnQ6IG5nLklBbmd1bGFyRXZlbnQsIGRhdGE6IElUZXh0QW5ndWxhckV2ZW50RGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0V2ZW50UHJvY2Vzc2FibGUoZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tUeXBlID0gQmxvY2tUeXBlLlRvZ2dsZUNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrQ29udGVudFR5cGUgPSBCbG9ja0NvbnRlbnRUeXBlLlJJQ0hfVEVYVDtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEV2ZW50RGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrSGVhZGVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tCb2R5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5UQV9BRERfTk9URV9GT1JfUFJPR1JFU1MsIChldmVudDogbmcuSUFuZ3VsYXJFdmVudCwgZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXZlbnRQcm9jZXNzYWJsZShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja1R5cGUgPSBCbG9ja1R5cGUuTm90ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tDb250ZW50VHlwZSA9IEJsb2NrQ29udGVudFR5cGUuUExBSU5fVEVYVDtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEV2ZW50RGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrSGVhZGVyID0gXCJBZGQgaGVhZGVyIGZvciBub3RlXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrQm9keSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzQWRkQmxvY2tEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5yaWNoRWRpdG9yUGFyZW50ID0gRG9tVXRpbHMuZmluZFBhcmVudFdpdGhDbGFzcyh0aGlzLmVsZW1lbnQsIFwidmhzLXJpY2gtZWRpdG9yLWNvbnRlbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQmxvY2tBZGQoKSB7XHJcbiAgICAgICAgbGV0IGJsb2NrQ2xhc3MgPSBcIlwiO1xyXG4gICAgICAgIGxldCBodG1sID0gXCJcIjtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuYmxvY2tUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlLlF1ZXN0aW9uOlxyXG4gICAgICAgICAgICAgICAgYmxvY2tDbGFzcyA9IFwicXVlc3Rpb25cIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEJsb2NrVHlwZS5UaXA6XHJcbiAgICAgICAgICAgICAgICBibG9ja0NsYXNzID0gXCJ0aXBcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEJsb2NrVHlwZS5Bc3Nlc3NtZW50OlxyXG4gICAgICAgICAgICAgICAgYmxvY2tDbGFzcyA9IFwiYXNzZXNzbWVudFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlLlRvZ2dsZTpcclxuICAgICAgICAgICAgICAgIGJsb2NrQ2xhc3MgPSBcInRvZ2dsZVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlLlRvZ2dsZUNvbnRlbnQ6XHJcbiAgICAgICAgICAgICAgICBibG9ja0NsYXNzID0gXCJ0b2dnbGUgdG9nZ2xlLWFuc3dlclwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlLk5vdGU6XHJcbiAgICAgICAgICAgICAgICBibG9ja0NsYXNzID0gXCJub3RlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJsb2NrVHlwZSA9PT0gQmxvY2tUeXBlLlRvZ2dsZSB8fCB0aGlzLmJsb2NrVHlwZSA9PT0gQmxvY2tUeXBlLlRvZ2dsZUNvbnRlbnQpIHtcclxuICAgICAgICAgICAgaHRtbCA9IFwiPGRpdiBjbGFzcz0nXCIgKyBibG9ja0NsYXNzICsgXCInPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgaWQ9J3RvZ2dsZV9pbnB1dCcgdmFsdWU9J3NlbGVjdGVkJyBjbGFzcz0ndG9nZ2xlX2lucHV0Jz5cIiArXHJcbiAgICAgICAgICAgICAgICAvLyBcIjxsYWJlbCBmb3I9J3RvZ2dsZV9pbnB1dCc+PGI+XCIgKyB0aGlzLmJsb2NrSGVhZGVyICsgXCImbmJzcDs8L2I+PC9sYWJlbD48c3Bhbj4mbmJzcDs8L3NwYW4+Jm5ic3A7XCIgK1xyXG4gICAgICAgICAgICAgICAgXCI8bGFiZWwgZm9yPSd0b2dnbGVfaW5wdXQnPjxiPlwiICsgdGhpcy5ibG9ja0hlYWRlciArIFwiJm5ic3A7PC9iPjwvbGFiZWw+PHNwYW4+Jm5ic3A7PC9zcGFuPiZuYnNwO1wiICtcclxuICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0ndG9nZ2xlX2NvbnRlbnQnPjxwPjxpPlwiICsgdGhpcy5ibG9ja0JvZHkgKyBcIjwvaT48L3A+PC9kaXY+PC9kaXY+XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJsb2NrVHlwZSA9PT0gQmxvY2tUeXBlLk5vdGUpIHtcclxuICAgICAgICAgICAgaHRtbCA9IFwiPGRpdiBjbGFzcz0ndGEtdXNlci1ub3RlJyBpZD0nXCIgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwMDAwMDAwMCkgKyBcIic+XCIgK1xyXG4gICAgICAgICAgICAgICAgXCI8aDUgY2xhc3M9J3VzZXItbm90ZS1oZWFkZXInPlwiICsgdGhpcy5ibG9ja0hlYWRlciArIFwiPC9oNT5cIitcclxuICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0ndGEtYmxvY2sgXCIgKyBibG9ja0NsYXNzICsgXCInPlwiICsgdGhpcy5ibG9ja0JvZHkgKyBcIjwvZGl2PjwvZGl2Pjxicj5cIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBodG1sID0gXCI8ZGl2IGNsYXNzPSd0YS1ibG9jayBcIiArIGJsb2NrQ2xhc3MgKyBcIic+PHAgY2xhc3M9J2Jsb2NrLWhlYWRlcic+PGI+XCIgKyB0aGlzLmJsb2NrSGVhZGVyXHJcbiAgICAgICAgICAgICAgICArIFwiJm5ic3A7PC9iPjwvcD48cD5cIiArIHRoaXMuYmxvY2tCb2R5ICsgXCI8L3A+PC9kaXY+XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tIZWFkZXIgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYmxvY2tCb2R5ID0gXCJcIjtcclxuICAgICAgICB0aGlzLmxhc3RFdmVudERhdGEuY2FsbGJhY2tGdW5jdGlvbihodG1sKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VQb3B1cCgpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChcImRpdi5tb2RhbFwiKS5tb2RhbChcImhpZGVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0V2ZW50UHJvY2Vzc2FibGUoZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSB7XHJcbiAgICAgICAgaWYgKGRhdGEuZXZlbnRTb3VyY2VCdXR0b24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKGRhdGEuZXZlbnRTb3VyY2VCdXR0b24sIFwidmhzLXJpY2gtZWRpdG9yLWNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiBwYXJlbnQuaXModGhpcy5yaWNoRWRpdG9yUGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd1BvcHVwKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5maW5kKFwiZGl2Lm1vZGFsXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0FkZEJsb2NrRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNBZGRCbG9ja0RpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0FkZEJsb2NrQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNBZGRCbG9ja0NvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHt9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1hZGQtYmxvY2suaHRtbFwiKSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcblxyXG5WaHNBZGRCbG9ja0RpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dOyIsImltcG9ydCB7SVRleHRBbmd1bGFyRXZlbnREYXRhfSBmcm9tIFwiLi4vbW9kZWxzL0lUZXh0QW5ndWxhckV2ZW50RGF0YVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuLi9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtEb21VdGlsc30gZnJvbSBcIi4uLy4uL3V0aWxzL0RvbVV0aWxzXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNBZGRUYWJsZURpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgdm0/OiBWaHNBZGRUYWJsZUNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNBZGRUYWJsZUNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHRhYmxlUm93czogbnVtYmVyID0gMjtcclxuICAgIHB1YmxpYyB0YWJsZUNvbHVtbnM6IG51bWJlciA9IDI7XHJcblxyXG4gICAgcHJpdmF0ZSBsYXN0RXZlbnREYXRhOiBJVGV4dEFuZ3VsYXJFdmVudERhdGE7XHJcbiAgICBwcml2YXRlIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeTtcclxuICAgIHByaXZhdGUgcmljaEVkaXRvclBhcmVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcIiRzY29wZVwiLCBcIiR0aW1lb3V0XCIsIFVybFNlcnZpY2UuTkFNRV07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNBZGRUYWJsZURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5UQV9BRERfVEFCTEUsIChldmVudDogbmcuSUFuZ3VsYXJFdmVudCwgZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXZlbnRQcm9jZXNzYWJsZShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RXZlbnREYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNBZGRUYWJsZURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnJpY2hFZGl0b3JQYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKHRoaXMuZWxlbWVudCwgXCJ2aHMtcmljaC1lZGl0b3ItY29udGVudFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzRXZlbnRQcm9jZXNzYWJsZShkYXRhOiBJVGV4dEFuZ3VsYXJFdmVudERhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YS5ldmVudFNvdXJjZUJ1dHRvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IERvbVV0aWxzLmZpbmRQYXJlbnRXaXRoQ2xhc3MoZGF0YS5ldmVudFNvdXJjZUJ1dHRvbiwgXCJ2aHMtcmljaC1lZGl0b3ItY29udGVudFwiKTtcclxuICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsICYmIHBhcmVudC5pcyh0aGlzLnJpY2hFZGl0b3JQYXJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93UG9wdXAoKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJkaXYubW9kYWxcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVBvcHVwKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5maW5kKFwiZGl2Lm1vZGFsXCIpLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25UYWJsZUFkZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudGFibGVSb3dzIHx8IHRoaXMudGFibGVSb3dzIDwgMFxyXG4gICAgICAgICAgICB8fCAhdGhpcy50YWJsZUNvbHVtbnMgfHwgdGhpcy50YWJsZUNvbHVtbnMgPCAwKSB7XHJcbiAgICAgICAgICAgIGFsZXJ0KCdQbGVhc2Ugc3BlY2lmeSBwb3NpdGl2ZSByb3dzIGFuZCBjb2x1bW5zIGNvdW50Jyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBodG1sID0gXCI8cD48YnIvPjwvcD48dGFibGUgY2xhc3M9J2FjdGl2aXR5LXRhYmxlJz5cIjtcclxuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnRhYmxlUm93czsgcm93KyspIHtcclxuICAgICAgICAgICAgaHRtbCArPSBcIjx0cj5cIjtcclxuICAgICAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy50YWJsZUNvbHVtbnM7IHJvdysrKSB7XHJcbiAgICAgICAgICAgICAgICBodG1sICs9IFwiPHRkPlRleHQ8L3RkPlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGh0bWwgKz0gXCI8L3RyPlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBodG1sICs9IFwiPC90YWJsZT48cD48YnIvPjwvcD5cIjtcclxuICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcclxuICAgICAgICB0aGlzLnRhYmxlUm93cyA9IDI7XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbHVtbnMgPSAyO1xyXG4gICAgICAgIHRoaXMubGFzdEV2ZW50RGF0YS5jYWxsYmFja0Z1bmN0aW9uKGh0bWwpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzQWRkVGFibGVEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc0FkZFRhYmxlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzQWRkVGFibGVDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0FkZFRhYmxlQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge30sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLWFkZC10YWJsZS5odG1sXCIpLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc0FkZFRhYmxlRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7SVRleHRBbmd1bGFyRXZlbnREYXRhfSBmcm9tIFwiLi4vbW9kZWxzL0lUZXh0QW5ndWxhckV2ZW50RGF0YVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vbW9kZWxzL0V2ZW50XCJcclxuaW1wb3J0IHtEb21VdGlsc30gZnJvbSBcIi4uLy4uL3V0aWxzL0RvbVV0aWxzXCI7XHJcbmltcG9ydCB7VmhzVGVtcGxhdGVTZXJ2aWNlLCBJVmhzQnVuZGxlZFNjb3BlfSBmcm9tIFwiLi9WaHNUZW1wbGF0ZVNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc0NvbnZlcnRUZW1wbGF0ZURpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgSVZoc0J1bmRsZWRTY29wZSB7XHJcbiAgICB2bT86IFZoc0NvbnZlcnRUZW1wbGF0ZUNvbnRyb2xsZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNDb252ZXJ0VGVtcGxhdGVDb250cm9sbGVyIHtcclxuXHJcbiAgICBwcml2YXRlIGxhc3RFdmVudERhdGE6IElUZXh0QW5ndWxhckV2ZW50RGF0YTtcclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG4gICAgcHJpdmF0ZSBwcmV2aW91czogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG4gICAgcHJpdmF0ZSByaWNoRWRpdG9yUGFyZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgY29udmVydGVycyA9IHtcclxuICAgICAgICAxOiAodGVtcGxhdGU6SlF1ZXJ5KSA9PiB7VmhzQ29udmVydFRlbXBsYXRlQ29udHJvbGxlci5jb252ZXJ0VG9WMSh0ZW1wbGF0ZSl9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXCIkc2NvcGVcIiwgXCIkdGltZW91dFwiLCBWaHNUZW1wbGF0ZVNlcnZpY2UuTkFNRV07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNDb252ZXJ0VGVtcGxhdGVEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB0ZW1wbGF0ZUFwaTogVmhzVGVtcGxhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5UQV9DT05WRVJUX1RPX05FV19URU1QTEFURSwgKGV2ZW50OiBuZy5JQW5ndWxhckV2ZW50LCBkYXRhOiBJVGV4dEFuZ3VsYXJFdmVudERhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFdmVudFByb2Nlc3NhYmxlKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlybShcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1cGRhdGUgY3VycmVudCBjb250ZW50IHdpdGggbmV3IHRlbXBsYXRlP1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udmVydFRlbXBsYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnZlcnRUZW1wbGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBidW5kbGVGaWxlS2V5OiBzdHJpbmcgPSBcIlRFTVBMQVRFLmh0bWxcIjtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlQXBpLmdldFRlbXBsYXRlQ29udGVudChidW5kbGVGaWxlS2V5LCB0aGlzLiRzY29wZSkudGhlbihodG1sID0+IHtcclxuICAgICAgICAgICAgbGV0IG9yaWdpbjogSlF1ZXJ5ID0gdGhpcy5yaWNoRWRpdG9yUGFyZW50LmZpbmQoXCIudmhzLXRlbXBsYXRlXCIpLmZpcnN0KCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgb2xkVGVtcGxhdGU6IEpRdWVyeSA9IG9yaWdpbi5jbG9uZSgpO1xyXG4gICAgICAgICAgICBsZXQgbmV3VGVtcGxhdGU6IEpRdWVyeSA9ICQoJC5wYXJzZUhUTUwoaHRtbCkpO1xyXG5cclxuICAgICAgICAgICAgbGV0IG9sZFZlcnNpb246IG51bWJlciA9IFZoc0NvbnZlcnRUZW1wbGF0ZUNvbnRyb2xsZXIuZ2V0VGVtcGxhdGVWZXJzaW9uKG9sZFRlbXBsYXRlKTtcclxuICAgICAgICAgICAgbGV0IG5ld1ZlcnNpb246IG51bWJlciA9IFZoc0NvbnZlcnRUZW1wbGF0ZUNvbnRyb2xsZXIuZ2V0VGVtcGxhdGVWZXJzaW9uKG5ld1RlbXBsYXRlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuZXdWZXJzaW9uID09IDApIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KFwiVGVtcGxhdGUgZmlsZSBpcyBpbmNvcnJlY3QuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5ld1ZlcnNpb24gPD0gb2xkVmVyc2lvbikge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoXCJDdXJyZW50IHRlbXBsYXRlIGlzIHNhbWUgb3IgbmV3ZXIgdGhhbiBhdHRhY2hlZCBcXFwiVEVNUExBVEUuaHRtbFxcXCJcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFZoc0NvbnZlcnRUZW1wbGF0ZUNvbnRyb2xsZXIucnVuSW50ZXJtZWRpYXRlQ29udmVydGVycyhvbGRUZW1wbGF0ZSwgb2xkVmVyc2lvbiwgbmV3VmVyc2lvbik7XHJcbiAgICAgICAgICAgIFZoc0NvbnZlcnRUZW1wbGF0ZUNvbnRyb2xsZXIubWlncmF0ZURhdGEob2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcclxuICAgICAgICAgICAgb3JpZ2luLnJlcGxhY2VXaXRoKG5ld1RlbXBsYXRlKTtcclxuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJmaWxlLmNhbm5vdC5iZS5sb2FkZWRcIjpcclxuICAgICAgICAgICAgICAgICAgICBhbGVydChcIlRlbXBsYXRlIGZpbGUgY2Fubm90IGJlIGxvYWRlZC4uLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJmaWxlLm5vdC5mb3VuZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiVGVtcGxhdGUgZmlsZSBub3QgZm91bmQhIFVwbG9hZCB0ZW1wbGF0ZSBhcyBhdHRhY2hlZCBmaWxlIHdpdGggbmFtZSAnXCIgKyBidW5kbGVGaWxlS2V5ICsgXCInXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRlbXBsYXRlIHZlcnNpb24gZnJvbSBjdXN0b20gdmhzLXRwbC12ZXJzaW9uIGF0dHJpYnV0ZSBpZiBwcmVzZW50LFxyXG4gICAgICogcmV0dXJucyAwIG90aGVyd2lzZVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSBqUXVlcnkgd3JhcCBvdmVyIHRlbXBsYXRlXHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0ZW1wbGF0ZSB2ZXJzaW9uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIGdldFRlbXBsYXRlVmVyc2lvbih0ZW1wbGF0ZTogSlF1ZXJ5KTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGVtcGxhdGUuYXR0cihcInZocy10cGwtdmVyc2lvblwiKSAmJiBwYXJzZUludCh0ZW1wbGF0ZS5hdHRyKFwidmhzLXRwbC12ZXJzaW9uXCIpKSA+IDAgP1xyXG4gICAgICAgICAgICBwYXJzZUludCh0ZW1wbGF0ZS5hdHRyKFwidmhzLXRwbC12ZXJzaW9uXCIpKSA6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaWdyYXRlcyBhbGwgZGF0YSBmcm9tIHNvdXJjZSB0ZW1wbGF0ZSB0byB0YXJnZXQgdGVtcGxhdGUuXHJcbiAgICAgKiBBbGwgaW50ZXJtZWRpYXRlIGNvbnZlcnRlcnMgbXVzdCBiZSBhcHBsaWVkIGJlZm9yZSB0aGlzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzb3VyY2UgalF1ZXJ5IHdyYXAgb3ZlciBvbGQgdGVtcGxhdGUgd2l0aCBjb250ZW50XHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IGpRdWVyeSB3cmFwIG92ZXIgbmV3IHRlbXBsYXRlIHdpdGhvdXQgY29udGVudFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBtaWdyYXRlRGF0YShzb3VyY2U6IEpRdWVyeSwgdGFyZ2V0OiBKUXVlcnkpIHtcclxuICAgICAgICBsZXQgc291cmNlTGluZXNNYXA6IE1hcDxzdHJpbmcsIEpRdWVyeT4gPSBWaHNDb252ZXJ0VGVtcGxhdGVDb250cm9sbGVyLmJ1aWxkTGluZXNNYXAoc291cmNlKTtcclxuICAgICAgICBsZXQgdGFyZ2V0TGluZXNNYXA6IE1hcDxzdHJpbmcsIEpRdWVyeT4gPSBWaHNDb252ZXJ0VGVtcGxhdGVDb250cm9sbGVyLmJ1aWxkTGluZXNNYXAodGFyZ2V0KTtcclxuXHJcbiAgICAgICAgc291cmNlTGluZXNNYXAuZm9yRWFjaCgoc291cmNlOiBKUXVlcnksIGtleTogc3RyaW5nLCBtYXA6IE1hcDxzdHJpbmcsIEpRdWVyeT4pID0+IHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldExpbmVzTWFwLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0OkpRdWVyeSA9IHRhcmdldExpbmVzTWFwLmdldChrZXkpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnRleHQoc291cmNlLnRleHQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IHNvdXJjZUJsb2Nrc01hcDogTWFwPHN0cmluZywgSlF1ZXJ5PiA9IFZoc0NvbnZlcnRUZW1wbGF0ZUNvbnRyb2xsZXIuYnVpbGRCbG9ja3NNYXAoc291cmNlKTtcclxuICAgICAgICBsZXQgdGFyZ2V0QmxvY2tzTWFwOiBNYXA8c3RyaW5nLCBKUXVlcnk+ID0gVmhzQ29udmVydFRlbXBsYXRlQ29udHJvbGxlci5idWlsZEJsb2Nrc01hcCh0YXJnZXQpO1xyXG5cclxuICAgICAgICBzb3VyY2VCbG9ja3NNYXAuZm9yRWFjaCgoc291cmNlOiBKUXVlcnksIGtleTogc3RyaW5nLCBtYXA6IE1hcDxzdHJpbmcsIEpRdWVyeT4pID0+IHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldEJsb2Nrc01hcC5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldDpKUXVlcnkgPSB0YXJnZXRCbG9ja3NNYXAuZ2V0KGtleSk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuaHRtbChzb3VyY2UuaHRtbCgpKTtcclxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UucGFyZW50KFwiZWRpdGFibGUtYmxvY2tcIikuaGFzQ2xhc3MoXCJpbmFjdGl2ZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXJlbnQoXCJlZGl0YWJsZS1ibG9ja1wiKS5hZGRDbGFzcyhcImluYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGtleSAodmhzLXRwbC1saW5lIGF0dHJpYnV0ZSkgdG8gLmVkaXRhYmxlLWxpbmUgZWxlbWVudCBNYXBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGVcclxuICAgICAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBKUXVlcnk+fVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBidWlsZExpbmVzTWFwKHRlbXBsYXRlOiBKUXVlcnkpOiBNYXA8c3RyaW5nLCBKUXVlcnk+IHtcclxuICAgICAgICBsZXQgbWFwOiBNYXA8c3RyaW5nLCBKUXVlcnk+ID0gbmV3IE1hcDxzdHJpbmcsIEpRdWVyeT4oKTtcclxuICAgICAgICBsZXQgZWRpdGFibGVMaW5lczogSlF1ZXJ5ID0gdGVtcGxhdGUuZmluZChcIi5lZGl0YWJsZS1saW5lXCIpO1xyXG4gICAgICAgIGVkaXRhYmxlTGluZXMuZWFjaCgoaW5kZXg6IG51bWJlciwgZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgbGV0IGxpbmU6IEpRdWVyeSA9ICQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIGxldCBrZXk6IHN0cmluZyA9IGxpbmUuYXR0cihcInZocy10cGwtbGluZVwiKTtcclxuICAgICAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgICAgICAgbWFwLnNldChrZXksIGxpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1hcDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMga2V5ICh2aHMtdHBsLWJsb2NrIGF0dHJpYnV0ZSkgdG8gLmJsb2NrLWNvbnRlbnQgZWxlbWVudCBNYXBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGVcclxuICAgICAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBKUXVlcnk+fVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBidWlsZEJsb2Nrc01hcCh0ZW1wbGF0ZTogSlF1ZXJ5KTogTWFwPHN0cmluZywgSlF1ZXJ5PiB7XHJcbiAgICAgICAgbGV0IG1hcDogTWFwPHN0cmluZywgSlF1ZXJ5PiA9IG5ldyBNYXA8c3RyaW5nLCBKUXVlcnk+KCk7XHJcbiAgICAgICAgbGV0IGVkaXRhYmxlQmxvY2tzOiBKUXVlcnkgPSB0ZW1wbGF0ZS5maW5kKFwiLmVkaXRhYmxlLWJsb2NrXCIpO1xyXG4gICAgICAgIGVkaXRhYmxlQmxvY2tzLmVhY2goKGluZGV4OiBudW1iZXIsIGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBibG9jazogSlF1ZXJ5ID0gJChlbGVtZW50KTtcclxuICAgICAgICAgICAgbGV0IGtleTogc3RyaW5nID0gYmxvY2suYXR0cihcInZocy10cGwtYmxvY2tcIik7XHJcbiAgICAgICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIG1hcC5zZXQoa2V5LCBibG9jay5jaGlsZHJlbihcIi5ibG9jay1jb250ZW50XCIpLmZpcnN0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1hcDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJ1bnMgYWxsIGludGVybWVkaWF0ZSBjb252ZXJ0ZXJzIGZyb20gb2xkIHZlcnNpb24gdG8gbmV3IHZlcnNpb24uXHJcbiAgICAgKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZGF0YSBtaWdyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHRlbXBsYXRlIGpRdWVyeSB3cmFwIG92ZXIgb2xkIHZlcnNpb24gdGVtcGxhdGUgd2l0aCBpdCdzIGNvbnRlbnRcclxuICAgICAqIEBwYXJhbSBmcm9tIG9sZCB2ZXJzaW9uIG9mIHRlbXBsYXRlXHJcbiAgICAgKiBAcGFyYW0gdG8gdGFyZ2V0IHZlcnNpb25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcnVuSW50ZXJtZWRpYXRlQ29udmVydGVycyh0ZW1wbGF0ZTogSlF1ZXJ5LCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gZnJvbSsxOyBpIDw9IHRvOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKFZoc0NvbnZlcnRUZW1wbGF0ZUNvbnRyb2xsZXIuY29udmVydGVycy5oYXNPd25Qcm9wZXJ0eShTdHJpbmcoaSkpKSB7XHJcbiAgICAgICAgICAgICAgICBWaHNDb252ZXJ0VGVtcGxhdGVDb250cm9sbGVyLmNvbnZlcnRlcnNbU3RyaW5nKGkpXSh0ZW1wbGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm1lZGlhdGUgY29udmVydGVyIGZyb20gdjAgdG8gdjEuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHRlbXBsYXRlIGpRdWVyeSB3cmFwIG92ZXIgdjAgdGVtcGxhdGUgd2l0aCBpdCdzIGNvbnRlbnRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgY29udmVydFRvVjEodGVtcGxhdGU6IEpRdWVyeSk6IHZvaWQge1xyXG4gICAgICAgIC8vdG9kbzogaW1wbGVtZW50XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnJpY2hFZGl0b3JQYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKHRoaXMuZWxlbWVudCwgXCJ2aHMtcmljaC1lZGl0b3ItY29udGVudFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzRXZlbnRQcm9jZXNzYWJsZShkYXRhOiBJVGV4dEFuZ3VsYXJFdmVudERhdGEpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZGF0YS5ldmVudFNvdXJjZUJ1dHRvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKGRhdGEuZXZlbnRTb3VyY2VCdXR0b24sIFwidmhzLXJpY2gtZWRpdG9yLWNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiBwYXJlbnQuaXModGhpcy5yaWNoRWRpdG9yUGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzQ29udmVydFRlbXBsYXRlRGlyZWN0aXZlRmFjdG9yeSgpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgLy9ub2luc3BlY3Rpb24gSlNVbnVzZWRMb2NhbFN5bWJvbHNcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzQ29udmVydFRlbXBsYXRlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzQ29udmVydFRlbXBsYXRlQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdChlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvL25vaW5zcGVjdGlvbiBVbm5lY2Vzc2FyeUxvY2FsVmFyaWFibGVKU1xyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0NvbnZlcnRUZW1wbGF0ZUNvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgYnVuZGxlSWQ6IFwiQHZoc0J1bmRsZUlkXCJcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzQ29udmVydFRlbXBsYXRlRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG5dO1xyXG4iLCJpbXBvcnQge1JhbmRvbVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvUmFuZG9tVXRpbHNcIjtcclxuaW1wb3J0IHtEb21VdGlsc30gZnJvbSBcIi4uLy4uL3V0aWxzL0RvbVV0aWxzXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuXHJcbmltcG9ydCB7SUJ1bmRsZX0gZnJvbSBcIi4uLy4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVcIjtcclxuaW1wb3J0IHtJQnVuZGxlRmlsZX0gZnJvbSBcIi4uLy4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVGaWxlXCI7XHJcbmltcG9ydCB7QnVuZGxlRmlsZVR5cGVFbnVtfSBmcm9tIFwiLi4vLi4vYnVuZGxlcy9tb2RlbHMvQnVuZGxlRmlsZVR5cGVcIjtcclxuXHJcbmltcG9ydCB7UmljaFRleHRCaW5kQ29udHJvbGxlcn0gZnJvbSBcIi4vUmljaFRleHRCaW5kRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7SUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhfSBmcm9tIFwiLi8uLi9tb2RlbHMvSUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuLi9tb2RlbHMvRXZlbnRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBWaHNEb3dubG9hZEJ1bmRsZUNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9FTEVNRU5UX1NFTEVDVE9SID0gXCJhLnZocy1kb3dubG9hZC1idW5kbGVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfUkVOREVSX0ZVTkNUSU9OID0gKGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21waWxlOiBhbmd1bGFyLklDb21waWxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UpID0+IHtcclxuICAgICAgICB2YXIgaWQ6IHN0cmluZyA9IGVsZW1lbnQuYXR0cignaWQnKTtcclxuICAgICAgICBpZiAoIWlkKSB7XHJcbiAgICAgICAgICAgIGlkID0gUmFuZG9tVXRpbHMuZ2VuZXJhdGVSYW5kb21JZCgndmhzLWRvd25sb2FkLWJ1bmRsZV8nKTtcclxuICAgICAgICAgICAgZWxlbWVudC5hdHRyKFwiaWRcIiwgaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBodG1sOiBzdHJpbmcgPSAkKCc8cD48L3A+JykuYXBwZW5kKGVsZW1lbnQuY2xvbmUoKSkuaHRtbCgpO1xyXG4gICAgICAgICAgICAkKFwiI1wiICsgaWQpLnJlcGxhY2VXaXRoKCRjb21waWxlKGh0bWwpKCRyb290U2NvcGUpKVxyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgZmlsZUtleTogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5cclxuICAgIHByaXZhdGUgcmljaFRleHRCaW5kQ29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkaHR0cFwiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogbmcuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmF0dHIoJ2lkJywgJ215X2hyZWZfaWQnKTtcclxuICAgICAgICB0aGlzLmZpbGVLZXkgPSBlbGVtZW50LmF0dHIoXCJocmVmXCIpO1xyXG4gICAgICAgIC8vbG9hZCBidW5kbGVzIGFmdGVyIGVsZW1lbnQgYWRkIHRvIERPTVxyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgZXZlbnREYXRhOiBJRmluZFJpY2hUZXh0QmluZENvbnRyb2xsZXJFdmVudERhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICByaWNoVGV4dEVsZW1lbnRJZDogdGhpcy5maW5kUmljaFRleHRFbGVtZW50SWQoKSxcclxuICAgICAgICAgICAgICAgIHJpY2hUZXh0QmluZENvbnRyb2xsZXI6IG51bGxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoRXZlbnQuVEFfRklORF9SSUNIX1RFWFRfQklORF9DT05UUk9MTEVSLCBldmVudERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnJpY2hUZXh0QmluZENvbnRyb2xsZXIgPSBldmVudERhdGEucmljaFRleHRCaW5kQ29udHJvbGxlcjtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlKCk7XHJcbiAgICAgICAgfSwgMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQnVuZGxlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yaWNoVGV4dEJpbmRDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSaWNoVGV4dEJpbmQgQ29udHJvbGxlciBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbGVLZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJpY2hUZXh0QmluZENvbnRyb2xsZXIuZ2V0QnVuZGxlRmlsZSh0aGlzLmZpbGVLZXkpLnRoZW4oKGJ1bmRsZUZpbGU6IElCdW5kbGVGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChidW5kbGVGaWxlICYmIGJ1bmRsZUZpbGUudXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXR0cignaHJlZicsIGJ1bmRsZUZpbGUudXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5kUmljaFRleHRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgcmljaEVkaXRvcjogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5ID0gRG9tVXRpbHMuZmluZFBhcmVudFdpdGhBdHRyKHRoaXMuZWxlbWVudCwgXCJ2aHMtcmljaC10ZXh0LWJpbmRcIik7XHJcbiAgICAgICAgaWYgKCFyaWNoRWRpdG9yKSB7XHJcbiAgICAgICAgICAgIHJpY2hFZGl0b3IgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aEF0dHIodGhpcy5lbGVtZW50LCBcInRhLWJpbmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByaWNoRWRpdG9yID8gcmljaEVkaXRvci5hdHRyKCdpZCcpIDogbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0Rvd25sb2FkQnVuZGxlRGlyZWN0aXZlRmFjdG9yeSgpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0Rvd25sb2FkQnVuZGxlQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJDXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNEb3dubG9hZEJ1bmRsZUNvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCJcclxuXHJcbmltcG9ydCB7UmFuZG9tVXRpbHN9IGZyb20gXCIuLi8uLi91dGlscy9SYW5kb21VdGlsc1wiO1xyXG5pbXBvcnQge0RvbVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvRG9tVXRpbHNcIjtcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5cclxuaW1wb3J0IHtJQnVuZGxlRmlsZX0gZnJvbSBcIi4uLy4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVGaWxlXCI7XHJcbmltcG9ydCB7QnVuZGxlRmlsZVR5cGVFbnVtfSBmcm9tIFwiLi4vLi4vYnVuZGxlcy9tb2RlbHMvQnVuZGxlRmlsZVR5cGVcIjtcclxuXHJcbmltcG9ydCB7VmhzRW1iZWRkZWRNYXRlcmlhbENvbnRyb2xsZXJ9IGZyb20gXCIuLi9WaHNFbWJlZGRlZE1hdGVyaWFsRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7UmljaFRleHRCaW5kQ29udHJvbGxlcn0gZnJvbSBcIi4vUmljaFRleHRCaW5kRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7SUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhfSBmcm9tIFwiLi4vbW9kZWxzL0lGaW5kUmljaFRleHRCaW5kQ29udHJvbGxlckV2ZW50RGF0YVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vbW9kZWxzL0V2ZW50XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNFbWJlZGRlZEJ1bmRsZURpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgZmlsZUtleT86IHN0cmluZztcclxuICAgIHZtPzogVmhzRW1iZWRkZWRCdW5kbGVDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzRW1iZWRkZWRCdW5kbGVDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfRUxFTUVOVF9TRUxFQ1RPUiA9IFwicC50YS12aHMtZW1iZWRkZWQtYnVuZGxlLGltZy50YS12aHMtZW1iZWRkZWQtYnVuZGxlLGEudGEtdmhzLWVtYmVkZGVkLWJ1bmRsZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBFTUJFRERFRF9NQVRFUklBTFNfSU5fQ09OVEVOVF9TRUxFQ1RPUiA9IFwiZGl2LnZocy1lbWJlZGRlZC1tYXRlcmlhbFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBET1dOTE9BRF9CVU5ETEVTX0xJTktTX1NFTEVDVE9SID0gXCJhLnZocy1kb3dubG9hZC1idW5kbGVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfRElSRUNUSVZFX0hUTUwgPSBcIjxkaXYgdmhzLWVtYmVkZGVkLWJ1bmRsZSB2aHMtZmlsZS1rZXk9JzpmaWxlS2V5JyB0aXRsZT0nOnRpdGxlJyA6aW1hZ2VBdHRyaWJ1dGVzPjwvZGl2PlwiO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgRE9XTkxPQURfTElOS19IVE1MX1RFTVBMQVRFID0gXCI8ZGl2IGNsYXNzPSdlbWJlZGRlZC1idW5kbGUtZG93bmxvYWQnPjxhIGhyZWY9JzpocmVmJyB0YXJnZXQ9J19ibGFuayc+OnRpdGxlPC9hPjwvZGl2PlwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9SRU5ERVJfRlVOQ1RJT04gPSAoZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbXBpbGU6IGFuZ3VsYXIuSUNvbXBpbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSkgPT4ge1xyXG4gICAgICAgIGxldCBpZDogc3RyaW5nID0gUmFuZG9tVXRpbHMuZ2VuZXJhdGVSYW5kb21JZCgndmhzRW1iZWRkZWRCdW5kbGVfJyk7XHJcbiAgICAgICAgbGV0IGZpbGVLZXk6IHN0cmluZyA9IGVsZW1lbnQuaXMoXCJpbWdcIilcclxuICAgICAgICAgICAgPyBlbGVtZW50LmF0dHIoXCJhbHRcIilcclxuICAgICAgICAgICAgOiBlbGVtZW50LmlzKFwiYVwiKSAmJiBlbGVtZW50LmF0dHIoXCJ0aXRsZVwiKVxyXG4gICAgICAgICAgICAgICAgPyBlbGVtZW50LmF0dHIoXCJ0aXRsZVwiKSA6IGVsZW1lbnQudGV4dCgpO1xyXG4gICAgICAgIGlmIChmaWxlS2V5KSB7XHJcbiAgICAgICAgICAgZmlsZUtleSA9IGZpbGVLZXkudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaW1hZ2VBdHRyaWJ1dGVzID0gXCJcIjtcclxuICAgICAgICBpZiAoZWxlbWVudC5pcyhcImltZ1wiKSkge1xyXG4gICAgICAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPSBcIndpZHRoPSdcIiArIGVsZW1lbnQuYXR0cihcIndpZHRoXCIpICsgXCInIGhlaWdodD0nXCIgKyBlbGVtZW50LmF0dHIoXCJoZWlnaHRcIikgKyBcIidcIiArXHJcbiAgICAgICAgICAgICAgICBcIiBzdHlsZT0nXCIgKyAoZWxlbWVudC5hdHRyKFwic3R5bGVcIikgfHwgXCJcIikgKyBcIidcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHRpdGxlID0gXCJcIjtcclxuICAgICAgICBpZiAoZWxlbWVudC5pcyhcImFcIikpIHtcclxuICAgICAgICAgICAgdGl0bGUgPSBlbGVtZW50LnRleHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaXMoXCJhXCIpKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVwbGFjZVdpdGgoXCI8c3BhbiBpZD0nXCIgKyBpZCArIFwiJz48L3NwYW4+XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVwbGFjZVdpdGgoXCI8ZGl2IGlkPSdcIiArIGlkICsgXCInPjwvZGl2PlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAkKCcjJyArIGlkKS5yZXBsYWNlV2l0aCgkY29tcGlsZShcclxuICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoVmhzRW1iZWRkZWRCdW5kbGVDb250cm9sbGVyLlRBX0RJUkVDVElWRV9IVE1MKVxyXG4gICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmZpbGVLZXlcIiwgZmlsZUtleSlcclxuICAgICAgICAgICAgICAgICAgICAud2l0aChcIjppbWFnZUF0dHJpYnV0ZXNcIiwgaW1hZ2VBdHRyaWJ1dGVzKVxyXG4gICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOnRpdGxlXCIsIHRpdGxlKVxyXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpXHJcbiAgICAgICAgICAgICkoJHJvb3RTY29wZSkpO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgZmlsZUtleTogc3RyaW5nO1xyXG4gICAgcHVibGljIGJ1bmRsZUZpbGU6IElCdW5kbGVGaWxlO1xyXG5cclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5cclxuICAgIHByaXZhdGUgcmljaFRleHRCaW5kQ29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGNvbXBpbGVcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc0VtYmVkZGVkQnVuZGxlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IG5nLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGNvbXBpbGU6IGFuZ3VsYXIuSUNvbXBpbGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNFbWJlZGRlZEJ1bmRsZURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLmZpbGVLZXkgPSAkc2NvcGUuZmlsZUtleTtcclxuICAgICAgICAvL2xvYWQgYnVuZGxlcyBhZnRlciBlbGVtZW50IGFkZCB0byBET01cclxuICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnREYXRhOiBJRmluZFJpY2hUZXh0QmluZENvbnRyb2xsZXJFdmVudERhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICByaWNoVGV4dEVsZW1lbnRJZDogdGhpcy5maW5kUmljaFRleHRFbGVtZW50SWQoKSxcclxuICAgICAgICAgICAgICAgIHJpY2hUZXh0QmluZENvbnRyb2xsZXI6IG51bGxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoRXZlbnQuVEFfRklORF9SSUNIX1RFWFRfQklORF9DT05UUk9MTEVSLCBldmVudERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnJpY2hUZXh0QmluZENvbnRyb2xsZXIgPSBldmVudERhdGEucmljaFRleHRCaW5kQ29udHJvbGxlcjtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlKCk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRCdW5kbGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJpY2hUZXh0QmluZENvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JpY2hUZXh0QmluZCBDb250cm9sbGVyIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwcm9taXNlOiBuZy5JUHJvbWlzZTxhbnk+ID0gdGhpcy5yaWNoVGV4dEJpbmRDb250cm9sbGVyLmdldEJ1bmRsZUZpbGUodGhpcy5maWxlS2V5KVxyXG4gICAgICAgICAgICAudGhlbigoYnVuZGxlRmlsZTogSUJ1bmRsZUZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZSA9IGJ1bmRsZUZpbGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5idW5kbGVGaWxlICYmIHRoaXMuYnVuZGxlRmlsZS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5idW5kbGVGaWxlLnR5cGUgPT0gQnVuZGxlRmlsZVR5cGVFbnVtW0J1bmRsZUZpbGVUeXBlRW51bS5KU10gfHwgdGhpcy5idW5kbGVGaWxlLnR5cGUgPT0gQnVuZGxlRmlsZVR5cGVFbnVtW0J1bmRsZUZpbGVUeXBlRW51bS5IVE1MXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy5idW5kbGVGaWxlLnVybCwgdGhpcy5nZXRIdHRwQ29uZmlnKCkpLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYnVuZGxlRmlsZS50eXBlID09IEJ1bmRsZUZpbGVUeXBlRW51bVtCdW5kbGVGaWxlVHlwZUVudW0uQ1NTXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW9iaWxlU3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVuZGxlRmlsZS51cmwubGFzdEluZGV4T2YoXCJfbW9iaWxlLmNzc1wiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlU3RyaW5nID0gXCJtZWRpYT0naGFuZGhlbGQnXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlcGxhY2VXaXRoKFwiPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPSdcIiArIHRoaXMuYnVuZGxlRmlsZS51cmwgKyBcIicgXCIgKyBtb2JpbGVTdHJpbmcgKyBcIiA+XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5idW5kbGVGaWxlLnR5cGUgPT0gQnVuZGxlRmlsZVR5cGVFbnVtW0J1bmRsZUZpbGVUeXBlRW51bS5JTUFHRV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZChcIjxpbWcgc3JjPSdcIiArIHRoaXMuYnVuZGxlRmlsZS51cmwgKyBcIicgYWx0PScnIHdpZHRoPSdcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXR0cihcIndpZHRoXCIpICsgXCInIGhlaWdodD0nXCIgKyB0aGlzLmVsZW1lbnQuYXR0cihcImhlaWdodFwiKSArIFwiJyBzdHlsZT0nXCIgKyB0aGlzLmVsZW1lbnQuYXR0cihcInN0eWxlXCIpICsgXCInIC8+XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFZoc0VtYmVkZGVkQnVuZGxlQ29udHJvbGxlci5ET1dOTE9BRF9MSU5LX0hUTUxfVEVNUExBVEUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjp0aXRsZVwiLCB0aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpIHx8IHRoaXMuYnVuZGxlRmlsZS5rZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpocmVmXCIsIHRoaXMuYnVuZGxlRmlsZS51cmwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlcGxhY2VXaXRoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvd25sb2FkSWNvbiA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmRvd25sb2FkLWxpbmstaWNvblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb3dubG9hZEljb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb3dubG9hZEljb24uZmluZCgnYScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmF0dHIoXCJocmVmXCIsIHRoaXMuYnVuZGxlRmlsZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQnVuZGxlIGZpbGUgbm90IGZvdW5kOiAnICsgdGhpcy5maWxlS2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yaWNoVGV4dEJpbmRDb250cm9sbGVyLmxvYWRDb250ZW50U3luY2hyb25pemVkKHByb21pc2UpXHJcbiAgICAgICAgICAgIC50aGVuKChjb250ZW50OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmlsZUNvbnRlbnQoY29udGVudCwgdGhpcy5idW5kbGVGaWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzRmlsZUNvbnRlbnQoZmlsZUNvbnRlbnQ6IHN0cmluZywgYnVuZGxlRmlsZTogSUJ1bmRsZUZpbGUpIHtcclxuICAgICAgICBpZiAoZmlsZUNvbnRlbnQgJiYgYnVuZGxlRmlsZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGJ1bmRsZUZpbGUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBCdW5kbGVGaWxlVHlwZUVudW1bQnVuZGxlRmlsZVR5cGVFbnVtLkpTXTpcclxuICAgICAgICAgICAgICAgICAgICAkLmdsb2JhbEV2YWwoJ1widXNlIHN0cmljdFwiOycgKyBmaWxlQ29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEJ1bmRsZUZpbGVUeXBlRW51bVtCdW5kbGVGaWxlVHlwZUVudW0uSFRNTF06XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJhc2VQYXRoID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVuZGxlRmlsZS51cmwgJiYgYnVuZGxlRmlsZS51cmwuaW5kZXhPZihcIi9cIikgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVBhdGggPSBidW5kbGVGaWxlLnVybC5zdWJzdHIoMCwgYnVuZGxlRmlsZS51cmwubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbnRlbnQgPSB0aGlzLnJlcGxhY2VJbWFnZVBhdGhzKGZpbGVDb250ZW50LCBiYXNlUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3RoaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGh0bWxDb250ZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkgPSBhbmd1bGFyLmVsZW1lbnQoZmlsZUNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZXBsYWNlV2l0aChodG1sQ29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbENvbnRlbnQuZmluZChWaHNFbWJlZGRlZEJ1bmRsZUNvbnRyb2xsZXIuRU1CRURERURfTUFURVJJQUxTX0lOX0NPTlRFTlRfU0VMRUNUT1IpLmVhY2goKGluZGV4LCBlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdlbWJlZGRlZCBtYXRlcmlhbCBmb3VuZCBpbiBjb250ZW50ICcgKyBlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKGVsKS5hdHRyKCdpZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaHNFbWJlZGRlZE1hdGVyaWFsQ29udHJvbGxlci5UQV9DT01QSUxFX0FORF9SRVBMQUNFX0VMRU1FTlRfRlVOQ1RJT04oZWwsICQoZWwpLmF0dHIoJ2lkJyksIG51bGwsIHRoaXMuJGNvbXBpbGUsIHRoaXMuJHNjb3BlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sQ29udGVudC5maW5kKFZoc0VtYmVkZGVkQnVuZGxlQ29udHJvbGxlci5ET1dOTE9BRF9CVU5ETEVTX0xJTktTX1NFTEVDVE9SKS5lYWNoKChpbmRleCwgZWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGE6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSA9IDxhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk+ICQoZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaHJlZiA9IGEuYXR0cignaHJlZicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhyZWYgJiYgaHJlZi5pbmRleE9mKCdodHRwJykgIT0gMCAmJiBocmVmLmluZGV4T2YoXCIjXCIpICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmF0dHIoJ2hyZWYnLCBiYXNlUGF0aCArIGhyZWYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXBsYWNlSW1hZ2VQYXRocyhjb250ZW50OiBzdHJpbmcsIGJhc2VVcmw6IHN0cmluZykge1xyXG4gICAgICAgIGxldCByZWdleHA6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJzxpbWcoLio/KXNyYz1cIigoPyFodHRwKS4qKVwiJywgXCJtZ1wiKTtcclxuICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKHJlZ2V4cCwgJzxpbWckMXNyYz1cIicgKyBiYXNlVXJsICsgJyQyXCInKTtcclxuICAgICAgICByZWdleHAgPSBuZXcgUmVnRXhwKFwiPGltZyguKj8pc3JjPScoKD8haHR0cCkuKiknXCIsIFwibWdcIik7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZShyZWdleHAsICc8aW1nJDFzcmM9XCInICsgYmFzZVVybCArICckMlwiJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5kUmljaFRleHRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmljaEVkaXRvcjogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5ID0gRG9tVXRpbHMuZmluZFBhcmVudFdpdGhBdHRyKHRoaXMuZWxlbWVudCwgXCJ2aHMtcmljaC10ZXh0LWJpbmRcIik7XHJcbiAgICAgICAgaWYgKCFyaWNoRWRpdG9yKSB7XHJcbiAgICAgICAgICAgIHJpY2hFZGl0b3IgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aEF0dHIodGhpcy5lbGVtZW50LCBcInRhLWJpbmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByaWNoRWRpdG9yID8gcmljaEVkaXRvci5hdHRyKCdpZCcpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEh0dHBDb25maWcoKSA6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHsgY2FjaGU6IHRydWUsIHdpdGhvdXRBdXRob3JpemF0aW9uOiB0cnVlLCBpZ25vcmU0MDQ6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc0VtYmVkZGVkQnVuZGxlRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNFbWJlZGRlZEJ1bmRsZURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc0VtYmVkZGVkQnVuZGxlQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBRVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzRW1iZWRkZWRCdW5kbGVDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGZpbGVLZXk6IFwiQD92aHNGaWxlS2V5XCJcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzRW1iZWRkZWRCdW5kbGVEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTsiLCJpbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vbW9kZWxzL0V2ZW50XCJcclxuaW1wb3J0IHtJVGV4dEFuZ3VsYXJFdmVudERhdGF9IGZyb20gXCIuLi9tb2RlbHMvSVRleHRBbmd1bGFyRXZlbnREYXRhXCJcclxuaW1wb3J0IHtEb21VdGlsc30gZnJvbSBcIi4uLy4uL3V0aWxzL0RvbVV0aWxzXCI7XHJcbmltcG9ydCB7VmhzVGVtcGxhdGVTZXJ2aWNlLCBJVmhzQnVuZGxlZFNjb3BlfSBmcm9tIFwiLi9WaHNUZW1wbGF0ZVNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc0xvYWRGcm9tVGVtcGxhdGVEaXJlY3RpdmVTY29wZSBleHRlbmRzIElWaHNCdW5kbGVkU2NvcGUge1xyXG4gICAgdm0/OiBWaHNMb2FkRnJvbVRlbXBsYXRlQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc0xvYWRGcm9tVGVtcGxhdGVDb250cm9sbGVyIHtcclxuXHJcbiAgICBwcml2YXRlIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeTtcclxuICAgIHByaXZhdGUgcmljaEVkaXRvclBhcmVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgVmhzVGVtcGxhdGVTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNMb2FkRnJvbVRlbXBsYXRlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB0ZW1wbGF0ZUFwaTogVmhzVGVtcGxhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICAkc2NvcGUuJG9uKEV2ZW50LlRBX0xPQURfRlJPTV9URU1QTEFURSwgKGV2ZW50OiBuZy5JQW5ndWxhckV2ZW50LCBkYXRhOiBJVGV4dEFuZ3VsYXJFdmVudERhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFdmVudFByb2Nlc3NhYmxlKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlybShcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXBsYWNlIGN1cnJlbnQgY29udGVudCB3aXRoIHRlbXBsYXRlP1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1bmRsZUZpbGVLZXk6IHN0cmluZyA9IFwiVEVNUExBVEUuaHRtbFwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlQXBpLmdldFRlbXBsYXRlQ29udGVudChidW5kbGVGaWxlS2V5LCAkc2NvcGUpLnRoZW4oaHRtbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudGV4dEFuZ3VsYXIuJGVkaXRvcigpLmh0bWwgPSBodG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZpbGUuY2Fubm90LmJlLmxvYWRlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiVGVtcGxhdGUgZmlsZSBjYW5ub3QgYmUgbG9hZGVkLi4uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZpbGUubm90LmZvdW5kXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJUZW1wbGF0ZSBmaWxlIG5vdCBmb3VuZCEgVXBsb2FkIHRlbXBsYXRlIGFzIGF0dGFjaGVkIGZpbGUgd2l0aCBuYW1lICdcIiArIGJ1bmRsZUZpbGVLZXkgKyBcIidcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnJpY2hFZGl0b3JQYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKHRoaXMuZWxlbWVudCwgXCJ2aHMtcmljaC1lZGl0b3ItY29udGVudFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzRXZlbnRQcm9jZXNzYWJsZShkYXRhOiBJVGV4dEFuZ3VsYXJFdmVudERhdGEpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZGF0YS5ldmVudFNvdXJjZUJ1dHRvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKGRhdGEuZXZlbnRTb3VyY2VCdXR0b24sIFwidmhzLXJpY2gtZWRpdG9yLWNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiBwYXJlbnQuaXModGhpcy5yaWNoRWRpdG9yUGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzTG9hZEZyb21UZW1wbGF0ZURpcmVjdGl2ZUZhY3RvcnkoKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIC8vbm9pbnNwZWN0aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzXHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc0xvYWRGcm9tVGVtcGxhdGVEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNMb2FkRnJvbVRlbXBsYXRlQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdChlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvL25vaW5zcGVjdGlvbiBVbm5lY2Vzc2FyeUxvY2FsVmFyaWFibGVKU1xyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc0xvYWRGcm9tVGVtcGxhdGVDb250cm9sbGVyLFxyXG4gICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgIGJ1bmRsZUlkOiBcIkB2aHNCdW5kbGVJZFwiXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc0xvYWRGcm9tVGVtcGxhdGVEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbl07XHJcbiIsImltcG9ydCB7UmFuZG9tVXRpbHN9IGZyb20gXCIuLi8uLi91dGlscy9SYW5kb21VdGlsc1wiO1xyXG5pbXBvcnQge0RvbVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvRG9tVXRpbHNcIjtcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5pbXBvcnQge0lCdW5kbGVGaWxlfSBmcm9tIFwiLi4vLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZUZpbGVcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uLy4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuXHJcbmltcG9ydCB7UmljaFRleHRCaW5kQ29udHJvbGxlcn0gZnJvbSBcIi4vUmljaFRleHRCaW5kRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7SUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhfSBmcm9tIFwiLi4vbW9kZWxzL0lGaW5kUmljaFRleHRCaW5kQ29udHJvbGxlckV2ZW50RGF0YVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vbW9kZWxzL0V2ZW50XCI7XHJcbmltcG9ydCB7VmhzU2VsZWN0U2FuZGJveENvbnRyb2xsZXJ9IGZyb20gXCIuL1Zoc1NlbGVjdFNhbmRib3hEaXJlY3RpdmVcIjtcclxuaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuaW1wb3J0IElEZWZlcnJlZCA9IGFuZ3VsYXIuSURlZmVycmVkO1xyXG5pbXBvcnQge0NvdXJzZVNjb3JtQWRhcHRlcn0gZnJvbSBcIi4uLy4uL2NvdXJzZXMvQ291cnNlU2Nvcm1BZGFwdGVyXCI7XHJcbmltcG9ydCB7QXV0aFJvdXRlcn0gZnJvbSBcIi4uLy4uL3VybHMvQXV0aFJvdXRlclwiO1xyXG5pbXBvcnQge0NvdXJzZURldGFpbHNDb250cm9sbGVyfSBmcm9tIFwiLi4vLi4vY291cnNlcy9Db3Vyc2VEZXRhaWxzQ29udHJvbGxlclwiO1xyXG5kZWNsYXJlIHZhciBBUEk6IENvdXJzZVNjb3JtQWRhcHRlcjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc1NhbmRib3hEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHBhZ2VVcmw/OiBzdHJpbmc7XHJcbiAgICBmaWxlS2V5Pzogc3RyaW5nO1xyXG4gICAgc2hvd0FzUG9wdXA/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzU2FuZGJveENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9FTEVNRU5UX1NFTEVDVE9SID0gXCJpbWcudGEtdmhzLXNhbmRib3hcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfRElSRUNUSVZFX0hUTUwgPSBcIjxkaXYgdmhzLXNhbmRib3ggdmhzLXVybD0nOnVybCcgdmhzLWZpbGUta2V5PSc6ZmlsZUtleScgdmhzLXNob3ctYXMtcG9wdXA9JzpzaG93QXNQb3B1cCcgOmltYWdlQXR0cmlidXRlcz48L2Rpdj5cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfUkVOREVSX0ZVTkNUSU9OID0gKGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21waWxlOiBhbmd1bGFyLklDb21waWxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UpID0+IHtcclxuICAgICAgICBjb25zdCBpZDogc3RyaW5nID0gUmFuZG9tVXRpbHMuZ2VuZXJhdGVSYW5kb21JZCgndmhzU2FuZGJveF8nKTtcclxuICAgICAgICBjb25zdCBlbGVtZW50SWQ6IHN0cmluZyA9IGVsZW1lbnQuYXR0cihcImlkXCIpO1xyXG4gICAgICAgIGNvbnN0IGVuZEtleUluZGV4OiBudW1iZXIgPSBlbGVtZW50SWQuaW5kZXhPZihcIl9fX1wiKTtcclxuICAgICAgICBjb25zdCBzaG93QXNQb3B1cDogYm9vbGVhbiA9IGVsZW1lbnQuaGFzQ2xhc3MoVmhzU2VsZWN0U2FuZGJveENvbnRyb2xsZXIuU0FOREJPWF9BU19QT1BVUF9DTEFTUyk7XHJcbiAgICAgICAgbGV0IGZpbGVLZXk6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKGVuZEtleUluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgZmlsZUtleSA9IGVsZW1lbnRJZC5zdWJzdHJpbmcoMCwgZW5kS2V5SW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpbGVLZXkgPSBlbGVtZW50SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuYXR0cihcImhlaWdodFwiKTtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnQuYXR0cihcIndpZHRoXCIpO1xyXG4gICAgICAgIGNvbnN0IHN0eWxlID0gZWxlbWVudC5hdHRyKFwic3R5bGVcIikgfHwgXCJcIjtcclxuICAgICAgICBjb25zdCBpbWFnZUF0dHJpYnV0ZXMgPSAod2lkdGggPyBcIndpZHRoPSdcIiArIHdpZHRoICsgXCInXCI6IFwiXCIpICtcclxuICAgICAgICAgICAgKGhlaWdodCA/IFwiIGhlaWdodD0nXCIgKyBoZWlnaHQgKyBcIidcIiA6IFwiXCIpICtcclxuICAgICAgICAgICAgKHN0eWxlID8gXCIgc3R5bGU9J1wiICsgc3R5bGUgKyBcIidcIiA6IFwiXCIpO1xyXG4gICAgICAgIGVsZW1lbnQucmVwbGFjZVdpdGgoXCI8ZGl2IGlkPSdcIiArIGlkICsgXCInPjwvZGl2PlwiKTtcclxuICAgICAgICAkdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICQoJyMnICsgaWQpLnJlcGxhY2VXaXRoKCRjb21waWxlKFxyXG4gICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShWaHNTYW5kYm94Q29udHJvbGxlci5UQV9ESVJFQ1RJVkVfSFRNTClcclxuICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpmaWxlS2V5XCIsIFZoc1NhbmRib3hDb250cm9sbGVyLmlzTGluayhmaWxlS2V5KSA/IFwiXCIgOiBmaWxlS2V5KVxyXG4gICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOnVybFwiLCBWaHNTYW5kYm94Q29udHJvbGxlci5pc0xpbmsoZmlsZUtleSkgPyBmaWxlS2V5IDogXCJcIilcclxuICAgICAgICAgICAgICAgICAgICAud2l0aChcIjppbWFnZUF0dHJpYnV0ZXNcIiwgaW1hZ2VBdHRyaWJ1dGVzKVxyXG4gICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOnNob3dBc1BvcHVwXCIsIHNob3dBc1BvcHVwKVxyXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpXHJcbiAgICAgICAgICAgICkoJHJvb3RTY29wZSkpO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgZmlsZUtleTogc3RyaW5nO1xyXG4gICAgcHVibGljIGJ1bmRsZUZpbGU6IElCdW5kbGVGaWxlO1xyXG4gICAgcHVibGljIHNob3dBc1BvcHVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHdpZHRoOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGhlaWdodDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBpc0V4dGVybmFsVXJsOiBib29sZWFuO1xyXG5cclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG5cclxuICAgIHByaXZhdGUgcmljaFRleHRCaW5kQ29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIEF1dGhSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc1NhbmRib3hEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogbmcuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGF1dGhSb3V0ZXI6IEF1dGhSb3V0ZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNTYW5kYm94RGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIHRoaXMuZmlsZUtleSA9ICRzY29wZS5maWxlS2V5O1xyXG4gICAgICAgIHRoaXMuc2hvd0FzUG9wdXAgPSAkc2NvcGUuc2hvd0FzUG9wdXA7XHJcbiAgICAgICAgdGhpcy5pc0V4dGVybmFsVXJsID0gJHNjb3BlLnBhZ2VVcmwgIT0gbnVsbDtcclxuICAgICAgICAvL2xvYWQgYnVuZGxlcyBhZnRlciBlbGVtZW50IGFkZCB0byBET01cclxuICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnREYXRhOiBJRmluZFJpY2hUZXh0QmluZENvbnRyb2xsZXJFdmVudERhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICByaWNoVGV4dEVsZW1lbnRJZDogdGhpcy5maW5kUmljaFRleHRFbGVtZW50SWQoKSxcclxuICAgICAgICAgICAgICAgIHJpY2hUZXh0QmluZENvbnRyb2xsZXI6IG51bGxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoRXZlbnQuVEFfRklORF9SSUNIX1RFWFRfQklORF9DT05UUk9MTEVSLCBldmVudERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnJpY2hUZXh0QmluZENvbnRyb2xsZXIgPSBldmVudERhdGEucmljaFRleHRCaW5kQ29udHJvbGxlcjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZUtleSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHNjb3BlLnBhZ2VVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlSUZyYW1lQW5kV2FpdEl0KCRzY29wZS5wYWdlVXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDApO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dBc1BvcHVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRvbihFdmVudC5TQU5EQk9YX1JFT1BFTl9QT1BVUCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVJRnJhbWVBbmRXYWl0SXQodGhpcy5idW5kbGVGaWxlID8gdGhpcy5idW5kbGVGaWxlLnVybCA6ICRzY29wZS5wYWdlVXJsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJG9uKEV2ZW50LkNPVVJTRV9UT0dHTEVfTUVOVV9WSVNJQklMSVRZLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFNhbmRib3hIZWlnaHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0U2FuZGJveEhlaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFNhbmRib3hIZWlnaHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZEJ1bmRsZSgpOiBJUHJvbWlzZTxJQnVuZGxlRmlsZT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yaWNoVGV4dEJpbmRDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSaWNoVGV4dEJpbmQgQ29udHJvbGxlciBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLnJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwcm9taXNlOiBJUHJvbWlzZTxhbnk+ID0gdGhpcy5yaWNoVGV4dEJpbmRDb250cm9sbGVyLmdldEJ1bmRsZUZpbGUodGhpcy5maWxlS2V5KVxyXG4gICAgICAgICAgICAudGhlbigoYnVuZGxlRmlsZTogSUJ1bmRsZUZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZSA9IGJ1bmRsZUZpbGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5idW5kbGVGaWxlICYmIHRoaXMuYnVuZGxlRmlsZS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVJRnJhbWVBbmRXYWl0SXQodGhpcy5idW5kbGVGaWxlLnVybCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmljaFRleHRCaW5kQ29udHJvbGxlci5sb2FkQ29udGVudFN5bmNocm9uaXplZChwcm9taXNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUlGcmFtZUFuZFdhaXRJdCh1cmw6IHN0cmluZyk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGxldCBpZnJhbWVMb2FkRGVmZXJyZWQ6IElEZWZlcnJlZDxhbnk+ID0gdGhpcy4kcS5kZWZlcigpO1xyXG4gICAgICAgIGNvbnN0IG1vZGFsSWQgPSBSYW5kb21VdGlscy5nZW5lcmF0ZVJhbmRvbUlkKFwibW9kYWxfXCIpO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5lbGVtZW50LmF0dHIoXCJoZWlnaHRcIikgPyBwYXJzZUludCh0aGlzLmVsZW1lbnQuYXR0cihcImhlaWdodFwiKSkgOiBudWxsO1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLmVsZW1lbnQuYXR0cihcIndpZHRoXCIpID8gcGFyc2VJbnQodGhpcy5lbGVtZW50LmF0dHIoXCJ3aWR0aFwiKSkgOiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGNzcyA9IHRoaXMuZWxlbWVudC5hdHRyKFwic3R5bGVcIikgfHwgXCJcIjtcclxuICAgICAgICBsZXQgdGFyZ2V0Q3NzID0gY3NzO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dBc1BvcHVwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuY3JlYXRlSUZyYW1lKHVybCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGNzcyk7XHJcbiAgICAgICAgICAgIGxldCBvcGVuUG9wdXAgPSB0aGlzLnNob3dBc1BvcHVwICYmIHRoaXMuJGxvY2F0aW9uLnBhdGgoKS5pbmRleE9mKCd1cGRhdGUnKSA8IDA7XHJcbiAgICAgICAgICAgIGlmIChvcGVuUG9wdXApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVNb2RhbChtb2RhbElkLCBpZnJhbWUpXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gJChgIyR7bW9kYWxJZH0gLmNsb3NlYCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2xvc2VCdXR0b24ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VCdXR0b24ub24oJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi5zZWFyY2goQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuRlVMTF9TQ1JFRU5fUEFSQU1FVEVSLCBudWxsKS5yZXBsYWNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJChcIiNcIiArIG1vZGFsSWQpLm1vZGFsKHtcclxuICAgICAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAgICAgIGtleWJvYXJkOiB0cnVlXHJcbiAgICAgICAgICAgIH0pLm9uKFwic2hvdy5icy5tb2RhbFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5tb2RhbC1ib2R5LCAubW9kYWwtZGlhbG9nJykuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogKHRoaXMud2lkdGggPyB0aGlzLndpZHRoICsgXCJweFwiIDogXCJhdXRvXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogKHRoaXMuaGVpZ2h0ID8gdGhpcy5oZWlnaHQgKyBcInB4XCIgOiBcImF1dG9cIilcclxuICAgICAgICAgICAgICAgICAgICAvLyAsIFwibWF4LWhlaWdodFwiOiBcIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLm1vZGFsKFwic2hvd1wiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoY3NzLmluZGV4T2YoXCJ3aWR0aDpcIikgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldENzcyArPSBcIiB3aWR0aDogMTAwJTtcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3NzLmluZGV4T2YoXCJoZWlnaHQ6XCIpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRDc3MgKz0gXCIgaGVpZ2h0OiAxMDAlO1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuY3JlYXRlSUZyYW1lKHVybCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRhcmdldENzcyk7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmQoaWZyYW1lKVxyXG4gICAgICAgICAgICAgICAgLmZpbmQoJ2lmcmFtZScpXHJcbiAgICAgICAgICAgICAgICAuY3NzKHtib3JkZXI6ICdub25lJ30pXHJcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoXCJzYW5kYm94LWlubGluZVwiKVxyXG4gICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoXCJ3aWR0aFwiKVxyXG4gICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoXCJoZWlnaHRcIilcclxuICAgICAgICAgICAgICAgIC5jc3Moe3dpZHRoOiBcIjEwMCVcIn0pO1xyXG4gICAgICAgICAgICB0aGlzLmFkanVzdFNhbmRib3hIZWlnaHQoKTtcclxuICAgICAgICAgICAgYW5ndWxhci5lbGVtZW50KHdpbmRvdykuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RTYW5kYm94SGVpZ2h0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmVsZW1lbnQod2luZG93KS51bmJpbmQoJ3Jlc2l6ZScpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZWxlbWVudC5maW5kKCdpZnJhbWUnKS5vbihcImxvYWRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZnJhbWVMb2FkRGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yaWNoVGV4dEJpbmRDb250cm9sbGVyLmJ1c2luZXNzVW5pdCAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMucmljaFRleHRCaW5kQ29udHJvbGxlci5idXNpbmVzc1VuaXQuZGlzcGxheVNjb3JtVmlhRG9tYWluQWRkcmVzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRJbml0aWFsaXplKHRhcmdldENzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGlmcmFtZUxvYWREZWZlcnJlZC5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRqdXN0U2FuZGJveEhlaWdodCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMud2lkdGggfHwgIXRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGN1cnJlbnRXaWR0aCA9IHRoaXMuZWxlbWVudC5pbm5lcldpZHRoKCk7XHJcbiAgICAgICAgbGV0IHRhcmdldEhlaWdodCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4ID9cclxuICAgICAgICAgICAgdGhpcy5oZWlnaHQgLSAxNzBcclxuICAgICAgICAgICAgOiB0aGlzLmhlaWdodCAvIHRoaXMud2lkdGggKiBjdXJyZW50V2lkdGg7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmNzcyh7aGVpZ2h0OiB0YXJnZXRIZWlnaHQgKyBcInB4XCJ9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwYXJlbnRJbml0aWFsaXplKGNzcz86IHN0cmluZykge1xyXG4gICAgICAgIGxldCBmcmFtZSA9ICg8SFRNTElGcmFtZUVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Zocy1zY29ybS1pZnJhbWUnKSk7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgbGV0IHVybCA9IHRoaXMuYnVuZGxlRmlsZSA/IHRoaXMuYnVuZGxlRmlsZS51cmwgOiBmcmFtZS5zcmM7XHJcbiAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgICAgIGNzczogY3NzLFxyXG4gICAgICAgICAgICBzY29ybURhdGE6IEFQSS5pbml0U2Nvcm1EYXRhKClcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChmcmFtZS5jb250ZW50V2luZG93KSB7XHJcbiAgICAgICAgICAgIGZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2Uob2JqLCAnKicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24oZXZlbnQ6IE1lc3NhZ2VFdmVudCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc2Nyb21EYXRhIGxpc3RlbmVkJyk7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50X2lkID09PSAndXBkYXRlU3RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhldmVudC5kYXRhLmRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVJRnJhbWUodXJsOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBjc3M/OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0V4dGVybmFsVXJsKSB7XHJcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZihcImdvb2dsZVwiKSA+PSAwICYmIHVybC5pbmRleE9mKFwiL3B1Yj9cIikgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShcIi9wdWI/XCIsIFwiL2VtYmVkP1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gXCI8aWZyYW1lIFwiICtcclxuICAgICAgICAgICAgICAgIFwidGl0bGU9J0xlYXJuaW5nIGNvbnRlbnQnIGlkPSd2aHMtc2Nvcm0taWZyYW1lJyBjbGFzcz0nZG9jJ1wiICtcclxuICAgICAgICAgICAgICAgIFwiIHJlZmVycmVycG9saWN5PSdvcmlnaW4nICBzcmM9J1wiICsgdXJsICArICh3aWR0aCA/IFwiJyB3aWR0aD0nXCIgKyB3aWR0aCA6IFwiXCIpICsgKGhlaWdodCA/IFwiJyBoZWlnaHQ9J1wiICsgaGVpZ2h0IDogXCJcIiApKyBcIicgXCIgK1xyXG4gICAgICAgICAgICAgICAgXCIgYWxsb3dmdWxsc2NyZWVuPSd0cnVlJyBtb3phbGxvd2Z1bGxzY3JlZW49J3RydWUnIHdlYmtpdGFsbG93ZnVsbHNjcmVlbj0ndHJ1ZScgXCIgK1xyXG4gICAgICAgICAgICAgICAgXCJzdHlsZT0nXCIgKyAoY3NzIHx8IFwiXCIpICsgXCInID48L2lmcmFtZT5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5yaWNoVGV4dEJpbmRDb250cm9sbGVyLmJ1c2luZXNzVW5pdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucmljaFRleHRCaW5kQ29udHJvbGxlci5idXNpbmVzc1VuaXQuZGlzcGxheVNjb3JtVmlhRG9tYWluQWRkcmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0cmluZ3MgPSB1cmwuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRvbWFpbiA9IHN0cmluZ3NbMF0gKyBcIi8vXCIgKyBzdHJpbmdzWzJdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiPGlmcmFtZSBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZT0nTGVhcm5pbmcgY29udGVudCcgXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFwiIHNhbmRib3g9J2FsbG93LXNjcmlwdHMgYWxsb3ctcG9wdXBzIGFsbG93LW1vZGFscyBhbGxvdy1wcmVzZW50YXRpb24gYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctZm9ybXMgYWxsb3ctcG9wdXBzLXRvLWVzY2FwZS1zYW5kYm94J1wiICtcclxuICAgICAgICAgICAgICAgICAgICBcInJlZmVycmVycG9saWN5PSdvcmlnaW4nIGlkPSd2aHMtc2Nvcm0taWZyYW1lJyBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzcmM9J1wiICsgZG9tYWluICsgXCIvY2xpZW50L3ZpZXdzL2NvbXBvbmVudHMvc2Nvcm1fbG9hZGVyLWVuX1VTLmh0bWwnIFwiICtcclxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlPSdcIiArIChjc3MgfHwgXCJcIikgKyBcIicgPjwvaWZyYW1lPlwiO1xyXG4gICAgICAgICAgICB9IGVsc2UgIHtcclxuICAgICAgICAgICAgICAgIGxldCBzdHJpbmdzID0gdXJsLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSB1cmwucmVwbGFjZShzdHJpbmdzWzBdICsgXCIvL1wiICsgc3RyaW5nc1syXSwgdGhpcy4kd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI8aWZyYW1lIFwiICtcclxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlPSdMZWFybmluZyBjb250ZW50J1wiICtcclxuICAgICAgICAgICAgICAgICAgICAvLyBcIiBzYW5kYm94PSdhbGxvdy1zY3JpcHRzIGFsbG93LXBvcHVwcyBhbGxvdy1tb2RhbHMgYWxsb3ctcHJlc2VudGF0aW9uIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LWZvcm1zIGFsbG93LXBvcHVwcy10by1lc2NhcGUtc2FuZGJveCdcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCIgcmVmZXJyZXJwb2xpY3k9J29yaWdpbicgIHNyYz0nXCIgKyByZXN1bHQgKyAod2lkdGggPyBcIicgd2lkdGg9J1wiICsgd2lkdGggOiBcIlwiKSArIChoZWlnaHQgPyBcIicgaGVpZ2h0PSdcIiArIGhlaWdodCA6IFwiXCIgKSsgXCInIFwiICtcclxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlPSdcIiArIChjc3MgfHwgXCJcIikgKyBcIicgPjwvaWZyYW1lPlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIjxpZnJhbWUgXCIgK1xyXG4gICAgICAgICAgICBcInRpdGxlPSdMZWFybmluZyBjb250ZW50J1wiICtcclxuICAgICAgICAgICAgLy8gXCIgc2FuZGJveD0nYWxsb3ctc2NyaXB0cyBhbGxvdy1wb3B1cHMgYWxsb3ctbW9kYWxzIGFsbG93LXByZXNlbnRhdGlvbiBhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1mb3JtcyBhbGxvdy1wb3B1cHMtdG8tZXNjYXBlLXNhbmRib3gnXCIgK1xyXG4gICAgICAgICAgICBcIiByZWZlcnJlcnBvbGljeT0nb3JpZ2luJyAgc3JjPSdcIiArIHVybCArICh3aWR0aCA/IFwiJyB3aWR0aD0nXCIgKyB3aWR0aCA6IFwiXCIpICsgKGhlaWdodCA/IFwiJyBoZWlnaHQ9J1wiICsgaGVpZ2h0IDogXCJcIiApKyBcIicgXCIgK1xyXG4gICAgICAgICAgICBcInN0eWxlPSdcIiArIChjc3MgfHwgXCJcIikgKyBcIicgPjwvaWZyYW1lPlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlTW9kYWwoaWQsIGJvZHkpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBtb2RhbCA9IGA8ZGl2IGNsYXNzPSdzYW5kYm94LXBvcHVwIG1vZGFsIGZhZGUgaW4nIGlkPWAgKyBpZCArIFwiIHJvbGU9J2RpYWxvZyc+PGRpdiBjbGFzcz0nbW9kYWwtZGlhbG9nJyByb2xlPSdkb2N1bWVudCc+XCIgK1xyXG4gICAgICAgICAgICBcIjxkaXYgY2xhc3M9J21vZGFsLWNvbnRlbnQnPjxkaXYgY2xhc3M9J21vZGFsLWhlYWRlcic+PGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSdjbG9zZScgZGF0YS1kaXNtaXNzPSdtb2RhbCc+JnRpbWVzOzwvYnV0dG9uPjwvZGl2PlwiICtcclxuICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdtb2RhbC1ib2R5Jz5cIiArIGJvZHkgKyBcIjwvZGl2PlwiICtcclxuICAgICAgICAgICAgXCI8L2Rpdj48L2Rpdj48L2Rpdj5cIjtcclxuICAgICAgICBpZiAodGhpcy5zaG93QXNQb3B1cCkge1xyXG4gICAgICAgICAgICBtb2RhbCArPSBcIjxhIGNsYXNzPSdyZWxhdW5jaC1zY29ybScgIGRhdGEtdG9nZ2xlPSdtb2RhbCcgZGF0YS10YXJnZXQ9JyNcIiArIGlkICsgXCInPlJlbGF1bmNoPC9hPlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbW9kYWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5kUmljaFRleHRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmljaEVkaXRvcjogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5ID0gRG9tVXRpbHMuZmluZFBhcmVudFdpdGhBdHRyKHRoaXMuZWxlbWVudCwgXCJ2aHMtcmljaC10ZXh0LWJpbmRcIik7XHJcbiAgICAgICAgaWYgKCFyaWNoRWRpdG9yKSB7XHJcbiAgICAgICAgICAgIHJpY2hFZGl0b3IgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aEF0dHIodGhpcy5lbGVtZW50LCBcInRhLWJpbmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByaWNoRWRpdG9yID8gcmljaEVkaXRvci5hdHRyKCdpZCcpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBpc0xpbmsodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiAodmFsdWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiaHR0cDovL1wiKSA9PSAwIHx8IHZhbHVlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImh0dHBzOi8vXCIpID09IDApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzU2FuZGJveERpcmVjdGl2ZUZhY3RvcnkoKTogYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGZ1bmN0aW9uIGxpbmsoJHNjb3BlOiBJVmhzU2FuZGJveERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc1NhbmRib3hDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFFXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNTYW5kYm94Q29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBwYWdlVXJsOiBcIkA/dmhzVXJsXCIsXHJcbiAgICAgICAgICAgIGZpbGVLZXk6IFwiQD92aHNGaWxlS2V5XCIsXHJcbiAgICAgICAgICAgIHNob3dBc1BvcHVwOiBcIj0/dmhzU2hvd0FzUG9wdXBcIlxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gZGlyZWN0aXZlO1xyXG59XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIlxyXG5cclxuaW1wb3J0IHtJR3JpZE1vZGVsLCBHcmlkTW9kZWx9IGZyb20gXCIuLi8uLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcblxyXG5pbXBvcnQge0lCdW5kbGVGaWxlfSBmcm9tIFwiLi4vLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZUZpbGVcIjtcclxuaW1wb3J0IHtCdW5kbGVGaWxlVHlwZUVudW19IGZyb20gXCIuLi8uLi9idW5kbGVzL21vZGVscy9CdW5kbGVGaWxlVHlwZVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vbW9kZWxzL0V2ZW50XCJcclxuaW1wb3J0IHtJVGV4dEFuZ3VsYXJFdmVudERhdGF9IGZyb20gXCIuLi9tb2RlbHMvSVRleHRBbmd1bGFyRXZlbnREYXRhXCJcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5pbXBvcnQge0RvbVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvRG9tVXRpbHNcIjtcclxuaW1wb3J0IHtCdW5kbGVTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYnVuZGxlcy9CdW5kbGVTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZURpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgdm0/OiBWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZU1hdGVyaWFsQ29udHJvbGxlcjtcclxuICAgIGJ1bmRsZUlkPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVNYXRlcmlhbENvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgRU1CRURERURfQlVORExFX1RBX0hUTUw6IHN0cmluZyA9ICc8cCBjbGFzcz1cInRhLXZocy1lbWJlZGRlZC1idW5kbGVcIj46YnVuZGxlS2V5PC9wPic7XHJcbiAgICBwdWJsaWMgc3RhdGljIEVNQkVEREVEX1NUWUxFRF9JTUdfVEFfSFRNTDogc3RyaW5nID0gJzxpbWcgc3JjPVwiOmltYWdlU3JjXCIgd2lkdGg9XCJcIiBoZWlnaHQ9XCJcIiBhbHQ9XCI6YnVuZGxlS2V5XCIgc3R5bGU9XCI6c3R5bGVLZXlcIi8+JztcclxuICAgIHB1YmxpYyBzdGF0aWMgRU1CRURERURfSU1HX1RBX0hUTUxfQ09VUlNFUzogc3RyaW5nID0gJzxpbWcgc3JjPVwiOmltYWdlU3JjXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiXCIgYWx0PVwiOmJ1bmRsZUtleVwiLz4nO1xyXG4gICAgcHVibGljIHN0YXRpYyBFTUJFRERFRF9JTUdfVEFfSFRNTDogc3RyaW5nID0gJzxkaXY+PGltZyBjbGFzcz1cInRhLXZocy1lbWJlZGRlZC1idW5kbGVcIiBzcmM9XCI6aW1hZ2VTcmNcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCJcIiBhbHQ9XCI6YnVuZGxlS2V5XCIvPjwvZGl2Pic7XHJcbiAgICBwdWJsaWMgc3RhdGljIEVNQkVEREVEX0xJTktfVEFfSFRNTDogc3RyaW5nID0gJzxhIGNsYXNzPVwidGEtdmhzLWVtYmVkZGVkLWJ1bmRsZVwiIHRpdGxlPVwiOmJ1bmRsZUtleVwiIGhyZWY9XCI6aHJlZlwiIHRhcmdldD1cIl9ibGFua1wiPjpidW5kbGVLZXk8L2E+JyArXHJcbiAgICAgICAgJzxzcGFuPiZuYnNwOzwvc3Bhbj4mbmJzcDsnO1xyXG5cclxuICAgIHB1YmxpYyBidW5kbGVGaWxlc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQnVuZGxlRmlsZT47XHJcbiAgICBwcml2YXRlIGxhc3RFdmVudERhdGE6IElUZXh0QW5ndWxhckV2ZW50RGF0YTtcclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG4gICAgcHJpdmF0ZSByaWNoRWRpdG9yUGFyZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcbiAgICBwcml2YXRlIGxvYWRQb3B1cENvbnRlbnQ6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBCdW5kbGVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1bmRsZUFwaTogQnVuZGxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICAkc2NvcGUuJG9uKEV2ZW50LlRBX1NFTEVDVF9FTUJFRERFRF9CVU5ETEUsIChldmVudDogbmcuSUFuZ3VsYXJFdmVudCwgZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXZlbnRQcm9jZXNzYWJsZShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUG9wdXBDb250ZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEV2ZW50RGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChcImRpdi5tb2RhbFwiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUJ1bmRsZUZpbGU+KCRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9idW5kbGVzL1wiICsgJHNjb3BlLmJ1bmRsZUlkICsgXCIvZmlsZXNcIikpKTtcclxuICAgICAgICB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsLnBhZ2VTaXplID0gNjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgkc2NvcGU6IElWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnJpY2hFZGl0b3JQYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKHRoaXMuZWxlbWVudCwgXCJ2aHMtcmljaC1lZGl0b3ItY29udGVudFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CdW5kbGVGaWxlU2VsZWN0KGJ1bmRsZUZpbGU6IElCdW5kbGVGaWxlKSB7XHJcbiAgICAgICAgbGV0IGh0bWwgPSBcIlwiO1xyXG4gICAgICAgIGlmIChidW5kbGVGaWxlLnR5cGUgPT0gQnVuZGxlRmlsZVR5cGVFbnVtW0J1bmRsZUZpbGVUeXBlRW51bS5JTUFHRV0pIHtcclxuICAgICAgICAgICAgaHRtbCA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVNYXRlcmlhbENvbnRyb2xsZXIuRU1CRURERURfSU1HX1RBX0hUTUwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmJ1bmRsZUtleVwiLCBidW5kbGVGaWxlLmtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6aW1hZ2VTcmNcIiwgYnVuZGxlRmlsZS51cmwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYnVuZGxlRmlsZS50eXBlID09IEJ1bmRsZUZpbGVUeXBlRW51bVtCdW5kbGVGaWxlVHlwZUVudW0uQ1NTXVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IGJ1bmRsZUZpbGUudHlwZSA9PSBCdW5kbGVGaWxlVHlwZUVudW1bQnVuZGxlRmlsZVR5cGVFbnVtLkhUTUxdXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgYnVuZGxlRmlsZS50eXBlID09IEJ1bmRsZUZpbGVUeXBlRW51bVtCdW5kbGVGaWxlVHlwZUVudW0uSlNdKSB7XHJcbiAgICAgICAgICAgIGh0bWwgPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFZoc1NlbGVjdEVtYmVkZGVkQnVuZGxlTWF0ZXJpYWxDb250cm9sbGVyLkVNQkVEREVEX0JVTkRMRV9UQV9IVE1MKVxyXG4gICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmJ1bmRsZUtleVwiLCBidW5kbGVGaWxlLmtleSlcclxuICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgaWNvbiA9IFwiPGRpdiBjbGFzcz0nZG93bmxvYWQtbGluay1pY29uJz5cIiArXHJcbiAgICAgICAgICAgICAgICBcIjxhIGNsYXNzPSdkb3dubG9hZC1saW5rLWljb24tYScgaHJlZj0nXCIgKyBidW5kbGVGaWxlLnVybCArIFwiJyA+PGkgY2xhc3M9J2ZhIGZhLWFycm93LWNpcmNsZS1kb3duIGZhLTN4JyBhcmlhLWhpZGRlbj0ndHJ1ZSc+PC9pPjwvYT48L2Rpdj5cIjtcclxuICAgICAgICAgICAgdGhpcy5sYXN0RXZlbnREYXRhLmNhbGxiYWNrRnVuY3Rpb24oaWNvbik7XHJcblxyXG4gICAgICAgICAgICBodG1sID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZU1hdGVyaWFsQ29udHJvbGxlci5FTUJFRERFRF9MSU5LX1RBX0hUTUwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6YnVuZGxlS2V5XCIsIGJ1bmRsZUZpbGUua2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmJ1bmRsZUtleVwiLCBidW5kbGVGaWxlLmtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpocmVmXCIsIGJ1bmRsZUZpbGUudXJsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhc3RFdmVudERhdGEuY2FsbGJhY2tGdW5jdGlvbihodG1sKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VQb3B1cCgpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChcImRpdi5tb2RhbFwiKS5tb2RhbChcImhpZGVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0V2ZW50UHJvY2Vzc2FibGUoZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSB7XHJcbiAgICAgICAgaWYgKGRhdGEuZXZlbnRTb3VyY2VCdXR0b24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKGRhdGEuZXZlbnRTb3VyY2VCdXR0b24sIFwidmhzLXJpY2gtZWRpdG9yLWNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiBwYXJlbnQuaXModGhpcy5yaWNoRWRpdG9yUGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc1NlbGVjdEVtYmVkZGVkQnVuZGxlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVNYXRlcmlhbENvbnRyb2xsZXIpIHtcclxuICAgICAgICBjb250cm9sbGVyLmluaXQoJHNjb3BlLCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlyZWN0aXZlOiBhbmd1bGFyLklEaXJlY3RpdmUgPSB7XHJcbiAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgIGxpbms6IGxpbmssXHJcbiAgICAgICAgY29udHJvbGxlcjogVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVNYXRlcmlhbENvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgYnVuZGxlSWQ6IFwiQHZoc0J1bmRsZUlkXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlVXJsOiB1cmwudGVtcGxhdGUoXCJjb21wb25lbnRzL3Zocy1zZWxlY3QtZW1iZWRkZWQtYnVuZGxlLmh0bWxcIiksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVEaXJlY3RpdmVGYWN0b3J5LiRpbmplY3QgPSBbXHJcbiAgICBVcmxTZXJ2aWNlLk5BTUVcclxuXTtcclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiXHJcblxyXG5pbXBvcnQge0lHcmlkTW9kZWwsIEdyaWRNb2RlbH0gZnJvbSBcIi4uLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuXHJcbmltcG9ydCB7SU1hdGVyaWFsfSBmcm9tIFwiLi4vLi4vbWF0ZXJpYWxzL21vZGVscy9JTWF0ZXJpYWxcIlxyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vbW9kZWxzL0V2ZW50XCJcclxuaW1wb3J0IHtJVGV4dEFuZ3VsYXJFdmVudERhdGF9IGZyb20gXCIuLi9tb2RlbHMvSVRleHRBbmd1bGFyRXZlbnREYXRhXCJcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiXHJcbmltcG9ydCB7UmFuZG9tVXRpbHN9IGZyb20gXCIuLi8uLi91dGlscy9SYW5kb21VdGlsc1wiO1xyXG5pbXBvcnQge0RvbVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvRG9tVXRpbHNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVZoc1NlbGVjdE1hdGVyaWFsRGlyZWN0aXZlU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBidXNpbmVzc1VuaXRJZD86IG51bWJlcjtcclxuXHJcbiAgICB2bT86IFZoc1NlbGVjdE1hdGVyaWFsQ29udHJvbGxlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc1NlbGVjdE1hdGVyaWFsQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBFTUJFRERFRF9NQVRFUklBTF9UQV9IVE1MOiBzdHJpbmcgPSAnPHAgY2xhc3M9XCJ0YS12aHMtZW1iZWRkZWQtbWF0ZXJpYWxcIiBpZD1cIjptYXRlcmlhbElkXCI+Om1hdGVyaWFsTmFtZTwvcD4nO1xyXG4gICAgcHVibGljIHN0YXRpYyBFTUJFRERFRF9NQVRFUklBTF9ET1dOTE9BRF9MSU5LX1RBX0hUTUw6IHN0cmluZyA9IFwiPGRpdiBjbGFzcz0nZG93bmxvYWQtbGluay1pY29uJz5cIiArXHJcbiAgICAgICAgXCI8YSBjbGFzcz0nZG93bmxvYWQtbGluay1pY29uLWEnIGhyZWY9JzptYXRlcmlhbERvd25sb2FkVXJsJz48aSBjbGFzcz0nZmEgZmEtYXJyb3ctY2lyY2xlLWRvd24gZmEtM3gnIGFyaWEtaGlkZGVuPSd0cnVlJz48L2k+PC9hPlwiICtcclxuICAgICAgICBcIjxhIGNsYXNzPSd0YS12aHMtZW1iZWRkZWQtbWF0ZXJpYWwnIGlkPSc6bWF0ZXJpYWxJZCc+Om1hdGVyaWFsTmFtZTwvYT5cIiArXHJcbiAgICAgICAgXCI8L2Rpdj5cIjtcclxuXHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElNYXRlcmlhbD47XHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxJZDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBsYXN0RXZlbnREYXRhOiBJVGV4dEFuZ3VsYXJFdmVudERhdGE7XHJcbiAgICBwcml2YXRlIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeTtcclxuICAgIHByaXZhdGUgcmljaEVkaXRvclBhcmVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG4gICAgcHJpdmF0ZSBsb2FkUG9wdXBDb250ZW50OiBib29sZWFuID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBJVmhzU2VsZWN0TWF0ZXJpYWxEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgICAgICRzY29wZS52bSA9IHRoaXM7XHJcbiAgICAgICAgJHNjb3BlLiRvbihFdmVudC5UQV9TRUxFQ1RfRU1CRURERURfTUFURVJJQUwsIChldmVudDogbmcuSUFuZ3VsYXJFdmVudCwgZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXZlbnRQcm9jZXNzYWJsZShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUG9wdXBDb250ZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEV2ZW50RGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChcImRpdi5tb2RhbFwiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElNYXRlcmlhbD4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL21hdGVyaWFsc1wiKSkpO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IHRoaXMuJHNjb3BlLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5pc051bGxhYmxlQnVzaW5lc3NVbml0ID0gISh0aGlzLiRzY29wZS5idXNpbmVzc1VuaXRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzU2VsZWN0TWF0ZXJpYWxEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5yaWNoRWRpdG9yUGFyZW50ID0gRG9tVXRpbHMuZmluZFBhcmVudFdpdGhDbGFzcyh0aGlzLmVsZW1lbnQsIFwidmhzLXJpY2gtZWRpdG9yLWNvbnRlbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uTWF0ZXJpYWxTZWxlY3QobWF0ZXJpYWw6IElNYXRlcmlhbCwgYXNEb3dubG9hZExpbms6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxJZCA9IG1hdGVyaWFsLmlkO1xyXG4gICAgICAgIGxldCBzZWxlY3RlZFRleHQgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkgPyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSB8fCBcIlwiIDogXCJcIjtcclxuICAgICAgICBzZWxlY3RlZFRleHQgPSBzZWxlY3RlZFRleHQudHJpbSgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubGFzdEV2ZW50RGF0YS5jYWxsYmFja0Z1bmN0aW9uKFxyXG4gICAgICAgICAgICBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKGFzRG93bmxvYWRMaW5rID9cclxuICAgICAgICAgICAgICAgIFZoc1NlbGVjdE1hdGVyaWFsQ29udHJvbGxlci5FTUJFRERFRF9NQVRFUklBTF9ET1dOTE9BRF9MSU5LX1RBX0hUTUwgOlxyXG4gICAgICAgICAgICAgICAgVmhzU2VsZWN0TWF0ZXJpYWxDb250cm9sbGVyLkVNQkVEREVEX01BVEVSSUFMX1RBX0hUTUxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6bWF0ZXJpYWxJZFwiLCBSYW5kb21VdGlscy5nZW5lcmF0ZVJhbmRvbUlkKFwiXCIgKyB0aGlzLm1hdGVyaWFsSWQgKyBcIl9fXCIpKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6bWF0ZXJpYWxOYW1lXCIsIHNlbGVjdGVkVGV4dCB8fCBtYXRlcmlhbC50aXRsZSlcclxuICAgICAgICAgICAgICAgIC53aXRoKFwiOm1hdGVyaWFsRG93bmxvYWRVcmxcIiwgbWF0ZXJpYWwuZG93bmxvYWRVcmwpXHJcbiAgICAgICAgICAgICAgICAuYnVpbGQoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlUG9wdXAoKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmZpbmQoXCJkaXYubW9kYWxcIikubW9kYWwoXCJoaWRlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNFdmVudFByb2Nlc3NhYmxlKGRhdGE6IElUZXh0QW5ndWxhckV2ZW50RGF0YSkge1xyXG4gICAgICAgIGlmIChkYXRhLmV2ZW50U291cmNlQnV0dG9uICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbGV0IHBhcmVudCA9IERvbVV0aWxzLmZpbmRQYXJlbnRXaXRoQ2xhc3MoZGF0YS5ldmVudFNvdXJjZUJ1dHRvbiwgXCJ2aHMtcmljaC1lZGl0b3ItY29udGVudFwiKTtcclxuICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsICYmIHBhcmVudC5pcyh0aGlzLnJpY2hFZGl0b3JQYXJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhpZGVCdXR0b25Gb3JFeHRlbnNpb25zIChmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHNwbGl0U3RyID0gZmlsZU5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICBsZXQgZXh0ZW5zaW9uID0gc3BsaXRTdHJbc3BsaXRTdHIubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKGV4dGVuc2lvbiA9PSAnZG9jeCcgfHwgZXh0ZW5zaW9uID09ICdkb2MnXHJcbiAgICAgICAgICAgIHx8IGV4dGVuc2lvbiA9PSAndHh0JyB8fCBleHRlbnNpb24gPT0gJ3BwdHgnXHJcbiAgICAgICAgICAgIHx8IGV4dGVuc2lvbiA9PSAncHB0JyB8fCBleHRlbnNpb24gPT0gJ3hsc3gnXHJcbiAgICAgICAgICAgIHx8IGV4dGVuc2lvbiA9PSAneGxzJyB8fCBleHRlbnNpb24gPT0gJzd6JyB8fCBleHRlbnNpb24gPT0gJ3ppcCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1NlbGVjdE1hdGVyaWFsRGlyZWN0aXZlRmFjdG9yeSh1cmw6IFVybFNlcnZpY2UpOiBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgZnVuY3Rpb24gbGluaygkc2NvcGU6IElWaHNTZWxlY3RNYXRlcmlhbERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGFuZ3VsYXIuSUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFZoc1NlbGVjdE1hdGVyaWFsQ29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNTZWxlY3RNYXRlcmlhbENvbnRyb2xsZXIsXHJcbiAgICAgICAgc2NvcGU6IHtcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQ6IFwiQD92aHNCdXNpbmVzc1VuaXRJZFwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLXNlbGVjdC1tYXRlcmlhbC5odG1sXCIpLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc1NlbGVjdE1hdGVyaWFsRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIlxyXG5pbXBvcnQge0lHcmlkTW9kZWwsIEdyaWRNb2RlbH0gZnJvbSBcIi4uLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQnVuZGxlRmlsZX0gZnJvbSBcIi4uLy4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVGaWxlXCI7XHJcbmltcG9ydCB7QnVuZGxlRmlsZVR5cGVFbnVtfSBmcm9tIFwiLi4vLi4vYnVuZGxlcy9tb2RlbHMvQnVuZGxlRmlsZVR5cGVcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4uL21vZGVscy9FdmVudFwiXHJcbmltcG9ydCB7SVRleHRBbmd1bGFyRXZlbnREYXRhfSBmcm9tIFwiLi4vbW9kZWxzL0lUZXh0QW5ndWxhckV2ZW50RGF0YVwiXHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIlxyXG5pbXBvcnQge1JhbmRvbVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvUmFuZG9tVXRpbHNcIjtcclxuaW1wb3J0IHtEb21VdGlsc30gZnJvbSBcIi4uLy4uL3V0aWxzL0RvbVV0aWxzXCI7XHJcbmltcG9ydCB7QnVuZGxlU2VydmljZX0gZnJvbSBcIi4uLy4uL2J1bmRsZXMvQnVuZGxlU2VydmljZVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi8uLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCBJTG9jYXRpb25TZXJ2aWNlID0gYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzU2VsZWN0U2FuZGJveERpcmVjdGl2ZVNjb3BlIGV4dGVuZHMgYW5ndWxhci5JU2NvcGUge1xyXG4gICAgdm0/OiBWaHNTZWxlY3RTYW5kYm94Q29udHJvbGxlcjtcclxuICAgIGJ1bmRsZUlkPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzU2VsZWN0U2FuZGJveENvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgRU1CRURERURfSU1HX1RBX0hUTUw6IHN0cmluZyA9ICc8aW1nIGNsYXNzPVwidGEtdmhzLXNhbmRib3ggOmN1c3RvbUNsYXNzXCIgaWQ9XCI6YnVuZGxlSWRcIiBzcmM9XCI6aW1hZ2VTcmNcIiB3aWR0aD1cIjEwMjRcIiBoZWlnaHQ9XCI2NzJcIi8+JztcclxuICAgIHB1YmxpYyBzdGF0aWMgU0FOREJPWF9BU19QT1BVUF9DTEFTUzogc3RyaW5nID0gXCJzYW5kYm94LWFzLXBvcHVwXCI7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBTQU5EQk9YX1RBX0lNR19QQVRIOiBzdHJpbmcgPSBcIi4vdGhlbWVzL2RlZmF1bHQvaW1nL3RhX3NhbmRib3gucG5nXCI7XHJcblxyXG4gICAgcHVibGljIGJ1bmRsZUZpbGVzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElCdW5kbGVGaWxlPjtcclxuICAgIHByaXZhdGUgbGFzdEV2ZW50RGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhO1xyXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XHJcbiAgICBwcml2YXRlIHJpY2hFZGl0b3JQYXJlbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeTtcclxuICAgIHByaXZhdGUgbG9hZFBvcHVwQ29udGVudDogYm9vbGVhbiA9IHVuZGVmaW5lZDtcclxuICAgIHByaXZhdGUgc2FuZGJveEFzUG9wdXA6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSBzYW5kYm94QXNUaW5DYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdXJsSWZyYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIHByaXZhdGUgYXBpQXBwbGljYXRpb25Vcmw6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgQnVuZGxlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogSVZoc1NlbGVjdFNhbmRib3hEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVuZGxlQXBpOiBCdW5kbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgICAgICAkc2NvcGUudm0gPSB0aGlzO1xyXG4gICAgICAgICRzY29wZS4kb24oRXZlbnQuVEFfU0VMRUNUX1NBTkRCT1gsIChldmVudDogbmcuSUFuZ3VsYXJFdmVudCwgZGF0YTogSVRleHRBbmd1bGFyRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXZlbnRQcm9jZXNzYWJsZShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUG9wdXBDb250ZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEV2ZW50RGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChcImRpdi5tb2RhbFwiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJQnVuZGxlRmlsZT4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2J1bmRsZXMvXCIgKyAkc2NvcGUuYnVuZGxlSWQgKyBcIi9maWxlc1wiKSkpO1xyXG4gICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwucGFnZVNpemUgPSA2O1xyXG4gICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwuZmlsdGVyLmJ1bmRsZUZpbGVUeXBlID0gQnVuZGxlRmlsZVR5cGVFbnVtW0J1bmRsZUZpbGVUeXBlRW51bS5IVE1MXTtcclxuICAgICAgICB0aGlzLmFwaUFwcGxpY2F0aW9uVXJsID0gQXBwUHJvcGVydGllcy5zZXJ2aWNlUm9vdCAhPSBcIi9cIlxyXG4gICAgICAgICAgICA/IEFwcFByb3BlcnRpZXMuc2VydmljZVJvb3RcclxuICAgICAgICAgICAgOiAkbG9jYXRpb24ucHJvdG9jb2woKSArIFwiOi8vXCIgKyAkbG9jYXRpb24uaG9zdCgpICsgXCI6XCIgKyAkbG9jYXRpb24ucG9ydCgpICsgXCIvXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoJHNjb3BlOiBJVmhzU2VsZWN0U2FuZGJveERpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnJpY2hFZGl0b3JQYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKHRoaXMuZWxlbWVudCwgXCJ2aHMtcmljaC1lZGl0b3ItY29udGVudFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CdW5kbGVGaWxlU2VsZWN0KGJ1bmRsZUZpbGU6IElCdW5kbGVGaWxlKSB7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdChidW5kbGVGaWxlLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uVXJsRW50ZXIodXJsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0KHVybCk7XHJcbiAgICAgICAgdGhpcy51cmxJZnJhbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNlbGVjdChrZXkpIHtcclxuICAgICAgICBjb25zdCBodG1sID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShWaHNTZWxlY3RTYW5kYm94Q29udHJvbGxlci5FTUJFRERFRF9JTUdfVEFfSFRNTClcclxuICAgICAgICAgICAgLndpdGgoXCI6Y3VzdG9tQ2xhc3NcIiwgdGhpcy5zYW5kYm94QXNQb3B1cCA/IFZoc1NlbGVjdFNhbmRib3hDb250cm9sbGVyLlNBTkRCT1hfQVNfUE9QVVBfQ0xBU1MgOiBcIlwiKVxyXG4gICAgICAgICAgICAud2l0aChcIjpidW5kbGVJZFwiLCBSYW5kb21VdGlscy5nZW5lcmF0ZVJhbmRvbUlkKGtleSArICh0aGlzLnNhbmRib3hBc1RpbkNhbiA/IHRoaXMuZ2V0VGluQ2FuU0NPUGFyYW1ldGVycyhrZXkpIDogXCJcIikgKyBcIl9fX1wiKSlcclxuICAgICAgICAgICAgLndpdGgoXCI6aW1hZ2VTcmNcIiwgdGhpcy51cmwuc3RhdGljUmVzb3VyY2VVcmwoVmhzU2VsZWN0U2FuZGJveENvbnRyb2xsZXIuU0FOREJPWF9UQV9JTUdfUEFUSCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNhbmRib3hBc1BvcHVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxhc3RFdmVudERhdGEuY2FsbGJhY2tGdW5jdGlvbihodG1sKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzRXZlbnRQcm9jZXNzYWJsZShkYXRhOiBJVGV4dEFuZ3VsYXJFdmVudERhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YS5ldmVudFNvdXJjZUJ1dHRvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBEb21VdGlscy5maW5kUGFyZW50V2l0aENsYXNzKGRhdGEuZXZlbnRTb3VyY2VCdXR0b24sIFwidmhzLXJpY2gtZWRpdG9yLWNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiBwYXJlbnQuaXModGhpcy5yaWNoRWRpdG9yUGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VGluQ2FuU0NPUGFyYW1ldGVycyhrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIChrZXkuaW5kZXhPZihcIj9cIikgIT0gLTEgPyBcIlwiIDogXCI/XCIpXHJcbiAgICAgICAgICAgIC5jb25jYXQoXCImYW1wO2FjdG9yPSU3QiUyMm5hbWUlMjIlM0ElNUIlMjJWSFMlMjBTeXN0ZW0lMjIlNUQlMkMlMjJhY2NvdW50JTIyJTNBJTVCJTdCJTIyYWNjb3VudFNlcnZpY2VIb21lUGFnZSUyMiUzQVwiKVxyXG4gICAgICAgICAgICAuY29uY2F0KFwiJTIyXCIpLmNvbmNhdCh0aGlzLmFwaUFwcGxpY2F0aW9uVXJsKS5jb25jYXQoXCIlMjJcIilcclxuICAgICAgICAgICAgLmNvbmNhdChcIiUyQyUyMmFjY291bnROYW1lJTIyJTNBJTIyR0RGSVIxSFFWMyU3Q3Zocy5zeXN0ZW0lNDBjb3JlcGFydG5lcnMuY29tJTIyXCIpXHJcbiAgICAgICAgICAgIC5jb25jYXQoXCIlN0QlNUQlMkMlMjJvYmplY3RUeXBlJTIyJTNBJTIyQWdlbnQlMjIlN0RcIilcclxuICAgICAgICAgICAgLmNvbmNhdChcIiZhbXA7ZW5kcG9pbnQ9XCIpLmNvbmNhdCh0aGlzLmFwaUFwcGxpY2F0aW9uVXJsKVxyXG4gICAgICAgICAgICAuY29uY2F0KFwiJmFtcDt0aW5jYW49dHJ1ZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJEYXRhT25DbG9zZURpYWxvZygpIHtcclxuICAgICAgICB0aGlzLnNhbmRib3hBc1BvcHVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxhc3RFdmVudERhdGEuY2FsbGJhY2tGdW5jdGlvbihcIlwiKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZoc1NlbGVjdFNhbmRib3hEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc1NlbGVjdFNhbmRib3hEaXJlY3RpdmVTY29wZSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhbmd1bGFyLklBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBWaHNTZWxlY3RTYW5kYm94Q29udHJvbGxlcikge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdCgkc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXJlY3RpdmU6IGFuZ3VsYXIuSURpcmVjdGl2ZSA9IHtcclxuICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgbGluazogbGluayxcclxuICAgICAgICBjb250cm9sbGVyOiBWaHNTZWxlY3RTYW5kYm94Q29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICBidW5kbGVJZDogXCJAdmhzQnVuZGxlSWRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLXNlbGVjdC1zYW5kYm94Lmh0bWxcIiksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRpcmVjdGl2ZTtcclxufVxyXG5cclxuVmhzU2VsZWN0U2FuZGJveERpcmVjdGl2ZUZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFVybFNlcnZpY2UuTkFNRVxyXG5dO1xyXG4iLCJpbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9idW5kbGVzL0J1bmRsZVNlcnZpY2VcIjtcclxuaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuaW1wb3J0IHtDb3Vyc2VTdHJ1Y3R1cmVFZGl0Q29udHJvbGxlcn0gZnJvbSBcIi4uLy4uL2NvdXJzZXMvQ291cnNlU3RydWN0dXJlRWRpdENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtJQnVuZGxlRmlsZX0gZnJvbSBcIi4uLy4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVGaWxlXCI7XHJcbmltcG9ydCB7QnVuZGxlRmlsZVR5cGVFbnVtfSBmcm9tIFwiLi4vLi4vYnVuZGxlcy9tb2RlbHMvQnVuZGxlRmlsZVR5cGVcIjtcclxuaW1wb3J0IElSZXF1ZXN0U2hvcnRjdXRDb25maWcgPSBhbmd1bGFyLklSZXF1ZXN0U2hvcnRjdXRDb25maWc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaHNCdW5kbGVkU2NvcGUgZXh0ZW5kcyBhbmd1bGFyLklTY29wZSB7XHJcbiAgICBidW5kbGVJZD86IG51bWJlcjtcclxufVxyXG5cclxuaW50ZXJmYWNlIFNlY3Rpb25JbmZvIHtcclxuICAgIGxlc3Nvbk5hbWU/OiBzdHJpbmc7XHJcbiAgICBsZXNzb25OdW1iZXI/OiBzdHJpbmc7XHJcbiAgICB0aHVtYm5haWxVcmw/OiBzdHJpbmc7XHJcbiAgICBncmFkZT86IHN0cmluZztcclxuICAgIGNvdXJzZU5hbWU/OiBzdHJpbmc7XHJcbiAgICB1bml0TnVtYmVyPzogc3RyaW5nO1xyXG4gICAgdW5pdE5hbWU/OiBzdHJpbmc7XHJcbiAgICBzZWN0aW9uTnVtYmVyPzogc3RyaW5nO1xyXG4gICAgc2VjdGlvbk5hbWU/OiBzdHJpbmc7XHJcbiAgICBwcmludENvdXJzZUFuZEdyYWRlPzogc3RyaW5nO1xyXG4gICAgcHJpbnRVbml0QW5kU2VjdGlvbj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZoc1RlbXBsYXRlU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvbXBvbmVudHMuVmhzVGVtcGxhdGVTZXJ2aWNlXCI7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBURVhUX0RFTElNSVRFUl9DSEFSQUNURVIgPSBcIi1cIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXCIkaHR0cFwiLCBcIiRxXCIsIEJ1bmRsZVNlcnZpY2UuTkFNRV07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVuZGxlQXBpOiBCdW5kbGVTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRlbXBsYXRlQ29udGVudChidW5kbGVGaWxlS2V5OiBzdHJpbmcsIHNjb3BlOiBJVmhzQnVuZGxlZFNjb3BlKTogSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVuZGxlQXBpLmdldEJ1bmRsZShzY29wZS5idW5kbGVJZCwgXCJmaWxlOlwiICsgYnVuZGxlRmlsZUtleSlcclxuICAgICAgICAgICAgLnRoZW4oYnVuZGxlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGU6IElCdW5kbGVGaWxlID0gYnVuZGxlLmZpbGVzTWFwLmdldChidW5kbGVGaWxlS2V5KTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlICYmIGZpbGUudXJsICYmIGZpbGUudHlwZSA9PT0gQnVuZGxlRmlsZVR5cGVFbnVtW0J1bmRsZUZpbGVUeXBlRW51bS5IVE1MXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChmaWxlLnVybCwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXRBdXRob3JpemF0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmU0MDQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSW5mbzogU2VjdGlvbkluZm8gPSBWaHNUZW1wbGF0ZVNlcnZpY2UuZmluZExlc3NvbkluZm8oc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9ICg8c3RyaW5nPiByZXN1bHQuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZmllbGROYW1lIGluIHNlY3Rpb25JbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25JbmZvLmhhc093blByb3BlcnR5KGZpZWxkTmFtZSkgJiYgc2VjdGlvbkluZm9bZmllbGROYW1lXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gVmhzVGVtcGxhdGVTZXJ2aWNlLnJlcGxhY2VUZW1wbGF0ZVBsYWNlaG9sZGVyRmllbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLCBmaWVsZE5hbWUsIHNlY3Rpb25JbmZvW2ZpZWxkTmFtZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZoc1RlbXBsYXRlU2VydmljZS5yZXBsYWNlQWxsV2hpdGVzcGFjZXMoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5yZWplY3QoXCJmaWxlLmNhbm5vdC5iZS5sb2FkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLnJlamVjdChcImZpbGUubm90LmZvdW5kXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlcGxhY2VUZW1wbGF0ZVBsYWNlaG9sZGVyRmllbGQoaHRtbDogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZywgZmllbGRWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKCcgKyBmaWVsZE5hbWUgKyAnLXBsYWNlaG9sZGVyW15cXFwiXSpcIltePl0qPikoW148L10qKSg8XFwvW14+XSo+KScsIFwiZ1wiKTtcclxuICAgICAgICByZXR1cm4gaHRtbFxyXG4gICAgICAgICAgICAucmVwbGFjZShyZWdleHAsIFwiJDFcIiArIGZpZWxkVmFsdWUgKyBcIiQzXCIpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKGZpZWxkTmFtZSArIFwiLWF0dHItcGxhY2Vob2xkZXJcIiwgZmllbGRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyByZXBsYWNlVGVtcGxhdGVCbG9ja0NvbnRlbnQoaHRtbDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKCc8ZGl2IGNsYXNzPVwiYmxvY2stY29udGVudFwiPlxcbj8uKlxcbj88XFwvZGl2PicpO1xyXG4gICAgICAgIHJldHVybiBodG1sXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKHJlZ2V4cCwgJzxkaXYgY2xhc3M9XCJibG9jay1jb250ZW50XCI+XFxuJyArIGNvbnRlbnQgKyAnXFxuPC9kaXY+Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyByZXBsYWNlQWxsV2hpdGVzcGFjZXMoaHRtbDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGh0bWxcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHQgXStcXDwvZywgXCI8XCIpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXD5bXFx0IF0rXFw8L2csIFwiPjxcIilcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcPltcXHQgXSskL2csIFwiPlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBmaW5kTGVzc29uSW5mbyhlZGl0b3JTY29wZTogSVZoc0J1bmRsZWRTY29wZSk6IGFueSAge1xyXG4gICAgICAgIGxldCBzY29wZSA9IGVkaXRvclNjb3BlLiRwYXJlbnQ7XHJcbiAgICAgICAgd2hpbGUgKHNjb3BlKSB7XHJcbiAgICAgICAgICAgIGlmICgoPGFueT4gc2NvcGUpLmhhc093blByb3BlcnR5KFwidm1cIikgJiYgKDxhbnk+IHNjb3BlKS52bS4kVk1fTkFNRSA9PT0gQ291cnNlU3RydWN0dXJlRWRpdENvbnRyb2xsZXIuTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2NvcGUgPSBzY29wZS4kcGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgICAgICAgbGV0IGVkaXRDb250cm9sbGVyOiBDb3Vyc2VTdHJ1Y3R1cmVFZGl0Q29udHJvbGxlciA9IDxDb3Vyc2VTdHJ1Y3R1cmVFZGl0Q29udHJvbGxlcj4gKDxhbnk+IHNjb3BlKS52bTtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRTZWN0aW9uID0gZWRpdENvbnRyb2xsZXIuc2VsZWN0ZWRTZWN0aW9uO1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50U2VjdGlvbiA9IGN1cnJlbnRTZWN0aW9uLnBhcmVudElkICE9IG51bGxcclxuICAgICAgICAgICAgICAgID8gZWRpdENvbnRyb2xsZXIuZ2V0U2VjdGlvbkJ5SWQoY3VycmVudFNlY3Rpb24ubW9kdWxlSWQsIGN1cnJlbnRTZWN0aW9uLnBhcmVudElkKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGxldCB1bml0ID0gcGFyZW50U2VjdGlvbiAhPSBudWxsICYmIHBhcmVudFNlY3Rpb24ucGFyZW50SWQgIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyBlZGl0Q29udHJvbGxlci5nZXRTZWN0aW9uQnlJZChwYXJlbnRTZWN0aW9uLm1vZHVsZUlkLCBwYXJlbnRTZWN0aW9uLnBhcmVudElkKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25JbmZvOiBTZWN0aW9uSW5mbyA9IHt9O1xyXG4gICAgICAgICAgICBzZWN0aW9uSW5mby5ncmFkZSA9IGVkaXRDb250cm9sbGVyLmNvdXJzZSA/IGVkaXRDb250cm9sbGVyLmNvdXJzZS5zdWJqZWN0TmFtZSA6IG51bGw7XHJcbiAgICAgICAgICAgIHNlY3Rpb25JbmZvLmNvdXJzZU5hbWUgPSBlZGl0Q29udHJvbGxlci5jb3Vyc2UgPyBlZGl0Q29udHJvbGxlci5jb3Vyc2UudG9waWMgOiBudWxsO1xyXG4gICAgICAgICAgICBzZWN0aW9uSW5mby51bml0TmFtZSA9IHVuaXQgPyBWaHNUZW1wbGF0ZVNlcnZpY2Uuc3BsaXRUZXh0QnlEZWxpbWl0ZXIodW5pdC5uYW1lLCAxKSA6IG51bGw7XHJcbiAgICAgICAgICAgIHNlY3Rpb25JbmZvLnVuaXROdW1iZXIgPSB1bml0ID8gVmhzVGVtcGxhdGVTZXJ2aWNlLnNwbGl0VGV4dEJ5RGVsaW1pdGVyKHVuaXQubmFtZSwgMCkgOiBudWxsO1xyXG4gICAgICAgICAgICBzZWN0aW9uSW5mby5zZWN0aW9uTmFtZSA9IHBhcmVudFNlY3Rpb24gPyBWaHNUZW1wbGF0ZVNlcnZpY2Uuc3BsaXRUZXh0QnlEZWxpbWl0ZXIocGFyZW50U2VjdGlvbi5uYW1lLCAxKSA6IG51bGw7XHJcbiAgICAgICAgICAgIHNlY3Rpb25JbmZvLnNlY3Rpb25OdW1iZXIgPSBwYXJlbnRTZWN0aW9uID8gVmhzVGVtcGxhdGVTZXJ2aWNlLnNwbGl0VGV4dEJ5RGVsaW1pdGVyKHBhcmVudFNlY3Rpb24ubmFtZSwgMCkgOiBudWxsO1xyXG4gICAgICAgICAgICBzZWN0aW9uSW5mby50aHVtYm5haWxVcmwgPSBlZGl0Q29udHJvbGxlci5jb3Vyc2UgPyBlZGl0Q29udHJvbGxlci5jb3Vyc2UucHJldmlld1VybCA6IG51bGw7XHJcbiAgICAgICAgICAgIHNlY3Rpb25JbmZvLmxlc3Nvbk5hbWUgPSBjdXJyZW50U2VjdGlvbiA/IFZoc1RlbXBsYXRlU2VydmljZS5zcGxpdFRleHRCeURlbGltaXRlcihjdXJyZW50U2VjdGlvbi5uYW1lLCAxKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBsZXNzb25OdW1iZXIgPSBjdXJyZW50U2VjdGlvbiA/IFZoc1RlbXBsYXRlU2VydmljZS5zcGxpdFRleHRCeURlbGltaXRlcihjdXJyZW50U2VjdGlvbi5uYW1lLCAwKSA6IG51bGw7XHJcbiAgICAgICAgICAgIHNlY3Rpb25JbmZvLmxlc3Nvbk51bWJlciA9IGxlc3Nvbk51bWJlciA/IGxlc3Nvbk51bWJlci50b1VwcGVyQ2FzZSgpIDogbnVsbDtcclxuICAgICAgICAgICAgc2VjdGlvbkluZm8ucHJpbnRVbml0QW5kU2VjdGlvbiA9IFwiVU5JVCAuc2VjdGlvbl9sZXR0ZXIgfCBMZXNzb24gPyB8ICZsdDtsZXNzb24gbmFtZSZndDtcIjtcclxuICAgICAgICAgICAgbGV0IHNlY3Rpb25MZXR0ZXIgPSBzZWN0aW9uSW5mby5zZWN0aW9uTnVtYmVyXHJcbiAgICAgICAgICAgICAgICA/IFZoc1RlbXBsYXRlU2VydmljZS5zcGxpdFRleHRCeURlbGltaXRlcihzZWN0aW9uSW5mby5zZWN0aW9uTnVtYmVyLCAxLCBcIiBcIikgOiBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoc2VjdGlvbkluZm8udW5pdE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbkluZm8ucHJpbnRVbml0QW5kU2VjdGlvbiA9IHNlY3Rpb25JbmZvLnByaW50VW5pdEFuZFNlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcIlVOSVQgLlwiLCBzZWN0aW9uSW5mby51bml0TnVtYmVyICsgXCIuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlY3Rpb25JbmZvLnByaW50VW5pdEFuZFNlY3Rpb24gPSBzZWN0aW9uSW5mby5wcmludFVuaXRBbmRTZWN0aW9uLnJlcGxhY2UoXCJzZWN0aW9uX2xldHRlclwiLCBzZWN0aW9uTGV0dGVyIHx8IFwiXCIpO1xyXG4gICAgICAgICAgICBpZiAobGVzc29uTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uSW5mby5wcmludFVuaXRBbmRTZWN0aW9uID0gc2VjdGlvbkluZm8ucHJpbnRVbml0QW5kU2VjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiTGVzc29uID9cIiwgbGVzc29uTnVtYmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VjdGlvbkluZm8ubGVzc29uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbkluZm8ucHJpbnRVbml0QW5kU2VjdGlvbiA9IHNlY3Rpb25JbmZvLnByaW50VW5pdEFuZFNlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcIiZsdDtsZXNzb24gbmFtZSZndDtcIiwgc2VjdGlvbkluZm8ubGVzc29uTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VjdGlvbkluZm8ucHJpbnRDb3Vyc2VBbmRHcmFkZSA9IFwiJmx0O2NvdXJzZSB0aXRsZSZndDsgLSAmbHQ7Z3JhZGUmZ3Q7XCI7XHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uSW5mby5jb3Vyc2VOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uSW5mby5wcmludENvdXJzZUFuZEdyYWRlID0gc2VjdGlvbkluZm8ucHJpbnRDb3Vyc2VBbmRHcmFkZVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiJmx0O2NvdXJzZSB0aXRsZSZndDtcIiwgc2VjdGlvbkluZm8uY291cnNlTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlY3Rpb25JbmZvLmdyYWRlKSB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uSW5mby5wcmludENvdXJzZUFuZEdyYWRlID0gc2VjdGlvbkluZm8ucHJpbnRDb3Vyc2VBbmRHcmFkZVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiJmx0O2dyYWRlJmd0O1wiLCBzZWN0aW9uSW5mby5ncmFkZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzZWN0aW9uSW5mbztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3BsaXRUZXh0QnlEZWxpbWl0ZXIodGV4dDogc3RyaW5nLCB0YXJnZXRFbGVtZW50SW5kZXg6IG51bWJlciAvKiAxIHwgMCAqLywgZGVsaW1ldGVyPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXRleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVsaW1ldGVyKSB7XHJcbiAgICAgICAgICAgIGRlbGltZXRlciA9IFZoc1RlbXBsYXRlU2VydmljZS5URVhUX0RFTElNSVRFUl9DSEFSQUNURVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpbmRleCA9IHRleHQuaW5kZXhPZihkZWxpbWV0ZXIpO1xyXG4gICAgICAgIGxldCByZXN1bHQ7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCAmJiB0YXJnZXRFbGVtZW50SW5kZXggPD0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCAwICYmIHRhcmdldEVsZW1lbnRJbmRleCA+IDApIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGV4dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0RWxlbWVudEluZGV4IDw9IDApIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRleHQuc3Vic3RyaW5nKDAsIGluZGV4KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRleHQuc3Vic3RyaW5nKGluZGV4ICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtSYW5kb21VdGlsc30gZnJvbSBcIi4uLy4uL3V0aWxzL1JhbmRvbVV0aWxzXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtVc2VyTm90ZXNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vY291cnNlcy9Vc2VyTm90ZXNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuLi9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtJVXNlck5vdGV9IGZyb20gXCIuLi8uLi9jb3Vyc2VzL21vZGVscy9JVXNlck5vdGVcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uLy4uL0lOb3RpZmllclwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVmhzVXNlck5vdGVEaXJlY3RpdmVTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHV1aWQ6IHN0cmluZztcclxuICAgIG9yaWdpbmFsQm9keTogc3RyaW5nO1xyXG4gICAgbm90ZUhlYWRlcjogc3RyaW5nO1xyXG5cclxuICAgIHZtPzogVmhzVXNlck5vdGVEaXJlY3RpdmVDb250cm9sbGVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVmhzVXNlck5vdGVEaXJlY3RpdmVDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfRUxFTUVOVF9TRUxFQ1RPUiA9IFwiZGl2LnRhLXVzZXItbm90ZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBUQV9ESVJFQ1RJVkVfSFRNTCA9IFwiPGRpdiB2aHMtdXNlci1ub3RlIHV1aWQ9Jzp1dWlkJyBcIlxyXG4gICAgICAgICsgXCJvcmlnaW5hbC1ib2R5PSc6b3JpZ2luYWxCb2R5JyBub3RlLWhlYWRlcj0nOm5vdGVIZWFkZXInPjwvZGl2PlwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgVEFfUkVOREVSX0ZVTkNUSU9OID0gKGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21waWxlOiBhbmd1bGFyLklDb21waWxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UpID0+IHtcclxuICAgICAgICBjb25zdCBpZCA9IFJhbmRvbVV0aWxzLmdlbmVyYXRlUmFuZG9tSWQoJ3Zoc1VzZXJOb3RlXycpO1xyXG4gICAgICAgIGVsZW1lbnQucmVwbGFjZVdpdGgoXCI8ZGl2IGlkPSdcIiArIGlkICsgXCInPjwvZGl2PlwiKTtcclxuXHJcbiAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAkKCcjJyArIGlkKS5yZXBsYWNlV2l0aCgkY29tcGlsZShcclxuICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoVmhzVXNlck5vdGVEaXJlY3RpdmVDb250cm9sbGVyLlRBX0RJUkVDVElWRV9IVE1MKVxyXG4gICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOnV1aWRcIiwgZWxlbWVudC5hdHRyKCdpZCcpKVxyXG4gICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOm9yaWdpbmFsQm9keVwiLCBlbGVtZW50LmZpbmQoXCJkaXYudGEtYmxvY2subm90ZVwiKS50ZXh0KCkpXHJcbiAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6bm90ZUhlYWRlclwiLCBlbGVtZW50LmZpbmQoXCJoNS51c2VyLW5vdGUtaGVhZGVyXCIpLnRleHQoKSlcclxuICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKVxyXG4gICAgICAgICAgICApKCRyb290U2NvcGUpKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIG9yaWdpbmFsQm9keTogc3RyaW5nO1xyXG4gICAgcHVibGljIG5vdGVCb2R5OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbm90ZVNhdmVkQm9keTogc3RyaW5nO1xyXG4gICAgcHVibGljIG5vdGVIZWFkZXI6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgdGV4dENoYW5nZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBub3RlTWF4TGVuZ3RoOiBudW1iZXIgPSAxMDAwO1xyXG5cclxuICAgIHByaXZhdGUgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xyXG4gICAgcHJpdmF0ZSBldmVudExpc3RlbmVyO1xyXG5cclxuICAgIHByaXZhdGUgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgc2VjdGlvbklkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBVc2VyTm90ZXNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IElWaHNVc2VyTm90ZURpcmVjdGl2ZVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyTm90ZXNTZXJ2aWNlOiBVc2VyTm90ZXNTZXJ2aWNlKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy50ZXh0Q2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICgkc2NvcGUubm90ZUhlYWRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90ZUhlYWRlciA9ICRzY29wZS5ub3RlSGVhZGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJZCA9IHRoaXMudXNlck5vdGVzU2VydmljZS5jb3Vyc2VJZDtcclxuICAgICAgICB0aGlzLnNlY3Rpb25JZCA9IHRoaXMudXNlck5vdGVzU2VydmljZS5zZWN0aW9uSWQ7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkID0gdGhpcy51c2VyTm90ZXNTZXJ2aWNlLmNvdXJzZVByb2dyZXNzSWQ7XHJcblxyXG4gICAgICAgIHRoaXMudXNlck5vdGVzU2VydmljZS5nZXROb3RlKHRoaXMuY291cnNlSWQsIHRoaXMuc2VjdGlvbklkLCB0aGlzLmNvdXJzZVByb2dyZXNzSWQsIHRoaXMuJHNjb3BlLnV1aWQpXHJcbiAgICAgICAgICAgIC50aGVuKChub3RlOiBJVXNlck5vdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90ZUJvZHkgPSBub3RlICYmIG5vdGUudGV4dCAhPSBudWxsID8gbm90ZS50ZXh0IDogJHNjb3BlLm9yaWdpbmFsQm9keTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90ZVNhdmVkQm9keSA9IHRoaXMubm90ZUJvZHk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lciA9ICRzY29wZS4kb24oRXZlbnQuVEFfTE9DQVRJT05fQ0hBTkdFX1NUQVJULCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRleHRDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVVc2VyTm90ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCRzY29wZTogSVZoc1VzZXJOb3RlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlVXNlck5vdGUoKSB7XHJcbiAgICAgICAgdGhpcy51c2VyTm90ZXNTZXJ2aWNlLnNhdmVOb3RlKHRoaXMuY291cnNlSWQsIHRoaXMuc2VjdGlvbklkLCB0aGlzLmNvdXJzZVByb2dyZXNzSWQsIHRoaXMuJHNjb3BlLnV1aWQsIHRoaXMubm90ZUJvZHkpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTYXZlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGVTYXZlZEJvZHkgPSBhbmd1bGFyLmNvcHkodGhpcy5ub3RlQm9keSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNjYXJkVXNlck5vdGUoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RlQm9keSA9IGFuZ3VsYXIuY29weSh0aGlzLm5vdGVTYXZlZEJvZHkpO1xyXG4gICAgICAgIHRoaXMudGV4dENoYW5nZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25UZXh0Q2hhbmdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGV4dENoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVmhzVXNlck5vdGVEaXJlY3RpdmVGYWN0b3J5KHVybDogVXJsU2VydmljZSk6IGFuZ3VsYXIuSURpcmVjdGl2ZSB7XHJcbiAgICBmdW5jdGlvbiBsaW5rKCRzY29wZTogSVZoc1VzZXJOb3RlRGlyZWN0aXZlU2NvcGUsXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYW5ndWxhci5JQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogVmhzVXNlck5vdGVEaXJlY3RpdmVDb250cm9sbGVyKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5pbml0KCRzY29wZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpcmVjdGl2ZTogYW5ndWxhci5JRGlyZWN0aXZlID0ge1xyXG4gICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICBsaW5rOiBsaW5rLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFZoc1VzZXJOb3RlRGlyZWN0aXZlQ29udHJvbGxlcixcclxuICAgICAgICBzY29wZToge1xyXG4gICAgICAgICAgICB1dWlkOiBcIkB1dWlkXCIsXHJcbiAgICAgICAgICAgIG9yaWdpbmFsQm9keTogXCJAb3JpZ2luYWxCb2R5XCIsXHJcbiAgICAgICAgICAgIG5vdGVIZWFkZXI6IFwiQG5vdGVIZWFkZXJcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IHVybC50ZW1wbGF0ZShcImNvbXBvbmVudHMvdmhzLXVzZXItbm90ZS5odG1sXCIpLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBkaXJlY3RpdmU7XHJcbn1cclxuXHJcblZoc1VzZXJOb3RlRGlyZWN0aXZlRmFjdG9yeS4kaW5qZWN0ID0gW1xyXG4gICAgVXJsU2VydmljZS5OQU1FXHJcbl07IiwiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCIuLy4uL2NvbW1vbi9Db21tb25Nb2R1bGVcIjtcclxuaW1wb3J0IHtTZWN1cml0eU1vZHVsZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi8uLi91cmxzL1VybHNNb2R1bGVcIjtcclxuXHJcbmltcG9ydCB7Q29udGVudFNlcnZpY2V9IGZyb20gXCIuL0NvbnRlbnRTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgdmFyIENvbnRlbnRNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgICAgICAubW9kdWxlKFwiY29udGVudFwiLCBbXHJcbiAgICAgICAgICAgIENvbW1vbk1vZHVsZS5uYW1lLFxyXG4gICAgICAgICAgICBTZWN1cml0eU1vZHVsZS5uYW1lLFxyXG4gICAgICAgICAgICBVcmxzTW9kdWxlLm5hbWVcclxuICAgICAgICBdKVxyXG4gICAgICAgIC5zZXJ2aWNlKENvbnRlbnRTZXJ2aWNlLk5BTUUsIENvbnRlbnRTZXJ2aWNlKVxyXG4gICAgO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4vLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtJQ29udGVudFZpZXd9IGZyb20gXCIuL21vZGVscy9JQ29udGVudFZpZXdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb250ZW50U2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvbnRlbnQuQ29udGVudFNlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbnRlbnRWaWV3KG9iamVjdElkOiBudW1iZXIsIG9iamVjdFR5cGU6IGFueSk6IGFuZ3VsYXIuSVByb21pc2U8SUNvbnRlbnRWaWV3PiB7XHJcbiAgICAgICAgbGV0IG15T2JqZWN0VHlwZTogc3RyaW5nID1cclxuICAgICAgICAgICAgKHR5cGVvZiBvYmplY3RUeXBlID09PSAnc3RyaW5nJykgPyBvYmplY3RUeXBlIDpcclxuICAgICAgICAgICAgICAgICh0eXBlb2Ygb2JqZWN0VHlwZSA9PT0gJ251bWJlcicpID8gUmVmZXJlbmNlZE9iamVjdFR5cGVbb2JqZWN0VHlwZV0gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvbnRlbnQvOnR5cGUvOmlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBvYmplY3RJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnR5cGVcIiwgbXlPYmplY3RUeXBlKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SUJ1bmRsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4vQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuaW1wb3J0IElRU2VydmljZSA9IGFuZ3VsYXIuSVFTZXJ2aWNlO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZUJ1bmRsZUVkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5Db3Vyc2VCdW5kbGVFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0luaXRpYWxpemVkOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGNvdXJzZTogSUNvdXJzZTtcclxuICAgIHB1YmxpYyBjcmVhdGVDb3Vyc2VCdW5kbGVGbjogKCkgPT4gSVByb21pc2U8SUJ1bmRsZT47XHJcblxyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZUlkID0gJHJvdXRlUGFyYW1zW0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNXTtcclxuICAgICAgICBsZXQgaGFzQ291cnNlSWQ6IGJvb2xlYW4gPSB0aGlzLmNvdXJzZUlkICE9IG51bGw7XHJcbiAgICAgICAgbGV0IGNvdXJzZUlkU3RyOiBzdHJpbmcgPSBTdHJpbmcodGhpcy5jb3Vyc2VJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZENvdXJzZVBlcm1pc3Npb25zSWYoaGFzQ291cnNlSWQsIGNvdXJzZUlkU3RyLCBjb3Vyc2VQZXJtaXNzaW9ucyA9PiBjb3Vyc2VQZXJtaXNzaW9ucy5lZGl0KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkQ291cnNlKHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQ291cnNlQnVuZGxlRm4gPSB0aGlzLmNyZWF0ZUNvdXJzZUJ1bmRsZS5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5kcmFnb3ZlckV2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJFdmVudEhhbmRsZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZHJhZ292ZXJFdmVudEhhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xyXG4gICAgICAgIGxldCBkcm9wRnJvbUVkaXRDb3Vyc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRyb3BGcm9tRWRpdENvdXJzZVwiKTtcclxuICAgICAgICBsZXQgZHJvcEZyb21FZGl0Q291cnNlTm90ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZHJvcEZyb21FZGl0Q291cnNlTm90ZVwiKTtcclxuICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ25vbmUnO1xyXG5cclxuICAgICAgICBpZiAoZHJvcEZyb21FZGl0Q291cnNlID09IGVsZW0gfHwgZHJvcEZyb21FZGl0Q291cnNlTm90ZSA9PSBlbGVtKSB7XHJcbiAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUNvdXJzZUJ1bmRsZSgpOiBJUHJvbWlzZTxJQnVuZGxlPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvdXJzZS5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZUNvdXJzZUJ1bmRsZSh0aGlzLmNvdXJzZS5pZCwgdGhpcy5jb3Vyc2UudmVyc2lvbilcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1bmRsZSA9IHJlc3VsdFtcImJ1bmRsZVwiXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZS5idW5kbGVJZCA9IGJ1bmRsZS5pZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZS52ZXJzaW9uID0gcmVzdWx0W1wiY291cnNlXCJdLnZlcnNpb247XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYnVuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVuZGxlO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5zdG9yYWdlLm5vdC5hdmFpbGFibGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIk5vIGF2YWlsYWJsZSBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5yZWplY3QobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5yZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5nZXQoY291cnNlSWQpLnRoZW4oY291cnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBjb3Vyc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZXRDb3Vyc2VQYWdlSGVhZGVyQnJlYWRjcnVtYnModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2UsIHRoaXMuY291cnNlc1JvdXRlcik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL1NlY3VyZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtVcGxvYWRVdGlsc30gZnJvbSBcIi4uL3V0aWxzL1VwbG9hZFV0aWxzXCI7XHJcbmltcG9ydCB7SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc1wiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIi4uL3V0aWxzL01vbWVudFwiO1xyXG5pbXBvcnQge1VwbG9hZHNTZXJ2aWNlfSBmcm9tIFwiLi4vc3RvcmFnZS9VcGxvYWRzU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SU1vZHVsZX0gZnJvbSBcIi4vbW9kZWxzL0lNb2R1bGVcIjtcclxuaW1wb3J0IHtJU2VjdGlvbn0gZnJvbSBcIi4vbW9kZWxzL0lTZWN0aW9uXCI7XHJcbmltcG9ydCB7U2VjdGlvblR5cGV9IGZyb20gXCIuL21vZGVscy9TZWN0aW9uVHlwZVwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcbmltcG9ydCB7UHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzfSBmcm9tIFwiLi4vdXRpbHMvUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzXCI7XHJcbmltcG9ydCB7SUNlcnRpZmljYXRlVGVtcGxhdGV9IGZyb20gXCIuLi9jZXJ0aWZpY2F0ZXMvbW9kZWxzL0lDZXJ0aWZpY2F0ZVRlbXBsYXRlXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVTZXJ2aWNlfSBmcm9tIFwiLi4vY2VydGlmaWNhdGVzL0NlcnRpZmljYXRlU2VydmljZVwiO1xyXG5pbXBvcnQge0NlcnRpZmljYXRlVGVtcGxhdGVUeXBlfSBmcm9tIFwiLi4vY2VydGlmaWNhdGVzL21vZGVscy9DZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuLi9jb21wb25lbnRzL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tQnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vYnJhbmRpbmcvQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVFTZXJ2aWNlfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlIGV4dGVuZHMgSUNlcnRpZmljYXRlVGVtcGxhdGUge1xyXG4gICAgdHlwZT86IENlcnRpZmljYXRlVGVtcGxhdGVUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ291cnNlQ3JlYXRlRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjb3Vyc2VzLkNvdXJzZUNyZWF0ZUVkaXRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIE1BWF9SRVFVSVJFRF9FTEVDVElWRVNfTlVNQkVSOiBudW1iZXIgPSAxMDAwMDAwO1xyXG4gICAgcHVibGljIE1BWF9DT1VSU0VfQVZBSUxBQklMSVRZX0NPTVBMRVRFRDogbnVtYmVyID0gMTAwMDAwMDtcclxuICAgIHB1YmxpYyBNQVhfQ09VUlNFX0FWQUlMQUJJTElUWV9TVEFSVEVEOiBudW1iZXIgPSAxMDAwMDAwO1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGNvdXJzZTogSUNvdXJzZSA9IHtvd25lcklkczogW119O1xyXG4gICAgcHVibGljIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzOiBBcnJheTxJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcz4gPSBbXTtcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcklkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY3VycmVudFVzZXJOYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZGlzYWJsZWRTYXZlQnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzVmFsaWRpdHlJblBlcnBldHVpdHk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHByZXZpZXdVcmw6IHN0cmluZztcclxuICAgIHB1YmxpYyBjcm9wcGVkSW1hZ2U6IEZpbGU7XHJcbiAgICBwdWJsaWMgaGFzUHJldmlld1VybENhbmNlbGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY291cnNlQ2VydGlmaWNhdGVzOiBBcnJheTxJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlPiA9IFtdO1xyXG4gICAgcHVibGljIGNob3NlbkNlcnRpZmljYXRlVGVtcGxhdGU6IElFeHRlbmRlZENlcnRpZmljYXRlVGVtcGxhdGU7XHJcbiAgICBwdWJsaWMgcHJldmlldzogRmlsZTtcclxuICAgIHB1YmxpYyBlZHVjYXRpb25JdGVtVHlwZTogc3RyaW5nID0gXCJDb3Vyc2VcIjtcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlckJ1c2luZXNzVW5pdHM6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuICAgIHB1YmxpYyBjdXJyZW50QnVzaW5lc3NVbml0RG9tYWluOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc0FsbEJ1c2luZXNzVW5pdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaXNDb3Vyc2VMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNVc2VyQVN5c3RlbUFkbWluaXN0cmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgXCJVcGxvYWRcIixcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBVcGxvYWRVdGlscy5OQU1FLFxyXG4gICAgICAgIENlcnRpZmljYXRlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdXBsb2FkZXI6IG5nLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRVdGlsczogVXBsb2FkVXRpbHMsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNlcnRpZmljYXRlU2VydmljZTogQ2VydGlmaWNhdGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJ1c2luZXNzVW5pdFNlcnZpY2U6IEJ1c2luZXNzVW5pdHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCkge1xyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSAkcm91dGVQYXJhbXNbQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBoYXNDb3Vyc2VJZDogYm9vbGVhbiA9IHRoaXMuY291cnNlSWQgIT0gbnVsbDtcclxuICAgICAgICBsZXQgY291cnNlSWRTdHI6IHN0cmluZyA9IFN0cmluZyh0aGlzLmNvdXJzZUlkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kU3lzdGVtUGVybWlzc2lvbnNJZighaGFzQ291cnNlSWQsIHN5c3RlbVBlcm1pc3Npb25zID0+IHN5c3RlbVBlcm1pc3Npb25zLmFkZENvdXJzZXMpXHJcbiAgICAgICAgICAgIC5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9uc0lmKGhhc0NvdXJzZUlkLCBjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMuZWRpdCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weSh1c2VyLmJ1c2luZXNzVW5pdHMsIHRoaXMuY3VycmVudFVzZXJCdXNpbmVzc1VuaXRzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmlzVXNlclN5c3RlbUFkbWluaXN0cmF0b3IoKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVXNlckFTeXN0ZW1BZG1pbmlzdHJhdG9yID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaGFzQ291cnNlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ291cnNlKCkudGhlbihjb3Vyc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVXNlckFTeXN0ZW1BZG1pbmlzdHJhdG9yICYmIGNvdXJzZS5leHRlcm5hbENvdXJzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LmZvcndhcmRUb0FjY2Vzc0RlbmllZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQ2VydGlmaWNhdGVzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEN1cnJlbnRCdXNpbmVzc1VuaXREb21haW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoU2VjdXJlZE9iamVjdFR5cGUuQ09VUlNFLCBjb3Vyc2VJZFN0cik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5FRFVDQVRJT05fQ09VUlNFU19NRU5VX0tFWSk7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTmV3IENvdXJzZVwiKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VySWQgPSB1c2VyLmlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlck5hbWUgPSB1c2VyLmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlckJ1c2luZXNzVW5pdHMgPSB1c2VyLmJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZS5vd25lcklkcy5wdXNoKHVzZXIuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzID0gdXNlci5hbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLmFsbEJ1c2luZXNzVW5pdHMgfHwgdXNlci5idXNpbmVzc1VuaXRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhTZWN1cmVkT2JqZWN0VHlwZS5DT1VSU0UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UucmVxdWlyZWRFbGVjdGl2ZXNOdW1iZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UuY291cnNlQXZhaWxhYmlsaXR5Q29tcGxldGVkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlLmNvdXJzZUF2YWlsYWJpbGl0eVN0YXJ0ZWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UuZGVmYXVsdERlbGF5ID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlLmV4dGVybmFsQ291cnNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZS5sYW5ndWFnZUlkID0gUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzLmRldGVybWluZVJlbGF0ZWRMYW5ndWFnZUlkKHVzZXIubG9jYWxlKTtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJHdhdGNoKCgpPT57cmV0dXJuIHRoaXMucHJldmlld30sIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI3ByZXZpZXdBcmVhXCIpLmF0dHIoXCJzcmNcIiwgVVJMLmNyZWF0ZU9iamVjdFVSTChuZXdWYWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIGxldCBwcmV2aWV3OiBGaWxlID0gdGhpcy5jcm9wcGVkSW1hZ2UgPT0gdW5kZWZpbmVkID8gdGhpcy5wcmV2aWV3IDogdGhpcy5jcm9wcGVkSW1hZ2U7XHJcbiAgICAgICAgbGV0IGhhc1ByZXZpZXdVcmxDYW5jZWxlZDogYm9vbGVhbiA9IHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkO1xyXG4gICAgICAgIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2UuZW5kRGF0ZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmNvdXJzZS5lbmREYXRlVGV4dCk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2Uuc3RhcnREYXRlID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuY291cnNlLnN0YXJ0RGF0ZVRleHQpO1xyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZS5kZWZhdWx0RGVsYXkgPSB0aGlzLmNvdXJzZS5kZWZhdWx0RGVsYXkgPT0gbnVsbCA/IDAgOiB0aGlzLmNvdXJzZS5kZWZhdWx0RGVsYXk7XHJcbiAgICAgICAgbGV0IGhhc0NvdXJzZUlkOiBib29sZWFuID0gdGhpcy5jb3Vyc2VJZCAhPSBudWxsICYmIHRoaXMuY291cnNlSWQgIT0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGxldCBwcm9taXNlID0gaGFzQ291cnNlSWRcclxuICAgICAgICAgICAgPyB0aGlzLmNvdXJzZVNlcnZpY2UudXBkYXRlKHRoaXMuY291cnNlLCB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLCBoYXNQcmV2aWV3VXJsQ2FuY2VsZWQsIHByZXZpZXcpXHJcbiAgICAgICAgICAgIDogdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZSh0aGlzLmNvdXJzZSwgdGhpcy5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcywgcHJldmlldyk7XHJcblxyXG4gICAgICAgIHByb21pc2UudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0W1VwbG9hZHNTZXJ2aWNlLkNPVVJTRV9LRVldLCB0aGlzLmNvdXJzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlSWQgPSB0aGlzLmNvdXJzZS5pZDtcclxuICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVNlcnZpY2UudXBkYXRlQ2VydGlmaWNhdGVUZW1wbGF0ZXNGb3JDb3Vyc2UodGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2VDZXJ0aWZpY2F0ZXMpO1xyXG4gICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aWV3ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkVXRpbHMuY2FuY2VsQ291cnNlUHJldmlld3ModGhpcy5jb3Vyc2VJZCk7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlID0gdGhpcy51cGxvYWQocHJldmlldywgdGhpcy5jb3Vyc2VJZCwgXCJwcmV2aWV3XCIpLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc3RvcmFnZS5ub3QuYXZhaWxhYmxlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZS4gVGh1bWJuYWlsIGhhcyBub3QgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5wcmV2aWV3LnR5cGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkludmFsaWQgZmlsZSBmb3JtYXQ6IHBsZWFzZSBzZWxlY3QgYSBmaWxlIHdpdGggLmpwZyBvciAucG5nIGV4dGVuc2lvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLiRxLndoZW4ocHJvbWlzZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ291cnNlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN1Y2Nlc3NDYWxsYmFjayh0aGlzLmNvdXJzZUlkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3VjY2Vzc0NhbGxiYWNrKHRoaXMuY291cnNlSWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFByZXZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJldmlldykge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3VXJsID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNyb3BwZWRJbWFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNyb3BwZWRJbWFnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc3RvcmVQcmV2aWV3VXJsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJldmlldyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnByZXZpZXdVcmwgPSB0aGlzLmNvdXJzZS5wcmV2aWV3VXJsO1xyXG4gICAgICAgIHRoaXMucHJldmlldyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmNyb3BwZWRJbWFnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodGhpcy5jb3Vyc2UucHJldmlld1VybCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZS5wcmV2aWV3VXJsID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhblZhbGlkaXR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291cnNlLmVuZERhdGVUZXh0ID0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29weSgpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIkRvIHlvdSB3YW50IHRvIGNvcHkgdGhpcyBjb3Vyc2U/XCIsIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiQ29weSBjb3Vyc2VcIixcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgICAgICBsZXQgcHJldmlldzogRmlsZSA9IHRoaXMucHJldmlldztcclxuICAgICAgICAgICAgbGV0IGhhc1ByZXZpZXdVcmxDYW5jZWxlZDogYm9vbGVhbiA9IHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZS5lbmREYXRlID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuY291cnNlLmVuZERhdGVUZXh0KTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2Uuc3RhcnREYXRlID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuY291cnNlLnN0YXJ0RGF0ZVRleHQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb3Vyc2VJZCkge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIkNvcHlpbmcgb2YgdGhlIGNvdXJzZSBzdGFydGVkLiBUaGUgbmV3IGNvdXJzZSBwYWdlIHdpbGwgb3BlbiBhdXRvbWF0aWNhbGx5IHdoZW4gY29weWluZyBpcyBjb21wbGV0ZS4gRG8gbm90IGxlYXZlIHRoZSBjdXJyZW50IHBhZ2UuXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNvcHkodGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJBIGNvcHkgb2YgJzpjb3Vyc2VfbmFtZScgaGFzIGJlZW4gY3JlYXRlZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6Y291cnNlX25hbWVcIiwgdGhpcy5jb3Vyc2UudG9waWMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdC53YXJuaW5ncyAmJiByZXN1bHQud2FybmluZ3MubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lndhcm5pbmdzLmZvckVhY2godyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPT0gXCJwcmV2aWV3LmZpbGUuY3JlYXRpb24uZXJyb3JcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJQcmV2aWV3IGZpbGUgY29weSBmYWlsZWQgZm9yIGNvdXJzZSAnOmNvdXJzZV9uYW1lJ1wiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6Y291cnNlX25hbWVcIiwgdGhpcy5jb3Vyc2UudG9waWMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3ID09IFwicHJldmlldy5maWxlLm5vdC5yZWFkeVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIlByZXZpZXcgZmlsZSBmb3IgY291cnNlICc6Y291cnNlX25hbWUnIHdhcyBub3QgcmVhZHkgZm9yIGNvcHlpbmdcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmNvdXJzZV9uYW1lXCIsIHRoaXMuY291cnNlLnRvcGljKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcodyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdFtVcGxvYWRzU2VydmljZS5DT1VSU0VfS0VZXSwgdGhpcy5jb3Vyc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFV0aWxzLmNhbmNlbENvdXJzZVByZXZpZXdzKHRoaXMuY291cnNlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWQocHJldmlldywgdGhpcy5jb3Vyc2VJZCwgXCJwcmV2aWV3XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIudXBkYXRlVXJsKHJlc3VsdFtVcGxvYWRzU2VydmljZS5DT1VSU0VfS0VZXS5pZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnN0b3JhZ2Uubm90LmF2YWlsYWJsZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTm8gYXZhaWxhYmxlIHN0b3JhZ2UuIFRodW1ibmFpbCBoYXMgbm90IGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IucHJldmlldy50eXBlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJbnZhbGlkIGZpbGUgZm9ybWF0OiBwbGVhc2Ugc2VsZWN0IGEgZmlsZSB3aXRoIC5qcGcgb3IgLnBuZyBleHRlbnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHVibGlzaCgpOiB2b2lkIHtcclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNjb3Vyc2VQdWJsaXNoaW5nRGlhbG9nTW9kYWxcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlUHVibGlzaGluZ01vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjY291cnNlUHVibGlzaGluZ0RpYWxvZ01vZGFsXCIpLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3QoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlSWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlICYmIHRoaXMuY291cnNlLnBlcm1pc3Npb25zICYmIHRoaXMuY291cnNlLnBlcm1pc3Npb25zLnZpZXcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybCh0aGlzLmNvdXJzZUlkKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmluZGV4VXJsKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvdXJzZSgpOiBhbmd1bGFyLklQcm9taXNlPElDb3Vyc2U+IHtcclxuICAgICAgICB2YXIgcHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlPiA9IHRoaXMuY291cnNlU2VydmljZS5nZXQodGhpcy5jb3Vyc2VJZCk7XHJcbiAgICAgICAgcHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMuY291cnNlKTtcclxuICAgICAgICAgICAgbGV0IGNvdXJzZUJyZWFkY3J1bWIgPSB0aGlzLmNvdXJzZS50b3BpYyB8fCB0aGlzLmNvdXJzZS5zdWJqZWN0TmFtZTtcclxuICAgICAgICAgICAgY291cnNlQnJlYWRjcnVtYiA9IGNvdXJzZUJyZWFkY3J1bWIubGVuZ3RoID4gNDAgPyBjb3Vyc2VCcmVhZGNydW1iLnN1YnN0cmluZygwLCA0MCkgKyBcIi4uLlwiIDogY291cnNlQnJlYWRjcnVtYjtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKVxyXG4gICAgICAgICAgICAgICAgLmhlYWRlcihcIkVkaXRcIilcclxuICAgICAgICAgICAgICAgIC5hZGRQYXJlbnRMaW5rKGNvdXJzZUJyZWFkY3J1bWIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCIjXCIgKyB0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybCh0aGlzLmNvdXJzZUlkKSlcclxuICAgICAgICAgICAgICAgIC51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZS5lbmREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShyZXN1bHQuZW5kRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlLnN0YXJ0RGF0ZVRleHQgPSBNb21lbnQuaXNWYWxpZERhdGUocmVzdWx0LnN0YXJ0RGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvdXJzZS5lbmREYXRlVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbGlkaXR5SW5QZXJwZXR1aXR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3VXJsID0gdGhpcy5jb3Vyc2UucHJldmlld1VybCA/IHRoaXMuY291cnNlLnByZXZpZXdVcmwgOiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKHNlY3VyZWRPYmplY3RUeXBlOiBTZWN1cmVkT2JqZWN0VHlwZSwgb2JqZWN0SWQ/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gW107XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0QWxsT2JqZWN0UGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoc2VjdXJlZE9iamVjdFR5cGUsIG9iamVjdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMgPSByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ2VydGlmaWNhdGVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVTZXJ2aWNlLmdldENvdXJzZUNlcnRpZmljYXRlVGVtcGxhdGVzKHRoaXMuY291cnNlSWQpLnRoZW4oY2VydGlmaWNhdGVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VDZXJ0aWZpY2F0ZXMgPSBbXTtcclxuICAgICAgICAgICAgY2VydGlmaWNhdGVzLmZvckVhY2goY2VydGlmaWNhdGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGM6IElFeHRlbmRlZENlcnRpZmljYXRlVGVtcGxhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogY2VydGlmaWNhdGUuY2VydGlmaWNhdGVUZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGNlcnRpZmljYXRlLmNlcnRpZmljYXRlVGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZVRlbXBsYXRlTmFtZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlQ2VydGlmaWNhdGVzLnB1c2goYyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc29ydEJ5TmFtZShjZXJ0aWZpY2F0ZXM6IEFycmF5PElDZXJ0aWZpY2F0ZVRlbXBsYXRlPik6IHZvaWQge1xyXG4gICAgICAgIGNlcnRpZmljYXRlcy5zb3J0KChhLCBiKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgaWYgKGEubmFtZSA+PSBiLm5hbWUpIHJldHVybiAxO1xyXG4gICAgICAgICAgICBlbHNlIHJldHVybiAtMTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NTdWNjZXNzQ2FsbGJhY2soY291cnNlSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgY291cnNlIGhhcyBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuc3RydWN0dXJlVXBkYXRlVXJsKHRoaXMuY291cnNlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVN1Y2Nlc3NDYWxsYmFjayhjb3Vyc2VJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTW9kaWZpY2F0aW9ucyBvZiB0aGUgY291cnNlIGhhdmUgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICB0aGlzLmxvYWRDb3Vyc2UoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ2VydGlmaWNhdGVzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLkNPVVJTRSwgU3RyaW5nKGNvdXJzZUlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0TW9kdWxlRm9yQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiBJTW9kdWxlIHtcclxuICAgICAgICB2YXIgbW9kdWxlOiBJTW9kdWxlID0ge307XHJcbiAgICAgICAgbW9kdWxlLmNvdXJzZUlkID0gY291cnNlSWQ7XHJcbiAgICAgICAgbW9kdWxlLm5hbWUgPSBcIk1vZHVsZSAxXCI7XHJcbiAgICAgICAgbW9kdWxlLnNvcnRJbmRleCA9IDE7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERlZmF1bHRTZWN0aW9uRm9yTW9kdWxlKGNvdXJzZUlkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIpOiBJU2VjdGlvbiB7XHJcbiAgICAgICAgdmFyIHNlY3Rpb246IElTZWN0aW9uID0ge307XHJcbiAgICAgICAgc2VjdGlvbi5jb3Vyc2VJZCA9IGNvdXJzZUlkO1xyXG4gICAgICAgIHNlY3Rpb24ucGFyZW50SWQgPSBudWxsO1xyXG4gICAgICAgIHNlY3Rpb24ubmFtZSA9IFwiU2VjdGlvbiAxXCI7XHJcbiAgICAgICAgc2VjdGlvbi5tb2R1bGVJZCA9IG1vZHVsZUlkO1xyXG4gICAgICAgIHNlY3Rpb24udHlwZUtleSA9IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OXTtcclxuICAgICAgICBzZWN0aW9uLnN1bW1hcnkgPSBcIlwiO1xyXG4gICAgICAgIHNlY3Rpb24uc29ydEluZGV4ID0gMTtcclxuICAgICAgICByZXR1cm4gc2VjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CdXNpbmVzc1VuaXRDaGFuZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvdXJzZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoU2VjdXJlZE9iamVjdFR5cGUuQ09VUlNFKTtcclxuICAgICAgICAgICAgdGhpcy4kdGltZW91dChhID0+IHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEJ1c2luZXNzVW5pdFNlbGVjdG9yVmlzaWJsZSgpIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRPd25lcnNVcmwoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGJhc2VVcmw6IHN0cmluZyA9IFwiL2FwaS91c2VyU2VsZWN0b3IvdXNlcnNcIjtcclxuICAgICAgICByZXR1cm4gYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgPyBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKGJhc2VVcmwgKyBcIj9idXNpbmVzc1VuaXRJZD06YnVzaW5lc3NVbml0SWRcIilcclxuICAgICAgICAgICAgICAgIC53aXRoKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgLmJ1aWxkKClcclxuICAgICAgICAgICAgOiBiYXNlVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VIYXNOb093bmVycygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2Uub3duZXJJZHMubGVuZ3RoID09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrQ291cnNlT3duZXJzKCkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gdGhpcy5jb3Vyc2Uub3duZXJJZHMubGVuZ3RoID09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1lbnVQYXRoVG9DZXJ0aWZpY2F0ZVRlbXBsYXRlcygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIkFkbWluaXN0cmF0aW9uXCIgKyBcIuKGklwiICsgXCJDZXJ0aWZpY2F0ZSBUZW1wbGF0ZXNcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZChmaWxlOiBGaWxlLCBjb3Vyc2VJZDogbnVtYmVyLCBmaWxlVHlwZTogc3RyaW5nKTogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkUHJvbWlzZTxGaWxlPiB7XHJcbiAgICAgICAgbGV0IHVybEJ1aWxkZXIgPSB0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzL3VwbG9hZD9jb3Vyc2VJZD06Y291cnNlSWQmZmlsZVR5cGU9OmZpbGVUeXBlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmZpbGVUeXBlXCIsIGZpbGVUeXBlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGFuZ3VsYXIuY29weSh1cmxCdWlsZGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZhbGlkRXhwaXJhdGlvbkRhdGUoc3RhcnREYXRlVGV4dDogc3RyaW5nLCBlbmREYXRlVGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzdGFydERhdGVUZXh0IHx8ICFlbmREYXRlVGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmNvdXJzZS5zdGFydERhdGVUZXh0KTtcclxuICAgICAgICBsZXQgZW5kRGF0ZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmNvdXJzZS5lbmREYXRlVGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIGVuZERhdGUgPiBzdGFydERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dDcm9wcGVyTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgJChcIiNpbWFnZUNyb3BwZXJNb2RhbFwiKS5tb2RhbChcInNob3dcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrQ3JvcHBlcigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnByZXZpZXcpXHJcbiAgICAgICAgaWYgKHRoaXMucHJldmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Nyb3BwZXJNb2RhbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0Nyb3BwZXJNb2RhbEFmdGVyTG9hZCgpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ICE9IHVuZGVmaW5lZCB8fCB0aGlzLnByZXZpZXdVcmwgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hvd0Nyb3BwZXJNb2RhbCgpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2hvd0Nyb3BwZXJNb2RhbEFmdGVyTG9hZCgpXHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29weUNvdXJzZUlkKCkge1xyXG4gICAgICAgIGxldCB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb3Vyc2VJZFVybFN0cmluZ1wiKS5pbm5lclRleHQ7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtKTtcclxuICAgICAgICBlbGVtLnZhbHVlID0gXCJcIiArIHRleHQ7XHJcbiAgICAgICAgZWxlbS5zZWxlY3QoKTtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudEJ1c2luZXNzVW5pdERvbWFpbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudEJ1c2luZXNzVW5pdERvbWFpbikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb3Vyc2UuYnVzaW5lc3NVbml0SWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VydmljZS5nZXRCVURvbWFpbk5hbWUodGhpcy5jb3Vyc2UuYnVzaW5lc3NVbml0SWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzVW5pdERvbWFpbiA9IGAke3Jlc3VsdH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzVW5pdERvbWFpbiA9IGAke3RoaXMuJGxvY2F0aW9uLmFic1VybCgpLnNwbGl0KFwiI1wiKVswXX0jYDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QnVzaW5lc3NVbml0RG9tYWluID0gYCR7dGhpcy4kbG9jYXRpb24uYWJzVXJsKCkuc3BsaXQoXCIjXCIpWzBdfSNgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QnVzaW5lc3NVbml0RG9tYWluID0gYCR7dGhpcy4kbG9jYXRpb24uYWJzVXJsKCkuc3BsaXQoXCIjXCIpWzBdfSNgO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuaW1wb3J0IElEZWZlcnJlZCA9IGFuZ3VsYXIuSURlZmVycmVkO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7Q29tbW9uTmF2aWdhdGlvbn0gZnJvbSBcIi4uL2NvbW1vbi9Db21tb25OYXZpZ2F0aW9uXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvQXV0aFJvdXRlclwiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4vQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge1Byb2dyZXNzU2VydmljZX0gZnJvbSBcIi4vUHJvZ3Jlc3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtJTW9kdWxlfSBmcm9tIFwiLi9tb2RlbHMvSU1vZHVsZVwiO1xyXG5pbXBvcnQge0lNYXRlcmlhbH0gZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvSU1hdGVyaWFsXCI7XHJcbmltcG9ydCB7SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkfSBmcm9tIFwiLi9tb2RlbHMvSVNlY3Rpb25JbkhpZXJhcmNoeVwiO1xyXG5pbXBvcnQge0lTZWN0aW9ufSBmcm9tIFwiLi9tb2RlbHMvSVNlY3Rpb25cIjtcclxuaW1wb3J0IHtTZWN0aW9uVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1NlY3Rpb25UeXBlXCI7XHJcbmltcG9ydCB7SU11bHRpbWVkaWFTb3VyY2V9IGZyb20gXCIuLi9jb21wb25lbnRzL21vZGVscy9JTXVsdGltZWRpYVwiO1xyXG5pbXBvcnQge09iamVjdFR5cGVVdGlsc30gZnJvbSBcIi4uL3V0aWxzL09iamVjdFR5cGVVdGlsc1wiO1xyXG5pbXBvcnQge1F1aXpTZXJ2aWNlfSBmcm9tIFwiLi4vcXVpenplcy9RdWl6U2VydmljZVwiO1xyXG5pbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi9idW5kbGVzL0J1bmRsZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VQcm9ncmVzc1N0YXR1c30gZnJvbSBcIi4vbW9kZWxzL0NvdXJzZVByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7SVBhcnRpY2lwYXRpb25Gb3JtfSBmcm9tIFwiLi4vY29tbW9uL0lQYXJ0aWNpcGF0aW9uRm9ybVwiO1xyXG5pbXBvcnQge0lMYW5kaW5nUGFnZX0gZnJvbSBcIi4vbW9kZWxzL0lMYW5kaW5nUGFnZVwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIi4uL3V0aWxzL01vbWVudFwiO1xyXG5pbXBvcnQge1N0b3JhZ2VzLCBTdG9yYWdlV3JhcHBlcn0gZnJvbSBcIi4uL2luZnJhc3RydWN0dXJlL1N0b3JhZ2VcIjtcclxuaW1wb3J0IHtJQ291cnNlUHJvZ3Jlc3N9IGZyb20gXCIuL21vZGVscy9JQ291cnNlUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge0lCdW5kbGVGaWxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZUZpbGVcIjtcclxuaW1wb3J0IHtTZWN0aW9uUHJvZ3Jlc3NTdGF0dXN9IGZyb20gXCIuL21vZGVscy9TZWN0aW9uUHJvZ3Jlc3NTdGF0dXNcIjtcclxuaW1wb3J0IHtNYXRlcmlhbFR5cGVLZXlFbnVtfSBmcm9tIFwiLi4vbWF0ZXJpYWxzL21vZGVscy9NYXRlcmlhbFR5cGVcIjtcclxuaW1wb3J0IHtSaWNoVGV4dENvbnRlbnRMb2FkaW5nU3luY2hyb25pemVyfSBmcm9tIFwiLi4vY29tcG9uZW50cy9yaWNodGV4dC9SaWNoVGV4dENvbnRlbnRMb2FkaW5nU3luY2hyb25pemVyXCI7XHJcbmltcG9ydCB7SUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhfSBmcm9tIFwiLi4vY29tcG9uZW50cy9tb2RlbHMvSUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuLi9jb21wb25lbnRzL21vZGVscy9FdmVudFwiO1xyXG5pbXBvcnQge1JpY2hUZXh0QmluZENvbnRyb2xsZXJ9IGZyb20gXCIuLi9jb21wb25lbnRzL3JpY2h0ZXh0L1JpY2hUZXh0QmluZERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0NvdXJzZUFjdGlvbkxvZ1NlcnZpY2V9IGZyb20gXCIuLi9zdGF0aXN0aWNzL0NvdXJzZUFjdGlvbkxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VBY3Rpb25UeXBlfSBmcm9tIFwiLi4vc3RhdGlzdGljcy9tb2RlbHMvQ291cnNlQWN0aW9uVHlwZVwiO1xyXG5pbXBvcnQge0V2ZW50IGFzIENvbW1vbkV2ZW50fSBmcm9tIFwiLi4vY29tbW9uL0V2ZW50XCI7XHJcbmltcG9ydCB7SVNlY3Rpb25Qcm9ncmVzc30gZnJvbSBcIi4vbW9kZWxzL0lTZWN0aW9uUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtDb3Vyc2VEZXRhaWxzVXRpbHN9IGZyb20gXCIuL0NvdXJzZURldGFpbHNVdGlsc1wiO1xyXG5pbXBvcnQgSUF1Z21lbnRlZEpRdWVyeSA9IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeTtcclxuaW1wb3J0IElSb290U2NvcGVTZXJ2aWNlID0gYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZTtcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5nc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDZXJ0aWZpY2F0ZVNlcnZpY2V9IGZyb20gXCIuLi9jZXJ0aWZpY2F0ZXMvQ2VydGlmaWNhdGVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uU2VydmljZX0gZnJvbSBcIi4uL2NvbW1vbi9Db21tb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7Q291cnNlU2Nvcm1BZGFwdGVyfSBmcm9tIFwiLi9Db3Vyc2VTY29ybUFkYXB0ZXJcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRofSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aFwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJRW5yb2xsbWVudENvbmZpZ3VyYXRpb259IGZyb20gXCIuL21vZGVscy9JRW5yb2xsbWVudENvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtJRW5yb2xsbWVudFNlYXR9IGZyb20gXCIuL21vZGVscy9JRW5yb2xsbWVudFNlYXRcIjtcclxuaW1wb3J0IHtFbnJvbGxtZW50U2VhdFN0YXR1c30gZnJvbSBcIi4vbW9kZWxzL0Vucm9sbG1lbnRTZWF0U3RhdHVzXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJVG9wVGFiQ3VzdG9tQnV0dG9ufSBmcm9tIFwiLi4vY29tcG9uZW50cy9WaHNDb3Vyc2VWaWV3VG9wVGFic1wiO1xyXG5pbXBvcnQge1B1cmNoYXNlU2VydmljZX0gZnJvbSBcIi4uL2ZpbmFuY2VzL1B1cmNoYXNlU2VydmljZVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtDb3Vyc2VTY29ybTIwMDRBZGFwdGVyfSBmcm9tIFwiLi9Db3Vyc2VTY29ybTIwMDRBZGFwdGVyXCI7XHJcbmltcG9ydCB7SVByb2R1Y3R9IGZyb20gXCIuLi9maW5hbmNlcy9tb2RlbHMvSVByb2R1Y3RcIjtcclxuaW1wb3J0IHtQYXlQYWxTZXJ2aWNlfSBmcm9tIFwiLi4vaW50ZWdyYXRpb24vcGF5cGFsL1BheVBhbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtGaW5hbmNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvRmluYW5jZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtSZWRpcmVjdFJlYXNvbn0gZnJvbSBcIi4uL2F1dGhjb3JlL1JlZGlyZWN0UmVhc29uXCI7XHJcbmltcG9ydCB7QXp1cmVDb2duaXRpdmVTZXJ2aWNlc1NlcnZpY2V9IGZyb20gXCIuLi9pbnRlZ3JhdGlvbi9henVyZUNvZ25pdGl2ZVNlcnZpY2VzL0F6dXJlQ29nbml0aXZlU2VydmljZXNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUltbWVyc2l2ZVJlYWRlckxhdW5jaERhdGF9IGZyb20gXCIuLi9pbnRlZ3JhdGlvbi9henVyZUNvZ25pdGl2ZVNlcnZpY2VzL21vZGVsL0lJbW1lcnNpdmVSZWFkZXJMYXVuY2hEYXRhXCI7XHJcbmltcG9ydCB7VXNlck5vdGVzU2VydmljZX0gZnJvbSBcIi4vVXNlck5vdGVzU2VydmljZVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7SUNvdXJzZVNlY3Rpb25Qcm9ncmVzc0VudHJ5fSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVNlY3Rpb25Qcm9ncmVzc0VudHJ5XCI7XHJcbmltcG9ydCB7SUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3N9IGZyb20gXCIuL21vZGVscy9JSW5kaXZpZHVhbFNlY3Rpb25Qcm9ncmVzc1wiO1xyXG5pbXBvcnQge1NlY3Rpb25QYXNzaW5nVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1NlY3Rpb25QYXNzaW5nVHlwZVwiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhvcml6ZU5ldFNlcnZpY2V9IGZyb20gXCIuLi9pbnRlZ3JhdGlvbi9hdXRob3JpemVuZXQvQXV0aG9yaXplTmV0U2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWN0aW9uU3VtbWFyeX0gZnJvbSBcIi4vbW9kZWxzL0lTZWN0aW9uU3VtbWFyeVwiO1xyXG5pbXBvcnQge0ZyZWVFbnJvbGxtZW50U2VydmljZX0gZnJvbSBcIi4uL2ludGVncmF0aW9uL2ZyZWVlbnJvbGxtZW50L0ZyZWVFbnJvbGxtZW50U2VydmljZVwiO1xyXG5pbXBvcnQge0lCdXNpbmVzc1VuaXR9IGZyb20gXCIuLi9idXNpbmVzc1VuaXRzL21vZGVscy9JQnVzaW5lc3NVbml0XCI7XHJcbmltcG9ydCB7U2xpZGVTZXJ2aWNlfSBmcm9tIFwiLi4vc2xpZGVzL1NsaWRlU2VydmljZVwiO1xyXG5pbXBvcnQge1Zoc1NlbGVjdEVtYmVkZGVkQnVuZGxlTWF0ZXJpYWxDb250cm9sbGVyfSBmcm9tIFwiLi4vY29tcG9uZW50cy9yaWNodGV4dC9WaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZURpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1JhbmRvbVV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvUmFuZG9tVXRpbHNcIjtcclxuaW1wb3J0IHtHYW1pZmljYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL0dhbWlmaWNhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHtCYWRnZXNTZXJ2aWNlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL0JhZGdlc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJQWN0aW9uQmFkZ2V9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vbW9kZWxzL0lBY3Rpb25CYWRnZVwiO1xyXG5pbXBvcnQge1BlcnNvbmFsUm91dGVyfSBmcm9tIFwiLi4vdXJscy9QZXJzb25hbFJvdXRlclwiO1xyXG5pbXBvcnQge0lCYWRnZX0gZnJvbSBcIi4uL2dhbWlmaWNhdGlvbi9tb2RlbHMvSUJhZGdlXCI7XHJcbmltcG9ydCB7VmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXl9IGZyb20gXCIuLi9tYXRlcmlhbHMvbW9kZWxzL1ZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5XCI7XHJcbmltcG9ydCB7SU1hdGVyaWFsUHJvZ3Jlc3N9IGZyb20gXCIuLi9tYXRlcmlhbHMvbW9kZWxzL0lNYXRlcmlhbFByb2dyZXNzXCI7XHJcblxyXG5kZWNsYXJlIHZhciBwYXlwYWw7XHJcblxyXG5leHBvcnQgY2xhc3MgQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjb3Vyc2VzLkNvdXJzZURldGFpbHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBTRUNUSU9OX1NVTU1BUllfUklDSF9URVhUX0lEID0gXCJzZWN0aW9uX3N1bW1hcnlfcmljaF90ZXh0XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIExBTkRJTkdfUEFHRV9SSUNIX1RFWFRfSUQgPSBcImxhbmRpbmdfcGFnZV9yaWNoX3RleHRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ09VUlNFX0xPQURfQVRfU1RBUlRfQlVORExFU19SSUNIX1RFWFRfSUQgPSBcImNvdXJzZV9sb2FkX2F0X3N0YXJ0X2J1bmRsZXNfcmljaF90ZXh0XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNMSURFX1RFTVBMQVRFU19CVU5ETEVfUklDSF9URVhUX0lEID0gXCJzbGlkZV90ZW1wbGF0ZXNfYnVuZGxlX3JpY2hfdGV4dFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBTTElERV9DSEFOR0VfREVMQVk6IG51bWJlciA9IDIwMDtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBNT0RVTEVfUFJFVklFV19JTUFHRV9CVU5ETEVfRklMRV9URU1QTEFURSA9IFwibW9kdWxlXzppbmRleF9sb2dvLnBuZ1wiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQ0hBTkdFX1NFQ1RJT05fUEFSQU1FVEVSID0gXCJjaGFuZ2VTZWN0aW9uXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEZVTExfU0NSRUVOX1BBUkFNRVRFUiA9IFwiZnVsbFNjcmVlblwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBQVVJDSEFTRV9QQVJBTUVURVIgPSBcInB1cmNoYXNlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNNQVJUX1BVUkNIQVNFX1BBUkFNRVRFUiA9IFwic21hcnRQdXJjaGFzZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBNQVhfUkVDVVJTSU9OX0RFUFRIID0gMztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEJBREdFX0tFWVMgPSBbJ0NfQ01QTCcsICdMUF9DTVBMJywgJ0ZTVF9DTVBMX0NSUycsICdGVEhfQ01QTF9DUlMnLCAnVE5USF9DTVBMX0NSUyddO1xyXG5cclxuICAgIHByaXZhdGUgREVGQVVMVF9MRUZUX01FTlVfTU9EVUxFOiBudW1iZXIgPSAxO1xyXG4gICAgcHJpdmF0ZSBERUZBVUxUX0lOTkVSX01FTlVfSVRFTTogbnVtYmVyID0gMTtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBTRUNUSU9OX1NVTU1BUllfUkVRVUVTVF9QQUdFX1NJWkUgPSAyO1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIFdBSVRfTE1TX0lOVEVSVkFMID0gMTAwMDA7XHJcblxyXG4gICAgcHVibGljIGNvdXJzZVByb2dyZXNzUGVyY2VudDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBzZWN0aW9uc01hcDogTWFwPG51bWJlciwgQXJyYXk8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkPj47XHJcbiAgICBwcml2YXRlIHNlY3Rpb25zTGlzdDogQXJyYXk8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkPiA9IFtdO1xyXG4gICAgcHVibGljIG1lbnVLZXk6IGFueTtcclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc0NvdXJzZUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzU2xpZGVMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzbGlkZUxvYWRpbmdDb3VudGVyOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGlzU2xpZGVSZW1vdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzU2xpZGVCYWNrOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIG1vZHVsZXM6IEFycmF5PElNb2R1bGU+ID0gW107XHJcbiAgICBwdWJsaWMgbW9kdWxlc1Byb2dyZXNzOiBNYXA8bnVtYmVyLCBudW1iZXI+O1xyXG4gICAgcHVibGljIG1hdGVyaWFsOiBJTWF0ZXJpYWwgPSB7fTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZE1vZHVsZTogSU1vZHVsZSA9IG51bGw7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRTZWN0aW9uOiBJU2VjdGlvbiA9IG51bGw7XHJcbiAgICBwdWJsaWMgc2VjdGlvbk1hdGVyaWFsczogQXJyYXk8SU1hdGVyaWFsPiA9IFtdO1xyXG4gICAgcHVibGljIG11bHRpbWVkaWFTb3VyY2VzOiBJTXVsdGltZWRpYVNvdXJjZVtdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkTWF0ZXJpYWxJZDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBzZWN0aW9uTWF0ZXJpYWxzQ2FjaGU6IE1hcDxudW1iZXIsIElNYXRlcmlhbFtdPiA9IG5ldyBNYXA8bnVtYmVyLCBJTWF0ZXJpYWxbXT4oKTtcclxuICAgIHB1YmxpYyBjb3Vyc2VTdGFydGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm8gPSB7fTtcclxuICAgIHB1YmxpYyBuZXh0U2VjdGlvbjogSVNlY3Rpb24gPSB7fTtcclxuICAgIHB1YmxpYyBwcmV2U2VjdGlvbjogSVNlY3Rpb24gPSB7fTtcclxuICAgIHB1YmxpYyBtb2R1bGVJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHNlY3Rpb25JZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHByb2R1Y3RzOiBJUHJvZHVjdFtdO1xyXG4gICAgcHVibGljIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgYU5ldFRva2VuOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgQU5ldFRyYW5zYWN0aW9uSWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBhTmV0SWZyYW1lQ29tbXVuaWNhdG9yOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtOiBJUGFydGljaXBhdGlvbkZvcm07XHJcbiAgICBwdWJsaWMgc2hvd1BhcnRpY2lwYXRpb25Gb3JtOiBib29sZWFuO1xyXG4gICAgcHVibGljIHdhbnRUb1N1Ym1pdFBhcnRpY2lwYXRpb25Gb3JtOiBib29sZWFuO1xyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtRGF0YTogYW55O1xyXG4gICAgcHVibGljIGxhbmRpbmdQYWdlOiBJTGFuZGluZ1BhZ2U7XHJcbiAgICBwdWJsaWMgc2hvd1N0YXJ0QnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgY291cnNlUHJvZ3Jlc3M6IElDb3Vyc2VQcm9ncmVzcztcclxuXHJcbiAgICBwcml2YXRlIGNvdXJzZTogSUNvdXJzZSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBlbnJvbGxtZW50Q29uZmlnOiBJRW5yb2xsbWVudENvbmZpZ3VyYXRpb247XHJcblxyXG4gICAgcHVibGljIGNvdXJzZUNlcnRpZmljYXRlczogQXJyYXk8SVNlbGVjdGFibGU+ID0gW107XHJcbiAgICBwdWJsaWMgY2VydGlmaWNhdGVQYXJhbWV0ZXJzOiBhbnkgPSB7XHJcbiAgICAgICAgZm9ybWF0OiAncGRmJ1xyXG4gICAgfTtcclxuICAgIHB1YmxpYyBjZXJ0aWZpY2F0ZUNvbnRlbnQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBkaXNhYmxlUGFydGljaXBhdGlvbkZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBtZW51U2hvdzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgY291cnNlQnVuZGxlOiBJQnVuZGxlO1xyXG4gICAgcHVibGljIHNsaWRlVGVtcGxhdGVzQnVuZGxlOiBJQnVuZGxlO1xyXG4gICAgcHVibGljIGNvdXJzZUxvYWRBdFN0YXJ0QnVuZGxlc1RleHQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBzbGlkZVRlbXBsYXRlc0J1bmRsZVRleHQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgaXNNYXRlcmlhbEVtcHR5OiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzTWF0ZXJpYWxOb3RSZWFkeTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1ZpZXdBbGxvd2VkOiBib29sZWFuO1xyXG4gICAgcHVibGljIG1hdGVyaWFsVHlwZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGlzRGF0ZVByb3BlcjogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgc2hvd1F1aXpJbmZvU2VjdGlvbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgc2hvd1F1aXpSZXN1bHRzU2VjdGlvbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgc2hvd1F1aXpTdGFydFNlY3Rpb24gPSB0cnVlO1xyXG4gICAgcHVibGljIHNob3dMYW5kaW5nUGFnZVN0YXJ0Q291cnNlQnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgICBwcml2YXRlIHNlY3Rpb25TdGF0dXNVcGRhdGVQcm9taXNlOiBJUHJvbWlzZTxhbnk+ID0gbnVsbDtcclxuICAgIHByaXZhdGUgaW50ZXJhY3Rpb25zU2F2ZVByb21pc2U6IElQcm9taXNlPGFueT4gPSBudWxsO1xyXG4gICAgcHVibGljIGZ1bGxTY3JlZW5Nb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcHVyY2hhc2VQYXJhbWV0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGxvZ0JlZ2luU2VjdGlvblZpZXdUaW1lc3RhbXA6IG51bWJlcjtcclxuICAgIHByaXZhdGUgbG9nT2xkU2VjdGlvbklkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGxvZ09sZFBhdGg6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgaXNNb2R1bGVIaWRkZW5Db250ZW50VmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNDb3Vyc2VMZWZ0TWVudVNob3duOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgc2VjdGlvblN0YXR1c1VwZGF0ZVZpYUxtc0FwaU9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgd2FpdExtc1RpbWVvdXRQcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPGFueT4gPSBudWxsO1xyXG4gICAgcHVibGljIHVwZGF0ZVNlY3Rpb25Qcm9ncmVzc1Byb21pc2U6IElQcm9taXNlPGFueT4gPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBFUlJPUl9JTlRFUk5FVF9ESVNDT05ORUNURUQ6IHN0cmluZyA9IFwiZXJyb3IuaW50ZXJuZXQuZGlzY29ubmVjdGVkXCI7XHJcbiAgICBwdWJsaWMgU1VCTUlUX1NFQ1RJT05fUFJPR1JFU1NfUkVUUllfSU5URVJWQUw6IG51bWJlciA9IDEwMDAwO1xyXG5cclxuICAgIHByaXZhdGUgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuXHJcbiAgICBwdWJsaWMgcmVsYXRlZExlYXJuaW5nUGF0aHNUb1N0YXJ0OiBJTGVhcm5pbmdQYXRoW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIHByb2dyZXNzQnVuZGxlOiBJQnVuZGxlO1xyXG5cclxuICAgIHB1YmxpYyBpc0Rpc2FibGVJbmZvV2l0aE1hbnVhbENvbXBsZXRpb25JbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBxdWl6UGFzc2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyRW5yb2xsbWVudEluZm86IElFbnJvbGxtZW50U2VhdFtdO1xyXG4gICAgcHVibGljIGNvdXJzZVNlYXRVc2VkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgaXNTZWxmRW5yb2xsUHJvY2VlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzZWxmVW5FbnJvbGxVc2VyOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIHB1YmxpYyB0b3BUYWJzQ3VzdG9tQWN0aW9uczogSVRvcFRhYkN1c3RvbUJ1dHRvbltdID0gW107XHJcblxyXG4gICAgcHVibGljIGlzUHVyY2hhc2VDb25maWd1cmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2hvd1B1cmNoYXNlV2luZG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcnVuSW1tZXJzaXZlUmVhZGVyRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93TGlzdE1lZXRpbmdzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgc2VjdGlvbnNEZXB0aExldmVsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgaXNQYXltZW50SW5Qcm9jZXNzOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBpc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNoYW5nZU1haW5Db250ZW50SGVpZ2h0OiBhbnk7XHJcbiAgICBwcml2YXRlIF9sYXN0SGVpZ2h0ID0gMDtcclxuICAgIHByaXZhdGUgX2xhc3RDb250ZW50RWxlbWVudEhlaWdodCA9IDA7XHJcblxyXG4gICAgcHVibGljIGNoYW5nZU1hdGVyaWFsRm9yU3R1ZHlIZWlnaHQ6IGFueTtcclxuICAgIHB1YmxpYyBsYXN0TWF0ZXJpYWxGb3JTdHVkeUhlaWdodDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwcml2YXRlIGlzTG9hZGluZ1N0YXJ0Q291cnNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzTG9hZGluZ0NvdXJzZURhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlRXhwaXJlZERhdGU6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0OiBJQnVzaW5lc3NVbml0ID0ge307XHJcblxyXG4gICAgcHVibGljIHNsaWRlRGVja1NlY3Rpb25JZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGF1ZGlvRmlsZVVybDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBkaXNhYmxlTmV4dEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRlbGF5Q291bnRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgc2xpZGVEZWNrSXNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzU2xpZGVTaG93U3RhcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGxlYXZlQ291cnNlUGFnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNsaWRlVGVtcGxhdGVzQnVuZGxlTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHJlY3Vyc2lvbkRlcHRoOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIHNob3dBTmV0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcmV3YXJkczogQXJyYXk8SUJhZGdlPiA9IFtdO1xyXG4gICAgcHVibGljIHJld2FyZFRvU2hvdzogSUJhZGdlO1xyXG5cclxuICAgIHB1YmxpYyBlbnJvbGxJblByb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgXCIkYW5jaG9yU2Nyb2xsXCIsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBBdXRoUmVkaXJlY3QuTkFNRSxcclxuICAgICAgICBDb21tb25OYXZpZ2F0aW9uLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBBdXRoUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vblNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdW5kbGVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUHJvZ3Jlc3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUXVpelNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFN0b3JhZ2VzLlNFU1NJT05fTkFNRSxcclxuICAgICAgICBSaWNoVGV4dENvbnRlbnRMb2FkaW5nU3luY2hyb25pemVyLk5BTUUsXHJcbiAgICAgICAgQ291cnNlQWN0aW9uTG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENlcnRpZmljYXRlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUHVyY2hhc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBQYXlQYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aG9yaXplTmV0U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEZpbmFuY2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQXp1cmVDb2duaXRpdmVTZXJ2aWNlc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyTm90ZXNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uRmlsdGVyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNsaWRlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEZyZWVFbnJvbGxtZW50U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEdhbWlmaWNhdGlvblNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCYWRnZXNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVyc29uYWxSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjZTogYW5ndWxhci5JU0NFU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGFuY2hvclNjcm9sbDogYW5ndWxhci5JQW5jaG9yU2Nyb2xsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb21tb25OYXZpZ2F0aW9uOiBDb21tb25OYXZpZ2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYXV0aFJvdXRlcjogQXV0aFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVuZGxlU2VydmljZTogQnVuZGxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHJvZ3Jlc3NTZXJ2aWNlOiBQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHF1aXpTZXJ2aWNlOiBRdWl6U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVdyYXBwZXI6IFN0b3JhZ2VXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsb2FkaW5nU3luY2hyb25pemVyOiBSaWNoVGV4dENvbnRlbnRMb2FkaW5nU3luY2hyb25pemVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VBY3Rpb25Mb2dTZXJ2aWNlOiBDb3Vyc2VBY3Rpb25Mb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2VydGlmaWNhdGVTZXJ2aWNlOiBDZXJ0aWZpY2F0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHB1cmNoYXNlU2VydmljZTogUHVyY2hhc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBheVBhbFNlcnZpY2U6IFBheVBhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhvcml6ZU5ldFNlcnZpY2U6IEF1dGhvcml6ZU5ldFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgZmluYW5jZXNSb3V0ZXI6IEZpbmFuY2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhenVyZUNvZ25pdGl2ZVNlcnZpY2VzU2VydmljZTogQXp1cmVDb2duaXRpdmVTZXJ2aWNlc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJOb3Rlc1NlcnZpY2U6IFVzZXJOb3Rlc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgc2xpZGVTZXJ2aWNlOiBTbGlkZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGZyZWVFbnJvbGxtZW50U2VydmljZTogRnJlZUVucm9sbG1lbnRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGdhbWlmaWNhdGlvblNlcnZpY2U6IEdhbWlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJhZGdlc1NlcnZpY2U6IEJhZGdlc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsUm91dGVyOiBQZXJzb25hbFJvdXRlcikge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyQWxsKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSAkcm91dGVQYXJhbXNbQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU1dO1xyXG4gICAgICAgIHRoaXMubW9kdWxlSWQgPSBwYXJzZUludCgkbG9jYXRpb24uc2VhcmNoKClbQ291cnNlc1JvdXRlci5NT0RVTEVfUEFSQU1FVEVSXSkgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLnNlY3Rpb25JZCA9IHBhcnNlSW50KCRsb2NhdGlvbi5zZWFyY2goKVtDb3Vyc2VzUm91dGVyLlNFQ1RJT05fUEFSQU1FVEVSXSkgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmZ1bGxTY3JlZW5Nb2RlID0gJGxvY2F0aW9uLnNlYXJjaCgpW0NvdXJzZURldGFpbHNDb250cm9sbGVyLkZVTExfU0NSRUVOX1BBUkFNRVRFUl0gIT0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucHVyY2hhc2VQYXJhbWV0ZXIgPSAkbG9jYXRpb24uc2VhcmNoKClbQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuUFVSQ0hBU0VfUEFSQU1FVEVSXSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLkFOZXRUcmFuc2FjdGlvbklkID0gJGxvY2F0aW9uLnNlYXJjaCgpW0ZpbmFuY2VzUm91dGVyLkFORVRfVFJBTlNBQ1RJT05fSURfUEFSQU1dIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tQdXJjaGFzZVByb2Nlc3MoKTtcclxuICAgICAgICBsZXQgY291cnNlSWRTdHIgPSBTdHJpbmcodGhpcy5jb3Vyc2VJZCk7XHJcbiAgICAgICAgbGV0IGlzUHVyY2hhc2VDb3Vyc2UgPSB0aGlzLiRsb2NhdGlvbi5zZWFyY2goKVtcInB1cmNoYXNlXCJdICE9IHVuZGVmaW5lZDtcclxuICAgICAgICBsZXQgaXNTbWFydFB1cmNoYXNlQ291cnNlID0gdGhpcy4kbG9jYXRpb24uc2VhcmNoKClbXCJzbWFydFB1cmNoYXNlXCJdICE9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuTUFURVJJQUxfS0VZKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5USU1FU1RBTVBfS0VZKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5TRUNUSU9OX0tFWSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLkFOZXRUcmFuc2FjdGlvbklkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBTmV0VHJhbnNhY3Rpb24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldENvdXJzZVBlcm1pc3Npb25zKGNvdXJzZUlkU3RyKS50aGVuKGNvdXJzZVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgoaXNQdXJjaGFzZUNvdXJzZSB8fCBpc1NtYXJ0UHVyY2hhc2VDb3Vyc2UpICYmICFjb3Vyc2VQZXJtaXNzaW9ucy52aWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5pbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmRlbWFuZFZpZXdDb3Vyc2VQZXJtaXNzaW9ucyhjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMudmlldyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHVzZXIsIHRoaXMuY3VycmVudFVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBBVFRFTlRJT04hIHRoaXMuZ2V0Q291cnNlUHJvZ3Jlc3MoKSBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBtZXRob2RzIHRoYXQgdXNlIHRoaXMuY291cnNlUHJvZ3Jlc3NJZFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q291cnNlUHJvZ3Jlc3MoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocHJvZ3Jlc3M6IElDb3Vyc2VQcm9ncmVzcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdXJzZVByb21pc2VzOiBJUHJvbWlzZTxhbnk+W10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbG9hZFByb2dyZXNzQnVuZGxlID0gdGhpcy5jb3Vyc2VTdGFydGVkICYmIHByb2dyZXNzLmJ1bmRsZUlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmxvYWRQcm9ncmVzc0J1bmRsZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiRxLndoZW4obnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkUHJvZ3Jlc3NCdW5kbGUudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZVByb21pc2VzLnB1c2gobG9hZFByb2dyZXNzQnVuZGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY291cnNlTG9hZFByb21pc2UgPSB0aGlzLmxvYWRDb3Vyc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsb2FkQ291cnNlQnVuZGxlID0gY291cnNlTG9hZFByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEJ1bmRsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlUHJvbWlzZXMucHVzaChjb3Vyc2VMb2FkUHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VQcm9taXNlcy5wdXNoKGxvYWRDb3Vyc2VCdW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlUHJvbWlzZXMucHVzaCh0aGlzLmxvYWRQcm9kdWN0cyh0aGlzLmNvdXJzZUlkKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvdXJzZVN0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbG9hZENvdXJzZVN0YXJ0UGVybWlzc2lvbiA9IGNvdXJzZUxvYWRQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb3Vyc2VTdGFydFBlcm1pc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VQcm9taXNlcy5wdXNoKGxvYWRDb3Vyc2VTdGFydFBlcm1pc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxvYWRNb2R1bGVzQW5kU2VjdGlvbnMgPSBsb2FkQ291cnNlQnVuZGxlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vZHVsZXMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkU2VjdGlvbnModHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VQcm9taXNlcy5wdXNoKGxvYWRNb2R1bGVzQW5kU2VjdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb3Vyc2VTdGFydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlUHJvbWlzZXMucHVzaCh0aGlzLmxvYWRQYXJ0aWNpcGF0aW9uRm9ybSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VQcm9taXNlcy5wdXNoKHRoaXMubG9hZExhbmRpbmdQYWdlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZVByb21pc2VzLnB1c2godGhpcy5sb2FkQ291cnNlRW5yb2xsbWVudENvbmZpZygpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VQcm9taXNlcy5wdXNoKHRoaXMubG9hZENvdXJzZVB1cmNoYXNlQ29uZmlndXJlZCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VQcm9taXNlcy5wdXNoKHRoaXMubG9hZENvdXJzZUVucm9sbG1lbnRJbmZvKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5hbGwoY291cnNlUHJvbWlzZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY291cnNlLnBlcm1pc3Npb25zLnN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZWxhdGVkTGVhcm5pbmdQYXRoc1RvU3RhcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWVudUl0ZW1LZXk6IHN0cmluZyA9IE1lbnVIZWxwZXIuZ2V0Q3VycmVudE1lbnVJdGVtS2V5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVudUl0ZW1LZXkgfHwgbWVudUl0ZW1LZXkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lbnU6IHN0cmluZyA9IHRoaXMuY291cnNlLmFjdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTWVudUhlbHBlci5FRFVDQVRJT05fQ09VUlNFU19NRU5VX0tFWVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX0VYUElSRURfQ09VUlNFU19NRU5VX0tFWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKG1lbnUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb3Vyc2VTdGFydERhdGUoKTsgLy8gc2V0cyAnU3RhcnQgQ291cnNlJyBidXR0b24gdmlzaWJpbGl0eVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9kdWN0cy5sZW5ndGggPT0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5wcm9kdWN0c1swXS5wcmljZSA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICF0aGlzLmNvdXJzZS5wZXJtaXNzaW9ucy5zdGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXRoaXMuaXNBdmFpbGFibGVFbnJvbGxtZW50KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuaXNBdmFpbGFibGVQdXJjaGFzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhdGhpcy5wcm9kdWN0c1swXS5zdWJzY3JpcHRpb25QbGFuSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYU5ldFByZXBhcmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5jaGVja1BheVBhbENvcnJlY3REYXRhKHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHRQYXlQYWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFBheVBhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc21hcnRCdXR0b25zUGF5cGFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmNoZWNrQXV0aG9yaXplTmV0Q29ycmVjdERhdGEodGhpcy5jb3Vyc2UuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0QU5ldCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRBTmV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dBTmV0QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFydEJ1dHRvbnNQYXlwYWwoKS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FOZXRCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnY291cnNlIGxvYWRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NlbGZVbkVucm9sbEF2YWlsYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRUb3BUYWJzQ3VzdG9tQWN0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wdXJjaGFzZVBhcmFtZXRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UHVyY2hhc2VNb2RhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VMZWZ0Q2xvc2FibGVCdXR0b24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjbWFpbi1jb3Vyc2UtbGVmdC1iYXJcIikuaGVpZ2h0KCQoJy52aHMtd3JhcHBlcl9fY29udGVudCcpLmhlaWdodCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIubmF2YmFyLXByb2dyZXNzLWJsb2NrLmNvdXJzZS1tYWluLWNvbnRlbnQ6bm90KC5jb3Vyc2UtbWFpbi1jb250ZW50X19mdWxsLXNpemUpXCIpLmhlaWdodCgkKHdpbmRvdykuaGVpZ2h0KCkgLSAyMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0NoYW5nZUhlaWdodEZvck1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTWF0ZXJpYWxGb3JTdHVkeUhlaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRFeHBpcmF0aW9uRGF0ZUZvckNvdXJzZSh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5jb3Vyc2VQcm9ncmVzcyAmJiB0aGlzLmNvdXJzZVByb2dyZXNzLnN0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5TVEFSVEVEXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VFeHBpcmVkRGF0ZSA9IHRoaXMuY291cnNlUHJvZ3Jlc3MuZXhwaXJhdGlvbkRhdGVGb3JTdGFydGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEhdGhpcy5jb3Vyc2VQcm9ncmVzcyAmJiB0aGlzLmNvdXJzZVByb2dyZXNzLnN0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5DT01QTEVURURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUV4cGlyZWREYXRlID0gdGhpcy5jb3Vyc2VQcm9ncmVzcy5leHBpcmF0aW9uRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlRXhwaXJlZERhdGUgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nIHNlY3Rpb24gY2hhbmdlL2xlYXZlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuJG9uKCckbG9jYXRpb25DaGFuZ2VTdGFydCcsIChldmVudCwgbmV3TG9jYXRpb246IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChFdmVudC5UQV9MT0NBVElPTl9DSEFOR0VfU1RBUlQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRhbmNob3JTY3JvbGwodGhpcy4kbG9jYXRpb24uaGFzaCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dMb2NhdGlvbkNoYW5nZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJGxvY2F0aW9uLnNlYXJjaCgpW0NvdXJzZXNSb3V0ZXIuU0VDVElPTl9QQVJBTUVURVJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kbG9jYXRpb24uc2VhcmNoKClbQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuQ0hBTkdFX1NFQ1RJT05fUEFSQU1FVEVSXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnNlYXJjaChDb3Vyc2VEZXRhaWxzQ29udHJvbGxlci5DSEFOR0VfU0VDVElPTl9QQVJBTUVURVIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSWQgPSBwYXJzZUludCh0aGlzLiRsb2NhdGlvbi5zZWFyY2goKVtDb3Vyc2VzUm91dGVyLlNFQ1RJT05fUEFSQU1FVEVSXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb24gPSBDb3Vyc2VEZXRhaWxzVXRpbHMuZmluZFNlY3Rpb25FeHRlbmRlZEJ5SWQodGhpcy5zZWN0aW9uc0xpc3QsIHNlY3Rpb25JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZWZ0TWVudUl0ZW0oc2VjdGlvbi5zZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlkZVRlbXBsYXRlc0J1bmRsZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVUZW1wbGF0ZXNCdW5kbGVUZXh0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlkZURlY2tTZWN0aW9uSWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlYXZlQ291cnNlUGFnZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTbGlkZVNob3dTdGFydGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nIGJyb3dzZXIvdGFiIGNsb3NlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuJG9uKENvbW1vbkV2ZW50LkJFRk9SRV9OQVZJR0FUSU9OX1VOTE9BRCwgKGV2ZW50LCBuZXdMb2NhdGlvbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTbGlkZVNob3dTdGFydGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nQmVmb3JlVW5sb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vc2V0IExNUyBhcGkgdG8gd2luZG93XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdXJzZVNjb3JtQWRhcHRlcjogQ291cnNlU2Nvcm1BZGFwdGVyID0gbmV3IENvdXJzZVNjb3JtQWRhcHRlcih0aGlzLCBzZXNzaW9uU3RvcmFnZVdyYXBwZXIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICR3aW5kb3dbXCJBUElcIl0gPSBjb3Vyc2VTY29ybUFkYXB0ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgJHdpbmRvd1tcIkFQSV8xNDg0XzExXCJdID0gbmV3IENvdXJzZVNjb3JtMjAwNEFkYXB0ZXIoY291cnNlU2Nvcm1BZGFwdGVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDb3Vyc2VQYWdlQ3NzQ2xhc3NGb3JCb2R5KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudCh3aW5kb3cpLmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi52aHMtd3JhcHBlclwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VMZWZ0TWVudVNob3duID0gIWVsZW0uaGFzQ2xhc3MoXCJzaWRlYmFyLWNsb3NlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUxlZnRDbG9zYWJsZUJ1dHRvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudCh3aW5kb3cpLnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR3aW5kb3dbXCJBUElcIl0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUNvdXJzZVBhZ2VDc3NDbGFzc0ZvckJvZHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZU1haW5Db250ZW50SGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZU1hdGVyaWFsRm9yU3R1ZHlIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kb24oRXZlbnQuUVVJWl9TVVJWRVlfQ09NUExFVEVELCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25zKGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMucmVkaXJlY3RUb05leHRTZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRvbihFdmVudC5DT1VSU0VfUFJPR1JFU1NfU0VDVElPTl9QUk9HUkVTU19SRUxPQURfUFJPR1JFU1MsIChldmVudCwgYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTZWN0aW9ucyhmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWN0aW9uc0RlcHRoTGV2ZWwgPSB0aGlzLmNvdXJzZS5zZWN0aW9uc0RlcHRoTGV2ZWw7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlY3Rpb25zRGVwdGhMZXZlbCA9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNEZXB0aExldmVsID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oXCJyZWxvYWQuY291cnNlLmRldGFpbHNcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucXVpelBhc3NpbmcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVNb2R1bGUodGhpcy5tb2R1bGVzWzBdKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVJdGVtKHRoaXMuc2VjdGlvbnNNYXAuZ2V0KHRoaXMubW9kdWxlc1swXS5pZClbMF0uc2VjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc21hcnRCdXR0b25zUGF5cGFsKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldFBheVBhbENsaWVudElkKHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTY3JpcHQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYU5ldFByZXBhcmluZygpIHtcclxuICAgICAgICBsZXQgYmFzZURvbWFpbiA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiOi8vXCIpWzBdICsgXCI6Ly9cIiArIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiOi8vXCIpWzFdLnNwbGl0KFwiL1wiKVswXTtcclxuICAgICAgICBpZiAodGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihcImNsaWVudFwiKSA+IDApIHtcclxuICAgICAgICAgICAgYmFzZURvbWFpbiArPSBcIi9jbGllbnRcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoXCJhcHAuaHRtbFwiKSA+IDApIHtcclxuICAgICAgICAgICAgYmFzZURvbWFpbiArPSBcIi9hcHAuaHRtbFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFOZXRJZnJhbWVDb21tdW5pY2F0b3IgPSBiYXNlRG9tYWluICsgdGhpcy5maW5hbmNlc1JvdXRlci5wcm9kdWN0QU5ldENvbW11bmljYXRvclVybCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuYU5ldElmcmFtZUNvbW11bmljYXRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy9kb24ndCByZW1vdmUgdGhpcyBtZXRob2RcclxuICAgIC8vaXQgaXMgdXNlZCBvbiBfY291cnNlLXN0YXJ0Lmh0bWwgc2NyaXB0XHJcbiAgICBwcml2YXRlIHJlc2V0QU5ldFRva2VuKCkge1xyXG4gICAgICAgIHRoaXMuYU5ldFRva2VuID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrQU5ldFRyYW5zYWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMubG9hZFByb2R1Y3RzKHRoaXMuY291cnNlSWQpLnRoZW4oIHByb2R1Y3RzID0+IHtcclxuICAgICAgICAgICAgaWYgKHByb2R1Y3RzICYmIHByb2R1Y3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZFByb2R1Y3RJZDtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9kdWN0SWQgPSArbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FOZXRQcm9kdWN0SWQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplTmV0U2VydmljZS5jb25maXJtT3JkZXIodGhpcy5BTmV0VHJhbnNhY3Rpb25JZCwgc2VsZWN0ZWRQcm9kdWN0SWQgPyBzZWxlY3RlZFByb2R1Y3RJZCA6IHByb2R1Y3RzWzBdLmlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnB1cmNoYXNlU2VydmljZS5nZXROdW1iZXJPZkl0ZW1zSW5Qcm9kdWN0KHNlbGVjdGVkUHJvZHVjdElkID8gc2VsZWN0ZWRQcm9kdWN0SWQgOiBwcm9kdWN0c1swXS5pZCkudGhlbigobnVtYmVyT2ZJdGVtc0luUHJvZHVjdDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZJdGVtc0luUHJvZHVjdCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5maW5hbmNlc1JvdXRlci5wdXJjaGFzZWRQcm9kdWN0VXJsKHJlc3VsdCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIHVybC5pbmRleE9mKFwiP1wiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZSh1cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5zbGljZSgwLCB1cmwuaW5kZXhPZihcIj9cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKHVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkluY29ycmVjdCBzeXN0ZW0gcHVyY2hhc2Ugc2V0dGluZ3MuIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci5cIik7XHJcbiAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRBTmV0VG9rZW4oKTogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aG9yaXplTmV0U2VydmljZS5nZXRUb2tlbih0aGlzLmNvdXJzZS5idXNpbmVzc1VuaXRJZCwgdGhpcy5wcm9kdWN0c1swXS5wcmljZSwgdGhpcy5hTmV0SWZyYW1lQ29tbXVuaWNhdG9yLCB0aGlzLnByb2R1Y3RzWzBdLmlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYU5ldFRva2VuID0gcmVzdWx0O1xyXG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVyci5kYXRhLmVycm9yID09PSBcImVycm9yLm9yZGVyLmNyZWF0aW9uLmZhaWxlZC51c2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQWxsIHNlYXRzIGFyZSBhbHJlYWR5IHRha2VuLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tDaGFuZ2VIZWlnaHRGb3JNYWluQ29udGVudCgpOiBhbnkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlTWFpbkNvbnRlbnRIZWlnaHQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRXaW5kb3cgPSAkKHdpbmRvdyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRNYWluQ29udGVudCA9ICQoJy52aHMtd3JhcHBlcl9fY29udGVudCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRXaW5kb3cud2lkdGgoKSA8IDk5Mikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEhlaWdodCA9IDUwO1xyXG4gICAgICAgICAgICAgICAgJChcIiNtYWluLWNvdXJzZS1sZWZ0LWJhciAubmF2YmFyLXByb2dyZXNzLWJsb2NrLmNvdXJzZS1tYWluLWNvbnRlbnQ6bm90KC5jb3Vyc2UtbWFpbi1jb250ZW50X19mdWxsLXNpemUpXCIpLmhlaWdodCg1MCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50V2luZG93LmhlaWdodCgpICE9IHRoaXMuX2xhc3RIZWlnaHQgfHwgZWxlbWVudE1haW5Db250ZW50LmhlaWdodCgpICE9IHRoaXMuX2xhc3RDb250ZW50RWxlbWVudEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEhlaWdodCA9IGVsZW1lbnRXaW5kb3cuaGVpZ2h0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0Q29udGVudEVsZW1lbnRIZWlnaHQgPSBlbGVtZW50V2luZG93LmhlaWdodCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlTGVmdENsb3NhYmxlQnV0dG9uKCk7XHJcbiAgICAgICAgICAgICAgICAkKFwiI21haW4tY291cnNlLWxlZnQtYmFyXCIpLmhlaWdodCgkKCcudmhzLXdyYXBwZXJfX2NvbnRlbnQnKS5oZWlnaHQoKSk7XHJcbiAgICAgICAgICAgICAgICAkKFwiI21haW4tY291cnNlLWxlZnQtYmFyIC5uYXZiYXItcHJvZ3Jlc3MtYmxvY2suY291cnNlLW1haW4tY29udGVudFwiKS5oZWlnaHQoJCh3aW5kb3cpLmhlaWdodCgpIC0gMjUwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDQwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja01hdGVyaWFsRm9yU3R1ZHlIZWlnaHQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VNYXRlcmlhbEZvclN0dWR5SGVpZ2h0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWN0aW9uTWF0ZXJpYWxzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50TWF0ZXJpYWxzID0gJChcIiNteVRhYkNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50TWF0ZXJpYWxzLmhlaWdodCgpICE9IHRoaXMubGFzdE1hdGVyaWFsRm9yU3R1ZHlIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdE1hdGVyaWFsRm9yU3R1ZHlIZWlnaHQgPSBlbGVtZW50TWF0ZXJpYWxzLmhlaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXRGb3JNYXRlcmlhbHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDUwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0xvZ09uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnNlYXJjaChDb3Vyc2VEZXRhaWxzQ29udHJvbGxlci5TTUFSVF9QVVJDSEFTRV9QQVJBTUVURVIsIHRydWUpLnJlcGxhY2UoKTtcclxuICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5yZWRpcmVjdFRvTG9nT24oUmVkaXJlY3RSZWFzb24uTE9HT05fUkVRVUlSRUQsIHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVTY3JpcHQoY2xpZW50SWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBheXBhbF9zY3JpcHRcIikpIHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBheXBhbF9zY3JpcHRcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuICAgICAgICBzY3JpcHRFbGVtZW50LmlkID0gXCJwYXlwYWxfc2NyaXB0XCI7XHJcblxyXG4gICAgICAgIGlmKCEhdGhpcy5wcm9kdWN0c1swXS5zdWJzY3JpcHRpb25QbGFuSWQpIHtcclxuICAgICAgICAgICAgc2NyaXB0RWxlbWVudC5zcmMgPSBcImh0dHBzOi8vd3d3LnBheXBhbC5jb20vc2RrL2pzP2NsaWVudC1pZD1cIiArIGNsaWVudElkICsgXCImdmF1bHQ9dHJ1ZSZpbnRlbnQ9c3Vic2NyaXB0aW9uXCI7XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICBzY3JpcHRFbGVtZW50Lm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1YnNjcmlwdGlvbkJ1dHRvbnMoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzY3JpcHRFbGVtZW50LnNyYyA9IFwiaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9zZGsvanM/Y2xpZW50LWlkPVwiICsgY2xpZW50SWQ7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVudCk7XHJcbiAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QnV0dG9ucygpLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmRhdGEuZXJyb3IgPT09IFwiZXJyb3Iub3JkZXIuY3JlYXRpb24uZmFpbGVkLnVzZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkFsbCBzZWF0cyBhcmUgYWxyZWFkeSB0YWtlbi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd1N1YnNjcmlwdGlvbkJ1dHRvbnMoKSB7XHJcbiAgICAgICAgcGF5cGFsLkJ1dHRvbnMoe1xyXG4gICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdzdWJzY3JpYmUnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNyZWF0ZVN1YnNjcmlwdGlvbjogKGRhdGEsIGFjdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGFjdGlvbnMuc3Vic2NyaXB0aW9uLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ3BsYW5faWQnOiB0aGlzLnByb2R1Y3RzWzBdLnN1YnNjcmlwdGlvblBsYW5JZFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZS50aGVuKChzdWJzY3JpcHRpb25JZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXlQYWxTZXJ2aWNlLmNyZWF0ZVN1YnNjcmlwdGlvblB1cmNoYXNlT3JkZXIodGhpcy5wcm9kdWN0c1swXS5pZCwgc3Vic2NyaXB0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQXBwcm92ZTogKGRhdGEsIGFjdGlvbnMpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHVyY2hhc2VTZXJ2aWNlLmdldE51bWJlck9mSXRlbXNJblByb2R1Y3QodGhpcy5wcm9kdWN0c1swXS5pZCkudGhlbigobnVtYmVyT2ZJdGVtc0luUHJvZHVjdDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobnVtYmVyT2ZJdGVtc0luUHJvZHVjdCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF5UGFsU2VydmljZS5hcHByb3ZlU3Vic2NyaXB0aW9uKHRoaXMucHJvZHVjdHNbMF0uaWQsIGRhdGEuc3Vic2NyaXB0aW9uSUQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocHVyY2hhc2VkT3JkZXJJZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5maW5hbmNlc1JvdXRlci5wdXJjaGFzZWRQcm9kdWN0VXJsKHB1cmNoYXNlZE9yZGVySWQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiR28gdG8gJ015IHB1cmNoYXNlcycgaW4geW91ciBwcm9maWxlLCBpZiB0aGUgc3Vic2NyaXB0aW9uIGRvZXMgbm90IGFwcGVhciB0aGVyZSBpbiA1IG1pbnV0ZXMsIHRoZW4gY29udGFjdCB0aGUgc3VwcG9ydCBzZXJ2aWNlXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiV2FybmluZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBheVBhbFNlcnZpY2UuYXBwcm92ZVN1YnNjcmlwdGlvbih0aGlzLnByb2R1Y3RzWzBdLmlkLCBkYXRhLnN1YnNjcmlwdGlvbklEKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHB1cmNoYXNlZE9yZGVySWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJHbyB0byAnTXkgcHVyY2hhc2VzJyBpbiB5b3VyIHByb2ZpbGUsIGlmIHRoZSBzdWJzY3JpcHRpb24gZG9lcyBub3QgYXBwZWFyIHRoZXJlIGluIDUgbWludXRlcywgdGhlbiBjb250YWN0IHRoZSBzdXBwb3J0IHNlcnZpY2VcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJXYXJuaW5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byBwdXJjaGFzZSBwcm9kdWN0LiBQbGVhc2UgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLnJlbmRlcignI3BheXBhbC1idXR0b24tY29udGFpbmVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93QnV0dG9ucygpOiBhbmd1bGFyLklQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gcGF5cGFsLkJ1dHRvbnMoe1xyXG4gICAgICAgICAgICBjcmVhdGVPcmRlcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF5UGFsU2VydmljZS5jcmVhdGVPcmRlclNtYXJ0KHRoaXMucHJvZHVjdHNbMF0uaWQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkFwcHJvdmU6IChkYXRhLCBhY3Rpb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBzID0gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVySUQ6IGRhdGEub3JkZXJJRFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnB1cmNoYXNlU2VydmljZS5nZXROdW1iZXJPZkl0ZW1zSW5Qcm9kdWN0KHRoaXMucHJvZHVjdHNbMF0uaWQpLnRoZW4oKG51bWJlck9mSXRlbXNJblByb2R1Y3Q6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKG51bWJlck9mSXRlbXNJblByb2R1Y3QgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBheVBhbFNlcnZpY2UuY29uZmlybU9yZGVyU21hcnQocykudGhlbigocHVyY2hhc2VkT3JkZXJJZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5maW5hbmNlc1JvdXRlci5wdXJjaGFzZWRQcm9kdWN0VXJsKHB1cmNoYXNlZE9yZGVySWQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJZb3VyIGNyZWRpdCBjYXJkIG9yIFBheVBhbCBhY2NvdW50IGhhcyBub3QgYmVlbiBjaGFyZ2VkLiBQbGVhc2UgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXlQYWxTZXJ2aWNlLmNvbmZpcm1PcmRlclNtYXJ0KHMpLnRoZW4oKHB1cmNoYXNlZE9yZGVySWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIllvdXIgY3JlZGl0IGNhcmQgb3IgUGF5UGFsIGFjY291bnQgaGFzIG5vdCBiZWVuIGNoYXJnZWQuIFBsZWFzZSB0cnkgYWdhaW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJZb3VyIGNyZWRpdCBjYXJkIG9yIFBheVBhbCBhY2NvdW50IGhhcyBub3QgYmVlbiBjaGFyZ2VkLiBQbGVhc2UgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkucmVuZGVyKCcjcGF5cGFsLWJ1dHRvbi1jb250YWluZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlYWN0aXZhdGVNYWluQ29udGVudCgpIHtcclxuICAgICAgICBsZXQgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcImRpdiNtYWluQ29udGVudFwiKTtcclxuICAgICAgICBsZXQgbWFpbkxvYWRpbmdFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggXCJkaXYjbWFpbkNvbnRlbnRMb2FkaW5nXCIpO1xyXG4gICAgICAgIG1haW5FbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgbWFpbkxvYWRpbmdFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZU1haW5Db250ZW50KCkge1xyXG4gICAgICAgIGxldCBtYWluRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIFwiZGl2I21haW5Db250ZW50XCIpO1xyXG4gICAgICAgIGxldCBtYWluTG9hZGluZ0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcImRpdiNtYWluQ29udGVudExvYWRpbmdcIik7XHJcbiAgICAgICAgbWFpbkVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICBtYWluTG9hZGluZ0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRNb2R1bGVzKCk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0TW9kdWxlcyh0aGlzLmNvdXJzZUlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMubW9kdWxlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkU2VjdGlvbnMoc2V0TWVudUl0ZW06IGJvb2xlYW4sIHNob3dTcGlubmVyPzogYm9vbGVhbik6IElQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoc2hvd1NwaW5uZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdDb3Vyc2VEYXRhID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRDb3Vyc2VTZWN0aW9ucyh0aGlzLmNvdXJzZUlkLCB0aGlzLmNvdXJzZVByb2dyZXNzSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uc0xpc3QgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMubW9kdWxlc1Byb2dyZXNzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcclxuICAgICAgICAgICAgbGV0IHN1bW1hcnlQcm9taXNlczogSVByb21pc2U8YW55PltdID0gW107XHJcbiAgICAgICAgICAgIHRoaXMubW9kdWxlcy5mb3JFYWNoKChtb2R1bGU6IElNb2R1bGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uc0luTW9kdWxlQ291bnQgPSB0aGlzLnNlY3Rpb25zTGlzdC5maWx0ZXIoKHM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCkgPT4gcy5zZWN0aW9uLm1vZHVsZUlkID09IG1vZHVsZS5pZCkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25TdW1tYXJ5UGFnZXMgPSBNYXRoLmZsb29yKHNlY3Rpb25zSW5Nb2R1bGVDb3VudCAvIENvdXJzZURldGFpbHNDb250cm9sbGVyLlNFQ1RJT05fU1VNTUFSWV9SRVFVRVNUX1BBR0VfU0laRSk7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uU3VtbWFyeVBhZ2VzICs9IHNlY3Rpb25zSW5Nb2R1bGVDb3VudCAlIENvdXJzZURldGFpbHNDb250cm9sbGVyLlNFQ1RJT05fU1VNTUFSWV9SRVFVRVNUX1BBR0VfU0laRSA9PSAwID8gMCA6IDE7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWN0aW9uU3VtbWFyeVBhZ2VzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5UHJvbWlzZXMucHVzaCh0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0U2VjdGlvbnNCeU1vZHVsZSh0aGlzLmNvdXJzZUlkLCBtb2R1bGUuaWQsIGksIENvdXJzZURldGFpbHNDb250cm9sbGVyLlNFQ1RJT05fU1VNTUFSWV9SRVFVRVNUX1BBR0VfU0laRSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oc3VtbWFyeUxpc3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeUxpc3QuZm9yRWFjaChzdW1tYXJ5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVsYXRlZFNlY3Rpb24gPSB0aGlzLnNlY3Rpb25zTGlzdC5maWx0ZXIoKHM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zZWN0aW9uLm1vZHVsZUlkID09IG1vZHVsZS5pZCAmJiBzLnNlY3Rpb24uaWQgPT0gc3VtbWFyeS5pZClbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZFNlY3Rpb24uc2VjdGlvbi5zdW1tYXJ5ID0gc3VtbWFyeS5zdW1tYXJ5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zTWFwLnNldChtb2R1bGUuaWQsIHJlc3VsdC5maWx0ZXIoKHM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCkgPT4gcy5zZWN0aW9uLm1vZHVsZUlkID09IG1vZHVsZS5pZCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy4kcS5hbGwoc3VtbWFyeVByb21pc2VzKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVQcm9ncmVzc1BlcmNlbnRhZ2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2VhcmNoU2VjdGlvblJlc3VsdHMgPSB0aGlzLnNlY3Rpb25zTGlzdC5maWx0ZXIoc2VjdGlvbiA9PiBzZWN0aW9uLmlkID09IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoU2VjdGlvblJlc3VsdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IHNlYXJjaFNlY3Rpb25SZXN1bHRzWzBdLnNlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZXRNZW51SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhbGxvd2VkU2VjdGlvbnMgPSByZXN1bHQuZmlsdGVyKChzOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWQpID0+IHMuc2VjdGlvbi5zdGF0dXMgPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5BTExPV0VEXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzLnNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuU1RBUlRFRF0gfHwgcy5zZWN0aW9uLnN0YXR1cyA9PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLkZBSUxFRF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBsYXN0Vmlld2VkU2VjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlUHJvZ3Jlc3MubGFzdFZpZXdlZFNlY3Rpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Vmlld2VkU2VjdGlvbiA9IHJlc3VsdC5maWx0ZXIoKHM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCkgPT4gcy5zZWN0aW9uLmlkID09PSB0aGlzLmNvdXJzZVByb2dyZXNzLmxhc3RWaWV3ZWRTZWN0aW9uSWQpWzBdLnNlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZU5leHRCdXR0b24gPSBsYXN0Vmlld2VkU2VjdGlvbi5zdGF0dXMgIT09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuT1BFTkVEXTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VjdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dlZFNlY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmluZGV4T2YoYWxsb3dlZFNlY3Rpb25zWzBdKSA+IDAgJiYgYWxsb3dlZFNlY3Rpb25zWzBdLnNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQUxMT1dFRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZpZXdlZFNlY3Rpb24gPSByZXN1bHRbcmVzdWx0LmluZGV4T2YoYWxsb3dlZFNlY3Rpb25zWzBdKSAtIDFdLnNlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZpZXdlZFNlY3Rpb24gPSBhbGxvd2VkU2VjdGlvbnNbMF0uc2VjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdEVkaXRlZEV4dGVuZGVkU2VjdGlvbiA9IHJlc3VsdC5maWx0ZXIoKHM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCkgPT4gcy5pZCA9PSB0aGlzLnNlY3Rpb25JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEVkaXRlZEV4dGVuZGVkU2VjdGlvblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWaWV3ZWRTZWN0aW9uID0gcmVzdWx0W3Jlc3VsdC5pbmRleE9mKGxhc3RFZGl0ZWRFeHRlbmRlZFNlY3Rpb25bMF0pXS5zZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TWVudUl0ZW1zKGxhc3RWaWV3ZWRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFNlY3Rpb24gPSB0aGlzLnNlY3Rpb25zTGlzdC5maWx0ZXIoKHM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCkgPT4gcy5zZWN0aW9uLmlkID09IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkKVswXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNlY3Rpb24gJiYgY3VycmVudFNlY3Rpb24uc2VjdGlvbi5zdGF0dXMgPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5OT1RfQUxMT1dFRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25zSW5Nb2R1bGUgPSB0aGlzLnNlY3Rpb25zTGlzdC5maWx0ZXIoKHM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCkgPT4gcy5zZWN0aW9uLm1vZHVsZUlkID09IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLm1vZHVsZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25zSW5Nb2R1bGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRNZW51SXRlbXMoc2VjdGlvbnNJbk1vZHVsZVswXS5zZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5leHRTZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1zZyA9IHJlc3BvbnNlLmRhdGEubWVzc2FnZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1zZy5pbmNsdWRlcyhcInRoZSBzcGVjaWZpZWQgbmV0d29yayBuYW1lIGlzIG5vIGxvbmdlciBhdmFpbGFibGVcIilcclxuICAgICAgICAgICAgICAgICAgICB8fCBtc2cuaW5jbHVkZXMoXCJ0aW1lb3V0XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJUb28gbG93IGludGVybmV0IGNvbm5lY3Rpb24gZm9yIHRha2luZyB0aGlzIGNvdXJzZVwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkxvdyBpbnRlcm5ldCBjb25uZWN0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiT2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nQ291cnNlRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQnVuZGxlKCk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNvdXJzZS5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idW5kbGVTZXJ2aWNlLmdldEJ1bmRsZSh0aGlzLmNvdXJzZS5idW5kbGVJZCwgXCJBTExcIilcclxuICAgICAgICAgICAgICAgIC50aGVuKGJ1bmRsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VCdW5kbGUgPSBidW5kbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VCdW5kbGVGaWxlc0RvbWFpbih0aGlzLmNvdXJzZUJ1bmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb3NlUmljaFRleHRGcm9tTG9hZEF0U3RhcnRCdW5kbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlTG9hZEF0U3RhcnRCdW5kbGVzVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSaWNoVGV4dExvYWRlZFByb21pc2UoQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuQ09VUlNFX0xPQURfQVRfU1RBUlRfQlVORExFU19SSUNIX1RFWFRfSUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoYW5nZUJ1bmRsZUZpbGVzRG9tYWluKGJ1bmRsZTogSUJ1bmRsZSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBiYXNlVXJsID0gbmV3ICg8YW55PiB3aW5kb3cpLlVSTChBcHBQcm9wZXJ0aWVzLmJhc2VVcmwpO1xyXG4gICAgICAgIGJ1bmRsZS5maWxlcy5mb3JFYWNoKChmaWxlOiBJQnVuZGxlRmlsZSkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbGVVcmwgPSBuZXcgKDxhbnk+IHdpbmRvdykuVVJMKGZpbGUudXJsKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlVXJsLmhvc3RuYW1lID09PSBiYXNlVXJsLmhvc3RuYW1lICYmIGZpbGVVcmwuaG9zdG5hbWUgIT09IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVVcmwuaG9zdG5hbWUgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZS51cmwgPSBmaWxlVXJsLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3Igd2hpbGUgcGFyc2luZyBidW5kbGUgZmlsZXMgVVJMJ3NcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRQcm9kdWN0cyhjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUHJvZHVjdFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHVyY2hhc2VTZXJ2aWNlLmdldFJlZmVyZW5jZWRPYmplY3RSZWxhdGVkUHJvZHVjdHMoY291cnNlSWQsICdDT1VSU0UnKVxyXG4gICAgICAgICAgICAudGhlbigocHJvZHVjdHM6IElQcm9kdWN0W10pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHMgPSBhbmd1bGFyLmNvcHkocHJvZHVjdHMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdHM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tcG9zZVJpY2hUZXh0RnJvbUxvYWRBdFN0YXJ0QnVuZGxlcygpIHtcclxuICAgICAgICBpZiAodGhpcy5jb3Vyc2VCdW5kbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VMb2FkQXRTdGFydEJ1bmRsZXNUZXh0ID0gQ291cnNlRGV0YWlsc1V0aWxzLmNvbXBvc2VSaWNoVGV4dEZyb21Mb2FkQXRTdGFydEJ1bmRsZXModGhpcy5jb3Vyc2VCdW5kbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbXBvc2VSaWNoVGV4dEZyb21TbGlkZUJ1bmRsZShjc3NGaWxlS2V5cz86IEFycmF5PHN0cmluZz4sIGpzRmlsZUtleXM/OiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2xpZGVUZW1wbGF0ZXNCdW5kbGUpIHtcclxuICAgICAgICAgICAgaWYgKGNzc0ZpbGVLZXlzLmxlbmd0aCAhPSAwIHx8IGpzRmlsZUtleXMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zbGlkZVRlbXBsYXRlc0J1bmRsZS5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBidW5kbGVGaWxlOiBJQnVuZGxlRmlsZSA9IHRoaXMuc2xpZGVUZW1wbGF0ZXNCdW5kbGUuZmlsZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNzc0ZpbGVLZXlzLmluZGV4T2YoYnVuZGxlRmlsZS5rZXkpICE9IC0xIHx8IGpzRmlsZUtleXMuaW5kZXhPZihidW5kbGVGaWxlLmtleSkgIT0gLTEgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVUZW1wbGF0ZXNCdW5kbGVUZXh0ICs9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVNYXRlcmlhbENvbnRyb2xsZXIuRU1CRURERURfQlVORExFX1RBX0hUTUwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpidW5kbGVJZFwiLCBSYW5kb21VdGlscy5nZW5lcmF0ZVJhbmRvbUlkKGJ1bmRsZUZpbGUua2V5ICsgXCJfX19cIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpidW5kbGVLZXlcIiwgYnVuZGxlRmlsZS5rZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlVGVtcGxhdGVzQnVuZGxlVGV4dCA9IENvdXJzZURldGFpbHNVdGlscy5jb21wb3NlUmljaFRleHRGcm9tTG9hZEF0U3RhcnRCdW5kbGVzKHRoaXMuc2xpZGVUZW1wbGF0ZXNCdW5kbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVjYWxjdWxhdGVQcm9ncmVzc1BlcmNlbnRhZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uc0xpc3QuZm9yRWFjaCgoc2VjdGlvbkluSGllcmFyY2h5OiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWQsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlY3Rpb25JbkhpZXJhcmNoeS5sZXZlbCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgQ291cnNlRGV0YWlsc1V0aWxzLmNhbGN1bGF0ZVNlY3Rpb25Db21wbGV0aW9uUGVyY2VudGFnZShcclxuICAgICAgICAgICAgICAgICAgICBpbmRleCwgdGhpcy5zZWN0aW9uc0xpc3RcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1vZHVsZXMuZm9yRWFjaChtb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc3VtOiBudW1iZXIgPSAwO1xyXG4gICAgICAgICAgICBsZXQgY291bnQ6IG51bWJlciA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNNYXAuZ2V0KG1vZHVsZS5pZCkuZm9yRWFjaCgoc2VjdGlvbjogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gc2VjdGlvbi5jb21wbGV0aW9uUGVyY2VudGFnZTtcclxuICAgICAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3Vyc2VCdW5kbGUgJiYgc2VjdGlvbi5zZWN0aW9uLmF1ZGlvRmlsZUlkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNlY3Rpb24uYXVkaW9GaWxlVXJsID0gdGhpcy5jb3Vyc2VCdW5kbGUuZmlsZXNNYXAuaGFzKHNlY3Rpb24uc2VjdGlvbi5hdWRpb0ZpbGVLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5jb3Vyc2VCdW5kbGUuZmlsZXNNYXAuZ2V0KHNlY3Rpb24uc2VjdGlvbi5hdWRpb0ZpbGVLZXkpLnVybFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLm1vZHVsZXNQcm9ncmVzcy5zZXQobW9kdWxlLmlkLCBjb3VudCA9PSAwID8gMCA6IE1hdGgucm91bmQoc3VtIC8gY291bnQpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQ291cnNlUHJvZ3Jlc3MoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBVFRFTlRJT04hIHRoaXMuY291cnNlUHJvZ3Jlc3NJZCBtdXN0IGFscmVhZHkgYmUgaW5pdGlhbGl6ZWQgYW5kIHZhbGlkYXRlZCBiZWZvcmUgY2FsbGluZyBsb2FkQ291cnNlKCkgYW5kIG1vc3Qgb3RoZXIgbWV0aG9kc1xyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlKCk6IElQcm9taXNlPElDb3Vyc2U+IHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKFwibG9hZENvdXJzZSAtIHN0YXJ0ZWRcIik7XHJcbiAgICAgICAgcmV0dXJuICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0KHRoaXMuY291cnNlSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZS5zdGFydERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKHJlc3VsdC5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRCeUlkKHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5FRFVDQVRJT05fQ09VUlNFU19NRU5VX0tFWSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgY291cnNlQnJlYWRjcnVtYiA9IHRoaXMuY291cnNlLnRvcGljIHx8IHRoaXMuY291cnNlLnN1YmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgY291cnNlQnJlYWRjcnVtYiA9IGNvdXJzZUJyZWFkY3J1bWIubGVuZ3RoID4gNDAgPyBjb3Vyc2VCcmVhZGNydW1iLnN1YnN0cmluZygwLCA0MCkgKyBcIi4uLlwiIDogY291cnNlQnJlYWRjcnVtYjtcclxuICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKGNvdXJzZUJyZWFkY3J1bWIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNEZXB0aExldmVsID0gdGhpcy5jb3Vyc2Uuc2VjdGlvbnNEZXB0aExldmVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VjdGlvbnNEZXB0aExldmVsID09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zRGVwdGhMZXZlbCA9IE51bWJlci5NQVhfVkFMVUU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q291cnNlU3RhcnRQZXJtaXNzaW9uKCk6IElQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldENvdXJzZVN0YXJ0UGVybWlzc2lvbih0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UucGVybWlzc2lvbnMuc3RhcnQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2UucGVybWlzc2lvbnMuc3RhcnQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tDb3Vyc2VTdGFydERhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlLnN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5pc0RhdGVQcm9wZXIgPSBtb21lbnQoZGF0ZSkuaXNBZnRlcih0aGlzLmNvdXJzZS5zdGFydERhdGUpIHx8XHJcbiAgICAgICAgICAgICAgICBtb21lbnQoZGF0ZSkuaXNTYW1lKHRoaXMuY291cnNlLnN0YXJ0RGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1N0YXJ0QnV0dG9uID0gdGhpcy5pc0RhdGVQcm9wZXIgJiYgdGhpcy5jb3Vyc2UucGVybWlzc2lvbnMuc3RhcnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93U3RhcnRCdXR0b24gPSB0aGlzLmNvdXJzZS5wZXJtaXNzaW9ucy5zdGFydDtcclxuICAgICAgICAgICAgdGhpcy5pc0RhdGVQcm9wZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldE1lbnVJdGVtcyhsYXN0Vmlld2VkU2VjdGlvbjogSVNlY3Rpb24pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5tb2R1bGVJZCAhPSBudWxsICYmIHRoaXMuc2VjdGlvbklkICE9IG51bGwgJiZcclxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uc01hcC5nZXQodGhpcy5tb2R1bGVJZCkgIT0gbnVsbCAmJiB0aGlzLnNlY3Rpb25zTWFwLmdldCh0aGlzLm1vZHVsZUlkKS5maWx0ZXIocyA9PiBzLnNlY3Rpb24uaWQgPT0gdGhpcy5zZWN0aW9uSWQpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uc01hcC5nZXQodGhpcy5tb2R1bGVJZCkuZmlsdGVyKHMgPT4gcy5zZWN0aW9uLmlkID09IHRoaXMuc2VjdGlvbklkKVswXS5zZWN0aW9uLnN0YXR1cyAhPSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLk5PVF9BTExPV0VEXSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldExlZnRNZW51TW9kdWxlKHRoaXMuZ2V0TW9kdWxlQnlJZCh0aGlzLm1vZHVsZUlkKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVJdGVtKHRoaXMuc2VjdGlvbnNNYXAuZ2V0KHRoaXMubW9kdWxlSWQpLmZpbHRlcihzID0+IHMuc2VjdGlvbi5pZCA9PSB0aGlzLnNlY3Rpb25JZClbMF0uc2VjdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsYXN0Vmlld2VkU2VjdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVNb2R1bGUodGhpcy5nZXRNb2R1bGVCeUlkKGxhc3RWaWV3ZWRTZWN0aW9uLm1vZHVsZUlkKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVJdGVtKHRoaXMuc2VjdGlvbnNNYXAuZ2V0KGxhc3RWaWV3ZWRTZWN0aW9uLm1vZHVsZUlkKS5maWx0ZXIocyA9PiBzLnNlY3Rpb24uaWQgPT0gbGFzdFZpZXdlZFNlY3Rpb24uaWQpWzBdLnNlY3Rpb24pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2R1bGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWN0aW9uc0xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldExlZnRNZW51TW9kdWxlKHRoaXMubW9kdWxlc1swXSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlY3Rpb25zTWFwLmdldCh0aGlzLm1vZHVsZXNbMF0uaWQpWzBdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExlZnRNZW51SXRlbSh0aGlzLnNlY3Rpb25zTWFwLmdldCh0aGlzLm1vZHVsZXNbMF0uaWQpWzBdLnNlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZHVsZXMubGVuZ3RoID09IDAgfHwgdGhpcy5zZWN0aW9uc0xpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pc1NsaWRlTG9hZGluZyA9IGZhbHNlOyAvLyBzYXlpbmcgdGhhdCB0aGVyZSBpcyBub3RoaW5nIHRvIGxvYWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldExlZnRNZW51TW9kdWxlKGxlZnRNb2R1bGU6IElNb2R1bGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbGVmdE1vZHVsZTtcclxuICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGUgPSBsZWZ0TW9kdWxlLmlkO1xyXG4gICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkID0gbGVmdE1vZHVsZS5pZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlTW9kdWxlSGlkZGVuQ29udGVudFZpc2liaWxpdHkobW9kdWxlSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTW9kdWxlLmlkID09PSBtb2R1bGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTW9kdWxlSGlkZGVuQ29udGVudFZpc2libGUgPSAhdGhpcy5pc01vZHVsZUhpZGRlbkNvbnRlbnRWaXNpYmxlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNNb2R1bGVIaWRkZW5Db250ZW50VmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVDb3Vyc2VMZWZ0TWVudVZpc2liaWxpdHkodHlwZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vZGFsXCIpIHtcclxuICAgICAgICAgICAgJCgnI2NvdXJzZVRhYmxldFByb2dyZXNzJykubW9kYWwoJ3RvZ2dsZScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJCh3aW5kb3cpLndpZHRoKCkgPj0gOTkyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VMZWZ0TWVudVNob3duID0gIXRoaXMuaXNDb3Vyc2VMZWZ0TWVudVNob3duO1xyXG4gICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChFdmVudC5DT1VSU0VfVE9HR0xFX01FTlVfVklTSUJJTElUWSk7XHJcblxyXG4gICAgICAgICAgICAkKFwiLm5hdmJhci1wcm9ncmVzcy1iYXIgPiAuY2xvc2FibGUtcHJvZ3Jlc3NcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0NvdXJzZUxlZnRNZW51U2hvd24pIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGFuZ2VMZWZ0Q2xvc2FibGVCdXR0b24oNzUpLCA0MDApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoYW5nZUxlZnRDbG9zYWJsZUJ1dHRvbigpLCA0MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJCgnI2NvdXJzZVRhYmxldFByb2dyZXNzJykubW9kYWwoJ3RvZ2dsZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNYXRlcmlhbHNMaXN0T3ZlcmZsb3dQcmV2aWV3UGFuZWwoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlY3Rpb25NYXRlcmlhbHMgfHwgdGhpcy5zZWN0aW9uTWF0ZXJpYWxzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG1hdGVyaWFsc0xpc3Q6IElBdWdtZW50ZWRKUXVlcnkgPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWN0aW9uLWJsb2NrLWFsbC1tYXRlcmlhbHNcIikpO1xyXG4gICAgICAgIGxldCBtYXRlcmlhbFByZXZpZXc6IElBdWdtZW50ZWRKUXVlcnkgPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWN0aW9uLWJsb2NrLWN1cnJlbnQtbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgIGlmIChtYXRlcmlhbHNMaXN0Lmxlbmd0aCA+IDAgJiYgbWF0ZXJpYWxQcmV2aWV3Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGFsbE1hdGVyaWFsc0Jsb2NrVGFibGUgPSBtYXRlcmlhbHNMaXN0LmZpcnN0KCkuZmluZChcIj46Zmlyc3QtY2hpbGRcIik7XHJcbiAgICAgICAgICAgIGlmIChhbGxNYXRlcmlhbHNCbG9ja1RhYmxlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIChhbGxNYXRlcmlhbHNCbG9ja1RhYmxlLmlubmVySGVpZ2h0KCkgLSBtYXRlcmlhbFByZXZpZXcuaW5uZXJIZWlnaHQoKSkgPj0gMjA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnb1RvVGhlTW9kdWxlKG1vZHVsZTogSU1vZHVsZSkge1xyXG4gICAgICAgIGlmICghbW9kdWxlIHx8ICF0aGlzLmNvdXJzZVN0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zTWFwLmdldChtb2R1bGUuaWQpO1xyXG4gICAgICAgIGlmIChzZWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkID0gbW9kdWxlLmlkO1xyXG4gICAgICAgICAgICB0aGlzLnNldExlZnRNZW51TW9kdWxlKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVJdGVtKHNlY3Rpb25zWzBdLnNlY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0TGVmdE1lbnVJdGVtKHNlY3Rpb246IElTZWN0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnR5cGVLZXkgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OXSAmJlxyXG4gICAgICAgICAgICBwYXJzZUludChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5TRUNUSU9OX0tFWSkpID09PSB0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVQcm9ncmVzc09mTXVsdGltZWRpYU1hdGVyaWFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LlNFQ1RJT05fS0VZLCBzZWN0aW9uLmlkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5Lk1BVEVSSUFMX0tFWSk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuVElNRVNUQU1QX0tFWSk7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInNldExlZnRNZW51SXRlbSAtIHN0YXJ0ZWQ6IFwiICsgc2VjdGlvbik7XHJcbiAgICAgICAgaWYgKHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW0gPT09IHNlY3Rpb24uaWQgJiYgdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPT0gc2VjdGlvbi50eXBlS2V5IHx8IHRoaXMuaXNTbGlkZVJlbW92aW5nKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHNlY3Rpb24udHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuU0xJREVfREVDS10pIHtcclxuICAgICAgICAgICAgc2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNNYXAuZ2V0KHNlY3Rpb24ubW9kdWxlSWQpLmZpbHRlcihzID0+IHMuc2VjdGlvbi5wYXJlbnRJZCA9PT0gc2VjdGlvbi5pZClbMF0uc2VjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlY3Rpb24udHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuU0xJREVdKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlRGVja1NlY3Rpb25JZCAhPSBzZWN0aW9uLnBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlRGVja1NlY3Rpb25JZCA9IHNlY3Rpb24ucGFyZW50SWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlVGVtcGxhdGVzQnVuZGxlTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3NzRmlsZUtleXMgPSB0aGlzLnNsaWRlVGVtcGxhdGVDc3NGaWxlS2V5cyhzZWN0aW9uLm1vZHVsZUlkLCBzZWN0aW9uLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIGxldCBqc0ZpbGVLZXlzID0gdGhpcy5zbGlkZVRlbXBsYXRlSnNGaWxlS2V5cyhzZWN0aW9uLm1vZHVsZUlkLCBzZWN0aW9uLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFNsaWRlVGVtcGxhdGVzQnVuZGxlKGNzc0ZpbGVLZXlzLCBqc0ZpbGVLZXlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVUZW1wbGF0ZXNCdW5kbGUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNsaWRlVGVtcGxhdGVzQnVuZGxlVGV4dCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVEZWNrU2VjdGlvbklkID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1NsaWRlQmFjayA9IHNlY3Rpb24gJiYgc2VjdGlvbiA9PSB0aGlzLnByZXZTZWN0aW9uO1xyXG4gICAgICAgIGxldCBuZXdTZWN0aW9uID0gYW5ndWxhci5jb3B5KHNlY3Rpb24pO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ1NlbGVjdCBzZWN0aW9uICcgKyBuZXdTZWN0aW9uLmlkKTtcclxuICAgICAgICBpZiAodGhpcy5pc0NvdXJzZUxvYWRlZCAmJiBDb3Vyc2VEZXRhaWxzQ29udHJvbGxlci5TTElERV9DSEFOR0VfREVMQVkpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1NsaWRlUmVtb3ZpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHsgLy8gZGVsYXkgZm9yIHNsaWRlIGNoYW5nZSBmb3IgQU9QQSBvbmx5IC0gaGlkZSBwcmV2aW91cyBwYWdlIGR1cmluZyAwLjVzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2xpZGVSZW1vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMZWZ0TWVudUl0ZW1JbnRlcm5hbChuZXdTZWN0aW9uKTtcclxuICAgICAgICAgICAgfSwgQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuU0xJREVfQ0hBTkdFX0RFTEFZKTsgLy8gZGVsYXkgZm9yIHNsaWRlIGNoYW5nZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1NldCBsZWZ0IG1lbnUgaXRlbSBkdXJpbmcgY291cnNlIGxvYWRpbmcuLi4nKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRMZWZ0TWVudUl0ZW1JbnRlcm5hbChuZXdTZWN0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChuZXdTZWN0aW9uLnN0YXR1cyA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5TT1NdKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJUaGUgc2VjdGlvbiB3YXMgYmxvY2tlZCBhZnRlciBleGNlZWRpbmcgbWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMhIFBsZWFzZSwgY29udGFjdCBhIHN1cHBvcnQuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldExlZnRNZW51SXRlbUludGVybmFsKHNlY3Rpb246IElTZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy51c2VyTm90ZXNTZXJ2aWNlLmluaXRpYWxpemUodGhpcy5jb3Vyc2VJZCwgc2VjdGlvbi5pZCwgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkKTtcclxuXHJcbiAgICAgICAgY29uc3QgYmVmb3JlU2VjdGlvbkNoYW5nZVByb21pc2VzOiBBcnJheTxJUHJvbWlzZTxhbnk+PiA9IFtdO1xyXG4gICAgICAgIGxldCBzZWN0aW9uQ2hhbmdlRGVmZXJyZWQ6IElEZWZlcnJlZDxhbnk+ID0gbnVsbDtcclxuICAgICAgICBsZXQgc2VjdGlvbkNoYW5nZVByb21pc2U6IElQcm9taXNlPGFueT4gPSBudWxsO1xyXG4gICAgICAgIGxldCBzZWN0aW9uU3RhdHVzVXBkYXRlRGVmZXJyZWQ6IElEZWZlcnJlZDxhbnk+ID0gbnVsbDtcclxuICAgICAgICBsZXQgc2VjdGlvblN0YXR1c1VwZGF0ZVByb21pc2U6IElQcm9taXNlPGFueT4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY291cnNlU3RhcnRlZCkgeyAvLyBsYW5kaW5nIHBhZ2Ugc2hvd1xyXG4gICAgICAgICAgICBzZWN0aW9uQ2hhbmdlRGVmZXJyZWQgPSB0aGlzLiRxLmRlZmVyKCk7XHJcbiAgICAgICAgICAgIHNlY3Rpb25DaGFuZ2VQcm9taXNlID0gc2VjdGlvbkNoYW5nZURlZmVycmVkLnByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIC5zZWFyY2goQ291cnNlc1JvdXRlci5NT0RVTEVfUEFSQU1FVEVSLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZWFyY2goQ291cnNlc1JvdXRlci5TRUNUSU9OX1BBUkFNRVRFUiwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmljaFRleHRMb2FkZWRQcm9taXNlKENvdXJzZURldGFpbHNDb250cm9sbGVyLkxBTkRJTkdfUEFHRV9SSUNIX1RFWFRfSUQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNTZWN0aW9uVmlld0FsbG93ZWQoc2VjdGlvbikpIHtcclxuICAgICAgICAgICAgc2VjdGlvbkNoYW5nZURlZmVycmVkID0gdGhpcy4kcS5kZWZlcigpO1xyXG4gICAgICAgICAgICBzZWN0aW9uQ2hhbmdlUHJvbWlzZSA9IHNlY3Rpb25DaGFuZ2VEZWZlcnJlZC5wcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSBhbmd1bGFyLmNvcHkoc2VjdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud2FpdExtc1RpbWVvdXRQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dC5jYW5jZWwodGhpcy53YWl0TG1zVGltZW91dFByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2FpdExtc1RpbWVvdXRQcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5zdW1tYXJ5ID09IG51bGwgfHwgdGhpcy5zZWxlY3RlZFNlY3Rpb24uc3VtbWFyeSA9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnNlbGVjdGVkU2VjdGlvbi5zdW1tYXJ5LmluZGV4T2YoXCJ0YS12aHMtc2FuZGJveFwiKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXR1c1VwZGF0ZVZpYUxtc0FwaU9ubHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uU3RhdHVzVXBkYXRlVmlhTG1zQXBpT25seSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY291cnNlQnJlYWRjcnVtYiA9IHRoaXMuY291cnNlLnRvcGljIHx8IHRoaXMuY291cnNlLnN1YmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgY291cnNlQnJlYWRjcnVtYiA9IGNvdXJzZUJyZWFkY3J1bWIubGVuZ3RoID4gNDAgPyBjb3Vyc2VCcmVhZGNydW1iLnN1YnN0cmluZygwLCA0MCkgKyBcIi4uLlwiIDogY291cnNlQnJlYWRjcnVtYjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gdGhpcy5zZWxlY3RlZFNlY3Rpb24ubmFtZS5sZW5ndGggPiA0MCA/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubmFtZS5zdWJzdHJpbmcoMCwgNDApICsgXCIuLi5cIlxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZFNlY3Rpb24ubmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpXHJcbiAgICAgICAgICAgICAgICAgICAgLmhlYWRlcihzZWN0aW9uTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAuYWRkUGFyZW50TGluayhjb3Vyc2VCcmVhZGNydW1iLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiNcIiArIHRoaXMuY291cnNlc1JvdXRlci5zZWN0aW9uRGV0YWlsc1JvdXRlKHRoaXMuY291cnNlSWQsIHRoaXMubW9kdWxlc1swXS5pZCwgdGhpcy5zZWN0aW9uc0xpc3RbMF0uaWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIC51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ0xvY2F0aW9uQ2hhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIC5zZWFyY2goQ291cnNlc1JvdXRlci5NT0RVTEVfUEFSQU1FVEVSLCBzZWN0aW9uLm1vZHVsZUlkKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZWFyY2goQ291cnNlc1JvdXRlci5TRUNUSU9OX1BBUkFNRVRFUiwgc2VjdGlvbi5pZClcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TTElERV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtID0gc2VjdGlvbi5wYXJlbnRJZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtVHlwZSA9IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNMSURFXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGUgPSB0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbSA9IHNlY3Rpb24uaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPSBzZWN0aW9uLnR5cGVLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlID0gdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlRGVja0lzRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwgPSB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRMTVNTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXROZXh0U2VjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcmV2U2VjdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBvblNlY3Rpb25DaGFuZ2VQcm9taXNlczogQXJyYXk8SVByb21pc2U8YW55Pj4gPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRTZWN0aW9uVHlwZUluZm8oKSB8fCB0aGlzLmlzU2VsZWN0ZWRTZWN0aW9uVHlwZUluZm9XaXRoTWFudWFsQ29tcGxldGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25TZWN0aW9uQ2hhbmdlUHJvbWlzZXMucHVzaCh0aGlzLmxvYWRTZWN0aW9uTWF0ZXJpYWxzKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHJpY2hUZXh0UmVhZHlQcm9taXNlID0gdGhpcy5nZXRSaWNoVGV4dExvYWRlZFByb21pc2UoQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuU0VDVElPTl9TVU1NQVJZX1JJQ0hfVEVYVF9JRCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmljaFRleHRSZWFkeVByb21pc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBvblNlY3Rpb25DaGFuZ2VQcm9taXNlcy5wdXNoKHJpY2hUZXh0UmVhZHlQcm9taXNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vdmFyIGRlZmVycmVkOiBhbmd1bGFyLklEZWZlcnJlZDxhbnk+ID0gdGhpcy4kcS5kZWZlcjxhbnk+KCk7XHJcbiAgICAgICAgICAgICAgICAvL29uU2VjdGlvbkNoYW5nZVByb21pc2VzLnB1c2goZGVmZXJyZWQucHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy99LCA3MDAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5hbGwob25TZWN0aW9uQ2hhbmdlUHJvbWlzZXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSU5GT1JNQVRJT05dXHJcbiAgICAgICAgICAgICAgICAmJiBzZWN0aW9uLnN0YXR1cyA9PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLkFMTE9XRURdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVuZWRTZWN0aW9uSWQgPSBzZWN0aW9uLmlkO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlbmVkTW9kdWxlSWQgPSBzZWN0aW9uLm1vZHVsZUlkO1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvblN0YXR1c1VwZGF0ZURlZmVycmVkID0gdGhpcy4kcS5kZWZlcigpO1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvblN0YXR1c1VwZGF0ZVByb21pc2UgPSBzZWN0aW9uU3RhdHVzVXBkYXRlRGVmZXJyZWQucHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdTdGFydCBzZXQgc2VjdGlvbiBzdGF0dXMgb3BlbmVkOiAnICsgb3BlbmVkU2VjdGlvbklkKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTZWN0aW9uU3RhdHVzT3BlbmVkSWZOZWVkZWQob3BlbmVkU2VjdGlvbklkLCBvcGVuZWRNb2R1bGVJZCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzU2xpZGVMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNsaWRlTG9hZGluZ0NvdW50ZXIrKztcclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQ291cnNlUHJvZ3Jlc3MoKTtcclxuICAgICAgICB0aGlzLiRxLmFsbChiZWZvcmVTZWN0aW9uQ2hhbmdlUHJvbWlzZXMpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uQ2hhbmdlRGVmZXJyZWQgJiYgc2VjdGlvbkNoYW5nZVByb21pc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdTdGFydCBjaGFuZ2Ugc2VjdGlvbnMgYWZ0ZXIgcHJlbG9hZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25DaGFuZ2VEZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlY3Rpb25DaGFuZ2VQcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnU2xpZGUgaXMgbG9hZGVkIG5vdycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZUxvYWRpbmdDb3VudGVyLS07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zbGlkZUxvYWRpbmdDb3VudGVyID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2xpZGVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBDTlMtOTggcmVtb3ZlIGNsYXNzIGlmIG5nLWNsYXNzIGhhZCBub3QgZG9uZSBpdCAocG9zaWJsZSBidWcgaW4gYW5ndWxhciB3aXRoIGFuaW1hdGlvbilcclxuICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzbGlkZUVsZW1lbnQgPSAkKFwiLmNvdXJzZS1zbGlkZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNTbGlkZUxvYWRpbmcgJiYgc2xpZGVFbGVtZW50Lmhhc0NsYXNzKFwidmhzLXNsaWRlLWxvYWRpbmdcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVFbGVtZW50LnJlbW92ZUNsYXNzKFwidmhzLXNsaWRlLWxvYWRpbmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICQoXCIjbWFpbi1jb3Vyc2UtbGVmdC1iYXJcIikuaGVpZ2h0KCQoJy52aHMtd3JhcHBlcl9fY29udGVudCcpLmhlaWdodCgpKSwgMTAwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXVkaW9GaWxlVXJsID0gc2VjdGlvbi5hdWRpb0ZpbGVVcmw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TTElERV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubGVhdmVDb3Vyc2VQYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnREZWxheVRpbWUodGhpcy5zZWxlY3RlZFNlY3Rpb24uZGVsYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxlYXZlQ291cnNlUGFnZSAmJiB0aGlzLmNvdXJzZVByb2dyZXNzSWQgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb24gJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMYXN0Vmlld2VkU2VjdGlvbih0aGlzLmNvdXJzZUlkLCB0aGlzLmNvdXJzZVByb2dyZXNzSWQsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkKS50aGVuKGNvdXJzZVByb2dyZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShjb3Vyc2VQcm9ncmVzcywgdGhpcy5jb3Vyc2VQcm9ncmVzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVOZXh0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NsaWRlU2hvd1N0YXJ0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4gdGhpcy5pbml0RXZlbnRPbkNsaWNrKCksIDE1MDApO1xyXG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3Igc2xpZGUgdGVtcGxhdGVzIGJ1bmRsZSBsb2FkaW5nXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb24udHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuU0xJREVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb24gPSB0aGlzLnNlbGVjdGVkU2VjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gJiYgc2VjdGlvbi5pZCA9PT0gdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVUZW1wbGF0ZXNCdW5kbGVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCAxNTAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHNlY3Rpb24gc3RhdHVzIG9ubHkgaW4gaXQgaXMgZGlzcGxheWVkIHRvIHVzZXIgbm93XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNTbGlkZUxvYWRpbmcgJiYgc2VjdGlvblN0YXR1c1VwZGF0ZURlZmVycmVkICYmIHNlY3Rpb25TdGF0dXNVcGRhdGVQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlNldCBzZWN0aW9uIHN0YXR1cyBhZnRlciByaWNoIHRleHQgbG9hZGVkLi4uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnVuU2VjdGlvblN0YXR1c1VwZGF0ZURlZmVycmVkKHNlY3Rpb25TdGF0dXNVcGRhdGVEZWZlcnJlZCwgc2VjdGlvblN0YXR1c1VwZGF0ZVByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJ1blNlY3Rpb25TdGF0dXNVcGRhdGVEZWZlcnJlZChkZWZlcnJlZDogSURlZmVycmVkPGFueT4sIHN0YXR1c1VwZGF0ZWRQcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogdm9pZCB7XHJcbiAgICAgICAgLy93YWl0IGZvciBjb21wbGV0ZSBwcmV2aW91cyBzZWN0aW9uIHN0YXR1cyB1cGRhdGVcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gc3RhdHVzVXBkYXRlZFByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlY3Rpb25TdGF0dXNVcGRhdGVQcm9taXNlID09IG5ld1Byb21pc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXR1c1VwZGF0ZVByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygncmVzZXQgc3RhdHVzIHVwZGF0ZSBwcm9taXNlIGFmdGVyIHJlc29sdmUnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJQcm9taXNlcyBjaGFpbmVkLCBkb24ndCBjbGVhclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNlY3Rpb25TdGF0dXNVcGRhdGVQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXR1c1VwZGF0ZVByb21pc2UuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdleGVjdXRlIGFwcGVuZGVkIGRlZmVycmVkJyk7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3UHJvbWlzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXR1c1VwZGF0ZVByb21pc2UgPSBuZXdQcm9taXNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvblN0YXR1c1VwZGF0ZVByb21pc2UgPSBuZXdQcm9taXNlO1xyXG4gICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UmljaFRleHRMb2FkZWRQcm9taXNlKHJpY2hUZXh0SWQ6IHN0cmluZyk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIC8vaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnN1bW1hcnkpIHtcclxuICAgICAgICBsZXQgZGVmZXJyZWQ6IGFuZ3VsYXIuSURlZmVycmVkPGFueT4gPSB0aGlzLiRxLmRlZmVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YTogSUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhID0ge1xyXG4gICAgICAgICAgICByaWNoVGV4dEVsZW1lbnRJZDogcmljaFRleHRJZCxcclxuICAgICAgICAgICAgcmljaFRleHRCaW5kQ29udHJvbGxlcjogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZmluZFJpY2hUZXh0Q29udHJvbGxlcjogKCkgPT4gUmljaFRleHRCaW5kQ29udHJvbGxlciA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGJyb2FkY2FzdChFdmVudC5UQV9GSU5EX1JJQ0hfVEVYVF9CSU5EX0NPTlRST0xMRVIsIGV2ZW50RGF0YSk7XHJcbiAgICAgICAgICAgIHJldHVybiBldmVudERhdGEucmljaFRleHRCaW5kQ29udHJvbGxlcjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHdhaXRGb3JDb250ZW50TG9hZDogKHJpY2hUZXh0QmluZENvbnRyb2xsZXI6IFJpY2hUZXh0QmluZENvbnRyb2xsZXIpID0+IElQcm9taXNlPGFueT4gPVxyXG4gICAgICAgICAgICAocmljaFRleHRCaW5kQ29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJpY2hUZXh0QmluZENvbnRyb2xsZXIud2FpdEZvckNvbnRlbnRMb2FkZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZURlZmVycmVkSW5BbnlDYXNlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmljaFRleHRCaW5kQ29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlciA9IGZpbmRSaWNoVGV4dENvbnRyb2xsZXIoKTtcclxuICAgICAgICAgICAgaWYgKHJpY2hUZXh0QmluZENvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgICAgIHdhaXRGb3JDb250ZW50TG9hZChyaWNoVGV4dEJpbmRDb250cm9sbGVyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ05vdCBmb3VuZCByaWNoVGV4dCB0d2ljZScpO1xyXG4gICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgcmljaFRleHRCaW5kQ29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlciA9IGZpbmRSaWNoVGV4dENvbnRyb2xsZXIoKTtcclxuICAgICAgICBpZiAocmljaFRleHRCaW5kQ29udHJvbGxlcikge1xyXG4gICAgICAgICAgICB3YWl0Rm9yQ29udGVudExvYWQocmljaFRleHRCaW5kQ29udHJvbGxlcik7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ291cnNlTG9hZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZURlZmVycmVkSW5BbnlDYXNlKCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCcgU3RyYW5nZS4uLiByaWNoIHRleHQgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgICAgIC8vcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnV2FpdCBmb3IgY291cnNlIGxvYWQnKTtcclxuICAgICAgICAgICAgY29uc3QgdW5iaW5kV2F0Y2hlcjogRnVuY3Rpb24gPSB0aGlzLiRzY29wZS4kd2F0Y2goXCJ2bS5pc0NvdXJzZUxvYWRlZFwiLCB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmJpbmRXYXRjaGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy93YWl0IGZvciBET00gZWxlbWVudHMgYWRkXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVEZWZlcnJlZEluQW55Q2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1NlY3Rpb25WaWV3QWxsb3dlZChzZWN0aW9uOiBJU2VjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVN0YXJ0ZWQgJiYgc2VjdGlvbi5zdGF0dXMgIT09ICdOT1RfQUxMT1dFRCdcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWN0aW9uU3RhdHVzT3BlbmVkSWZOZWVkZWQoc2VjdGlvbklkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIsIGluaXRpYXRlZEJ5U2NvOiBib29sZWFuID0gZmFsc2UpOiBJUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWN0aW9uUHJvZ3Jlc3NQcm9taXNlID0gdGhpcy4kcS53aGVuKHRoaXMudXBkYXRlU2VjdGlvblByb2dyZXNzUHJvbWlzZSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2VjdGlvblN0YXR1c09wZW5lZElmTmVlZGVkSW50ZXJuYWwoc2VjdGlvbklkLCBtb2R1bGVJZCwgaW5pdGlhdGVkQnlTY28pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPT0gdGhpcy5FUlJPUl9JTlRFUk5FVF9ESVNDT05ORUNURUQgJiYgaW5pdGlhdGVkQnlTY28pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1c09wZW5lZFJldHJ5KHNlY3Rpb25JZCwgbW9kdWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uUHJvZ3Jlc3NQcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0U3RhdHVzT3BlbmVkUmV0cnkoc2VjdGlvbklkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTZWN0aW9uU3RhdHVzT3BlbmVkSWZOZWVkZWRJbnRlcm5hbChzZWN0aW9uSWQsIG1vZHVsZUlkKVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSB0aGlzLkVSUk9SX0lOVEVSTkVUX0RJU0NPTk5FQ1RFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1c09wZW5lZFJldHJ5KHNlY3Rpb25JZCwgbW9kdWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIHRoaXMuU1VCTUlUX1NFQ1RJT05fUFJPR1JFU1NfUkVUUllfSU5URVJWQUwpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0U2VjdGlvblN0YXR1c09wZW5lZElmTmVlZGVkSW50ZXJuYWwoc2VjdGlvbklkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIsIHZpYUxtczogYm9vbGVhbiA9IGZhbHNlKTogSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGxldCBzZWN0aW9uRm9yVXBkYXRlID0gQ291cnNlRGV0YWlsc1V0aWxzLmZpbmRTZWN0aW9uKHRoaXMuc2VjdGlvbnNNYXAsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLm1vZHVsZUlkLCB0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCk7XHJcbiAgICAgICAgaWYgKHNlY3Rpb25Gb3JVcGRhdGUgJiYgc2VjdGlvbkZvclVwZGF0ZS5zdGF0dXMgPT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5BTExPV0VEXSkge1xyXG4gICAgICAgICAgICBsZXQgb2xkU3RhdHVzOiBzdHJpbmcgPSBzZWN0aW9uRm9yVXBkYXRlLnN0YXR1cztcclxuICAgICAgICAgICAgbGV0IG5ld1N0YXR1czogc3RyaW5nID0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlY3Rpb25TdGF0dXNVcGRhdGVWaWFMbXNBcGlPbmx5ICE9IHVuZGVmaW5lZCB8fCB2aWFMbXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWN0aW9uU3RhdHVzVXBkYXRlVmlhTG1zQXBpT25seSB8fCB2aWFMbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHNlY3Rpb25Gb3JVcGRhdGUudHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSU5GT1JNQVRJT05dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAoc2VjdGlvbkZvclVwZGF0ZS5zdW1tYXJ5ICYmIHNlY3Rpb25Gb3JVcGRhdGUuc3VtbWFyeS5pbmRleE9mKFwidGEtdmhzLWVtYmVkZGVkLW1hdGVyaWFsXCIpID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy/RgdC+0LfQtNCw0L3QuNC1INC00L7Qv9C+0LvQvdC10L3QuNGPINC6INC/0YDQvtCz0YDQtdGB0YHRg1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRTZWN0aW9uUHJvZ3Jlc3NFeHRlbnNpb25Gb3JNYXRlcmlhbFByb2dyZXNzKHRoaXMuY291cnNlSWQsIHRoaXMuY291cnNlUHJvZ3Jlc3NJZCwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQv9GA0L7QstC10YDQutCwLCDRh9GC0L4g0LXRgdGC0Ywg0LLQuNC00LXQviDQuNC70Lgg0LDRg9C00LjQviDQvNCw0YLQtdGA0LjQsNC70Ysg0Lgg0L7QvdC4INC90LUg0L/RgNC+0YHQvNC+0YLRgNC10L3QvdGLXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQtdGB0LvQuCDQtNCwIC0g0L/RgNC+0LLQtdGA0LrQsCDRgtC10LrRg9GJ0LXQs9C+INGB0L7RgdGC0L7Rj9C90LjRjyDQuCDQvtC20LjQtNCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDRgtCw0LnQvNGB0YLQtdC80L/QvtCyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZmlsdGVyKG1wID0+ICFtcC5pc0NvbXBsZXRlZCkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU3RhdHVzQ2hhbmdlKHNlY3Rpb25JZCwgb2xkU3RhdHVzLCBuZXdTdGF0dXMsIHRoaXMuc2VjdGlvblN0YXR1c1VwZGF0ZVZpYUxtc0FwaU9ubHksIHZpYUxtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTZWN0aW9uU3RhdHVzT3BlbmVkKHNlY3Rpb25JZCwgbW9kdWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/QtdGB0LvQuCDQvdC10YIgLSDQvtGC0LzQtdGC0LrQsCDRh9GC0L4g0YHQtdC60YbQuNGPINCz0L7RgtC+0LLQsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1N0YXR1c0NoYW5nZShzZWN0aW9uSWQsIG9sZFN0YXR1cywgbmV3U3RhdHVzLCB0aGlzLnNlY3Rpb25TdGF0dXNVcGRhdGVWaWFMbXNBcGlPbmx5LCB2aWFMbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTZWN0aW9uU3RhdHVzT3BlbmVkKHNlY3Rpb25JZCwgbW9kdWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU3RhdHVzQ2hhbmdlKHNlY3Rpb25JZCwgb2xkU3RhdHVzLCBuZXdTdGF0dXMsIHRoaXMuc2VjdGlvblN0YXR1c1VwZGF0ZVZpYUxtc0FwaU9ubHksIHZpYUxtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFNlY3Rpb25TdGF0dXNPcGVuZWQoc2VjdGlvbklkLCBtb2R1bGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkID09IHNlY3Rpb25JZCAmJiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5tb2R1bGVJZCA9PSBtb2R1bGVJZCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQUxMT1dFRF0gJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnN1bW1hcnkuaW5kZXhPZihcIi5odG1sXCIpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2FpdExtc1RpbWVvdXRQcm9taXNlID0gdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFNlY3Rpb25TdGF0dXNPcGVuZWQoc2VjdGlvbklkLCBtb2R1bGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuV0FJVF9MTVNfSU5URVJWQUwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRMbXNUaW1lb3V0UHJvbWlzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFNlY3Rpb25TdGF0dXNPcGVuZWQoc2VjdGlvbklkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIpOiBJUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy5yZWN1cnNpb25EZXB0aCA8IENvdXJzZURldGFpbHNDb250cm9sbGVyLk1BWF9SRUNVUlNJT05fREVQVEgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWN1cnNpb25EZXB0aCsrO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc1NlcnZpY2UubWFya1NlY3Rpb25Bc09wZW5lZCh0aGlzLmNvdXJzZUlkLCBzZWN0aW9uSWQsIHRoaXMuY291cnNlUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKHVwZGF0ZWRTZWN0aW9uc1Byb2dyZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3Vyc2lvbkRlcHRoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlY3Rpb25TdGF0dXNlc0Zyb21TZXJ2ZXJSZXN1bHRzKHVwZGF0ZWRTZWN0aW9uc1Byb2dyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlUHJvZ3Jlc3NQZXJjZW50YWdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROZXh0U2VjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLmNvdXJzZS5wcm9ncmVzcy5zZWN0aW9uLmFscmVhZHkub3BlbmVkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmdldFNlY3Rpb25zUHJvZ3Jlc3ModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbih1cGRhdGVkU2VjdGlvbnNQcm9ncmVzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlY3Rpb25TdGF0dXNlc0Zyb21TZXJ2ZXJSZXN1bHRzKHVwZGF0ZWRTZWN0aW9uc1Byb2dyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVQcm9ncmVzc1BlcmNlbnRhZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TmV4dFNlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IuY291cnNlLnByb2dyZXNzLm9wZW4uc2VjdGlvbi5pbmNvcnJlY3Quc3RhdHVzXCIgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiU2VjdGlvbiBjYW5ub3QgYmUgb3BlbmVkIGFjY29yZGluZyB0byBjdXJyZW50IHN0YXR1c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdGFsZS5vYmplY3Quc3RhdGVcIiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwib3B0aW1pc3RpYy5sb2NraW5nLmZhaWxlZC5jYXRjaGVkXCIgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VjdGlvblN0YXR1c09wZW5lZChzZWN0aW9uSWQsIG1vZHVsZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlTGFzdFZpZXdlZFNlY3Rpb24oY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlciwgcmVjdXJzaW9uRGVwdGg6IG51bWJlciA9IDApOiBJUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAocmVjdXJzaW9uRGVwdGggPCBDb3Vyc2VEZXRhaWxzQ29udHJvbGxlci5NQVhfUkVDVVJTSU9OX0RFUFRIKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS51cGRhdGVMYXN0Vmlld2VkU2VjdGlvbihjb3Vyc2VJZCwgY291cnNlUHJvZ3Jlc3NJZCwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5kYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RhbGUub2JqZWN0LnN0YXRlXCIgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm9wdGltaXN0aWMubG9ja2luZy5mYWlsZWQuY2F0Y2hlZFwiIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVMYXN0Vmlld2VkU2VjdGlvbihjb3Vyc2VJZCwgY291cnNlUHJvZ3Jlc3NJZCwgc2VjdGlvbklkLCByZWN1cnNpb25EZXB0aCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uU3RhdHVzZXNGcm9tU2VydmVyUmVzdWx0cyh1cGRhdGVkU2VjdGlvbnNQcm9ncmVzczogSVNlY3Rpb25Qcm9ncmVzc1tdKSB7XHJcbiAgICAgICAgdXBkYXRlZFNlY3Rpb25zUHJvZ3Jlc3MuZm9yRWFjaCgoc2VjdGlvblByb2dyZXNzOiBJU2VjdGlvblByb2dyZXNzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kdWxlcy5mb3JFYWNoKG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWN0aW9uc01hcC5nZXQobW9kdWxlLmlkKS5maWx0ZXIocyA9PiBzLnNlY3Rpb24uaWQgPT0gc2VjdGlvblByb2dyZXNzLnNlY3Rpb25JZCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJtb2R1bGVfaWQgPSBcIiArIG1vZHVsZS5pZCArIFwiLCBzZWN0aW9uX2lkID0gXCIgKyBzZWN0aW9uUHJvZ3Jlc3Muc2VjdGlvbklkICsgXCIsIHN0YXR1cyA9IFwiICsgc2VjdGlvblByb2dyZXNzLnN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uc01hcC5nZXQobW9kdWxlLmlkKS5maWx0ZXIocyA9PiBzLnNlY3Rpb24uaWQgPT0gc2VjdGlvblByb2dyZXNzLnNlY3Rpb25JZClbMF0uc2VjdGlvbi5zdGF0dXMgPSBzZWN0aW9uUHJvZ3Jlc3Muc3RhdHVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGV0IHNlY3Rpb246IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCA9IHRoaXMuc2VjdGlvbnNMaXN0LmZpbHRlcihzID0+IHMuc2VjdGlvbi5pZCA9PSBzZWN0aW9uUHJvZ3Jlc3Muc2VjdGlvbklkKS5wb3AoKTtcclxuICAgICAgICAgICAgaWYgKHNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb24uc2VjdGlvbi5zdGF0dXMgPSBzZWN0aW9uUHJvZ3Jlc3Muc3RhdHVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb3Vyc2VQcm9ncmVzcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TmV4dFNlY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5uZXh0U2VjdGlvbiA9IENvdXJzZURldGFpbHNVdGlscy5maW5kTmV4dFNlY3Rpb24odGhpcy5zZWxlY3RlZFNlY3Rpb24sIHRoaXMuc2VjdGlvbnNNYXAsIHRoaXMubW9kdWxlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRNb2R1bGVCeUlkKG1vZHVsZUlkOiBudW1iZXIpOiBJTW9kdWxlIHtcclxuICAgICAgICByZXR1cm4gQ291cnNlRGV0YWlsc1V0aWxzLmZpbmRNb2R1bGVCeUlkKG1vZHVsZUlkLCB0aGlzLm1vZHVsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvTmV4dFNlY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1aXpQYXNzaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkID0gdGhpcy5uZXh0U2VjdGlvbi5tb2R1bGVJZDtcclxuICAgICAgICAgICAgdGhpcy5zZXRMZWZ0TWVudU1vZHVsZSh0aGlzLmdldE1vZHVsZUJ5SWQodGhpcy5uZXh0U2VjdGlvbi5tb2R1bGVJZCkpO1xyXG4gICAgICAgICAgICB0aGlzLnNldExlZnRNZW51SXRlbSh0aGlzLm5leHRTZWN0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiWW91IGNhbid0IGxlYXZlIHRoaXMgcGFnZSB1bmxlc3MgeW91IGNvbXBsZXRlIG9yIGNhbmNlbCB0aGUgcXVpeiAoc3VydmV5IG9yIGZsYXNoY2FyZHMpXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFByZXZTZWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucHJldlNlY3Rpb24gPSBDb3Vyc2VEZXRhaWxzVXRpbHMuZmluZFByZXZTZWN0aW9uKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLCB0aGlzLnNlY3Rpb25zTWFwLCB0aGlzLm1vZHVsZXMpO1xyXG4gICAgICAgIGlmICh0aGlzLnByZXZTZWN0aW9uLnR5cGVLZXkgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNMSURFX0RFQ0tdICYmIHRoaXMucHJldlNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoLmNoYXJBdCg5KVxyXG4gICAgICAgICAgICAmJiB0aGlzLnByZXZTZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aC5jaGFyQXQoOSkgPT09ICcxJykge1xyXG4gICAgICAgICAgICB0aGlzLnNsaWRlRGVja0lzRmlyc3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb1ByZXZTZWN0aW9uKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5xdWl6UGFzc2luZykge1xyXG4gICAgICAgICAgICB0aGlzLmlzU2xpZGVTaG93U3RhcnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVOZXh0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsYXlDb3VudGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQgPSB0aGlzLnByZXZTZWN0aW9uLm1vZHVsZUlkO1xyXG4gICAgICAgICAgICB0aGlzLnNldExlZnRNZW51TW9kdWxlKHRoaXMuZ2V0TW9kdWxlQnlJZCh0aGlzLnByZXZTZWN0aW9uLm1vZHVsZUlkKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVJdGVtKHRoaXMucHJldlNlY3Rpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJZb3UgY2FuJ3QgbGVhdmUgdGhpcyBwYWdlIHVubGVzcyB5b3UgY29tcGxldGUgb3IgY2FuY2VsIHRoZSBxdWl6IChzdXJ2ZXkgb3IgZmxhc2hjYXJkcylcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0xlZnRNZW51TW9kdWxlQWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZywgbGVmdE1vZHVsZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkID09IGxlZnRNb2R1bGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTGVmdE1lbnVJdGVtQWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZywgbGVmdE1vZHVsZTogbnVtYmVyLCBpdGVtOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlID09IGxlZnRNb2R1bGVcclxuICAgICAgICAgICAgJiYgdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbSA9PSBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkU2VjdGlvblR5cGVJbmZvKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtVHlwZSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSU5GT1JNQVRJT05dO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkU2VjdGlvblR5cGVJbmZvV2l0aE1hbnVhbENvbXBsZXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW1UeXBlID09PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5JTkZPUk1BVElPTl9XSVRIX01BTlVBTF9DT01QTEVUSU9OXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWxlY3RlZFNlY3Rpb25UeXBlUXVpek9yU3VydmV5T3JGbGFzaGNhcmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW1UeXBlID09PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5RVUlaXSB8fFxyXG4gICAgICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtVHlwZSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuU1VSVkVZXSB8fFxyXG4gICAgICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtVHlwZSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuRkxBU0hDQVJEXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWxlY3RlZFNlY3Rpb25UeXBlV2ViaW5hcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLldFQklOQVJdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkU2VjdGlvblR5cGVQcm9ibGVtU29sdXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW1UeXBlID09PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5QUk9CTEVNX1NPTFVUSU9OXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWxlY3RlZFNlY3Rpb25UeXBlSUxUKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtVHlwZSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSUxUXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWxlY3RlZFNlY3Rpb25UeXBlU2xpZGVEZWNrT3JTbGlkZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNMSURFX0RFQ0tdIHx8XHJcbiAgICAgICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW1UeXBlID09PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TTElERV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWRMaXN0V2ViaW5hcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaG93TGlzdE1lZXRpbmdzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWRMaXN0TWVldGluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaG93TGlzdE1lZXRpbmdzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRTZWN0aW9uTWF0ZXJpYWxzKCk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwibG9hZFNlY3Rpb25NYXRlcmlhbHMgLSBzdGFydGVkXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5tYXRlcmlhbHNDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IHByb21pc2U6IElQcm9taXNlPElNYXRlcmlhbFtdPjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VjdGlvbk1hdGVyaWFsc0NhY2hlLmhhcyh0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCkpIHtcclxuICAgICAgICAgICAgICAgIHByb21pc2UgPSB0aGlzLiRxLndoZW4odGhpcy5zZWN0aW9uTWF0ZXJpYWxzQ2FjaGUuZ2V0KHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2VjdGlvbklkOiBudW1iZXIgPSB0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZDtcclxuICAgICAgICAgICAgICAgIHByb21pc2UgPSB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0U2VjdGlvblVwbG9hZGVkT3JMaW5rTWF0ZXJpYWxzKHRoaXMuY291cnNlSWQsIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZSwgdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSU1hdGVyaWFsW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uTWF0ZXJpYWxzQ2FjaGUuc2V0KHNlY3Rpb25JZCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChyZXN1bHQ6IElNYXRlcmlhbFtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25NYXRlcmlhbHMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWN0aW9uTWF0ZXJpYWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNYXRlcmlhbCh0aGlzLnNlY3Rpb25NYXRlcmlhbHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25NYXRlcmlhbHMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IHt9O1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93TWF0ZXJpYWwobWF0ZXJpYWw6IElNYXRlcmlhbCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2hvd01hdGVyaWFsIC0gc3RhcnRlZFwiKTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsVHlwZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbExvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGFuZ3VsYXIuY29weShtYXRlcmlhbCwgdGhpcy5tYXRlcmlhbCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1hdGVyaWFsSWQgPSBtYXRlcmlhbC5pZDtcclxuXHJcbiAgICAgICAgdGhpcy5pc1ZpZXdBbGxvd2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7IC8vdG9kbzogbW92ZSBhbGwgdG8gZGlyZWN0aXZlXHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNZb3V0dWJlTGluayh0aGlzLm1hdGVyaWFsKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbFR5cGUgPSAnWU9VVFVCRSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1ZpbWVvTGluayh0aGlzLm1hdGVyaWFsKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbFR5cGUgPSAnVklNRU8nO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBd3NMaW5rKHRoaXMubWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsVHlwZSA9IFwiVklERU9cIjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxUeXBlID0gdGhpcy5tYXRlcmlhbC50eXBlS2V5O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWF0ZXJpYWxFbXB0eSA9IHRoaXMubWF0ZXJpYWwuaWQgJiYgdGhpcy5tYXRlcmlhbC50eXBlS2V5ICE9PSBNYXRlcmlhbFR5cGVLZXlFbnVtW01hdGVyaWFsVHlwZUtleUVudW0uTElOS10gJiZcclxuICAgICAgICAgICAgICAgICghdGhpcy5tYXRlcmlhbC5maWxlU3RhdHVzIHx8IHRoaXMubWF0ZXJpYWwuZmlsZVN0YXR1cyA9PT0gJ0VNUFRZJyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNNYXRlcmlhbE5vdFJlYWR5ID0gIXRoaXMuaXNNYXRlcmlhbEVtcHR5ICYmIHRoaXMubWF0ZXJpYWwuaWQgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudHlwZUtleSAhPT0gTWF0ZXJpYWxUeXBlS2V5RW51bVtNYXRlcmlhbFR5cGVLZXlFbnVtLkxJTktdICYmIHRoaXMubWF0ZXJpYWwuZmlsZVN0YXR1c1xyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5tYXRlcmlhbC5maWxlU3RhdHVzICE9PSAnRU1QVFknICYmIHRoaXMubWF0ZXJpYWwuZmlsZVN0YXR1cyAhPT0gJ1JFQURZJztcclxuICAgICAgICAgICAgdGhpcy5pc1ZpZXdBbGxvd2VkID0gdGhpcy5tYXRlcmlhbExvYWRlZCAmJiAhdGhpcy5pc01hdGVyaWFsRW1wdHkgJiYgIXRoaXMuaXNNYXRlcmlhbE5vdFJlYWR5O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tdWx0aW1lZGlhU291cmNlcyA9IFt7XHJcbiAgICAgICAgICAgICAgICBzcmM6IHRoaXMuaXNZb3V0dWJlTGluayh0aGlzLm1hdGVyaWFsKSB8fCB0aGlzLmlzQXdzTGluayh0aGlzLm1hdGVyaWFsKSA/IHRoaXMubWF0ZXJpYWwubGluayA6ICh0aGlzLm1hdGVyaWFsLmRvd25sb2FkVXJsIHx8ICcnKSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMuaXNZb3V0dWJlTGluayh0aGlzLm1hdGVyaWFsKSA/IFwidmlkZW8veW91dHViZVwiIDogKHRoaXMuaXNBd3NMaW5rKHRoaXMubWF0ZXJpYWwpID8gXCJ2aWRlby9tcDRcIiA6IHRoaXMubWF0ZXJpYWwuY29udGVudFR5cGUpXHJcbiAgICAgICAgICAgIH1dO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXRGb3JNYXRlcmlhbHMoKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUxheW91dEZvck1hdGVyaWFscygpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50VGFiRWxlbWVudCA9ICQoXCIjY291cnNlLXRhYi1jb250ZW50XCIpO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRDaGVjayA9ICQoXCIjbWF0ZXJpYWxfX2xpbmtzLWl0ZW0tXCIgKyAodGhpcy5zZWN0aW9uTWF0ZXJpYWxzLmxlbmd0aCAtIDEpKTtcclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnRDaGVjay5oYXNDbGFzcyhcImFjdGl2ZVwiKSkge1xyXG4gICAgICAgICAgICBsZXQgb3V0ZXJIZWlnaHRBbGxNYXRlcmlhbHNFbGVtZW50cyA9IDA7XHJcbiAgICAgICAgICAgICQoXCIuY291cnNlLXNlY3Rpb24tY29udGVudC1sZWFybmluZy10YWIgLmNvdXJzZS1zZWN0aW9uLWNvbnRlbnQtbGVhcm5pbmdfX2xpbmtzLWl0ZW1cIilcclxuICAgICAgICAgICAgICAgIC5ub3QoXCIuY291cnNlLXNlY3Rpb24tY29udGVudC1sZWFybmluZ19fZ2FnXCIpXHJcbiAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRlckhlaWdodEFsbE1hdGVyaWFsc0VsZW1lbnRzICs9ICQodGhpcykub3V0ZXJIZWlnaHQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKG91dGVySGVpZ2h0QWxsTWF0ZXJpYWxzRWxlbWVudHMgPCAkKFwiI215VGFiQ29udGVudFwiKS5oZWlnaHQoKSkge1xyXG4gICAgICAgICAgICAgICAgJChcIiNtYXRlcmlhbF9fbGlua3MtaXRlbS1cIiArICh0aGlzLnNlY3Rpb25NYXRlcmlhbHMubGVuZ3RoIC0gMSkgKyBcIiBhLm5hdi1saW5rXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKFwiY29udGVudF9fYmlnLXNpemVcIik7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50VGFiRWxlbWVudC5yZW1vdmVDbGFzcyhcInRhYi1wYW5lLWxhc3RcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI21hdGVyaWFsX19saW5rcy1pdGVtLVwiICsgKHRoaXMuc2VjdGlvbk1hdGVyaWFscy5sZW5ndGggLSAxKSArIFwiIGEubmF2LWxpbmtcIilcclxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoXCJjb250ZW50X19iaWctc2l6ZVwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnRUYWJFbGVtZW50LmFkZENsYXNzKFwidGFiLXBhbmUtbGFzdFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnRUYWJFbGVtZW50LnJlbW92ZUNsYXNzKFwidGFiLXBhbmUtbGFzdFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzWW91dHViZUxpbmsobWF0ZXJpYWw6IElNYXRlcmlhbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbC50eXBlSWQgPT0gMyAmJiBPYmplY3RUeXBlVXRpbHMuaXNZb3V0dWJlVXJsKG1hdGVyaWFsLmxpbmspO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpbWVvTGluayhtYXRlcmlhbDogSU1hdGVyaWFsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsLnR5cGVJZCA9PSAzICYmIE9iamVjdFR5cGVVdGlscy5pc1ZpbWVvVXJsKG1hdGVyaWFsLmxpbmspO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0F3c0xpbmsobWF0ZXJpYWw6IElNYXRlcmlhbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbC50eXBlSWQgPT0gMyAmJiBPYmplY3RUeXBlVXRpbHMuaXNBd3NVcmwobWF0ZXJpYWwubGluayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFsVHlwZUNsYXNzKG1hdGVyaWFsVHlwZUtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0VHlwZVV0aWxzLmdldE1hdGVyaWFsR2x5cGhpY29uQ2xhc3NGcm9tS2V5KG1hdGVyaWFsVHlwZUtleSk7XHJcbiAgICB9XHJcblxyXG4vLy8vLy8vLy8vIGNvdXJzZSBwcm9ncmVzc1xyXG5cclxuICAgIHByaXZhdGUgZ2V0Q291cnNlUHJvZ3Jlc3MoKTogSVByb21pc2U8SUNvdXJzZVByb2dyZXNzPiB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkID0gdGhpcy5zZXNzaW9uU3RvcmFnZVdyYXBwZXIuZ2V0PG51bWJlcj4odGhpcy5wcm9ncmVzc1NlcnZpY2UuQ09VUlNFX1BST0dSRVNTX0lEX1NUT1JBR0VfS0VZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmdldENvdXJzZVByb2dyZXNzKHRoaXMuY291cnNlSWQsIHRoaXMuY291cnNlUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdXJzZVByb2dyZXNzSWQgIT0gbnVsbCAmJiByZXN1bHQucGFydGljaXBhdGlvbkZvcm1JZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YW50VG9TdWJtaXRQYXJ0aWNpcGF0aW9uRm9ybSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDb3Vyc2VQcm9ncmVzcyhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnY291cnNlIHByb2dyZXNzIGluaXRpYWxpemVkJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VQcm9ncmVzcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyQWxsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWVudUtleSA9IHtcclxuICAgICAgICAgICAgbGVmdE1lbnVNb2R1bGU6IG51bGwsIC8vIHRoaXMuREVGQVVMVF9MRUZUX01FTlVfTU9EVUxFLFxyXG4gICAgICAgICAgICBsZWZ0TWVudU1vZHVsZUV4cGFuZGVkOiBudWxsLCAvLyB0aGlzLkRFRkFVTFRfTEVGVF9NRU5VX01PRFVMRSxcclxuICAgICAgICAgICAgbGVmdE1lbnVJdGVtOiBudWxsLCAvLyBDb3Vyc2VNb2R1bGVJdGVtc0tleS5JTlRSTyxcclxuICAgICAgICAgICAgaW5uZXJJdGVtOiBudWxsLCAvLyB0aGlzLkRFRkFVTFRfSU5ORVJfTUVOVV9JVEVNXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm1vZHVsZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0ge307XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBBcnJheTxJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWQ+PigpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0ge307XHJcbiAgICAgICAgdGhpcy5wcmV2U2VjdGlvbiA9IHt9O1xyXG4gICAgICAgIHRoaXMubmV4dFNlY3Rpb24gPSB7fTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25NYXRlcmlhbHMgPSBbXTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsID0ge307XHJcbiAgICAgICAgdGhpcy5tdWx0aW1lZGlhU291cmNlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydENvdXJzZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlUGFydGljaXBhdGlvbkZvcm0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1N0YXJ0Q291cnNlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVQYXJ0aWNpcGF0aW9uRm9ybSA9IHRydWU7XHJcbiAgICAgICAgbGV0IHByb21pc2U6IElQcm9taXNlPGFueT4gPSAodGhpcy53YW50VG9TdWJtaXRQYXJ0aWNpcGF0aW9uRm9ybSlcclxuICAgICAgICAgICAgPyB0aGlzLnByb2dyZXNzU2VydmljZS5zdGFydENvdXJzZSh0aGlzLmNvdXJzZUlkLCB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRGF0YSlcclxuICAgICAgICAgICAgOiB0aGlzLnByb2dyZXNzU2VydmljZS5zdGFydENvdXJzZSh0aGlzLmNvdXJzZUlkKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlUGFydGljaXBhdGlvbkZvcm0gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ291cnNlUHJvZ3Jlc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkU2VjdGlvbnModHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLndhbnRUb1N1Ym1pdFBhcnRpY2lwYXRpb25Gb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiUGFydGljaXBhdGlvbiBmb3JtIGRhdGEgaGF2ZSBiZWVuIHN1Ym1pdHRlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVuYmluZFRvcFRhYnNDdXN0b21BY3Rpb25zKCk7XHJcbiAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVQYXJ0aWNpcGF0aW9uRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PT0gXCJlcnJvci51c2VyLmFscmVhZHkuc3RhcnQuY291cnNlXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmNvbW1vbkVycm9yKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1N0YXJ0Q291cnNlID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ291cnNlUHJvZ3Jlc3MoY291cnNlUHJvZ3Jlc3M6IElDb3Vyc2VQcm9ncmVzcyk6IHZvaWQge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiaW5pdGlhbGl6ZUNvdXJzZVByb2dyZXNzIC0gc3RhcnRlZFwiKTtcclxuICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzID0gYW5ndWxhci5jb3B5KGNvdXJzZVByb2dyZXNzKTtcclxuICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzSWQgPSB0aGlzLmNvdXJzZVByb2dyZXNzLmlkO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VXcmFwcGVyLnB1dDxudW1iZXI+KHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLkNPVVJTRV9QUk9HUkVTU19JRF9TVE9SQUdFX0tFWSxcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkKTtcclxuICAgICAgICB0aGlzLmNvdXJzZVN0YXJ0ZWQgPSAoY291cnNlUHJvZ3Jlc3Muc3RhdHVzICYmIGNvdXJzZVByb2dyZXNzLnN0YXR1cyAhPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuTk9UX1NUQVJURURdKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdENvdXJzZVVybDogKCkgPT4gc3RyaW5nID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZCAmJiB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZXNSb3V0ZXIuc2VjdGlvblVwZGF0ZVJvdXRlKHRoaXMuY291cnNlSWQsIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkLCB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci5zdHJ1Y3R1cmVVcGRhdGVVcmwodGhpcy5jb3Vyc2VJZCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvU2VjdGlvbigkZXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jb3Vyc2VTdGFydGVkICYmIHRoaXMubW9kdWxlcy5sZW5ndGggPiAwICYmIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW0pIHtcclxuICAgICAgICAgICAgaWYgKCRldmVudC5rZXlDb2RlID09IDM3ICYmIHRoaXMucHJldlNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb1ByZXZTZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCRldmVudC5rZXlDb2RlID09IDM5ICYmIHRoaXMubmV4dFNlY3Rpb24uaWQgJiYgdGhpcy5uZXh0U2VjdGlvbi5zdGF0dXMgIT09ICdOT1RfQUxMT1dFRCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb05leHRTZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4vLy8vLy8vLy8vIHBhcnRpY2lwYXRpb24gZm9ybVxyXG4gICAgcHVibGljIGxvYWRQYXJ0aWNpcGF0aW9uRm9ybSgpOiBJUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZS5nZXRQYXJ0aWNpcGF0aW9uRm9ybSh0aGlzLmNvdXJzZUlkLCAnQ09VUlNFJylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm0gPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0V2l0aFBhcnRpY2lwYXRpb25Gb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVBhcnRpY2lwYXRpb25Gb3JtKCk7XHJcbiAgICAgICAgdGhpcy5zaG93UGFydGljaXBhdGlvbkZvcm0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud2FudFRvU3VibWl0UGFydGljaXBhdGlvbkZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVBhcnRpY2lwYXRpb25Gb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm1EYXRhID0ge307XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybS5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm1EYXRhW2ZpZWxkLmZpZWxkS2V5XSA9IFwiXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWluaXRpYWxpemVQYXJ0aWNpcGF0aW9uRm9ybSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRGF0YSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2hhbmdlV2FudFRvU3VibWl0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLndhbnRUb1N1Ym1pdFBhcnRpY2lwYXRpb25Gb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVBhcnRpY2lwYXRpb25Gb3JtKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kZWluaXRpYWxpemVQYXJ0aWNpcGF0aW9uRm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsUGFydGljaXBhdGlvbkZvcm0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaG93UGFydGljaXBhdGlvbkZvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNQYXJ0aWNpcGF0aW9uRm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLndhbnRUb1N1Ym1pdFBhcnRpY2lwYXRpb25Gb3JtKSB7XHJcbiAgICAgICAgICAgIGxldCBmb3JtVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRGF0YVtmaWVsZC5maWVsZEtleV0gPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1WYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1WYWxpZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRDb3Vyc2VDZXJ0aWZpY2F0ZXMoKTogSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VydGlmaWNhdGVTZXJ2aWNlLmdldENvdXJzZUNlcnRpZmljYXRlVGVtcGxhdGVzKHRoaXMuY291cnNlSWQpLnRoZW4oY2VydGlmaWNhdGVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VDZXJ0aWZpY2F0ZXMuc3BsaWNlKDApO1xyXG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlQ2VydGlmaWNhdGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBjLmNlcnRpZmljYXRlVGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjLmNlcnRpZmljYXRlVGVtcGxhdGVOYW1lXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChjZXJ0aWZpY2F0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVBhcmFtZXRlcnMuY2VydGlmaWNhdGVJZCA9IGNlcnRpZmljYXRlc1swXS5jZXJ0aWZpY2F0ZVRlbXBsYXRlSWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNMYXN0U2VjdGlvbkluQ291cnNlKHNlY3Rpb25JZD86IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQgPT0gdGhpcy5tb2R1bGVzW3RoaXMubW9kdWxlcy5sZW5ndGggLSAxXS5pZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25zTWFwLmdldCh0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZCkgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAoc2VjdGlvbklkIHx8IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkKSA9PSB0aGlzLnNlY3Rpb25zTWFwLmdldCh0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZClbdGhpcy5zZWN0aW9uc01hcC5nZXQodGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQpLmxlbmd0aCAtIDFdLnNlY3Rpb24uaWQpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2VydGlmaWNhdGVQYXJhbWV0ZXJzKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY291cnNlSWQ6IHRoaXMuY291cnNlSWQsXHJcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy5jdXJyZW50VXNlci5pZCxcclxuICAgICAgICAgICAgcHJvZ3Jlc3NJZDogdGhpcy5jb3Vyc2VQcm9ncmVzc0lkLFxyXG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZUlkOiB0aGlzLmNlcnRpZmljYXRlUGFyYW1ldGVycy5jZXJ0aWZpY2F0ZUlkLFxyXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuY2VydGlmaWNhdGVQYXJhbWV0ZXJzLmZvcm1hdCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDZXJ0aWZpY2F0ZShkb3dubG9hZDogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCBwYXJhbWV0ZXJzOiBhbnkgPSB0aGlzLmdldENlcnRpZmljYXRlUGFyYW1ldGVycygpO1xyXG4gICAgICAgIGlmIChkb3dubG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZG93bmxvYWRDZXJ0aWZpY2F0ZShwYXJhbWV0ZXJzKS50aGVuKHJlc3VsdCA9PiB0aGlzLiR3aW5kb3cub3BlbihyZXN1bHQpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLmZvcm1hdCA9ICdwbmcnO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZG93bmxvYWRDZXJ0aWZpY2F0ZShwYXJhbWV0ZXJzKS50aGVuKHJlc3VsdCA9PiB0aGlzLmNlcnRpZmljYXRlQ29udGVudCA9IFwiPGltZyBzdHlsZT1cXFwid2lkdGg6IDEwMCU7XFxcIiBzcmM9XFxcIlwiICsgcmVzdWx0ICsgXCJcXFwiLz5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlQ2VydGlmaWNhdGVGb3JVc2VyKCkge1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zYXZlQ2VydGlmaWNhdGVGb3JVc2VyKHRoaXMuZ2V0Q2VydGlmaWNhdGVQYXJhbWV0ZXJzKCkpLnRoZW4ocmVzdWx0ID0+IG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNhdmVkXCIpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRMYW5kaW5nUGFnZSgpOiBJUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5nZXRMYW5kaW5nUGFnZSh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYW5kaW5nUGFnZSA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRSZWxhdGVkTGVhcm5pbmdQYXRoc1RvU3RhcnQoKTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFJlbGF0ZWRMZWFybmluZ1BhdGhzVG9TdGFydCh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbigobGVhcm5pbmdQYXRoczogSUxlYXJuaW5nUGF0aFtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0ZWRMZWFybmluZ1BhdGhzVG9TdGFydCA9IGFuZ3VsYXIuY29weShsZWFybmluZ1BhdGhzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbGF0ZWRMZWFybmluZ1BhdGhzVG9TdGFydDtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGlkZU1lbnUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWVudVNob3cpIHtcclxuICAgICAgICAgICAgJCgnI3RvcE1lbnUnKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICQoJyNsZWZ0TWVudScpLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51U2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQoJyN0b3BNZW51Jykuc2hvdygpO1xyXG4gICAgICAgICAgICAkKCcjbGVmdE1lbnUnKS5zaG93KCk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudVNob3cgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGVtcGxhdGVGb3JJbmNsdWRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsLnRlbXBsYXRlKHRlbXBsYXRlTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdvVG9GdWxsU2NyZWVuTW9kZTogKCkgPT4gdm9pZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmZ1bGxTY3JlZW5Nb2RlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi5zZWFyY2goQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuRlVMTF9TQ1JFRU5fUEFSQU1FVEVSLCBcInRydWVcIikucmVwbGFjZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgbGVhdmVGdWxsU2NyZWVuTW9kZSgpIHtcclxuICAgICAgICB0aGlzLmZ1bGxTY3JlZW5Nb2RlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24uc2VhcmNoKENvdXJzZURldGFpbHNDb250cm9sbGVyLkZVTExfU0NSRUVOX1BBUkFNRVRFUiwgbnVsbCkucmVwbGFjZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNb2R1bGVQcmV2aWV3SW1hZ2VCdW5kbGUobW9kdWxlOiBJTW9kdWxlKTogSUJ1bmRsZUZpbGUge1xyXG4gICAgICAgIGlmICh0aGlzLmNvdXJzZUJ1bmRsZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvdXJzZUJ1bmRsZSB8fCAhbW9kdWxlIHx8ICFtb2R1bGUuaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmaWxlS2V5ID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShDb3Vyc2VEZXRhaWxzQ29udHJvbGxlci5NT0RVTEVfUFJFVklFV19JTUFHRV9CVU5ETEVfRklMRV9URU1QTEFURSlcclxuICAgICAgICAgICAgLndpdGgoXCI6aW5kZXhcIiwgbW9kdWxlLnNvcnRJbmRleClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlQnVuZGxlLmZpbGVzTWFwLmhhcyhmaWxlS2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VCdW5kbGUuZmlsZXNNYXAuZ2V0KGZpbGVLZXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0TE1TU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93UXVpekluZm9TZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dRdWl6UmVzdWx0c1NlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1F1aXpTdGFydFNlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd0xhbmRpbmdQYWdlU3RhcnRDb3Vyc2VCdXR0b24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9nTG9jYXRpb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnUGF0aCBjaGFuZ2VkIGZyb20gJyArIHRoaXMubG9nT2xkUGF0aCArICcgdG8gJyArIHRoaXMuJGxvY2F0aW9uLnBhdGgoKSArICdcXG4nICsgJ1NlY3Rpb24gY2hhbmdlZCBmcm9tICcgKyB0aGlzLmxvZ09sZFNlY3Rpb25JZCArICcgdG8gJyArIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkKTtcclxuICAgICAgICBsZXQgbmV3UGF0aCA9IHRoaXMuJGxvY2F0aW9uLnBhdGgoKTtcclxuICAgICAgICBsZXQgbmV3U2VjdGlvbklkID0gdGhpcy4kbG9jYXRpb24uc2VhcmNoKClbQ291cnNlc1JvdXRlci5TRUNUSU9OX1BBUkFNRVRFUl0gfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmxvZ1NlY3Rpb25QYXRoQ2hhbmdlKHRoaXMubG9nT2xkU2VjdGlvbklkLCBuZXdTZWN0aW9uSWQsIHRoaXMubG9nT2xkUGF0aCwgbmV3UGF0aCwgdGhpcy5sb2dCZWdpblNlY3Rpb25WaWV3VGltZXN0YW1wKTtcclxuICAgICAgICBpZiAodGhpcy5sb2dPbGRTZWN0aW9uSWQgPT0gbnVsbCB8fCB0aGlzLmxvZ09sZFNlY3Rpb25JZCAhPSBuZXdTZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dCZWdpblNlY3Rpb25WaWV3VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dPbGRQYXRoID0gbmV3UGF0aDtcclxuICAgICAgICAgICAgdGhpcy5sb2dPbGRTZWN0aW9uSWQgPSBuZXdTZWN0aW9uSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9nU2VjdGlvblBhdGhDaGFuZ2Uob2xkU2VjdGlvbklkOiBudW1iZXIsIG5ld1NlY3Rpb25JZDogbnVtYmVyLCBvbGRMb2NhdGlvblBhdGg6IHN0cmluZywgbmV3TG9jYXRpb25QYXRoOiBzdHJpbmcsIGJlZ2luVGltZXN0YW1wOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoYmVnaW5UaW1lc3RhbXAgJiYgb2xkU2VjdGlvbklkKSB7XHJcbiAgICAgICAgICAgIGlmIChvbGRTZWN0aW9uSWQgIT09IG5ld1NlY3Rpb25JZCB8fCBvbGRMb2NhdGlvblBhdGggIT09IG5ld0xvY2F0aW9uUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNlY3Rpb24gPSBDb3Vyc2VEZXRhaWxzVXRpbHMuZmluZFNlY3Rpb25CeUlkKHRoaXMuc2VjdGlvbnNMaXN0LCBvbGRTZWN0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24gJiYgc2VjdGlvbi5zdGF0dXMgIT09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuTk9UX0FMTE9XRURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VBY3Rpb25Mb2dTZXJ2aWNlLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZUlkOiB0aGlzLmNvdXJzZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VQcm9ncmVzc0lkOiB0aGlzLmNvdXJzZVByb2dyZXNzSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25JZDogb2xkU2VjdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VBY3Rpb25UeXBlOiBDb3Vyc2VBY3Rpb25UeXBlLlNFQ1RJT05fVklFVyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5UaW1lc3RhbXA6IGJlZ2luVGltZXN0YW1wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRUaW1lc3RhbXA6IERhdGUubm93KClcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvZ1N0YXR1c0NoYW5nZShzZWN0aW9uSWQ6IG51bWJlciwgb2xkU3RhdHVzOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0dXM6IHN0cmluZywgc2VjdGlvblN0YXR1c1VwZGF0ZVZpYUxtc0FwaU9ubHk6IGJvb2xlYW4sIHZpYUxtczogYm9vbGVhbikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhRXh0ZW5zaW9uOiBhbnk7XHJcbiAgICAgICAgICAgIGxldCBkYXRhRXh0ZW5zaW9uSlNPTjogc3RyaW5nO1xyXG4gICAgICAgICAgICBsZXQgb3BlcmF0aW9uRGF0ZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhRXh0ZW5zaW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9sZFN0YXR1czogb2xkU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXR1czogbmV3U3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25TdGF0dXNVcGRhdGVWaWFMbXNBcGlPbmx5OiBzZWN0aW9uU3RhdHVzVXBkYXRlVmlhTG1zQXBpT25seSxcclxuICAgICAgICAgICAgICAgICAgICB2aWFMbXM6IHZpYUxtc1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGRhdGFFeHRlbnNpb25KU09OID0gSlNPTi5zdHJpbmdpZnkoZGF0YUV4dGVuc2lvbik7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlcnJvckRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiRXJyb3Igd2hpbGUgc2VjdGlvbiBkYXRhIHNlcmlhbGl6aW5nLlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkYXRhRXh0ZW5zaW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9sZFN0YXR1czogb2xkU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXR1czogbmV3U3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25TdGF0dXNVcGRhdGVWaWFMbXNBcGlPbmx5OiBzZWN0aW9uU3RhdHVzVXBkYXRlVmlhTG1zQXBpT25seSxcclxuICAgICAgICAgICAgICAgICAgICB2aWFMbXM6IHZpYUxtcyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBlcnJvckRhdGFcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBkYXRhRXh0ZW5zaW9uSlNPTiA9IEpTT04uc3RyaW5naWZ5KGRhdGFFeHRlbnNpb24pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZUFjdGlvbkxvZ1NlcnZpY2UuY3JlYXRlKHtcclxuICAgICAgICAgICAgICAgIGNvdXJzZUlkOiB0aGlzLmNvdXJzZUlkLFxyXG4gICAgICAgICAgICAgICAgY291cnNlUHJvZ3Jlc3NJZDogdGhpcy5jb3Vyc2VQcm9ncmVzc0lkLFxyXG4gICAgICAgICAgICAgICAgc2VjdGlvbklkOiBzZWN0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICBjb3Vyc2VBY3Rpb25UeXBlOiBDb3Vyc2VBY3Rpb25UeXBlLlNFQ1RJT05fVklFVyxcclxuICAgICAgICAgICAgICAgIGJlZ2luVGltZXN0YW1wOiBvcGVyYXRpb25EYXRlLFxyXG4gICAgICAgICAgICAgICAgZW5kVGltZXN0YW1wOiBvcGVyYXRpb25EYXRlLFxyXG4gICAgICAgICAgICAgICAgZGF0YUV4dGVuc2lvbjogZGF0YUV4dGVuc2lvbkpTT05cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVW5hYmxlIHNhdmUgc3RhdHVzIGNoYW5nZS4nKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvZ0JlZm9yZVVubG9hZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5sb2dCZWdpblNlY3Rpb25WaWV3VGltZXN0YW1wICYmIHRoaXMubG9nT2xkU2VjdGlvbklkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbGV0IHNlY3Rpb24gPSBDb3Vyc2VEZXRhaWxzVXRpbHMuZmluZFNlY3Rpb25CeUlkKHRoaXMuc2VjdGlvbnNMaXN0LCB0aGlzLmxvZ09sZFNlY3Rpb25JZCk7XHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uICYmIHNlY3Rpb24uc3RhdHVzICE9PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLk5PVF9BTExPV0VEXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VBY3Rpb25Mb2dTZXJ2aWNlLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY291cnNlSWQ6IHRoaXMuY291cnNlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY291cnNlUHJvZ3Jlc3NJZDogdGhpcy5jb3Vyc2VQcm9ncmVzc0lkLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25JZDogdGhpcy5sb2dPbGRTZWN0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY291cnNlQWN0aW9uVHlwZTogQ291cnNlQWN0aW9uVHlwZS5TRUNUSU9OX1ZJRVcsXHJcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5UaW1lc3RhbXA6IHRoaXMubG9nQmVnaW5TZWN0aW9uVmlld1RpbWVzdGFtcCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRUaW1lc3RhbXA6IERhdGUubm93KClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmluZFNlY3Rpb25Mb2NhbGx5KG1vZHVsZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IHNlY3Rpb25zID0gdGhpcy5zZWN0aW9uc01hcC5nZXQobW9kdWxlSWQpLmZpbHRlcihzID0+IHMuc2VjdGlvbi5pZCA9PSBzZWN0aW9uSWQpO1xyXG4gICAgICAgIGlmIChzZWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWN0aW9uc1swXS5zZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvZ2dsZUNvdXJzZVBhZ2VDc3NDbGFzc0ZvckJvZHkoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikpO1xyXG4gICAgICAgIGlmIChlbGVtLmhhc0NsYXNzKFwiY291cnNlLXBhZ2VcIikpIHtcclxuICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyhcImNvdXJzZS1wYWdlXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoXCJjb3Vyc2UtcGFnZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNvdXJjZVBhcnRpY2lwYXRpb25Gb3JtRGF0YTogKCkgPT4gYW5ndWxhci5JUHJvbWlzZTxhbnk+ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRTb3VyY2VQYXJ0aWNpcGF0aW9uRm9ybURhdGEodGhpcy5jb3Vyc2VJZCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBvblN1Ym1pdDogKGFueSkgPT4gYW5ndWxhci5JUHJvbWlzZTxhbnk+ID0gKHBhcnRpY2lwYXRpb25Gb3JtRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZVBhcnRpY2lwYXRpb25Gb3JtKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlUGFydGljaXBhdGlvbkZvcm0gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS5zdGFydENvdXJzZSh0aGlzLmNvdXJzZUlkLCBwYXJ0aWNpcGF0aW9uRm9ybURhdGEpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVBhcnRpY2lwYXRpb25Gb3JtID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDb3Vyc2VQcm9ncmVzcyhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkU2VjdGlvbnModHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiUGFydGljaXBhdGlvbiBGb3JtIGRhdGEgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UGFydGljaXBhdGlvbkZvcm0gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlUGFydGljaXBhdGlvbkZvcm0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmNvbW1vbkVycm9yKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgbG9hZFByb2dyZXNzQnVuZGxlKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1bmRsZVNlcnZpY2UuZ2V0QnVuZGxlKHRoaXMuY291cnNlUHJvZ3Jlc3MuYnVuZGxlSWQsIFwiQUxMXCIpXHJcbiAgICAgICAgICAgIC50aGVuKChidW5kbGU6IElCdW5kbGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NCdW5kbGUgPSBidW5kbGU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRJbmZvV2l0aE1hbnVhbENvbXBsZXRpb25TZWN0aW9uU3RhdHVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlSW5mb1dpdGhNYW51YWxDb21wbGV0aW9uSW5wdXQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2VjdGlvbkNvbXBsZXRlZCh0aGlzLnNlbGVjdGVkU2VjdGlvbikpIHtcclxuICAgICAgICAgICAgbGV0IHByb21pc2UgPSB0aGlzLnByb2dyZXNzU2VydmljZS5yZXNldEluZm9ybWF0aW9uU2VjdGlvblN0YXR1c1RvQWxsb3dlZCh0aGlzLnNlbGVjdGVkU2VjdGlvbi5jb3Vyc2VJZCwgdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQsIHRoaXMuY291cnNlUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24ucGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UucmVzZXRJbmZvcm1hdGlvblNlY3Rpb25TdGF0dXNUb0FsbG93ZWQodGhpcy5zZWxlY3RlZFNlY3Rpb24uY291cnNlSWQsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnBhcmVudElkLCB0aGlzLmNvdXJzZVByb2dyZXNzSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UuZ2V0VXNlclByb2dyZXNzKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VjdGlvblN0YXR1c2VzRnJvbVNlcnZlclJlc3VsdHMocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlUHJvZ3Jlc3NQZXJjZW50YWdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uc3RhdHVzID0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5BTExPV0VEXTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTZWN0aW9uIHN0YXR1cyBzdWNjZXNzZnVsbHkgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUluZm9XaXRoTWFudWFsQ29tcGxldGlvbklucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VjdGlvblN0YXR1c09wZW5lZCh0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCwgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubW9kdWxlSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnN0YXR1cyA9IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuT1BFTkVEXTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTZWN0aW9uIHN0YXR1cyBzdWNjZXNzZnVsbHkgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUluZm9XaXRoTWFudWFsQ29tcGxldGlvbklucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWN0aW9uQ29tcGxldGVkKHNlY3Rpb246IElTZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHNlY3Rpb24uc3RhdHVzID09IFNlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuT1BFTkVEXVxyXG4gICAgICAgICAgICB8fCBzZWN0aW9uLnN0YXR1cyA9PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLkNPTVBMRVRFRF0pXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvd25sb2FkU2VjdGlvbkFzUGRmKHNlY3Rpb246IElTZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFNlY3Rpb25QZGZUb2tlbih0aGlzLmNvdXJzZUlkLCBzZWN0aW9uLm1vZHVsZUlkLCBzZWN0aW9uLmlkKVxyXG4gICAgICAgICAgICAudGhlbihkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB0b2tlbjogc3RyaW5nID0gZGF0YVtcInRva2VuXCJdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcImFwaS9jb3Vyc2VzL2Rvd25sb2FkU2VjdGlvblBkZi86dG9rZW5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBhcmFtKFwiOnRva2VuXCIsIHRva2VuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDb250ZW50RnJvbVRlbXBsYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5zdW1tYXJ5ICE9IG51bGwgP1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5zdW1tYXJ5LmluZGV4T2YoXCI8ZGl2IGNsYXNzPVxcXCJ2aHMtdGVtcGxhdGVcXFwiXCIpID49IDAgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWN0aW9uUGRmRmlsZUV4aXN0KHNlY3Rpb246IElTZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlQnVuZGxlID09IG51bGwgfHwgdGhpcy5jb3Vyc2VCdW5kbGUgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlQnVuZGxlLmZpbGVzID09IG51bGwgfHwgdGhpcy5jb3Vyc2VCdW5kbGUuZmlsZXMgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHNlY3Rpb25OYW1lUmVnRXggPSBuZXcgUmVnRXhwKCdec2VjdGlvbnNcXC9wZGZcXC8nICsgc2VjdGlvbi5pZCArICcuKicgKyAnXFwucGRmJCcpO1xyXG4gICAgICAgIGZvciAobGV0IGJ1bmRsZUZpbGUgb2YgdGhpcy5jb3Vyc2VCdW5kbGUuZmlsZXMpIHtcclxuICAgICAgICAgICAgaWYgKHNlY3Rpb25OYW1lUmVnRXgudGVzdChidW5kbGVGaWxlLmtleSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZENvdXJzZUVucm9sbG1lbnRDb25maWcoKTogYW5ndWxhci5JUHJvbWlzZTxJRW5yb2xsbWVudENvbmZpZ3VyYXRpb24+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldEVucm9sbG1lbnRDb25maWd1cmF0aW9uRm9yQ291cnNlKHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKGNvbmZpZyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVucm9sbG1lbnRDb25maWcgPSBjb25maWcgfHwge307XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbnJvbGxtZW50Q29uZmlnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZENvdXJzZUVucm9sbG1lbnRJbmZvKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRxLmFsbChbXHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VFbnJvbGxtZW50U2VhdHNGb3JDdXJyZW50VXNlcih0aGlzLmNvdXJzZUlkKSxcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFRvdGFsVXNlZFNlYXRzRm9yQ291cnNlKHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgXSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdEFycjogYW55W10pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlckVucm9sbG1lbnRJbmZvID0gcmVzdWx0QXJyWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZWF0VXNlZCA9IHJlc3VsdEFyclsxXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQXZhaWxhYmxlVG9TZWxmRW5yb2xsKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzRW5yb2xsbWVudENvbmZpZ3VyZWQoKVxyXG4gICAgICAgICAgICAmJiAodGhpcy5lbnJvbGxtZW50Q29uZmlnLmlzRW5hYmxlV2FpdGxpc3QgfHwgIXRoaXMuZW5yb2xsbWVudENvbmZpZy5pc0VuYWJsZVdhaXRsaXN0ICYmIHRoaXMuaXNBdmFpbGFibGVCeU1heEVucm9sbG1lbnRzKCkpXHJcbiAgICAgICAgICAgICYmICF0aGlzLmlzVXNlclBlbmRpbmcoKVxyXG4gICAgICAgICAgICAmJiAoIXRoaXMuaXNVc2VyV2FpdGxpc3RlZCgpIHx8ICh0aGlzLmlzVXNlcldhaXRsaXN0ZWQoKSAmJiB0aGlzLmlzQXZhaWxhYmxlQnlNYXhFbnJvbGxtZW50cygpICYmIHRoaXMuaXNQdXJjaGFzZUNvbmZpZ3VyZWQpKVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5pc1VzZXJFbnJvbGxlZCgpICYmICF0aGlzLmlzUGF5bWVudEluUHJvY2VzcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNFbnJvbGxtZW50Q29uZmlndXJlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnJvbGxtZW50Q29uZmlnLmlkICYmIHRoaXMuZW5yb2xsbWVudENvbmZpZy5pc0FsbG93TmV3RW5yb2xsbWVudHMgJiYgdGhpcy5lbnJvbGxtZW50Q29uZmlnLmlzQWxsb3dTZWxmRW5yb2xsbWVudHMgJiYgdGhpcy5pc0F2YWlsYWJsZUZvckN1cnJlbnREYXRlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBpc0F2YWlsYWJsZUVucm9sbG1lbnQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFbnJvbGxtZW50Q29uZmlndXJlZCgpXHJcbiAgICAgICAgICAgICYmICgoIXRoaXMuaXNBdmFpbGFibGVCeU1heEVucm9sbG1lbnRzKCkgJiYgdGhpcy5lbnJvbGxtZW50Q29uZmlnLmlzRW5hYmxlV2FpdGxpc3QpIHx8IHRoaXMuaXNBdmFpbGFibGVCeU1heEVucm9sbG1lbnRzKCkpXHJcbiAgICAgICAgICAgICYmICF0aGlzLmlzQXZhaWxhYmxlUHVyY2hhc2UoKSAmJiAoISh0aGlzLnByb2R1Y3RzICYmIHRoaXMucHJvZHVjdHMubGVuZ3RoID4gMCAmJiB0aGlzLnByb2R1Y3RzWzBdLnByaWNlID4gMCkgfHwgdGhpcy5wcm9kdWN0cy5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNBdmFpbGFibGVQdXJjaGFzZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKCF0aGlzLmVucm9sbG1lbnRDb25maWcuaWQgfHwgdGhpcy5pc0Vucm9sbG1lbnRDb25maWd1cmVkKCkpXHJcbiAgICAgICAgICAgICYmIHRoaXMuaXNQdXJjaGFzZUNvbmZpZ3VyZWQgJiYgIXRoaXMuaXNVc2VyUGVuZGluZygpICYmICF0aGlzLmlzVXNlckVucm9sbGVkKClcclxuICAgICAgICAgICAgJiYgdGhpcy5pc0F2YWlsYWJsZUJ5TWF4RW5yb2xsbWVudHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzQXZhaWxhYmxlRm9yQ3VycmVudERhdGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGxldCBpc05vd0FmdGVyU3RhcnREYXRlID0gdGhpcy5lbnJvbGxtZW50Q29uZmlnLnN0YXJ0RGF0ZSAmJiBtb21lbnQobm93KS5pc0FmdGVyKHRoaXMuZW5yb2xsbWVudENvbmZpZy5zdGFydERhdGUpO1xyXG4gICAgICAgIGxldCBpc0JlZm9yZUVuZERhdGUgPSB0aGlzLmVucm9sbG1lbnRDb25maWcuZW5kRGF0ZSAmJiBtb21lbnQobm93KS5pc0JlZm9yZSh0aGlzLmVucm9sbG1lbnRDb25maWcuZW5kRGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuICghdGhpcy5lbnJvbGxtZW50Q29uZmlnLnN0YXJ0RGF0ZSB8fCBpc05vd0FmdGVyU3RhcnREYXRlKVxyXG4gICAgICAgICAgICAmJiAoIXRoaXMuZW5yb2xsbWVudENvbmZpZy5lbmREYXRlIHx8IGlzQmVmb3JlRW5kRGF0ZSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzVXNlclBlbmRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckVucm9sbG1lbnRJbmZvICYmIHRoaXMudXNlckVucm9sbG1lbnRJbmZvXHJcbiAgICAgICAgICAgIC5maWx0ZXIoaSA9PiBpLnNlYXRTdGF0dXMgPT09IEVucm9sbG1lbnRTZWF0U3RhdHVzW0Vucm9sbG1lbnRTZWF0U3RhdHVzLlBFTkRJTkddKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNVc2VyUGVuZGluZ1BheW1lbnQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckVucm9sbG1lbnRJbmZvICYmIHRoaXMudXNlckVucm9sbG1lbnRJbmZvXHJcbiAgICAgICAgICAgIC5maWx0ZXIoaSA9PiBpLnNlYXRTdGF0dXMgPT09IEVucm9sbG1lbnRTZWF0U3RhdHVzW0Vucm9sbG1lbnRTZWF0U3RhdHVzLlBFTkRJTkdfUEFZTUVOVF0pLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1VzZXJXYWl0bGlzdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJFbnJvbGxtZW50SW5mbyAmJiB0aGlzLnVzZXJFbnJvbGxtZW50SW5mb1xyXG4gICAgICAgICAgICAuZmlsdGVyKGkgPT4gaS5zZWF0U3RhdHVzID09PSBFbnJvbGxtZW50U2VhdFN0YXR1c1tFbnJvbGxtZW50U2VhdFN0YXR1cy5XQUlUTElTVEVEXSkubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzVXNlckVucm9sbGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJFbnJvbGxtZW50SW5mbyAmJiB0aGlzLnVzZXJFbnJvbGxtZW50SW5mb1xyXG4gICAgICAgICAgICAuZmlsdGVyKGkgPT4gaS5zZWF0U3RhdHVzID09PSBFbnJvbGxtZW50U2VhdFN0YXR1c1tFbnJvbGxtZW50U2VhdFN0YXR1cy5FTlJPTExFRF0pLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0F2YWlsYWJsZUJ5TWF4RW5yb2xsbWVudHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmVucm9sbG1lbnRDb25maWcubWF4RW5yb2xsbWVudCB8fCB0aGlzLmVucm9sbG1lbnRDb25maWcubWF4RW5yb2xsbWVudFxyXG4gICAgICAgICAgICAgICAgJiYgKCh0aGlzLmVucm9sbG1lbnRDb25maWcubWF4RW5yb2xsbWVudCA+IHRoaXMuY291cnNlU2VhdFVzZWQpIHx8ICh0aGlzLmVucm9sbG1lbnRDb25maWcubWF4RW5yb2xsbWVudCA9PSB0aGlzLmNvdXJzZVNlYXRVc2VkICYmIHRoaXMuaXNVc2VyUGVuZGluZ1BheW1lbnQoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RW5yb2xsbWVudEVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLmVucm9sbG1lbnRDb25maWcuaWQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVucm9sbG1lbnRDb25maWcuaXNBbGxvd05ld0Vucm9sbG1lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJFbnJvbGxtZW50IGlzIG5vIGxvbmdlciBhbGxvd2VkIGZvciB0aGlzIGNvdXJzZSwgcGxlYXNlIGNvbnRhY3QgeW91ciBJbnN0cnVjdG9yXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZW5yb2xsbWVudENvbmZpZy5pc0FsbG93U2VsZkVucm9sbG1lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJTZWxmLWVucm9sbG1lbnQgaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgY291cnNlXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51c2VyRW5yb2xsbWVudEluZm8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNVc2VyUGVuZGluZygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiWW91ciBlbnJvbGxtZW50IHJlcXVlc3QgaXMgcGVuZGluZyBhcHByb3ZhbFwiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVXNlcldhaXRsaXN0ZWQoKSAmJiAhdGhpcy5pc1B1cmNoYXNlQ29uZmlndXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkVucm9sbG1lbnQgY2FwYWNpdHkgaXMgcmVhY2hlZC4gWW91IGFyZSBwbGFjZWQgaW4gdGhlIHdhaXRsaXN0IGFuZCB3aWxsIHJlY2VpdmUgbm90aWZpY2F0aW9uIGlmL3doZW4gZW5yb2xsZWRcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VzZXJXYWl0bGlzdGVkKCkgJiYgdGhpcy5pc1B1cmNoYXNlQ29uZmlndXJlZCAmJiAhdGhpcy5pc0F2YWlsYWJsZUJ5TWF4RW5yb2xsbWVudHMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkVucm9sbG1lbnQgY2FwYWNpdHkgaXMgcmVhY2hlZC4gWW91IGFyZSBwbGFjZWQgaW4gdGhlIHdhaXRsaXN0IGFuZCB3aWxsIHJlY2VpdmUgbm90aWZpY2F0aW9uIGlmL3doZW4gZW5yb2xsZWQgb3Igc2VhdCBiZWNvbWVzIGF2YWlsYWJsZVwiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0RhdGVQcm9wZXIgJiYgdGhpcy5jb3Vyc2UuZW5kRGF0ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiU3RhcnQgZGF0ZSBvZiBjb3Vyc2VcIiArIFwiIFwiICsgdGhpcy5jb3Vyc2Uuc3RhcnREYXRlVGV4dDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0F2YWlsYWJsZUZvckN1cnJlbnREYXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLmFkZElmKCEhdGhpcy5lbnJvbGxtZW50Q29uZmlnLnN0YXJ0RGF0ZSwgXCJFbnJvbGxtZW50IHN0YXJ0c1wiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRJZighIXRoaXMuZW5yb2xsbWVudENvbmZpZy5zdGFydERhdGUsIFwiIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRJZighIXRoaXMuZW5yb2xsbWVudENvbmZpZy5zdGFydERhdGUsIE1vbWVudC5pc1ZhbGlkRGF0ZSh0aGlzLmVucm9sbG1lbnRDb25maWcuc3RhcnREYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICAuYWRkSWYoISF0aGlzLmVucm9sbG1lbnRDb25maWcuc3RhcnREYXRlICYmICEhdGhpcy5lbnJvbGxtZW50Q29uZmlnLmVuZERhdGUsIFwiIC0gXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLmFkZElmKCEhdGhpcy5lbnJvbGxtZW50Q29uZmlnLmVuZERhdGUsIFwiRW5yb2xsbWVudCBlbmRzXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLmFkZElmKCEhdGhpcy5lbnJvbGxtZW50Q29uZmlnLmVuZERhdGUsIFwiIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRJZighIXRoaXMuZW5yb2xsbWVudENvbmZpZy5lbmREYXRlLCBNb21lbnQuaXNWYWxpZERhdGUodGhpcy5lbnJvbGxtZW50Q29uZmlnLmVuZERhdGUpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzQXZhaWxhYmxlQnlNYXhFbnJvbGxtZW50cygpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbnJvbGxtZW50Q29uZmlnLmlzRW5hYmxlV2FpdGxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJFbnJvbGxtZW50IGNhcGFjaXR5IGlzIHJlYWNoZWQuIFlvdSB3aWxsIGJlIGFkZGVkIHRvIHRoZSB3YWl0bGlzdFwiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJFbnJvbGxtZW50IGlzIGNsb3NlZC4gRW5yb2xsbWVudCBjYXBhY2l0eSBpcyByZWFjaGVkXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNBdmFpbGFibGVQdXJjaGFzZSgpICYmICh0aGlzLnByb2R1Y3RzICYmIHRoaXMucHJvZHVjdHNbMF0ucHJpY2UgPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiSW5jb3JyZWN0IHN5c3RlbSBwdXJjaGFzZSBzZXR0aW5ncy4gUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLlwiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGZFbnJvbGxVc2VyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTZWxmRW5yb2xsUHJvY2VlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5yZWRpcmVjdFRvTG9nT24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZW5yb2xsQ3VycmVudFVzZXJUb0NvdXJzZSh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnNlYXRTdGF0dXMgPT09IEVucm9sbG1lbnRTZWF0U3RhdHVzW0Vucm9sbG1lbnRTZWF0U3RhdHVzLkVOUk9MTEVEXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuc2VhdFN0YXR1cyA9PT0gRW5yb2xsbWVudFNlYXRTdGF0dXNbRW5yb2xsbWVudFNlYXRTdGF0dXMuV0FJVExJU1RFRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZENvdXJzZUVucm9sbG1lbnRJbmZvKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkVucm9sbG1lbnQgY2FwYWNpdHkgaXMgcmVhY2hlZC4gWW91IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHdhaXRsaXN0XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnNlYXRTdGF0dXMgPT09IEVucm9sbG1lbnRTZWF0U3RhdHVzW0Vucm9sbG1lbnRTZWF0U3RhdHVzLlBFTkRJTkddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRDb3Vyc2VFbnJvbGxtZW50SW5mbygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJZb3VyIGVucm9sbG1lbnQgcmVxdWVzdCBpcyBwZW5kaW5nIGFwcHJvdmFsXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmlzU2VsZkVucm9sbFByb2NlZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGZVbkVucm9sbEF2YWlsYWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyRW5yb2xsbWVudEluZm8gJiYgdGhpcy51c2VyRW5yb2xsbWVudEluZm9cclxuICAgICAgICAgICAgLmZpbHRlcihpID0+ICFpLmNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC5zb21lKGkgPT4gaS5zZWF0U3RhdHVzID09PSBFbnJvbGxtZW50U2VhdFN0YXR1c1tFbnJvbGxtZW50U2VhdFN0YXR1cy5FTlJPTExFRF1cclxuICAgICAgICAgICAgICAgIHx8IGkuc2VhdFN0YXR1cyA9PT0gRW5yb2xsbWVudFNlYXRTdGF0dXNbRW5yb2xsbWVudFNlYXRTdGF0dXMuV0FJVExJU1RFRF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdXBwb3J0TGluaygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2Uuc3VwcG9ydFVybDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJpbmRUb3BUYWJzQ3VzdG9tQWN0aW9ucygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGZVbkVucm9sbFVzZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiRG8geW91IHdhbnQgdG8gdW4tZW5yb2xsIGZyb20gdGhpcyBjb3Vyc2VcIiArIFwiP1wiLCB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJDb25maXJtIHVuZW5yb2xsbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJVbi1FbnJvbGxcIixcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJDYW5jZWxcIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS51bkVucm9sbEN1cnJlbnRVc2VyVG9Db3Vyc2UodGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy4kd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4gey8qZG8gbm90aGluZyovfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRvcFRhYnNDdXN0b21BY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAga2V5OiBcInVuRW5yb2xsVXNlckZyb21Db3Vyc2VcIixcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI2cHhcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgMCAzMCAzMFwiIHN0eWxlPVwid2lkdGg6IDI2cHg7IGhlaWdodDogMjRweDtcIiBhcmlhLWxhYmVsbGVkYnk9XCJwZXJzb25BZGRJY29uVGl0bGVcIiBzdHJva2U9XCIjMjQyNDI0XCIgc3Ryb2tlLXdpZHRoPVwiMVwiIHN0cm9rZS1saW5lY2FwPVwic3F1YXJlXCIgc3Ryb2tlLWxpbmVqb2luPVwibWl0ZXJcIiBmaWxsPVwibm9uZVwiIGNvbG9yPVwiIzI0MjQyNFwiPiA8dGl0bGUgaWQ9XCJwZXJzb25BZGRJY29uVGl0bGVcIj5Vbi1FbnJvbGwgbWU8L3RpdGxlPiAnICtcclxuICAgICAgICAgICAgICAgICAgICAnPHBhdGggZD1cIk00LDIwIEM0LDE3IDgsMTcgMTAsMTUgQzExLDE0IDgsMTQgOCw5IEM4LDUuNjY3IDkuMzMzLDQgMTIsNCBDMTQuNjY3LDQgMTYsNS42NjcgMTYsOSBDMTYsMTQgMTMsMTQgMTQsMTUgQzE2LDE3IDIwLDE3IDIwLDIwXCIvPiAnICtcclxuICAgICAgICAgICAgICAgICAgICAnPHBhdGggZD1cIk0yMC4xIDkuMWw1LjMgNC44IE0yNS4xLDkuMSBsLTQuOCw0LjhcIi8+PC9zdmc+JyxcclxuICAgICAgICAgICAgICAgIGFjdGlvbjogdGhpcy5zZWxmVW5FbnJvbGxVc2VyLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiVW4tRW5yb2xsIG1lXCJcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuYmluZFRvcFRhYnNDdXN0b21BY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudG9wVGFic0N1c3RvbUFjdGlvbnMuc3BsaWNlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja0JlZm9yZVNlY3Rpb25VbmNvbXBsZXRlZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGZvciAobGV0IHNlY3Rpb24gb2YgdGhpcy5zZWN0aW9uc0xpc3QpIHtcclxuICAgICAgICAgICAgaWYgKHNlY3Rpb24uaWQgPT09IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLnNlY3Rpb24uc3RhdHVzID09PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLkFMTE9XRURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiVG8gZ28gdG8gdGhlIG5leHQgc2VjdGlvbiB5b3UgbXVzdCBjb21wbGV0ZSBhbGwgcHJldmlvdXMgYW5kIHRoZSBjdXJyZW50IHNlY3Rpb25cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJUbyBnbyB0byB0aGUgbmV4dCBzZWN0aW9uIHlvdSBtdXN0IGNvbXBsZXRlIHRoZSBjdXJyZW50IHNlY3Rpb25cIjtcclxuICAgIH1cclxuXHJcbiAgICAvKiBQdXJjaGFzZSAqL1xyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlUHVyY2hhc2VDb25maWd1cmVkKCk6IGFuZ3VsYXIuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnB1cmNoYXNlU2VydmljZS5nZXRSZWZlcmVuY2VkT2JqZWN0UHVyY2hhc2VDb25maWd1cmVkKHRoaXMuY291cnNlSWQsIFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRV0pXHJcbiAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1B1cmNoYXNlQ29uZmlndXJlZCA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1B1cmNoYXNlQ29uZmlndXJlZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dQdXJjaGFzZU1vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2hlY2tQdXJjaGFzZVByb2Nlc3MoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnNlYXJjaChDb3Vyc2VEZXRhaWxzQ29udHJvbGxlci5QVVJDSEFTRV9QQVJBTUVURVIsIHRydWUpLnJlcGxhY2UoKTtcclxuICAgICAgICAgICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAgICAgICAgICQoXCIjcHVyY2hhc2VEaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQdXJjaGFzZVdpbmRvdyA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlUHVyY2hhc2VNb2RhbDogKCkgPT4gdm9pZCA9ICgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24uc2VhcmNoKENvdXJzZURldGFpbHNDb250cm9sbGVyLlBVUkNIQVNFX1BBUkFNRVRFUiwgbnVsbCkucmVwbGFjZSgpO1xyXG4gICAgICAgICQoXCIjcHVyY2hhc2VEaWFsb2dcIikubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICAkKCcubW9kYWwtYmFja2Ryb3AnKS5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnNob3dQdXJjaGFzZVdpbmRvdyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcHVibGljIGNoZWNrUHVyY2hhc2VQcm9jZXNzKCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5jaGVja1B1cmNoYXNlUHJvY2Vzcyh0aGlzLmNvdXJzZUlkKS50aGVuKChyZXN1bHQpPT57XHJcbiAgICAgICAgICAgIHRoaXMuaXNQYXltZW50SW5Qcm9jZXNzID0gcmVzdWx0ID09IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogUHVyY2hhc2UgKi9cclxuXHJcbiAgICAvKiBTQ09STSBpbnRlcmFjdGlvbiAqL1xyXG4gICAgcHVibGljIHNhdmVVc2VyU2Nvcm1TZXNzaW9uRGF0YShzY29ybVNlc3Npb25EYXRhSnNvbjogc3RyaW5nLCBzdXNwZW5kRGF0YTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbnNTYXZlUHJvbWlzZSA9IHRoaXMuJHEud2hlbih0aGlzLmludGVyYWN0aW9uc1NhdmVQcm9taXNlKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc1NlcnZpY2Uuc2F2ZVVzZXJTY29ybVNlc3Npb25EYXRhKHRoaXMuY291cnNlSWQsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkLCBzY29ybVNlc3Npb25EYXRhSnNvbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyogU0NPUk0gaW50ZXJhY3Rpb24gKi9cclxuXHJcbiAgICBwdWJsaWMgcnVuSW1tZXJzaXZlUmVhZGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucnVuSW1tZXJzaXZlUmVhZGVyRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYXp1cmVDb2duaXRpdmVTZXJ2aWNlc1NlcnZpY2UuZ2V0SW1tZXJzaXZlUmVhZGVyTGF1bmNoRGF0YSgpXHJcbiAgICAgICAgICAgIC50aGVuKChsYXVuY2hEYXRhOiBJSW1tZXJzaXZlUmVhZGVyTGF1bmNoRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRva2VuID0gbGF1bmNoRGF0YS50b2tlbjtcclxuICAgICAgICAgICAgICAgIGxldCBzdWJkb21haW4gPSBsYXVuY2hEYXRhLnN1YmRvbWFpbjtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNodW5rczogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJChcIiNzZWN0aW9uX3N1bW1hcnlfcmljaF90ZXh0XCIpLmh0bWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IFwidGV4dC9odG1sXCJcclxuICAgICAgICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0aW1lb3V0XCI6IDUwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJvbkV4aXRcIjogdGhpcy5pbW1lcnNpdmVSZWFkZXJFeGl0Q2FsbGJhY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ1aVpJbmRleFwiOiAyMDAwXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgKDxhbnk+IHdpbmRvdykuSW1tZXJzaXZlUmVhZGVyLmxhdW5jaEFzeW5jKHRva2VuLCBzdWJkb21haW4sIGRhdGEsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkVycm9yIGluIGxhdW5jaGluZyB0aGUgSW1tZXJzaXZlIFJlYWRlci5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5JbW1lcnNpdmVSZWFkZXJEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGltbWVyc2l2ZVJlYWRlckV4aXRDYWxsYmFjaygpOiB2b2lkIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkltbWVyc2l2ZSBSZWFkZXIgY2xvc2VkLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWN0aW9uUGFyZW50Rm9yQ3VycmVudChzZWN0aW9uRm9yQ2hlY2s6IElTZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHNlY3Rpb25Gb3JJdGVyYXRpb24gPSB0aGlzLnNlbGVjdGVkU2VjdGlvbjtcclxuICAgICAgICB3aGlsZSAodGhpcy5nZXRTZWN0aW9uTGV2ZWwoc2VjdGlvbkZvckl0ZXJhdGlvbi5pZCkgIT09IHRoaXMuc2VjdGlvbnNEZXB0aExldmVsKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uRm9ySXRlcmF0aW9uLnBhcmVudElkID09PSBzZWN0aW9uRm9yQ2hlY2suaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlY3Rpb25Gb3JJdGVyYXRpb24gPSBDb3Vyc2VEZXRhaWxzVXRpbHMuZmluZFByZXZTZWN0aW9uKHNlY3Rpb25Gb3JJdGVyYXRpb24sIHRoaXMuc2VjdGlvbnNNYXAsIHRoaXMubW9kdWxlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2VjdGlvbkxldmVsKHNlY3Rpb25JZDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgbGV2ZWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbnNMaXN0LmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zZWN0aW9uLmlkID09PSBzZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgIGxldmVsID0gdmFsdWUubGV2ZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbGV2ZWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUHJvZ3Jlc3NTZWN0aW9uKHNlY3Rpb25FbnRyeSwgbW9kdWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICgoKHNlY3Rpb25FbnRyeS5sZXZlbCA9PT0gdGhpcy5zZWN0aW9uc0RlcHRoTGV2ZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICh0aGlzLmdldFNlY3Rpb25MZXZlbCh0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCkgPiB0aGlzLnNlY3Rpb25zRGVwdGhMZXZlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1NlY3Rpb25QYXJlbnRGb3JDdXJyZW50KHNlY3Rpb25FbnRyeSkpIHx8XHJcbiAgICAgICAgICAgICAgICAodGhpcy5jb3Vyc2VTdGFydGVkICYmICF0aGlzLnF1aXpQYXNzaW5nICYmIHNlY3Rpb25FbnRyeS5zZWN0aW9uLnN0YXR1cyAhPT0gJ05PVF9BTExPV0VEJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmlzTGVmdE1lbnVJdGVtQWN0aXZlKHRoaXMubWVudUtleS50b3BNZW51LCBtb2R1bGUuaWQsIHNlY3Rpb25FbnRyeS5zZWN0aW9uLmlkKSkpICYmXHJcbiAgICAgICAgICAgICAgICAhKCF0aGlzLmNvdXJzZVN0YXJ0ZWQgfHwgdGhpcy5xdWl6UGFzc2luZyB8fCBzZWN0aW9uRW50cnkuc2VjdGlvbi5zdGF0dXMgPT09ICdOT1RfQUxMT1dFRCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDbGFzc0ZvclNlY3Rpb24oc2VjdGlvbkVudHJ5LCBtb2R1bGUpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGhpcy5jb3Vyc2VTdGFydGVkIHx8IHNlY3Rpb25FbnRyeS5zZWN0aW9uLnN0YXR1cyA9PSAnTk9UX0FMTE9XRUQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnd2FpdCc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUHJvZ3Jlc3NTZWN0aW9uKHNlY3Rpb25FbnRyeSwgbW9kdWxlKSB8fCAodGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQgPT0gc2VjdGlvbkVudHJ5LnNlY3Rpb24uaWQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnaW4tcHJvZ3Jlc3MnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuY291cnNlU3RhcnRlZCAmJiBzZWN0aW9uRW50cnkuc2VjdGlvbi5zdGF0dXMgPT0gJ0NPTVBMRVRFRCcpIHx8ICh0aGlzLmNvdXJzZVN0YXJ0ZWQgJiYgc2VjdGlvbkVudHJ5LnNlY3Rpb24uc3RhdHVzID09ICdPUEVORUQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2NvbXBsZXRlJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2F2YWlsYWJsZSc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuQ2xvc2VQcm9ncmVzc1VuaXQobW9kdWxlKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHVuaXRFbGVtZW50ID0gJCgnI3VuaXQtZWxlbWVudC0nICsgbW9kdWxlLmlkICsgJyAubmF2YmFyLXByb2dyZXNzLWJsb2NrX19lbGVtZW50LXByb2dyZXNzJyk7XHJcblxyXG4gICAgICAgIGlmICh1bml0RWxlbWVudC5wYXJlbnRzKCcucHJvZ3Jlc3Mtc2lkZWJhcl9fZnVsbCcpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHVuaXRFbGVtZW50LnBhcmVudHMoJy5wcm9ncmVzcy1zaWRlYmFyX19mdWxsJykuYXR0cihcImlkXCIpO1xyXG4gICAgICAgICAgICB1bml0RWxlbWVudCA9ICQoJyMnICsgcGFyZW50SWQgKyAnICN1bml0LWVsZW1lbnQtJyArIG1vZHVsZS5pZCArICcgLm5hdmJhci1wcm9ncmVzcy1ibG9ja19fZWxlbWVudC1wcm9ncmVzcycpXHJcbiAgICAgICAgICAgIHVuaXRFbGVtZW50LnNsaWRlVG9nZ2xlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyKSB7XHJcbiAgICAgICAgICAgICAgICB1bml0RWxlbWVudC5hbmltYXRlKHt3aWR0aDondG9nZ2xlJ30sMzUwKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHVuaXRFbGVtZW50LnNsaWRlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlY2FsY3VsYXRlQ291cnNlUHJvZ3Jlc3MoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlICYmIHRoaXMuY291cnNlLmlkICYmIHRoaXMuY291cnNlUHJvZ3Jlc3MgJiYgdGhpcy5jb3Vyc2VQcm9ncmVzcy5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0NvdXJzZURhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICBsZXQgb2xkQ291cnNlUHJvZ3Jlc3NQZXJjZW50ID0gdGhpcy5jb3Vyc2VQcm9ncmVzc1BlcmNlbnQ7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmdldEFsbFByb2dyZXNzZXNGb3JDb3Vyc2VQcm9ncmVzcyh0aGlzLmNvdXJzZS5pZCwgdGhpcy5jb3Vyc2VQcm9ncmVzcy5pZClcclxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElDb3Vyc2VTZWN0aW9uUHJvZ3Jlc3NFbnRyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdE1hcCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jYWxjdWxhdGVDb3Vyc2VQcm9ncmVzcyhyZXN1bHQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgY291bnRPZk1hbmRhdG9yeUNvbXBsZXRlZDogbnVtYmVyID0gcmVzdWx0TWFwLmdldCgnY291bnRPZk1hbmRhdG9yeUNvbXBsZXRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3VudE9mTWFuZGF0b3J5OiBudW1iZXIgPSByZXN1bHRNYXAuZ2V0KCdjb3VudE9mTWFuZGF0b3J5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50T2ZFbGVjdGl2ZUNvbXBsZXRlZDogbnVtYmVyID0gcmVzdWx0TWFwLmdldCgnY291bnRPZkVsZWN0aXZlQ29tcGxldGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50T2ZPcHRpb25hbDogbnVtYmVyID0gcmVzdWx0TWFwLmdldCgnY291bnRPZk9wdGlvbmFsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50T2ZPcHRpb25hbENvbXBsZXRlZDogbnVtYmVyID0gcmVzdWx0TWFwLmdldCgnY291bnRPZk9wdGlvbmFsQ29tcGxldGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXF1aXJlZEVsZWN0aXZlc051bWJlciA9IHRoaXMuY291cnNlLnJlcXVpcmVkRWxlY3RpdmVzTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHJlcXVpcmVkRWxlY3RpdmVzTnVtYmVyICsgY291bnRPZk1hbmRhdG9yeSkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRIZWFkU2VjdGlvbnMgPSByZXN1bHQuc2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoc2VjdGlvbiA9PiAhc2VjdGlvbi5wYXJlbnRJZCkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzUGVyY2VudCA9IE1hdGgucm91bmQoKGNvdW50T2ZFbGVjdGl2ZUNvbXBsZXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb3VudE9mT3B0aW9uYWxDb21wbGV0ZWQpL2NvdW50SGVhZFNlY3Rpb25zICogMTAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzcy5wcm9ncmVzc1BlcmNlbnQgPSB0aGlzLmNvdXJzZVByb2dyZXNzUGVyY2VudDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzUGVyY2VudCA9IE1hdGgucm91bmQoKE1hdGgubWluKGNvdW50T2ZFbGVjdGl2ZUNvbXBsZXRlZCwgcmVxdWlyZWRFbGVjdGl2ZXNOdW1iZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvdW50T2ZNYW5kYXRvcnlDb21wbGV0ZWQpLyhyZXF1aXJlZEVsZWN0aXZlc051bWJlciArIGNvdW50T2ZNYW5kYXRvcnkpICogMTAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzcy5wcm9ncmVzc1BlcmNlbnQgPSB0aGlzLmNvdXJzZVByb2dyZXNzUGVyY2VudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3Vyc2VQcm9ncmVzc1BlcmNlbnQgPT09IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmdhbWlmaWNhdGlvblNlcnZpY2UuYXNzaWduUmV3YXJkcyh0aGlzLmN1cnJlbnRVc2VyLCB0aGlzLmNvdXJzZUlkLCAnQ09VUlNFJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5ub3RpZnlVc2VyQWZ0ZXJSZXdhcmQoQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuQkFER0VfS0VZUykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoJ25vdGlmeVJld2FyZCcsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkQ291cnNlUHJvZ3Jlc3NQZXJjZW50ICE9IG51bGwgJiYgb2xkQ291cnNlUHJvZ3Jlc3NQZXJjZW50ICE9PSAxMDAgJiYgdGhpcy5jb3Vyc2VQcm9ncmVzc1BlcmNlbnQgPT09IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChFdmVudC5DT1VSU0VfUFJPR1JFU1NfUkVDQUxDVUxBVEVEKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdDb3Vyc2VEYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzLnByb2dyZXNzUGVyY2VudCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3NQZXJjZW50ID0gdGhpcy5jb3Vyc2VQcm9ncmVzcy5wcm9ncmVzc1BlcmNlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1Nob3dDb250ZW50TGVhcm5pbmdHYWcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoID4gOTkxO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hhbmdlTGVmdENsb3NhYmxlQnV0dG9uKHdpZHRoPzogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9ICQoXCIubmF2YmFyLXByb2dyZXNzLWJhciA+IC5jbG9zYWJsZS1wcm9ncmVzc1wiKTtcclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiA5OTEpIHtcclxuICAgICAgICAgICAgaWYgKCF3aWR0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGhFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcm9ncmVzcy1iYXItaWRcIikub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNzcyhcImxlZnRcIiwgd2lkdGhFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuY3NzKFwiZGlzcGxheVwiLCBcImJsb2NrXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5jc3MoXCJsZWZ0XCIsIHdpZHRoKTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuY3NzKFwiZGlzcGxheVwiLCBcImJsb2NrXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZWxlbWVudC5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlQ291cnNlUHJvZ3Jlc3NNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICAkKCcjY291cnNlVGFibGV0UHJvZ3Jlc3MnKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRIZWlnaHRDb3Vyc2VUaXRsZUJsb2NrKCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gJCgnI2NvdXJzZS1kZXRhaWwtdGl0bGUnKS5oZWlnaHQoKTtcclxuICAgICAgICByZXR1cm4gaGVpZ2h0IDw9IDUwID8gMCA6IGhlaWdodCAtIDQwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNYXRlcmlhbEV4dGVuc2lvbihtYXRlcmlhbDogSU1hdGVyaWFsKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobWF0ZXJpYWwuZmlsZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiLlwiICsgbWF0ZXJpYWwuZmlsZU5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0NoZWNrQ29uZmlybWF0aW9uUG9wdXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnN0YXR1cyA9PSBcIkFMTE9XRURcIikge1xyXG4gICAgICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLFwiYXV0b1wiKVxyXG4gICAgICAgICAgICAkKFwiI21hbnVhbENvbXBsZXRpb25DaGVja2JveENvbmZpcm1cIikubW9kYWwoe1xyXG4gICAgICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVucm9sbEZvckZyZWUoKSB7XHJcbiAgICAgICAgdGhpcy5lbnJvbGxJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICBsZXQgYnVzaW5lc3NVbml0SWQgPSB0aGlzLmNvdXJzZS5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICBsZXQgcHJvZHVjdElkID0gdGhpcy5wcm9kdWN0c1swXS5pZDtcclxuICAgICAgICBsZXQgcmV0dXJuVXJsID0gXCJcIjtcclxuICAgICAgICB0aGlzLmZyZWVFbnJvbGxtZW50U2VydmljZS5jcmVhdGVPcmRlcih7YnVzaW5lc3NVbml0SWQsIHByb2R1Y3RJZCwgcmV0dXJuVXJsfSlcclxuICAgICAgICAgICAgLnRoZW4oKHByb2R1Y3RJZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuZmluYW5jZXNSb3V0ZXIucHVyY2hhc2VkUHJvZHVjdFVybChwcm9kdWN0SWQpKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiSW5jb3JyZWN0IHN5c3RlbSBwdXJjaGFzZSBzZXR0aW5ncy4gUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLlwiKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFNsaWRlVGVtcGxhdGVzQnVuZGxlKGNzc0ZpbGVLZXlzPzogQXJyYXk8c3RyaW5nPiwganNGaWxlS2V5cz86IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICB0aGlzLnNsaWRlU2VydmljZS5nZXRTbGlkZVRlbXBsYXRlQnVuZGxlSWQoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1bmRsZVNlcnZpY2UuZ2V0QnVuZGxlKHJlc3VsdCwgXCJIVE1MX09SX0xPQURFRF9BVF9TVEFSVFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGJ1bmRsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zbGlkZVRlbXBsYXRlc0J1bmRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlkZVRlbXBsYXRlc0J1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlTG9hZFNsaWRlVGVtcGxhdGVzQnVuZGxlKGNzc0ZpbGVLZXlzLCBqc0ZpbGVLZXlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb21wbGV0ZUxvYWRTbGlkZVRlbXBsYXRlc0J1bmRsZShjc3NGaWxlS2V5cz86IEFycmF5PHN0cmluZz4sIGpzRmlsZUtleXM/OiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgdGhpcy5jb21wb3NlUmljaFRleHRGcm9tU2xpZGVCdW5kbGUoY3NzRmlsZUtleXMsIGpzRmlsZUtleXMpO1xyXG4gICAgICAgIGlmICh0aGlzLnNsaWRlVGVtcGxhdGVzQnVuZGxlVGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSaWNoVGV4dExvYWRlZFByb21pc2UoQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuU0xJREVfVEVNUExBVEVTX0JVTkRMRV9SSUNIX1RFWFRfSUQpO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvdW50RGVsYXlUaW1lKGRlbGF5OiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgc2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNMaXN0LmZpbHRlcihzZWN0aW9uID0+IHNlY3Rpb24uaWQgPT0gdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQpWzBdO1xyXG4gICAgICAgIGxldCBzZWN0aW9uQ29tcGxldGVkID0gc2VjdGlvbi5zZWN0aW9uLnN0YXR1cyA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdO1xyXG4gICAgICAgIGlmICgodGhpcy5jb3Vyc2UuZGVmYXVsdERlbGF5ICE9IC0xICYmICh0aGlzLmNvdXJzZS5kZWZhdWx0RGVsYXkgIT0gMCB8fCAoZGVsYXkgIT0gMCAmJiBkZWxheSAhPSBudWxsKSkpIHx8IHRoaXMuaXNTbGlkZVNob3dTdGFydGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBkZWxheUluTXM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvdXJzZS5kZWZhdWx0RGVsYXkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxheUluTXMgPSAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVsYXlJbk1zID0gKGRlbGF5ICE9IDAgJiYgZGVsYXkgIT0gbnVsbCkgPyBkZWxheSAqIDEwMDAgOiB0aGlzLmNvdXJzZS5kZWZhdWx0RGVsYXkgKiAxMDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghc2VjdGlvbkNvbXBsZXRlZCB8fCB0aGlzLmlzU2xpZGVTaG93U3RhcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlTmV4dEJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHRoaXNTZWN0aW9uID0gdGhpcy5zZWxlY3RlZFNlY3Rpb247XHJcbiAgICAgICAgICAgIHRoaXMuZGVsYXlDb3VudGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxheUNvdW50ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXNTZWN0aW9uID09PSB0aGlzLnNlbGVjdGVkU2VjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VjdGlvbkNvbXBsZXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxhc3RWaWV3ZWRTZWN0aW9uKHRoaXMuY291cnNlSWQsIHRoaXMuY291cnNlUHJvZ3Jlc3NJZCwgdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQpLnRoZW4oY291cnNlUHJvZ3Jlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KGNvdXJzZVByb2dyZXNzLCB0aGlzLmNvdXJzZVByb2dyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VjdGlvblN0YXR1c09wZW5lZElmTmVlZGVkKHNlY3Rpb24uc2VjdGlvbi5pZCwgc2VjdGlvbi5zZWN0aW9uLm1vZHVsZUlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlRGVsYXlDb3VudGluZyh0aGlzU2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZURlbGF5Q291bnRpbmcodGhpc1NlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgZGVsYXlJbk1zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXNlY3Rpb25Db21wbGV0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGFzdFZpZXdlZFNlY3Rpb24odGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkLCB0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCkudGhlbihjb3Vyc2VQcm9ncmVzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KGNvdXJzZVByb2dyZXNzLCB0aGlzLmNvdXJzZVByb2dyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlY3Rpb25TdGF0dXNPcGVuZWRJZk5lZWRlZChzZWN0aW9uLnNlY3Rpb24uaWQsIHNlY3Rpb24uc2VjdGlvbi5tb2R1bGVJZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZU5leHRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb21wbGV0ZURlbGF5Q291bnRpbmcodGhpc1NlY3Rpb246IElTZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlTmV4dEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2xpZGVTaG93U3RhcnRlZCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2xpZGVTaG93U3RhcnRlZCAmJiB0aGlzU2VjdGlvbiA9PSB0aGlzLnNlbGVjdGVkU2VjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghIXRoaXMubmV4dFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmV4dFNlY3Rpb24ucGFyZW50SWQgIT0gdGhpcy5zZWxlY3RlZFNlY3Rpb24ucGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTbGlkZVNob3dTdGFydGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvTmV4dFNlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2xpZGVTaG93U3RhcnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBTdGFydFN0b3BTbGlkZVNob3coKSB7XHJcbiAgICAgICAgdGhpcy5pc1NsaWRlU2hvd1N0YXJ0ZWQgPSAhdGhpcy5pc1NsaWRlU2hvd1N0YXJ0ZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTbGlkZVNob3dTdGFydGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ29Ub0Z1bGxTY3JlZW5Nb2RlKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvdXJzZS5kZWZhdWx0RGVsYXkgPD0gMCAmJiAodGhpcy5zZWxlY3RlZFNlY3Rpb24uZGVsYXkgPT0gMCB8fCB0aGlzLnNlbGVjdGVkU2VjdGlvbi5kZWxheSA9PSBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5uZXh0U2VjdGlvbi5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb05leHRTZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTbGlkZVNob3dTdGFydGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWxheUNvdW50ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISF0aGlzLm5leHRTZWN0aW9uLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb05leHRTZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NsaWRlU2hvd1N0YXJ0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZU5leHRCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sZWF2ZUZ1bGxTY3JlZW5Nb2RlKCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWxheUNvdW50ZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uID0gdGhpcy5zZWN0aW9uc0xpc3QuZmlsdGVyKHNlY3Rpb24gPT4gc2VjdGlvbi5pZCA9PSB0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZClbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5zZWN0aW9uLnN0YXR1cyA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlTmV4dEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEV2ZW50T25DbGljaygpIHtcclxuICAgICAgICBsZXQgaW1hZ2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5zZWN0aW9uLWNvbnRlbnQgaW1nXCIpO1xyXG4gICAgICAgIGlmIChpbWFnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAoKGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWltYWdlc1tpXS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnY29yZS1sb2dvJykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgIWltYWdlc1tpXS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmF2YmFyLWJyYW5kJykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgIWltYWdlc1tpXS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndmlkZW8tcG9zdGVyJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzW2ldLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2VubGFyZ2VkSW1hZ2UgLm1vZGFsLWJvZHlcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKFwiZGlzcGxheVwiLCBcImJsb2NrXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLmNzcyhcInBsYWNlLWNvbnRlbnRcIiwgXCJjZW50ZXJcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbCgnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKFwiPGltZyBzcmM9J1wiICsgaW1hZ2VzW2ldLmF0dHJpYnV0ZXMuaXRlbSgwKS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFwiJyBhbHQ9Jycgc3R5bGU9J3dpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW4nIC8+XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNlbmxhcmdlZEltYWdlXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KShpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGlkZUVubGFyZ2VkSW1hZ2VNb2RhbCgpIHtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNlbmxhcmdlZEltYWdlIGltZ1wiKTtcclxuICAgICAgICBpZiAoaW1nKSB7XHJcbiAgICAgICAgICAgIGltZy5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChcIiNlbmxhcmdlZEltYWdlXCIpLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2xpZGVUZW1wbGF0ZUNzc0ZpbGVLZXlzKG1vZHVsZUlkOiBudW1iZXIsIHNsaWRlRGVja1NlY3Rpb25JZDogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGNzc0ZpbGVLZXlzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uc01hcC5nZXQobW9kdWxlSWQpLmZpbHRlcihzID0+IHMuc2VjdGlvbi5wYXJlbnRJZCA9PT0gc2xpZGVEZWNrU2VjdGlvbklkKS5mb3JFYWNoKHMgPT4gcy5zZWN0aW9uLnNsaWRlVGVtcGxhdGVDc3NGaWxlS2V5ICE9IG51bGwgPyBjc3NGaWxlS2V5cy5wdXNoKHMuc2VjdGlvbi5zbGlkZVRlbXBsYXRlQ3NzRmlsZUtleSkgOiBudWxsKTtcclxuICAgICAgICByZXR1cm4gY3NzRmlsZUtleXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNsaWRlVGVtcGxhdGVKc0ZpbGVLZXlzKG1vZHVsZUlkOiBudW1iZXIsIHNsaWRlRGVja1NlY3Rpb25JZDogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGpzRmlsZUtleXM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25zTWFwLmdldChtb2R1bGVJZCkuZmlsdGVyKHMgPT4gcy5zZWN0aW9uLnBhcmVudElkID09PSBzbGlkZURlY2tTZWN0aW9uSWQpLmZvckVhY2gocyA9PiBzLnNlY3Rpb24uc2xpZGVUZW1wbGF0ZUpzRmlsZUtleSAhPSBudWxsID8ganNGaWxlS2V5cy5wdXNoKHMuc2VjdGlvbi5zbGlkZVRlbXBsYXRlSnNGaWxlS2V5KSA6IG51bGwpO1xyXG4gICAgICAgIHJldHVybiBqc0ZpbGVLZXlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0Vucm9sbG1lbnRFeHBpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnJvbGxtZW50Q29uZmlnLmVuZERhdGUgJiYgdGhpcy5lbnJvbGxtZW50Q29uZmlnLmVuZERhdGUgJiYgbW9tZW50KG5vdykuaXNBZnRlcih0aGlzLmVucm9sbG1lbnRDb25maWcuZW5kRGF0ZSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QW5ldFRva2VuQW5kT3BlblB1cmNoYXNlKCkge1xyXG4gICAgICAgIHRoaXMuZ2V0QU5ldFRva2VuKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSA8SFRNTEZvcm1FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZW5kX2hwdG9rZW4nKTtcclxuICAgICAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7XHJcbiAgICAgICAgICAgIH0sIDApXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNb2JpbGUoKSA6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCB3ID0gd2luZG93LFxyXG4gICAgICAgICAgICBkID0gZG9jdW1lbnQsXHJcbiAgICAgICAgICAgIGUgPSBkLmRvY3VtZW50RWxlbWVudCxcclxuICAgICAgICAgICAgZyA9IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXSxcclxuICAgICAgICAgICAgeCA9IHcuaW5uZXJXaWR0aCB8fCBlLmNsaWVudFdpZHRoIHx8IGcuY2xpZW50V2lkdGg7XHJcblxyXG4gICAgICAgIHJldHVybiB4IDw9IDc2NztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEltYWdlc0ZvckFjdGl2aXR5QmFkZ2VzKGJhZGdlczogSUJhZGdlW10pOiB2b2lkIHtcclxuICAgICAgICBiYWRnZXMuZm9yRWFjaChiID0+IHtcclxuICAgICAgICAgICAgYi5wcmV2aWV3VXJsID0gdGhpcy5nZXRJbWFnZUZvckFjdGl2aXR5QmFkZ2UoYik7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW1hZ2VGb3JBY3Rpdml0eUJhZGdlKGJhZGdlOiBJQmFkZ2UpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChiYWRnZSkge1xyXG4gICAgICAgICAgICBpZiAoIWJhZGdlLmZpbGVJZCAmJiBiYWRnZS5iYWRnZUtleSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB0aGVtZXMvZGVmYXVsdC9pbWcvYWN0aW9uQmFkZ2VzLyR7YmFkZ2UuYmFkZ2VLZXl9LnBuZ2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGJhZGdlLnByZXZpZXdVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3VibWl0UmV3YXJkKHJld2FyZElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgdGVtcFJld2FyZHMgPSB0aGlzLnJld2FyZHMuZmlsdGVyKHIgPT4gci5pZCAhPT0gcmV3YXJkSWQpO1xyXG4gICAgICAgIGlmICh0ZW1wUmV3YXJkcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAkKCcucmV3YXJkTm90aWZpY2F0aW9uJykuYWRkQ2xhc3MoJ3Jld2FyZE5vdGlmaWNhdGlvbi11cCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkcyA9IHRlbXBSZXdhcmRzO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXdhcmRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkVG9TaG93ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICQoJy5yZXdhcmROb3RpZmljYXRpb24nKS5yZW1vdmVDbGFzcygncmV3YXJkTm90aWZpY2F0aW9uLWRvd24nKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJld2FyZFRvU2hvdyA9IHRoaXMucmV3YXJkc1swXTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRUb1Nob3cgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVByb2dyZXNzT2ZNdWx0aW1lZGlhTWF0ZXJpYWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnN0YXR1cyA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5BTExPV0VEXVxyXG4gICAgICAgICAgICAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5NQVRFUklBTF9LRVkpKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gPElNYXRlcmlhbFByb2dyZXNzPnt9O1xyXG4gICAgICAgICAgICBkYXRhLnRpbWVzdGFtcCA9IHBhcnNlSW50KGxvY2FsU3RvcmFnZS5nZXRJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LlRJTUVTVEFNUF9LRVkpKTtcclxuICAgICAgICAgICAgZGF0YS5tYXRlcmlhbElkID0gcGFyc2VJbnQobG9jYWxTdG9yYWdlLmdldEl0ZW0oVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuTUFURVJJQUxfS0VZKS5zcGxpdChcIl9cIilbMF0pO1xyXG4gICAgICAgICAgICBsZXQgc2VjdGlvbk9mTWF0ZXJpYWxJZCA9IHBhcnNlSW50KGxvY2FsU3RvcmFnZS5nZXRJdGVtKFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LlNFQ1RJT05fS0VZKSk7XHJcbiAgICAgICAgICAgIGlmICghc2VjdGlvbk9mTWF0ZXJpYWxJZCB8fCBzZWN0aW9uT2ZNYXRlcmlhbElkID09PSBOYU4pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uT2ZNYXRlcmlhbElkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuc2VjdGlvbnNMaXN0LmZpbHRlcihzID0+IHMuc2VjdGlvbi5pZCA9PT0gc2VjdGlvbk9mTWF0ZXJpYWxJZClbMF0uc2VjdGlvbi50eXBlS2V5KSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSU5GT1JNQVRJT05dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLnNhdmVTZWN0aW9uUHJvZ3Jlc3NFeHRlbnNpb25XaXRoTWF0ZXJpYWxQcm9ncmVzcyh0aGlzLmNvdXJzZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk9mTWF0ZXJpYWxJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGRhdGEpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5zZXRTZWN0aW9uU3RhdHVzT3BlbmVkSWZOZWVkZWRJbnRlcm5hbChzZWN0aW9uT2ZNYXRlcmlhbElkLCB0aGlzLm1vZHVsZUlkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmNhdXNlLnR5cGUuZXF1YWxzKFwiU3RhbGVPYmplY3RTdGF0ZUV4Y2VwdGlvblwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT2JqZWN0IHdhcyBzdGFsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvU2VudHJ5KGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2Uuc2F2ZVNlY3Rpb25Qcm9ncmVzc0V4dGVuc2lvbldpdGhNYXRlcmlhbFByb2dyZXNzKHRoaXMuY291cnNlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3NJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk9mTWF0ZXJpYWxJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuc2V0U2VjdGlvblN0YXR1c09wZW5lZElmTmVlZGVkSW50ZXJuYWwoc2VjdGlvbk9mTWF0ZXJpYWxJZCwgdGhpcy5tb2R1bGVJZCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlVG9TZW50cnkoZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNlbmRNZXNzYWdlVG9TZW50cnkobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgKDxhbnk+d2luZG93KS5TZW50cnkuY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVW5hYmxlIHRvIHNlbmQgU2VudHJ5IG1lc3NhZ2UuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlU2Nvcm1Qb3B1cCgpOiB2b2lkIHtcclxuICAgICAgICAkKCcuc2FuZGJveC1wb3B1cCcpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgdGhpcy5sZWF2ZUZ1bGxTY3JlZW5Nb2RlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWR9IGZyb20gXCIuL21vZGVscy9JU2VjdGlvbkluSGllcmFyY2h5XCI7XHJcbmltcG9ydCB7U2VjdGlvblByb2dyZXNzU3RhdHVzfSBmcm9tIFwiLi9tb2RlbHMvU2VjdGlvblByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7SUJ1bmRsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVcIjtcclxuaW1wb3J0IHtJQnVuZGxlRmlsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVGaWxlXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZU1hdGVyaWFsQ29udHJvbGxlcn0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmljaHRleHQvVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtSYW5kb21VdGlsc30gZnJvbSBcIi4uL3V0aWxzL1JhbmRvbVV0aWxzXCI7XHJcbmltcG9ydCB7SVNlY3Rpb259IGZyb20gXCIuL21vZGVscy9JU2VjdGlvblwiO1xyXG5pbXBvcnQge0lNb2R1bGV9IGZyb20gXCIuL21vZGVscy9JTW9kdWxlXCI7XHJcbmltcG9ydCB7U2VjdGlvblR5cGV9IGZyb20gXCIuL21vZGVscy9TZWN0aW9uVHlwZVwiO1xyXG5leHBvcnQgY2xhc3MgQ291cnNlRGV0YWlsc1V0aWxzIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGZpbmRBbGxDaGlsZGVzKGluZGV4OiBudW1iZXIsIGFsbFNlY3Rpb25zOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRbXSk6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdIHtcclxuICAgICAgICByZXR1cm4gYWxsU2VjdGlvbnMuZmlsdGVyKHNlYyA9PiBzZWMucGFyZW50SWQgPT09ICBhbGxTZWN0aW9uc1tpbmRleF0uaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlU2VjdGlvbkNvbXBsZXRpb25QZXJjZW50YWdlKGluZGV4OiBudW1iZXIsIGFsbFNlY3Rpb25zOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRbXSk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGNvbXBsZXRlZFN0YXR1c2VzID0gW1NlY3Rpb25Qcm9ncmVzc1N0YXR1c1tTZWN0aW9uUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSwgU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdXTtcclxuICAgICAgICBsZXQgY3VycmVudFNlY3Rpb24gPSBhbGxTZWN0aW9uc1tpbmRleF07XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuQ291bnQgPSAwO1xyXG4gICAgICAgIGxldCBjb21wbGV0ZWRDb3VudCA9IDA7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuQ29tcGxldGlvblBlcmNlbnRhZ2U6IG51bWJlciA9IDA7XHJcbiAgICAgICAgbGV0IGNoaWxkZXMgPSB0aGlzLmZpbmRBbGxDaGlsZGVzKGluZGV4LCBhbGxTZWN0aW9ucyk7XHJcbiAgICAgICAgaWYgKGNoaWxkZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBjaGlsZGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbkNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkU3RhdHVzZXMuaW5kZXhPZihjaGlsZC5zZWN0aW9uLnN0YXR1cykgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5Db21wbGV0aW9uUGVyY2VudGFnZSArPSB0aGlzLmNhbGN1bGF0ZVNlY3Rpb25Db21wbGV0aW9uUGVyY2VudGFnZShhbGxTZWN0aW9ucy5pbmRleE9mKGNoaWxkKSwgYWxsU2VjdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGlsZHJlbkNvdW50ID4gMCkge1xyXG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5jb21wbGV0aW9uUGVyY2VudGFnZSA9IE1hdGgucm91bmQoXHJcbiAgICAgICAgICAgICAgICAoY2hpbGRyZW5Db21wbGV0aW9uUGVyY2VudGFnZSAvIGNoaWxkcmVuQ291bnQpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZFN0YXR1c2VzLmluZGV4T2YoY3VycmVudFNlY3Rpb24uc2VjdGlvbi5zdGF0dXMpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5jb21wbGV0aW9uUGVyY2VudGFnZSA9IDEwMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLmNvbXBsZXRpb25QZXJjZW50YWdlID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50U2VjdGlvbi5jaGlsZHJlbkNvdW50ID0gY2hpbGRyZW5Db3VudDtcclxuICAgICAgICBjdXJyZW50U2VjdGlvbi5jb21wbGV0ZWRDaGlsZHJlbkNvdW50ID0gY29tcGxldGVkQ291bnQ7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWN0aW9uLmNvbXBsZXRpb25QZXJjZW50YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcG9zZVJpY2hUZXh0RnJvbUxvYWRBdFN0YXJ0QnVuZGxlcyhjb3Vyc2VCdW5kbGU6IElCdW5kbGUpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBpZiAoY291cnNlQnVuZGxlKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291cnNlQnVuZGxlLmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYnVuZGxlRmlsZTogSUJ1bmRsZUZpbGUgPSBjb3Vyc2VCdW5kbGUuZmlsZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVuZGxlRmlsZS5sb2FkQXRTdGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFZoc1NlbGVjdEVtYmVkZGVkQnVuZGxlTWF0ZXJpYWxDb250cm9sbGVyLkVNQkVEREVEX0JVTkRMRV9UQV9IVE1MKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpidW5kbGVJZFwiLCBSYW5kb21VdGlscy5nZW5lcmF0ZVJhbmRvbUlkKGJ1bmRsZUZpbGUua2V5ICsgXCJfX19cIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmJ1bmRsZUtleVwiLCBidW5kbGVGaWxlLmtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBmaW5kTmV4dFNlY3Rpb24oc2VsZWN0ZWRTZWN0aW9uOiBJU2VjdGlvbiwgc2VjdGlvbnNNYXA6IE1hcDxudW1iZXIsIElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdPiwgbW9kdWxlczogSU1vZHVsZVtdKTogSVNlY3Rpb24ge1xyXG4gICAgICAgIGxldCBuZXh0U2VjdGlvbiA9IHt9O1xyXG4gICAgICAgIGlmICghc2VsZWN0ZWRTZWN0aW9uIHx8ICFzZWxlY3RlZFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHRTZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY3VycmVudE1vZHVsZUlkID0gc2VsZWN0ZWRTZWN0aW9uLm1vZHVsZUlkO1xyXG4gICAgICAgIGxldCBsYXN0U2VjdGlvbkluTW9kdWxlSWQgPSAoc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgPyBzZWN0aW9uc01hcC5nZXQoY3VycmVudE1vZHVsZUlkKVtzZWN0aW9uc01hcC5nZXQoY3VycmVudE1vZHVsZUlkKS5sZW5ndGggLSAxXS5zZWN0aW9uLmlkXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBpZiAobGFzdFNlY3Rpb25Jbk1vZHVsZUlkID09IHNlbGVjdGVkU2VjdGlvbi5pZCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0TW9kdWxlSWQgPSBDb3Vyc2VEZXRhaWxzVXRpbHMuZmluZE5leHRNb2R1bGVJZChjdXJyZW50TW9kdWxlSWQsIG1vZHVsZXMpO1xyXG4gICAgICAgICAgICBpZiAobmV4dE1vZHVsZUlkID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25zTWFwLmdldChuZXh0TW9kdWxlSWQpWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFNlY3Rpb24gPSBzZWN0aW9uc01hcC5nZXQobmV4dE1vZHVsZUlkKVswXS5zZWN0aW9uLnR5cGVLZXkgIT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNMSURFX0RFQ0tdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VjdGlvbnNNYXAuZ2V0KG5leHRNb2R1bGVJZClbMF0uc2VjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChzZWN0aW9uc01hcC5nZXQobmV4dE1vZHVsZUlkKVsxXSA/IHNlY3Rpb25zTWFwLmdldChuZXh0TW9kdWxlSWQpWzFdLnNlY3Rpb24gOiB7fSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRTZWN0aW9uID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY3Rpb25zTWFwLmdldChjdXJyZW50TW9kdWxlSWQpLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSAoc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZCkubGVuZ3RoIC0gMSkgJiYgc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZClbaV0uc2VjdGlvbi5pZCA9PSBzZWxlY3RlZFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZClbaSArIDFdLnNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TTElERV9ERUNLXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBpIDw9IHNlY3Rpb25zTWFwLmdldChjdXJyZW50TW9kdWxlSWQpLmxlbmd0aCAtIDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZClbaSArIDJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkoc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZClbaSArIDJdLnNlY3Rpb24sIG5leHRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTZWN0aW9uID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkoc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZClbaSArIDFdLnNlY3Rpb24sIG5leHRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHRTZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZmluZFByZXZTZWN0aW9uKHNlbGVjdGVkU2VjdGlvbjogSVNlY3Rpb24sIHNlY3Rpb25zTWFwOiBNYXA8bnVtYmVyLCBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRbXT4sIG1vZHVsZXM6IElNb2R1bGVbXSk6IElTZWN0aW9uIHtcclxuICAgICAgICBsZXQgcHJldlNlY3Rpb24gPSB7fTtcclxuICAgICAgICBpZiAoIXNlbGVjdGVkU2VjdGlvbiB8fCAhc2VsZWN0ZWRTZWN0aW9uLmlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmV2U2VjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGN1cnJlbnRNb2R1bGVJZCA9IHNlbGVjdGVkU2VjdGlvbi5tb2R1bGVJZDtcclxuICAgICAgICBsZXQgZmlyc3RTZWN0aW9uSW5Nb2R1bGVJZCA9IChzZWN0aW9uc01hcC5nZXQoY3VycmVudE1vZHVsZUlkKVswXSlcclxuICAgICAgICAgICAgPyBzZWN0aW9uc01hcC5nZXQoY3VycmVudE1vZHVsZUlkKVswXS5zZWN0aW9uLmlkXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBpZiAoZmlyc3RTZWN0aW9uSW5Nb2R1bGVJZCA9PSBzZWxlY3RlZFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJldk1vZHVsZUlkID0gQ291cnNlRGV0YWlsc1V0aWxzLmZpbmRQcmV2TW9kdWxlSWQoY3VycmVudE1vZHVsZUlkLCBtb2R1bGVzKTtcclxuICAgICAgICAgICAgY29uc3QgcHJldk1vZHVsZVNlY3Rpb25zID0gc2VjdGlvbnNNYXAuZ2V0KHByZXZNb2R1bGVJZCk7XHJcbiAgICAgICAgICAgIGlmIChwcmV2TW9kdWxlSWQgPiAwICYmIHByZXZNb2R1bGVTZWN0aW9ucyAmJiBwcmV2TW9kdWxlU2VjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHByZXZNb2R1bGVTZWN0aW9uc1twcmV2TW9kdWxlU2VjdGlvbnMubGVuZ3RoIC0gMV0uc2VjdGlvbiwgcHJldlNlY3Rpb24pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcHJldlNlY3Rpb24gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZCkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChpICE9IDAgJiYgc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZClbaV0uc2VjdGlvbi5pZCA9PSBzZWxlY3RlZFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZClbaSAtIDFdLnNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TTElERV9ERUNLXSAmJiBpID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkoc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZClbaSAtIDJdLnNlY3Rpb24sIHByZXZTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkoc2VjdGlvbnNNYXAuZ2V0KGN1cnJlbnRNb2R1bGVJZClbaSAtIDFdLnNlY3Rpb24sIHByZXZTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByZXZTZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZmluZE5leHRNb2R1bGVJZChjdXJyZW50TW9kdWxlSWQ6IG51bWJlciwgbW9kdWxlczogSU1vZHVsZVtdKTogbnVtYmVyIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKG1vZHVsZXNbaV0uaWQgPT0gY3VycmVudE1vZHVsZUlkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSAobW9kdWxlcy5sZW5ndGggLSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVzW2kgKyAxXS5pZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBmaW5kUHJldk1vZHVsZUlkKGN1cnJlbnRNb2R1bGVJZDogbnVtYmVyLCBtb2R1bGVzOiBJTW9kdWxlW10pOiBudW1iZXIge1xyXG4gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgaWYgKG1vZHVsZXNbaV0uaWQgPT0gY3VycmVudE1vZHVsZUlkKSB7XHJcbiAgICAgICAgICAgICAgIGlmIChpICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVzW2kgLSAxXS5pZDtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIH1cclxuICAgICAgIH1cclxuICAgICAgIHJldHVybiAtMTtcclxuICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZmluZE1vZHVsZUJ5SWQobW9kdWxlSWQ6IG51bWJlciwgbW9kdWxlczogSU1vZHVsZVtdKTogSU1vZHVsZSB7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlOiBJTW9kdWxlID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChtb2R1bGVzW2ldLmlkID09IG1vZHVsZUlkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbW9kdWxlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZmluZFNlY3Rpb24oXHJcbiAgICAgICAgc2VjdGlvbnNNYXA6IE1hcDxudW1iZXIsIElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdPiwgbW9kdWxlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXJcclxuICAgICk6IElTZWN0aW9uIHtcclxuICAgICAgICBsZXQgc2VjdGlvbnMgPSBzZWN0aW9uc01hcC5nZXQobW9kdWxlSWQpLmZpbHRlcihzID0+IHMuc2VjdGlvbi5pZCA9PSBzZWN0aW9uSWQpO1xyXG4gICAgICAgIGlmIChzZWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWN0aW9uc1swXS5zZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGZpbmRTZWN0aW9uQnlJZChzZWN0aW9uczogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkW10sIHNlY3Rpb25JZDogbnVtYmVyKTogSVNlY3Rpb24ge1xyXG4gICAgICAgIGxldCBzZWN0aW9uc0ZvdW5kID0gc2VjdGlvbnMuZmlsdGVyKHMgPT4gcy5zZWN0aW9uLmlkID09IHNlY3Rpb25JZCk7XHJcbiAgICAgICAgaWYgKHNlY3Rpb25zRm91bmQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VjdGlvbnNGb3VuZFswXS5zZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGZpbmRTZWN0aW9uRXh0ZW5kZWRCeUlkKFxyXG4gICAgICAgIHNlY3Rpb25zOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRbXSwgc2VjdGlvbklkOiBudW1iZXJcclxuICAgICk6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCB7XHJcbiAgICAgICAgbGV0IHNlY3Rpb25zRm91bmQgPSBzZWN0aW9ucy5maWx0ZXIocyA9PiBzLnNlY3Rpb24uaWQgPT0gc2VjdGlvbklkKTtcclxuICAgICAgICBpZiAoc2VjdGlvbnNGb3VuZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWN0aW9uc0ZvdW5kWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGZpbmRQYXJlbnRPclNlY3Rpb24oc2VsZWN0ZWRTZWN0aW9uOiBJU2VjdGlvbiwgc2VjdGlvbnNMaXN0OiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRbXSkge1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RlZFNlY3Rpb24gJiYgc2VsZWN0ZWRTZWN0aW9uLnBhcmVudElkXHJcbiAgICAgICAgICAgID8gQ291cnNlRGV0YWlsc1V0aWxzLmZpbmRTZWN0aW9uQnlJZChzZWN0aW9uc0xpc3QsIHNlbGVjdGVkU2VjdGlvbi5wYXJlbnRJZClcclxuICAgICAgICAgICAgOiBzZWxlY3RlZFNlY3Rpb247XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4vQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi9Qcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtNb21lbnR9IGZyb20gXCIuLi91dGlscy9Nb21lbnRcIjtcclxuaW1wb3J0IHtDb3Vyc2VQcm9ncmVzc1N0YXR1c30gZnJvbSBcIi4vbW9kZWxzL0NvdXJzZVByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7SUNvdXJzZVByb2dyZXNzfSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVByb2dyZXNzXCI7XHJcbmltcG9ydCBJUVNlcnZpY2UgPSBhbmd1bGFyLklRU2VydmljZTtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ291cnNlRGlzY3Vzc2lvbkNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjb3Vyc2VzLkNvdXJzZURpc2N1c3Npb25Db250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBNT0RVTEVTX0ZJTFRFUl9VUkw6IHN0cmluZyA9IFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9tb2R1bGVzXCI7XHJcblxyXG4gICAgcHVibGljIGNvdXJzZUlkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdGhyZWFkSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGN1cnJlbnRVc2VyOiBJVXNlckluZm8gPSB7fTtcclxuICAgIHB1YmxpYyBjb3Vyc2VQcm9ncmVzczogSUNvdXJzZVByb2dyZXNzO1xyXG4gICAgcHVibGljIGNvdXJzZVN0YXJ0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlID0ge307XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBpc0NvdXJzZUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGFuY2hvclNjcm9sbFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFByb2dyZXNzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGFuY2hvclNjcm9sbDogYW5ndWxhci5JQW5jaG9yU2Nyb2xsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IElRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcikge1xyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSAkcm91dGVQYXJhbXNbQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBjb3Vyc2VJZFN0ciA9IFN0cmluZyh0aGlzLmNvdXJzZUlkKTtcclxuICAgICAgICB0aGlzLnRocmVhZElkID0gJHJvdXRlUGFyYW1zW0NvdXJzZXNSb3V0ZXIuVEhSRUFEX0lEX1BBUkFNXSAhPSBudWxsXHJcbiAgICAgICAgICAgID8gTnVtYmVyKCRyb3V0ZVBhcmFtc1tDb3Vyc2VzUm91dGVyLlRIUkVBRF9JRF9QQVJBTV0pXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9ucyhjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMudmlldylcclxuICAgICAgICAgICAgLmRlbWFuZENvdXJzZVBlcm1pc3Npb25zKGNvdXJzZUlkU3RyLCBjb3Vyc2VQZXJtaXNzaW9ucyA9PiBjb3Vyc2VQZXJtaXNzaW9ucy5hY2Nlc3NUb0Rpc2N1c3Npb25zKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weSh1c2VyLCB0aGlzLmN1cnJlbnRVc2VyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGxvYWRDb3Vyc2VQcm9taXNlcyA9IFtcclxuICAgICAgICAgICAgdGhpcy5sb2FkU3lzdGVtUGVybWlzc2lvbnMoKSxcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ291cnNlKCksXHJcbiAgICAgICAgICAgIHRoaXMubG9hZENvdXJzZVByb2dyZXNzKClcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLiRxLmFsbChsb2FkQ291cnNlUHJvbWlzZXMpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb3Vyc2UucGVybWlzc2lvbnMuYXR0ZW5kZWVNYW5hZ2VtZW50ICYmICF0aGlzLmNvdXJzZVN0YXJ0ZWQgJiYgIXRoaXMuY291cnNlLnBlcm1pc3Npb25zLnZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5mb3J3YXJkVG9BY2Nlc3NEZW5pZWQoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvdXJzZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFN5c3RlbVBlcm1pc3Npb25zKCk6IGFuZ3VsYXIuSVByb21pc2U8SVN5c3RlbVBlcm1pc3Npb25zPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFN5c3RlbVBlcm1pc3Npb25zKClcclxuICAgICAgICAgICAgLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IGFuZ3VsYXIuY29weShzeXN0ZW1QZXJtaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlKCk6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0KHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZSA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnNldENvdXJzZVBhZ2VIZWFkZXJCcmVhZGNydW1icyh0aGlzLmNvdXJzZUlkLCB0aGlzLmNvdXJzZSwgdGhpcy5jb3Vyc2VzUm91dGVyLCBcIkRpc2N1c3Npb25cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UuZW5kRGF0ZVRleHQgPSBNb21lbnQuaXNWYWxpZERhdGUocmVzdWx0LmVuZERhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2Uuc3RhcnREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShyZXN1bHQuc3RhcnREYXRlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlUHJvZ3Jlc3MoKTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlUHJvZ3Jlc3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc1NlcnZpY2UuZ2V0Q291cnNlUHJvZ3Jlc3ModGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3MgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU3RhcnRlZCA9IChyZXN1bHQuc3RhdHVzICYmIHJlc3VsdC5zdGF0dXMgIT09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLk5PVF9TVEFSVEVEXSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VQcm9ncmVzcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QnVuZGxlU2VydmljZX0gZnJvbSBcIi4uL2J1bmRsZXMvQnVuZGxlU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Vyc2VFeHBvcnRJbXBvcnRFZGl0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvdXJzZXMuQ291cnNlRXhwb3J0SW1wb3J0RWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2U6IElDb3Vyc2U7XHJcbiAgICBwdWJsaWMgYnVuZGxlOiBJQnVuZGxlO1xyXG4gICAgcHVibGljIGFyY2hpdmU6IEZpbGU7XHJcbiAgICBwdWJsaWMgc2Nvcm1BcmNoaXZlOiBGaWxlO1xyXG4gICAgcHVibGljIGltcG9ydE1vZGU6IHN0cmluZyA9IFwidW5pdmVyc2FsX21vZGVcIjtcclxuICAgIHB1YmxpYyBzY29ybVZlcnNpb246IHN0cmluZyA9IFwiMjAwNFwiO1xyXG4gICAgcHVibGljIHNjb3JtT25lT3JnYW5pemF0aW9uTW9kZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIGFyY2hpdmVVcGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaXNDb3Vyc2VMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdW5kbGVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidW5kbGVTZXJ2aWNlOiBCdW5kbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJZCA9ICRyb3V0ZVBhcmFtc1tDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IGhhc0NvdXJzZUlkOiBib29sZWFuID0gdGhpcy5jb3Vyc2VJZCAhPSBudWxsO1xyXG4gICAgICAgIGxldCBjb3Vyc2VJZFN0cjogc3RyaW5nID0gU3RyaW5nKHRoaXMuY291cnNlSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9uc0lmKGhhc0NvdXJzZUlkLCBjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMuZWRpdCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZENvdXJzZSh0aGlzLmNvdXJzZUlkKS50aGVuKGNvdXJzZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb3Vyc2UuYnVuZGxlSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEJ1bmRsZShjb3Vyc2UuYnVuZGxlSWQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idW5kbGUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlQnVuZGxlQXJjaGl2ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuYXJjaGl2ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmaWxlRXh0ZW5zaW9uOiBSZWdFeHBNYXRjaEFycmF5ID0gdGhpcy5hcmNoaXZlLm5hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvXFwuKFswLTlhLXpdKykoPz1bPyNdKXwoXFwuKSg/OltcXHddKykkLyk7XHJcbiAgICAgICAgaWYgKGZpbGVFeHRlbnNpb25bMF0gPT0gbnVsbCB8fCBmaWxlRXh0ZW5zaW9uWzBdLnRvTG93ZXJDYXNlKCkgIT0gXCIuemlwXCIpIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGUgc3BlY2lmaWVkIGFyY2hpdmUgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHkgcHB0eCBvciB6aXAgZm9ybWF0IGlzIHN1cHBvcnRlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hcmNoaXZlVXBsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuYnVuZGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5jcmVhdGVDb3Vyc2VCdW5kbGUodGhpcy5jb3Vyc2UuaWQsIHRoaXMuY291cnNlLnZlcnNpb24pLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlID0gcmVzdWx0W1wiYnVuZGxlXCJdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UuYnVuZGxlSWQgPSB0aGlzLmJ1bmRsZS5pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlLnZlcnNpb24gPSByZXN1bHRbXCJjb3Vyc2VcIl0udmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnVuZGxlRnJvbUFyY2hpdmUoKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnN0b3JhZ2Uubm90LmF2YWlsYWJsZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgYXJjaGl2ZSBpbXBvcnRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFyY2hpdmVVcGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVCdW5kbGVGcm9tQXJjaGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVNjb3JtQXJjaGl2ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2Nvcm1BcmNoaXZlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZpbGVFeHRlbnNpb246IFJlZ0V4cE1hdGNoQXJyYXkgPSB0aGlzLnNjb3JtQXJjaGl2ZS5uYW1lLm1hdGNoKC9cXC4oWzAtOWEtel0rKSg/PVs/I10pfChcXC4pKD86W1xcd10rKSQvKTtcclxuICAgICAgICBpZiAoZmlsZUV4dGVuc2lvblswXSA9PSBudWxsIHx8IGZpbGVFeHRlbnNpb25bMF0udG9Mb3dlckNhc2UoKSAhPSBcIi56aXBcIikge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoZSBzcGVjaWZpZWQgYXJjaGl2ZSBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4gT25seSBwcHR4IG9yIHppcCBmb3JtYXQgaXMgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFyY2hpdmVVcGxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ291cnNlRnJvbVNjb3JtQXJjaGl2ZSh0aGlzLmltcG9ydE1vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEJ1bmRsZShidW5kbGVJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQnVuZGxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVuZGxlU2VydmljZS5nZXRCdW5kbGUoYnVuZGxlSWQsIFwiTk9ORVwiKS50aGVuKGJ1bmRsZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idW5kbGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElDb3Vyc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldChjb3Vyc2VJZCkudGhlbihjb3Vyc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZSA9IGFuZ3VsYXIuY29weShjb3Vyc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2Uuc2V0Q291cnNlUGFnZUhlYWRlckJyZWFkY3J1bWJzKHRoaXMuY291cnNlSWQsIHRoaXMuY291cnNlLCB0aGlzLmNvdXJzZXNSb3V0ZXIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUJ1bmRsZUZyb21BcmNoaXZlKCkge1xyXG4gICAgICAgIHRoaXMuJHVwbG9hZGVyLnVwbG9hZCh7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwuYmFzZShcIi9hcGkvYnVuZGxlcy86YnVuZGxlSWQvYXJjaGl2ZT9idW5kbGVWZXJzaW9uPTpidW5kbGVWZXJzaW9uXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6YnVuZGxlSWRcIiwgdGhpcy5idW5kbGUuaWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6YnVuZGxlVmVyc2lvblwiLCB0aGlzLmJ1bmRsZS52ZXJzaW9uKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgZmlsZTogdGhpcy5hcmNoaXZlXHJcbiAgICAgICAgfSkuc3VjY2VzcygoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgYXJjaGl2ZSB3YXMgc3VjY2Vzc2Z1bGx5IGltcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmJ1bmRsZVVwZGF0ZVVybCh0aGlzLmNvdXJzZUlkKSk7XHJcbiAgICAgICAgfSkuZXJyb3IoKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBhcmNoaXZlIGltcG9ydFwiKTtcclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hcmNoaXZlVXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDb3Vyc2VGcm9tU2Nvcm1BcmNoaXZlKG1vZGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuJHVwbG9hZGVyLnVwbG9hZCh7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvc2Nvcm0vOmNvdXJzZUltcG9ydE1vZGU/Y291cnNlVmVyc2lvbj06Y291cnNlVmVyc2lvblwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIHRoaXMuY291cnNlLmlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUltcG9ydE1vZGVcIiwgbW9kZSlcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VWZXJzaW9uXCIsIHRoaXMuY291cnNlLnZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICBmaWxlOiB0aGlzLnNjb3JtQXJjaGl2ZVxyXG4gICAgICAgIH0pLnN1Y2Nlc3MoKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIGFyY2hpdmUgd2FzIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5zdHJ1Y3R1cmVVcGRhdGVVcmwodGhpcy5jb3Vyc2VJZCkpO1xyXG4gICAgICAgIH0pLmVycm9yKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IgPT0gXCJlcnJvci5zdG9yYWdlLm5vdC5hdmFpbGFibGVcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5lcnJvciA9PSBcImVycm9yLnNjb3JtLm1hbmlmZXN0Lm5vdC5mb3VuZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlNDT1JNIG1hbmlmZXN0IG5vdCBmb3VuZC4gQ2hlY2sgdGhlIGFyY2hpdmUgc3RydWN0dXJlLlwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5lcnJvciA9PSBcImVycm9yLnNjb3JtLm1ldGFkYXRhLm5vdC5mb3VuZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIk1hbmlmZXN0IG1ldGFkYXRhIG5vdCBmb3VuZC4gQ2hlY2sgdGhlIG1hbmlmZXN0IG9mIHRoZSBjb3Vyc2UuXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmVycm9yID09IFwiZXJyb3Iuc2Nvcm0uc2NoZW1hLm5vdC5mb3VuZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIk1hbmlmZXN0IHNjaGVtYSBub3QgZm91bmQuIENoZWNrIHRoZSBtYW5pZmVzdCBvZiB0aGUgY291cnNlLlwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5lcnJvciA9PSBcImVycm9yLnNjb3JtLnNjaGVtYS52ZXJzaW9uLm5vdC5mb3VuZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIk1hbmlmZXN0IHNjaGVtYSB2ZXJzaW9uIG5vdCBmb3VuZC4gQ2hlY2sgdGhlIG1hbmlmZXN0IG9mIHRoZSBjb3Vyc2UuXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmVycm9yID09IFwiZXJyb3Iuc2Nvcm0uc2NoZW1hLm5vdC5zdXBwb3J0ZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJNYW5pZmVzdCBzY2hlbWEgbm90IHN1cHBvcnRlZC4gVHJ5IHRvIGltcG9ydCBhbm90aGVyIGNvdXJzZS5cIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZXJyb3IgPT0gXCJlcnJvci5zY29ybS5zY2hlbWEudmVyc2lvbi5ub3Quc3VwcG9ydGVkXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTWFuaWZlc3Qgc2NoZW1hIHZlcnNpb24gbm90IHN1cHBvcnRlZC4gVHJ5IHRvIGltcG9ydCBhbm90aGVyIGNvdXJzZS5cIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZXJyb3IgPT0gXCJlcnJvci5zY29ybS5tYW5pZmVzdC5kZXNlcmlhbGl6YXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJFcnJvciBkdXJpbmcgZGVzZXJpYWxpemF0aW9uIG9mIHRoZSBtYW5pZmVzdC5cIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBhcmNoaXZlIGltcG9ydFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFyY2hpdmVVcGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRvd25sb2FkQnVuZGxlQXJjaGl2ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5idW5kbGUuaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmRvd25sb2FkQnVuZGxlQXJjaGl2ZVRva2VuKHRoaXMuYnVuZGxlLmlkKS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG9rZW46IHN0cmluZyA9IGRhdGFbXCJ0b2tlblwiXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5vcGVuKHRoaXMudXJsLmJhc2UoXCJhcGkvYnVuZGxlcy9kb3dubG9hZC86dG9rZW5cIikucGFyYW0oXCI6dG9rZW5cIiwgdG9rZW4pLnNlcnZpY2UoKSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG93bmxvYWRDb3Vyc2VTY29ybUFyY2hpdmUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmRvd25sb2FkQ291cnNlU2Nvcm1BcmNoaXZlVG9rZW4odGhpcy5jb3Vyc2VJZCwgdGhpcy5zY29ybVZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjb3JtT25lT3JnYW5pemF0aW9uTW9kZSA/IFwiT05FX09SR0FOSVpBVElPTlwiIDogXCJNQU5ZX09SR0FOSVpBVElPTlNcIikudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRva2VuOnN0cmluZyA9IGRhdGFbXCJ0b2tlblwiXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5vcGVuKHRoaXMudXJsLmJhc2UoXCJhcGkvY291cnNlcy9kb3dubG9hZC86dG9rZW5cIikucGFyYW0oXCI6dG9rZW5cIiwgdG9rZW4pLnNlcnZpY2UoKSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4vQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJUmV3YXJkfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL21vZGVscy9JUmV3YXJkXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUh0dHBTZXJ2aWNlfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQge0lCYWRnZX0gZnJvbSBcIi4uL2dhbWlmaWNhdGlvbi9tb2RlbHMvSUJhZGdlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtHYW1lTGVhcm5pbmdPYmplY3RBY3Rpb25TZXJ2aWNlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL0dhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL1NlY3VyZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7UmV3YXJkQWN0aW9uVHlwZX0gZnJvbSBcIi4uL2dhbWlmaWNhdGlvbi9tb2RlbHMvUmV3YXJkQWN0aW9uVHlwZVwiO1xyXG5pbXBvcnQge0JhZGdlc1NlcnZpY2V9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vQmFkZ2VzU2VydmljZVwiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuLi9jb21wb25lbnRzL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtJTGV2ZWx9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vbW9kZWxzL0lMZXZlbFwiO1xyXG5pbXBvcnQge1JpY2hUZXh0RWRpdG9yQ29udHJvbGxlcn0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmljaHRleHQvUmljaFRleHRFZGl0b3JEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtJQWN0aW9uQmFkZ2V9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vbW9kZWxzL0lBY3Rpb25CYWRnZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZUdhbWlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5Db3Vyc2VHYW1pZmljYXRpb25EZXRhaWxzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGNvdXJzZTogSUNvdXJzZTtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcjogSVVzZXJJbmZvO1xyXG4gICAgcHVibGljIHJld2FyZHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SVJld2FyZD47XHJcbiAgICBwdWJsaWMgYmFkZ2VzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElCYWRnZT47XHJcbiAgICBwdWJsaWMgbmV3UmV3YXJkOiBJUmV3YXJkID0ge307XHJcbiAgICBwdWJsaWMgcmV3YXJkVG9FZGl0OiBJUmV3YXJkID0ge307XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRCYWRnZTogSUJhZGdlO1xyXG4gICAgcHVibGljIHNlbGVjdGVkQmFkZ2VJbWFnZVVybDogc3RyaW5nO1xyXG4gICAgcHVibGljIHJld2FyZFR5cGVzID0gWydCYWRnZScvKiwgJ1BvaW50cycqL107XHJcbiAgICBwdWJsaWMgcmFkaW9SZXN1bHQgPSAnZGVmYXVsdCc7XHJcbiAgICBwdWJsaWMgaXNCYWRnZVRhYmxlVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGVkaXRlZFJld2FyZFR5cGVEcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRlZmF1bHRQb2ludHNTdWJqZWN0ID0gJ1lvdSB3ZXJlIGF3YXJkZWQgcG9pbnRzJztcclxuICAgIHB1YmxpYyBkZWZhdWx0UG9pbnRzTWVzc2FnZSA9ICdEZWFyIHt1c2VyfSxcXG5Db25ncmF0dWxhdGlvbnMsIHlvdSB3ZXJlIGF3YXJkZWQge251bWJlciBvZiBwb2ludHN9IHBvaW50KHMpISc7XHJcbiAgICBwdWJsaWMgZXhjbHVkZWRCYWRnZXM6IEFycmF5PG51bWJlcj4gPSBbMTAxXTtcclxuICAgIHB1YmxpYyBiYWRnZUlkczogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgcHVibGljIHRvb2xiYXIgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQmFkZ2VzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEdhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2UuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBJSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFkZ2VzU2VydmljZTogQmFkZ2VzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZ2FtZUxlYXJuaW5nT2JqZWN0QWN0aW9uU2VydmljZTogR2FtZUxlYXJuaW5nT2JqZWN0QWN0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSByb3V0ZVBhcmFtc1tDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IGNvdXJzZUlkU3RyID0gU3RyaW5nKHRoaXMuY291cnNlSWQpO1xyXG4gICAgICAgIHRoaXMucmV3YXJkc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElSZXdhcmQ+KHRoaXMuJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvY291cnNlcy8ke3RoaXMuY291cnNlSWR9L2FjdGlvblBhZ2VgKSkpO1xyXG4gICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUJhZGdlPih0aGlzLiRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL2JhZGdlcy9nYW1lQWN0aW9uc2ApKSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZENvdXJzZVBlcm1pc3Npb25zSWYoISF0aGlzLmNvdXJzZUlkLCBjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMuZWRpdCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgIC50aGVuKHUgPT4gdGhpcy5jdXJyZW50VXNlciA9IHUpO1xyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0KHRoaXMuY291cnNlSWQpLnRoZW4oY291cnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBjb3Vyc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZXRDb3Vyc2VQYWdlSGVhZGVyQnJlYWRjcnVtYnModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2UsIHRoaXMuY291cnNlc1JvdXRlcik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5maWx0ZXIuYnVzaW5lc3NVbml0SWQgPSBjb3Vyc2UuYnVzaW5lc3NVbml0SWQ7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLnBhZ2VTaXplID0gNTtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkVG9Nb2RlbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5yYWRpb1Jlc3VsdCA9PT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmV3YXJkLnNob3dNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmV3YXJkLnNob3dEZWZhdWx0TWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYWRpb1Jlc3VsdCA9PT0gJ2N1c3RvbScpIHtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXdhcmQuc2hvd01lc3NhZ2UgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Jld2FyZC5zaG93RGVmYXVsdE1lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Jld2FyZC5zaG93TWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Jld2FyZC5zaG93RGVmYXVsdE1lc3NhZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkVG9FZGl0TW9kZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmFkaW9SZXN1bHQgPT09ICdub25lJykge1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5zaG93TWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5zaG93RGVmYXVsdE1lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmFkaW9SZXN1bHQgPT09ICdjdXN0b20nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0LnNob3dNZXNzYWdlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQuc2hvd0RlZmF1bHRNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQuc2hvd01lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQuc2hvd0RlZmF1bHRNZXNzYWdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRlbXBsYXRlRm9ySW5jbHVkZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVybC50ZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJc0FjdGl2ZUdyaWRTdHlsZShpc0FjdGl2ZTogYm9vbGVhbik6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWN0aXZlXHJcbiAgICAgICAgICAgID8ge31cclxuICAgICAgICAgICAgOiB7XCJjb2xvclwiOiBcIiM5OTk5OTlcIn07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnZlcnRJc0FjdGl2ZShpc0FjdGl2ZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWN0aXZlICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGlzQWN0aXZlID8gXCJZZXNcIiA6IFwiTm9cIlxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkQmFkZ2UoYmFkZ2U6IElCYWRnZSwgaXNFZGl0OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoaXNFZGl0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0LnJld2FyZElkID0gYmFkZ2UuaWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaXNCYWRnZVRhYmxlVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAkKCcjY29sbGFwc2VTZWxlY3RCYWRnZUVkaXQnKS5jb2xsYXBzZSgnaGlkZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmV3YXJkLnJld2FyZElkID0gYmFkZ2UuaWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaXNCYWRnZVRhYmxlVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAkKCcjY29sbGFwc2VTZWxlY3RCYWRnZScpLmNvbGxhcHNlKCdoaWRlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQmFkZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZUlkcyA9IHRoaXMuYmFkZ2VJZHMuZmlsdGVyKGlkID0+IHRoaXMuc2VsZWN0ZWRCYWRnZS5pZCAhPT0gaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJhZGdlSWRzLnB1c2goYmFkZ2UuaWQpO1xyXG4gICAgICAgIHRoaXMubG9hZEJhZGdlcyh0cnVlKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQmFkZ2UgPSBiYWRnZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQmFkZ2VJbWFnZVVybCA9IHRoaXMuZ2V0SW1hZ2VCYWRnZSh0aGlzLnNlbGVjdGVkQmFkZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQmFkZ2VzKGN1cnJlbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5maWx0ZXIuZXhjbHVkZWRCYWRnZXMgPSB0aGlzLmJhZGdlSWRzO1xyXG4gICAgICAgIGlmIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0NyZWF0ZU1vZGFsKCkge1xyXG4gICAgICAgICQoXCIjYWRkUmV3YXJkXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm5ld1Jld2FyZC5yZXdhcmRUeXBlID0gJ0JhZGdlJztcclxuICAgICAgICB0aGlzLmFkZFRvTW9kZWwoKTtcclxuICAgICAgICB0aGlzLmlzQmFkZ2VUYWJsZVZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICQoJyNjb2xsYXBzZVNlbGVjdEJhZGdlRWRpdCcpLmNvbGxhcHNlKCdoaWRlJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRHYW1lTGVhcm5pbmdPYmplY3RzQmFkZ2VJZHModGhpcy5jb3Vyc2UuaWQpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZUlkcyA9IHJlcztcclxuICAgICAgICAgICAgdGhpcy5leGNsdWRlZEJhZGdlcy5mb3JFYWNoKGIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZUlkcy5wdXNoKGIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQmFkZ2VzKGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0VkaXRNb2RhbChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5nYW1lTGVhcm5pbmdPYmplY3RBY3Rpb25TZXJ2aWNlLmdldFJld2FyZChpZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmV3YXJkVG9FZGl0LnJld2FyZFR5cGUgPT0gJ0JBREdFJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQucmV3YXJkVHlwZSA9ICdCYWRnZSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UuZ2V0QmFkZ2UodGhpcy5yZXdhcmRUb0VkaXQucmV3YXJkSWQpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQmFkZ2UgPSByZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJhZGdlSW1hZ2VVcmwgPSB0aGlzLmdldEltYWdlQmFkZ2UocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FZGl0TW9kYWwoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmV3YXJkVG9FZGl0LnJld2FyZFR5cGUgPT0gJ1BPSU5UUycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0LnJld2FyZFR5cGUgPSAnUG9pbnRzJztcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkVkaXRNb2RhbCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlbkVkaXRNb2RhbCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucmV3YXJkVG9FZGl0LnNob3dEZWZhdWx0TWVzc2FnZSAmJiAhdGhpcy5yZXdhcmRUb0VkaXQuc2hvd01lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5yYWRpb1Jlc3VsdCA9ICdub25lJztcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnJld2FyZFRvRWRpdC5zaG93RGVmYXVsdE1lc3NhZ2UgJiYgdGhpcy5yZXdhcmRUb0VkaXQuc2hvd01lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5yYWRpb1Jlc3VsdCA9ICdjdXN0b20nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFkaW9SZXN1bHQgPSAnZGVmYXVsdCdcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0JhZGdlVGFibGVWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgJCgnI2NvbGxhcHNlU2VsZWN0QmFkZ2VFZGl0JykuY29sbGFwc2UoJ2hpZGUnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldEdhbWVMZWFybmluZ09iamVjdHNCYWRnZUlkcyh0aGlzLmNvdXJzZS5pZCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlSWRzID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkQmFkZ2VzLmZvckVhY2goYiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlSWRzLnB1c2goYik7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRCYWRnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZUlkcy5wdXNoKHRoaXMuc2VsZWN0ZWRCYWRnZS5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZEJhZGdlcyhmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoXCIjZWRpdFJld2FyZFwiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlRWRpdE1vZGFsKCkge1xyXG4gICAgICAgICQoXCIjZWRpdFJld2FyZFwiKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJQb3B1cCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVCYWRnZSgpIHtcclxuICAgICAgICB0aGlzLmJhZGdlSWRzID0gdGhpcy5iYWRnZUlkcy5maWx0ZXIoaWQgPT4gaWQgIT09IHRoaXMuc2VsZWN0ZWRCYWRnZS5pZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCYWRnZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJhZGdlSW1hZ2VVcmwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV3UmV3YXJkLnJld2FyZElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5yZXdhcmRJZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQmFkZ2VUYWJsZVZpc2libGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0JhZGdlVGFibGVWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgJCgnI2NvbGxhcHNlU2VsZWN0QmFkZ2VFZGl0JykuY29sbGFwc2UoJ3Nob3cnKTtcclxuICAgICAgICAgICAgJCgnI2NvbGxhcHNlU2VsZWN0QmFkZ2UnKS5jb2xsYXBzZSgnc2hvdycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkQmFkZ2VzKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVSZXdhcmQoKSB7XHJcbiAgICAgICAgdGhpcy5uZXdSZXdhcmQub2JqZWN0VHlwZSA9IFNlY3VyZWRPYmplY3RUeXBlLkNPVVJTRS5uYW1lO1xyXG4gICAgICAgIHRoaXMubmV3UmV3YXJkLm9iamVjdElkID0gdGhpcy5jb3Vyc2VJZDtcclxuICAgICAgICB0aGlzLm5ld1Jld2FyZC5nYW1lSWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5ld1Jld2FyZC5zaG93RGVmYXVsdE1lc3NhZ2UgfHwgKCF0aGlzLm5ld1Jld2FyZC5zaG93RGVmYXVsdE1lc3NhZ2UgJiYgIXRoaXMubmV3UmV3YXJkLnNob3dNZXNzYWdlKSkge1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Jld2FyZC5jdXN0b21NZXNzYWdlU3ViamVjdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXdhcmQuY3VzdG9tTWVzc2FnZUJvZHkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5uZXdSZXdhcmQucmV3YXJkVHlwZSA9PSAnQmFkZ2UnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmV3YXJkLnBvaW50cyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmV3YXJkLmFjdGlvbiA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoUmV3YXJkQWN0aW9uVHlwZS5CQURHRV9DT1VSU0VfQ09NUExFVEVEKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoJzpiYWRnZU5hbWUnLCB0aGlzLnNlbGVjdGVkQmFkZ2UubmFtZSkuYnVpbGQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubmV3UmV3YXJkLnJld2FyZFR5cGUgPT0gJ1BvaW50cycpIHtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXdhcmQucmV3YXJkSWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGxldCBhY3Rpb24gPSB0aGlzLm5ld1Jld2FyZC5wb2ludHMgPT09IDEgPyBSZXdhcmRBY3Rpb25UeXBlLlBPSU5UX0NPVVJTRV9DT01QTEVURUQgOiBSZXdhcmRBY3Rpb25UeXBlLlBPSU5UU19DT1VSU0VfQ09NUExFVEVEO1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Jld2FyZC5hY3Rpb24gPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKGFjdGlvbilcclxuICAgICAgICAgICAgICAgIC53aXRoKCc6cG9pbnRzJywgdGhpcy5uZXdSZXdhcmQucG9pbnRzKS5idWlsZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nYW1lTGVhcm5pbmdPYmplY3RBY3Rpb25TZXJ2aWNlLmNyZWF0ZVJld2FyZCh0aGlzLm5ld1Jld2FyZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJSZXdhcmQgaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgICQoXCIjYWRkUmV3YXJkXCIpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcignQ3JlYXRpb24gZXJyb3InKTtcclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXdhcmQgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJhZGdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnJhZGlvUmVzdWx0ID0gJ2RlZmF1bHQnO1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5zb3J0aW5nID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdFJld2FyZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5yZXdhcmRUb0VkaXQuc2hvd0RlZmF1bHRNZXNzYWdlIHx8ICghdGhpcy5yZXdhcmRUb0VkaXQuc2hvd0RlZmF1bHRNZXNzYWdlICYmICF0aGlzLnJld2FyZFRvRWRpdC5zaG93TWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQuY3VzdG9tTWVzc2FnZVN1YmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0LmN1c3RvbU1lc3NhZ2VCb2R5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmV3YXJkVG9FZGl0LnJld2FyZFR5cGUgPT0gJ0JhZGdlJykge1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5wb2ludHMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5hY3Rpb24gPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFJld2FyZEFjdGlvblR5cGUuQkFER0VfQ09VUlNFX0NPTVBMRVRFRClcclxuICAgICAgICAgICAgICAgIC53aXRoKCc6YmFkZ2VOYW1lJywgdGhpcy5zZWxlY3RlZEJhZGdlLm5hbWUpLmJ1aWxkKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJld2FyZFRvRWRpdC5yZXdhcmRUeXBlID09ICdQb2ludHMnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0LnJld2FyZElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBsZXQgYWN0aW9uID0gdGhpcy5yZXdhcmRUb0VkaXQucG9pbnRzID09PSAxID8gUmV3YXJkQWN0aW9uVHlwZS5QT0lOVF9DT1VSU0VfQ09NUExFVEVEIDogUmV3YXJkQWN0aW9uVHlwZS5QT0lOVFNfQ09VUlNFX0NPTVBMRVRFRDtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQuYWN0aW9uID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShhY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAud2l0aCgnOnBvaW50cycsIHRoaXMucmV3YXJkVG9FZGl0LnBvaW50cykuYnVpbGQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZUxlYXJuaW5nT2JqZWN0QWN0aW9uU2VydmljZS5lZGl0UmV3YXJkKHRoaXMucmV3YXJkVG9FZGl0LmlkLCB0aGlzLnJld2FyZFRvRWRpdCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJNb2RpZmljYXRpb25zIG9mIHRoZSByZXdhcmQgaGF2ZSBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICAkKFwiI2VkaXRSZXdhcmRcIikubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKCdFZGl0aW5nIGVycm9yJyk7XHJcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0ID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCYWRnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5yYWRpb1Jlc3VsdCA9ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwuc29ydGluZyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBjbGVhclBvcHVwKCkge1xyXG4gICAgICAgIHRoaXMubmV3UmV3YXJkID0ge307XHJcbiAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQgPSB7fTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQmFkZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJhZGdlSW1hZ2VVcmwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5yYWRpb1Jlc3VsdCA9ICdkZWZhdWx0JztcclxuICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLnNvcnRpbmcgPSBbXTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlKGlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmdhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2UuYWN0aXZhdGUoaWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiUmV3YXJkIGhhcyBiZWVuIGFjdGl2YXRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXdhcmRUb0VkaXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVhY3RpdmF0ZShpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5nYW1lTGVhcm5pbmdPYmplY3RBY3Rpb25TZXJ2aWNlLmRlYWN0aXZhdGUoaWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiUmV3YXJkIGhhcyBiZWVuIGRlYWN0aXZhdGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJld2FyZFRvRWRpdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlKGlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIlRoaXMgcmV3YXJkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uIENvbnRpbnVlP1wiLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkRlbGV0ZSByZXdhcmRcIlxyXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2UucmVtb3ZlKGlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJSZXdhcmQgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJld2FyZFRvRWRpdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VFZGl0TW9kYWwoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRCYWRnZXModHJ1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmb3JtYXRUeXBlU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXN0cikgcmV0dXJuIHN0cjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyU3ltYm9scyhsZXZlbDogSUxldmVsKSB7XHJcbiAgICAgICAgaWYgKGxldmVsLnBvaW50cy50b1N0cmluZygpLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgbGV2ZWwucG9pbnRzID0gK2xldmVsLnBvaW50cy50b1N0cmluZygpLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobGV2ZWwubmV3Qm9udXNQb2ludHMudG9TdHJpbmcoKS5pbmRleE9mKCcuJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGxldmVsLm5ld0JvbnVzUG9pbnRzID0gK2xldmVsLm5ld0JvbnVzUG9pbnRzLnRvU3RyaW5nKCkucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEltYWdlQmFkZ2UoYmFkZ2UpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChiYWRnZSkge1xyXG4gICAgICAgICAgICBpZiAoIWJhZGdlLmZpbGVJZCAmJiBiYWRnZS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2VOYW1lID0gYmFkZ2UubmFtZS5zcGxpdCgnICcpLmpvaW4oJycpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChiYWRnZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU5hbWUgPSBcIkNvdXJzZUZpbmlzaGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU5hbWUgPSBcIkxlYXJuaW5nUGF0aEZpbmlzaGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB0aGVtZXMvZGVmYXVsdC9pbWcvYmFkZ2VzLyR7aW1hZ2VOYW1lfS5wbmdgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiYWRnZS5wcmV2aWV3VXJsID8gYmFkZ2UucHJldmlld1VybCA6ICcnO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VjdGlvbn0gZnJvbSBcIi4vbW9kZWxzL0lTZWN0aW9uXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0lJTFRTZXNzaW9ufSBmcm9tIFwiLi4vaWx0L21vZGVscy9JSUxUU2Vzc2lvblwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Z2V0TG9jYWxEZWZhdWx0VGltZXpvbmUsIFRpbWVab25lfSBmcm9tIFwiLi4vd2ViaW5hcnMvbW9kZWxzL1RpbWVab25lVHlwZVwiO1xyXG5pbXBvcnQge0NvdXJzZUlMVFNlcnZpY2V9IGZyb20gXCIuL0NvdXJzZUlMVFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJTFRSZXBlYXQsIElMVFJlcGVhdFR5cGV9IGZyb20gXCIuLi9pbHQvbW9kZWxzL0lMVFJlcGVhdFR5cGVcIjtcclxuaW1wb3J0IHtNb21lbnR9IGZyb20gXCIuLi91dGlscy9Nb21lbnRcIjtcclxuaW1wb3J0IElRU2VydmljZSA9IGFuZ3VsYXIuSVFTZXJ2aWNlO1xyXG5pbXBvcnQge0lJTFRTZXNzaW9uUGFydGljaXBhbnR9IGZyb20gXCIuLi9pbHQvbW9kZWxzL0lJTFRTZXNzaW9uUGFydGljaXBhbnRcIjtcclxuaW1wb3J0IHtJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzfSBmcm9tIFwiLi4vaWx0L21vZGVscy9JTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQgSVdpbmRvd1NlcnZpY2UgPSBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlO1xyXG5pbXBvcnQge1BhZ2VNb2RlfSBmcm9tIFwiLi4vUGFnZU1vZGVcIjtcclxuaW1wb3J0IHtJTG9jYXRpb259IGZyb20gXCIuLi9pbHQvbW9kZWxzL0lMb2NhdGlvblwiO1xyXG5pbXBvcnQge0lMVFNlbGVjdGFibGV9IGZyb20gXCIuLi9JTFRTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7SUNvdXJzZVByb2dyZXNzfSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVByb2dyZXNzXCI7XHJcbmltcG9ydCB7Q291cnNlUHJvZ3Jlc3NTdGF0dXN9IGZyb20gXCIuL21vZGVscy9Db3Vyc2VQcm9ncmVzc1N0YXR1c1wiO1xyXG5pbXBvcnQge1N0b3JhZ2VzLCBTdG9yYWdlV3JhcHBlcn0gZnJvbSBcIi4uL2luZnJhc3RydWN0dXJlL1N0b3JhZ2VcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuL1Byb2dyZXNzU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZUlMVENvbnRyb2xsZXIge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5Db3Vyc2VJTFRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIE1JTl9DQVBBQ0lUWTogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBNQVhfQ0FQQUNJVFk6IG51bWJlciA9IDEwMDAwMDtcclxuXHJcbiAgICBwdWJsaWMgSUxUX1NFU1NJT05TX0xJU1RfVklFV19NT0RFOiBzdHJpbmcgPSBcImlsdFNlc3Npb25zTGlzdFwiO1xyXG4gICAgcHVibGljIElMVF9TRVNTSU9OX01BTkFHRU1FTlRfVklFV19NT0RFOiBzdHJpbmcgPSBcImlsdFNlc3Npb25NYW5hZ2VtZW50XCI7XHJcblxyXG4gICAgcHVibGljIElMVF9TRVNTSU9OU19TQ0hFRFVMSU5HX01BWF9DT1VOVDogbnVtYmVyID0gMjYwO1xyXG5cclxuICAgIHB1YmxpYyB2aWV3TW9kZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcjogSVVzZXJJbmZvID0ge307XHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlID0ge307XHJcbiAgICBwdWJsaWMgaXNDb3Vyc2VMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaWx0U2VjdGlvbnM6IElTZWN0aW9uW107XHJcblxyXG4gICAgcHVibGljIHNlbGVjdGVkU2Vzc2lvbjogSUlMVFNlc3Npb247XHJcblxyXG4gICAgcHVibGljIGxvY2F0aW9uczogSUxvY2F0aW9uW107XHJcbiAgICBwdWJsaWMgbG9jYXRpb246IElMb2NhdGlvbjtcclxuXHJcbiAgICBwdWJsaWMgaWx0U2Vzc2lvbnNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUlMVFNlc3Npb24+O1xyXG4gICAgcHVibGljIHJlZ2lzdGVyZWRMZWFybmVyc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJSUxUU2Vzc2lvblBhcnRpY2lwYW50PjtcclxuICAgIHB1YmxpYyB3YWl0bGlzdGVkTGVhcm5lcnNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUlMVFNlc3Npb25QYXJ0aWNpcGFudD47XHJcbiAgICBwdWJsaWMgYXZhaWxhYmxlTGVhcm5lcnNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUxUU2VsZWN0YWJsZT47XHJcblxyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0Q3JlYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIG5ld1Nlc3Npb246IElJTFRTZXNzaW9uID0ge2luc3RydWN0b3JJZHM6IFtdfTtcclxuICAgIHB1YmxpYyBzZXNzaW9uU3RhcnREYXRlVGV4dDogc3RyaW5nO1xyXG4gICAgcHVibGljIHNlc3Npb25FbmREYXRlVGV4dDogc3RyaW5nO1xyXG4gICAgcHVibGljIHNlc3Npb25TdGFydFRpbWVUZXh0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2Vzc2lvbkVuZFRpbWVUZXh0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2Vzc2lvblJlcGVhdFR5cGU6IHN0cmluZztcclxuICAgIHByaXZhdGUgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBjb3Vyc2VQcm9ncmVzczogSUNvdXJzZVByb2dyZXNzO1xyXG4gICAgcHVibGljIGNvdXJzZVN0YXJ0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHRpbWVPZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgdGltZVpvbmUgPSBUaW1lWm9uZTtcclxuICAgIHB1YmxpYyBpbHRSZXBlYXQgPSBJTFRSZXBlYXQ7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU3RvcmFnZXMuU0VTU0lPTl9OQU1FLFxyXG4gICAgICAgIFByb2dyZXNzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZUlMVFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IElRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBJV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVdyYXBwZXI6IFN0b3JhZ2VXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlSUxUU2VydmljZTogQ291cnNlSUxUU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcikge1xyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSAkcm91dGVQYXJhbXNbQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBjb3Vyc2VJZFN0ciA9IFN0cmluZyh0aGlzLmNvdXJzZUlkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2VcclxuICAgICAgICAgICAgLmRlbWFuZENvdXJzZVBlcm1pc3Npb25zKGNvdXJzZUlkU3RyLCBjb3Vyc2VQZXJtaXNzaW9ucyA9PiBjb3Vyc2VQZXJtaXNzaW9ucy52aWV3T3RoZXJVc2Vyc1Byb2dyZXNzKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weSh1c2VyLCB0aGlzLmN1cnJlbnRVc2VyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRDb3Vyc2UoKTtcclxuICAgICAgICB0aGlzLnNob3dTZXNzaW9uc0xpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENvdXJzZVByb2dyZXNzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3NJZCA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VXcmFwcGVyLmdldDxudW1iZXI+KHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLkNPVVJTRV9QUk9HUkVTU19JRF9TVE9SQUdFX0tFWSk7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UuZ2V0Q291cnNlUHJvZ3Jlc3ModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ291cnNlUHJvZ3Jlc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ291cnNlUHJvZ3Jlc3MoY291cnNlUHJvZ3Jlc3M6IElDb3Vyc2VQcm9ncmVzcyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3MgPSBhbmd1bGFyLmNvcHkoY291cnNlUHJvZ3Jlc3MpO1xyXG4gICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3NJZCA9IHRoaXMuY291cnNlUHJvZ3Jlc3MuaWQ7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVdyYXBwZXIucHV0PG51bWJlcj4odGhpcy5wcm9ncmVzc1NlcnZpY2UuQ09VUlNFX1BST0dSRVNTX0lEX1NUT1JBR0VfS0VZLFxyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzSWQpO1xyXG4gICAgICAgIHRoaXMuY291cnNlU3RhcnRlZCA9IChjb3Vyc2VQcm9ncmVzcy5zdGF0dXMgJiYgY291cnNlUHJvZ3Jlc3Muc3RhdHVzICE9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5OT1RfU1RBUlRFRF0pO1xyXG4gICAgICAgIHRoaXMuaXNDb3Vyc2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvdXJzZSgpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0KHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZSA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb3Vyc2VQcm9ncmVzcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnNldENvdXJzZVBhZ2VIZWFkZXJCcmVhZGNydW1icyh0aGlzLmNvdXJzZUlkLCB0aGlzLmNvdXJzZSwgdGhpcy5jb3Vyc2VzUm91dGVyLCBcIklMVFwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VJTFRTZWN0aW9ucyh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbHRTZWN0aW9ucyA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dTZXNzaW9uQ3JlYXRpb25EaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdENyZWF0ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2UuYnVzaW5lc3NVbml0SWRcclxuICAgICAgICAgICAgPyB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQgPSB0aGlzLmNvdXJzZS5idXNpbmVzc1VuaXRJZFxyXG4gICAgICAgICAgICA6ICh0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHNcclxuICAgICAgICAgICAgPyB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQgPSB0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHNbMF1cclxuICAgICAgICAgICAgOiB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQgPSBudWxsKTtcclxuICAgICAgICB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuZ2V0TG9jYXRpb25zQnlCdXNpbmVzc1VuaXRJZCh0aGlzLmNvdXJzZUlkLCB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElMb2NhdGlvbltdKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSByZXN1bHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24uc2VjdGlvbklkID0gdGhpcy5pbHRTZWN0aW9ucyAmJiB0aGlzLmlsdFNlY3Rpb25zLmxlbmd0aCA+IDAgPyB0aGlzLmlsdFNlY3Rpb25zWzBdLmlkIDogbnVsbDtcclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24uZW5hYmxlV2FpdGxpc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi5hdXRvUmVnaXN0cmF0aW9uRnJvbVdhaXRsaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24uYXV0b1JlZ2lzdHJhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi5hbGxvd1NlbGZSZWdpc3RyYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi5hbGxvd1NlbGZSZXBvcnRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi50aW1lem9uZSA9IGdldExvY2FsRGVmYXVsdFRpbWV6b25lKCk7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVPZmZzZXQoKTtcclxuICAgICAgICB0aGlzLnNlc3Npb25TdGFydERhdGVUZXh0ID0gbW9tZW50KG1vbWVudCgpLnZhbHVlT2YoKSAtIHRoaXMudGltZU9mZnNldCArIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKS5mb3JtYXQoXCJNL0QvWVlZWVwiKTtcclxuICAgICAgICB0aGlzLnNlc3Npb25FbmREYXRlVGV4dCA9IG1vbWVudChtb21lbnQoKS52YWx1ZU9mKCkgLSB0aGlzLnRpbWVPZmZzZXQgKyBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkuZm9ybWF0KFwiTS9EL1lZWVlcIik7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uUmVwZWF0VHlwZSA9IElMVFJlcGVhdFR5cGVbSUxUUmVwZWF0VHlwZS5PTkNFXTtcclxuICAgICAgICB0aGlzLnNlc3Npb25TdGFydFRpbWVUZXh0ID0gbW9tZW50KChjdXJyZW50RGF0ZS5zZXRIb3VycyhjdXJyZW50RGF0ZS5nZXRIb3VycygpICsgMSksIGN1cnJlbnREYXRlLnNldE1pbnV0ZXMobnVsbCkpIC0gdGhpcy50aW1lT2Zmc2V0ICsgbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApLmZvcm1hdChcImhoOm1tIGFcIik7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uRW5kVGltZVRleHQgPSBtb21lbnQoKGN1cnJlbnREYXRlLnNldEhvdXJzKGN1cnJlbnREYXRlLmdldEhvdXJzKCkgKyAxKSkgLSB0aGlzLnRpbWVPZmZzZXQgKyBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkuZm9ybWF0KFwiaGg6bW0gYVwiKTtcclxuICAgICAgICB0aGlzLnNob3dDcmVhdGlvbkVkaXRpbmdNb2RhbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93U2Vzc2lvbkVkaXRpbmdEaWFsb2coc2Vzc2lvbklkPzogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uUmVwZWF0VHlwZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRDcmVhdGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuZ2V0TG9jYXRpb25zQnlTZXNzaW9uSWQodGhpcy5jb3Vyc2VJZCwgc2Vzc2lvbklkKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJTG9jYXRpb25bXSkgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gcmVzdWx0XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJTFRTZXJ2aWNlLmdldFNlc3Npb24odGhpcy5jb3Vyc2VJZCwgc2Vzc2lvbklkKVxyXG4gICAgICAgICAgICAudGhlbigoc2Vzc2lvbjogSUlMVFNlc3Npb24pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbiA9IGFuZ3VsYXIuY29weShzZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuZ2V0U2VjdGlvbkZvclNlc3Npb24odGhpcy5jb3Vyc2VJZCwgc2Vzc2lvbklkKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IG51bWJlcikgPT4gdGhpcy5uZXdTZXNzaW9uLnNlY3Rpb25JZCA9IHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlT2Zmc2V0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TdGFydERhdGVUZXh0ID0gbW9tZW50KHRoaXMubmV3U2Vzc2lvbi5zdGFydERhdGUgLSB0aGlzLnRpbWVPZmZzZXQgKyBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkuZm9ybWF0KFwiTS9EL1lZWVlcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TdGFydFRpbWVUZXh0ID0gbW9tZW50KHRoaXMubmV3U2Vzc2lvbi5zdGFydERhdGUgLSB0aGlzLnRpbWVPZmZzZXQgKyBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkuZm9ybWF0KFwiaGg6bW0gYVwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbkVuZFRpbWVUZXh0ID0gbW9tZW50KHRoaXMubmV3U2Vzc2lvbi5lbmREYXRlIC0gdGhpcy50aW1lT2Zmc2V0ICsgbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApLmZvcm1hdChcImhoOm1tIGFcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5sb2NhdGlvbnMuZmlsdGVyKGwgPT4gbC5pZCA9PSB0aGlzLm5ld1Nlc3Npb24ubG9jYXRpb25JZClbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5ld1Nlc3Npb24uaW5zdHJ1Y3Rvcklkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi5pbnN0cnVjdG9ySWRzID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRpb25FZGl0aW5nTW9kYWwoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd0NyZWF0aW9uRWRpdGluZ01vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI2NyZWF0aW9uRWRpdGluZ0RpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9zZUNyZWF0aW9uRWRpdGluZ01vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2xlYW5TZXNzaW9uKCk7XHJcbiAgICAgICAgJChcIiNjcmVhdGlvbkVkaXRpbmdEaWFsb2dcIikubW9kYWwoJ2hpZGUnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNEYXRhVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVPZmZzZXQoKTtcclxuXHJcbiAgICAgICAgbGV0IHN0YXJ0X3RpbWUgPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5zZXNzaW9uU3RhcnRUaW1lVGV4dCwgXCJoaDptbSBhXCIpIC0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XHJcbiAgICAgICAgc3RhcnRfdGltZSA9IHN0YXJ0X3RpbWUgLSBNYXRoLmZsb29yKChzdGFydF90aW1lIC8gODY0MDAwMDApKSAqIDg2NDAwMDAwO1xyXG5cclxuICAgICAgICBsZXQgZW5kX3RpbWUgPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5zZXNzaW9uRW5kVGltZVRleHQsIFwiaGg6bW0gYVwiKSAtIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xyXG4gICAgICAgIGVuZF90aW1lID0gZW5kX3RpbWUgLSBNYXRoLmZsb29yKChlbmRfdGltZSAvIDg2NDAwMDAwKSkgKiA4NjQwMDAwMDtcclxuXHJcbiAgICAgICAgbGV0IG9uZTogYm9vbGVhbiA9IChuZXcgRGF0ZSgpLmdldFRpbWUoKSArIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwIC0gdGhpcy50aW1lT2Zmc2V0KSA8IChNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5zZXNzaW9uU3RhcnREYXRlVGV4dCkgKyBzdGFydF90aW1lKTtcclxuICAgICAgICBsZXQgdHdvOiBib29sZWFuID0gKG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDAgLSB0aGlzLnRpbWVPZmZzZXQpIDwgKE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLnNlc3Npb25TdGFydERhdGVUZXh0KSArIGVuZF90aW1lKTtcclxuICAgICAgICBsZXQgdHJlZTogYm9vbGVhbiA9IHN0YXJ0X3RpbWUgPCBlbmRfdGltZTtcclxuICAgICAgICBsZXQgZm91cjogYm9vbGVhbiA9ICF0aGlzLnNlc3Npb25SZXBlYXRUeXBlIHx8IHRoaXMuc2Vzc2lvblJlcGVhdFR5cGUgPT0gSUxUUmVwZWF0VHlwZVtJTFRSZXBlYXRUeXBlLk9OQ0VdXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLnNlc3Npb25FbmREYXRlVGV4dCkgPiBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5zZXNzaW9uU3RhcnREYXRlVGV4dCkgKyBlbmRfdGltZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG9uZSAmJiB0d28gJiYgdHJlZSAmJiBmb3VyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzY2hlZHVsZVNlc3Npb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24uc2VyaWVzSWQgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmlsdFNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uLmlkID09IHRoaXMubmV3U2Vzc2lvbi5zZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi50aXRsZSA9IHNlY3Rpb24ubmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24ubG9jYXRpb25JZCA9IHRoaXMubG9jYXRpb24uaWQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0X3RpbWUgPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5zZXNzaW9uU3RhcnRUaW1lVGV4dCwgXCJoaDptbSBhXCIpIC0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XHJcbiAgICAgICAgc3RhcnRfdGltZSA9IHN0YXJ0X3RpbWUgLSBNYXRoLmZsb29yKChzdGFydF90aW1lIC8gODY0MDAwMDApKSAqIDg2NDAwMDAwO1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi5zdGFydERhdGUgPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5zZXNzaW9uU3RhcnREYXRlVGV4dCkgKyBzdGFydF90aW1lXHJcbiAgICAgICAgICAgIC0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDAgKyB0aGlzLnRpbWVPZmZzZXQ7XHJcblxyXG4gICAgICAgIGxldCBlbmRfdGltZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLnNlc3Npb25FbmRUaW1lVGV4dCwgXCJoaDptbSBhXCIpIC0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XHJcbiAgICAgICAgZW5kX3RpbWUgPSBlbmRfdGltZSAtIE1hdGguZmxvb3IoKGVuZF90aW1lIC8gODY0MDAwMDApKSAqIDg2NDAwMDAwO1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi5lbmREYXRlID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuc2Vzc2lvblN0YXJ0RGF0ZVRleHQpICsgZW5kX3RpbWVcclxuICAgICAgICAgICAgLSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCArIHRoaXMudGltZU9mZnNldDtcclxuXHJcbiAgICAgICAgbGV0IGVuZE9uRGF0ZTogbnVtYmVyID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuc2Vzc2lvbkVuZERhdGVUZXh0KSAtIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwICsgdGhpcy50aW1lT2Zmc2V0O1xyXG4gICAgICAgIGxldCBvbmVEYXlEZWx0YSA9IDI0ICogNjAgKjYwICogMTAwMDtcclxuICAgICAgICBsZXQgb25lV2Vla0RlbHRhID0gNyAqIG9uZURheURlbHRhO1xyXG4gICAgICAgIGxldCBlbmRPbkRhdGVMaW1pdDogbnVtYmVyID0gZW5kT25EYXRlICsgb25lRGF5RGVsdGE7XHJcblxyXG4gICAgICAgIGxldCBzY2hlZHVsZWRTZXNzaW9uczogSUlMVFNlc3Npb25bXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnNlc3Npb25SZXBlYXRUeXBlID09IElMVFJlcGVhdFR5cGVbSUxUUmVwZWF0VHlwZS5PTkNFXSkge1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkU2Vzc2lvbnMucHVzaCh0aGlzLm5ld1Nlc3Npb24pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXNzaW9uUmVwZWF0VHlwZSA9PSBJTFRSZXBlYXRUeXBlW0lMVFJlcGVhdFR5cGUuREFJTFldKSB7XHJcbiAgICAgICAgICAgIGxldCBzY2hlZHVsZWRTZXNzaW9uc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5uZXdTZXNzaW9uLmVuZERhdGUgPCBlbmRPbkRhdGVMaW1pdCAmJiBzY2hlZHVsZWRTZXNzaW9uc0NvdW50IDwgdGhpcy5JTFRfU0VTU0lPTlNfU0NIRURVTElOR19NQVhfQ09VTlQpIHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFNlc3Npb25zLnB1c2godGhpcy5uZXdTZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFNlc3Npb25zQ291bnQrKztcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld1Nlc3Npb24gPSBhbmd1bGFyLmNvcHkodGhpcy5uZXdTZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi5zdGFydERhdGUgKz0gb25lRGF5RGVsdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld1Nlc3Npb24uZW5kRGF0ZSArPSBvbmVEYXlEZWx0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXNzaW9uUmVwZWF0VHlwZSA9PSBJTFRSZXBlYXRUeXBlW0lMVFJlcGVhdFR5cGUuV0VFS0xZXSkge1xyXG4gICAgICAgICAgICBsZXQgc2NoZWR1bGVkU2Vzc2lvbnNDb3VudDogbnVtYmVyID0gMDtcclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMubmV3U2Vzc2lvbi5lbmREYXRlIDwgZW5kT25EYXRlTGltaXQgJiYgc2NoZWR1bGVkU2Vzc2lvbnNDb3VudCA8IHRoaXMuSUxUX1NFU1NJT05TX1NDSEVEVUxJTkdfTUFYX0NPVU5UKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRTZXNzaW9ucy5wdXNoKHRoaXMubmV3U2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRTZXNzaW9uc0NvdW50Kys7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uID0gYW5ndWxhci5jb3B5KHRoaXMubmV3U2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld1Nlc3Npb24uc3RhcnREYXRlICs9IG9uZVdlZWtEZWx0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi5lbmREYXRlICs9IG9uZVdlZWtEZWx0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXNzaW9uUmVwZWF0VHlwZSA9PSBJTFRSZXBlYXRUeXBlW0lMVFJlcGVhdFR5cGUuRVZFUllfV0VFS19EQVldKSB7XHJcbiAgICAgICAgICAgIGxldCBzY2hlZHVsZWRTZXNzaW9uc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5uZXdTZXNzaW9uLmVuZERhdGUgPCBlbmRPbkRhdGVMaW1pdCAmJiBzY2hlZHVsZWRTZXNzaW9uc0NvdW50IDwgdGhpcy5JTFRfU0VTU0lPTlNfU0NIRURVTElOR19NQVhfQ09VTlQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzV29ya2luZ1dlZWtEYXkodGhpcy5uZXdTZXNzaW9uLnN0YXJ0RGF0ZSArIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwIC0gdGhpcy50aW1lT2Zmc2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZFNlc3Npb25zLnB1c2godGhpcy5uZXdTZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRTZXNzaW9uc0NvdW50Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uID0gYW5ndWxhci5jb3B5KHRoaXMubmV3U2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld1Nlc3Npb24uc3RhcnREYXRlICs9IG9uZURheURlbHRhO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uLmVuZERhdGUgKz0gb25lRGF5RGVsdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHNlcmllc1Byb21pc2U7XHJcbiAgICAgICAgaWYodGhpcy5zZXNzaW9uUmVwZWF0VHlwZSAhPSBJTFRSZXBlYXRUeXBlW0lMVFJlcGVhdFR5cGUuT05DRV0pXHJcbiAgICAgICAgICAgIHNlcmllc1Byb21pc2UgPSB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuY3JlYXRlU2VyaWVzKCB0aGlzLmNvdXJzZUlkKS50aGVuKHNlcmllcyA9PiB0aGlzLm5ld1Nlc3Npb24uc2VyaWVzSWQgPSBzZXJpZXMuaWQpO1xyXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuJHEuYWxsKFtzZXJpZXNQcm9taXNlXSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlZFNlc3Npb25zLmZvckVhY2goc2Vzc2lvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uLnNlcmllc0lkID0gdGhpcy5uZXdTZXNzaW9uLnNlcmllc0lkO1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmNvdXJzZUlMVFNlcnZpY2Uuc2NoZWR1bGVTZXNzaW9uKHRoaXMuY291cnNlSWQsIHNlc3Npb24pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuJHEuYWxsKHByb21pc2VzKVxyXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDcmVhdGlvbkVkaXRpbmdNb2RhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaWx0U2Vzc2lvbnNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlU2Vzc2lvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlsdFNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uLmlkID09IHRoaXMubmV3U2Vzc2lvbi5zZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi50aXRsZSA9IHNlY3Rpb24ubmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24ubG9jYXRpb25JZCA9IHRoaXMubG9jYXRpb24uaWQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0X3RpbWUgPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5zZXNzaW9uU3RhcnRUaW1lVGV4dCwgXCJoaDptbSBhXCIpIC0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XHJcbiAgICAgICAgc3RhcnRfdGltZSA9IHN0YXJ0X3RpbWUgLSBNYXRoLmZsb29yKChzdGFydF90aW1lIC8gODY0MDAwMDApKSAqIDg2NDAwMDAwO1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi5zdGFydERhdGUgPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5zZXNzaW9uU3RhcnREYXRlVGV4dCkgKyBzdGFydF90aW1lXHJcbiAgICAgICAgICAgIC0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDAgKyB0aGlzLnRpbWVPZmZzZXQ7XHJcblxyXG4gICAgICAgIGxldCBlbmRfdGltZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLnNlc3Npb25FbmRUaW1lVGV4dCwgXCJoaDptbSBhXCIpIC0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XHJcbiAgICAgICAgZW5kX3RpbWUgPSBlbmRfdGltZSAtIE1hdGguZmxvb3IoKGVuZF90aW1lIC8gODY0MDAwMDApKSAqIDg2NDAwMDAwO1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi5lbmREYXRlID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuc2Vzc2lvblN0YXJ0RGF0ZVRleHQpICsgZW5kX3RpbWVcclxuICAgICAgICAgICAgLSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCArIHRoaXMudGltZU9mZnNldDtcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJTFRTZXJ2aWNlLnVwZGF0ZVNlc3Npb24odGhpcy5jb3Vyc2VJZCwgdGhpcy5uZXdTZXNzaW9uKVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ3JlYXRpb25FZGl0aW5nTW9kYWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWx0U2Vzc2lvbnNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhblNlc3Npb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZXdTZXNzaW9uID0ge2luc3RydWN0b3JJZHM6IFtdfTtcclxuICAgICAgICB0aGlzLnNlc3Npb25TdGFydERhdGVUZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlc3Npb25TdGFydFRpbWVUZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlc3Npb25FbmREYXRlVGV4dCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uRW5kVGltZVRleHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvblJlcGVhdFR5cGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNXb3JraW5nV2Vla0RheShkYXRlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmlzb1dlZWtkYXkoKSAhPSA2XHJcbiAgICAgICAgICAgICYmIG1vbWVudChkYXRlKS5pc29XZWVrZGF5KCkgIT0gNztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRhdGVUb1RpbWVab25lRGF0ZSh0aW1lWm9uZTogYW55LCBkYXRlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBvZmZzZXQ7XHJcbiAgICAgICAgdGhpcy50aW1lWm9uZS5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodC5uYW1lID09IHRpbWVab25lKSB7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLmdldFRpbWVab25lT2Zmc2V0KHQudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIChkYXRlICsgbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDAgLSBvZmZzZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsY3VsYXRlT2Zmc2V0KCkge1xyXG4gICAgICAgIHRoaXMudGltZVpvbmUuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHQubmFtZSA9PSB0aGlzLm5ld1Nlc3Npb24udGltZXpvbmUudG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aW1lT2Zmc2V0ID0gdGhpcy5nZXRUaW1lWm9uZU9mZnNldCh0LnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRUaW1lWm9uZU9mZnNldCh0aW1lWm9uZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBsZXQgbG9jYWxUaW1lOiBudW1iZXIgPSBNYXRoLmZsb29yKChub3cuZ2V0VGltZSgpIC8gMTAwMCkpICogMTAwMDtcclxuICAgICAgICBsZXQgdGltZVpvbmVUaW1lOiBudW1iZXIgPSBuZXcgRGF0ZShub3cudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7dGltZVpvbmU6IHRpbWVab25lfSkpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gbm93LmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCArIChsb2NhbFRpbWUgLSB0aW1lWm9uZVRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBYmJyZXZpYXRpb24odGltZVpvbmU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGFiYnJldmlhdGlvbjtcclxuICAgICAgICB0aGlzLnRpbWVab25lLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0Lm5hbWUgPT0gdGltZVpvbmUpIHtcclxuICAgICAgICAgICAgICAgIGFiYnJldmlhdGlvbiA9IHQuYWJicmV2aWF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFiYnJldmlhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CdXNpbmVzc1VuaXRDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY291cnNlSUxUU2VydmljZS5nZXRMb2NhdGlvbnNCeUJ1c2luZXNzVW5pdElkKHRoaXMuY291cnNlSWQsIHRoaXMubmV3U2Vzc2lvbi5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUxvY2F0aW9uW10pID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHJlc3VsdFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoYSA9PiB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdHJ1ZSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEluc3RydWN0b3JzVXJsKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBiYXNlVXJsOiBzdHJpbmcgPSBcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0L2luc3RydWN0b3JzL2F2YWlsYWJsZVwiO1xyXG4gICAgICAgIGlmIChidXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShiYXNlVXJsICsgXCI/YnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkXCIpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjpjb3Vyc2VJZFwiLCB0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShiYXNlVXJsKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6Y291cnNlSWRcIiwgdGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd1Nlc3Npb25zTGlzdCgpIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlld01vZGUgPSB0aGlzLklMVF9TRVNTSU9OU19MSVNUX1ZJRVdfTU9ERTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlc3Npb24gPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5pbHRTZXNzaW9uc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElJTFRTZXNzaW9uPih0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCB0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSkpO1xyXG4gICAgICAgIHRoaXMuaWx0U2Vzc2lvbnNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDtcclxuICAgICAgICB0aGlzLmlsdFNlc3Npb25zR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG5cclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd1Nlc3Npb25NYW5hZ2VtZW50KHNlc3Npb246IElJTFRTZXNzaW9uKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlc3Npb24gPSBhbmd1bGFyLmNvcHkoc2Vzc2lvbik7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5JTFRfU0VTU0lPTl9NQU5BR0VNRU5UX1ZJRVdfTU9ERTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkTGVhcm5lcnNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJSUxUU2Vzc2lvblBhcnRpY2lwYW50Pih0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvOnNlc3Npb25JZC9wYXJ0aWNpcGFudHNcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCB0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOnNlc3Npb25JZFwiLCBzZXNzaW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSkpO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZExlYXJuZXJzR3JpZE1vZGVsLnBhZ2VTaXplID0gNTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRMZWFybmVyc0dyaWRNb2RlbC5yZXF1ZXN0c1BhZ2VNb2RlID0gUGFnZU1vZGVbUGFnZU1vZGUuRU5UUklFU19BTkRfVE9UQUxdO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZExlYXJuZXJzR3JpZE1vZGVsLmZpbHRlci5zdGF0dXMgPSBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuUkVHSVNURVJFRF07XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkTGVhcm5lcnNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcblxyXG4gICAgICAgIHRoaXMud2FpdGxpc3RlZExlYXJuZXJzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUlMVFNlc3Npb25QYXJ0aWNpcGFudD4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0LzpzZXNzaW9uSWQvcGFydGljaXBhbnRzXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgdGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpzZXNzaW9uSWRcIiwgc2Vzc2lvbi5pZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCkpKTtcclxuICAgICAgICB0aGlzLndhaXRsaXN0ZWRMZWFybmVyc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDU7XHJcbiAgICAgICAgdGhpcy53YWl0bGlzdGVkTGVhcm5lcnNHcmlkTW9kZWwuZmlsdGVyLnN0YXR1cyA9IElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5JTl9XQUlUX0xJU1RdO1xyXG4gICAgICAgIHRoaXMud2FpdGxpc3RlZExlYXJuZXJzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG5cclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxlYXJuZXJzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUxUU2VsZWN0YWJsZT4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0LzpzZXNzaW9uSWQvcGFydGljaXBhbnRzL2F2YWlsYWJsZVwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6c2Vzc2lvbklkXCIsIHNlc3Npb24uaWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpKSk7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMZWFybmVyc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDU7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMZWFybmVyc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxlYXJuZXJzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VJc1N0YXJ0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTGVhcm5lcnNHcmlkTW9kZWwuZmlsdGVyLmNvdXJzZUlzTm90U3RhcnRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qQXZhaWxhYmxlIHVzZXJzIGFjdGlvbnMqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyQXZhaWxhYmxlVXNlcih1c2VySWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJTFRTZXJ2aWNlLmNyZWF0ZVBhcnRpY2lwYW50KHRoaXMuY291cnNlSWQsIHRoaXMuc2VsZWN0ZWRTZXNzaW9uLmlkLCB1c2VySWQsXHJcbiAgICAgICAgICAgIElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5SRUdJU1RFUkVEXSwgZmFsc2UpXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkTGVhcm5lcnNHcmlkcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlckFsbEF2YWlsYWJsZVVzZXJzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJTFRTZXJ2aWNlLmNyZWF0ZUFsbFBhcnRpY2lwYW50cyh0aGlzLmNvdXJzZUlkLCB0aGlzLnNlbGVjdGVkU2Vzc2lvbi5pZCxcclxuICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVMZWFybmVyc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlSXNTdGFydGVkLFxyXG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxlYXJuZXJzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VJc05vdFN0YXJ0ZWQsXHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTGVhcm5lcnNHcmlkTW9kZWwuZmlsdGVyLnVzZXJOYW1lU2VhcmNoU3RyaW5nLFxyXG4gICAgICAgICAgICBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuUkVHSVNURVJFRF0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkTGVhcm5lcnNHcmlkcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB3YWl0bGlzdEF2YWlsYWJsZVVzZXIodXNlcklkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY291cnNlSUxUU2VydmljZS5jcmVhdGVQYXJ0aWNpcGFudCh0aGlzLmNvdXJzZUlkLCB0aGlzLnNlbGVjdGVkU2Vzc2lvbi5pZCwgdXNlcklkLFxyXG4gICAgICAgICAgICBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuSU5fV0FJVF9MSVNUXSwgZmFsc2UpXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkTGVhcm5lcnNHcmlkcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB3YWl0bGlzdEFsbEF2YWlsYWJsZVVzZXJzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJTFRTZXJ2aWNlLmNyZWF0ZUFsbFBhcnRpY2lwYW50cyh0aGlzLmNvdXJzZUlkLCB0aGlzLnNlbGVjdGVkU2Vzc2lvbi5pZCxcclxuICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVMZWFybmVyc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlSXNTdGFydGVkLFxyXG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxlYXJuZXJzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VJc05vdFN0YXJ0ZWQsXHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTGVhcm5lcnNHcmlkTW9kZWwuZmlsdGVyLnVzZXJOYW1lU2VhcmNoU3RyaW5nLFxyXG4gICAgICAgICAgICBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuSU5fV0FJVF9MSVNUXSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRMZWFybmVyc0dyaWRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKkF2YWlsYWJsZSB1c2VycyBhY3Rpb25zKi9cclxuXHJcbiAgICAvKldhaXRsaXN0ZWQgcGFydGljaXBhbnRzIGFjdGlvbnMqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyV2FpdGxpc3RlZFBhcnRpY2lwYW50KHBhcnRpY2lwYW50SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJTFRTZXJ2aWNlLmNoYW5nZVBhcnRpY2lwYW50U3RhdHVzKHRoaXMuY291cnNlSWQsIHRoaXMuc2VsZWN0ZWRTZXNzaW9uLmlkLCBwYXJ0aWNpcGFudElkLFxyXG4gICAgICAgICAgICBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuUkVHSVNURVJFRF0sIGZhbHNlKVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZExlYXJuZXJzR3JpZHMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJBbGxXYWl0bGlzdGVkUGFydGljaXBhbnRzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJTFRTZXJ2aWNlLmNoYW5nZVBhcnRpY2lwYW50c1N0YXR1cyh0aGlzLmNvdXJzZUlkLCB0aGlzLnNlbGVjdGVkU2Vzc2lvbi5pZCxcclxuICAgICAgICAgICAgSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c1tJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzLklOX1dBSVRfTElTVF0sXHJcbiAgICAgICAgICAgIElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5SRUdJU1RFUkVEXSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRMZWFybmVyc0dyaWRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVucmVnaXN0ZXJXYWl0bGlzdGVkUGFydGljaXBhbnQocGFydGljaXBhbnRJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuZGVsZXRlUGFydGljaXBhbnQodGhpcy5jb3Vyc2VJZCwgdGhpcy5zZWxlY3RlZFNlc3Npb24uaWQsIHBhcnRpY2lwYW50SWQpXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkTGVhcm5lcnNHcmlkcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bnJlZ2lzdGVyQWxsV2FpdGxpc3RlZFBhcnRpY2lwYW50cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY291cnNlSUxUU2VydmljZS5kZWxldGVBbGxQYXJ0aWNpcGFudHModGhpcy5jb3Vyc2VJZCwgdGhpcy5zZWxlY3RlZFNlc3Npb24uaWQsIElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5JTl9XQUlUX0xJU1RdKVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZExlYXJuZXJzR3JpZHMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qV2FpdGxpc3RlZCBwYXJ0aWNpcGFudHMgYWN0aW9ucyovXHJcblxyXG4gICAgLypSZWdpc3RlcmVkIHBhcnRpY2lwYW50cyBhY3Rpb25zKi9cclxuICAgIHB1YmxpYyB1bnJlZ2lzdGVyUmVnaXN0ZXJlZFBhcnRpY2lwYW50KHBhcnRpY2lwYW50SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJTFRTZXJ2aWNlLmRlbGV0ZVBhcnRpY2lwYW50KHRoaXMuY291cnNlSWQsIHRoaXMuc2VsZWN0ZWRTZXNzaW9uLmlkLCBwYXJ0aWNpcGFudElkKVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZExlYXJuZXJzR3JpZHMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5yZWdpc3RlckFsbFJlZ2lzdGVyZWRQYXJ0aWNpcGFudHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuZGVsZXRlQWxsUGFydGljaXBhbnRzKHRoaXMuY291cnNlSWQsIHRoaXMuc2VsZWN0ZWRTZXNzaW9uLmlkLCBJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzW0lMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMuUkVHSVNURVJFRF0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkTGVhcm5lcnNHcmlkcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlc3Npb24uZW5hYmxlV2FpdGxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiQXV0byByZWdpc3RyYXRpb24gZnJvbSB3YWl0bGlzdCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQuIFBsZWFzZSByZWdpc3RlciBsZWFybmVycyBtYW51YWxseSBpZiBuZWVkZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgd2FpdGxpc3RSZWdpc3RlcmVkUGFydGljaXBhbnQocGFydGljaXBhbnRJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuY2hhbmdlUGFydGljaXBhbnRTdGF0dXModGhpcy5jb3Vyc2VJZCwgdGhpcy5zZWxlY3RlZFNlc3Npb24uaWQsIHBhcnRpY2lwYW50SWQsXHJcbiAgICAgICAgICAgIElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5JTl9XQUlUX0xJU1RdLCBmYWxzZSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRMZWFybmVyc0dyaWRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdhaXRsaXN0QWxsUmVnaXN0ZXJlZFBhcnRpY2lwYW50cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY291cnNlSUxUU2VydmljZS5jaGFuZ2VQYXJ0aWNpcGFudHNTdGF0dXModGhpcy5jb3Vyc2VJZCwgdGhpcy5zZWxlY3RlZFNlc3Npb24uaWQsXHJcbiAgICAgICAgICAgIElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXNbSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1cy5SRUdJU1RFUkVEXSxcclxuICAgICAgICAgICAgSUxUU2Vzc2lvblJlZ2lzdHJhdGlvblN0YXR1c1tJTFRTZXNzaW9uUmVnaXN0cmF0aW9uU3RhdHVzLklOX1dBSVRfTElTVF0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkTGVhcm5lcnNHcmlkcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlc3Npb24uZW5hYmxlV2FpdGxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiQXV0byByZWdpc3RyYXRpb24gZnJvbSB3YWl0bGlzdCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQuIFBsZWFzZSByZWdpc3RlciBsZWFybmVycyBtYW51YWxseSBpZiBuZWVkZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlUmVnaXN0ZXJlZFNlY3Rpb25BdHRlbmRhbmNlKHBhcnRpY2lwYW50OiBJSUxUU2Vzc2lvblBhcnRpY2lwYW50LCBzdGF0dXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChwYXJ0aWNpcGFudC5hdHRlbmRhbmNlU3RhdHVzID09IHN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJTFRTZXJ2aWNlLmNoYW5nZVBhcnRpY2lwYW50QXR0ZW5kYW5jZSh0aGlzLmNvdXJzZUlkLCB0aGlzLnNlbGVjdGVkU2Vzc2lvbi5pZCwgcGFydGljaXBhbnQuaWQsIHN0YXR1cylcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlcmVkTGVhcm5lcnNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKlJlZ2lzdGVyZWQgcGFydGljaXBhbnRzIGFjdGlvbnMqL1xyXG5cclxuICAgIHByaXZhdGUgcmVsb2FkTGVhcm5lcnNHcmlkcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRMZWFybmVyc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICB0aGlzLndhaXRsaXN0ZWRMZWFybmVyc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxlYXJuZXJzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FibGVUb0VkaXQoc2Vzc2lvbkJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlci5hbGxCdXNpbmVzc1VuaXRzXHJcbiAgICAgICAgICAgIHx8ICghIXRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0cyAmJiB0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHMuc29tZShidSA9PiBidSA9PT0gc2Vzc2lvbkJ1c2luZXNzVW5pdElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbFNlc3Npb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMud2FpdGxpc3RlZExlYXJuZXJzR3JpZE1vZGVsLmVudHJpZXMubGVuZ3RoID4gMCB8fCB0aGlzLnJlZ2lzdGVyZWRMZWFybmVyc0dyaWRNb2RlbC5lbnRyaWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJTZXNzaW9uIGNhbid0IGJlIGNhbmNlbGxlZCB3aGlsZSBhdCBsZWFzdCBvbmUgcmVnaXN0cmFudCBleGlzdHMuIFBsZWFzZSBwcmVzcyBidXR0b24gVW5yZWdpc3RlciBBbGwgYW5kIHRoZW4gdHJ5IGFnYWluLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuY2FuY2VsU2Vzc2lvbih0aGlzLmNvdXJzZUlkLCB0aGlzLnNlbGVjdGVkU2Vzc2lvbi5pZClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U2Vzc2lvbnNMaXN0KCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc2Vzc2lvbi5jb250YWlucy5yZWdpc3RlcmVkLmxlYXJuZXJzXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlNlc3Npb24gY2FuJ3QgYmUgY2FuY2VsbGVkIHdoaWxlIGF0IGxlYXN0IG9uZSByZWdpc3RyYW50IGV4aXN0cy4gUGxlYXNlIHByZXNzIGJ1dHRvbiBVbnJlZ2lzdGVyIEFsbCBhbmQgdGhlbiB0cnkgYWdhaW4uXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRMZWFybmVyc0dyaWRzKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZXhwb3J0VG9QZGYoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnM6IGFueSA9IHtcclxuICAgICAgICAgICAgdXNlcklkOiB0aGlzLmN1cnJlbnRVc2VyLmlkLFxyXG4gICAgICAgICAgICBjb3Vyc2VJZDogTnVtYmVyKHRoaXMuY291cnNlSWQpLFxyXG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2VsZWN0ZWRTZXNzaW9uLmlkXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvdXJzZUlMVFNlcnZpY2UuZ2V0U2Vzc2lvbkxlYXJuZXJzUmVwb3J0KHBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIC50aGVuKGRvd25sb2FkVXJsID0+IHRoaXMuJHdpbmRvdy5vcGVuKGRvd25sb2FkVXJsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvdXJzZUlzU3RhcnRlZENoZWNrZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYoIXRoaXMuYXZhaWxhYmxlTGVhcm5lcnNHcmlkTW9kZWwuZmlsdGVyLmNvdXJzZUlzU3RhcnRlZCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF2YWlsYWJsZUxlYXJuZXJzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VJc05vdFN0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTGVhcm5lcnNHcmlkTW9kZWwuZmlsdGVyLmNvdXJzZUlzU3RhcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvdXJzZUlzTm90U3RhcnRlZENoZWNrZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYoIXRoaXMuYXZhaWxhYmxlTGVhcm5lcnNHcmlkTW9kZWwuZmlsdGVyLmNvdXJzZUlzTm90U3RhcnRlZCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF2YWlsYWJsZUxlYXJuZXJzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VJc1N0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTGVhcm5lcnNHcmlkTW9kZWwuZmlsdGVyLmNvdXJzZUlzTm90U3RhcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZUxvY2F0aW9uKHZhbHVlOiBJTG9jYXRpb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxvY2F0aW9uID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBhcHBseUZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxlYXJuZXJzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICQoXCIjZmlsdGVyTW9kYWxcIikubW9kYWwoXCJoaWRlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxlYXJuZXJzR3JpZE1vZGVsLmZpbHRlci51c2VyTmFtZVNlYXJjaFN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMZWFybmVyc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlSXNTdGFydGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxlYXJuZXJzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VJc05vdFN0YXJ0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2FuY2VsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVjb2RlU3RhdHVzKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aXRsZTtcclxuICAgICAgICBzd2l0Y2ggKHRpdGxlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzY2hlZHVsZWRcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJzY2hlZHVsZWRcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJmaW5pc2hlZFwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcImZpbmlzaGVkXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiY2FuY2VsbGVkXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiY2FuY2VsbGVkXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJSUxUU2Vzc2lvbn0gZnJvbSBcIi4uL2lsdC9tb2RlbHMvSUlMVFNlc3Npb25cIjtcclxuaW1wb3J0IHtJSUxUU2Vzc2lvblBhcnRpY2lwYW50fSBmcm9tIFwiLi4vaWx0L21vZGVscy9JSUxUU2Vzc2lvblBhcnRpY2lwYW50XCI7XHJcbmltcG9ydCB7SUlMVFNlc3Npb25BdHRlbmRhbmNlfSBmcm9tIFwiLi4vaWx0L21vZGVscy9JSUxUU2Vzc2lvbkF0dGVuZGFuY2VcIjtcclxuaW1wb3J0IHtJTG9jYXRpb259IGZyb20gXCIuLi9pbHQvbW9kZWxzL0lMb2NhdGlvblwiO1xyXG5pbXBvcnQge0lJTFRTZXJpZXN9IGZyb20gXCIuLi9pbHQvbW9kZWxzL0lJTFRTZXJpZXNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Vyc2VJTFRTZXJ2aWNlIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvdXJzZXMuQ291cnNlSUxUU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QW55SUxUU2VjdGlvbnNFeGlzdHMoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvYW55SW5Db3Vyc2VcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZXNzaW9uKGNvdXJzZUlkOiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJSUxUU2Vzc2lvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvOnNlc3Npb25JZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZXNzaW9uSWRcIiwgc2Vzc2lvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxTZXNzaW9uKGNvdXJzZUlkOiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5kZWxldGUodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0LzpzZXNzaW9uSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2Vzc2lvbklkXCIsIHNlc3Npb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2NoZWR1bGVTZXNzaW9uKGNvdXJzZUlkOiBudW1iZXIsIGlsdFNlc3Npb246IElJTFRTZXNzaW9uKTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2lsdFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIGlsdFNlc3Npb24pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVNlc3Npb24oY291cnNlSWQ6IG51bWJlciwgaWx0U2Vzc2lvbjogSUlMVFNlc3Npb24pOiBhbmd1bGFyLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvOnNlc3Npb25JZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZXNzaW9uSWRcIiwgaWx0U2Vzc2lvbi5pZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgaWx0U2Vzc2lvbilcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlU2VyaWVzKGNvdXJzZUlkOiBudW1iZXIpIDphbmd1bGFyLklQcm9taXNlPElJTFRTZXJpZXM+e1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0L3Nlcmllc1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2VyaWVzKHNlcmllc0lkOiBudW1iZXIsIGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElJTFRTZXJpZXM+e1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvc2VyaWVzLzpzZXJpZXNJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZXJpZXNJZFwiLCBzZXJpZXNJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVBbGxQYXJ0aWNpcGFudHMoY291cnNlSWQ6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIsIGNvdXJzZUlzU3RhcnRlZDogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlSXNOb3RTdGFydGVkOiBib29sZWFuLCB1c2VyTmFtZVNlYXJjaFN0cmluZzogc3RyaW5nLCBzdGF0dXM6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SUlMVFNlc3Npb25QYXJ0aWNpcGFudD4+IHtcclxuICAgICAgICBsZXQgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvOnNlc3Npb25JZC9wYXJ0aWNpcGFudHMvYWxsXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiP2NvdXJzZUlzU3RhcnRlZD06Y291cnNlSXNTdGFydGVkJmNvdXJzZUlzTm90U3RhcnRlZD06Y291cnNlSXNOb3RTdGFydGVkJnVzZXJOYW1lRmlsdGVyPTp1c2VyTmFtZUZpbHRlclwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZXNzaW9uSWRcIiwgc2Vzc2lvbklkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSXNTdGFydGVkXCIsIGNvdXJzZUlzU3RhcnRlZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlzTm90U3RhcnRlZFwiLCBjb3Vyc2VJc05vdFN0YXJ0ZWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp1c2VyTmFtZUZpbHRlclwiLCB1c2VyTmFtZVNlYXJjaFN0cmluZylcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgcmVxdWVzdERhdGEpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZVBhcnRpY2lwYW50KGNvdXJzZUlkOiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyLCB1c2VySWQ6IG51bWJlciwgc3RhdHVzOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjogYm9vbGVhbik6IGFuZ3VsYXIuSVByb21pc2U8SUlMVFNlc3Npb25QYXJ0aWNpcGFudD4ge1xyXG4gICAgICAgIGxldCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgICAgICAgdXNlcklkOiB1c2VySWQsXHJcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvOnNlc3Npb25JZC9wYXJ0aWNpcGFudHM/c2VsZj06c2VsZlwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZXNzaW9uSWRcIiwgc2Vzc2lvbklkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VsZlwiLCBzZWxmKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCByZXF1ZXN0RGF0YSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlU2VyaWVzUGFydGljaXBhbnRzKGNvdXJzZUlkOiBudW1iZXIsIHNlcmllc0lkOiBudW1iZXIsIHVzZXJJZDogbnVtYmVyLCBzdGF0dXM6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmOiBib29sZWFuLCBpbHRTZXNzaW9uc0lkczogbnVtYmVyW10pOiBhbmd1bGFyLklQcm9taXNlPElJTFRTZXNzaW9uUGFydGljaXBhbnRbXT4ge1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgICAgICAgIHVzZXJJZDogdXNlcklkLFxyXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgICAgaWx0U2Vzc2lvbnNJZHM6IGlsdFNlc3Npb25zSWRzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvc2VyaWVzLzpzZXJpZXNJZC9wYXJ0aWNpcGFudHM/c2VsZj06c2VsZlwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZXJpZXNJZFwiLCBzZXJpZXNJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlbGZcIiwgc2VsZilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgcmVxdWVzdERhdGEpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZVBhcnRpY2lwYW50c0Zyb21TZXJpZXMoY291cnNlSWQ6IG51bWJlciwgc2VyaWVzSWQ6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIsIHVzZXJJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5kZWxldGUodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0L3Nlcmllcy86c2VyaWVzSWQvcGFydGljaXBhbnRzP3VzZXJJZD06dXNlcklkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlcmllc0lkXCIsIHNlcmllc0lkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dXNlcklkXCIsIHVzZXJJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwge3BhcmFtczoge3Nlc3Npb25JZDogc2Vzc2lvbklkfX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVBhcnRpY2lwYW50U3RhdHVzKGNvdXJzZUlkOiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyLCBzZXNzaW9uUGFydGljaXBhbnRJZDogbnVtYmVyLCBzdGF0dXM6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmOiBib29sZWFuKTogYW5ndWxhci5JUHJvbWlzZTxJSUxUU2Vzc2lvblBhcnRpY2lwYW50PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2lsdC86c2Vzc2lvbklkL3BhcnRpY2lwYW50cy86c2Vzc2lvblBhcnRpY2lwYW50SWQvc3RhdHVzP3NlbGY9OnNlbGZcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2Vzc2lvbklkXCIsIHNlc3Npb25JZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlc3Npb25QYXJ0aWNpcGFudElkXCIsIHNlc3Npb25QYXJ0aWNpcGFudElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VsZlwiLCBzZWxmKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB7c3RhdHVzOiBzdGF0dXN9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VQYXJ0aWNpcGFudHNTdGF0dXMoY291cnNlSWQ6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIsIHJlZ2lzdHJhdGlvblN0YXR1czogc3RyaW5nLCByZXF1aXJlZFN0YXR1czogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0LzpzZXNzaW9uSWQvcGFydGljaXBhbnRzL3N0YXR1cz9yZWdpc3RyYXRpb25TdGF0dXM9OnJlZ2lzdHJhdGlvblN0YXR1c1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZXNzaW9uSWRcIiwgc2Vzc2lvbklkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cmVnaXN0cmF0aW9uU3RhdHVzXCIsIHJlZ2lzdHJhdGlvblN0YXR1cylcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwge3N0YXR1czogcmVxdWlyZWRTdGF0dXN9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VQYXJ0aWNpcGFudEF0dGVuZGFuY2UoY291cnNlSWQ6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIsIHNlc3Npb25QYXJ0aWNpcGFudElkOiBudW1iZXIsIHN0YXR1czogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxJSUxUU2Vzc2lvblBhcnRpY2lwYW50PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2lsdC86c2Vzc2lvbklkL3BhcnRpY2lwYW50cy86c2Vzc2lvblBhcnRpY2lwYW50SWQvYXR0ZW5kYW5jZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZXNzaW9uSWRcIiwgc2Vzc2lvbklkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2Vzc2lvblBhcnRpY2lwYW50SWRcIiwgc2Vzc2lvblBhcnRpY2lwYW50SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHtzdGF0dXM6IHN0YXR1c30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZVBhcnRpY2lwYW50KGNvdXJzZUlkOiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyLCBzZXNzaW9uUGFydGljaXBhbnRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5kZWxldGUodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0LzpzZXNzaW9uSWQvcGFydGljaXBhbnRzLzpzZXNzaW9uUGFydGljaXBhbnRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZXNzaW9uSWRcIiwgc2Vzc2lvbklkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2Vzc2lvblBhcnRpY2lwYW50SWRcIiwgc2Vzc2lvblBhcnRpY2lwYW50SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZUFsbFBhcnRpY2lwYW50cyhjb3Vyc2VJZDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlciwgcmVnaXN0cmF0aW9uU3RhdHVzOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvOnNlc3Npb25JZC9wYXJ0aWNpcGFudHM/cmVnaXN0cmF0aW9uU3RhdHVzPTpyZWdpc3RyYXRpb25TdGF0dXNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2Vzc2lvbklkXCIsIHNlc3Npb25JZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnJlZ2lzdHJhdGlvblN0YXR1c1wiLCByZWdpc3RyYXRpb25TdGF0dXMpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlc3Npb25zTGlzdChjb3Vyc2VJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SUlMVFNlc3Npb25BdHRlbmRhbmNlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvc2VjdGlvbnMvOnNlY3Rpb25JZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN0aW9uRm9yU2Vzc2lvbihjb3Vyc2VJZDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2lsdC86c2Vzc2lvbklkL3NlY3Rpb25cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2Vzc2lvbklkXCIsIHNlc3Npb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2Vzc2lvbkxlYXJuZXJzUmVwb3J0KHBhcmFtZXRlcnM6IGFueSk6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGxldCByZXBvcnRUeXBlID0gJ1NFU1NJT05fTEVBUk5FUlNfUkVQT1JUJztcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9yZXBvcnRzL2Rvd25sb2FkVG9rZW4vOnJlcG9ydFR5cGVcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpyZXBvcnRUeXBlXCIsIHJlcG9ydFR5cGUpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLCB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKS50aGVuKChyZXN1bHQ6IGFueSkgPT4gdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9kb3dubG9hZC86dG9rZW5cIikucGFyYW0oXCI6dG9rZW5cIiwgcmVzdWx0LmRhdGEudG9rZW4pLnNlcnZpY2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExvY2F0aW9uc0J5U2Vzc2lvbklkKGNvdXJzZUlkOiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogbmcuSVByb21pc2U8SUxvY2F0aW9uW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0LzpzZXNzaW9uSWQvbG9jYXRpb25zXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlc3Npb25JZFwiLCBzZXNzaW9uSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExvY2F0aW9uc0J5QnVzaW5lc3NVbml0SWQoY291cnNlSWQ6IG51bWJlciwgYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IG5nLklQcm9taXNlPElMb2NhdGlvbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvY291cnNlcy8ke2NvdXJzZUlkfS9pbHQvbmV3U2Vzc2lvbkxvY2F0aW9uc2ApLCB7cGFyYW1zOiB7YnVzaW5lc3NVbml0SWQ6IGJ1c2luZXNzVW5pdElkfX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVBhcnRpY2lwYW50RnJvbUlsdFNlc3Npb25zQnlDb3Vyc2VJZCh1c2VySWQ6IG51bWJlciwgY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLnNlcnZpY2UoXHJcbiAgICAgICAgICAgIGAvYXBpL2NvdXJzZXMvJHtjb3Vyc2VJZH0vaWx0L3BhcnRpY2lwYW50cy8ke3VzZXJJZH0vdW5yZWdpc3RlcmBcclxuICAgICAgICApLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuL1Byb2dyZXNzU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtNb21lbnR9IGZyb20gXCIuLi91dGlscy9Nb21lbnRcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge0lMYW5kaW5nUGFnZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lMYW5kaW5nUGFnZVwiO1xyXG5pbXBvcnQge1N0b3JhZ2VXcmFwcGVyLCBTdG9yYWdlc30gZnJvbSBcIi4vLi4vaW5mcmFzdHJ1Y3R1cmUvU3RvcmFnZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRofSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aFwiO1xyXG5pbXBvcnQge0lDb3Vyc2VQcm9ncmVzc30gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VQcm9ncmVzc1wiO1xyXG5pbXBvcnQge0NvdXJzZVByb2dyZXNzU3RhdHVzfSBmcm9tIFwiLi9tb2RlbHMvQ291cnNlUHJvZ3Jlc3NTdGF0dXNcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZUluZm9Db250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5Db3Vyc2VJbmZvQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIG93bmVyczogQXJyYXk8SVNlbGVjdGFibGU+ID0gW107XHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlID0ge307XHJcbiAgICBwcml2YXRlIGN1cnJlbnRVc2VyOiBJVXNlckluZm8gPSB7fTtcclxuICAgIHB1YmxpYyByZWxhdGVkTGVhcm5pbmdQYXRoczogQXJyYXk8SUxlYXJuaW5nUGF0aD4gPSBbXTtcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbGFuZGluZ1BhZ2U6IElMYW5kaW5nUGFnZTtcclxuICAgIHByaXZhdGUgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBpc0NvdXJzZUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvdXJzZVByb2dyZXNzOiBJQ291cnNlUHJvZ3Jlc3M7XHJcbiAgICBwdWJsaWMgY291cnNlU3RhcnRlZDogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQcm9ncmVzc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgU3RvcmFnZXMuU0VTU0lPTl9OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aHNSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlc3Npb25TdG9yYWdlV3JhcHBlcjogU3RvcmFnZVdyYXBwZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZUlkID0gJHJvdXRlUGFyYW1zW0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNXTtcclxuICAgICAgICBsZXQgY291cnNlSWRTdHIgPSBTdHJpbmcodGhpcy5jb3Vyc2VJZCk7XHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kZW1hbmRWaWV3Q291cnNlUGVybWlzc2lvbnMoY291cnNlSWRTdHIsIGNvdXJzZVBlcm1pc3Npb25zID0+IGNvdXJzZVBlcm1pc3Npb25zLnZpZXcpO1xyXG4gICAgICAgIGxldCBtZW51SXRlbUtleTogc3RyaW5nID0gTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKTtcclxuICAgICAgICBpZiAoIW1lbnVJdGVtS2V5IHx8IG1lbnVJdGVtS2V5Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuRURVQ0FUSU9OX0NPVVJTRVNfTUVOVV9LRVkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRMYW5kaW5nUGFnZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHVzZXIsIHRoaXMuY3VycmVudFVzZXIpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgbG9hZENvdXJzZVByb21pc2VzID0gW1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDb3Vyc2UoKSxcclxuICAgICAgICAgICAgdGhpcy5sb2FkT3duZXJzKCksXHJcbiAgICAgICAgICAgIHRoaXMubG9hZFJlbGF0ZWRMZWFybmluZ1BhdGhzKCksXHJcbiAgICAgICAgICAgIHRoaXMubG9hZENvdXJzZVByb2dyZXNzKClcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICAkcS5hbGwobG9hZENvdXJzZVByb21pc2VzKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0NvdXJzZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkTGFuZGluZ1BhZ2UoKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvdXJzZSgpOiBhbmd1bGFyLklQcm9taXNlPElDb3Vyc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldCh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZXRDb3Vyc2VQYWdlSGVhZGVyQnJlYWRjcnVtYnModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2UsIHRoaXMuY291cnNlc1JvdXRlciwgXCJBYm91dFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZS5lbmREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShyZXN1bHQuZW5kRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZS5zdGFydERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKHJlc3VsdC5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRPd25lcnMoKTogYW5ndWxhci5JUHJvbWlzZTxJU2VsZWN0YWJsZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VPd25lcnModGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3duZXJzID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vd25lcnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkTGFuZGluZ1BhZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldExhbmRpbmdQYWdlKHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmRpbmdQYWdlID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1RhYmxldFZlcnNpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkUmVsYXRlZExlYXJuaW5nUGF0aHMoKTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFJlbGF0ZWRMZWFybmluZ1BhdGhzKHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKChsZWFybmluZ1BhdGhzOiBJTGVhcm5pbmdQYXRoW10pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRlZExlYXJuaW5nUGF0aHMgPSBhbmd1bGFyLmNvcHkobGVhcm5pbmdQYXRocyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWxhdGVkTGVhcm5pbmdQYXRocztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlUHJvZ3Jlc3MoKTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlUHJvZ3Jlc3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc1NlcnZpY2UuZ2V0Q291cnNlUHJvZ3Jlc3ModGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3MgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU3RhcnRlZCA9IChyZXN1bHQuc3RhdHVzICYmIHJlc3VsdC5zdGF0dXMgIT09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLk5PVF9TVEFSVEVEXSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VQcm9ncmVzcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJTGFuZGluZ1BhZ2V9IGZyb20gXCIuL21vZGVscy9JTGFuZGluZ1BhZ2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4vQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Vyc2VMYW5kaW5nUGFnZUVkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5Db3Vyc2VMYW5kaW5nUGFnZUVkaXRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIGNvdXJzZUlkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbGFuZGluZ1BhZ2U6IElMYW5kaW5nUGFnZTtcclxuICAgIHB1YmxpYyBjb3Vyc2U6IElDb3Vyc2U7XHJcblxyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGlzQ291cnNlTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZUlkID0gJHJvdXRlUGFyYW1zW0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNXTtcclxuICAgICAgICBsZXQgaGFzQ291cnNlSWQ6IGJvb2xlYW4gPSB0aGlzLmNvdXJzZUlkICE9IG51bGw7XHJcbiAgICAgICAgbGV0IGNvdXJzZUlkU3RyOiBzdHJpbmcgPSBTdHJpbmcodGhpcy5jb3Vyc2VJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZENvdXJzZVBlcm1pc3Npb25zSWYoaGFzQ291cnNlSWQsIGNvdXJzZUlkU3RyLCBjb3Vyc2VQZXJtaXNzaW9ucyA9PiBjb3Vyc2VQZXJtaXNzaW9ucy5lZGl0KTtcclxuXHJcbiAgICAgICAgaWYoaGFzQ291cnNlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ291cnNlKHRoaXMuY291cnNlSWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTmV3IENvdXJzZVwiKS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVsb2FkTGFuZGluZ1BhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRDb3Vyc2UoY291cnNlSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXQoY291cnNlSWQpLnRoZW4oY291cnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBjb3Vyc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnNldENvdXJzZVBhZ2VIZWFkZXJCcmVhZGNydW1icyh0aGlzLmNvdXJzZUlkLCB0aGlzLmNvdXJzZSwgdGhpcy5jb3Vyc2VzUm91dGVyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVsb2FkTGFuZGluZ1BhZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkTGFuZGluZ1BhZ2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxhbmRpbmdQYWdlID0ge3JpY2hUZXh0OiBcIlwifTtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUubGFuZGluZ1BhZ2VGb3JtLiRzZXRQcmlzdGluZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUxhbmRpbmdQYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBwcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPElMYW5kaW5nUGFnZT4gPSAodGhpcy5sYW5kaW5nUGFnZS5pZClcclxuICAgICAgICAgICAgPyB0aGlzLmNvdXJzZVNlcnZpY2UudXBkYXRlTGFuZGluZ1BhZ2UodGhpcy5jb3Vyc2VJZCwgdGhpcy5sYW5kaW5nUGFnZSlcclxuICAgICAgICAgICAgOiB0aGlzLmNvdXJzZVNlcnZpY2UuY3JlYXRlTGFuZGluZ1BhZ2UodGhpcy5jb3Vyc2VJZCwgdGhpcy5sYW5kaW5nUGFnZSk7XHJcbiAgICAgICAgcHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFuZGluZ1BhZ2UgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBjb3Vyc2Ugd2VsY29tZSBwYWdlIGhhcyBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5sYW5kaW5nUGFnZUZvcm0uJHNldFByaXN0aW5lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTGFuZGluZ1BhZ2UoKTogYW5ndWxhci5JUHJvbWlzZTxJTGFuZGluZ1BhZ2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldExhbmRpbmdQYWdlKHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmRpbmdQYWdlID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5sYW5kaW5nUGFnZUZvcm0uJHNldFByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYW5kaW5nUGFnZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ291cnNlTm90aWZpY2F0aW9uRGV0YWlsc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjb3Vyc2VzLkNvdXJzZU5vdGlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIGNvdXJzZUlkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcikge1xyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSByb3V0ZVBhcmFtc1tDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IGNvdXJzZUlkU3RyID0gU3RyaW5nKHRoaXMuY291cnNlSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9uc0lmKCEhdGhpcy5jb3Vyc2VJZCwgY291cnNlSWRTdHIsIGNvdXJzZVBlcm1pc3Npb25zID0+IGNvdXJzZVBlcm1pc3Npb25zLmVkaXQpO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgICAgICAudGhlbih1ID0+IHRoaXMuY3VycmVudFVzZXIgPSB1KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldCh0aGlzLmNvdXJzZUlkKS50aGVuKGNvdXJzZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlID0gY291cnNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2Uuc2V0Q291cnNlUGFnZUhlYWRlckJyZWFkY3J1bWJzKHRoaXMuY291cnNlSWQsIHRoaXMuY291cnNlLCB0aGlzLmNvdXJzZXNSb3V0ZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUZW1wbGF0ZUZvckluY2x1ZGUodGVtcGxhdGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51cmwudGVtcGxhdGUodGVtcGxhdGVOYW1lKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ291cnNlTm90aWZpY2F0aW9uRGV0YWlsc0VkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5Db3Vyc2VOb3RpZmljYXRpb25EZXRhaWxzRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2U6IElDb3Vyc2U7XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgY3VycmVudFVzZXI6IElVc2VySW5mbztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJZCA9IHJvdXRlUGFyYW1zW0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNXTtcclxuICAgICAgICBsZXQgY291cnNlSWRTdHIgPSBTdHJpbmcodGhpcy5jb3Vyc2VJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZENvdXJzZVBlcm1pc3Npb25zSWYoISF0aGlzLmNvdXJzZUlkLCBjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMuZWRpdCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgIC50aGVuKHUgPT4gdGhpcy5jdXJyZW50VXNlciA9IHUpO1xyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0KHRoaXMuY291cnNlSWQpLnRoZW4oY291cnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBjb3Vyc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZXRDb3Vyc2VQYWdlSGVhZGVyQnJlYWRjcnVtYnModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2UsIHRoaXMuY291cnNlc1JvdXRlcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRlbXBsYXRlRm9ySW5jbHVkZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVybC50ZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4vQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Vyc2VQYXJ0aWNpcGF0aW9uRm9ybUVkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5Db3Vyc2VQYXJ0aWNpcGF0aW9uRm9ybUVkaXRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIGNvdXJzZUlkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlO1xyXG4gICAgcHVibGljIGNvdXJzZUlzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGlzQ291cnNlTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJZCA9ICRyb3V0ZVBhcmFtc1tDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IGhhc0NvdXJzZUlkOiBib29sZWFuID0gdGhpcy5jb3Vyc2VJZCAhPSBudWxsO1xyXG4gICAgICAgIGxldCBjb3Vyc2VJZFN0cjogc3RyaW5nID0gU3RyaW5nKHRoaXMuY291cnNlSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9uc0lmKGhhc0NvdXJzZUlkLCBjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMuZWRpdCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZENvdXJzZSh0aGlzLmNvdXJzZUlkKS50aGVuKGNvdXJzZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZXRDb3Vyc2VQYWdlSGVhZGVyQnJlYWRjcnVtYnModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2UsIHRoaXMuY291cnNlc1JvdXRlcik7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5nZXQoY291cnNlSWQpLnRoZW4oY291cnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBhbmd1bGFyLmNvcHkoY291cnNlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VcIjtcclxuXHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuXHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzXCI7XHJcbmltcG9ydCB7U2VjdXJlZE9iamVjdFR5cGV9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL1NlY3VyZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLy4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZVBlcm1pc3Npb25zRGVsZWdhdGlvbkNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjb3Vyc2VzLkNvdXJzZVBlcm1pc3Npb25zRGVsZWdhdGlvbkNvbnRyb2xsZXJcIjtcclxuICAgIHByaXZhdGUgREVGQVVMVF9UT1BfTUVOVV9JVEVNOiBzdHJpbmcgPSAncGVybWlzc2lvbnNEZWxlZ2F0aW9uJztcclxuXHJcbiAgICBwdWJsaWMgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2U6IElDb3Vyc2U7XHJcbiAgICBwdWJsaWMgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IEFycmF5PElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzPiA9IFtdO1xyXG4gICAgcHVibGljIG1lbnVLZXk6IGFueTtcclxuICAgIHB1YmxpYyBkaXNhYmxlZFNhdmVCdXR0b246IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNDb3Vyc2VMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBcIlVwbG9hZFwiLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSAkcm91dGVQYXJhbXNbQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBjb3Vyc2VJZFN0cjogc3RyaW5nID0gU3RyaW5nKHRoaXMuY291cnNlSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9ucyhjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMucGVybWlzc2lvbnNEZWxlZ2F0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2UgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5tZW51S2V5ID0ge1xyXG4gICAgICAgICAgICB0b3BNZW51OiB0aGlzLkRFRkFVTFRfVE9QX01FTlVfSVRFTSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRDb3Vyc2UoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLkNPVVJTRSwgY291cnNlSWRTdHIpO1xyXG4gICAgICAgIHRoaXMuc2V0VG9wTWVudSgnY291cnNlJyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5pc0F1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvdXJzZSgpIHtcclxuICAgICAgICBsZXQgcHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlPiA9IHRoaXMuY291cnNlU2VydmljZS5nZXQodGhpcy5jb3Vyc2VJZCk7XHJcbiAgICAgICAgcHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMuY291cnNlKTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnNldENvdXJzZVBhZ2VIZWFkZXJCcmVhZGNydW1icyh0aGlzLmNvdXJzZUlkLCB0aGlzLmNvdXJzZSwgdGhpcy5jb3Vyc2VzUm91dGVyLCBcIkFzc2lnbiBwZXJtaXNzaW9uc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvdXJzZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkUGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoc2VjdXJlZE9iamVjdFR5cGU6IFNlY3VyZWRPYmplY3RUeXBlLCBvYmplY3RJZD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFZpZXdBbmRTdGFydE9iamVjdFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKHNlY3VyZWRPYmplY3RUeXBlLCBvYmplY3RJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaChyPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3Vwcy5wdXNoKHIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmUoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcylcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnVwZGF0ZVZpZXdBbmRTdGFydENvdXJzZVBlcm1pc3Npb25zKHRoaXMuY291cnNlSWQsIHRoaXMucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0LCB0aGlzLmNvdXJzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN1Y2Nlc3NDYWxsYmFjayhyZXN1bHQuaWQpO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc3RvcmFnZS5ub3QuYXZhaWxhYmxlXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTm8gYXZhaWxhYmxlIHN0b3JhZ2UuIFRodW1ibmFpbCBoYXMgbm90IGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVN1Y2Nlc3NDYWxsYmFjayhjb3Vyc2VJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTW9kaWZpY2F0aW9ucyBvZiB0aGUgY291cnNlIGhhdmUgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gW107XHJcbiAgICAgICAgdGhpcy5sb2FkUGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoU2VjdXJlZE9iamVjdFR5cGUuQ09VUlNFLCBTdHJpbmcoY291cnNlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICAvL21lbnVcclxuICAgIHB1YmxpYyBzZXRUb3BNZW51KHRvcE1lbnVLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWVudUtleSA9IHtcclxuICAgICAgICAgICAgdG9wTWVudTogdG9wTWVudUtleSxcclxuICAgICAgICAgICAgbGVmdE1lbnVNb2R1bGU6IHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZSxcclxuICAgICAgICAgICAgbGVmdE1lbnVNb2R1bGVFeHBhbmRlZDogdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQsXHJcbiAgICAgICAgICAgIGxlZnRNZW51SXRlbTogdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVG9wTWVudUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LnRvcE1lbnUgPT0gdG9wTWVudUtleTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNMZWZ0TWVudU1vZHVsZUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcsIGxlZnRNb2R1bGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVLZXkudG9wTWVudSA9PSB0b3BNZW51S2V5ICYmIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkID09IGxlZnRNb2R1bGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTGVmdE1lbnVJdGVtQWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZywgbGVmdE1vZHVsZTogbnVtYmVyLCBpdGVtOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LnRvcE1lbnUgPT0gdG9wTWVudUtleVxyXG4gICAgICAgICAgICAmJiAodGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlID09IGxlZnRNb2R1bGUgfHwgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQgPT0gbGVmdE1vZHVsZSlcclxuICAgICAgICAgICAgJiYgdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbSA9PSBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVkaXJlY3QoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlSWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlICYmIHRoaXMuY291cnNlLnBlcm1pc3Npb25zICYmIHRoaXMuY291cnNlLnBlcm1pc3Npb25zLnZpZXcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybCh0aGlzLmNvdXJzZUlkKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmluZGV4VXJsKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCBJUHJvbWlzZSA9IGFuZ3VsYXIuSVByb21pc2U7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuL1Byb2dyZXNzU2VydmljZVwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge1F1aXpTZXJ2aWNlfSBmcm9tIFwiLi4vcXVpenplcy9RdWl6U2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi4vSVNlbGVjdGFibGVcIjtcclxuaW1wb3J0IHtJU2VjdGlvblByb2dyZXNzfSBmcm9tIFwiLi9tb2RlbHMvSVNlY3Rpb25Qcm9ncmVzc1wiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlUHJvZ3Jlc3N9IGZyb20gXCIuL21vZGVscy9JQ291cnNlUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJVXNlckNlcnRpZmljYXRlfSBmcm9tIFwiLi4vcGVyc29uYWwvbW9kZWxzL0lVc2VyQ2VydGlmaWNhdGVcIjtcclxuaW1wb3J0IHtQZXJzb25hbFNlcnZpY2V9IGZyb20gXCIuLi9wZXJzb25hbC9QZXJzb25hbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVTZXJ2aWNlfSBmcm9tIFwiLi4vY2VydGlmaWNhdGVzL0NlcnRpZmljYXRlU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWR9IGZyb20gXCIuL21vZGVscy9JU2VjdGlvbkluSGllcmFyY2h5XCI7XHJcbmltcG9ydCB7VHJlZUVsZW1lbnRzSW5mb0ZpbGxlcn0gZnJvbSBcIi4uL3RyZWUvVHJlZUVsZW1lbnRzSW5mb0ZpbGxlclwiO1xyXG5pbXBvcnQge0lJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzfSBmcm9tIFwiLi9tb2RlbHMvSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvbW9kZWxzL0V2ZW50XCJcclxuaW1wb3J0IHtDb21tb25TZXJ2aWNlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vblNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL1NlY3VyZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7SVBhcnRpY2lwYXRpb25Gb3JtLCBQYXJ0aWNpcGF0aW9uRm9ybUZpZWxkfSBmcm9tIFwiLi4vY29tbW9uL0lQYXJ0aWNpcGF0aW9uRm9ybVwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlfSBmcm9tIFwiLi4vc3RhdGlzdGljcy9TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5pbXBvcnQge0lQb3dlckJpRW1iZWRkZWRSZXBvcnRFbnRyeX0gZnJvbSBcIi4uL3N0YXRpc3RpY3MvbW9kZWxzL1Bvd2VyQmlFbWJlZGRlZFJlcG9ydEVudHJ5XCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtFbWJlZGRlZFJlcG9ydFR5cGVLZXl9IGZyb20gXCIuLi9FbWJlZGRlZFJlcG9ydFR5cGVLZXlcIjtcclxuaW1wb3J0IHtDb3Vyc2VQcm9ncmVzc1N0YXR1c30gZnJvbSBcIi4vbW9kZWxzL0NvdXJzZVByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7SVF1aXp9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpelwiO1xyXG5pbXBvcnQge0hvbWVSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0hvbWVSb3V0ZXJcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SVBhcnRpY2lwYW50c30gZnJvbSBcIi4uL2hvbWUvbW9kZWxzL0lQYXJ0aWNpcGFudHNcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZUlMVFNlcnZpY2V9IGZyb20gXCIuL0NvdXJzZUlMVFNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV4dGVuZGVkU2VsZWN0YWJsZSBleHRlbmRzIElTZWxlY3RhYmxlIHtcclxuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZVByb2dyZXNzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvdXJzZXMuQ291cnNlUHJvZ3Jlc3NDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHJpdmF0ZSBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudFVzZXI6IElVc2VySW5mbztcclxuICAgIHB1YmxpYyBhbGxvd0V4cG9ydDogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2VVc2VyczogQXJyYXk8SUV4dGVuZGVkU2VsZWN0YWJsZT4gPSBbXTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFVzZXJJZDogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG4gICAgcHVibGljIHNlbGVjdGVkVXNlckZ1bGxOYW1lIDogc3RyaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgcHVibGljIHNlbGVjdGVkU2VjdGlvblByb2dyZXNzOiBJU2VjdGlvblByb2dyZXNzID0ge307XHJcbiAgICBwdWJsaWMgc2VhcmNoVHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIGlzT25seUFjdGl2ZUZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvdXJzZTogSUNvdXJzZSA9IHt9O1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBkaXNhYmxlU2VsZWN0QnV0dG9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyTmFtZVNlYXJjaFN0cmluZzogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyB1c2VyTG9nb25TZWFyY2hTdHJpbmc6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgcHVibGljIGNvdXJzZUNlcnRpZmljYXRlczogQXJyYXk8SVNlbGVjdGFibGU+ID0gW107XHJcbiAgICBwdWJsaWMgdXNlckNlcnRpZmljYXRlczogQXJyYXk8SVVzZXJDZXJ0aWZpY2F0ZT47XHJcblxyXG4gICAgcHVibGljIGlzQ291cnNlVXNlcnNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNVc2VyUHJvZ3Jlc3NMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNDb3Vyc2VMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjb3Vyc2VQcm9ncmVzczogSUNvdXJzZVByb2dyZXNzO1xyXG4gICAgcHVibGljIGNvdXJzZVN0YXJ0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIGNvdXJzZVNlY3Rpb25zOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRbXTtcclxuICAgIHB1YmxpYyB1c2VyUHJvZ3Jlc3NlczogSUNvdXJzZVByb2dyZXNzW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRQcm9ncmVzc0lkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcGFydGljaXBhdGlvbkZvcm06IE1hcDxzdHJpbmcsIGFueT47XHJcbiAgICBwdWJsaWMgcGFydGljaXBhdGlvbkZvcm1GaWVsZHM6IFBhcnRpY2lwYXRpb25Gb3JtRmllbGRbXTtcclxuICAgIHB1YmxpYyBzZWN0aW9uUHJvZ3Jlc3NlczogSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3NbXTtcclxuXHJcbiAgICBwdWJsaWMgcG93ZXJCaVJlcG9ydDogYW55O1xyXG5cclxuICAgIHB1YmxpYyBpc0V4cG9ydENvdXJzZVNjb3Jlck1vZGFsOiBib29sZWFuO1xyXG4gICAgcHVibGljIGZyb21EYXRlRXhwb3J0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdG9EYXRlRXhwb3J0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRUeXBlU2NvcmU6IHN0cmluZyA9ICdBTExfU0NPUkVTJztcclxuICAgIHB1YmxpYyBzZWxlY3RlZFF1aXpJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHF1aXp6ZXM6IEFycmF5PElRdWl6PiA9IFtdO1xyXG4gICAgcHVibGljIHF1aXp6ZXNBcmVMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHBhcnRpY2lwYW50c0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJUGFydGljaXBhbnRzPjtcclxuICAgIHB1YmxpYyBtb2RlbFR5cGU6IHN0cmluZyA9IFwiY291cnNlc1wiO1xyXG4gICAgcHVibGljIHNlbGVjdGVkUHJvZ3Jlc3M7XHJcbiAgICBwdWJsaWMgaW5jbHVkZU5vdFN0YXJ0ZWQgPSB0cnVlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQcm9ncmVzc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcnNvbmFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFF1aXpTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDZXJ0aWZpY2F0ZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIENvbW1vblNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTdGF0aXN0aWNSZXBvcnRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VJTFRTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbnksXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHByb2dyZXNzU2VydmljZTogUHJvZ3Jlc3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsU2VydmljZTogUGVyc29uYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6U2VydmljZTogUXVpelNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2VydGlmaWNhdGVTZXJ2aWNlOiBDZXJ0aWZpY2F0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc3RhdGlzdGljUmVwb3J0c1NlcnZpY2U6IFN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VJTFRTZXJ2aWNlOiBDb3Vyc2VJTFRTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFR5cGUgPSAkcm91dGVQYXJhbXNbSG9tZVJvdXRlci5QQVJUSUNJUEFOVFNfUEFSQU1dIHx8IEhvbWVSb3V0ZXIuUEFSVElDSVBBTlRfVFlQRV9DT1VSU0VTO1xyXG4gICAgICAgIHRoaXMubW9kZWxUeXBlID0gdGhpcy5tb2RlbFR5cGUgIT09IEhvbWVSb3V0ZXIuUEFSVElDSVBBTlRfVFlQRV9DT1VSU0VTICYmIHRoaXMubW9kZWxUeXBlICE9PSBIb21lUm91dGVyLlBBUlRJQ0lQQU5UX1RZUEVfTFAgP1xyXG4gICAgICAgICAgICBIb21lUm91dGVyLlBBUlRJQ0lQQU5UX1RZUEVfQ09VUlNFUyA6IHRoaXMubW9kZWxUeXBlO1xyXG5cclxuICAgICAgICBsZXQgZ3JvdXBSb3V0ZVBhcmFtID0gJHJvdXRlUGFyYW1zW0hvbWVSb3V0ZXIuUEFSVElDSVBBTlRTX0dST1VQX1BBUkFNXSB8fCBcIjBcIjtcclxuICAgICAgICBpZiAoZ3JvdXBSb3V0ZVBhcmFtID09IFwiMVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVHlwZSA9IDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hUeXBlID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSAkcm91dGVQYXJhbXNbQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBjb3Vyc2VJZFN0ciA9IFN0cmluZyh0aGlzLmNvdXJzZUlkKTtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2VcclxuICAgICAgICAgICAgLmRlbWFuZFZpZXdDb3Vyc2VQZXJtaXNzaW9ucyhjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMudmlldyk7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmlzVXNlclJlc3BvbnNpYmxlVGVhY2hlcih0aGlzLmNvdXJzZUlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsb3dFeHBvcnQgPSByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmlzRXhwb3J0QWxsb3dlZCh0aGlzLmNvdXJzZUlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsb3dFeHBvcnQgPSByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucXVpenplc0FyZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucXVpelNlcnZpY2UuZ2V0UXVpenplc0ZvckNvdXJzZSh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gdGhpcy5xdWl6emVzID0gYW5ndWxhci5jb3B5KHJlc3VsdCkpXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpenplc0FyZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUeXBlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkQ291cnNlKClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2FkQ3VycmVudFVzZXIoKSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlLnBlcm1pc3Npb25zLnZpZXdPdGhlclVzZXJzUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VySWQ6IG51bWJlciA9ICRyb3V0ZVBhcmFtc1tDb3Vyc2VzUm91dGVyLlVTRVJfSURfUEFSQU1dIHx8IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmNsdWRlZFVzZXJJZHMgPSB1c2VySWQgIT0gLTEgPyBbdXNlcklkXSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlcnMoaW5jbHVkZWRVc2VySWRzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZCA9IHRoaXMuY3VycmVudFVzZXIuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEud2hlbig8e30+dGhpcy5jdXJyZW50VXNlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdXJzZS5wZXJtaXNzaW9ucy52aWV3T3RoZXJVc2Vyc1Byb2dyZXNzICYmIHRoaXMuY291cnNlVXNlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5yZWplY3QoXCJubyB1c2VycyBmb3IgY291cnNlXCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5hbGwoW3RoaXMuZ2V0QWxsQ291cnNlU2VjdGlvbnMoKSwgdGhpcy5sb2FkQ291cnNlUGFydGljaXBhdGlvbkZvcm1GaWVsZHMoKV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3Vyc2UucGVybWlzc2lvbnMudmlld090aGVyVXNlcnNQcm9ncmVzcyB8fCB0aGlzLnN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUNvdXJzZXNBdHRlbmRlZXNBbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5yZWplY3QoXCJub3QgbmVlZCB0byBsb2FkIG90aGVyIGZvciBhZG1pbiBub3dcIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb2dyZXNzZXNGb3JVc2VyKHRoaXMuY3VycmVudFVzZXIuaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25Qcm9ncmVzc2VzRm9yQ291cnNlUHJvZ3Jlc3ModGhpcy5zZWxlY3RlZFByb2dyZXNzSWQpLFxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvdXJzZUxvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEuYWxsKFtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRDb3Vyc2VDZXJ0aWZpY2F0ZXMoKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFVzZXJDZXJ0aWZpY2F0ZXMoKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRDb3Vyc2VQcm9ncmVzcygpLFxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJJZDogbnVtYmVyID0gJHJvdXRlUGFyYW1zW0NvdXJzZXNSb3V0ZXIuVVNFUl9JRF9QQVJBTV0gfHwgLTE7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlcklkICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkVXNlcjogSUV4dGVuZGVkU2VsZWN0YWJsZSA9IHRoaXMuY291cnNlVXNlcnMuZmlsdGVyKHUgPT4gdS5pZCA9PSB1c2VySWQpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkVXNlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VXNlcihzZWxlY3RlZFVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsVHlwZSA9PSBIb21lUm91dGVyLlBBUlRJQ0lQQU5UX1RZUEVfQ09VUlNFUykge1xyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElQYXJ0aWNpcGFudHM+KCRodHRwLFxyXG4gICAgICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcIi9hcGkvY291cnNlcy9zZWFyY2gvcGFydGljaXBhbnRzL2luZm8/cm9sZT1hdHRlbmRlZU1hbmFnZXJcIikpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElQYXJ0aWNpcGFudHM+KCRodHRwLFxyXG4gICAgICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcIi9hcGkvbGVhcm5pbmdQYXRocy9zZWFyY2gvcGFydGljaXBhbnRzL2luZm8/cm9sZT1hdHRlbmRlZU1hbmFnZXJcIikpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIubGVhcm5lck5hbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhbnRzR3JpZE1vZGVsLmZpbHRlci5vYmplY3ROYW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIuc3RhdHVzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIub2JqZWN0SWQgPSB0aGlzLmNvdXJzZUlkO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhbnRzR3JpZE1vZGVsLmZpbHRlci5ncm91cCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihFdmVudC5DT1VSU0VfUFJPR1JFU1NfUkVTRVRfUFJPR1JFU1MsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInVzZXJQcm9ncmVzc1Jlc2V0XCIsIGV2ZW50KTtcclxuICAgICAgICAgICAgbGV0IHNlbGVjdGVkVXNlcjogSUV4dGVuZGVkU2VsZWN0YWJsZSA9IHRoaXMuY291cnNlVXNlcnMuZmlsdGVyKHUgPT4gdS5zZWxlY3RlZCA9PSB0cnVlKVswXTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkVXNlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFVzZXIoc2VsZWN0ZWRVc2VyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oRXZlbnQuQ09VUlNFX1BST0dSRVNTX1JFTE9BRF9QUk9HUkVTUywgKGV2ZW50LCBhcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwicmVsb2FkUHJvZ3Jlc3NTdGFydGVkXCIsIGV2ZW50LCBhcmdzKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQWxsUHJvZ3Jlc3NEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihFdmVudC5DT1VSU0VfUFJPR1JFU1NfQ0hBTkdFX1BST0dSRVNTX0VYVEVSTkFMTFksIChldmVudCwgYXJncykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCA9IGFyZ3Muc2VsZWN0ZWRQcm9ncmVzc0lkO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRBbGxQcm9ncmVzc0RhdGEoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbi8vLy8vLy8vLy9Cb3RoIHVzZWRcclxuICAgIHByaXZhdGUgbG9hZENvdXJzZSgpOiBJUHJvbWlzZTxJQ291cnNlPiB7XHJcbiAgICAgICAgbGV0IHByb21pc2U6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZT4gPSB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0KHRoaXMuY291cnNlSWQpO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZXRDb3Vyc2VQYWdlSGVhZGVyQnJlYWRjcnVtYnModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2UsIHRoaXMuY291cnNlc1JvdXRlciwgXCJQcm9ncmVzc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEN1cnJlbnRVc2VyKCk6IElQcm9taXNlPElVc2VySW5mbz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHVzZXI7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlQ2VydGlmaWNhdGVzKCk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNlcnRpZmljYXRlU2VydmljZS5nZXRDb3Vyc2VDZXJ0aWZpY2F0ZVRlbXBsYXRlcyh0aGlzLmNvdXJzZUlkKS50aGVuKGNlcnRpZmljYXRlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlQ2VydGlmaWNhdGVzLnNwbGljZSgwKTtcclxuICAgICAgICAgICAgY2VydGlmaWNhdGVzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUNlcnRpZmljYXRlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogYy5jZXJ0aWZpY2F0ZVRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYy5jZXJ0aWZpY2F0ZVRlbXBsYXRlTmFtZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VDZXJ0aWZpY2F0ZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdFVzZXIodXNlcjogSUV4dGVuZGVkU2VsZWN0YWJsZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNVc2VyUHJvZ3Jlc3NMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHVzZXIuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdXNlci5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcklkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJGdWxsTmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlVXNlcnMuZm9yRWFjaCh1ID0+IHUuc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWQgPSB1c2VyLmlkO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyRnVsbE5hbWUgPSB1c2VyLm5hbWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VVc2Vyc1t0aGlzLmNvdXJzZVVzZXJzLmluZGV4T2YodXNlcildLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRQcm9ncmVzc2VzRm9yVXNlcih1c2VyLmlkKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25Qcm9ncmVzc2VzRm9yQ291cnNlUHJvZ3Jlc3ModGhpcy5zZWxlY3RlZFByb2dyZXNzSWQpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFBhcnRpY2lwYXRpb25Gb3JtRm9yUHJvZ3Jlc3ModGhpcy5zZWxlY3RlZFByb2dyZXNzSWQpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZENvdXJzZUNlcnRpZmljYXRlcygpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckNlcnRpZmljYXRlcygpLFxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEJ1dHRvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VyUHJvZ3Jlc3NMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RVc2VyT25CdXR0b25QcmVzc2VkKHVzZXI6IElFeHRlbmRlZFNlbGVjdGFibGUsIGtleUNvZGU6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VXNlcih1c2VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVzZXJzKGluY2x1ZGVkVXNlcklkcz86IG51bWJlcltdKTogSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VVc2VycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5jbGVhckRhdGEoKTtcclxuICAgICAgICB0aGlzLmlzQ291cnNlVXNlcnNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc1NlcnZpY2UuZ2V0Q291cnNlVXNlcnModGhpcy5jb3Vyc2VJZCwgdGhpcy51c2VyTmFtZVNlYXJjaFN0cmluZywgdGhpcy51c2VyTG9nb25TZWFyY2hTdHJpbmcsIHRoaXMuaXNPbmx5QWN0aXZlRmlsdGVyLCBpbmNsdWRlZFVzZXJJZHMpXHJcbiAgICAgICAgICAgIC50aGVuKHVzZXJzID0+IHtcclxuICAgICAgICAgICAgICAgIHVzZXJzLmZvckVhY2godSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVuZGVkVXNlckluZm86IElFeHRlbmRlZFNlbGVjdGFibGUgPSB7c2VsZWN0ZWQ6IGZhbHNlfTtcclxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodSwgZXh0ZW5kZWRVc2VySW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRVc2VySW5mby5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlVXNlcnMucHVzaChleHRlbmRlZFVzZXJJbmZvKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoVHlwZSA9PSAwICYmIHRoaXMuY291cnNlVXNlcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RVc2VyKHRoaXMuY291cnNlVXNlcnNbMF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvdXJzZVVzZXJzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlcnNPbkJ1dHRvblByZXNzZWQoa2V5Q29kZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IDEzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlcnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyU2VhcmNoKCkge1xyXG4gICAgICAgIHRoaXMudXNlck5hbWVTZWFyY2hTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXNlckxvZ29uU2VhcmNoU3RyaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdldFVzZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZUZpbHRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUeXBlID09IDApIHtcclxuICAgICAgICAgICAgbGV0IHBhdGggPSB0aGlzLiRsb2NhdGlvbi5wYXRoKCkuc3BsaXQoXCI/XCIpWzBdO1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwocGF0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlVXNlcnMuZm9yRWFjaCgodTogSUV4dGVuZGVkU2VsZWN0YWJsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcklkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJGdWxsTmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2hvd1Bvd2VyQmlFbWJlZGRlZFJlcG9ydCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVzZXJOYW1lU2VhcmNoU3RyaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVzZXJMb2dvblNlYXJjaFN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5nZXRVc2VycygpO1xyXG4gICAgfVxyXG5cclxuLy8vLy8vLy8vIEluZGl2aWR1YWwgUHJvZ3Jlc3NcclxuICAgIHB1YmxpYyBnZXRBbGxDb3Vyc2VTZWN0aW9ucygpOiBhbmd1bGFyLklQcm9taXNlPElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmdldEFsbFNlY3Rpb25zSW5IaWVyYXJjaHkodGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VjdGlvbnMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBUcmVlRWxlbWVudHNJbmZvRmlsbGVyLmZpbGxIaWVyYXJjaHlJbmZvV2l0aE1heExldmVsKHRoaXMuY291cnNlU2VjdGlvbnMsIE51bWJlci5NQVhfVkFMVUUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VjdGlvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQcm9ncmVzc2VzRm9yVXNlcih1c2VySWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZVByb2dyZXNzW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc1NlcnZpY2UuZ2V0QWxsQ291cnNlUHJvZ3Jlc3Nlc0ZvclVzZXIodGhpcy5jb3Vyc2VJZCwgdXNlcklkKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJQ291cnNlUHJvZ3Jlc3NbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZ3Jlc3NlcyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9ncmVzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkID0gdGhpcy51c2VyUHJvZ3Jlc3Nlc1swXS5pZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5yZWplY3QoXCJObyBwcm9ncmVzcyBmb3IgVXNlcjogXCIgKyB1c2VySWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlclByb2dyZXNzZXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkU2VjdGlvblByb2dyZXNzZXNGb3JDb3Vyc2VQcm9ncmVzcyhjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc1NlcnZpY2UuZ2V0QWxsU2VjdGlvblByb2dyZXNzZXNGb3JDb3Vyc2VQcm9ncmVzcyh0aGlzLmNvdXJzZUlkLCBjb3Vyc2VQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gdGhpcy5zZWN0aW9uUHJvZ3Jlc3NlcyA9IHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRQYXJ0aWNpcGF0aW9uRm9ybUZvclByb2dyZXNzKHNlbGVjdGVkUHJvZ3Jlc3NJZDogbnVtYmVyKTogSVByb21pc2U8TWFwPHN0cmluZywgYW55Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRDb3Vyc2VQcm9ncmVzc1BhcnRpY2lwYXRpb25Gb3JtKHRoaXMuY291cnNlSWQsIHNlbGVjdGVkUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgLnRoZW4oKHBhcnRpY2lwYXRpb25Gb3JtOiBNYXA8c3RyaW5nLCBhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtID0gcGFydGljaXBhdGlvbkZvcm07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydGljaXBhdGlvbkZvcm07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlUGFydGljaXBhdGlvbkZvcm1GaWVsZHMoKTogSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZS5nZXRQYXJ0aWNpcGF0aW9uRm9ybSh0aGlzLmNvdXJzZS5pZCwgU2VjdXJlZE9iamVjdFR5cGUuQ09VUlNFLm5hbWUudG9VcHBlckNhc2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHBhcnRpY2lwYXRpb25Gb3JtOiBJUGFydGljaXBhdGlvbkZvcm0pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm1GaWVsZHMgPSBwYXJ0aWNpcGF0aW9uRm9ybS5maWVsZHM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybUZpZWxkcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2VsZWN0ZWRQcm9ncmVzc0NoYW5nZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlY3Rpb25Qcm9ncmVzc2VzID0gW107XHJcbiAgICAgICAgdGhpcy51c2VyQ2VydGlmaWNhdGVzID0gW107XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTZWN0aW9uUHJvZ3Jlc3Nlc0ZvckNvdXJzZVByb2dyZXNzKHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkKSxcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGFydGljaXBhdGlvbkZvcm1Gb3JQcm9ncmVzcyh0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCksXHJcbiAgICAgICAgICAgIHRoaXMubG9hZENvdXJzZVBhcnRpY2lwYXRpb25Gb3JtRmllbGRzKCksXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlckNlcnRpZmljYXRlcygpXHJcbiAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkNPVVJTRV9QUk9HUkVTU19DSEFOR0VfUFJPR1JFU1NfRVhURVJOQUxMWSxcclxuICAgICAgICAgICAge3NlbGVjdGVkUHJvZ3Jlc3NJZDogdGhpcy5zZWxlY3RlZFByb2dyZXNzSWR9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJEYXRhKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VVc2Vycy5mb3JFYWNoKHUgPT4gdS5zZWxlY3RlZCA9IGZhbHNlKTtcclxuICAgICAgICB0aGlzLnVzZXJQcm9ncmVzc2VzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uUHJvZ3Jlc3NlcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy51c2VyQ2VydGlmaWNhdGVzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZEFsbFByb2dyZXNzRGF0YSgpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRoaXMuc2VjdGlvblByb2dyZXNzZXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXNlckNlcnRpZmljYXRlcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGRhdGFMb2FkaW5nUHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5jb3Vyc2UucGVybWlzc2lvbnMudmlld090aGVyVXNlcnNQcm9ncmVzcykge1xyXG4gICAgICAgICAgICBkYXRhTG9hZGluZ1Byb21pc2VzLnB1c2godGhpcy5nZXRQcm9ncmVzc2VzRm9yVXNlcih0aGlzLnNlbGVjdGVkVXNlcklkKSk7XHJcbiAgICAgICAgICAgIGRhdGFMb2FkaW5nUHJvbWlzZXMucHVzaCh0aGlzLmxvYWRTZWN0aW9uUHJvZ3Jlc3Nlc0ZvckNvdXJzZVByb2dyZXNzKHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkKSk7XHJcbiAgICAgICAgICAgIGRhdGFMb2FkaW5nUHJvbWlzZXMucHVzaCh0aGlzLmxvYWRQYXJ0aWNpcGF0aW9uRm9ybUZvclByb2dyZXNzKHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkKSk7XHJcbiAgICAgICAgICAgIGRhdGFMb2FkaW5nUHJvbWlzZXMucHVzaCh0aGlzLmxvYWRDb3Vyc2VDZXJ0aWZpY2F0ZXMoKSk7XHJcbiAgICAgICAgICAgIGRhdGFMb2FkaW5nUHJvbWlzZXMucHVzaCh0aGlzLmdldFVzZXJDZXJ0aWZpY2F0ZXMoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YUxvYWRpbmdQcm9taXNlcy5wdXNoKHRoaXMuZ2V0UHJvZ3Jlc3Nlc0ZvclVzZXIodGhpcy5zZWxlY3RlZFVzZXJJZCkpO1xyXG4gICAgICAgICAgICBkYXRhTG9hZGluZ1Byb21pc2VzLnB1c2godGhpcy5sb2FkU2VjdGlvblByb2dyZXNzZXNGb3JDb3Vyc2VQcm9ncmVzcyh0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCkpO1xyXG4gICAgICAgICAgICBkYXRhTG9hZGluZ1Byb21pc2VzLnB1c2godGhpcy5sb2FkQ291cnNlQ2VydGlmaWNhdGVzKCkpO1xyXG4gICAgICAgICAgICBkYXRhTG9hZGluZ1Byb21pc2VzLnB1c2godGhpcy5nZXRVc2VyQ2VydGlmaWNhdGVzKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4kcS5hbGwoZGF0YUxvYWRpbmdQcm9taXNlcyk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVc2VyQ2VydGlmaWNhdGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0VXNlckNlcnRpZmljYXRlcyh0aGlzLmNvdXJzZUlkLCB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJDZXJ0aWZpY2F0ZXMgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckNlcnRpZmljYXRlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dQb3dlckJpRW1iZWRkZWRSZXBvcnQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdGF0aXN0aWNSZXBvcnRzU2VydmljZS5nZW5lcmF0ZVBvd2VyQmlSZXBvcnRUb2tlbihFbWJlZGRlZFJlcG9ydFR5cGVLZXlbRW1iZWRkZWRSZXBvcnRUeXBlS2V5LkdST1VQX1BST0dSRVNTXSlcclxuICAgICAgICAgICAgLnRoZW4oKGVtYmVkZGVkUmVwb3J0OiBJUG93ZXJCaUVtYmVkZGVkUmVwb3J0RW50cnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbWJlZGRlZFJlcG9ydCAmJiBlbWJlZGRlZFJlcG9ydC50b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtb2RlbHMgPSB3aW5kb3dbJ3Bvd2VyYmktY2xpZW50J10ubW9kZWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbWJlZENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdyZXBvcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogZW1iZWRkZWRSZXBvcnQucmVwb3J0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtYmVkVXJsOiAnaHR0cHM6Ly9hcHAucG93ZXJiaS5jb20vcmVwb3J0RW1iZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlblR5cGU6IG1vZGVscy5Ub2tlblR5cGUuRW1iZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBlbWJlZGRlZFJlcG9ydC50b2tlbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhbmVFbmFibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGU6IFwiQ291cnNlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogXCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IFwiSW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogW051bWJlcih0aGlzLmNvdXJzZUlkKV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvd2VyQmlSZXBvcnQgPSB3aW5kb3dbJ3Bvd2VyYmknXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZW1iZWQod2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicG93ZXJCaUVtYmVkZGVkUmVwb3J0Q29udGFpbmVyXCIpLCBlbWJlZENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiUG93ZXIgQkkgcmVwb3J0cyBub3QgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJQb3dlciBCSSByZXBvcnRzIG5vdCBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwb3dlckJpUmVwb3J0RnVsbFNjcmVlbigpIHtcclxuICAgICAgICB0aGlzLnBvd2VyQmlSZXBvcnQuZnVsbHNjcmVlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvdXJzZVByb2dyZXNzKCk6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZVByb2dyZXNzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmdldENvdXJzZVByb2dyZXNzKHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVByb2dyZXNzID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVN0YXJ0ZWQgPSAocmVzdWx0LnN0YXR1cyAmJiByZXN1bHQuc3RhdHVzICE9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5OT1RfU1RBUlRFRF0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlUHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleHBvcnRDb3Vyc2VQcm9ncmVzc0NvbXBsZXRpb25TdGF0dXNDc3ZSZXBvcnQoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnM6IGFueSA9IHtcclxuICAgICAgICAgICAgY291cnNlSWQ6IHRoaXMuY291cnNlLmlkLFxyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMuY3VycmVudFVzZXIuaWQsXHJcbiAgICAgICAgICAgIGZyb21EYXRlOiBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5mcm9tRGF0ZUV4cG9ydCksXHJcbiAgICAgICAgICAgIHRvRGF0ZTogTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMudG9EYXRlRXhwb3J0KVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UuZXhwb3J0Q291cnNlUHJvZ3Jlc3NDc3ZSZXBvcnQocGFyYW1ldGVycywgJ0NPVVJTRV9QUk9HUkVTU19DT01QTEVUSU9OX1NUQVRVU19DU1ZfUkVQT1JUJylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHRoaXMuJHdpbmRvdy5vcGVuKHJlc3VsdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleHBvcnRDb3Vyc2VTY29yZXNDc3ZSZXBvcnQoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnM6IGFueSA9IHtcclxuICAgICAgICAgICAgY291cnNlSWQ6IHRoaXMuY291cnNlLmlkLFxyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMuY3VycmVudFVzZXIuaWQsXHJcbiAgICAgICAgICAgIGZyb21EYXRlOiBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5mcm9tRGF0ZUV4cG9ydCksXHJcbiAgICAgICAgICAgIHRvRGF0ZTogTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMudG9EYXRlRXhwb3J0KSxcclxuICAgICAgICAgICAgdHlwZVNjb3JlOiB0aGlzLnNlbGVjdGVkVHlwZVNjb3JlLFxyXG4gICAgICAgICAgICBxdWl6SWQ6IHRoaXMuc2VsZWN0ZWRRdWl6SWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmV4cG9ydENvdXJzZVByb2dyZXNzQ3N2UmVwb3J0KHBhcmFtZXRlcnMsICdDT1VSU0VfU0NPUkVTX0NTVl9SRVBPUlQnKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gdGhpcy4kd2luZG93Lm9wZW4ocmVzdWx0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dFeHBvcnRNb2RhbChpc0V4cG9ydENvdXJzZVNjb3Jlck1vZGFsOiBib29sZWFuKTogdm9pZHtcclxuICAgICAgICB0aGlzLmlzRXhwb3J0Q291cnNlU2NvcmVyTW9kYWwgPSBpc0V4cG9ydENvdXJzZVNjb3Jlck1vZGFsO1xyXG4gICAgICAgIHRoaXMuZnJvbURhdGVFeHBvcnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudG9EYXRlRXhwb3J0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUXVpeklkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZVNjb3JlID0gJ0FMTF9TQ09SRVMnO1xyXG4gICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI2ZpbHRlckRpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlbGVjdGVkUHJvZ3Jlc3NTdGF0dXMoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBwcm9ncmVzcyA9ICEhdGhpcy51c2VyUHJvZ3Jlc3NlcyA/IHRoaXMudXNlclByb2dyZXNzZXMuZmlsdGVyKHAgPT4gcC5pZCA9PT0gdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQpLnBvcCgpOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBwcm9ncmVzcyA/IHByb2dyZXNzLnN0YXR1cyA6IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlbGVjdGVkUHJvZ3Jlc3MoKTogSUNvdXJzZVByb2dyZXNzIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnVzZXJQcm9ncmVzc2VzID8gdGhpcy51c2VyUHJvZ3Jlc3Nlcy5maWx0ZXIocCA9PiBwLmlkID09PSB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCkucG9wKCkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWFjdGl2YXRlQ291cnNlUHJvZ3Jlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJEbyB5b3Ugd2FudCB0byBkZWFjdGl2YXRlIHVzZXIgcHJvZ3Jlc3Mgb24gdGhpcyBjb3Vyc2U/XCIsIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiRGVhY3RpdmF0ZSB1c2VyIHByb2dyZXNzXCJcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UuZGVhY3RpdmF0ZUNvdXJzZVByb2dyZXNzKHRoaXMuY291cnNlLmlkLCB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdChFdmVudC5DT1VSU0VfUFJPR1JFU1NfUkVTRVRfUFJPR1JFU1MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlSUxUU2VydmljZS5yZW1vdmVQYXJ0aWNpcGFudEZyb21JbHRTZXNzaW9uc0J5Q291cnNlSWQodGhpcy5zZWxlY3RlZFVzZXJJZCwgdGhpcy5jb3Vyc2UuaWQpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5jb21tb25FcnJvcihyZXNwb25zZSlcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4vQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Vyc2VSZWxhdGVkUHJvZHVjdHNFZGl0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvdXJzZXMuQ291cnNlUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2U6IElDb3Vyc2U7XHJcblxyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGlzQ291cnNlTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJZCA9ICRyb3V0ZVBhcmFtc1tDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IGhhc0NvdXJzZUlkOiBib29sZWFuID0gdGhpcy5jb3Vyc2VJZCAhPSBudWxsO1xyXG4gICAgICAgIGxldCBjb3Vyc2VJZFN0cjogc3RyaW5nID0gU3RyaW5nKHRoaXMuY291cnNlSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9uc0lmKGhhc0NvdXJzZUlkLCBjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMuZWRpdCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZENvdXJzZSh0aGlzLmNvdXJzZUlkKS50aGVuKGNvdXJzZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZXRDb3Vyc2VQYWdlSGVhZGVyQnJlYWRjcnVtYnMoY291cnNlLmlkLCBjb3Vyc2UsIHRoaXMuY291cnNlc1JvdXRlcik7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5nZXQoY291cnNlSWQpLnRoZW4oY291cnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBhbmd1bGFyLmNvcHkoY291cnNlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblByb2R1Y3RzU2F2ZVN1Y2Nlc3M6ICgpID0+IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZT4gPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZENvdXJzZSh0aGlzLmNvdXJzZUlkKTtcclxuICAgIH07XHJcbn1cclxuIiwiaW1wb3J0IHtJTG1zQVBJMjAwNH0gZnJvbSBcIi4vbW9kZWxzL0lMbXNBUEkyMDA0XCI7XHJcbmltcG9ydCB7Q291cnNlU2Nvcm1BZGFwdGVyfSBmcm9tIFwiLi9Db3Vyc2VTY29ybUFkYXB0ZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Vyc2VTY29ybTIwMDRBZGFwdGVyIGltcGxlbWVudHMgSUxtc0FQSTIwMDQge1xyXG5cclxuICAgIHByaXZhdGUgY291cnNlU2Nvcm1BZGFwdGVyOiBDb3Vyc2VTY29ybUFkYXB0ZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoY291cnNlU2Nvcm1BZGFwdGVyOiBDb3Vyc2VTY29ybUFkYXB0ZXIpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZVNjb3JtQWRhcHRlciA9IGNvdXJzZVNjb3JtQWRhcHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgSW5pdGlhbGl6ZSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNjb3JtQWRhcHRlci5MTVNJbml0aWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFRlcm1pbmF0ZSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNjb3JtQWRhcHRlci5MTVNGaW5pc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgR2V0VmFsdWUoa2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNjb3JtQWRhcHRlci5MTVNHZXRWYWx1ZShrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBTZXRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2Nvcm1BZGFwdGVyLkxNU1NldFZhbHVlKGtleSwgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBDb21taXQoa2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNjb3JtQWRhcHRlci5MTVNDb21taXQoa2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgR2V0TGFzdEVycm9yKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2Nvcm1BZGFwdGVyLkxNU0dldExhc3RFcnJvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZXRFcnJvclN0cmluZygpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNjb3JtQWRhcHRlci5MTVNHZXRFcnJvclN0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZXREaWFnbm9zdGljKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2Nvcm1BZGFwdGVyLkxNU0dldERpYWdub3N0aWMoKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7Q291cnNlRGV0YWlsc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0NvdXJzZURldGFpbHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SUxtc0FQSX0gZnJvbSBcIi4vbW9kZWxzL0lMbXNBUElcIjtcclxuaW1wb3J0IHtTdG9yYWdlV3JhcHBlcn0gZnJvbSBcIi4uL2luZnJhc3RydWN0dXJlL1N0b3JhZ2VcIjtcclxuaW1wb3J0IHtTZWN0aW9uVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1NlY3Rpb25UeXBlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtTZWN0aW9uUHJvZ3Jlc3NTdGF0dXN9IGZyb20gXCIuL21vZGVscy9TZWN0aW9uUHJvZ3Jlc3NTdGF0dXNcIjtcclxuaW1wb3J0IHtWaHNRdWl6U3VydmV5QW5zd2VyaW5nQ29udHJvbGxlcn0gZnJvbSBcIi4uL2NvbXBvbmVudHMvVmhzUXVpelN1cnZleUFuc3dlcmluZ0RpcmVjdGl2ZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZVNjb3JtQWRhcHRlciBpbXBsZW1lbnRzIElMbXNBUEkge1xyXG5cclxuICAgIHByaXZhdGUgU0NPUk1fREFUQV9TVE9SQUdFX0tFWSA9IFwidmhzLnNjb3JtLmRhdGFcIjtcclxuICAgIHByaXZhdGUgU0NPUk1fVFJVRSA9IFwidHJ1ZVwiO1xyXG4gICAgcHJpdmF0ZSBTQ09STV9GQUxTRSA9IFwiZmFsc2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc2Nvcm1EYXRhOiBhbnk7XHJcblxyXG4gICAgLy8gTE1TIEFQSVxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgY291cnNlQ29udHJvbGxlcjogQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSBzdG9yYWdlV3JhcHBlcjogU3RvcmFnZVdyYXBwZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6T3JTdXJ2ZXlBbnN3ZXJpbmc6IFZoc1F1aXpTdXJ2ZXlBbnN3ZXJpbmdDb250cm9sbGVyKSB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTY29ybU1lc3NhZ2UoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzY3JvbURhdGEgbGlzdGVuZWQnKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnRfaWQgPT09ICd1cGRhdGVTdGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGV2ZW50LmRhdGEuZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJvY2Vzc1Njb3JtTWVzc2FnZShkYXRhOiBhbnkpIHtcclxuICAgICAgICBzd2l0Y2ggKGRhdGEuZnVuY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0xNU0luaXRpYWxpemUnIDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxNU0luaXRpYWxpemUoKVxyXG4gICAgICAgICAgICBjYXNlICdMTVNTZXRWYWx1ZScgOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTE1TU2V0VmFsdWUoZGF0YS5rZXksIGRhdGEudmFsdWUpO1xyXG4gICAgICAgICAgICBjYXNlICdMTVNGaW5pc2gnIDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxNU0ZpbmlzaCgpXHJcbiAgICAgICAgICAgIGNhc2UgJ0xNU0NvbW1pdCcgOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTE1TQ29tbWl0KGRhdGEua2V5KVxyXG4gICAgICAgICAgICBjYXNlICdMTVNUZXJtaW5hdGUnIDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxNU1Rlcm1pbmF0ZSgpXHJcbiAgICAgICAgICAgIGNhc2UgJ3NhdmVTY29ybURhdGEnIDpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nvcm1EYXRhID0gZGF0YS5rZXk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zYXZlU2Nvcm1EYXRhKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXRTY29ybURhdGEoKSB7XHJcbiAgICAgICAgdGhpcy5zY29ybURhdGEgPSBudWxsO1xyXG4gICAgICAgIGxldCBhbGxEYXRhID0gdGhpcy5zdG9yYWdlV3JhcHBlci5nZXQodGhpcy5TQ09STV9EQVRBX1NUT1JBR0VfS0VZKTtcclxuICAgICAgICBpZiAoYWxsRGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgcHJvZ3Jlc3NEYXRhID0gYWxsRGF0YVt0aGlzLmNvdXJzZUNvbnRyb2xsZXIuY291cnNlUHJvZ3Jlc3NJZF07XHJcbiAgICAgICAgICAgIGlmIChwcm9ncmVzc0RhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nvcm1EYXRhID0gcHJvZ3Jlc3NEYXRhW3RoaXMuY291cnNlQ29udHJvbGxlci5zZWxlY3RlZFNlY3Rpb24uaWRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5zY29ybURhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zY29ybURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uSWQ6IHRoaXMuY291cnNlQ29udHJvbGxlci5zZWxlY3RlZFNlY3Rpb24uaWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGFkZGl0aW9uID0ge1xyXG5cdFx0XHRcImNtaS5jb3JlLmxlc3Nvbl9tb2RlXCIgOiB0aGlzLmNvdXJzZUNvbnRyb2xsZXIuc2VsZWN0ZWRTZWN0aW9uLnN0YXR1cyA9PT0gU2VjdGlvblByb2dyZXNzU3RhdHVzW1NlY3Rpb25Qcm9ncmVzc1N0YXR1cy5PUEVORURdLFxyXG5cdFx0XHRcImNtaS5jb3JlLnN0dWRlbnRfbmFtZVwiIDogdGhpcy5jb3Vyc2VDb250cm9sbGVyLmN1cnJlbnRVc2VyLmZ1bGxOYW1lLFxyXG5cdFx0XHRcImNtaS5jb3JlLnN0dWRlbnRfaWRcIiA6IHRoaXMuY291cnNlQ29udHJvbGxlci5jdXJyZW50VXNlci5pZCxcclxuXHRcdFx0XCJ2aHMuY3VycmVudF9zZWN0aW9uLnN0YXR1c1wiIDogdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNlbGVjdGVkU2VjdGlvbi5zdGF0dXMsXHJcblx0XHRcdC8vXCJ2aHMuY3VycmVudF9zZWN0aW9uLnF1aXpfdGFrZW5cIiA6IHRoaXMucXVpek9yU3VydmV5QW5zd2VyaW5nLnF1aXpSZXN1bHRzLmxlbmd0aCA+IDAsXHJcblx0XHRcdC8vXCJ2aHMuY3VycmVudF9zZWN0aW9uLnF1aXpfcGFzc2VkXCIgOiB0aGlzLnF1aXpPclN1cnZleUFuc3dlcmluZy5pc1F1aXpQYXNzZWQoKSxcclxuXHRcdFx0XCJ2aHMuY3VycmVudF9zZWN0aW9uLmNvdXJzZV9jZXJ0aWZpY2F0ZXNcIiA6IHRoaXMuY291cnNlQ29udHJvbGxlci5jb3Vyc2VDZXJ0aWZpY2F0ZXNcclxuXHRcdH07XHJcblx0XHRcclxuICAgICAgICAoPGFueT5PYmplY3QpLmFzc2lnbih0aGlzLnNjb3JtRGF0YSwgYWRkaXRpb24pO1xyXG5cdFx0XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Nvcm1EYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2F2ZVNjb3JtRGF0YSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2Nvcm1EYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFsbERhdGEgPSB0aGlzLnN0b3JhZ2VXcmFwcGVyLmdldCh0aGlzLlNDT1JNX0RBVEFfU1RPUkFHRV9LRVkpO1xyXG4gICAgICAgIGlmICghYWxsRGF0YSkge1xyXG4gICAgICAgICAgICBhbGxEYXRhID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwcm9ncmVzc0RhdGEgPSBhbGxEYXRhW3RoaXMuY291cnNlQ29udHJvbGxlci5jb3Vyc2VQcm9ncmVzc0lkXTtcclxuICAgICAgICBpZiAoIXByb2dyZXNzRGF0YSkge1xyXG4gICAgICAgICAgICBhbGxEYXRhW3RoaXMuY291cnNlQ29udHJvbGxlci5jb3Vyc2VQcm9ncmVzc0lkXSA9IHt9O1xyXG4gICAgICAgICAgICBwcm9ncmVzc0RhdGEgPSBhbGxEYXRhW3RoaXMuY291cnNlQ29udHJvbGxlci5jb3Vyc2VQcm9ncmVzc0lkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJvZ3Jlc3NEYXRhW3RoaXMuc2Nvcm1EYXRhLnNlY3Rpb25JZF0gPSB0aGlzLnNjb3JtRGF0YTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VXcmFwcGVyLnB1dCh0aGlzLlNDT1JNX0RBVEFfU1RPUkFHRV9LRVksIGFsbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0SW50ZXJhY3Rpb25zQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgaW50ZXJhY3Rpb25zTnVtYmVyczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBsZXQgaW50ZXJhY3Rpb25SZWdFeHAgPSAvXmNtaVxcLmludGVyYWN0aW9uc1xcLihcXGQrKVxcLi4qJC87XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5zY29ybURhdGEpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgJiYga2V5LmluZGV4T2YoXCJjbWkuaW50ZXJhY3Rpb25zLlwiKSA9PSAwICYmIGludGVyYWN0aW9uUmVnRXhwLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGtleS5tYXRjaChpbnRlcmFjdGlvblJlZ0V4cCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyYWN0aW9uc051bWJlcnMuaW5kZXhPZihyZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbnNOdW1iZXJzLnB1c2gocmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9uc051bWJlcnMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2F2ZUludGVyYWN0aW9ucygpOiB2b2lkIHtcclxuICAgICAgICBsZXQgc2Nvcm1TZXNzaW9uRGF0YSA9IHt9O1xyXG4gICAgICAgIGxldCBzdXNwZW5kRGF0YSA9IG51bGw7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5zY29ybURhdGEpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgJiYga2V5LmluZGV4T2YoXCJjbWkuaW50ZXJhY3Rpb25zLlwiKSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzY29ybVNlc3Npb25EYXRhW2tleV0gPSB0aGlzLnNjb3JtRGF0YVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2Nvcm1EYXRhW1wiY21pLnN1c3BlbmRfZGF0YVwiXSkge1xyXG4gICAgICAgICAgICBzdXNwZW5kRGF0YSA9IHRoaXMuc2Nvcm1EYXRhW1wiY21pLnN1c3BlbmRfZGF0YVwiXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNjb3JtU2Vzc2lvbkRhdGEpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNhdmVVc2VyU2Nvcm1TZXNzaW9uRGF0YShKU09OLnN0cmluZ2lmeShzY29ybVNlc3Npb25EYXRhKSwgc3VzcGVuZERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgTE1TSW5pdGlhbGl6ZSgpOiBhbnkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdMTVNJbml0aWFsaXplJyk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNlY3Rpb25TdGF0dXNVcGRhdGVWaWFMbXNBcGlPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmluaXRTY29ybURhdGEoKTtcclxuICAgICAgICB0aGlzLmNvdXJzZUNvbnRyb2xsZXIuZ29Ub0Z1bGxTY3JlZW5Nb2RlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuU0NPUk1fVFJVRTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgTE1TRmluaXNoKCk6IGFueSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ0xNU0ZpbmlzaCcpO1xyXG4gICAgICAgIHRoaXMuY291cnNlQ29udHJvbGxlci5zZWN0aW9uU3RhdHVzVXBkYXRlVmlhTG1zQXBpT25seSA9IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5TQ09STV9UUlVFO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBMTVNHZXRWYWx1ZShrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2NhbGwgTE1TR2V0VmFsdWUgZm9yICcgKyBrZXkpO1xyXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjbWkuY29yZS5sZXNzb25fbW9kZVwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlQ29udHJvbGxlci5zZWxlY3RlZFNlY3Rpb24uc3RhdHVzID09PSBTZWN0aW9uUHJvZ3Jlc3NTdGF0dXNbU2VjdGlvblByb2dyZXNzU3RhdHVzLk9QRU5FRF1cclxuICAgICAgICAgICAgICAgID8gXCJyZXZpZXdcIjogXCJub3JtYWxcIjtcclxuICAgICAgICAgICAgY2FzZSBcImNtaS5jb3JlLmxlc3Nvbl9zdGF0dXNcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAgXCJpbmNvbXBsZXRlXCIgfHwgdGhpcy5zY29ybURhdGFba2V5XSA7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjbWkuY29yZS5sZXNzb25fbG9jYXRpb25cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjb3JtRGF0YVtrZXldID8gdGhpcy5zY29ybURhdGFba2V5XSA6IFwiXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjbWkuc3VzcGVuZF9kYXRhXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY29ybURhdGFba2V5XSA/IHRoaXMuc2Nvcm1EYXRhW2tleV0gOiBcIlwiO1xyXG4gICAgICAgICAgICBjYXNlIFwiY21pLmNvcmUuZW50cnlcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjb3JtRGF0YVtcImNtaS5zdXNwZW5kX2RhdGFcIl0gPyBcInJlc3VtZVwiIDogXCJcIjtcclxuICAgICAgICAgICAgY2FzZSBcImNtaS5jb3JlLnN0dWRlbnRfbmFtZVwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlQ29udHJvbGxlci5jdXJyZW50VXNlci5mdWxsTmFtZTtcclxuICAgICAgICAgICAgY2FzZSBcImNtaS5jb3JlLnN0dWRlbnRfaWRcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZUNvbnRyb2xsZXIuY3VycmVudFVzZXIuaWQ7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjbWkubGF1bmNoX2RhdGFcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjb3JtRGF0YVtrZXldID8gdGhpcy5zY29ybURhdGFba2V5XSA6IFwiXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjbWkuaW50ZXJhY3Rpb25zLl9jb3VudFwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW50ZXJhY3Rpb25zQ291bnQoKTtcclxuICAgICAgICAgICAgY2FzZSBcInZocy5jdXJyZW50X3NlY3Rpb24uc3RhdHVzXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNlbGVjdGVkU2VjdGlvbi5zdGF0dXM7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2aHMuY3VycmVudF9zZWN0aW9uLnF1aXpfdGFrZW5cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1aXpPclN1cnZleUFuc3dlcmluZy5xdWl6UmVzdWx0cy5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5xdWl6X3Bhc3NlZFwiOlxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnTE1TOiBpc1F1aXpQYXNzZWQoKTogJyArIHRoaXMuaXNRdWl6UGFzc2VkKCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVpek9yU3VydmV5QW5zd2VyaW5nLmlzUXVpelBhc3NlZCgpO1xyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5xdWl6X3Bhc3NlZF9zY29yZVwiOlxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnTE1TOiBxdWl6X3Bhc3NlZF9zY29yZTogJyArIHRoaXMuaXNRdWl6UGFzc2VkKCkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1heFNjb3JlID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWl6T3JTdXJ2ZXlBbnN3ZXJpbmcucXVpelJlc3VsdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFNjb3JlID0gdGhpcy5xdWl6T3JTdXJ2ZXlBbnN3ZXJpbmcucXVpelJlc3VsdHNbaV0uY29ycmVjdEFuc3dlcnNQZXJjZW50YWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcmUgPiBtYXhTY29yZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhTY29yZSA9IGN1cnJlbnRTY29yZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdMTVM6IHF1aXpfcGFzc2VkX3Njb3JlOiAnICsgbWF4U2NvcmUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1heFNjb3JlO1xyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5xdWl6X2xhc3Rfc2NvcmVcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1aXpPclN1cnZleUFuc3dlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIC5xdWl6UmVzdWx0c1t0aGlzLnF1aXpPclN1cnZleUFuc3dlcmluZy5xdWl6UmVzdWx0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAgICAgICAgIC5jb3JyZWN0QW5zd2Vyc1BlcmNlbnRhZ2U7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2aHMuY3VycmVudF9zZWN0aW9uLnF1aXpfbGFzdF9wYXNzZWRcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1aXpPclN1cnZleUFuc3dlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIC5xdWl6UmVzdWx0c1t0aGlzLnF1aXpPclN1cnZleUFuc3dlcmluZy5xdWl6UmVzdWx0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGF0dXM7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2aHMuY3VycmVudF9zZWN0aW9uLnF1aXpfbGFzdF9jb3JyZWN0X2Fuc3dlcnNcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1aXpPclN1cnZleUFuc3dlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIC5xdWl6UmVzdWx0c1t0aGlzLnF1aXpPclN1cnZleUFuc3dlcmluZy5xdWl6UmVzdWx0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAgICAgICAgIC5jb3JyZWN0QW5zd2Vyc0NvdW50O1xyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5xdWl6X3F1ZXN0aW9uc19jb3VudFwiOlxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygncXVpemVzIGNvdW50ID0gJyArIHRoaXMuc2VjdGlvblF1aXoucXVlc3Rpb25zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWl6T3JTdXJ2ZXlBbnN3ZXJpbmcucXVpei5xdWVzdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5jb3Vyc2UtY2VydGlmaWNhdGVzXCI6XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ2VydGlmaWNhdGVzOiAnICsgdGhpcy5jb3Vyc2VDb250cm9sbGVyLmNvdXJzZUNlcnRpZmljYXRlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlQ29udHJvbGxlci5jb3Vyc2VDZXJ0aWZpY2F0ZXM7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICYmIGtleS5pbmRleE9mKFwiY21pLlwiKSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Nvcm1EYXRhW2tleV0gfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIExNU1NldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbCBMTVNTZXRWYWx1ZSBmb3IgJyArIGtleSArIFwiL1wiICsgdmFsdWUpO1xyXG4gICAgICAgIGlmIChrZXkgJiYga2V5LmluZGV4T2YoXCJjbWkuXCIpID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zY29ybURhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09IFwiY21pLmNvcmUubGVzc29uX2xvY2F0aW9uXCIgfHwga2V5ID09IFwiY21pLmxvY2F0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVNjb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2aHMuY3VycmVudF9zZWN0aW9uLnF1aXouY29tcGxldGUubGlzdGVuZXJcIjpcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpek9yU3VydmV5QW5zd2VyaW5nLmxtc1F1aXpDb21wbGV0ZUxpc3RlbmVycy5wdXNoKDwoKSA9PiBhbnk+IHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5jb3Vyc2UtY2VydGlmaWNhdGUtaWRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlQ29udHJvbGxlci5jZXJ0aWZpY2F0ZVBhcmFtZXRlcnMuY2VydGlmaWNhdGVJZCA9IHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjbWkuY29yZS5sZXNzb25fc3RhdHVzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVMZXNzb25TdGF0dXModmFsdWUsIFwiY29tcGxldGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuU0NPUk1fVFJVRTtcclxuICAgICAgICAgICAgY2FzZSBcImNtaS5zdWNjZXNzX3N0YXR1c1wiOiAvL1NDT1JNIDIwMDRcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUxlc3NvblN0YXR1cyh2YWx1ZSwgXCJwYXNzZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5TQ09STV9UUlVFO1xyXG4gICAgICAgICAgICBjYXNlIFwiY21pLmNvbXBsZXRpb25fc3RhdHVzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVMZXNzb25TdGF0dXModmFsdWUsIFwiY29tcGxldGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuU0NPUk1fVFJVRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlTGVzc29uU3RhdHVzKHZhbHVlOiBzdHJpbmcsIGNoZWNrU3RhdHVzQnlWZXJzaW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gY2hlY2tTdGF0dXNCeVZlcnNpb24gJiZcclxuICAgICAgICAgICAgdGhpcy5zY29ybURhdGEgJiYgdGhpcy5zY29ybURhdGEuc2VjdGlvbklkID09IHRoaXMuY291cnNlQ29udHJvbGxlci5zZWxlY3RlZFNlY3Rpb24uaWQgJiZcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNlbGVjdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OXVxyXG4gICAgICAgICAgICAmJiAhKDxhbnk+IHRoaXMuY291cnNlQ29udHJvbGxlci5zZWxlY3RlZFNlY3Rpb24pLmNvbXBsZXRlZExvY2FseSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZUNvbnRyb2xsZXIuc2V0U2VjdGlvblN0YXR1c09wZW5lZElmTmVlZGVkKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNlbGVjdGVkU2VjdGlvbi5pZCwgdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNlbGVjdGVkU2VjdGlvbi5tb2R1bGVJZCwgdHJ1ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAoPGFueT4gdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNlbGVjdGVkU2VjdGlvbikuY29tcGxldGVkTG9jYWx5ID0gdHJ1ZTsgLy9pZ25vcmUgZnVydGhlciBjYWxsIGZvciBjb21wbGV0ZSB2aWEgQVBJXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgTE1TQ29tbWl0KGtleTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnQ2FsbCBmb3IgTE1TQ29tbWl0ICcgICsga2V5KTtcclxuICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVTY29ybURhdGEoKTtcclxuICAgICAgICAgICAgdGhpcy5zYXZlSW50ZXJhY3Rpb25zKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlNDT1JNX1RSVUU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2aHMuY3VycmVudF9zZWN0aW9uLnN0YXJ0X3F1aXpcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1aXpPclN1cnZleUFuc3dlcmluZy5zdGFydCgpO1xyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5nb19iYWNrXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3Vyc2VDb250cm9sbGVyLnByZXZTZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlQ29udHJvbGxlci5zZXRMZWZ0TWVudUl0ZW0odGhpcy5jb3Vyc2VDb250cm9sbGVyLnByZXZTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5nb19uZXh0XCI6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3Vyc2VDb250cm9sbGVyLm5leHRTZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlQ29udHJvbGxlci5zZXRMZWZ0TWVudUl0ZW0odGhpcy5jb3Vyc2VDb250cm9sbGVyLm5leHRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5nb190b19zdGFydFwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlQ29udHJvbGxlci5tb2R1bGVzICYmIHRoaXMuY291cnNlQ29udHJvbGxlci5tb2R1bGVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmNvdXJzZUNvbnRyb2xsZXIuc2VjdGlvbnNNYXAuZ2V0KHRoaXMuY291cnNlQ29udHJvbGxlci5tb2R1bGVzWzBdLmlkKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNldExlZnRNZW51SXRlbShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNlY3Rpb25zTWFwLmdldCh0aGlzLmNvdXJzZUNvbnRyb2xsZXIubW9kdWxlc1swXS5pZClbMF0uc2VjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcInZocy5jdXJyZW50X3NlY3Rpb24ucXVpei5oaWRlX2luZm9cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZUNvbnRyb2xsZXIuc2hvd1F1aXpJbmZvU2VjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5xdWl6LmhpZGVfcmVzdWx0c1wiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlQ29udHJvbGxlci5zaG93UXVpelJlc3VsdHNTZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2aHMuY3VycmVudF9zZWN0aW9uLnF1aXouaGlkZV9zdGFydF9zZWN0aW9uXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNob3dRdWl6U3RhcnRTZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2aHMuY3VycmVudF9zZWN0aW9uLmxhbmRpbmdfcGFnZS5oaWRlX3N0YXJ0X3NlY3Rpb25cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZUNvbnRyb2xsZXIuc2hvd0xhbmRpbmdQYWdlU3RhcnRDb3Vyc2VCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgY2FzZSBcInZocy5zdGFydF9jb3Vyc2VcIjpcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb3Vyc2VDb250cm9sbGVyLnNob3dQYXJ0aWNpcGF0aW9uRm9ybSAmJiB0aGlzLmNvdXJzZUNvbnRyb2xsZXIuc2hvd1N0YXJ0QnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlQ29udHJvbGxlci5wYXJ0aWNpcGF0aW9uRm9ybS5maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VDb250cm9sbGVyLnN0YXJ0V2l0aFBhcnRpY2lwYXRpb25Gb3JtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlQ29udHJvbGxlci5zdGFydENvdXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwidmhzLmN1cnJlbnRfc2VjdGlvbi5nZXRfY2VydGlmaWNhdGVcIjpcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1aXpPclN1cnZleUFuc3dlcmluZy5pc1F1aXpQYXNzZWQoKSAmJiB0aGlzLmNvdXJzZUNvbnRyb2xsZXIuY291cnNlQ2VydGlmaWNhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUNvbnRyb2xsZXIuZ2V0Q2VydGlmaWNhdGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiWW91IGNhbiBub3QgZ2VuZXJhdGUgYSBjZXJ0aWZpY2F0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBMTVNUZXJtaW5hdGUoKTogYW55IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbCBMTVNUZXJtaW5hdGUgZm9yICcgKyBrZXkgKyBcIi9cIiArIHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VDb250cm9sbGVyLmhpZGVTY29ybVBvcHVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIExNU0dldExhc3RFcnJvcigpOiBhbnkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdMTVNHZXRMYXN0RXJyb3IgTm90IGltcGxlbWVudGVkIG5vdycpO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBMTVNHZXRFcnJvclN0cmluZygpOiBhbnkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdMTVNHZXRFcnJvclN0cmluZyBOb3QgaW1wbGVtZW50ZWQgbm93Jyk7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIExNU0dldERpYWdub3N0aWMoKTogYW55IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnTE1TR2V0RGlhZ25vc3RpYyBOb3QgaW1wbGVtZW50ZWQgbm93Jyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuU0NPUk1fRkFMU0U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZW5kIExNUyBBUElcclxufSIsImltcG9ydCB7SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7SU1hdGVyaWFsfSBmcm9tIFwiLi8uLi9tYXRlcmlhbHMvbW9kZWxzL0lNYXRlcmlhbFwiO1xyXG5pbXBvcnQge0lNb2R1bGV9IGZyb20gXCIuL21vZGVscy9JTW9kdWxlXCI7XHJcbmltcG9ydCB7SVNlY3Rpb259IGZyb20gXCIuL21vZGVscy9JU2VjdGlvblwiO1xyXG5pbXBvcnQge0lTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZH0gZnJvbSBcIi4vbW9kZWxzL0lTZWN0aW9uSW5IaWVyYXJjaHlcIjtcclxuaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7SVF1aXp9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpelwiO1xyXG5pbXBvcnQge0lQYXJ0aWNpcGF0aW9uRm9ybX0gZnJvbSBcIi4uL2NvbW1vbi9JUGFydGljaXBhdGlvbkZvcm1cIjtcclxuaW1wb3J0IHtJTGFuZGluZ1BhZ2V9IGZyb20gXCIuL21vZGVscy9JTGFuZGluZ1BhZ2VcIjtcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge0lEaXNjdXNzaW9uVGhyZWFkfSBmcm9tIFwiLi9tb2RlbHMvSURpc2N1c3Npb25UaHJlYWRcIjtcclxuaW1wb3J0IHtJRGlzY3Vzc2lvblRocmVhZENvbW1lbnR9IGZyb20gXCIuL21vZGVscy9JRGlzY3Vzc2lvblRocmVhZENvbW1lbnRcIjtcclxuaW1wb3J0IHtJVXNlckNlcnRpZmljYXRlfSBmcm9tIFwiLi4vcGVyc29uYWwvbW9kZWxzL0lVc2VyQ2VydGlmaWNhdGVcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRofSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aFwiO1xyXG5pbXBvcnQge1NlY3VyZWRPYmplY3RUeXBlfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvU2VjdXJlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IElSZXF1ZXN0U2hvcnRjdXRDb25maWcgPSBhbmd1bGFyLklSZXF1ZXN0U2hvcnRjdXRDb25maWc7XHJcbmltcG9ydCB7SU1hcHBlZFNlY3Rpb25zUGFpcn0gZnJvbSBcIi4vbW9kZWxzL0lNYXBwZWRTZWN0aW9uc1BhaXJcIjtcclxuaW1wb3J0IHtJRW5yb2xsbWVudENvbmZpZ3VyYXRpb259IGZyb20gXCIuL21vZGVscy9JRW5yb2xsbWVudENvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtJRW5yb2xsU2VhdENyZWF0aW9uSW5mb30gZnJvbSBcIi4vbW9kZWxzL0lFbnJvbGxTZWF0Q3JlYXRpb25JbmZvXCI7XHJcbmltcG9ydCB7SUFwcHJvdmVFbnJvbGxtZW50U2VhdFJlc3VsdEluZm99IGZyb20gXCIuL21vZGVscy9JQXBwcm92ZUVucm9sbG1lbnRTZWF0UmVzdWx0SW5mb1wiO1xyXG5pbXBvcnQge0lFbnJvbGxtZW50U2VhdH0gZnJvbSBcIi4vbW9kZWxzL0lFbnJvbGxtZW50U2VhdFwiO1xyXG5pbXBvcnQge0lWSUxUU2Vzc2lvbn0gZnJvbSBcIi4uL3dlYmluYXJzL21vZGVscy9JVklMVFNlc3Npb25cIjtcclxuaW1wb3J0IHtJVklMVFNlc3Npb25QYXJ0aWNpcGFudH0gZnJvbSBcIi4uL3dlYmluYXJzL21vZGVscy9JVklMVFNlc3Npb25QYXJ0aWNpcGFudFwiO1xyXG5pbXBvcnQgeyBJTW9kdWxlQW5kU2VjdGlvbiB9IGZyb20gXCIuL21vZGVscy9JTW9kdWxlQW5kU2VjdGlvblwiO1xyXG5pbXBvcnQgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmcgPSBhbmd1bGFyLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnO1xyXG5pbXBvcnQge0lNZWV0aW5nU2V0dGluZ3N9IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvSU1lZXRpbmdTZXR0aW5nc1wiO1xyXG5pbXBvcnQge1Nlc3Npb25TY2hlZHVsaW5nSW5mb30gZnJvbSAnLi4vd2ViaW5hcnMvbW9kZWxzL1Nlc3Npb25TY2hlZHVsaW5nSW5mbyc7XHJcbmltcG9ydCB7RXhwaXJhdGlvbkNhY2hlfSBmcm9tIFwiLi4vY29tbW9uL0V4cGlyYXRpb25DYWNoZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7SVNlY3Rpb25TdW1tYXJ5fSBmcm9tIFwiLi9tb2RlbHMvSVNlY3Rpb25TdW1tYXJ5XCI7XHJcbmltcG9ydCB7SUNvdXJzZVByb2dyZXNzfSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVByb2dyZXNzXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuXHJcbmludGVyZmFjZSBJRXh0Q291cnNlIGV4dGVuZHMgSUNvdXJzZSB7XHJcbiAgICBwcmV2aWV3PzogYW55O1xyXG4gICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM/OiBBcnJheTxJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcz47XHJcbiAgICByZXNldFByZXZpZXc/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ291cnNlU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvdXJzZXMuQ291cnNlU2VydmljZVwiO1xyXG5cclxuICAgIHByaXZhdGUgZXhwQ2FjaGUgPSBuZXcgRXhwaXJhdGlvbkNhY2hlKCk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY2VcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY2U6IGFuZ3VsYXIuSVNDRVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmaW5kQ291cnNlc0J5TWF0ZXJpYWwobWF0ZXJpYWxJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJQ291cnNlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzL2J5L21hdGVyaWFsLzptYXRlcmlhbElkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjptYXRlcmlhbElkXCIsIG1hdGVyaWFsSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldChpZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmlkP1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSlcclxuICAgICAgICAgICAgLmNhdGNoKHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICB0b3BpYzogJ0ZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY291cnNlIGRldGFpbHMnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VGb3JQcm9kdWN0KGlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElDb3Vyc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86aWQvcHJvZHVjdFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZU5hbWUoaWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmlkL25hbWVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VTdGFydFBlcm1pc3Npb24oaWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzppZC9zdGFydFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUNvdXJzZUJ1bmRsZShjb3Vyc2VJZDogbnVtYmVyLCBjb3Vyc2VWZXJzaW9uOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElCdW5kbGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2J1bmRsZXM/Y291cnNlVmVyc2lvbj06Y291cnNlVmVyc2lvblwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VWZXJzaW9uXCIsIGNvdXJzZVZlcnNpb24pXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZShjb3Vyc2U6IElFeHRDb3Vyc2UsIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzOiBBcnJheTxJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcz4sIHByZXZpZXc/OiBGaWxlKTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlPiB7XHJcbiAgICAgICAgY291cnNlLnByZXZpZXcgPSBwcmV2aWV3ICE9IG51bGxcclxuICAgICAgICAgICAgPyB7bmFtZTogcHJldmlldy5uYW1lLCB0eXBlOiBwcmV2aWV3LnR5cGUsIHNpemU6IHByZXZpZXcuc2l6ZX1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIGNvdXJzZS5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyA9IHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvY291cnNlc1wiKSwgY291cnNlKS50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShjb3Vyc2U6IElFeHRDb3Vyc2UsIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzOiBBcnJheTxJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcz4sIGlzUmVzZXRQcmV2aWV3OiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICBwcmV2aWV3PzogRmlsZSk6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZT4ge1xyXG4gICAgICAgIGNvdXJzZS5wcmV2aWV3ID0gcHJldmlldyAhPSBudWxsXHJcbiAgICAgICAgICAgID8ge25hbWU6IHByZXZpZXcubmFtZSwgdHlwZTogcHJldmlldy50eXBlLCBzaXplOiBwcmV2aWV3LnNpemV9XHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjb3Vyc2UucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMgPSBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcztcclxuICAgICAgICBjb3Vyc2UucmVzZXRQcmV2aWV3ID0gaXNSZXNldFByZXZpZXc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2NvdXJzZXNcIiksIGNvdXJzZSkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVDb3Vyc2VSZXF1aXJlZEVsZWN0aXZlc051bWJlcihjb3Vyc2U6IElFeHRDb3Vyc2UpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9jb3Vyc2VzL3VwZGF0ZUNvdXJzZVJlcXVpcmVkRWxlY3RpdmVzTnVtYmVyXCIpLCBjb3Vyc2UpLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVmlld0FuZFN0YXJ0Q291cnNlUGVybWlzc2lvbnMoY291cnNlSWQ6IG51bWJlciwgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IEFycmF5PElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzPik6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdXBkYXRlVmlld0FuZFN0YXJ0UGVybWlzc2lvbnNcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzXHJcbiAgICAgICAgKS50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YVtcImNvdXJzZVwiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvcHkoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvY29weVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1vZHVsZXMoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SU1vZHVsZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86aWQvbW9kdWxlc1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1vZHVsZVNlY3Rpb25zKGNvdXJzZUlkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvbW9kdWxlcy86bW9kdWxlSWQvc2VjdGlvbnNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bW9kdWxlSWRcIiwgbW9kdWxlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZU1vZHVsZShjb3Vyc2VJZDogbnVtYmVyLCBtb2R1bGU6IElNb2R1bGUpOiBhbmd1bGFyLklQcm9taXNlPElNb2R1bGU+IHtcclxuICAgICAgICB0aGlzLmV4cENhY2hlLnJlbW92ZUFsbEJ5S2V5KFwiY291cnNlc1wiKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL21vZHVsZXNcIikucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpLnNlcnZpY2UoKSwgbW9kdWxlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVNb2R1bGUoY291cnNlSWQ6IG51bWJlciwgbW9kdWxlOiBJTW9kdWxlKTogYW5ndWxhci5JUHJvbWlzZTxJTW9kdWxlPiB7XHJcbiAgICAgICAgdGhpcy5leHBDYWNoZS5yZW1vdmVBbGxCeUtleShcImNvdXJzZXNcIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL21vZHVsZXNcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgIG1vZHVsZSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlTW9kdWxlSGllcmFyY2h5KGNvdXJzZUlkOiBudW1iZXIsIG1vZHVsZTogSU1vZHVsZSk6IGFuZ3VsYXIuSVByb21pc2U8SU1vZHVsZT4ge1xyXG4gICAgICAgIHRoaXMuZXhwQ2FjaGUucmVtb3ZlQWxsQnlLZXkoXCJjb3Vyc2VzXCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9tb2R1bGVzL3VwZGF0ZUhpZXJhcmNoeVwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgbW9kdWxlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN0aW9uc0J5TW9kdWxlKGNvdXJzZUlkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIsIHBhZ2VJbmRleDogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VjdGlvblN1bW1hcnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL21vZHVsZXMvOm1vZHVsZUlkL2dldFNlY3Rpb25zU3VtbWFyaWVzP3BhZ2U9OnBhZ2UmcGFnZVNpemU9OnBhZ2VTaXplXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1vZHVsZUlkXCIsIG1vZHVsZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cGFnZVwiLCBwYWdlSW5kZXgpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpwYWdlU2l6ZVwiLCBwYWdlU2l6ZSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlU2VjdGlvbihjb3Vyc2VJZDogbnVtYmVyLCBtb2R1bGVJZDogbnVtYmVyLCBzZWN0aW9uOiBJU2VjdGlvbik6IGFuZ3VsYXIuSVByb21pc2U8SVNlY3Rpb24+IHtcclxuICAgICAgICB0aGlzLmV4cENhY2hlLnJlbW92ZUFsbEJ5S2V5KFwiY291cnNlc1wiKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL21vZHVsZXMvOm1vZHVsZUlkL3NlY3Rpb25zXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6bW9kdWxlSWRcIiwgbW9kdWxlSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICBzZWN0aW9uKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVTZWN0aW9uKGNvdXJzZUlkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIsIHNlY3Rpb246IElTZWN0aW9uKTogYW5ndWxhci5JUHJvbWlzZTxJU2VjdGlvbj4ge1xyXG4gICAgICAgIHRoaXMuZXhwQ2FjaGUucmVtb3ZlQWxsQnlLZXkoXCJjb3Vyc2VzXCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9tb2R1bGVzLzptb2R1bGVJZC9zZWN0aW9uc1wiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOm1vZHVsZUlkXCIsIG1vZHVsZUlkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgc2VjdGlvbilcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlU2VjdGlvbk5hbWUoY291cnNlSWQ6IG51bWJlciwgbW9kdWxlSWQ6IG51bWJlciwgc2VjdGlvbjogSVNlY3Rpb24pOiBhbmd1bGFyLklQcm9taXNlPElTZWN0aW9uPiB7XHJcbiAgICAgICAgdGhpcy5leHBDYWNoZS5yZW1vdmVBbGxCeUtleShcImNvdXJzZXNcIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL21vZHVsZXMvOm1vZHVsZUlkL3NlY3Rpb25zL3VwZGF0ZU5hbWVcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjptb2R1bGVJZFwiLCBtb2R1bGVJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgIHNlY3Rpb24pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVNlY3Rpb25IaWVyYXJjaHkoY291cnNlSWQ6IG51bWJlciwgbW9kdWxlSWQ6IG51bWJlciwgc2VjdGlvbjogSVNlY3Rpb24pOiBhbmd1bGFyLklQcm9taXNlPElTZWN0aW9uPiB7XHJcbiAgICAgICAgdGhpcy5leHBDYWNoZS5yZW1vdmVBbGxCeUtleShcImNvdXJzZXNcIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL21vZHVsZXMvOm1vZHVsZUlkL3NlY3Rpb25zL3VwZGF0ZUhpZXJhcmNoeVwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOm1vZHVsZUlkXCIsIG1vZHVsZUlkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgc2VjdGlvbilcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlU2VjdGlvbnMoY291cnNlSWQ6IG51bWJlciwgc2VjdGlvbnM6IEFycmF5PElTZWN0aW9uPik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5leHBDYWNoZS5yZW1vdmVBbGxCeUtleShcImNvdXJzZXNcIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3NlY3Rpb25zL3VwZGF0ZVwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSwgc2VjdGlvbnMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEF2YWlsYWJsZVNlY3Rpb25zTm9DaGlsZHJlbihjb3Vyc2VJZDogbnVtYmVyLCBtb2R1bGVJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPEFycmF5PElTZWxlY3RhYmxlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9tb2R1bGVzLzptb2R1bGVJZC9zZWN0aW9ucy9hdmFpbGFibGUvbm8vY2hpbGRyZW4vOnNlY3Rpb25JZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjptb2R1bGVJZFwiLCBtb2R1bGVJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPOiByZXBsYWNlIElNYXRlcmlhbCB3aXRoIElDb3Vyc2VNYXRlcmlhbCAtIGFkZCBmaWVsZHMgb25seSBpZiBuZWVkZWRcclxuICAgIHB1YmxpYyBnZXRTZWN0aW9uVXBsb2FkZWRPckxpbmtNYXRlcmlhbHMoY291cnNlSWQ6IG51bWJlciwgbW9kdWxlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElNYXRlcmlhbD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvbW9kdWxlcy86bW9kdWxlSWQvc2VjdGlvbnMvOnNlY3Rpb25JZC9tYXRlcmlhbHMvdXBsb2FkZWRPckxpbmtcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bW9kdWxlSWRcIiwgbW9kdWxlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRPRE86IHJlcGxhY2UgSU1hdGVyaWFsIHdpdGggSUNvdXJzZU1hdGVyaWFsIC0gYWRkIGZpZWxkcyBvbmx5IGlmIG5lZWRlZFxyXG4gICAgcHVibGljIGdldFNlY3Rpb25BbGxNYXRlcmlhbHMoY291cnNlSWQ6IG51bWJlciwgbW9kdWxlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElNYXRlcmlhbD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvbW9kdWxlcy86bW9kdWxlSWQvc2VjdGlvbnMvOnNlY3Rpb25JZC9tYXRlcmlhbHMvYWxsXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1vZHVsZUlkXCIsIG1vZHVsZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2VjdGlvbk11bHRpbWVkaWFNYXRlcmlhbHNGcm9tU3VtbWFyeShjb3Vyc2VJZDogbnVtYmVyLCBtb2R1bGVJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SU1hdGVyaWFsPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9tb2R1bGVzLzptb2R1bGVJZC9zZWN0aW9ucy86c2VjdGlvbklkL21hdGVyaWFscy9tdWx0aW1lZGlhXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1vZHVsZUlkXCIsIG1vZHVsZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVsZXRlTW9kdWxlKGNvdXJzZUlkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIsIG1vZHVsZVZlcnNpb246IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5leHBDYWNoZS5yZW1vdmVBbGxCeUtleShcImNvdXJzZXNcIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCJhcGkvY291cnNlcy86Y291cnNlSWQvbW9kdWxlcy86bW9kdWxlSWQ/dmVyc2lvbj06dmVyc2lvblwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjptb2R1bGVJZFwiLCBtb2R1bGVJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnZlcnNpb25cIiwgbW9kdWxlVmVyc2lvbilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVsZXRlU2VjdGlvbihjb3Vyc2VJZDogbnVtYmVyLCBtb2R1bGVJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlciwgc2VjdGlvblZlcnNpb246IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5leHBDYWNoZS5yZW1vdmVBbGxCeUtleShcImNvdXJzZXNcIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCJhcGkvY291cnNlcy86Y291cnNlSWQvbW9kdWxlcy86bW9kdWxlSWQvc2VjdGlvbnMvOnNlY3Rpb25JZD92ZXJzaW9uPTp2ZXJzaW9uXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1vZHVsZUlkXCIsIG1vZHVsZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnZlcnNpb25cIiwgc2VjdGlvblZlcnNpb24pXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZU93bmVycyhjb3Vyc2VJZDogbnVtYmVyKTogSVByb21pc2U8QXJyYXk8SVNlbGVjdGFibGU+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCJhcGkvY291cnNlcy86Y291cnNlSWQvb3duZXJzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlY3Rpb25RdWl6KGNvdXJzZUlkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUXVpej4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9tb2R1bGVzLzptb2R1bGVJZC9zZWN0aW9ucy86c2VjdGlvbklkL3F1aXpcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bW9kdWxlSWRcIiwgbW9kdWxlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN0aW9uU3VydmV5KGNvdXJzZUlkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUXVpej4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9tb2R1bGVzLzptb2R1bGVJZC9zZWN0aW9ucy86c2VjdGlvbklkL3N1cnZleVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjptb2R1bGVJZFwiLCBtb2R1bGVJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlY3Rpb25GbGFzaGNhcmQoY291cnNlSWQ6IG51bWJlciwgbW9kdWxlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElRdWl6PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL21vZHVsZXMvOm1vZHVsZUlkL3NlY3Rpb25zLzpzZWN0aW9uSWQvZmxhc2hjYXJkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1vZHVsZUlkXCIsIG1vZHVsZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVNlY3Rpb25Bc1BkZihjb3Vyc2VJZDogbnVtYmVyLCBtb2R1bGVJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9tb2R1bGVzLzptb2R1bGVJZC9zZWN0aW9ucy86c2VjdGlvbklkL3NhdmVQZGZcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bW9kdWxlSWRcIiwgbW9kdWxlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN0aW9uUGRmVG9rZW4oY291cnNlSWQ6IG51bWJlciwgbW9kdWxlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL21vZHVsZXMvOm1vZHVsZUlkL3NlY3Rpb25zLzpzZWN0aW9uSWQvcGRmL2Rvd25sb2FkVG9rZW5cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bW9kdWxlSWRcIiwgbW9kdWxlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUGFydGljaXBhdGlvbkZvcm0oY291cnNlSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGF0aW9uRm9ybTogSVBhcnRpY2lwYXRpb25Gb3JtKTogYW5ndWxhci5JUHJvbWlzZTxJUGFydGljaXBhdGlvbkZvcm0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvcGFydGljaXBhdGlvbkZvcm0/dmVyc2lvbj06dmVyc2lvblwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp2ZXJzaW9uXCIsIHZlcnNpb24pXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHBhcnRpY2lwYXRpb25Gb3JtKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYXJ0aWNpcGF0aW9uRm9ybShjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUGFydGljaXBhdGlvbkZvcm0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvcGFydGljaXBhdGlvbkZvcm1cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVMYW5kaW5nUGFnZShjb3Vyc2VJZDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmRpbmdQYWdlOiBJTGFuZGluZ1BhZ2UpOiBhbmd1bGFyLklQcm9taXNlPElMYW5kaW5nUGFnZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvbGFuZGluZ1BhZ2VcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBsYW5kaW5nUGFnZSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TGFuZGluZ1BhZ2UoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUxhbmRpbmdQYWdlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2xhbmRpbmdQYWdlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlTGFuZGluZ1BhZ2UoY291cnNlSWQ6IG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5kaW5nUGFnZTogSUxhbmRpbmdQYWdlKTogYW5ndWxhci5JUHJvbWlzZTxJTGFuZGluZ1BhZ2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvbGFuZGluZ1BhZ2VcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBsYW5kaW5nUGFnZSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVsYXRlZExlYXJuaW5nUGF0aHMoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SUxlYXJuaW5nUGF0aD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvcmVsYXRlZExlYXJuaW5nUGF0aHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRSZWxhdGVkTGVhcm5pbmdQYXRoc1RvU3RhcnQoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SUxlYXJuaW5nUGF0aD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvcmVsYXRlZExlYXJuaW5nUGF0aHNUb1N0YXJ0XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRDZXJ0aWZpY2F0ZShwYXJhbWV0ZXJzOiBhbnkpOiBuZy5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBsZXQgcmVwb3J0VHlwZSA9ICdDT1VSU0VfQ0VSVElGSUNBVEUnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL3JlcG9ydHMvZG93bmxvYWRUb2tlbi86cmVwb3J0VHlwZVwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOnJlcG9ydFR5cGVcIiwgcmVwb3J0VHlwZSlcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApLnRoZW4oKHJlc3VsdDogYW55KSA9PiB0aGlzLnVybC5iYXNlKFwiL2FwaS9yZXBvcnRzL2Rvd25sb2FkLzp0b2tlblwiKS5wYXJhbShcIjp0b2tlblwiLCByZXN1bHQuZGF0YS50b2tlbikuc2VydmljZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlld0NlcnRpZmljYXRlKHBhcmFtZXRlcnM6IGFueSk6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGxldCByZXBvcnRUeXBlID0gJ0NPVVJTRV9DRVJUSUZJQ0FURSc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9wcmV2aWV3LzpyZXBvcnRUeXBlXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6cmVwb3J0VHlwZVwiLCByZXBvcnRUeXBlKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycylcclxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUNlcnRpZmljYXRlRm9yVXNlcihwYXJhbWV0ZXJzOiBhbnkpOiBuZy5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9yZXBvcnRzL2NlcnRpZmljYXRlL3NhdmVcIiksIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlcnMpLFxyXG4gICAgICAgICAgICAgICAgc2VjdXJlZE9iamVjdFR5cGU6IFNlY3VyZWRPYmplY3RUeXBlLkNPVVJTRS5uYW1lLnRvVXBwZXJDYXNlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRDb3Vyc2VUaHJlYWQoY291cnNlSWQ6IG51bWJlciwgdGhyZWFkOiBJRGlzY3Vzc2lvblRocmVhZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvZGlzY3Vzc2lvbi90aHJlYWRzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgdGhyZWFkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVDb3Vyc2VUaHJlYWQoY291cnNlSWQ6IG51bWJlciwgdGhyZWFkSWQ6IG51bWJlciwgdGhyZWFkVmVyc2lvbjogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2Rpc2N1c3Npb24vdGhyZWFkcy86dGhyZWFkSWQ/dmVyc2lvbj06dmVyc2lvblwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp0aHJlYWRJZFwiLCB0aHJlYWRJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnZlcnNpb25cIiwgdGhyZWFkVmVyc2lvbilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQ291cnNlVGhyZWFkKGNvdXJzZUlkOiBudW1iZXIsIHRocmVhZDogSURpc2N1c3Npb25UaHJlYWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvZGlzY3Vzc2lvbi90aHJlYWRzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgdGhyZWFkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRUaHJlYWRDb21tZW50KGNvdXJzZUlkOiBudW1iZXIsIHRocmVhZElkOiBudW1iZXIsIGNvbW1lbnQ6IElEaXNjdXNzaW9uVGhyZWFkQ29tbWVudCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvZGlzY3Vzc2lvbi90aHJlYWRzLzp0aHJlYWRJZC9jb21tZW50c1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp0aHJlYWRJZFwiLCB0aHJlYWRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgY29tbWVudClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlVGhyZWFkQ29tbWVudChjb3Vyc2VJZDogbnVtYmVyLCBjb21tZW50SWQ6IG51bWJlciwgY29tbWVudFZlcnNpb246IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9kaXNjdXNzaW9uL3RocmVhZHMvY29tbWVudHMvOmNvbW1lbnRJZD92ZXJzaW9uPTp2ZXJzaW9uXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvbW1lbnRJZFwiLCBjb21tZW50SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp2ZXJzaW9uXCIsIGNvbW1lbnRWZXJzaW9uKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb3dubG9hZEJ1bmRsZUFyY2hpdmVUb2tlbihidW5kbGVJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9idW5kbGVzLzpidW5kbGVJZC9hcmNoaXZlL2Rvd25sb2FkVG9rZW5cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1bmRsZUlkXCIsIGJ1bmRsZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb3dubG9hZENvdXJzZVNjb3JtQXJjaGl2ZVRva2VuKGNvdXJzZUlkOiBudW1iZXIsIHNjb3JtVmVyc2lvbjogc3RyaW5nLCBzY29ybU9yZ2FuaXphdGlvbnNNb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3Njb3JtL2Rvd25sb2FkVG9rZW4/c2Nvcm1WZXJzaW9uPTpzY29ybVZlcnNpb24mc2Nvcm1Pcmdhbml6YXRpb25zTW9kZT06c2Nvcm1Pcmdhbml6YXRpb25zTW9kZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzY29ybVZlcnNpb25cIiwgc2Nvcm1WZXJzaW9uKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2Nvcm1Pcmdhbml6YXRpb25zTW9kZVwiLCBzY29ybU9yZ2FuaXphdGlvbnNNb2RlKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlTW9kdWxlU3RydWN0dXJlRnJvbUJ1bmRsZUZpbGVzKGNvdXJzZUlkOiBudW1iZXIsIGNvdXJzZVZlcnNpb246IG51bWJlciwgbW9kdWxlSWQ6IG51bWJlciwgc2VsZWN0ZWRGaWxlS2V5czogc3RyaW5nW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXHJcbiAgICAgICAgICAgIGAvYXBpL2NvdXJzZXMvJHtjb3Vyc2VJZH0vbW9kdWxlcy8ke21vZHVsZUlkfS9mcm9tQnVuZGxlRmlsZXM/Y291cnNlVmVyc2lvbj0ke2NvdXJzZVZlcnNpb259YFxyXG4gICAgICAgICksIHtcclxuICAgICAgICAgICAgYnVuZGxlRmlsZUtleXM6IHNlbGVjdGVkRmlsZUtleXNcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVc2VyQ2VydGlmaWNhdGVzKGNvdXJzZUlkOiBudW1iZXIsIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVVzZXJDZXJ0aWZpY2F0ZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvcHJvZ3Jlc3MvOmNvdXJzZVByb2dyZXNzSWQvdXNlckNlcnRpZmljYXRlc1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VQcm9ncmVzc0lkXCIsIGNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVVzZXJDZXJ0aWZpY2F0ZXMoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogbmcuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9wcm9ncmVzcy86Y291cnNlUHJvZ3Jlc3NJZC91c2VyQ2VydGlmaWNhdGVzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZVByb2dyZXNzSWRcIiwgY291cnNlUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlV2ViaW5hcihjb3Vyc2VJZDogbnVtYmVyLCB3ZWJpbmFyOiBJVklMVFNlc3Npb24pOiBhbmd1bGFyLklQcm9taXNlPElWSUxUU2Vzc2lvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL3dlYmluYXJzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgd2ViaW5hciwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVdlYmluYXIoY291cnNlSWQ6IG51bWJlciwgd2ViaW5hcjogSVZJTFRTZXNzaW9uKTogYW5ndWxhci5JUHJvbWlzZTxJVklMVFNlc3Npb24+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL3dlYmluYXJzLzp3ZWJpbmFySWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6d2ViaW5hcklkXCIsIHdlYmluYXIuaWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHdlYmluYXIsIDxJUmVxdWVzdFNob3J0Y3V0Q29uZmlnPntpZ25vcmU1MDA6IHRydWV9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVQYXJ0aWNpcGFudFdlYmluYXIoY291cnNlSWQ6IG51bWJlciwgd2ViaW5hcklkOiBudW1iZXIsIHBhcnRpY2lwYW50OiBJVklMVFNlc3Npb25QYXJ0aWNpcGFudCk6IGFuZ3VsYXIuSVByb21pc2U8SVZJTFRTZXNzaW9uUGFydGljaXBhbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy93ZWJpbmFycy86d2ViaW5hcklkL3BhcnRpY2lwYW50c1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp3ZWJpbmFySWRcIiwgd2ViaW5hcklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBwYXJ0aWNpcGFudCwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVBhcnRpY2lwYW50V2ViaW5hcihjb3Vyc2VJZDogbnVtYmVyLCB3ZWJpbmFySWQ6IG51bWJlciwgcGFydGljaXBhbnRJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy93ZWJpbmFycy86d2ViaW5hcklkL3BhcnRpY2lwYW50cy86cGFydGljaXBhbnRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp3ZWJpbmFySWRcIiwgd2ViaW5hcklkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cGFydGljaXBhbnRJZFwiLCBwYXJ0aWNpcGFudElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCA8SVJlcXVlc3RTaG9ydGN1dENvbmZpZz57aWdub3JlNTAwOiB0cnVlfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbFdlYmluYXIoY291cnNlSWQ6IG51bWJlciwgd2ViaW5hcklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvd2ViaW5hcnMvOndlYmluYXJJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp3ZWJpbmFySWRcIiwgd2ViaW5hcklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCA8SVJlcXVlc3RTaG9ydGN1dENvbmZpZz57aWdub3JlNTAwOiB0cnVlfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQWxsUGFydGljaXBhbnRzV2ViaW5hcihjb3Vyc2VJZDogbnVtYmVyLCB3ZWJpbmFySWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvd2ViaW5hcnMvOndlYmluYXJJZC9wYXJ0aWNpcGFudHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6d2ViaW5hcklkXCIsIHdlYmluYXJJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVBbGxQYXJ0aWNpcGFudHNXZWJpbmFyV2l0aG91dENvbXBsZXRlZChjb3Vyc2VJZDogbnVtYmVyLCB3ZWJpbmFySWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvd2ViaW5hcnMvOndlYmluYXJJZC9wYXJ0aWNpcGFudHMvY29tcGxldGVkU3RhdHVzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOndlYmluYXJJZFwiLCB3ZWJpbmFySWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIDxJUmVxdWVzdFNob3J0Y3V0Q29uZmlnPntpZ25vcmU1MDA6IHRydWV9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlQWxsUGFydGljaXBhbnRXZWJpbmFyKGNvdXJzZUlkOiBudW1iZXIsIHdlYmluYXJJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvd2ViaW5hcnMvOndlYmluYXJJZC9hbGxQYXJ0aWNpcGFudHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6d2ViaW5hcklkXCIsIHdlYmluYXJJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbnVsbCwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVBbGxQYXJ0aWNpcGFudFdlYmluYXJXaXRob3V0Q29tcGxldGVkKGNvdXJzZUlkOiBudW1iZXIsIHdlYmluYXJJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvd2ViaW5hcnMvOndlYmluYXJJZC9hbGxQYXJ0aWNpcGFudHMvY29tcGxldGVkU3RhdHVzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOndlYmluYXJJZFwiLCB3ZWJpbmFySWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwsIDxJUmVxdWVzdFNob3J0Y3V0Q29uZmlnPntpZ25vcmU1MDA6IHRydWV9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlVXNlcnNGb3JWSUxUU2Vzc2lvbihjb3Vyc2VJZDogbnVtYmVyLCB2aWx0U2Vzc2lvbklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElTZWxlY3RhYmxlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvOnZpbHRTZXNzaW9uSWQvY291cnNlVXNlcnNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dmlsdFNlc3Npb25JZFwiLCB2aWx0U2Vzc2lvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VVc2Vyc1dpdGhvdXRDb21wbGV0ZWRTdGF0dXNGb3JWSUxUU2Vzc2lvbihjb3Vyc2VJZDogbnVtYmVyLCB2aWx0U2Vzc2lvbklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElTZWxlY3RhYmxlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvOnZpbHRTZXNzaW9uSWQvY291cnNlVXNlcnMvY29tcGxldGVkU3RhdHVzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnZpbHRTZXNzaW9uSWRcIiwgdmlsdFNlc3Npb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlclZJTFRTZXNzaW9uUGFydGljaXBhbnRzKGNvdXJzZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJVklMVFNlc3Npb25QYXJ0aWNpcGFudD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zLzpzZWN0aW9uSWQvdXNlclwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRab29tV2ViaW5hckNvbmZpZ3VyYXRpb25zSW5mbyhjb3Vyc2VJZDogbnVtYmVyLCBidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxTZXNzaW9uU2NoZWR1bGluZ0luZm8+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoYC9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL3Nlc3Npb25TY2hlZHVsaW5nSW5mb2ApXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlY3Rpb25Gb3JXZWJpbmFyKGNvdXJzZUlkOiBudW1iZXIsIHdlYmluYXJJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zLzp3ZWJpbmFySWQvc2VjdGlvblwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp3ZWJpbmFySWRcIiwgd2ViaW5hcklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEF0dGVuZGllc0NvdW50KGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPE1hcDxudW1iZXIsIG51bWJlcltdPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvYXR0ZW5kaWVzQ291bnRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdHRlbmRlZXNDb3VudChjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxNYXA8bnVtYmVyLCBudW1iZXJbXT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL2F0dGVuZGVlc0NvdW50XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlTWVldGluZyhjb3Vyc2VJZDogbnVtYmVyLCBtZWV0aW5nOiBJVklMVFNlc3Npb24pOiBhbmd1bGFyLklQcm9taXNlPElWSUxUU2Vzc2lvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL21lZXRpbmdzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbWVldGluZywgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZU1lZXRpbmcoY291cnNlSWQ6IG51bWJlciwgbWVldGluZzogSVZJTFRTZXNzaW9uKTogYW5ndWxhci5JUHJvbWlzZTxJVklMVFNlc3Npb24+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL21lZXRpbmdzLzptZWV0aW5nSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bWVldGluZ0lkXCIsIG1lZXRpbmcuaWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG1lZXRpbmcsIDxJUmVxdWVzdFNob3J0Y3V0Q29uZmlnPntpZ25vcmU1MDA6IHRydWV9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVQYXJ0aWNpcGFudE1lZXRpbmcoY291cnNlSWQ6IG51bWJlciwgbWVldGluZ0lkOiBudW1iZXIsIHBhcnRpY2lwYW50OiBJVklMVFNlc3Npb25QYXJ0aWNpcGFudCk6IGFuZ3VsYXIuSVByb21pc2U8SVZJTFRTZXNzaW9uUGFydGljaXBhbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy9tZWV0aW5ncy86bWVldGluZ0lkL3BhcnRpY2lwYW50c1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjptZWV0aW5nSWRcIiwgbWVldGluZ0lkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBwYXJ0aWNpcGFudCwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVBhcnRpY2lwYW50TWVldGluZyhjb3Vyc2VJZDogbnVtYmVyLCBtZWV0aW5nSWQ6IG51bWJlciwgcGFydGljaXBhbnRJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy9tZWV0aW5ncy86bWVldGluZ0lkL3BhcnRpY2lwYW50cy86cGFydGljaXBhbnRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjptZWV0aW5nSWRcIiwgbWVldGluZ0lkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cGFydGljaXBhbnRJZFwiLCBwYXJ0aWNpcGFudElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCA8SVJlcXVlc3RTaG9ydGN1dENvbmZpZz57aWdub3JlNTAwOiB0cnVlfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbE1lZXRpbmcoY291cnNlSWQ6IG51bWJlciwgbWVldGluZ0lkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvbWVldGluZ3MvOm1lZXRpbmdJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjptZWV0aW5nSWRcIiwgbWVldGluZ0lkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCA8SVJlcXVlc3RTaG9ydGN1dENvbmZpZz57aWdub3JlNTAwOiB0cnVlfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQWxsUGFydGljaXBhbnRzTWVldGluZyhjb3Vyc2VJZDogbnVtYmVyLCBtZWV0aW5nSWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvbWVldGluZ3MvOm1lZXRpbmdJZC9wYXJ0aWNpcGFudHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bWVldGluZ0lkXCIsIG1lZXRpbmdJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVBbGxQYXJ0aWNpcGFudHNNZWV0aW5nV2l0aG91dENvbXBsZXRlZFN0YXR1cyhjb3Vyc2VJZDogbnVtYmVyLCBtZWV0aW5nSWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvbWVldGluZ3MvOm1lZXRpbmdJZC9wYXJ0aWNpcGFudHMvY29tcGxldGVkU3RhdHVzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1lZXRpbmdJZFwiLCBtZWV0aW5nSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIDxJUmVxdWVzdFNob3J0Y3V0Q29uZmlnPntpZ25vcmU1MDA6IHRydWV9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlQWxsUGFydGljaXBhbnRNZWV0aW5nKGNvdXJzZUlkOiBudW1iZXIsIG1lZXRpbmdJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvbWVldGluZ3MvOm1lZXRpbmdJZC9hbGxQYXJ0aWNpcGFudHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bWVldGluZ0lkXCIsIG1lZXRpbmdJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbnVsbCwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVBbGxQYXJ0aWNpcGFudE1lZXRpbmdXaXRob3V0Q29tcGxldGVkU3RhdHVzKGNvdXJzZUlkOiBudW1iZXIsIG1lZXRpbmdJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvbWVldGluZ3MvOm1lZXRpbmdJZC9hbGxQYXJ0aWNpcGFudHMvY29tcGxldGVkU3RhdHVzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1lZXRpbmdJZFwiLCBtZWV0aW5nSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwsIDxJUmVxdWVzdFNob3J0Y3V0Q29uZmlnPntpZ25vcmU1MDA6IHRydWV9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGdldFVzZXJNZWV0aW5nUGFydGljaXBhbnRzKGNvdXJzZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJVklMVFNlc3Npb25QYXJ0aWNpcGFudD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zLzpzZWN0aW9uSWQvdXNlclwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN0aW9uRm9yTWVldGluZyhjb3Vyc2VJZDogbnVtYmVyLCBtZWV0aW5nSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy86bWVldGluZ0lkL3NlY3Rpb25cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bWVldGluZ0lkXCIsIG1lZXRpbmdJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdHRlbmRpZXNDb3VudE1lZXRpbmcoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8TWFwPG51bWJlciwgbnVtYmVyW10+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy9hdHRlbmRpZXNDb3VudFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1lZXRpbmdTZXR0aW5ncyhjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJTWVldGluZ1NldHRpbmdzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy9tZWV0aW5nU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZXR0aW5nc0ZvckV4aXN0aW5nTWVldGluZyhjb3Vyc2VJZDogbnVtYmVyLCBtZWV0aW5nSWQpOiBhbmd1bGFyLklQcm9taXNlPElNZWV0aW5nU2V0dGluZ3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL21lZXRpbmdTZXR0aW5ncy86bWVldGluZ0lkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1lZXRpbmdJZFwiLCBtZWV0aW5nSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE15Q291cnNlc0J5SWRzKGNvdXJzZUlkczogQXJyYXk8bnVtYmVyPik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SUNvdXJzZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvY291cnNlcy9teVwiKSwge3BhcmFtczoge2NvdXJzZUlkczogY291cnNlSWRzfX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHB1Ymxpc2hDb3Vyc2UocHVibGlzaGVkQ291cnNlSWQ6IG51bWJlciwgc291cmNlQ291cnNlSWQ6IG51bWJlciwgbWFwcGVkU2VjdGlvblBhaXJzOiBBcnJheTxJTWFwcGVkU2VjdGlvbnNQYWlyPik6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpwdWJsaXNoZWRDb3Vyc2VJZC9wdWJsaXNoZWQvOnNvdXJjZUNvdXJzZUlkXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6cHVibGlzaGVkQ291cnNlSWRcIiwgcHVibGlzaGVkQ291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6c291cmNlQ291cnNlSWRcIiwgc291cmNlQ291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICBtYXBwZWRTZWN0aW9uUGFpcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VJTFRTZWN0aW9ucyhjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VjdGlvbj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvc2VjdGlvbnMvaWx0XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW5yb2xsbWVudENvbmZpZ3VyYXRpb25Gb3JDb3Vyc2UoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUVucm9sbG1lbnRDb25maWd1cmF0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKGBhcGkvY291cnNlcy8ke2NvdXJzZUlkfS9lbnJvbGxtZW50Q29uZmlndXJhdGlvbmApXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVFbnJvbGxtZW50Q29uZmlndXJhdGlvbkZvckNvdXJzZShjb3Vyc2VJZDogbnVtYmVyLCB1cGRhdGVkOiBJRW5yb2xsbWVudENvbmZpZ3VyYXRpb24pOiBhbmd1bGFyLklQcm9taXNlPElFbnJvbGxtZW50Q29uZmlndXJhdGlvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShgYXBpL2NvdXJzZXMvJHtjb3Vyc2VJZH0vZW5yb2xsbWVudENvbmZpZ3VyYXRpb25gKSwgdXBkYXRlZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUVucm9sbG1lbnRDb25maWd1cmF0aW9uRm9yQ291cnNlKGNvdXJzZUlkOiBudW1iZXIsIHVwZGF0ZWQ6IElFbnJvbGxtZW50Q29uZmlndXJhdGlvbik6IGFuZ3VsYXIuSVByb21pc2U8SUVucm9sbG1lbnRDb25maWd1cmF0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7Y291cnNlSWR9L2Vucm9sbG1lbnRDb25maWd1cmF0aW9uYCksIHVwZGF0ZWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZUVucm9sbG1lbnRDb25maWd1cmF0aW9uRm9yQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5zZXJ2aWNlKGBhcGkvY291cnNlcy8ke2NvdXJzZUlkfS9lbnJvbGxtZW50Q29uZmlndXJhdGlvbmApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbnJvbGxVc2Vyc1RvQ291cnNlKGNvdXJzZUlkOiBudW1iZXIsIHVzZXJJZHM6IG51bWJlcltdLCBncm91cElkczogbnVtYmVyW10pOiBhbmd1bGFyLklQcm9taXNlPElFbnJvbGxTZWF0Q3JlYXRpb25JbmZvPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKGBhcGkvY291cnNlcy8ke2NvdXJzZUlkfS9lbnJvbGxVc2Vyc2ApLFxyXG4gICAgICAgICAgICB7dXNlclRvRW5yb2xsSWRzOiB1c2VySWRzLCBncm91cHNUb0Vucm9sbElkczogZ3JvdXBJZHN9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRVc2Vyc1RvQ291cnNlV2FpdGxpc3QoY291cnNlSWQ6IG51bWJlciwgdXNlcklkczogbnVtYmVyW10sIGdyb3VwSWRzOiBudW1iZXJbXSk6IGFuZ3VsYXIuSVByb21pc2U8SUVucm9sbFNlYXRDcmVhdGlvbkluZm8+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7Y291cnNlSWR9L3dhaXRsaXN0VXNlcnNgKSxcclxuICAgICAgICAgICAge3VzZXJUb0Vucm9sbElkczogdXNlcklkcywgZ3JvdXBzVG9FbnJvbGxJZHM6IGdyb3VwSWRzfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVsZXRlRW5yb2xsbWVudFNlYXQoY291cnNlSWQ6IG51bWJlciwgc2VhdElkOiBudW1iZXIsIHZlcnNpb246IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7Y291cnNlSWR9L2Vucm9sbG1lbnQvJHtzZWF0SWR9P3ZlcnNpb249JHt2ZXJzaW9ufWApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVFbnJvbGxtZW50U2VhdHNCeVN0YXR1cyhjb3Vyc2VJZDogbnVtYmVyLCBzZWF0U3RhdHVzOiBzdHJpbmcsIHVzZXJOYW1lU2VhcmNoU3RyaW5nOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKGBhcGkvY291cnNlcy8ke2NvdXJzZUlkfS9lbnJvbGxtZW50L3N0YXR1cy8ke3NlYXRTdGF0dXN9P3VzZXJOYW1lU2VhcmNoU3RyaW5nPTp1c2VyTmFtZVNlYXJjaFN0cmluZ2ApXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp1c2VyTmFtZVNlYXJjaFN0cmluZ1wiLCB1c2VyTmFtZVNlYXJjaFN0cmluZylcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbW92ZVNlYXRUb0Vucm9sbGVkKGNvdXJzZUlkOiBudW1iZXIsIHNlYXRJZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5zZXJ2aWNlKGBhcGkvY291cnNlcy8ke2NvdXJzZUlkfS9lbnJvbGxtZW50LyR7c2VhdElkfS9tb3ZlVG9FbnJvbGxlZD92ZXJzaW9uPSR7dmVyc2lvbn1gKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1vdmVBbGxTZWF0c1RvRW5yb2xsZWQoY291cnNlSWQ6IG51bWJlciwgdXNlck5hbWVTZWFyY2hTdHJpbmc6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoYGFwaS9jb3Vyc2VzLyR7Y291cnNlSWR9L2Vucm9sbG1lbnQvbW92ZUFsbFRvRW5yb2xsZWQ/dXNlck5hbWVTZWFyY2hTdHJpbmc9OnVzZXJOYW1lU2VhcmNoU3RyaW5nYClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnVzZXJOYW1lU2VhcmNoU3RyaW5nXCIsIHVzZXJOYW1lU2VhcmNoU3RyaW5nKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlU2VhdFRvV2FpdGxpc3QoY291cnNlSWQ6IG51bWJlciwgc2VhdElkOiBudW1iZXIsIHZlcnNpb246IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7Y291cnNlSWR9L2Vucm9sbG1lbnQvJHtzZWF0SWR9L21vdmVUb1dhaXRsaXN0P3ZlcnNpb249JHt2ZXJzaW9ufWApLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbW92ZUFsbFNlYXRzVG9XYWl0bGlzdChjb3Vyc2VJZDogbnVtYmVyLCB1c2VyTmFtZVNlYXJjaFN0cmluZzogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShgYXBpL2NvdXJzZXMvJHtjb3Vyc2VJZH0vZW5yb2xsbWVudC9tb3ZlQWxsVG9XYWl0bGlzdD91c2VyTmFtZVNlYXJjaFN0cmluZz06dXNlck5hbWVTZWFyY2hTdHJpbmdgKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dXNlck5hbWVTZWFyY2hTdHJpbmdcIiwgdXNlck5hbWVTZWFyY2hTdHJpbmcpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcHJvdmVFbnJvbGxtZW50U2VhdChjb3Vyc2VJZDogbnVtYmVyLCBzZWF0SWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQXBwcm92ZUVucm9sbG1lbnRTZWF0UmVzdWx0SW5mbz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5zZXJ2aWNlKGBhcGkvY291cnNlcy8ke2NvdXJzZUlkfS9lbnJvbGxtZW50LyR7c2VhdElkfS9hcHByb3ZlU2VhdD92ZXJzaW9uPSR7dmVyc2lvbn1gKSx7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwcm92ZUFsbEVucm9sbG1lbnRTZWF0cyhjb3Vyc2VJZDogbnVtYmVyLCB1c2VyTmFtZVNlYXJjaFN0cmluZzogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxJQXBwcm92ZUVucm9sbG1lbnRTZWF0UmVzdWx0SW5mbz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKGBhcGkvY291cnNlcy8ke2NvdXJzZUlkfS9lbnJvbGxtZW50L2FwcHJvdmVBbGxTZWF0P3VzZXJOYW1lU2VhcmNoU3RyaW5nPTp1c2VyTmFtZVNlYXJjaFN0cmluZ2ApXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp1c2VyTmFtZVNlYXJjaFN0cmluZ1wiLCB1c2VyTmFtZVNlYXJjaFN0cmluZylcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlRW5yb2xsbWVudFNlYXRzRm9yQ3VycmVudFVzZXIoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUVucm9sbG1lbnRTZWF0W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgYXBpL2NvdXJzZXMvJHtjb3Vyc2VJZH0vY3VycmVudFVzZXJTZWF0c2ApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUb3RhbFVzZWRTZWF0c0ZvckNvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgYXBpL2NvdXJzZXMvJHtjb3Vyc2VJZH0vZW5yb2xsZWRVc2Vyc0NvdW50YCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVucm9sbEN1cnJlbnRVc2VyVG9Db3Vyc2UoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUVucm9sbG1lbnRTZWF0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKGBhcGkvY291cnNlcy8ke2NvdXJzZUlkfS9lbnJvbGxDdXJyZW50VXNlcmApLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5FbnJvbGxDdXJyZW50VXNlclRvQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5zZXJ2aWNlKGBhcGkvY291cnNlcy8ke2NvdXJzZUlkfS91bkVucm9sbEN1cnJlbnRVc2VyYCksIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgc2VuZEVtYWlsdG9BY3RpdmVMZWFybmVycyhjb3Vyc2VJZDogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcsIHN1YmplY3Q6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoYGFwaS9jb3Vyc2VzLyR7Y291cnNlSWR9L2Vucm9sbG1lbnQvc2VuZEVtYWlsc2ApXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHttZXNzYWdlOiBtZXNzYWdlLCBzdWJqZWN0OiBzdWJqZWN0fSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5hY3RpdmVDb3Vyc2UoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7Y291cnNlSWR9L2luYWN0aXZlYCksIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVQZXJtaXNzaW9uQXNzaWdubWVudHMoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7Y291cnNlSWR9L3JlbW92ZVBlcm1pc3Npb25Bc3NpZ25tZW50c2ApLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tQdXJjaGFzZVByb2Nlc3MoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8Ym9vbGVhbj4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2VjdGlvbkFuZE1vZHVsZUlkc0J5SUxUU2Vzc2lvbklkKGNvdXJzZUlkOiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJTW9kdWxlQW5kU2VjdGlvbj4gIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgYXBpL2NvdXJzZXMvJHtjb3Vyc2VJZH0vaWx0LyR7c2Vzc2lvbklkfS9zZWN0aW9uQW5kTW9kdWxlSWRzYCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlY3Rpb25BbmRNb2R1bGVJZHNCeVZJTFRTZXNzaW9uSWQoY291cnNlSWQ6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElNb2R1bGVBbmRTZWN0aW9uPiAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKGBhcGkvY291cnNlcy8ke2NvdXJzZUlkfS92aWx0U2Vzc2lvbnMvJHtzZXNzaW9uSWR9L3NlY3Rpb25BbmRNb2R1bGVJZHNgKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2Vzc2lvbnNWaWx0TGlzdChjb3Vyc2VJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVZJTFRTZXNzaW9uPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvc2VjdGlvbnMvOnNlY3Rpb25JZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0V4aXN0Q291cnNlcygpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKGBhcGkvY291cnNlcy9zZWFyY2gvaXNFeGlzdENvdXJzZXNgKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDb25uZWN0ZWRVc2VyVG9UZWFtcyhjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7Y291cnNlSWR9L3ZpbHRTZXNzaW9ucy90ZWFtcy9hdXRoL2NoZWNrYCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiA8Ym9vbGVhbj4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVUZWFtc01lZXRpbmcoY291cnNlSWQ6IG51bWJlciwgbWVldGluZzogSVZJTFRTZXNzaW9uKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvdGVhbXMvZXZlbnQvY3JlYXRlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbWVldGluZywgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiA8Ym9vbGVhbj5yZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbFRlYW1zRXZlbnQoY291cnNlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIsIHRlYW1zRXZlbnRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy90ZWFtcy86dGVhbXNFdmVudElkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnRlYW1zRXZlbnRJZFwiLCB0ZWFtc0V2ZW50SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIDxJUmVxdWVzdFNob3J0Y3V0Q29uZmlnPntpZ25vcmU1MDA6IHRydWV9KVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxib29sZWFuPikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVQYXJ0aWNpcGFudFRlYW1zKGNvdXJzZUlkOiBudW1iZXIsIHdlYmluYXJJZDogbnVtYmVyLCBwYXJ0aWNpcGFudDogSVZJTFRTZXNzaW9uUGFydGljaXBhbnQpOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy90ZWFtcy86d2ViaW5hcklkL3BhcnRpY2lwYW50c1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp3ZWJpbmFySWRcIiwgd2ViaW5hcklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBwYXJ0aWNpcGFudCwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGJvb2xlYW4+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVBhcnRpY2lwYW50VGVhbXMoY291cnNlSWQ6IG51bWJlciwgd2ViaW5hcklkOiBudW1iZXIsIHBhcnRpY2lwYW50SWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvdGVhbXMvOndlYmluYXJJZC9wYXJ0aWNpcGFudHMvOnBhcnRpY2lwYW50SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6d2ViaW5hcklkXCIsIHdlYmluYXJJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnBhcnRpY2lwYW50SWRcIiwgcGFydGljaXBhbnRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVBbGxQYXJ0aWNpcGFudFRlYW1zKGNvdXJzZUlkOiBudW1iZXIsIHdlYmluYXJJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvdGVhbXMvOndlYmluYXJJZC9hbGxQYXJ0aWNpcGFudHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6d2ViaW5hcklkXCIsIHdlYmluYXJJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbnVsbCwgPElSZXF1ZXN0U2hvcnRjdXRDb25maWc+e2lnbm9yZTUwMDogdHJ1ZX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVBbGxQYXJ0aWNpcGFudFRlYW1zV2l0aG91dENvbXBsZXRlZChjb3Vyc2VJZDogbnVtYmVyLCB3ZWJpbmFySWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL3RlYW1zLzp3ZWJpbmFySWQvYWxsUGFydGljaXBhbnRzL2NvbXBsZXRlZFN0YXR1c1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp3ZWJpbmFySWRcIiwgd2ViaW5hcklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsLCA8SVJlcXVlc3RTaG9ydGN1dENvbmZpZz57aWdub3JlNTAwOiB0cnVlfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUFsbFBhcnRpY2lwYW50c1RlYW1zKGNvdXJzZUlkOiBudW1iZXIsIHdlYmluYXJJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy90ZWFtcy86d2ViaW5hcklkL3BhcnRpY2lwYW50c1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp3ZWJpbmFySWRcIiwgd2ViaW5hcklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCA8SVJlcXVlc3RTaG9ydGN1dENvbmZpZz57aWdub3JlNTAwOiB0cnVlfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUFsbFBhcnRpY2lwYW50c1RlYW1zV2l0aG91dENvbXBsZXRlZChjb3Vyc2VJZDogbnVtYmVyLCB3ZWJpbmFySWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvdGVhbXMvOndlYmluYXJJZC9wYXJ0aWNpcGFudHMvY29tcGxldGVkU3RhdHVzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOndlYmluYXJJZFwiLCB3ZWJpbmFySWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIDxJUmVxdWVzdFNob3J0Y3V0Q29uZmlnPntpZ25vcmU1MDA6IHRydWV9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGVhbXNSZWRpcmVjdFVybChjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgYXBpL2NvdXJzZXMvJHtjb3Vyc2VJZH0vdmlsdFNlc3Npb25zL3RlYW1zL3JlZGlyZWN0VXJsYCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiA8c3RyaW5nPiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVRlYW1zTWVldGluZyhjb3Vyc2VJZDogbnVtYmVyLCB3ZWJpbmFyOiBJVklMVFNlc3Npb24pOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL3RlYW1zLzp3ZWJpbmFySWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6d2ViaW5hcklkXCIsIHdlYmluYXIuaWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHdlYmluYXIsIDxJUmVxdWVzdFNob3J0Y3V0Q29uZmlnPntpZ25vcmU1MDA6IHRydWV9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gPGJvb2xlYW4+cmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWaWx0VGVhbXNTZXNzaW9uUGFydGljaXBhbnRzKGNvdXJzZUlkOiBudW1iZXIsIHZpbHRTZXNzaW9uSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7Y291cnNlSWR9L3ZpbHRTZXNzaW9ucy90ZWFtcy8ke3ZpbHRTZXNzaW9uSWR9L3VwZGF0ZS9wYXJ0aWNpcGFudHNgKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IDxhbnk+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXV0b1JlZ2lzdGVyVG9BbGxTZWN0aW9uU2Vzc2lvbnMoY291cnNlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIsIHByb2dyZXNzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvc2VjdGlvbnMvOnNlY3Rpb25JZC9hdXRvUmVnaXN0cmF0aW9uLzpwcm9ncmVzc0lkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpwcm9ncmVzc0lkXCIsIHByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWSUxUU2Vzc2lvbnNGb3JDb3Vyc2UoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVZJTFRTZXNzaW9uPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvc2VjdGlvbnMvZm9yQ291cnNlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RnVsbENvdXJzZXMocHJvZHVjdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElDb3Vyc2U+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOnByb2R1Y3RJZC9nZXRGdWxsQ291cnNlc1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cHJvZHVjdElkXCIsIHByb2R1Y3RJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2Vzc2lvbnNWaWx0TGlzdEZvckNvdXJzZXMoc2VjdGlvbklkOiBudW1iZXIsIGNvdXJzZUlkczogQXJyYXk8bnVtYmVyPik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVZJTFRTZXNzaW9uPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvc2VjdGlvbnMvOnNlY3Rpb25JZC9mb3JDb3Vyc2VzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB7cGFyYW1zOiB7Y291cnNlSWRzOiBjb3Vyc2VJZHN9fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXV0b1JlZ2lzdGVyVG9TZWN0aW9uU2Vzc2lvbnNCeVNlY3Rpb25JZChzZWN0aW9uSWQ6IG51bWJlciwgY291cnNlSWRzOiBBcnJheTxudW1iZXI+KTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL3ZpbHRTZXNzaW9ucy9hdXRvUmVnaXN0cmF0aW9uLzpzZWN0aW9uSWQvZm9yQ291cnNlc1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgIHtjb3Vyc2VJZHN9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdXRvUmVnaXN0ZXJUb0FsbENvdXJzZVNlc3Npb25zKGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL2F1dG9SZWdpc3RyYXRpb24vZm9yQ291cnNlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF1dG9SZWdpc3RlclRvQ291cnNlU2Vzc2lvbnMoY291cnNlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL2F1dG9SZWdpc3RyYXRpb24vOnNlY3Rpb25JZC9mb3JDb3Vyc2VcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4vLyAgICBjb21tb24gbWV0aG9kc1xyXG4gICAgcHVibGljIHNldENvdXJzZVBhZ2VIZWFkZXJCcmVhZGNydW1icyhjb3Vyc2VJZDogbnVtYmVyLCBjb3Vyc2U6IElDb3Vyc2UsIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsIGhlYWRlcjogc3RyaW5nID0gXCJFZGl0XCIpIHtcclxuICAgICAgICBsZXQgbWVudUl0ZW1LZXk6IHN0cmluZyA9IE1lbnVIZWxwZXIuZ2V0Q3VycmVudE1lbnVJdGVtS2V5KCk7XHJcbiAgICAgICAgaWYgKCFtZW51SXRlbUtleSB8fCBtZW51SXRlbUtleS5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICB8fCAobWVudUl0ZW1LZXkgIT0gTWVudUhlbHBlci5FRFVDQVRJT05fQ09VUlNFU19NRU5VX0tFWVxyXG4gICAgICAgICAgICAgICAgfHwgbWVudUl0ZW1LZXkgIT0gTWVudUhlbHBlci5FRFVDQVRJT05fQ09VUlNFU19NRU5VX0tFWSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVudTogc3RyaW5nID0gY291cnNlLmFjdGl2ZSA/IE1lbnVIZWxwZXIuRURVQ0FUSU9OX0NPVVJTRVNfTUVOVV9LRVlcclxuICAgICAgICAgICAgICAgIDogTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX0VYUElSRURfQ09VUlNFU19NRU5VX0tFWTtcclxuICAgICAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0obWVudSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY291cnNlQnJlYWRjcnVtYiA9IGNvdXJzZS50b3BpYyB8fCBjb3Vyc2Uuc3ViamVjdE5hbWU7XHJcbiAgICAgICAgY291cnNlQnJlYWRjcnVtYiA9IGNvdXJzZUJyZWFkY3J1bWIubGVuZ3RoID4gNDAgPyBjb3Vyc2VCcmVhZGNydW1iLnN1YnN0cmluZygwLCA0MCkgKyBcIi4uLlwiIDogY291cnNlQnJlYWRjcnVtYjtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpXHJcbiAgICAgICAgICAgIC5oZWFkZXIoaGVhZGVyKVxyXG4gICAgICAgICAgICAuYWRkUGFyZW50TGluayhjb3Vyc2VCcmVhZGNydW1iLFxyXG4gICAgICAgICAgICAgICAgXCIjXCIgKyBjb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwoY291cnNlSWQpKVxyXG4gICAgICAgICAgICAudXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZVZJTFRTZWN0aW9ucyhjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VjdGlvbj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zL3Nlc3Npb25zL2J5Q291cnNlSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlQXVkaW9GaWxlRm9yU2xpZGUoY291cnNlSWQ6IG51bWJlciwgbW9kdWxlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIsIGZpbGVLZXk6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgZmlsZUtleSA9IGVuY29kZVVSSUNvbXBvbmVudChmaWxlS2V5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvY291cnNlcy8ke2NvdXJzZUlkfS9tb2R1bGVzLyR7bW9kdWxlSWR9L3NlY3Rpb25zLyR7c2VjdGlvbklkfS9hdWRpb0ZpbGU/ZmlsZUtleT0ke2ZpbGVLZXl9YCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUF1ZGlvRmlsZUZvclNsaWRlKGNvdXJzZUlkOiBudW1iZXIsIG1vZHVsZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5kZWxldGUodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvbW9kdWxlcy86bW9kdWxlSWQvc2VjdGlvbnMvOnNlY3Rpb25JZC9kZWxldGVBdWRpb0ZpbGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bW9kdWxlSWRcIiwgbW9kdWxlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VWSUxUU2VjdGlvbnNCeUNvdXJzZUlkcyhjb3Vyc2VJZHM6IEFycmF5PG51bWJlcj4pOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElTZWN0aW9uPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvc2Vzc2lvbnMvYnlDb3Vyc2VJZHNcIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwge3BhcmFtczoge2NvdXJzZUlkczogY291cnNlSWRzfX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUF1ZGlvRmlsZShjb3Vyc2VJZDogbnVtYmVyLCBtb2R1bGVJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlciwgYXVkaW9GaWxlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL21vZHVsZXMvOm1vZHVsZUlkL3NlY3Rpb25zLzpzZWN0aW9uSWQvYXVkaW9GaWxlLzphdWRpb0ZpbGVJZC91cGRhdGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bW9kdWxlSWRcIiwgbW9kdWxlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YXVkaW9GaWxlSWRcIiwgYXVkaW9GaWxlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZVByb2dyZXNzKGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElDb3Vyc2VQcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzL3Byb2dyZXNzLzpjb3Vyc2VJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIixjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VJbHRTZWN0aW9ucyhjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VjdGlvbj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0L3Nlc3Npb25zL2J5Q291cnNlSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VJTFRTZWN0aW9uc0J5Q291cnNlSWRzKGNvdXJzZUlkczogQXJyYXk8bnVtYmVyPik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVNlY3Rpb24+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2lsdC9zZXNzaW9ucy9ieUNvdXJzZUlkc1wiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB7cGFyYW1zOiB7Y291cnNlSWRzOiBjb3Vyc2VJZHN9fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2Vzc2lvbnNJbHRMaXN0KGNvdXJzZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJVklMVFNlc3Npb24+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2lsdC9zZWN0aW9ucy9zZXNzaW9ucy86c2VjdGlvbklkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldElMVFNlc3Npb25zRm9yQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElWSUxUU2Vzc2lvbj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0L3Nlc3Npb25zL2ZvckNvdXJzZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlc3Npb25zSWx0TGlzdEZvckNvdXJzZXMoc2VjdGlvbklkOiBudW1iZXIsIGNvdXJzZUlkczogQXJyYXk8bnVtYmVyPik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVZJTFRTZXNzaW9uPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvc2VjdGlvbnMvOnNlY3Rpb25JZC9mb3JDb3Vyc2VzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB7cGFyYW1zOiB7Y291cnNlSWRzOiBjb3Vyc2VJZHN9fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXV0b1JlZ2lzdGVyVG9BbGxTZWN0aW9uSUxUU2Vzc2lvbnMoY291cnNlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIsIHByb2dyZXNzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvc2VjdGlvbnMvOnNlY3Rpb25JZC9hdXRvUmVnaXN0cmF0aW9uLzpwcm9ncmVzc0lkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpwcm9ncmVzc0lkXCIsIHByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdXRvUmVnaXN0ZXJUb0lMVFNlY3Rpb25TZXNzaW9uc0J5U2VjdGlvbklkKHNlY3Rpb25JZDogbnVtYmVyLCBjb3Vyc2VJZHM6IEFycmF5PG51bWJlcj4pOiBhbmd1bGFyLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvaWx0L2F1dG9SZWdpc3RyYXRpb24vOnNlY3Rpb25JZC9mb3JDb3Vyc2VzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCAge2NvdXJzZUlkc30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF1dG9SZWdpc3RlclRvQWxsQ291cnNlSUxUU2Vzc2lvbnMoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvYXV0b1JlZ2lzdHJhdGlvbi9mb3JDb3Vyc2VcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXV0b1JlZ2lzdGVyVG9Db3Vyc2VJTFRTZXNzaW9ucyhjb3Vyc2VJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9pbHQvYXV0b1JlZ2lzdHJhdGlvbi86c2VjdGlvbklkL2ZvckNvdXJzZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlVGhyZWFkQ3JlYXRvcih0aHJlYWRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJVXNlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzL3RocmVhZC9hdXRob3IvOnRocmVhZElkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp0aHJlYWRJZFwiLHRocmVhZElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEdhbWVMZWFybmluZ09iamVjdHNCYWRnZUlkcyhjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxudW1iZXI+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvOmNvdXJzZUlkL2FjdGlvblBhZ2UvYmFkZ2VJZHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSlcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7SU1vZHVsZX0gZnJvbSBcIi4vbW9kZWxzL0lNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi9Qcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1VwbG9hZFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvVXBsb2FkVXRpbHNcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge1RyZWVFbGVtZW50c0luZm9GaWxsZXJ9IGZyb20gXCIuLi90cmVlL1RyZWVFbGVtZW50c0luZm9GaWxsZXJcIjtcclxuaW1wb3J0IHtJU2VjdGlvbn0gZnJvbSBcIi4vbW9kZWxzL0lTZWN0aW9uXCI7XHJcbmltcG9ydCB7U2VjdGlvblR5cGV9IGZyb20gXCIuL21vZGVscy9TZWN0aW9uVHlwZVwiO1xyXG5pbXBvcnQge0lTZWN0aW9uSW5IaWVyYXJjaHksIElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZH0gZnJvbSBcIi4vbW9kZWxzL0lTZWN0aW9uSW5IaWVyYXJjaHlcIjtcclxuaW1wb3J0IHtJTWF0ZXJpYWx9IGZyb20gXCIuLi9tYXRlcmlhbHMvbW9kZWxzL0lNYXRlcmlhbFwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRMb2FkaW5nTGlzdGVuZXIsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxUeXBlS2V5RW51bX0gZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvTWF0ZXJpYWxUeXBlXCI7XHJcbmltcG9ydCB7T2JqZWN0VHlwZVV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvT2JqZWN0VHlwZVV0aWxzXCI7XHJcbmltcG9ydCB7SU11bHRpbWVkaWFTb3VyY2V9IGZyb20gXCIuLi9jb21wb25lbnRzL21vZGVscy9JTXVsdGltZWRpYVwiO1xyXG5pbXBvcnQge0lRdWl6fSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIi4uL3V0aWxzL01vbWVudFwiO1xyXG5pbXBvcnQge0xvY2F0aW9uQ2hhbmdlSGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTG9jYXRpb25DaGFuZ2VIZWxwZXJcIjtcclxuaW1wb3J0IHtLZXlzfSBmcm9tIFwiLi4vdXRpbHMvS2V5c1wiO1xyXG5pbXBvcnQge1NlY3Rpb25QYXNzaW5nVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1NlY3Rpb25QYXNzaW5nVHlwZVwiO1xyXG5pbXBvcnQge0lCdW5kbGVGaWxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZUZpbGVcIjtcclxuaW1wb3J0IHtCdW5kbGVGaWxlVHlwZUVudW19IGZyb20gXCIuLi9idW5kbGVzL21vZGVscy9CdW5kbGVGaWxlVHlwZVwiO1xyXG5pbXBvcnQge0lWSUxUU2Vzc2lvbn0gZnJvbSBcIi4uL3dlYmluYXJzL21vZGVscy9JVklMVFNlc3Npb25cIjtcclxuaW1wb3J0IHtTZWN0aW9uQWNjZXNzUnVsZXN9IGZyb20gXCIuL21vZGVscy9TZWN0aW9uQWNjZXNzUnVsZXNcIjtcclxuaW1wb3J0IHtJU2xpZGVUZW1wbGF0ZX0gZnJvbSBcIi4uL3NsaWRlcy9tb2RlbHMvSVNsaWRlVGVtcGxhdGVcIjtcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi9idW5kbGVzL0J1bmRsZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtTbGlkZVNlcnZpY2V9IGZyb20gXCIuLi9zbGlkZXMvU2xpZGVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VmhzVGVtcGxhdGVTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9yaWNodGV4dC9WaHNUZW1wbGF0ZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VEZXRhaWxzVXRpbHN9IGZyb20gXCIuL0NvdXJzZURldGFpbHNVdGlsc1wiO1xyXG5pbXBvcnQge0lGaW5kUmljaFRleHRCaW5kQ29udHJvbGxlckV2ZW50RGF0YX0gZnJvbSBcIi4uL2NvbXBvbmVudHMvbW9kZWxzL0lGaW5kUmljaFRleHRCaW5kQ29udHJvbGxlckV2ZW50RGF0YVwiO1xyXG5pbXBvcnQge0V2ZW50IGFzIG5ld0V2ZW50fSBmcm9tIFwiLi4vY29tcG9uZW50cy9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0lTbGlkZUluZm99IGZyb20gXCIuLi9zbGlkZXMvbW9kZWxzL0lTbGlkZUluZm9cIjtcclxuaW1wb3J0IHtSYW5kb21VdGlsc30gZnJvbSBcIi4uL3V0aWxzL1JhbmRvbVV0aWxzXCI7XHJcbmltcG9ydCB7Q29udGVudFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvQ29udGVudFV0aWxzXCI7XHJcbmltcG9ydCB7SUZpbGVVcGxvYWRJbmZvfSBmcm9tIFwiLi4vc3RvcmFnZS9tb2RlbHMvSUZpbGVVcGxvYWRJbmZvXCI7XHJcbmltcG9ydCB7SUJ1bmRsZUlucHV0fSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZUlucHV0XCI7XHJcbmltcG9ydCB7VXBsb2Fkc1NlcnZpY2V9IGZyb20gXCIuLi9zdG9yYWdlL1VwbG9hZHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZU1hdGVyaWFsQ29udHJvbGxlcn0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmljaHRleHQvVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuaW1wb3J0IHtSaWNoVGV4dEJpbmRDb250cm9sbGVyfSBmcm9tIFwiLi4vY29tcG9uZW50cy9yaWNodGV4dC9SaWNoVGV4dEJpbmREaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtSaWNoVGV4dENvbnRlbnRMb2FkaW5nU3luY2hyb25pemVyfSBmcm9tIFwiLi4vY29tcG9uZW50cy9yaWNodGV4dC9SaWNoVGV4dENvbnRlbnRMb2FkaW5nU3luY2hyb25pemVyXCI7XHJcbmltcG9ydCB7TmV3c0tleX0gZnJvbSBcIi4uL25ld3MvbW9kZWxzL05ld3NLZXlcIjtcclxuaW1wb3J0IHtOZXdzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9OZXdzUm91dGVyXCI7XHJcbmltcG9ydCB7UXVpenplc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvUXVpenplc1JvdXRlclwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge0FJU2VydmljZX0gZnJvbSBcIi4uL2FpL0FJU2VydmljZVwiO1xyXG5pbXBvcnQge0lBSVN1YnRvcGljc1Jlc3VsdH0gZnJvbSBcIi4uL2FpL21vZGVscy9JQUlTdWJ0b3BpY3NSZXN1bHRcIjtcclxuaW1wb3J0IHtJQUlQYXJhZ3JhcGhSZXN1bHR9IGZyb20gXCIuLi9haS9tb2RlbHMvSUFJUGFyYWdyYXBoUmVzdWx0XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElCdW5kbGVJbnB1dEluZm8ge1xyXG4gICAgcmVjb3JkVXJsPzogc3RyaW5nO1xyXG4gICAgcmVjb3JkTmFtZT86IHN0cmluZztcclxuICAgIGFkZGVkQnVuZGxlRmlsZT86IElBZGRlZEJ1bmRsZUZpbGU7XHJcbiAgICBhZGRlZEZpbGVzTWFwPzogYW55O1xyXG4gICAgYnVuZGxlSW5wdXQ/OiBJQnVuZGxlSW5wdXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFkZGVkQnVuZGxlRmlsZSB7XHJcbiAgICBmaWxlPzogRmlsZTtcclxuICAgIHJlbGF0aXZlUGF0aD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZVN0cnVjdHVyZUVkaXRDb250cm9sbGVyIGltcGxlbWVudHMgSUdyaWRMb2FkaW5nTGlzdGVuZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjb3Vyc2VzLkNvdXJzZVN0cnVjdHVyZUVkaXRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBSRUNVUlNJT05fREVQVEhfTElNSVQgPSA1MDtcclxuXHJcbiAgICBwdWJsaWMgTU9EVUxFOiBzdHJpbmcgPSAnbW9kdWxlJztcclxuICAgIHB1YmxpYyBTRUNUSU9OOiBzdHJpbmcgPSAnc2VjdGlvbic7XHJcbiAgICBwcml2YXRlIERFRkFVTFRfVE9QX01FTlVfSVRFTTogc3RyaW5nID0gJ2luZm8nO1xyXG4gICAgcHVibGljIHN0YXRpYyBDT1VSU0VfTE9BRF9BVF9TVEFSVF9CVU5ETEVTX1JJQ0hfVEVYVF9JRCA9IFwiY291cnNlX2xvYWRfYXRfc3RhcnRfYnVuZGxlc19yaWNoX3RleHRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgU0xJREVfVEVNUExBVEVTX0JVTkRMRV9SSUNIX1RFWFRfSUQgPSBcInNsaWRlX3RlbXBsYXRlc19idW5kbGVfcmljaF90ZXh0XCI7XHJcblxyXG4gICAgcHVibGljIGNvdXJzZUlkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbW9kdWxlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzZWN0aW9uSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2U6IElDb3Vyc2UgPSB7fTtcclxuICAgIHB1YmxpYyBtb2R1bGVzOiBBcnJheTxJTW9kdWxlPiA9IFtdO1xyXG4gICAgcHVibGljIGNyZWF0aW9uS2V5OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbWVudUtleTogYW55ID0ge3RvcE1lbnU6IHRoaXMuREVGQVVMVF9UT1BfTUVOVV9JVEVNLCBsZWZ0TWVudU1vZHVsZUV4cGFuZGVkOiBbXX07XHJcbiAgICBwcml2YXRlIGZvcm1Jc0RpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRTZWN0aW9uOiBJU2VjdGlvbiA9IG51bGw7XHJcbiAgICBwcml2YXRlIHNlY3Rpb25zTWFwOiBNYXA8bnVtYmVyLCBBcnJheTxJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWQ+PiA9IG5ldyBNYXA8bnVtYmVyLCBBcnJheTxJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWQ+PigpO1xyXG4gICAgcHVibGljIG1hdGVyaWFsOiBJTWF0ZXJpYWwgPSB7fTtcclxuICAgIHB1YmxpYyBzZWN0aW9uTWF0ZXJpYWxzOiBBcnJheTxJTWF0ZXJpYWw+ID0gW107XHJcbiAgICBwdWJsaWMgdXBsb2FkTWF0ZXJpYWxzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElNYXRlcmlhbD47XHJcbiAgICBwdWJsaWMgaXNNYXRlcmlhbEVtcHR5OiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzTWF0ZXJpYWxOb3RSZWFkeTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1ZpZXdBbGxvd2VkOiBib29sZWFuO1xyXG4gICAgcHVibGljIG1hdGVyaWFsVHlwZTogc3RyaW5nO1xyXG4gICAgcHVibGljIG1hdGVyaWFsTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRNYXRlcmlhbElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbXVsdGltZWRpYVNvdXJjZXM6IElNdWx0aW1lZGlhU291cmNlW107XHJcbiAgICBwdWJsaWMgc2VjdGlvblF1aXo6IElRdWl6ID0ge307XHJcbiAgICBwdWJsaWMgc2VjdGlvblN1cnZleTogSVF1aXogPSB7fTtcclxuICAgIHB1YmxpYyBzZWN0aW9uRmxhc2hjYXJkOiBJUXVpeiA9IHt9O1xyXG4gICAgcHVibGljIHNlY3Rpb25WSUxUU2Vzc2lvbjogSVZJTFRTZXNzaW9uID0ge307XHJcbiAgICBwdWJsaWMgYXZhaWxhYmxlU2VjdGlvblBhcmVudDogTWFwPG51bWJlciwgQXJyYXk8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkPj4gPSBuZXcgTWFwPG51bWJlciwgQXJyYXk8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkPj4oKTtcclxuICAgIHB1YmxpYyBhdmFpbGFibGVRdWl6emVzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElRdWl6PjtcclxuICAgIHB1YmxpYyBhdmFpbGFibGVTdXJ2ZXlzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElRdWl6PjtcclxuICAgIHB1YmxpYyBhdmFpbGFibGVGbGFzaGNhcmRzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElRdWl6PjtcclxuICAgIHB1YmxpYyBtb2R1bGU6IElNb2R1bGUgPSB7fTtcclxuICAgIHB1YmxpYyBzZWN0aW9uOiBJU2VjdGlvbiA9IHt9O1xyXG4gICAgcHVibGljIGlzTW9kdWxlRWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzTW9kdWxlVXBkYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBlZGl0aW5nTW9kdWxlOiBJTW9kdWxlID0ge307XHJcbiAgICBwdWJsaWMgaXNTZWN0aW9uRWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGVkaXRpbmdTZWN0aW9uOiBJU2VjdGlvbiA9IHt9O1xyXG4gICAgcHVibGljIGF2YWlsYWJsZUN1cnJlbnRTZWN0aW9uUGFyZW50OiBBcnJheTxJU2VsZWN0YWJsZT47XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBzaG93TWF0ZXJpYWxDcmVhdGlvbkZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyB0eXBlS2V5OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZGlzYWJsZWRSZW1vdmVNb2R1bGVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBkaXNhYmxlZFJlbW92ZVNlY3Rpb25CdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0NvdXJzZUluVXNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNDb3Vyc2VDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbGltaXROdW1iZXJPZkF0dGVtcHRzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBudW1iZXJPZkF0dGVtcHRzOiBudW1iZXIgPSAxO1xyXG4gICAgcHVibGljIG1vZHVsZUZyb21CdW5kbGVGaWxlc0lucHV0OiBhbnkgPSB7XHJcbiAgICAgICAgbW9kdWxlSWQ6IG51bGwsXHJcbiAgICAgICAgc2VsZWN0ZWRGaWxlS2V5czogW11cclxuICAgIH07XHJcbiAgICBwdWJsaWMgZXhwYW5kQWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYnVuZGxlRmlsZXNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUJ1bmRsZUZpbGU+O1xyXG4gICAgcHVibGljIGN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXM6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzQ291cnNlTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHNsaWRlVGVtcGxhdGVzQnVuZGxlOiBJQnVuZGxlO1xyXG4gICAgcHVibGljIHNsaWRlVGVtcGxhdGVzQnVuZGxlVGV4dDogc3RyaW5nO1xyXG4gICAgcHVibGljIGNvdXJzZUxvYWRBdFN0YXJ0QnVuZGxlc1RleHQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBzbGlkZVRlbXBsYXRlczogQXJyYXk8SVNsaWRlVGVtcGxhdGU+O1xyXG4gICAgcHVibGljIHNsaWRlczogQXJyYXk8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkPiA9IFtdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbjogSVNlY3Rpb24gPSBudWxsO1xyXG4gICAgcHVibGljIHNlYXJjaFRhZ05hbWVGaWVsZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyB0YWdOYW1lc0xpc3Q6IEFycmF5PHN0cmluZz4gPSBbJ2RlZmF1bHQnXTtcclxuICAgIHB1YmxpYyBhcmNoaXZlOiBGaWxlO1xyXG4gICAgcHVibGljIHJlbW92ZWRTbGlkZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyByZXBsYWNlU2xpZGVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbm90aGluZ0NoYW5nZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHB1YmxpYyBpc1RlbXBsYXRlRWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBpc1NhdmVTZWN0aW9uQXNQZGZCdXR0b25EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBhZGRlZEJ1bmRsZUZpbGVzOiBBZGRlZEJ1bmRsZUZpbGVbXSA9IFtdO1xyXG4gICAgcHVibGljIGJ1bmRsZTogSUJ1bmRsZTtcclxuICAgIHByaXZhdGUgbG9hZE9uU3RhcnRGaWxlSWRzQ2hhbmdlZDogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgcHVibGljIGJ1bmRsZVVybDtcclxuICAgIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzdW1tYXJ5Q29weTogc3RyaW5nO1xyXG4gICAgcHVibGljIGNvcGllZFNlY3Rpb25JZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGJhc2U2NE1hcDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcblxyXG4gICAgcHVibGljIGF1ZGlvOiBGaWxlO1xyXG4gICAgcHVibGljIGF1ZGlvRmlsZTogSUJ1bmRsZUZpbGUgPSB7fTtcclxuICAgIHB1YmxpYyBhdWRpb0ZpbGVzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElCdW5kbGVGaWxlPjtcclxuICAgIHB1YmxpYyBzaG93QXVkaW86IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93QXVkaW9GaWxlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc01hbmRhdG9yeVNlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBtYXhTZWN0aW9uc0xlbmd0aDogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBzaG93RWRpdEJ1dHRvbnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGRlZmF1bHRUZW1wbGF0ZXM6IEFycmF5PGFueT4gPSBbe3BhdGg6IFwiZGVmYXVsdFRlbXBsYXRlXCIsIG5hbWU6IFwiZGVmYXVsdCB0ZW1wbGF0ZVwiLCB2aXNpYmxlOiB0cnVlfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXRoOiBcImRlZmF1bHRUZW1wbGF0ZVdpdGhUaHJlZUNvbHVtbnNcIiwgbmFtZTogXCJkZWZhdWx0IHRlbXBsYXRlIHdpdGggMyBjb2x1bW5zXCIsIHZpc2libGU6IHRydWV9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhdGg6IFwiZGVmYXVsdFRlbXBsYXRlV2l0aEltYWdlTGVmdFwiLCBuYW1lOiBcImRlZmF1bHQgdGVtcGxhdGUgd2l0aCBpbWFnZSBsZWZ0XCIsIHZpc2libGU6IHRydWV9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhdGg6IFwiZGVmYXVsdFRlbXBsYXRlV2l0aEltYWdlUmlnaHRcIiwgbmFtZTogXCJkZWZhdWx0IHRlbXBsYXRlIHdpdGggaW1hZ2UgcmlnaHRcIiwgdmlzaWJsZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGF0aDogXCJkZWZhdWx0VGVtcGxhdGVXaXRoQmlnSW1hZ2VMZWZ0XCIsIG5hbWU6IFwiZGVmYXVsdCB0ZW1wbGF0ZSB3aXRoIGJpZyBpbWFnZSBsZWZ0XCIsIHZpc2libGU6IHRydWV9XTtcclxuXHJcbiAgICBwcml2YXRlIHJpY2hUZXh0QmluZENvbnRyb2xsZXI6IFJpY2hUZXh0QmluZENvbnRyb2xsZXIgPSBuZXcgUmljaFRleHRCaW5kQ29udHJvbGxlcihcclxuICAgICAgICB0aGlzLiRodHRwLFxyXG4gICAgICAgIHRoaXMuJHEsXHJcbiAgICAgICAgdGhpcy4kdGltZW91dCxcclxuICAgICAgICB0aGlzLmJ1bmRsZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5yaWNoVGV4dENvbnRlbnRMb2FkaW5nU3luY2hyb25pemVyKTtcclxuXHJcbiAgICBwdWJsaWMgYWlOdW1iZXJPZlNsaWRlczogbnVtYmVyID0gNTtcclxuICAgIHB1YmxpYyBhaVByb21wdFRleHQ6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFByb2dyZXNzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgVXBsb2FkVXRpbHMuTkFNRSxcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2xpZGVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVuZGxlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFZoc1RlbXBsYXRlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVwbG9hZHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUmljaFRleHRDb250ZW50TG9hZGluZ1N5bmNocm9uaXplci5OQU1FLFxyXG4gICAgICAgIE5ld3NSb3V0ZXIuTkFNRSxcclxuICAgICAgICBRdWl6emVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUUsXHJcbiAgICAgICAgQUlTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHJvZ3Jlc3NTZXJ2aWNlOiBQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR1cGxvYWRlcjogbmcuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVwbG9hZFV0aWxzOiBVcGxvYWRVdGlscyxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWF0ZXJpYWxzUm91dGVyOiBNYXRlcmlhbHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNsaWRlU2VydmljZTogU2xpZGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidW5kbGVTZXJ2aWNlOiBCdW5kbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB0ZW1wbGF0ZUFwaTogVmhzVGVtcGxhdGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRzU2VydmljZTogVXBsb2Fkc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJpY2hUZXh0Q29udGVudExvYWRpbmdTeW5jaHJvbml6ZXI6IFJpY2hUZXh0Q29udGVudExvYWRpbmdTeW5jaHJvbml6ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG5ld3NSb3V0ZXI6IE5ld3NSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHF1aXp6ZXNSb3V0ZXI6IFF1aXp6ZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhaVNlcnZpY2U6IEFJU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSAkcm91dGVQYXJhbXNbQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU1dO1xyXG4gICAgICAgIHRoaXMubW9kdWxlSWQgPSBwYXJzZUludCgkbG9jYXRpb24uc2VhcmNoKClbQ291cnNlc1JvdXRlci5NT0RVTEVfUEFSQU1FVEVSXSkgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLnNlY3Rpb25JZCA9IHBhcnNlSW50KCRsb2NhdGlvbi5zZWFyY2goKVtDb3Vyc2VzUm91dGVyLlNFQ1RJT05fUEFSQU1FVEVSXSkgfHwgbnVsbDtcclxuICAgICAgICBsZXQgaGFzQ291cnNlSWQ6IGJvb2xlYW4gPSB0aGlzLmNvdXJzZUlkICE9IG51bGw7XHJcbiAgICAgICAgbGV0IGNvdXJzZUlkU3RyOiBzdHJpbmcgPSBTdHJpbmcodGhpcy5jb3Vyc2VJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kQ291cnNlUGVybWlzc2lvbnNJZihoYXNDb3Vyc2VJZCwgY291cnNlSWRTdHIsIGNvdXJzZVBlcm1pc3Npb25zID0+IGNvdXJzZVBlcm1pc3Npb25zLmVkaXQpO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5tZW51S2V5KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiR3YXRjaCgoKSA9PiB0aGlzLnNlY3Rpb24sICgobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvbGRWYWx1ZSA9PT0gbmV3VmFsdWUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sbGFwc2VNb2R1bGVzV2l0aFRpbWVvdXQoKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZENvdXJzZSgpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy50b3BpYyAhPSBcIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY291cnNlIGRldGFpbHNcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRlcm5hbENvdXJzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuaXNVc2VyU3lzdGVtQWRtaW5pc3RyYXRvcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuZm9yd2FyZFRvQWNjZXNzRGVuaWVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTbGlkZVRlbXBsYXRlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb3Vyc2VJblVzZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlLmJ1bmRsZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgL2FwaS9idW5kbGVzLyR7dGhpcy5jb3Vyc2UuYnVuZGxlSWR9L3VybGApKS50aGVuKHJlc3BvbnNlID0+IHRoaXMuYnVuZGxlVXJsID0gcmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb2R1bGVzKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFNlY3Rpb25zKHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ291cnNlQnVuZGxlKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEJ1bmRsZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgL2FwaS9idW5kbGVzLyR7dGhpcy5jb3Vyc2UuYnVuZGxlSWR9L3VybGApKS50aGVuKHJlc3BvbnNlID0+IHRoaXMuYnVuZGxlVXJsID0gcmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTW9kdWxlcygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkU2VjdGlvbnModHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTbGlkZVRlbXBsYXRlc0J1bmRsZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvdXJzZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy51cGxvYWRNYXRlcmlhbHNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJTWF0ZXJpYWw+KHRoaXMuJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2NvdXJzZXMvXCIgKyB0aGlzLmNvdXJzZUlkICsgXCIvYXZhaWxhYmxlTWF0ZXJpYWxzXCIpKSk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRNYXRlcmlhbHNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlUXVpenplc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElRdWl6Pih0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9jb3Vyc2VzL1wiICsgdGhpcy5jb3Vyc2VJZCArIFwiL2F2YWlsYWJsZVF1aXp6ZXNcIikpKTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZVF1aXp6ZXNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlU3VydmV5c0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElRdWl6Pih0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9jb3Vyc2VzL1wiICsgdGhpcy5jb3Vyc2VJZCArIFwiL2F2YWlsYWJsZVN1cnZleXNcIikpKTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZVN1cnZleXNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlRmxhc2hjYXJkc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElRdWl6Pih0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9jb3Vyc2VzL1wiICsgdGhpcy5jb3Vyc2VJZCArIFwiL2F2YWlsYWJsZUZsYXNoY2FyZHNcIikpKTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUZsYXNoY2FyZHNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYXVkaW9GaWxlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElCdW5kbGVGaWxlPih0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zbGlkZS9idW5kbGVzL1wiICsgdGhpcy5jb3Vyc2VJZCArIFwiL2F1ZGlvRmlsZXNcIikpKTtcclxuICAgICAgICB0aGlzLmF1ZGlvRmlsZXNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbignJGxvY2F0aW9uQ2hhbmdlU3RhcnQnLCAoZXZlbnQsIG5ld0xvY2F0aW9uOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgaWYgKExvY2F0aW9uQ2hhbmdlSGVscGVyLmlzRW5hYmxlUHJldmVudExvY2F0aW9uQ2hhbmdlKG5ld0xvY2F0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUlzRGlydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm0oXCJZb3UgY2FuJ3QgbGVhdmUgdGhpcyBwYWdlIHVubGVzcyB5b3UgY29tcGxldGUgb3IgY2FuY2VsIHRoZSBxdWl6IChzdXJ2ZXkgb3IgZmxhc2hjYXJkcylcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDb3Vyc2VIYXNTZWN0aW9ucygpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmxlbmd0aCA9PSAwIHx8IHRoaXMuc2VjdGlvbnNNYXAuc2l6ZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgaXNTZWN0aW9uc0V4aXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNNYXAuZm9yRWFjaCgodmFsdWUsIGtleSwgbWFwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpc1NlY3Rpb25zRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzU2VjdGlvbnNFeGlzdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMudXBsb2FkTWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5tYXRlcmlhbElkcyA9IHRoaXMuc2VjdGlvbk1hdGVyaWFscyA/XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbk1hdGVyaWFscy5tYXAoKG1hdGVyaWFsOiBJTWF0ZXJpYWwpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRlcmlhbC5pZDtcclxuICAgICAgICAgICAgfSkgOiBbXTtcclxuICAgICAgICB0aGlzLnVwbG9hZE1hdGVyaWFsc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDU7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVRdWl6emVzR3JpZE1vZGVsLmZpbHRlci5xdWl6SWQgPSB0aGlzLnNlbGVjdGVkU2VjdGlvbi5xdWl6SWQgPyB0aGlzLnNlbGVjdGVkU2VjdGlvbi5xdWl6SWQgOiAwO1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlUXVpenplc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDU7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVTdXJ2ZXlzR3JpZE1vZGVsLmZpbHRlci5xdWl6SWQgPSB0aGlzLnNlbGVjdGVkU2VjdGlvbi5xdWl6SWQgPyB0aGlzLnNlbGVjdGVkU2VjdGlvbi5xdWl6SWQgOiAwO1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlU3VydmV5c0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDU7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVGbGFzaGNhcmRzR3JpZE1vZGVsLmZpbHRlci5xdWl6SWQgPSB0aGlzLnNlbGVjdGVkU2VjdGlvbi5xdWl6SWQgPyB0aGlzLnNlbGVjdGVkU2VjdGlvbi5xdWl6SWQgOiAwO1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlRmxhc2hjYXJkc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDU7XHJcbiAgICAgICAgdGhpcy5hdWRpb0ZpbGVzR3JpZE1vZGVsLnBhZ2VTaXplID0gNjtcclxuICAgIH1cclxuXHJcbiAgICBlbmRMb2FkaW5nKCkge1xyXG4gICAgICAgIC8vZG8gbm90aGluZ1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlTW9kdWxlc0hpZXJhcmNoeShpbmRleDogbnVtYmVyLCBpdGVtOiBJTW9kdWxlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9IHRoaXMubW9kdWxlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmRleCAhPSBpdGVtLnNvcnRJbmRleCkge1xyXG4gICAgICAgICAgICBpdGVtLnNvcnRJbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgICB0aGlzLnNob3dSZWNhbGN1bGF0aW9uTWVzc2FnZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UudXBkYXRlTW9kdWxlSGllcmFyY2h5KHRoaXMuY291cnNlSWQsIGl0ZW0pLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvdXJzZUluVXNlV2FybmluZ01lc3NhZ2VJZk5lZWQoKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJDb3Vyc2UgaGllcmFyY2h5IGhhcyBiZWVuIGNoYW5nZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb2R1bGVzKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFNlY3Rpb25zKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4gdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0NyZWF0aW9uTW9kYWwoY3JlYXRpb25LZXk6IHN0cmluZywgbW9kdWxlSWQ6IG51bWJlciwgcGFyZW50SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3JlYXRpb25LZXkgPSBjcmVhdGlvbktleTtcclxuICAgICAgICBpZiAoY3JlYXRpb25LZXkgPT09IHRoaXMuU0VDVElPTikge1xyXG4gICAgICAgICAgICB0aGlzLm1vZHVsZUlkID0gbW9kdWxlSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbi5wYXJlbnRJZCA9IHBhcmVudElkO1xyXG4gICAgICAgICAgICB0aGlzLnR5cGVLZXkgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNjcmVhdGlvbkRpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dNYXRlcmlhbChtYXRlcmlhbDogSU1hdGVyaWFsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbFR5cGUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsID0gYW5ndWxhci5jb3B5KG1hdGVyaWFsKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWF0ZXJpYWxJZCA9IG1hdGVyaWFsLmlkO1xyXG5cclxuICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1lvdXR1YmVMaW5rKHRoaXMubWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsVHlwZSA9ICdZT1VUVUJFJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVmltZW9MaW5rKHRoaXMubWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsVHlwZSA9ICdWSU1FTyc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0F3c0xpbmsodGhpcy5tYXRlcmlhbCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxUeXBlID0gXCJWSURFT1wiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbFR5cGUgPSB0aGlzLm1hdGVyaWFsLnR5cGVLZXk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNYXRlcmlhbEVtcHR5ID0gdGhpcy5tYXRlcmlhbC5pZCAmJiB0aGlzLm1hdGVyaWFsLnR5cGVLZXkgIT09IE1hdGVyaWFsVHlwZUtleUVudW1bTWF0ZXJpYWxUeXBlS2V5RW51bS5MSU5LXSAmJlxyXG4gICAgICAgICAgICAgICAgKCF0aGlzLm1hdGVyaWFsLmZpbGVTdGF0dXMgfHwgdGhpcy5tYXRlcmlhbC5maWxlU3RhdHVzID09PSAnRU1QVFknKTtcclxuICAgICAgICAgICAgdGhpcy5pc01hdGVyaWFsTm90UmVhZHkgPSAhdGhpcy5pc01hdGVyaWFsRW1wdHkgJiYgdGhpcy5tYXRlcmlhbC5pZCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC50eXBlS2V5ICE9PSBNYXRlcmlhbFR5cGVLZXlFbnVtW01hdGVyaWFsVHlwZUtleUVudW0uTElOS10gJiYgdGhpcy5tYXRlcmlhbC5maWxlU3RhdHVzXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLm1hdGVyaWFsLmZpbGVTdGF0dXMgIT09ICdFTVBUWScgJiYgdGhpcy5tYXRlcmlhbC5maWxlU3RhdHVzICE9PSAnUkVBRFknO1xyXG4gICAgICAgICAgICB0aGlzLmlzVmlld0FsbG93ZWQgPSB0aGlzLm1hdGVyaWFsTG9hZGVkICYmICF0aGlzLmlzTWF0ZXJpYWxFbXB0eSAmJiAhdGhpcy5pc01hdGVyaWFsTm90UmVhZHk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm11bHRpbWVkaWFTb3VyY2VzID0gW3tcclxuICAgICAgICAgICAgICAgIHNyYzogdGhpcy5pc1lvdXR1YmVMaW5rKHRoaXMubWF0ZXJpYWwpIHx8IHRoaXMuaXNBd3NMaW5rKHRoaXMubWF0ZXJpYWwpID8gdGhpcy5tYXRlcmlhbC5saW5rIDogKHRoaXMubWF0ZXJpYWwuZG93bmxvYWRVcmwgfHwgJycpLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy5pc1lvdXR1YmVMaW5rKHRoaXMubWF0ZXJpYWwpID8gXCJ2aWRlby95b3V0dWJlXCIgOiAodGhpcy5pc0F3c0xpbmsodGhpcy5tYXRlcmlhbCkgPyBcInZpZGVvL21wNFwiIDogdGhpcy5tYXRlcmlhbC5jb250ZW50VHlwZSlcclxuICAgICAgICAgICAgfV07XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzWW91dHViZUxpbmsobWF0ZXJpYWw6IElNYXRlcmlhbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbC50eXBlSWQgPT0gMyAmJiBPYmplY3RUeXBlVXRpbHMuaXNZb3V0dWJlVXJsKG1hdGVyaWFsLmxpbmspO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpbWVvTGluayhtYXRlcmlhbDogSU1hdGVyaWFsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsLnR5cGVJZCA9PSAzICYmIE9iamVjdFR5cGVVdGlscy5pc1ZpbWVvVXJsKG1hdGVyaWFsLmxpbmspO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0F3c0xpbmsobWF0ZXJpYWw6IElNYXRlcmlhbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbC50eXBlSWQgPT0gMyAmJiBPYmplY3RUeXBlVXRpbHMuaXNBd3NVcmwobWF0ZXJpYWwubGluayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldExlZnRNZW51TW9kdWxlKGxlZnRNb2R1bGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1Jc0RpcnR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VjdGlvbih0aGlzLnNlbGVjdGVkU2VjdGlvbikudGhlbih1cGRhdGVkU2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTZWN0aW9uc0Zvck1vZHVsZSh0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZFt0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZC5pbmRleE9mKHVwZGF0ZWRTZWN0aW9uLm1vZHVsZUlkKSB8fCAwXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExlZnRNZW51SXRlbSh1cGRhdGVkU2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIHNlY3Rpb24gaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISFsZWZ0TW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZEFsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQucHVzaChsZWZ0TW9kdWxlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkID0gW2xlZnRNb2R1bGVdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0TGVmdE1lbnVNb2R1bGVXaXRob3V0U2F2aW5nKGxlZnRNb2R1bGU6IElNb2R1bGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkLmluZGV4T2YobGVmdE1vZHVsZSwgMCk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5leHBhbmRBbGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkLnB1c2gobGVmdE1vZHVsZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZCA9IFtsZWZ0TW9kdWxlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb2xsYXBzZU1vZHVsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29sbGFwc2VNb2R1bGVzV2l0aFRpbWVvdXQoKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2VNb2R1bGVzKClcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb2xsYXBzZU1vZHVsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBtb2R1bGVJZCA9ICdtb2R1bGUnICsgaWQ7XHJcbiAgICAgICAgICAgIGxldCBtb2R1bGVFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobW9kdWxlSWQpO1xyXG4gICAgICAgICAgICBtb2R1bGVFbGVtLnN0eWxlLm1heEhlaWdodCA9IG1vZHVsZUVsZW0uc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbk1vZHVsZUJ1dHRvblByZXNzKGtleUNvZGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChrZXlDb2RlID09IDEzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWRpdGVkTW9kdWxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbk1vZHVsZU5hbWVFZGl0KCk6IHZvaWQge1xyXG4gICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2R1bGVOYW1lJyk7XHJcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbW92ZVNlY3Rpb25JZkF2YWlsYWJsZShpbmRleDogbnVtYmVyLCBpdGVtOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWQsIG5ld01vZHVsZUlkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgb2xkSW5kZXg7XHJcbiAgICAgICAgbGV0IG9sZE1vZHVsZUlkO1xyXG4gICAgICAgIGxldCBtb2R1bGVTZWN0aW9ucztcclxuICAgICAgICBpZiAoIXRoaXMuaXNTZWN0aW9uU2xpZGUoaXRlbS5zZWN0aW9uKSkge1xyXG4gICAgICAgICAgICBvbGRJbmRleCA9IHRoaXMuc2VjdGlvbnNNYXAuZ2V0KGl0ZW0uc2VjdGlvbi5tb2R1bGVJZClcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIocyA9PiBzLnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICAubWFwKHMgPT4gcy5zZWN0aW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIG9sZE1vZHVsZUlkID0gaXRlbS5zZWN0aW9uLm1vZHVsZUlkO1xyXG4gICAgICAgICAgICBtb2R1bGVTZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnNNYXAuZ2V0KG5ld01vZHVsZUlkKS5maWx0ZXIocyA9PiBzLnZpc2libGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9sZEluZGV4ID09PSBpbmRleCAmJiBuZXdNb2R1bGVJZCA9PT0gb2xkTW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTm90aGluZyBjaGFuZ2VkLlwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob2xkTW9kdWxlSWQgIT0gbmV3TW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiRHJhZy1uLWRyb3Agc2VjdGlvbiB0byBvdGhlciBtb2R1bGUgaXMgdW5hdmFpbGFibGUuXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIk9rXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiIFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpdGVtLnNlY3Rpb24ucGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJlbnRTZWN0aW9uID0gbW9kdWxlU2VjdGlvbnMuZmlsdGVyKHMgPT4gcy5pZCA9PT0gaXRlbS5zZWN0aW9uLnBhcmVudElkKS5wb3AoKTtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJlbnRJbmRleCA9IG1vZHVsZVNlY3Rpb25zLmluZGV4T2YocGFyZW50U2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGFzdENoaWxkID0gdGhpcy5nZXRMYXN0Q2hpbGRSZWN1cnNpdmVseShwYXJlbnRTZWN0aW9uLnNlY3Rpb24uaWQsIHBhcmVudFNlY3Rpb24uc2VjdGlvbi5tb2R1bGVJZCwgMCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGFzdENoaWxkT2ZQYXJlbnRJbmRleCA9IHRoaXMuc2VjdGlvbnNNYXAuZ2V0KGl0ZW0uc2VjdGlvbi5tb2R1bGVJZCkuaW5kZXhPZihsYXN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IHBhcmVudEluZGV4IHx8IGluZGV4ID4gbGFzdENoaWxkT2ZQYXJlbnRJbmRleCArIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIkRyYWctbi1kcm9wIG9mIGNoaWxkIHNlY3Rpb24gdG8gYW5vdGhlciBwYXJlbnQgc2VjdGlvbiBpcyB1bmF2YWlsYWJsZS4gVG8gbW92ZSBzZWN0aW9uIHBsZWFzZSBjbGljayB0aGUgJ1dyZW5jaCcgaWNvbiBhbmQgdXBkYXRlIHBhcmVudCBzZWN0aW9uLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiT2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiIFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCAmJiBpbmRleCA8PSBtb2R1bGVTZWN0aW9ucy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IG1vZHVsZVNlY3Rpb25zW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbW9kdWxlU2VjdGlvbnNbaW5kZXggLSAxXTtcclxuICAgICAgICAgICAgICAgIGxldCBpc0JldHdlZW5QYXJlbnRBbmRGaXJzdENoaWxkID0gcHJldi5zZWN0aW9uLmlkID09PSBuZXh0LnNlY3Rpb24ucGFyZW50SWQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNCZXR3ZWVuVHdvQ2hpbGRlcyA9ICEhcHJldi5zZWN0aW9uLnBhcmVudElkICYmICEhbmV4dC5zZWN0aW9uLnBhcmVudElkICYmIHByZXYuc2VjdGlvbi5wYXJlbnRJZCA9PT0gbmV4dC5zZWN0aW9uLnBhcmVudElkO1xyXG4gICAgICAgICAgICAgICAgbGV0IGlzU2VsZWN0ZWRIYXNPdGhlclBhcmVudCA9IGl0ZW0uc2VjdGlvbi5wYXJlbnRJZCAhPSBuZXh0LnNlY3Rpb24ucGFyZW50SWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGlzQmV0d2VlblBhcmVudEFuZEZpcnN0Q2hpbGQgfHwgaXNCZXR3ZWVuVHdvQ2hpbGRlcykgJiYgaXNTZWxlY3RlZEhhc090aGVyUGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJEcmFnLW4tZHJvcCBvZiBzZWN0aW9uIGJldHdlZW4gdHdvIGNoaWxkIHNlY3Rpb25zIG9yIHBhcmVudCBhbmQgZmlyc3QgY2hpbGQgc2VjdGlvbiBpcyB1bmF2YWlsYWJsZS4gVG8gbW92ZSBzZWN0aW9uIGF0IHRoaXMgcGxhY2UsIGNsaWNrIHRoZSAnV3JlbmNoJyBpY29uLCBzZWxlY3QgcGFyZW50IHNlY3Rpb24gYW5kIHRoZW4gbW92ZSBzZWN0aW9uIG9uIHRoaXMgbGV2ZWwuXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJPa1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCIgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5sZXZlbCAhPSBwcmV2LmxldmVsICYmIGl0ZW0ubGV2ZWwgIT0gbmV4dC5sZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiRHJhZy1uLWRyb3Agb2Ygc2VjdGlvbiBiZXR3ZWVuIHR3byBzZWN0aW9ucyB3aXRoIG90aGVyIGxldmVsIGluIHVuYXZhaWxhYmxlLiBUbyBtb3ZlIHNlY3Rpb24gaW50byBvdGhlciBsZXZlbCwgY2xpY2sgdGhlICdXcmVuY2gnIGljb24gYW5kIHNlbGVjdCB0aGUgcGFyZW50IHNlY3Rpb25cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIk9rXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIiBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBwcmV2U2VjdGlvbk9uTGV2ZWwgPSB0aGlzLmZpbmRQcmV2U2VjdGlvbk9mU2FtZUxldmVsKGluZGV4LCBpdGVtLCBtb2R1bGVTZWN0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlNlY3Rpb25PbkxldmVsICYmIHByZXZTZWN0aW9uT25MZXZlbC5zZWN0aW9uLmlkID09PSBpdGVtLnNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk1vdmluZyBzZWN0aW9uIGFmdGVyIGl0c2VsZi4gTm90aGluZyBjaGFuZ2VkLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBtb2R1bGVTZWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbW9kdWxlU2VjdGlvbnNbaW5kZXggLSAxXTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2LnNlY3Rpb24uaWQgPT09IGl0ZW0uc2VjdGlvbi5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTW92aW5nIGxhc3Qgc2VjdGlvbiBhZnRlciBpdHNlbGYgb3V0IGZyb20gc2VjdGlvbnMgYXJyYXkuIE5vdGhpbmcgY2hhbmdlZC5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb2xkSW5kZXggPSB0aGlzLnNsaWRlc1xyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihzID0+ICFzLnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICAubWFwKHMgPT4gcy5zZWN0aW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIG9sZE1vZHVsZUlkID0gaXRlbS5zZWN0aW9uLm1vZHVsZUlkO1xyXG4gICAgICAgICAgICBtb2R1bGVTZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnNNYXAuZ2V0KG5ld01vZHVsZUlkKTtcclxuICAgICAgICAgICAgaWYgKG9sZEluZGV4ID09PSBpbmRleCAmJiBuZXdNb2R1bGVJZCA9PT0gb2xkTW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTm90aGluZyBjaGFuZ2VkLlwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob2xkTW9kdWxlSWQgIT0gbmV3TW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiRHJhZy1uLWRyb3Agc2VjdGlvbiB0byBvdGhlciBtb2R1bGUgaXMgdW5hdmFpbGFibGUuXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIk9rXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiIFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5zbGlkZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJldiA9IHRoaXMuc2xpZGVzW2luZGV4IC0gMV07XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldi5zZWN0aW9uLmlkID09PSBpdGVtLnNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk1vdmluZyBsYXN0IHNsaWRlIGFmdGVyIGl0c2VsZiBvdXQgZnJvbSBzbGlkZSBhcnJheS4gTm90aGluZyBjaGFuZ2VkLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG1lc3NhZ2VDb25maXJtTW92aW5nO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2VjdGlvblNsaWRlKGl0ZW0uc2VjdGlvbikpIHtcclxuICAgICAgICAgICAgbWVzc2FnZUNvbmZpcm1Nb3ZpbmcgPSBcIkFyZSB5b3Ugc3VyZSB0byBtb3ZlIHNsaWRlIG51bWJlclwiICsgXCIgXCIgKyBpdGVtLnNlY3Rpb24uc29ydEluZGV4ICsgXCI/XCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWVzc2FnZUNvbmZpcm1Nb3ZpbmcgPSBcIkFyZSB5b3Ugc3VyZSB0byBtb3ZlIHNlY3Rpb25cIiArIFwiIFwiICsgaXRlbS5zZWN0aW9uLm5hbWUgKyBcIj9cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0obWVzc2FnZUNvbmZpcm1Nb3ZpbmcsIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiIFwiLFxyXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIk9rXCIsXHJcbiAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJDYW5jZWxcIlxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWN0aW9uRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0aW5nU2VjdGlvbiA9IHt9O1xyXG4gICAgICAgICAgICAgICAgaXRlbS5zZWN0aW9uLm1vZHVsZUlkID0gbmV3TW9kdWxlSWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNTZWN0aW9uU2xpZGUoaXRlbS5zZWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VjdGlvbi5zb3J0SW5kZXggPSB0aGlzLmNhbGN1bGF0ZVNvcnRJbmRleEluTGV2ZWwoaW5kZXgsIGl0ZW0sIG5ld01vZHVsZUlkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZWN0aW9uLnNvcnRJbmRleCA9IHRoaXMuY2FsY3VsYXRlU29ydEluZGV4SW5MZXZlbE9mU2xpZGUoaW5kZXgsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnVwZGF0ZVNlY3Rpb25IaWVyYXJjaHkodGhpcy5jb3Vyc2VJZCwgaXRlbS5zZWN0aW9uLm1vZHVsZUlkLCBpdGVtLnNlY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSVNlY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ291cnNlSW5Vc2VXYXJuaW5nTWVzc2FnZUlmTmVlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiQ291cnNlIGhpZXJhcmNoeSBoYXMgYmVlbiBjaGFuZ2VkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXBkYXRlU2VjdGlvbnNQcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTZWN0aW9uc1Byb21pc2VzLnB1c2godGhpcy5sb2FkU2VjdGlvbnNGb3JNb2R1bGUobmV3TW9kdWxlSWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWN0aW9uU2xpZGUoaXRlbS5zZWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2xpZGVzRm9yU2xpZGVEZWNrKHRoaXMuZ2V0U2VjdGlvbkJ5SWQoaXRlbS5zZWN0aW9uLm1vZHVsZUlkLCBpdGVtLnNlY3Rpb24ucGFyZW50SWQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkTW9kdWxlSWQgIT0gbmV3TW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVNlY3Rpb25zUHJvbWlzZXMucHVzaCh0aGlzLmxvYWRTZWN0aW9uc0Zvck1vZHVsZShvbGRNb2R1bGVJZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mZXRjaCB1cGRhdGVkIGZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcS5hbGwodXBkYXRlU2VjdGlvbnNQcm9taXNlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cGRhdGVkU2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNNYXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQodGhpcy5zZWxlY3RlZFNlY3Rpb24ubW9kdWxlSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5pZCA9PT0gdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQpLnBvcCgpLnNlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLm1vZHVsZUlkID0gdXBkYXRlZFNlY3Rpb24ubW9kdWxlSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnBhcmVudElkID0gdXBkYXRlZFNlY3Rpb24ucGFyZW50SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnNvcnRJbmRleCA9IHVwZGF0ZWRTZWN0aW9uLnNvcnRJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoID0gdXBkYXRlZFNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi52ZXJzaW9uID0gdXBkYXRlZFNlY3Rpb24udmVyc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zTWFwLmdldChvbGRNb2R1bGVJZCkuc3BsaWNlKG9sZEluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TGFzdENoaWxkUmVjdXJzaXZlbHkocGFyZW50SWQ6IG51bWJlciwgbW9kdWxlSWQ6IG51bWJlciwgYXR0ZW1wdDogbnVtYmVyKTogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkIHtcclxuICAgICAgICBpZiAoYXR0ZW1wdCA+IENvdXJzZVN0cnVjdHVyZUVkaXRDb250cm9sbGVyLlJFQ1VSU0lPTl9ERVBUSF9MSU1JVCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFib3J0ZWQgYXQgZXhjZWVkIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjaGlsZGVzID0gdGhpcy5zZWN0aW9uc01hcC5nZXQobW9kdWxlSWQpLmZpbHRlcihzID0+IHMuc2VjdGlvbi5wYXJlbnRJZCA9PT0gcGFyZW50SWQpO1xyXG4gICAgICAgIGxldCBsYXN0Q2hpbGQ6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKGNoaWxkZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsYXN0Q2hpbGQgPSBjaGlsZGVzW2NoaWxkZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5nZXRMYXN0Q2hpbGRSZWN1cnNpdmVseShsYXN0Q2hpbGQuc2VjdGlvbi5pZCwgbGFzdENoaWxkLnNlY3Rpb24ubW9kdWxlSWQsICsrYXR0ZW1wdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxhc3RDaGlsZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbGN1bGF0ZVNvcnRJbmRleEluTGV2ZWwoaW5kZXg6IG51bWJlciwgaXRlbTogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkLCBuZXdNb2R1bGVJZDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgbW9kdWxlU2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zTWFwLmdldChuZXdNb2R1bGVJZCkuZmlsdGVyKHMgPT4gcy52aXNpYmxlKTtcclxuICAgICAgICBsZXQgaXNNb3ZpbmdCYWNrd2FyZCA9IG1vZHVsZVNlY3Rpb25zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHMsIGkpID0+ICEoaSA9PT0gaW5kZXggJiYgcy5zZWN0aW9uLmlkID09PSBpdGVtLnNlY3Rpb24uaWQpKVxyXG4gICAgICAgICAgICAubWFwKHMgPT4gcy5pZClcclxuICAgICAgICAgICAgLmluZGV4T2YoaXRlbS5pZCkgPiBpbmRleDtcclxuICAgICAgICBsZXQgcHJldkxldmVsU2VjdGlvbiA9IHRoaXMuZmluZFByZXZTZWN0aW9uT2ZTYW1lTGV2ZWwoaW5kZXgsIGl0ZW0sIG1vZHVsZVNlY3Rpb25zKTtcclxuICAgICAgICBpZiAocHJldkxldmVsU2VjdGlvbikge1xyXG4gICAgICAgICAgICBpbmRleCA9IGlzTW92aW5nQmFja3dhcmQgPyBwcmV2TGV2ZWxTZWN0aW9uLnNlY3Rpb24uc29ydEluZGV4ICsgMSA6IHByZXZMZXZlbFNlY3Rpb24uc2VjdGlvbi5zb3J0SW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5kZXggPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5kUHJldlNlY3Rpb25PZlNhbWVMZXZlbChpbnNlcnRJbmRleDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZVNlY3Rpb25zOiBJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWRbXSk6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCB7XHJcbiAgICAgICAgbGV0IHByZXZTZWN0aW9uRmlsdGVyQ3JpdGVyaWEgPSAoc2VjdGlvbiwgYXJySW5kZXgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlY3Rpb24ubGV2ZWwgPT09IGl0ZW0ubGV2ZWxcclxuICAgICAgICAgICAgICAgICYmIHNlY3Rpb24uc2VjdGlvbi5wYXJlbnRJZCA9PSBpdGVtLnNlY3Rpb24ucGFyZW50SWRcclxuICAgICAgICAgICAgICAgICYmIGFyckluZGV4IDwgaW5zZXJ0SW5kZXg7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgaXRlbUNvcHlGaWx0ZXJDcml0ZXJpYSA9IChzZWN0aW9uLCBhcnJJbmRleCkgPT4gIShhcnJJbmRleCA9PT0gaW5zZXJ0SW5kZXggJiYgc2VjdGlvbi5zZWN0aW9uLmlkID09PSBpdGVtLnNlY3Rpb24uaWQpO1xyXG4gICAgICAgIGxldCBwcmV2TGV2ZWxTZWN0aW9ucyA9IG1vZHVsZVNlY3Rpb25zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbUNvcHlGaWx0ZXJDcml0ZXJpYSlcclxuICAgICAgICAgICAgLmZpbHRlcihwcmV2U2VjdGlvbkZpbHRlckNyaXRlcmlhKTtcclxuICAgICAgICBsZXQgcHJldlNlY3Rpb247XHJcbiAgICAgICAgaWYgKHByZXZMZXZlbFNlY3Rpb25zLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgIHByZXZTZWN0aW9uID0gcHJldkxldmVsU2VjdGlvbnNbcHJldkxldmVsU2VjdGlvbnMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcmV2U2VjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbGl0ZVNhdmVTZWN0aW9uKHNlY3Rpb246IElTZWN0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uICE9IG51bGwgJiYgdGhpcy5mb3JtSXNEaXJ0eSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TVVJWRVldKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5zZWN0aW9uUGFzc2luZ1R5cGUgPSBcIk9QVElPTkFMXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubGltaXROdW1iZXJPZkF0dGVtcHRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5hY2NlcHRhYmxlTnVtYmVyT2ZBdHRlbXB0cyA9IHRoaXMubnVtYmVyT2ZBdHRlbXB0cztcclxuICAgICAgICAgICAgICAgIHNlY3Rpb24uYWNjZXB0YWJsZU51bWJlck9mQXR0ZW1wdHMgPSB0aGlzLm51bWJlck9mQXR0ZW1wdHM7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5hY2NlcHRhYmxlTnVtYmVyT2ZBdHRlbXB0cyA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdQcm9ncmVzc0FmdGVyRmFpbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5hY2NlcHRhYmxlTnVtYmVyT2ZBdHRlbXB0cyA9IC0xO1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5ibG9ja2luZ1Byb2dyZXNzQWZ0ZXJGYWlsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGlzU2VjdGlvbkJsb2NraW5nQ2hhbmdlZCA9IHRoaXMuaXNTZWN0aW9uQmxvY2tpbmdDaGFuZ2VkKHNlY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAoaXNTZWN0aW9uQmxvY2tpbmdDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNhbGN1bGF0aW9uTWVzc2FnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlY3Rpb24odGhpcy5zZWxlY3RlZFNlY3Rpb24pLnRoZW4odXBkYXRlZFNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRTZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuUVVJWl0gfHxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNVUlZFWV0gfHxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLkZMQVNIQ0FSRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NDb3Vyc2VJblVzZVdhcm5pbmdNZXNzYWdlSWZOZWVkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTZWN0aW9uc0Zvck1vZHVsZSh0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZFt0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZC5pbmRleE9mKHVwZGF0ZWRTZWN0aW9uLm1vZHVsZUlkKSB8fCAwXSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkID09IHNlY3Rpb24uaWQgfHwgdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24uaWQgPT0gc2VjdGlvbi5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NlY3Rpb25TbGlkZURlY2sodXBkYXRlZFNlY3Rpb24pIHx8IHRoaXMuaXNTZWN0aW9uU2xpZGUodXBkYXRlZFNlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2xpZGVEZWNrU2VjdGlvbiA9IHRoaXMuaXNTZWN0aW9uU2xpZGVEZWNrKHVwZGF0ZWRTZWN0aW9uKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFNlY3Rpb24gOiB0aGlzLmdldFNlY3Rpb25CeUlkKHVwZGF0ZWRTZWN0aW9uLm1vZHVsZUlkLCB1cGRhdGVkU2VjdGlvbi5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNsaWRlc0ZvclNsaWRlRGVjayhzbGlkZURlY2tTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2xpZGVTZWN0aW9uQWN0aXZlKHVwZGF0ZWRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5pc1NlY3Rpb25TbGlkZURlY2sodXBkYXRlZFNlY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnNlY3Rpb25zTWFwLmdldChzbGlkZURlY2tTZWN0aW9uLm1vZHVsZUlkKS5maWx0ZXIocyA9PiBzLnNlY3Rpb24ucGFyZW50SWQgPT0gc2xpZGVEZWNrU2VjdGlvbi5pZClbMF0uc2VjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWN0aW9uc01hcC5nZXQoc2xpZGVEZWNrU2VjdGlvbi5tb2R1bGVJZCkuZmlsdGVyKHMgPT4gcy5zZWN0aW9uLnBhcmVudElkID09IHNsaWRlRGVja1NlY3Rpb24uaWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zZWN0aW9uLmlkID09IHVwZGF0ZWRTZWN0aW9uLmlkKVswXS5zZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24gPSBzbGlkZURlY2tTZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTbGlkZVNlY3Rpb25BY3RpdmUodGhpcy5zZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZWZ0TWVudUl0ZW0odXBkYXRlZFNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgc2VjdGlvbiBoYXMgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWN0aW9uRWRpdGluZyAmJiB0aGlzLmVkaXRpbmdTZWN0aW9uLmlkID09IHVwZGF0ZWRTZWN0aW9uLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodXBkYXRlZFNlY3Rpb24sIHRoaXMuZWRpdGluZ1NlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZWZ0TWVudUl0ZW0oc2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU2VjdGlvbkJsb2NraW5nQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVJdGVtKHNlY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbHlTdHlsZXNUb1RleHQoKSB7XHJcbiAgICAgICAgbGV0IGltZ1RhZ1J4ID0gLzxpbWcoXFxzc3JjPVwiZGF0YTppbWFnZVxcUys/KT4vZ2k7XHJcblxyXG4gICAgICAgIGxldCBzdWJzdGl0dXRlZExpbmVzID0gW107XHJcbiAgICAgICAgbGV0IGFkZGVkSW1hZ2U7XHJcbiAgICAgICAgd2hpbGUgKChhZGRlZEltYWdlID0gaW1nVGFnUnguZXhlYyh0aGlzLnNlbGVjdGVkU2VjdGlvbi5zdW1tYXJ5KSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzdWJzdGl0dXRlZExpbmVzLnB1c2goYWRkZWRJbWFnZVswXSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1YnN0aXR1dGVkTGluZXMubWFwKChsaW5lKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnN1bW1hcnkgPSB0aGlzLnNlbGVjdGVkU2VjdGlvbi5zdW1tYXJ5LnJlcGxhY2UobGluZSwgbGluZS5zbGljZSgwLCAtMikgKyAnIHN0eWxlPVwid2lkdGg6IDEwMCVcIi8+JylcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29udmVydEJhc2U2NEluU3VtbWFyeShmaXJzdFVwZGF0ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCBpbWdUYWdSeCA9IGZpcnN0VXBkYXRlID8gLzxpbWcgc3JjPVwiW1xcd1xcV10rPz4vZ2kgOiAvPGltZyhcXHNzcmM9XCJkYXRhOmltYWdlW1xcd1xcV10rPyk+L2dpO1xyXG5cclxuICAgICAgICBsZXQgc3Vic3RpdHV0ZWRMaW5lcyA9IFtdO1xyXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGxldCBhZGRlZEltYWdlID0gaW1nVGFnUnguZXhlYyh0aGlzLnNlbGVjdGVkU2VjdGlvbi5zdW1tYXJ5KVxyXG4gICAgICAgICAgICBpZiAoIWFkZGVkSW1hZ2UpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgc3Vic3RpdHV0ZWRMaW5lcy5wdXNoKGFkZGVkSW1hZ2VbMF0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYWRkZWRJbmRpY2VzID0gZmlyc3RVcGRhdGUgPyBzdWJzdGl0dXRlZExpbmVzLmxlbmd0aCA6IDBcclxuICAgICAgICBzdWJzdGl0dXRlZExpbmVzLm1hcCgoaW1nLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlyc3RVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50VHlwZVJ4ID0gL2FsdD1cIltcXHdcXFddKz9cIi9naTtcclxuICAgICAgICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGNvbnRlbnRUeXBlUnguZXhlYyhpbWcpWzBdLnNwbGl0KCdcIicpWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVuZGxlLmZpbGVzTWFwLmdldChmaWxlTmFtZSkgJiYgdGhpcy5idW5kbGUuZmlsZXNNYXAuZ2V0KGZpbGVOYW1lKS51cmwgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3R5bGVSeCA9IC9zdHlsZT1cIltcXHdcXFddKz9cIi9naVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWdDb3B5ID0gYCR7aW1nfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0eWxlID0gc3R5bGVSeC5leGVjKGltZ0NvcHkpXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0eWxlU3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTdHJpbmcgPSBzdHlsZVswXS5zcGxpdCgnXCInKVsxXVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShmaWxlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uc3VtbWFyeSA9IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnN1bW1hcnkucmVwbGFjZShpbWcsIHJlcGxhY2VtZW50KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShmaWxlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGVtcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZmlsZU5hbWUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3JjUnggPSAvXCJkYXRhOmltYWdlXFwvLio7YmFzZTY0LFtcXHdcXFddKz9cIig/IVxcc3N0eWxlPVwiW1xcd1xcV11cIikvZ2k7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3R5bGVSeCA9IC9zdHlsZT1cIltcXHdcXFddKz9cIi9naVxyXG4gICAgICAgICAgICAgICAgbGV0IGltZ0NvcHkgPSBgJHtpbWd9YDtcclxuICAgICAgICAgICAgICAgIGxldCBzdHlsZSA9IHN0eWxlUnguZXhlYyhpbWdDb3B5KVxyXG4gICAgICAgICAgICAgICAgbGV0IHN0eWxlU3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGlmIChzdHlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlU3RyaW5nID0gc3R5bGVbMF0uc3BsaXQoJ1wiJylbMV1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBiYXNlNjRTdHJpbmcgPSBzcmNSeC5leGVjKGltZylcclxuICAgICAgICAgICAgICAgIGxldCBibG9jayA9IGJhc2U2NFN0cmluZ1swXVxyXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudFR5cGUgPSBibG9ja1swXS5zdWJzdHIoMSkuc3BsaXQoXCI6XCIpWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgcmVhbERhdGEgPSBibG9ja1sxXS5zbGljZSgwLCAtMSkuc3BsaXQoXCIsXCIpWzFdO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBibG9iID0gQ291cnNlU3RydWN0dXJlRWRpdENvbnRyb2xsZXIuYjY0dG9CbG9iKHJlYWxEYXRhLCBjb250ZW50VHlwZSlcclxuICAgICAgICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGBhdHRhY2hlZF9maWxlXyR7dGhpcy5idW5kbGUuZmlsZXMubGVuZ3RoICsgMSArIGluZGV4ICsgYWRkZWRJbmRpY2VzfS4ke2NvbnRlbnRUeXBlLnNwbGl0KFwiL1wiKVsxXX1gO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbGU6IEZpbGUgPSB0aGlzLmJsb2JUb0ZpbGVOZXcoYmxvYiwgZmlsZU5hbWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQnVuZGxlRmlsZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBmaWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBgc2VjdGlvbnMvaW1hZ2VzLyR7dGhpcy5zZWxlY3RlZFNlY3Rpb24uaWR9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gYCR7dGhpcy5idW5kbGVVcmx9L3NlY3Rpb25zL2ltYWdlcy8ke3RoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkfS8ke2ZpbGVOYW1lfT92PTFgO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlcGxhY2VTdHJpbmcgPSB0aGlzLmdldEJ1bmRsZUZpbGVOYW1lKGBzZWN0aW9ucy9pbWFnZXMvJHt0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZH0vJHtmaWxlTmFtZX0/dj0xYCwgcGF0aCwgc3R5bGVTdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uc3VtbWFyeSA9IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnN1bW1hcnkucmVwbGFjZShpbWcsIHJlcGxhY2VTdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVNlY3Rpb24oc2VjdGlvbjogSVNlY3Rpb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdW1tYXJ5Q29weSA9IGAke3RoaXMuc2VsZWN0ZWRTZWN0aW9uLnN1bW1hcnl9YFxyXG4gICAgICAgIHRoaXMuY29waWVkU2VjdGlvbklkID0gc2VjdGlvbi5pZDtcclxuICAgICAgICB0aGlzLmxvYWRCdW5kbGUoKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmNvbnZlcnRCYXNlNjRJblN1bW1hcnkoZmFsc2UpKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1bmRsZUZyb21GaWxlcygpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVTZWN0aW9uVGV4dChzZWN0aW9uKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlU2VjdGlvblRleHQoc2VjdGlvbjogSVNlY3Rpb24pIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gIT0gbnVsbCAmJiB0aGlzLmZvcm1Jc0RpcnR5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpbWl0TnVtYmVyT2ZBdHRlbXB0cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYWNjZXB0YWJsZU51bWJlck9mQXR0ZW1wdHMgPSB0aGlzLm51bWJlck9mQXR0ZW1wdHM7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uLmFjY2VwdGFibGVOdW1iZXJPZkF0dGVtcHRzID0gdGhpcy5udW1iZXJPZkF0dGVtcHRzO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYWNjZXB0YWJsZU51bWJlck9mQXR0ZW1wdHMgPSAtMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nUHJvZ3Jlc3NBZnRlckZhaWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb24uYWNjZXB0YWJsZU51bWJlck9mQXR0ZW1wdHMgPSAtMTtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb24uYmxvY2tpbmdQcm9ncmVzc0FmdGVyRmFpbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBpc1NlY3Rpb25CbG9ja2luZ0NoYW5nZWQgPSB0aGlzLmlzU2VjdGlvbkJsb2NraW5nQ2hhbmdlZChzZWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKGlzU2VjdGlvbkJsb2NraW5nQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UmVjYWxjdWxhdGlvbk1lc3NhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWN0aW9uKHNlY3Rpb24pLnRoZW4odXBkYXRlZFNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRTZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuUVVJWl0gfHxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNVUlZFWV0gfHxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLkZMQVNIQ0FSRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NDb3Vyc2VJblVzZVdhcm5pbmdNZXNzYWdlSWZOZWVkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTZWN0aW9uc0Zvck1vZHVsZVRleHQodXBkYXRlZFNlY3Rpb24sIHNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24udHlwZUtleSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSU5GT1JNQVRJT05dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFNlY3Rpb25NdWx0aW1lZGlhTWF0ZXJpYWxzRnJvbVN1bW1hcnkodGhpcy5jb3Vyc2VJZCwgc2VjdGlvbi5tb2R1bGVJZCwgc2VjdGlvbi5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKG1hdGVyaWFscykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFscy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJXYXJuaW5nISBQcm9ncmVzcyBhbmQgY2hlY2sgcG9pbnRzIGFyZSBub3Qgc3VwcG9ydGVkIGNvcnJlY3RseSBpbiB0aGUgc2VjdGlvbnMgd2l0aCBtdWx0aXBsZSBtZWRpYSBmaWxlc1wiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlNlY3Rpb25zIHdpdGggbXVsdGlwbGUgbXVsdGltZWRpYS5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNTZWN0aW9uQmxvY2tpbmdDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRMZWZ0TWVudUl0ZW0oc2VjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkU2VjdGlvbnNGb3JNb2R1bGVUZXh0KHVwZGF0ZWRTZWN0aW9uOiBJU2VjdGlvbiwgc2VjdGlvbjogSVNlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLmxvYWRTZWN0aW9uc0Zvck1vZHVsZSh0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZFt0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZC5pbmRleE9mKHVwZGF0ZWRTZWN0aW9uLm1vZHVsZUlkKSB8fCAwXSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCA9PSBzZWN0aW9uLmlkIHx8IHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLmlkID09IHNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VjdGlvblNsaWRlRGVjayh1cGRhdGVkU2VjdGlvbikgfHwgdGhpcy5pc1NlY3Rpb25TbGlkZSh1cGRhdGVkU2VjdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2xpZGVEZWNrU2VjdGlvbiA9IHRoaXMuaXNTZWN0aW9uU2xpZGVEZWNrKHVwZGF0ZWRTZWN0aW9uKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRTZWN0aW9uIDogdGhpcy5nZXRTZWN0aW9uQnlJZCh1cGRhdGVkU2VjdGlvbi5tb2R1bGVJZCwgdXBkYXRlZFNlY3Rpb24ucGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2xpZGVzRm9yU2xpZGVEZWNrKHNsaWRlRGVja1NlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2xpZGVTZWN0aW9uQWN0aXZlKHVwZGF0ZWRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IHRoaXMuaXNTZWN0aW9uU2xpZGVEZWNrKHVwZGF0ZWRTZWN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2VjdGlvbnNNYXAuZ2V0KHNsaWRlRGVja1NlY3Rpb24ubW9kdWxlSWQpLmZpbHRlcihzID0+IHMuc2VjdGlvbi5wYXJlbnRJZCA9PSBzbGlkZURlY2tTZWN0aW9uLmlkKVswXS5zZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWN0aW9uc01hcC5nZXQoc2xpZGVEZWNrU2VjdGlvbi5tb2R1bGVJZCkuZmlsdGVyKHMgPT4gcy5zZWN0aW9uLnBhcmVudElkID09IHNsaWRlRGVja1NlY3Rpb24uaWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc2VjdGlvbi5pZCA9PSB1cGRhdGVkU2VjdGlvbi5pZClbMF0uc2VjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbiA9IHNsaWRlRGVja1NlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTbGlkZVNlY3Rpb25BY3RpdmUodGhpcy5zZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExlZnRNZW51SXRlbSh1cGRhdGVkU2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIHNlY3Rpb24gaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NlY3Rpb25FZGl0aW5nICYmIHRoaXMuZWRpdGluZ1NlY3Rpb24uaWQgPT0gdXBkYXRlZFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodXBkYXRlZFNlY3Rpb24sIHRoaXMuZWRpdGluZ1NlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvdXJzZUhhc01hbmRhdG9yeVNlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmdldENvdXJzZVNlY3Rpb25zKHRoaXMuY291cnNlSWQsIG51bGwpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heFNlY3Rpb25zTGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzTWFuZGF0b3J5U2VjdGlvbiAmJiB0aGlzLmNvdXJzZS5yZXF1aXJlZEVsZWN0aXZlc051bWJlciA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2VsZWN0aXZlc1JlcXVpcmVkTW9kYWwnKS5tb2RhbCgnc2hvdycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMZWZ0TWVudUl0ZW0oc2VjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QnVuZGxlRmlsZU5hbWUobmFtZTogc3RyaW5nLCBzcmM6IHN0cmluZywgc3R5bGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBzdHlsZVxyXG4gICAgICAgICAgICA/IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVNYXRlcmlhbENvbnRyb2xsZXIuRU1CRURERURfU1RZTEVEX0lNR19UQV9IVE1MKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6YnVuZGxlS2V5XCIsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjppbWFnZVNyY1wiLCBzcmMpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjpzdHlsZUtleVwiLCBzdHlsZSlcclxuICAgICAgICAgICAgICAgIC5idWlsZCgpXHJcbiAgICAgICAgICAgIDogU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZU1hdGVyaWFsQ29udHJvbGxlci5FTUJFRERFRF9JTUdfVEFfSFRNTF9DT1VSU0VTKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6YnVuZGxlS2V5XCIsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjppbWFnZVNyY1wiLCBzcmMpXHJcbiAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRCdW5kbGUoKTogSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlLmJ1bmRsZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1bmRsZVNlcnZpY2UuZ2V0QnVuZGxlKHRoaXMuY291cnNlLmJ1bmRsZUlkLCBcIkFMTFwiKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oYnVuZGxlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvc2VSaWNoVGV4dEZyb21Mb2FkQXRTdGFydEJ1bmRsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3Vyc2VMb2FkQXRTdGFydEJ1bmRsZXNUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJpY2hUZXh0TG9hZGVkUHJvbWlzZShDb3Vyc2VTdHJ1Y3R1cmVFZGl0Q29udHJvbGxlci5DT1VSU0VfTE9BRF9BVF9TVEFSVF9CVU5ETEVTX1JJQ0hfVEVYVF9JRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLndoZW4obnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tcG9zZVJpY2hUZXh0RnJvbUxvYWRBdFN0YXJ0QnVuZGxlcygpIHtcclxuICAgICAgICBpZiAodGhpcy5idW5kbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VMb2FkQXRTdGFydEJ1bmRsZXNUZXh0ID0gQ291cnNlRGV0YWlsc1V0aWxzLmNvbXBvc2VSaWNoVGV4dEZyb21Mb2FkQXRTdGFydEJ1bmRsZXModGhpcy5idW5kbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRTbGlkZVRlbXBsYXRlc0J1bmRsZSgpIHtcclxuICAgICAgICB0aGlzLnNsaWRlU2VydmljZS5nZXRTbGlkZVRlbXBsYXRlQnVuZGxlSWQoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1bmRsZVNlcnZpY2UuZ2V0QnVuZGxlKHJlc3VsdCwgXCJIVE1MX09SX0xPQURFRF9BVF9TVEFSVFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGJ1bmRsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVUZW1wbGF0ZXNCdW5kbGUgPSBidW5kbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9zZVJpY2hUZXh0RnJvbVNsaWRlVGVtcGxhdGVCdW5kbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVUZW1wbGF0ZXNCdW5kbGVUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmljaFRleHRMb2FkZWRQcm9taXNlKENvdXJzZVN0cnVjdHVyZUVkaXRDb250cm9sbGVyLlNMSURFX1RFTVBMQVRFU19CVU5ETEVfUklDSF9URVhUX0lEKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEud2hlbihudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tcG9zZVJpY2hUZXh0RnJvbVNsaWRlVGVtcGxhdGVCdW5kbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2xpZGVUZW1wbGF0ZXNCdW5kbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zbGlkZVRlbXBsYXRlc0J1bmRsZVRleHQgPSBDb3Vyc2VEZXRhaWxzVXRpbHMuY29tcG9zZVJpY2hUZXh0RnJvbUxvYWRBdFN0YXJ0QnVuZGxlcyh0aGlzLnNsaWRlVGVtcGxhdGVzQnVuZGxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVDb3Vyc2VCdW5kbGUoKTogSVByb21pc2U8SUJ1bmRsZT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jb3Vyc2UuYnVuZGxlSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5jcmVhdGVDb3Vyc2VCdW5kbGUodGhpcy5jb3Vyc2UuaWQsIHRoaXMuY291cnNlLnZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBidW5kbGUgPSByZXN1bHRbXCJidW5kbGVcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UuYnVuZGxlSWQgPSBidW5kbGUuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UudmVyc2lvbiA9IHJlc3VsdFtcImNvdXJzZVwiXS52ZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY291cnNlLmJ1bmRsZUlkKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBidW5kbGU7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnN0b3JhZ2Uubm90LmF2YWlsYWJsZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTm8gYXZhaWxhYmxlIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLnJlamVjdChudWxsKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLnJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVCdW5kbGVGcm9tRmlsZXMoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGFkZGVkQnVuZGxlRmlsZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICB0aGlzLmFkZGVkQnVuZGxlRmlsZXMuZm9yRWFjaCgoYnVuZGxlRmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBhZGRlZEJ1bmRsZUZpbGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogYnVuZGxlRmlsZS5maWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBidW5kbGVGaWxlLmZpbGUudHlwZSxcclxuICAgICAgICAgICAgICAgIHNpemU6IGJ1bmRsZUZpbGUuZmlsZS5zaXplLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogYnVuZGxlRmlsZS5yZWxhdGl2ZVBhdGhcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGJ1bmRsZUlucHV0OiBJQnVuZGxlSW5wdXQgPSB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmJ1bmRsZS5pZCxcclxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5idW5kbGUudmVyc2lvbixcclxuICAgICAgICAgICAgYWRkZWRGaWxlczogYWRkZWRCdW5kbGVGaWxlcyxcclxuICAgICAgICAgICAgZGVsZXRlZEZpbGVJZHM6IFtdLFxyXG4gICAgICAgICAgICBsb2FkT25TdGFydEZpbGVzQ2hhbmdlZElkczogdGhpcy5sb2FkT25TdGFydEZpbGVJZHNDaGFuZ2VkXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmJ1bmRsZVNlcnZpY2UudXBkYXRlQnVuZGxlRnJvbUZpbGVzKGJ1bmRsZUlucHV0KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBhZGRlZEJ1bmRsZUZpbGVzOiBBcnJheTxBZGRlZEJ1bmRsZUZpbGU+ID0gdGhpcy5hZGRlZEJ1bmRsZUZpbGVzO1xyXG4gICAgICAgICAgICB0aGlzLmFkZGVkQnVuZGxlRmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5idW5kbGUgPSByZXN1bHRbXCJidW5kbGVcIl07XHJcbiAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZE9uU3RhcnRGaWxlSWRzQ2hhbmdlZCA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgZmlsZVVwbG9hZEluZm9zOiBJRmlsZVVwbG9hZEluZm9bXSA9IHJlc3VsdFtcImZpbGVVcGxvYWRJbmZvc1wiXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gMDsgaSA8IGFkZGVkQnVuZGxlRmlsZXMubGVuZ3RoIHx8IGogPCBmaWxlVXBsb2FkSW5mb3MubGVuZ3RoOyArK2ksICsraikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFkZGVkRmlsZTogRmlsZSA9IGFkZGVkQnVuZGxlRmlsZXNbaV0uZmlsZTtcclxuICAgICAgICAgICAgICAgIGxldCBmaWxlVXBsb2FkSW5mbzogSUZpbGVVcGxvYWRJbmZvID0gZmlsZVVwbG9hZEluZm9zW2pdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVdGlscy51cGxvYWRCdW5kbGVCeUNodW5rcyhhZGRlZEZpbGUsIGZpbGVVcGxvYWRJbmZvLmZpbGVJZCwgdGhpcy5idW5kbGUuaWQsIGZpbGVVcGxvYWRJbmZvLnVybCxcclxuICAgICAgICAgICAgICAgICAgICBmaWxlVXBsb2FkSW5mby5tZXRob2QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc3RvcmFnZS5ub3QuYXZhaWxhYmxlXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTm8gYXZhaWxhYmxlIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGJsb2JUb0ZpbGVOZXcgPSAodGhlQmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZyk6IEZpbGUgPT4ge1xyXG4gICAgICAgIHZhciBiOiBhbnkgPSB0aGVCbG9iO1xyXG4gICAgICAgIGIubGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgYi5uYW1lID0gZmlsZU5hbWU7XHJcbiAgICAgICAgcmV0dXJuIDxGaWxlPnRoZUJsb2I7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGI2NHRvQmxvYihiNjREYXRhLCBjb250ZW50VHlwZSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUgfHwgJyc7XHJcbiAgICAgICAgbGV0IHNsaWNlU2l6ZSA9IDUxMjtcclxuXHJcbiAgICAgICAgbGV0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTtcclxuICAgICAgICBsZXQgYnl0ZUFycmF5cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IG9mZnNldCArPSBzbGljZVNpemUpIHtcclxuICAgICAgICAgICAgbGV0IHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xyXG4gICAgICAgICAgICBsZXQgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGljZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XHJcbiAgICAgICAgICAgIGJ5dGVBcnJheXMucHVzaChieXRlQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoYnl0ZUFycmF5cywge3R5cGU6IGNvbnRlbnRUeXBlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2VjdGlvbkJ1dHRvblByZXNzKGtleUNvZGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChrZXlDb2RlID09IDEzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWRpdGVkU2VjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWN0aW9uTmFtZUVkaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY3Rpb25OYW1lJyk7XHJcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNMZWZ0TWVudUl0ZW1BY3RpdmUodG9wTWVudUtleTogc3RyaW5nLCBsZWZ0TW9kdWxlOiBudW1iZXIsIGl0ZW06IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVLZXkudG9wTWVudSA9PSB0b3BNZW51S2V5XHJcbiAgICAgICAgICAgICYmICh0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGUgPT0gbGVmdE1vZHVsZSB8fCB0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZC5pbmRleE9mKGxlZnRNb2R1bGUpID4gLTEpXHJcbiAgICAgICAgICAgICYmIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW0gPT0gaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0VkaXRpbmdNb2RhbChzZWN0aW9uOiBJU2VjdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ3VycmVudFNlY3Rpb25QYXJlbnQgPSBbXTtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0QXZhaWxhYmxlU2VjdGlvbnNOb0NoaWxkcmVuKHRoaXMuY291cnNlSWQsIHNlY3Rpb24ubW9kdWxlSWQsIHNlY3Rpb24uaWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbGV0IGF2YWlsYWJsZUN1cnJlbnRTZWN0aW9uUGFyZW50ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlU2VjdGlvblBhcmVudC5nZXQoc2VjdGlvbi5tb2R1bGVJZCkuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzLmlkID09IHNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlQ3VycmVudFNlY3Rpb25QYXJlbnQucHVzaChzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShhdmFpbGFibGVDdXJyZW50U2VjdGlvblBhcmVudCwgdGhpcy5hdmFpbGFibGVDdXJyZW50U2VjdGlvblBhcmVudCk7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShzZWN0aW9uLCB0aGlzLmVkaXRpbmdTZWN0aW9uKTtcclxuICAgICAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICAgICAkKFwiI2VkaXRpbmdEaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYW5FZGl0aW5nTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nU2VjdGlvbiA9IHt9O1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ3VycmVudFNlY3Rpb25QYXJlbnQgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRTZWN0aW9uSW5saW5lRWRpdChzZWN0aW9uOiBJU2VjdGlvbikge1xyXG4gICAgICAgIHRoaXMuaXNTZWN0aW9uRWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgYW5ndWxhci5jb3B5KHNlY3Rpb24sIHRoaXMuZWRpdGluZ1NlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVFZGl0ZWRTZWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0VkaXRCdXR0b25zID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ1NlY3Rpb24ubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlY3Rpb25OYW1lKHRoaXMuZWRpdGluZ1NlY3Rpb24pLnRoZW4odXBkYXRlZFNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0aW5nU2VjdGlvbiA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlY3Rpb25FZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTZWN0aW9uc0Zvck1vZHVsZSh1cGRhdGVkU2VjdGlvbi5tb2R1bGVJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQgPT0gdXBkYXRlZFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodXBkYXRlZFNlY3Rpb24sIHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbiAmJiB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5pZCA9PSB1cGRhdGVkU2VjdGlvbi5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLm5hbWUgPSB1cGRhdGVkU2VjdGlvbi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RWRpdEJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIlBsZWFzZSBzcGVjaWZ5IHNlY3Rpb24gbmFtZVwiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFZGl0QnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWRTZWN0aW9uVHlwZUluZm8oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW1UeXBlID09PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5JTkZPUk1BVElPTl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWRTZWN0aW9uVHlwZUluZm9XaXRoTWFudWFsQ29tcGxldGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OX1dJVEhfTUFOVUFMX0NPTVBMRVRJT05dO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVNYXRlcmlhbENyZWF0aW9uRm9ybSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dNYXRlcmlhbENyZWF0aW9uRm9ybSA9ICF0aGlzLnNob3dNYXRlcmlhbENyZWF0aW9uRm9ybTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FsbGJhY2tXaGVuTWF0ZXJpYWxDcmVhdGVkKG1hdGVyaWFsczogSU1hdGVyaWFsW10pOiB2b2lkIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnQSBtYXRlcmlhbCBoYXMgYmVlbiBjcmVhdGVkOiBpZCA9ICcsIG1hdGVyaWFsLmlkKTtcclxuICAgICAgICB0aGlzLnNob3dNYXRlcmlhbENyZWF0aW9uRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWRkTWF0ZXJpYWxzVG9TZWN0aW9uKG1hdGVyaWFscyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZE1hdGVyaWFsVG9TZWN0aW9uKG1hdGVyaWFsOiBJTWF0ZXJpYWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Jc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25NYXRlcmlhbHMucHVzaChtYXRlcmlhbCk7XHJcbiAgICAgICAgdGhpcy5zaG93TWF0ZXJpYWwodGhpcy5zZWN0aW9uTWF0ZXJpYWxzWzBdKTtcclxuICAgICAgICB0aGlzLnVwbG9hZE1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICB0aGlzLmxpdGVTYXZlU2VjdGlvbih0aGlzLnNlbGVjdGVkU2VjdGlvbik7XHJcbiAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIk1hdGVyaWFsIHNlbGVjdGlvbiBoYXMgYmVlbiBzYXZlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkTWF0ZXJpYWxzVG9TZWN0aW9uKG1hdGVyaWFsczogSU1hdGVyaWFsW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Jc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25NYXRlcmlhbHMgPSB0aGlzLnNlY3Rpb25NYXRlcmlhbHMuY29uY2F0KG1hdGVyaWFscyk7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uTWF0ZXJpYWxzLmZvckVhY2goKG1hdCkgPT4gdGhpcy5zaG93TWF0ZXJpYWwobWF0KSk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRNYXRlcmlhbHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgdGhpcy5saXRlU2F2ZVNlY3Rpb24odGhpcy5zZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJNYXRlcmlhbHMgc2VsZWN0aW9uIGhhdmUgYmVlbiBzYXZlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlTWF0ZXJpYWxGcm9tU2VjdGlvbihpbmRleDogbnVtYmVyLCBtYXRlcmlhbDogSU1hdGVyaWFsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mb3JtSXNEaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uTWF0ZXJpYWxzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VjdGlvbk1hdGVyaWFscy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBsb2FkTWF0ZXJpYWxzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgIHRoaXMubGl0ZVNhdmVTZWN0aW9uKHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIG1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1vdmVVcChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0ge307XHJcbiAgICAgICAgdmFyIG9iamVjdFRvTW92ZSA9IHRoaXMuc2VjdGlvbk1hdGVyaWFscy5zcGxpY2UoaW5kZXgsIDEsIHBsYWNlaG9sZGVyKVswXTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25NYXRlcmlhbHMuc3BsaWNlKGluZGV4IC0gMSwgMCwgb2JqZWN0VG9Nb3ZlKTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25NYXRlcmlhbHMuc3BsaWNlKHRoaXMuc2VjdGlvbk1hdGVyaWFscy5pbmRleE9mKHBsYWNlaG9sZGVyKSwgMSk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtSXNEaXJ0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlRG93bihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0ge307XHJcbiAgICAgICAgdmFyIG9iamVjdFRvTW92ZSA9IHRoaXMuc2VjdGlvbk1hdGVyaWFscy5zcGxpY2UoaW5kZXggKyAxLCAxLCBwbGFjZWhvbGRlcilbMF07XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uTWF0ZXJpYWxzLnNwbGljZShpbmRleCwgMCwgb2JqZWN0VG9Nb3ZlKTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25NYXRlcmlhbHMuc3BsaWNlKHRoaXMuc2VjdGlvbk1hdGVyaWFscy5pbmRleE9mKHBsYWNlaG9sZGVyKSwgMSk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtSXNEaXJ0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vdmVVcChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNb3ZlRG93bihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4IDwgdGhpcy5zZWN0aW9uTWF0ZXJpYWxzLmxlbmd0aCAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEZvcm1Jc0RpcnR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybUlzRGlydHkgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRGb3JtSXNEaXJ0eUZvclNsaWRlRGVjaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Jc0RpcnR5ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0VXBCbG9ja2luZ1Byb2dyZXNzQWZ0ZXJGYWlsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nUHJvZ3Jlc3NBZnRlckZhaWwgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVMaW1pdEFjY2VwdGFibGVOdW1iZXJPZkF0dGVtcHRzKCkge1xyXG4gICAgICAgIHRoaXMubnVtYmVyT2ZBdHRlbXB0cyA9IDE7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtSXNEaXJ0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNoYW5nZU51bWJlck9mQXR0ZW1wdHNGaWVsZCgpIHtcclxuICAgICAgICB0aGlzLnNldEZvcm1Jc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbG9hZFNlY3Rpb24oc2VjdGlvbjogSVNlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLmxvYWRTZWN0aW9uc0Zvck1vZHVsZShzZWN0aW9uLm1vZHVsZUlkKTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25zTWFwLmdldChzZWN0aW9uLm1vZHVsZUlkKS5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocy5zZWN0aW9uLmlkID09IHNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVJdGVtKHMuc2VjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWxlY3RlZFNlY3Rpb25UeXBlUXVpeigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlFVSVpdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkU2VjdGlvblR5cGVTdXJ2ZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW1UeXBlID09PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TVVJWRVldO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkU2VjdGlvblR5cGVXZWJpbmFyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtVHlwZSA9PT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuV0VCSU5BUl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWRTZWN0aW9uVHlwZUlMVCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklMVF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWRTZWN0aW9uVHlwZUZsYXNoY2FyZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLkZMQVNIQ0FSRF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWRTZWN0aW9uVHlwZVNsaWRlRGVjaygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNMSURFX0RFQ0tdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkU2VjdGlvblR5cGVTbGlkZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNMSURFXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25OYW1lKHNlY3Rpb246IElTZWN0aW9uKTogYW5ndWxhci5JUHJvbWlzZTxJU2VjdGlvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNlcnZpY2UudXBkYXRlU2VjdGlvbk5hbWUodGhpcy5jb3Vyc2VJZCwgc2VjdGlvbi5tb2R1bGVJZCwgc2VjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWNhbGN1bGF0ZVNlY3Rpb25XaXRoUGFyZW50SW5kZXgoaW5kZXg6IG51bWJlciwgaXRlbTogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkLCBuZXdNb2R1bGVJZDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgcGFyZW50SW5kZXg6IG51bWJlciA9IDA7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuOiBBcnJheTxJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWQ+ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlY3Rpb25zTWFwLmdldChuZXdNb2R1bGVJZCkuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlY3Rpb24uaWQgPT0gaXRlbS5wYXJlbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50SW5kZXggPSB0aGlzLnNlY3Rpb25zTWFwLmdldChuZXdNb2R1bGVJZCkuaW5kZXhPZihzZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gc2VjdGlvbi5jaGlsZHJlbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpbmRleCA8IHBhcmVudEluZGV4KSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID49IHBhcmVudEluZGV4ICsgY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0uc2VjdGlvbi5zb3J0SW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLnNlY3Rpb25zTWFwLmdldChuZXdNb2R1bGVJZClbaW5kZXggKyAxXS5zZWN0aW9uLnNvcnRJbmRleDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0TGVmdE1lbnVJdGVtKHNlY3Rpb246IElTZWN0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uICYmIHNlY3Rpb24uaWQgIT0gdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93QXVkaW8gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTZWN0aW9uU2xpZGVEZWNrKHNlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2xpZGVzRm9yU2xpZGVEZWNrKHNlY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbGlkZXNbMF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9IHRoaXMuc2xpZGVzWzBdLnNlY3Rpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtID0gc2VjdGlvbi5wYXJlbnRJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW1UeXBlID0gc2VjdGlvbi50eXBlS2V5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlID0gc2VjdGlvbi5tb2R1bGVJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gYW5ndWxhci5jb3B5KHNlY3Rpb24pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gYW5ndWxhci5jb3B5KHNlY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm1Jc0RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5saW1pdE51bWJlck9mQXR0ZW1wdHMgPSBzZWN0aW9uLmFjY2VwdGFibGVOdW1iZXJPZkF0dGVtcHRzICE9IC0xO1xyXG4gICAgICAgIGlmICh0aGlzLmxpbWl0TnVtYmVyT2ZBdHRlbXB0cykge1xyXG4gICAgICAgICAgICB0aGlzLm51bWJlck9mQXR0ZW1wdHMgPSBzZWN0aW9uLmFjY2VwdGFibGVOdW1iZXJPZkF0dGVtcHRzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubnVtYmVyT2ZBdHRlbXB0cyA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzU2VjdGlvblNsaWRlRGVjayhzZWN0aW9uKSB8fCB0aGlzLmlzU2VjdGlvblNsaWRlKHNlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uID0gdGhpcy5pc1NlY3Rpb25TbGlkZURlY2soc2VjdGlvbikgPyBzZWN0aW9uIDogdGhpcy5nZXRTZWN0aW9uQnlJZChzZWN0aW9uLm1vZHVsZUlkLCBzZWN0aW9uLnBhcmVudElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrU2xpZGVEZWNrKHNlY3Rpb24uaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW0gPSBzZWN0aW9uLmlkO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtVHlwZSA9IHNlY3Rpb24udHlwZUtleTtcclxuICAgICAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlID0gc2VjdGlvbi5tb2R1bGVJZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwgPSB7fTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25RdWl6ID0ge307XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uU3VydmV5ID0ge307XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uRmxhc2hjYXJkID0ge307XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uVklMVFNlc3Npb24gPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5JTkZPUk1BVElPTl0pIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkU2VjdGlvbk1hdGVyaWFscygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlFVSVpdKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25RdWl6KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSU5GT1JNQVRJT05fV0lUSF9NQU5VQUxfQ09NUExFVElPTl0pIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkU2VjdGlvbk1hdGVyaWFscygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNVUlZFWV0pIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkU2VjdGlvblN1cnZleSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLldFQklOQVJdKSB7XHJcbiAgICAgICAgICAgIC8vZG8gbm90aGluZ1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLkZMQVNIQ0FSRF0pIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkU2VjdGlvbkZsYXNoY2FyZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNUZW1wbGF0ZUVkaXRpbmcgPSB0aGlzLmlzQ29udGVudEZyb21UZW1wbGF0ZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCA9PT0gdGhpcy5jb3BpZWRTZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uc3VtbWFyeSA9IHRoaXMuc3VtbWFyeUNvcHkgPyB0aGlzLnN1bW1hcnlDb3B5IDogdGhpcy5zZWxlY3RlZFNlY3Rpb24uc3VtbWFyeTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN1bW1hcnlDb3B5ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5jb3BpZWRTZWN0aW9uSWQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWN0aW9uUXVpek9yU3VydmV5T3JGYWxzaGNhcmQoc2VjdGlvbjogSVNlY3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlFVSVpdIHx8IHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TVVJWRVldXHJcbiAgICAgICAgICAgICAgIHx8IHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5GTEFTSENBUkRdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlY3Rpb25TbGlkZURlY2soc2VjdGlvbjogSVNlY3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNMSURFX0RFQ0tdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlY3Rpb25TbGlkZShzZWN0aW9uOiBJU2VjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuU0xJREVdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlY3Rpb25XZWJpbmFyKHNlY3Rpb246IElTZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5XRUJJTkFSXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWN0aW9uSUxUKHNlY3Rpb246IElTZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5JTFRdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlY3Rpb25JV01DKHNlY3Rpb246IElTZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5JTkZPUk1BVElPTl9XSVRIX01BTlVBTF9DT01QTEVUSU9OXVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENvdXJzZSgpOiBJUHJvbWlzZTxJQ291cnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5nZXQodGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZS5zdGFydERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKHJlc3VsdC5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZXRDb3Vyc2VQYWdlSGVhZGVyQnJlYWRjcnVtYnModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2UsIHRoaXMuY291cnNlc1JvdXRlcik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiRWRpdCBDb3Vyc2VcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRCdW5kbGVGaWxlc0dyaWRNb2RlbCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENvdXJzZUluVXNlKCkge1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmdldENvdXJzZUluVXNlKHRoaXMuY291cnNlSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0NvdXJzZUluVXNlID0gcmVzdWx0LnZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc0NvdXJzZUluVXNlV2FybmluZ01lc3NhZ2VJZk5lZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb3Vyc2VJblVzZSkge1xyXG4gICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiVGhlIGNoYW5nZXMgY2FuIGNhdXNlIHByb2JsZW1zIGluIHBhc3NpbmcgdGhlIGNvdXJzZSBieSB1c2VycyB3aG8gaGFkIGFscmVhZHkgc3RhcnRlZCBpdFwiKTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvdXJzZUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRNb2R1bGVzKCk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0TW9kdWxlcyh0aGlzLmNvdXJzZUlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMubW9kdWxlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkU2VjdGlvbnMoc2V0TWVudUl0ZW06IGJvb2xlYW4pOiBJUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmdldENvdXJzZVNlY3Rpb25zKHRoaXMuY291cnNlSWQsIG51bGwpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tb2R1bGVzLmZvckVhY2gobW9kdWxlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNNYXAuc2V0KG1vZHVsZS5pZCwgcmVzdWx0LmZpbHRlcigoczogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkKSA9PiBzLnNlY3Rpb24ubW9kdWxlSWQgPT0gbW9kdWxlLmlkKSk7XHJcbiAgICAgICAgICAgICAgICBUcmVlRWxlbWVudHNJbmZvRmlsbGVyLmZpbGxIaWVyYXJjaHlJbmZvV2l0aE1heExldmVsKHRoaXMuc2VjdGlvbnNNYXAuZ2V0KG1vZHVsZS5pZCksIE51bWJlci5NQVhfVkFMVUUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uc01hcC5zZXQobW9kdWxlLmlkLCB0aGlzLnNldFNsaWRlc1Zpc2liaWxpdHkodGhpcy5zZWN0aW9uc01hcC5nZXQobW9kdWxlLmlkKSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQXZhaWxhYmxlU2VjdGlvblBhcmVudChtb2R1bGUuaWQsIHRoaXMuc2VjdGlvbnNNYXAuZ2V0KG1vZHVsZS5pZCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHNldE1lbnVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1lbnVJdGVtcyh0aGlzLm1vZHVsZUlkLCB0aGlzLnNlY3Rpb25JZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldE1lbnVJdGVtcyhtb2R1bGVJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChtb2R1bGVJZCAmJiBzZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRMZWZ0TWVudU1vZHVsZShtb2R1bGVJZCk7XHJcbiAgICAgICAgICAgIGxldCBzZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnNNYXAuZ2V0KG1vZHVsZUlkKTtcclxuICAgICAgICAgICAgaWYgKHNlY3Rpb25zICYmIHNlY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVJdGVtKHNlY3Rpb25zLmZpbHRlcihzID0+IHMuc2VjdGlvbi5pZCA9PSBzZWN0aW9uSWQpWzBdLnNlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAobW9kdWxlSWQgJiYgIXNlY3Rpb25JZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGVmdE1lbnVNb2R1bGUobW9kdWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25zID0gdGhpcy5zZWN0aW9uc01hcC5nZXQobW9kdWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25zICYmIHNlY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExlZnRNZW51SXRlbShzZWN0aW9uc1swXS5zZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExlZnRNZW51TW9kdWxlKHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkWzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNMZWZ0TWVudU1vZHVsZUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcsIGxlZnRNb2R1bGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVLZXkudG9wTWVudSA9PSB0b3BNZW51S2V5ICYmIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkLmluZGV4T2YobGVmdE1vZHVsZSkgPiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRTZWN0aW9uc0Zvck1vZHVsZShtb2R1bGVJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5nZXRNb2R1bGVTZWN0aW9ucyh0aGlzLmNvdXJzZUlkLCBtb2R1bGVJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBUcmVlRWxlbWVudHNJbmZvRmlsbGVyLmZpbGxIaWVyYXJjaHlJbmZvV2l0aE1heExldmVsKHJlc3VsdCwgTnVtYmVyLk1BWF9WQUxVRSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNNYXAuc2V0KG1vZHVsZUlkLCB0aGlzLnNldFNsaWRlc1Zpc2liaWxpdHkocmVzdWx0KSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEF2YWlsYWJsZVNlY3Rpb25QYXJlbnQobW9kdWxlSWQsIHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkU2VjdGlvbk1hdGVyaWFscygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlY3Rpb25NYXRlcmlhbHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRTZWN0aW9uQWxsTWF0ZXJpYWxzKHRoaXMuY291cnNlSWQsIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZSwgdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uTWF0ZXJpYWxzID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlY3Rpb25NYXRlcmlhbHMgJiYgdGhpcy5zZWN0aW9uTWF0ZXJpYWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd01hdGVyaWFsKHRoaXMuc2VjdGlvbk1hdGVyaWFsc1swXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVDdXJyZW50TWF0ZXJpYWwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZE1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVNlY3Rpb24oc2VjdGlvbjogSVNlY3Rpb24pOiBhbmd1bGFyLklQcm9taXNlPElTZWN0aW9uPiB7XHJcbiAgICAgICAgaWYgKHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5JTkZPUk1BVElPTl0gfHwgc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OX1dJVEhfTUFOVUFMX0NPTVBMRVRJT05dKSB7XHJcbiAgICAgICAgICAgIHNlY3Rpb24ubWF0ZXJpYWxJZHMgPSB0aGlzLnNlY3Rpb25NYXRlcmlhbHMubWFwKChtYXRlcmlhbDogSU1hdGVyaWFsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0ZXJpYWwuaWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlFVSVpdKSB7XHJcbiAgICAgICAgICAgIHNlY3Rpb24ucXVpeklkID0gdGhpcy5zZWN0aW9uUXVpei5pZDtcclxuICAgICAgICB9IGVsc2UgaWYgKHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TVVJWRVldKSB7XHJcbiAgICAgICAgICAgIHNlY3Rpb24ucXVpeklkID0gdGhpcy5zZWN0aW9uU3VydmV5LmlkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLkZMQVNIQ0FSRF0pIHtcclxuICAgICAgICAgICAgc2VjdGlvbi5xdWl6SWQgPSB0aGlzLnNlY3Rpb25GbGFzaGNhcmQuaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNlcnZpY2UudXBkYXRlU2VjdGlvbih0aGlzLmNvdXJzZUlkLCBzZWN0aW9uLm1vZHVsZUlkLCBzZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRBdmFpbGFibGVTZWN0aW9uUGFyZW50KG1vZHVsZUlkOiBudW1iZXIsIHNlY3Rpb25zOiBBcnJheTxJU2VjdGlvbkluSGllcmFyY2h5Pikge1xyXG4gICAgICAgIHZhciBwYXJlbnRTZWN0aW9ucyA9IFtdO1xyXG4gICAgICAgIHNlY3Rpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHMuc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OXSkgJiYgcy5sZXZlbCA8IDYpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudFNlY3Rpb25zLnB1c2gocyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZVNlY3Rpb25QYXJlbnQuc2V0KG1vZHVsZUlkLCBwYXJlbnRTZWN0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkU2VjdGlvblF1aXooKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uUXVpeiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ucXVpeklkID0gMDtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0U2VjdGlvblF1aXoodGhpcy5jb3Vyc2VJZCwgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlLCB0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvblF1aXogPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnF1aXpJZCA9IHJlc3VsdC5pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlUXVpenplc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkU2VjdGlvblN1cnZleSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlY3Rpb25TdXJ2ZXkgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnF1aXpJZCA9IDA7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFNlY3Rpb25TdXJ2ZXkodGhpcy5jb3Vyc2VJZCwgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlLCB0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvblN1cnZleSA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ucXVpeklkID0gcmVzdWx0LmlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVTdXJ2ZXlzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRTZWN0aW9uRmxhc2hjYXJkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbkZsYXNoY2FyZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ucXVpeklkID0gMDtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0U2VjdGlvbkZsYXNoY2FyZCh0aGlzLmNvdXJzZUlkLCB0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGUsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uRmxhc2hjYXJkID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5xdWl6SWQgPSByZXN1bHQuaWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUZsYXNoY2FyZHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlQ3VycmVudE1hdGVyaWFsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNWaWV3QWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93UmVtb3ZhbE1vZGFsKGNyZWF0aW9uS2V5OiBzdHJpbmcsIG1vZHVsZT86IElNb2R1bGUsIHNlY3Rpb24/OiBJU2VjdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3JlYXRpb25LZXkgPSBjcmVhdGlvbktleTtcclxuICAgICAgICBpZiAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShtb2R1bGUsIHRoaXMubW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlY3Rpb24pIHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHNlY3Rpb24sIHRoaXMuc2VjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI3JlbW92YWxEaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydE1vZHVsZUlubGluZUVkaXQobW9kdWxlOiBJTW9kdWxlKSB7XHJcbiAgICAgICAgdGhpcy5pc01vZHVsZUVkaXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGFuZ3VsYXIuY29weShtb2R1bGUsIHRoaXMuZWRpdGluZ01vZHVsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUVkaXRlZE1vZHVsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5lZGl0aW5nTW9kdWxlLm5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTW9kdWxlVXBkYXRpbmcpIHsgLy8gdG8gZ2V0IHJpZCBvZiBjb25mbGljdHM6IG1vZHVsZSBzdGFydHMgdXBkYXRpbmcgQU5EIHdoZW4gb2stYnV0dG9uIHByZXNzZWRcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNNb2R1bGVVcGRhdGluZyA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQU5EIHdoZW4gaW5wdXQgbG9zZXMgZm9jdXNcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS51cGRhdGVNb2R1bGUodGhpcy5jb3Vyc2VJZCwgdGhpcy5lZGl0aW5nTW9kdWxlKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0aW5nTW9kdWxlID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vZHVsZUVkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW9kdWxlVXBkYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJQbGVhc2Ugc3BlY2lmeSBtb2R1bGUgbmFtZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFF1aXpUb1NlY3Rpb24ocXVpejogSVF1aXopOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Jc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25RdWl6ID0gYW5ndWxhci5jb3B5KHF1aXopO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnF1aXpJZCA9IHF1aXouaWQ7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVRdWl6emVzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgIHRoaXMubGl0ZVNhdmVTZWN0aW9uKHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiUXVpeiBzZWxlY3Rpb24gaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVF1aXpGcm9tU2VjdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Jc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25RdWl6ID0ge307XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ucXVpeklkID0gLTE7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVRdWl6emVzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgIHRoaXMubGl0ZVNhdmVTZWN0aW9uKHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIHF1aXogaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkU3VydmV5VG9TZWN0aW9uKHF1aXo6IElRdWl6KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mb3JtSXNEaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uU3VydmV5ID0gYW5ndWxhci5jb3B5KHF1aXopO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnF1aXpJZCA9IHF1aXouaWQ7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVTdXJ2ZXlzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgIHRoaXMubGl0ZVNhdmVTZWN0aW9uKHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU3VydmV5IHNlbGVjdGlvbiBoYXMgYmVlbiBzYXZlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlU3VydmV5RnJvbVNlY3Rpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mb3JtSXNEaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uU3VydmV5ID0ge307XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ucXVpeklkID0gLTE7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVTdXJ2ZXlzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgIHRoaXMubGl0ZVNhdmVTZWN0aW9uKHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIHN1cnZleSBoYXMgYmVlbiByZW1vdmVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRGbGFzaGNhcmRUb1NlY3Rpb24ocXVpejogSVF1aXopOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Jc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25GbGFzaGNhcmQgPSBhbmd1bGFyLmNvcHkocXVpeik7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ucXVpeklkID0gcXVpei5pZDtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUZsYXNoY2FyZHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgdGhpcy5saXRlU2F2ZVNlY3Rpb24odGhpcy5zZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJGbGFzaGNhcmQgc2VsZWN0aW9uIGhhcyBiZWVuIHNhdmVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVGbGFzaGNhcmRGcm9tU2VjdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Jc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25GbGFzaGNhcmQgPSB7fTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5xdWl6SWQgPSAtMTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUZsYXNoY2FyZHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgdGhpcy5saXRlU2F2ZVNlY3Rpb24odGhpcy5zZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgZmxhc2hjYXJkIGhhcyBiZWVuIHJlbW92ZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWRTZWN0aW9uVHlwZVByb2JsZW1Tb2x1dGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPT09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlBST0JMRU1fU09MVVRJT05dO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhbkNyZWF0aW9uTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tb2R1bGUgPSB7fTtcclxuICAgICAgICB0aGlzLnNlY3Rpb24gPSB7fVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVNb2R1bGVPclNlY3Rpb24oKTogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvdXJzZS5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvdXJzZUJ1bmRsZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQnVuZGxlKClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNyZWF0aW9uUHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTx2b2lkPjtcclxuICAgICAgICBsZXQgaW5kZXggPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbikge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnNvcnRJbmRleDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3JlYXRpb25LZXkgPT09IHRoaXMuTU9EVUxFKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kdWxlLmNvdXJzZUlkID0gdGhpcy5jb3Vyc2VJZDtcclxuICAgICAgICAgICAgdGhpcy5tb2R1bGUuc29ydEluZGV4ID0gdGhpcy5tb2R1bGVzLmxlbmd0aCArIDE7XHJcblxyXG4gICAgICAgICAgICBjcmVhdGlvblByb21pc2UgPSB0aGlzLmNvdXJzZVNlcnZpY2UuY3JlYXRlTW9kdWxlKHRoaXMuY291cnNlSWQsIHRoaXMubW9kdWxlKS50aGVuKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ291cnNlSW5Vc2VXYXJuaW5nTWVzc2FnZUlmTmVlZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGUgPSB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNyZWF0aW9uS2V5ID09PSB0aGlzLlNFQ1RJT04pIHtcclxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uLnR5cGVLZXkgPSBTZWN0aW9uVHlwZVt0aGlzLnR5cGVLZXldO1xyXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb24ubW9kdWxlSWQgPSB0aGlzLm1vZHVsZUlkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWN0aW9uLnR5cGVLZXkgPT0gJ1NVUlZFWScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbi5hY2NlcHRhYmxlTnVtYmVyT2ZBdHRlbXB0cyA9IDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb24uc2VjdGlvblBhc3NpbmdUeXBlID0gU2VjdGlvblBhc3NpbmdUeXBlW1NlY3Rpb25QYXNzaW5nVHlwZS5PUFRJT05BTF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb24uYWNjZXB0YWJsZU51bWJlck9mQXR0ZW1wdHMgPSAtMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbi5zZWN0aW9uUGFzc2luZ1R5cGUgPSBTZWN0aW9uUGFzc2luZ1R5cGVbU2VjdGlvblBhc3NpbmdUeXBlLk1BTkRBVE9SWV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U2VjdGlvbkFjY2Vzc1J1bGVzKHRoaXMuc2VjdGlvbik7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VjdGlvblNvcnRJbmRleCh0aGlzLnNlY3Rpb24pO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dSZWNhbGN1bGF0aW9uTWVzc2FnZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgICAgICBjcmVhdGlvblByb21pc2UgPSB0aGlzLmNvdXJzZVNlcnZpY2UuY3JlYXRlU2VjdGlvbih0aGlzLmNvdXJzZUlkLCB0aGlzLm1vZHVsZUlkLCB0aGlzLnNlY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAudGhlbihzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNTZWN0aW9uU2xpZGUocykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ291cnNlSW5Vc2VXYXJuaW5nTWVzc2FnZUlmTmVlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVLZXkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRTZWN0aW9uc0Zvck1vZHVsZSh0aGlzLm1vZHVsZUlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VjdGlvblNsaWRlKHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNsaWRlc0ZvclNsaWRlRGVjayh0aGlzLmdldFNlY3Rpb25CeUlkKHRoaXMubW9kdWxlSWQsIHMucGFyZW50SWQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2xpZGVTZWN0aW9uQWN0aXZlKHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IG51bGwgJiYgaW5kZXggIT0gdGhpcy5zbGlkZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdTZWN0aW9uID0gdGhpcy5zZWN0aW9uc01hcC5nZXQocy5tb2R1bGVJZCkuZmlsdGVyKHNlY3Rpb24gPT4gc2VjdGlvbi5zZWN0aW9uLmlkID09PSBzLmlkKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWN0aW9uLnNlY3Rpb24uc29ydEluZGV4ID0gdGhpcy5jYWxjdWxhdGVTb3J0SW5kZXhJbkxldmVsT2ZTbGlkZShpbmRleCwgbmV3U2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS51cGRhdGVTZWN0aW9uSGllcmFyY2h5KHRoaXMuY291cnNlSWQsIG5ld1NlY3Rpb24uc2VjdGlvbi5tb2R1bGVJZCwgbmV3U2VjdGlvbi5zZWN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0OiBJU2VjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkNvdXJzZSBoaWVyYXJjaHkgaGFzIGJlZW4gY2hhbmdlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cGRhdGVTZWN0aW9uc1Byb21pc2VzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTZWN0aW9uc1Byb21pc2VzLnB1c2godGhpcy5sb2FkU2VjdGlvbnNGb3JNb2R1bGUocmVzdWx0Lm1vZHVsZUlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNsaWRlc0ZvclNsaWRlRGVjayh0aGlzLmdldFNlY3Rpb25CeUlkKHJlc3VsdC5tb2R1bGVJZCwgcmVzdWx0LnBhcmVudElkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2ZldGNoIHVwZGF0ZWQgZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5hbGwodXBkYXRlU2VjdGlvbnNQcm9taXNlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cGRhdGVkU2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNNYXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQodGhpcy5zZWxlY3RlZFNlY3Rpb24ubW9kdWxlSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5pZCA9PT0gdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQpLnBvcCgpLnNlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLm1vZHVsZUlkID0gdXBkYXRlZFNlY3Rpb24ubW9kdWxlSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnBhcmVudElkID0gdXBkYXRlZFNlY3Rpb24ucGFyZW50SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnNvcnRJbmRleCA9IHVwZGF0ZWRTZWN0aW9uLnNvcnRJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoID0gdXBkYXRlZFNlY3Rpb24uY291cnNld2lkZVNvcnRQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi52ZXJzaW9uID0gdXBkYXRlZFNlY3Rpb24udmVyc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYXVkaW9GaWxlVXJsID0gdGhpcy5nZXRBdWRpb0ZpbGVVcmwodGhpcy5zZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3JlYXRpb25Qcm9taXNlLmZpbmFsbHkoKCkgPT4gdGhpcy5zZXRMZWZ0TWVudU1vZHVsZSh0aGlzLm1vZHVsZUlkKSk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0aW9uUHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFNlY3Rpb25Tb3J0SW5kZXgoc2VjdGlvbjogSVNlY3Rpb24pIHtcclxuICAgICAgICBpZiAoc2VjdGlvbi5wYXJlbnRJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNNYXAuZ2V0KHRoaXMubW9kdWxlSWQpLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocy5zZWN0aW9uLmlkID09IHNlY3Rpb24ucGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNvcnRJbmRleCA9IHMuY2hpbGRyZW4ubGVuZ3RoICsgMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VjdGlvbnNNYXAuZ2V0KHRoaXMubW9kdWxlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uLnNvcnRJbmRleCA9IHRoaXMuc2VjdGlvbnNNYXAuZ2V0KHRoaXMubW9kdWxlSWQpLmxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uLnNvcnRJbmRleCA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZU1vZHVsZShtb2R1bGU6IElNb2R1bGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkUmVtb3ZlTW9kdWxlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB2YXIgZGVsZXRlU2VsZWN0ZWRNb2R1bGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQuaW5kZXhPZihtb2R1bGUuaWQpID4gLTEpIHtcclxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWRNb2R1bGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaXNNb2R1bGVOb3RFbXB0eSA9IHRoaXMuc2VjdGlvbnNNYXAuZGVsZXRlKG1vZHVsZS5pZCk7XHJcbiAgICAgICAgaWYgKGlzTW9kdWxlTm90RW1wdHkpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVjYWxjdWxhdGlvbk1lc3NhZ2UoKTtcclxuICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmRlbGV0ZU1vZHVsZSh0aGlzLmNvdXJzZUlkLCBtb2R1bGUuaWQsIG1vZHVsZS52ZXJzaW9uKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvdXJzZUluVXNlV2FybmluZ01lc3NhZ2VJZk5lZWQoKTtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFJlbW92ZU1vZHVsZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm1vZHVsZSA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Jc0RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChkZWxldGVTZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW0gPSB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW1UeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkLnNsaWNlKHRoaXMubWVudUtleS5sZWZ0TWVudU1vZHVsZUV4cGFuZGVkLmluZGV4T2YobW9kdWxlLmlkKSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpc01vZHVsZU5vdEVtcHR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVTZWN0aW9uKHNlY3Rpb246IElTZWN0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFJlbW92ZVNlY3Rpb25CdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW9kdWxlSWQgPSBzZWN0aW9uLm1vZHVsZUlkO1xyXG4gICAgICAgIHZhciBkZWxldGVTZWxlY3RlZFNlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IHNlY3Rpb247XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmlkID09IHNlY3Rpb24uaWQgfHwgdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24uaWQgPT0gc2VjdGlvbi5pZCApIHtcclxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWRTZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmRlbGV0ZVNlY3Rpb24odGhpcy5jb3Vyc2VJZCwgc2VjdGlvbi5tb2R1bGVJZCwgc2VjdGlvbi5pZCwgc2VjdGlvbi52ZXJzaW9uKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1NlY3Rpb25TbGlkZShzZWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ291cnNlSW5Vc2VXYXJuaW5nTWVzc2FnZUlmTmVlZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25zKGZhbHNlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VIYXNNYW5kYXRvcnlTZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRDb3Vyc2VTZWN0aW9ucyh0aGlzLmNvdXJzZUlkLCBudWxsKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhTZWN0aW9uc0xlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc01hbmRhdG9yeVNlY3Rpb24gJiYgdGhpcy5jb3Vyc2UucmVxdWlyZWRFbGVjdGl2ZXNOdW1iZXIgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNlbGVjdGl2ZXNSZXF1aXJlZE1vZGFsJykubW9kYWwoJ3Nob3cnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1NlY3Rpb25TbGlkZShzZWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlNsaWRlIGhhcyBiZWVuIHJlbW92ZWRcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIHNlY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkUmVtb3ZlU2VjdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb24gPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtSXNEaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoZGVsZXRlU2VsZWN0ZWRTZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbVR5cGUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25zRm9yTW9kdWxlKHRoaXMubW9kdWxlSWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWN0aW9uU2xpZGUoc2VjdGlvbikgJiYgdGhpcy5zbGlkZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2xpZGVzRm9yU2xpZGVEZWNrKHRoaXMuZ2V0U2VjdGlvbkJ5SWQoc2VjdGlvbi5tb2R1bGVJZCwgc2VjdGlvbi5wYXJlbnRJZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2xpZGVTZWN0aW9uQWN0aXZlKHRoaXMuc2xpZGVzWzBdLnNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdFNlY3Rpb25QYXJlbnQoKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnVwZGF0ZVNlY3Rpb25IaWVyYXJjaHkodGhpcy5jb3Vyc2VJZCwgdGhpcy5lZGl0aW5nU2VjdGlvbi5tb2R1bGVJZCwgdGhpcy5lZGl0aW5nU2VjdGlvbilcclxuICAgICAgICAgICAgLnRoZW4odXBkYXRlZFNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ291cnNlSW5Vc2VXYXJuaW5nTWVzc2FnZUlmTmVlZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0aW5nU2VjdGlvbiA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlY3Rpb25FZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTZWN0aW9uc0Zvck1vZHVsZSh1cGRhdGVkU2VjdGlvbi5tb2R1bGVJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb24uaWQgPT0gdXBkYXRlZFNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodXBkYXRlZFNlY3Rpb24sIHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgc2VjdGlvbiBoYXMgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZpZXdDb3Vyc2VVcmw6ICgpID0+IHN0cmluZyA9ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQubGVuZ3RoICE9IDAgJiYgdGhpcy5tZW51S2V5LmxlZnRNZW51SXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VzUm91dGVyLnNlY3Rpb25EZXRhaWxzUm91dGUodGhpcy5jb3Vyc2VJZCwgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWRbMF0sIHRoaXMubWVudUtleS5sZWZ0TWVudUl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwodGhpcy5jb3Vyc2VJZCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVNb2R1bGVLZXlQcmVzcygkZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGlmICgkZXZlbnQua2V5Q29kZSA9PSBLZXlzLkVOVEVSICYmIHRoaXMubW9kdWxlLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVNb2R1bGVPclNlY3Rpb24oKTtcclxuICAgICAgICAgICAgJChcIiNjcmVhdGlvbkRpYWxvZ1wiKS5tb2RhbChcInRvZ2dsZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5Nb2R1bGVGcm9tQnVuZGxlRmlsZXNEaWFsb2coKSB7XHJcbiAgICAgICAgJChcIiNtb2R1bGVGcm9tQnVuZGxlRmlsZXNNb2RhbFwiKVxyXG4gICAgICAgICAgICAubW9kYWwoe3Nob3c6IHRydWV9KVxyXG4gICAgICAgICAgICAub24oXCJoaWRkZW4uYnMubW9kYWxcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVGcm9tQnVuZGxlRmlsZXNJbnB1dC5tb2R1bGVJZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZUZyb21CdW5kbGVGaWxlc0lucHV0LnNlbGVjdGVkRmlsZUtleXMuc3BsaWNlKDAsIHRoaXMubW9kdWxlRnJvbUJ1bmRsZUZpbGVzSW5wdXQuc2VsZWN0ZWRGaWxlS2V5cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CdW5kbGVGaWxlU2VsZWN0KGJ1bmRsZUZpbGU6IElCdW5kbGVGaWxlKSB7XHJcbiAgICAgICAgaWYgKCEoPGFueT5idW5kbGVGaWxlKS5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZHVsZUZyb21CdW5kbGVGaWxlc0lucHV0LnNlbGVjdGVkRmlsZUtleXMuc3BsaWNlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVGcm9tQnVuZGxlRmlsZXNJbnB1dC5zZWxlY3RlZEZpbGVLZXlzLmluZGV4T2YoYnVuZGxlRmlsZS5rZXkpLCAxXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZHVsZUZyb21CdW5kbGVGaWxlc0lucHV0LnNlbGVjdGVkRmlsZUtleXMucHVzaChidW5kbGVGaWxlLmtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVNb2R1bGVGcm9tQnVuZGxlRmlsZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlRnJvbUJ1bmRsZUZpbGVzSW5wdXQuc2VsZWN0ZWRGaWxlS2V5cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5jcmVhdGVNb2R1bGVTdHJ1Y3R1cmVGcm9tQnVuZGxlRmlsZXModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2UudmVyc2lvbixcclxuICAgICAgICAgICAgdGhpcy5tb2R1bGVGcm9tQnVuZGxlRmlsZXNJbnB1dC5tb2R1bGVJZCwgdGhpcy5tb2R1bGVGcm9tQnVuZGxlRmlsZXNJbnB1dC5zZWxlY3RlZEZpbGVLZXlzKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTW9kdWxlIHN0cnVjdHVyZSB3YXMgY3JlYXRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25zKHRydWUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJNb2R1bGUgc3RydWN0dXJlIGNhbm5vdCBiZSBjcmVhdGVkIHdpdGggc2V0dGluZ3MgcHJvdmlkZWRcIilcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRCdW5kbGVGaWxlc0dyaWRNb2RlbCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY291cnNlLmJ1bmRsZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlLmJ1bmRsZUlkID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idW5kbGVGaWxlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElCdW5kbGVGaWxlPih0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9idW5kbGVzL1wiICsgdGhpcy5jb3Vyc2UuYnVuZGxlSWQgKyBcIi9maWxlc1wiKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwucGFnZVNpemUgPSA2O1xyXG4gICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwuZmlsdGVyLmJ1bmRsZUZpbGVUeXBlID0gQnVuZGxlRmlsZVR5cGVFbnVtW0J1bmRsZUZpbGVUeXBlRW51bS5IVE1MXTtcclxuICAgICAgICB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih7XHJcbiAgICAgICAgICAgIHN0YXJ0TG9hZGluZzogKCkgPT4ge1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbmRMb2FkaW5nOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1bmRsZUZpbGVzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaCgoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kdWxlRnJvbUJ1bmRsZUZpbGVzSW5wdXQuc2VsZWN0ZWRGaWxlS2V5cy5pbmRleE9mKGUua2V5KSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd1JlY2FsY3VsYXRpb25NZXNzYWdlKCkge1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJDb3Vyc2UgcHJvZ3Jlc3MgcmVjYWxjdWxhdGlvbiBoYXMgYmVlbiBzdGFydGVkLiBQbGVhc2Ugd2FpdC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWFjdGl2YXRlTWFpbkNvbnRlbnQoKSB7XHJcbiAgICAgICAgbGV0IG1haW5FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggXCIjcHJlc2VudGF0aW9uLWltcG9ydC1kaXNhYmxlXCIpO1xyXG4gICAgICAgIG1haW5FbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZU1haW5Db250ZW50KCkge1xyXG4gICAgICAgIGxldCBtYWluRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIFwiI3ByZXNlbnRhdGlvbi1pbXBvcnQtZGlzYWJsZVwiKTtcclxuICAgICAgICBtYWluRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNTZWN0aW9uQmxvY2tpbmdDaGFuZ2VkKHNlY3Rpb246IElTZWN0aW9uKSB7XHJcbiAgICAgICAgbGV0IHNlY3Rpb25CZWZvcmVFZGl0OiBJU2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNNYXAuZ2V0KHNlY3Rpb24ubW9kdWxlSWQpLmZpbHRlcihzID0+IHMuc2VjdGlvbi5pZCA9PT0gc2VjdGlvbi5pZCkucG9wKCkuc2VjdGlvbjtcclxuICAgICAgICBsZXQgaXNTZWN0aW9uQmxvY2tpbmdDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHNlY3Rpb25CZWZvcmVFZGl0KSB7XHJcbiAgICAgICAgICAgIGlzU2VjdGlvbkJsb2NraW5nQ2hhbmdlZCA9IHNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgIT0gc2VjdGlvbkJlZm9yZUVkaXQuYmxvY2tpbmdOZXh0U2VjdGlvbnNcclxuICAgICAgICAgICAgICAgIHx8IHNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgIT0gc2VjdGlvbkJlZm9yZUVkaXQubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWRcclxuICAgICAgICAgICAgICAgIHx8IHNlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCAhPSBzZWN0aW9uQmVmb3JlRWRpdC5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNTZWN0aW9uQmxvY2tpbmdDaGFuZ2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN0aW9uQnlJZChtb2R1bGVJZCwgc2VjdGlvbklkOiBudW1iZXIpOiBJU2VjdGlvbiB7XHJcbiAgICAgICAgZm9yIChsZXQgcyBvZiB0aGlzLnNlY3Rpb25zTWFwLmdldChtb2R1bGVJZCkpIHtcclxuICAgICAgICAgICAgaWYgKHMuc2VjdGlvbi5pZCA9PSBzZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzLnNlY3Rpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ29udGVudEZyb21UZW1wbGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFNlY3Rpb24uc3VtbWFyeSAhPSBudWxsID9cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uc3VtbWFyeS5pbmRleE9mKFwiPGRpdiBjbGFzcz1cXFwidmhzLXRlbXBsYXRlXCIpID49IDAgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVNlY3Rpb25Bc1BkZihzZWN0aW9uOiBJU2VjdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTYXZlU2VjdGlvbkFzUGRmQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zYXZlU2VjdGlvbkFzUGRmKHNlY3Rpb24uY291cnNlSWQsIHNlY3Rpb24ubW9kdWxlSWQsIHNlY3Rpb24uaWQpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQgYXMgcGRmIGZpbGVcIik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlVuYWJsZSBzYXZlIHNlY3Rpb24gYXMgcGRmIGZpbGVcIik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTYXZlU2VjdGlvbkFzUGRmQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRDdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OXVxyXG4gICAgICAgICAgICB8fCB0aGlzLnNlbGVjdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OX1dJVEhfTUFOVUFMX0NPTVBMRVRJT05dKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyAmJiAhdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuTUFOREFUT1JZX0lOVFJPX0lORk9dO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnNlbGVjdGVkU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyAmJiAhdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuRlJFRV9SRUlOX0xFU1NPTl9JTkZPXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuU0VRVUVOVElBTF9MRVNTT05fSU5GT107XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmICF0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkNPTkNMVVNJT05fSU5GT107XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPSB0aGlzLnNldERlZmF1bHRTZWN0aW9uQWNjZXNzUnVsZXModGhpcy5zZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtSXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlFVSVpdKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyAmJiAhdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuUFJFX0FTU0VTU01FTlRfUVVJWl07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuSU5URVJJTV9BU1NFU1NNRU5UX1FVSVpdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnNlbGVjdGVkU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyAmJiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCAmJiAhdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID0gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5TVU1NQVRJVkVfQVNTRVNTTUVOVF9RVUlaXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmICF0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkZPUk1BVElWRV9BU1NFU1NNRU5UX1FVSVpdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID0gdGhpcy5zZXREZWZhdWx0U2VjdGlvbkFjY2Vzc1J1bGVzKHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUlzRGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TVVJWRVldKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmICF0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkFMV0FZU19BVkFJTEFCTEVfU1VSVkVZXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQVZBSUxBQkxFX1dIRU5fUFJFVklPVVNfU0VDVElPTl9DT01QTEVURURfU1VSVkVZXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQVZBSUxBQkxFX1dIRU5fQUxMX1BSRVZJT1VTX1NFQ1RJT05TX0NPTVBMRVRFRF9TVVJWRVldO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID0gdGhpcy5zZXREZWZhdWx0U2VjdGlvbkFjY2Vzc1J1bGVzKHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUlzRGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5XRUJJTkFSXSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zICYmICF0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCAmJiAhdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID0gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5SRUdJU1RSQVRJT05fQUxXQVlTX0FWQUlMQUJMRV9XRUJJTkFSXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQVZBSUxBQkxFX1dIRU5fUFJFVklPVVNfU0VDVElPTl9DT01QTEVURURfV0VCSU5BUl07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmICF0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkFWQUlMQUJMRV9XSEVOX0FMTF9QUkVWSU9VU19TRUNUSU9OU19DT01QTEVURURfV0VCSU5BUl07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPSB0aGlzLnNldERlZmF1bHRTZWN0aW9uQWNjZXNzUnVsZXModGhpcy5zZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtSXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklMVF0pIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyAmJiAhdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuUkVHSVNUUkFUSU9OX0FMV0FZU19BVkFJTEFCTEVfSUxUXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQVZBSUxBQkxFX1dIRU5fUFJFVklPVVNfU0VDVElPTl9DT01QTEVURURfSUxUXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQVZBSUxBQkxFX1dIRU5fQUxMX1BSRVZJT1VTX1NFQ1RJT05TX0NPTVBMRVRFRF9JTFRdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID0gdGhpcy5zZXREZWZhdWx0U2VjdGlvbkFjY2Vzc1J1bGVzKHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUlzRGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5GTEFTSENBUkRdKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmICF0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkFMV0FZU19BVkFJTEFCTEVfRkxBU0hDQVJEXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQVZBSUxBQkxFX1dIRU5fUFJFVklPVVNfU0VDVElPTl9DT01QTEVURURfRkxBU0hDQVJEXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgJiYgIXRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQVZBSUxBQkxFX1dIRU5fQUxMX1BSRVZJT1VTX1NFQ1RJT05TX0NPTVBMRVRFRF9GTEFTSENBUkRdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID0gdGhpcy5zZXREZWZhdWx0U2VjdGlvbkFjY2Vzc1J1bGVzKHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUlzRGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TTElERV9ERUNLXSB8fCB0aGlzLnNlbGVjdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNMSURFXSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgIXRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmICF0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLk1BTkRBVE9SWV9JTlRST19TTElERV9ERUNLXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgJiYgIXRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkICYmICF0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkZSRUVfUkVJTl9MRVNTT05fU0xJREVfREVDS107XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zICYmICF0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCAmJiB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLlNFUVVFTlRJQUxfTEVTU09OX1NMSURFX0RFQ0tdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyAmJiB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCAmJiAhdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID0gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5DT05DTFVTSU9OX1NMSURFX0RFQ0tdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID0gdGhpcy5zZXREZWZhdWx0U2VjdGlvbkFjY2Vzc1J1bGVzKHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUlzRGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldERlZmF1bHRTZWN0aW9uQWNjZXNzUnVsZXMoc2VjdGlvbjogSVNlY3Rpb24pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChzZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSU5GT1JNQVRJT05dXHJcbiAgICAgICAgICAgIHx8IHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5JTkZPUk1BVElPTl9XSVRIX01BTlVBTF9DT01QTEVUSU9OXSkge1xyXG4gICAgICAgICAgICBzZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkZSRUVfUkVJTl9MRVNTT05fSU5GT107XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuUVVJWl0pIHtcclxuICAgICAgICAgICAgc2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuSU5URVJJTV9BU1NFU1NNRU5UX1FVSVpdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNVUlZFWV0pIHtcclxuICAgICAgICAgICAgc2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5BTFdBWVNfQVZBSUxBQkxFX1NVUlZFWV07XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuV0VCSU5BUl0pIHtcclxuICAgICAgICAgICAgc2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5SRUdJU1RSQVRJT05fQUxXQVlTX0FWQUlMQUJMRV9XRUJJTkFSXTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5JTFRdKSB7XHJcbiAgICAgICAgICAgIHNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuUkVHSVNUUkFUSU9OX0FMV0FZU19BVkFJTEFCTEVfSUxUXTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5GTEFTSENBUkRdKSB7XHJcbiAgICAgICAgICAgIHNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQUxXQVlTX0FWQUlMQUJMRV9GTEFTSENBUkRdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNMSURFX0RFQ0tdXHJcbiAgICAgICAgICAgIHx8IHNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TTElERV0pIHtcclxuICAgICAgICAgICAgc2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5GUkVFX1JFSU5fTEVTU09OX1NMSURFX0RFQ0tdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OXVxyXG4gICAgICAgICAgICB8fCB0aGlzLnNlbGVjdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLklORk9STUFUSU9OX1dJVEhfTUFOVUFMX0NPTVBMRVRJT05dKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPT0gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5NQU5EQVRPUllfSU5UUk9fSU5GT10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuRlJFRV9SRUlOX0xFU1NPTl9JTkZPXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuU0VRVUVOVElBTF9MRVNTT05fSU5GT10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQ09OQ0xVU0lPTl9JTkZPXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5RVUlaXSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuUFJFX0FTU0VTU01FTlRfUVVJWl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuSU5URVJJTV9BU1NFU1NNRU5UX1FVSVpdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuU1VNTUFUSVZFX0FTU0VTU01FTlRfUVVJWl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuRk9STUFUSVZFX0FTU0VTU01FTlRfUVVJWl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi50eXBlS2V5ID09IFNlY3Rpb25UeXBlW1NlY3Rpb25UeXBlLlNVUlZFWV0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9PSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkFMV0FZU19BVkFJTEFCTEVfU1VSVkVZXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQVZBSUxBQkxFX1dIRU5fUFJFVklPVVNfU0VDVElPTl9DT01QTEVURURfU1VSVkVZXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPT0gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5BVkFJTEFCTEVfV0hFTl9BTExfUFJFVklPVVNfU0VDVElPTlNfQ09NUExFVEVEX1NVUlZFWV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuRkxBU0hDQVJEXSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQUxXQVlTX0FWQUlMQUJMRV9GTEFTSENBUkRdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPT0gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5BVkFJTEFCTEVfV0hFTl9QUkVWSU9VU19TRUNUSU9OX0NPTVBMRVRFRF9GTEFTSENBUkRdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9PSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkFWQUlMQUJMRV9XSEVOX0FMTF9QUkVWSU9VU19TRUNUSU9OU19DT01QTEVURURfRkxBU0hDQVJEXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5XRUJJTkFSXSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuUkVHSVNUUkFUSU9OX0FMV0FZU19BVkFJTEFCTEVfV0VCSU5BUl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9PSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkFWQUlMQUJMRV9XSEVOX1BSRVZJT1VTX1NFQ1RJT05fQ09NUExFVEVEX1dFQklOQVJdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9PSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLkFWQUlMQUJMRV9XSEVOX0FMTF9QUkVWSU9VU19TRUNUSU9OU19DT01QTEVURURfV0VCSU5BUl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuSUxUXSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuUkVHSVNUUkFUSU9OX0FMV0FZU19BVkFJTEFCTEVfSUxUXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2VjdGlvbkFjY2Vzc1J1bGVzID09IFNlY3Rpb25BY2Nlc3NSdWxlc1tTZWN0aW9uQWNjZXNzUnVsZXMuQVZBSUxBQkxFX1dIRU5fUFJFVklPVVNfU0VDVElPTl9DT01QTEVURURfSUxUXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPT0gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5BVkFJTEFCTEVfV0hFTl9BTExfUFJFVklPVVNfU0VDVElPTlNfQ09NUExFVEVEX0lMVF0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmJsb2NraW5nTmV4dFNlY3Rpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxQcmV2aW91c1NlY3Rpb25zUmVhZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLnR5cGVLZXkgPT0gU2VjdGlvblR5cGVbU2VjdGlvblR5cGUuU0xJREVfREVDS10gfHwgdGhpcy5zZWxlY3RlZFNlY3Rpb24udHlwZUtleSA9PSBTZWN0aW9uVHlwZVtTZWN0aW9uVHlwZS5TTElERV0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNlY3Rpb25BY2Nlc3NSdWxlcyA9PSBTZWN0aW9uQWNjZXNzUnVsZXNbU2VjdGlvbkFjY2Vzc1J1bGVzLk1BTkRBVE9SWV9JTlRST19TTElERV9ERUNLXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPT0gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5GUkVFX1JFSU5fTEVTU09OX1NMSURFX0RFQ0tdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLmxvY2tVbnRpbE9uZVByZXZpb3VzU2VjdGlvblJlYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPT0gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5TRVFVRU5USUFMX0xFU1NPTl9TTElERV9ERUNLXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24uYmxvY2tpbmdOZXh0U2VjdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLmxvY2tVbnRpbFByZXZpb3VzU2VjdGlvbnNSZWFkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5sb2NrVW50aWxPbmVQcmV2aW91c1NlY3Rpb25SZWFkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTZWN0aW9uQWNjZXNzUnVsZXMgPT0gU2VjdGlvbkFjY2Vzc1J1bGVzW1NlY3Rpb25BY2Nlc3NSdWxlcy5DT05DTFVTSU9OX1NMSURFX0RFQ0tdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5ibG9ja2luZ05leHRTZWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24ubG9ja1VudGlsUHJldmlvdXNTZWN0aW9uc1JlYWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24ubG9ja1VudGlsT25lUHJldmlvdXNTZWN0aW9uUmVhZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNyZWRpdHNDaGFuZ2VDYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLnNldEZvcm1Jc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplTWF0ZXJpYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVNYXRlcmlhbENyZWF0aW9uRm9ybSgpO1xyXG4gICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChcImluaXRpYWxpemVNYXRlcmlhbFwiKTtcclxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1vZHVsZUJ5SWQobW9kdWxlSWQpOiBJTW9kdWxlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVzLmZpbHRlcihtID0+IG0uaWQgPT09IG1vZHVsZUlkKVswXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2xpZGVUZW1wbGF0ZXMoKSB7XHJcbiAgICAgICAgdGhpcy5zbGlkZVNlcnZpY2UuZ2V0U2xpZGVUZW1wbGF0ZXModGhpcy5jb3Vyc2UuaWQgLHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVtcHR5VGVtcGxhdGU6IElTbGlkZVRlbXBsYXRlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFnTmFtZXNMaXN0OiBbJ2VtcHR5J10sXHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVUZW1wbGF0ZUh0bWw6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbXB0eSBzbGlkZVwiXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZVRlbXBsYXRlcyA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZVRlbXBsYXRlcy5wdXNoKGVtcHR5VGVtcGxhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZVRlbXBsYXRlcy5mb3JFYWNoKHNsaWRlVGVtcGxhdGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlVGVtcGxhdGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVUZW1wbGF0ZS50YWdOYW1lc0xpc3QuZm9yRWFjaCh0YWcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50YWdOYW1lc0xpc3QuZmlsdGVyKHRhZ05hbWUgPT4gdGFnTmFtZS50b0xvd2VyQ2FzZSgpID09IHRhZy50b0xvd2VyQ2FzZSgpKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFnTmFtZXNMaXN0LnB1c2godGFnLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFNsaWRlKHNsaWRlRGVja1BhcmVudElkOiBudW1iZXIsIHNsaWRlRGVja1BhcmVudE5hbWU6IHN0cmluZywgbW9kdWxlSWQ6IG51bWJlciwgc2xpZGVUZW1wbGF0ZTogSVNsaWRlVGVtcGxhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRlbXBsYXRlOiBzdHJpbmcsIGhlYWRlcj86IHN0cmluZywgdGV4dD86IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMubW9kdWxlSWQgPSBtb2R1bGVJZDtcclxuICAgICAgICB0aGlzLmNyZWF0aW9uS2V5ID0gdGhpcy5TRUNUSU9OO1xyXG4gICAgICAgIHRoaXMudHlwZUtleSA9IFNlY3Rpb25UeXBlLlNMSURFO1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbi5wYXJlbnRJZCA9IHNsaWRlRGVja1BhcmVudElkO1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbi5uYW1lID0gc2xpZGVEZWNrUGFyZW50TmFtZTtcclxuICAgICAgICBsZXQgaW5kZXggPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbiAmJiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5zb3J0SW5kZXgpIHtcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLnNlbGVjdGVkU2VjdGlvbi5zb3J0SW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzbGlkZVRlbXBsYXRlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uLnNsaWRlVGVtcGxhdGVJZCA9IHNsaWRlVGVtcGxhdGUuaWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbi5zdW1tYXJ5ID0gdGhpcy5maW5kU2xpZGVJbmZvQW5kUmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJGaWVsZChtb2R1bGVJZCwgc2xpZGVUZW1wbGF0ZS5zbGlkZVRlbXBsYXRlSHRtbCxcclxuICAgICAgICAgICAgICAgIGluZGV4ID09IG51bGwgPyB0aGlzLnNsaWRlcy5sZW5ndGggKyAxIDogaW5kZXggKyAxLCB0aGlzLnNsaWRlcy5sZW5ndGggKyAxKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRlZmF1bHRUZW1wbGF0ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbi5zdW1tYXJ5ID0gdGhpcy5maW5kU2xpZGVJbmZvQW5kUmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJGaWVsZChtb2R1bGVJZCwgJChcIiNcIiArIGRlZmF1bHRUZW1wbGF0ZSkuaHRtbCgpLFxyXG4gICAgICAgICAgICAgICAgaW5kZXggPT0gbnVsbCA/IHRoaXMuc2xpZGVzLmxlbmd0aCArIDEgOiBpbmRleCArIDEsIHRoaXMuc2xpZGVzLmxlbmd0aCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGVhZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbi5zdW1tYXJ5ID0gVmhzVGVtcGxhdGVTZXJ2aWNlLnJlcGxhY2VUZW1wbGF0ZVBsYWNlaG9sZGVyRmllbGQodGhpcy5zZWN0aW9uLnN1bW1hcnksICdzZWN0aW9uTmFtZScsIGhlYWRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbi5zdW1tYXJ5ID0gVmhzVGVtcGxhdGVTZXJ2aWNlLnJlcGxhY2VUZW1wbGF0ZUJsb2NrQ29udGVudCh0aGlzLnNlY3Rpb24uc3VtbWFyeSwgdGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU1vZHVsZU9yU2VjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkdXBsaWNhdGVTbGlkZShzZWxlY3RlZFNlY3Rpb246IElTZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uLnN1bW1hcnkgPSBzZWxlY3RlZFNlY3Rpb24uc3VtbWFyeTtcclxuICAgICAgICB0aGlzLnNlY3Rpb24uZGVsYXkgPSBzZWxlY3RlZFNlY3Rpb24uZGVsYXk7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uLmF1ZGlvRmlsZUlkID0gc2VsZWN0ZWRTZWN0aW9uLmF1ZGlvRmlsZUlkO1xyXG4gICAgICAgIHRoaXMuYWRkU2xpZGUodGhpcy5zZWxlY3RlZFNlY3Rpb24ucGFyZW50SWQsIHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLm5hbWUsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLm1vZHVsZUlkLCBudWxsLCBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmluZFNsaWRlSW5mb0FuZFJlcGxhY2VUZW1wbGF0ZVBsYWNlaG9sZGVyRmllbGQobW9kdWxlSWQ6IG51bWJlciwgaHRtbDogc3RyaW5nLCBzbGlkZU51bWJlcjogbnVtYmVyLCBzbGlkZURlY2tUb3RhbFNsaWRlczogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IG1vZHVsZSA9IHRoaXMuZ2V0TW9kdWxlQnlJZChtb2R1bGVJZCk7XHJcbiAgICAgICAgbGV0IHNlY3Rpb24gPSB0aGlzLmdldFBhcmVudFNlY3Rpb25PZlRoZUZpcnN0TGV2ZWwobW9kdWxlSWQsIHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCk7XHJcbiAgICAgICAgY29uc3Qgc2xpZGVJbmZvOiBJU2xpZGVJbmZvID0ge307XHJcbiAgICAgICAgc2xpZGVJbmZvLmNvdXJzZU5hbWUgPSB0aGlzLmNvdXJzZSA/IHRoaXMuY291cnNlLnRvcGljIDogbnVsbDtcclxuICAgICAgICBzbGlkZUluZm8ubW9kdWxlTnVtYmVyID0gbW9kdWxlID8gbW9kdWxlLnNvcnRJbmRleC50b1N0cmluZygpIDogbnVsbDtcclxuICAgICAgICBzbGlkZUluZm8ubW9kdWxlTmFtZSA9IG1vZHVsZSA/IG1vZHVsZS5uYW1lIDogbnVsbDtcclxuICAgICAgICBzbGlkZUluZm8uc2VjdGlvbk51bWJlciA9IHNlY3Rpb24gPyBzZWN0aW9uLnNlY3Rpb24uc29ydEluZGV4LnRvU3RyaW5nKCkgOiBudWxsO1xyXG4gICAgICAgIHNsaWRlSW5mby5zZWN0aW9uTmFtZSA9IHNlY3Rpb24gPyBzZWN0aW9uLnNlY3Rpb24ubmFtZSA6IG51bGw7XHJcbiAgICAgICAgc2xpZGVJbmZvLnNsaWRlRGVja051bWJlciA9IHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uID8gdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24uc29ydEluZGV4LnRvU3RyaW5nKCkgOiBudWxsO1xyXG4gICAgICAgIHNsaWRlSW5mby5zbGlkZURlY2tOYW1lID0gdGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24gPyB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5uYW1lIDogbnVsbDtcclxuICAgICAgICBzbGlkZUluZm8uc2xpZGVEZWNrQWJzb2x1dGVOdW1iZXIgPSB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbiA/IHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLmNvdXJzZXdpZGVTb3J0UGF0aCA6IG51bGw7XHJcbiAgICAgICAgc2xpZGVJbmZvLnNsaWRlRGVja1RvdGFsU2xpZGVzID0gdGhpcy5zbGlkZXMgPyBzbGlkZURlY2tUb3RhbFNsaWRlcy50b1N0cmluZygpIDogbnVsbDtcclxuICAgICAgICBzbGlkZUluZm8uc2xpZGVOdW1iZXIgPSB0aGlzLnNlbGVjdGVkU2VjdGlvbiA/IHNsaWRlTnVtYmVyLnRvU3RyaW5nKCkgOiBudWxsO1xyXG4gICAgICAgIGlmIChzbGlkZUluZm8pIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGROYW1lIGluIHNsaWRlSW5mbykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNsaWRlSW5mby5oYXNPd25Qcm9wZXJ0eShmaWVsZE5hbWUpICYmIHNsaWRlSW5mb1tmaWVsZE5hbWVdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IFZoc1RlbXBsYXRlU2VydmljZS5yZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlckZpZWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLCBmaWVsZE5hbWUsIHNsaWRlSW5mb1tmaWVsZE5hbWVdXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gVmhzVGVtcGxhdGVTZXJ2aWNlLnJlcGxhY2VBbGxXaGl0ZXNwYWNlcyhodG1sKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UGFyZW50U2VjdGlvbk9mVGhlRmlyc3RMZXZlbChtb2R1bGVJZDogbnVtYmVyLCBjb3Vyc2VXaWRlU29ydFBhdGg6IHN0cmluZyk6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZCB7XHJcbiAgICAgICAgbGV0IGNvdXJzZVdpZGVTb3J0UGF0aEZvclNlYXJjaCA9IGNvdXJzZVdpZGVTb3J0UGF0aC5zdWJzdHJpbmcoMCwgMTApO1xyXG4gICAgICAgIGxldCBzZWN0aW9uRm9yUmV0dXJuID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlY3Rpb25zTWFwLmdldChtb2R1bGVJZCkuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlY3Rpb24uc2VjdGlvbi5jb3Vyc2V3aWRlU29ydFBhdGggPT0gY291cnNlV2lkZVNvcnRQYXRoRm9yU2VhcmNoICYmIHNlY3Rpb24uc2VjdGlvbi5wYXJlbnRJZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uRm9yUmV0dXJuID0gc2VjdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9uRm9yUmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UmljaFRleHRMb2FkZWRQcm9taXNlKHJpY2hUZXh0SWQ6IHN0cmluZyk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIC8vaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnN1bW1hcnkpIHtcclxuICAgICAgICBsZXQgZGVmZXJyZWQ6IGFuZ3VsYXIuSURlZmVycmVkPGFueT4gPSB0aGlzLiRxLmRlZmVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YTogSUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhID0ge1xyXG4gICAgICAgICAgICByaWNoVGV4dEVsZW1lbnRJZDogcmljaFRleHRJZCxcclxuICAgICAgICAgICAgcmljaFRleHRCaW5kQ29udHJvbGxlcjogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZmluZFJpY2hUZXh0Q29udHJvbGxlcjogKCkgPT4gUmljaFRleHRCaW5kQ29udHJvbGxlciA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGJyb2FkY2FzdChuZXdFdmVudC5UQV9GSU5EX1JJQ0hfVEVYVF9CSU5EX0NPTlRST0xMRVIsIGV2ZW50RGF0YSk7XHJcbiAgICAgICAgICAgIHJldHVybiBldmVudERhdGEucmljaFRleHRCaW5kQ29udHJvbGxlcjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHdhaXRGb3JDb250ZW50TG9hZDogKHJpY2hUZXh0QmluZENvbnRyb2xsZXI6IFJpY2hUZXh0QmluZENvbnRyb2xsZXIpID0+IElQcm9taXNlPGFueT4gPVxyXG4gICAgICAgICAgICAocmljaFRleHRCaW5kQ29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJpY2hUZXh0QmluZENvbnRyb2xsZXIud2FpdEZvckNvbnRlbnRMb2FkZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZURlZmVycmVkSW5BbnlDYXNlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmljaFRleHRCaW5kQ29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlciA9IGZpbmRSaWNoVGV4dENvbnRyb2xsZXIoKTtcclxuICAgICAgICAgICAgaWYgKHJpY2hUZXh0QmluZENvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgICAgIHdhaXRGb3JDb250ZW50TG9hZChyaWNoVGV4dEJpbmRDb250cm9sbGVyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ05vdCBmb3VuZCByaWNoVGV4dCB0d2ljZScpO1xyXG4gICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgcmljaFRleHRCaW5kQ29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlciA9IGZpbmRSaWNoVGV4dENvbnRyb2xsZXIoKTtcclxuICAgICAgICBpZiAocmljaFRleHRCaW5kQ29udHJvbGxlcikge1xyXG4gICAgICAgICAgICB3YWl0Rm9yQ29udGVudExvYWQocmljaFRleHRCaW5kQ29udHJvbGxlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsY3VsYXRlU29ydEluZGV4SW5MZXZlbE9mU2xpZGUoaW5kZXg6IG51bWJlciwgaXRlbTogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgaXNNb3ZpbmdCYWNrd2FyZCA9IHRoaXMuc2xpZGVzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHMsIGkpID0+ICEoaSA9PT0gaW5kZXggJiYgcy5zZWN0aW9uLmlkID09PSBpdGVtLnNlY3Rpb24uaWQpKVxyXG4gICAgICAgICAgICAubWFwKHMgPT4gcy5pZClcclxuICAgICAgICAgICAgLmluZGV4T2YoaXRlbS5pZCkgPiBpbmRleDtcclxuICAgICAgICBsZXQgcHJldkxldmVsU2VjdGlvbiA9IHRoaXMuZmluZFByZXZTZWN0aW9uT2ZTYW1lTGV2ZWwoaW5kZXgsIGl0ZW0sIHRoaXMuc2xpZGVzKTtcclxuICAgICAgICBpZiAocHJldkxldmVsU2VjdGlvbikge1xyXG4gICAgICAgICAgICBpbmRleCA9IGlzTW92aW5nQmFja3dhcmQgPyBwcmV2TGV2ZWxTZWN0aW9uLnNlY3Rpb24uc29ydEluZGV4ICsgMSA6IHByZXZMZXZlbFNlY3Rpb24uc2VjdGlvbi5zb3J0SW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5kZXggPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNsaWRlc0ZvclNsaWRlRGVjayhzZWN0aW9uOiBJU2VjdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2VjdGlvblNsaWRlRGVjayhzZWN0aW9uKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5zcGxpY2UoMCwgdGhpcy5zbGlkZXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uc01hcC5nZXQoc2VjdGlvbi5tb2R1bGVJZCkuZm9yRWFjaChzZWN0aW9uSW5Nb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25Jbk1vZHVsZS5zZWN0aW9uLnBhcmVudElkID09IHNlY3Rpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNsaWRlcy5wdXNoKHNlY3Rpb25Jbk1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTbGlkZVNlY3Rpb25BY3RpdmUoc2VjdGlvbjogSVNlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtID0gc2VjdGlvbi5wYXJlbnRJZDtcclxuICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtVHlwZSA9IHNlY3Rpb24udHlwZUtleTtcclxuICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGUgPSBzZWN0aW9uLm1vZHVsZUlkO1xyXG4gICAgICAgIHRoaXMuc2V0TGVmdE1lbnVJdGVtKHNlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja1NsaWRlRGVjayhzZWN0aW9uSWQ6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBpc1ByZXNlbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNsaWRlcy5mb3JFYWNoKHNsaWRlID0+IHtcclxuICAgICAgICAgICAgaWYgKHNsaWRlLnNlY3Rpb24uaWQgPT0gc2VjdGlvbklkKSBpc1ByZXNlbnQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpc1ByZXNlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNsaWRlc1Zpc2liaWxpdHkoc2VjdGlvbnM6IEFycmF5PElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZD4pIHtcclxuICAgICAgICBzZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1NlY3Rpb25TbGlkZShzZWN0aW9uLnNlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJ1bmRsZSAmJiBzZWN0aW9uLnNlY3Rpb24uYXVkaW9GaWxlSWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2VjdGlvbi5hdWRpb0ZpbGVVcmwgPSB0aGlzLmdldEF1ZGlvRmlsZVVybChzZWN0aW9uLnNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVTbGlkZSgpOiB2b2lkIHtcclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNyZW1vdmVTbGlkZURpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaFNsaWRlc0J5VGFnTmFtZSh0YWc/OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFRhZ05hbWVGaWVsZCA9IHRhZyAhPSBudWxsID8gdGFnIDogdGhpcy5zZWFyY2hUYWdOYW1lRmllbGQ7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGFnTmFtZUZpZWxkICE9IG51bGwgJiYgdGhpcy5zZWFyY2hUYWdOYW1lRmllbGQgIT0gXCJcIikge1xyXG4gICAgICAgICAgICB0aGlzLnNsaWRlVGVtcGxhdGVzLmZvckVhY2goc2xpZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2xpZGUudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc2xpZGUudGFnTmFtZXNMaXN0LmZvckVhY2godGFnID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFnLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnNlYXJjaFRhZ05hbWVGaWVsZC50b0xvd2VyQ2FzZSgpKSA+PSAwKSBzbGlkZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNsaWRlVGVtcGxhdGVzLmZvckVhY2goc2xpZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2xpZGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUYWdOYW1lRmllbGQgIT0gbnVsbCAmJiAnZGVmYXVsdCcuaW5kZXhPZih0aGlzLnNlYXJjaFRhZ05hbWVGaWVsZCkgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZXMuZm9yRWFjaCh0ZW1wbGF0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0VGVtcGxhdGVzLmZvckVhY2godGVtcGxhdGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGUudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGltcG9ydFNsaWRlcygpIHtcclxuICAgICAgICBsZXQgZmlsZUV4dGVuc2lvbjogUmVnRXhwTWF0Y2hBcnJheSA9IHRoaXMuYXJjaGl2ZS5uYW1lLm1hdGNoKC9cXC4oWzAtOWEtel0rKSg/PVs/I10pfChcXC4pKD86W1xcd10rKSQvKTtcclxuICAgICAgICBpZiAoZmlsZUV4dGVuc2lvblswXSAhPSBcIi56aXBcIiAmJiBmaWxlRXh0ZW5zaW9uWzBdICE9IFwiLjd6XCIgJiYgZmlsZUV4dGVuc2lvblswXSAhPSBcIi5wcHR4XCIpIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGUgc3BlY2lmaWVkIGFyY2hpdmUgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHkgcHB0eCBvciB6aXAgZm9ybWF0IGlzIHN1cHBvcnRlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnNsaWRlcy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRTbGlkZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbFNsaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkU2xpZGVTZWN0aW9uc0Zyb21BY2hpZXZlKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFNsaWRlU2VjdGlvbnNGcm9tQWNoaWV2ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYXJjaGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZW1vdmVkU2xpZGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jb3Vyc2UuYnVuZGxlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZUNvdXJzZUJ1bmRsZSh0aGlzLmNvdXJzZS5pZCwgdGhpcy5jb3Vyc2UudmVyc2lvbikudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UuYnVuZGxlSWQgPSByZXN1bHRbXCJidW5kbGVcIl0uaWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZS52ZXJzaW9uID0gcmVzdWx0W1wiY291cnNlXCJdLnZlcnNpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRCdW5kbGUoKS50aGVuKCgpID0+IHRoaXMucGVyZm9ybUFyY2hpdmVVcGxvYWQoKSk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiSW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gdG8gY3JlYXRlIEJ1bmRsZVwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJmb3JtQXJjaGl2ZVVwbG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBlcmZvcm1BcmNoaXZlVXBsb2FkKCkge1xyXG4gICAgICAgIGxldCBmaWxlRXh0ZW5zaW9uOiBSZWdFeHBNYXRjaEFycmF5ID0gdGhpcy5hcmNoaXZlLm5hbWUubWF0Y2goL1xcLihbMC05YS16XSspKD89Wz8jXSl8KFxcLikoPzpbXFx3XSspJC8pO1xyXG4gICAgICAgIGxldCBpc0FyY2hpdmU6IGJvb2xlYW4gPSBmaWxlRXh0ZW5zaW9uWzBdICE9IFwiLnBwdHhcIjtcclxuICAgICAgICBsZXQgc2VjdGlvbiA9IHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0RGlyID0gXCJzZWN0aW9ucy9zbGlkZXMvXCIgKyBzZWN0aW9uLmlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiR1cGxvYWRlci51cGxvYWQoe1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLnNlcnZpY2UoXHJcbiAgICAgICAgICAgICAgICBgL2FwaS9jb3Vyc2VzLyR7dGhpcy5jb3Vyc2VJZH0vcHJlc2VudGF0aW9uSW1wb3J0P3NlY3Rpb25JZD0ke3NlY3Rpb24uaWR9JmJ1bmRsZVZlcnNpb249JHt0aGlzLmJ1bmRsZS52ZXJzaW9ufSZidW5kbGVJZD0ke3RoaXMuY291cnNlLmJ1bmRsZUlkfSZ0YXJnZXREaXI9JHt0YXJnZXREaXJ9JnJlcGxhY2VTbGlkZXM9JHt0aGlzLnJlcGxhY2VTbGlkZXN9JmlzQXJjaGl2ZT0ke2lzQXJjaGl2ZX1gXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIGZpbGU6IHRoaXMuYXJjaGl2ZVxyXG4gICAgICAgIH0pLnN1Y2Nlc3MoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRCdW5kbGUoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25zRm9yTW9kdWxlKHNlY3Rpb24ubW9kdWxlSWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZXNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTbGlkZXNGb3JTbGlkZURlY2soc2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTbGlkZVNlY3Rpb25BY3RpdmUodGhpcy5zbGlkZXNbMF0uc2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVkU2xpZGVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmNoaXZlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZVNsaWRlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTbGlkZXMgaGFzIGJlZW4gaW1wb3J0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc2xpZGUuZmlsZS5mb3JtYXRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJTbGlkZXMgaW1wb3J0IGVycm9yLiBUaGUgc2xpZGUgZm9ybWF0IHNob3VsZCBiZSAuanBnIC5wbmcgLmpwZWdcIik7XHJcbiAgICAgICAgICAgIH0gIGVsc2UgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5zbGlkZS5uYW1lLmZvcm1hdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlNsaWRlcyBpbXBvcnQgZXJyb3IuIFRoZSBzbGlkZSBuYW1lIHNob3VsZCBjb250YWluIGEgbnVtYmVyXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJQcmVzZW50YXRpb24gbG9hZGluZyBlcnJvclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmFyY2hpdmUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZVNsaWRlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRTbGlkZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUFsbFNsaWRlKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI3JlbW92ZUFsbFNsaWRlRGlhbG9nXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQWxsU2VjdGlvbkZyb21TbGlkZURlY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZXBsYWNlU2xpZGVzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFkZFNsaWRlU2VjdGlvbnNGcm9tQWNoaWV2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmb2N1c09uRWxlbWVudCh0YWJOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGFuZ3VsYXIuZWxlbWVudChcIiNcIiArIHRhYk5hbWUpLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYk5hbWUpLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVRhYih0YWJOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQoXCIuc3ViLWVsZW1lbnQuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGFuZ3VsYXIuZWxlbWVudChcIiNcIiArIHRhYk5hbWUpLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGFuZ3VsYXIuZWxlbWVudChcIi5hY3RpdmUtZWxlbWVudFwiKS5hZGRDbGFzcyhcImhpZGRlblwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZS1lbGVtZW50XCIpO1xyXG4gICAgICAgIGFuZ3VsYXIuZWxlbWVudChcIiNcIiArIHRhYk5hbWUgKyBcIi1lbGVtZW50XCIpLmFkZENsYXNzKFwiYWN0aXZlLWVsZW1lbnRcIikucmVtb3ZlQ2xhc3MoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFiTmFtZSkuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Db21wbGV0ZVJlY29yZGluZ0NhbGxiYWNrKGJsb2I6IEJsb2IsIHJlY29yZGluZ1Byb21pc2U6IGFuZ3VsYXIuSVByb21pc2U8YW55Piwgc2VjdGlvbjogSVNlY3Rpb24pOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtSXNEaXJ0eSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVCdW5kbGVGaWxlcyhibG9iLCBzZWN0aW9uLCByZWNvcmRpbmdQcm9taXNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlcGFyZUJ1bmRsZUZpbGVzKGJsb2I6IEJsb2IsIHNlY3Rpb246IElTZWN0aW9uLCByZWNvcmRpbmdQcm9taXNlPzogYW5ndWxhci5JUHJvbWlzZTxhbnk+KTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBsZXQgdGFyZ2V0RGlyID0gXCJzZWN0aW9ucy9hdWRpby9cIiArIHNlY3Rpb24ucGFyZW50SWQgKyBcIi9cIiArIHNlY3Rpb24uc29ydEluZGV4ICsgXCIvYXVkaW9cIjtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvdXJzZS5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZUNvdXJzZUJ1bmRsZSh0aGlzLmNvdXJzZS5pZCwgdGhpcy5jb3Vyc2UudmVyc2lvbikudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlLmJ1bmRsZUlkID0gcmVzdWx0W1wiYnVuZGxlXCJdLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlLnZlcnNpb24gPSByZXN1bHRbXCJjb3Vyc2VcIl0udmVyc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRCdW5kbGUoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1bmRsZUlucHV0SW5mbzogSUJ1bmRsZUlucHV0SW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVJbnB1dEluZm8gPSB0aGlzLmdldFByZXBhcmVkQnVuZGxlSW5wdXRJbmZvRnJvbUJsb2IodGhpcy5idW5kbGUuaWQsIHRoaXMuYnVuZGxlLnZlcnNpb24sIGJsb2IsIHRhcmdldERpcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUJ1bmRsZUZyb21GaWxlKGJ1bmRsZUlucHV0SW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJbmNvcnJlY3QgY29uZmlndXJhdGlvbiB0byBjcmVhdGUgQnVuZGxlXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYnVuZGxlSW5wdXRJbmZvOiBJQnVuZGxlSW5wdXRJbmZvXHJcbiAgICAgICAgICAgICAgICBidW5kbGVJbnB1dEluZm8gPSB0aGlzLmdldFByZXBhcmVkQnVuZGxlSW5wdXRJbmZvRnJvbUJsb2IodGhpcy5idW5kbGUuaWQsIHRoaXMuYnVuZGxlLnZlcnNpb24sIGJsb2IsIHRhcmdldERpcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVCdW5kbGVGcm9tRmlsZShidW5kbGVJbnB1dEluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTZWN0aW9uIG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEud2hlbihudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFByZXBhcmVkQnVuZGxlSW5wdXRJbmZvRnJvbUJsb2IoYnVuZGxlSWQ6IG51bWJlciwgYnVuZGxlVmVyc2lvbjogbnVtYmVyLCBibG9iOiBCbG9iLCBmaWxlTmFtZVByZWZpeDogc3RyaW5nKTogSUJ1bmRsZUlucHV0SW5mbyB7XHJcbiAgICAgICAgbGV0IGJ1bmRsZUlucHV0SW5mbzogSUJ1bmRsZUlucHV0SW5mbyA9IHt9O1xyXG4gICAgICAgIGJ1bmRsZUlucHV0SW5mby5hZGRlZEJ1bmRsZUZpbGUgPSB7XHJcbiAgICAgICAgICAgIGZpbGU6IHRoaXMuYmxvYlRvRmlsZShibG9iLCBmaWxlTmFtZVByZWZpeCksXHJcbiAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogXCJcIlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnVuZGxlSW5wdXRJbmZvLnJlY29yZE5hbWUgPSBidW5kbGVJbnB1dEluZm8uYWRkZWRCdW5kbGVGaWxlLmZpbGUubmFtZTtcclxuICAgICAgICBidW5kbGVJbnB1dEluZm8ucmVjb3JkVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICBsZXQgYWRkZWRGaWxlczogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICAgIGFkZGVkRmlsZXMucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6IGJ1bmRsZUlucHV0SW5mby5hZGRlZEJ1bmRsZUZpbGUuZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICB0eXBlOiBidW5kbGVJbnB1dEluZm8uYWRkZWRCdW5kbGVGaWxlLmZpbGUudHlwZSxcclxuICAgICAgICAgICAgc2l6ZTogYnVuZGxlSW5wdXRJbmZvLmFkZGVkQnVuZGxlRmlsZS5maWxlLnNpemUsXHJcbiAgICAgICAgICAgIHBhdGg6IGJ1bmRsZUlucHV0SW5mby5hZGRlZEJ1bmRsZUZpbGUucmVsYXRpdmVQYXRoXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnVuZGxlSW5wdXRJbmZvLmJ1bmRsZUlucHV0ID0ge1xyXG4gICAgICAgICAgICBpZDogYnVuZGxlSWQsXHJcbiAgICAgICAgICAgIHZlcnNpb246IGJ1bmRsZVZlcnNpb24sXHJcbiAgICAgICAgICAgIGFkZGVkRmlsZXM6IGFkZGVkRmlsZXMsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRGaWxlSWRzOiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGJ1bmRsZUlucHV0SW5mbztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJsb2JUb0ZpbGUoYmxvYjogQmxvYiwgZmlsZU5hbWVQcmVmaXg6IHN0cmluZyk6IEZpbGUge1xyXG4gICAgICAgIGxldCBmaWxlOiBhbnkgPSBibG9iO1xyXG4gICAgICAgIGZpbGUubGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXVkaW8pIHtcclxuICAgICAgICAgICAgZmlsZS5uYW1lID0gUmFuZG9tVXRpbHMuZ2VuZXJhdGVSYW5kb21JZChmaWxlTmFtZVByZWZpeCkgKyBcIi5cIiArIENvbnRlbnRVdGlscy5nZXRGaWxlRXh0KHRoaXMuYXVkaW8ubmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGZpbGUubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgZmlsZS5uYW1lID0gUmFuZG9tVXRpbHMuZ2VuZXJhdGVSYW5kb21JZChmaWxlTmFtZVByZWZpeCkgKyBcIi5cIiArIENvbnRlbnRVdGlscy5nZXRGaWxlRXh0KGZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlLm5hbWUgPSBSYW5kb21VdGlscy5nZW5lcmF0ZVJhbmRvbUlkKGZpbGVOYW1lUHJlZml4KSArIFwiLndhdlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8RmlsZT4gZmlsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUJ1bmRsZUZyb21GaWxlKGJ1bmRsZUlucHV0SW5mbzogSUJ1bmRsZUlucHV0SW5mbyk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1bmRsZVNlcnZpY2UudXBkYXRlQnVuZGxlRnJvbUZpbGVzKGJ1bmRsZUlucHV0SW5mby5idW5kbGVJbnB1dClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBmaWxlVXBsb2FkSW5mb3M6IEFycmF5PElGaWxlVXBsb2FkSW5mbz4gPSByZXN1bHRbXCJmaWxlVXBsb2FkSW5mb3NcIl07XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZVVwbG9hZEluZm86IElGaWxlVXBsb2FkSW5mbyA9IGZpbGVVcGxvYWRJbmZvc1swXTtcclxuICAgICAgICAgICAgICAgIGxldCBhZGRlZEZpbGUgPSBidW5kbGVJbnB1dEluZm8uYWRkZWRCdW5kbGVGaWxlLmZpbGU7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXBsb2FkQ2FsbGJhY2sgPSAodXBsb2FkU3RhdHVzOiBzdHJpbmcpID0+IHRoaXMuZ2V0VXBsb2FkZWRGaWxlKHRoaXMuYnVuZGxlLCBhZGRlZEZpbGUubmFtZSwgdXBsb2FkU3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkVXRpbHMudXBsb2FkQnVuZGxlQnlDaHVua3MoYWRkZWRGaWxlLCBmaWxlVXBsb2FkSW5mby5maWxlSWQsIHRoaXMuYnVuZGxlLmlkLCBmaWxlVXBsb2FkSW5mby51cmwsIGZpbGVVcGxvYWRJbmZvLm1ldGhvZCwgdXBsb2FkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5zdG9yYWdlLm5vdC5hdmFpbGFibGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTm8gYXZhaWxhYmxlIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VXBsb2FkZWRGaWxlKGJ1bmRsZTogSUJ1bmRsZSwgZmlsZUtleTogc3RyaW5nLCB1cGxvYWRTdGF0dXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh1cGxvYWRTdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VXBsb2FkZWRGaWxlVG9CdW5kbGVCeUZpbGVLZXkoYnVuZGxlLmlkLCBmaWxlS2V5KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKGZpbGU6IElCdW5kbGVGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdWRpb0ZpbGUgPSBmaWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1ZGlvRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2Uuc2F2ZUF1ZGlvRmlsZUZvclNsaWRlKHRoaXMuY291cnNlSWQsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLm1vZHVsZUlkLCB0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCwgZmlsZUtleSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtSXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2VjdGlvbnNGb3JNb2R1bGVUZXh0KHRoaXMuc2VsZWN0ZWRTZWN0aW9uLCB0aGlzLnNlbGVjdGVkU2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGUuZmlsZXNNYXAuaGFzKGZpbGVLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidW5kbGVGaWxlID0gYnVuZGxlLmZpbGVzTWFwLmdldChmaWxlS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFidW5kbGVGaWxlLnVybCAmJiBmaWxlLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlRmlsZS51cmwgPSBmaWxlLnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5maWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidW5kbGUuZmlsZXNNYXAuc2V0KGZpbGVLZXksIGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIHJlY29yZCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdXBsb2FkZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VXBsb2FkZWRGaWxlVG9CdW5kbGVCeUZpbGVLZXkoYnVuZGxlSWQ6IG51bWJlciwgZmlsZUtleTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxJQnVuZGxlRmlsZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1bmRsZVNlcnZpY2UuZ2V0VXBsb2FkZWRGaWxlVG9CdW5kbGVCeUZpbGVLZXkoYnVuZGxlSWQsIGZpbGVLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93QXVkaW9GaWxlKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0F1ZGlvRmlsZXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd0F1ZGlvID0gIXRoaXMuc2hvd0F1ZGlvO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVBdWRpb0ZpbGUoKSB7XHJcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1Jc0RpcnR5KCk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnJlbW92ZUF1ZGlvRmlsZUZvclNsaWRlKHRoaXMuY291cnNlSWQsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLm1vZHVsZUlkLCB0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25zRm9yTW9kdWxlVGV4dCh0aGlzLnNlbGVjdGVkU2VjdGlvbiwgdGhpcy5zZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QXVkaW9GaWxlVXJsKHNlY3Rpb246IElTZWN0aW9uKTogc3RyaW5nIHtcclxuICAgICAgICBzZWN0aW9uLmF1ZGlvRmlsZVVybCA9IHRoaXMuYnVuZGxlLmZpbGVzTWFwLmhhcyhzZWN0aW9uLmF1ZGlvRmlsZUtleSlcclxuICAgICAgICAgICAgPyB0aGlzLmJ1bmRsZS5maWxlc01hcC5nZXQoc2VjdGlvbi5hdWRpb0ZpbGVLZXkpLnVybFxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb24uYXVkaW9GaWxlVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVBdWRpb0ZpbGUoZmlsZTogSUJ1bmRsZUZpbGUpIHtcclxuICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUlzRGlydHkoKTtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UudXBkYXRlQXVkaW9GaWxlKHRoaXMuY291cnNlSWQsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLm1vZHVsZUlkLCB0aGlzLnNlbGVjdGVkU2VjdGlvbi5pZCwgZmlsZS5pZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25zRm9yTW9kdWxlVGV4dCh0aGlzLnNlbGVjdGVkU2VjdGlvbiwgdGhpcy5zZWxlY3RlZFNlY3Rpb24pO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBsb2FkQXVkaW9GaWxlKCkge1xyXG4gICAgICAgIGxldCBmaWxlRXh0ZW5zaW9uOiBSZWdFeHBNYXRjaEFycmF5ID0gdGhpcy5hdWRpby5uYW1lLm1hdGNoKC9cXC4oWzAtOWEtel0rKSg/PVs/I10pfChcXC4pKD86W1xcd10rKSQvKTtcclxuICAgICAgICBpZiAoZmlsZUV4dGVuc2lvblswXSAhPSBcIi53YXZcIiAmJiBmaWxlRXh0ZW5zaW9uWzBdICE9IFwiLm00YVwiICYmIGZpbGVFeHRlbnNpb25bMF0gIT0gXCIubXAzXCIpIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGUgc3BlY2lmaWVkIGF1ZGlvIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5IHdhdiwgbTRhIGFuZCBtcDMgZm9ybWF0cyBhcmUgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbdGhpcy5hdWRpb10se3R5cGU6IHRoaXMuYXVkaW8udHlwZX0pXHJcbiAgICAgICAgdGhpcy5zZXRGb3JtSXNEaXJ0eSgpO1xyXG4gICAgICAgIHRoaXMucHJlcGFyZUJ1bmRsZUZpbGVzKGJsb2IsIHRoaXMuc2VsZWN0ZWRTZWN0aW9uKTtcclxuICAgICAgICB0aGlzLmF1ZGlvID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93U2VsZWN0QXVkaW9GaWxlRGlhbG9nKCkge1xyXG4gICAgICAgIHRoaXMuYXVkaW9GaWxlc0dyaWRNb2RlbC5maWx0ZXIuYXVkaW9GaWxlc1NlYXJjaFN0cmluZyA9IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnBhcmVudElkO1xyXG4gICAgICAgIHRoaXMuYXVkaW9GaWxlc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAkKCcjc2VsZWN0QXVkaW9GaWxlRGlhbG9nJykubW9kYWwoXCJzaG93XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVBvcHVwKCkge1xyXG4gICAgICAgICQoJyNzZWxlY3RBdWRpb0ZpbGVEaWFsb2cnKS5tb2RhbChcImhpZGVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRlbXBsYXRlRm9ySW5jbHVkZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVybC50ZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvU2xpZGVEZWNrSGVscFBhZ2UoKSB7XHJcbiAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4odGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVswXSArIFwiI1wiICsgdGhpcy5uZXdzUm91dGVyLmhlbHBVcmwoTmV3c0tleS5IRUxQX1NMSURFX0RFQ0spLCBcIl9ibGFua1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlU2xpZGVOdW1iZXJBbmRUb3RhbFNsaWRlcygpIHtcclxuICAgICAgICBpZiAodGhpcy5zbGlkZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgc2VjdGlvbnM6IElTZWN0aW9uW10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNsaWRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVzW2ldLnNlY3Rpb24uc3VtbWFyeS5pbmRleE9mKFwiPGRpdiBjbGFzcz1cXFwidmhzLXRlbXBsYXRlXCIpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGhpbmdDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlkZXNbaV0uc2VjdGlvbi5zdW1tYXJ5ID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzT2ZTbGlkZU51bWJlckFuZFRvdGFsU2xpZGVzKHRoaXMuc2xpZGVzW2ldLnNlY3Rpb24uc3VtbWFyeSwgdGhpcy5zbGlkZXNbaV0uc2VjdGlvbi5zb3J0SW5kZXgsIHRoaXMuc2xpZGVzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMucHVzaCh0aGlzLnNsaWRlc1tpXS5zZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpID09IHRoaXMuc2xpZGVzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubm90aGluZ0NoYW5nZWQgJiYgc2VjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UudXBkYXRlU2VjdGlvbnModGhpcy5jb3Vyc2VJZCwgc2VjdGlvbnMpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2VjdGlvbnNGb3JNb2R1bGUodGhpcy5zZWxlY3RlZFNsaWRlRGVja1NlY3Rpb24ubW9kdWxlSWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2xpZGVzRm9yU2xpZGVEZWNrKHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNsaWRlU2VjdGlvbkFjdGl2ZSh0aGlzLnNsaWRlc1swXS5zZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGhpbmdDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU2xpZGVzIGhhdmUgYmVlbiB1cGRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJOb3RoaW5nIHRvIGNoYW5nZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBzbGlkZXMgdG8gdXBkYXRlXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVwbGFjZVBsYWNlaG9sZGVyc09mU2xpZGVOdW1iZXJBbmRUb3RhbFNsaWRlcyhodG1sOiBzdHJpbmcsIHNsaWRlTnVtYmVyOiBudW1iZXIsIHNsaWRlRGVja1RvdGFsU2xpZGVzOiBudW1iZXIpIHtcclxuICAgICAgICBodG1sID0gVmhzVGVtcGxhdGVTZXJ2aWNlLnJlcGxhY2VUZW1wbGF0ZVBsYWNlaG9sZGVyRmllbGQoaHRtbCwgXCJzbGlkZURlY2tUb3RhbFNsaWRlc1wiLCBzbGlkZURlY2tUb3RhbFNsaWRlcyk7XHJcbiAgICAgICAgaHRtbCA9IFZoc1RlbXBsYXRlU2VydmljZS5yZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlckZpZWxkKGh0bWwsIFwic2xpZGVOdW1iZXJcIiwgc2xpZGVOdW1iZXIpO1xyXG4gICAgICAgIHJldHVybiBWaHNUZW1wbGF0ZVNlcnZpY2UucmVwbGFjZUFsbFdoaXRlc3BhY2VzKGh0bWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuQ2xvc2VTbGlkZURlY2tTbGlkZVRlbXBsYXRlcygpIHtcclxuICAgICAgICBpZiAoJCgnI3NsaWRlLWRlY2tfYWRkLXNsaWRlJykuaGFzQ2xhc3MoJ2hpZGRlbicpKSB7XHJcbiAgICAgICAgICAgICQoJyNzbGlkZS1kZWNrX2FkZC1zbGlkZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKCcjc2xpZGUtZGVja19hZGQtc2xpZGUnKS5hZGRDbGFzcygnaGlkZGVuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuQ2xvc2VTbGlkZURlY2tBSSgpIHtcclxuICAgICAgICBpZiAoJCgnI3NsaWRlLWRlY2tfYWRkLXNsaWRlcy1haScpLmhhc0NsYXNzKCdoaWRkZW4nKSkge1xyXG4gICAgICAgICAgICAkKCcjc2xpZGUtZGVja19hZGQtc2xpZGVzLWFpJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQoJyNzbGlkZS1kZWNrX2FkZC1zbGlkZXMtYWknKS5hZGRDbGFzcygnaGlkZGVuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWlOdW1iZXJPZlNsaWRlcyA9IDU7XHJcbiAgICAgICAgdGhpcy5haVByb21wdFRleHQgPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNDb3Vyc2VIYXNNYW5kYXRvcnlTZWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuaGFzTWFuZGF0b3J5U2VjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW9kdWxlcy5mb3JFYWNoKG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNNYXAuZ2V0KG1vZHVsZS5pZCkuZm9yRWFjaChzZWMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlYy5zZWN0aW9uLnNlY3Rpb25QYXNzaW5nVHlwZSA9PSAnTUFOREFUT1JZJyAmJiBzZWMubGV2ZWwgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzTWFuZGF0b3J5U2VjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2lzQ291cnNlSGFzTWFuZGF0b3J5U2VjdGlvbicpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDb3Vyc2VSZXF1aXJlZEVsZWN0aXZlc051bWJlcigpOiBhbmd1bGFyLklQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLnVwZGF0ZUNvdXJzZVJlcXVpcmVkRWxlY3RpdmVzTnVtYmVyKHRoaXMuY291cnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVjb2RlVHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0eXBlO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiQXVkaW9cIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJBdWRpb1wiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIlZpZGVvXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiVmlkZW9cIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJMaW5rXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiTGlua1wiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkltYWdlXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiSW1hZ2VcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJPdGhlciBkb2N1bWVudHNcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJPdGhlciBkb2N1bWVudHNcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdlbmVyYXRlU2xpZGVzKCkge1xyXG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2xpZGVzICYmIHRoaXMuc2xpZGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTbGlkZVNlY3Rpb25BY3RpdmUodGhpcy5zbGlkZXNbdGhpcy5zbGlkZXMubGVuZ3RoIC0gMV0uc2VjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0b3BpYyA9IHRoaXMuYWlQcm9tcHRUZXh0O1xyXG4gICAgICAgIGxldCBkZWZhdWx0VGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRUZW1wbGF0ZXMuZmlsdGVyKHQgPT4gdC5wYXRoID09PSBcImRlZmF1bHRUZW1wbGF0ZVwiKVswXTtcclxuICAgICAgICBsZXQgbnVtYmVyT2ZTbGlkZXMgPSB0aGlzLmFpTnVtYmVyT2ZTbGlkZXM7XHJcbiAgICAgICAgdGhpcy5haVNlcnZpY2UuZ2VuZXJhdGVTdWJ0b3BpY3ModGhpcy5jb3Vyc2VJZCwgbnVtYmVyT2ZTbGlkZXMsIHRoaXMuYWlQcm9tcHRUZXh0KS50aGVuKChyZXN1bHQ6IElBSVN1YnRvcGljc1Jlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZ2VuZXJhdGVTdWJwYXJhZ3JhcGhQcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgYWRkU2xpZGVQcm9taXNlID0gdGhpcy4kcS53aGVuKG51bGwpO1xyXG4gICAgICAgICAgICBsZXQgdG9waWNzID0gcmVzdWx0LnRvcGljcy5sZW5ndGggPiBudW1iZXJPZlNsaWRlc1xyXG4gICAgICAgICAgICAgICAgPyByZXN1bHQudG9waWNzLnNsaWNlKDAsIG51bWJlck9mU2xpZGVzICsgMSlcclxuICAgICAgICAgICAgICAgIDogcmVzdWx0LnRvcGljcztcclxuICAgICAgICAgICAgZm9yIChsZXQgdCBvZiB0b3BpY3MpIHtcclxuICAgICAgICAgICAgICAgIGdlbmVyYXRlU3VicGFyYWdyYXBoUHJvbWlzZXMucHVzaCh0aGlzLmFpU2VydmljZS5nZW5lcmF0ZVN1YnBhcmFncmFwaCh0aGlzLmNvdXJzZUlkLCB0b3BpYywgdCkudGhlbigocmVzdWx0OiBJQUlQYXJhZ3JhcGhSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhZGRTbGlkZVByb21pc2UgPSBhZGRTbGlkZVByb21pc2UudGhlbigoKSA9PiB0aGlzLmFkZFNsaWRlKHRoaXMuc2VsZWN0ZWRTbGlkZURlY2tTZWN0aW9uLmlkLCB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2xpZGVEZWNrU2VjdGlvbi5tb2R1bGVJZCwgbnVsbCwgZGVmYXVsdFRlbXBsYXRlLnBhdGgsIHJlc3VsdC5zdWJ0b3BpYywgcmVzdWx0LmFydGljbGUpKTtcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy4kcS5hbGwoZ2VuZXJhdGVTdWJwYXJhZ3JhcGhQcm9taXNlcylcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpKTtcclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5vcGVuQ2xvc2VTbGlkZURlY2tBSSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0ludCh2YWx1ZSkge1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgIHJldHVybiAoeCB8IDApID09PSB4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleHBhbmRBbGxNb2R1bGVzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmV4cGFuZEFsbCkge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZCA9IFtdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kdWxlcy5mb3JFYWNoKG0gPT4gdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQucHVzaChtLmlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXhwYW5kQWxsID0gIXRoaXMuZXhwYW5kQWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuaW50ZXJmYWNlIEFkZGVkQnVuZGxlRmlsZSB7XHJcbiAgICBmaWxlPzogRmlsZTtcclxuICAgIHJlbGF0aXZlUGF0aD86IHN0cmluZztcclxufVxyXG4iLCJpbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJU3VydmV5UmVzdWx0fSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVN1cnZleVJlc3VsdFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0lRdWl6fSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpcIjtcclxuaW1wb3J0IHtRdWVzdGlvblR5cGV9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9RdWVzdGlvblR5cGVcIjtcclxuaW1wb3J0IHtRdWl6U2VydmljZX0gZnJvbSBcIi4uL3F1aXp6ZXMvUXVpelNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUXVpelF1ZXN0aW9ufSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpRdWVzdGlvblwiO1xyXG5pbXBvcnQge0lRdWl6QW5zd2VyUmVzdWx0fSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpBbnN3ZXJSZXN1bHRcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge1N0b3JhZ2VzLCBTdG9yYWdlV3JhcHBlcn0gZnJvbSBcIi4uL2luZnJhc3RydWN0dXJlL1N0b3JhZ2VcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuL1Byb2dyZXNzU2VydmljZVwiO1xyXG5pbXBvcnQge0lRdWl6QW5zd2VyUmVzdWx0R3JhZGV9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpekFuc3dlclJlc3VsdEdyYWRlXCI7XHJcbmltcG9ydCB7Z2V0SG9yaXpvbnRhbEJhckRpYWdyYW1PcHRpb25zfSBmcm9tIFwiLi4vc3RhdGlzdGljcy91dGlscy9SZXBvcnRPcHRpb25zXCI7XHJcbmltcG9ydCB7SUFuc3dlcnNTdGF0aXN0aWMsIElRdWl6U3VydmV5U3RhdGlzdGljc30gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6U3VydmV5U3RhdGlzdGljc1wiO1xyXG5pbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi9idW5kbGVzL0J1bmRsZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZVN1cnZleVJlc3VsdHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5Db3Vyc2VTdXJ2ZXlSZXN1bHRzQ29udHJvbGxlclwiO1xyXG4gICAgcHJpdmF0ZSBERUZBVUxUX1RPUF9NRU5VX0lURU06IHN0cmluZyA9ICdzdXJ2ZXlSZXN1bHRzJztcclxuICAgIHByaXZhdGUgUVVFU1RJT05fU1VNTUFSSUVTOiBzdHJpbmcgPSBcInF1ZXN0aW9uU3VtbWFyaWVzXCI7XHJcbiAgICBwcml2YXRlIElORElWSURVQUxfUkVTUE9OU0VTOiBzdHJpbmcgPSBcImluZGl2aWR1YWxSZXNwb25zZXNcIjtcclxuICAgIFxyXG4gICAgcHJpdmF0ZSBTQVJlc3BvbnNlc1BhZ2VTaXplOiBudW1iZXIgPSAxMDtcclxuXHJcbiAgICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIG1lbnVLZXk6IGFueTtcclxuICAgIHB1YmxpYyBzdXJ2ZXlSZXN1bHRzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElTdXJ2ZXlSZXN1bHQ+O1xyXG4gICAgcHVibGljIHN1cnZleTogSVF1aXogPSB7fTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFN1cnZleVF1ZXN0aW9uczogQXJyYXk8SVF1aXpRdWVzdGlvbj4gPSBbXTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFN1cnZleUFuc3dlclJlc3VsdHM6IEFycmF5PElRdWl6QW5zd2VyUmVzdWx0PiA9IFtdO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBjb3Vyc2U6IElDb3Vyc2UgPSB7fTtcclxuICAgIHB1YmxpYyBvd25lcnM6IEFycmF5PElTZWxlY3RhYmxlPiA9IFtdO1xyXG4gICAgcHVibGljIGlzQ291cnNlTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IHN0cmluZyA9IHRoaXMuUVVFU1RJT05fU1VNTUFSSUVTO1xyXG4gICAgcHVibGljIHN1cnZleVN0YXRpc3RpY3M6IElRdWl6U3VydmV5U3RhdGlzdGljcztcclxuICAgIHB1YmxpYyBkaWFncmFtc0RhdGE6IE1hcDxudW1iZXIsIGFueVtdPiA9IG5ldyBNYXA8bnVtYmVyLCBhbnlbXT4oKTtcclxuICAgIHB1YmxpYyBpc1N1cnZleVN0YXRpc3RpY0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBidW5kbGU6IElCdW5kbGU7XHJcblxyXG4gICAgcHVibGljIHBlcmNlbnRhZ2VEaWFncmFtT3B0aW9ucyA9IGdldEhvcml6b250YWxCYXJEaWFncmFtT3B0aW9ucyhudWxsLCB7YXhlczoge2F1dG9zY2FsZTogZmFsc2UsIHhheGlzOiB7bWluOiAwLCBtYXg6IDEwMCwgdGlja09wdGlvbnM6IHtmb3JtYXRTdHJpbmc6IFwiJS4wZlwiLCBzdWZmaXg6IFwiICVcIn19fX0pO1xyXG4gICAgcHVibGljIGRpZ2l0RGlhZ3JhbU9wdGlvbnMgPSBnZXRIb3Jpem9udGFsQmFyRGlhZ3JhbU9wdGlvbnMobnVsbCwge2F4ZXM6IHthdXRvc2NhbGU6IHRydWV9fSk7XHJcblxyXG4gICAgcHVibGljIGNvdXJzZVN1cnZleXM6IElTZWxlY3RhYmxlW107XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFF1aXpTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBTdG9yYWdlcy5TRVNTSU9OX05BTUUsXHJcbiAgICAgICAgQnVuZGxlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFByb2dyZXNzU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBuZy5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcXVpelNlcnZpY2U6IFF1aXpTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlc3Npb25TdG9yYWdlV3JhcHBlcjogU3RvcmFnZVdyYXBwZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnVuZGxlU2VydmljZTogQnVuZGxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHJvZ3Jlc3NTZXJ2aWNlOiBQcm9ncmVzc1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZUlkID0gJHJvdXRlUGFyYW1zW0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNXTtcclxuICAgICAgICBsZXQgY291cnNlSWRTdHIgPSBTdHJpbmcodGhpcy5jb3Vyc2VJZCk7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2VcclxuICAgICAgICAgICAgLmRlbWFuZENvdXJzZVBlcm1pc3Npb25zKGNvdXJzZUlkU3RyLCBjb3Vyc2VQZXJtaXNzaW9ucyA9PiBjb3Vyc2VQZXJtaXNzaW9ucy5wZXJtaXNzaW9uc0RlbGVnYXRpb24pO1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3VydmV5UmVzdWx0c0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElTdXJ2ZXlSZXN1bHQ+KCRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9xdWl6emVzL3N1cnZleVJlc3VsdHNcIikpKTtcclxuICAgICAgICB0aGlzLnN1cnZleVJlc3VsdHNHcmlkTW9kZWwucGFnZVNpemUgPSAxO1xyXG4gICAgICAgIHRoaXMuc3VydmV5UmVzdWx0c0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIoe1xyXG4gICAgICAgICAgICBzdGFydExvYWRpbmc6ICgpID0+IHtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW5kTG9hZGluZzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3VydmV5UmVzdWx0c0dyaWRNb2RlbC5lbnRyaWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTdXJ2ZXlRdWVzdGlvbnModGhpcy5zdXJ2ZXlSZXN1bHRzR3JpZE1vZGVsLmVudHJpZXNbMF0uc3VydmV5SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFN1cnZleSh0aGlzLnN1cnZleVJlc3VsdHNHcmlkTW9kZWwuZW50cmllc1swXS5zdXJ2ZXlJZCwgdGhpcy5zdXJ2ZXlSZXN1bHRzR3JpZE1vZGVsLmVudHJpZXNbMF0uaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlSZXN1bHRzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VJZCA9IHRoaXMuY291cnNlSWQ7XHJcbiAgICAgICAgdGhpcy5sb2FkQ291cnNlKCk7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLiR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLm9uUmVzaXplRnVuYyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy4kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5vblJlc2l6ZUZ1bmMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25SZXNpemVGdW5jOiAoZXZlbnQpID0+IGFueSA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICQoXCIuanFwbG90LXRhcmdldFwiKVxyXG4gICAgICAgICAgICAuZWFjaCgoaW5kZXgsIGVsZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICQoZWxlbSkuZGF0YShcImpxcGxvdFwiKS5yZXBsb3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgbG9hZEJ1bmRsZShidW5kbGVJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5idW5kbGVTZXJ2aWNlLmdldEJ1bmRsZShidW5kbGVJZClcclxuICAgICAgICAgICAgLnRoZW4oYnVuZGxlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFVybEZvckF0dGFjaG1lbnRTdXJ2ZXkoZmlsZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5idW5kbGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idW5kbGUuZmlsZXNNYXAuaGFzKGZpbGUuYnVuZGxlRmlsZUtleSlcclxuICAgICAgICAgICAgICAgID8gdGhpcy5idW5kbGUuZmlsZXNNYXAuZ2V0KGZpbGUuYnVuZGxlRmlsZUtleSkudXJsXHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRDb3Vyc2UoKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldCh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlLmVuZERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKHJlc3VsdC5lbmREYXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlLnN0YXJ0RGF0ZVRleHQgPSBNb21lbnQuaXNWYWxpZERhdGUocmVzdWx0LnN0YXJ0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2Uuc2V0Q291cnNlUGFnZUhlYWRlckJyZWFkY3J1bWJzKHRoaXMuY291cnNlSWQsIHRoaXMuY291cnNlLCB0aGlzLmNvdXJzZXNSb3V0ZXIsIFwiU3VydmV5IHJlc3VsdHNcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRPd25lcnMoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpelNlcnZpY2UuZ2V0U3VydmV5c0ZvckNvdXJzZSh0aGlzLmNvdXJzZS5pZClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVN1cnZleXMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXJ2ZXlSZXN1bHRzR3JpZE1vZGVsLmZpbHRlci5zdXJ2ZXlJZCA9IHJlc3VsdFswXS5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3RvckNoYW5nZUNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkT3duZXJzKCkge1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VPd25lcnModGhpcy5jb3Vyc2VJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0LCB0aGlzLm93bmVycyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb3Vyc2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlSZXN1bHRzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkU3VydmV5UXVlc3Rpb25zKHN1cnZleUlkOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6U2VydmljZS5nZXRBbGxTdXJ2ZXlRdWVzdGlvbnMoc3VydmV5SWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5zZWxlY3RlZFN1cnZleVF1ZXN0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFN1cnZleShzdXJ2ZXlJZDogbnVtYmVyLCBzdXJ2ZXlSZXN1bHRJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHN1cnZleVJlc3VsdElkczogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgICAgIHN1cnZleVJlc3VsdElkcy5wdXNoKHN1cnZleVJlc3VsdElkKTtcclxuICAgICAgICB0aGlzLnF1aXpTZXJ2aWNlLmdldFF1aXpBbnN3ZXJSZXN1bHRzKHRoaXMuY291cnNlSWQsIHN1cnZleVJlc3VsdElkcylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMuc2VsZWN0ZWRTdXJ2ZXlBbnN3ZXJSZXN1bHRzKTtcclxuICAgICAgICAgICAgICAgIGxldCBpZCA9IHRoaXMuc2VsZWN0ZWRTdXJ2ZXlBbnN3ZXJSZXN1bHRzWzBdLmlkO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdElkID0gdGhpcy5zZWxlY3RlZFN1cnZleUFuc3dlclJlc3VsdHNbMF0ucXVpelJlc3VsdElkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6U2VydmljZS5nZXRCdW5kbGVJZEZvclF1aXpSZXN1bHQoaWQscmVzdWx0SWQpLnRoZW4oYnVuZGxlSWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRCdW5kbGUoYnVuZGxlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYnVuZGxlIGZvciB0aGlzIHF1aXogcmVzdWx0IHdhcyBub3QgZm91bmRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3VydmV5UXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1cnZleUFuc3dlclJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRTdXJ2ZXlBbnN3ZXJSZXN1bHRzLmZpbHRlcihhciA9PiBhci5xdWVzdGlvbklkID09IHEuaWQpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdXJ2ZXlBbnN3ZXJSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcS5hbnN3ZXJzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VydmV5QW5zd2VyUmVzdWx0LmFuc3dlcklkcy5maWx0ZXIoYUlkID0+IGFJZCA9PSBhLmlkKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdXJ2ZXlBbnN3ZXJSZXN1bHQuZ3JhZGVzLmZpbHRlcigoZzogSVF1aXpBbnN3ZXJSZXN1bHRHcmFkZSkgPT4gZy5hbnN3ZXJJZCA9PSBhLmlkKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5ncmFkZSA9IHN1cnZleUFuc3dlclJlc3VsdC5ncmFkZXMuZmlsdGVyKChnOiBJUXVpekFuc3dlclJlc3VsdEdyYWRlKSA9PiBnLmFuc3dlcklkID09IGEuaWQpWzBdLmdyYWRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcS5zaG9ydEFuc3dlciA9IHN1cnZleUFuc3dlclJlc3VsdC5hbnN3ZXJUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25MaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3VydmV5QW5zd2VyUmVzdWx0cy5mb3JFYWNoKHFhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3VydmV5UXVlc3Rpb25zLm1hcChxID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuaWQgPT0gcWEucXVlc3Rpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25MaXN0LnB1c2gocSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3VydmV5UXVlc3Rpb25zID0gcXVlc3Rpb25MaXN0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNGaWxsSW5UaGVCbGFua1F1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkZJTExfSU5fVEhFX0JMQU5LXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNdWx0aXBsZUNob2ljZU11bHRpcGxlQW5zd2VyUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuTVVMVElQTEVfQ0hPSUNFX01VTFRJUExFX0FOU1dFUl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTXVsdGlwbGVDaG9pY2VTaW5nbGVBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5NVUxUSVBMRV9DSE9JQ0VfU0lOR0xFX0FOU1dFUl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2hvcnRBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1Nob3J0QW5zd2VyV2l0aFVwbG9hZFF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9XSVRIX1VQTE9BRF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2NhbGVkQW5zd2VyUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TQ0FMRURfQU5TV0VSXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUaGVyZVN1cnZleUFuc3dlclJlc3VsdEZvclF1ZXN0aW9uKHF1ZXN0aW9uSWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkU3VydmV5QW5zd2VyUmVzdWx0cy5maWx0ZXIoYXIgPT4gYXIucXVlc3Rpb25JZCA9PSBxdWVzdGlvbklkKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0ZpbGxhYmxlRm9ybVF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiAgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5GSUxMQUJMRV9GT1JNXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG9ydEFuc3dlckF1ZGlvUmVzcG9uc2VRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJfQVVESU9fUkVTUE9OU0VdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBbnN3ZXJGb3JRdWVzdGlvbihxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IElRdWl6QW5zd2VyUmVzdWx0IHwgYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFN1cnZleUFuc3dlclJlc3VsdHMuZmlsdGVyKGFyID0+IGFyLnF1ZXN0aW9uSWQgPT09IHF1ZXN0aW9uLmlkKS5wb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb3BNZW51QWN0aXZlKHZpZXdUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3VHlwZSA9PSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QnVuZGxlRmlsZUJ5S2V5KHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKSB7XHJcbiAgICAgICAgbGV0IGZpbGVLZXkgPSB0aGlzLmdldEFuc3dlckZvclF1ZXN0aW9uKHF1ZXN0aW9uKS5yZXNwb25zZURhdGEuYnVuZGxlRmlsZUtleTtcclxuICAgICAgICByZXR1cm4gdGhpcy5idW5kbGUuZmlsZXMuZmlsdGVyKGZpbGUgPT4gZmlsZS5rZXkgPT09IGZpbGVLZXkpLnBvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VWaWV3KHZpZXdUeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmlld1R5cGUgPT0gdGhpcy5RVUVTVElPTl9TVU1NQVJJRVMpIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMuUVVFU1RJT05fU1VNTUFSSUVTO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdXJ2ZXlSZXN1bHRzR3JpZE1vZGVsLmZpbHRlci5zdXJ2ZXlJZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1cnZleVN0YXRpc3RpY0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6U2VydmljZS5nZXRRdWl6U3VydmV5U3RhdGlzdGljcyh0aGlzLmNvdXJzZUlkLCB0aGlzLnN1cnZleVJlc3VsdHNHcmlkTW9kZWwuZmlsdGVyLnN1cnZleUlkKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cnZleVN0YXRpc3RpY3MgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyaWRNb2RlbHModGhpcy5zdXJ2ZXlTdGF0aXN0aWNzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlUXVlc3Rpb25TdGF0aXN0aWNGb3JEaWFncmFtcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cnZleVN0YXRpc3RpY3MucXVlc3Rpb25zLnNvcnQoKGEsIGIpID0+IGEucXVlc3Rpb25Db2RlID4gYi5xdWVzdGlvbkNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhLnF1ZXN0aW9uQ29kZSA8IGIucXVlc3Rpb25Db2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAtMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1cnZleVN0YXRpc3RpY0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodmlld1R5cGUgPT0gdGhpcy5JTkRJVklEVUFMX1JFU1BPTlNFUykge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5JTkRJVklEVUFMX1JFU1BPTlNFUztcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3VydmV5UmVzdWx0c0dyaWRNb2RlbC5maWx0ZXIuc3VydmV5SWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VydmV5UmVzdWx0c0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlcGFyZVF1ZXN0aW9uU3RhdGlzdGljRm9yRGlhZ3JhbXMoKSB7XHJcbiAgICAgICAgbGV0IGFycjtcclxuICAgICAgICB0aGlzLnN1cnZleVN0YXRpc3RpY3MucXVlc3Rpb25zLmZvckVhY2gocXVlc3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBhcnIgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHF1ZXN0aW9uLmFuc3dlcnNTdGF0aXN0aWNzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYW5zd2VyID0gcXVlc3Rpb24uYW5zd2Vyc1N0YXRpc3RpY3NbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlID09ICdNVUxUSVBMRV9DSE9JQ0VfU0lOR0xFX0FOU1dFUidcclxuICAgICAgICAgICAgICAgICAgICB8fCBxdWVzdGlvbi5xdWVzdGlvblR5cGUgPT0gJ01VTFRJUExFX0NIT0lDRV9NVUxUSVBMRV9BTlNXRVInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goW2Fuc3dlci5hbnN3ZXJlZFBlcmMsIGFuc3dlci5hbnN3ZXJUZXh0XSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZSA9PSAnU0NBTEVEX0FOU1dFUicpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChbYW5zd2VyLndlaWdodGVkQXZlcmFnZSwgYW5zd2VyLmFuc3dlclRleHRdKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRpYWdyYW1zRGF0YS5zZXQocXVlc3Rpb24ucXVlc3Rpb25JZCwgW2Fycl0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDaGFydERhdGFGb3JRdWVzdGlvbihxdWVzdGlvbklkOiBudW1iZXIpOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlhZ3JhbXNEYXRhLmdldChxdWVzdGlvbklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2hhcnRPcHRpb25zRm9yUXVlc3Rpb25UeXBlKHF1ZXN0aW9uVHlwZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBpZiAocXVlc3Rpb25UeXBlID09ICdNVUxUSVBMRV9DSE9JQ0VfU0lOR0xFX0FOU1dFUicgfHwgcXVlc3Rpb25UeXBlID09ICdNVUxUSVBMRV9DSE9JQ0VfTVVMVElQTEVfQU5TV0VSJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZXJjZW50YWdlRGlhZ3JhbU9wdGlvbnM7XHJcbiAgICAgICAgfSBlbHNlIGlmIChxdWVzdGlvblR5cGUgPT0gJ1NDQUxFRF9BTlNXRVInKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpZ2l0RGlhZ3JhbU9wdGlvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNlbGVjdG9yQ2hhbmdlQ2FsbGJhY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5UmVzdWx0c0dyaWRNb2RlbC5maWx0ZXIuc3VydmV5SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWaWV3KHRoaXMudmlld1R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UGFnZShwYWdlSW5kZXg6IG51bWJlciwgcGFnZVNpemU6IG51bWJlciwgZW50aXRpZXM6IElBbnN3ZXJzU3RhdGlzdGljW10pIHtcclxuICAgICAgICBsZXQgc3RhcnQgPSBwYWdlSW5kZXggKiBwYWdlU2l6ZTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZW50aXRpZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgcGFnZVNpemUpO1xyXG4gICAgICAgIGxldCB0b3RhbENvdW50OiBudW1iZXIgPSBlbnRpdGllcy5sZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHtlbnRyaWVzOiByZXN1bHQsIHRvdGFsQ291bnQ6IHRvdGFsQ291bnR9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlR3JpZE1vZGVscyhzdXJ2ZXlTdGF0aXN0aWNzOiBJUXVpelN1cnZleVN0YXRpc3RpY3MpIHtcclxuICAgICAgICBzdXJ2ZXlTdGF0aXN0aWNzLnF1ZXN0aW9ucy5maWx0ZXIocSA9PiBxLnF1ZXN0aW9uVHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl1cclxuICAgICAgICAgICAgfHwgcS5xdWVzdGlvblR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJfV0lUSF9VUExPQURdXHJcbiAgICAgICAgICAgIHx8IHEucXVlc3Rpb25UeXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0hPUlRfQU5TV0VSX0FVRElPX1JFU1BPTlNFXSlcclxuICAgICAgICAgICAgLmZvckVhY2gocSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYW5zd2VyZWQgPSBxLmFuc3dlcnNTdGF0aXN0aWNzLmZpbHRlcihzID0+ICEhcy5zaG9ydEFuc3dlclRleHQgfHwgISFzLmJ1bmRsZUZpbGUpO1xyXG4gICAgICAgICAgICAgICAgcS5TQVJlc3BvbnNlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWw8SUFuc3dlcnNTdGF0aXN0aWM+KChncmlkTW9kZWw6IElHcmlkTW9kZWw8SUFuc3dlcnNTdGF0aXN0aWM+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JpZE1vZGVsLnBhZ2VTaXplID0gdGhpcy5TQVJlc3BvbnNlc1BhZ2VTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLndoZW4odGhpcy5nZXRQYWdlKGdyaWRNb2RlbC5jdXJyZW50UGFnZSwgZ3JpZE1vZGVsLnBhZ2VTaXplLCBhbnN3ZXJlZCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi9Qcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4vQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge1N0b3JhZ2VzLCBTdG9yYWdlV3JhcHBlcn0gZnJvbSBcIi4uL2luZnJhc3RydWN0dXJlL1N0b3JhZ2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtNb21lbnR9IGZyb20gXCIuLi91dGlscy9Nb21lbnRcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7Q291cnNlUHJvZ3Jlc3NTdGF0dXN9IGZyb20gXCIuL21vZGVscy9Db3Vyc2VQcm9ncmVzc1N0YXR1c1wiO1xyXG5pbXBvcnQge0lTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZH0gZnJvbSBcIi4vbW9kZWxzL0lTZWN0aW9uSW5IaWVyYXJjaHlcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtnZXRMb2NhbERlZmF1bHRUaW1lem9uZSwgVGltZVpvbmV9IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvVGltZVpvbmVUeXBlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVklMVFNlc3Npb259IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvSVZJTFRTZXNzaW9uXCI7XHJcbmltcG9ydCB7SVZJTFRTZXNzaW9uUGFydGljaXBhbnR9IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvSVZJTFRTZXNzaW9uUGFydGljaXBhbnRcIjtcclxuaW1wb3J0IHtJQ291cnNlUHJvZ3Jlc3N9IGZyb20gXCIuL21vZGVscy9JQ291cnNlUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtTZXNzaW9uU2NoZWR1bGluZ0luZm99IGZyb20gJy4uL3dlYmluYXJzL21vZGVscy9TZXNzaW9uU2NoZWR1bGluZ0luZm8nO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZVdlYmluYXJDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5Db3Vyc2VXZWJpbmFyQ29udHJvbGxlclwiO1xyXG4gICAgcHJpdmF0ZSBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHJpdmF0ZSBjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBtZW51S2V5OiBhbnk7XHJcbiAgICBwdWJsaWMgdmlsdFNlc3Npb25zR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElWSUxUU2Vzc2lvbj47XHJcbiAgICBwdWJsaWMgdmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbDogSUdyaWRNb2RlbDxJVklMVFNlc3Npb25QYXJ0aWNpcGFudD47XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2U6IElDb3Vyc2UgPSB7fTtcclxuICAgIHB1YmxpYyBvd25lcnM6IEFycmF5PElTZWxlY3RhYmxlPiA9IFtdO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBjb3Vyc2VTdGFydGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIHZpbHRTZXNzaW9uU2VjdGlvbnM6IElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdO1xyXG4gICAgcHVibGljIG5ld1Nlc3Npb246IElWSUxUU2Vzc2lvbiA9IHt9O1xyXG4gICAgcHVibGljIHNob3dNYW5hZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93Um9zdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY291cnNlVXNlcnM6IEFycmF5PElTZWxlY3RhYmxlPiA9IFtdO1xyXG4gICAgcHVibGljIGNvdXJzZVVzZXJzV2l0aG91dENvbXBsZXRlZFN0YXR1czogQXJyYXk8SVNlbGVjdGFibGU+ID0gW107XHJcbiAgICBwdWJsaWMgY3VycmVudFZJTFRTZXNzaW9uOiBJVklMVFNlc3Npb24gPSB7fTtcclxuICAgIHB1YmxpYyBpc0NvdXJzZUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHRpbWVab25lID0gVGltZVpvbmU7XHJcbiAgICBwdWJsaWMgaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm8gPSB7fTtcclxuICAgIHB1YmxpYyB0aW1lT2Zmc2V0OiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGF0dGVuZGVlc0NvdW50OiBhbnkgPSBuZXcgTWFwKCk7XHJcbiAgICBwdWJsaWMgc2hvd0VkaXRNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHByb3ZpZGVyOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaXNBY3RpdmVMZWFybmVyczogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwcml2YXRlIGNvdXJzZVByb2dyZXNzOiBJQ291cnNlUHJvZ3Jlc3M7XHJcbiAgICBwdWJsaWMgc2NoZWR1bGluZ0luZm86IFNlc3Npb25TY2hlZHVsaW5nSW5mbyA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBzaG93TW9kYWxUeXBlOiBzdHJpbmcgPSBcInpvb21cIjsgLy8gXCJ6b29tXCIsIFwiZ290b3dlYmluYXJcIiwgXCJ0ZWFtc1wiXHJcbiAgICBwcml2YXRlIGlzQ3JlYXRpb25Nb2RhbFNob3duOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFN0b3JhZ2VzLlNFU1NJT05fTkFNRSxcclxuICAgICAgICBQcm9ncmVzc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBuZy5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVdyYXBwZXI6IFN0b3JhZ2VXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VJZCA9ICRyb3V0ZVBhcmFtc1tDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IGNvdXJzZUlkU3RyID0gU3RyaW5nKHRoaXMuY291cnNlSWQpO1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9ucyhjb3Vyc2VJZFN0ciwgY291cnNlUGVybWlzc2lvbnMgPT4gY291cnNlUGVybWlzc2lvbnMudmlld090aGVyVXNlcnNQcm9ncmVzcyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzQ29tcGxldGVkVGVhbXNBdXRoID0gJHJvdXRlUGFyYW1zW1wiZXJyb3JcIl0gfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmIChpc0NvbXBsZXRlZFRlYW1zQXV0aCAhPT0gdW5kZWZpbmVkICYmIChpc0NvbXBsZXRlZFRlYW1zQXV0aCA9PT0gdHJ1ZSB8fCAoPHN0cmluZz5pc0NvbXBsZXRlZFRlYW1zQXV0aCkubGVuZ3RoID09PSAwKSkge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiWW91ciBhdXRob3JpemVkIGluIHRlYW1zIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzQ29tcGxldGVkVGVhbXNBdXRoICE9PSB1bmRlZmluZWQgJiYgKDxzdHJpbmc+aXNDb21wbGV0ZWRUZWFtc0F1dGgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoaXNDb21wbGV0ZWRUZWFtc0F1dGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weSh1c2VyLCB0aGlzLmN1cnJlbnRVc2VyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkQ291cnNlKCk7XHJcbiAgICAgICAgdGhpcy5uZXdTZXNzaW9uLmlzU2VsZlJlZ2lzdHJhdGlvbkFsbG93ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnZpbHRTZXNzaW9uc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElWSUxUU2Vzc2lvbj4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgdGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCkpKTtcclxuICAgICAgICB0aGlzLnZpbHRTZXNzaW9uc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgICAgIHRoaXMudmlsdFNlc3Npb25zR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuICAgICAgICB0aGlzLnZpbHRTZXNzaW9uc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuXHJcbiAgICAgICAgdGhpcy5uZXdTZXNzaW9uLnRpbWV6b25lID0gZ2V0TG9jYWxEZWZhdWx0VGltZXpvbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRDb3Vyc2UoKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldCh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q291cnNlUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEF0dGVuZGVlc0NvdW50KCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBidXNpbmVzc1VuaXRJZCA9IHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRab29tV2ViaW5hckNvbmZpZ3VyYXRpb25zSW5mbyh0aGlzLmNvdXJzZUlkLCBidXNpbmVzc1VuaXRJZCA9PSB1bmRlZmluZWQgPyBudWxsIDogYnVzaW5lc3NVbml0SWQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZXRDb3Vyc2VQYWdlSGVhZGVyQnJlYWRjcnVtYnModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2UsIHRoaXMuY291cnNlc1JvdXRlciwgXCJJTFRcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRDb3Vyc2VTZWN0aW9ucyh0aGlzLmNvdXJzZUlkLCB0aGlzLmNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpbHRTZXNzaW9uU2VjdGlvbnMgPSByZXN1bHQuZmlsdGVyKHdvcmQgPT4gd29yZC5zZWN0aW9uLnR5cGVLZXkgPT0gJ1dFQklOQVInKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpbHRTZXNzaW9uU2VjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi5zZWN0aW9uSWQgPSB0aGlzLnZpbHRTZXNzaW9uU2VjdGlvbnNbMF0uaWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFpvb21XZWJpbmFyQ29uZmlndXJhdGlvbnNJbmZvKGNvdXJzZUlkOiBudW1iZXIsIGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0Wm9vbVdlYmluYXJDb25maWd1cmF0aW9uc0luZm8oY291cnNlSWQsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsaW5nSW5mbyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zY2hlZHVsaW5nSW5mby5pc1dlYmluYXJDb25uZWN0aW9uRW5hYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICF0aGlzLnNjaGVkdWxpbmdJbmZvLmlzWm9vbUNvbm5lY3Rpb25FbmFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXRoaXMuc2NoZWR1bGluZ0luZm8uaXNUZWFtc0Nvbm5lY3Rpb25FbmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlNlc3Npb24gY2Fubm90IGJlIGNyZWF0ZWQuIFBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3JcIilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dWaWx0U2Vzc2lvbk1vZGFsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zY2hlZHVsaW5nSW5mby5pc1dlYmluYXJDb25uZWN0aW9uRW5hYmxlXHJcbiAgICAgICAgICAgICAgICAmJiAhdGhpcy5zY2hlZHVsaW5nSW5mby5pc1pvb21Db25uZWN0aW9uRW5hYmxlXHJcbiAgICAgICAgICAgICAgICAmJiAhdGhpcy5zY2hlZHVsaW5nSW5mby5pc1RlYW1zQ29ubmVjdGlvbkVuYWJsZSkge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlNlc3Npb24gY2Fubm90IGJlIGNyZWF0ZWQuIFBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3JcIilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zY2hlZHVsaW5nSW5mby5pc1pvb21Db25uZWN0aW9uRW5hYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDcmVhdGlvbk1vZGFsTWVldGluZygpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2NoZWR1bGluZ0luZm8uaXNXZWJpbmFyQ29ubmVjdGlvbkVuYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRpb25Nb2RhbFdlYmluYXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0aW9uTW9kYWxUZWFtcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q291cnNlUHJvZ3Jlc3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkID0gdGhpcy5zZXNzaW9uU3RvcmFnZVdyYXBwZXIuZ2V0PG51bWJlcj4odGhpcy5wcm9ncmVzc1NlcnZpY2UuQ09VUlNFX1BST0dSRVNTX0lEX1NUT1JBR0VfS0VZKTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRDb3Vyc2VQcm9ncmVzcyh0aGlzLmNvdXJzZUlkLCB0aGlzLmNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDb3Vyc2VQcm9ncmVzcyhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVDb3Vyc2VQcm9ncmVzcyhjb3Vyc2VQcm9ncmVzczogSUNvdXJzZVByb2dyZXNzKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzcyA9IGFuZ3VsYXIuY29weShjb3Vyc2VQcm9ncmVzcyk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkID0gdGhpcy5jb3Vyc2VQcm9ncmVzcy5pZDtcclxuICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlV3JhcHBlci5wdXQ8bnVtYmVyPih0aGlzLnByb2dyZXNzU2VydmljZS5DT1VSU0VfUFJPR1JFU1NfSURfU1RPUkFHRV9LRVksXHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlUHJvZ3Jlc3NJZCk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTdGFydGVkID0gKGNvdXJzZVByb2dyZXNzLnN0YXR1cyAmJiBjb3Vyc2VQcm9ncmVzcy5zdGF0dXMgIT09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLk5PVF9TVEFSVEVEXSk7XHJcbiAgICAgICAgdGhpcy5pc0NvdXJzZUxvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEF0dGVuZGVlc0NvdW50KCkge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldEF0dGVuZGVlc0NvdW50KHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0LCB0aGlzLmF0dGVuZGVlc0NvdW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQXR0ZW5kZWVzQ291bnQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgICAgIC8vZG8gbm90aGluZ1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmRMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXR0ZW5kZWVzQ291bnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUF0dGVuZGVlc0NvdW50KCkge1xyXG4gICAgICAgIHRoaXMudmlsdFNlc3Npb25zR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0ZW5kZWVzQ291bnRbdi5pZF0pIHtcclxuICAgICAgICAgICAgICAgIHYucmVnaXN0cmFudHMgPSB0aGlzLmF0dGVuZGVlc0NvdW50W3YuaWRdWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHYuc3RhdHVzID09ICdGSU5JU0hFRCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB2LmF0dGVuZGVlcyA9IHRoaXMuYXR0ZW5kZWVzQ291bnRbdi5pZF1bMV07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRlbXBsYXRlRm9ySW5jbHVkZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVybC50ZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgc2NoZWR1bGVPclVwZGF0ZVdlYmluYXIoKSB7XHJcbiAgICAgICAgdGhpcy5wcmVwYXJlRGF0YUZvclNjaGVkdWxlV2ViaW5hcigpO1xyXG5cclxuICAgICAgICBsZXQgZnVuYyA9ICF0aGlzLm5ld1Nlc3Npb24uaWQgPyB0aGlzLmNvdXJzZVNlcnZpY2UuY3JlYXRlV2ViaW5hcih0aGlzLmNvdXJzZUlkLCB0aGlzLm5ld1Nlc3Npb24pXHJcbiAgICAgICAgICAgIDogdGhpcy5jb3Vyc2VTZXJ2aWNlLnVwZGF0ZVdlYmluYXIodGhpcy5jb3Vyc2VJZCwgdGhpcy5uZXdTZXNzaW9uKTtcclxuICAgICAgICBmdW5jLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQXR0ZW5kZWVzQ291bnQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlsdFNlc3Npb25zR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICB9KS5jYXRjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5uZXdTZXNzaW9uLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIHZJTFQgc2Vzc2lvbi4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5kYXRhLmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmRhdGEuZGVzY3JpcHRpb24uc2VhcmNoKFwiV2ViaW5hciB3aXRoIHNwZWNpZmllZCBrZXkgZG9lcyBub3QgZXhpc1wiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGUgdklMVCBzZXNzaW9uIGhhcyBiZWVuIGNhbmNlbGxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LmRhdGEuZGVzY3JpcHRpb24uc2VhcmNoKFwiQ2Fubm90IHVwZGF0ZSB3ZWJpbmFyIHdoaWxlIGEgc2Vzc2lvbiBpcyBydW5uaW5nXCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byB1cGRhdGUgdklMVCBzZXNzaW9uIGJlY2F1c2UgaXQgaXMgY3VycmVudGx5IGluIHNlc3Npb24uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIHZJTFQgc2Vzc2lvbi4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmFsbHlDYWxsYmFja0ZvclNjaGVkdWxlV2ViaW5hcigpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzY2hlZHVsZU9yVXBkYXRlTWVldGluZygpIHtcclxuICAgICAgICB0aGlzLnByZXBhcmVEYXRhRm9yU2NoZWR1bGVXZWJpbmFyKCk7XHJcblxyXG4gICAgICAgIGxldCBmdW5jID0gIXRoaXMubmV3U2Vzc2lvbi5pZCA/IHRoaXMuY291cnNlU2VydmljZS5jcmVhdGVNZWV0aW5nKHRoaXMuY291cnNlLmlkLCB0aGlzLm5ld1Nlc3Npb24pXHJcbiAgICAgICAgICAgIDogdGhpcy5jb3Vyc2VTZXJ2aWNlLnVwZGF0ZU1lZXRpbmcodGhpcy5jb3Vyc2UuaWQsIHRoaXMubmV3U2Vzc2lvbik7XHJcbiAgICAgICAgZnVuYy50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEF0dGVuZGVlc0NvdW50KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpbHRTZXNzaW9uc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubmV3U2Vzc2lvbi5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSB2SUxUIHNlc3Npb24uIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHguZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5kYXRhLnNlYXJjaChcIk1lZXRpbmcgZG9lcyBub3QgZXhpc3Q6XCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIHZJTFQgc2Vzc2lvbi4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmFsbHlDYWxsYmFja0ZvclNjaGVkdWxlV2ViaW5hcigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2NoZWR1bGVPclVwZGF0ZVRlYW1zTWVldGluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByZXBhcmVEYXRhRm9yU2NoZWR1bGVXZWJpbmFyKCk7XHJcblxyXG4gICAgICAgIGxldCBmdW5jOiBhbnkgPSAhdGhpcy5uZXdTZXNzaW9uLmlkID8gdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZVRlYW1zTWVldGluZyh0aGlzLmNvdXJzZUlkLCB0aGlzLm5ld1Nlc3Npb24pXHJcbiAgICAgICAgICAgIDogdGhpcy5jb3Vyc2VTZXJ2aWNlLnVwZGF0ZVRlYW1zTWVldGluZyh0aGlzLmNvdXJzZUlkLCB0aGlzLm5ld1Nlc3Npb24pO1xyXG4gICAgICAgIGZ1bmMudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEF0dGVuZGVlc0NvdW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMudmlsdFNlc3Npb25zR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yLmRhdGEgJiYgZXJyb3IuZGF0YS5tZXNzYWdlRm9yVXNlci5zZWFyY2goXCJ2aWx0Lndhcy5jYW5jZWxsZWRcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgJiYgZXJyb3IuZGF0YSAmJiBlcnJvci5kYXRhLm1lc3NhZ2VGb3JVc2VyKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihlcnJvci5kYXRhLm1lc3NhZ2VGb3JVc2VyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSB2SUxUIHNlc3Npb24uIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbmFsbHlDYWxsYmFja0ZvclNjaGVkdWxlV2ViaW5hcigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJlcGFyZURhdGFGb3JTY2hlZHVsZVdlYmluYXIoKSB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVZhbGlkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uZXdTZXNzaW9uLnN0YXJ0X2RhdGUgPSB0aGlzLmdldFRpbWVCeVRpbWV6b25lKHRoaXMubmV3U2Vzc2lvbi5zdGFydFRpbWUpO1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi5lbmRfZGF0ZSA9IHRoaXMuZ2V0VGltZUJ5VGltZXpvbmUodGhpcy5uZXdTZXNzaW9uLmVuZFRpbWUpO1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtYXREYXRlOiBzdHJpbmcgPSBcIllZWVktTU0tRERUSEg6bW06c3NcIjtcclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24uc3RhcnREYXRlSW5pdCA9IG1vbWVudCh0aGlzLmdldFRpbWVXaXRob3V0VGltZXpvbmUodGhpcy5uZXdTZXNzaW9uLnN0YXJ0VGltZSkpLmZvcm1hdChmb3JtYXREYXRlKTtcclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24uZW5kRGF0ZUluaXQgPSBtb21lbnQodGhpcy5nZXRUaW1lV2l0aG91dFRpbWV6b25lKHRoaXMubmV3U2Vzc2lvbi5lbmRUaW1lKSkuZm9ybWF0KGZvcm1hdERhdGUpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbW1vblByZXBhcmVEYXRhRm9yU2NoZWR1bGVWaWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb21tb25QcmVwYXJlRGF0YUZvclNjaGVkdWxlVmlsdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpbHRTZXNzaW9uU2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uSW5IaWVyYXJjaHkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2VjdGlvbkluSGllcmFyY2h5LnR5cGUgPT0gXCJTRUNUSU9OXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uSW5IaWVyYXJjaHkuc2VjdGlvbi50eXBlS2V5ID09IFwiV0VCSU5BUlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25JbkhpZXJhcmNoeS5zZWN0aW9uLmlkID09IHRoaXMubmV3U2Vzc2lvbi5zZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uLnRpdGxlID0gc2VjdGlvbkluSGllcmFyY2h5LnNlY3Rpb24ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi5zZWN0aW9uSWQgPSArdGhpcy5uZXdTZXNzaW9uLnNlY3Rpb25JZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRpbWVCeVRpbWV6b25lKGRhdGU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHByZXBhcmVfdGltZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZShkYXRlLCBcImhoOm1tIGFcIikgLSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcclxuICAgICAgICBwcmVwYXJlX3RpbWUgPSBwcmVwYXJlX3RpbWUgLSBNYXRoLmZsb29yKChwcmVwYXJlX3RpbWUgLyA4NjQwMDAwMCkpICogODY0MDAwMDA7XHJcbiAgICAgICAgcmV0dXJuIE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLm5ld1Nlc3Npb24uZGF0ZSkgKyBwcmVwYXJlX3RpbWUgLSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCArIHRoaXMudGltZU9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRpbWVXaXRob3V0VGltZXpvbmUoZGF0ZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgcHJlcGFyZV90aW1lID0gTW9tZW50LnRleHRUb0phdmFEYXRlKGRhdGUsIFwiaGg6bW0gYVwiKSAtIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xyXG4gICAgICAgIHByZXBhcmVfdGltZSA9IHByZXBhcmVfdGltZSAtIE1hdGguZmxvb3IoKHByZXBhcmVfdGltZSAvIDg2NDAwMDAwKSkgKiA4NjQwMDAwMDtcclxuICAgICAgICByZXR1cm4gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMubmV3U2Vzc2lvbi5kYXRlKSArIHByZXBhcmVfdGltZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbmFsbHlDYWxsYmFja0ZvclNjaGVkdWxlV2ViaW5hcigpIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24gPSB7fTtcclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24uaXNTZWxmUmVnaXN0cmF0aW9uQWxsb3dlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMudmlsdFNlc3Npb25TZWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi5zZWN0aW9uSWQgPSB0aGlzLnZpbHRTZXNzaW9uU2VjdGlvbnNbMF0uaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi50aW1lem9uZSA9IGdldExvY2FsRGVmYXVsdFRpbWV6b25lKCk7XHJcbiAgICAgICAgdGhpcy5pc0NyZWF0aW9uTW9kYWxTaG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0VkaXRNb2RhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JlYXRpb25Nb2RhbFZJTFRTZXNzaW9uKHZpbHRTZXNzaW9uSWQ6IG51bWJlciwgcHJvdmlkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChwcm92aWRlciA9PSBcIlpPT01cIikge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDcmVhdGlvbk1vZGFsTWVldGluZyh2aWx0U2Vzc2lvbklkKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3ZpZGVyID09IFwiVEVBTVNcIikge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDcmVhdGlvbk1vZGFsVGVhbXModmlsdFNlc3Npb25JZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRpb25Nb2RhbFdlYmluYXIodmlsdFNlc3Npb25JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JlYXRpb25Nb2RhbFdlYmluYXIod2ViaW5hcklkPzogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhbkNyZWF0aW9uTW9kYWwoKTtcclxuICAgICAgICB0aGlzLnNob3dNb2RhbFR5cGUgPSBcImdvdG93ZWJpbmFyXCI7XHJcbiAgICAgICAgdGhpcy5uZXdTZXNzaW9uLmJ1c2luZXNzVW5pdElkID0gdGhpcy5uZXdTZXNzaW9uLmJ1c2luZXNzVW5pdElkIHx8IHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIGlmICh3ZWJpbmFySWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RWRpdE1vZGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy52aWx0U2Vzc2lvbnNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKHdlYmluYXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdlYmluYXIuaWQgPT0gd2ViaW5hcklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHdlYmluYXIsIHRoaXMubmV3U2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0U2VjdGlvbkZvcldlYmluYXIodGhpcy5jb3Vyc2VJZCwgd2ViaW5hcklkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld1Nlc3Npb24uc2VjdGlvbklkID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVPZmZzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uLmRhdGUgPSBtb21lbnQodGhpcy5uZXdTZXNzaW9uLnN0YXJ0X2RhdGUgLSB0aGlzLnRpbWVPZmZzZXQpLmZvcm1hdChcIk0vRC9ZWVlZXCIpO1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Nlc3Npb24uc3RhcnRUaW1lID0gbW9tZW50KHRoaXMubmV3U2Vzc2lvbi5zdGFydF9kYXRlIC0gdGhpcy50aW1lT2Zmc2V0ICsgbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApLmZvcm1hdChcImhoOm1tIGFcIik7XHJcbiAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi5lbmRUaW1lID0gbW9tZW50KHRoaXMubmV3U2Vzc2lvbi5lbmRfZGF0ZSAtIHRoaXMudGltZU9mZnNldCArIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKS5mb3JtYXQoXCJoaDptbSBhXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2UuYnVzaW5lc3NVbml0SWQgPyB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQgPSB0aGlzLmNvdXJzZS5idXNpbmVzc1VuaXRJZCA6XHJcbiAgICAgICAgICAgICAgICAodGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzID8gdGhpcy5uZXdTZXNzaW9uLmJ1c2luZXNzVW5pdElkID0gdGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzWzBdIDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQgPW51bGwpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICQoXCIjY3JlYXRpb25EaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXNDcmVhdGlvbk1vZGFsU2hvd24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JlYXRpb25Nb2RhbE1lZXRpbmcobWVldGluZ0lkPzogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhbkNyZWF0aW9uTW9kYWwoKTtcclxuICAgICAgICB0aGlzLnNob3dNb2RhbFR5cGUgPSBcInpvb21cIjtcclxuICAgICAgICB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQgPSB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQgfHwgdGhpcy5jb3Vyc2UuYnVzaW5lc3NVbml0SWQ7XHJcbiAgICAgICAgaWYgKG1lZXRpbmdJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dFZGl0TW9kYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnZpbHRTZXNzaW9uc0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2gobWVldGluZyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWVldGluZy5pZCA9PSBtZWV0aW5nSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkobWVldGluZywgdGhpcy5uZXdTZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRTZWN0aW9uRm9yTWVldGluZyh0aGlzLmNvdXJzZUlkLCBtZWV0aW5nSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi5zZWN0aW9uSWQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgZnVuYzogYW55ID0gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFNldHRpbmdzRm9yRXhpc3RpbmdNZWV0aW5nKHRoaXMuY291cnNlSWQsIG1lZXRpbmdJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLm5ld1Nlc3Npb24ubWVldGluZ1NldHRpbmdzID0gcmVzdWx0KTtcclxuXHJcbiAgICAgICAgICAgIGZ1bmMudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZU9mZnNldCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uLmRhdGUgPSBtb21lbnQodGhpcy5uZXdTZXNzaW9uLnN0YXJ0X2RhdGUgLSB0aGlzLnRpbWVPZmZzZXQpLmZvcm1hdChcIk0vRC9ZWVlZXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uLnN0YXJ0VGltZSA9IG1vbWVudCh0aGlzLm5ld1Nlc3Npb24uc3RhcnRfZGF0ZSAtIHRoaXMudGltZU9mZnNldCArIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKS5mb3JtYXQoXCJoaDptbSBhXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uLmVuZFRpbWUgPSBtb21lbnQodGhpcy5uZXdTZXNzaW9uLmVuZF9kYXRlIC0gdGhpcy50aW1lT2Zmc2V0ICsgbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApLmZvcm1hdChcImhoOm1tIGFcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNb2RhbE1lZXRpbmcoKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2gocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0TWVldGluZ1NldHRpbmdzKHRoaXMuY291cnNlSWQpLnRoZW4ocmVzdWx0ID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld1Nlc3Npb24ubWVldGluZ1NldHRpbmdzID0gcmVzdWx0KTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2UuYnVzaW5lc3NVbml0SWQgPyB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQgPSB0aGlzLmNvdXJzZS5idXNpbmVzc1VuaXRJZCA6XHJcbiAgICAgICAgICAgICAgICAodGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzID8gdGhpcy5uZXdTZXNzaW9uLmJ1c2luZXNzVW5pdElkID0gdGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzWzBdIDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQgPW51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dNb2RhbE1lZXRpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd01vZGFsTWVldGluZygpIHtcclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNjcmVhdGlvbkRpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pc0NyZWF0aW9uTW9kYWxTaG93biA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dDcmVhdGlvbk1vZGFsVGVhbXModGVhbXNFdmVudElkPzogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhbkNyZWF0aW9uTW9kYWwoKTtcclxuICAgICAgICB0aGlzLnNob3dNb2RhbFR5cGUgPSBcInRlYW1zXCI7XHJcbiAgICAgICAgdGhpcy5uZXdTZXNzaW9uLmJ1c2luZXNzVW5pdElkID0gdGhpcy5uZXdTZXNzaW9uLmJ1c2luZXNzVW5pdElkIHx8IHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkO1xyXG5cclxuICAgICAgICBpZiAodGVhbXNFdmVudElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0VkaXRNb2RhbCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmlsdFNlc3Npb25zR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChtZWV0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChtZWV0aW5nLmlkID09IHRlYW1zRXZlbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShtZWV0aW5nLCB0aGlzLm5ld1Nlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFNlY3Rpb25Gb3JNZWV0aW5nKHRoaXMuY291cnNlSWQsIHRlYW1zRXZlbnRJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uLnNlY3Rpb25JZCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlT2Zmc2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi5kYXRlID0gbW9tZW50KHRoaXMubmV3U2Vzc2lvbi5zdGFydF9kYXRlIC0gdGhpcy50aW1lT2Zmc2V0KS5mb3JtYXQoXCJNL0QvWVlZWVwiKTtcclxuICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uLnN0YXJ0VGltZSA9IG1vbWVudCh0aGlzLm5ld1Nlc3Npb24uc3RhcnRfZGF0ZSAtIHRoaXMudGltZU9mZnNldCArIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKS5mb3JtYXQoXCJoaDptbSBhXCIpO1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Nlc3Npb24uZW5kVGltZSA9IG1vbWVudCh0aGlzLm5ld1Nlc3Npb24uZW5kX2RhdGUgLSB0aGlzLnRpbWVPZmZzZXQgKyBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkuZm9ybWF0KFwiaGg6bW0gYVwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZS5idXNpbmVzc1VuaXRJZCA/IHRoaXMubmV3U2Vzc2lvbi5idXNpbmVzc1VuaXRJZCA9IHRoaXMuY291cnNlLmJ1c2luZXNzVW5pdElkIDpcclxuICAgICAgICAgICAgICAgICh0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHMgPyB0aGlzLm5ld1Nlc3Npb24uYnVzaW5lc3NVbml0SWQgPSB0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHNbMF0gOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3U2Vzc2lvbi5idXNpbmVzc1VuaXRJZCA9bnVsbCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICQoXCIjY3JlYXRpb25EaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXNDcmVhdGlvbk1vZGFsU2hvd24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhbkNyZWF0aW9uTW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5pc0NyZWF0aW9uTW9kYWxTaG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbiA9IHt9O1xyXG4gICAgICAgIHRoaXMubmV3U2Vzc2lvbi5pc1NlbGZSZWdpc3RyYXRpb25BbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy52aWx0U2Vzc2lvblNlY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uLnNlY3Rpb25JZCA9IHRoaXMudmlsdFNlc3Npb25TZWN0aW9uc1swXS5pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5uZXdTZXNzaW9uLnRpbWV6b25lID0gZ2V0TG9jYWxEZWZhdWx0VGltZXpvbmUoKTtcclxuICAgICAgICB0aGlzLnNob3dFZGl0TW9kYWwgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWFuYWdlKHZpbHRTZXNzaW9uOiBJVklMVFNlc3Npb24sIHByb3ZpZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnByb3ZpZGVyID0gcHJvdmlkZXJcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGFuZ3VsYXIuY29weSh2aWx0U2Vzc2lvbiwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24pO1xyXG4gICAgICAgIHRoaXMuc2hvd01hbmFnZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93Um9zdGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldENvdXJzZVVzZXJzRm9yVklMVFNlc3Npb24odGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5jb3Vyc2VVc2Vycyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0Q291cnNlVXNlcnNXaXRob3V0Q29tcGxldGVkU3RhdHVzRm9yVklMVFNlc3Npb24odGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0LCB0aGlzLmNvdXJzZVVzZXJzV2l0aG91dENvbXBsZXRlZFN0YXR1cyk7XHJcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElWSUxUU2Vzc2lvblBhcnRpY2lwYW50Pih0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC92aWx0U2Vzc2lvbnMvOnZpbHRTZXNzaW9uSWQvcGFydGljaXBhbnRzXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgdGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjp2aWx0U2Vzc2lvbklkXCIsIHRoaXMuY3VycmVudFZJTFRTZXNzaW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSkpO1xyXG4gICAgICAgIHRoaXMudmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbC5wYWdlU2l6ZSA9IDI1O1xyXG4gICAgICAgIHRoaXMudmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlld1Jvc3Rlcih2aWx0U2Vzc2lvbjogSVZJTFRTZXNzaW9uKSB7XHJcbiAgICAgICAgYW5ndWxhci5jb3B5KHZpbHRTZXNzaW9uLCB0aGlzLmN1cnJlbnRWSUxUU2Vzc2lvbik7XHJcbiAgICAgICAgdGhpcy5zaG93TWFuYWdlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93Um9zdGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZpbHRTZXNzaW9uUGFydGljaXBhbnRHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJVklMVFNlc3Npb25QYXJ0aWNpcGFudD4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdmlsdFNlc3Npb25zLzp2aWx0U2Vzc2lvbklkL3BhcnRpY2lwYW50c1wiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIHRoaXMuY291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6dmlsdFNlc3Npb25JZFwiLCB0aGlzLmN1cnJlbnRWSUxUU2Vzc2lvbi5pZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCkpKTtcclxuICAgICAgICB0aGlzLnZpbHRTZXNzaW9uUGFydGljaXBhbnRHcmlkTW9kZWwucGFnZVNpemUgPSA1MDtcclxuICAgICAgICB0aGlzLnZpbHRTZXNzaW9uUGFydGljaXBhbnRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzV2ViaW5hclJlZ2lzdHJhbnQodXNlcklkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWx0U2Vzc2lvblBhcnRpY2lwYW50R3JpZE1vZGVsLmVudHJpZXMuc29tZShlID0+IGUudXNlcklkID09PSB1c2VySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01lZXRpbmdSZWdpc3RyYW50KHVzZXJJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbC5lbnRyaWVzLnNvbWUoZSA9PiBlLnVzZXJJZCA9PT0gdXNlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJQYXJ0aWNpcGFudFdlYmluYXIodXNlcklkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciBwYXJ0aWNpcGFudDogSVZJTFRTZXNzaW9uUGFydGljaXBhbnQgPSB7fTtcclxuICAgICAgICBwYXJ0aWNpcGFudC51c2VySWQgPSB1c2VySWQ7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZVBhcnRpY2lwYW50V2ViaW5hcih0aGlzLmNvdXJzZUlkLCB0aGlzLmN1cnJlbnRWSUxUU2Vzc2lvbi5pZCwgcGFydGljaXBhbnQpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHguZGF0YS5kZXNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LmRhdGEuZGVzY3JpcHRpb24uc2VhcmNoKFwiV2ViaW5hciB3aXRoIHNwZWNpZmllZCBrZXkgZG9lcyBub3QgZXhpc1wiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdGFydFdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmVnaXN0ZXIgcGFydGljaXBhbnQocykuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlclBhcnRpY2lwYW50TWVldGluZyh1c2VySWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdmFyIHBhcnRpY2lwYW50OiBJVklMVFNlc3Npb25QYXJ0aWNpcGFudCA9IHt9O1xyXG4gICAgICAgIHBhcnRpY2lwYW50LnVzZXJJZCA9IHVzZXJJZDtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuY3JlYXRlUGFydGljaXBhbnRNZWV0aW5nKHRoaXMuY291cnNlSWQsIHRoaXMuY3VycmVudFZJTFRTZXNzaW9uLmlkLCBwYXJ0aWNpcGFudClcclxuICAgICAgICAgICAgLmNhdGNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHguZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LmRhdGEuc2VhcmNoKFwid2l0aCBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0XCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N0YXJ0V2luZG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LmRhdGEuc2VhcmNoKFwiRW1haWwgdmFsaWRhdGlvbiBmYWlsZWRcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJQYXJ0aWNpcGFudCBlbWFpbCB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHguZGF0YS5zZWFyY2goXCJPbmx5IGF2YWlsYWJsZSBmb3IgcGFpZCB1c2Vyc1wiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlpvb20gYWNjb3VudCBvZiB0aGUgc2Vzc2lvbiBjcmVhdG9yIG11c3QgYmUgcGFpZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbih4LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmVnaXN0ZXIgcGFydGljaXBhbnQocykuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpbHRTZXNzaW9uUGFydGljaXBhbnRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlclBhcnRpY2lwYW50VGVhbXModXNlcklkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGxldCBwYXJ0aWNpcGFudDogSVZJTFRTZXNzaW9uUGFydGljaXBhbnQgPSB7fTtcclxuICAgICAgICBwYXJ0aWNpcGFudC51c2VySWQgPSB1c2VySWQ7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZVBhcnRpY2lwYW50VGVhbXModGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQsIHBhcnRpY2lwYW50KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpbHRTZXNzaW9uUGFydGljaXBhbnRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IuZGF0YSAmJiBlcnJvci5kYXRhLm1lc3NhZ2VGb3JVc2VyLnNlYXJjaChcInZpbHQud2FzLmNhbmNlbGxlZFwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yLmRhdGEgJiYgZXJyb3IuZGF0YS5tZXNzYWdlRm9yVXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKGVycm9yLmRhdGEubWVzc2FnZUZvclVzZXIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byByZWdpc3RlciBwYXJ0aWNpcGFudChzKS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVucmVnaXN0ZXJQYXJ0aWNpcGFudCh1c2VySWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgbGV0IHBJZDogbnVtYmVyID0gMDtcclxuICAgICAgICB0aGlzLnZpbHRTZXNzaW9uUGFydGljaXBhbnRHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZS51c2VySWQgPT09IHVzZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgcElkID0gZS5pZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5yZW1vdmVQYXJ0aWNpcGFudFdlYmluYXIodGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQsIHBJZClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWx0U2Vzc2lvblBhcnRpY2lwYW50R3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeC5kYXRhLmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHguZGF0YS5kZXNjcmlwdGlvbi5zZWFyY2goXCJXZWJpbmFyIHdpdGggc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdFwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdGFydFdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gdW5yZWdpc3RlciBwYXJ0aWNpcGFudChzKS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bnJlZ2lzdGVyUGFydGljaXBhbnRNZWV0aW5nKHVzZXJJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcElkOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIHRoaXMudmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlLnVzZXJJZCA9PT0gdXNlcklkKSB7XHJcbiAgICAgICAgICAgICAgICBwSWQgPSBlLmlkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnJlbW92ZVBhcnRpY2lwYW50TWVldGluZyh0aGlzLmNvdXJzZUlkLCB0aGlzLmN1cnJlbnRWSUxUU2Vzc2lvbi5pZCwgcElkKVxyXG4gICAgICAgICAgICAuY2F0Y2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHguZGF0YS5zZWFyY2goXCJNZWV0aW5nIGRvZXMgbm90IGV4aXN0OlwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdGFydFdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uKHguZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byB1bnJlZ2lzdGVyIHBhcnRpY2lwYW50KHMpLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyIG9yIGNvbnRhY3Qgc3VwcG9ydC5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWx0U2Vzc2lvblBhcnRpY2lwYW50R3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5yZWdpc3RlclRlYW1zUGFydGljaXBhbnQodXNlcklkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGxldCBwSWQ6IG51bWJlciA9IDA7XHJcbiAgICAgICAgdGhpcy52aWx0U2Vzc2lvblBhcnRpY2lwYW50R3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgaWYgKGUudXNlcklkID09PSB1c2VySWQpIHtcclxuICAgICAgICAgICAgICAgIHBJZCA9IGUuaWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UucmVtb3ZlUGFydGljaXBhbnRUZWFtcyh0aGlzLmNvdXJzZUlkLCB0aGlzLmN1cnJlbnRWSUxUU2Vzc2lvbi5pZCwgcElkKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpbHRTZXNzaW9uUGFydGljaXBhbnRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IuZGF0YSAmJiBlcnJvci5kYXRhLm1lc3NhZ2VGb3JVc2VyLnNlYXJjaChcInZpbHQud2FzLmNhbmNlbGxlZFwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yLmRhdGEgJiYgZXJyb3IuZGF0YS5tZXNzYWdlRm9yVXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKGVycm9yLmRhdGEubWVzc2FnZUZvclVzZXIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byB1bnJlZ2lzdGVyIHBhcnRpY2lwYW50KHMpLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyIG9yIGNvbnRhY3Qgc3VwcG9ydC5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyQWxsUGFydGljaXBhbnRzKCkge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYodGhpcy5pc0FjdGl2ZUxlYXJuZXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5jcmVhdGVBbGxQYXJ0aWNpcGFudFdlYmluYXJXaXRob3V0Q29tcGxldGVkKHRoaXMuY291cnNlSWQsIHRoaXMuY3VycmVudFZJTFRTZXNzaW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHguZGF0YS5kZXNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5kYXRhLmRlc2NyaXB0aW9uLnNlYXJjaChcIldlYmluYXIgd2l0aCBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0XCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3RhcnRXaW5kb3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHJlZ2lzdGVyIHBhcnRpY2lwYW50KHMpLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyIG9yIGNvbnRhY3Qgc3VwcG9ydC5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5jcmVhdGVBbGxQYXJ0aWNpcGFudFdlYmluYXIodGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWx0U2Vzc2lvblBhcnRpY2lwYW50R3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5kYXRhLmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmRhdGEuZGVzY3JpcHRpb24uc2VhcmNoKFwiV2ViaW5hciB3aXRoIHNwZWNpZmllZCBrZXkgZG9lcyBub3QgZXhpc3RcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdGFydFdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmVnaXN0ZXIgcGFydGljaXBhbnQocykuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlckFsbFBhcnRpY2lwYW50c01lZXRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZih0aGlzLmlzQWN0aXZlTGVhcm5lcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZUFsbFBhcnRpY2lwYW50TWVldGluZ1dpdGhvdXRDb21wbGV0ZWRTdGF0dXModGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQpXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHguZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5kYXRhLnNlYXJjaChcIk1lZXRpbmcgZG9lcyBub3QgZXhpc3Q6XCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3RhcnRXaW5kb3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uKHguZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byByZWdpc3RlciBwYXJ0aWNpcGFudChzKS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWx0U2Vzc2lvblBhcnRpY2lwYW50R3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZUFsbFBhcnRpY2lwYW50TWVldGluZyh0aGlzLmNvdXJzZUlkLCB0aGlzLmN1cnJlbnRWSUxUU2Vzc2lvbi5pZClcclxuICAgICAgICAgICAgICAgIC5jYXRjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmRhdGEuc2VhcmNoKFwiTWVldGluZyBkb2VzIG5vdCBleGlzdDpcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdGFydFdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3JOb3RpZmljYXRpb24oeC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHJlZ2lzdGVyIHBhcnRpY2lwYW50KHMpLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyIG9yIGNvbnRhY3Qgc3VwcG9ydC5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpbHRTZXNzaW9uUGFydGljaXBhbnRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyQWxsUGFydGljaXBhbnRzRm9yVGVhbXMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZih0aGlzLmlzQWN0aXZlTGVhcm5lcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNyZWF0ZUFsbFBhcnRpY2lwYW50VGVhbXNXaXRob3V0Q29tcGxldGVkKHRoaXMuY291cnNlSWQsIHRoaXMuY3VycmVudFZJTFRTZXNzaW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IuZGF0YSAmJiBlcnJvci5kYXRhLm1lc3NhZ2VGb3JVc2VyICYmIGVycm9yLmRhdGEubWVzc2FnZUZvclVzZXIuc2VhcmNoKFwidmlsdC53YXMuY2FuY2VsbGVkXCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvci5kYXRhICYmIGVycm9yLmRhdGEubWVzc2FnZUZvclVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoZXJyb3IuZGF0YS5tZXNzYWdlRm9yVXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmVnaXN0ZXIgcGFydGljaXBhbnQocykuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5jcmVhdGVBbGxQYXJ0aWNpcGFudFRlYW1zKHRoaXMuY291cnNlSWQsIHRoaXMuY3VycmVudFZJTFRTZXNzaW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IuZGF0YSAmJiBlcnJvci5kYXRhLm1lc3NhZ2VGb3JVc2VyICYmIGVycm9yLmRhdGEubWVzc2FnZUZvclVzZXIuc2VhcmNoKFwidmlsdC53YXMuY2FuY2VsbGVkXCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvci5kYXRhICYmIGVycm9yLmRhdGEubWVzc2FnZUZvclVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoZXJyb3IuZGF0YS5tZXNzYWdlRm9yVXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmVnaXN0ZXIgcGFydGljaXBhbnQocykuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5yZWdpc3RlckFsbFBhcnRpY2lwYW50cygpIHtcclxuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGlmKHRoaXMuaXNBY3RpdmVMZWFybmVycykge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UucmVtb3ZlQWxsUGFydGljaXBhbnRzV2ViaW5hcldpdGhvdXRDb21wbGV0ZWQodGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWx0U2Vzc2lvblBhcnRpY2lwYW50R3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5kYXRhLmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmRhdGEuZGVzY3JpcHRpb24uc2VhcmNoKFwiV2ViaW5hciB3aXRoIHNwZWNpZmllZCBrZXkgZG9lcyBub3QgZXhpc3RcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdGFydFdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gdW5yZWdpc3RlciBwYXJ0aWNpcGFudChzKS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnJlbW92ZUFsbFBhcnRpY2lwYW50c1dlYmluYXIodGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWx0U2Vzc2lvblBhcnRpY2lwYW50R3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LmRhdGEuZGVzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHguZGF0YS5kZXNjcmlwdGlvbi5zZWFyY2goXCJXZWJpbmFyIHdpdGggc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdFwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGUgdklMVCBzZXNzaW9uIGhhcyBiZWVuIGNhbmNlbGxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N0YXJ0V2luZG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byB1bnJlZ2lzdGVyIHBhcnRpY2lwYW50KHMpLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyIG9yIGNvbnRhY3Qgc3VwcG9ydC5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5yZWdpc3RlckFsbFBhcnRpY2lwYW50c01lZXRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZih0aGlzLmlzQWN0aXZlTGVhcm5lcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnJlbW92ZUFsbFBhcnRpY2lwYW50c01lZXRpbmdXaXRob3V0Q29tcGxldGVkU3RhdHVzKHRoaXMuY291cnNlSWQsIHRoaXMuY3VycmVudFZJTFRTZXNzaW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHguZGF0YS5zZWFyY2goXCJNZWV0aW5nIGRvZXMgbm90IGV4aXN0OlwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGUgdklMVCBzZXNzaW9uIGhhcyBiZWVuIGNhbmNlbGxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N0YXJ0V2luZG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbih4LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gdW5yZWdpc3RlciBwYXJ0aWNpcGFudChzKS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlsdFNlc3Npb25QYXJ0aWNpcGFudEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5yZW1vdmVBbGxQYXJ0aWNpcGFudHNNZWV0aW5nKHRoaXMuY291cnNlSWQsIHRoaXMuY3VycmVudFZJTFRTZXNzaW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHguZGF0YS5zZWFyY2goXCJNZWV0aW5nIGRvZXMgbm90IGV4aXN0OlwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGUgdklMVCBzZXNzaW9uIGhhcyBiZWVuIGNhbmNlbGxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N0YXJ0V2luZG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbih4LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gdW5yZWdpc3RlciBwYXJ0aWNpcGFudChzKS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWx0U2Vzc2lvblBhcnRpY2lwYW50R3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bnJlZ2lzdGVyQWxsUGFydGljaXBhbnRzRm9yVGVhbXMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZih0aGlzLmlzQWN0aXZlTGVhcm5lcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnJlbW92ZUFsbFBhcnRpY2lwYW50c1RlYW1zV2l0aG91dENvbXBsZXRlZCh0aGlzLmNvdXJzZUlkLCB0aGlzLmN1cnJlbnRWSUxUU2Vzc2lvbi5pZClcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpbHRTZXNzaW9uUGFydGljaXBhbnRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLmRhdGEgJiYgZXJyb3IuZGF0YS5tZXNzYWdlRm9yVXNlci5zZWFyY2goXCJ2aWx0Lndhcy5jYW5jZWxsZWRcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGUgdklMVCBzZXNzaW9uIGhhcyBiZWVuIGNhbmNlbGxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yLmRhdGEgJiYgZXJyb3IuZGF0YS5tZXNzYWdlRm9yVXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihlcnJvci5kYXRhLm1lc3NhZ2VGb3JVc2VyKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byB1bnJlZ2lzdGVyIHBhcnRpY2lwYW50KHMpLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyIG9yIGNvbnRhY3Qgc3VwcG9ydC5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UucmVtb3ZlQWxsUGFydGljaXBhbnRzVGVhbXModGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWx0U2Vzc2lvblBhcnRpY2lwYW50R3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5kYXRhICYmIGVycm9yLmRhdGEubWVzc2FnZUZvclVzZXIuc2VhcmNoKFwidmlsdC53YXMuY2FuY2VsbGVkXCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZJTFQgc2Vzc2lvbiBoYXMgYmVlbiBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvci5kYXRhICYmIGVycm9yLmRhdGEubWVzc2FnZUZvclVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoZXJyb3IuZGF0YS5tZXNzYWdlRm9yVXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gdW5yZWdpc3RlciBwYXJ0aWNpcGFudChzKS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxXZWJpbmFyKCkge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNhbmNlbFdlYmluYXIodGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlVXNlcnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VVc2Vyc1dpdGhvdXRDb21wbGV0ZWRTdGF0dXMgPSBbXTtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dTdGFydFdpbmRvdygpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh4LmRhdGEuZGVzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5kYXRhLmRlc2NyaXB0aW9uLnNlYXJjaChcImNhbmNlbCB3ZWJpbmFyIGJlY2F1c2UgaXQgaXMgY3VycmVudGx5IGluIHNlc3Npb25cIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gY2FuY2VsIHZJTFQgc2Vzc2lvbiBiZWNhdXNlIGl0IGlzIGN1cnJlbnRseSBpbiBzZXNzaW9uLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uc3RhdHVzID0gXCJPTkdPSU5HXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LmRhdGEuZGVzY3JpcHRpb24uc2VhcmNoKFwiV2ViaW5hciB3aXRoIHNwZWNpZmllZCBrZXkgZG9lcyBub3QgZXhpc3RcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIGNhbmNlbCB2SUxUIHNlc3Npb24uIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxNZWV0aW5nKCkge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNhbmNlbE1lZXRpbmcodGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlVXNlcnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VVc2Vyc1dpdGhvdXRDb21wbGV0ZWRTdGF0dXMgPSBbXTtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dTdGFydFdpbmRvdygpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh4LmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5kYXRhLnNlYXJjaChcIlNvcnJ5LCB5b3UgY2Fubm90IGRlbGV0ZSB0aGlzIG1lZXRpbmcgc2luY2UgaXQncyBpbiBwcm9ncmVzcy5cIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gY2FuY2VsIHZJTFQgc2Vzc2lvbiBiZWNhdXNlIGl0IGlzIGN1cnJlbnRseSBpbiBzZXNzaW9uLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uc3RhdHVzID0gXCJPTkdPSU5HXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LmRhdGEuc2VhcmNoKFwiTWVldGluZyBkb2VzIG5vdCBleGlzdDpcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIGNhbmNlbCB2SUxUIHNlc3Npb24uIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0LlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxUZWFtc0V2ZW50KCkge1xyXG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmNhbmNlbFRlYW1zRXZlbnQodGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uc2VjdGlvbklkLCB0aGlzLmN1cnJlbnRWSUxUU2Vzc2lvbi5pZClcclxuICAgICAgICAgICAgLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVVzZXJzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVVzZXJzV2l0aG91dENvbXBsZXRlZFN0YXR1cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U3RhcnRXaW5kb3coKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLmRhdGEgJiYgZXJyb3IuZGF0YS5tZXNzYWdlRm9yVXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKGVycm9yLmRhdGEubWVzc2FnZUZvclVzZXIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byBjYW5jZWwgdklMVCBzZXNzaW9uLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyIG9yIGNvbnRhY3Qgc3VwcG9ydC5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93U3RhcnRXaW5kb3coKSB7XHJcbiAgICAgICAgdGhpcy52aWx0U2Vzc2lvbnNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd01hbmFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRBdHRlbmRlZXNDb3VudCgpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUF0dGVuZGVlc0NvdW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hvd1Jvc3RlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd01hbmFnZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY291cnNlVXNlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvdXJzZVVzZXJzV2l0aG91dENvbXBsZXRlZFN0YXR1cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0RhdGFWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZU9mZnNldCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5uZXdTZXNzaW9uLnN0YXJ0VGltZSB8fCAhdGhpcy5uZXdTZXNzaW9uLmVuZFRpbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RhcnRfdGltZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLm5ld1Nlc3Npb24uc3RhcnRUaW1lLCBcImhoOm1tIGFcIikgLSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcclxuICAgICAgICBzdGFydF90aW1lID0gc3RhcnRfdGltZSAtIE1hdGguZmxvb3IoKHN0YXJ0X3RpbWUgLyA4NjQwMDAwMCkpICogODY0MDAwMDA7XHJcbiAgICAgICAgbGV0IG9uZTogYm9vbGVhbiA9IChuZXcgRGF0ZSgpLmdldFRpbWUoKSArIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwIC0gdGhpcy50aW1lT2Zmc2V0KSA8IChNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5uZXdTZXNzaW9uLmRhdGUpICsgc3RhcnRfdGltZSk7XHJcbiAgICAgICAgbGV0IGVuZF90aW1lID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMubmV3U2Vzc2lvbi5lbmRUaW1lLCBcImhoOm1tIGFcIikgLSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcclxuICAgICAgICBlbmRfdGltZSA9IGVuZF90aW1lIC0gTWF0aC5mbG9vcigoZW5kX3RpbWUgLyA4NjQwMDAwMCkpICogODY0MDAwMDA7XHJcbiAgICAgICAgbGV0IHR3bzogYm9vbGVhbiA9IChuZXcgRGF0ZSgpLmdldFRpbWUoKSArIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwIC0gdGhpcy50aW1lT2Zmc2V0KSA8IChNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5uZXdTZXNzaW9uLmRhdGUpICsgZW5kX3RpbWUpO1xyXG4gICAgICAgIGxldCB0cmVlOiBib29sZWFuID0gc3RhcnRfdGltZSA8IGVuZF90aW1lO1xyXG4gICAgICAgIGxldCBmb3VyOiBib29sZWFuID0gISF0aGlzLm5ld1Nlc3Npb24uZW5kVGltZTtcclxuXHJcbiAgICAgICAgbGV0IGZpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLm5ld1Nlc3Npb24ubWVldGluZ1NldHRpbmdzICE9IG51bGwgJiYgdGhpcy5uZXdTZXNzaW9uLm1lZXRpbmdTZXR0aW5ncy5tZWV0aW5nUGFzc3dvcmQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmaXZlID1cclxuICAgICAgICAgICAgICAgICF0aGlzLm5ld1Nlc3Npb24ubWVldGluZ1NldHRpbmdzLm1lZXRpbmdQYXNzd29yZCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdTZXNzaW9uLm1lZXRpbmdTZXR0aW5ncy5tZWV0aW5nUGFzc3dvcmQgJiYgdGhpcy5uZXdTZXNzaW9uLm1lZXRpbmdTZXR0aW5ncy5tZWV0aW5nUGFzc2NvZGUgJiYgdGhpcy5uZXdTZXNzaW9uLm1lZXRpbmdTZXR0aW5ncy5tZWV0aW5nUGFzc2NvZGUubGVuZ3RoID4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzaXg6IGJvb2xlYW4gPSB0aGlzLm5ld1Nlc3Npb24uc2VjdGlvbklkICE9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIG9uZSAmJiB0d28gJiYgdHJlZSAmJiBmb3VyICYmIGZpdmUgJiYgc2l4O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsY3VsYXRlT2Zmc2V0KCkge1xyXG4gICAgICAgIHRoaXMudGltZVpvbmUuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHQubmFtZSA9PSB0aGlzLm5ld1Nlc3Npb24udGltZXpvbmUudG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aW1lT2Zmc2V0ID0gQ291cnNlV2ViaW5hckNvbnRyb2xsZXIuZ2V0VGltZVpvbmVPZmZzZXQodC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBYmJyaXZpYXRpb24odGltZVpvbmU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGFiYnJldmlhdGlvbjtcclxuICAgICAgICB0aGlzLnRpbWVab25lLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0Lm5hbWUgPT0gdGltZVpvbmUpIHtcclxuICAgICAgICAgICAgICAgIGFiYnJldmlhdGlvbiA9IHQuYWJicmV2aWF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFiYnJldmlhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGF0ZVRvVGltZVpvbmVEYXRlKHRpbWVab25lOiBhbnksIGRhdGU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IG9mZnNldDtcclxuICAgICAgICB0aGlzLnRpbWVab25lLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0Lm5hbWUgPT0gdGltZVpvbmUpIHtcclxuICAgICAgICAgICAgICAgIG9mZnNldCA9IENvdXJzZVdlYmluYXJDb250cm9sbGVyLmdldFRpbWVab25lT2Zmc2V0KHQudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIChkYXRlICsgbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDAgLSBvZmZzZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FibGVUb0VkaXQod2ViaW5hckJVOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlci5hbGxCdXNpbmVzc1VuaXRzIHx8XHJcbiAgICAgICAgICAgICghIXRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0cyAmJiB0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHMuc29tZShidSA9PiBidSA9PT0gd2ViaW5hckJVKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUaW1lWm9uZU9mZnNldCh0aW1lWm9uZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBsZXQgbG9jYWxUaW1lOiBudW1iZXIgPSBNYXRoLmZsb29yKChub3cuZ2V0VGltZSgpIC8gMTAwMCkpICogMTAwMDtcclxuICAgICAgICBsZXQgdGltZVpvbmVUaW1lOiBudW1iZXIgPSBuZXcgRGF0ZShub3cudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7dGltZVpvbmU6IHRpbWVab25lfSkpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gbm93LmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCArIChsb2NhbFRpbWUgLSB0aW1lWm9uZVRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWNlaXZlQXR0ZW5kZWVGcm9tVGVhbXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFZpbHRUZWFtc1Nlc3Npb25QYXJ0aWNpcGFudHModGhpcy5jb3Vyc2VJZCwgdGhpcy5jdXJyZW50VklMVFNlc3Npb24uaWQpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IG5vdGlmaWVyLnN1Y2Nlc3MoXCJUZWFtcyBwYXJ0aWNpcGFudHMgd2FzIHVwZGF0ZWRcIikpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byB1cGRhdGUgdklMVCBzZXNzaW9uLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyIG9yIGNvbnRhY3Qgc3VwcG9ydC5cIikpXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93RXJyb3JOb3RpZmljYXRpb24oZXJyb3JDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwidmlsdC53YXMuY2FuY2VsbGVkXCI6XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoZSB2SUxUIHNlc3Npb24gaGFzIGJlZW4gY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2aWx0LnVuYWJsZS50by51bnJlZ2lzdGVyLnBhcnRpY2lwYW50XCI6XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byB1bnJlZ2lzdGVyIHBhcnRpY2lwYW50KHMpLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyIG9yIGNvbnRhY3Qgc3VwcG9ydC5cIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKGVycm9yQ29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWNvZGVTdGF0dXModGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRpdGxlO1xyXG4gICAgICAgIHN3aXRjaCAodGl0bGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcInNjaGVkdWxlZFwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcInNjaGVkdWxlZFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcImZpbmlzaGVkXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiZmluaXNoZWRcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJjYW5jZWxsZWRcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJjYW5jZWxsZWRcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcblxyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuXHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuL21vZGVscy9JQ291cnNlXCI7XHJcblxyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVzaXplVmlld1NlcnZpY2V9IGZyb20gXCIuLi91dGlscy9SZXNpemVWaWV3U2VydmljZVwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge1BlcnNvbmFsU2VydmljZX0gZnJvbSBcIi4uL3BlcnNvbmFsL1BlcnNvbmFsU2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoUmVkaXJlY3RcIjtcclxuaW1wb3J0IHtDb21tb25GaWx0ZXJTZXJ2aWNlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vbkZpbHRlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb21tb25Ib21lU2VydmljZX0gZnJvbSBcIi4uL2NvbW1vbi9Db21tb25Ib21lU2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZXNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5Db3Vyc2VzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgU1VCSkVDVF9NT0RVTEU6IHN0cmluZyA9ICdzdWJqZWN0JztcclxuICAgIHByaXZhdGUgQ09NUExFWElUWV9MRVZFTF9NT0RVTEU6IHN0cmluZyA9ICdjb21wbGV4aXR5TGV2ZWwnO1xyXG4gICAgcHJpdmF0ZSBMQU5HVUFHRV9NT0RVTEU6IHN0cmluZyA9ICdsYW5ndWFnZSc7XHJcbiAgICBwcml2YXRlIFNPVVJDRV9NT0RVTEU6IHN0cmluZyA9ICdzb3VyY2UnO1xyXG4gICAgcHJpdmF0ZSBTVFVERU5UX01PRFVMRTogc3RyaW5nID0gJ3N0dWRlbnQnO1xyXG4gICAgcHJpdmF0ZSBERUZBVUxUX1RPUF9NRU5VX0lURU06IHN0cmluZyA9ICdjb3Vyc2UnO1xyXG5cclxuICAgIHB1YmxpYyBwdXJjaGFzZWRPcmRlcklkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtSW5Nb2R1bGU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gICAgcHVibGljIG1lbnVLZXk6IGFueTtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIHJvd1Nob3c6IE1hcDxudW1iZXIsIGJvb2xlYW4+ID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgY291cnNlc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQ291cnNlPjtcclxuICAgIHB1YmxpYyByZXNpemVWaWV3U2VydmljZTogUmVzaXplVmlld1NlcnZpY2U7XHJcblxyXG4gICAgcHVibGljIG5vdFN0YXJ0ZWRTdGF0dXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGluUHJvZ3Jlc3NTdGF0dXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGNvbXBsZXRlZFN0YXR1czogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIGNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyB3aW5kb3c6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgc3RvcmFnZUZpbHRlclZhbHVlczogYW55O1xyXG5cclxuICAgIHB1YmxpYyB0b3BTdGF0dXMgPSAnQUxMJztcclxuXHJcbiAgICBwdWJsaWMgc2hvd0V4cGlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjb3Vyc2VzVXJsOiBzdHJpbmcgPSBcIi9hcGkvY291cnNlcy9zZWFyY2hcIjtcclxuXHJcbiAgICBwdWJsaWMgZHVtbXlBcnJheSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcnNvbmFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIENvbW1vbkhvbWVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uRmlsdGVyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY29tbW9uSG9tZVNlcnZpY2U6IENvbW1vbkhvbWVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMucHVyY2hhc2VkT3JkZXJJZCA9IHBhcnNlSW50KCRsb2NhdGlvbi5zZWFyY2goKVtDb3Vyc2VzUm91dGVyLlBVUkNIQVNFRF9PUkRFUl0pIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5Nb2R1bGUuc2V0KHRoaXMuU1VCSkVDVF9NT0RVTEUsIDApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5Nb2R1bGUuc2V0KHRoaXMuQ09NUExFWElUWV9MRVZFTF9NT0RVTEUsIDApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5Nb2R1bGUuc2V0KHRoaXMuTEFOR1VBR0VfTU9EVUxFLCAwKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluTW9kdWxlLnNldCh0aGlzLlNPVVJDRV9NT0RVTEUsIDApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5Nb2R1bGUuc2V0KHRoaXMuU1RVREVOVF9NT0RVTEUsIDEpO1xyXG5cclxuICAgICAgICB0aGlzLm1lbnVLZXkgPSB7XHJcbiAgICAgICAgICAgIHRvcE1lbnU6IHRoaXMuREVGQVVMVF9UT1BfTUVOVV9JVEVNXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuRURVQ0FUSU9OX0NPVVJTRVNfTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiQ291cnNlc1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoJGxvY2F0aW9uLnNlYXJjaCgpW0NvdXJzZXNSb3V0ZXIuTE9HT05fUkVRVUlSRURdKSB7XHJcbiAgICAgICAgICAgICAgICBhdXRoUmVkaXJlY3QucmVkaXJlY3RUb0xvZ09uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53aW5kb3cgPSBhbmd1bGFyLmVsZW1lbnQodGhpcy4kd2luZG93KTtcclxuICAgICAgICB0aGlzLmluaXREdW1teUFycmF5KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIoe1xyXG4gICAgICAgICAgICBzdGFydExvYWRpbmc6ICgpID0+IHtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW5kTG9hZGluZzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQb3B1cENsYXNzZXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTdG9yYWdlRmlsdGVycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0RmlsdGVyVmFsdWVzKENvdXJzZXNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlTdG9yYWdlRmlsdGVyKHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyxcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRTZWFyY2hJbnB1dChDb3Vyc2VzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICBpZih0aGlzLnNlYXJjaElucHV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5vcGVuU2VhcmNoSW5wdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHRvcFN0YXR1cyA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRUb3BTdGF0dXMoQ291cnNlc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgaWYodG9wU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9wU3RhdHVzID0gdG9wU3RhdHVzO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5VG9wU3RhdHVzKHRvcFN0YXR1cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVRvcFN0YXR1cyhzdGF0dXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlVG9wU3RhdHVzKENvdXJzZXNDb250cm9sbGVyLk5BTUUsIHN0YXR1cyk7XHJcbiAgICAgICAgdGhpcy50b3BTdGF0dXMgPSBzdGF0dXM7XHJcbiAgICAgICAgdGhpcy5hcHBseVRvcFN0YXR1cyhzdGF0dXMpO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGx5VG9wU3RhdHVzKHN0YXR1czogc3RyaW5nKSB7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSAnQUxMJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlU3RhdHVzID0gXCJOT1RfU1RBUlRFRCxJTl9QUk9HUkVTUyxDT01QTEVURURcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90U3RhcnRlZFN0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluUHJvZ3Jlc3NTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWRTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ05PVF9TVEFSVEVEJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlU3RhdHVzID0gXCJOT1RfU1RBUlRFRFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RTdGFydGVkU3RhdHVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5Qcm9ncmVzc1N0YXR1cyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZFN0YXR1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0lOX1BST0dSRVNTJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlU3RhdHVzID0gXCJJTl9QUk9HUkVTU1wiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RTdGFydGVkU3RhdHVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluUHJvZ3Jlc3NTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWRTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdDT01QTEVURUQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VTdGF0dXMgPSBcIkNPTVBMRVRFRFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RTdGFydGVkU3RhdHVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluUHJvZ3Jlc3NTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVkU3RhdHVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KHBhcmFtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKSk7XHJcbiAgICAgICAgaWYgKHBhcmFtID09IFwiZGVzdHJveVwiKSB7XHJcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0gPT0gXCJcIikge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW0uaGFzQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0U2VhcmNoKG1vZHVsZTogc3RyaW5nLCBpdGVtOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1Jbk1vZHVsZS5nZXQobW9kdWxlKSA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5Nb2R1bGUuc2V0KG1vZHVsZSwgMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1Jbk1vZHVsZS5zZXQobW9kdWxlLCBpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hDb3Vyc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWFyY2hJdGVtQWN0aXZlKG1vZHVsZTogc3RyaW5nLCBzZWFyY2hJdGVtOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1Jbk1vZHVsZS5nZXQobW9kdWxlKSA9PSBzZWFyY2hJdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlYXJjaEl0ZW1IaWRlKG1vZHVsZTogc3RyaW5nLCBzZWFyY2hJdGVtOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISEodGhpcy5zZWxlY3RlZEl0ZW1Jbk1vZHVsZS5nZXQobW9kdWxlKSAhPSAwICYmIHRoaXMuc2VsZWN0ZWRJdGVtSW5Nb2R1bGUuZ2V0KG1vZHVsZSkgIT0gc2VhcmNoSXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVG9wTWVudUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LnRvcE1lbnUgPT0gdG9wTWVudUtleTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RldGFpbHMoaW5kZXg6IG51bWJlciwga2V5Q29kZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGtleUNvZGUgPT0gMTMgfHwgIWtleUNvZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dTaG93LnNldChpbmRleCwgIXRoaXMucm93U2hvdy5nZXQoaW5kZXgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRDb3Vyc2UoY291cnNlSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybChjb3Vyc2VJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hDb3Vyc2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHB1YmxpYyBhZGRUb0Zhdm9yaXRlcyhjb3Vyc2U6IElDb3Vyc2UpIHtcclxuICAgIC8vICAgICB0aGlzLnJvd1Nob3cuc2V0KGNvdXJzZS5pZCwgIXRoaXMucm93U2hvdy5nZXQoY291cnNlLmlkKSk7XHJcbiAgICAvLyAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UuYWRkVG9GYXZvcml0ZXMoY291cnNlLmlkLCBjb3Vyc2UudmVyc2lvbiwgUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAvLyAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgY291cnNlIGhhcyBiZWVuIGFkZGVkIHRvIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgLy8gICAgICAgICBjb3Vyc2UuZmF2b3JpdGUgPSB0cnVlO1xyXG4gICAgLy8gICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgIC8vICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuYWxyZWFkeS5pbi5mYXZvcml0ZVwiKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgY291cnNlIGlzIGFscmVhZHkgaW4geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuaXMuY2hhbmdlZFwiKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgZGF0YSBoYXMgYmVlbiBtb2RpZmllZCBieSBhbm90aGVyIHVzZXI6IHBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGFuZCB0cnkgYWdhaW5cIik7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vIH1cclxuICAgIC8vXHJcbiAgICAvLyBwdWJsaWMgcmVtb3ZlRnJvbUZhdm9yaXRlcyhjb3Vyc2U6IElDb3Vyc2UpIHtcclxuICAgIC8vICAgICB0aGlzLnJvd1Nob3cuc2V0KGNvdXJzZS5pZCwgIXRoaXMucm93U2hvdy5nZXQoY291cnNlLmlkKSk7XHJcbiAgICAvLyAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UucmVtb3ZlRnJvbUZhdm9yaXRlcyhjb3Vyc2UuaWQsIGNvdXJzZS52ZXJzaW9uLCBSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0UpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgIC8vICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBjb3Vyc2UgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgLy8gICAgICAgICBjb3Vyc2UuZmF2b3JpdGUgPSBmYWxzZTtcclxuICAgIC8vICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0Lm5vdC5pbi5mYXZvcml0ZVwiKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byByZW1vdmUgZnJvbSB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5pcy5jaGFuZ2VkXCIpIHtcclxuICAgIC8vICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGFub3RoZXIgdXNlcjogcGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYW5kIHRyeSBhZ2FpblwiKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkU2VhcmNoKCkge1xyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zZWFyY2hTdHJpbmdcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci52aWV3VHlwZVwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIudmlld1R5cGVcIikpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnN1YmplY3RJZFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnN1YmplY3RJZCA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnN1YmplY3RJZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5jb21wbGV4aXR5TGV2ZWxcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5jb21wbGV4aXR5TGV2ZWwgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5jb21wbGV4aXR5TGV2ZWxcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIubGFuZ3VhZ2VJZFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLmxhbmd1YWdlSWQgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5sYW5ndWFnZUlkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNvdXJjZUlkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc291cmNlSWQgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zb3VyY2VJZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5jb3Vyc2VTdGF0dXNcIikpIHtcclxuICAgICAgICAgICAgY29uc3QgY291cnNlU3RhdHVzU2Vzc2lvbkxpc3QgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5jb3Vyc2VTdGF0dXNcIikuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLmNvdXJzZVN0YXR1cyA9IGNvdXJzZVN0YXR1c1Nlc3Npb25MaXN0O1xyXG4gICAgICAgICAgICB0aGlzLm5vdFN0YXJ0ZWRTdGF0dXMgPSBjb3Vyc2VTdGF0dXNTZXNzaW9uTGlzdC5pbmRleE9mKCdOT1RfU1RBUlRFRCcpID49IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaW5Qcm9ncmVzc1N0YXR1cyA9IGNvdXJzZVN0YXR1c1Nlc3Npb25MaXN0LmluZGV4T2YoJ0lOX1BST0dSRVNTJykgPj0gMDtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWRTdGF0dXMgPSBjb3Vyc2VTdGF0dXNTZXNzaW9uTGlzdC5pbmRleE9mKCdDT01QTEVURUQnKSA+PSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlU3RhdHVzID0gdGhpcy5nZXRDb3Vyc2VTdGF0dXNMaXN0KCk7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLmNvdXJzZVN0YXR1c1wiLCBcIk5PVF9TVEFSVEVELElOX1BST0dSRVNTLENPTVBMRVRFRFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zaG93RXhwaXJlZCA9IHRoaXMuc2hvd0V4cGlyZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVGaWx0ZXIodHlwZTogc3RyaW5nLCByZWZlcmVuY2VPYmplY3Q6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvdW50QWN0aXZlSW5jcmVtZW50ID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnVwZGF0ZUdlbmVyYWxGaWx0ZXIodHlwZSwgcmVmZXJlbmNlT2JqZWN0LCBDb3Vyc2VzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyICs9IGNvdW50QWN0aXZlSW5jcmVtZW50O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICAgICAgdGhpcy5zaG93RXhwaXJlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbGVhckZpbHRlcihDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCB0aGlzLmNvdXJzZXNHcmlkTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hLZXlQcmVzcygpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2F2ZVNlYXJjaElucHV0KENvdXJzZXNDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsb3NlU2VhcmNoSW5wdXQoQ291cnNlc0NvbnRyb2xsZXIuTkFNRSwgd2luZG93KTtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoSW5wdXQgfHwgdGhpcy5zZWFyY2hJbnB1dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RmlsdGVyRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zaG93RmlsdGVyRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyU2VhcmNoKCkge1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnN1YmplY3RJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5jb21wbGV4aXR5TGV2ZWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIubGFuZ3VhZ2VJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zb3VyY2VJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zaG93RXhwaXJlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm5vdFN0YXJ0ZWRTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5Qcm9ncmVzc1N0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZWRTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlU3RhdHVzID0gdGhpcy5nZXRDb3Vyc2VTdGF0dXNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMudXNlclByb2ZpbGUgP1xyXG4gICAgICAgICAgICBOdW1iZXIodGhpcy51c2VyUHJvZmlsZS5wYWdlVmlld01vZGUpIDogMTtcclxuXHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnZpZXdUeXBlXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnN1YmplY3RJZFwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5jb21wbGV4aXR5TGV2ZWxcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0NvdXJzZXNGaWx0ZXIubGFuZ3VhZ2VJZFwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zb3VyY2VJZFwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5jb3Vyc2VTdGF0dXNcIik7XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1c2VyO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy51c2VyUHJvZmlsZSA/XHJcbiAgICAgICAgICAgICAgICBOdW1iZXIodGhpcy51c2VyUHJvZmlsZS5wYWdlVmlld01vZGUpIDogMTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2Uub2xkVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJQYWdlVmlld01vZGUoQm9vbGVhbih2aWV3VHlwZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVXNlclBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZpbHRlckNoYW5nZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5cIiArIGtleSwgdmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLlwiICsga2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldENvdXJzZVN0YXR1c0ZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICBsZXQgc3RhdHVzTGlzdCA9IHRoaXMuZ2V0Q291cnNlU3RhdHVzTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlU3RhdHVzID0gc3RhdHVzTGlzdDtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5jb3Vyc2VTdGF0dXNcIiwgc3RhdHVzTGlzdC5qb2luKFwiLFwiKSk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q291cnNlU3RhdHVzTGlzdCgpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgbGV0IHN0YXR1c0xpc3QgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5ub3RTdGFydGVkU3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHN0YXR1c0xpc3QucHVzaCgnTk9UX1NUQVJURUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaW5Qcm9ncmVzc1N0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBzdGF0dXNMaXN0LnB1c2goJ0lOX1BST0dSRVNTJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBsZXRlZFN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBzdGF0dXNMaXN0LnB1c2goJ0NPTVBMRVRFRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RhdHVzTGlzdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUdyaWQoKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzVXJsID0gdGhpcy5wdXJjaGFzZWRPcmRlcklkICE9IG51bGxcclxuICAgICAgICAgICAgICAgID8gXCIvYXBpL2NvdXJzZXMvc2VhcmNoL3B1cmNoYXNlZD9wdXJjaGFzZWRPcmRlcj1cIiArIHRoaXMucHVyY2hhc2VkT3JkZXJJZFxyXG4gICAgICAgICAgICAgICAgOiBcIi9hcGkvY291cnNlcy9zZWFyY2hcIjtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJQ291cnNlPih0aGlzLiRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKHRoaXMuY291cnNlc1VybCkpKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRTdG9yYWdlRmlsdGVycygpO1xyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRDb3Vyc2VTdGF0dXNGaWx0ZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkU2VhcmNoKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2UgPSBuZXcgUmVzaXplVmlld1NlcnZpY2UodGhpcy52aWV3VHlwZSk7XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRQYWdlID0gdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmN1cnJlbnRQYWdlID49IHRoaXMuY291cnNlc0dyaWRNb2RlbC50b3RhbFBhZ2VDb3VudFxyXG4gICAgICAgICAgICAgICAgPyAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmN1cnJlbnRQYWdlIC0gMVxyXG4gICAgICAgICAgICAgICAgOnRoaXMuY291cnNlc0dyaWRNb2RlbC5jdXJyZW50UGFnZTtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZFBhZ2UoY3VycmVudFBhZ2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkUGFnZShjdXJyZW50UGFnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcIlwiKTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJkZXN0cm95XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VEYXRlc1N0cmluZyhjb3Vyc2U6IElDb3Vyc2UpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBsZXQgY291cnNlRGF0ZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gICAgICAgIGlmIChjb3Vyc2UuZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICBjb3Vyc2VEYXRlcy5zZXQoXCJlbmREYXRlXCIsIG5ldyBEYXRlKGNvdXJzZS5lbmREYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvdXJzZS5lbmREYXRlIHx8IGNvdXJzZS5zdGFydERhdGUgPiBEYXRlLm5vdygpKSB7XHJcbiAgICAgICAgICAgIGNvdXJzZURhdGVzLnNldChcInN0YXJ0RGF0ZVwiLCBuZXcgRGF0ZShjb3Vyc2Uuc3RhcnREYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3Vyc2VEYXRlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UG9wdXBDbGFzc2VzKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjYXJkcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjYXJkIGluZm9ybWF0aW9uX3Rvb2x0aXBcIikpO1xyXG4gICAgICAgIGZvciAobGV0IGNhcmQgb2YgY2FyZHMpIHtcclxuICAgICAgICAgICAgbGV0IHJlYzogQ2xpZW50UmVjdCA9IGNhcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIGxldCBwb3B1cDogRWxlbWVudCA9IGNhcmQucGFyZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicG9wdXBfb25ob3ZlclwiKS5pdGVtKDApO1xyXG4gICAgICAgICAgICBpZiAocmVjLnJpZ2h0ICsgcG9wdXAuY2xpZW50V2lkdGggPj0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIGxlZnRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJpZ2h0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInBvcHVwX29uaG92ZXIgcmlnaHRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImxlZnQtcG9pbnRlclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXREdW1teUFycmF5KCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmR1bW15QXJyYXkucHVzaChpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZVByb2dyZXNzQ2xhc3MoY291cnNlUHJvZ3Jlc3NTdGF0dXM6IHN0cmluZykgOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAoY291cnNlUHJvZ3Jlc3NTdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSBcIkNPTVBMRVRFRFwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzdGF0dXMtY29tcGxldGUnO1xyXG4gICAgICAgICAgICBjYXNlIFwiU1RBUlRFRFwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzdGF0dXMtaW4tcHJvZ3Jlc3MnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzdGF0dXMtbmV3JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNob3J0U3VtbWFyeShvcmlnaW5hbFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RyaW5nICE9IHVuZGVmaW5lZCAmJiBvcmlnaW5hbFN0cmluZy5sZW5ndGggPiAyNTZcclxuICAgICAgICAgICAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHJpbmcoMCwgMjU2KSArICcuLi4nXHJcbiAgICAgICAgICAgIDogb3JpZ2luYWxTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtTZWN1cml0eU1vZHVsZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuaW1wb3J0IHtBdXRoQ29yZU1vZHVsZX0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aENvcmVNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi8uLi91cmxzL1VybHNNb2R1bGVcIjtcclxuaW1wb3J0IHtRdWl6emVzTW9kdWxlfSBmcm9tIFwiLi8uLi9xdWl6emVzL1F1aXp6ZXNNb2R1bGVcIjtcclxuaW1wb3J0IHtCdW5kbGVzTW9kdWxlfSBmcm9tIFwiLi4vYnVuZGxlcy9CdW5kbGVzTW9kdWxlXCI7XHJcbmltcG9ydCB7Tm90aWZpY2F0aW9uTW9kdWxlfSBmcm9tIFwiLi4vbm90aWZpY2F0aW9uVGVtcGxhdGVzL05vdGlmaWNhdGlvbk1vZHVsZVwiO1xyXG5cclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi9Qcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzQ29udHJvbGxlcn0gZnJvbSBcIi4vQ291cnNlc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VEZXRhaWxzQ29udHJvbGxlcn0gZnJvbSBcIi4vQ291cnNlRGV0YWlsc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VQcm9ncmVzc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0NvdXJzZVByb2dyZXNzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZUluZm9Db250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VJbmZvQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZURpc2N1c3Npb25Db250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VEaXNjdXNzaW9uQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZUNyZWF0ZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VDcmVhdGVFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZVN0cnVjdHVyZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VTdHJ1Y3R1cmVFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZUJ1bmRsZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VCdW5kbGVFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZVBhcnRpY2lwYXRpb25Gb3JtRWRpdENvbnRyb2xsZXJ9IGZyb20gXCIuL0NvdXJzZVBhcnRpY2lwYXRpb25Gb3JtRWRpdENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VMYW5kaW5nUGFnZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VMYW5kaW5nUGFnZUVkaXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7Q291cnNlRXhwb3J0SW1wb3J0RWRpdENvbnRyb2xsZXJ9IGZyb20gXCIuL0NvdXJzZUV4cG9ydEltcG9ydEVkaXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7UXVpekRldGFpbHNDb250cm9sbGVyfSBmcm9tIFwiLi9RdWl6RGV0YWlsc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VQZXJtaXNzaW9uc0RlbGVnYXRpb25Db250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VQZXJtaXNzaW9uc0RlbGVnYXRpb25Db250cm9sbGVyXCI7XHJcbmltcG9ydCB7U3RhdGlzdGljc01vZHVsZX0gZnJvbSBcIi4uL3N0YXRpc3RpY3MvU3RhdGlzdGljc01vZHVsZVwiO1xyXG5pbXBvcnQge0NlcnRpZmljYXRlc0NyZWF0ZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi4vY2VydGlmaWNhdGVzL0NlcnRpZmljYXRlc0NyZWF0ZUVkaXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVzQ29udHJvbGxlcn0gZnJvbSBcIi4uL2NlcnRpZmljYXRlcy9DZXJ0aWZpY2F0ZXNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVTZXJ2aWNlfSBmcm9tIFwiLi4vY2VydGlmaWNhdGVzL0NlcnRpZmljYXRlU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZVN1cnZleVJlc3VsdHNDb250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VTdXJ2ZXlSZXN1bHRzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZVdlYmluYXJDb250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VXZWJpbmFyQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZVJlbGF0ZWRQcm9kdWN0c0VkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VSZWxhdGVkUHJvZHVjdHNFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZUlMVENvbnRyb2xsZXJ9IGZyb20gXCIuL0NvdXJzZUlMVENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VJTFRTZXJ2aWNlfSBmcm9tIFwiLi9Db3Vyc2VJTFRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RW5yb2xsbWVudENyZWF0ZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9FbnJvbGxtZW50Q3JlYXRlRWRpdENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtFbnJvbGxtZW50RGV0YWlsc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0Vucm9sbG1lbnREZXRhaWxzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZU5vdGlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyfSBmcm9tIFwiLi9Db3Vyc2VOb3RpZmljYXRpb25EZXRhaWxzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXJzZU5vdGlmaWNhdGlvbkRldGFpbHNFZGl0Q29udHJvbGxlcn0gZnJvbSBcIi4vQ291cnNlTm90aWZpY2F0aW9uRGV0YWlsc0VkaXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7VXNlck5vdGVzU2VydmljZX0gZnJvbSBcIi4vVXNlck5vdGVzU2VydmljZVwiO1xyXG5pbXBvcnQge1NsaWRlU2VydmljZX0gZnJvbSBcIi4uL3NsaWRlcy9TbGlkZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtTbGlkZXNDb250cm9sbGVyfSBmcm9tIFwiLi4vc2xpZGVzL1NsaWRlc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtTbGlkZXNDcmVhdGVFZGl0Q29udHJvbGxlcn0gZnJvbSBcIi4uL3NsaWRlcy9TbGlkZXNDcmVhdGVFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge1NsaWRlc0J1bmRsZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi4vc2xpZGVzL1NsaWRlc0J1bmRsZUVkaXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7Q291cnNlR2FtaWZpY2F0aW9uRGV0YWlsc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0NvdXJzZUdhbWlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7R2FtaWZpY2F0aW9uTW9kdWxlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL0dhbWlmaWNhdGlvbk1vZHVsZVwiO1xyXG5pbXBvcnQge0dhbWlmaWNhdGlvblNlcnZpY2V9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vR2FtaWZpY2F0aW9uU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IHZhciBDb3Vyc2VzTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiY291cnNlc1wiLCBbXHJcbiAgICAgICAgU2VjdXJpdHlNb2R1bGUubmFtZSxcclxuICAgICAgICBBdXRoQ29yZU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIFVybHNNb2R1bGUubmFtZSxcclxuICAgICAgICBRdWl6emVzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgQnVuZGxlc01vZHVsZS5uYW1lLFxyXG4gICAgICAgIFN0YXRpc3RpY3NNb2R1bGUubmFtZSxcclxuICAgICAgICBOb3RpZmljYXRpb25Nb2R1bGUubmFtZSxcclxuICAgICAgICBHYW1pZmljYXRpb25Nb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKENvdXJzZVNlcnZpY2UuTkFNRSwgQ291cnNlU2VydmljZSlcclxuICAgIC5zZXJ2aWNlKFByb2dyZXNzU2VydmljZS5OQU1FLCBQcm9ncmVzc1NlcnZpY2UpXHJcbiAgICAuc2VydmljZShDZXJ0aWZpY2F0ZVNlcnZpY2UuTkFNRSwgQ2VydGlmaWNhdGVTZXJ2aWNlKVxyXG4gICAgLnNlcnZpY2UoQ291cnNlSUxUU2VydmljZS5OQU1FLCBDb3Vyc2VJTFRTZXJ2aWNlKVxyXG4gICAgLnNlcnZpY2UoVXNlck5vdGVzU2VydmljZS5OQU1FLCBVc2VyTm90ZXNTZXJ2aWNlKVxyXG4gICAgLnNlcnZpY2UoU2xpZGVTZXJ2aWNlLk5BTUUsIFNsaWRlU2VydmljZSlcclxuICAgIC5zZXJ2aWNlKEdhbWlmaWNhdGlvblNlcnZpY2UuTkFNRSwgR2FtaWZpY2F0aW9uU2VydmljZSlcclxuICAgIC5jb250cm9sbGVyKENvdXJzZXNDb250cm9sbGVyLk5BTUUsIENvdXJzZXNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIuTkFNRSwgQ291cnNlRGV0YWlsc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihDb3Vyc2VQcm9ncmVzc0NvbnRyb2xsZXIuTkFNRSwgQ291cnNlUHJvZ3Jlc3NDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ291cnNlV2ViaW5hckNvbnRyb2xsZXIuTkFNRSwgQ291cnNlV2ViaW5hckNvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihDb3Vyc2VJbmZvQ29udHJvbGxlci5OQU1FLCBDb3Vyc2VJbmZvQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKENvdXJzZURpc2N1c3Npb25Db250cm9sbGVyLk5BTUUsIENvdXJzZURpc2N1c3Npb25Db250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ291cnNlQ3JlYXRlRWRpdENvbnRyb2xsZXIuTkFNRSwgQ291cnNlQ3JlYXRlRWRpdENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihDb3Vyc2VTdHJ1Y3R1cmVFZGl0Q29udHJvbGxlci5OQU1FLCBDb3Vyc2VTdHJ1Y3R1cmVFZGl0Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKENvdXJzZUJ1bmRsZUVkaXRDb250cm9sbGVyLk5BTUUsIENvdXJzZUJ1bmRsZUVkaXRDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ291cnNlUGFydGljaXBhdGlvbkZvcm1FZGl0Q29udHJvbGxlci5OQU1FLCBDb3Vyc2VQYXJ0aWNpcGF0aW9uRm9ybUVkaXRDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ291cnNlTGFuZGluZ1BhZ2VFZGl0Q29udHJvbGxlci5OQU1FLCBDb3Vyc2VMYW5kaW5nUGFnZUVkaXRDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ291cnNlRXhwb3J0SW1wb3J0RWRpdENvbnRyb2xsZXIuTkFNRSwgQ291cnNlRXhwb3J0SW1wb3J0RWRpdENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihRdWl6RGV0YWlsc0NvbnRyb2xsZXIuTkFNRSwgUXVpekRldGFpbHNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ2VydGlmaWNhdGVzQ29udHJvbGxlci5OQU1FLCBDZXJ0aWZpY2F0ZXNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ2VydGlmaWNhdGVzQ3JlYXRlRWRpdENvbnRyb2xsZXIuTkFNRSwgQ2VydGlmaWNhdGVzQ3JlYXRlRWRpdENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihDb3Vyc2VQZXJtaXNzaW9uc0RlbGVnYXRpb25Db250cm9sbGVyLk5BTUUsIENvdXJzZVBlcm1pc3Npb25zRGVsZWdhdGlvbkNvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihDb3Vyc2VTdXJ2ZXlSZXN1bHRzQ29udHJvbGxlci5OQU1FLCBDb3Vyc2VTdXJ2ZXlSZXN1bHRzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKENvdXJzZVJlbGF0ZWRQcm9kdWN0c0VkaXRDb250cm9sbGVyLk5BTUUsIENvdXJzZVJlbGF0ZWRQcm9kdWN0c0VkaXRDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ291cnNlSUxUQ29udHJvbGxlci5OQU1FLCBDb3Vyc2VJTFRDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ291cnNlUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXIuTkFNRSwgQ291cnNlUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihFbnJvbGxtZW50Q3JlYXRlRWRpdENvbnRyb2xsZXIuTkFNRSwgRW5yb2xsbWVudENyZWF0ZUVkaXRDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoRW5yb2xsbWVudERldGFpbHNDb250cm9sbGVyLk5BTUUsIEVucm9sbG1lbnREZXRhaWxzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKENvdXJzZU5vdGlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyLk5BTUUsIENvdXJzZU5vdGlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ291cnNlTm90aWZpY2F0aW9uRGV0YWlsc0VkaXRDb250cm9sbGVyLk5BTUUsIENvdXJzZU5vdGlmaWNhdGlvbkRldGFpbHNFZGl0Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKENvdXJzZUdhbWlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyLk5BTUUsIENvdXJzZUdhbWlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoU2xpZGVzQ29udHJvbGxlci5OQU1FLCBTbGlkZXNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoU2xpZGVzQ3JlYXRlRWRpdENvbnRyb2xsZXIuTkFNRSwgU2xpZGVzQ3JlYXRlRWRpdENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihTbGlkZXNCdW5kbGVFZGl0Q29udHJvbGxlci5OQU1FLCBTbGlkZXNCdW5kbGVFZGl0Q29udHJvbGxlcik7IiwiaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUVucm9sbG1lbnRDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9tb2RlbHMvSUVucm9sbG1lbnRDb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIi4uL3V0aWxzL01vbWVudFwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVucm9sbG1lbnRDb25maWd1cmF0aW9uRXh0ZW5kZWQgZXh0ZW5kcyBJRW5yb2xsbWVudENvbmZpZ3VyYXRpb257XHJcbiAgICBzdGFydERhdGVUZXh0Pzogc3RyaW5nO1xyXG4gICAgZW5kRGF0ZVRleHQ/OiBzdHJpbmc7XHJcbiAgICBpc1N0YXJ0RGF0ZUVuYWJsZT86IGJvb2xlYW47XHJcbiAgICBpc0VuZERhdGVFbmFibGU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRW5yb2xsbWVudENyZWF0ZUVkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY291cnNlcy5FbnJvbGxtZW50Q3JlYXRlRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwcml2YXRlIGlzQXBwcm92YWxSZXF1aXJlZERlZmF1bHRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc0F1dG9FbnJvbGxGcm9tV2FpdGxpc3REZWZhdWx0VmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgICBwdWJsaWMgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2U6IElDb3Vyc2U7XHJcbiAgICBwdWJsaWMgZW5yb2xsQ29uZmlnOiBJRW5yb2xsbWVudENvbmZpZ3VyYXRpb25FeHRlbmRlZDtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcjogSVVzZXJJbmZvO1xyXG5cclxuICAgIHB1YmxpYyBpc1NhdmVQcm9jZWVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZUlkID0gcm91dGVQYXJhbXNbQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBjb3Vyc2VJZFN0ciA9IFN0cmluZyh0aGlzLmNvdXJzZUlkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kQ291cnNlUGVybWlzc2lvbnNJZighIXRoaXMuY291cnNlSWQsIGNvdXJzZUlkU3RyLCBjb3Vyc2VQZXJtaXNzaW9ucyA9PiBjb3Vyc2VQZXJtaXNzaW9ucy5lZGl0KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAgICAgLnRoZW4odSA9PiB0aGlzLmN1cnJlbnRVc2VyID0gdSk7XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXQodGhpcy5jb3Vyc2VJZCkudGhlbihjb3Vyc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZSA9IGNvdXJzZTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLnNldENvdXJzZVBhZ2VIZWFkZXJCcmVhZGNydW1icyh0aGlzLmNvdXJzZUlkLCB0aGlzLmNvdXJzZSwgdGhpcy5jb3Vyc2VzUm91dGVyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY291cnNlU2VydmljZS5nZXRFbnJvbGxtZW50Q29uZmlndXJhdGlvbkZvckNvdXJzZSh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihjb25maWcgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhY29uZmlnICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsQ29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsQ29uZmlnLmlzU3RhcnREYXRlRW5hYmxlID0gISFjb25maWcuc3RhcnREYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsQ29uZmlnLmlzRW5kRGF0ZUVuYWJsZSA9ICEhY29uZmlnLmVuZERhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxDb25maWcuc3RhcnREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShjb25maWcuc3RhcnREYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVucm9sbENvbmZpZy5lbmREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShjb25maWcuZW5kRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUVucm9sbG1lbnRDb25maWcoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgdGhpcy5lbnJvbGxDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGlzQWxsb3dOZXdFbnJvbGxtZW50czogdHJ1ZSxcclxuICAgICAgICAgICAgaXNBbGxvd1NlbGZFbnJvbGxtZW50czogdHJ1ZSxcclxuICAgICAgICAgICAgaXNBcHByb3ZhbFJlcXVpcmVtZW50OiB0aGlzLmlzQXBwcm92YWxSZXF1aXJlZERlZmF1bHRWYWx1ZSxcclxuICAgICAgICAgICAgaXNTdGFydERhdGVFbmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0VuZERhdGVFbmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0VuYWJsZVdhaXRsaXN0OiB0cnVlLFxyXG4gICAgICAgICAgICBpc0F1dG9FbnJvbGxGcm9tV2FpdGxpc3Q6IHRoaXMuaXNBdXRvRW5yb2xsRnJvbVdhaXRsaXN0RGVmYXVsdFZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblN0YXJ0RGF0ZUNoZWNrYm94Q2hhbmdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZW5yb2xsQ29uZmlnLnN0YXJ0RGF0ZVRleHQgPSB0aGlzLmVucm9sbENvbmZpZy5pc1N0YXJ0RGF0ZUVuYWJsZVxyXG4gICAgICAgICAgICA/IE1vbWVudC5pc1ZhbGlkRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSlcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkVuZERhdGVDaGVja2JveENoYW5nZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVucm9sbENvbmZpZy5lbmREYXRlVGV4dCA9IHRoaXMuZW5yb2xsQ29uZmlnLmlzRW5kRGF0ZUVuYWJsZVxyXG4gICAgICAgICAgICA/IE1vbWVudC5pc1ZhbGlkRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSlcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZVNlbGZFbnJvbGxtZW50cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVucm9sbENvbmZpZy5pc0FwcHJvdmFsUmVxdWlyZW1lbnQgPSB0aGlzLmVucm9sbENvbmZpZy5pc0FsbG93U2VsZkVucm9sbG1lbnRzXHJcbiAgICAgICAgICAgID8gdGhpcy5pc0FwcHJvdmFsUmVxdWlyZWREZWZhdWx0VmFsdWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uQ2hhbmdlV2FpdGxpc3QoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lbnJvbGxDb25maWcuaXNBdXRvRW5yb2xsRnJvbVdhaXRsaXN0ID0gdGhpcy5lbnJvbGxDb25maWcuaXNFbmFibGVXYWl0bGlzdFxyXG4gICAgICAgICAgICA/IHRoaXMuaXNBdXRvRW5yb2xsRnJvbVdhaXRsaXN0RGVmYXVsdFZhbHVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTYXZlUHJvY2VlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lbnJvbGxDb25maWcuc3RhcnREYXRlID0gdGhpcy5lbnJvbGxDb25maWcuaXNTdGFydERhdGVFbmFibGUgJiYgISF0aGlzLmVucm9sbENvbmZpZy5zdGFydERhdGVUZXh0XHJcbiAgICAgICAgICAgID8gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuZW5yb2xsQ29uZmlnLnN0YXJ0RGF0ZVRleHQpXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICB0aGlzLmVucm9sbENvbmZpZy5lbmREYXRlID0gdGhpcy5lbnJvbGxDb25maWcuaXNFbmREYXRlRW5hYmxlICYmICEhdGhpcy5lbnJvbGxDb25maWcuZW5kRGF0ZVRleHRcclxuICAgICAgICAgICAgPyBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5lbnJvbGxDb25maWcuZW5kRGF0ZVRleHQpXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBsZXQgc2F2ZVByb21pc2UgPSAhdGhpcy5lbnJvbGxDb25maWcuaWRcclxuICAgICAgICAgICAgPyB0aGlzLmNvdXJzZVNlcnZpY2UuY3JlYXRlRW5yb2xsbWVudENvbmZpZ3VyYXRpb25Gb3JDb3Vyc2UodGhpcy5jb3Vyc2VJZCwgdGhpcy5lbnJvbGxDb25maWcpXHJcbiAgICAgICAgICAgIDogdGhpcy5jb3Vyc2VTZXJ2aWNlLnVwZGF0ZUVucm9sbG1lbnRDb25maWd1cmF0aW9uRm9yQ291cnNlKHRoaXMuY291cnNlSWQsIHRoaXMuZW5yb2xsQ29uZmlnKTtcclxuICAgICAgICBzYXZlUHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxDb25maWcgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVucm9sbENvbmZpZy5pc1N0YXJ0RGF0ZUVuYWJsZSA9ICEhcmVzdWx0LnN0YXJ0RGF0ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsQ29uZmlnLmlzRW5kRGF0ZUVuYWJsZSA9ICEhcmVzdWx0LmVuZERhdGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVucm9sbENvbmZpZy5zdGFydERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKHJlc3VsdC5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxDb25maWcuZW5kRGF0ZVRleHQgPSBNb21lbnQuaXNWYWxpZERhdGUocmVzdWx0LmVuZERhdGUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2F2ZVByb2NlZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJNb2RpZmljYXRpb25zIG9mIHRoZSBjb3Vyc2UgaGF2ZSBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEYXRlc1ZhbGlkKCkgJiYgdGhpcy5pc01pbk1heFZhbGlkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0RhdGVzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmVucm9sbENvbmZpZy5pc1N0YXJ0RGF0ZUVuYWJsZSB8fCAhdGhpcy5lbnJvbGxDb25maWcuaXNFbmREYXRlRW5hYmxlIHx8XHJcbiAgICAgICAgICAgICghIU1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmVucm9sbENvbmZpZy5zdGFydERhdGVUZXh0KSAmJiAhIU1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmVucm9sbENvbmZpZy5lbmREYXRlVGV4dClcclxuICAgICAgICAgICAgICAgICYmIG1vbWVudChNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5lbnJvbGxDb25maWcuc3RhcnREYXRlVGV4dCkpLnN1YnRyYWN0KDEsICdtcycpXHJcbiAgICAgICAgICAgICAgICAgICAgLmlzQmVmb3JlKE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmVucm9sbENvbmZpZy5lbmREYXRlVGV4dCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTWluVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5yb2xsQ29uZmlnLm1pbkVucm9sbG1lbnQgPT09IG51bGwgfHwgdGhpcy5lbnJvbGxDb25maWcubWluRW5yb2xsbWVudCA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIHx8ICh0aGlzLmVucm9sbENvbmZpZy5taW5FbnJvbGxtZW50ID4gMFxyXG4gICAgICAgICAgICAgICAgJiYgKHRoaXMuZW5yb2xsQ29uZmlnLm1heEVucm9sbG1lbnQgPT09IG51bGwgfHwgdGhpcy5lbnJvbGxDb25maWcubWF4RW5yb2xsbWVudCA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5lbnJvbGxDb25maWcubWluRW5yb2xsbWVudCA8IHRoaXMuZW5yb2xsQ29uZmlnLm1heEVucm9sbG1lbnQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTWF4VmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5yb2xsQ29uZmlnLm1heEVucm9sbG1lbnQgPT09IG51bGwgfHwgdGhpcy5lbnJvbGxDb25maWcubWF4RW5yb2xsbWVudCA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIHx8ICh0aGlzLmVucm9sbENvbmZpZy5tYXhFbnJvbGxtZW50ID4gMFxyXG4gICAgICAgICAgICAgICAgJiYgKHRoaXMuZW5yb2xsQ29uZmlnLm1pbkVucm9sbG1lbnQgPT09IG51bGwgfHwgdGhpcy5lbnJvbGxDb25maWcubWluRW5yb2xsbWVudCA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5lbnJvbGxDb25maWcubWluRW5yb2xsbWVudCA8IHRoaXMuZW5yb2xsQ29uZmlnLm1heEVucm9sbG1lbnQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbG9hZEVucm9sbG1lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTWluTWF4VmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNaW5WYWxpZCgpICYmIHRoaXMuaXNNYXhWYWxpZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNJbml0KHByb3A6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBwcm9wICE9IG51bGwgJiYgcHJvcCAhPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWxldGVFbnJvbGxtZW50Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIkRvIHlvdSB3YW50IHRvIHJlbW92ZSBlbnJvbGxtZW50IGNvbmZpZ3VyYXRpb24/XCIsIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiUmVtb3ZlIGVucm9sbG1lbnQgY29uZmlndXJhdGlvblwiLFxyXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIlllc1wiLFxyXG4gICAgICAgICAgICBjYW5jZWxCdXR0b246IFwiTm9cIlxyXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lbnJvbGxDb25maWcgJiYgdGhpcy5lbnJvbGxDb25maWcuaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5kZWxldGVFbnJvbGxtZW50Q29uZmlndXJhdGlvbkZvckNvdXJzZSh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxDb25maWcgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiRW5yb2xsbWVudCBjb25maWd1cmF0aW9uIHN1Y2Nlc3NmdWxseSByZW1vdmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbnJvbGxDb25maWcgJiYgIXRoaXMuZW5yb2xsQ29uZmlnLmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVucm9sbENvbmZpZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiRW5yb2xsbWVudCBjb25maWd1cmF0aW9uIHN1Y2Nlc3NmdWxseSByZW1vdmVkXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0lFbnJvbGxtZW50Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vbW9kZWxzL0lFbnJvbGxtZW50Q29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJRW5yb2xsbWVudFNlYXR9IGZyb20gXCIuL21vZGVscy9JRW5yb2xsbWVudFNlYXRcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7RW5yb2xsbWVudFNlYXRTdGF0dXN9IGZyb20gXCIuL21vZGVscy9FbnJvbGxtZW50U2VhdFN0YXR1c1wiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1JpY2hUZXh0RWRpdG9yQ29udHJvbGxlcn0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmljaHRleHQvUmljaFRleHRFZGl0b3JEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtQdXJjaGFzZVNlcnZpY2V9IGZyb20gXCIuLi9maW5hbmNlcy9QdXJjaGFzZVNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRW5yb2xsbWVudERldGFpbHNTY29wZSBleHRlbmRzIGFuZ3VsYXIuSVNjb3BlIHtcclxuICAgIHNob3dVc2VyU2VsZWN0b3JGb3JFbnJvbGw/OiBib29sZWFuO1xyXG4gICAgc2hvd0dyb3VwU2VsZWN0b3JGb3JFbnJvbGw/OiBib29sZWFuO1xyXG4gICAgc2hvd1VzZXJTZWxlY3RvckZvcldhaXRsaXN0PzogYm9vbGVhbjtcclxuICAgIHNob3dHcm91cFNlbGVjdG9yRm9yV2FpdGxpc3Q/OiBib29sZWFuO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSUVucm9sbG1lbnRTZWF0RXh0ZW5kZWQgZXh0ZW5kcyBJRW5yb2xsbWVudFNlYXQge1xyXG4gICAgaXNVcGRhdGVQcm9jZWVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVucm9sbG1lbnREZXRhaWxzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvdXJzZXMuRW5yb2xsbWVudERldGFpbHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIFBBR0VfU0laRTogbnVtYmVyID0gNTtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBlbnJvbGxtZW50Q29uZmlnOiBJRW5yb2xsbWVudENvbmZpZ3VyYXRpb247XHJcbiAgICBwdWJsaWMgY291cnNlOiBJQ291cnNlO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIHB1YmxpYyBzdWJqZWN0OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGVucm9sbGVkR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElFbnJvbGxtZW50U2VhdEV4dGVuZGVkPjtcclxuICAgIHB1YmxpYyBlbnJvbGxlZEdyaWRNb2RlbFdpdGhvdXRDb21wbGV0ZWRVc2VyU3RhdHVzOiBJR3JpZE1vZGVsPElFbnJvbGxtZW50U2VhdEV4dGVuZGVkPjtcclxuICAgIHB1YmxpYyBwZW5kaW5nR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElFbnJvbGxtZW50U2VhdEV4dGVuZGVkPjtcclxuICAgIHB1YmxpYyB3YWl0bGlzdGVkR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElFbnJvbGxtZW50U2VhdEV4dGVuZGVkPjtcclxuXHJcbiAgICBwdWJsaWMgdXNlcklkc1RvRW5yb2xsOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgcHVibGljIGdyb3VwSWRzVG9FbnJvbGw6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgcHVibGljIHVzZXJJZHNUb1dhaXRsaXN0OiBudW1iZXJbXSA9IFtdO1xyXG4gICAgcHVibGljIGdyb3VwSWRzVG9XYWl0bGlzdDogbnVtYmVyW10gPSBbXTtcclxuICAgIHB1YmxpYyBpc0Rpc2FibGVBbGxBY3Rpb25CdXR0b25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdG90YWxVc2VkU2VhdHM6IG51bWJlcjtcclxuICAgIHB1YmxpYyBpc0FjdGl2ZUxlYXJuZXJzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgYnRuU2VuZE5vdGlmaWNhdGlvbkNsaWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgdG9vbGJhciA9XHJcbiAgICAgICAgW1tdLFsnYm9sZCcsICdpdGFsaWNzJywgJ3VuZGVybGluZScsICdzdHJpa2VUaHJvdWdoJywgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0ZPTlRfQ09MT1IsIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9CQUNLR1JPVU5EX0ZPTlRfQ09MT1JdLFxyXG4gICAgICAgICAgICBbJ3VsJywgJ29sJywgJ2luZGVudCcsICdvdXRkZW50JywgJ2p1c3RpZnlMZWZ0JywgJ2p1c3RpZnlDZW50ZXInLCAnanVzdGlmeVJpZ2h0JywgJ2p1c3RpZnlGdWxsJ10sXHJcbiAgICAgICAgICAgIFsnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAncCcsICdwcmUnLCAncXVvdGUnXSxbXSxcclxuICAgICAgICAgICAgWydyZWRvJywgJ3VuZG8nLCAnY2xlYXInLCBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfRlVMTFNDUkVFTl9CVVRUT04sICdodG1sJ11dO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUHVyY2hhc2VTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IEVucm9sbG1lbnREZXRhaWxzU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHVyY2hhc2VTZXJ2aWNlOiBQdXJjaGFzZVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZUlkID0gJHJvdXRlUGFyYW1zW0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNXTtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IGF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9ucyhTdHJpbmcodGhpcy5jb3Vyc2VJZCksIGNvdXJzZVBlcm1pc3Npb25zID0+IGNvdXJzZVBlcm1pc3Npb25zLnBlcm1pc3Npb25zRGVsZWdhdGlvbik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZENvdXJzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMubG9hZENvdXJzZUVucm9sbG1lbnRDb25maWcoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKFxyXG4gICAgICAgICAgICBIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXIoJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7dGhpcy5jb3Vyc2VJZH0vZW5yb2xsbWVudFNlYXRzYCkpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmVucm9sbGVkR3JpZE1vZGVsLnBhZ2VTaXplID0gdGhpcy5QQUdFX1NJWkU7XHJcbiAgICAgICAgdGhpcy5lbnJvbGxlZEdyaWRNb2RlbC5maWx0ZXIuc2VhdFN0YXR1cyA9IEVucm9sbG1lbnRTZWF0U3RhdHVzW0Vucm9sbG1lbnRTZWF0U3RhdHVzLkVOUk9MTEVEXTtcclxuICAgICAgICB0aGlzLmVucm9sbGVkR3JpZE1vZGVsV2l0aG91dENvbXBsZXRlZFVzZXJTdGF0dXMgPSBuZXcgR3JpZE1vZGVsKFxyXG4gICAgICAgICAgICBIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXIoJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7dGhpcy5jb3Vyc2VJZH0vZW5yb2xsbWVudFNlYXRzL2NvbXBsZXRlZFVzZXJTdGF0dXNgKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWxXaXRob3V0Q29tcGxldGVkVXNlclN0YXR1cy5wYWdlU2l6ZSA9IHRoaXMuUEFHRV9TSVpFO1xyXG4gICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWxXaXRob3V0Q29tcGxldGVkVXNlclN0YXR1cy5maWx0ZXIuc2VhdFN0YXR1cyA9IEVucm9sbG1lbnRTZWF0U3RhdHVzW0Vucm9sbG1lbnRTZWF0U3RhdHVzLkVOUk9MTEVEXTtcclxuICAgICAgICB0aGlzLndhaXRsaXN0ZWRHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKFxyXG4gICAgICAgICAgICBIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXIoJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoYGFwaS9jb3Vyc2VzLyR7dGhpcy5jb3Vyc2VJZH0vZW5yb2xsbWVudFNlYXRzYCkpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLndhaXRsaXN0ZWRHcmlkTW9kZWwucGFnZVNpemUgPSB0aGlzLlBBR0VfU0laRTtcclxuICAgICAgICB0aGlzLndhaXRsaXN0ZWRHcmlkTW9kZWwuZmlsdGVyLnNlYXRTdGF0dXMgPSBFbnJvbGxtZW50U2VhdFN0YXR1c1tFbnJvbGxtZW50U2VhdFN0YXR1cy5XQUlUTElTVEVEXTtcclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChcclxuICAgICAgICAgICAgSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyKCRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKGBhcGkvY291cnNlcy8ke3RoaXMuY291cnNlSWR9L2Vucm9sbG1lbnRTZWF0c2ApKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nR3JpZE1vZGVsLnBhZ2VTaXplID0gdGhpcy5QQUdFX1NJWkU7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nR3JpZE1vZGVsLmZpbHRlci5zZWF0U3RhdHVzID0gRW5yb2xsbWVudFNlYXRTdGF0dXNbRW5yb2xsbWVudFNlYXRTdGF0dXMuUEVORElOR107XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0U2VhdHNVc2VkQ291bnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZENvdXJzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldCh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2UgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZXRDb3Vyc2VQYWdlSGVhZGVyQnJlYWRjcnVtYnModGhpcy5jb3Vyc2VJZCwgdGhpcy5jb3Vyc2UsIHRoaXMuY291cnNlc1JvdXRlciwgXCJMZWFybmVyc1wiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRDb3Vyc2VFbnJvbGxtZW50Q29uZmlnKCk6IGFuZ3VsYXIuSVByb21pc2U8SUVucm9sbG1lbnRDb25maWd1cmF0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlU2VydmljZS5nZXRFbnJvbGxtZW50Q29uZmlndXJhdGlvbkZvckNvdXJzZSh0aGlzLmNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihjb25maWcgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxtZW50Q29uZmlnID0gY29uZmlnIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5yb2xsbWVudENvbmZpZztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVucm9sbFVzZXJzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHVyY2hhc2VTZXJ2aWNlLmdldFJlZmVyZW5jZWRPYmplY3RQcm9kdWN0c0xpc3QodGhpcy5jb3Vyc2VJZCwgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFXSlcclxuICAgICAgICAgICAgLnRoZW4ocHJvZHVjdHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y3RzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxVc2Vyc0RvKClcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJDdXJyZW50IGNvdXJzZSBoYXMgbGlua2VkIHByb2R1Y3QuIFRoZSB1c2VyIHdpbGwgcGF5IGluIGNhc2Ugb2Ygc2VsZi1lbnJvbGxtZW50Ljxici8+VXNlciB3aWxsIG5vdCBiZSBjaGFyZ2VkIGlmIHlvdSBlbnJvbGwgaGltIChoZXIpIG5vdy4gQ29udGludWU/XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiRW5yb2xsIHVzZXIgZm9yIGZyZWVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJZZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uOiBcIk5vXCJcclxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVucm9sbFVzZXJzRG8oKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5yb2xsVXNlcnNEbygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZUFsbEFjdGlvbkJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5lbnJvbGxVc2Vyc1RvQ291cnNlKHRoaXMuY291cnNlSWQsIHRoaXMudXNlcklkc1RvRW5yb2xsLCB0aGlzLmdyb3VwSWRzVG9FbnJvbGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmFscmVhZHlFbnJvbGxlZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXNlcnNOYW1lcyA9IHJlc3VsdC5hbHJlYWR5RW5yb2xsZWQubWFwKHMgPT4gcy5uYW1lKS5qb2luKFwiLCBcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJUaGUgZm9sbG93aW5nIGxlYXJuZXJzIGFyZSBhbHJlYWR5IGVucm9sbGVkOiBcIiArIHVzZXJzTmFtZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzRW5yb2xsZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxlZEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVucm9sbGVkR3JpZE1vZGVsV2l0aG91dENvbXBsZXRlZFVzZXJTdGF0dXMubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTZWF0c1VzZWRDb3VudCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tb3ZlZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVucm9sbGVkR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWxXaXRob3V0Q29tcGxldGVkVXNlclN0YXR1cy5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndhaXRsaXN0ZWRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5zaG93VXNlclNlbGVjdG9yRm9yRW5yb2xsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJJZHNUb0Vucm9sbC5zcGxpY2UoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5zaG93R3JvdXBTZWxlY3RvckZvckVucm9sbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cElkc1RvRW5yb2xsLnNwbGljZSgwKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5pc0Rpc2FibGVBbGxBY3Rpb25CdXR0b25zID0gZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRVc2Vyc1RvV2FpdGxpc3QoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVBbGxBY3Rpb25CdXR0b25zID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuYWRkVXNlcnNUb0NvdXJzZVdhaXRsaXN0KHRoaXMuY291cnNlSWQsIHRoaXMudXNlcklkc1RvV2FpdGxpc3QsIHRoaXMuZ3JvdXBJZHNUb1dhaXRsaXN0KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5hbHJlYWR5RW5yb2xsZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVzZXJzTmFtZXMgPSByZXN1bHQuYWxyZWFkeUVucm9sbGVkLm1hcChzID0+IHMubmFtZSkuam9pbihcIiwgXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJUaGUgZm9sbG93aW5nIGxlYXJuZXJzIGFyZSBhbHJlYWR5IHdhaXRsaXN0ZWQ6IFwiICsgdXNlcnNOYW1lcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3NFbnJvbGxlZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndhaXRsaXN0ZWRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5zaG93VXNlclNlbGVjdG9yRm9yV2FpdGxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlcklkc1RvV2FpdGxpc3Quc3BsaWNlKDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2NvcGUuc2hvd0dyb3VwU2VsZWN0b3JGb3JXYWl0bGlzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cElkc1RvV2FpdGxpc3Quc3BsaWNlKDApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmlzRGlzYWJsZUFsbEFjdGlvbkJ1dHRvbnMgPSBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVuRW5yb2xsVXNlcihzZWF0OiBJRW5yb2xsbWVudFNlYXRFeHRlbmRlZCk6IHZvaWQge1xyXG4gICAgICAgIHNlYXQuaXNVcGRhdGVQcm9jZWVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZGVsZXRlRW5yb2xsbWVudFNlYXQodGhpcy5jb3Vyc2VJZCwgc2VhdC5pZCwgc2VhdC52ZXJzaW9uKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VhdC5zZWF0U3RhdHVzID09IEVucm9sbG1lbnRTZWF0U3RhdHVzW0Vucm9sbG1lbnRTZWF0U3RhdHVzLkVOUk9MTEVEXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxlZEdyaWRNb2RlbFdpdGhvdXRDb21wbGV0ZWRVc2VyU3RhdHVzLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2VhdHNVc2VkQ291bnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbnJvbGxtZW50Q29uZmlnICYmIHRoaXMuZW5yb2xsbWVudENvbmZpZy5pc0F1dG9FbnJvbGxGcm9tV2FpdGxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53YWl0bGlzdGVkR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VhdC5zZWF0U3RhdHVzID09IEVucm9sbG1lbnRTZWF0U3RhdHVzW0Vucm9sbG1lbnRTZWF0U3RhdHVzLldBSVRMSVNURURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YWl0bGlzdGVkR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWF0LnNlYXRTdGF0dXMgPT0gRW5yb2xsbWVudFNlYXRTdGF0dXNbRW5yb2xsbWVudFNlYXRTdGF0dXMuUEVORElOR10pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHNlYXQuaXNVcGRhdGVQcm9jZWVkID0gZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bkVucm9sbEFsbChzZWF0U3RhdHVzOiBzdHJpbmcsIHVzZXJOYW1lU2VhcmNoU3RyaW5nOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZUFsbEFjdGlvbkJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgIGlmICh1c2VyTmFtZVNlYXJjaFN0cmluZyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHVzZXJOYW1lU2VhcmNoU3RyaW5nID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmRlbGV0ZUVucm9sbG1lbnRTZWF0c0J5U3RhdHVzKHRoaXMuY291cnNlSWQsIHNlYXRTdGF0dXMsIHVzZXJOYW1lU2VhcmNoU3RyaW5nKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VhdFN0YXR1cyA9PSBFbnJvbGxtZW50U2VhdFN0YXR1c1tFbnJvbGxtZW50U2VhdFN0YXR1cy5FTlJPTExFRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVucm9sbGVkR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWxXaXRob3V0Q29tcGxldGVkVXNlclN0YXR1cy5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlYXRzVXNlZENvdW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5yb2xsbWVudENvbmZpZy5pc0F1dG9FbnJvbGxGcm9tV2FpdGxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIkF1dG8gZW5yb2xsIGZyb20gd2FpdGxpc3Qgd2lsbCBub3QgYmUgcGVyZm9ybWVkLiBQbGVhc2UgZW5yb2xsIGxlYXJuZXJzIG1hbnVhbGx5IGlmIG5lZWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlYXRTdGF0dXMgPT0gRW5yb2xsbWVudFNlYXRTdGF0dXNbRW5yb2xsbWVudFNlYXRTdGF0dXMuV0FJVExJU1RFRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndhaXRsaXN0ZWRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlYXRTdGF0dXMgPT0gRW5yb2xsbWVudFNlYXRTdGF0dXNbRW5yb2xsbWVudFNlYXRTdGF0dXMuUEVORElOR10pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMuaXNEaXNhYmxlQWxsQWN0aW9uQnV0dG9ucyA9IGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbW92ZVNlYXRUb0Vucm9sbGVkKHNlYXQ6IElFbnJvbGxtZW50U2VhdEV4dGVuZGVkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wdXJjaGFzZVNlcnZpY2UuZ2V0UmVmZXJlbmNlZE9iamVjdFByb2R1Y3RzTGlzdCh0aGlzLmNvdXJzZUlkLCBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0VdKVxyXG4gICAgICAgICAgICAudGhlbihwcm9kdWN0cyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZHVjdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVTZWF0VG9FbnJvbGxlZERvKHNlYXQpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiQ3VycmVudCBjb3Vyc2UgaGFzIGxpbmtlZCBwcm9kdWN0LiBUaGUgdXNlciB3aWxsIHBheSBpbiBjYXNlIG9mIHNlbGYtZW5yb2xsbWVudC48YnIvPlVzZXIgd2lsbCBub3QgYmUgY2hhcmdlZCBpZiB5b3UgZW5yb2xsIGhpbSAoaGVyKSBub3cuIENvbnRpbnVlP1wiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkVucm9sbCB1c2VyIGZvciBmcmVlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiWWVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVTZWF0VG9FbnJvbGxlZERvKHNlYXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtb3ZlU2VhdFRvRW5yb2xsZWREbyhzZWF0OiBJRW5yb2xsbWVudFNlYXRFeHRlbmRlZCkge1xyXG4gICAgICAgIHNlYXQuaXNVcGRhdGVQcm9jZWVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UubW92ZVNlYXRUb0Vucm9sbGVkKHRoaXMuY291cnNlSWQsIHNlYXQuaWQsIHNlYXQudmVyc2lvbilcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxlZEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWxXaXRob3V0Q29tcGxldGVkVXNlclN0YXR1cy5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FpdGxpc3RlZEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2VhdHNVc2VkQ291bnQoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gc2VhdC5pc1VwZGF0ZVByb2NlZWQgPSBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1vdmVBbGxTZWF0c1RvRW5yb2xsZWQodXNlck5hbWVTZWFyY2hTdHJpbmc6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmKHRoaXMud2FpdGxpc3RlZEdyaWRNb2RlbC5lbnRyaWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnB1cmNoYXNlU2VydmljZS5nZXRSZWZlcmVuY2VkT2JqZWN0UHJvZHVjdHNMaXN0KHRoaXMuY291cnNlSWQsIFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRV0pXHJcbiAgICAgICAgICAgICAgICAudGhlbihwcm9kdWN0cyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y3RzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUFsbFNlYXRzVG9FbnJvbGxlZERvKHVzZXJOYW1lU2VhcmNoU3RyaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiQ3VycmVudCBjb3Vyc2UgaGFzIGxpbmtlZCBwcm9kdWN0LiBUaGUgdXNlciB3aWxsIHBheSBpbiBjYXNlIG9mIHNlbGYtZW5yb2xsbWVudC48YnIvPlVzZXIgd2lsbCBub3QgYmUgY2hhcmdlZCBpZiB5b3UgZW5yb2xsIGhpbSAoaGVyKSBub3cuIENvbnRpbnVlP1wiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJFbnJvbGwgdXNlciBmb3IgZnJlZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJZZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQWxsU2VhdHNUb0Vucm9sbGVkRG8odXNlck5hbWVTZWFyY2hTdHJpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlQWxsU2VhdHNUb0Vucm9sbGVkRG8odXNlck5hbWVTZWFyY2hTdHJpbmc6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlQWxsQWN0aW9uQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHVzZXJOYW1lU2VhcmNoU3RyaW5nID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdXNlck5hbWVTZWFyY2hTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UubW92ZUFsbFNlYXRzVG9FbnJvbGxlZCh0aGlzLmNvdXJzZUlkLCB1c2VyTmFtZVNlYXJjaFN0cmluZylcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxlZEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWxXaXRob3V0Q29tcGxldGVkVXNlclN0YXR1cy5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FpdGxpc3RlZEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2VhdHNVc2VkQ291bnQoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5pc0Rpc2FibGVBbGxBY3Rpb25CdXR0b25zID0gZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlU2VhdFRvV2FpdGxpc3Qoc2VhdDogSUVucm9sbG1lbnRTZWF0RXh0ZW5kZWQpOiB2b2lkIHtcclxuICAgICAgICBzZWF0LmlzVXBkYXRlUHJvY2VlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLm1vdmVTZWF0VG9XYWl0bGlzdCh0aGlzLmNvdXJzZUlkLCBzZWF0LmlkLCBzZWF0LnZlcnNpb24pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVucm9sbGVkR3JpZE1vZGVsV2l0aG91dENvbXBsZXRlZFVzZXJTdGF0dXMubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhaXRsaXN0ZWRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlYXRzVXNlZENvdW50KCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHNlYXQuaXNVcGRhdGVQcm9jZWVkID0gZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlQWxsU2VhdHNUb1dhaXRsaXN0KHVzZXJOYW1lU2VhcmNoU3RyaW5nOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZUFsbEFjdGlvbkJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgIGlmICh1c2VyTmFtZVNlYXJjaFN0cmluZyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHVzZXJOYW1lU2VhcmNoU3RyaW5nID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLm1vdmVBbGxTZWF0c1RvV2FpdGxpc3QodGhpcy5jb3Vyc2VJZCwgdXNlck5hbWVTZWFyY2hTdHJpbmcpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVucm9sbGVkR3JpZE1vZGVsV2l0aG91dENvbXBsZXRlZFVzZXJTdGF0dXMubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhaXRsaXN0ZWRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlYXRzVXNlZENvdW50KCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVucm9sbG1lbnRDb25maWcuaXNBdXRvRW5yb2xsRnJvbVdhaXRsaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIkF1dG8gZW5yb2xsIGZyb20gd2FpdGxpc3Qgd2lsbCBub3QgYmUgcGVyZm9ybWVkLiBQbGVhc2UgZW5yb2xsIGxlYXJuZXJzIG1hbnVhbGx5IGlmIG5lZWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQWxsQWN0aW9uQnV0dG9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwcm92ZUVucm9sbG1lbnQoc2VhdDogSUVucm9sbG1lbnRTZWF0RXh0ZW5kZWQpOiB2b2lkIHtcclxuICAgICAgICBzZWF0LmlzVXBkYXRlUHJvY2VlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmFwcHJvdmVFbnJvbGxtZW50U2VhdCh0aGlzLmNvdXJzZUlkLCBzZWF0LmlkLCBzZWF0LnZlcnNpb24pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVucm9sbGVkLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsZWRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxlZEdyaWRNb2RlbFdpdGhvdXRDb21wbGV0ZWRVc2VyU3RhdHVzLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2VhdHNVc2VkQ291bnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQud2FpdGxpc3RlZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndhaXRsaXN0ZWRHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHNlYXQuaXNVcGRhdGVQcm9jZWVkID0gZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcHByb3ZlQWxsRW5yb2xsbWVudHModXNlck5hbWVTZWFyY2hTdHJpbmc6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlQWxsQWN0aW9uQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHVzZXJOYW1lU2VhcmNoU3RyaW5nID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdXNlck5hbWVTZWFyY2hTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuYXBwcm92ZUFsbEVucm9sbG1lbnRTZWF0cyh0aGlzLmNvdXJzZUlkLCB1c2VyTmFtZVNlYXJjaFN0cmluZylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZW5yb2xsZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnJvbGxlZEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVucm9sbGVkR3JpZE1vZGVsV2l0aG91dENvbXBsZXRlZFVzZXJTdGF0dXMubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTZWF0c1VzZWRDb3VudCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC53YWl0bGlzdGVkLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2FpdGxpc3RlZEdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5pc0Rpc2FibGVBbGxBY3Rpb25CdXR0b25zID0gZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWF0c1VzZWRDb3VudCgpOiBhbmd1bGFyLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0VG90YWxVc2VkU2VhdHNGb3JDb3Vyc2UodGhpcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4odXNlZFNlYXRDb3VudCA9PiB0aGlzLnRvdGFsVXNlZFNlYXRzID0gdXNlZFNlYXRDb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZVVzZXJTZWxlY3RvckZvckVucm9sbCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUuc2hvd1VzZXJTZWxlY3RvckZvckVucm9sbCkge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5zaG93VXNlclNlbGVjdG9yRm9yRW5yb2xsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcklkc1RvRW5yb2xsLnNwbGljZSgwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5zaG93VXNlclNlbGVjdG9yRm9yRW5yb2xsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZUdyb3VwU2VsZWN0b3JGb3JFbnJvbGwoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLnNob3dHcm91cFNlbGVjdG9yRm9yRW5yb2xsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLnNob3dHcm91cFNlbGVjdG9yRm9yRW5yb2xsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBJZHNUb0Vucm9sbC5zcGxpY2UoMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuc2hvd0dyb3VwU2VsZWN0b3JGb3JFbnJvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlVXNlclNlbGVjdG9yRm9yV2FpdGxpc3QoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNjb3BlLnNob3dVc2VyU2VsZWN0b3JGb3JXYWl0bGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5zaG93VXNlclNlbGVjdG9yRm9yV2FpdGxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy51c2VySWRzVG9XYWl0bGlzdC5zcGxpY2UoMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuc2hvd1VzZXJTZWxlY3RvckZvcldhaXRsaXN0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZUdyb3VwU2VsZWN0b3JGb3JXYWl0bGlzdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4kc2NvcGUuc2hvd0dyb3VwU2VsZWN0b3JGb3JXYWl0bGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS5zaG93R3JvdXBTZWxlY3RvckZvcldhaXRsaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcklkc1RvV2FpdGxpc3Quc3BsaWNlKDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLnNob3dHcm91cFNlbGVjdG9yRm9yV2FpdGxpc3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QXZhaWxhYmxlVXNlcnNVcmwoYnVzaW5lc3NVbml0OiBudW1iZXIsIGV4Y2x1ZGVkVXNlcklkczogbnVtYmVyW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCB1cmw6IHN0cmluZyA9IFwiL2FwaS91c2VyU2VsZWN0b3IvdXNlcnM/XCI7XHJcbiAgICAgICAgaWYgKGJ1c2luZXNzVW5pdCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gYGJ1c2luZXNzVW5pdElkPSR7YnVzaW5lc3NVbml0fSZgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXhjbHVkZWRVc2VySWRzICYmIGV4Y2x1ZGVkVXNlcklkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGV4Y2x1ZGVkVXNlcklkcy5mb3JFYWNoKGlkID0+IHVybCArPSBgZXhjbHVkZWRVc2VySWRzPSR7aWR9JmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdmFpbGFibGVHcm91cHNVcmwoYnVzaW5lc3NVbml0OiBudW1iZXIsIGV4Y2x1ZGVkR3JvdXBJZHM6IG51bWJlcltdKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgdXJsOiBzdHJpbmcgPSBcIi9hcGkvdXNlclNlbGVjdG9yL2dyb3Vwcz9cIjtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0KSB7XHJcbiAgICAgICAgICAgIHVybCArPSBgYnVzaW5lc3NVbml0SWQ9JHtidXNpbmVzc1VuaXR9JmA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleGNsdWRlZEdyb3VwSWRzICYmIGV4Y2x1ZGVkR3JvdXBJZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBleGNsdWRlZEdyb3VwSWRzLmZvckVhY2goaWQgPT4gdXJsICs9IGBleGNsdWRlZEdyb3VwSWRzPSR7aWR9JmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd1NlbmRNYWlsTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jbGVhckVtYWlsRmllbGRzKCk7XHJcbiAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICQoXCIjc2hvd1NlbmRNYWlsXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb3NlU2VuZE1haWxNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICAkKFwiI3Nob3dTZW5kTWFpbFwiKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZW5kRW1haWx0b0FjdGl2ZUxlYXJuZXJzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmJ0blNlbmROb3RpZmljYXRpb25DbGlja2VkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5idG5TZW5kTm90aWZpY2F0aW9uQ2xpY2tlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3ViamVjdCA9PSBudWxsIHx8IHRoaXMuc3ViamVjdCA9PSB1bmRlZmluZWQgfHwgdGhpcy5zdWJqZWN0ID09IFwiXCIgfHwgdGhpcy5zdWJqZWN0LnRyaW0oKS5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuc3ViamVjdCA9IFwiIFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5zZW5kRW1haWx0b0FjdGl2ZUxlYXJuZXJzKHRoaXMuY291cnNlSWQsIHRoaXMubWVzc2FnZSwgdGhpcy5zdWJqZWN0KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTWVzc2FnZSBoYXMgYmVlbiBzZW50XCIpO1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQodGhpcy5jbG9zZVNlbmRNYWlsTW9kYWwsMTMwMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IG5vdGlmaWVyLmVycm9yKFwiTWVzc2FnZSBoYXMgYmVlbiBub3Qgc2VudFwiKSk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ0blNlbmROb3RpZmljYXRpb25DbGlja2VkID0gZmFsc2U7XHJcbiAgICAgICAgfSwgMTMwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhckVtYWlsRmllbGRzKCk6dm9pZHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3ViamVjdCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUGVuZGluZ1BheW1lbnQoc2VhdFN0YXR1czogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHNlYXRTdGF0dXMgPT09IEVucm9sbG1lbnRTZWF0U3RhdHVzW0Vucm9sbG1lbnRTZWF0U3RhdHVzLlBFTkRJTkdfUEFZTUVOVF07XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5pbXBvcnQge0lTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZH0gZnJvbSBcIi4vbW9kZWxzL0lTZWN0aW9uSW5IaWVyYXJjaHlcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7SUNvdXJzZVByb2dyZXNzfSBmcm9tIFwiLi9tb2RlbHMvSUNvdXJzZVByb2dyZXNzXCI7XHJcbmltcG9ydCB7SVNlY3Rpb25zU3RhdGlzdGljc30gZnJvbSBcIi4vbW9kZWxzL0lTZWN0aW9uU3RhdGlzdGljc1wiO1xyXG5pbXBvcnQge0lTZWN0aW9uUHJvZ3Jlc3N9IGZyb20gXCIuL21vZGVscy9JU2VjdGlvblByb2dyZXNzXCI7XHJcbmltcG9ydCB7SUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3N9IGZyb20gXCIuL21vZGVscy9JSW5kaXZpZHVhbFNlY3Rpb25Qcm9ncmVzc1wiO1xyXG5pbXBvcnQge0lJbmRpdmlkdWFsUXVpelJlc3VsdH0gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL0lJbmRpdmlkdWFsUXVpelJlc3VsdFwiO1xyXG5pbXBvcnQgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmcgPSBhbmd1bGFyLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnO1xyXG5pbXBvcnQge0lDb3Vyc2VTZWN0aW9uUHJvZ3Jlc3NFbnRyeX0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VTZWN0aW9uUHJvZ3Jlc3NFbnRyeVwiO1xyXG5pbXBvcnQge0lNYXRlcmlhbFByb2dyZXNzfSBmcm9tIFwiLi4vbWF0ZXJpYWxzL21vZGVscy9JTWF0ZXJpYWxQcm9ncmVzc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvdXJzZXMuUHJvZ3Jlc3NTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIENPVVJTRV9QUk9HUkVTU19JRF9TVE9SQUdFX0tFWSA9IFwidmhzLmFwcGxpY2F0aW9uLmNvdXJzZXMuY291cnNlLnByb2dyZXNzLmlkXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY2VcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY2U6IGFuZ3VsYXIuSVNDRVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydENvdXJzZShjb3Vyc2VJZDogbnVtYmVyLCBwYXJ0aWNpcGF0aW9uRm9ybURhdGE/OiBhbnkpOiBhbmd1bGFyLklQcm9taXNlPElDb3Vyc2VQcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvcHJvZ3Jlc3MvY291cnNlLzpjb3Vyc2VJZC9zdGFydFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHBhcnRpY2lwYXRpb25Gb3JtRGF0YSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlUHJvZ3Jlc3MoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZD86IG51bWJlciwgdXNlcklkPzogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJQ291cnNlUHJvZ3Jlc3M+IHtcclxuICAgICAgICAvLyB1c2VySWQgTVVTVCBiZSBlbXB0eSAobnVsbCBvciB1bmRlZmluZWQpIGZvciBjYWxsaW5nIHRoaXMgbWV0aG9kIHdoaWxlIHZpZXdpbmcgYSBDb3Vyc2UgYXMgYSBzdHVkZW50XHJcbiAgICAgICAgLy8gc3BlY2lmeSB1c2VySWQgb25seSB3aGVuIHZpZXdpbmcgc3R1ZGVudHMnIFByb2dyZXNzIGFzIGEgQ291cnNlIG93bmVyXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL2NvdXJzZS86Y291cnNlSWQ/dXNlcklkPTp1c2VySWQmY291cnNlUHJvZ3Jlc3NJZD06Y291cnNlUHJvZ3Jlc3NJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp1c2VySWRcIiwgdXNlcklkIHx8IFwiXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VQcm9ncmVzc0lkXCIsIGNvdXJzZVByb2dyZXNzSWQgfHwgXCJcIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlU2VjdGlvbnMoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VjdGlvbkluSGllcmFyY2h5RXh0ZW5kZWQ+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL3N0cnVjdHVyZS9jb3Vyc2VzLzpjb3Vyc2VJZC9zZWN0aW9ucz9jb3Vyc2VQcm9ncmVzc0lkPTpjb3Vyc2VQcm9ncmVzc0lkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZVByb2dyZXNzSWRcIiwgY291cnNlUHJvZ3Jlc3NJZCB8fCBcIlwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNb2R1bGVTZWN0aW9ucyhjb3Vyc2VJZDogbnVtYmVyLCBtb2R1bGVJZDogbnVtYmVyLCBjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvcHJvZ3Jlc3Mvc3RydWN0dXJlL2NvdXJzZXMvOmNvdXJzZUlkL21vZHVsZXMvOm1vZHVsZUlkL3NlY3Rpb25zP2NvdXJzZVByb2dyZXNzSWQ9OmNvdXJzZVByb2dyZXNzSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bW9kdWxlSWRcIiwgbW9kdWxlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VQcm9ncmVzc0lkXCIsIGNvdXJzZVByb2dyZXNzSWQgfHwgXCJcIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlVXNlcnMoY291cnNlSWQ6IG51bWJlciwgdXNlck5hbWVTZWFyY2hTdHJpbmc6IHN0cmluZywgdXNlckxvZ29uU2VhcmNoU3RyaW5nOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUFjdGl2ZT86IGJvb2xlYW4sIGluY2x1ZGVkVXNlcklkcz86IG51bWJlcltdKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VsZWN0YWJsZT4+IHtcclxuICAgICAgICBsZXQgdXJsOiBzdHJpbmcgPSBcIi9hcGkvY291cnNlcy86Y291cnNlSWQvdXNlcnM/dXNlck5hbWVTZWFyY2hTdHJpbmc9OnVzZXJOYW1lU2VhcmNoU3RyaW5nJnVzZXJMb2dvblNlYXJjaFN0cmluZz06dXNlckxvZ29uU2VhcmNoU3RyaW5nJm9ubHlBY3RpdmU9Om9ubHlBY3RpdmVcIjtcclxuICAgICAgICBpZiAoaW5jbHVkZWRVc2VySWRzICYmIGluY2x1ZGVkVXNlcklkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBcIiZcIjtcclxuICAgICAgICAgICAgaW5jbHVkZWRVc2VySWRzLmZvckVhY2goaWQgPT4gdXJsICs9IGBpbmNsdWRlZFVzZXJJZHM9JHtpZH0mYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKHVybClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dXNlck5hbWVTZWFyY2hTdHJpbmdcIiwgdXNlck5hbWVTZWFyY2hTdHJpbmcgfHwgXCJcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnVzZXJMb2dvblNlYXJjaFN0cmluZ1wiLCB1c2VyTG9nb25TZWFyY2hTdHJpbmcgfHwgXCJcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9ubHlBY3RpdmVcIiwgb25seUFjdGl2ZSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlR3JvdXBzKGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElTZWxlY3RhYmxlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzLzpjb3Vyc2VJZC9ncm91cHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVc2VyUHJvZ3Jlc3MoY291cnNlSWQ6IG51bWJlciwgdXNlcklkPzogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VjdGlvblByb2dyZXNzPj4ge1xyXG4gICAgICAgIGlmICh1c2VySWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL2NvdXJzZS86Y291cnNlSWQvc2VjdGlvbnM/dXNlcklkPTp1c2VySWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjp1c2VySWRcIiwgdXNlcklkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL2NvdXJzZS86Y291cnNlSWQvc2VjdGlvbnNcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlTW9kdWxlc1Byb2dyZXNzKGNvdXJzZUlkOiBudW1iZXIsIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL2NvdXJzZS86Y291cnNlSWQvbW9kdWxlc1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHtwYXJhbXM6IHtjb3Vyc2VQcm9ncmVzc0lkOiBjb3Vyc2VQcm9ncmVzc0lkfX1cclxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UGFydGljaXBhdGlvbkZvcm1EYXRhKGNvdXJzZUlkOiBudW1iZXIsIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlciwgcGFydGljaXBhdGlvbkZvcm1EYXRhPzogYW55KTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvcHJvZ3Jlc3MvY291cnNlLzpjb3Vyc2VJZC9wYXJ0aWNpcGF0aW9uRm9ybURhdGE/Y291cnNlUHJvZ3Jlc3NJZD06Y291cnNlUHJvZ3Jlc3NJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VQcm9ncmVzc0lkXCIsIGNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHBhcnRpY2lwYXRpb25Gb3JtRGF0YSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UHJvZ3Jlc3NGb3JRdWl6KGNvdXJzZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyLCB1c2VySWRzOiBBcnJheTxudW1iZXI+LCBncm91cElkczogQXJyYXk8bnVtYmVyPik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVNlY3Rpb25Qcm9ncmVzcz4+IHtcclxuICAgICAgICBsZXQgcmVxdWVzdENvbmZpZzogYW5ndWxhci5JUmVxdWVzdFNob3J0Y3V0Q29uZmlnID0ge1xyXG4gICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE86IGxpbWl0IHRoZSBudW1iZXIgb2YgbGlzdCBpdGVtcyBiZWNhdXNlIFVSSSBsZW5ndGggc2hvdWxkIG5vdCBleGNlZWQgMjA4MyBjaGFyYWN0ZXJzXHJcbiAgICAgICAgICAgICAgICB1c2VySWRzRmlsdGVyOiB1c2VySWRzLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBJZHNGaWx0ZXI6IGdyb3VwSWRzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIFRPRE86IHBhcmFtZXRlcnMgJ3BhZ2UnIGFuZCAncGFnZVNpemUnIGFyZSBmb3IgZGVidWcgcHVycG9zZXMgaGVyZSxcclxuICAgICAgICAvLyBUT0RPOiB0aGV5IHNob3VsZCBiZSByZW1vdmVkIGxhdGVyIGFuZCByZXBsYWNlZCB3aXRoIG91ciBHcmlkXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL2NvdXJzZS86Y291cnNlSWQvc2VjdGlvbnMvOnNlY3Rpb25JZD9wYWdlPTAmcGFnZVNpemU9MTAwMFwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICByZXF1ZXN0Q29uZmlnXHJcbiAgICAgICAgKS50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlY3Rpb25zU3RhdGlzdGljcyhjb3Vyc2VJZDogbnVtYmVyLCB1c2VySWRzOiBBcnJheTxudW1iZXI+LCBncm91cElkczogQXJyYXk8bnVtYmVyPik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVNlY3Rpb25zU3RhdGlzdGljcz4+IHtcclxuICAgICAgICBsZXQgcmVxdWVzdENvbmZpZzogYW5ndWxhci5JUmVxdWVzdFNob3J0Y3V0Q29uZmlnID0ge1xyXG4gICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE86IGxpbWl0IHRoZSBudW1iZXIgb2YgbGlzdCBpdGVtcyBiZWNhdXNlIFVSSSBsZW5ndGggc2hvdWxkIG5vdCBleGNlZWQgMjA4MyBjaGFyYWN0ZXJzXHJcbiAgICAgICAgICAgICAgICB1c2VySWRzRmlsdGVyOiB1c2VySWRzLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBJZHNGaWx0ZXI6IGdyb3VwSWRzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9jb3Vyc2UvOmNvdXJzZUlkL3NlY3Rpb25zL3N0YXRpc3RpY3NcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgIHJlcXVlc3RDb25maWcpLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWFya1NlY3Rpb25Bc09wZW5lZChjb3Vyc2VJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VjdGlvblByb2dyZXNzPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9jb3Vyc2UvOmNvdXJzZUlkL3NlY3Rpb25zLzpzZWN0aW9uSWQvbWFya0FzT3BlbmVkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIGNvdXJzZVByb2dyZXNzSWQgPyBKU09OLnN0cmluZ2lmeShjb3Vyc2VQcm9ncmVzc0lkKSA6IG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0U2VjdGlvblByb2dyZXNzU3RhdHVzKGNvdXJzZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyLCBzdGF0dXM6IHN0cmluZywgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL2NvdXJzZS86Y291cnNlSWQvc2VjdGlvbnMvOnNlY3Rpb25JZC9yZXNldFN0YXR1cy86c3RhdHVzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzdGF0dXNcIiwgc3RhdHVzLnRvVXBwZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIGNvdXJzZVByb2dyZXNzSWQgPyBKU09OLnN0cmluZ2lmeShjb3Vyc2VQcm9ncmVzc0lkKSA6IG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZUluVXNlKGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9jb3Vyc2UvOmNvdXJzZUlkL2luVXNlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWFjdGl2YXRlQ291cnNlUHJvZ3Jlc3MoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuc2VydmljZShcclxuICAgICAgICAgICAgYC9hcGkvcHJvZ3Jlc3MvY291cnNlLyR7Y291cnNlSWR9L3Byb2dyZXNzLyR7Y291cnNlUHJvZ3Jlc3NJZH0vaW5hY3RpdmVgXHJcbiAgICAgICAgKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbXBsZXRlQ291cnNlUHJvZ3Jlc3MoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuc2VydmljZShcclxuICAgICAgICAgICAgYC9hcGkvcHJvZ3Jlc3MvY291cnNlLyR7Y291cnNlSWR9L3Byb2dyZXNzLyR7Y291cnNlUHJvZ3Jlc3NJZH0vY29tcGxldGVgXHJcbiAgICAgICAgKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlY3Rpb25zUHJvZ3Jlc3MoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJU2VjdGlvblByb2dyZXNzW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXHJcbiAgICAgICAgICAgICAgICBgL2FwaS9wcm9ncmVzcy9jb3Vyc2UvJHtjb3Vyc2VJZH0vcHJvZ3Jlc3MvJHtjb3Vyc2VQcm9ncmVzc0lkfS9zZWN0aW9uc1Byb2dyZXNzYFxyXG4gICAgICAgICAgICApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN0aW9uUHJvZ3Jlc3MoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVNlY3Rpb25Qcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcclxuICAgICAgICAgICAgICAgIGAvYXBpL3Byb2dyZXNzL2NvdXJzZS8ke2NvdXJzZUlkfS9wcm9ncmVzcy8ke2NvdXJzZVByb2dyZXNzSWR9L3NlY3Rpb24vJHtzZWN0aW9uSWR9YFxyXG4gICAgICAgICAgICApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTb3VyY2VQYXJ0aWNpcGF0aW9uRm9ybURhdGEoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL2NvdXJzZS86Y291cnNlSWQvc291cmNlUGFydGljaXBhdGlvbkZvcm1EYXRhXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlUHJvZ3Jlc3NTdGFydGVkKGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgL2FwaS9wcm9ncmVzcy9jb3Vyc2UvJHtjb3Vyc2VJZH0vc3RhcnRlZGApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBbGxTZWN0aW9uc0luSGllcmFyY2h5KGNvdXJzZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElTZWN0aW9uSW5IaWVyYXJjaHlFeHRlbmRlZFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL3N0cnVjdHVyZS9jb3Vyc2VzLzpjb3Vyc2VJZC9zZWN0aW9ucy9hbGxcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBbGxDb3Vyc2VQcm9ncmVzc2VzRm9yVXNlcihjb3Vyc2VJZDogbnVtYmVyLCB1c2VySWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZVByb2dyZXNzW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvcHJvZ3Jlc3MvY291cnNlLyR7Y291cnNlSWR9L3VzZXIvJHt1c2VySWR9L3Byb2dyZXNzL2FsbGApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBbGxTZWN0aW9uUHJvZ3Jlc3Nlc0ZvckNvdXJzZVByb2dyZXNzKGNvdXJzZUlkOiBudW1iZXIsIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3NbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcclxuICAgICAgICAgICAgICAgIGAvYXBpL3Byb2dyZXNzL2NvdXJzZS8ke2NvdXJzZUlkfS9wcm9ncmVzcy8ke2NvdXJzZVByb2dyZXNzSWR9L3NlY3Rpb25Qcm9ncmVzcy9hbGxgXHJcbiAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZVByb2dyZXNzUGFydGljaXBhdGlvbkZvcm0oY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxNYXA8c3RyaW5nLCBhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL2NvdXJzZS86Y291cnNlSWQvcHJvZ3Jlc3MvOmNvdXJzZVByb2dyZXNzSWQvcGFydGljaXBhdGlvbkZvcm1cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlUHJvZ3Jlc3NJZFwiLCBjb3Vyc2VQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbmRpdmlkdWFsUXVpelJlc3VsdHMoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUluZGl2aWR1YWxRdWl6UmVzdWx0W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcImFwaS9wcm9ncmVzcy9jb3Vyc2UvOmNvdXJzZUlkL3Byb2dyZXNzLzpjb3Vyc2VQcm9ncmVzc0lkL3NlY3Rpb24vOnNlY3Rpb25JZC9xdWl6UmVzdWx0c1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VQcm9ncmVzc0lkXCIsIGNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb21wbGV0ZVNlY3Rpb25XaXRoQ2hpbGRlcyhjb3Vyc2VJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCJhcGkvcHJvZ3Jlc3MvY291cnNlLzpjb3Vyc2VJZC9zZWN0aW9ucy86c2VjdGlvbklkL2NvbXBsZXRlV2l0aENoaWxkZXNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgY291cnNlUHJvZ3Jlc3NJZCA/IEpTT04uc3RyaW5naWZ5KGNvdXJzZVByb2dyZXNzSWQpIDogbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRTZWN0aW9uV2l0aENoaWxkZXNUb0luaXRpYWwoY291cnNlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIsIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiYXBpL3Byb2dyZXNzL2NvdXJzZS86Y291cnNlSWQvc2VjdGlvbnMvOnNlY3Rpb25JZC9yZXNldFNlY3Rpb25XaXRoQ2hpbGRlc1RvSW5pdGlhbFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBjb3Vyc2VQcm9ncmVzc0lkID8gSlNPTi5zdHJpbmdpZnkoY291cnNlUHJvZ3Jlc3NJZCkgOiBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBbnlTZWN0aW9uV2ViaW5hcihjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvY291cnNlcy8ke2NvdXJzZUlkfS92aWx0U2Vzc2lvbnMvYW55SW5Db3Vyc2VgKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UHJvZ3Jlc3NCdW5kbGVJZChjb3Vyc2VJZDogbnVtYmVyLCBjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShgYXBpL3Byb2dyZXNzL2NvdXJzZS8ke2NvdXJzZUlkfS9wcm9ncmVzcy8ke2NvdXJzZVByb2dyZXNzSWR9L3Byb2dyZXNzQnVuZGxlSWRgKVxyXG4gICAgICAgIClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlUHJvZ3Jlc3NCdW5kbGUoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKGBhcGkvcHJvZ3Jlc3MvY291cnNlLyR7Y291cnNlSWR9L3Byb2dyZXNzLyR7Y291cnNlUHJvZ3Jlc3NJZH0vY3JlYXRlUHJvZ3Jlc3NCdW5kbGVgKSxcclxuICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgIClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRJbmZvcm1hdGlvblNlY3Rpb25TdGF0dXNUb0FsbG93ZWQoY291cnNlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIsIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9jb3Vyc2UvOmNvdXJzZUlkL3NlY3Rpb25zLzpzZWN0aW9uSWQvcmVzZXRJbmZvcm1hdGlvblNlY3Rpb25TdGF0dXNUb0FsbG93ZWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgY291cnNlUHJvZ3Jlc3NJZCA/IEpTT04uc3RyaW5naWZ5KGNvdXJzZVByb2dyZXNzSWQpIDogbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRDb3Vyc2VUcmFuc2NyaXB0UmVwb3J0KHBhcmFtZXRlcnM6IGFueSk6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGxldCByZXBvcnRUeXBlID0gJ0NPVVJTRV9UUkFOU0NSSVBUX1JFUE9SVCc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9kb3dubG9hZFRva2VuLzpyZXBvcnRUeXBlXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6cmVwb3J0VHlwZVwiLCByZXBvcnRUeXBlKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgeyBwYXJhbWV0ZXJzOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJzKSB9XHJcbiAgICAgICAgKS50aGVuKChyZXN1bHQ6IGFueSkgPT5cclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9kb3dubG9hZC86dG9rZW5cIikucGFyYW0oXCI6dG9rZW5cIiwgcmVzdWx0LmRhdGEudG9rZW4pLnNlcnZpY2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvd25sb2FkR2VuZXJhbFRyYW5zY3JpcHRSZXBvcnQocGFyYW1ldGVyczogYW55KTogbmcuSVByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgbGV0IHJlcG9ydFR5cGUgPSAnR0VORVJBTF9UUkFOU0NSSVBUX1JFUE9SVCc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9kb3dubG9hZFRva2VuLzpyZXBvcnRUeXBlXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6cmVwb3J0VHlwZVwiLCByZXBvcnRUeXBlKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgeyBwYXJhbWV0ZXJzOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJzKSB9XHJcbiAgICAgICAgKS50aGVuKChyZXN1bHQ6IGFueSkgPT5cclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9kb3dubG9hZC86dG9rZW5cIikucGFyYW0oXCI6dG9rZW5cIiwgcmVzdWx0LmRhdGEudG9rZW4pLnNlcnZpY2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN0YXJ0ZWRDb3Vyc2VQcm9ncmVzc1VzZXJzQnlDb3Vyc2UoY291cnNlSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL3Byb2dyZXNzL2NvdXJzZS8ke2NvdXJzZUlkfS9jb3VudFVzZXJzQ291cnNlU3RhcnRlZGApKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxudW1iZXI+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVzZXJTY29ybVNlc3Npb25EYXRhKGNvdXJzZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyLCBpbnRlcmFjdGlvbkRhdGE6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvcHJvZ3Jlc3MvY291cnNlLyR7Y291cnNlSWR9L3NlY3Rpb25zLyR7c2VjdGlvbklkfS9zZXNzaW9uc2ApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlVXNlclNjb3JtU2Vzc2lvbkRhdGEoY291cnNlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIsIGludGVyYWN0aW9uRGF0YTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvcHJvZ3Jlc3MvY291cnNlLyR7Y291cnNlSWR9L3NlY3Rpb25zLyR7c2VjdGlvbklkfS9zZXNzaW9uc2ApLCB7XHJcbiAgICAgICAgICAgIGludGVyYWN0aW9uRGF0YTogaW50ZXJhY3Rpb25EYXRhXHJcbiAgICAgICAgfSkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFeHBpcmF0aW9uRGF0ZUZvckNvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogbmcuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvcHJvZ3Jlc3MvY291cnNlLyR7Y291cnNlSWR9L2V4cGlyYXRpb25gKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8bnVtYmVyPikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleHBvcnRDb3Vyc2VQcm9ncmVzc0NzdlJlcG9ydChwYXJhbWV0ZXJzOiBhbnksIHJlcG9ydFR5cGU6IGFueSk6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL3JlcG9ydHMvZG93bmxvYWRUb2tlbi86cmVwb3J0VHlwZVwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOnJlcG9ydFR5cGVcIiwgcmVwb3J0VHlwZSlcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgIHsgcGFyYW1ldGVyczogSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycykgfVxyXG4gICAgICAgICkudGhlbigocmVzdWx0OiBhbnkpID0+XHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL3JlcG9ydHMvZG93bmxvYWQvOnRva2VuXCIpLnBhcmFtKFwiOnRva2VuXCIsIHJlc3VsdC5kYXRhLnRva2VuKS5zZXJ2aWNlKCkpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFsbFByb2dyZXNzZXNGb3JDb3Vyc2VQcm9ncmVzcyhjb3Vyc2VJZDogbnVtYmVyLCBjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElDb3Vyc2VTZWN0aW9uUHJvZ3Jlc3NFbnRyeT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcclxuICAgICAgICAgICAgICAgIGAvYXBpL3Byb2dyZXNzL2NvdXJzZS8ke2NvdXJzZUlkfS9wcm9ncmVzcy8ke2NvdXJzZVByb2dyZXNzSWR9L3NlY3Rpb25Qcm9ncmVzcy9oaWVyYXJjaHkvYWxsYFxyXG4gICAgICAgICAgICApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gPElDb3Vyc2VTZWN0aW9uUHJvZ3Jlc3NFbnRyeT5yZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRXhwb3J0QWxsb3dlZChjb3Vyc2VJZDogbnVtYmVyKTogbmcuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL3Byb2dyZXNzL2NvdXJzZS8ke2NvdXJzZUlkfS9pc0V4cG9ydEFsbG93ZWRgKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUxhc3RWaWV3ZWRTZWN0aW9uKGNvdXJzZUlkOiBudW1iZXIsIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9jb3Vyc2UvOmNvdXJzZUlkL2NvdXJzZVByb2dyZXNzLzpjb3Vyc2VQcm9ncmVzc0lkL3NlY3Rpb25zLzpzZWN0aW9uSWQvc2xpZGVQcm9ncmVzc1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VQcm9ncmVzc0lkXCIsIGNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzZWN0aW9uSWRcIiwgc2VjdGlvbklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN0aW9uUHJvZ3Jlc3NFeHRlbnNpb25Gb3JNYXRlcmlhbFByb2dyZXNzKGNvdXJzZUlkOiBudW1iZXIsIGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIsIG1hdGVyaWFsSWQ/OiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElNYXRlcmlhbFByb2dyZXNzW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvcHJvZ3Jlc3MvY291cnNlLzpjb3Vyc2VJZC9jb3Vyc2VQcm9ncmVzcy86Y291cnNlUHJvZ3Jlc3NJZC9zZWN0aW9uLzpzZWN0aW9uSWQvbWF0ZXJpYWxzP21hdGVyaWFsSWQ9Om1hdGVyaWFsSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlUHJvZ3Jlc3NJZFwiLCBjb3Vyc2VQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1hdGVyaWFsSWRcIiwgbWF0ZXJpYWxJZCA/IG1hdGVyaWFsSWQgOiBcIlwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlU2VjdGlvblByb2dyZXNzRXh0ZW5zaW9uV2l0aE1hdGVyaWFsUHJvZ3Jlc3MoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlciwgbWF0ZXJpYWxQcm9ncmVzc2VzOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9jb3Vyc2UvOmNvdXJzZUlkL2NvdXJzZVByb2dyZXNzLzpjb3Vyc2VQcm9ncmVzc0lkL3NlY3Rpb24vOnNlY3Rpb25JZC9tYXRlcmlhbHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlUHJvZ3Jlc3NJZFwiLCBjb3Vyc2VQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbWF0ZXJpYWxQcm9ncmVzc2VzKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1NlYXJjaENvbnRyb2xIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1NlYXJjaENvbnRyb2xIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi8uLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1aXpEZXRhaWxzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvdXJzZXMuUXVpekRldGFpbHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHF1aXpOdW1iZXI6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnF1aXpOdW1iZXIgPSAkcm91dGVQYXJhbXNbQ291cnNlc1JvdXRlci5DT1VSU0VfUVVJWl9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IHF1aXpOdW1iZXJTdHIgPSBTdHJpbmcodGhpcy5xdWl6TnVtYmVyKTtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpO1xyXG4gICAgICAgIC8vIFRPRE86IEFkZCBhIGNoZWNrIHBlcm1pc3Npb24gXCJldmFsdWF0aW9uUXVpelwiIHdoZW4gd2lsbCBiZSByZWFkeSB0aGUgc2VydmVyIHBhcnRcclxuICAgICAgICAgICAgLy8uZGVtYW5kUXVpelBlcm1pc3Npb25zKHF1aXpOdW1iZXJTdHIsIHF1aXpQZXJtaXNzaW9ucyA9PiBxdWl6UGVybWlzc2lvbnMuZXZhbHVhdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBtZW51SXRlbUtleTogc3RyaW5nID0gTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKTtcclxuICAgICAgICBpZiAoIW1lbnVJdGVtS2V5IHx8IG1lbnVJdGVtS2V5Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuRURVQ0FUSU9OX0NPVVJTRVNfTUVOVV9LRVkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIlRlc3QgI1wiICsgdGhpcy5xdWl6TnVtYmVyICtcclxuICAgICAgICAgICAgXCIgb2YgRW5nbGlzaCBsYW5ndWFnZVwiKS51cGRhdGUoKTsgLy8gVE9ETzogcmVhbCB0aXRsZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNRdWl6TnVtYmVyT2RkKHF1aXpOdW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6TnVtYmVyICUgMiAhPSAwO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VyTm90ZX0gZnJvbSBcIi4vbW9kZWxzL0lVc2VyTm90ZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJOb3Rlc1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJjb3Vyc2VzLlVzZXJOb3Rlc1NlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzZWN0aW9uSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0aWFsaXplKGNvdXJzZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyLCBjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdXJzZUlkID0gY291cnNlSWQ7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uSWQgPSBzZWN0aW9uSWQ7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VQcm9ncmVzc0lkID0gY291cnNlUHJvZ3Jlc3NJZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Tm90ZShjb3Vyc2VJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyLCB1dWlkOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElVc2VyTm90ZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9jb3Vyc2UvOmNvdXJzZUlkL3NlY3Rpb25zLzpzZWN0aW9uSWQvbm90ZXM/Y291cnNlUHJvZ3Jlc3NJZD06Y291cnNlUHJvZ3Jlc3NJZCZ1dWlkPTp1dWlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VQcm9ncmVzc0lkXCIsIGNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp1dWlkXCIsIHV1aWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVOb3RlKGNvdXJzZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyLCBjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXIsIHV1aWQ6IHN0cmluZywgdGV4dDogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdXVpZDogdXVpZCxcclxuICAgICAgICAgICAgdGV4dDogdGV4dFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9jb3Vyc2UvOmNvdXJzZUlkL3NlY3Rpb25zLzpzZWN0aW9uSWQvbm90ZXM/Y291cnNlUHJvZ3Jlc3NJZD06Y291cnNlUHJvZ3Jlc3NJZCZ1dWlkPTp1dWlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VQcm9ncmVzc0lkXCIsIGNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp1dWlkXCIsIHV1aWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIGRhdGEpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGVudW0gQ291cnNlUHJvZ3Jlc3NTdGF0dXMge1xyXG4gICAgTk9UX0FWQUlMQUJMRSxcclxuICAgIE5PVF9TVEFSVEVELFxyXG4gICAgU1RBUlRFRCxcclxuICAgIEZBSUxFRCxcclxuICAgIENPTVBMRVRFRCxcclxuICAgIEVYUElSRUQsXHJcbiAgICBSRVNFVFxyXG59IiwiZXhwb3J0IGVudW0gRW5yb2xsbWVudFNlYXRTdGF0dXMge1xyXG4gICAgRU5ST0xMRUQsXHJcbiAgICBXQUlUTElTVEVELFxyXG4gICAgUEVORElORyxcclxuICAgIFBFTkRJTkdfUEFZTUVOVFxyXG59IiwiZXhwb3J0IGVudW0gUXVpekNvcnJlY3RBbnN3ZXJzVHlwZSB7XHJcbiAgICBQRVJDRU5UQUdFLFxyXG4gICAgUE9JTlRTXHJcbn0iLCJleHBvcnQgZW51bSBTZWN0aW9uQWNjZXNzUnVsZXMge1xyXG4gICAgTUFOREFUT1JZX0lOVFJPX0lORk8sXHJcbiAgICBGUkVFX1JFSU5fTEVTU09OX0lORk8sXHJcbiAgICBTRVFVRU5USUFMX0xFU1NPTl9JTkZPLFxyXG4gICAgQ09OQ0xVU0lPTl9JTkZPLFxyXG5cclxuICAgIFBSRV9BU1NFU1NNRU5UX1FVSVosXHJcbiAgICBJTlRFUklNX0FTU0VTU01FTlRfUVVJWixcclxuICAgIFNVTU1BVElWRV9BU1NFU1NNRU5UX1FVSVosXHJcbiAgICBGT1JNQVRJVkVfQVNTRVNTTUVOVF9RVUlaLFxyXG5cclxuICAgIEFMV0FZU19BVkFJTEFCTEVfU1VSVkVZLFxyXG4gICAgQVZBSUxBQkxFX1dIRU5fUFJFVklPVVNfU0VDVElPTl9DT01QTEVURURfU1VSVkVZLFxyXG4gICAgQVZBSUxBQkxFX1dIRU5fQUxMX1BSRVZJT1VTX1NFQ1RJT05TX0NPTVBMRVRFRF9TVVJWRVksXHJcblxyXG4gICAgUkVHSVNUUkFUSU9OX0FMV0FZU19BVkFJTEFCTEVfV0VCSU5BUixcclxuICAgIEFWQUlMQUJMRV9XSEVOX1BSRVZJT1VTX1NFQ1RJT05fQ09NUExFVEVEX1dFQklOQVIsXHJcbiAgICBBVkFJTEFCTEVfV0hFTl9BTExfUFJFVklPVVNfU0VDVElPTlNfQ09NUExFVEVEX1dFQklOQVIsXHJcblxyXG4gICAgUkVHSVNUUkFUSU9OX0FMV0FZU19BVkFJTEFCTEVfSUxULFxyXG4gICAgQVZBSUxBQkxFX1dIRU5fUFJFVklPVVNfU0VDVElPTl9DT01QTEVURURfSUxULFxyXG4gICAgQVZBSUxBQkxFX1dIRU5fQUxMX1BSRVZJT1VTX1NFQ1RJT05TX0NPTVBMRVRFRF9JTFQsXHJcblxyXG4gICAgQUxXQVlTX0FWQUlMQUJMRV9GTEFTSENBUkQsXHJcbiAgICBBVkFJTEFCTEVfV0hFTl9QUkVWSU9VU19TRUNUSU9OX0NPTVBMRVRFRF9GTEFTSENBUkQsXHJcbiAgICBBVkFJTEFCTEVfV0hFTl9BTExfUFJFVklPVVNfU0VDVElPTlNfQ09NUExFVEVEX0ZMQVNIQ0FSRCxcclxuXHJcbiAgICBNQU5EQVRPUllfSU5UUk9fU0xJREVfREVDSyxcclxuICAgIEZSRUVfUkVJTl9MRVNTT05fU0xJREVfREVDSyxcclxuICAgIFNFUVVFTlRJQUxfTEVTU09OX1NMSURFX0RFQ0ssXHJcbiAgICBDT05DTFVTSU9OX1NMSURFX0RFQ0ssXHJcbn0iLCJleHBvcnQgZW51bSBTZWN0aW9uUGFzc2luZ1R5cGUge1xyXG4gICAgTUFOREFUT1JZLFxyXG4gICAgRUxFQ1RJVkUsXHJcbiAgICBPUFRJT05BTFxyXG59IiwiZXhwb3J0IGVudW0gU2VjdGlvblByb2dyZXNzU3RhdHVzIHtcclxuICAgIE5PVF9BTExPV0VELFxyXG4gICAgQUxMT1dFRCxcclxuICAgIE9QRU5FRCxcclxuICAgIFNUQVJURUQsXHJcbiAgICBTVUJNSVRURUQsXHJcbiAgICBGQUlMRUQsXHJcbiAgICBTT1MsXHJcbiAgICBDT01QTEVURURcclxufSIsImV4cG9ydCBlbnVtIFNlY3Rpb25UeXBlIHtcclxuICAgIElORk9STUFUSU9OLFxyXG4gICAgUVVJWixcclxuICAgIElORk9STUFUSU9OX1dJVEhfTUFOVUFMX0NPTVBMRVRJT04sXHJcbiAgICBQUk9CTEVNX1NPTFVUSU9OLFxyXG4gICAgU1VSVkVZLFxyXG4gICAgV0VCSU5BUixcclxuICAgIElMVCxcclxuICAgIEZMQVNIQ0FSRCxcclxuICAgIFNMSURFX0RFQ0ssXHJcbiAgICBTTElERVxyXG59IiwiaW1wb3J0IHtab29tQ29udHJvbGxlcn0gZnJvbSBcIi4vWm9vbUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtTZWN1cml0eU1vZHVsZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5TW9kdWxlXCI7XHJcbmltcG9ydCB7QXV0aENvcmVNb2R1bGV9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoQ29yZU1vZHVsZVwiO1xyXG5pbXBvcnQge1VybHNNb2R1bGV9IGZyb20gXCIuLi91cmxzL1VybHNNb2R1bGVcIjtcclxuXHJcbmV4cG9ydCB2YXIgRXh0ZXJuYWxSZXNvdXJjZXNNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJleHRlcm5hbFJlc291cmNlc1wiLCBbXHJcbiAgICAgICAgU2VjdXJpdHlNb2R1bGUubmFtZSxcclxuICAgICAgICBBdXRoQ29yZU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIFVybHNNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5jb250cm9sbGVyKFpvb21Db250cm9sbGVyLk5BTUUsIFpvb21Db250cm9sbGVyKTtcclxuIiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1NldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFpvb21Db250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiZXh0ZXJuYWxSZXNvdXJjZXMuWm9vbUNvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwcml2YXRlIGJ1Wm9vbVZpc2liaWxpdHk6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgU2V0dGluZ3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCkge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9BY2Nlc3NEZW5pZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0QlVab29tVmlzaWJpbGl0eVNldHRpbmcodGhpcy5hdXRoTWFuYWdlci5nZXRDdXJyZW50VXNlcigpLmJ1c2luZXNzVW5pdHMpXHJcbiAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idVpvb21WaXNpYmlsaXR5ID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5idVpvb21WaXNpYmlsaXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQWNjZXNzRGVuaWVkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlpPT01fTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiWm9vbVwiKS51cGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlZGlyZWN0VG9BY2Nlc3NEZW5pZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuZm9yd2FyZFRvQWNjZXNzRGVuaWVkKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lCaWxsaW5nUGxhbn0gZnJvbSBcIi4vbW9kZWxzL0lCaWxsaW5nUGxhblwiO1xyXG5pbXBvcnQgSVByb21pc2UgPSBhbmd1bGFyLklQcm9taXNlO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJpbGxpbmdQbGFuU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImZpbmFuY2VzLkJpbGxpbmdQbGFuU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QmlsbGluZ1BsYW5zKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGxldCB1cmwgPSBcIi9hcGkvaW50ZWdyYXRpb24vYmlsbGluZy9wbGFuc1wiO1xyXG4gICAgICAgIGlmIChidXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCI/YnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKHVybClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRGb3JtVG9rZW4ocmV0dXJuVXJsOiBzdHJpbmcsIGJ1c2luZXNzVW5pdElkOiBudW1iZXIsIHBsYW5JZDogbnVtYmVyKTogSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgcGxhbklkOiBwbGFuSWQsXHJcbiAgICAgICAgICAgIHJldHVyblVybDogcmV0dXJuVXJsLFxyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXRJZDogYnVzaW5lc3NVbml0SWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9pbnRlZ3JhdGlvbi9iaWxsaW5nL3Rva2VuXCIpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHtwYXJhbXM6IHBhcmFtc30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZVBheW1lbnRQcm9maWxlKGJ1c2luZXNzVW5pdElkOiBudW1iZXIsIHRyYW5zYWN0aW9uSWQ6IHN0cmluZywgcGxhbklkOiBzdHJpbmcpOiBJUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBsZXQgb3JkZXJDcmVhdGlvbklucHV0ID0ge1xyXG4gICAgICAgICAgICBwcm9kdWN0SWQ6IHBsYW5JZCxcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQ6IGJ1c2luZXNzVW5pdElkLFxyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbklkOiB0cmFuc2FjdGlvbklkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2ludGVncmF0aW9uL2JpbGxpbmcvY29tcGxldGVcIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgb3JkZXJDcmVhdGlvbklucHV0KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxTdWJzY3JpcHRpb24oYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9pbnRlZ3JhdGlvbi9iaWxsaW5nL3BsYW4vOmJ1c2luZXNzVW5pdElkL2NhbmNlbFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVN1YnNjcmlwdGlvbihidXNpbmVzc1VuaXRJZDogbnVtYmVyLCBuZXdQbGFuOiBJQmlsbGluZ1BsYW4pOiBJUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvaW50ZWdyYXRpb24vYmlsbGluZy9wbGFuLzpidXNpbmVzc1VuaXRJZC91cGRhdGU/cGxhbklkPTpwbGFuSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cGxhbklkXCIsIG5ld1BsYW4uaWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNYXhGcmVlUGxhblVzZXJzKCk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9pbnRlZ3JhdGlvbi9iaWxsaW5nL2ZyZWVQbGFuTWF4VXNlcnNcIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVzaXplVmlld1NlcnZpY2V9IGZyb20gXCIuLi91dGlscy9SZXNpemVWaWV3U2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJUHJvZHVjdH0gZnJvbSBcIi4vbW9kZWxzL0lQcm9kdWN0XCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtGaW5hbmNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvRmluYW5jZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb21tb25GaWx0ZXJTZXJ2aWNlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vbkZpbHRlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoUmVkaXJlY3RcIjtcclxuaW1wb3J0IHtBdXRoUm91dGVyfSBmcm9tIFwiLi4vdXJscy9BdXRoUm91dGVyXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2F0YWxvZ0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJmaW5hbmNlcy5DYXRhbG9nQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBTRUFSQ0hfU1RSSU5HX0tFWTogc3RyaW5nID0gXCJ2aHNQcm9kdWN0c0NhdGFsb2cuZmlsdGVyLnNlYXJjaFN0cmluZ1wiO1xyXG4gICAgcHVibGljIFNVQkpFQ1RfSURfS0VZOiBzdHJpbmcgPSBcInZoc1Byb2R1Y3RzQ2F0YWxvZy5maWx0ZXIuc3ViamVjdElkXCI7XHJcbiAgICBwdWJsaWMgQ09VUlNFX1RZUEVfSURfS0VZOiBzdHJpbmcgPSBcInZoc1Byb2R1Y3RzQ2F0YWxvZy5maWx0ZXIuY291cnNlVHlwZUlkXCI7XHJcbiAgICBwdWJsaWMgVklFV19UWVBFX0tFWTogc3RyaW5nID0gXCJ2aHNQcm9kdWN0c0NhdGFsb2cudmlld1R5cGVcIjtcclxuXHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyByZXNpemVWaWV3U2VydmljZTogUmVzaXplVmlld1NlcnZpY2U7XHJcbiAgICBwdWJsaWMgcHJvZHVjdHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SVByb2R1Y3Q+O1xyXG5cclxuICAgIHB1YmxpYyBjb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgd2luZG93OiBhbnk7XHJcblxyXG4gICAgcHVibGljIHN0b3JhZ2VGaWx0ZXJWYWx1ZXM6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIEF1dGhSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRmluYW5jZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDb21tb25GaWx0ZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhSb3V0ZXI6IEF1dGhSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGZpbmFuY2VzUm91dGVyOiBGaW5hbmNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb21tb25GaWx0ZXJTZXJ2aWNlOiBDb21tb25GaWx0ZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQ0FUQUxPR19NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJDYXRhbG9nXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBpc0N1c3RvbURvbWFpbiA9IGF1dGhSb3V0ZXIuZ2V0Q3VzdG9tRG9tYWluRnJvbVVybCh0aGlzLiR3aW5kb3cubG9jYXRpb24pO1xyXG4gICAgICAgICAgICBpZiAoIWlzQ3VzdG9tRG9tYWluKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5mb3J3YXJkVG9Mb2dPbih0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElQcm9kdWN0PigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvZmluYW5jZS9wcm9kdWN0c1wiKSkpO1xyXG4gICAgICAgIHRoaXMubG9hZFNlYXJjaCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0U3RvcmFnZUZpbHRlcnMoKTtcclxuXHJcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMudmlld1R5cGUpO1xyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFBhZ2UgPSB0aGlzLnByb2R1Y3RzR3JpZE1vZGVsLmN1cnJlbnRQYWdlID49IHRoaXMucHJvZHVjdHNHcmlkTW9kZWwudG90YWxQYWdlQ291bnRcclxuICAgICAgICAgICAgICAgID8gIHRoaXMucHJvZHVjdHNHcmlkTW9kZWwuY3VycmVudFBhZ2UgLSAxXHJcbiAgICAgICAgICAgICAgICA6dGhpcy5wcm9kdWN0c0dyaWRNb2RlbC5jdXJyZW50UGFnZTtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0dyaWRNb2RlbC5sb2FkUGFnZShjdXJyZW50UGFnZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHNHcmlkTW9kZWwubG9hZFBhZ2UoY3VycmVudFBhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcIlwiKTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJkZXN0cm95XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnVzZXJQcm9maWxlID9cclxuICAgICAgICAgICAgICAgIE51bWJlcih0aGlzLnVzZXJQcm9maWxlLnBhZ2VWaWV3TW9kZSkgOiAxO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTdG9yYWdlRmlsdGVycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0RmlsdGVyVmFsdWVzKENhdGFsb2dDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlTdG9yYWdlRmlsdGVyKHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyxcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0dyaWRNb2RlbCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0U2VhcmNoSW5wdXQoQ2F0YWxvZ0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLm9wZW5TZWFyY2hJbnB1dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KHBhcmFtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKSk7XHJcbiAgICAgICAgaWYgKHBhcmFtID09IFwiZGVzdHJveVwiKSB7XHJcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0gPT0gXCJcIikge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW0uaGFzQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLm9sZFZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVVc2VyUGFnZVZpZXdNb2RlKEJvb2xlYW4odmlld1R5cGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVVzZXJQYWdlVmlld01vZGUocGFnZVZpZXdNb2RlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS51cGRhdGVQYWdlVmlld01vZGUocGFnZVZpZXdNb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaWV3VHlwZVNlbGVjdGVkKHZpZXdUeXBlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3VHlwZSA9PSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoUHJvZHVjdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkU2VhcmNoKCkge1xyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuU0VBUkNIX1NUUklOR19LRVkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5TRUFSQ0hfU1RSSU5HX0tFWSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1VCSkVDVF9JRF9LRVkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdHNHcmlkTW9kZWwuZmlsdGVyLnN1YmplY3RJZCA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5TVUJKRUNUX0lEX0tFWSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNPVVJTRV9UWVBFX0lEX0tFWSkpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0dyaWRNb2RlbC5maWx0ZXIuY291cnNlVHlwZUlkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNPVVJTRV9UWVBFX0lEX0tFWSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlZJRVdfVFlQRV9LRVkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuVklFV19UWVBFX0tFWSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0ZpbHRlckRpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2hvd0ZpbHRlckRpYWxvZyh3aW5kb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVGaWx0ZXIodHlwZTogc3RyaW5nLCByZWZlcmVuY2VPYmplY3Q6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvdW50QWN0aXZlSW5jcmVtZW50ID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnVwZGF0ZUdlbmVyYWxGaWx0ZXIodHlwZSwgcmVmZXJlbmNlT2JqZWN0LCBDYXRhbG9nQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyICs9IGNvdW50QWN0aXZlSW5jcmVtZW50O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsZWFyRmlsdGVyKENhdGFsb2dDb250cm9sbGVyLk5BTUUsIHRoaXMucHJvZHVjdHNHcmlkTW9kZWwpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoS2V5UHJlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNhdmVTZWFyY2hJbnB1dChDYXRhbG9nQ29udHJvbGxlci5OQU1FLCB0aGlzLnNlYXJjaElucHV0KTtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIHRoaXMucHJvZHVjdHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5TZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uub3BlblNlYXJjaElucHV0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsb3NlU2VhcmNoSW5wdXQoQ2F0YWxvZ0NvbnRyb2xsZXIuTkFNRSwgd2luZG93KTtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoSW5wdXQgfHwgdGhpcy5zZWFyY2hJbnB1dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyU2VhcmNoKCkge1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5TRUFSQ0hfU1RSSU5HX0tFWSk7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlNVQkpFQ1RfSURfS0VZKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ09VUlNFX1RZUEVfSURfS0VZKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzR3JpZE1vZGVsLmZpbHRlci5zdWJqZWN0SWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdHNHcmlkTW9kZWwuZmlsdGVyLmNvdXJzZVR5cGVJZCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucHJvZHVjdHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRmlsdGVyQ2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5TRUFSQ0hfU1RSSU5HX0tFWTpcclxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuU0VBUkNIX1NUUklOR19LRVkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSB0aGlzLlNVQkpFQ1RfSURfS0VZOlxyXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5TVUJKRUNUX0lEX0tFWSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIHRoaXMuQ09VUlNFX1RZUEVfSURfS0VZOlxyXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DT1VSU0VfVFlQRV9JRF9LRVkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSB0aGlzLlZJRVdfVFlQRV9LRVk6XHJcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlZJRVdfVFlQRV9LRVkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5TRUFSQ0hfU1RSSU5HX0tFWTpcclxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuU0VBUkNIX1NUUklOR19LRVksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5TVUJKRUNUX0lEX0tFWTpcclxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1VCSkVDVF9JRF9LRVksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5DT1VSU0VfVFlQRV9JRF9LRVk6XHJcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNPVVJTRV9UWVBFX0lEX0tFWSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSB0aGlzLlZJRVdfVFlQRV9LRVk6XHJcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlZJRVdfVFlQRV9LRVksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UG9wdXBDbGFzc2VzKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjYXJkcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjYXJkIGluZm9ybWF0aW9uX3Rvb2x0aXBcIikpO1xyXG4gICAgICAgIGZvciAobGV0IGNhcmQgb2YgY2FyZHMpIHtcclxuICAgICAgICAgICAgbGV0IHJlYzogQ2xpZW50UmVjdCA9IGNhcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIGxldCBwb3B1cDogRWxlbWVudCA9IGNhcmQucGFyZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicG9wdXBfb25ob3ZlclwiKS5pdGVtKDApO1xyXG4gICAgICAgICAgICBpZiAocmVjLnJpZ2h0ICsgcG9wdXAuY2xpZW50V2lkdGggPj0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIGxlZnRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJpZ2h0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInBvcHVwX29uaG92ZXIgcmlnaHRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImxlZnQtcG9pbnRlclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1B1cmNoYXNlU2VydmljZX0gZnJvbSBcIi4vUHVyY2hhc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vbk1vZHVsZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5TW9kdWxlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcbmltcG9ydCB7Q29udGVudE1vZHVsZX0gZnJvbSBcIi4uL2NvbnRlbnQvQ29udGVudE1vZHVsZVwiO1xyXG5pbXBvcnQge09yZGVyUHJvZHVjdHNDb250cm9sbGVyfSBmcm9tIFwiLi9PcmRlclByb2R1Y3RzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge1B1cmNoYXNlZE9yZGVyQ29udHJvbGxlcn0gZnJvbSBcIi4vUHVyY2hhc2VkT3JkZXJDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7UHJvZHVjdEVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9Qcm9kdWN0RWRpdENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtDYXRhbG9nQ29udHJvbGxlcn0gZnJvbSBcIi4vQ2F0YWxvZ0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtQcm9kdWN0RGV0YWlsc0NvbnRyb2xsZXJ9IGZyb20gXCIuL1Byb2R1Y3REZXRhaWxzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge1B1cmNoYXNlZFByb2R1Y3RDb250cm9sbGVyfSBmcm9tIFwiLi9QdXJjaGFzZWRQcm9kdWN0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0JpbGxpbmdQbGFuU2VydmljZX0gZnJvbSBcIi4vQmlsbGluZ1BsYW5TZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgdmFyIEZpbmFuY2VzTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAgICAgLm1vZHVsZShcImZpbmFuY2VzXCIsIFtcclxuICAgICAgICAgICAgQ29tbW9uTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgICAgIFNlY3VyaXR5TW9kdWxlLm5hbWUsXHJcbiAgICAgICAgICAgIFVybHNNb2R1bGUubmFtZSxcclxuICAgICAgICAgICAgQ29udGVudE1vZHVsZS5uYW1lXHJcbiAgICAgICAgXSlcclxuICAgICAgICAuY29udHJvbGxlcihDYXRhbG9nQ29udHJvbGxlci5OQU1FLCBDYXRhbG9nQ29udHJvbGxlcilcclxuICAgICAgICAuY29udHJvbGxlcihQcm9kdWN0RGV0YWlsc0NvbnRyb2xsZXIuTkFNRSwgUHJvZHVjdERldGFpbHNDb250cm9sbGVyKVxyXG4gICAgICAgIC5jb250cm9sbGVyKFB1cmNoYXNlZE9yZGVyQ29udHJvbGxlci5OQU1FLCBQdXJjaGFzZWRPcmRlckNvbnRyb2xsZXIpXHJcbiAgICAgICAgLmNvbnRyb2xsZXIoT3JkZXJQcm9kdWN0c0NvbnRyb2xsZXIuTkFNRSwgT3JkZXJQcm9kdWN0c0NvbnRyb2xsZXIpXHJcbiAgICAgICAgLmNvbnRyb2xsZXIoUHJvZHVjdEVkaXRDb250cm9sbGVyLk5BTUUsIFByb2R1Y3RFZGl0Q29udHJvbGxlcilcclxuICAgICAgICAuY29udHJvbGxlcihQdXJjaGFzZWRQcm9kdWN0Q29udHJvbGxlci5OQU1FLCBQdXJjaGFzZWRQcm9kdWN0Q29udHJvbGxlcilcclxuICAgICAgICAuc2VydmljZShQdXJjaGFzZVNlcnZpY2UuTkFNRSwgUHVyY2hhc2VTZXJ2aWNlKVxyXG4gICAgICAgIC5zZXJ2aWNlKEJpbGxpbmdQbGFuU2VydmljZS5OQU1FLCBCaWxsaW5nUGxhblNlcnZpY2UpOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtQdXJjaGFzZVNlcnZpY2V9IGZyb20gXCIuL1B1cmNoYXNlU2VydmljZVwiO1xyXG5pbXBvcnQge0ZpbmFuY2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9GaW5hbmNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL01hdGVyaWFsc1JvdXRlclwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge1Jlc2l6ZVZpZXdTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvUmVzaXplVmlld1NlcnZpY2VcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlZE9iamVjdFR5cGV9IGZyb20gXCIuLi9SZWZlcmVuY2VkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJT3JkZXJQcm9kdWN0fSBmcm9tIFwiLi9tb2RlbHMvSU9yZGVyUHJvZHVjdFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtPYmplY3RUeXBlVXRpbHN9IGZyb20gXCIuLi91dGlscy9PYmplY3RUeXBlVXRpbHNcIjtcclxuaW1wb3J0IHtNYXRlcmlhbFR5cGV9IGZyb20gXCIuLi9tYXRlcmlhbHMvbW9kZWxzL01hdGVyaWFsVHlwZVwiO1xyXG5pbXBvcnQge01hdGVyaWFsU2VydmljZX0gZnJvbSBcIi4uL21hdGVyaWFscy9NYXRlcmlhbFNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBPcmRlclByb2R1Y3RzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImZpbmFuY2UuT3JkZXJQcm9kdWN0c0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgcHVyY2hhc2VkT3JkZXJJZDogc3RyaW5nO1xyXG4gICAgcHVibGljIG9yZGVyUHJvZHVjdHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SU9yZGVyUHJvZHVjdD47XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG4gICAgcHVibGljIHZpZXdUeXBlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVzaXplVmlld1NlcnZpY2U6IFJlc2l6ZVZpZXdTZXJ2aWNlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBQdXJjaGFzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBGaW5hbmNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTWF0ZXJpYWxzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUUsXHJcbiAgICAgICAgTWF0ZXJpYWxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwdXJjaGFzZVNlcnZpY2U6IFB1cmNoYXNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZmluYW5jZXNSb3V0ZXI6IEZpbmFuY2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG1hdGVyaWFsU2VydmljZTogTWF0ZXJpYWxTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5wdXJjaGFzZWRPcmRlcklkID0gJHJvdXRlUGFyYW1zW0ZpbmFuY2VzUm91dGVyLk9SREVSX0lEX1BBUkFNXTtcclxuXHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZSA9IG5ldyBSZXNpemVWaWV3U2VydmljZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMucmVzaXplVmlld1NlcnZpY2Uuc2V0UmVzaXplVmlld1R5cGUodGhpcy52aWV3VHlwZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnB1cmNoYXNlZE9yZGVySWQgIT0gbnVsbCAmJiB0aGlzLnB1cmNoYXNlZE9yZGVySWQgIT0gdW5kZWZpbmVkICYmIHRoaXMucHVyY2hhc2VkT3JkZXJJZCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuUEVSU09OQUxfUFVSQ0hBU0VEX09SREVSU19NRU5VX0tFWSk7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiUHVyY2hhc2VkIE9yZGVyIFwiXHJcbiAgICAgICAgICAgICAgICArIFwi4oCYXCIgKyB0aGlzLnB1cmNoYXNlZE9yZGVySWQgKyBcIuKAmVwiKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMub3JkZXJQcm9kdWN0c0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElPcmRlclByb2R1Y3Q+KCRodHRwLFxyXG4gICAgICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvZmluYW5jZS9vcmRlcnMvOmlkL3Byb2R1Y3RzXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIHRoaXMucHVyY2hhc2VkT3JkZXJJZClcclxuICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpKSk7XHJcbiAgICAgICAgICAgIHRoaXMub3JkZXJQcm9kdWN0c0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEyO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vcmRlclByb2R1Y3RzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih7XHJcbiAgICAgICAgICAgICAgICBzdGFydExvYWRpbmc6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlbmRMb2FkaW5nOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmRlclByb2R1Y3RzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUub2JqZWN0VHlwZSA9PT0gJ01BVEVSSUFMJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbFNlcnZpY2UuZ2V0KGUub2JqZWN0SWQpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm1hdGVyaWFsVXBsb2FkRGF0ZSA9IHJlcy51cGxvYWREYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXV0aFJlZGlyZWN0LmZvcndhcmRUb0FjY2Vzc0RlbmllZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLm9sZFZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVybChvcmRlclByb2R1Y3Q6IElPcmRlclByb2R1Y3QpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChvcmRlclByb2R1Y3Qub2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5MRUFSTklOR19QQVRIXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLmRldGFpbHNVcmwob3JkZXJQcm9kdWN0Lm9iamVjdElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9yZGVyUHJvZHVjdC5vYmplY3RUeXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlc1JvdXRlci5kZXRhaWxzVXJsKG9yZGVyUHJvZHVjdC5vYmplY3RJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcmRlclByb2R1Y3Qub2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5NQVRFUklBTF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxzUm91dGVyLndhdGNoVXJsKG9yZGVyUHJvZHVjdC5vYmplY3RJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIi9cIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGh1bWJuYWlsTW9kZWxOYW1lKG9yZGVyUHJvZHVjdDogSU9yZGVyUHJvZHVjdCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKG9yZGVyUHJvZHVjdC5vYmplY3RUeXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLkxFQVJOSU5HX1BBVEhdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcImxlYXJuaW5nLXBhdGhcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9yZGVyUHJvZHVjdC5vYmplY3RUeXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiY291cnNlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcmRlclByb2R1Y3Qub2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5NQVRFUklBTF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9yZGVyUHJvZHVjdC5tYXRlcmlhbFR5cGVLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFsVHlwZVRpdGxlKG1hdGVyaWFsVHlwZUtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0VHlwZVV0aWxzLmdldE1hdGVyaWFsVHlwZVRpdGxlKE1hdGVyaWFsVHlwZVttYXRlcmlhbFR5cGVLZXldKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGh1bWJuYWlsKG9yZGVyUHJvZHVjdCk6IHN0cmluZyB7XHJcblxyXG4gICAgICAgIGlmIChvcmRlclByb2R1Y3Qub2JqZWN0VHlwZSA9PT0gJ0xFQVJOSU5HX1BBVEgnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnQ09VUlNFJztcclxuICAgICAgICB9IGVsc2UgaWYgKG9yZGVyUHJvZHVjdC5vYmplY3RUeXBlID09PSAnTUFURVJJQUwnKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3JkZXJQcm9kdWN0Lm1hdGVyaWFsVHlwZUtleSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQVVESU8nOlxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyUHJvZHVjdC5tYXRlcmlhbFR5cGVJZCA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdWSURFTyc6XHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJQcm9kdWN0Lm1hdGVyaWFsVHlwZUlkID0gMjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0xJTksnOlxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyUHJvZHVjdC5tYXRlcmlhbFR5cGVJZCA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdQSE9UTyc6XHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJQcm9kdWN0Lm1hdGVyaWFsVHlwZUlkID0gNDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0RPQ1VNRU5UUyc6XHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJQcm9kdWN0Lm1hdGVyaWFsVHlwZUlkID0gNTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJ01BVEVSSUFMX0NBUkQnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9yZGVyUHJvZHVjdC5vYmplY3RUeXBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImltcG9ydCB7UHVyY2hhc2VTZXJ2aWNlfSBmcm9tIFwiLi9QdXJjaGFzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUHJvZHVjdH0gZnJvbSBcIi4vbW9kZWxzL0lQcm9kdWN0XCI7XHJcbmltcG9ydCB7RmluYW5jZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0ZpbmFuY2VzUm91dGVyXCI7XHJcbmltcG9ydCB7Q3VzdG9tQnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vYnJhbmRpbmcvQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SU1hdGVyaWFsfSBmcm9tIFwiLi4vbWF0ZXJpYWxzL21vZGVscy9JTWF0ZXJpYWxcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRofSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aFwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtJQ291cnNlUHJvZHVjdH0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VQcm9kdWN0XCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7UHJlZGVmaW5lZFVzZXJzRW51bX0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1JlZGlyZWN0UmVhc29ufSBmcm9tIFwiLi4vYXV0aGNvcmUvUmVkaXJlY3RSZWFzb25cIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge1BheVBhbFNlcnZpY2V9IGZyb20gXCIuLi9pbnRlZ3JhdGlvbi9wYXlwYWwvUGF5UGFsU2VydmljZVwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5pbXBvcnQgSVdpbmRvd1NlcnZpY2UgPSBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuLi9jb21wb25lbnRzL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVFTZXJ2aWNlfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuLi9jb3Vyc2VzL1Byb2dyZXNzU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuLi9jb3Vyc2VzL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRob3JpemVOZXRTZXJ2aWNlfSBmcm9tIFwiLi4vaW50ZWdyYXRpb24vYXV0aG9yaXplbmV0L0F1dGhvcml6ZU5ldFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVklMVFNlc3Npb259IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvSVZJTFRTZXNzaW9uXCI7XHJcbmltcG9ydCB7VGltZVpvbmV9IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvVGltZVpvbmVUeXBlXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aENvdXJzZX0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhDb3Vyc2VcIjtcclxuaW1wb3J0IHtJVklMVFNlc3Npb25QYXJ0aWNpcGFudH0gZnJvbSBcIi4uL3dlYmluYXJzL21vZGVscy9JVklMVFNlc3Npb25QYXJ0aWNpcGFudFwiO1xyXG5pbXBvcnQge0lTZWN0aW9ufSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSVNlY3Rpb25cIjtcclxuaW1wb3J0IHtJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxUeXBlfSBmcm9tIFwiLi4vbWF0ZXJpYWxzL21vZGVscy9NYXRlcmlhbFR5cGVcIjtcclxuaW1wb3J0IHtJSUxUU2Vzc2lvbn0gZnJvbSBcIi4uL2lsdC9tb2RlbHMvSUlMVFNlc3Npb25cIjtcclxuaW1wb3J0IHtJRW5yb2xsbWVudENvbmZpZ3VyYXRpb259IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JRW5yb2xsbWVudENvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtQZXJzb25hbFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvUGVyc29uYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHsgRnJlZUVucm9sbG1lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL2ludGVncmF0aW9uL2ZyZWVlbnJvbGxtZW50L0ZyZWVFbnJvbGxtZW50U2VydmljZVwiO1xyXG5cclxuZGVjbGFyZSB2YXIgcGF5cGFsO1xyXG5kZWNsYXJlIHZhciBhdXRob3JpemVuZXQ7XHJcbmRlY2xhcmUgdmFyIGZyZWVFbnJvbGxtZW50O1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb2R1Y3REZXRhaWxzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImZpbmFuY2VzLlByb2R1Y3REZXRhaWxzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBCVV9QQVlfUEFMOiBzdHJpbmcgPSBcInBheVBhbFwiO1xyXG4gICAgcHVibGljIEJVX0FVVEhPUklaRV9ORVQ6IHN0cmluZyA9IFwiYXV0aG9yaXplTmV0XCI7XHJcblxyXG4gICAgcHVibGljIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcHJvZHVjdElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcHJvZHVjdDogSVByb2R1Y3Q7XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzQWxsb3dlZEVkaXRpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIGlzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGlzYWJsZUNoZWNrb3V0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGlzUHVyY2hhc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZXhwaXJhdGlvbkRhdGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBwcm9maWxlU3VwcG9ydExpbms6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgcHVibGljIHVzZXJCVUlkczogbnVtYmVyW107XHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0SWQ6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRNYXRlcmlhbDogSU1hdGVyaWFsO1xyXG4gICAgcHVibGljIHNlbGVjdGVkQ291cnNlOiBJQ291cnNlUHJvZHVjdDtcclxuICAgIHB1YmxpYyBzZWxlY3RlZExlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aDtcclxuICAgIHB1YmxpYyBzZWxlY3RlZExlYXJuaW5nUGF0aENvdXJzZTogSUxlYXJuaW5nUGF0aENvdXJzZTtcclxuXHJcbiAgICBwdWJsaWMgYWNjZXNzT2JqZWN0czogYW55W10gPSBbXTtcclxuICAgIHB1YmxpYyBjb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHNlY3Rpb25JZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGlzQU5ldENvbmZpZ3VyZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYU5ldFRva2VuOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgYU5ldFBvc3RVcmw6IHN0cmluZyA9IFwiaHR0cHM6Ly90ZXN0LmF1dGhvcml6ZS5uZXQvcGF5bWVudC9wYXltZW50XCI7XHJcbiAgICBwdWJsaWMgYU5ldElmcmFtZUNvbW11bmljYXRvcjogc3RyaW5nO1xyXG4gICAgcHVibGljIHRpbWVab25lID0gVGltZVpvbmU7XHJcbiAgICBwdWJsaWMgdmlsdEF1dG9SZWdpc3RlclJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY3VycmVudFBheW1lbnRDb25maWd1cmF0aW9uOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIFZJTFRTZXNzaW9uc1RvQnV5OiBBcnJheTxJVklMVFNlc3Npb24+O1xyXG4gICAgcHVibGljIFZJTFRTZWN0aW9uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgcHVibGljIElMVFNlc3Npb25zVG9CdXk6IEFycmF5PElJTFRTZXNzaW9uPjtcclxuICAgIHB1YmxpYyBJTFRTZWN0aW9uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkVklMVFBhZ2U6IG51bWJlciA9IDE7XHJcbiAgICBwdWJsaWMgcGFnaW5hdGVkVklMVFNlc3Npb25zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRJTFRQYWdlOiBudW1iZXIgPSAxO1xyXG4gICAgcHVibGljIHBhZ2luYXRlZElMVFNlc3Npb25zOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gICAgcHVibGljIEFOZXRUcmFuc2FjdGlvbklkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcGF5bWVudE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93TGFiZWxzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFzRXJyb3JzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBQdXJjaGFzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBGaW5hbmNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFJvdXRlci5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBheVBhbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRob3JpemVOZXRTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRnJlZUVucm9sbG1lbnRTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQcm9ncmVzc1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IElXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IElRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHVyY2hhc2VTZXJ2aWNlOiBQdXJjaGFzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGZpbmFuY2VzUm91dGVyOiBGaW5hbmNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVyc29uYWxSb3V0ZXI6IFBlcnNvbmFsUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBheVBhbFNlcnZpY2U6IFBheVBhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhvcml6ZU5ldFNlcnZpY2U6IEF1dGhvcml6ZU5ldFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGZyZWVFbnJvbGxtZW50U2VydmljZTogRnJlZUVucm9sbG1lbnRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMucHJvZHVjdElkID0gJHJvdXRlUGFyYW1zW0ZpbmFuY2VzUm91dGVyLlBST0RVQ1RfSURfUEFSQU1dO1xyXG4gICAgICAgIHRoaXMuY291cnNlSWQgPSBwYXJzZUludCgkbG9jYXRpb24uc2VhcmNoKClbQ291cnNlc1JvdXRlci5DT1VSU0VfUEFSQU1FVEVSXSkgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLnNlY3Rpb25JZCA9IHBhcnNlSW50KCRsb2NhdGlvbi5zZWFyY2goKVtDb3Vyc2VzUm91dGVyLlNFQ1RJT05fUEFSQU1FVEVSXSkgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLkFOZXRUcmFuc2FjdGlvbklkID0gJGxvY2F0aW9uLnNlYXJjaCgpW0ZpbmFuY2VzUm91dGVyLkFORVRfVFJBTlNBQ1RJT05fSURfUEFSQU1dIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQgPSAkbG9jYXRpb24uc2VhcmNoKClbQ291cnNlc1JvdXRlci5WSUxUX1NFU1NJT05TX0FVVE9fUkVHSVNURVJfUkVRVUlSRURdIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb2ZpbGVTdXBwb3J0TGluayA9IGxvY2F0aW9uLmhyZWYuc3BsaXQoJy8jJylbMF0gKyAnLyMnICsgcGVyc29uYWxSb3V0ZXIuc3VwcG9ydFVybCgpO1xyXG5cclxuICAgICAgICBsZXQgbWVudUl0ZW1LZXk6IHN0cmluZyA9IE1lbnVIZWxwZXIuZ2V0Q3VycmVudE1lbnVJdGVtS2V5KCk7XHJcbiAgICAgICAgaWYgKCFtZW51SXRlbUtleSB8fCBtZW51SXRlbUtleS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBtZW51OiBzdHJpbmcgPSBNZW51SGVscGVyLkNBVEFMT0dfTUVOVV9LRVk7XHJcbiAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKG1lbnUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkUHJvZHVjdCgpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBiYXNlRG9tYWluID0gJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiOi8vXCIpWzBdICsgXCI6Ly9cIiArICR3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIjovL1wiKVsxXS5zcGxpdChcIi9cIilbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoJHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoXCJjbGllbnRcIikgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZURvbWFpbiArPSBcIi9jbGllbnRcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoXCJhcHAuaHRtbFwiKSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBiYXNlRG9tYWluICs9IFwiL2FwcC5odG1sXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFOZXRJZnJhbWVDb21tdW5pY2F0b3IgPSBiYXNlRG9tYWluICsgZmluYW5jZXNSb3V0ZXIucHJvZHVjdEFOZXRDb21tdW5pY2F0b3JVcmwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYU5ldElmcmFtZUNvbW11bmljYXRvciA9IGZpbmFuY2VzUm91dGVyLmdldFByb2R1Y3RBTmV0Q29tbXVuaWNhdG9yVXJsQnlVcmwoJHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tQdXJjaGFzaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5idXNpbmVzc1VuaXRJZCA9IHRoaXMucHJvZHVjdC5idXNpbmVzc1VuaXRJZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFByb2R1Y3RQZXJtaXNzaW9ucyh0aGlzLnByb2R1Y3RJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocHJvZHVjdFBlcm1pc3Npb24gPT4gdGhpcy5pc0FsbG93ZWRFZGl0aW5nID0gcHJvZHVjdFBlcm1pc3Npb24uZWRpdCk7XHJcbiAgICAgICAgICAgIGlmICghYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0xvZ09uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRQcm9kdWN0KCk6IGFuZ3VsYXIuSVByb21pc2U8SVByb2R1Y3Q+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wdXJjaGFzZVNlcnZpY2UuZ2V0UHJvZHVjdCh0aGlzLnByb2R1Y3RJZClcclxuICAgICAgICAgICAgLnRoZW4oKHByb2R1Y3Q6IElQcm9kdWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3QgPSBhbmd1bGFyLmNvcHkocHJvZHVjdCk7XHJcbiAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcih0aGlzLnByb2R1Y3QubmFtZSkudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3QuY291cnNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdC5jb3Vyc2VzLmZvckVhY2goKGNvdXJzZTogSUNvdXJzZVByb2R1Y3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlLm9iamVjdFR5cGUgPSAnQ09VUlNFJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2Uuc3RhcnREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShjb3Vyc2Uuc3RhcnREYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlLmVuZERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKGNvdXJzZS5lbmREYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3QubGVhcm5pbmdQYXRocykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBsZWFybmluZ1BhdGhzQ291cnNlc01hcCA9IG5ldyBNYXAoKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdC5sZWFybmluZ1BhdGhzLmZvckVhY2goKGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWFybmluZ1BhdGguc3RhcnREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShsZWFybmluZ1BhdGguc3RhcnREYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVhcm5pbmdQYXRoLmVuZERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKGxlYXJuaW5nUGF0aC5lbmREYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVhcm5pbmdQYXRoLmRlcGVuZENvdXJzZXMuZm9yRWFjaCgoY291cnNlOiBJTGVhcm5pbmdQYXRoQ291cnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucHJvZHVjdC5sZWFybmluZ1BhdGhDb3Vyc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0LmxlYXJuaW5nUGF0aENvdXJzZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZS5vYmplY3RUeXBlID0gJ0xQX0NPVVJTRSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXJuaW5nUGF0aHNDb3Vyc2VzTWFwLnNldChjb3Vyc2UudG9waWMsIGNvdXJzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBsZWFybmluZ1BhdGhzQ291cnNlc01hcC5mb3JFYWNoKGNvdXJzZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdC5sZWFybmluZ1BhdGhDb3Vyc2VzLnB1c2goY291cnNlKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNvdXJzZXNNYXAgPSBuZXcgTWFwKClcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3QuY291cnNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdC5jb3Vyc2VzLm1hcChlbGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlc01hcC5zZXQoZWxlbS5pZCwgZWxlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3QubGVhcm5pbmdQYXRoQ291cnNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdC5sZWFybmluZ1BhdGhDb3Vyc2VzLm1hcChlbGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NPYmplY3RzLnB1c2goZWxlbSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlc01hcC5kZWxldGUoZWxlbS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3QuY291cnNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3Vyc2VzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0LmNvdXJzZXMubWFwKChjb3Vyc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdXJzZXNNYXAuZ2V0KGNvdXJzZS5pZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZXMucHVzaChjb3Vyc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGNvdXJzZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5zdGFydERhdGUgPiBiLnN0YXJ0RGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5zdGFydERhdGUgPCBiLnN0YXJ0RGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS50b3BpYyA+IGIudG9waWMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS50b3BpYyA8IGIudG9waWMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkubWFwKChjb3Vyc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NPYmplY3RzLnB1c2goY291cnNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBtYXRlcmlhbHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3QubWF0ZXJpYWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0Lm1hdGVyaWFscy5tYXAoZWxlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFscy5wdXNoKGVsZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEudGl0bGUgPiBiLnRpdGxlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnRpdGxlIDwgYi50aXRsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkubWFwKChtYXRlcmlhbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzc09iamVjdHMucHVzaChtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RW5yb2xsbWVudENvbmZpZ0ZvckNvdXJzZXMoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblByb2R1Y3RJdGVtU2VsZWN0ZWQodGhpcy5nZXRUeXBlKHRoaXMuYWNjZXNzT2JqZWN0c1swXSksIHRoaXMuYWNjZXNzT2JqZWN0c1swXS5pZClcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3Q7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gNDAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuZmluYW5jZXNSb3V0ZXIucHJvZHVjdHNDYXRhbG9nVXJsKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RW5yb2xsbWVudENvbmZpZ0ZvckNvdXJzZXMoKSB7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NPYmplY3RzLm1hcCgoZWxlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLmdldFR5cGUoZWxlbSlcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFXVxyXG4gICAgICAgICAgICAgICAgfHwgdHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5MUF9DT1VSU0VdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0Q291cnNlRm9yUHJvZHVjdChlbGVtLmlkKS50aGVuKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc3RhcnREYXRlID0gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKHJlcy5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmVuZERhdGUgPSB0aGlzLmdldEZvcm1hdHRlZERhdGUocmVzLmVuZERhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldEVucm9sbG1lbnRDb25maWd1cmF0aW9uRm9yQ291cnNlKGVsZW0uaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5pc0FsbG93TmV3RW5yb2xsbWVudHMgPSByZXN1bHQuaXNBbGxvd05ld0Vucm9sbG1lbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmVucm9sbENvbmZpZyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFRvdGFsVXNlZFNlYXRzRm9yQ291cnNlKGVsZW0uaWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uaXNBdmFpbGFibGVCeU1heEVucm9sbG1lbnRzID0gIWVsZW0uZW5yb2xsQ29uZmlnLm1heEVucm9sbG1lbnQgfHwgZWxlbS5lbnJvbGxDb25maWcubWF4RW5yb2xsbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVsZW0uZW5yb2xsQ29uZmlnLm1heEVucm9sbG1lbnQgPiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldExhbmRpbmdQYWdlKGVsZW0uaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmxhbmRpbmdQYWdlID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnNob3dMYWJlbHMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc21hcnRCdXR0b25zUGF5cGFsKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldFBheVBhbENsaWVudElkKHRoaXMucHJvZHVjdC5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU2NyaXB0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsaWVudElkID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkluY29ycmVjdCBzeXN0ZW0gcHVyY2hhc2Ugc2V0dGluZ3MuIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci5cIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlU2NyaXB0KGNsaWVudElkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwYXlwYWxfc2NyaXB0XCIpKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwYXlwYWxfc2NyaXB0XCIpO1xyXG4gICAgICAgICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XHJcbiAgICAgICAgc2NyaXB0RWxlbWVudC5pZCA9IFwicGF5cGFsX3NjcmlwdFwiO1xyXG5cclxuICAgICAgICBpZiAoISF0aGlzLnByb2R1Y3Quc3Vic2NyaXB0aW9uUGxhbklkKSB7XHJcbiAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQuc3JjID0gXCJodHRwczovL3d3dy5wYXlwYWwuY29tL3Nkay9qcz9jbGllbnQtaWQ9XCIgKyBjbGllbnRJZCArIFwiJnZhdWx0PXRydWUmaW50ZW50PXN1YnNjcmlwdGlvblwiO1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KTtcclxuICAgICAgICAgICAgc2NyaXB0RWxlbWVudC5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWJzY3JpcHRpb25CdXR0b25zKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2NyaXB0RWxlbWVudC5zcmMgPSBcImh0dHBzOi8vd3d3LnBheXBhbC5jb20vc2RrL2pzP2NsaWVudC1pZD1cIiArIGNsaWVudElkO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICBzY3JpcHRFbGVtZW50Lm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0J1dHRvbnMoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFR5cGUob2JqZWN0OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBvYmplY3Qub2JqZWN0VHlwZSA/IG9iamVjdC5vYmplY3RUeXBlIDogJ0NPVVJTRSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWQob2JqZWN0OiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENvdXJzZSA9PSBvYmplY3QgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hdGVyaWFsID09IG9iamVjdCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGVhcm5pbmdQYXRoQ291cnNlID09IG9iamVjdCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGVhcm5pbmdQYXRoID09IG9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dTdWJzY3JpcHRpb25CdXR0b25zKCkge1xyXG4gICAgICAgIHBheXBhbC5CdXR0b25zKHtcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnc3Vic2NyaWJlJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjcmVhdGVTdWJzY3JpcHRpb246IChkYXRhLCBhY3Rpb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBhY3Rpb25zLnN1YnNjcmlwdGlvbi5jcmVhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICdwbGFuX2lkJzogdGhpcy5wcm9kdWN0LnN1YnNjcmlwdGlvblBsYW5JZFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZS50aGVuKChzdWJzY3JpcHRpb25JZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXlQYWxTZXJ2aWNlLmNyZWF0ZVN1YnNjcmlwdGlvblB1cmNoYXNlT3JkZXIodGhpcy5wcm9kdWN0SWQsIHN1YnNjcmlwdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkFwcHJvdmU6IChkYXRhLCBhY3Rpb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF5UGFsU2VydmljZS5hcHByb3ZlU3Vic2NyaXB0aW9uKHRoaXMucHJvZHVjdElkLCBkYXRhLnN1YnNjcmlwdGlvbklEKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChwdXJjaGFzZWRPcmRlcklkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuZmluYW5jZXNSb3V0ZXIucHVyY2hhc2VkUHJvZHVjdFVybChwdXJjaGFzZWRPcmRlcklkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIkdvIHRvICdNeSBwdXJjaGFzZXMnIGluIHlvdXIgcHJvZmlsZSwgaWYgdGhlIHN1YnNjcmlwdGlvbiBkb2VzIG5vdCBhcHBlYXIgdGhlcmUgaW4gNSBtaW51dGVzLCB0aGVuIGNvbnRhY3QgdGhlIHN1cHBvcnQgc2VydmljZVwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJXYXJuaW5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHB1cmNoYXNlIHByb2R1Y3QuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkucmVuZGVyKCcjcGF5cGFsLWJ1dHRvbi1jb250YWluZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dCdXR0b25zKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBwYXlwYWwuQnV0dG9ucyh7XHJcbiAgICAgICAgICAgIGNyZWF0ZU9yZGVyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXlQYWxTZXJ2aWNlLmNyZWF0ZU9yZGVyU21hcnQodGhpcy5wcm9kdWN0SWQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkFwcHJvdmU6IChkYXRhLCBhY3Rpb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBzID0gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVySUQ6IGRhdGEub3JkZXJJRFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF5UGFsU2VydmljZS5jb25maXJtT3JkZXJTbWFydChzKS50aGVuKChwdXJjaGFzZWRPcmRlcklkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXJjaGFzaW5nQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5maW5hbmNlc1JvdXRlci5wdXJjaGFzZWRQcm9kdWN0VXJsKHB1cmNoYXNlZE9yZGVySWQpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJZb3VyIGNyZWRpdCBjYXJkIG9yIFBheVBhbCBhY2NvdW50IGhhcyBub3QgYmVlbiBjaGFyZ2VkLiBQbGVhc2UgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRGdWxsQ291cnNlcyh0aGlzLnByb2R1Y3RJZClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoY291cnNlcykgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3JXaXRoUmVmKGA8cD5QdXJjaGFzZSwgZnJvbSB0aGUgcHJvZHVjdCBwYWdlIGlzIG5vdCBhdmFpbGFibGUuPC9wPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+JHtjb3Vyc2VzWzBdLnRvcGljfTwvcD4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkNvdXJzZSBzZXR0aW5ncyBkbyBub3QgYWxsb3cgcHVyY2hhc2VzIGZyb20gdGhlIHByb2R1Y3QgcGFnZS4gUGxlYXNlIGdvIHRvIHRoZSBjb3Vyc2UgcGFnZSA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWYgPSBcIiR7dGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVswXSArICcjJyArIHRoaXMuY291cnNlc1JvdXRlci5kZXRhaWxzVXJsKGNvdXJzZXNbMF0uaWQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCcjJylbMF0gKyAnIycgKyB0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybChjb3Vyc2VzWzBdLmlkKX08L2E+YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5yZW5kZXIoJyNwYXlwYWwtYnV0dG9uLWNvbnRhaW5lcicpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVhY3RpdmF0ZU1haW5Db250ZW50KCkge1xyXG4gICAgICAgIGxldCBtYWluRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXYjbWFpbkNvbnRlbnRcIik7XHJcbiAgICAgICAgbGV0IG1haW5Mb2FkaW5nRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXYjbWFpbkNvbnRlbnRMb2FkaW5nXCIpO1xyXG4gICAgICAgIG1haW5FbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgbWFpbkxvYWRpbmdFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZU1haW5Db250ZW50KCkge1xyXG4gICAgICAgIGxldCBtYWluRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXYjbWFpbkNvbnRlbnRcIik7XHJcbiAgICAgICAgbGV0IG1haW5Mb2FkaW5nRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXYjbWFpbkNvbnRlbnRMb2FkaW5nXCIpO1xyXG4gICAgICAgIG1haW5FbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgbWFpbkxvYWRpbmdFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9Mb2dPbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5yZWRpcmVjdFRvTG9nT24oUmVkaXJlY3RSZWFzb24uTE9HT05fUkVRVUlSRUQsIHRoaXMucHJvZHVjdC5idXNpbmVzc1VuaXRJZCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tQdXJjaGFzaW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHVyY2hhc2VTZXJ2aWNlLmNoZWNrT3JkZXIodGhpcy5wcm9kdWN0LmlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQdXJjaGFzZWQgPSByZXN1bHQucHVyY2hhc2VkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1B1cmNoYXNlZCAmJiB0aGlzLnZpbHRBdXRvUmVnaXN0ZXJSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJHb29kIG5ld3MhIFlvdSBhbHJlYWR5IGhhdmUgYW4gYWNjZXNzLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ291cnNlIGFscmVhZHkgYXZhaWxhYmxlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSArIFwiIy9ob21lL2xlYXJuaW5nUGF0aHM/cm9sZT1MRUFSTkVSXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0F1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3QucHJpY2UgIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuY2hlY2tQYXlQYWxDb3JyZWN0RGF0YSh0aGlzLnByb2R1Y3QuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdFBheVBhbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0UGF5UGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1B1cmNoYXNpbmdQYXlQYWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuY2hlY2tBdXRob3JpemVOZXRDb3JyZWN0RGF0YSh0aGlzLnByb2R1Y3QuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0QU5ldCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRBTmV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQU5ldENvbmZpZ3VyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRBdXRob3JpemVOZXRFbnZpcm9ubWVudFR5cGUodGhpcy5wcm9kdWN0LmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGNvbmZpZyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYU5ldFBvc3RVcmwgPSBjb25maWcudG9VcHBlckNhc2UoKSA9PT0gXCJTQU5EQk9YXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJodHRwczovL3Rlc3QuYXV0aG9yaXplLm5ldC9wYXltZW50L3BheW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImh0dHBzOi8vYWNjZXB0LmF1dGhvcml6ZS5uZXQvcGF5bWVudC9wYXltZW50XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYWluRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJmb3JtI3NlbmRfaHB0b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYWN0aW9uXCIsIHRoaXMuYU5ldFBvc3RVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUHVyY2hhc2luZ0F1dGhvcml6ZU5ldCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0UGF5UGFsICYmICFyZXN1bHRBTmV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkluY29ycmVjdCBzeXN0ZW0gcHVyY2hhc2Ugc2V0dGluZ3MuIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tQdXJjaGFzaW5nRnJlZUVucm9sbCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXhwaXJhdGlvbkRhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uRGF0ZSA9IE1vbWVudC5pc1ZhbGlkRGF0ZShyZXN1bHQuZXhwaXJhdGlvbkRhdGUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrUHVyY2hhc2luZ1BheVBhbCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc1B1cmNoYXNlZCAmJiAhIXRoaXMucHJvZHVjdC5zdWJzY3JpcHRpb25QbGFuSWRcclxuICAgICAgICAgICAgfHwgISF0aGlzLnByb2R1Y3Quc3Vic2NyaXB0aW9uUGxhbklkICYmIHRoaXMucHJvZHVjdC5lbnJvbGxtZW50Q29uZmlndXJlZCkge1xyXG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IFZJTFRQcm9taXNlO1xyXG4gICAgICAgICAgICBsZXQgSUxUUHJvbWlzZTtcclxuICAgICAgICAgICAgbGV0IGNvdXJzZUlkcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9kdWN0LmNvdXJzZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvdXJzZUlkcyA9IHRoaXMucHJvZHVjdC5jb3Vyc2VzLm1hcChjID0+IGMuaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3QubGVhcm5pbmdQYXRoQ291cnNlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0LmxlYXJuaW5nUGF0aENvdXJzZXMuZm9yRWFjaChsYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zKGNvdXJzZUlkcywgbGMuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZUlkcy5wdXNoKGxjLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQgJiYgdGhpcy5jb3Vyc2VJZCAmJiB0aGlzLnNlY3Rpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbnMoY291cnNlSWRzLCB0aGlzLmNvdXJzZUlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIFZJTFRQcm9taXNlID0gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFNlc3Npb25zVmlsdExpc3QodGhpcy5jb3Vyc2VJZCwgdGhpcy5zZWN0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIElMVFByb21pc2UgPSB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0U2Vzc2lvbnNJbHRMaXN0KHRoaXMuY291cnNlSWQsIHRoaXMuc2VjdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRXJyb3JEaWFsb2coJ1BsZWFzZSBjb250YWN0IGFkbWluaXN0cmF0b3IsIHNlc3Npb25zIGFyZSBub3QgZm91bmQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpbHRBdXRvUmVnaXN0ZXJSZXF1aXJlZCAmJiB0aGlzLmNvdXJzZUlkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWlucyhjb3Vyc2VJZHMsIHRoaXMuY291cnNlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgVklMVFByb21pc2UgPSB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0VklMVFNlc3Npb25zRm9yQ291cnNlKHRoaXMuY291cnNlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIElMVFByb21pc2UgPSB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0SUxUU2Vzc2lvbnNGb3JDb3Vyc2UodGhpcy5jb3Vyc2VJZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVycm9yRGlhbG9nKCdQbGVhc2UgY29udGFjdCBhZG1pbmlzdHJhdG9yLCBzZXNzaW9ucyBhcmUgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQgJiYgdGhpcy5zZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgIFZJTFRQcm9taXNlID0gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFNlc3Npb25zVmlsdExpc3RGb3JDb3Vyc2VzKHRoaXMuc2VjdGlvbklkLCBjb3Vyc2VJZHMpO1xyXG4gICAgICAgICAgICAgICAgSUxUUHJvbWlzZSA9IHRoaXMuY291cnNlU2VydmljZS5nZXRTZXNzaW9uc0lsdExpc3RGb3JDb3Vyc2VzKHRoaXMuc2VjdGlvbklkLCBjb3Vyc2VJZHMpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlsdEF1dG9SZWdpc3RlclJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBheW1lbnRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIFZJTFRQcm9taXNlID0gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFZJTFRTZXNzaW9uc0ZvckNvdXJzZShjb3Vyc2VJZHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgSUxUUHJvbWlzZSA9IHRoaXMuY291cnNlU2VydmljZS5nZXRJTFRTZXNzaW9uc0ZvckNvdXJzZShjb3Vyc2VJZHNbMF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChWSUxUUHJvbWlzZSB8fCBJTFRQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICBWSUxUUHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5WSUxUU2Vzc2lvbnNUb0J1eSA9ICF0aGlzLnBheW1lbnRPbmx5ID8gcmVzdWx0LmZpbHRlcih2ID0+IHYuc3RhdHVzID09PSBcIlNDSEVEVUxFRFwiIHx8IHYuc3RhdHVzID09PSBcIk9OR09JTkdcIikgOiBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlZJTFRTZXNzaW9uc1RvQnV5Lm1hcChzZXNzaW9uID0+IHNlc3Npb24udGl0bGUpLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGFpbnModGhpcy5WSUxUU2VjdGlvbnMsIGVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5WSUxUU2VjdGlvbnMucHVzaChlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGVkVklMVFNlc3Npb25zID0gdGhpcy5WSUxUU2Vzc2lvbnNUb0J1eS5maWx0ZXIociA9PiByLnRpdGxlID09IHRoaXMuVklMVFNlY3Rpb25zW3RoaXMuc2VsZWN0ZWRWSUxUUGFnZS0xXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIElMVFByb21pc2UudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLklMVFNlc3Npb25zVG9CdXkgPSAhdGhpcy5wYXltZW50T25seSA/IHJlc3VsdC5maWx0ZXIodiA9PiB2LnN0YXR1cyA9PT0gXCJTQ0hFRFVMRURcIikgOiBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5JTFRTZXNzaW9uc1RvQnV5Lm1hcChzZXNzaW9uID0+IHNlc3Npb24udGl0bGUpLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zKHRoaXMuSUxUU2VjdGlvbnMsIGVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuSUxUU2VjdGlvbnMucHVzaChlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGVkSUxUU2Vzc2lvbnMgPSB0aGlzLklMVFNlc3Npb25zVG9CdXkuZmlsdGVyKHIgPT4gci50aXRsZSA9PSB0aGlzLklMVFNlY3Rpb25zW3RoaXMuc2VsZWN0ZWRJTFRQYWdlIC0gMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5JTFRTZXNzaW9uc1RvQnV5Lmxlbmd0aCA9PSAwICYmIHRoaXMuVklMVFNlc3Npb25zVG9CdXkubGVuZ3RoID09IDAgJiYgIXRoaXMucGF5bWVudE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVycm9yRGlhbG9nKCdQbGVhc2UgY29udGFjdCBhZG1pbmlzdHJhdG9yLCBzZXNzaW9ucyBhcmUgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzRXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFydEJ1dHRvbnNQYXlwYWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc21hcnRCdXR0b25zUGF5cGFsKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1B1cmNoYXNpbmdBdXRob3JpemVOZXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUHVyY2hhc2VkICYmICEhdGhpcy5wcm9kdWN0LnN1YnNjcmlwdGlvblBsYW5JZFxyXG4gICAgICAgICAgICAgICAgfHwgISF0aGlzLnByb2R1Y3Quc3Vic2NyaXB0aW9uUGxhbklkICYmIHRoaXMucHJvZHVjdC5lbnJvbGxtZW50Q29uZmlndXJlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuQU5ldFRyYW5zYWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhvcml6ZU5ldFNlcnZpY2UuY29uZmlybU9yZGVyKHRoaXMuQU5ldFRyYW5zYWN0aW9uSWQsIHRoaXMucHJvZHVjdC5pZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUHVyY2hhc2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpbHRBdXRvUmVnaXN0ZXJSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVyY2hhc2luZ0NhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmZpbmFuY2VzUm91dGVyLnB1cmNoYXNlZFByb2R1Y3RVcmwocmVzdWx0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgdXJsLmluZGV4T2YoXCI/XCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UodXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhvcml6ZU5ldFNlcnZpY2UuZ2V0VG9rZW4odGhpcy5idXNpbmVzc1VuaXRJZCwgdGhpcy5wcm9kdWN0LnByaWNlLCB0aGlzLmFOZXRJZnJhbWVDb21tdW5pY2F0b3IsIHRoaXMucHJvZHVjdC5pZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFOZXRUb2tlbiA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IFZJTFRQcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgSUxUUHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdXJzZUlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9kdWN0LmNvdXJzZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZUlkcyA9IHRoaXMucHJvZHVjdC5jb3Vyc2VzLm1hcChjID0+IGMuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3QubGVhcm5pbmdQYXRoQ291cnNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0LmxlYXJuaW5nUGF0aENvdXJzZXMuZm9yRWFjaChsYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zKGNvdXJzZUlkcywgbGMuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZUlkcy5wdXNoKGxjLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQgJiYgdGhpcy5jb3Vyc2VJZCAmJiB0aGlzLnNlY3Rpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbnMoY291cnNlSWRzLCB0aGlzLmNvdXJzZUlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJTFRQcm9taXNlID0gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFNlc3Npb25zVmlsdExpc3QodGhpcy5jb3Vyc2VJZCwgdGhpcy5zZWN0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElMVFByb21pc2UgPSB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0U2Vzc2lvbnNJbHRMaXN0KHRoaXMuY291cnNlSWQsIHRoaXMuc2VjdGlvbklkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRXJyb3JEaWFsb2coJ1BsZWFzZSBjb250YWN0IGFkbWluaXN0cmF0b3IsIHNlc3Npb25zIGFyZSBub3QgZm91bmQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpbHRBdXRvUmVnaXN0ZXJSZXF1aXJlZCAmJiB0aGlzLmNvdXJzZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWlucyhjb3Vyc2VJZHMsIHRoaXMuY291cnNlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklMVFByb21pc2UgPSB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0VklMVFNlc3Npb25zRm9yQ291cnNlKHRoaXMuY291cnNlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElMVFByb21pc2UgPSB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0SUxUU2Vzc2lvbnNGb3JDb3Vyc2UodGhpcy5jb3Vyc2VJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVycm9yRGlhbG9nKCdQbGVhc2UgY29udGFjdCBhZG1pbmlzdHJhdG9yLCBzZXNzaW9ucyBhcmUgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQgJiYgdGhpcy5zZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJTFRQcm9taXNlID0gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFNlc3Npb25zVmlsdExpc3RGb3JDb3Vyc2VzKHRoaXMuc2VjdGlvbklkLCBjb3Vyc2VJZHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSUxUUHJvbWlzZSA9IHRoaXMuY291cnNlU2VydmljZS5nZXRTZXNzaW9uc0lsdExpc3RGb3JDb3Vyc2VzKHRoaXMuc2VjdGlvbklkLCBjb3Vyc2VJZHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlsdEF1dG9SZWdpc3RlclJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBheW1lbnRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJTFRQcm9taXNlID0gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFZJTFRTZXNzaW9uc0ZvckNvdXJzZShjb3Vyc2VJZHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSUxUUHJvbWlzZSA9IHRoaXMuY291cnNlU2VydmljZS5nZXRJTFRTZXNzaW9uc0ZvckNvdXJzZShjb3Vyc2VJZHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZJTFRQcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVklMVFNlc3Npb25zVG9CdXkgPSAhdGhpcy5wYXltZW50T25seSA/IHJlc3VsdC5maWx0ZXIodiA9PiB2LnN0YXR1cyA9PT0gXCJTQ0hFRFVMRURcIiB8fCB2LnN0YXR1cyA9PT0gXCJPTkdPSU5HXCIpIDogW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlZJTFRTZXNzaW9uc1RvQnV5Lm1hcChzZXNzaW9uID0+IHNlc3Npb24udGl0bGUpLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250YWlucyh0aGlzLlZJTFRTZWN0aW9ucywgZWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVklMVFNlY3Rpb25zLnB1c2goZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRlZFZJTFRTZXNzaW9ucyA9IHRoaXMuVklMVFNlc3Npb25zVG9CdXkuZmlsdGVyKHIgPT4gci50aXRsZSA9PSB0aGlzLlZJTFRTZWN0aW9uc1t0aGlzLnNlbGVjdGVkVklMVFBhZ2UtMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSUxUUHJvbWlzZS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5JTFRTZXNzaW9uc1RvQnV5ID0gIXRoaXMucGF5bWVudE9ubHkgPyByZXMuZmlsdGVyKHYgPT4gdi5zdGF0dXMgPT09IFwiU0NIRURVTEVEXCIpIDogW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5JTFRTZXNzaW9uc1RvQnV5Lm1hcChzZXNzaW9uID0+IHNlc3Npb24udGl0bGUpLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGFpbnModGhpcy5JTFRTZWN0aW9ucywgZWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLklMVFNlY3Rpb25zLnB1c2goZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRlZElMVFNlc3Npb25zID0gdGhpcy5JTFRTZXNzaW9uc1RvQnV5LmZpbHRlcihyID0+IHIudGl0bGUgPT0gdGhpcy5JTFRTZWN0aW9uc1t0aGlzLnNlbGVjdGVkSUxUUGFnZSAtIDFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5WSUxUU2Vzc2lvbnNUb0J1eS5sZW5ndGggPT0gMCAmJiB0aGlzLklMVFNlc3Npb25zVG9CdXkubGVuZ3RoID09IDAgJiYgIXRoaXMucGF5bWVudE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRXJyb3JEaWFsb2coJ1BsZWFzZSBjb250YWN0IGFkbWluaXN0cmF0b3IsIHNlc3Npb25zIGFyZSBub3QgZm91bmQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IDxIVE1MRWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VuZF9ocHRva2VuX3N1Ym1pdF9idG4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkKCcjYXV0aG9yaXplTmV0TW9kYWwnKS5oYXNDbGFzcygnc2hvdycpICYmICEkKCcjYXV0aG9yaXplTmV0TW9kYWwnKS5oYXNDbGFzcygnaW4nKSAmJiAhdGhpcy5oYXNFcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuQXV0aG9yaXplTmV0RGlhbG9nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5FcnJvckRpYWxvZyhtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5oYXNFcnJvcnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgdGl0bGU6ICdTZXNzaW9ucyBhcmUgbm90IGZvdW5kJyxcclxuICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZVxyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdXJsID0gdGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKVswXTtcclxuICAgICAgICAgICAgdGhpcy4kd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodXJsKTtcclxuICAgICAgICAgICAgdGhpcy4kd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG9uUHJvZHVjdEl0ZW1TZWxlY3RlZChyZWZlcmVuY2VkT2JqZWN0VHlwZTogc3RyaW5nLCBvYmplY3RJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1hdGVyaWFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ291cnNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTGVhcm5pbmdQYXRoID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTGVhcm5pbmdQYXRoQ291cnNlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHJlZmVyZW5jZWRPYmplY3RUeXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLk1BVEVSSUFMXSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWF0ZXJpYWwgPSB0aGlzLnByb2R1Y3QubWF0ZXJpYWxzLmZpbHRlcihtID0+IG0uaWQgPT0gb2JqZWN0SWQpWzBdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlZE9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFXSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ291cnNlID0gdGhpcy5wcm9kdWN0LmNvdXJzZXMuZmlsdGVyKGMgPT4gYy5pZCA9PSBvYmplY3RJZClbMF07XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2VkT2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5MRUFSTklOR19QQVRIXSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGVhcm5pbmdQYXRoID0gdGhpcy5wcm9kdWN0LmxlYXJuaW5nUGF0aHMuZmlsdGVyKGwgPT4gbC5pZCA9PSBvYmplY3RJZClbMF07XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2VkT2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5MUF9DT1VSU0VdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMZWFybmluZ1BhdGhDb3Vyc2UgPSB0aGlzLnByb2R1Y3QubGVhcm5pbmdQYXRoQ291cnNlcy5maWx0ZXIoYyA9PiBjLmlkID09IG9iamVjdElkKVswXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnRhaW5zKGFycmF5OiBBcnJheTxhbnk+LCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGEgaW4gYXJyYXkpIHtcclxuICAgICAgICAgICAgaWYgKGFycmF5W2FdID09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY2hlY2tvdXQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5hdXRoTWFuYWdlci5nZXRDdXJyZW50VXNlcigpLmlkKVxyXG5cclxuICAgICAgICB0aGlzLmRpc2FibGVDaGVja291dEJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYXlQYWxTZXJ2aWNlLmNyZWF0ZU9yZGVyKHRoaXMucHJvZHVjdElkKVxyXG4gICAgICAgICAgICAudGhlbigob3JkZXJBcHByb3ZlVXJsOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5vcGVuKG9yZGVyQXBwcm92ZVVybCwgXCJfc2VsZlwiKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiSW5jb3JyZWN0IHN5c3RlbSBwdXJjaGFzZSBzZXR0aW5ncy4gUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLlwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNoZWNrb3V0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuQXV0aG9yaXplTmV0RGlhbG9nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFOZXRUb2tlbiAmJiB0aGlzLmFOZXRUb2tlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICQoXCIjYXV0aG9yaXplTmV0TW9kYWxcIikubW9kYWwoe1xyXG4gICAgICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0RnVsbENvdXJzZXModGhpcy5wcm9kdWN0SWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoY291cnNlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yV2l0aFJlZihgPHA+UHVyY2hhc2UsIGZyb20gdGhlIHByb2R1Y3QgcGFnZSBpcyBub3QgYXZhaWxhYmxlLjwvcD4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPiR7Y291cnNlc1swXS50b3BpY308L3A+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5Db3Vyc2Ugc2V0dGluZ3MgZG8gbm90IGFsbG93IHB1cmNoYXNlcyBmcm9tIHRoZSBwcm9kdWN0IHBhZ2UuIFBsZWFzZSBnbyB0byB0aGUgY291cnNlIHBhZ2UgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmID0gXCIke3RoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCcjJylbMF0gKyAnIycgKyB0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybChjb3Vyc2VzWzBdLmlkKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnIycpWzBdICsgJyMnICsgdGhpcy5jb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwoY291cnNlc1swXS5pZCl9PC9hPmApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkYXRlVG9UaW1lWm9uZURhdGUodGltZVpvbmU6IGFueSwgZGF0ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgb2Zmc2V0O1xyXG4gICAgICAgIHRoaXMudGltZVpvbmUuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHQubmFtZSA9PSB0aW1lWm9uZSkge1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5nZXRUaW1lWm9uZU9mZnNldCh0LnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAoZGF0ZSArIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwIC0gb2Zmc2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRpbWVab25lT2Zmc2V0KHRpbWVab25lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGxldCBsb2NhbFRpbWU6IG51bWJlciA9IE1hdGguZmxvb3IoKG5vdy5nZXRUaW1lKCkgLyAxMDAwKSkgKiAxMDAwO1xyXG4gICAgICAgIGxldCB0aW1lWm9uZVRpbWU6IG51bWJlciA9IG5ldyBEYXRlKG5vdy50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHt0aW1lWm9uZTogdGltZVpvbmV9KSkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHJldHVybiBub3cuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwICsgKGxvY2FsVGltZSAtIHRpbWVab25lVGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHB1cmNoYXNpbmdDYWxsYmFjaygpIHtcclxuICAgICAgICBpZiAodGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQgJiYgdGhpcy5jb3Vyc2VJZCAmJiB0aGlzLnNlY3Rpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmF1dG9SZWdpc3RlclRvQ291cnNlU2Vzc2lvbnModGhpcy5jb3Vyc2VJZCwgdGhpcy5zZWN0aW9uSWQpLnRoZW4ocmMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSArIGAjL2hvbWUvY291cnNlcz9yb2xlPUxFQVJORVJgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuYXV0b1JlZ2lzdGVyVG9Db3Vyc2VJTFRTZXNzaW9ucyh0aGlzLmNvdXJzZUlkLCB0aGlzLnNlY3Rpb25JZCkudGhlbihyYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSArIGAjL2hvbWUvY291cnNlcz9yb2xlPUxFQVJORVJgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh1cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcignUGxlYXNlIGNvbnRhY3QgYWRtaW5pc3RyYXRvciwgc2Vzc2lvbnMgYXJlIG5vdCBmb3VuZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlsdEF1dG9SZWdpc3RlclJlcXVpcmVkICYmIHRoaXMuY291cnNlSWQgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5hdXRvUmVnaXN0ZXJUb0FsbENvdXJzZVNlc3Npb25zKHRoaXMuY291cnNlSWQpLnRoZW4oKHZpbHRSZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5hdXRvUmVnaXN0ZXJUb0FsbENvdXJzZUlMVFNlc3Npb25zKHRoaXMuY291cnNlSWQpLnRoZW4oKGlsdFJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWx0UmVzICsgaWx0UmVzID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCIjXCIpWzBdICsgYCMvaG9tZS9jb3Vyc2VzP3JvbGU9TEVBUk5FUmA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh1cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKCdQbGVhc2UgY29udGFjdCBhZG1pbmlzdHJhdG9yLCBzZXNzaW9ucyBhcmUgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQgJiYgdGhpcy5zZWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgbGV0IGNvdXJzZUlkcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9kdWN0LmNvdXJzZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvdXJzZUlkcyA9IHRoaXMucHJvZHVjdC5jb3Vyc2VzLm1hcChjID0+IGMuaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3QubGVhcm5pbmdQYXRoQ291cnNlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0LmxlYXJuaW5nUGF0aENvdXJzZXMuZm9yRWFjaChsYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zKGNvdXJzZUlkcywgbGMuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZUlkcy5wdXNoKGxjLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuYXV0b1JlZ2lzdGVyVG9TZWN0aW9uU2Vzc2lvbnNCeVNlY3Rpb25JZCh0aGlzLnNlY3Rpb25JZCwgY291cnNlSWRzKS50aGVuKHZpbHRSZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmF1dG9SZWdpc3RlclRvSUxUU2VjdGlvblNlc3Npb25zQnlTZWN0aW9uSWQodGhpcy5zZWN0aW9uSWQsIGNvdXJzZUlkcykudGhlbihpbHRSZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWx0UmVzICsgaWx0UmVzID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCIjXCIpWzBdICsgYCMvaG9tZS9jb3Vyc2VzP3JvbGU9TEVBUk5FUmA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh1cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKCdQbGVhc2UgY29udGFjdCBhZG1pbmlzdHJhdG9yLCBzZXNzaW9ucyBhcmUgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0gKyBgIy9ob21lL2NvdXJzZXM/cm9sZT1MRUFSTkVSYDtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh1cmwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29Ub1ZJTFRQYWdlKHBhZ2VOdW1iZXI6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVklMVFBhZ2UgIT0gcGFnZU51bWJlciAmJiBwYWdlTnVtYmVyID49IDEgJiYgcGFnZU51bWJlciA8IHRoaXMuVklMVFNlY3Rpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVklMVFBhZ2UgPSBwYWdlTnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRlZFZJTFRTZXNzaW9ucyA9IHRoaXMuVklMVFNlc3Npb25zVG9CdXkuZmlsdGVyKHIgPT4gci50aXRsZSA9PSB0aGlzLlZJTFRTZWN0aW9uc1t0aGlzLnNlbGVjdGVkVklMVFBhZ2UgLSAxXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHBhZ2VOdW1iZXIgPCAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWSUxUUGFnZSA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGVkVklMVFNlc3Npb25zID0gdGhpcy5WSUxUU2Vzc2lvbnNUb0J1eS5maWx0ZXIociA9PiByLnRpdGxlID09IHRoaXMuVklMVFNlY3Rpb25zW3RoaXMuc2VsZWN0ZWRWSUxUUGFnZSAtIDFdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocGFnZU51bWJlciA+PSB0aGlzLlZJTFRTZWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZJTFRQYWdlID0gdGhpcy5WSUxUU2VjdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRlZFZJTFRTZXNzaW9ucyA9IHRoaXMuVklMVFNlc3Npb25zVG9CdXkuZmlsdGVyKHIgPT4gci50aXRsZSA9PSB0aGlzLlZJTFRTZWN0aW9uc1t0aGlzLnNlbGVjdGVkVklMVFBhZ2UgLSAxXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnb1RvSUxUUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElMVFBhZ2UgIT0gcGFnZU51bWJlciAmJiBwYWdlTnVtYmVyID49IDEgJiYgcGFnZU51bWJlciA8IHRoaXMuSUxUU2VjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJTFRQYWdlID0gcGFnZU51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0ZWRJTFRTZXNzaW9ucyA9IHRoaXMuSUxUU2Vzc2lvbnNUb0J1eS5maWx0ZXIociA9PiByLnRpdGxlID09IHRoaXMuSUxUU2VjdGlvbnNbdGhpcy5zZWxlY3RlZElMVFBhZ2UgLSAxXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHBhZ2VOdW1iZXIgPCAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJTFRQYWdlID0gMTtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0ZWRJTFRTZXNzaW9ucyA9IHRoaXMuSUxUU2Vzc2lvbnNUb0J1eS5maWx0ZXIociA9PiByLnRpdGxlID09IHRoaXMuSUxUU2VjdGlvbnNbdGhpcy5zZWxlY3RlZElMVFBhZ2UgLSAxXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHBhZ2VOdW1iZXIgPj0gdGhpcy5JTFRTZWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElMVFBhZ2UgPSB0aGlzLklMVFNlY3Rpb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0ZWRJTFRTZXNzaW9ucyA9IHRoaXMuSUxUU2Vzc2lvbnNUb0J1eS5maWx0ZXIociA9PiByLnRpdGxlID09IHRoaXMuSUxUU2VjdGlvbnNbdGhpcy5zZWxlY3RlZElMVFBhZ2UgLSAxXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tQdXJjaGFzaW5nRnJlZUVucm9sbCgpOiB2b2lkIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNQdXJjaGFzZWQgJiYgISF0aGlzLnByb2R1Y3Quc3Vic2NyaXB0aW9uUGxhbklkXHJcbiAgICAgICAgICAgICAgICB8fCAhIXRoaXMucHJvZHVjdC5zdWJzY3JpcHRpb25QbGFuSWQgJiYgdGhpcy5wcm9kdWN0LmVucm9sbG1lbnRDb25maWd1cmVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyZWVFbnJvbGxtZW50U2VydmljZS5jb25maXJtRnJlZUVucm9sbG1lbnQodGhpcy5wcm9kdWN0SWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5yb2xsRm9yRnJlZSgpIHtcclxuICAgICAgICBsZXQgYnVzaW5lc3NVbml0SWQgPSB0aGlzLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIGxldCBwcm9kdWN0SWQgPSB0aGlzLnByb2R1Y3QuaWQ7XHJcbiAgICAgICAgbGV0IHJldHVyblVybCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5mcmVlRW5yb2xsbWVudFNlcnZpY2UuY3JlYXRlT3JkZXIoe2J1c2luZXNzVW5pdElkLCBwcm9kdWN0SWQsIHJldHVyblVybH0pXHJcbiAgICAgICAgICAgIC50aGVuKChwcm9kdWN0SWQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmZpbmFuY2VzUm91dGVyLnB1cmNoYXNlZFByb2R1Y3RVcmwocHJvZHVjdElkKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCByZWdleDogUmVnRXhwID0gL2Vycm9yLm9yZGVyLmNyZWF0aW9uLmZhaWxlZC51c2VkLi9nbVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWdleC50ZXN0KHJlc3BvbnNlLmRhdGEuZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VOYW1lKHJlc3BvbnNlLmRhdGEuZXJyb3Iuc3BsaXQoXCJlcnJvci5vcmRlci5jcmVhdGlvbi5mYWlsZWQudXNlZC5cIilbMV0pLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90aWZpZXIuZXJyb3IoXCJFbnJvbGxtZW50IGZyb20gdGhlIHByb2R1Y3QgcGFnZSBpcyBub3QgYXZhaWxhYmxlLiAgXCIgKyByZXNwb25zZSArIFwiINChb3Vyc2Ugc2V0dGluZ3MgZG8gbm90IGFsbG93IGVucm9sbG1lbnQgZnJvbSB0aGUgcHJvZHVjdCBwYWdlLiBQbGVhc2UgZ28gdG8gdGhlIGNvdXJzZSBwYWdlLlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcldpdGhSZWYoYDxwPkVucm9sbG1lbnQgZnJvbSB0aGUgcHJvZHVjdCBwYWdlIGlzIG5vdCBhdmFpbGFibGUuIDwvcD4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JHtyZXNwb25zZX08L3A+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPtChb3Vyc2Ugc2V0dGluZ3MgZG8gbm90IGFsbG93IGVucm9sbG1lbnQgZnJvbSB0aGUgcHJvZHVjdCBwYWdlLiBQbGVhc2UgZ28gdG8gdGhlIGNvdXJzZSBwYWdlLjwvcD5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkluY29ycmVjdCBzeXN0ZW0gcHVyY2hhc2Ugc2V0dGluZ3MuIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNoZWNrb3V0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQmVmb3JlVG9kYXkoZW50cnk6IERhdGUpIHtcclxuICAgICAgICBsZXQgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIGVudHJ5LmdldFRpbWUoKSA/IGVudHJ5LmdldFRpbWUoKSA8IG5vdyA6IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERhdGUoZW50cnk6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShlbnRyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEZvcm1hdHRlZERhdGUoZW50cnk6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBlbnRyeVxyXG4gICAgICAgICAgICA/IG5ldyBEYXRlKGVudHJ5KS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIpLnNwbGl0KFwiLFwiKVswXVxyXG4gICAgICAgICAgICA6IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRvZGF5KCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01hdGVyaWFsKGVudHJ5KSB7XHJcbiAgICAgICAgcmV0dXJuICEhZW50cnkudXBsb2FkRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UHJvZHVjdFNpemUoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgY291cnNlIGluIHRoaXMucHJvZHVjdC5jb3Vyc2VzKVxyXG4gICAgICAgICAgICByZXN1bHQrKztcclxuICAgICAgICBmb3IgKGxldCBtYXRlcmlhbCBpbiB0aGlzLnByb2R1Y3QubWF0ZXJpYWxzKVxyXG4gICAgICAgICAgICByZXN1bHQrKztcclxuICAgICAgICBmb3IgKGxldCBsZWFybmluZ1BhdGggaW4gdGhpcy5wcm9kdWN0LmxlYXJuaW5nUGF0aENvdXJzZXMpXHJcbiAgICAgICAgICAgIHJlc3VsdCsrO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvdXJzZXNFbnJvbGxOb3RBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5wcm9kdWN0ICYmICEhdGhpcy5wcm9kdWN0LmVucm9sbG1lbnRDb25maWd1cmVkICYmIHRoaXMuYWNjZXNzT2JqZWN0cy5tYXAoKGVsZW0pID0+IHtcclxuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLmdldFR5cGUoZWxlbSlcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFXVxyXG4gICAgICAgICAgICAgICAgfHwgdHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5MUF9DT1VSU0VdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc0F2YWlsYWJsZUVucm9sbG1lbnQoZWxlbS5pc0F2YWlsYWJsZUJ5TWF4RW5yb2xsbWVudHMsIGVsZW0uZW5yb2xsQ29uZmlnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgcmV0dXJuIHRydWU7IH1cclxuICAgICAgICB9KS5maWx0ZXIoYiA9PiAhYikubGVuZ3RoICE9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0F2YWlsYWJsZUVucm9sbG1lbnQoaXNBdmFpbGFibGVCeU1heEVucm9sbG1lbnRzOiBib29sZWFuLCBlbnJvbGxtZW50Q29uZmlnOiBJRW5yb2xsbWVudENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIWVucm9sbG1lbnRDb25maWcgfHwgIWVucm9sbG1lbnRDb25maWcuaWQgfHwgKCEhZW5yb2xsbWVudENvbmZpZyAmJiAhIWVucm9sbG1lbnRDb25maWcuaWQgJiZcclxuICAgICAgICAgICAgKGVucm9sbG1lbnRDb25maWcuaXNBbGxvd05ld0Vucm9sbG1lbnRzICYmIGVucm9sbG1lbnRDb25maWcuaXNBbGxvd1NlbGZFbnJvbGxtZW50cyAmJiB0aGlzLmlzQXZhaWxhYmxlRm9yQ3VycmVudERhdGUoZW5yb2xsbWVudENvbmZpZylcclxuICAgICAgICAgICAgJiYgKGlzQXZhaWxhYmxlQnlNYXhFbnJvbGxtZW50cyB8fCBlbnJvbGxtZW50Q29uZmlnLmlzRW5hYmxlV2FpdGxpc3QpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0F2YWlsYWJsZUZvckN1cnJlbnREYXRlKGVucm9sbG1lbnRDb25maWc6IElFbnJvbGxtZW50Q29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBsZXQgaXNOb3dBZnRlclN0YXJ0RGF0ZSA9IGVucm9sbG1lbnRDb25maWcuc3RhcnREYXRlICYmIG1vbWVudChub3cpLmlzQWZ0ZXIoZW5yb2xsbWVudENvbmZpZy5zdGFydERhdGUpO1xyXG4gICAgICAgIGxldCBpc0JlZm9yZUVuZERhdGUgPSBlbnJvbGxtZW50Q29uZmlnLmVuZERhdGUgJiYgbW9tZW50KG5vdykuaXNCZWZvcmUoZW5yb2xsbWVudENvbmZpZy5lbmREYXRlKTtcclxuICAgICAgICByZXR1cm4gKCFlbnJvbGxtZW50Q29uZmlnLnN0YXJ0RGF0ZSB8fCBpc05vd0FmdGVyU3RhcnREYXRlKVxyXG4gICAgICAgICAgICAmJiAoIWVucm9sbG1lbnRDb25maWcuZW5kRGF0ZSB8fCBpc0JlZm9yZUVuZERhdGUpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtGaW5hbmNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvRmluYW5jZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJUHJvZHVjdH0gZnJvbSBcIi4vbW9kZWxzL0lQcm9kdWN0XCI7XHJcbmltcG9ydCB7UHVyY2hhc2VTZXJ2aWNlfSBmcm9tIFwiLi9QdXJjaGFzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL01hdGVyaWFsc1JvdXRlclwiO1xyXG5pbXBvcnQgSUxvY2F0aW9uU2VydmljZSA9IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZTtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4uL1JlZmVyZW5jZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtOZXdzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9OZXdzUm91dGVyXCI7XHJcbmltcG9ydCB7TmV3c0tleX0gZnJvbSBcIi4uL25ld3MvbW9kZWxzL05ld3NLZXlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJmaW5hbmNlLlByb2R1Y3RFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBNSU5fUFJJQ0U6IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgTUFYX1BSSUNFOiBudW1iZXIgPSAxMDAwMDAwLjAwO1xyXG4gICAgcHVibGljIE1JTl9FWFBJUkFUSU9OOiBudW1iZXIgPSAxO1xyXG4gICAgcHVibGljIE1BWF9FWFBJUkFUSU9OOiBudW1iZXIgPSAxNDYxO1xyXG4gICAgcHVibGljIE1JTl9MSU1JVDogbnVtYmVyID0gMTtcclxuICAgIHB1YmxpYyBNQVhfTElNSVQ6IG51bWJlciA9IDEwMDA7XHJcblxyXG4gICAgcHVibGljIHByb2R1Y3RJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIG9iamVjdFR5cGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBvYmplY3RJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHByb2R1Y3Q6IElQcm9kdWN0O1xyXG5cclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgaXNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyQnVzaW5lc3NVbml0czogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgcHVibGljIHByZXZpZXdVcmw6IHN0cmluZztcclxuICAgIHB1YmxpYyBoYXNQcmV2aWV3VXJsQ2FuY2VsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc1N1YnNjcmlwdGlvblByb2R1Y3QgOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcHJldmlldzogRmlsZTtcclxuICAgIHB1YmxpYyBjcm9wcGVkSW1hZ2U6IEZpbGU7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgUHVyY2hhc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgTmV3c1JvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBJTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHVyY2hhc2VTZXJ2aWNlOiBQdXJjaGFzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdXBsb2FkZXI6IG5nLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBuZXdzUm91dGVyOiBOZXdzUm91dGVyKSB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0SWQgPSAkcm91dGVQYXJhbXNbRmluYW5jZXNSb3V0ZXIuUFJPRFVDVF9JRF9QQVJBTV07XHJcbiAgICAgICAgdGhpcy5vYmplY3RUeXBlID0gJGxvY2F0aW9uLnNlYXJjaCgpW0ZpbmFuY2VzUm91dGVyLk9CSkVDVF9UWVBFX1BBUkFNXSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMub2JqZWN0SWQgPSBwYXJzZUludCgkbG9jYXRpb24uc2VhcmNoKClbRmluYW5jZXNSb3V0ZXIuT0JKRUNUX0lEX1BBUkFNXSkgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQ0FUQUxPR19NRU5VX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kZW1hbmRBdXRoZW50aWNhdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRQcm9kdWN0KClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5pc0Rpc2FibGVkID0gZmFsc2UpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuYnVzaW5lc3NVbml0SWQgPSB0aGlzLnByb2R1Y3QuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmRlbWFuZFByb2R1Y3RQZXJtaXNzaW9ucyh0aGlzLnByb2R1Y3RJZC50b1N0cmluZygpLCBwcm9kdWN0UGVybWlzc2lvbnMgPT4gcHJvZHVjdFBlcm1pc3Npb25zLmVkaXQpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkUHJvZHVjdCgpOiBhbmd1bGFyLklQcm9taXNlPElQcm9kdWN0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHVyY2hhc2VTZXJ2aWNlLmdldFByb2R1Y3QodGhpcy5wcm9kdWN0SWQpXHJcbiAgICAgICAgICAgIC50aGVuKChwcm9kdWN0OiBJUHJvZHVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0ID0gYW5ndWxhci5jb3B5KHByb2R1Y3QpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkVkaXQgcHJvZHVjdCBcIiArIFwi4oCYXCJcclxuICAgICAgICAgICAgICAgICAgICArIHRoaXMucHJvZHVjdC5wcm9kdWN0SWQgKyBcIuKAmVwiKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3VXJsID0gdGhpcy5wcm9kdWN0LnByZXZpZXdVcmwgPyB0aGlzLnByb2R1Y3QucHJldmlld1VybCA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlUHJvZHVjdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBsZXQgcHJldmlldzogRmlsZSA9IHRoaXMuY3JvcHBlZEltYWdlID8gdGhpcy5jcm9wcGVkSW1hZ2UgOiB0aGlzLnByZXZpZXc7XHJcbiAgICAgICAgbGV0IGhhc1ByZXZpZXdVcmxDYW5jZWxlZDogYm9vbGVhbiA9IHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkO1xyXG4gICAgICAgIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5wcm9kdWN0LmlzTXVsdGlDYXJkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdC5tdWx0aUNhcmRMaW1pdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHVyY2hhc2VTZXJ2aWNlLnVwZGF0ZVByb2R1Y3QodGhpcy5wcm9kdWN0SWQsIHRoaXMucHJvZHVjdC52ZXJzaW9uLCB0aGlzLnByb2R1Y3QucHJvZHVjdElkLFxyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3QubmFtZSwgdGhpcy5wcm9kdWN0LmRlc2NyaXB0aW9uLCB0aGlzLnByb2R1Y3Qua2V5d29yZHMsIHRoaXMucHJvZHVjdC5zdWJzY3JpcHRpb25FeHBpcmF0aW9uLFxyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3QucHJpY2UsIHRoaXMucHJvZHVjdC5pc011bHRpQ2FyZCwgdGhpcy5wcm9kdWN0Lm11bHRpQ2FyZExpbWl0LCB0aGlzLnByb2R1Y3Quc3Vic2NyaXB0aW9uUGxhbklkLFxyXG4gICAgICAgICAgICBoYXNQcmV2aWV3VXJsQ2FuY2VsZWQsIHByZXZpZXcpXHJcbiAgICAgICAgICAgIC50aGVuKChwcm9kdWN0OiBJUHJvZHVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpZXcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkKHByZXZpZXcsIHRoaXMucHJvZHVjdElkLCBcInByZXZpZXdcIikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFByb2R1Y3QoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpZXJTdWNjZXNzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0ID0gYW5ndWxhci5jb3B5KHByb2R1Y3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpZXJTdWNjZXNzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbm90aWZpZXJTdWNjZXNzKCkge1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJQcm9kdWN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXCIpO1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBsb2FkKGZpbGU6IEZpbGUsIHByb2R1Y3RJZDogbnVtYmVyLCBmaWxlVHlwZTogc3RyaW5nKTogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkUHJvbWlzZTxGaWxlPiB7XHJcbiAgICAgICAgbGV0IHVybEJ1aWxkZXIgPSB0aGlzLnVybC5iYXNlKFwiL2FwaS9maW5hbmNlL3Byb2R1Y3RzL3VwbG9hZD9wcm9kdWN0SWQ9OnByb2R1Y3RJZCZmaWxlVHlwZT06ZmlsZVR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnByb2R1Y3RJZFwiLCBwcm9kdWN0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpmaWxlVHlwZVwiLCBmaWxlVHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVwbG9hZGVyLnVwbG9hZCh7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBhbmd1bGFyLmNvcHkodXJsQnVpbGRlcilcclxuICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMub2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0VdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIucmVsYXRlZFByb2R1Y3RzVXBkYXRlVXJsKHRoaXMub2JqZWN0SWQpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5MRUFSTklOR19QQVRIXSkge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLnJlbGF0ZWRQcm9kdWN0c1VwZGF0ZVVybCh0aGlzLm9iamVjdElkKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUxdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1hdGVyaWFsc1JvdXRlci5yZWxhdGVkUHJvZHVjdHNVcGRhdGVVcmwodGhpcy5vYmplY3RJZCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0UHJldmlldygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHJldmlld1VybCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXdVcmwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3JvcHBlZEltYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JvcHBlZEltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdG9yZVByZXZpZXdVcmwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucHJldmlld1VybCA9IHRoaXMucHJvZHVjdC5wcmV2aWV3VXJsO1xyXG4gICAgICAgIHRoaXMuY3JvcHBlZEltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1heExpbWl0KCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGxpbWl0OiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGxpbWl0ICs9IHRoaXMucHJvZHVjdC5tYXRlcmlhbHMgPyB0aGlzLnByb2R1Y3QubWF0ZXJpYWxzLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgbGltaXQgKz0gdGhpcy5wcm9kdWN0LmNvdXJzZXMgPyB0aGlzLnByb2R1Y3QuY291cnNlcy5sZW5ndGggOiAwO1xyXG4gICAgICAgIGxpbWl0ICs9IHRoaXMucHJvZHVjdC5sZWFybmluZ1BhdGhzID8gdGhpcy5wcm9kdWN0LmxlYXJuaW5nUGF0aHMubGVuZ3RoIDogMDtcclxuICAgICAgICByZXR1cm4gTWF0aC5taW4obGltaXQsIHRoaXMuTUFYX0xJTUlUKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QnVzaW5lc3NVbml0U2VsZWN0b3JWaXNpYmxlKCkge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0VmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZhbGlkYXRlU3Vic2NyaXB0aW9uUGxhbklkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmKCF0aGlzLnByb2R1Y3Quc3Vic2NyaXB0aW9uUGxhbklkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdWJzY3JpcHRpb25Qcm9kdWN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCByZWdFeCA9IC8oUC0pW0EtWmEtejAtOV17MSw1MH0kLztcclxuICAgICAgICAgICAgbGV0IGlzU3Vic2NyaXB0aW9uID0gcmVnRXgudGVzdCh0aGlzLnByb2R1Y3Quc3Vic2NyaXB0aW9uUGxhbklkKTtcclxuICAgICAgICAgICAgaWYoaXNTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdC5pc011bHRpQ2FyZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0LnN1YnNjcmlwdGlvbkV4cGlyYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1YnNjcmlwdGlvblByb2R1Y3QgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpc1N1YnNjcmlwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9TdWJzY3JpcHRpb25TZXR1cEhlbHAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubmV3c1JvdXRlci5oZWxwVXJsKE5ld3NLZXkuSEVMUF9QQVlfUEFMX1NVQlNDUklQVElPTlMpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0Nyb3BwZXJNb2RhbEFmdGVyTG9hZCgpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgIT0gdW5kZWZpbmVkIHx8IHRoaXMucHJldmlld1VybCAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgID8gdGhpcy5zaG93Q3JvcHBlck1vZGFsKClcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zaG93Q3JvcHBlck1vZGFsQWZ0ZXJMb2FkKClcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JvcHBlck1vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjaW1hZ2VDcm9wcGVyTW9kYWxcIikubW9kYWwoXCJzaG93XCIpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lQdXJjaGFzZWRQcm9kdWN0fSBmcm9tIFwiLi9tb2RlbHMvSVB1cmNoYXNlZFByb2R1Y3RcIjtcclxuaW1wb3J0IHtJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdH0gZnJvbSBcIi4vbW9kZWxzL0lQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0XCI7XHJcbmltcG9ydCB7SVByb2R1Y3R9IGZyb20gXCIuL21vZGVscy9JUHJvZHVjdFwiO1xyXG5pbXBvcnQge0lQdXJjaGFzZWRPcmRlcn0gZnJvbSBcIi4vbW9kZWxzL0lQdXJjaGFzZWRPcmRlclwiO1xyXG5pbXBvcnQge0lQdXJjaGFzZVByb2R1Y3RDaGVja30gZnJvbSBcIi4uL2ludGVncmF0aW9uL3BheXBhbC9tb2RlbC9JUHVyY2hhc2VQcm9kdWN0Q2hlY2tcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQdXJjaGFzZVNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJmaW5hbmNlcy5QdXJjaGFzZVNlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9idGFpblJpZ2h0c0Zvck9yZGVyUHJvZHVjdHMoaWQ6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVB1cmNoYXNlZFByb2R1Y3Q+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9maW5hbmNlL29yZGVycy86aWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQcm9kdWN0KHByb2R1Y3RJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUHJvZHVjdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9maW5hbmNlL3Byb2R1Y3RzLzpwcm9kdWN0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnByb2R1Y3RJZFwiLCBwcm9kdWN0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFJlZmVyZW5jZWRPYmplY3RQcm9kdWN0c0xpc3Qob2JqZWN0SWQ6IG51bWJlciwgb2JqZWN0VHlwZTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvZmluYW5jZS9yZWZlcmVuY2VkT2JqZWN0UHJvZHVjdHM/b2JqZWN0SWQ9Om9iamVjdElkJm9iamVjdFR5cGU9Om9iamVjdFR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdElkXCIsIG9iamVjdElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0VHlwZVwiLCBvYmplY3RUeXBlKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVQcm9kdWN0KGlkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcHJvZHVjdElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzOiBzdHJpbmcsIHN1YnNjcmlwdGlvbkV4cGlyYXRpb246IG51bWJlciwgcHJpY2U6IG51bWJlciwgaXNNdWx0aUNhcmQ6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aUNhcmRMaW1pdDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uUGxhbklkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc2V0UHJldmlldzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXc/OiBGaWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICApOiBhbmd1bGFyLklQcm9taXNlPElQcm9kdWN0PiB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHByb2R1Y3QgPSB7XHJcbiAgICAgICAgICAgIGlkOiBpZCxcclxuICAgICAgICAgICAgdmVyc2lvbjogdmVyc2lvbixcclxuICAgICAgICAgICAgcHJvZHVjdElkOiBwcm9kdWN0SWQsXHJcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcclxuICAgICAgICAgICAga2V5d29yZHM6IGtleXdvcmRzLFxyXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25FeHBpcmF0aW9uOiBzdWJzY3JpcHRpb25FeHBpcmF0aW9uLFxyXG4gICAgICAgICAgICBwcmljZTogcHJpY2UsXHJcbiAgICAgICAgICAgIGlzTXVsdGlDYXJkOiBpc011bHRpQ2FyZCxcclxuICAgICAgICAgICAgbXVsdGlDYXJkTGltaXQ6IG11bHRpQ2FyZExpbWl0LFxyXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25QbGFuSWQ6IHN1YnNjcmlwdGlvblBsYW5JZCxcclxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyAhPSBudWxsID8ge25hbWU6IHByZXZpZXcubmFtZSwgdHlwZTogcHJldmlldy50eXBlLCBzaXplOiBwcmV2aWV3LnNpemV9IDogbnVsbCxcclxuICAgICAgICAgICAgcmVzZXRQcmV2aWV3OiBpc1Jlc2V0UHJldmlld1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2ZpbmFuY2UvcHJvZHVjdHMvOnByb2R1Y3RJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cHJvZHVjdElkXCIsIGlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBwcm9kdWN0KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUmVmZXJlbmNlZE9iamVjdFByb2R1Y3RzTGlzdChvYmplY3RJZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIG9iamVjdFR5cGU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWRzOiBzdHJpbmdbXSk6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVByb2R1Y3RUb1JlZmVyZW5jZWRPYmplY3Q+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2ZpbmFuY2UvcHJvZHVjdHM/b2JqZWN0SWQ9Om9iamVjdElkJnZlcnNpb249OnZlcnNpb24mb2JqZWN0VHlwZT06b2JqZWN0VHlwZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0SWRcIiwgb2JqZWN0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp2ZXJzaW9uXCIsIHZlcnNpb24pXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvYmplY3RUeXBlXCIsIG9iamVjdFR5cGUpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHByb2R1Y3RJZHMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlY2FsY3VsYXRlUGVybWlzc2lvbnMob2JqZWN0SWQ6IG51bWJlciwgb2JqZWN0VHlwZTogc3RyaW5nLCByZWNhbGN1bGF0ZUFsbDogYm9vbGVhbik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9maW5hbmNlL3Blcm1pc3Npb25zL3JlY2FsY3VsYXRlP29iamVjdElkPTpvYmplY3RJZCZvYmplY3RUeXBlPTpvYmplY3RUeXBlJnJlY2FsY3VsYXRlQWxsPTpyZWNhbGN1bGF0ZUFsbFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0SWRcIiwgb2JqZWN0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvYmplY3RUeXBlXCIsIG9iamVjdFR5cGUpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpyZWNhbGN1bGF0ZUFsbFwiLCByZWNhbGN1bGF0ZUFsbClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVmZXJlbmNlZE9iamVjdFJlbGF0ZWRQcm9kdWN0cyhvYmplY3RJZDogbnVtYmVyLCBvYmplY3RUeXBlOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElQcm9kdWN0W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvZmluYW5jZS9wcm9kdWN0cy9yZWxhdGVkP29iamVjdElkPTpvYmplY3RJZCZvYmplY3RUeXBlPTpvYmplY3RUeXBlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvYmplY3RJZFwiLCBvYmplY3RJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdFR5cGVcIiwgb2JqZWN0VHlwZSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVmZXJlbmNlZE9iamVjdFB1cmNoYXNlQ29uZmlndXJlZChvYmplY3RJZDogbnVtYmVyLCBvYmplY3RUeXBlOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvZmluYW5jZS9wdXJjaGFzZS9jb25maWd1cmVkP29iamVjdElkPTpvYmplY3RJZCZvYmplY3RUeXBlPTpvYmplY3RUeXBlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvYmplY3RJZFwiLCBvYmplY3RJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdFR5cGVcIiwgb2JqZWN0VHlwZSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UHVyY2hhc2VkUHJvZHVjdChwdXJjaGFzZWRQcm9kdWN0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVB1cmNoYXNlZE9yZGVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2ZpbmFuY2UvcHVyY2hhc2VkUHJvZHVjdHMvOnB1cmNoYXNlZFByb2R1Y3RJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cHVyY2hhc2VkUHJvZHVjdElkXCIsIHB1cmNoYXNlZFByb2R1Y3RJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0UHVyY2hhc2VkRW50aXR5KHB1cmNoYXNlZFByb2R1Y3RJZDogbnVtYmVyLCBwdXJjaGFzZWRFbnRpdHlJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUHVyY2hhc2VkT3JkZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvZmluYW5jZS9wdXJjaGFzZWRQcm9kdWN0cy86cHVyY2hhc2VkUHJvZHVjdElkL3B1cmNoYXNlZEVudGl0aWVzLzpwdXJjaGFzZWRFbnRpdHlJZC9zZWxlY3RcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnB1cmNoYXNlZFByb2R1Y3RJZFwiLCBwdXJjaGFzZWRQcm9kdWN0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpwdXJjaGFzZWRFbnRpdHlJZFwiLCBwdXJjaGFzZWRFbnRpdHlJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0UHVyY2hhc2VkTGVhcm5pbmdQYXRoQ291cnNlKHB1cmNoYXNlZFByb2R1Y3RJZDogbnVtYmVyLCBwdXJjaGFzZWRFbnRpdHlJZDogbnVtYmVyLCBjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUHVyY2hhc2VkT3JkZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvZmluYW5jZS9wdXJjaGFzZWRQcm9kdWN0cy86cHVyY2hhc2VkUHJvZHVjdElkL3B1cmNoYXNlZEVudGl0aWVzLzpwdXJjaGFzZWRFbnRpdHlJZC9zdGFydC86Y291cnNlSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnB1cmNoYXNlZFByb2R1Y3RJZFwiLCBwdXJjaGFzZWRQcm9kdWN0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpwdXJjaGFzZWRFbnRpdHlJZFwiLCBwdXJjaGFzZWRFbnRpdHlJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TnVtYmVyT2ZJdGVtc0luUHJvZHVjdChwcm9kdWN0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2ZpbmFuY2UvcHVyY2hhc2UvOnByb2R1Y3RJZC9udW1iZXJPZkl0ZW1zSW5Qcm9kdWN0XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpwcm9kdWN0SWRcIiwgcHJvZHVjdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB7fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tPcmRlcihwdXJjaGFzZWRQcm9kdWN0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVB1cmNoYXNlUHJvZHVjdENoZWNrPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2ZpbmFuY2UvY2hlY2svcHJvZHVjdC86cHVyY2hhc2VkUHJvZHVjdElkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpwdXJjaGFzZWRQcm9kdWN0SWRcIiwgcHVyY2hhc2VkUHJvZHVjdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SVB1cmNoYXNlZFByb2R1Y3R9IGZyb20gXCIuL21vZGVscy9JUHVyY2hhc2VkUHJvZHVjdFwiO1xyXG5pbXBvcnQge0ZpbmFuY2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9GaW5hbmNlc1JvdXRlclwiO1xyXG5pbXBvcnQge1B1cmNoYXNlU2VydmljZX0gZnJvbSBcIi4vUHVyY2hhc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1JlZGlyZWN0UmVhc29ufSBmcm9tIFwiLi4vYXV0aGNvcmUvUmVkaXJlY3RSZWFzb25cIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoUmVkaXJlY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQdXJjaGFzZWRPcmRlckNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJmaW5hbmNlLlB1cmNoYXNlZE9yZGVyQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBwdXJjaGFzZWRPcmRlcklkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaXNQdXJjaGFzZWRPcmRlclByb2Nlc3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzUHVyY2hhc2VkT3JkZXJQcm9jZXNzaW5nRmFpbGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcHVyY2hhc2VPcmRlclJlc3VsdHM6IEFycmF5PElQdXJjaGFzZWRQcm9kdWN0PiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBQdXJjaGFzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIEZpbmFuY2VzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHB1cmNoYXNlU2VydmljZTogUHVyY2hhc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbmNlc1JvdXRlcjogRmluYW5jZXNSb3V0ZXIpIHtcclxuICAgICAgICB0aGlzLnB1cmNoYXNlZE9yZGVySWQgPSAkcm91dGVQYXJhbXNbRmluYW5jZXNSb3V0ZXIuT1JERVJfSURfUEFSQU1dO1xyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5pc0F1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucHVyY2hhc2VkT3JkZXJJZCAhPSBudWxsICYmIHRoaXMucHVyY2hhc2VkT3JkZXJJZCAhPSB1bmRlZmluZWQgJiYgdGhpcy5wdXJjaGFzZWRPcmRlcklkICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1B1cmNoYXNlT3JkZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuZmluYW5jZXNSb3V0ZXIub3JkZXJQcm9kdWN0c1VybCh0aGlzLnB1cmNoYXNlZE9yZGVySWQpKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQdXJjaGFzZWRPcmRlclByb2Nlc3NpbmdGYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUHVyY2hhc2VkT3JkZXJQcm9jZXNzZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXV0aFJlZGlyZWN0LmZvcndhcmRUb0FjY2Vzc0RlbmllZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXV0aFJlZGlyZWN0LnJlZGlyZWN0VG9Mb2dPbihSZWRpcmVjdFJlYXNvbi5MT0dPTl9SRVFVSVJFRCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc1B1cmNoYXNlT3JkZXIoKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJUHVyY2hhc2VkUHJvZHVjdD4+ICB7XHJcbiAgICAgICAgbGV0IHByb21pc2U6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVB1cmNoYXNlZFByb2R1Y3Q+PiA9IHRoaXMucHVyY2hhc2VTZXJ2aWNlLm9idGFpblJpZ2h0c0Zvck9yZGVyUHJvZHVjdHModGhpcy5wdXJjaGFzZWRPcmRlcklkKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5wdXJjaGFzZU9yZGVyUmVzdWx0cyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0ZpbmFuY2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9GaW5hbmNlc1JvdXRlclwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7SU1hdGVyaWFsfSBmcm9tIFwiLi4vbWF0ZXJpYWxzL21vZGVscy9JTWF0ZXJpYWxcIjtcclxuaW1wb3J0IHtJQ291cnNlUHJvZHVjdH0gZnJvbSBcIi4vbW9kZWxzL0lDb3Vyc2VQcm9kdWN0XCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7UHVyY2hhc2VTZXJ2aWNlfSBmcm9tIFwiLi9QdXJjaGFzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJUHVyY2hhc2VkT3JkZXJ9IGZyb20gXCIuL21vZGVscy9JUHVyY2hhc2VkT3JkZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtJUHVyY2hhc2VkRW50aXR5fSBmcm9tIFwiLi9tb2RlbHMvSVB1cmNoYXNlZEVudGl0eVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL01hdGVyaWFsc1JvdXRlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhDb3Vyc2V9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoQ291cnNlXCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4uL2NvdXJzZXMvQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7Q291cnNlUHJvZ3Jlc3NTdGF0dXN9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9Db3Vyc2VQcm9ncmVzc1N0YXR1c1wiO1xyXG5pbXBvcnQge0lIdHRwU2VydmljZX0gZnJvbSBcImFuZ3VsYXJcIjtcclxuXHJcbmludGVyZmFjZSBJUHVyY2hhc2VkSXRlbSBleHRlbmRzIElQdXJjaGFzZWRFbnRpdHkge1xyXG4gICAgaXNBdmFpbGFibGVCeU1heEVucm9sbG1lbnRzPzogYm9vbGVhbjtcclxuICAgIGlzQWxsb3dOZXdFbnJvbGxtZW50cz86IGJvb2xlYW47XHJcbiAgICBlbnJvbGxDb25maWc/OiBhbnk7XHJcbiAgICBtYXRlcmlhbD86IElNYXRlcmlhbDtcclxuICAgIGNvdXJzZT86IElDb3Vyc2VQcm9kdWN0O1xyXG4gICAgcHJldmlvdXNDb3Vyc2U/OiBJQ291cnNlUHJvZHVjdDtcclxuICAgIGxlYXJuaW5nUGF0aD86IElMZWFybmluZ1BhdGg7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQdXJjaGFzZWRQcm9kdWN0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImZpbmFuY2VzLlB1cmNoYXNlZFByb2R1Y3RDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHB1cmNoYXNlZFByb2R1Y3RJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHB1cmNoYXNlZFByb2R1Y3Q6IElQdXJjaGFzZWRPcmRlcjtcclxuXHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIGlzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcHVyY2hhc2VkSXRlbXM6IElQdXJjaGFzZWRJdGVtW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRQdXJjaGFzZWRJdGVtOiBJUHVyY2hhc2VkSXRlbTtcclxuXHJcbiAgICBwdWJsaWMgcHVyY2hhc2VkRW50aXR5SWRUb1NlbGVjdDogbnVtYmVyO1xyXG4gICAgcHVibGljIGNvbmZpcm1hdGlvbkRpYWxvZ1RleHQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRNYXRlcmlhbDogSU1hdGVyaWFsO1xyXG4gICAgcHVibGljIHNlbGVjdGVkQ291cnNlOiBJQ291cnNlUHJvZHVjdDtcclxuICAgIHB1YmxpYyBzZWxlY3RlZExlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aDtcclxuICAgIHB1YmxpYyBzZWxlY3RlZExlYXJuaW5nUGF0aENvdXJzZTogSUxlYXJuaW5nUGF0aENvdXJzZTtcclxuXHJcbiAgICBwdWJsaWMgc2hvd0xhYmVsczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGFjY2Vzc09iamVjdHM6IGFueVtdID0gW107XHJcblxyXG4gICAgcHVibGljIGZpcnN0TG9hZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgYnV0dG9uU3RhdHVzTWFwOiBhbnkgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBQdXJjaGFzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwdXJjaGFzZVNlcnZpY2U6IFB1cmNoYXNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnB1cmNoYXNlZFByb2R1Y3RJZCA9ICRyb3V0ZVBhcmFtc1tGaW5hbmNlc1JvdXRlci5QVVJDSEFTRURfUFJPRFVDVF9JRF9QQVJBTV07XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5pc0F1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXV0aFJlZGlyZWN0LnJlZGlyZWN0VG9Mb2dPbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1lbnVJdGVtS2V5OiBzdHJpbmcgPSBNZW51SGVscGVyLmdldEN1cnJlbnRNZW51SXRlbUtleSgpO1xyXG4gICAgICAgIGlmICghbWVudUl0ZW1LZXkgfHwgbWVudUl0ZW1LZXkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbWVudTogc3RyaW5nID0gTWVudUhlbHBlci5QRVJTT05BTF9QVVJDSEFTRURfT1JERVJTX01FTlVfS0VZO1xyXG4gICAgICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShtZW51KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFB1cmNoYXNlZFByb2R1Y3QoKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEVucm9sbG1lbnRDb25maWdGb3JDb3Vyc2VzKClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblByb2R1Y3RJdGVtU2VsZWN0ZWQodGhpcy5hY2Nlc3NPYmplY3RzWzBdLm9iamVjdFR5cGUsIHRoaXMuYWNjZXNzT2JqZWN0c1swXS5pZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RMb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFB1cmNoYXNlZFByb2R1Y3QoKTogYW5ndWxhci5JUHJvbWlzZTxJUHVyY2hhc2VkT3JkZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wdXJjaGFzZVNlcnZpY2UuZ2V0UHVyY2hhc2VkUHJvZHVjdCh0aGlzLnB1cmNoYXNlZFByb2R1Y3RJZClcclxuICAgICAgICAgICAgLnRoZW4oKHB1cmNoYXNlZFByb2R1Y3Q6IElQdXJjaGFzZWRPcmRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wdXJjaGFzZWRQcm9kdWN0ID0gYW5ndWxhci5jb3B5KHB1cmNoYXNlZFByb2R1Y3QpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUHVyY2hhc2VkUHJvZHVjdEFmdGVyTG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIodGhpcy5wdXJjaGFzZWRQcm9kdWN0Lm5hbWUpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVyY2hhc2VkUHJvZHVjdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2VsZWN0UHVyY2hhc2VkRW50aXR5QnV0dG9uQ2xpY2socHVyY2hhc2VkRW50aXR5SWQ6IG51bWJlciwgZW50cnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJ1dHRvblN0YXR1c01hcC5zZXQoZW50cnkuaWQgKyBlbnRyeS5vYmplY3RUeXBlLCAnY29udGludWUnKVxyXG4gICAgICAgIHRoaXMucHVyY2hhc2VkRW50aXR5SWRUb1NlbGVjdCA9IHB1cmNoYXNlZEVudGl0eUlkO1xyXG4gICAgICAgIHRoaXMub25Qcm9kdWN0SXRlbVNlbGVjdGVkKGVudHJ5Lm9iamVjdFR5cGUsIGVudHJ5LmlkKTtcclxuICAgICAgICBpZiAodGhpcy5wdXJjaGFzZWRQcm9kdWN0LmlzTXVsdGlDYXJkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uRGlhbG9nVGV4dCA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJUaGlzIHdpbGwgYmUgezF9IGl0ZW0gb2YgezJ9IHB1cmNoYXNlZC4gUGxlYXNlIGNvbmZpcm0uXCIpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcInsxfVwiLCB0aGlzLnB1cmNoYXNlZFByb2R1Y3QubXVsdGlDYXJkVXNlZCArIDEpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcInsyfVwiLCB0aGlzLnB1cmNoYXNlZFByb2R1Y3QubXVsdGlDYXJkTGltaXQpXHJcbiAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgICAgICAgICAgJChcIiNzZWxlY3Rpb25Db25maXJtXCIpLm1vZGFsKFwic2hvd1wiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFB1cmNoYXNlZEVudGl0eShlbnRyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblN0YXJ0THBDb3Vyc2VCdXR0b25DbGljayhwdXJjaGFzZWRFbnRpdHlJZDogbnVtYmVyLCBlbnRyeTogYW55LCBjb3Vyc2VJZD86IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uU3RhdHVzTWFwLnNldChlbnRyeS5pZCArIGVudHJ5Lm9iamVjdFR5cGUsICdjb250aW51ZScpXHJcbiAgICAgICAgdGhpcy5wdXJjaGFzZWRFbnRpdHlJZFRvU2VsZWN0ID0gcHVyY2hhc2VkRW50aXR5SWQ7XHJcbiAgICAgICAgaWYgKHRoaXMucHVyY2hhc2VkUHJvZHVjdC5pc011bHRpQ2FyZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbkRpYWxvZ1RleHQgPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiVGhpcyB3aWxsIGJlIHsxfSBpdGVtIG9mIHsyfSBwdXJjaGFzZWQuIFBsZWFzZSBjb25maXJtLlwiKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCJ7MX1cIiwgdGhpcy5wdXJjaGFzZWRQcm9kdWN0Lm11bHRpQ2FyZFVzZWQgKyAxKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCJ7Mn1cIiwgdGhpcy5wdXJjaGFzZWRQcm9kdWN0Lm11bHRpQ2FyZExpbWl0KVxyXG4gICAgICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgICQoXCIjc2VsZWN0aW9uQ29uZmlybVwiKS5tb2RhbChcInNob3dcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wdXJjaGFzZVNlcnZpY2Uuc3RhcnRQdXJjaGFzZWRMZWFybmluZ1BhdGhDb3Vyc2UodGhpcy5wdXJjaGFzZWRQcm9kdWN0SWQsIHB1cmNoYXNlZEVudGl0eUlkLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQdXJjaGFzZWRQcm9kdWN0KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRFbnJvbGxtZW50Q29uZmlnRm9yQ291cnNlcygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kYXRhLmVycm9yID09PSBcImVycm9yLmNvdXJzZS51bmFibGUudG8uc3RhcnRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNUb3BpYyA9IGVudHJ5LnByZXZpb3VzQ291cnNlLnRvcGljO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgY291cnNlIHdpbGwgYmUgYXZhaWxhYmxlIGFmdGVyIHBhc3NpbmcgXCIgKyBwcmV2aW91c1RvcGljICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGluIGxlYXJuaW5nIHBhdGggXCIgKyBlbnRyeS5wYXJlbnRMZWFybmluZ1BhdGgubmFtZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIi4gUGxlYXNlLCBjb21wbGV0ZSBjb3Vyc2UgXCIgKyBwcmV2aW91c1RvcGljICsgXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmRhdGEuZXJyb3IgPT09IFwiaW5zdWZmaWNpZW50LnBlcm1pc3Npb25zLmFjY2Vzcy50aGUuY291cnNlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHRoZSBjb3Vyc2UsIHBsZWFzZSBjb250YWN0IHlvdXIgSW5zdHJ1Y3RvclwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25Qcm9kdWN0SXRlbVNlbGVjdGVkKGVudHJ5Lm9iamVjdFR5cGUsIGVudHJ5LmlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0UHVyY2hhc2VkRW50aXR5KGVudHJ5KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHVyY2hhc2VTZXJ2aWNlLnNlbGVjdFB1cmNoYXNlZEVudGl0eSh0aGlzLnB1cmNoYXNlZFByb2R1Y3RJZCwgdGhpcy5wdXJjaGFzZWRFbnRpdHlJZFRvU2VsZWN0KVxyXG4gICAgICAgICAgICAudGhlbigocHVyY2hhc2VkUHJvZHVjdDogSVB1cmNoYXNlZE9yZGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnB1cmNoYXNlZFByb2R1Y3QgPSBhbmd1bGFyLmNvcHkocHVyY2hhc2VkUHJvZHVjdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NQdXJjaGFzZWRQcm9kdWN0QWZ0ZXJMb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1cmNoYXNlZFByb2R1Y3Q7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uUHJvZHVjdEl0ZW1TZWxlY3RlZChlbnRyeS5vYmplY3RUeXBlLCBlbnRyeS5pZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdvVG9QdXJjaGFzZWRJdGVtKGVudHJ5KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKChlbnRyeS5vYmplY3RUeXBlID09ICdDT1VSU0UnIHx8IGVudHJ5Lm9iamVjdFR5cGUgPT0gJ0xQX0NPVVJTRScpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybChlbnRyeS5pZCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZW50cnkub2JqZWN0VHlwZSA9PSAnTUFURVJJQUwnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1hdGVyaWFsc1JvdXRlci53YXRjaFVybChlbnRyeS5pZCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NQdXJjaGFzZWRQcm9kdWN0QWZ0ZXJMb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWNjZXNzT2JqZWN0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMucHVyY2hhc2VkSXRlbXMgPSBbXTtcclxuICAgICAgICBsZXQgY291cnNlc01hcCA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICAgICAgbGV0IG1hdGVyaWFscyA9IFtdO1xyXG4gICAgICAgIGxldCBjb3Vyc2VzID0gW107XHJcbiAgICAgICAgdGhpcy5wdXJjaGFzZWRQcm9kdWN0LnB1cmNoYXNlZEVudGl0aWVzLmZvckVhY2goKHB1cmNoYXNlZEVudGl0eTogSVB1cmNoYXNlZEVudGl0eSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbWF0ZXJpYWw6IElNYXRlcmlhbCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBjb3Vyc2U6IElDb3Vyc2VQcm9kdWN0ID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aCA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChwdXJjaGFzZWRFbnRpdHkucmVmZXJlbmNlZE9iamVjdC50eXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLk1BVEVSSUFMXSkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwgPSB0aGlzLnB1cmNoYXNlZFByb2R1Y3QubWF0ZXJpYWxzLmZpbHRlcihtID0+IG0uaWQgPT0gcHVyY2hhc2VkRW50aXR5LnJlZmVyZW5jZWRPYmplY3QuaWQpWzBdO1xyXG4gICAgICAgICAgICAgICAgbGV0IHB1cmNoYXNlZEl0ZW06IElQdXJjaGFzZWRJdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBwdXJjaGFzZWRFbnRpdHkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZE9iamVjdDogcHVyY2hhc2VkRW50aXR5LnJlZmVyZW5jZWRPYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHB1cmNoYXNlZEVudGl0eS5zZWxlY3RlZCxcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgY291cnNlOiBjb3Vyc2VcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbHMucHVzaChwdXJjaGFzZWRJdGVtLm1hdGVyaWFsKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwdXJjaGFzZWRFbnRpdHkucmVmZXJlbmNlZE9iamVjdC50eXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRV0pIHtcclxuICAgICAgICAgICAgICAgIGNvdXJzZSA9IHRoaXMucHVyY2hhc2VkUHJvZHVjdC5jb3Vyc2VzLmZpbHRlcihjID0+IGMuaWQgPT0gcHVyY2hhc2VkRW50aXR5LnJlZmVyZW5jZWRPYmplY3QuaWQpWzBdO1xyXG4gICAgICAgICAgICAgICAgY291cnNlLm9iamVjdFR5cGUgPSAnQ09VUlNFJ1xyXG4gICAgICAgICAgICAgICAgY291cnNlLnByb2R1Y3RFbnRpdHlJZCA9IHB1cmNoYXNlZEVudGl0eS5pZDtcclxuICAgICAgICAgICAgICAgIGxldCBwdXJjaGFzZWRJdGVtOiBJUHVyY2hhc2VkSXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogcHVyY2hhc2VkRW50aXR5LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWRPYmplY3Q6IHB1cmNoYXNlZEVudGl0eS5yZWZlcmVuY2VkT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBwdXJjaGFzZWRFbnRpdHkuc2VsZWN0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvdXJzZTogY291cnNlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY291cnNlc01hcC5zZXQoY291cnNlLmlkLCBwdXJjaGFzZWRJdGVtKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHB1cmNoYXNlZEVudGl0eS5yZWZlcmVuY2VkT2JqZWN0LnR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTEVBUk5JTkdfUEFUSF0pIHtcclxuICAgICAgICAgICAgICAgIGxlYXJuaW5nUGF0aCA9IHRoaXMucHVyY2hhc2VkUHJvZHVjdC5sZWFybmluZ1BhdGhzLmZpbHRlcihsID0+IGwuaWQgPT0gcHVyY2hhc2VkRW50aXR5LnJlZmVyZW5jZWRPYmplY3QuaWQpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChsZWFybmluZ1BhdGgpIHtcclxuICAgICAgICAgICAgICAgIGxlYXJuaW5nUGF0aC5kZXBlbmRDb3Vyc2VzLm1hcCgoY291cnNlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdXJzZS5vYmplY3RUeXBlID0gJ0xQX0NPVVJTRSdcclxuICAgICAgICAgICAgICAgICAgICBjb3Vyc2UucGFyZW50TGVhcm5pbmdQYXRoID0gbGVhcm5pbmdQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdXJzZS5wcm9kdWN0RW50aXR5SWQgPSBwdXJjaGFzZWRFbnRpdHkuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY291cnNlLnByZXZpb3VzQ291cnNlID0gaW5kZXggLSAxID49IDAgPyBsZWFybmluZ1BhdGguZGVwZW5kQ291cnNlc1tpbmRleCAtIDFdIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb3Vyc2VzTWFwLmRlbGV0ZShjb3Vyc2UuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzT2JqZWN0cy5wdXNoKGNvdXJzZSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb3Vyc2VzTWFwLmZvckVhY2goKGNvdXJzZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY291cnNlcy5wdXNoKGNvdXJzZVtcImNvdXJzZVwiXSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvdXJzZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICBpZiAoYS5zdGFydERhdGUgPiBiLnN0YXJ0RGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICBpZiAoYS5zdGFydERhdGUgPCBiLnN0YXJ0RGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYS50b3BpYyA+IGIudG9waWMpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICBpZiAoYS50b3BpYyA8IGIudG9waWMpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmFjY2Vzc09iamVjdHMgPSB0aGlzLmFjY2Vzc09iamVjdHMuY29uY2F0KGNvdXJzZXMpXHJcbiAgICAgICAgbWF0ZXJpYWxzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgaWYgKGEudGl0bGUgPiBiLnRpdGxlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGlmIChhLnRpdGxlIDwgYi50aXRsZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmFjY2Vzc09iamVjdHMgPSB0aGlzLmFjY2Vzc09iamVjdHMuY29uY2F0KG1hdGVyaWFscyk7XHJcblxyXG4gICAgICAgIHRoaXMuYWNjZXNzT2JqZWN0cy5tYXAob2JqID0+IHtcclxuICAgICAgICAgICAgaWYgKG9iai5zdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgIG9iai5zdGFydERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKG9iai5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvYmouZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgb2JqLmVuZERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKG9iai5lbmREYXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5nZXRDb3Vyc2VzUHJvZ3Jlc3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEVucm9sbG1lbnRDb25maWdGb3JDb3Vyc2VzKCkge1xyXG4gICAgICAgIHRoaXMucHVyY2hhc2VkSXRlbXMubWFwKChlbGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5jb3Vyc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VGb3JQcm9kdWN0KGVsZW0uY291cnNlLmlkKS50aGVuKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY291cnNlLnN0YXJ0RGF0ZSA9IHJlcy5zdGFydERhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY291cnNlLmVuZERhdGUgPSByZXMuZW5kRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0RW5yb2xsbWVudENvbmZpZ3VyYXRpb25Gb3JDb3Vyc2UoZWxlbS5jb3Vyc2UuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5pc0FsbG93TmV3RW5yb2xsbWVudHMgPSByZXN1bHQuaXNBbGxvd05ld0Vucm9sbG1lbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmVucm9sbENvbmZpZyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFRvdGFsVXNlZFNlYXRzRm9yQ291cnNlKGVsZW0uY291cnNlLmlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlzQXZhaWxhYmxlQnlNYXhFbnJvbGxtZW50cyA9ICFlbGVtLmVucm9sbENvbmZpZy5tYXhFbnJvbGxtZW50IHx8IGVsZW0uZW5yb2xsQ29uZmlnLm1heEVucm9sbG1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlbGVtLmVucm9sbENvbmZpZy5tYXhFbnJvbGxtZW50ID4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRMYW5kaW5nUGFnZShlbGVtLmNvdXJzZS5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY291cnNlLmxhbmRpbmdQYWdlID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnNob3dMYWJlbHMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRQcm9ncmVzc1N0YXR1cyhlbnRyeSkge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlDb250aW51ZUJ1dHRvbihlbnRyeSkgJiYgZW50cnkub2JqZWN0VHlwZSAhPT0gJ01BVEVSSUFMJyl7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uU3RhdHVzTWFwLnNldChlbnRyeS5pZCArIGVudHJ5Lm9iamVjdFR5cGUsICdjb250aW51ZScpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlTdGFydEJ1dHRvbihlbnRyeSkgJiYgZW50cnkub2JqZWN0VHlwZSAhPT0gJ01BVEVSSUFMJyl7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uU3RhdHVzTWFwLnNldChlbnRyeS5pZCArIGVudHJ5Lm9iamVjdFR5cGUsICdzdGFydCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlWaWV3QnV0dG9uKGVudHJ5KSl7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uU3RhdHVzTWFwLnNldChlbnRyeS5pZCArIGVudHJ5Lm9iamVjdFR5cGUsICd2aWV3JylcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZXNQcm9ncmVzcygpIHtcclxuICAgICAgICB0aGlzLmFjY2Vzc09iamVjdHMubWFwKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgaWYgKGVudHJ5Lm9iamVjdFR5cGUgPT0gJ0xQX0NPVVJTRScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRDb3Vyc2VQcm9ncmVzcyhlbnRyeS5pZClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNvdXJzZVByb2dyZXNzSWQgPSByZXMuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNvdXJzZVByb2dyZXNzU3RhdHVzID0gcmVzLnN0YXR1cyA/IHJlcy5zdGF0dXMgOiBDb3Vyc2VQcm9ncmVzc1N0YXR1cy5OT1RfU1RBUlRFRDtcclxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9ncmVzc1N0YXR1cyhlbnRyeSlcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9ncmVzc1N0YXR1cyhlbnRyeSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkKG9iamVjdDogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3Vyc2UgJiYgdGhpcy5zZWxlY3RlZENvdXJzZS5pZCA9PSBvYmplY3QuaWQgJiYgb2JqZWN0Lm9iamVjdFR5cGUgPT0gJ0NPVVJTRScgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hdGVyaWFsICYmIHRoaXMuc2VsZWN0ZWRNYXRlcmlhbC5pZCA9PSBvYmplY3QuaWQgJiYgb2JqZWN0Lm9iamVjdFR5cGUgPT0gJ01BVEVSSUFMJyB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGVhcm5pbmdQYXRoQ291cnNlICYmIHRoaXMuc2VsZWN0ZWRMZWFybmluZ1BhdGhDb3Vyc2UuaWQgPT0gb2JqZWN0LmlkICYmIG9iamVjdC5vYmplY3RUeXBlID09ICdMUF9DT1VSU0UnIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMZWFybmluZ1BhdGggJiYgdGhpcy5zZWxlY3RlZExlYXJuaW5nUGF0aC5pZCA9PSBvYmplY3QuaWQgJiYgb2JqZWN0Lm9iamVjdFR5cGUgPT0gJ0xFQVJOSU5HX1BBVEgnO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgb25Qcm9kdWN0SXRlbVNlbGVjdGVkKHJlZmVyZW5jZWRPYmplY3RUeXBlOiBzdHJpbmcsIG9iamVjdElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWF0ZXJpYWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3Vyc2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMZWFybmluZ1BhdGggPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMZWFybmluZ1BhdGhDb3Vyc2UgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAocmVmZXJlbmNlZE9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUxdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXRlcmlhbCA9IHRoaXMuYWNjZXNzT2JqZWN0cy5maWx0ZXIobSA9PiBtLmlkID09IG9iamVjdElkICYmIG0ub2JqZWN0VHlwZSA9PSAnTUFURVJJQUwnKVswXTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZWRPYmplY3RUeXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRV0pIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvdXJzZSA9IHRoaXMuYWNjZXNzT2JqZWN0cy5maWx0ZXIoYyA9PiBjLmlkID09IG9iamVjdElkICYmIGMub2JqZWN0VHlwZSA9PSAnQ09VUlNFJylbMF07XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2VkT2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5MRUFSTklOR19QQVRIXSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGVhcm5pbmdQYXRoID0gdGhpcy5hY2Nlc3NPYmplY3RzLmZpbHRlcihsID0+IGwuaWQgPT0gb2JqZWN0SWQpWzBdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlZE9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTFBfQ09VUlNFXSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGVhcm5pbmdQYXRoQ291cnNlID0gdGhpcy5hY2Nlc3NPYmplY3RzLmZpbHRlcihjID0+IGMuaWQgPT0gb2JqZWN0SWQgJiYgYy5vYmplY3RUeXBlID09ICdMUF9DT1VSU0UnKVswXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBpc0JlZm9yZVRvZGF5KGVudHJ5OiBEYXRlKSB7XHJcbiAgICAgICAgbGV0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHJldHVybiBlbnRyeS5nZXRUaW1lKCkgPyBlbnRyeS5nZXRUaW1lKCkgPCBub3cgOiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREYXRlKGVudHJ5OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoZW50cnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRGb3JtYXR0ZWREYXRlKGVudHJ5OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gZW50cnlcclxuICAgICAgICAgICAgPyBuZXcgRGF0ZShlbnRyeSkudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiKS5zcGxpdChcIixcIilbMF1cclxuICAgICAgICAgICAgOiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUb2RheSgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNYXRlcmlhbChlbnRyeSkge1xyXG4gICAgICAgIHJldHVybiAhIWVudHJ5LnVwbG9hZERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFR5cGUob2JqZWN0OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBvYmplY3Qub2JqZWN0VHlwZSA/IG9iamVjdC5vYmplY3RUeXBlIDogJ0NPVVJTRSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc3BsYXlWaWV3QnV0dG9uKGVudHJ5KSB7XHJcbiAgICAgICAgcmV0dXJuIChlbnRyeS5vYmplY3RUeXBlID09ICdDT1VSU0UnIHx8IGVudHJ5Lm9iamVjdFR5cGUgPT0gJ0xQX0NPVVJTRScpXHJcbiAgICAgICAgICAgICYmIChlbnRyeS5jb3Vyc2VQcm9ncmVzc0lkXHJcbiAgICAgICAgICAgICAgICAmJiBlbnRyeS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyAhPSAnU1RBUlRFRCdcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuaXNCZWZvcmVUb2RheSh0aGlzLmdldERhdGUoZW50cnkuZW5kRGF0ZSkpKVxyXG4gICAgICAgICAgICB8fCBlbnRyeS5vYmplY3RUeXBlID09ICdNQVRFUklBTCdcclxuICAgICAgICAgICAgJiYgIXRoaXMuaXNCZWZvcmVUb2RheSh0aGlzLmdldERhdGUoZW50cnkudmFsaWRpdHkpKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNwbGF5U3RhcnRCdXR0b24oZW50cnkpIHtcclxuICAgICAgICByZXR1cm4gKGVudHJ5Lm9iamVjdFR5cGUgPT0gJ0NPVVJTRScgfHwgZW50cnkub2JqZWN0VHlwZSA9PSAnTFBfQ09VUlNFJylcclxuICAgICAgICAgICAgJiYgKGVudHJ5LmNvdXJzZVByb2dyZXNzU3RhdHVzID09PSBDb3Vyc2VQcm9ncmVzc1N0YXR1cy5OT1RfU1RBUlRFRFxyXG4gICAgICAgICAgICAgICAgfHwgZW50cnkuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT09IFwiTk9UX1NUQVJURURcIilcclxuICAgICAgICAgICAgJiYgIXRoaXMuaXNCZWZvcmVUb2RheSh0aGlzLmdldERhdGUoZW50cnkuZW5kRGF0ZSkpXHJcbiAgICAgICAgICAgICYmICghdGhpcy5wdXJjaGFzZWRQcm9kdWN0LmlzTXVsdGlDYXJkXHJcbiAgICAgICAgICAgICAgICB8fCB0aGlzLnB1cmNoYXNlZFByb2R1Y3QuaXNNdWx0aUNhcmQgJiYgIWVudHJ5LnNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnB1cmNoYXNlZFByb2R1Y3QubXVsdGlDYXJkVXNlZCA8IHRoaXMucHVyY2hhc2VkUHJvZHVjdC5tdWx0aUNhcmRMaW1pdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc3BsYXlDb250aW51ZUJ1dHRvbihlbnRyeSkge1xyXG4gICAgICAgIHJldHVybiAoZW50cnkub2JqZWN0VHlwZSA9PSAnQ09VUlNFJyB8fCBlbnRyeS5vYmplY3RUeXBlID09ICdMUF9DT1VSU0UnKVxyXG4gICAgICAgICAgICAmJiAoZW50cnkuY291cnNlUHJvZ3Jlc3NTdGF0dXMgIT09IENvdXJzZVByb2dyZXNzU3RhdHVzLk5PVF9TVEFSVEVEXHJcbiAgICAgICAgICAgICAgICAmJiBlbnRyeS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyAhPT0gXCJOT1RfU1RBUlRFRFwiKVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5pc0JlZm9yZVRvZGF5KHRoaXMuZ2V0RGF0ZShlbnRyeS5lbmREYXRlKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGVyZm9ybUFjdGlvbihlbnRyeSl7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmJ1dHRvblN0YXR1c01hcC5nZXQoZW50cnkuaWQgKyBlbnRyeS5vYmplY3RUeXBlKSkge1xyXG4gICAgICAgICAgICBjYXNlICdzdGFydCc6IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5vYmplY3RUeXBlID09ICdMUF9DT1VSU0UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblN0YXJ0THBDb3Vyc2VCdXR0b25DbGljayhlbnRyeS5wcm9kdWN0RW50aXR5SWQsIGVudHJ5LCBlbnRyeS5pZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkub2JqZWN0VHlwZSA9PSAnQ09VUlNFJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3RQdXJjaGFzZWRFbnRpdHlCdXR0b25DbGljayhlbnRyeS5wcm9kdWN0RW50aXR5SWQsIGVudHJ5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRpbnVlJzoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvUHVyY2hhc2VkSXRlbShlbnRyeSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ3ZpZXcnOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9QdXJjaGFzZWRJdGVtKGVudHJ5KVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExhYmVsKGVudHJ5KSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmJ1dHRvblN0YXR1c01hcC5nZXQoZW50cnkuaWQgKyBlbnRyeS5vYmplY3RUeXBlKSkge1xyXG4gICAgICAgICAgICBjYXNlICdzdGFydCc6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlN0YXJ0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdjb250aW51ZSc6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIkNvbnRpbnVlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICd2aWV3Jzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiVmlld1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge0dhbWlmaWNhdGlvblJvdXRlcn0gZnJvbSBcIi4uL3VybHMvR2FtaWZpY2F0aW9uUm91dGVyXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7QmFkZ2VzU2VydmljZX0gZnJvbSBcIi4vQmFkZ2VzU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJQWN0aW9uQmFkZ2V9IGZyb20gXCIuL21vZGVscy9JQWN0aW9uQmFkZ2VcIjtcclxuaW1wb3J0IHtSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXJ9IGZyb20gXCIuLi9jb21wb25lbnRzL3JpY2h0ZXh0L1JpY2hUZXh0RWRpdG9yRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IFN0cmluZ0J1aWxkZXIgfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFjdGl2aXR5QmFkZ2VFZGl0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImdhbWlmaWNhdGlvbi5BY3Rpdml0eUJhZGdlRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgYmFkZ2U6IElBY3Rpb25CYWRnZTtcclxuXHJcbiAgICBwdWJsaWMgbmV3QmFkZ2VJbWFnZTogRmlsZTtcclxuICAgIHB1YmxpYyBoYXNBbGxCdXNpbmVzc1VuaXRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNTeXN0ZW1BZG1pbmlzdHJhdG9yOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSByZWRpcmVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBkaXNhYmxlZFVwbG9hZEJ1dHRvbjogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgYmFkZ2VCdUlkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHVzZXI6IElVc2VySW5mbztcclxuICAgIHB1YmxpYyB0b29sYmFyID1cclxuICAgICAgICBbW10sWydib2xkJywgJ2l0YWxpY3MnLCAndW5kZXJsaW5lJywgJ3N0cmlrZVRocm91Z2gnXSxbXSxcclxuICAgICAgICAgICAgWydoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdwJywgJ3ByZScsICdxdW90ZSddLFtdLFxyXG4gICAgICAgICAgICBbUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0ZVTExTQ1JFRU5fQlVUVE9OLCAnaHRtbCcsICdjaGFyY291bnQnXV07XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIlVwbG9hZFwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBHYW1pZmljYXRpb25Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBCYWRnZXNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBuZy5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogbmcuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBnYW1pZmljYXRpb25Sb3V0ZXI6IEdhbWlmaWNhdGlvblJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFkZ2VzU2VydmljZTogQmFkZ2VzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCk7XHJcblxyXG4gICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5pc1N5c3RlbUFkbWluaXN0cmF0b3IoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTeXN0ZW1BZG1pbmlzdHJhdG9yID0gcmVzdWx0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9CQURHRVNfS0VZKTtcclxuICAgICAgICBsZXQgYmFkZ2VJZDogbnVtYmVyID0gdGhpcy4kcm91dGVQYXJhbXNbR2FtaWZpY2F0aW9uUm91dGVyLkJBREdFX0lEX1BBUkFNXTtcclxuICAgICAgICBsZXQgaGFzQmFkZ2VJZDogYm9vbGVhbiA9ICFpc05hTihiYWRnZUlkKTtcclxuXHJcbiAgICAgICAgaWYgKGhhc0JhZGdlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UuZ2V0QWN0aXZpdHlCYWRnZShiYWRnZUlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkNlcnRpZmljYXRlIHRlbXBsYXRlIG5vdCBmb3VuZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9CYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzU3lzdGVtQWRtaW5pc3RyYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiRWRpdCBiYWRnZVwiICsgXCIgJ1wiICsgcmVzdWx0LmV2ZW50TmFtZSArIFwiJ1wiKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJWaWV3IGJhZGdlXCIgKyBcIiAnXCIgKyByZXN1bHQuZXZlbnROYW1lICsgXCInXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5kcmFnb3ZlckV2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJFdmVudEhhbmRsZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldEltYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmV3QmFkZ2VJbWFnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmJhZGdlLnByZXZpZXdVcmwgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRCYWRnZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuYmFkZ2UuYnVzaW5lc3NVbml0SWQgJiYgdGhpcy5iYWRnZUJ1SWQpXHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2UuYnVzaW5lc3NVbml0SWQgPSB0aGlzLmJhZGdlQnVJZDtcclxuICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UudXBkYXRlQWN0aXZpdHlCYWRnZSh0aGlzLmJhZGdlLmlkLCB0aGlzLmJhZGdlKS50aGVuKGJhZGdlSWQgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoJ01vZGlmaWNhdGlvbnMgb2YgYmFkZ2UgOmJhZGdlTmFtZSBoYXZlIGJlZW4gc2F2ZWQnKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoJzpiYWRnZU5hbWUnLCB0aGlzLmJhZGdlLm5hbWUpLmJ1aWxkKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZXdCYWRnZUltYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXBsb2FkID0gdGhpcy5uZXdCYWRnZUltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnVwbG9hZCh0aGlzLm5ld0JhZGdlSW1hZ2UsIGJhZGdlSWQsIFwicHJldmlld1wiKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4kcS53aGVuKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdXBsb2FkLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkVXBsb2FkQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYmFkZ2UucHJldmlld1VybCAmJiB0aGlzLmJhZGdlLnByZXZpZXdJZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLnJlbW92ZUFjdGl2aXR5QmFkZ2VJbWFnZSh0aGlzLmJhZGdlLmlkKS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhZGdlLnByZXZpZXdJZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9CYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0JhY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IubmFtZS5kdXBsaWNhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQmFkZ2UgbmFtZSBtdXN0IGJlIHVuaXF1ZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRyYWdvdmVyRXZlbnRIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcclxuICAgICAgICBsZXQgZHJvcENlcnRpZmljYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkcm9wQmFkZ2VJbWFnZUZyb21FZGl0XCIpO1xyXG4gICAgICAgIGxldCBkcm9wQ2VydGlmaWNhdGVOb3RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkcm9wQmFkZ2VJbWFnZUZyb21FZGl0Tm90ZVwiKTtcclxuICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ25vbmUnO1xyXG5cclxuICAgICAgICBpZiAoZHJvcENlcnRpZmljYXRlID09IGVsZW0gfHwgZHJvcENlcnRpZmljYXRlTm90ZSA9PSBlbGVtKSB7XHJcbiAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0JhY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5nYW1pZmljYXRpb25Sb3V0ZXIuYmFkZ2VzVXJsKCkpXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGxvYWQoZmlsZTogRmlsZSwgYmFkZ2VJZDogbnVtYmVyLCBmaWxlVHlwZTogc3RyaW5nKTogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkUHJvbWlzZTxGaWxlPiB7XHJcbiAgICAgICAgbGV0IHVybEJ1aWxkZXIgPSB0aGlzLnVybC5iYXNlKFwiL2FwaS9iYWRnZXMvYWN0aXZpdHlCYWRnZS91cGxvYWQ/YmFkZ2VJZD06YmFkZ2VJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YmFkZ2VJZFwiLCBiYWRnZUlkKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGFuZ3VsYXIuY29weSh1cmxCdWlsZGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY3RpdmF0ZShpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLmFjdGl2YXRlQWN0aXZpdHlCYWRnZShpZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZSgnQmFkZ2UgOmJhZGdlTmFtZSBoYXMgYmVlbiBhY3RpdmF0ZWQnKS53aXRoKCc6YmFkZ2VOYW1lJywgdGhpcy5iYWRnZS5uYW1lKS5idWlsZCgpKTtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZS5pc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVhY3RpdmF0ZShpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLmRlYWN0aXZhdGVBY3Rpdml0eUJhZGdlKGlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKCdCYWRnZSA6YmFkZ2VOYW1lIGhhcyBiZWVuIGRlYWN0aXZhdGVkJykud2l0aCgnOmJhZGdlTmFtZScsIHRoaXMuYmFkZ2UubmFtZSkuYnVpbGQoKSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0JhY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbWFnZUZvckFjdGl2aXR5QmFkZ2UoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5iYWRnZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYmFkZ2UucHJldmlld1VybCAmJiB0aGlzLmJhZGdlLmJhZGdlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYHRoZW1lcy9kZWZhdWx0L2ltZy9hY3Rpb25CYWRnZXMvJHt0aGlzLmJhZGdlLmJhZGdlS2V5fS5wbmdgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJhZGdlLnByZXZpZXdVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBCYWRnZVRlbXBsYXRlRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJnYW1pZmljYXRpb24uQmFkZ2VUZW1wbGF0ZUVkaXRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0JBREdFU19LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiRWRpdCBiYWRnZVwiKS51cGRhdGUoKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhZGdlVGVtcGxhdGVzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImdhbWlmaWNhdGlvbi5CYWRnZVRlbXBsYXRlc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fR0FNSUZJQ0FUSU9OX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkJhZGdlc1wiKS51cGRhdGUoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtJQmFkZ2V9IGZyb20gXCIuL21vZGVscy9JQmFkZ2VcIjtcclxuaW1wb3J0IHtHYW1pZmljYXRpb25Sb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0dhbWlmaWNhdGlvblJvdXRlclwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge0JhZGdlc1NlcnZpY2V9IGZyb20gXCIuL0JhZGdlc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eX0gZnJvbSBcIi4uL3JlZmVyZW5jZS9tb2RlbHMvSVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHlcIjtcclxuaW1wb3J0IHtJQnVzaW5lc3NVbml0fSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9tb2RlbHMvSUJ1c2luZXNzVW5pdFwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lBY3Rpb25CYWRnZX0gZnJvbSBcIi4vbW9kZWxzL0lBY3Rpb25CYWRnZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhZGdlc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJnYW1pZmljYXRpb24uQmFkZ2VzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuXHJcblxyXG4gICAgcHVibGljIGJhZGdlc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQmFkZ2U+O1xyXG4gICAgcHVibGljIGFjdGl2aXR5QmFkZ2VzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElBY3Rpb25CYWRnZT47XHJcblxyXG4gICAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHNob3dCdXNpbmVzc1VuaXRTZWxlY3RvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzOiBBcnJheTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT47XHJcbiAgICBwcml2YXRlIHVzZXI6IElVc2VySW5mbztcclxuICAgIHByaXZhdGUgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgaXNTeXN0ZW1BZG1pbmlzdHJhdG9yOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSB2aWV3VHlwZTogc3RyaW5nID0gJ0JBREdFU19ESUNUSU9OQVJZJztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgR2FtaWZpY2F0aW9uUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQmFkZ2VzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBnYW1pZmljYXRpb25Sb3V0ZXI6IEdhbWlmaWNhdGlvblJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFkZ2VzU2VydmljZTogQmFkZ2VzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY29tbW9uRmlsdGVyU2VydmljZTogQ29tbW9uRmlsdGVyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVzaW5lc3NVbml0c1NlcnZpY2U6IEJ1c2luZXNzVW5pdHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc0FwaTogUGVybWlzc2lvbnNTZXJ2aWNlKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZFN5c3RlbVBlcm1pc3Npb25zKHN5c3RlbVBlcm1pc3Npb25zID0+IHN5c3RlbVBlcm1pc3Npb25zLnZpZXdBbnlMZWFybmluZ09iamVjdCk7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLmlzU3lzdGVtQWRtaW5pc3RyYXRvcigpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc1N5c3RlbUFkbWluaXN0cmF0b3IgPSByZXN1bHRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9CQURHRVNfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkJhZGdlc1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJQmFkZ2U+KHRoaXMuJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2JhZGdlc1wiKSkpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZpdHlCYWRnZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJQWN0aW9uQmFkZ2U+KHRoaXMuJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2JhZGdlcy9hY3Rpdml0eVwiKSkpO1xyXG4gICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5hY3Rpdml0eUJhZGdlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gXCJcIjtcclxuICAgICAgICB0aGlzLmFjdGl2aXR5QmFkZ2VzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xyXG4gICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSB1c2VyLmFsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgIGlmICghdXNlci5hbGxCdXNpbmVzc1VuaXRzICYmIHVzZXIuYnVzaW5lc3NVbml0cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QnVzaW5lc3NVbml0U2VsZWN0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IHVzZXIuYnVzaW5lc3NVbml0c1swXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEJ1c2luZXNzVW5pdHNGb3JTZWxlY3RvcigpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzID0gPEFycmF5PElCdXNpbmVzc1VuaXQ+PnJlc3VsdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IHZpZXdUeXBlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnQkFER0VTX1ZJRVdfVFlQRScpO1xyXG4gICAgICAgIGlmICh2aWV3VHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0VkaXRhYmxlKGVudGl0eTogSUJhZGdlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUxlYXJuaW5nT2JqZWN0KSB7XHJcbiAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyB8fCAodGhpcy51c2VyLmJ1c2luZXNzVW5pdHMgJiYgdGhpcy51c2VyLmJ1c2luZXNzVW5pdHMuaW5kZXhPZihlbnRpdHkuYnVzaW5lc3NVbml0SWQpICE9PSAtMSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVudGl0eUlzQWN0aXZlUHJvcGVydHkoZW50aXR5OiBJQmFkZ2UpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZW50aXR5LmlzQWN0aXZlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBY3RpdmVMaW5rU3RhdGUoZW50aXR5KTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlJc0FjdGl2ZVByb3BlcnR5KGVudGl0eSkgPyBcIlllc1wiIDogXCJOb1wiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJc0FjdGl2ZUdyaWRTdHlsZShpc0FjdGl2ZTogYm9vbGVhbik6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWN0aXZlXHJcbiAgICAgICAgICAgID8ge31cclxuICAgICAgICAgICAgOiB7XCJjb2xvclwiOiBcIiM5OTk5OTlcIn07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQnVzaW5lc3NVbml0Q2hhbmdlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXdUeXBlID09ICdCQURHRVNfRElDVElPTkFSWScpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdUeXBlID09ICdERUZBVUxUX0JBREdFUycpIHtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpdml0eUJhZGdlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJ1c2luZXNzVW5pdE5hbWVCeUlkKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgaWYgKGJ1c2luZXNzVW5pdElkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5idXNpbmVzc1VuaXRzLmZpbHRlcihidSA9PiBidS5pZCA9PSBidXNpbmVzc1VuaXRJZClbMF0ubmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udmVydElzQWN0aXZlKGlzQWN0aXZlOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gaXNBY3RpdmUgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaXNBY3RpdmUgPyAnWWVzJyA6ICdObydcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhpZGVBY3RpdmVCdXR0b24oYmFkZ2U6IElCYWRnZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBiYWRnZS5pc0FjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RlYWN0aXZhdGVCdXR0b24oYmFkZ2U6IElCYWRnZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBiYWRnZS5pc0FjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWN0aXZhdGUoaWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXdUeXBlID09ICdCQURHRVNfRElDVElPTkFSWScpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLmFjdGl2YXRlKGlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5nZXRCYWRnZShpZCkudGhlbihiYWRnZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKCdCYWRnZSA6YmFkZ2VOYW1lIGhhcyBiZWVuIGFjdGl2YXRlZCcpLndpdGgoJzpiYWRnZU5hbWUnLCBiYWRnZS5uYW1lKS5idWlsZCgpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld1R5cGUgPT0gJ0RFRkFVTFRfQkFER0VTJykge1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UuYWN0aXZhdGVBY3Rpdml0eUJhZGdlKGlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5nZXRBY3Rpdml0eUJhZGdlKGlkKS50aGVuKGJhZGdlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoJ0JhZGdlIDpiYWRnZU5hbWUgaGFzIGJlZW4gYWN0aXZhdGVkJykud2l0aCgnOmJhZGdlTmFtZScsIGJhZGdlLm5hbWUpLmJ1aWxkKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZpdHlCYWRnZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWFjdGl2YXRlKGlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy52aWV3VHlwZSA9PSAnQkFER0VTX0RJQ1RJT05BUlknKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5nZXRSZWxhdGVkR2FtZUxldmVsUmV3YXJkc0ZvckJhZGdlKGlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UuZ2V0UmVsYXRlZExlYXJuaW5nT2JqRm9yQmFkZ2UoaWQpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlbGF0ZWRJdGVtcyA9IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc2l6ZSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEl0ZW1zW2tleV0gPSByZXNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZWxhdGVkSXRlbXMpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLmRlYWN0aXZhdGUoaWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5nZXRCYWRnZShpZCkudGhlbihiYWRnZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZSgnQmFkZ2UgOmJhZGdlTmFtZSBoYXMgYmVlbiBkZWFjdGl2YXRlZCcpLndpdGgoJzpiYWRnZU5hbWUnLCBiYWRnZS5uYW1lKS5idWlsZCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdHRlZEZ1bmM6IChuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyA9IChuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8cD5cIiArIChpbmRleCArIDEpICsgXCIuIFwiICsgbmFtZSArIFwiPC9wPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZyA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCI8cD5UaGUgYmFkZ2UgY2Fubm90IGJlIGRlYWN0aXZhdGVkLiBJdCBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgaW5zdGFuY2VzOjppdGVtcyA8L3A+XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOml0ZW1zXCIsIHRoaXMuZ2V0SXRlbXNGb3JtYXR0ZWRTdHJpbmcocmVsYXRlZEl0ZW1zLCBmb3JtYXR0ZWRGdW5jLCBcIlxcblwiKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0obWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJEZWFjdGl2YXRlIGJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRGdW5jOiAobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgPSAobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIjxwPlwiICsgKGluZGV4ICsgMSkgKyBcIi4gXCIgKyBuYW1lICsgXCI8L3A+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIjxwPlRoZSBiYWRnZSBjYW5ub3QgYmUgZGVhY3RpdmF0ZWQuIEl0IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBnYW1lIHByb2dyYW1zOjpnYW1lcyA8L3A+XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmdhbWVzXCIsIHRoaXMuZ2V0SXRlbXNGb3JtYXR0ZWRTdHJpbmcocmVzdWx0LCBmb3JtYXR0ZWRGdW5jLCBcIlxcblwiKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0obWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJEZWxldGUgYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld1R5cGUgPT0gJ0RFRkFVTFRfQkFER0VTJykge1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UuZGVhY3RpdmF0ZUFjdGl2aXR5QmFkZ2UoaWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLmdldEFjdGl2aXR5QmFkZ2UoaWQpLnRoZW4oYmFkZ2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZSgnQmFkZ2UgOmJhZGdlTmFtZSBoYXMgYmVlbiBkZWFjdGl2YXRlZCcpLndpdGgoJzpiYWRnZU5hbWUnLCBiYWRnZS5uYW1lKS5idWlsZCgpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2aXR5QmFkZ2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEl0ZW1zRm9ybWF0dGVkU3RyaW5nPFQ+KHJlbGF0ZWRJdGVtczogYW55LCBmb3JtYXR0ZWRGdW5jOiAoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHJlbGF0ZWRJdGVtcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB0aXRsZTtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2dhbWVzJykge1xyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSByZWxhdGVkSXRlbXNba2V5XS5sZW5ndGggPT09IDEgPyAnR2FtZSBwcm9ncmFtJyA6ICdHYW1lIHByb2dyYW1zJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjb3Vyc2VzJykge1xyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSByZWxhdGVkSXRlbXNba2V5XS5sZW5ndGggPT09IDEgPyAnQ291cnNlJyA6ICdDb3Vyc2VzJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdsZWFybmluZyBwYXRocycpIHtcclxuICAgICAgICAgICAgICAgIHRpdGxlID0gcmVsYXRlZEl0ZW1zW2tleV0ubGVuZ3RoID09PSAxID8gJ0xlYXJuaW5nIHBhdGgnIDogJ0xlYXJuaW5nIHBhdGhzJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgIHJlc3VsdCArPSBgPGg1IHN0eWxlPVwiZm9udC1zaXplOiAxNnB4XCI+PGI+JHt0aXRsZX08L2I+PC9oNT5gO1xyXG4gICAgICAgICAgICByZWxhdGVkSXRlbXNba2V5XS5mb3JFYWNoKChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZm9ybWF0dGVkRnVuYyhpdGVtLCBpbmRleCkgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9VcmwodXJsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAodmlld1R5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIkRFRkFVTFRfQkFER0VTXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gXCJERUZBVUxUX0JBREdFU1wiO1xyXG4gICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnQkFER0VTX1ZJRVdfVFlQRScsIHRoaXMudmlld1R5cGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0JBREdFU19ESUNUSU9OQVJZJzpcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSBcIkJBREdFU19ESUNUSU9OQVJZXCI7XHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdCQURHRVNfVklFV19UWVBFJywgdGhpcy52aWV3VHlwZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEltYWdlRm9yQWN0aXZpdHlCYWRnZShiYWRnZTogSUFjdGlvbkJhZGdlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoYmFkZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCFiYWRnZS5maWxlSWQgJiYgYmFkZ2UuYmFkZ2VLZXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgdGhlbWVzL2RlZmF1bHQvaW1nL2FjdGlvbkJhZGdlcy8ke2JhZGdlLmJhZGdlS2V5fS5wbmdgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiYWRnZS5wcmV2aWV3VXJsID8gYmFkZ2UucHJldmlld1VybCA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbWFnZUJhZGdlKGJhZGdlOiBJQWN0aW9uQmFkZ2UpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChiYWRnZSkge1xyXG4gICAgICAgICAgICBpZiAoIWJhZGdlLmZpbGVJZCAmJiBiYWRnZS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2VOYW1lID0gYmFkZ2UubmFtZS5zcGxpdCgnICcpLmpvaW4oJycpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChiYWRnZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU5hbWUgPSBcIkNvdXJzZUZpbmlzaGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU5hbWUgPSBcIkxlYXJuaW5nUGF0aEZpbmlzaGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB0aGVtZXMvZGVmYXVsdC9pbWcvYmFkZ2VzLyR7aW1hZ2VOYW1lfS5wbmdgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiYWRnZS5wcmV2aWV3VXJsID8gYmFkZ2UucHJldmlld1VybCA6ICcnO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7R2FtaWZpY2F0aW9uUm91dGVyfSBmcm9tIFwiLi4vdXJscy9HYW1pZmljYXRpb25Sb3V0ZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtCYWRnZXNTZXJ2aWNlfSBmcm9tIFwiLi9CYWRnZXNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJhZGdlfSBmcm9tIFwiLi9tb2RlbHMvSUJhZGdlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQmFkZ2VzQ3JlYXRlRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJnYW1pZmljYXRpb24uQmFkZ2VzQ3JlYXRlRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgYmFkZ2U6IElCYWRnZTtcclxuXHJcbiAgICBwdWJsaWMgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSByZWRpcmVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgYmFkZ2VCdUlkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGFjY2Vzc1RvRWRpdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwcml2YXRlIHVzZXI6IElVc2VySW5mbztcclxuXHJcbiAgICBwdWJsaWMgcHJldmlldzogRmlsZTtcclxuICAgIHB1YmxpYyBwcmV2aWV3VXJsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaGFzUHJldmlld1VybENhbmNlbGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY3JvcHBlZEltYWdlOiBGaWxlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEdhbWlmaWNhdGlvblJvdXRlci5OQU1FLFxyXG4gICAgICAgIEJhZGdlc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdXBsb2FkZXI6IG5nLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBuZy5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGdhbWlmaWNhdGlvblJvdXRlcjogR2FtaWZpY2F0aW9uUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBiYWRnZXNTZXJ2aWNlOiBCYWRnZXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZFN5c3RlbVBlcm1pc3Npb25zKHN5c3RlbVBlcm1pc3Npb25zID0+IHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUxlYXJuaW5nT2JqZWN0KTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0JBREdFU19LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTmV3IGJhZGdlXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgIGxldCBiYWRnZUlkOiBudW1iZXIgPSB0aGlzLiRyb3V0ZVBhcmFtc1tHYW1pZmljYXRpb25Sb3V0ZXIuQkFER0VfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBoYXNCYWRnZUlkOiBib29sZWFuID0gIWlzTmFOKGJhZGdlSWQpO1xyXG5cclxuICAgICAgICBpZiAoaGFzQmFkZ2VJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UuZ2V0QmFkZ2UoYmFkZ2VJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld1VybCA9IHRoaXMuYmFkZ2UucHJldmlld1VybCA/IHRoaXMuYmFkZ2UucHJldmlld1VybCA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJhZGdlLmJ1c2luZXNzVW5pdElkID09IG51bGwgJiYgIXVzZXIuYWxsQnVzaW5lc3NVbml0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5iYWRnZS5idXNpbmVzc1VuaXRJZCAhPSBudWxsICYmICF1c2VyLmFsbEJ1c2luZXNzVW5pdHMgJiYgdXNlci5idXNpbmVzc1VuaXRzLmluZGV4T2YodGhpcy5iYWRnZS5idXNpbmVzc1VuaXRJZCkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb0VkaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJDZXJ0aWZpY2F0ZSB0ZW1wbGF0ZSBub3QgZm91bmRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY2Nlc3NUb0VkaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkVkaXQgYmFkZ2VcIiArIFwiICdcIiArIHJlc3VsdC5uYW1lICsgXCInXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIlZpZXcgYmFkZ2VcIiArIFwiICdcIiArIHJlc3VsdC5uYW1lICsgXCInXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSB1c2VyLmFsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5idXNpbmVzc1VuaXRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWRnZUJ1SWQgPSB1c2VyLmJ1c2luZXNzVW5pdHNbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIk5ldyBiYWRnZVwiKS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVCYWRnZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuYmFkZ2UuYnVzaW5lc3NVbml0SWQgJiYgdGhpcy5iYWRnZUJ1SWQpXHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2UuYnVzaW5lc3NVbml0SWQgPSB0aGlzLmJhZGdlQnVJZDtcclxuICAgICAgICBsZXQgY2FsbCA9IHRoaXMuYmFkZ2UuaWRcclxuICAgICAgICAgICAgPyB0aGlzLmJhZGdlc1NlcnZpY2UudXBkYXRlQmFkZ2UodGhpcy5iYWRnZS5pZCwgdGhpcy5iYWRnZSlcclxuICAgICAgICAgICAgOiB0aGlzLmJhZGdlc1NlcnZpY2UuY3JlYXRlQmFkZ2UodGhpcy5iYWRnZSk7XHJcbiAgICAgICAgY2FsbC50aGVuKGJhZGdlSWQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcHJldmlldzogRmlsZSA9IHRoaXMuY3JvcHBlZEltYWdlID09IHVuZGVmaW5lZCA/IHRoaXMucHJldmlldyA6IHRoaXMuY3JvcHBlZEltYWdlO1xyXG4gICAgICAgICAgICBpZiAocHJldmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZChwcmV2aWV3LCBiYWRnZUlkLCBcInByZXZpZXdcIikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFkZ2UuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiTW9kaWZpY2F0aW9ucyBvZiBiYWRnZSA6YmFkZ2VOYW1lIGhhdmUgYmVlbiBzYXZlZFwiKS53aXRoKCc6YmFkZ2VOYW1lJywgdGhpcy5iYWRnZS5uYW1lKS5idWlsZCgpKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJCYWRnZSA6YmFkZ2VOYW1lIGhhcyBiZWVuIHNhdmVkXCIpLndpdGgoJzpiYWRnZU5hbWUnLCB0aGlzLmJhZGdlLm5hbWUpLmJ1aWxkKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNQcmV2aWV3VXJsQ2FuY2VsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5yZW1vdmVCYWRnZUltYWdlKHRoaXMuYmFkZ2UuaWQpLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2UucHJldmlld0lkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9CYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJhZGdlLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiTW9kaWZpY2F0aW9ucyBvZiBiYWRnZSA6YmFkZ2VOYW1lIGhhdmUgYmVlbiBzYXZlZFwiKS53aXRoKCc6YmFkZ2VOYW1lJywgdGhpcy5iYWRnZS5uYW1lKS5idWlsZCgpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiQmFkZ2UgOmJhZGdlTmFtZSBoYXMgYmVlbiBzYXZlZFwiKS53aXRoKCc6YmFkZ2VOYW1lJywgdGhpcy5iYWRnZS5uYW1lKS5idWlsZCgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0JhY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5uYW1lLmR1cGxpY2F0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkJhZGdlIG5hbWUgbXVzdCBiZSB1bmlxdWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvQmFjaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmdhbWlmaWNhdGlvblJvdXRlci5iYWRnZXNVcmwoKSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZChmaWxlOiBGaWxlLCBiYWRnZUlkOiBudW1iZXIsIGZpbGVUeXBlOiBzdHJpbmcpOiBhbmd1bGFyLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRQcm9taXNlPEZpbGU+IHtcclxuICAgICAgICBsZXQgdXJsQnVpbGRlciA9IHRoaXMudXJsLmJhc2UoXCIvYXBpL2JhZGdlcy91cGxvYWQ/YmFkZ2VJZD06YmFkZ2VJZCZmaWxlVHlwZT06ZmlsZVR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJhZGdlSWRcIiwgYmFkZ2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmZpbGVUeXBlXCIsIGZpbGVUeXBlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGFuZ3VsYXIuY29weSh1cmxCdWlsZGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY3RpdmF0ZShpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLmFjdGl2YXRlKGlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiQmFkZ2UgOmJhZGdlTmFtZSBoYXMgYmVlbiBhY3RpdmF0ZWRcIikud2l0aCgnOmJhZGdlTmFtZScsIHRoaXMuYmFkZ2UubmFtZSkuYnVpbGQoKSk7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2UuaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGUoaWQ6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBnYW1lcztcclxuICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UuZ2V0UmVsYXRlZEdhbWVMZXZlbFJld2FyZHNGb3JCYWRnZShpZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBnYW1lcyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLmdldFJlbGF0ZWRMZWFybmluZ09iakZvckJhZGdlKGlkKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbGF0ZWRJdGVtcyA9IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zaXplICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEl0ZW1zW2tleV0gPSByZXNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICggZ2FtZXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRJdGVtc1snZ2FtZXMnXSA9ICBnYW1lcztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbGF0ZWRJdGVtcykubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UuZGVhY3RpdmF0ZShpZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiQmFkZ2UgOmJhZGdlTmFtZSBoYXMgYmVlbiBkZWFjdGl2YXRlZFwiKS53aXRoKCc6YmFkZ2VOYW1lJywgdGhpcy5iYWRnZS5uYW1lKS5idWlsZCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9CYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybWF0dGVkRnVuYzogKG5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nID0gKG5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiPHA+XCIgKyAoaW5kZXggKyAxKSArIFwiLiBcIiArIG5hbWUgKyBcIjwvcD5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlOiBzdHJpbmcgPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiPHA+VGhlIGJhZGdlIGNhbm5vdCBiZSBkZWFjdGl2YXRlZC4gSXQgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIGluc3RhbmNlczo6aXRlbXMgPC9wPlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOml0ZW1zXCIsIHRoaXMuZ2V0SXRlbXNGb3JtYXR0ZWRTdHJpbmcocmVsYXRlZEl0ZW1zLCBmb3JtYXR0ZWRGdW5jLCBcIlxcblwiKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkRlYWN0aXZhdGUgYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlKGlkOiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgZ2FtZXM7XHJcbiAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLmdldFJlbGF0ZWRHYW1lTGV2ZWxSZXdhcmRzRm9yQmFkZ2UoaWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgZ2FtZXMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5nZXRSZWxhdGVkTGVhcm5pbmdPYmpGb3JCYWRnZShpZCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlbGF0ZWRJdGVtcyA9IHt9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLnNpemUgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhyZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEl0ZW1zW2tleV0gPSByZXNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICggZ2FtZXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEl0ZW1zWydnYW1lcyddID0gIGdhbWVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbGF0ZWRJdGVtcykubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiVGhpcyBiYWRnZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBDb250aW51ZT9cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiRGVsZXRlIGJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UucmVtb3ZlKGlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJCYWRnZSA6YmFkZ2VOYW1lIGhhcyBiZWVuIHJlbW92ZWRcIikud2l0aCgnOmJhZGdlTmFtZScsIHRoaXMuYmFkZ2UubmFtZSkuYnVpbGQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRGdW5jOiAobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgPSAobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8cD5cIiArIChpbmRleCArIDEpICsgXCIuIFwiICsgbmFtZSArIFwiPC9wPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhyZXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZyA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCI8cD5UaGUgYmFkZ2UgY2Fubm90IGJlIHJlbW92ZWQuIEl0IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBpbnN0YW5jZXM6Oml0ZW1zIDwvcD5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjppdGVtc1wiLCB0aGlzLmdldEl0ZW1zRm9ybWF0dGVkU3RyaW5nKHJlbGF0ZWRJdGVtcywgZm9ybWF0dGVkRnVuYywgXCJcXG5cIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShtZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJEZWxldGUgYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRJdGVtc0Zvcm1hdHRlZFN0cmluZzxUPihyZWxhdGVkSXRlbXM6IGFueSwgZm9ybWF0dGVkRnVuYzogKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgICAgICBPYmplY3Qua2V5cyhyZWxhdGVkSXRlbXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdGl0bGU7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdnYW1lcycpIHtcclxuICAgICAgICAgICAgICAgIHRpdGxlID0gcmVsYXRlZEl0ZW1zW2tleV0ubGVuZ3RoID09PSAxID8gJ0dhbWUgcHJvZ3JhbScgOiAnR2FtZSBwcm9ncmFtcyc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY291cnNlcycpIHtcclxuICAgICAgICAgICAgICAgIHRpdGxlID0gcmVsYXRlZEl0ZW1zW2tleV0ubGVuZ3RoID09PSAxID8gJ0NvdXJzZScgOiAnQ291cnNlcyc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbGVhcm5pbmcgcGF0aHMnKSB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHJlbGF0ZWRJdGVtc1trZXldLmxlbmd0aCA9PT0gMSA/ICdMZWFybmluZyBwYXRoJyA6ICdMZWFybmluZyBwYXRocyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgPGg1IHN0eWxlPVwiZm9udC1zaXplOiAxNnB4XCI+PGI+JHt0aXRsZX08L2I+PC9oNT5gO1xyXG4gICAgICAgICAgICByZWxhdGVkSXRlbXNba2V5XS5mb3JFYWNoKChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZm9ybWF0dGVkRnVuYyhpdGVtLCBpbmRleCkgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0UHJldmlldygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHJldmlld1VybCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXdVcmwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3JvcHBlZEltYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JvcHBlZEltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0Nyb3BwZXJNb2RhbEFmdGVyTG9hZCgpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ICE9IHVuZGVmaW5lZCB8fCB0aGlzLnByZXZpZXdVcmwgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hvd0Nyb3BwZXJNb2RhbCgpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2hvd0Nyb3BwZXJNb2RhbEFmdGVyTG9hZCgpXHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0Nyb3BwZXJNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICAkKFwiI2ltYWdlQ3JvcHBlck1vZGFsXCIpLm1vZGFsKFwic2hvd1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdG9yZVByZXZpZXdVcmwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucHJldmlld1VybCA9IHRoaXMuYmFkZ2UucHJldmlld1VybDtcclxuICAgICAgICB0aGlzLmNyb3BwZWRJbWFnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbWFnZUJhZGdlKGJhZGdlOiBJQmFkZ2UpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChiYWRnZSkge1xyXG4gICAgICAgICAgICBsZXQgaW1hZ2VOYW1lO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGJhZGdlLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDpcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZU5hbWUgPSBcIkNvdXJzZUZpbmlzaGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMTpcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZU5hbWUgPSBcIkxlYXJuaW5nUGF0aEZpbmlzaGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGB0aGVtZXMvZGVmYXVsdC9pbWcvYmFkZ2VzLyR7aW1hZ2VOYW1lfS5wbmdgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lCYWRnZX0gZnJvbSBcIi4vbW9kZWxzL0lCYWRnZVwiO1xyXG5pbXBvcnQge0lIdHRwUHJvbWlzZUNhbGxiYWNrQXJnfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQge0lBY3Rpb25CYWRnZX0gZnJvbSBcIi4vbW9kZWxzL0lBY3Rpb25CYWRnZVwiO1xyXG5pbXBvcnQge0lCYWRnZVRlbXBsYXRlfSBmcm9tIFwiLi9tb2RlbHMvSUJhZGdlVGVtcGxhdGVcIjtcclxuaW1wb3J0IHtJQmFkZ2VUZW1wbGF0ZURldGFpbHN9IGZyb20gXCIuL21vZGVscy9JQmFkZ2VUZW1wbGF0ZURldGFpbHNcIjtcclxuaW1wb3J0IHtJQmFkZ2VUZW1wbGF0ZURldGFpbHNTYXZlfSBmcm9tIFwiLi9tb2RlbHMvSUJhZGdlVGVtcGxhdGVEZXRhaWxzU2F2ZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhZGdlc1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJnYW1pZmljYXRpb24uQmFkZ2VzU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QmFkZ2UoaWQ6IG51bWJlcik6IG5nLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9iYWRnZXMvOmlkL2RldGFpbHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJhZGdlKGlkOiBudW1iZXIsIGJhZGdlOiBJQmFkZ2UpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvYmFkZ2VzLzppZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpLnNlcnZpY2UoKSwgYmFkZ2UpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUJhZGdlKGJhZGdlOiBJQmFkZ2UpOiBuZy5JUHJvbWlzZTxJQmFkZ2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2JhZGdlc1wiKS5zZXJ2aWNlKCksIGJhZGdlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY3RpdmF0ZShiYWRnZUlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2JhZGdlcy9hY3RpdmF0ZS86YmFkZ2VJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YmFkZ2VJZFwiLCBiYWRnZUlkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGUoYmFkZ2VJZDogbnVtYmVyKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9iYWRnZXMvZGVhY3RpdmF0ZS86YmFkZ2VJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YmFkZ2VJZFwiLCBiYWRnZUlkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEltYWdlVXJsKGlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9iYWRnZXMvaW1hZ2UvOmlkXCIpLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPHN0cmluZz4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlKGJhZGdlSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZSh0aGlzLnVybC5iYXNlKFwiL2FwaS9iYWRnZXMvOmJhZGdlSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJhZGdlSWRcIiwgYmFkZ2VJZCkuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRSZWxhdGVkR2FtZUxldmVsUmV3YXJkc0ZvckJhZGdlKGJhZGdlSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPEFycmF5PHN0cmluZz4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYmFkZ2VzL3JlbGF0ZWRHYW1lcy86YmFkZ2VJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YmFkZ2VJZFwiLCBiYWRnZUlkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFJlbGF0ZWRMZWFybmluZ09iakZvckJhZGdlKGJhZGdlSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPE1hcDxzdHJpbmcsIEFycmF5PHN0cmluZz4+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2JhZGdlcy9yZWxhdGVkTGVhcm5pbmdPYmovOmJhZGdlSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJhZGdlSWRcIiwgYmFkZ2VJZCkuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBY3Rpdml0eUJhZGdlKGlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvYmFkZ2VzL2FjdGl2aXR5LzppZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWN0aXZpdHlCYWRnZUltYWdlVXJsKGlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9iYWRnZXMvYWN0aXZpdHkvaW1hZ2UvOmlkXCIpLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPHN0cmluZz4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQWN0aXZpdHlCYWRnZShpZDogbnVtYmVyLCBiYWRnZTogSUFjdGlvbkJhZGdlKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2JhZGdlcy9hY3Rpdml0eS86aWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCksIGJhZGdlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgYWN0aXZhdGVBY3Rpdml0eUJhZGdlKGJhZGdlSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvYmFkZ2VzL2FjdGl2aXR5L2FjdGl2YXRlLzpiYWRnZUlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpiYWRnZUlkXCIsIGJhZGdlSWQpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVhY3RpdmF0ZUFjdGl2aXR5QmFkZ2UoYmFkZ2VJZDogbnVtYmVyKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9iYWRnZXMvYWN0aXZpdHkvZGVhY3RpdmF0ZS86YmFkZ2VJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YmFkZ2VJZFwiLCBiYWRnZUlkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUFjdGl2aXR5QmFkZ2VJbWFnZShiYWRnZUlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2JhZGdlcy9hY3Rpdml0eUJhZGdlL3JlbW92ZUltYWdlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpiYWRnZUlkXCIsIGJhZGdlSWQpLnNlcnZpY2UoKSwgYmFkZ2VJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQmFkZ2VJbWFnZShiYWRnZUlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2JhZGdlcy9yZW1vdmVJbWFnZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YmFkZ2VJZFwiLCBiYWRnZUlkKS5zZXJ2aWNlKCksIGJhZGdlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU3lzdGVtQWRtaW5pc3RyYXRvcigpOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvYmFkZ2VzL2lzU3lzdGVtQWRtaW5pc3RyYXRvclwiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbm90aWZ5VXNlckFmdGVyUmV3YXJkKGJhZGdlS2V5czogQXJyYXk8c3RyaW5nPiA9IFtdKTogbmcuSVByb21pc2U8QXJyYXk8SUFjdGlvbkJhZGdlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvYmFkZ2VzL25vdGlmeVwiKSwge2JhZGdlS2V5czogYmFkZ2VLZXlzfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VuZEVtYWlsV2l0aEJhZGdlKHJld2FyZFV1aWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBzdWJqZWN0OiBzdHJpbmcsIGVtYWlsOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2JhZGdlcy9zZW5kRW1haWxzXCIpLCB7cmV3YXJkVXVpZDogcmV3YXJkVXVpZCwgbWVzc2FnZTogbWVzc2FnZSwgc3ViamVjdDogc3ViamVjdCwgZW1haWw6IGVtYWlsfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QWN0aXZlUHJvcGVydHkoYmFkZ2VUZW1wbGF0ZUlkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgYWN0aXZlOiBib29sZWFuLCBidXNpbmVzc1VuaXRJZD86IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUJhZGdlVGVtcGxhdGU+IHtcclxuICAgICAgICBsZXQgdXJsID0gXCIvYXBpL2JhZGdlcy90ZW1wbGF0ZXMvOmJhZGdlVGVtcGxhdGVJZC9pbmFjdGl2ZS86YWN0aXZlP3ZlcnNpb249OnZlcnNpb25cIjtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsICsgXCImYnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcGFyYW1ldGVyaXplZFVybCA9IHRoaXMudXJsLmJhc2UodXJsKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YmFkZ2VUZW1wbGF0ZUlkXCIsIGJhZGdlVGVtcGxhdGVJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmFjdGl2ZVwiLCBhY3RpdmUpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp2ZXJzaW9uXCIsIHZlcnNpb24pO1xyXG4gICAgICAgIGlmIChidXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJpemVkVXJsLnBhcmFtKFwiOmJ1c2luZXNzVW5pdElkXCIsIGJ1c2luZXNzVW5pdElkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChwYXJhbWV0ZXJpemVkVXJsLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQmFkZ2VUZW1wbGF0ZURldGFpbHModGVtcGxhdGVEZXRhaWxzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2JhZGdlcy90ZW1wbGF0ZXMvOnRlbXBsYXRlRGV0YWlsc0lkL3JlbW92ZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dGVtcGxhdGVEZXRhaWxzSWRcIiwgdGVtcGxhdGVEZXRhaWxzSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJhZGdlVGVtcGxhdGVEZXRhaWxzQnlJZChiYWRnZVRlbXBsYXRlSWQ6IG51bWJlciwgc2NvcGU6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUJhZGdlVGVtcGxhdGVEZXRhaWxzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2JhZGdlcy90ZW1wbGF0ZXMvOmJhZGdlVGVtcGxhdGVJZC9kZXRhaWxzP3Njb3BlPTpzY29wZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YmFkZ2VUZW1wbGF0ZUlkXCIsIGJhZGdlVGVtcGxhdGVJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNjb3BlXCIsIHNjb3BlKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlQmFkZ2VUZW1wbGF0ZURldGFpbHModGVtcGxhdGVEZXRhaWxzOiBJQmFkZ2VUZW1wbGF0ZURldGFpbHNTYXZlKTogYW5ndWxhci5JUHJvbWlzZTxJQmFkZ2VUZW1wbGF0ZURldGFpbHM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2JhZGdlcy90ZW1wbGF0ZXMvc2F2ZVwiKSwgdGVtcGxhdGVEZXRhaWxzKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQmFkZ2V9IGZyb20gXCIuL21vZGVscy9JQmFkZ2VcIjtcclxuaW1wb3J0IHtJUmV3YXJkfSBmcm9tIFwiLi9tb2RlbHMvSVJld2FyZFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJnYW1pZmljYXRpb24uR2FtZUxlYXJuaW5nT2JqZWN0QWN0aW9uU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGdldFJld2FyZChpZDogbnVtYmVyKTogbmcuSVByb21pc2U8SUJhZGdlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2dhbWVBY3Rpb24vOmlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbSgnOmlkJywgaWQpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlUmV3YXJkKHJld2FyZDogSVJld2FyZCk6IG5nLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvZ2FtZUFjdGlvblwiKS5zZXJ2aWNlKCksIHJld2FyZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdFJld2FyZChpZDogbnVtYmVyLCByZXdhcmQ6IElSZXdhcmQpOiBuZy5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvZ2FtZUFjdGlvbi86aWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCByZXdhcmQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlKGlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2dhbWVBY3Rpb24vYWN0aXZhdGUvOmlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBpZCkuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWFjdGl2YXRlKGlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2dhbWVBY3Rpb24vZGVhY3RpdmF0ZS86aWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZShpZDogbnVtYmVyKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2dhbWVBY3Rpb24vOmlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBpZCkuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5pbXBvcnQge0dhbWlmaWNhdGlvblJvdXRlcn0gZnJvbSBcIi4uL3VybHMvR2FtaWZpY2F0aW9uUm91dGVyXCI7XHJcbmltcG9ydCB7SVFTZXJ2aWNlfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJR2FtZX0gZnJvbSBcIi4vbW9kZWxzL0lHYW1lXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCJcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtHYW1pZmljYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi9HYW1pZmljYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge0lCYWRnZX0gZnJvbSBcIi4vbW9kZWxzL0lCYWRnZVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdhbWVQcm9ncmFtc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJnYW1pZmljYXRpb24uR2FtZVByb2dyYW1zQ29udHJvbGxlclwiO1xyXG4gICAgcHVibGljIGdhbWVzR3JpZE1vZGVsOiBHcmlkTW9kZWw8SUdhbWU+O1xyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgY3VycmVudFVzZXI6IElVc2VySW5mbztcclxuICAgIHB1YmxpYyBoYXNBbGxCdXNpbmVzc1VuaXRzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBHYW1pZmljYXRpb25Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBHYW1pZmljYXRpb25TZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uRmlsdGVyU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBidXNpbmVzc1VuaXRTZXJ2aWNlOiBCdXNpbmVzc1VuaXRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBnYW1pZmljYXRpb25Sb3V0ZXI6IEdhbWlmaWNhdGlvblJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZ2FtaWZpY2F0aW9uU2VydmljZTogR2FtaWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb21tb25GaWx0ZXJTZXJ2aWNlOiBDb21tb25GaWx0ZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkUHJvZ3JhbXMoKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0dBTUVfUFJPR1JBTVNfS0VZKVxyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiR2FtZSBwcm9ncmFtc1wiKVxyXG4gICAgICAgICAgICAuYWRkUGFyZW50TGluayhcIkdhbWlmaWNhdGlvblwiLCBcIiNcIiArIEdhbWlmaWNhdGlvblJvdXRlci5nYW1lUHJvZ3JhbXNSb3V0ZSlcclxuICAgICAgICAgICAgLnVwZGF0ZSgpO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW55TGVhcm5pbmdPYmplY3QpO1xyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyA9IHVzZXIuYWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkUHJvZ3JhbXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5nYW1lc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElHYW1lPihcclxuICAgICAgICAgICAgdGhpcy4kaHR0cCwgdGhpcy51cmwuc2VydmljZSgnYXBpL2dhbWlmaWNhdGlvbicpKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWN0aXZlU3RyaW5nKGdhbWU6IElHYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGdhbWUuYWN0aXZlID8gXCJZZXNcIiA6IFwiTm9cIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoS2V5UHJlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNhdmVTZWFyY2hJbnB1dChHYW1lUHJvZ3JhbXNDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMuZ2FtZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgdGhpcy5nYW1lc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SXNBY3RpdmVHcmlkU3R5bGUoaXNBY3RpdmU6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBpc0FjdGl2ZVxyXG4gICAgICAgICAgICA/IHt9XHJcbiAgICAgICAgICAgIDoge1wiY29sb3JcIjogXCIjOTk5OTk5XCJ9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVBY3RpdmUoZ2FtZTogSUdhbWUpIHtcclxuICAgICAgICB0aGlzLmdhbWlmaWNhdGlvblNlcnZpY2UudG9nZ2xlR2FtZUFjdGl2ZShnYW1lLmlkKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdhbWUuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiR2FtZSBwcm9ncmFtICc6Z2FtZScgaGFzIGJlZW4gYWN0aXZhdGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpnYW1lXCIsIGdhbWUubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJHYW1lIHByb2dyYW0gJzpnYW1lJyBoYXMgYmVlbiBkZWFjdGl2YXRlZC5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6Z2FtZVwiLCBnYW1lLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FtZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRWRpdGFibGUoZW50aXR5OiBJR2FtZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzIHx8ICh0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHMgJiYgdGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzLmluZGV4T2YoZW50aXR5LmJ1c2luZXNzVW5pdElkKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7SUdhbWV9IGZyb20gXCIuL21vZGVscy9JR2FtZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtHYW1pZmljYXRpb25Sb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0dhbWlmaWNhdGlvblJvdXRlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7UmV3YXJkVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1Jld2FyZFR5cGVcIjtcclxuaW1wb3J0IHtJUVNlcnZpY2V9IGZyb20gXCJhbmd1bGFyXCI7XHJcbmltcG9ydCB7SUxldmVsfSBmcm9tIFwiLi9tb2RlbHMvSUxldmVsXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtHYW1pZmljYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi9HYW1pZmljYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJhZGdlfSBmcm9tIFwiLi9tb2RlbHMvSUJhZGdlXCI7XHJcbmltcG9ydCB7QmFkZ2VzU2VydmljZX0gZnJvbSBcIi4vQmFkZ2VzU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgR2FtZVByb2dyYW1zQ3JlYXRlRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gJ2dhbWlmaWNhdGlvbi5HYW1lUHJvZ3JhbXNDcmVhdGVFZGl0Q29udHJvbGxlcic7XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcblxyXG4gICAgcHVibGljIGhhc0FsbEJ1c2luZXNzVW5pdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgZ2FtZUlkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZ2FtZTogSUdhbWUgPSB7fTtcclxuICAgIHB1YmxpYyBpbml0aWFsR2FtZVN0YXRlID0ge307XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyQnVzaW5lc3NVbml0czogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBzaG93TW9kYWxUeXBlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZWRpdGVkTWVzc2FnZVN1YmplY3Q6IHN0cmluZztcclxuICAgIHB1YmxpYyBlZGl0ZWRNZXNzYWdlQm9keTogc3RyaW5nO1xyXG4gICAgcHVibGljIGVkaXRlZFJld2FyZFR5cGVEcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGVkaXRlZFJld2FyZE1lc3NhZ2VUeXBlOiBzdHJpbmcgPSAnZGVmYXVsdCc7XHJcbiAgICBwdWJsaWMgYmFkZ2VCZWZvcmVTYXZlOiBJQmFkZ2U7XHJcbiAgICBwdWJsaWMgY2hvc2VuQmFkZ2U6IElCYWRnZTtcclxuICAgIHB1YmxpYyBsZXZlbHNUb0RlbGV0ZTogQXJyYXk8SUxldmVsPiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBpc0JhZGdlVGFibGVWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYmFkZ2VzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElCYWRnZT47XHJcbiAgICBwdWJsaWMgYmFkZ2VJZHM6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuICAgIHB1YmxpYyBiYWRnZVNlYXJjaFN0cmluZzogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBwdWJsaWMgYWxsb3dOYXZpZ2F0aW9uOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBmb3JtSXNEaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGxldmVsVG9FZGl0OiBJTGV2ZWw7XHJcbiAgICBwdWJsaWMgbmV3TGV2ZWw6IElMZXZlbDtcclxuICAgIHB1YmxpYyBpc1Jld2FyZEV4aXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNHYW1lTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNVc2VyQVN5c3RlbUFkbWluaXN0cmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgR2FtaWZpY2F0aW9uU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEdhbWlmaWNhdGlvblJvdXRlci5OQU1FLFxyXG4gICAgICAgIEJhZGdlc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoUmVkaXJlY3QuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IElRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnVzaW5lc3NVbml0U2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgZ2FtaWZpY2F0aW9uU2VydmljZTogR2FtaWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBnYW1pZmljYXRpb25Sb3V0ZXI6IEdhbWlmaWNhdGlvblJvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBiYWRnZXNTZXJ2aWNlOiBCYWRnZXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0KSB7XHJcbiAgICAgICAgdGhpcy5nYW1lSWQgPSAkcm91dGVQYXJhbXNbR2FtaWZpY2F0aW9uUm91dGVyLlBST0dSQU1fSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBoYXNHYW1lSWQ6IGJvb2xlYW4gPSB0aGlzLmdhbWVJZCAhPSBudWxsO1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fR0FNRV9QUk9HUkFNU19LRVkpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdhbWVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRHYW1lKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKVxyXG4gICAgICAgICAgICAgICAgLmhlYWRlcihcIk5ldyBnYW1lIHByb2dyYW1cIilcclxuICAgICAgICAgICAgICAgIC51cGRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5uZXdMZXZlbCA9IHsgaXNFZGl0OiB0cnVlIH1cclxuICAgICAgICAgICAgdGhpcy5pc0dhbWVMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyA9IHVzZXIuYWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHVzZXIuYnVzaW5lc3NVbml0cywgdGhpcy5jdXJyZW50VXNlckJ1c2luZXNzVW5pdHMpO1xyXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAkcm9vdFNjb3BlLiRvbignJGxvY2F0aW9uQ2hhbmdlU3RhcnQnLCAoZXZlbnQsIG5ld0xvY2F0aW9uOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd05hdmlnYXRpb24gJiYgdGhpcy5jdXJyZW50VXNlci5mdWxsTmFtZSAhPSBcIkd1ZXN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiWW91IGNhbid0IGxlYXZlIHRoaXMgcGFnZSB1bmxlc3MgeW91IHNhdmUgb3IgY2FuY2VsIHRoZSBnYW1lIHByb2dyYW1cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgICQod2luZG93KS5vbihcImJlZm9yZXVubG9hZFwiLCAoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd05hdmlnYXRpb24gJiYgdGhpcy5jdXJyZW50VXNlci5mdWxsTmFtZSAhPSBcIkd1ZXN0XCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIllvdSBjYW4ndCBsZWF2ZSB0aGlzIHBhZ2UgdW5sZXNzIHlvdSBzYXZlIG9yIGNhbmNlbCB0aGUgZ2FtZSBwcm9ncmFtXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkR2FtZSgpIHtcclxuICAgICAgICB0aGlzLmdhbWlmaWNhdGlvblNlcnZpY2UuZ2V0R2FtZSh0aGlzLmdhbWVJZClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWUgPSByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FtZS5sZXZlbHMgPSBbXTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1pZmljYXRpb25TZXJ2aWNlLmdldEdhbWVSZXdhcmRzKHRoaXMuZ2FtZUlkKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXdhcmRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZS5sZXZlbHMgPSByZXdhcmRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXdhcmRzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5iYWRnZUlkICYmIHIuZ2FtZUxldmVsSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhZGdlSWRzLnB1c2goci5iYWRnZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmdhbWlmaWNhdGlvblNlcnZpY2UuZ2V0R2FtZUxldmVscyh0aGlzLmdhbWVJZCkudGhlbigobGV2ZWxzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZS5sZXZlbHMubWFwKChsZXZlbCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLm5hbWUgPSBsZXZlbHNbaW5kZXhdLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC5wb2ludHMgPSBsZXZlbHNbaW5kZXhdLnBvaW50cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZS5sZXZlbHMubWFwKGxldmVsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbC5iYWRnZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLmdldEJhZGdlKGxldmVsLmJhZGdlSWQpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC5iYWRnZU5hbWUgPSByZXMubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5nZXRJbWFnZVVybChsZXZlbC5iYWRnZUlkKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuYmFkZ2VQcmV2aWV3VXJsID0gcmVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4gdGhpcy5pc0dhbWVMb2FkZWQgPSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzR2FtZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxHYW1lU3RhdGUgPSBhbmd1bGFyLmNvcHkodGhpcy5nYW1lKVxyXG4gICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5oZWFkZXIoJ0VkaXQgZ2FtZSBwcm9ncmFtICBcIicgKyB0aGlzLmdhbWUubmFtZSArICdcIicpXHJcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIuZnVsbE5hbWUgIT09ICdHdWVzdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93TmF2aWdhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd05hdmlnYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmhlYWRlcignQWNjZXNzIGRlbmllZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LmZvcndhcmRUb0FjY2Vzc0RlbmllZCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlTWVzc2FnZShsZXZlbDogSUxldmVsKSB7XHJcbiAgICAgICAgbGV2ZWwuc2hvd0xldmVsTWVzc2FnZSA9ICFsZXZlbC5zaG93TGV2ZWxNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVQb2ludHMobGV2ZWw6IElMZXZlbCkge1xyXG4gICAgICAgIGxldmVsLnNob3dQb2ludHNNZXNzYWdlID0gIWxldmVsLnNob3dQb2ludHNNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlTmV3TGV2ZWwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5ld0xldmVsLmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3TGV2ZWwuaWQgPSB0aGlzLmdhbWUubGV2ZWxzID8gdGhpcy5nYW1lLmxldmVscy5sZW5ndGggKiAtMSA6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubmV3TGV2ZWwucG9pbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3TGV2ZWwucG9pbnRzID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyQnVzaW5lc3NVbml0cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmdhbWUuYnVzaW5lc3NVbml0SWQgPSB0aGlzLmN1cnJlbnRVc2VyQnVzaW5lc3NVbml0c1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubmV3TGV2ZWwuc2hvd1BvaW50c01lc3NhZ2UgPSAhIXRoaXMubmV3TGV2ZWwucG9pbnRzTWVzc2FnZUJvZHkgfHwgISF0aGlzLm5ld0xldmVsLnBvaW50c01lc3NhZ2VTdWJqZWN0O1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZ2FtZS5sZXZlbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5nYW1lLmxldmVscyA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uZXdMZXZlbC5nYW1lSWQgPSB0aGlzLmdhbWVJZDtcclxuICAgICAgICBpZiAodGhpcy5uZXdMZXZlbC5iYWRnZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VJZHMucHVzaCh0aGlzLm5ld0xldmVsLmJhZGdlSWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uZXdMZXZlbC5pc0VkaXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdhbWUubGV2ZWxzLnB1c2godGhpcy5uZXdMZXZlbCk7XHJcbiAgICAgICAgdGhpcy5jbGVhclJld2FyZCgpO1xyXG4gICAgICAgIHRoaXMubmV3TGV2ZWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUlzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUVkaXRlZExldmVsKGxldmVsOiBJTGV2ZWwpIHtcclxuICAgICAgICBsZXZlbC5nYW1lSWQgPSB0aGlzLmdhbWVJZDtcclxuICAgICAgICBsZXZlbC5pc0VkaXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdhbWUubGV2ZWxzLm1hcCgobHZsLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobHZsLmlkID09PSBsZXZlbC5pZCkge1xyXG4gICAgICAgICAgICAgICAgbHZsLmlzRWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1lLmxldmVsc1tpbmRleF0gPSBhbmd1bGFyLmNvcHkobHZsKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jbGVhclJld2FyZCgpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUlzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUdhbWUoKSB7XHJcbiAgICAgICAgdGhpcy5nYW1lLmxldmVscy5mb3JFYWNoKGxldmVsID0+IHtcclxuICAgICAgICAgICAgaWYgKGxldmVsLmlzRWRpdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckVkaXRlZExldmVsKGxldmVsKTsgICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtaWZpY2F0aW9uU2VydmljZS5pc0dhbWVVbmlxdWUodGhpcy5nYW1lKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1pZmljYXRpb25TZXJ2aWNlLnNhdmVHYW1lKHRoaXMuZ2FtZSkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lLmlkID0gcmVzLmdhbWVJZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsc1RvRGVsZXRlLm1hcChsZXZlbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtaWZpY2F0aW9uU2VydmljZS5kZWxldGVMZXZlbChsZXZlbClcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmdhbWlmaWNhdGlvblJvdXRlci5wcm9ncmFtc1VybCgpKVxyXG4gICAgICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdhbWVJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiR2FtZSBwcm9ncmFtICc6Z2FtZScgaGFzIGJlZW4gc2F2ZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpnYW1lXCIsIHRoaXMuZ2FtZS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiTW9kaWZpY2F0aW9ucyBvZiBnYW1lIHByb2dyYW0gJzpnYW1lJyBoYXZlIGJlZW4gc2F2ZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpnYW1lXCIsIHRoaXMuZ2FtZS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Jc0RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsbG93TmF2aWdhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkdhbWUgcHJvZ3JhbSBuYW1lIG11c3QgYmUgdW5pcXVlXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsR2FtZSgpIHtcclxuICAgICAgICB0aGlzLmFsbG93TmF2aWdhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuZ2FtaWZpY2F0aW9uUm91dGVyLnByb2dyYW1zVXJsKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RWRpdE1vZGFsKGxldmVsOiBJTGV2ZWwsIHR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2hvd01vZGFsVHlwZSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5sZXZlbFRvRWRpdCA9IGxldmVsO1xyXG4gICAgICAgIHRoaXMuaXNSZXdhcmRFeGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdwb2ludHMnOiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWwuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRlZFJld2FyZE1lc3NhZ2VUeXBlID0gbGV2ZWwuc2hvd0RlZmF1bHRQb2ludHNNZXNzYWdlID8gJ2RlZmF1bHQnIDogbGV2ZWwuc2hvd1BvaW50c01lc3NhZ2UgPyAnY3VzdG9tJyA6ICdub25lJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVsLnNob3dEZWZhdWx0UG9pbnRzTWVzc2FnZSA9PT0gdW5kZWZpbmVkICYmIGxldmVsLnNob3dQb2ludHNNZXNzYWdlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0ZWRSZXdhcmRNZXNzYWdlVHlwZSA9ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRlZFJld2FyZE1lc3NhZ2VUeXBlID0gbGV2ZWwuc2hvd0RlZmF1bHRQb2ludHNNZXNzYWdlID8gJ2RlZmF1bHQnIDogbGV2ZWwuc2hvd1BvaW50c01lc3NhZ2UgPyAnY3VzdG9tJyA6ICdub25lJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRlZE1lc3NhZ2VTdWJqZWN0ID0gbGV2ZWwucG9pbnRzTWVzc2FnZVN1YmplY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRlZE1lc3NhZ2VCb2R5ID0gbGV2ZWwucG9pbnRzTWVzc2FnZUJvZHk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsVG9FZGl0Lm5ld0JvbnVzUG9pbnRzID0gdGhpcy5sZXZlbFRvRWRpdC5ib251c1BvaW50cztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxldmVsVG9FZGl0LmJvbnVzUG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Jld2FyZEV4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2UnIDoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0ZWRSZXdhcmRNZXNzYWdlVHlwZSA9IGxldmVsLnNob3dMZXZlbE1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICYmIGxldmVsLmxldmVsTWVzc2FnZVN1YmplY3RcclxuICAgICAgICAgICAgICAgICYmIGxldmVsLmxldmVsTWVzc2FnZUJvZHlcclxuICAgICAgICAgICAgICAgICAgICA/ICdjdXN0b20nXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnZGVmYXVsdCc7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0ZWRSZXdhcmRNZXNzYWdlVHlwZSA9PT0gJ2RlZmF1bHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRNZXNzYWdlVG9EZWZhdWx0KClcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0ZWRNZXNzYWdlU3ViamVjdCA9IGxldmVsLmxldmVsTWVzc2FnZVN1YmplY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0ZWRNZXNzYWdlQm9keSA9IGxldmVsLmxldmVsTWVzc2FnZUJvZHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGV2ZWxUb0VkaXQuYm9udXNQb2ludHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmV3YXJkRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghbGV2ZWwuc2hvd0xldmVsTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgICYmICFsZXZlbC5sZXZlbE1lc3NhZ2VTdWJqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgJiYgIWxldmVsLmxldmVsTWVzc2FnZUJvZHkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmV3YXJkRXhpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Jld2FyZEV4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ2JhZGdlJyA6IHtcclxuICAgICAgICAgICAgICAgIGlmIChsZXZlbC5iYWRnZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Jld2FyZEV4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhZGdlc1NlcnZpY2UuZ2V0QmFkZ2UobGV2ZWwuYmFkZ2VJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWRnZUJlZm9yZVNhdmUgPSBhbmd1bGFyLmNvcHkocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuQmFkZ2UgPSBhbmd1bGFyLmNvcHkocmVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRlZFJld2FyZE1lc3NhZ2VUeXBlID0gbGV2ZWwuc2hvd0RlZmF1bHRCYWRnZU1lc3NhZ2UgPyAnZGVmYXVsdCcgOiBsZXZlbC5zaG93QmFkZ2VNZXNzYWdlID8gJ2N1c3RvbScgOiAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRlZE1lc3NhZ2VTdWJqZWN0ID0gbGV2ZWwuY3VzdG9tQmFkZ2VNZXNzYWdlU3ViamVjdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdGVkTWVzc2FnZUJvZHkgPSBsZXZlbC5jdXN0b21CYWRnZU1lc3NhZ2VCb2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5lZGl0ZWRSZXdhcmRNZXNzYWdlVHlwZSA9PSAnZGVmYXVsdCcgJiYgdHlwZSAhPT0gJ2JhZGdlJykge1xyXG4gICAgICAgICAgICB0aGlzLnNldE1lc3NhZ2VUb0RlZmF1bHQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICQoXCIjcmV3YXJkQ3JlYXRpb25EaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUmV3YXJkKHR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdwb2ludHMnOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsVG9FZGl0LnNob3dQb2ludHNNZXNzYWdlID0gdGhpcy5lZGl0ZWRSZXdhcmRNZXNzYWdlVHlwZSA9PT0gJ2N1c3RvbSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsVG9FZGl0LnNob3dEZWZhdWx0UG9pbnRzTWVzc2FnZSA9IHRoaXMuZWRpdGVkUmV3YXJkTWVzc2FnZVR5cGUgPT09ICdkZWZhdWx0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZXZlbFRvRWRpdC5wb2ludHNNZXNzYWdlU3ViamVjdCA9IHRoaXMuZWRpdGVkTWVzc2FnZVN1YmplY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsVG9FZGl0LnBvaW50c01lc3NhZ2VCb2R5ID0gdGhpcy5lZGl0ZWRNZXNzYWdlQm9keTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxUb0VkaXQuYm9udXNQb2ludHMgPSB0aGlzLmxldmVsVG9FZGl0Lm5ld0JvbnVzUG9pbnRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZXZlbFRvRWRpdC5uZXdCb251c1BvaW50cyA9IDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlJyA6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxUb0VkaXQuc2hvd0xldmVsTWVzc2FnZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsVG9FZGl0LmxldmVsTWVzc2FnZVN1YmplY3QgPSB0aGlzLmVkaXRlZFJld2FyZE1lc3NhZ2VUeXBlICE9PSAnZGVmYXVsdCcgPyB0aGlzLmVkaXRlZE1lc3NhZ2VTdWJqZWN0IDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxUb0VkaXQubGV2ZWxNZXNzYWdlQm9keSA9IHRoaXMuZWRpdGVkUmV3YXJkTWVzc2FnZVR5cGUgIT09ICdkZWZhdWx0JyA/ICB0aGlzLmVkaXRlZE1lc3NhZ2VCb2R5IDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ2JhZGdlJyA6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VCZWZvcmVTYXZlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxUb0VkaXQuc2hvd0JhZGdlTWVzc2FnZSA9IHRoaXMuZWRpdGVkUmV3YXJkTWVzc2FnZVR5cGUgPT09ICdjdXN0b20nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZXZlbFRvRWRpdC5zaG93RGVmYXVsdEJhZGdlTWVzc2FnZSA9IHRoaXMuZWRpdGVkUmV3YXJkTWVzc2FnZVR5cGUgPT09ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxUb0VkaXQuY3VzdG9tQmFkZ2VNZXNzYWdlU3ViamVjdCA9IHRoaXMuZWRpdGVkTWVzc2FnZVN1YmplY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsVG9FZGl0LmN1c3RvbUJhZGdlTWVzc2FnZUJvZHkgPSB0aGlzLmVkaXRlZE1lc3NhZ2VCb2R5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZXZlbFRvRWRpdC5iYWRnZUlkID0gdGhpcy5jaG9zZW5CYWRnZS5pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxUb0VkaXQuYmFkZ2VQcmV2aWV3VXJsID0gdGhpcy5jaG9zZW5CYWRnZS5wcmV2aWV3VXJsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLnNvcnRpbmcgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VTZWFyY2hTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2xlYXJSZXdhcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJSZXdhcmQoKSB7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5CYWRnZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lZGl0ZWRSZXdhcmRUeXBlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRlZFJld2FyZE1lc3NhZ2VUeXBlID0gJ2RlZmF1bHQnO1xyXG4gICAgICAgIHRoaXMuZWRpdGVkTWVzc2FnZVN1YmplY3QgPSAnJztcclxuICAgICAgICB0aGlzLmVkaXRlZE1lc3NhZ2VCb2R5ID0gJyc7XHJcbiAgICAgICAgJChcIiNyZXdhcmRDcmVhdGlvbkRpYWxvZ1wiKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhclJld2FyZE9mVHlwZShsZXZlbDogSUxldmVsLCB0eXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnYmFkZ2UnOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlSWRzID0gdGhpcy5iYWRnZUlkcy5maWx0ZXIoaWQgPT4gaWQgIT09IGxldmVsLmJhZGdlSWQpO1xyXG4gICAgICAgICAgICAgICAgbGV2ZWwuc2hvd0JhZGdlTWVzc2FnZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICBsZXZlbC5jdXN0b21CYWRnZU1lc3NhZ2VTdWJqZWN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGxldmVsLmN1c3RvbUJhZGdlTWVzc2FnZUJvZHkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV2ZWwuYmFkZ2VJZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXZlbC5iYWRnZVByZXZpZXdVcmwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWVzc2FnZSc6IHtcclxuICAgICAgICAgICAgICAgIGxldmVsLmxldmVsTWVzc2FnZVN1YmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV2ZWwubGV2ZWxNZXNzYWdlQm9keSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXZlbC5zaG93TGV2ZWxNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdwb2ludHMnOiB7XHJcbiAgICAgICAgICAgICAgICBsZXZlbC5ib251c1BvaW50cyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXZlbC5wb2ludHNNZXNzYWdlU3ViamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXZlbC5wb2ludHNNZXNzYWdlQm9keSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXZlbC5zaG93UG9pbnRzTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyTmV3TGV2ZWwoKSB7XHJcbiAgICAgICAgdGhpcy5uZXdMZXZlbC5uYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy5uZXdMZXZlbC5wb2ludHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2xlYXJSZXdhcmRPZlR5cGUodGhpcy5uZXdMZXZlbCwgJ2JhZGdlJyk7XHJcbiAgICAgICAgdGhpcy5jbGVhclJld2FyZE9mVHlwZSh0aGlzLm5ld0xldmVsLCAnbWVzc2FnZScpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJSZXdhcmRPZlR5cGUodGhpcy5uZXdMZXZlbCwgJ3BvaW50cycpO1xyXG4gICAgICAgIGlmICh0aGlzLmdhbWUubGV2ZWxzICYmIHRoaXMuZ2FtZS5sZXZlbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm5ld0xldmVsLmlzRWRpdCA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckVkaXRlZExldmVsKGxldmVsOiBJTGV2ZWwpIHtcclxuICAgICAgICBmb3IgKGxldCBpIGluIGxldmVsLm9sZERhdGEpIHtcclxuICAgICAgICAgICAgbGV2ZWxbaV0gPSBsZXZlbC5vbGREYXRhW2ldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV2ZWwub2xkRGF0YSA9IG51bGw7XHJcbiAgICAgICAgbGV2ZWwuaXNFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5CYWRnZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZUJhZGdlVGFibGUoKSB7XHJcbiAgICAgICAgdGhpcy5pc0JhZGdlVGFibGVWaXNpYmxlID0gIXRoaXMuaXNCYWRnZVRhYmxlVmlzaWJsZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNCYWRnZVRhYmxlVmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElCYWRnZT4odGhpcy4kaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvYmFkZ2VzL3Byb2dyYW1cIikpKVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYmFkZ2VJZHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmZpbHRlci5leGNsdWRlZEJhZGdlcyA9IHRoaXMuYmFkZ2VJZHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXJCdXNpbmVzc1VuaXRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5maWx0ZXIuYnVzaW5lc3NVbml0SWQgPSB0aGlzLmN1cnJlbnRVc2VyQnVzaW5lc3NVbml0c1swXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IHRoaXMuZ2FtZS5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDU7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkQmFkZ2UoZW50cnk6IElCYWRnZSkge1xyXG4gICAgICAgIHRoaXMuY2hvc2VuQmFkZ2UgPSBlbnRyeTtcclxuICAgICAgICBpZiAodGhpcy5sZXZlbFRvRWRpdC5iYWRnZUlkICE9IGVudHJ5LmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VJZHMgPSB0aGlzLmJhZGdlSWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gdGhpcy5sZXZlbFRvRWRpdC5iYWRnZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5iYWRnZUlkcy5wdXNoKGVudHJ5LmlkKTtcclxuICAgICAgICB0aGlzLmxldmVsVG9FZGl0LmJhZGdlSWQgPSBlbnRyeS5pZDtcclxuICAgICAgICB0aGlzLmxldmVsVG9FZGl0LmJhZGdlUHJldmlld1VybCA9IGVudHJ5LnByZXZpZXdVcmw7XHJcbiAgICAgICAgdGhpcy5sZXZlbFRvRWRpdC5iYWRnZU5hbWUgPSBlbnRyeS5uYW1lO1xyXG4gICAgICAgIHRoaXMubGV2ZWxUb0VkaXQuc2hvd0RlZmF1bHRCYWRnZU1lc3NhZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRlZFJld2FyZE1lc3NhZ2VUeXBlID09PSAnZGVmYXVsdCcgfHwgIXRoaXMuZWRpdGVkUmV3YXJkTWVzc2FnZVR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0ZWRNZXNzYWdlU3ViamVjdCA9IGVudHJ5LnN1YmplY3Q7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdGVkTWVzc2FnZUJvZHkgPSBlbnRyeS5kZXNjcmlwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50b2dnbGVCYWRnZVRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldE1lc3NhZ2VUb0RlZmF1bHQoKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnNob3dNb2RhbFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnYmFkZ2UnOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRlZE1lc3NhZ2VTdWJqZWN0ID0gdGhpcy5jaG9zZW5CYWRnZS5zdWJqZWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0ZWRNZXNzYWdlQm9keSA9IHRoaXMuY2hvc2VuQmFkZ2UuZGVzY3JpcHRpb247XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlJzoge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0ID0gXCJEZWFyICR7UmVjaXBpZW50fSxcIjtcclxuICAgICAgICAgICAgICAgIGxldCBzZWNvbmQgPSBcIkNvbmdyYXR1bGF0aW9ucywgeW91IGhhdmUgYWNoaWV2ZWQgbGV2ZWwgJHtsZXZlbF9uYW1lfSFcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdGVkTWVzc2FnZVN1YmplY3QgPSBcIkxldmVsIFVwIVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0ZWRNZXNzYWdlQm9keSA9IGZpcnN0ICsgXCJcXG5cXG5cIiArIHNlY29uZCArIFwiXFxuXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdwb2ludHMnOiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSBcIkRlYXIgJHtSZWNpcGllbnR9LFwiO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNlY29uZCA9IFwiQ29uZ3JhdHVsYXRpb25zLCB5b3Ugd2VyZSBhd2FyZGVkICR7cG9pbnRzfSBwb2ludChzKSFcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdGVkTWVzc2FnZVN1YmplY3QgPSBcIllvdSB3ZXJlIGF3YXJkZWQgcG9pbnRzIVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0ZWRNZXNzYWdlQm9keSA9IGZpcnN0ICsgXCJcXG5cXG5cIiArIHNlY29uZCArIFwiXFxuXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0TWVzc2FnZVRvTm9uZSgpIHtcclxuICAgICAgICB0aGlzLmVkaXRlZE1lc3NhZ2VTdWJqZWN0ID0gJyc7XHJcbiAgICAgICAgdGhpcy5lZGl0ZWRNZXNzYWdlQm9keSA9ICcnO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJDaG9zZW5CYWRnZSgpIHtcclxuICAgICAgICB0aGlzLmJhZGdlSWRzID0gdGhpcy5iYWRnZUlkcy5maWx0ZXIoaWQgPT4gaWQgIT09IHRoaXMubGV2ZWxUb0VkaXQuYmFkZ2VJZCk7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5CYWRnZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50b2dnbGVCYWRnZVRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbFJld2FyZE1vZGFsQ2hhbmdlcygpIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuc2hvd01vZGFsVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdiYWRnZSc6IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5iYWRnZUJlZm9yZVNhdmUgJiYgdGhpcy5jaG9zZW5CYWRnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VJZHMgPSB0aGlzLmJhZGdlSWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gdGhpcy5sZXZlbFRvRWRpdC5iYWRnZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsVG9FZGl0LmJhZGdlSWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJhZGdlQmVmb3JlU2F2ZSAmJiAhdGhpcy5jaG9zZW5CYWRnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VJZHMucHVzaCh0aGlzLmJhZGdlQmVmb3JlU2F2ZS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXZlbFRvRWRpdC5iYWRnZUlkID0gdGhpcy5iYWRnZUJlZm9yZVNhdmUuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXZlbFRvRWRpdC5iYWRnZVByZXZpZXdVcmwgPSB0aGlzLmJhZGdlQmVmb3JlU2F2ZS5wcmV2aWV3VXJsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJhZGdlQmVmb3JlU2F2ZSAmJiB0aGlzLmJhZGdlQmVmb3JlU2F2ZS5pZCAhPT0gdGhpcy5jaG9zZW5CYWRnZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VJZHMgPSB0aGlzLmJhZGdlSWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gdGhpcy5sZXZlbFRvRWRpdC5iYWRnZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhZGdlSWRzLnB1c2godGhpcy5iYWRnZUJlZm9yZVNhdmUuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxUb0VkaXQuYmFkZ2VJZCA9IHRoaXMuYmFkZ2VCZWZvcmVTYXZlLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxUb0VkaXQuYmFkZ2VQcmV2aWV3VXJsID0gdGhpcy5iYWRnZUJlZm9yZVNhdmUucHJldmlld1VybDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNob3NlbkJhZGdlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VCZWZvcmVTYXZlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxUb0VkaXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLnNvcnRpbmcgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VTZWFyY2hTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2UnOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsVG9FZGl0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ3BvaW50cyc6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxUb0VkaXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd01vZGFsVHlwZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lZGl0ZWRSZXdhcmRNZXNzYWdlVHlwZSA9ICdkZWZhdWx0JztcclxuICAgICAgICB0aGlzLmNob3NlbkJhZGdlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzQmFkZ2VUYWJsZVZpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hvb3NlTGV2ZWwobGV2ZWw6IElMZXZlbCkge1xyXG4gICAgICAgIGxldmVsLmlzRWRpdCA9IHRydWU7XHJcbiAgICAgICAgbGV2ZWwub2xkRGF0YSA9IGFuZ3VsYXIuY29weShsZXZlbCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVMZXZlbChsZXZlbDogSUxldmVsKSB7XHJcbiAgICAgICAgaWYgKGxldmVsLmJhZGdlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZUlkcyA9IHRoaXMuYmFkZ2VJZHMuZmlsdGVyKGlkID0+IGlkICE9PSBsZXZlbC5iYWRnZUlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGV2ZWxzVG9EZWxldGUucHVzaChsZXZlbClcclxuICAgICAgICB0aGlzLmdhbWUubGV2ZWxzID0gdGhpcy5nYW1lLmxldmVscy5maWx0ZXIobCA9PiBsLmlkICE9PSBsZXZlbC5pZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUlzRGlydHkoKTtcclxuICAgICAgICBpZiAodGhpcy5nYW1lLmxldmVscy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5uZXdMZXZlbCA9IHsgaXNFZGl0OiB0cnVlIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEZvcm1Jc0RpcnR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybUlzRGlydHkgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBiYWRnZVNlYXJjaEtleVByZXNzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLmJhZGdlU2VhcmNoU3RyaW5nO1xyXG4gICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEF3YXJkVHlwZU5vdGlmaWNhdGlvbihsZXZlbDogSUxldmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiKFBvcHVwKVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhclN5bWJvbHMobGV2ZWw6IElMZXZlbCwgaXNCb251czogYm9vbGVhbiwgJGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKFsnKycsJy0nLCdlJywgJy4nXS5pbmRleE9mKCRldmVudC5rZXkpICE9PSAtMSApIHtcclxuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWNvbmRNZXNzYWdlKHBvaW50czogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHBvaW50cyA9PT0gMSA/IFwicG9pbnQgZm9yIGdhbWUgXCI6IFwicG9pbnRzIGZvciBnYW1lIFwiO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7VXJsc01vZHVsZX0gZnJvbSBcIi4uL3VybHMvVXJsc01vZHVsZVwiO1xyXG5pbXBvcnQge0JhZGdlc1NlcnZpY2V9IGZyb20gXCIuL0JhZGdlc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtCYWRnZXNDb250cm9sbGVyfSBmcm9tIFwiLi9CYWRnZXNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7QmFkZ2VzQ3JlYXRlRWRpdENvbnRyb2xsZXJ9IGZyb20gXCIuL0JhZGdlc0NyZWF0ZUVkaXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7R2FtaWZpY2F0aW9uU2VydmljZX0gZnJvbSBcIi4vR2FtaWZpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQge0dhbWVQcm9ncmFtc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0dhbWVQcm9ncmFtc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uTW9kdWxlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlNb2R1bGV9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eU1vZHVsZVwiO1xyXG5pbXBvcnQge0NvbnRlbnRNb2R1bGV9IGZyb20gXCIuLi9jb250ZW50L0NvbnRlbnRNb2R1bGVcIjtcclxuaW1wb3J0IHtBdXRoQ29yZU1vZHVsZX0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhDb3JlTW9kdWxlXCI7XHJcbmltcG9ydCB7QnVuZGxlc01vZHVsZX0gZnJvbSBcIi4uL2J1bmRsZXMvQnVuZGxlc01vZHVsZVwiO1xyXG5pbXBvcnQge0dhbWVQcm9ncmFtc0NyZWF0ZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9HYW1lUHJvZ3JhbXNDcmVhdGVFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0dhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2V9IGZyb20gXCIuL0dhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHtBY3Rpdml0eUJhZGdlRWRpdENvbnRyb2xsZXJ9IGZyb20gXCIuL0FjdGl2aXR5QmFkZ2VFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0JhZGdlVGVtcGxhdGVzQ29udHJvbGxlcn0gZnJvbSBcIi4vQmFkZ2VUZW1wbGF0ZXNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7QmFkZ2VUZW1wbGF0ZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9CYWRnZVRlbXBsYXRlRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbmV4cG9ydCB2YXIgR2FtaWZpY2F0aW9uTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiZ2FtaWZpY2F0aW9uXCIsIFtcclxuICAgICAgICBTZWN1cml0eU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIEF1dGhDb3JlTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgVXJsc01vZHVsZS5uYW1lLFxyXG4gICAgICAgIEJ1bmRsZXNNb2R1bGUubmFtZSxcclxuICAgICAgICBDb21tb25Nb2R1bGUubmFtZSxcclxuICAgICAgICBTZWN1cml0eU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIFVybHNNb2R1bGUubmFtZSxcclxuICAgICAgICBDb250ZW50TW9kdWxlLm5hbWVcclxuICAgIF0pXHJcbiAgICAuc2VydmljZShHYW1pZmljYXRpb25TZXJ2aWNlLk5BTUUsIEdhbWlmaWNhdGlvblNlcnZpY2UpXHJcbiAgICAuc2VydmljZShCYWRnZXNTZXJ2aWNlLk5BTUUsIEJhZGdlc1NlcnZpY2UpXHJcbiAgICAuY29udHJvbGxlcihHYW1lUHJvZ3JhbXNDb250cm9sbGVyLk5BTUUsIEdhbWVQcm9ncmFtc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihHYW1lUHJvZ3JhbXNDcmVhdGVFZGl0Q29udHJvbGxlci5OQU1FLCBHYW1lUHJvZ3JhbXNDcmVhdGVFZGl0Q29udHJvbGxlcilcclxuICAgIC5zZXJ2aWNlKEdhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2UuTkFNRSwgR2FtZUxlYXJuaW5nT2JqZWN0QWN0aW9uU2VydmljZSlcclxuICAgIC5jb250cm9sbGVyKEJhZGdlc0NvbnRyb2xsZXIuTkFNRSwgQmFkZ2VzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEJhZGdlc0NyZWF0ZUVkaXRDb250cm9sbGVyLk5BTUUsIEJhZGdlc0NyZWF0ZUVkaXRDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQWN0aXZpdHlCYWRnZUVkaXRDb250cm9sbGVyLk5BTUUsIEFjdGl2aXR5QmFkZ2VFZGl0Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEJhZGdlVGVtcGxhdGVzQ29udHJvbGxlci5OQU1FLCBCYWRnZVRlbXBsYXRlc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihCYWRnZVRlbXBsYXRlRWRpdENvbnRyb2xsZXIuTkFNRSwgQmFkZ2VUZW1wbGF0ZUVkaXRDb250cm9sbGVyKTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUxldmVsfSBmcm9tIFwiLi9tb2RlbHMvSUxldmVsXCI7XHJcbmltcG9ydCB7SUdhbWV9IGZyb20gXCIuL21vZGVscy9JR2FtZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJnYW1pZmljYXRpb24uR2FtaWZpY2F0aW9uU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0R2FtZShnYW1lSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2dhbWlmaWNhdGlvbi9nYW1lLzpnYW1lSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKCc6Z2FtZUlkJywgZ2FtZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEdhbWVMZXZlbHMoZ2FtZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9nYW1pZmljYXRpb24vZ2FtZS86Z2FtZUlkL2xldmVsc1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oJzpnYW1lSWQnLCBnYW1lSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0R2FtZVJld2FyZHMoZ2FtZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9nYW1pZmljYXRpb24vZ2FtZS86Z2FtZUlkL3Jld2FyZHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKCc6Z2FtZUlkJywgZ2FtZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVMZXZlbChsZXZlbDogSUxldmVsKTogYW5ndWxhci5JUHJvbWlzZTxJTGV2ZWw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2dhbWlmaWNhdGlvbi9sZXZlbC9zYXZlXCIpLnNlcnZpY2UoKSwgbGV2ZWwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUxldmVsKGxldmVsOiBJTGV2ZWwpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvZ2FtaWZpY2F0aW9uL2xldmVsL2NyZWF0ZVwiKS5zZXJ2aWNlKCksIGxldmVsKVxyXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlR2FtZShnYW1lOiBJR2FtZSk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9nYW1pZmljYXRpb24vZ2FtZS9zYXZlXCIpLnNlcnZpY2UoKSwgZ2FtZSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVsZXRlTGV2ZWwobGV2ZWw6IElMZXZlbCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9nYW1pZmljYXRpb24vbGV2ZWwvZGVsZXRlXCIpLnNlcnZpY2UoKSwgbGV2ZWwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzc2lnblJld2FyZHModXNlcklkLCBvYmplY3RJZCwgb2JqZWN0VHlwZSk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvcmV3YXJkL2Fzc2lnbi91c2VyLzp1c2VySWQvb2JqZWN0LzpvYmplY3RJZC90eXBlLzpvYmplY3RUeXBlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbSgnOnVzZXJJZCcsIHVzZXJJZClcclxuICAgICAgICAgICAgLnBhcmFtKCc6b2JqZWN0SWQnLCBvYmplY3RJZClcclxuICAgICAgICAgICAgLnBhcmFtKCc6b2JqZWN0VHlwZScsIG9iamVjdFR5cGUpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlR2FtZUFjdGl2ZShnYW1lSWQpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9nYW1pZmljYXRpb24vZ2FtZS86Z2FtZUlkL3RvZ2dsZUFjdGl2ZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oJzpnYW1lSWQnLCBnYW1lSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNHYW1lVW5pcXVlKGdhbWU6IElHYW1lKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2dhbWlmaWNhdGlvbi9nYW1lL3VuaXF1ZVwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBnYW1lKS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZW51bSBCYWRnZVRlbXBsYXRlU2NvcGUge1xyXG4gICAgREVGQVVMVCxcclxuICAgIFNZU1RFTSxcclxuICAgIEJVU0lORVNTX1VOSVRcclxufSIsImV4cG9ydCBjbGFzcyBSZXdhcmRBY3Rpb25UeXBlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgQkFER0VfQ09VUlNFX0NPTVBMRVRFRCA9ICdBd2FyZCBiYWRnZSA6YmFkZ2VOYW1lIG9uIGNvdXJzZSBjb21wbGV0aW9uJztcclxuICAgIHB1YmxpYyBzdGF0aWMgUE9JTlRTX0NPVVJTRV9DT01QTEVURUQgPSAnQXdhcmQgOnBvaW50cyBwb2ludHMgZm9yIGNvdXJzZSBjb21wbGV0aW9uJztcclxuICAgIHB1YmxpYyBzdGF0aWMgUE9JTlRfQ09VUlNFX0NPTVBMRVRFRCA9ICdBd2FyZCA6cG9pbnRzIHBvaW50IGZvciBjb3Vyc2UgY29tcGxldGlvbic7XHJcbiAgICBwdWJsaWMgc3RhdGljIEJBREdFX0xQX0NPTVBMRVRFRCA9ICdBd2FyZCBiYWRnZSA6YmFkZ2VOYW1lIG9uIGxlYXJuaW5nIHBhdGggY29tcGxldGlvbic7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBPSU5UU19MUF9DT01QTEVURUQgPSAnQXdhcmQgOnBvaW50cyBwb2ludHMgZm9yIGxlYXJuaW5nIHBhdGggY29tcGxldGlvbic7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBPSU5UX0xQX0NPTVBMRVRFRCA9ICdBd2FyZCA6cG9pbnRzIHBvaW50IGZvciBsZWFybmluZyBwYXRoIGNvbXBsZXRpb24nO1xyXG59IiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge0hvbWVSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0hvbWVSb3V0ZXJcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhTZXJ2aWNlfSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9MZWFybmluZ1BhdGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJSb2xlfSBmcm9tIFwiLi9tb2RlbHMvVXNlclJvbGVcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7Q29tbW9uU2VydmljZX0gZnJvbSBcIi4uL2NvbW1vbi9Db21tb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7QmFkZ2VzU2VydmljZX0gZnJvbSBcIi4uL2dhbWlmaWNhdGlvbi9CYWRnZXNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUFjdGlvbkJhZGdlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL21vZGVscy9JQWN0aW9uQmFkZ2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImhvbWUuSG9tZUNvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoQ291bnQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgcm91dGVCdXNpbmVzc1JvbGU6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIHJld2FyZHM6IEFycmF5PElBY3Rpb25CYWRnZT4gPSBbXTtcclxuICAgIHByaXZhdGUgcmV3YXJkVG9TaG93OiBJQWN0aW9uQmFkZ2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIEhvbWVSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJhZGdlc1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkICRyb290U2NvcGUsIHByb3RlY3RlZCAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGhvbWVSb3V0ZXI6IEhvbWVSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aFNlcnZpY2U6IExlYXJuaW5nUGF0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFkZ2VzU2VydmljZTogQmFkZ2VzU2VydmljZSkge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuSE9NRV9JTkRFWF9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkucHJlc2VydmVIZWFkZXIoKS5oZWFkZXIoXCJIb21lXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5jaGVja1ZlcnNpb25VcGRhdGVJc1JlcXVpcmVkKCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi5zZWFyY2goXCJuby1jYWNoZVwiLCBtb21lbnQoKS52YWx1ZU9mKCkpO1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5mb3J3YXJkVG9BY2Nlc3NEZW5pZWQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucm91dGVCdXNpbmVzc1JvbGUgPSAkbG9jYXRpb24uc2VhcmNoKClbSG9tZVJvdXRlci5yb2xlUGFyYW1dO1xyXG4gICAgICAgIGlmICh0aGlzLnJvdXRlQnVzaW5lc3NSb2xlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5yb3V0ZUJ1c2luZXNzUm9sZSA9PT0gVXNlclJvbGVbVXNlclJvbGUuTEVBUk5FUl0pIHtcclxuICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvSG9tZVBhZ2UodGhpcy5yb3V0ZUJ1c2luZXNzUm9sZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlckJ1c2luZXNzUm9sZSgpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyb2xlID0+IHRoaXMucmVkaXJlY3RUb0hvbWVQYWdlKHJvbGUpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5ub3RpZnlVc2VyQWZ0ZXJSZXdhcmQoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdCgnbm90aWZ5UmV3YXJkJywgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVkaXJlY3RUb0hvbWVQYWdlKHVzZXJCdXNpbmVzc1JvbGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIC8vIFVzZXJSb2xlXHJcbiAgICAgICAgc3dpdGNoICh1c2VyQnVzaW5lc3NSb2xlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJBRE1JTklTVFJBVE9SXCI6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmhvbWVSb3V0ZXIuYWRtaW5pc3RyYXRpb25NZW51VXJsKCkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIklOU1RSVUNUT1JcIjoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLmdldEluc3RydWN0b3JMZWFybmluZ1BhdGhzQ291bnQoKS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhDb3VudCA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuaG9tZVJvdXRlci5pbnN0cnVjdG9ySG9tZVVybCh0aGlzLmxlYXJuaW5nUGF0aENvdW50KSlcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkFUVEVOREVFX01BTkFHRVJcIjoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuaG9tZVJvdXRlci5wYXJ0aWNpcGFudHNVcmwoKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiQVVUSE9SXCI6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmhvbWVSb3V0ZXIuYXV0aG9yQ291cnNlc1VybCgpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJMRUFSTkVSXCI6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VMZWFybmVySG9tZVBhZ2UoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmhvbWVSb3V0ZXIuY291cnNlc1VybCgpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hvc2VMZWFybmVySG9tZVBhZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRNZW51Q29uZmlndXJhdGlvbihVc2VyUm9sZVtVc2VyUm9sZS5MRUFSTkVSXSkudGhlbihjb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgICAgICAgaWYoY29uZmlndXJhdGlvbi5oYXNMZWFybmVyTGVhcm5pbmdQYXRocykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuaG9tZVJvdXRlci5sZWFybmluZ1BhdGhzVXJsKHRoaXMucm91dGVCdXNpbmVzc1JvbGUpKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKGNvbmZpZ3VyYXRpb24uaGFzTGVhcm5lckNvdXJzZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmhvbWVSb3V0ZXIuY291cnNlc1VybCh0aGlzLnJvdXRlQnVzaW5lc3NSb2xlKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmluZGV4VXJsKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW1hZ2VGb3JBY3Rpdml0eUJhZGdlKGJhZGdlOiBJQWN0aW9uQmFkZ2UpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChiYWRnZSkge1xyXG4gICAgICAgICAgICBpZiAoIWJhZGdlLmZpbGVJZCAmJiBiYWRnZS5iYWRnZUtleSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB0aGVtZXMvZGVmYXVsdC9pbWcvYWN0aW9uQmFkZ2VzLyR7YmFkZ2UuYmFkZ2VLZXl9LnBuZ2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGJhZGdlLnByZXZpZXdVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3VibWl0UmV3YXJkKHJld2FyZElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICAkKCcucmV3YXJkTm90aWZpY2F0aW9uJykuYWRkQ2xhc3MoJ3Jld2FyZE5vdGlmaWNhdGlvbi11cCcpO1xyXG4gICAgICAgIHRoaXMucmV3YXJkcyA9IHRoaXMucmV3YXJkcy5maWx0ZXIociA9PiByLmlkICE9PSByZXdhcmRJZCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJld2FyZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRUb1Nob3cgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnLnJld2FyZE5vdGlmaWNhdGlvbicpLnJlbW92ZUNsYXNzKCdyZXdhcmROb3RpZmljYXRpb24tdXAnKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRUb1Nob3cgPSB0aGlzLnJld2FyZHNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgIH0sIDcwMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJld2FyZFRvU2hvdyA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vbk1vZHVsZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5TW9kdWxlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcbmltcG9ydCB7SG9tZVNlcnZpY2V9IGZyb20gXCIuL0hvbWVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SG9tZUNvdXJzZXNDb250cm9sbGVyfSBmcm9tIFwiLi9sZWFybmVyL0hvbWVDb3Vyc2VzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0hvbWVMZWFybmluZ1BhdGhzQ29udHJvbGxlcn0gZnJvbSBcIi4vbGVhcm5lci9Ib21lTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtIb21lQ29udHJvbGxlcn0gZnJvbSBcIi4vSG9tZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtIb21lQWRtaW5pc3RyYXRpb25NZW51Q29udHJvbGxlcn0gZnJvbSBcIi4vYWRtaW5pbnN0cmF0aW9uL0hvbWVBZG1pbmlzdHJhdGlvbk1lbnVDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SG9tZUFkbWluaXN0cmF0aW9uUmVwb3J0c0NvbnRyb2xsZXJ9IGZyb20gXCIuL2FkbWluaW5zdHJhdGlvbi9Ib21lQWRtaW5pc3RyYXRpb25SZXBvcnRzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0hvbWVBdXRob3JDb3Vyc2VzQ29udHJvbGxlcn0gZnJvbSBcIi4vYXV0aG9yL0hvbWVBdXRob3JDb3Vyc2VzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0hvbWVBdXRob3JMZWFybmluZ1BhdGhzQ29udHJvbGxlcn0gZnJvbSBcIi4vYXV0aG9yL0hvbWVBdXRob3JMZWFybmluZ1BhdGhzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0hvbWVBdXRob3JRdWl6emVzQ29udHJvbGxlcn0gZnJvbSBcIi4vYXV0aG9yL0hvbWVBdXRob3JRdWl6emVzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0hvbWVBdXRob3JTdXJ2ZXlzQ29udHJvbGxlcn0gZnJvbSBcIi4vYXV0aG9yL0hvbWVBdXRob3JTdXJ2ZXlzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0hvbWVBdXRob3JNYXRlcmlhbHNDb250cm9sbGVyfSBmcm9tIFwiLi9hdXRob3IvSG9tZUF1dGhvck1hdGVyaWFsc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtIb21lQXV0aG9yUmVwb3J0c0NvbnRyb2xsZXJDb250cm9sbGVyfSBmcm9tIFwiLi9hdXRob3IvSG9tZUF1dGhvclJlcG9ydHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SG9tZVJlcG9ydHNDb250cm9sbGVyfSBmcm9tIFwiLi9sZWFybmVyL0hvbWVSZXBvcnRzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0hvbWVNYXRlcmlhbHNDb250cm9sbGVyfSBmcm9tIFwiLi9sZWFybmVyL0hvbWVNYXRlcmlhbHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SG9tZUF0dGVuZGVlTWFuYWdlckNvdXJzZXNDb250cm9sbGVyfSBmcm9tIFwiLi9hdHRlbmRlZS9Ib21lQXR0ZW5kZWVNYW5hZ2VyQ291cnNlc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtIb21lQXR0ZW5kZWVNYW5hZ2VyTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXJ9IGZyb20gXCIuL2F0dGVuZGVlL0hvbWVBdHRlbmRlZU1hbmFnZXJMZWFybmluZ1BhdGhzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0hvbWVBdHRlbmRlZU1hbmFnZXJSZXBvcnRzQ29udHJvbGxlcn0gZnJvbSBcIi4vYXR0ZW5kZWUvSG9tZUF0dGVuZGVlTWFuYWdlclJlcG9ydHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SG9tZUluc3RydWN0b3JDb3Vyc2VzQ29udHJvbGxlcn0gZnJvbSBcIi4vaW5zdHJ1Y3Rvci9Ib21lSW5zdHJ1Y3RvckNvdXJzZXNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SG9tZUluc3RydWN0b3JMZWFybmluZ1BhdGhzQ29udHJvbGxlcn0gZnJvbSBcIi4vaW5zdHJ1Y3Rvci9Ib21lSW5zdHJ1Y3RvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SG9tZUluc3RydWN0b3JSZXBvcnRzQ29udHJvbGxlcn0gZnJvbSBcIi4vaW5zdHJ1Y3Rvci9Ib21lSW5zdHJ1Y3RvclJlcG9ydHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SG9tZVBhcnRpY2lwYW50c0NvbnRyb2xsZXJ9IGZyb20gXCIuL0hvbWVQYXJ0aWNpcGFudHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SG9tZUF1dGhvckZsYXNoY2FyZHNDb250cm9sbGVyfSBmcm9tIFwiLi9hdXRob3IvSG9tZUF1dGhvckZsYXNoY2FyZHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SG9tZUZsYXNoY2FyZHNDb250cm9sbGVyfSBmcm9tIFwiLi9sZWFybmVyL0hvbWVGbGFzaGNhcmRzQ29udHJvbGxlclwiO1xyXG5cclxuZXhwb3J0IHZhciBIb21lTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiaG9tZVwiLCBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgU2VjdXJpdHlNb2R1bGUubmFtZSxcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWVcclxuICAgIF0pXHJcbiAgICAuY29udHJvbGxlcihIb21lQ29udHJvbGxlci5OQU1FLCBIb21lQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEhvbWVDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCBIb21lQ291cnNlc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSwgSG9tZUxlYXJuaW5nUGF0aHNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoSG9tZU1hdGVyaWFsc0NvbnRyb2xsZXIuTkFNRSwgSG9tZU1hdGVyaWFsc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lUmVwb3J0c0NvbnRyb2xsZXIuTkFNRSwgSG9tZVJlcG9ydHNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoSG9tZUFkbWluaXN0cmF0aW9uTWVudUNvbnRyb2xsZXIuTkFNRSwgSG9tZUFkbWluaXN0cmF0aW9uTWVudUNvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lQWRtaW5pc3RyYXRpb25SZXBvcnRzQ29udHJvbGxlci5OQU1FLCBIb21lQWRtaW5pc3RyYXRpb25SZXBvcnRzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEhvbWVBdXRob3JDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCBIb21lQXV0aG9yQ291cnNlc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lQXV0aG9yTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSwgSG9tZUF1dGhvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoSG9tZUF1dGhvclF1aXp6ZXNDb250cm9sbGVyLk5BTUUsIEhvbWVBdXRob3JRdWl6emVzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEhvbWVBdXRob3JTdXJ2ZXlzQ29udHJvbGxlci5OQU1FLCBIb21lQXV0aG9yU3VydmV5c0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lQXV0aG9yRmxhc2hjYXJkc0NvbnRyb2xsZXIuTkFNRSwgSG9tZUF1dGhvckZsYXNoY2FyZHNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoSG9tZUF1dGhvck1hdGVyaWFsc0NvbnRyb2xsZXIuTkFNRSwgSG9tZUF1dGhvck1hdGVyaWFsc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lQXV0aG9yUmVwb3J0c0NvbnRyb2xsZXJDb250cm9sbGVyLk5BTUUsIEhvbWVBdXRob3JSZXBvcnRzQ29udHJvbGxlckNvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lQXR0ZW5kZWVNYW5hZ2VyQ291cnNlc0NvbnRyb2xsZXIuTkFNRSwgSG9tZUF0dGVuZGVlTWFuYWdlckNvdXJzZXNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoSG9tZUF0dGVuZGVlTWFuYWdlckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIEhvbWVBdHRlbmRlZU1hbmFnZXJMZWFybmluZ1BhdGhzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEhvbWVBdHRlbmRlZU1hbmFnZXJSZXBvcnRzQ29udHJvbGxlci5OQU1FLCBIb21lQXR0ZW5kZWVNYW5hZ2VyUmVwb3J0c0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lSW5zdHJ1Y3RvckNvdXJzZXNDb250cm9sbGVyLk5BTUUsIEhvbWVJbnN0cnVjdG9yQ291cnNlc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lSW5zdHJ1Y3RvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIEhvbWVJbnN0cnVjdG9yTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lSW5zdHJ1Y3RvclJlcG9ydHNDb250cm9sbGVyLk5BTUUsIEhvbWVJbnN0cnVjdG9yUmVwb3J0c0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIb21lUGFydGljaXBhbnRzQ29udHJvbGxlci5OQU1FLCBIb21lUGFydGljaXBhbnRzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEhvbWVGbGFzaGNhcmRzQ29udHJvbGxlci5OQU1FLCBIb21lRmxhc2hjYXJkc0NvbnRyb2xsZXIpXHJcbiAgICAuc2VydmljZShIb21lU2VydmljZS5OQU1FLCBIb21lU2VydmljZSk7XHJcbiIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGVyc29uYWxTZXJ2aWNlfSBmcm9tIFwiLi4vcGVyc29uYWwvUGVyc29uYWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SU5vdGlmaWNhdGlvbkNvdW50c30gZnJvbSBcIi4vbW9kZWxzL0lOb3RpZmljYXRpb25Db3VudHNcIjtcclxuaW1wb3J0IHtTdGF0aXN0aWNSZXBvcnRzU2VydmljZX0gZnJvbSBcIi4uL3N0YXRpc3RpY3MvU3RhdGlzdGljUmVwb3J0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuICAgIE5PVElGSUNBVElPTlNfTU9EQUxfQVRURU5ERUVfTUFOQUdFUl9NRU5VLCBOT1RJRklDQVRJT05TX01PREFMX0lOU1RSVUNUT1JfTUVOVSxcclxuICAgIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtXHJcbn0gZnJvbSBcIi4vbW9kZWxzL05vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtXCI7XHJcbmltcG9ydCB7SUNvbW1lbnRzQW5kRGlzY3Vzc2lvbn0gZnJvbSBcIi4uL3NvY2lhbC9tb2RlbHMvSUNvbW1lbnRzQW5kRGlzY3Vzc2lvblwiO1xyXG5pbXBvcnQge1NvY2lhbFNlcnZpY2V9IGZyb20gXCIuLi9zb2NpYWwvU29jaWFsU2VydmljZVwiO1xyXG5pbXBvcnQge0hvbWVSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0hvbWVSb3V0ZXJcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1VzZXJzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Vc2Vyc1JvdXRlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyUm9sZX0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9Vc2VyUm9sZVwiO1xyXG5pbXBvcnQge0ludHJvU2VydmljZX0gZnJvbSBcIi4uL2luZm8vSW50cm9TZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXNzZXNzbWVudHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0Fzc2Vzc21lbnRzUm91dGVyXCI7XHJcbmltcG9ydCB7SUFzc2Vzc21lbnR9IGZyb20gXCIuLi9hc3Nlc3NtZW50cy9tb2RlbHMvSUFzc2Vzc21lbnRcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50c1NlcnZpY2V9IGZyb20gXCIuLi9hc3Nlc3NtZW50cy9Bc3Nlc3NtZW50c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVBhcnRpY2lwYW50c30gZnJvbSBcIi4vbW9kZWxzL0lQYXJ0aWNpcGFudHNcIjtcclxuaW1wb3J0IHtDb21tb25GaWx0ZXJTZXJ2aWNlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vbkZpbHRlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhvbWVQYXJ0aWNpcGFudHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaG9tZS5Ib21lUGFydGljaXBhbnRzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBtZW51S2V5OiBhbnk7XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYXR0ZW5kZWVNYW5hZ2VyQ291bnRzOiBJTm90aWZpY2F0aW9uQ291bnRzO1xyXG4gICAgcHVibGljIG5vdGlmaWNhdGlvbnNNb2RhbE1lbnU6IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtW10gPSBOT1RJRklDQVRJT05TX01PREFMX0FUVEVOREVFX01BTkFHRVJfTUVOVTtcclxuICAgIHB1YmxpYyBjdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW06IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtO1xyXG4gICAgcHVibGljIGN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgc2hvd05vdGlmaWNhdGlvbk1vZGFsOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBjb21tZW50czogSUNvbW1lbnRzQW5kRGlzY3Vzc2lvbltdO1xyXG4gICAgcHVibGljIG1vZGVsVHlwZTogc3RyaW5nID0gXCJjb3Vyc2VzXCI7XHJcbiAgICBwdWJsaWMgYnVzaW5lc3NSb2xlOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHVzZXI6IElVc2VyO1xyXG4gICAgcHVibGljIHBhcnRpY2lwYW50c0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJUGFydGljaXBhbnRzPjtcclxuXHJcbiAgICBwdWJsaWMgbmV3QXNzZXNzbWVudHM6IElBc3Nlc3NtZW50W107XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcnNvbmFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU29jaWFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEhvbWVSb3V0ZXIuTkFNRSxcclxuICAgICAgICBVc2Vyc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgSW50cm9TZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXNzZXNzbWVudHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBBc3Nlc3NtZW50c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb21tb25GaWx0ZXJTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc0FwaTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVyc29uYWxTZXJ2aWNlOiBQZXJzb25hbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlOiBTdGF0aXN0aWNSZXBvcnRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc29jaWFsU2VydmljZTogU29jaWFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaG9tZVJvdXRlcjogSG9tZVJvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyB1c2Vyc1JvdXRlcjogVXNlcnNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGFzc2Vzc21lbnRzUm91dGVyOiBBc3Nlc3NtZW50c1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXNzZXNzbWVudHNTZXJ2aWNlOiBBc3Nlc3NtZW50c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLm1vZGVsVHlwZSA9ICRyb3V0ZVBhcmFtc1tIb21lUm91dGVyLlBBUlRJQ0lQQU5UU19QQVJBTV0gfHwgSG9tZVJvdXRlci5QQVJUSUNJUEFOVF9UWVBFX0NPVVJTRVM7XHJcbiAgICAgICAgdGhpcy5tb2RlbFR5cGUgPSB0aGlzLm1vZGVsVHlwZSAhPT0gSG9tZVJvdXRlci5QQVJUSUNJUEFOVF9UWVBFX0NPVVJTRVMgJiYgdGhpcy5tb2RlbFR5cGUgIT09IEhvbWVSb3V0ZXIuUEFSVElDSVBBTlRfVFlQRV9MUCA/XHJcbiAgICAgICAgICAgIEhvbWVSb3V0ZXIuUEFSVElDSVBBTlRfVFlQRV9DT1VSU0VTIDogdGhpcy5tb2RlbFR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuXHJcbiAgICAgICAgcGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJCdXNpbmVzc1JvbGUoKVxyXG4gICAgICAgICAgICAudGhlbigoYnVzaW5lc3NSb2xlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzUm9sZSA9IGFuZ3VsYXIuY29weShidXNpbmVzc1JvbGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXROb3RpZmljYXRpb25Db3VudHNGb3JBdHRlbmRlZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChidXNpbmVzc1JvbGUgPT09IFVzZXJSb2xlW1VzZXJSb2xlLkFUVEVOREVFX01BTkFHRVJdIHx8IGJ1c2luZXNzUm9sZSA9PT0gVXNlclJvbGVbVXNlclJvbGUuQURNSU5JU1RSQVRPUl0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNNb2RhbE1lbnUgPSBOT1RJRklDQVRJT05TX01PREFMX0FUVEVOREVFX01BTkFHRVJfTUVOVTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5IT01FX0FUVEVOREVFX01BTkFHRVJfUEFSVElDSVBBTlRTX0tFWSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZWxUeXBlID09IEhvbWVSb3V0ZXIuUEFSVElDSVBBTlRfVFlQRV9DT1VSU0VTKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVBhcnRpY2lwYW50cz4oJGh0dHAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9jb3Vyc2VzL3NlYXJjaC9wYXJ0aWNpcGFudHMvaW5mbz9yb2xlPWF0dGVuZGVlTWFuYWdlclwiKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVBhcnRpY2lwYW50cz4oJGh0dHAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaC9wYXJ0aWNpcGFudHMvaW5mbz9yb2xlPWF0dGVuZGVlTWFuYWdlclwiKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVzaW5lc3NSb2xlID09PSBVc2VyUm9sZVtVc2VyUm9sZS5JTlNUUlVDVE9SXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc01vZGFsTWVudSA9IE5PVElGSUNBVElPTlNfTU9EQUxfSU5TVFJVQ1RPUl9NRU5VO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkhPTUVfSU5TVFJVQ1RPUl9QQVJUSUNJUEFOVFNfS0VZKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlbFR5cGUgPT0gSG9tZVJvdXRlci5QQVJUSUNJUEFOVF9UWVBFX0NPVVJTRVMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJUGFydGljaXBhbnRzPigkaHR0cCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2NvdXJzZXMvc2VhcmNoL3BhcnRpY2lwYW50cy9pbmZvP3JvbGU9aW5zdHJ1Y3RvclwiKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVBhcnRpY2lwYW50cz4oJGh0dHAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaC9wYXJ0aWNpcGFudHMvaW5mbz9yb2xlPWluc3RydWN0b3JcIikpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuaW5kZXhVcmwoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5maWx0ZXIubGVhcm5lck5hbWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLm9iamVjdE5hbWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLnN0YXR1cyA9IG51bGw7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJ1c2luZXNzUm9sZSAhPT0gVXNlclJvbGVbVXNlclJvbGUuQVRURU5ERUVfTUFOQUdFUl0gJiYgdGhpcy5idXNpbmVzc1JvbGUgIT09IFVzZXJSb2xlW1VzZXJSb2xlLklOU1RSVUNUT1JdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9NRU5VX0tFWSk7XHJcbiAgICAgICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJQcm9ncmVzc1wiKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJcIik7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiZGVzdHJveVwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRJbnRybygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmludHJvU2VydmljZS5zdGFydEF0dGVuZGVlTWFuYWdlckhvbWVQYWdlSW50cm8oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KHBhcmFtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKSk7XHJcbiAgICAgICAgaWYgKHBhcmFtID09IFwiZGVzdHJveVwiKSB7XHJcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0gPT0gXCJcIikge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW0uaGFzQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb3BNZW51QWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVLZXkudG9wTWVudSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROb3RpZmljYXRpb25Db3VudHNGb3JBdHRlbmRlZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5idXNpbmVzc1JvbGUgPT09IFVzZXJSb2xlW1VzZXJSb2xlLkFUVEVOREVFX01BTkFHRVJdIHx8IHRoaXMuYnVzaW5lc3NSb2xlID09PSBVc2VyUm9sZVtVc2VyUm9sZS5BRE1JTklTVFJBVE9SXSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLmdldEF0dGVuZGVlTWFuYWdlck5vdGlmaWNhdGlvbnNDb3VudHMoKS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dGVuZGVlTWFuYWdlckNvdW50cyA9IGRhdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5idXNpbmVzc1JvbGUgPT09IFVzZXJSb2xlW1VzZXJSb2xlLklOU1RSVUNUT1JdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGlzdGljUmVwb3J0c1NlcnZpY2UuZ2V0SW5zdHJ1Y3Rvck5vdGlmaWNhdGlvbnNDb3VudHMoKS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dGVuZGVlTWFuYWdlckNvdW50cyA9IGRhdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuaW5kZXhVcmwoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWUobm90aWZpY2F0aW9uc01vZGFsTWVudTE6IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbnNNb2RhbE1lbnUxKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29tbWVudHMvZGF5XCI7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uV0VFS19DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbW1lbnRzL3dlZWtcIjtcclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5ORVdfQVNTRVNTTUVOVFM6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJuZXcgYXNzZXNzbWVudHNcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKGl0ZW1OYW1lOiBzdHJpbmcpOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiY29tbWVudHMvZGF5XCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTO1xyXG4gICAgICAgICAgICBjYXNlIFwiY29tbWVudHMvd2Vla1wiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLldFRUtfQ09NTUVOVFM7XHJcbiAgICAgICAgICAgIGNhc2UgXCJuZXcgYXNzZXNzbWVudHNcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5ORVdfQVNTRVNTTUVOVFM7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd05vdGlmaWNhdGlvbnNEaWFsb2coaXRlbU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd05vdGlmaWNhdGlvbk1vZGFsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldEN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSh0aGlzLmdldE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKGl0ZW1OYW1lKSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1OYW1lID0gaXRlbU5hbWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNob3dOb3RpZmljYXRpb25zRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbShpdGVtOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtID0gaXRlbTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVzaW5lc3NSb2xlID09PSBVc2VyUm9sZVtVc2VyUm9sZS5BVFRFTkRFRV9NQU5BR0VSXSB8fCB0aGlzLmJ1c2luZXNzUm9sZSA9PT0gVXNlclJvbGVbVXNlclJvbGUuQURNSU5JU1RSQVRPUl0pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NpYWxTZXJ2aWNlLmdldENvbW1lbnRzQW5kRGlzY3Vzc2lvbkZvckF0dGVuZGVlTWFuYWdlcihcIkRBWVwiKS50aGVuKGRhdGEgPT4gdGhpcy5jb21tZW50cyA9IGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29jaWFsU2VydmljZS5nZXRDb21tZW50c0FuZERpc2N1c3Npb25Gb3JJbnN0cnVjdG9yKFwiREFZXCIpLnRoZW4oZGF0YSA9PiB0aGlzLmNvbW1lbnRzID0gZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5XRUVLX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVzaW5lc3NSb2xlID09PSBVc2VyUm9sZVtVc2VyUm9sZS5BVFRFTkRFRV9NQU5BR0VSXSB8fCB0aGlzLmJ1c2luZXNzUm9sZSA9PT0gVXNlclJvbGVbVXNlclJvbGUuQURNSU5JU1RSQVRPUl0pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NpYWxTZXJ2aWNlLmdldENvbW1lbnRzQW5kRGlzY3Vzc2lvbkZvckF0dGVuZGVlTWFuYWdlcihcIldFRUtcIikudGhlbihkYXRhID0+IHRoaXMuY29tbWVudHMgPSBkYXRhKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2lhbFNlcnZpY2UuZ2V0Q29tbWVudHNBbmREaXNjdXNzaW9uRm9ySW5zdHJ1Y3RvcihcIldFRUtcIikudGhlbihkYXRhID0+IHRoaXMuY29tbWVudHMgPSBkYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLk5FV19BU1NFU1NNRU5UUzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudHNTZXJ2aWNlLmdldE5ld0Fzc2VtZW50c0Zvckluc3RydWN0b3IoKS50aGVuKGRhdGEgPT4gdGhpcy5uZXdBc3Nlc3NtZW50cyA9IGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWUgPSB0aGlzLmdldE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtTmFtZShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0Rpc2N1c3Npb24oY291cnNlSWQ6IG51bWJlciwgZGlzY3Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhpZGVOb3RpZmljYXRpb25zTW9kYWwoKTtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmRpc2N1c3Npb25VcmwoY291cnNlSWQpKS5zZWFyY2goXCJ0aHJlYWRJZFwiLCBkaXNjdXNzaW9uSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlTm90aWZpY2F0aW9uc01vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjbm90aWZpY2F0aW9uc01vZGFsXCIpLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgICAgICAkKCcubW9kYWwtYmFja2Ryb3AnKS5yZW1vdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Tm90aWZpY2F0aW9uSXRlbUNvdW50KGl0ZW06IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKTogbnVtYmVyIHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0pIHtcclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5EQVlfQ09NTUVOVFM6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdHRlbmRlZU1hbmFnZXJDb3VudHMuZGF5Q29tbWVudHNDb3VudDtcclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5XRUVLX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXR0ZW5kZWVNYW5hZ2VyQ291bnRzLndlZWtDb21tZW50c0NvdW50O1xyXG4gICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLk5FV19BU1NFU1NNRU5UUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF0dGVuZGVlTWFuYWdlckNvdW50cy5uZXdBc3Nlc3NtZW50c0NvdW50O1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXR0ZW5kZWVNYW5hZ2VyQ291bnRzLmRheUNvbW1lbnRzQ291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvQXNzZXNzbWVudChhc3Nlc3NtZW50SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbnNNb2RhbCgpO1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmFzc2Vzc21lbnRzUm91dGVyLmFzc2Vzc21lbnREZXRhaWxzVXJsKGFzc2Vzc21lbnRJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vYmlsZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImhvbWUuSG9tZVNlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtNZW51Q29uZmlndXJhdG9yU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL01lbnVDb25maWd1cmF0b3JTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SU1lbnVHcm91cH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvUGVyc29uYWxNZW51RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi8uLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1NldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uLy4uL3NldHRpbmdzL1NldHRpbmdzU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQgSVFTZXJ2aWNlID0gYW5ndWxhci5JUVNlcnZpY2U7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaW5mby9JbnRyb1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lQWRtaW5pc3RyYXRpb25NZW51Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImhvbWUuSG9tZUFkbWluaXN0cmF0aW9uTWVudUNvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgYWRtaW5pc3RyYXRpb25NZW51OiBJTWVudUdyb3VwO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIE1lbnVDb25maWd1cmF0b3JTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2V0dGluZ3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoUmVkaXJlY3QuTkFNRSxcclxuICAgICAgICBJbnRyb1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciAocHJpdmF0ZSAkcTogSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgIHByaXZhdGUgbWVudUNvbmZpZ3VyYXRvclNlcnZpY2U6IE1lbnVDb25maWd1cmF0b3JTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgIHByaXZhdGUgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkhPTUVfQURNSU5JU1RSQVRJT05fTUVOVV9LRVkpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUGVybWlzc2lvbnMoKTtcclxuXHJcbiAgICAgICAgLy8gY29uc3QgbGlzdGVuZXIgPSAkcm9vdFNjb3BlLiRvbignJGxvY2F0aW9uQ2hhbmdlU3VjY2VzcycsIGZ1bmN0aW9uIChldmVudCwgbmV4dCwgY3VycmVudCkge1xyXG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZygndGVzdCcpO1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gICAgIGNvbnN0IHBhdGggPSBuZXh0LnNsaWNlKG5leHQuaW5kZXhPZihcIiNcIikgKyAxKTtcclxuICAgICAgICAvLyAgICAgaWYgKHBhdGggPT09IEhvbWVSb3V0ZXIuaW5kZXhSb3V0ZSkge1xyXG4gICAgICAgIC8vICAgICAgICAgaGlzdG9yeS5nbygtMik7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyB9KTtcclxuXHJcbiAgICAgICAgLy8gJHNjb3BlLiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyAgICAgbGlzdGVuZXIoKTtcclxuICAgICAgICAvLyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVBlcm1pc3Npb25zKCkge1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gdXNlci5wZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgdGhpcy5sb2FkQWRtaW5Ib21lTWVudUl0ZW1zKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQWRtaW5Ib21lTWVudUl0ZW1zKCkge1xyXG4gICAgICAgIGxldCB1c2VyID0gdGhpcy5hdXRoTWFuYWdlci5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGxldCBidXNpbmVzc1VuaXRJZDogbnVtYmVyID0gdXNlciAmJiAhdXNlci5hbGxCdXNpbmVzc1VuaXRzICYmIHVzZXIuYnVzaW5lc3NVbml0cy5sZW5ndGggPT0gMSA/IHVzZXIuYnVzaW5lc3NVbml0c1swXSA6IG51bGw7XHJcbiAgICAgICAgbGV0IGFsbEJ1c2luZXNzVW5pdHMgPSB1c2VyICYmIHVzZXIuYWxsQnVzaW5lc3NVbml0cztcclxuXHJcbiAgICAgICAgdGhpcy5hZG1pbmlzdHJhdGlvbk1lbnUgPSB0aGlzLm1lbnVDb25maWd1cmF0b3JTZXJ2aWNlLmdldEFkbWluaXN0cmF0aW9uTWVudShcclxuICAgICAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSxcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyxcclxuICAgICAgICAgICAgYWxsQnVzaW5lc3NVbml0cyxcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghdGhpcy5hZG1pbmlzdHJhdGlvbk1lbnUgfHwgIXRoaXMuYWRtaW5pc3RyYXRpb25NZW51LmFsbG93ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuZm9yd2FyZFRvQWNjZXNzRGVuaWVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdWJNZW51SHRtbChpdGVtOiBJTWVudUdyb3VwLCBpdGVtczogSU1lbnVHcm91cFtdKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgYWxsTGlua0l0ZW1zOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmFsbG93ZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBpdGVtLnVybCA/IGl0ZW0udXJsIDogJyMvJztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGl0ZW0udXJsLmluZGV4T2YoJ2h0dHAnKSA9PSAwID8gJ19ibGFuaycgOiBcIicnXCI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gXCI8YSBocmVmPVwiICsgaHJlZiArIFwiIHRhcmdldD1cIiArIHRhcmdldCArIFwiPlwiICsgaXRlbS5uYW1lICsgXCI8L2E+XCI7XHJcbiAgICAgICAgICAgICAgICBhbGxMaW5rSXRlbXMucHVzaChsaW5rKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW0ua2V5ID09PSBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0JVU0lORVNTX1VOSVRTX01FTlVfS0VZICYmIGFsbExpbmtJdGVtcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgaXRlbS51cmwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhbGxMaW5rSXRlbXMuam9pbihcIiZuYnNwJm5ic3B8Jm5ic3AmbmJzcFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRJbnRybygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmludHJvU2VydmljZS5zdGFydEFkbWluaXN0cmF0aW9uSG9tZVBhZ2VJbnRybygpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtTdGF0aXN0aWNSZXBvcnRzU2VydmljZX0gZnJvbSBcIi4uLy4uL3N0YXRpc3RpY3MvU3RhdGlzdGljUmVwb3J0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3RhdGlzdGljRm9yQWRtaW5FbnRyeX0gZnJvbSBcIi4uLy4uL3N0YXRpc3RpY3MvbW9kZWxzL0lTdGF0aXN0aWNGb3JBZG1pbkVudHJ5XCI7XHJcbmltcG9ydCB7SVN0YXRpc3RpY0ZvckFkbWluUGVyaW9kfSBmcm9tIFwiLi4vLi4vc3RhdGlzdGljcy9tb2RlbHMvSVN0YXRpc3RpY0ZvckFkbWluUGVyaW9kXCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaW5mby9JbnRyb1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lQWRtaW5pc3RyYXRpb25SZXBvcnRzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImhvbWUuSG9tZUFkbWluaXN0cmF0aW9uUmVwb3J0c0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpc3RpYzogSVN0YXRpc3RpY0ZvckFkbWluRW50cnk7XHJcbiAgICBwcml2YXRlIGRhaWx5U3RhdGlzdGljOiBJU3RhdGlzdGljRm9yQWRtaW5QZXJpb2Q7XHJcbiAgICBwcml2YXRlIHdlZWtseVN0YXRpc3RpYzogSVN0YXRpc3RpY0ZvckFkbWluUGVyaW9kO1xyXG4gICAgcHJpdmF0ZSBtb250aGx5U3RhdGlzdGljOiBJU3RhdGlzdGljRm9yQWRtaW5QZXJpb2Q7XHJcbiAgICBwcml2YXRlIGN1cnJlbnRNb250aDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50WWVhcjogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBTdGF0aXN0aWNSZXBvcnRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEludHJvU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RhdGlzdGljUmVwb3J0c1NlcnZpY2U6IFN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLCBwcml2YXRlIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5IT01FX0FETUlOSVNUUkFUSU9OX1JFUE9SVFNfS0VZKTtcclxuICAgICAgICBzdGF0aXN0aWNSZXBvcnRzU2VydmljZS5nZXRJbmZvRm9yQWRtaW4oKS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGlzdGljID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5kYWlseVN0YXRpc3RpYyAgPSB0aGlzLnN0YXRpc3RpYy5zdGF0aXN0aWNQZXJpb2RzLmZpbHRlcihwID0+IHAucGVyaW9kVHlwZSA9PT0gXCJEQVlcIilbMF07XHJcbiAgICAgICAgICAgIHRoaXMud2Vla2x5U3RhdGlzdGljID0gdGhpcy5zdGF0aXN0aWMuc3RhdGlzdGljUGVyaW9kcy5maWx0ZXIocCA9PiBwLnBlcmlvZFR5cGUgPT09IFwiV0VFS1wiKVswXTtcclxuICAgICAgICAgICAgdGhpcy5tb250aGx5U3RhdGlzdGljID0gdGhpcy5zdGF0aXN0aWMuc3RhdGlzdGljUGVyaW9kcy5maWx0ZXIocCA9PiBwLnBlcmlvZFR5cGUgPT09IFwiTU9OVEhcIilbMF07XHJcbiAgICAgICAgICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKHRoaXMubW9udGhseVN0YXRpc3RpYy5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNb250aCA9IHRvZGF5LnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwgeyBtb250aDogJ2xvbmcnIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRZZWFyID0gdG9kYXkuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRJbnRybygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmludHJvU2VydmljZS5zdGFydEFkbWluaXN0cmF0aW9uSG9tZVBhZ2VJbnRybygpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi8uLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uLy4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7UmVzaXplVmlld1NlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9SZXNpemVWaWV3U2VydmljZVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SU1lbnVHcm91cH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvUGVyc29uYWxNZW51RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlZE9iamVjdFR5cGV9IGZyb20gXCIuLi8uLi9SZWZlcmVuY2VkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge1BlcnNvbmFsU2VydmljZX0gZnJvbSBcIi4uLy4uL3BlcnNvbmFsL1BlcnNvbmFsU2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uLy4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0lOb3RpZmljYXRpb25Db3VudHN9IGZyb20gXCIuLi9tb2RlbHMvSU5vdGlmaWNhdGlvbkNvdW50c1wiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc3RhdGlzdGljcy9TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgTk9USUZJQ0FUSU9OU19NT0RBTF9BVFRFTkRFRV9NQU5BR0VSX01FTlUsXHJcbiAgICBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbVxyXG59IGZyb20gXCIuLi9tb2RlbHMvTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1cIjtcclxuaW1wb3J0IHtJQ29tbWVudHNBbmREaXNjdXNzaW9ufSBmcm9tIFwiLi4vLi4vc29jaWFsL21vZGVscy9JQ29tbWVudHNBbmREaXNjdXNzaW9uXCI7XHJcbmltcG9ydCB7U29jaWFsU2VydmljZX0gZnJvbSBcIi4uLy4uL3NvY2lhbC9Tb2NpYWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaW5mby9JbnRyb1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDb21tb25Ib21lU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25Ib21lU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhvbWVBdHRlbmRlZU1hbmFnZXJDb3Vyc2VzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImhvbWUuSG9tZUF0dGVuZGVlTWFuYWdlckNvdXJzZXNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbUluTW9kdWxlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICAgIHB1YmxpYyBtZW51S2V5OiBhbnk7XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyByb3dTaG93OiBNYXA8bnVtYmVyLCBib29sZWFuPiA9IG5ldyBNYXA8bnVtYmVyLCBib29sZWFuPigpO1xyXG4gICAgcHVibGljIGNvdXJzZXNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUNvdXJzZT47XHJcbiAgICBwdWJsaWMgcmVzaXplVmlld1NlcnZpY2U6IFJlc2l6ZVZpZXdTZXJ2aWNlO1xyXG4gICAgcHVibGljIGN1cnJlbnRNZW51SXRlbUtleTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBjdXJyZW50TWVudUl0ZW1OYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIGhvbWVNZW51QnlQZXJtaXNzaW9uOiBJTWVudUdyb3VwO1xyXG4gICAgcHVibGljIGF0dGVuZGVlTWFuYWdlckNvdW50czogSU5vdGlmaWNhdGlvbkNvdW50cztcclxuICAgIHB1YmxpYyBub3RpZmljYXRpb25zTW9kYWxNZW51OiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbVtdID0gTk9USUZJQ0FUSU9OU19NT0RBTF9BVFRFTkRFRV9NQU5BR0VSX01FTlU7XHJcbiAgICBwdWJsaWMgY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbTtcclxuICAgIHB1YmxpYyBjdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1OYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHNob3dOb3RpZmljYXRpb25Nb2RhbDogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgbm90U3RhcnRlZFN0YXR1czogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaW5Qcm9ncmVzc1N0YXR1czogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgY29tcGxldGVkU3RhdHVzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgY29tbWVudHM6IElDb21tZW50c0FuZERpc2N1c3Npb25bXTtcclxuXHJcbiAgICBwdWJsaWMgY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzdG9yYWdlRmlsdGVyVmFsdWVzOiBhbnk7XHJcblxyXG4gICAgcHVibGljIHNob3dFeHBpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY291cnNlc1VybDogc3RyaW5nID0gXCIvYXBpL2NvdXJzZXMvc2VhcmNoXCI7XHJcblxyXG4gICAgcHVibGljIHVzZXJQcm9maWxlOiBJVXNlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVyc29uYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBTb2NpYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uRmlsdGVyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEludHJvU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vbkhvbWVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsU2VydmljZTogUGVyc29uYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aXN0aWNSZXBvcnRzU2VydmljZTogU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNvY2lhbFNlcnZpY2U6IFNvY2lhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY29tbW9uRmlsdGVyU2VydmljZTogQ29tbW9uRmlsdGVyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY29tbW9uSG9tZVNlcnZpY2U6IENvbW1vbkhvbWVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuSE9NRV9BVFRFTkRFRV9NQU5BR0VSX0NPVVJTRVNfS0VZKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXROb3RpZmljYXRpb25Db3VudHNGb3JBdHRlbmRlZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcIlwiKTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJkZXN0cm95XCIpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKClcclxuICAgICAgICAgICAgICAgIC50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnVzZXJQcm9maWxlID9cclxuICAgICAgICAgICAgICAgIE51bWJlcih0aGlzLnVzZXJQcm9maWxlLnBhZ2VWaWV3TW9kZSkgOiAxO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0SW50cm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb1NlcnZpY2Uuc3RhcnRBdHRlbmRlZU1hbmFnZXJIb21lUGFnZUludHJvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTdG9yYWdlRmlsdGVycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0RmlsdGVyVmFsdWVzKEhvbWVBdHRlbmRlZU1hbmFnZXJDb3Vyc2VzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmFwcGx5U3RvcmFnZUZpbHRlcih0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMsXHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0U2VhcmNoSW5wdXQoSG9tZUF0dGVuZGVlTWFuYWdlckNvdXJzZXNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLm9wZW5TZWFyY2hJbnB1dCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShwYXJhbTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikpO1xyXG4gICAgICAgIGlmIChwYXJhbSA9PSBcImRlc3Ryb3lcIikge1xyXG4gICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtID09IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtLmhhc0NsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVG9wTWVudUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51S2V5LnRvcE1lbnUgPT0gdG9wTWVudUtleTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RldGFpbHMoaW5kZXg6IG51bWJlciwga2V5Q29kZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGtleUNvZGUgPT0gMTMgfHwgIWtleUNvZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dTaG93LnNldChpbmRleCwgIXRoaXMucm93U2hvdy5nZXQoaW5kZXgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRDb3Vyc2UoY291cnNlSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybChjb3Vyc2VJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRUb0Zhdm9yaXRlcyhjb3Vyc2U6IElDb3Vyc2UpIHtcclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGNvdXJzZS5pZCwgIXRoaXMucm93U2hvdy5nZXQoY291cnNlLmlkKSk7XHJcbiAgICAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UuYWRkVG9GYXZvcml0ZXMoY291cnNlLmlkLCBjb3Vyc2UudmVyc2lvbiwgUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgY291cnNlIGhhcyBiZWVuIGFkZGVkIHRvIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICBjb3Vyc2UuZmF2b3JpdGUgPSB0cnVlO1xyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuYWxyZWFkeS5pbi5mYXZvcml0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgY291cnNlIGlzIGFscmVhZHkgaW4geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuaXMuY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgZGF0YSBoYXMgYmVlbiBtb2RpZmllZCBieSBhbm90aGVyIHVzZXI6IHBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGFuZCB0cnkgYWdhaW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlRnJvbUZhdm9yaXRlcyhjb3Vyc2U6IElDb3Vyc2UpIHtcclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGNvdXJzZS5pZCwgIXRoaXMucm93U2hvdy5nZXQoY291cnNlLmlkKSk7XHJcbiAgICAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UucmVtb3ZlRnJvbUZhdm9yaXRlcyhjb3Vyc2UuaWQsIGNvdXJzZS52ZXJzaW9uLCBSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0UpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBjb3Vyc2UgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICBjb3Vyc2UuZmF2b3JpdGUgPSBmYWxzZTtcclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0Lm5vdC5pbi5mYXZvcml0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byByZW1vdmUgZnJvbSB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5pcy5jaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGFub3RoZXIgdXNlcjogcGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYW5kIHRyeSBhZ2FpblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkU2VhcmNoKCkge1xyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zZWFyY2hTdHJpbmdcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci52aWV3VHlwZVwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIudmlld1R5cGVcIikpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5jb21wbGV4aXR5TGV2ZWxcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5jb21wbGV4aXR5TGV2ZWwgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5jb21wbGV4aXR5TGV2ZWxcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNvdXJjZUlkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc291cmNlSWQgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zb3VyY2VJZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RmlsdGVyRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zaG93RmlsdGVyRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUZpbHRlcih0eXBlOiBzdHJpbmcsIHJlZmVyZW5jZU9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY291bnRBY3RpdmVJbmNyZW1lbnQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UudXBkYXRlR2VuZXJhbEZpbHRlcih0eXBlLCByZWZlcmVuY2VPYmplY3QsXHJcbiAgICAgICAgICAgIEhvbWVBdHRlbmRlZU1hbmFnZXJDb3Vyc2VzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyICs9IGNvdW50QWN0aXZlSW5jcmVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcHBseUZpbHRlcigpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlHZW5lcmFsRmlsdGVyKHRoaXMuY291cnNlc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbGVhckZpbHRlcihIb21lQXR0ZW5kZWVNYW5hZ2VyQ291cnNlc0NvbnRyb2xsZXIuTkFNRSwgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoS2V5UHJlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNhdmVTZWFyY2hJbnB1dChIb21lQXR0ZW5kZWVNYW5hZ2VyQ291cnNlc0NvbnRyb2xsZXIuTkFNRSwgdGhpcy5zZWFyY2hJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xvc2VTZWFyY2hJbnB1dChIb21lQXR0ZW5kZWVNYW5hZ2VyQ291cnNlc0NvbnRyb2xsZXIuTkFNRSwgd2luZG93KTtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoSW5wdXQgfHwgdGhpcy5zZWFyY2hJbnB1dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhclNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zdWJqZWN0SWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY29tcGxleGl0eUxldmVsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLmxhbmd1YWdlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc291cmNlSWQgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLm5vdFN0YXJ0ZWRTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5Qcm9ncmVzc1N0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZWRTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG5cclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0NvdXJzZXNGaWx0ZXIudmlld1R5cGVcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc3ViamVjdElkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLmNvbXBsZXhpdHlMZXZlbFwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5sYW5ndWFnZUlkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNvdXJjZUlkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLmNvdXJzZVN0YXR1c1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2Uub2xkVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJQYWdlVmlld01vZGUoQm9vbGVhbih2aWV3VHlwZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVXNlclBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZpbHRlckNoYW5nZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5cIiArIGtleSwgdmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLlwiICsga2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbkNvdW50c0ZvckF0dGVuZGVlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGlzdGljUmVwb3J0c1NlcnZpY2UuZ2V0QXR0ZW5kZWVNYW5hZ2VyTm90aWZpY2F0aW9uc0NvdW50cygpLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hdHRlbmRlZU1hbmFnZXJDb3VudHMgPSBkYXRhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWUobm90aWZpY2F0aW9uc01vZGFsTWVudTE6IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbnNNb2RhbE1lbnUxKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29tbWVudHMvZGF5XCI7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uV0VFS19DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbW1lbnRzL3dlZWtcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKGl0ZW1OYW1lOiBzdHJpbmcpOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiY29tbWVudHMvZGF5XCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTO1xyXG4gICAgICAgICAgICBjYXNlIFwiY29tbWVudHMvd2Vla1wiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLldFRUtfQ09NTUVOVFM7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd05vdGlmaWNhdGlvbnNEaWFsb2coaXRlbU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd05vdGlmaWNhdGlvbk1vZGFsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldEN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSh0aGlzLmdldE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKGl0ZW1OYW1lKSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1OYW1lID0gaXRlbU5hbWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNob3dOb3RpZmljYXRpb25zRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTW9iaWxlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA3Njg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbShpdGVtOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtID0gaXRlbTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zb2NpYWxTZXJ2aWNlLmdldENvbW1lbnRzQW5kRGlzY3Vzc2lvbkZvckF0dGVuZGVlTWFuYWdlcihcIkRBWVwiKS50aGVuKGRhdGEgPT4gdGhpcy5jb21tZW50cyA9IGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uV0VFS19DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc29jaWFsU2VydmljZS5nZXRDb21tZW50c0FuZERpc2N1c3Npb25Gb3JBdHRlbmRlZU1hbmFnZXIoXCJXRUVLXCIpLnRoZW4oZGF0YSA9PiB0aGlzLmNvbW1lbnRzID0gZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1OYW1lID0gdGhpcy5nZXROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9EaXNjdXNzaW9uKGNvdXJzZUlkOiBudW1iZXIsIGRpc2N1c3Npb25JZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oaWRlTm90aWZpY2F0aW9uc01vZGFsKCk7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kaXNjdXNzaW9uVXJsKGNvdXJzZUlkKSkuc2VhcmNoKFwidGhyZWFkSWRcIiwgZGlzY3Vzc2lvbklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGlkZU5vdGlmaWNhdGlvbnNNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICAkKFwiI25vdGlmaWNhdGlvbnNNb2RhbFwiKS5tb2RhbChcImhpZGVcIik7XHJcbiAgICAgICAgJCgnLm1vZGFsLWJhY2tkcm9wJykucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbkl0ZW1Db3VudChpdGVtOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSk6IG51bWJlciB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXR0ZW5kZWVNYW5hZ2VyQ291bnRzLmRheUNvbW1lbnRzQ291bnQ7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uV0VFS19DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF0dGVuZGVlTWFuYWdlckNvdW50cy53ZWVrQ29tbWVudHNDb3VudDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUdyaWQoKSB7XHJcbiAgICAgICAgbGV0IGNvdXJzZXNVcmwgPSAhdGhpcy5zaG93RXhwaXJlZFxyXG4gICAgICAgICAgICA/IFwiL2FwaS9jb3Vyc2VzL3NlYXJjaC9hdHRlbmRlZU1hbmFnZXJcIlxyXG4gICAgICAgICAgICA6IFwiL2FwaS9jb3Vyc2VzL3NlYXJjaC9hdHRlbmRlZU1hbmFnZXIvZXhwaXJlZFwiXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUNvdXJzZT4odGhpcy4kaHR0cCwgdGhpcy51cmwuc2VydmljZShjb3Vyc2VzVXJsKSkpO1xyXG5cclxuICAgICAgICB0aGlzLmdldFN0b3JhZ2VGaWx0ZXJzKCk7XHJcblxyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMubG9hZFNlYXJjaCgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMudmlld1R5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdy5iaW5kKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFnZSA9IHRoaXMuY291cnNlc0dyaWRNb2RlbC5jdXJyZW50UGFnZSA+PSB0aGlzLmNvdXJzZXNHcmlkTW9kZWwudG90YWxQYWdlQ291bnRcclxuICAgICAgICAgICAgICAgID8gIHRoaXMuY291cnNlc0dyaWRNb2RlbC5jdXJyZW50UGFnZSAtIDFcclxuICAgICAgICAgICAgICAgIDp0aGlzLmNvdXJzZXNHcmlkTW9kZWwuY3VycmVudFBhZ2U7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRQYWdlKGN1cnJlbnRQYWdlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZFBhZ2UoY3VycmVudFBhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2hvcnRTdW1tYXJ5KG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmcgIT0gdW5kZWZpbmVkICYmIG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA+IDI1NlxyXG4gICAgICAgICAgICA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cmluZygwLCAyNTYpICsgJy4uLidcclxuICAgICAgICAgICAgOiBvcmlnaW5hbFN0cmluZztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuLi8uLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SU1lbnVHcm91cH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvUGVyc29uYWxNZW51RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uLy4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFNlcnZpY2V9IGZyb20gXCIuLi8uLi9sZWFybmluZ1BhdGhzL0xlYXJuaW5nUGF0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VQcm9ncmVzc1N0YXR1c30gZnJvbSBcIi4uLy4uL2NvdXJzZXMvbW9kZWxzL0NvdXJzZVByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aENvdXJzZX0gZnJvbSBcIi4uLy4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhDb3Vyc2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlfSBmcm9tIFwiLi4vLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZVwiO1xyXG5pbXBvcnQge0lOb3RpZmljYXRpb25Db3VudHN9IGZyb20gXCIuLi9tb2RlbHMvSU5vdGlmaWNhdGlvbkNvdW50c1wiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc3RhdGlzdGljcy9TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgTk9USUZJQ0FUSU9OU19NT0RBTF9BVFRFTkRFRV9NQU5BR0VSX01FTlUsXHJcbiAgICBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbVxyXG59IGZyb20gXCIuLi9tb2RlbHMvTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1cIjtcclxuaW1wb3J0IHtTb2NpYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc29jaWFsL1NvY2lhbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ29tbWVudHNBbmREaXNjdXNzaW9ufSBmcm9tIFwiLi4vLi4vc29jaWFsL21vZGVscy9JQ29tbWVudHNBbmREaXNjdXNzaW9uXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uSG9tZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21tb24vQ29tbW9uSG9tZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJbnRyb1NlcnZpY2V9IGZyb20gXCIuLi8uLi9pbmZvL0ludHJvU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5kZWNsYXJlIHZhciAkOiBhbnk7XHJcblxyXG5leHBvcnQgY2xhc3MgSG9tZUF0dGVuZGVlTWFuYWdlckxlYXJuaW5nUGF0aHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaG9tZS5Ib21lQXR0ZW5kZWVNYW5hZ2VyTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTGVhcm5pbmdQYXRoPjtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaG9tZU1lbnVCeVBlcm1pc3Npb246IElNZW51R3JvdXA7XHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVJdGVtS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIGN1cnJlbnRNZW51SXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgYXR0ZW5kZWVNYW5hZ2VyQ291bnRzOiBJTm90aWZpY2F0aW9uQ291bnRzO1xyXG4gICAgcHVibGljIG5vdGlmaWNhdGlvbnNNb2RhbE1lbnU6IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtW10gPSBOT1RJRklDQVRJT05TX01PREFMX0FUVEVOREVFX01BTkFHRVJfTUVOVTtcclxuICAgIHB1YmxpYyBjdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW06IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtO1xyXG4gICAgcHVibGljIGN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIHNob3dOb3RpZmljYXRpb25Nb2RhbDogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgd2luZG93OiBhbnk7XHJcbiAgICBwdWJsaWMgc3RhcnRXaW5kb3dXaWR0aDogbnVtYmVyO1xyXG4gICAgcHVibGljIG9sZFNlYXJjaFZpZXdUeXBlOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGNvbW1lbnRzOiBJQ29tbWVudHNBbmREaXNjdXNzaW9uW107XHJcblxyXG4gICAgcHVibGljIGNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBpc1Nob3dBbGxDYXJkczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzdG9yYWdlRmlsdGVyVmFsdWVzOiBhbnk7XHJcblxyXG4gICAgcHJpdmF0ZSBpc0luaXRTbGljayA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzaG93RXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aHNVcmw6IHN0cmluZyA9IFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaFwiO1xyXG4gICAgcHVibGljIGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU29jaWFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb21tb25Ib21lU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEludHJvU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aFNlcnZpY2U6IExlYXJuaW5nUGF0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlOiBTdGF0aXN0aWNSZXBvcnRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc29jaWFsU2VydmljZTogU29jaWFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb21tb25GaWx0ZXJTZXJ2aWNlOiBDb21tb25GaWx0ZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkhvbWVTZXJ2aWNlOiBDb21tb25Ib21lU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5IT01FX0FUVEVOREVFX01BTkFHRVJfTEVBUk5JTkdfUEFUSFNfS0VZKTtcclxuICAgICAgICBpZiAodGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5odHRwID0gJGh0dHA7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0Tm90aWZpY2F0aW9uQ291bnRzRm9yQXR0ZW5kZWUoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkKCk7XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJcIik7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvdy51bmJpbmQoJ3Jlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiZGVzdHJveVwiKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1c2VyO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy51c2VyUHJvZmlsZSA/XHJcbiAgICAgICAgICAgICAgICBOdW1iZXIodGhpcy51c2VyUHJvZmlsZS5wYWdlVmlld01vZGUpIDogMTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydEludHJvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW50cm9TZXJ2aWNlLnN0YXJ0QXR0ZW5kZWVNYW5hZ2VySG9tZVBhZ2VJbnRybygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUZpbHRlcnMoaXNJbml0PzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJWYWx1ZXMoSG9tZUF0dGVuZGVlTWFuYWdlckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlTdG9yYWdlRmlsdGVyKHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyxcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRTZWFyY2hJbnB1dChIb21lQXR0ZW5kZWVNYW5hZ2VyTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgaWYodGhpcy5zZWFyY2hJbnB1dCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uub3BlblNlYXJjaElucHV0KCk7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaXNJbml0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0TG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLmlzSW5pdFNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aHNMb2FkZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kTG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGljaygpLCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkocGFyYW06IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBlbGVtID0gYW5ndWxhci5lbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpKTtcclxuICAgICAgICBpZiAocGFyYW0gPT0gXCJkZXN0cm95XCIpIHtcclxuICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbS5oYXNDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIikpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHZpZXdUeXBlID09IDEpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGljaygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVXNlclBhZ2VWaWV3TW9kZShCb29sZWFuKHZpZXdUeXBlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVVc2VyUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRMZWFybmluZ1BhdGgobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuZGV0YWlsc1VybChsZWFybmluZ1BhdGhJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwoY291cnNlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GaWx0ZXJDaGFuZ2Uoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuXCIgKyBrZXksIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5cIiArIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RmlsdGVyRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zaG93RmlsdGVyRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUZpbHRlcih0eXBlOiBzdHJpbmcsIHJlZmVyZW5jZU9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY291bnRBY3RpdmVJbmNyZW1lbnQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UudXBkYXRlR2VuZXJhbEZpbHRlcih0eXBlLCByZWZlcmVuY2VPYmplY3QsXHJcbiAgICAgICAgICAgIEhvbWVBdHRlbmRlZU1hbmFnZXJMZWFybmluZ1BhdGhzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyICs9IGNvdW50QWN0aXZlSW5jcmVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xlYXJGaWx0ZXIoSG9tZUF0dGVuZGVlTWFuYWdlckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEtleVByZXNzKCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlU2VhcmNoSW5wdXQoSG9tZUF0dGVuZGVlTWFuYWdlckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsb3NlU2VhcmNoSW5wdXQoSG9tZUF0dGVuZGVlTWFuYWdlckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLmxhbmd1YWdlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc291cmNlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG5cclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIudmlld1R5cGVcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc3ViamVjdElkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLmxhbmd1YWdlSWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc291cmNlSWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRTZWFyY2goKSB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnZpZXdUeXBlXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci52aWV3VHlwZVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc3ViamVjdElkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc3ViamVjdElkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLmxhbmd1YWdlSWRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5sYW5ndWFnZUlkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIubGFuZ3VhZ2VJZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zb3VyY2VJZFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnNvdXJjZUlkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc291cmNlSWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcGxldGVkTWFuZGF0b3J5Q291cnNlcyhjb3Vyc2VzQnlMUDogSUxlYXJuaW5nUGF0aENvdXJzZVtdKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgY291bnRDb21wbGV0ZWRDb3Vyc2VzID0gMDtcclxuICAgICAgICBsZXQgY291bnRNYW5kYXRvcnlDb3Vyc2VzID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjb3Vyc2Ugb2YgY291cnNlc0J5TFApIHtcclxuICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VJbmNsdXNpb25UeXBlID09PSBMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlW0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGUuTUFOREFUT1JZXSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5SRVNFVF1cclxuICAgICAgICAgICAgICAgICAgICB8fCBjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuRVhQSVJFRF1cclxuICAgICAgICAgICAgICAgICAgICB8fCBjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50Q29tcGxldGVkQ291cnNlcysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY291bnRNYW5kYXRvcnlDb3Vyc2VzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvdW50Q29tcGxldGVkQ291cnNlcyArICcgb2YgJyArIGNvdW50TWFuZGF0b3J5Q291cnNlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcGxldGVkRWxlY3RpdmVDb3Vyc2VzKGNvdXJzZXNCeUxQOiBJTGVhcm5pbmdQYXRoQ291cnNlW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjb3VudENvbXBsZXRlZENvdXJzZXMgPSAwO1xyXG4gICAgICAgIGxldCBjb3VudE1hbmRhdG9yeUNvdXJzZXMgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNvdXJzZSBvZiBjb3Vyc2VzQnlMUCkge1xyXG4gICAgICAgICAgICBpZiAoY291cnNlLmNvdXJzZUluY2x1c2lvblR5cGUgPT09IExlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGVbTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZS5FTEVDVElWRV0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuUkVTRVRdXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzID09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLkVYUElSRURdXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzID09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLkNPTVBMRVRFRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3VudENvbXBsZXRlZENvdXJzZXMrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvdW50TWFuZGF0b3J5Q291cnNlcysrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3VudENvbXBsZXRlZENvdXJzZXMgKyAnIG9mICcgKyBjb3VudE1hbmRhdG9yeUNvdXJzZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbkNvdW50c0ZvckF0dGVuZGVlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGlzdGljUmVwb3J0c1NlcnZpY2UuZ2V0QXR0ZW5kZWVNYW5hZ2VyTm90aWZpY2F0aW9uc0NvdW50cygpLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hdHRlbmRlZU1hbmFnZXJDb3VudHMgPSBkYXRhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWUobm90aWZpY2F0aW9uc01vZGFsTWVudTE6IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbnNNb2RhbE1lbnUxKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29tbWVudHMvZGF5XCI7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uV0VFS19DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbW1lbnRzL3dlZWtcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKGl0ZW1OYW1lOiBzdHJpbmcpOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiY29tbWVudHMvZGF5XCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTO1xyXG4gICAgICAgICAgICBjYXNlIFwiY29tbWVudHMvd2Vla1wiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLldFRUtfQ09NTUVOVFM7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd05vdGlmaWNhdGlvbnNEaWFsb2coaXRlbU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd05vdGlmaWNhdGlvbk1vZGFsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldEN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSh0aGlzLmdldE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKGl0ZW1OYW1lKSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1OYW1lID0gaXRlbU5hbWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNob3dOb3RpZmljYXRpb25zRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbShpdGVtOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtID0gaXRlbTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zb2NpYWxTZXJ2aWNlLmdldENvbW1lbnRzQW5kRGlzY3Vzc2lvbkZvckF0dGVuZGVlTWFuYWdlcihcIkRBWVwiKS50aGVuKGRhdGEgPT4gdGhpcy5jb21tZW50cyA9IGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uV0VFS19DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc29jaWFsU2VydmljZS5nZXRDb21tZW50c0FuZERpc2N1c3Npb25Gb3JBdHRlbmRlZU1hbmFnZXIoXCJXRUVLXCIpLnRoZW4oZGF0YSA9PiB0aGlzLmNvbW1lbnRzID0gZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1OYW1lID0gdGhpcy5nZXROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9EaXNjdXNzaW9uKGNvdXJzZUlkOiBudW1iZXIsIGRpc2N1c3Npb25JZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oaWRlTm90aWZpY2F0aW9uc01vZGFsKCk7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kaXNjdXNzaW9uVXJsKGNvdXJzZUlkKSkuc2VhcmNoKFwidGhyZWFkSWRcIiwgZGlzY3Vzc2lvbklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGlkZU5vdGlmaWNhdGlvbnNNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICAkKFwiI25vdGlmaWNhdGlvbnNNb2RhbFwiKS5tb2RhbChcImhpZGVcIik7XHJcbiAgICAgICAgJCgnLm1vZGFsLWJhY2tkcm9wJykucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbkl0ZW1Db3VudChpdGVtOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSk6IG51bWJlciB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXR0ZW5kZWVNYW5hZ2VyQ291bnRzLmRheUNvbW1lbnRzQ291bnQ7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uV0VFS19DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF0dGVuZGVlTWFuYWdlckNvdW50cy53ZWVrQ29tbWVudHNDb3VudDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2xpY2sgbHBcclxuICAgIHB1YmxpYyBpbml0aWFsaXplU2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0luaXRTbGljayA9IHRoaXMuY29tbW9uSG9tZVNlcnZpY2UuaW5pdGlhbGl6ZVNsaWNrKHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93QWxsTFAobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTaG93QWxsQ2FyZHMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29tbW9uSG9tZVNlcnZpY2Uuc2hvd0FsbExQKGxlYXJuaW5nUGF0aElkKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpPT50aGlzLnNldFBvcHVwQ2xhc3NlcygpLCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlQWxsTFAobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTaG93QWxsQ2FyZHMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbW1vbkhvbWVTZXJ2aWNlLmhpZGVBbGxMUChsZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKT0+dGhpcy5zZXRQb3B1cENsYXNzZXMoKSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlbkNhcmQoaW5kZXhQbGFuTHA6IG51bWJlciwgbGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uSG9tZVNlcnZpY2Uub3BlbkNhcmQoaW5kZXhQbGFuTHAsIGxlYXJuaW5nUGF0aElkLCB0aGlzLmlzU2hvd0FsbENhcmRzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlR3JpZCgpIHtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNVcmwgPSAhdGhpcy5zaG93RXhwaXJlZFxyXG4gICAgICAgICAgICA/IFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaC9hdHRlbmRlZU1hbmFnZXJcIlxyXG4gICAgICAgICAgICA6IFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaC9hdHRlbmRlZU1hbmFnZXIvZXhwaXJlZFwiXHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUxlYXJuaW5nUGF0aD4odGhpcy5odHRwLCB0aGlzLnVybC5zZXJ2aWNlKHRoaXMubGVhcm5pbmdQYXRoc1VybCkpKTtcclxuICAgICAgICB0aGlzLmdldFN0b3JhZ2VGaWx0ZXJzKHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwucGFnZVNpemUgPSA0O1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMub2xkU2VhcmNoVmlld1R5cGUgPSB0aGlzLnZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKHRoaXMud2luZG93LmlubmVyV2lkdGggPCA5OTIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFdpbmRvd1dpZHRoID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V2luZG93V2lkdGggPSAxMDAwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgdGhpcy5zdGFydFdpbmRvd1dpZHRoICYmICF0aGlzLnZpZXdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sZFNlYXJjaFZpZXdUeXBlID0gdGhpcy52aWV3VHlwZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRXaW5kb3dXaWR0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPj0gOTkyICYmIHdpbmRvdy5pbm5lcldpZHRoID4gdGhpcy5zdGFydFdpbmRvd1dpZHRoICYmICF0aGlzLm9sZFNlYXJjaFZpZXdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5vbGRTZWFyY2hWaWV3VHlwZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRXaW5kb3dXaWR0aCA9IDEwMDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMubG9hZFNlYXJjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vYmlsZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VEYXRlc1N0cmluZyhjb3Vyc2U6IElDb3Vyc2UpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBsZXQgY291cnNlRGF0ZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gICAgICAgIGlmIChjb3Vyc2UuZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICBjb3Vyc2VEYXRlcy5zZXQoXCJlbmREYXRlXCIsIG5ldyBEYXRlKGNvdXJzZS5lbmREYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvdXJzZS5lbmREYXRlIHx8IGNvdXJzZS5zdGFydERhdGUgPiBEYXRlLm5vdygpKSB7XHJcbiAgICAgICAgICAgIGNvdXJzZURhdGVzLnNldChcInN0YXJ0RGF0ZVwiLCBuZXcgRGF0ZShjb3Vyc2Uuc3RhcnREYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3Vyc2VEYXRlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UG9wdXBDbGFzc2VzKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjYXJkcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJscF9fcGxhbi1jYXJkIGluZm9ybWF0aW9uX3Rvb2x0aXBcIikpO1xyXG4gICAgICAgIGZvciAobGV0IGNhcmQgb2YgY2FyZHMpIHtcclxuICAgICAgICAgICAgbGV0IHJlYzogQ2xpZW50UmVjdCA9IGNhcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIGxldCBwb3B1cDogRWxlbWVudCA9IGNhcmQucGFyZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicG9wdXBfb25ob3ZlclwiKS5pdGVtKDApO1xyXG4gICAgICAgICAgICBpZiAocG9wdXAuY2xpZW50V2lkdGggPj0gd2luZG93LmlubmVyV2lkdGggLSBjYXJkLmNsaWVudFdpZHRoIC0gcmVjLmxlZnQpIHtcclxuICAgICAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwicG9wdXBfb25ob3ZlciBsZWZ0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJyaWdodC1wb2ludGVyXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIHJpZ2h0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJsZWZ0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNob3J0U3VtbWFyeShvcmlnaW5hbFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RyaW5nICE9IHVuZGVmaW5lZCAmJiBvcmlnaW5hbFN0cmluZy5sZW5ndGggPiAyNTZcclxuICAgICAgICAgICAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHJpbmcoMCwgMjU2KSArICcuLi4nXHJcbiAgICAgICAgICAgIDogb3JpZ2luYWxTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi8uLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7U3RhdGlzdGljUmVwb3J0c1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zdGF0aXN0aWNzL1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN0YXRpc3RpY0ZvckF0dGVuZGVlTWFuYWdlckFuZEluc3RydWN0b3JFbnRyeX0gZnJvbSBcIi4uLy4uL3N0YXRpc3RpY3MvbW9kZWxzL0lTdGF0aXN0aWNGb3JBdHRlbmRlZU1hbmFnZXJBbmRJbnN0cnVjdG9yRW50cnlcIjtcclxuaW1wb3J0IHtJU3RhdGlzdGljRm9yQXR0ZW5kZWVNYW5hZ2VyQW5kSW5zdHJ1Y3RvclBlcmlvZH0gZnJvbSBcIi4uLy4uL3N0YXRpc3RpY3MvbW9kZWxzL0lTdGF0aXN0aWNGb3JBdHRlbmRlZU1hbmFnZXJBbmRJbnN0cnVjdG9yUGVyaW9kXCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaW5mby9JbnRyb1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lQXR0ZW5kZWVNYW5hZ2VyUmVwb3J0c0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJob21lLkhvbWVBdHRlbmRlZU1hbmFnZXJSZXBvcnRzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGlzdGljOiBJU3RhdGlzdGljRm9yQXR0ZW5kZWVNYW5hZ2VyQW5kSW5zdHJ1Y3RvckVudHJ5O1xyXG4gICAgcHJpdmF0ZSBkYWlseVN0YXRpc3RpYzogSVN0YXRpc3RpY0ZvckF0dGVuZGVlTWFuYWdlckFuZEluc3RydWN0b3JQZXJpb2Q7XHJcbiAgICBwcml2YXRlIHdlZWtseVN0YXRpc3RpYzogSVN0YXRpc3RpY0ZvckF0dGVuZGVlTWFuYWdlckFuZEluc3RydWN0b3JQZXJpb2Q7XHJcbiAgICBwcml2YXRlIG1vbnRobHlTdGF0aXN0aWM6IElTdGF0aXN0aWNGb3JBdHRlbmRlZU1hbmFnZXJBbmRJbnN0cnVjdG9yUGVyaW9kO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50TW9udGg6IHN0cmluZztcclxuICAgIHByaXZhdGUgY3VycmVudFllYXI6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBJbnRyb1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlOiBTdGF0aXN0aWNSZXBvcnRzU2VydmljZSwgcHJpdmF0ZSBpbnRyb1NlcnZpY2U6IEludHJvU2VydmljZSkge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuSE9NRV9BVFRFTkRFRV9NQU5BR0VSX1JFUE9SVFNfS0VZKTtcclxuICAgICAgICBzdGF0aXN0aWNSZXBvcnRzU2VydmljZS5nZXRJbmZvRm9yQXR0ZW5kZWVNYW5hZ2VyKCkudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpc3RpYyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuZGFpbHlTdGF0aXN0aWMgID0gdGhpcy5zdGF0aXN0aWMuc3RhdGlzdGljUGVyaW9kcy5maWx0ZXIocCA9PiBwLnBlcmlvZFR5cGUgPT09IFwiREFZXCIpWzBdO1xyXG4gICAgICAgICAgICB0aGlzLndlZWtseVN0YXRpc3RpYyA9IHRoaXMuc3RhdGlzdGljLnN0YXRpc3RpY1BlcmlvZHMuZmlsdGVyKHAgPT4gcC5wZXJpb2RUeXBlID09PSBcIldFRUtcIilbMF07XHJcbiAgICAgICAgICAgIHRoaXMubW9udGhseVN0YXRpc3RpYyA9IHRoaXMuc3RhdGlzdGljLnN0YXRpc3RpY1BlcmlvZHMuZmlsdGVyKHAgPT4gcC5wZXJpb2RUeXBlID09PSBcIk1PTlRIXCIpWzBdO1xyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSh0aGlzLm1vbnRobHlTdGF0aXN0aWMuc3RhcnREYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TW9udGggPSB0b2RheS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHsgbW9udGg6ICdsb25nJyB9KTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50WWVhciA9IHRvZGF5LmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbGNIb3Vycyh0aW1lSW5NaW51dGVzOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aW1lSW5NaW51dGVzIC8gNjApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYWxjTWludXRlc1JlbWFpbmRlcih0aW1lSW5NaW51dGVzOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGltZUluTWludXRlcyAlIDYwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydEludHJvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW50cm9TZXJ2aWNlLnN0YXJ0QXR0ZW5kZWVNYW5hZ2VySG9tZVBhZ2VJbnRybygpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uLy4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uLy4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVzaXplVmlld1NlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9SZXNpemVWaWV3U2VydmljZVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi4vLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uLy4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge1BlcnNvbmFsU2VydmljZX0gZnJvbSBcIi4uLy4uL3BlcnNvbmFsL1BlcnNvbmFsU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJSb2xlfSBmcm9tIFwiLi4vLi4vdXNlcnMvbW9kZWxzL1VzZXJSb2xlXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uSG9tZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21tb24vQ29tbW9uSG9tZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJbnRyb1NlcnZpY2V9IGZyb20gXCIuLi8uLi9pbmZvL0ludHJvU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhvbWVBdXRob3JDb3Vyc2VzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImhvbWUuSG9tZUF1dGhvckNvdXJzZXNDb250cm9sbGVyXCI7XHJcbiAgICBwcml2YXRlIFNVQkpFQ1RfTU9EVUxFOiBzdHJpbmcgPSAnc3ViamVjdCc7XHJcbiAgICBwcml2YXRlIENPTVBMRVhJVFlfTEVWRUxfTU9EVUxFOiBzdHJpbmcgPSAnY29tcGxleGl0eUxldmVsJztcclxuICAgIHByaXZhdGUgTEFOR1VBR0VfTU9EVUxFOiBzdHJpbmcgPSAnbGFuZ3VhZ2UnO1xyXG4gICAgcHJpdmF0ZSBTT1VSQ0VfTU9EVUxFOiBzdHJpbmcgPSAnc291cmNlJztcclxuICAgIHByaXZhdGUgU1RVREVOVF9NT0RVTEU6IHN0cmluZyA9ICdzdHVkZW50JztcclxuICAgIHByaXZhdGUgREVGQVVMVF9UT1BfTUVOVV9JVEVNOiBzdHJpbmcgPSAnY291cnNlJztcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVJdGVtS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgbWVudUtleTogYW55O1xyXG5cclxuICAgIHB1YmxpYyByb3dTaG93OiBNYXA8bnVtYmVyLCBib29sZWFuPiA9IG5ldyBNYXA8bnVtYmVyLCBib29sZWFuPigpO1xyXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbUluTW9kdWxlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBwdWJsaWMgY291cnNlc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQ291cnNlPjtcclxuXHJcbiAgICBwdWJsaWMgcmVzaXplVmlld1NlcnZpY2U6IFJlc2l6ZVZpZXdTZXJ2aWNlO1xyXG5cclxuICAgIHB1YmxpYyB3aW5kb3c6IGFueTtcclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBjb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcblxyXG4gICAgcHVibGljIHN0b3JhZ2VGaWx0ZXJWYWx1ZXM6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgc2hvd0V4cGlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjb3Vyc2VzVXJsOiBzdHJpbmcgPSBcIi9hcGkvY291cnNlcy9zZWFyY2hcIjtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb21tb25GaWx0ZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uSG9tZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBJbnRyb1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbW1vbkhvbWVTZXJ2aWNlOiBDb21tb25Ib21lU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluTW9kdWxlLnNldCh0aGlzLlNVQkpFQ1RfTU9EVUxFLCAwKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluTW9kdWxlLnNldCh0aGlzLkNPTVBMRVhJVFlfTEVWRUxfTU9EVUxFLCAwKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluTW9kdWxlLnNldCh0aGlzLkxBTkdVQUdFX01PRFVMRSwgMCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1Jbk1vZHVsZS5zZXQodGhpcy5TT1VSQ0VfTU9EVUxFLCAwKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluTW9kdWxlLnNldCh0aGlzLlNUVURFTlRfTU9EVUxFLCAxKTtcclxuXHJcbiAgICAgICAgdGhpcy5tZW51S2V5ID0ge1xyXG4gICAgICAgICAgICB0b3BNZW51OiB0aGlzLkRFRkFVTFRfVE9QX01FTlVfSVRFTVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuSE9NRV9BVVRIT1JfQ09VUlNFU19LRVkpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1lbnVJdGVtS2V5ID0gTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCkuZGVtYW5kVXNlckJ1c2luZXNzUm9sZShVc2VyUm9sZVtVc2VyUm9sZS5BVVRIT1JdKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkKCk7XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJcIik7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvdy51bmJpbmQoJ3Jlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiZGVzdHJveVwiKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHJvb3RTY29wZS4kb24oJ21haW4ubWVudS5zZWFyY2guY2hhbmdlZCcsIChldmVudCwgdmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnVzZXJQcm9maWxlID9cclxuICAgICAgICAgICAgICAgIE51bWJlcih0aGlzLnVzZXJQcm9maWxlLnBhZ2VWaWV3TW9kZSkgOiAxO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0SW50cm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb1NlcnZpY2Uuc3RhcnRBdXRob3JIb21lUGFnZUludHJvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTdG9yYWdlRmlsdGVycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0RmlsdGVyVmFsdWVzKEhvbWVBdXRob3JDb3Vyc2VzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmFwcGx5U3RvcmFnZUZpbHRlcih0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMsXHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0U2VhcmNoSW5wdXQoSG9tZUF1dGhvckNvdXJzZXNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLm9wZW5TZWFyY2hJbnB1dCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShwYXJhbTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikpO1xyXG4gICAgICAgIGlmIChwYXJhbSA9PSBcImRlc3Ryb3lcIikge1xyXG4gICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtID09IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtLmhhc0NsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNlYXJjaChtb2R1bGU6IHN0cmluZywgaXRlbTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtSW5Nb2R1bGUuZ2V0KG1vZHVsZSkgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluTW9kdWxlLnNldChtb2R1bGUsIDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5Nb2R1bGUuc2V0KG1vZHVsZSwgaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VhcmNoQ291cnNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VhcmNoSXRlbUFjdGl2ZShtb2R1bGU6IHN0cmluZywgc2VhcmNoSXRlbTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtSW5Nb2R1bGUuZ2V0KG1vZHVsZSkgPT0gc2VhcmNoSXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWFyY2hJdGVtSGlkZShtb2R1bGU6IHN0cmluZywgc2VhcmNoSXRlbTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuc2VsZWN0ZWRJdGVtSW5Nb2R1bGUuZ2V0KG1vZHVsZSkgIT0gMCAmJiB0aGlzLnNlbGVjdGVkSXRlbUluTW9kdWxlLmdldChtb2R1bGUpICE9IHNlYXJjaEl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1RvcE1lbnVBY3RpdmUodG9wTWVudUtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUtleS50b3BNZW51ID09IHRvcE1lbnVLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dEZXRhaWxzKGluZGV4OiBudW1iZXIsIGtleUNvZGU6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaW5kZXgsICF0aGlzLnJvd1Nob3cuZ2V0KGluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwoY291cnNlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoQ291cnNlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkVG9GYXZvcml0ZXMoY291cnNlOiBJQ291cnNlKSB7XHJcbiAgICAgICAgdGhpcy5yb3dTaG93LnNldChjb3Vyc2UuaWQsICF0aGlzLnJvd1Nob3cuZ2V0KGNvdXJzZS5pZCkpO1xyXG4gICAgICAgIHRoaXMucGVyc29uYWxTZXJ2aWNlLmFkZFRvRmF2b3JpdGVzKGNvdXJzZS5pZCwgY291cnNlLnZlcnNpb24sIFJlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIGNvdXJzZSBoYXMgYmVlbiBhZGRlZCB0byB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgY291cnNlLmZhdm9yaXRlID0gdHJ1ZTtcclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmFscmVhZHkuaW4uZmF2b3JpdGVcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGNvdXJzZSBpcyBhbHJlYWR5IGluIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmlzLmNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYW5vdGhlciB1c2VyOiBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUZyb21GYXZvcml0ZXMoY291cnNlOiBJQ291cnNlKSB7XHJcbiAgICAgICAgdGhpcy5yb3dTaG93LnNldChjb3Vyc2UuaWQsICF0aGlzLnJvd1Nob3cuZ2V0KGNvdXJzZS5pZCkpO1xyXG4gICAgICAgIHRoaXMucGVyc29uYWxTZXJ2aWNlLnJlbW92ZUZyb21GYXZvcml0ZXMoY291cnNlLmlkLCBjb3Vyc2UudmVyc2lvbiwgUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgY291cnNlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgY291cnNlLmZhdm9yaXRlID0gZmFsc2U7XHJcbiAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5ub3QuaW4uZmF2b3JpdGVcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmVtb3ZlIGZyb20geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuaXMuY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgZGF0YSBoYXMgYmVlbiBtb2RpZmllZCBieSBhbm90aGVyIHVzZXI6IHBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGFuZCB0cnkgYWdhaW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFNlYXJjaCgpIHtcclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIudmlld1R5cGVcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZSA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnZpZXdUeXBlXCIpKTtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zdWJqZWN0SWRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zdWJqZWN0SWQgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zdWJqZWN0SWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuY29tcGxleGl0eUxldmVsXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY29tcGxleGl0eUxldmVsID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuY29tcGxleGl0eUxldmVsXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLmxhbmd1YWdlSWRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5sYW5ndWFnZUlkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIubGFuZ3VhZ2VJZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zb3VyY2VJZFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNvdXJjZUlkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc291cmNlSWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLmNvbXBsZXhpdHlMZXZlbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5sYW5ndWFnZUlkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNvdXJjZUlkID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcblxyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzQ291cnNlc0ZpbHRlci52aWV3VHlwZVwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zdWJqZWN0SWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuY29tcGxleGl0eUxldmVsXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLmxhbmd1YWdlSWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc291cmNlSWRcIik7XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLm9sZFZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVVc2VyUGFnZVZpZXdNb2RlKEJvb2xlYW4odmlld1R5cGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVVzZXJQYWdlVmlld01vZGUocGFnZVZpZXdNb2RlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS51cGRhdGVQYWdlVmlld01vZGUocGFnZVZpZXdNb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaWV3VHlwZVNlbGVjdGVkKHZpZXdUeXBlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3VHlwZSA9PSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GaWx0ZXJDaGFuZ2Uoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuXCIgKyBrZXksIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5cIiArIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hLZXlQcmVzcygpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2F2ZVNlYXJjaElucHV0KEhvbWVBdXRob3JDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCB0aGlzLnNlYXJjaElucHV0KTtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbG9zZVNlYXJjaElucHV0KEhvbWVBdXRob3JDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCB3aW5kb3cpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hJbnB1dCB8fCB0aGlzLnNlYXJjaElucHV0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dGaWx0ZXJEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNob3dGaWx0ZXJEaWFsb2cod2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmFwcGx5R2VuZXJhbEZpbHRlcih0aGlzLmNvdXJzZXNHcmlkTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xlYXJGaWx0ZXIoSG9tZUF1dGhvckNvdXJzZXNDb250cm9sbGVyLk5BTUUsIHRoaXMuY291cnNlc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUZpbHRlcih0eXBlOiBzdHJpbmcsIHJlZmVyZW5jZU9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY291bnRBY3RpdmVJbmNyZW1lbnQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UudXBkYXRlR2VuZXJhbEZpbHRlcih0eXBlLCByZWZlcmVuY2VPYmplY3QsXHJcbiAgICAgICAgICAgIEhvbWVBdXRob3JDb3Vyc2VzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyICs9IGNvdW50QWN0aXZlSW5jcmVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVHcmlkKCkge1xyXG4gICAgICAgIGxldCBjb3Vyc2VzVXJsOiBzdHJpbmcgPSAhdGhpcy5zaG93RXhwaXJlZFxyXG4gICAgICAgICAgICAgICAgPyBcIi9hcGkvY291cnNlcy9zZWFyY2gvYXV0aG9yXCJcclxuICAgICAgICAgICAgICAgIDogXCIvYXBpL2NvdXJzZXMvZXhwaXJlZFwiO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElDb3Vyc2U+KHRoaXMuJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoY291cnNlc1VybCkpKTtcclxuICAgICAgICB0aGlzLmdldFN0b3JhZ2VGaWx0ZXJzKCk7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwucGFnZVNpemUgPSA5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcbiAgICAgICAgdGhpcy5sb2FkU2VhcmNoKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2UgPSBuZXcgUmVzaXplVmlld1NlcnZpY2UodGhpcy52aWV3VHlwZSk7XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRQYWdlID0gdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmN1cnJlbnRQYWdlID49IHRoaXMuY291cnNlc0dyaWRNb2RlbC50b3RhbFBhZ2VDb3VudFxyXG4gICAgICAgICAgICAgICAgPyAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmN1cnJlbnRQYWdlIC0gMVxyXG4gICAgICAgICAgICAgICAgOnRoaXMuY291cnNlc0dyaWRNb2RlbC5jdXJyZW50UGFnZTtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZFBhZ2UoY3VycmVudFBhZ2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkUGFnZShjdXJyZW50UGFnZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLnNldFJlc2l6ZVZpZXdUeXBlKHRoaXMudmlld1R5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTaG9ydFN1bW1hcnkob3JpZ2luYWxTdHJpbmc6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFN0cmluZyAhPSB1bmRlZmluZWQgJiYgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID4gMjU2XHJcbiAgICAgICAgICAgID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyaW5nKDAsIDI1NikgKyAnLi4uJ1xyXG4gICAgICAgICAgICA6IG9yaWdpbmFsU3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uLy4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7UXVpenplc1JvdXRlcn0gZnJvbSBcIi4uLy4uL3VybHMvUXVpenplc1JvdXRlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uLy4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UXVpelR5cGV9IGZyb20gXCIuLi8uLi9xdWl6emVzL21vZGVscy9RdWl6VHlwZVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUXVpen0gZnJvbSBcIi4uLy4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6XCI7XHJcbmltcG9ydCB7UmVzaXplVmlld1NlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9SZXNpemVWaWV3U2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi4vLi4vSVNlbGVjdGFibGVcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyUm9sZX0gZnJvbSBcIi4uLy4uL3VzZXJzL21vZGVscy9Vc2VyUm9sZVwiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge0ludHJvU2VydmljZX0gZnJvbSBcIi4uLy4uL2luZm8vSW50cm9TZXJ2aWNlXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL21vZGVscy9FdmVudFwiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSG9tZUF1dGhvckZsYXNoY2FyZHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaG9tZS5Ib21lQXV0aG9yRmxhc2hjYXJkc0NvbnRyb2xsZXJcIjtcclxuICAgIHB1YmxpYyBjdXJyZW50TWVudUl0ZW1LZXk6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuXHJcbiAgICBwdWJsaWMgcm93U2hvdzogTWFwPG51bWJlciwgYm9vbGVhbj4gPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyBxdWl6emVzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElRdWl6PjtcclxuICAgIHB1YmxpYyByZXNpemVWaWV3U2VydmljZTogUmVzaXplVmlld1NlcnZpY2U7XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgd2luZG93OiBhbnk7XHJcbiAgICBwdWJsaWMgcXVpelR5cGU6IHN0cmluZztcclxuICAgIHB1YmxpYyB0eXBlID0gW1xyXG4gICAgICAgIFF1aXpUeXBlW1F1aXpUeXBlLlFVSVpdLFxyXG4gICAgICAgIFF1aXpUeXBlW1F1aXpUeXBlLlNVUlZFWV0sXHJcbiAgICAgICAgUXVpelR5cGVbUXVpelR5cGUuRkxBU0hDQVJEXVxyXG4gICAgXTtcclxuICAgIHB1YmxpYyBvd25lcjogSVNlbGVjdGFibGVbXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBjb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFF1aXp6ZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb21tb25GaWx0ZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgSW50cm9TZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBxdWl6emVzUm91dGVyOiBRdWl6emVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc0FwaTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5IT01FX0FVVEhPUl9GTEFTSENBUkRTX0tFWSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TWVudUl0ZW1LZXkgPSBNZW51SGVscGVyLmdldEN1cnJlbnRNZW51SXRlbUtleSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKS5kZW1hbmRVc2VyQnVzaW5lc3NSb2xlKFVzZXJSb2xlW1VzZXJSb2xlLkFVVEhPUl0pO1xyXG5cclxuICAgICAgICBjb25zdCBxdWl6emVzVXJsID0gXCIvYXBpL3F1aXp6ZXMvYXV0aG9yL1wiK1F1aXpUeXBlW1F1aXpUeXBlLkZMQVNIQ0FSRF07XHJcbiAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVF1aXo+KCRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKHF1aXp6ZXNVcmwpKSk7XHJcbiAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxMjAwKXtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZSA9IG5ldyBSZXNpemVWaWV3U2VydmljZSh0aGlzLnZpZXdUeXBlKTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cgPSBhbmd1bGFyLmVsZW1lbnQodGhpcy4kd2luZG93KTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFBhZ2UgPSB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuY3VycmVudFBhZ2UgPj0gdGhpcy5xdWl6emVzR3JpZE1vZGVsLnRvdGFsUGFnZUNvdW50XHJcbiAgICAgICAgICAgICAgICA/ICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuY3VycmVudFBhZ2UgLSAxXHJcbiAgICAgICAgICAgICAgICA6dGhpcy5xdWl6emVzR3JpZE1vZGVsLmN1cnJlbnRQYWdlO1xyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5sb2FkUGFnZShjdXJyZW50UGFnZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwucGFnZVNpemUgPSA5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmxvYWRQYWdlKGN1cnJlbnRQYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcIlwiKTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJkZXN0cm95XCIpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdldE93bmVyc1VybCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1c2VyO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy51c2VyUHJvZmlsZSA/XHJcbiAgICAgICAgICAgICAgICBOdW1iZXIodGhpcy51c2VyUHJvZmlsZS5wYWdlVmlld01vZGUpIDogMTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydEludHJvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW50cm9TZXJ2aWNlLnN0YXJ0QXV0aG9ySG9tZVBhZ2VJbnRybygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkocGFyYW06IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBlbGVtID0gYW5ndWxhci5lbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpKTtcclxuICAgICAgICBpZiAocGFyYW0gPT0gXCJkZXN0cm95XCIpIHtcclxuICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbS5oYXNDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIikpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmRMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goKHF1aXo6IElRdWl6KSA9PiB7XHJcbiAgICAgICAgICAgIHF1aXouc3ViamVjdE5hbWVBbmRUaXRsZSA9IHF1aXouc3ViamVjdE5hbWUgKyBcIi9cIiArIHF1aXoudGl0bGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dEZXRhaWxzKGluZGV4OiBudW1iZXIsIGtleUNvZGU6IG51bWJlcikge1xyXG4gICAgICAgIGlmKGtleUNvZGUgPT0gMTMgfHwgIWtleUNvZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dTaG93LnNldChpbmRleCwgIXRoaXMucm93U2hvdy5nZXQoaW5kZXgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaFF1aXooKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkUXVpekRldGFpbHMocXVpeklkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLmZsYXNoY2FyZHNEZXRhaWxzVXJsKHF1aXpJZCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLm9sZFZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVVc2VyUGFnZVZpZXdNb2RlKEJvb2xlYW4odmlld1R5cGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVVzZXJQYWdlVmlld01vZGUocGFnZVZpZXdNb2RlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS51cGRhdGVQYWdlVmlld01vZGUocGFnZVZpZXdNb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaWV3VHlwZVNlbGVjdGVkKHZpZXdUeXBlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3VHlwZSA9PSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0T3duZXJzVXJsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0T3duZXJzVXJsKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5vd25lciA9IHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoS2V5UHJlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNhdmVTZWFyY2hJbnB1dChIb21lQXV0aG9yRmxhc2hjYXJkc0NvbnRyb2xsZXIuTkFNRSwgdGhpcy5zZWFyY2hJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xvc2VTZWFyY2hJbnB1dChIb21lQXV0aG9yRmxhc2hjYXJkc0NvbnRyb2xsZXIuTkFNRSwgd2luZG93KTtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoSW5wdXQgfHwgdGhpcy5zZWFyY2hJbnB1dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RmlsdGVyRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zaG93RmlsdGVyRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUZpbHRlcih0eXBlOiBzdHJpbmcsIHJlZmVyZW5jZU9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciArPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UudXBkYXRlR2VuZXJhbEZpbHRlcih0eXBlLCByZWZlcmVuY2VPYmplY3QsIEhvbWVBdXRob3JGbGFzaGNhcmRzQ29udHJvbGxlci5OQU1FKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsZWFyRmlsdGVyKEhvbWVBdXRob3JGbGFzaGNhcmRzQ29udHJvbGxlci5OQU1FLCB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vYmlsZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4O1xyXG4gICAgfVxyXG5cclxuICAgIC8vdG9kbyBpbXBvcnQgZmxhc2hjYXJkXHJcbiAgICBwdWJsaWMgaW1wb3J0UXVpeigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChFdmVudC5RVUlaX1NVUlZFWV9JTVBPUlRfVVBEQVRFKTtcclxuICAgICAgICAkKFwiI2ltcG9ydFF1aXpUZW1wbGF0ZVwiKS5tb2RhbChcInRvZ2dsZVwiKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi8uLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi8uLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuLi8uLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi8uLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VQcm9ncmVzc1N0YXR1c30gZnJvbSBcIi4uLy4uL2NvdXJzZXMvbW9kZWxzL0NvdXJzZVByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aENvdXJzZX0gZnJvbSBcIi4uLy4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhDb3Vyc2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlfSBmcm9tIFwiLi4vLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZVwiO1xyXG5pbXBvcnQge1VzZXJSb2xlfSBmcm9tIFwiLi4vLi4vdXNlcnMvbW9kZWxzL1VzZXJSb2xlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uSG9tZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21tb24vQ29tbW9uSG9tZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJbnRyb1NlcnZpY2V9IGZyb20gXCIuLi8uLi9pbmZvL0ludHJvU2VydmljZVwiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuLi8uLi9jb3Vyc2VzL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi8uLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uLy4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lQXV0aG9yTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJob21lLkhvbWVBdXRob3JMZWFybmluZ1BhdGhzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50TWVudUl0ZW1LZXk6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgbWVudUtleTogYW55O1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIHZpZXdUeXBlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTGVhcm5pbmdQYXRoPjtcclxuXHJcbiAgICBwdWJsaWMgd2luZG93OiBhbnk7XHJcbiAgICBwdWJsaWMgc3RhcnRXaW5kb3dXaWR0aDogbnVtYmVyO1xyXG4gICAgcHVibGljIG9sZFNlYXJjaFZpZXdUeXBlOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdG9yYWdlRmlsdGVyVmFsdWVzOiBhbnk7XHJcblxyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc1Nob3dBbGxDYXJkczogYm9vbGVhbjtcclxuXHJcbiAgICBwcml2YXRlIGlzSW5pdFNsaWNrID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHNob3dFeHBpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc1VybDogc3RyaW5nID0gXCIvYXBpL2xlYXJuaW5nUGF0aHMvc2VhcmNoXCI7XHJcbiAgICBwdWJsaWMgaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2U7XHJcblxyXG4gICAgcHVibGljIHVzZXJQcm9maWxlOiBJVXNlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vbkhvbWVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uRmlsdGVyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEludHJvU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc0FwaTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY29tbW9uSG9tZVNlcnZpY2U6IENvbW1vbkhvbWVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkhPTUVfQVVUSE9SX0xFQVJOSU5HX1BBVEhfS0VZKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNZW51SXRlbUtleSA9IE1lbnVIZWxwZXIuZ2V0Q3VycmVudE1lbnVJdGVtS2V5KCk7XHJcblxyXG4gICAgICAgIHRoaXMuaHR0cCA9ICRodHRwO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpLmRlbWFuZFVzZXJCdXNpbmVzc1JvbGUoVXNlclJvbGVbVXNlclJvbGUuQVVUSE9SXSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xyXG5cclxuICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiXCIpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3cudW5iaW5kKCdyZXNpemUnKTtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcImRlc3Ryb3lcIik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRyb290U2NvcGUuJG9uKCdtYWluLm1lbnUuc2VhcmNoLmNoYW5nZWQnLCAoZXZlbnQsIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1c2VyO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy51c2VyUHJvZmlsZSA/XHJcbiAgICAgICAgICAgICAgICBOdW1iZXIodGhpcy51c2VyUHJvZmlsZS5wYWdlVmlld01vZGUpIDogMTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydEludHJvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW50cm9TZXJ2aWNlLnN0YXJ0QXV0aG9ySG9tZVBhZ2VJbnRybygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUZpbHRlcnMoaXNJbml0PzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJWYWx1ZXMoSG9tZUF1dGhvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlTdG9yYWdlRmlsdGVyKHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyxcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRTZWFyY2hJbnB1dChIb21lQXV0aG9yTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgaWYodGhpcy5zZWFyY2hJbnB1dCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uub3BlblNlYXJjaElucHV0KCk7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc0luaXQpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXJ0TG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLmlzSW5pdFNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aHNMb2FkZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kTG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGljaygpLCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkocGFyYW06IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBlbGVtID0gYW5ndWxhci5lbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpKTtcclxuICAgICAgICBpZiAocGFyYW0gPT0gXCJkZXN0cm95XCIpIHtcclxuICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbS5oYXNDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIikpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHZpZXdUeXBlID09IDEpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGljaygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVXNlclBhZ2VWaWV3TW9kZShCb29sZWFuKHZpZXdUeXBlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVVc2VyUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRMZWFybmluZ1BhdGgobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuZGV0YWlsc1VybChsZWFybmluZ1BhdGhJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwoY291cnNlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3ViamVjdEFuZE5hbWUobGVhcm5pbmdQYXRoOiBJTGVhcm5pbmdQYXRoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gbGVhcm5pbmdQYXRoLnN1YmplY3ROYW1lICE9IG51bGwgJiYgbGVhcm5pbmdQYXRoLm5hbWUgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gbGVhcm5pbmdQYXRoLnN1YmplY3ROYW1lICsgXCIgLyBcIiArIGxlYXJuaW5nUGF0aC5uYW1lXHJcbiAgICAgICAgICAgIDogbGVhcm5pbmdQYXRoLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaExlYXJuaW5nUGF0aCgpIHtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRmlsdGVyQ2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLlwiICsga2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuXCIgKyBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLmxhbmd1YWdlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc291cmNlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG5cclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIudmlld1R5cGVcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc3ViamVjdElkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLmxhbmd1YWdlSWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc291cmNlSWRcIik7XHJcblxyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFNlYXJjaCgpIHtcclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIudmlld1R5cGVcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZSA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnZpZXdUeXBlXCIpKTtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zdWJqZWN0SWRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zdWJqZWN0SWQgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zdWJqZWN0SWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIubGFuZ3VhZ2VJZFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLmxhbmd1YWdlSWQgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5sYW5ndWFnZUlkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnNvdXJjZUlkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc291cmNlSWQgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zb3VyY2VJZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcGxldGVkTWFuZGF0b3J5Q291cnNlcyhjb3Vyc2VzQnlMUDogSUxlYXJuaW5nUGF0aENvdXJzZVtdKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgY291bnRDb21wbGV0ZWRDb3Vyc2VzID0gMDtcclxuICAgICAgICBsZXQgY291bnRNYW5kYXRvcnlDb3Vyc2VzID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjb3Vyc2Ugb2YgY291cnNlc0J5TFApIHtcclxuICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VJbmNsdXNpb25UeXBlID09PSBMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlW0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGUuTUFOREFUT1JZXSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5SRVNFVF1cclxuICAgICAgICAgICAgICAgICAgICB8fCBjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuRVhQSVJFRF1cclxuICAgICAgICAgICAgICAgICAgICB8fCBjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50Q29tcGxldGVkQ291cnNlcysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY291bnRNYW5kYXRvcnlDb3Vyc2VzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvdW50Q29tcGxldGVkQ291cnNlcyArICcgb2YgJyArIGNvdW50TWFuZGF0b3J5Q291cnNlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcGxldGVkRWxlY3RpdmVDb3Vyc2VzKGNvdXJzZXNCeUxQOiBJTGVhcm5pbmdQYXRoQ291cnNlW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjb3VudENvbXBsZXRlZENvdXJzZXMgPSAwO1xyXG4gICAgICAgIGxldCBjb3VudE1hbmRhdG9yeUNvdXJzZXMgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNvdXJzZSBvZiBjb3Vyc2VzQnlMUCkge1xyXG4gICAgICAgICAgICBpZiAoY291cnNlLmNvdXJzZUluY2x1c2lvblR5cGUgPT09IExlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGVbTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZS5FTEVDVElWRV0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuUkVTRVRdXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzID09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLkVYUElSRURdXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzID09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLkNPTVBMRVRFRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3VudENvbXBsZXRlZENvdXJzZXMrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvdW50TWFuZGF0b3J5Q291cnNlcysrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3VudENvbXBsZXRlZENvdXJzZXMgKyAnIG9mICcgKyBjb3VudE1hbmRhdG9yeUNvdXJzZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEtleVByZXNzKCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlU2VhcmNoSW5wdXQoSG9tZUF1dGhvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsb3NlU2VhcmNoSW5wdXQoSG9tZUF1dGhvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRmlsdGVyKHR5cGU6IHN0cmluZywgcmVmZXJlbmNlT2JqZWN0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb3VudEFjdGl2ZUluY3JlbWVudCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS51cGRhdGVHZW5lcmFsRmlsdGVyKHR5cGUsIHJlZmVyZW5jZU9iamVjdCxcclxuICAgICAgICAgICAgSG9tZUF1dGhvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgKz0gY291bnRBY3RpdmVJbmNyZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5RmlsdGVyKCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5hcHBseUdlbmVyYWxGaWx0ZXIodGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsZWFyRmlsdGVyKEhvbWVBdXRob3JMZWFybmluZ1BhdGhzQ29udHJvbGxlci5OQU1FLCB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RmlsdGVyRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zaG93RmlsdGVyRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2xpY2sgbHBcclxuICAgIHB1YmxpYyBpbml0aWFsaXplU2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0luaXRTbGljayA9IHRoaXMuY29tbW9uSG9tZVNlcnZpY2UuaW5pdGlhbGl6ZVNsaWNrKHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93QWxsTFAobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTaG93QWxsQ2FyZHMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29tbW9uSG9tZVNlcnZpY2Uuc2hvd0FsbExQKGxlYXJuaW5nUGF0aElkKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpPT50aGlzLnNldFBvcHVwQ2xhc3NlcygpLCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlQWxsTFAobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTaG93QWxsQ2FyZHMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbW1vbkhvbWVTZXJ2aWNlLmhpZGVBbGxMUChsZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKT0+dGhpcy5zZXRQb3B1cENsYXNzZXMoKSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlbkNhcmQoaW5kZXhQbGFuTHA6IG51bWJlciwgbGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uSG9tZVNlcnZpY2Uub3BlbkNhcmQoaW5kZXhQbGFuTHAsIGxlYXJuaW5nUGF0aElkLCB0aGlzLmlzU2hvd0FsbENhcmRzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlR3JpZCgpIHtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNVcmwgPSAhdGhpcy5zaG93RXhwaXJlZFxyXG4gICAgICAgICAgICA/IFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaC9hdXRob3JcIlxyXG4gICAgICAgICAgICA6IFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaC9hdXRob3IvZXhwaXJlZFwiXHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUxlYXJuaW5nUGF0aD4odGhpcy5odHRwLCB0aGlzLnVybC5zZXJ2aWNlKHRoaXMubGVhcm5pbmdQYXRoc1VybCkpKTtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwucGFnZVNpemUgPSA0O1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0U3RvcmFnZUZpbHRlcnModHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMub2xkU2VhcmNoVmlld1R5cGUgPSB0aGlzLnZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKHRoaXMud2luZG93LmlubmVyV2lkdGggPCA5OTIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFdpbmRvd1dpZHRoID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V2luZG93V2lkdGggPSAxMDAwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgdGhpcy5zdGFydFdpbmRvd1dpZHRoICYmICF0aGlzLnZpZXdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sZFNlYXJjaFZpZXdUeXBlID0gdGhpcy52aWV3VHlwZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRXaW5kb3dXaWR0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPj0gOTkyICYmIHdpbmRvdy5pbm5lcldpZHRoID4gdGhpcy5zdGFydFdpbmRvd1dpZHRoICYmICF0aGlzLm9sZFNlYXJjaFZpZXdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5vbGRTZWFyY2hWaWV3VHlwZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRXaW5kb3dXaWR0aCA9IDEwMDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMubG9hZFNlYXJjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VEYXRlc1N0cmluZyhjb3Vyc2U6IElDb3Vyc2UpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBsZXQgY291cnNlRGF0ZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gICAgICAgIGlmIChjb3Vyc2UuZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICBjb3Vyc2VEYXRlcy5zZXQoXCJlbmREYXRlXCIsIG5ldyBEYXRlKGNvdXJzZS5lbmREYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvdXJzZS5lbmREYXRlIHx8IGNvdXJzZS5zdGFydERhdGUgPiBEYXRlLm5vdygpKSB7XHJcbiAgICAgICAgICAgIGNvdXJzZURhdGVzLnNldChcInN0YXJ0RGF0ZVwiLCBuZXcgRGF0ZShjb3Vyc2Uuc3RhcnREYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3Vyc2VEYXRlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UG9wdXBDbGFzc2VzKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjYXJkcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJscF9fcGxhbi1jYXJkIGluZm9ybWF0aW9uX3Rvb2x0aXBcIikpO1xyXG4gICAgICAgIGZvciAobGV0IGNhcmQgb2YgY2FyZHMpIHtcclxuICAgICAgICAgICAgbGV0IHJlYzogQ2xpZW50UmVjdCA9IGNhcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIGxldCBwb3B1cDogRWxlbWVudCA9IGNhcmQucGFyZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicG9wdXBfb25ob3ZlclwiKS5pdGVtKDApO1xyXG4gICAgICAgICAgICBpZiAocG9wdXAuY2xpZW50V2lkdGggPj0gd2luZG93LmlubmVyV2lkdGggLSBjYXJkLmNsaWVudFdpZHRoIC0gcmVjLmxlZnQpIHtcclxuICAgICAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwicG9wdXBfb25ob3ZlciBsZWZ0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJyaWdodC1wb2ludGVyXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIHJpZ2h0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJsZWZ0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNob3J0U3VtbWFyeShvcmlnaW5hbFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RyaW5nICE9IHVuZGVmaW5lZCAmJiBvcmlnaW5hbFN0cmluZy5sZW5ndGggPiAyNTZcclxuICAgICAgICAgICAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHJpbmcoMCwgMjU2KSArICcuLi4nXHJcbiAgICAgICAgICAgIDogb3JpZ2luYWxTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLi8uLi91cmxzL01hdGVyaWFsc1JvdXRlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0lNYXRlcmlhbH0gZnJvbSBcIi4uLy4uL21hdGVyaWFscy9tb2RlbHMvSU1hdGVyaWFsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7T2JqZWN0VHlwZVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvT2JqZWN0VHlwZVV0aWxzXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SU1lbnVHcm91cH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvUGVyc29uYWxNZW51RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWF0ZXJpYWxzL01hdGVyaWFsU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaW5mby9JbnRyb1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uLy4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuXHJcbmludGVyZmFjZSBJRXh0TWF0ZXJpYWwgZXh0ZW5kcyBJTWF0ZXJpYWwge1xyXG4gICAgc2hvd24/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSG9tZUF1dGhvck1hdGVyaWFsc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJob21lLkhvbWVBdXRob3JNYXRlcmlhbHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIG1hdGVyaWFsc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTWF0ZXJpYWw+O1xyXG4gICAgcHVibGljIHZpZXdUeXBlOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaG9tZU1lbnVCeVBlcm1pc3Npb246IElNZW51R3JvdXA7XHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVJdGVtS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIGN1cnJlbnRNZW51SXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgcHVibGljIHN0b3JhZ2VGaWx0ZXJWYWx1ZXM6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgdG9wVHlwZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIE1hdGVyaWFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBJbnRyb1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWF0ZXJpYWxTZXJ2aWNlOiBNYXRlcmlhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWF0ZXJpYWxzUm91dGVyOiBNYXRlcmlhbHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb21tb25GaWx0ZXJTZXJ2aWNlOiBDb21tb25GaWx0ZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBpbnRyb1NlcnZpY2U6IEludHJvU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5IT01FX0FVVEhPUl9NQVRFUklBTFNfS0VZKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNZW51SXRlbUtleSA9IE1lbnVIZWxwZXIuZ2V0Q3VycmVudE1lbnVJdGVtS2V5KCk7XHJcblxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SU1hdGVyaWFsPigkaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcIi9hcGkvbWF0ZXJpYWxzL2F1dGhvclwiKSkpO1xyXG5cclxuICAgICAgICB0aGlzLnRvcFR5cGUgPSAnQUxMJztcclxuXHJcbiAgICAgICAgdGhpcy5nZXRTdG9yYWdlRmlsdGVycygpO1xyXG5cclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxODAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwucGFnZVNpemUgPSA5O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnVzZXJQcm9maWxlID9cclxuICAgICAgICAgICAgICAgIE51bWJlcih0aGlzLnVzZXJQcm9maWxlLnBhZ2VWaWV3TW9kZSkgOiAxO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0SW50cm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb1NlcnZpY2Uuc3RhcnRBdXRob3JIb21lUGFnZUludHJvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTdG9yYWdlRmlsdGVycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0RmlsdGVyVmFsdWVzKEhvbWVBdXRob3JNYXRlcmlhbHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlTdG9yYWdlRmlsdGVyKHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyxcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0U2VhcmNoSW5wdXQoSG9tZUF1dGhvck1hdGVyaWFsc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgaWYodGhpcy5zZWFyY2hJbnB1dCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uub3BlblNlYXJjaElucHV0KCk7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHRvcFR5cGUgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0VG9wU3RhdHVzKEhvbWVBdXRob3JNYXRlcmlhbHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIGlmKHRvcFR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy50b3BUeXBlID0gdG9wVHlwZTtcclxuICAgICAgICAgICAgdGhpcy5hcHBseU1hdGVyaWFsVG9wVHlwZSh0b3BUeXBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVXNlclBhZ2VWaWV3TW9kZShCb29sZWFuKHZpZXdUeXBlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVVc2VyUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0TG9hZGluZygpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuZExvYWRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKChtYXRlcmlhbDogSU1hdGVyaWFsKSA9PiB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnN1YmplY3RBbmRUb3BpYyA9IG1hdGVyaWFsLnN1YmplY3ROYW1lICsgXCIgLyBcIiArIG1hdGVyaWFsLnRpdGxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkTWF0ZXJpYWwobWF0ZXJpYWxJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmVudHJpZXMuZmlsdGVyKG0gPT4gbS5pZCA9PT0gbWF0ZXJpYWxJZClbMF0ucGVybWlzc2lvbnMudmlldykge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5tYXRlcmlhbHNSb3V0ZXIud2F0Y2hVcmwobWF0ZXJpYWxJZCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiWW91IGFyZSBub3QgZ3JhbnRlZCBwZXJtaXNzaW9uIHRvIHZpZXcgdGhpcyBjb3Vyc2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNYXRlcmlhbFR5cGVUaXRsZShtYXRlcmlhbFR5cGVJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0VHlwZVV0aWxzLmdldE1hdGVyaWFsVHlwZVRpdGxlKG1hdGVyaWFsVHlwZUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RldGFpbHMobWF0ZXJpYWw6IElFeHRNYXRlcmlhbCkge1xyXG4gICAgICAgIG1hdGVyaWFsLnNob3duID0gIW1hdGVyaWFsLnNob3duO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVUb3BUeXBlKHN0YXR1czogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50b3BUeXBlID0gc3RhdHVzO1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlVG9wU3RhdHVzKEhvbWVBdXRob3JNYXRlcmlhbHNDb250cm9sbGVyLk5BTUUsIHN0YXR1cylcclxuICAgICAgICB0aGlzLmFwcGx5TWF0ZXJpYWxUb3BUeXBlKHN0YXR1cyk7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBseU1hdGVyaWFsVG9wVHlwZShzdGF0dXM6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5hcHBseU1hdGVyaWFsVG9wVHlwZShzdGF0dXMsIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoS2V5UHJlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNhdmVTZWFyY2hJbnB1dChIb21lQXV0aG9yTWF0ZXJpYWxzQ29udHJvbGxlci5OQU1FLCB0aGlzLnNlYXJjaElucHV0KTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xvc2VTZWFyY2hJbnB1dChIb21lQXV0aG9yTWF0ZXJpYWxzQ29udHJvbGxlci5OQU1FLCB3aW5kb3cpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hJbnB1dCB8fCB0aGlzLnNlYXJjaElucHV0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RmlsdGVyRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zaG93RmlsdGVyRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUZpbHRlcih0eXBlOiBzdHJpbmcsIHJlZmVyZW5jZU9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY291bnRBY3RpdmVJbmNyZW1lbnQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UudXBkYXRlR2VuZXJhbEZpbHRlcih0eXBlLCByZWZlcmVuY2VPYmplY3QsXHJcbiAgICAgICAgICAgIEhvbWVBdXRob3JNYXRlcmlhbHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgKz0gY291bnRBY3RpdmVJbmNyZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbGVhckZpbHRlcihIb21lQXV0aG9yTWF0ZXJpYWxzQ29udHJvbGxlci5OQU1FLCB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFsVHlwZU5hbWUodHlwZUtleSkge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZUtleSkge1xyXG4gICAgICAgICAgICBjYXNlICdBTEwnOiByZXR1cm4gJ0FMTCc7XHJcbiAgICAgICAgICAgIGNhc2UgJ0FVRElPJzogcmV0dXJuICdBVURJTyc7XHJcbiAgICAgICAgICAgIGNhc2UgJ1ZJREVPJyA6IHJldHVybiAnVklERU8nO1xyXG4gICAgICAgICAgICBjYXNlICdQSE9UTycgOiByZXR1cm4gJ0lNQUdFJztcclxuICAgICAgICAgICAgY2FzZSAnTElOSycgOiByZXR1cm4gJ0xJTksnO1xyXG4gICAgICAgICAgICBjYXNlICdET0NVTUVOVFMnOiByZXR1cm4gJ09USEVSJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFBvcHVwQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgICAgICBsZXQgY2FyZHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiY2FyZCBpbmZvcm1hdGlvbl90b29sdGlwXCIpKTtcclxuICAgICAgICBmb3IgKGxldCBjYXJkIG9mIGNhcmRzKSB7XHJcbiAgICAgICAgICAgIGxldCByZWM6IENsaWVudFJlY3QgPSBjYXJkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICBsZXQgcG9wdXA6IEVsZW1lbnQgPSBjYXJkLnBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInBvcHVwX29uaG92ZXJcIikuaXRlbSgwKTtcclxuICAgICAgICAgICAgaWYgKHJlYy5yaWdodCArIHBvcHVwLmNsaWVudFdpZHRoID49IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwicG9wdXBfb25ob3ZlciBsZWZ0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJyaWdodC1wb2ludGVyXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIHJpZ2h0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJsZWZ0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNob3J0U3VtbWFyeShvcmlnaW5hbFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RyaW5nICE9IHVuZGVmaW5lZCAmJiBvcmlnaW5hbFN0cmluZy5sZW5ndGggPiAyNTZcclxuICAgICAgICAgICAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHJpbmcoMCwgMjU2KSArICcuLi4nXHJcbiAgICAgICAgICAgIDogb3JpZ2luYWxTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtRdWl6emVzUm91dGVyfSBmcm9tIFwiLi4vLi4vdXJscy9RdWl6emVzUm91dGVyXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uLy4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tQnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYnJhbmRpbmcvQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi8uLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVF1aXp9IGZyb20gXCIuLi8uLi9xdWl6emVzL21vZGVscy9JUXVpelwiO1xyXG5pbXBvcnQge1Jlc2l6ZVZpZXdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvUmVzaXplVmlld1NlcnZpY2VcIjtcclxuaW1wb3J0IHtRdWl6VHlwZX0gZnJvbSBcIi4uLy4uL3F1aXp6ZXMvbW9kZWxzL1F1aXpUeXBlXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLi8uLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge1VzZXJSb2xlfSBmcm9tIFwiLi4vLi4vdXNlcnMvbW9kZWxzL1VzZXJSb2xlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaW5mby9JbnRyb1NlcnZpY2VcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbW9kZWxzL0V2ZW50XCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi8uLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lQXV0aG9yUXVpenplc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJob21lLkhvbWVBdXRob3JRdWl6emVzQ29udHJvbGxlclwiO1xyXG4gICAgcHVibGljIGN1cnJlbnRNZW51SXRlbUtleTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHB1YmxpYyByb3dTaG93OiBNYXA8bnVtYmVyLCBib29sZWFuPiA9IG5ldyBNYXA8bnVtYmVyLCBib29sZWFuPigpO1xyXG4gICAgcHVibGljIHF1aXp6ZXNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SVF1aXo+O1xyXG4gICAgcHVibGljIHJlc2l6ZVZpZXdTZXJ2aWNlOiBSZXNpemVWaWV3U2VydmljZTtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyB3aW5kb3c6IGFueTtcclxuICAgIHB1YmxpYyBxdWl6VHlwZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHR5cGUgPSBbXHJcbiAgICAgICAgUXVpelR5cGVbUXVpelR5cGUuUVVJWl0sXHJcbiAgICAgICAgUXVpelR5cGVbUXVpelR5cGUuU1VSVkVZXSxcclxuICAgICAgICBRdWl6VHlwZVtRdWl6VHlwZS5GTEFTSENBUkRdXHJcbiAgICBdO1xyXG4gICAgcHVibGljIG93bmVyOiBJU2VsZWN0YWJsZVtdID0gW107XHJcblxyXG4gICAgcHVibGljIGNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgUXVpenplc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBJbnRyb1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHF1aXp6ZXNSb3V0ZXI6IFF1aXp6ZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY29tbW9uRmlsdGVyU2VydmljZTogQ29tbW9uRmlsdGVyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkhPTUVfQVVUSE9SX1FVSVpaRVNfS0VZKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNZW51SXRlbUtleSA9IE1lbnVIZWxwZXIuZ2V0Q3VycmVudE1lbnVJdGVtS2V5KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCkuZGVtYW5kVXNlckJ1c2luZXNzUm9sZShVc2VyUm9sZVtVc2VyUm9sZS5BVVRIT1JdKTtcclxuXHJcbiAgICAgICAgY29uc3QgcXVpenplc1VybCA9IFwiL2FwaS9xdWl6emVzL2F1dGhvci9cIitRdWl6VHlwZVtRdWl6VHlwZS5RVUlaXTtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJUXVpej4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UocXVpenplc1VybCkpKTtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApe1xyXG4gICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwucGFnZVNpemUgPSA5O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMudmlld1R5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdy5iaW5kKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFnZSA9IHRoaXMucXVpenplc0dyaWRNb2RlbC5jdXJyZW50UGFnZSA+PSB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwudG90YWxQYWdlQ291bnRcclxuICAgICAgICAgICAgICAgID8gIHRoaXMucXVpenplc0dyaWRNb2RlbC5jdXJyZW50UGFnZSAtIDFcclxuICAgICAgICAgICAgICAgIDp0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuY3VycmVudFBhZ2U7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmxvYWRQYWdlKGN1cnJlbnRQYWdlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwubG9hZFBhZ2UoY3VycmVudFBhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcIlwiKTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJkZXN0cm95XCIpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdldE93bmVyc1VybCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnVzZXJQcm9maWxlID9cclxuICAgICAgICAgICAgICAgIE51bWJlcih0aGlzLnVzZXJQcm9maWxlLnBhZ2VWaWV3TW9kZSkgOiAxO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0SW50cm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb1NlcnZpY2Uuc3RhcnRBdXRob3JIb21lUGFnZUludHJvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShwYXJhbTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikpO1xyXG4gICAgICAgIGlmIChwYXJhbSA9PSBcImRlc3Ryb3lcIikge1xyXG4gICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtID09IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtLmhhc0NsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGFydExvYWRpbmcoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuZExvYWRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaCgocXVpejogSVF1aXopID0+IHtcclxuICAgICAgICAgICAgcXVpei5zdWJqZWN0TmFtZUFuZFRpdGxlID0gcXVpei5zdWJqZWN0TmFtZSArIFwiL1wiICsgcXVpei50aXRsZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RldGFpbHMoaW5kZXg6IG51bWJlciwga2V5Q29kZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYoa2V5Q29kZSA9PSAxMyB8fCAha2V5Q29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGluZGV4LCAhdGhpcy5yb3dTaG93LmdldChpbmRleCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoUXVpeigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRRdWl6RGV0YWlscyhxdWl6SWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnF1aXp6ZXNSb3V0ZXIucXVpenplc0RldGFpbHNVcmwocXVpeklkKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2Uub2xkVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJQYWdlVmlld01vZGUoQm9vbGVhbih2aWV3VHlwZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVXNlclBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRPd25lcnNVcmwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRPd25lcnNVcmwoKVxyXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB0aGlzLm93bmVyID0gcmVzcG9uc2UpO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gXCIvYXBpL3VzZXJTZWxlY3Rvci91c2Vyc0ZvckN1cnJlbnRVc2VyXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEtleVByZXNzKCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlU2VhcmNoSW5wdXQoSG9tZUF1dGhvclF1aXp6ZXNDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbG9zZVNlYXJjaElucHV0KEhvbWVBdXRob3JRdWl6emVzQ29udHJvbGxlci5OQU1FLCB3aW5kb3cpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hJbnB1dCB8fCB0aGlzLnNlYXJjaElucHV0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dGaWx0ZXJEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNob3dGaWx0ZXJEaWFsb2cod2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRmlsdGVyKHR5cGU6IHN0cmluZywgcmVmZXJlbmNlT2JqZWN0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyICs9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS51cGRhdGVHZW5lcmFsRmlsdGVyKHR5cGUsIHJlZmVyZW5jZU9iamVjdCwgSG9tZUF1dGhvclF1aXp6ZXNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xlYXJGaWx0ZXIoSG9tZUF1dGhvclF1aXp6ZXNDb250cm9sbGVyLk5BTUUsIHRoaXMucXVpenplc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTW9iaWxlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA3Njg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGltcG9ydFF1aXooKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoRXZlbnQuUVVJWl9TVVJWRVlfSU1QT1JUX1VQREFURSk7XHJcbiAgICAgICAgJChcIiNpbXBvcnRRdWl6VGVtcGxhdGVcIikubW9kYWwoXCJ0b2dnbGVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFBvcHVwQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgICAgICBsZXQgY2FyZHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiY2FyZCBpbmZvcm1hdGlvbl90b29sdGlwXCIpKTtcclxuICAgICAgICBmb3IgKGxldCBjYXJkIG9mIGNhcmRzKSB7XHJcbiAgICAgICAgICAgIGxldCByZWM6IENsaWVudFJlY3QgPSBjYXJkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICBsZXQgcG9wdXA6IEVsZW1lbnQgPSBjYXJkLnBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInBvcHVwX29uaG92ZXJcIikuaXRlbSgwKTtcclxuICAgICAgICAgICAgaWYgKHJlYy5yaWdodCArIHBvcHVwLmNsaWVudFdpZHRoID49IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwicG9wdXBfb25ob3ZlciBsZWZ0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJyaWdodC1wb2ludGVyXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIHJpZ2h0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJsZWZ0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge0lTdGF0aXN0aWNGb3JBdXRob3JFbnRyeX0gZnJvbSBcIi4uLy4uL3N0YXRpc3RpY3MvbW9kZWxzL0lTdGF0aXN0aWNGb3JBdXRob3JFbnRyeVwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc3RhdGlzdGljcy9TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5pbXBvcnQge0lTdGF0aXN0aWNGb3JBdXRob3JQZXJpb2R9IGZyb20gXCIuLi8uLi9zdGF0aXN0aWNzL21vZGVscy9JU3RhdGlzdGljRm9yQXV0aG9yUGVyaW9kXCI7XHJcbmltcG9ydCB7VXNlclJvbGV9IGZyb20gXCIuLi8uLi91c2Vycy9tb2RlbHMvVXNlclJvbGVcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge0ludHJvU2VydmljZX0gZnJvbSBcIi4uLy4uL2luZm8vSW50cm9TZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSG9tZUF1dGhvclJlcG9ydHNDb250cm9sbGVyQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImhvbWUuSG9tZUF1dGhvclJlcG9ydHNDb250cm9sbGVyXCI7XHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVJdGVtS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHN0YXRpc3RpYzogSVN0YXRpc3RpY0ZvckF1dGhvckVudHJ5O1xyXG5cclxuICAgIHByaXZhdGUgZGFpbHlTdGF0aXN0aWM6IElTdGF0aXN0aWNGb3JBdXRob3JQZXJpb2Q7XHJcbiAgICBwcml2YXRlIHdlZWtseVN0YXRpc3RpYzogSVN0YXRpc3RpY0ZvckF1dGhvclBlcmlvZDtcclxuICAgIHByaXZhdGUgbW9udGhseVN0YXRpc3RpYzogSVN0YXRpc3RpY0ZvckF1dGhvclBlcmlvZDtcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnRNb250aDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50WWVhcjogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBTdGF0aXN0aWNSZXBvcnRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEludHJvU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIHB1YmxpYyBpc0xvYWRpbmdTdGF0aXN0aWMgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RhdGlzdGljUmVwb3J0c1NlcnZpY2U6IFN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkhPTUVfQVVUSE9SX1JFUE9SVFNfS0VZKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNZW51SXRlbUtleSA9IE1lbnVIZWxwZXIuZ2V0Q3VycmVudE1lbnVJdGVtS2V5KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCkuZGVtYW5kVXNlckJ1c2luZXNzUm9sZShVc2VyUm9sZVtVc2VyUm9sZS5BVVRIT1JdKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0aXN0aWNSZXBvcnRzU2VydmljZS5nZXRTdGF0aXN0aWNGb3JBdXRob3IoKVxyXG4gICAgICAgICAgICAudGhlbihkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGlzdGljID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGFpbHlTdGF0aXN0aWMgID0gdGhpcy5zdGF0aXN0aWMuc3RhdGlzdGljUGVyaW9kcy5maWx0ZXIocCA9PiBwLnBlcmlvZFR5cGUgPT09IFwiREFZXCIpWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53ZWVrbHlTdGF0aXN0aWMgPSB0aGlzLnN0YXRpc3RpYy5zdGF0aXN0aWNQZXJpb2RzLmZpbHRlcihwID0+IHAucGVyaW9kVHlwZSA9PT0gXCJXRUVLXCIpWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb250aGx5U3RhdGlzdGljID0gdGhpcy5zdGF0aXN0aWMuc3RhdGlzdGljUGVyaW9kcy5maWx0ZXIocCA9PiBwLnBlcmlvZFR5cGUgPT09IFwiTU9OVEhcIilbMF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKHRoaXMubW9udGhseVN0YXRpc3RpYy5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TW9udGggPSB0b2RheS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHsgbW9udGg6ICdsb25nJyB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFllYXIgPSB0b2RheS5nZXRGdWxsWWVhcigpO1xyXG5cclxuICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1N0YXRpc3RpYyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRJbnRybygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmludHJvU2VydmljZS5zdGFydEF1dGhvckhvbWVQYWdlSW50cm8oKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi8uLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1F1aXp6ZXNSb3V0ZXJ9IGZyb20gXCIuLi8uLi91cmxzL1F1aXp6ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi8uLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge1F1aXpUeXBlfSBmcm9tIFwiLi4vLi4vcXVpenplcy9tb2RlbHMvUXVpelR5cGVcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi8uLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVF1aXp9IGZyb20gXCIuLi8uLi9xdWl6emVzL21vZGVscy9JUXVpelwiO1xyXG5pbXBvcnQge1Jlc2l6ZVZpZXdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvUmVzaXplVmlld1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uLy4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclJvbGV9IGZyb20gXCIuLi8uLi91c2Vycy9tb2RlbHMvVXNlclJvbGVcIjtcclxuaW1wb3J0IHtDb21tb25GaWx0ZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vY29tbW9uL0NvbW1vbkZpbHRlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtJbnRyb1NlcnZpY2V9IGZyb20gXCIuLi8uLi9pbmZvL0ludHJvU2VydmljZVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uLy4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhvbWVBdXRob3JTdXJ2ZXlzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImhvbWUuSG9tZUF1dGhvclN1cnZleXNDb250cm9sbGVyXCI7XHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVJdGVtS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgcHVibGljIHJvd1Nob3c6IE1hcDxudW1iZXIsIGJvb2xlYW4+ID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgcXVpenplc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJUXVpej47XHJcbiAgICBwdWJsaWMgcmVzaXplVmlld1NlcnZpY2U6IFJlc2l6ZVZpZXdTZXJ2aWNlO1xyXG4gICAgcHVibGljIHZpZXdUeXBlOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG4gICAgcHVibGljIHF1aXpUeXBlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdHlwZSA9IFtcclxuICAgICAgICBRdWl6VHlwZVtRdWl6VHlwZS5RVUlaXSxcclxuICAgICAgICBRdWl6VHlwZVtRdWl6VHlwZS5TVVJWRVldLFxyXG4gICAgICAgIFF1aXpUeXBlW1F1aXpUeXBlLkZMQVNIQ0FSRF1cclxuICAgIF07XHJcbiAgICBwdWJsaWMgb3duZXI6IElTZWxlY3RhYmxlW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHVzZXJQcm9maWxlOiBJVXNlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBRdWl6emVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uRmlsdGVyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEludHJvU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcXVpenplc1JvdXRlcjogUXVpenplc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnJhbmRpbmdTZXJ2aWNlOiBDdXN0b21CcmFuZGluZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb21tb25GaWx0ZXJTZXJ2aWNlOiBDb21tb25GaWx0ZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBpbnRyb1NlcnZpY2U6IEludHJvU2VydmljZSkge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuSE9NRV9BVVRIT1JfU1VSVkVZU19LRVkpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1lbnVJdGVtS2V5ID0gTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCkuZGVtYW5kVXNlckJ1c2luZXNzUm9sZShVc2VyUm9sZVtVc2VyUm9sZS5BVVRIT1JdKTtcclxuXHJcbiAgICAgICAgY29uc3QgcXVpenplc1VybCA9IFwiL2FwaS9xdWl6emVzL2F1dGhvci9cIitRdWl6VHlwZVtRdWl6VHlwZS5TVVJWRVldO1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElRdWl6PigkaHR0cCwgdGhpcy51cmwuc2VydmljZShxdWl6emVzVXJsKSkpO1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIodGhpcyk7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCl7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2UgPSBuZXcgUmVzaXplVmlld1NlcnZpY2UodGhpcy52aWV3VHlwZSk7XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRQYWdlID0gdGhpcy5xdWl6emVzR3JpZE1vZGVsLmN1cnJlbnRQYWdlID49IHRoaXMucXVpenplc0dyaWRNb2RlbC50b3RhbFBhZ2VDb3VudFxyXG4gICAgICAgICAgICAgICAgPyAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmN1cnJlbnRQYWdlIC0gMVxyXG4gICAgICAgICAgICAgICAgOnRoaXMucXVpenplc0dyaWRNb2RlbC5jdXJyZW50UGFnZTtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwubG9hZFBhZ2UoY3VycmVudFBhZ2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5sb2FkUGFnZShjdXJyZW50UGFnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMucmVzaXplVmlld1NlcnZpY2Uuc2V0UmVzaXplVmlld1R5cGUodGhpcy52aWV3VHlwZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJcIik7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvdy51bmJpbmQoJ3Jlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiZGVzdHJveVwiKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRPd25lcnNVcmwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdXNlcjtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMudXNlclByb2ZpbGUgP1xyXG4gICAgICAgICAgICAgICAgTnVtYmVyKHRoaXMudXNlclByb2ZpbGUucGFnZVZpZXdNb2RlKSA6IDE7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRJbnRybygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmludHJvU2VydmljZS5zdGFydEF1dGhvckhvbWVQYWdlSW50cm8oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KHBhcmFtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKSk7XHJcbiAgICAgICAgaWYgKHBhcmFtID09IFwiZGVzdHJveVwiKSB7XHJcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0gPT0gXCJcIikge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW0uaGFzQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXJ0TG9hZGluZygpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kTG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKChxdWl6OiBJUXVpeikgPT4ge1xyXG4gICAgICAgICAgICBxdWl6LnN1YmplY3ROYW1lQW5kVGl0bGUgPSBxdWl6LnN1YmplY3ROYW1lICsgXCIvXCIgKyBxdWl6LnRpdGxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhpbmRleDogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpIHtcclxuICAgICAgICBpZihrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaW5kZXgsICF0aGlzLnJvd1Nob3cuZ2V0KGluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hRdWl6KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFF1aXpEZXRhaWxzKHF1aXpJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucXVpenplc1JvdXRlci5zdXJ2ZXlzRGV0YWlsc1VybChxdWl6SWQpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHNldFZpZXdUeXBlKHZpZXdUeXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZS5vbGRWaWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVXNlclBhZ2VWaWV3TW9kZShCb29sZWFuKHZpZXdUeXBlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVVc2VyUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE93bmVyc1VybCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldE93bmVyc1VybCgpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHRoaXMub3duZXIgPSByZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEtleVByZXNzKCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlU2VhcmNoSW5wdXQoSG9tZUF1dGhvclN1cnZleXNDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsb3NlU2VhcmNoSW5wdXQoSG9tZUF1dGhvclN1cnZleXNDb250cm9sbGVyLk5BTUUsIHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0ZpbHRlckRpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2hvd0ZpbHRlckRpYWxvZyh3aW5kb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVGaWx0ZXIodHlwZTogc3RyaW5nLCByZWZlcmVuY2VPYmplY3Q6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgKz0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnVwZGF0ZUdlbmVyYWxGaWx0ZXIodHlwZSwgcmVmZXJlbmNlT2JqZWN0LCBIb21lQXV0aG9yU3VydmV5c0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbGVhckZpbHRlcihIb21lQXV0aG9yU3VydmV5c0NvbnRyb2xsZXIuTkFNRSwgdGhpcy5xdWl6emVzR3JpZE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNb2JpbGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2ODtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW1wb3J0UXVpeigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdChFdmVudC5RVUlaX1NVUlZFWV9JTVBPUlRfVVBEQVRFKTtcclxuICAgICAgICAkKFwiI2ltcG9ydFF1aXpUZW1wbGF0ZVwiKS5tb2RhbChcInRvZ2dsZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UG9wdXBDbGFzc2VzKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjYXJkcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjYXJkIGluZm9ybWF0aW9uX3Rvb2x0aXBcIikpO1xyXG4gICAgICAgIGZvciAobGV0IGNhcmQgb2YgY2FyZHMpIHtcclxuICAgICAgICAgICAgbGV0IHJlYzogQ2xpZW50UmVjdCA9IGNhcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIGxldCBwb3B1cDogRWxlbWVudCA9IGNhcmQucGFyZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicG9wdXBfb25ob3ZlclwiKS5pdGVtKDApO1xyXG4gICAgICAgICAgICBpZiAocmVjLnJpZ2h0ICsgcG9wdXAuY2xpZW50V2lkdGggPj0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIGxlZnRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJpZ2h0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInBvcHVwX29uaG92ZXIgcmlnaHRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImxlZnQtcG9pbnRlclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi8uLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtSZXNpemVWaWV3U2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1Jlc2l6ZVZpZXdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0lDb3Vyc2V9IGZyb20gXCIuLi8uLi9jb3Vyc2VzL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJTWVudUdyb3VwfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9QZXJzb25hbE1lbnVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4uLy4uL1JlZmVyZW5jZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7UGVyc29uYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vcGVyc29uYWwvUGVyc29uYWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tQnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYnJhbmRpbmcvQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SU5vdGlmaWNhdGlvbkNvdW50c30gZnJvbSBcIi4uL21vZGVscy9JTm90aWZpY2F0aW9uQ291bnRzXCI7XHJcbmltcG9ydCB7U3RhdGlzdGljUmVwb3J0c1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zdGF0aXN0aWNzL1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Tk9USUZJQ0FUSU9OU19NT0RBTF9JTlNUUlVDVE9SX01FTlUsIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtfSBmcm9tIFwiLi4vbW9kZWxzL05vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtXCI7XHJcbmltcG9ydCB7SUFzc2Vzc21lbnR9IGZyb20gXCIuLi8uLi9hc3Nlc3NtZW50cy9tb2RlbHMvSUFzc2Vzc21lbnRcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50c1NlcnZpY2V9IGZyb20gXCIuLi8uLi9hc3Nlc3NtZW50cy9Bc3Nlc3NtZW50c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtTb2NpYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc29jaWFsL1NvY2lhbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ29tbWVudHNBbmREaXNjdXNzaW9ufSBmcm9tIFwiLi4vLi4vc29jaWFsL21vZGVscy9JQ29tbWVudHNBbmREaXNjdXNzaW9uXCI7XHJcbmltcG9ydCB7QXNzZXNzbWVudHNSb3V0ZXJ9IGZyb20gXCIuLi8uLi91cmxzL0Fzc2Vzc21lbnRzUm91dGVyXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaW5mby9JbnRyb1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uLy4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uSG9tZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21tb24vQ29tbW9uSG9tZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uLy4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lSW5zdHJ1Y3RvckNvdXJzZXNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaG9tZS5Ib21lSW5zdHJ1Y3RvckNvdXJzZXNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIG1lbnVLZXk6IGFueTtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIHZpZXdUeXBlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcm93U2hvdzogTWFwPG51bWJlciwgYm9vbGVhbj4gPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyBjb3Vyc2VzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElDb3Vyc2U+O1xyXG4gICAgcHVibGljIHJlc2l6ZVZpZXdTZXJ2aWNlOiBSZXNpemVWaWV3U2VydmljZTtcclxuICAgIHB1YmxpYyBjdXJyZW50TWVudUl0ZW1LZXk6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVJdGVtTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBob21lTWVudUJ5UGVybWlzc2lvbjogSU1lbnVHcm91cDtcclxuICAgIHB1YmxpYyBpbnN0cnVjdG9yQ291bnRzOiBJTm90aWZpY2F0aW9uQ291bnRzO1xyXG4gICAgcHVibGljIG5vdGlmaWNhdGlvbnNNb2RhbE1lbnU6IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtW10gPSBOT1RJRklDQVRJT05TX01PREFMX0lOU1RSVUNUT1JfTUVOVTtcclxuICAgIHB1YmxpYyBjdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW06IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtO1xyXG4gICAgcHVibGljIGN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgc2hvd05vdGlmaWNhdGlvbk1vZGFsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIG5vdFN0YXJ0ZWRTdGF0dXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGluUHJvZ3Jlc3NTdGF0dXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGNvbXBsZXRlZFN0YXR1czogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIGNvbW1lbnRzOiBJQ29tbWVudHNBbmREaXNjdXNzaW9uW107XHJcbiAgICBwdWJsaWMgbmV3QXNzZXNzbWVudHM6IElBc3Nlc3NtZW50W107XHJcblxyXG4gICAgcHVibGljIGNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyB3aW5kb3c6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgc3RvcmFnZUZpbHRlclZhbHVlczogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzaG93RXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvdXJzZXNVcmw6IHN0cmluZyA9IFwiL2FwaS9jb3Vyc2VzL3NlYXJjaFwiO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBTdGF0aXN0aWNSZXBvcnRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEFzc2Vzc21lbnRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNvY2lhbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBc3Nlc3NtZW50c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBJbnRyb1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIENvbW1vbkhvbWVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc3RhdGlzdGljUmVwb3J0c1NlcnZpY2U6IFN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhc3Nlc3NtZW50c1NlcnZpY2U6IEFzc2Vzc21lbnRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc29jaWFsU2VydmljZTogU29jaWFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXNzZXNzbWVudHNSb3V0ZXI6IEFzc2Vzc21lbnRzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc0FwaTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY29tbW9uSG9tZVNlcnZpY2U6IENvbW1vbkhvbWVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkhPTUVfSU5TVFJVQ1RPUl9DT1VSU0VTX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xyXG5cclxuICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiXCIpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3cudW5iaW5kKCdyZXNpemUnKTtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcImRlc3Ryb3lcIik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnVzZXJQcm9maWxlID9cclxuICAgICAgICAgICAgICAgIE51bWJlcih0aGlzLnVzZXJQcm9maWxlLnBhZ2VWaWV3TW9kZSkgOiAxO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0SW50cm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb1NlcnZpY2Uuc3RhcnRJbnN0cnVjdG9ySG9tZVBhZ2VJbnRybygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlRmlsdGVyVmFsdWVzID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldEZpbHRlclZhbHVlcyhIb21lSW5zdHJ1Y3RvckNvdXJzZXNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlTdG9yYWdlRmlsdGVyKHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyxcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRTZWFyY2hJbnB1dChIb21lSW5zdHJ1Y3RvckNvdXJzZXNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLm9wZW5TZWFyY2hJbnB1dCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KHBhcmFtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKSk7XHJcbiAgICAgICAgaWYgKHBhcmFtID09IFwiZGVzdHJveVwiKSB7XHJcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0gPT0gXCJcIikge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW0uaGFzQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb3BNZW51QWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVLZXkudG9wTWVudSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhpbmRleDogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoa2V5Q29kZSA9PSAxMyB8fCAha2V5Q29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGluZGV4LCAhdGhpcy5yb3dTaG93LmdldChpbmRleCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZENvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kZXRhaWxzVXJsKGNvdXJzZUlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaENvdXJzZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFRvRmF2b3JpdGVzKGNvdXJzZTogSUNvdXJzZSkge1xyXG4gICAgICAgIHRoaXMucm93U2hvdy5zZXQoY291cnNlLmlkLCAhdGhpcy5yb3dTaG93LmdldChjb3Vyc2UuaWQpKTtcclxuICAgICAgICB0aGlzLnBlcnNvbmFsU2VydmljZS5hZGRUb0Zhdm9yaXRlcyhjb3Vyc2UuaWQsIGNvdXJzZS52ZXJzaW9uLCBSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0UpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBjb3Vyc2UgaGFzIGJlZW4gYWRkZWQgdG8geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIGNvdXJzZS5mYXZvcml0ZSA9IHRydWU7XHJcbiAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5hbHJlYWR5LmluLmZhdm9yaXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBjb3Vyc2UgaXMgYWxyZWFkeSBpbiB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5pcy5jaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGFub3RoZXIgdXNlcjogcGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYW5kIHRyeSBhZ2FpblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVGcm9tRmF2b3JpdGVzKGNvdXJzZTogSUNvdXJzZSkge1xyXG4gICAgICAgIHRoaXMucm93U2hvdy5zZXQoY291cnNlLmlkLCAhdGhpcy5yb3dTaG93LmdldChjb3Vyc2UuaWQpKTtcclxuICAgICAgICB0aGlzLnBlcnNvbmFsU2VydmljZS5yZW1vdmVGcm9tRmF2b3JpdGVzKGNvdXJzZS5pZCwgY291cnNlLnZlcnNpb24sIFJlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIGNvdXJzZSBoYXMgYmVlbiByZW1vdmVkIGZyb20geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIGNvdXJzZS5mYXZvcml0ZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3Qubm90LmluLmZhdm9yaXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHJlbW92ZSBmcm9tIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmlzLmNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYW5vdGhlciB1c2VyOiBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRTZWFyY2goKSB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnZpZXdUeXBlXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci52aWV3VHlwZVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc3ViamVjdElkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc3ViamVjdElkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLmNvbXBsZXhpdHlMZXZlbFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLmNvbXBsZXhpdHlMZXZlbCA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLmNvbXBsZXhpdHlMZXZlbFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5sYW5ndWFnZUlkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIubGFuZ3VhZ2VJZCA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLmxhbmd1YWdlSWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc291cmNlSWRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zb3VyY2VJZCA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNvdXJjZUlkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dGaWx0ZXJEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNob3dGaWx0ZXJEaWFsb2cod2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRmlsdGVyKHR5cGU6IHN0cmluZywgcmVmZXJlbmNlT2JqZWN0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb3VudEFjdGl2ZUluY3JlbWVudCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS51cGRhdGVHZW5lcmFsRmlsdGVyKHR5cGUsIHJlZmVyZW5jZU9iamVjdCxcclxuICAgICAgICAgICAgSG9tZUluc3RydWN0b3JDb3Vyc2VzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyICs9IGNvdW50QWN0aXZlSW5jcmVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcHBseUZpbHRlcigpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlHZW5lcmFsRmlsdGVyKHRoaXMuY291cnNlc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbGVhckZpbHRlcihIb21lSW5zdHJ1Y3RvckNvdXJzZXNDb250cm9sbGVyLk5BTUUsIHRoaXMuY291cnNlc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEtleVByZXNzKCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlU2VhcmNoSW5wdXQoSG9tZUluc3RydWN0b3JDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCB0aGlzLnNlYXJjaElucHV0KTtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbG9zZVNlYXJjaElucHV0KEhvbWVJbnN0cnVjdG9yQ291cnNlc0NvbnRyb2xsZXIuTkFNRSwgd2luZG93KTtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoSW5wdXQgfHwgdGhpcy5zZWFyY2hJbnB1dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhclNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zdWJqZWN0SWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY29tcGxleGl0eUxldmVsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLmxhbmd1YWdlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc291cmNlSWQgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLm5vdFN0YXJ0ZWRTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5Qcm9ncmVzc1N0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZWRTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlU3RhdHVzID0gdGhpcy5nZXRDb3Vyc2VTdGF0dXNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcblxyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzQ291cnNlc0ZpbHRlci52aWV3VHlwZVwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zdWJqZWN0SWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuY29tcGxleGl0eUxldmVsXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLmxhbmd1YWdlSWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc291cmNlSWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuY291cnNlU3RhdHVzXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFZpZXdUeXBlKHZpZXdUeXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZS5vbGRWaWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVXNlclBhZ2VWaWV3TW9kZShCb29sZWFuKHZpZXdUeXBlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVVc2VyUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRmlsdGVyQ2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLlwiICsga2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuXCIgKyBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Q291cnNlU3RhdHVzRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBzdGF0dXNMaXN0ID0gdGhpcy5nZXRDb3Vyc2VTdGF0dXNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VTdGF0dXMgPSBzdGF0dXNMaXN0O1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLmNvdXJzZVN0YXR1c1wiLCBzdGF0dXNMaXN0LmpvaW4oXCIsXCIpKTtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb3Vyc2VTdGF0dXNMaXN0KCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBsZXQgc3RhdHVzTGlzdCA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLm5vdFN0YXJ0ZWRTdGF0dXMgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgc3RhdHVzTGlzdC5wdXNoKCdOT1RfU1RBUlRFRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pblByb2dyZXNzU3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHN0YXR1c0xpc3QucHVzaCgnSU5fUFJPR1JFU1MnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGVkU3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHN0YXR1c0xpc3QucHVzaCgnQ09NUExFVEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdGF0dXNMaXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3VudHMoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0aXN0aWNSZXBvcnRzU2VydmljZS5nZXRJbnN0cnVjdG9yTm90aWZpY2F0aW9uc05ld0NvdW50cygpLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbnN0cnVjdG9yQ291bnRzID0gZGF0YTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1OYW1lKG5vdGlmaWNhdGlvbnNNb2RhbE1lbnUxOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoIChub3RpZmljYXRpb25zTW9kYWxNZW51MSkge1xyXG4gICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLkRBWV9DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbW1lbnRzL2RheVwiO1xyXG4gICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLldFRUtfQ09NTUVOVFM6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb21tZW50cy93ZWVrXCI7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uTkVXX0FTU0VTU01FTlRTOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibmV3IGFzc2Vzc21lbnRzXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbShpdGVtTmFtZTogc3RyaW5nKTogTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0ge1xyXG4gICAgICAgIHN3aXRjaCAoaXRlbU5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImNvbW1lbnRzL2RheVwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLkRBWV9DT01NRU5UUztcclxuICAgICAgICAgICAgY2FzZSBcImNvbW1lbnRzL3dlZWtcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5XRUVLX0NPTU1FTlRTO1xyXG4gICAgICAgICAgICBjYXNlIFwibmV3IGFzc2Vzc21lbnRzXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uTkVXX0FTU0VTU01FTlRTO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLkRBWV9DT01NRU5UUztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dOb3RpZmljYXRpb25zRGlhbG9nKGl0ZW1OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dOb3RpZmljYXRpb25Nb2RhbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0odGhpcy5nZXROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbShpdGVtTmFtZSkpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtTmFtZSA9IGl0ZW1OYW1lO1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zaG93Tm90aWZpY2F0aW9uc0RpYWxvZyh3aW5kb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vYmlsZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRDdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0oaXRlbTogTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSA9IGl0ZW07XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSkge1xyXG4gICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLkRBWV9DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc29jaWFsU2VydmljZS5nZXRDb21tZW50c0FuZERpc2N1c3Npb25Gb3JJbnN0cnVjdG9yKFwiREFZXCIpLnRoZW4oZGF0YSA9PiB0aGlzLmNvbW1lbnRzID0gZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5XRUVLX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zb2NpYWxTZXJ2aWNlLmdldENvbW1lbnRzQW5kRGlzY3Vzc2lvbkZvckluc3RydWN0b3IoXCJXRUVLXCIpLnRoZW4oZGF0YSA9PiB0aGlzLmNvbW1lbnRzID0gZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5ORVdfQVNTRVNTTUVOVFM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRzU2VydmljZS5nZXROZXdBc3NlbWVudHNGb3JJbnN0cnVjdG9yKCkudGhlbihkYXRhID0+IHRoaXMubmV3QXNzZXNzbWVudHMgPSBkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1OYW1lID0gdGhpcy5nZXROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9EaXNjdXNzaW9uKGNvdXJzZUlkOiBudW1iZXIsIGRpc2N1c3Npb25JZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oaWRlTm90aWZpY2F0aW9uc01vZGFsKCk7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kaXNjdXNzaW9uVXJsKGNvdXJzZUlkKSkuc2VhcmNoKFwidGhyZWFkSWRcIiwgZGlzY3Vzc2lvbklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0Fzc2Vzc21lbnQoYXNzZXNzbWVudElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhpZGVOb3RpZmljYXRpb25zTW9kYWwoKTtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5hc3Nlc3NtZW50c1JvdXRlci5hc3Nlc3NtZW50RGV0YWlsc1VybChhc3Nlc3NtZW50SWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGlkZU5vdGlmaWNhdGlvbnNNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICAkKFwiI25vdGlmaWNhdGlvbnNNb2RhbFwiKS5tb2RhbChcImhpZGVcIik7XHJcbiAgICAgICAgJCgnLm1vZGFsLWJhY2tkcm9wJykucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbkl0ZW1Db3VudChpdGVtOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSk6IG51bWJlciB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3RvckNvdW50cy5kYXlDb21tZW50c0NvdW50O1xyXG4gICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLldFRUtfQ09NTUVOVFM6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdG9yQ291bnRzLndlZWtDb21tZW50c0NvdW50O1xyXG4gICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLk5FV19BU1NFU1NNRU5UUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0b3JDb3VudHMubmV3QXNzZXNzbWVudHNDb3VudDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUdyaWQoKSB7XHJcbiAgICAgICAgbGV0IGNvdXJzZXNVcmwgPSAhdGhpcy5zaG93RXhwaXJlZFxyXG4gICAgICAgICAgICAgICAgPyBcIi9hcGkvY291cnNlcy9zZWFyY2gvaW5zdHJ1Y3RvclwiXHJcbiAgICAgICAgICAgICAgICA6IFwiL2FwaS9jb3Vyc2VzL3NlYXJjaC9pbnN0cnVjdG9yL2V4cGlyZWRcIlxyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElDb3Vyc2U+KHRoaXMuJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoY291cnNlc1VybCkpKTtcclxuICAgICAgICB0aGlzLmdldFN0b3JhZ2VGaWx0ZXJzKCk7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwucGFnZVNpemUgPSA5O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldENvdXJzZVN0YXR1c0ZpbHRlcigpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q291bnRzKCk7XHJcblxyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMubG9hZFNlYXJjaCgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMudmlld1R5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdy5iaW5kKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFnZSA9IHRoaXMuY291cnNlc0dyaWRNb2RlbC5jdXJyZW50UGFnZSA+PSB0aGlzLmNvdXJzZXNHcmlkTW9kZWwudG90YWxQYWdlQ291bnRcclxuICAgICAgICAgICAgICAgID8gIHRoaXMuY291cnNlc0dyaWRNb2RlbC5jdXJyZW50UGFnZSAtIDFcclxuICAgICAgICAgICAgICAgIDp0aGlzLmNvdXJzZXNHcmlkTW9kZWwuY3VycmVudFBhZ2U7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRQYWdlKGN1cnJlbnRQYWdlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwubG9hZFBhZ2UoY3VycmVudFBhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2hvcnRTdW1tYXJ5KG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmcgIT0gdW5kZWZpbmVkICYmIG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA+IDI1NlxyXG4gICAgICAgICAgICA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cmluZygwLCAyNTYpICsgJy4uLidcclxuICAgICAgICAgICAgOiBvcmlnaW5hbFN0cmluZztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuLi8uLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SU1lbnVHcm91cH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvUGVyc29uYWxNZW51RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uLy4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFNlcnZpY2V9IGZyb20gXCIuLi8uLi9sZWFybmluZ1BhdGhzL0xlYXJuaW5nUGF0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VQcm9ncmVzc1N0YXR1c30gZnJvbSBcIi4uLy4uL2NvdXJzZXMvbW9kZWxzL0NvdXJzZVByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aENvdXJzZX0gZnJvbSBcIi4uLy4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhDb3Vyc2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlfSBmcm9tIFwiLi4vLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZVwiO1xyXG5pbXBvcnQge0lOb3RpZmljYXRpb25Db3VudHN9IGZyb20gXCIuLi9tb2RlbHMvSU5vdGlmaWNhdGlvbkNvdW50c1wiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc3RhdGlzdGljcy9TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5pbXBvcnQge0Fzc2Vzc21lbnRzUm91dGVyfSBmcm9tIFwiLi4vLi4vdXJscy9Bc3Nlc3NtZW50c1JvdXRlclwiO1xyXG5pbXBvcnQge05PVElGSUNBVElPTlNfTU9EQUxfSU5TVFJVQ1RPUl9NRU5VLCBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbX0gZnJvbSBcIi4uL21vZGVscy9Ob3RpZmljYXRpb25zTW9kYWxNZW51SXRlbVwiO1xyXG5pbXBvcnQge1NvY2lhbFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zb2NpYWwvU29jaWFsU2VydmljZVwiO1xyXG5pbXBvcnQge0Fzc2Vzc21lbnRzU2VydmljZX0gZnJvbSBcIi4uLy4uL2Fzc2Vzc21lbnRzL0Fzc2Vzc21lbnRzU2VydmljZVwiO1xyXG5pbXBvcnQge0lDb21tZW50c0FuZERpc2N1c3Npb259IGZyb20gXCIuLi8uLi9zb2NpYWwvbW9kZWxzL0lDb21tZW50c0FuZERpc2N1c3Npb25cIjtcclxuaW1wb3J0IHtJQXNzZXNzbWVudH0gZnJvbSBcIi4uLy4uL2Fzc2Vzc21lbnRzL21vZGVscy9JQXNzZXNzbWVudFwiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge0NvbW1vbkhvbWVTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vY29tbW9uL0NvbW1vbkhvbWVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaW5mby9JbnRyb1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uLy4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uLy4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uLy4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuZXhwb3J0IGNsYXNzIEhvbWVJbnN0cnVjdG9yTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJob21lLkhvbWVJbnN0cnVjdG9yTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTGVhcm5pbmdQYXRoPjtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaG9tZU1lbnVCeVBlcm1pc3Npb246IElNZW51R3JvdXA7XHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVJdGVtS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIGN1cnJlbnRNZW51SXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgaW5zdHJ1Y3RvckNvdW50czogSU5vdGlmaWNhdGlvbkNvdW50cztcclxuICAgIHB1YmxpYyBub3RpZmljYXRpb25zTW9kYWxNZW51OiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbVtdID0gTk9USUZJQ0FUSU9OU19NT0RBTF9JTlNUUlVDVE9SX01FTlU7XHJcbiAgICBwdWJsaWMgY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbTtcclxuICAgIHB1YmxpYyBjdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1OYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHNob3dOb3RpZmljYXRpb25Nb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyB3aW5kb3c6IGFueTtcclxuICAgIHB1YmxpYyBzdGFydFdpbmRvd1dpZHRoOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgb2xkU2VhcmNoVmlld1R5cGU6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGNvbW1lbnRzOiBJQ29tbWVudHNBbmREaXNjdXNzaW9uW107XHJcbiAgICBwdWJsaWMgbmV3QXNzZXNzbWVudHM6IElBc3Nlc3NtZW50W107XHJcblxyXG4gICAgcHVibGljIHN0b3JhZ2VGaWx0ZXJWYWx1ZXM6IGFueTtcclxuICAgIHByaXZhdGUgaXNTaG93QWxsQ2FyZHM6IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBpc0luaXRTbGljayA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzaG93RXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aHNVcmw6IHN0cmluZyA9IFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaFwiO1xyXG4gICAgcHVibGljIGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXNzZXNzbWVudHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBTb2NpYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXNzZXNzbWVudHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uSG9tZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb21tb25GaWx0ZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgSW50cm9TZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoU2VydmljZTogTGVhcm5pbmdQYXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc3RhdGlzdGljUmVwb3J0c1NlcnZpY2U6IFN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhc3Nlc3NtZW50c1JvdXRlcjogQXNzZXNzbWVudHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNvY2lhbFNlcnZpY2U6IFNvY2lhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGFzc2Vzc21lbnRzU2VydmljZTogQXNzZXNzbWVudHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkhvbWVTZXJ2aWNlOiBDb21tb25Ib21lU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb21tb25GaWx0ZXJTZXJ2aWNlOiBDb21tb25GaWx0ZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBpbnRyb1NlcnZpY2U6IEludHJvU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcclxuXHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5IT01FX0lOU1RSVUNUT1JfTEVBUk5JTkdfUEFUSFNfS0VZKTtcclxuXHJcbiAgICAgICAgdGhpcy5odHRwID0gJGh0dHA7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xyXG5cclxuICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiXCIpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3cudW5iaW5kKCdyZXNpemUnKTtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcImRlc3Ryb3lcIik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnVzZXJQcm9maWxlID9cclxuICAgICAgICAgICAgICAgIE51bWJlcih0aGlzLnVzZXJQcm9maWxlLnBhZ2VWaWV3TW9kZSkgOiAxO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0SW50cm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb1NlcnZpY2Uuc3RhcnRJbnN0cnVjdG9ySG9tZVBhZ2VJbnRybygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlRmlsdGVyVmFsdWVzID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldEZpbHRlclZhbHVlcyhIb21lSW5zdHJ1Y3RvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlTdG9yYWdlRmlsdGVyKHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyxcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRTZWFyY2hJbnB1dChIb21lSW5zdHJ1Y3RvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5vcGVuU2VhcmNoSW5wdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXJ0TG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLmlzSW5pdFNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aHNMb2FkZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kTG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGljaygpLCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkocGFyYW06IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBlbGVtID0gYW5ndWxhci5lbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpKTtcclxuICAgICAgICBpZiAocGFyYW0gPT0gXCJkZXN0cm95XCIpIHtcclxuICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbS5oYXNDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIikpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHZpZXdUeXBlID09IDEpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGljaygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVXNlclBhZ2VWaWV3TW9kZShCb29sZWFuKHZpZXdUeXBlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVVc2VyUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRMZWFybmluZ1BhdGgobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuZGV0YWlsc1VybChsZWFybmluZ1BhdGhJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwoY291cnNlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GaWx0ZXJDaGFuZ2Uoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuXCIgKyBrZXksIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5cIiArIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RmlsdGVyRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zaG93RmlsdGVyRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUZpbHRlcih0eXBlOiBzdHJpbmcsIHJlZmVyZW5jZU9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY291bnRBY3RpdmVJbmNyZW1lbnQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UudXBkYXRlR2VuZXJhbEZpbHRlcih0eXBlLCByZWZlcmVuY2VPYmplY3QsXHJcbiAgICAgICAgICAgIEhvbWVJbnN0cnVjdG9yTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciArPSBjb3VudEFjdGl2ZUluY3JlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmFwcGx5R2VuZXJhbEZpbHRlcih0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xlYXJGaWx0ZXIoSG9tZUluc3RydWN0b3JMZWFybmluZ1BhdGhzQ29udHJvbGxlci5OQU1FLCB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hLZXlQcmVzcygpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2F2ZVNlYXJjaElucHV0KEhvbWVJbnN0cnVjdG9yTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSwgdGhpcy5zZWFyY2hJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xvc2VTZWFyY2hJbnB1dChIb21lSW5zdHJ1Y3RvckxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLmxhbmd1YWdlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc291cmNlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG5cclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIudmlld1R5cGVcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc3ViamVjdElkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLmxhbmd1YWdlSWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc291cmNlSWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRTZWFyY2goKSB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnZpZXdUeXBlXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci52aWV3VHlwZVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc3ViamVjdElkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc3ViamVjdElkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLmxhbmd1YWdlSWRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5sYW5ndWFnZUlkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIubGFuZ3VhZ2VJZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zb3VyY2VJZFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnNvdXJjZUlkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc291cmNlSWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcGxldGVkTWFuZGF0b3J5Q291cnNlcyhjb3Vyc2VzQnlMUDogSUxlYXJuaW5nUGF0aENvdXJzZVtdKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgY291bnRDb21wbGV0ZWRDb3Vyc2VzID0gMDtcclxuICAgICAgICBsZXQgY291bnRNYW5kYXRvcnlDb3Vyc2VzID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjb3Vyc2Ugb2YgY291cnNlc0J5TFApIHtcclxuICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VJbmNsdXNpb25UeXBlID09PSBMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlW0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGUuTUFOREFUT1JZXSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5SRVNFVF1cclxuICAgICAgICAgICAgICAgICAgICB8fCBjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuRVhQSVJFRF1cclxuICAgICAgICAgICAgICAgICAgICB8fCBjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50Q29tcGxldGVkQ291cnNlcysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY291bnRNYW5kYXRvcnlDb3Vyc2VzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvdW50Q29tcGxldGVkQ291cnNlcyArICcgb2YgJyArIGNvdW50TWFuZGF0b3J5Q291cnNlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcGxldGVkRWxlY3RpdmVDb3Vyc2VzKGNvdXJzZXNCeUxQOiBJTGVhcm5pbmdQYXRoQ291cnNlW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjb3VudENvbXBsZXRlZENvdXJzZXMgPSAwO1xyXG4gICAgICAgIGxldCBjb3VudE1hbmRhdG9yeUNvdXJzZXMgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNvdXJzZSBvZiBjb3Vyc2VzQnlMUCkge1xyXG4gICAgICAgICAgICBpZiAoY291cnNlLmNvdXJzZUluY2x1c2lvblR5cGUgPT09IExlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGVbTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZS5FTEVDVElWRV0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuUkVTRVRdXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzID09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLkVYUElSRURdXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzID09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLkNPTVBMRVRFRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3VudENvbXBsZXRlZENvdXJzZXMrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvdW50TWFuZGF0b3J5Q291cnNlcysrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3VudENvbXBsZXRlZENvdXJzZXMgKyAnIG9mICcgKyBjb3VudE1hbmRhdG9yeUNvdXJzZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdW50cygpIHtcclxuICAgICAgICB0aGlzLnN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLmdldEluc3RydWN0b3JOb3RpZmljYXRpb25zQ291bnRzKCkudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmluc3RydWN0b3JDb3VudHMgPSBkYXRhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWUobm90aWZpY2F0aW9uc01vZGFsTWVudTE6IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbnNNb2RhbE1lbnUxKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29tbWVudHMvZGF5XCI7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uV0VFS19DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbW1lbnRzL3dlZWtcIjtcclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5ORVdfQVNTRVNTTUVOVFM6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJuZXcgYXNzZXNzbWVudHNcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKGl0ZW1OYW1lOiBzdHJpbmcpOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiY29tbWVudHMvZGF5XCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTO1xyXG4gICAgICAgICAgICBjYXNlIFwiY29tbWVudHMvd2Vla1wiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLldFRUtfQ09NTUVOVFM7XHJcbiAgICAgICAgICAgIGNhc2UgXCJuZXcgYXNzZXNzbWVudHNcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5ORVdfQVNTRVNTTUVOVFM7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd05vdGlmaWNhdGlvbnNEaWFsb2coaXRlbU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd05vdGlmaWNhdGlvbk1vZGFsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldEN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSh0aGlzLmdldE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKGl0ZW1OYW1lKSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Tm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW1OYW1lID0gaXRlbU5hbWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNob3dOb3RpZmljYXRpb25zRGlhbG9nKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbShpdGVtOiBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtID0gaXRlbTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uREFZX0NPTU1FTlRTOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zb2NpYWxTZXJ2aWNlLmdldENvbW1lbnRzQW5kRGlzY3Vzc2lvbkZvckluc3RydWN0b3IoXCJEQVlcIikudGhlbihkYXRhID0+IHRoaXMuY29tbWVudHMgPSBkYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLldFRUtfQ09NTUVOVFM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2lhbFNlcnZpY2UuZ2V0Q29tbWVudHNBbmREaXNjdXNzaW9uRm9ySW5zdHJ1Y3RvcihcIldFRUtcIikudGhlbihkYXRhID0+IHRoaXMuY29tbWVudHMgPSBkYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLk5FV19BU1NFU1NNRU5UUzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudHNTZXJ2aWNlLmdldE5ld0Fzc2VtZW50c0Zvckluc3RydWN0b3IoKS50aGVuKGRhdGEgPT4gdGhpcy5uZXdBc3Nlc3NtZW50cyA9IGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnROb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbU5hbWUgPSB0aGlzLmdldE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtTmFtZShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0Rpc2N1c3Npb24oY291cnNlSWQ6IG51bWJlciwgZGlzY3Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhpZGVOb3RpZmljYXRpb25zTW9kYWwoKTtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmRpc2N1c3Npb25VcmwoY291cnNlSWQpKS5zZWFyY2goXCJ0aHJlYWRJZFwiLCBkaXNjdXNzaW9uSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvQXNzZXNzbWVudChhc3Nlc3NtZW50SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbnNNb2RhbCgpO1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmFzc2Vzc21lbnRzUm91dGVyLmFzc2Vzc21lbnREZXRhaWxzVXJsKGFzc2Vzc21lbnRJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlTm90aWZpY2F0aW9uc01vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjbm90aWZpY2F0aW9uc01vZGFsXCIpLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgICAgICAkKCcubW9kYWwtYmFja2Ryb3AnKS5yZW1vdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Tm90aWZpY2F0aW9uSXRlbUNvdW50KGl0ZW06IE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtKTogbnVtYmVyIHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0pIHtcclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5EQVlfQ09NTUVOVFM6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdG9yQ291bnRzLmRheUNvbW1lbnRzQ291bnQ7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uV0VFS19DT01NRU5UUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0b3JDb3VudHMud2Vla0NvbW1lbnRzQ291bnQ7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uTkVXX0FTU0VTU01FTlRTOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3RvckNvdW50cy5uZXdBc3Nlc3NtZW50c0NvdW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzbGljayBscFxyXG4gICAgcHVibGljIGluaXRpYWxpemVTbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzSW5pdFNsaWNrID0gdGhpcy5jb21tb25Ib21lU2VydmljZS5pbml0aWFsaXplU2xpY2sodGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dBbGxMUChsZWFybmluZ1BhdGhJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dBbGxDYXJkcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25Ib21lU2VydmljZS5zaG93QWxsTFAobGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlQWxsTFAobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTaG93QWxsQ2FyZHMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbW1vbkhvbWVTZXJ2aWNlLmhpZGVBbGxMUChsZWFybmluZ1BhdGhJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5DYXJkKGluZGV4UGxhbkxwOiBudW1iZXIsIGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkhvbWVTZXJ2aWNlLm9wZW5DYXJkKGluZGV4UGxhbkxwLCBsZWFybmluZ1BhdGhJZCwgdGhpcy5pc1Nob3dBbGxDYXJkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUdyaWQoKSB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzVXJsID0gIXRoaXMuc2hvd0V4cGlyZWRcclxuICAgICAgICAgICAgPyBcIi9hcGkvbGVhcm5pbmdQYXRocy9zZWFyY2gvaW5zdHJ1Y3RvclwiXHJcbiAgICAgICAgICAgIDogXCIvYXBpL2xlYXJuaW5nUGF0aHMvc2VhcmNoL2luc3RydWN0b3IvZXhwaXJlZFwiXHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUxlYXJuaW5nUGF0aD4odGhpcy5odHRwLCB0aGlzLnVybC5zZXJ2aWNlKHRoaXMubGVhcm5pbmdQYXRoc1VybCkpKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRTdG9yYWdlRmlsdGVycygpO1xyXG5cclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwucGFnZVNpemUgPSA0O1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMub2xkU2VhcmNoVmlld1R5cGUgPSB0aGlzLnZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKHRoaXMud2luZG93LmlubmVyV2lkdGggPCA5OTIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFdpbmRvd1dpZHRoID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V2luZG93V2lkdGggPSAxMDAwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgdGhpcy5zdGFydFdpbmRvd1dpZHRoICYmICF0aGlzLnZpZXdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sZFNlYXJjaFZpZXdUeXBlID0gdGhpcy52aWV3VHlwZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRXaW5kb3dXaWR0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPj0gOTkyICYmIHdpbmRvdy5pbm5lcldpZHRoID4gdGhpcy5zdGFydFdpbmRvd1dpZHRoICYmICF0aGlzLm9sZFNlYXJjaFZpZXdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5vbGRTZWFyY2hWaWV3VHlwZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRXaW5kb3dXaWR0aCA9IDEwMDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0Q291bnRzKCk7XHJcblxyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMubG9hZFNlYXJjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vYmlsZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3Vyc2VEYXRlc1N0cmluZyhjb3Vyc2U6IElDb3Vyc2UpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBsZXQgY291cnNlRGF0ZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gICAgICAgIGlmIChjb3Vyc2UuZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICBjb3Vyc2VEYXRlcy5zZXQoXCJlbmREYXRlXCIsIG5ldyBEYXRlKGNvdXJzZS5lbmREYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvdXJzZS5lbmREYXRlIHx8IGNvdXJzZS5zdGFydERhdGUgPiBEYXRlLm5vdygpKSB7XHJcbiAgICAgICAgICAgIGNvdXJzZURhdGVzLnNldChcInN0YXJ0RGF0ZVwiLCBuZXcgRGF0ZShjb3Vyc2Uuc3RhcnREYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3Vyc2VEYXRlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UG9wdXBDbGFzc2VzKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjYXJkcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjYXJkIGluZm9ybWF0aW9uX3Rvb2x0aXBcIikpO1xyXG4gICAgICAgIGZvciAobGV0IGNhcmQgb2YgY2FyZHMpIHtcclxuICAgICAgICAgICAgbGV0IHJlYzogQ2xpZW50UmVjdCA9IGNhcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIGxldCBwb3B1cDogRWxlbWVudCA9IGNhcmQucGFyZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicG9wdXBfb25ob3ZlclwiKS5pdGVtKDApO1xyXG4gICAgICAgICAgICBpZiAocmVjLnJpZ2h0ICsgcG9wdXAuY2xpZW50V2lkdGggPj0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIGxlZnRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJpZ2h0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInBvcHVwX29uaG92ZXIgcmlnaHRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImxlZnQtcG9pbnRlclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2hvcnRTdW1tYXJ5KG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmcgIT0gdW5kZWZpbmVkICYmIG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA+IDI1NlxyXG4gICAgICAgICAgICA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cmluZygwLCAyNTYpICsgJy4uLidcclxuICAgICAgICAgICAgOiBvcmlnaW5hbFN0cmluZztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtTdGF0aXN0aWNSZXBvcnRzU2VydmljZX0gZnJvbSBcIi4uLy4uL3N0YXRpc3RpY3MvU3RhdGlzdGljUmVwb3J0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3RhdGlzdGljRm9yQXR0ZW5kZWVNYW5hZ2VyQW5kSW5zdHJ1Y3RvckVudHJ5fSBmcm9tIFwiLi4vLi4vc3RhdGlzdGljcy9tb2RlbHMvSVN0YXRpc3RpY0ZvckF0dGVuZGVlTWFuYWdlckFuZEluc3RydWN0b3JFbnRyeVwiO1xyXG5pbXBvcnQge0lTdGF0aXN0aWNGb3JBdHRlbmRlZU1hbmFnZXJBbmRJbnN0cnVjdG9yUGVyaW9kfSBmcm9tIFwiLi4vLi4vc3RhdGlzdGljcy9tb2RlbHMvSVN0YXRpc3RpY0ZvckF0dGVuZGVlTWFuYWdlckFuZEluc3RydWN0b3JQZXJpb2RcIjtcclxuaW1wb3J0IHtJbnRyb1NlcnZpY2V9IGZyb20gXCIuLi8uLi9pbmZvL0ludHJvU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhvbWVJbnN0cnVjdG9yUmVwb3J0c0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJob21lLkhvbWVJbnN0cnVjdG9yUmVwb3J0c0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpc3RpYzogSVN0YXRpc3RpY0ZvckF0dGVuZGVlTWFuYWdlckFuZEluc3RydWN0b3JFbnRyeTtcclxuICAgIHByaXZhdGUgZGFpbHlTdGF0aXN0aWM6IElTdGF0aXN0aWNGb3JBdHRlbmRlZU1hbmFnZXJBbmRJbnN0cnVjdG9yUGVyaW9kO1xyXG4gICAgcHJpdmF0ZSB3ZWVrbHlTdGF0aXN0aWM6IElTdGF0aXN0aWNGb3JBdHRlbmRlZU1hbmFnZXJBbmRJbnN0cnVjdG9yUGVyaW9kO1xyXG4gICAgcHJpdmF0ZSBtb250aGx5U3RhdGlzdGljOiBJU3RhdGlzdGljRm9yQXR0ZW5kZWVNYW5hZ2VyQW5kSW5zdHJ1Y3RvclBlcmlvZDtcclxuICAgIHByaXZhdGUgY3VycmVudE1vbnRoOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGN1cnJlbnRZZWFyOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgSW50cm9TZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0aXN0aWNSZXBvcnRzU2VydmljZTogU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UsIHByaXZhdGUgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkhPTUVfSU5TVFJVQ1RPUl9SRVBPUlRTX0tFWSk7XHJcbiAgICAgICAgc3RhdGlzdGljUmVwb3J0c1NlcnZpY2UuZ2V0SW5mb0Zvckluc3RydWN0b3IoKS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGlzdGljID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5kYWlseVN0YXRpc3RpYyAgPSB0aGlzLnN0YXRpc3RpYy5zdGF0aXN0aWNQZXJpb2RzLmZpbHRlcihwID0+IHAucGVyaW9kVHlwZSA9PT0gXCJEQVlcIilbMF07XHJcbiAgICAgICAgICAgIHRoaXMud2Vla2x5U3RhdGlzdGljID0gdGhpcy5zdGF0aXN0aWMuc3RhdGlzdGljUGVyaW9kcy5maWx0ZXIocCA9PiBwLnBlcmlvZFR5cGUgPT09IFwiV0VFS1wiKVswXTtcclxuICAgICAgICAgICAgdGhpcy5tb250aGx5U3RhdGlzdGljID0gdGhpcy5zdGF0aXN0aWMuc3RhdGlzdGljUGVyaW9kcy5maWx0ZXIocCA9PiBwLnBlcmlvZFR5cGUgPT09IFwiTU9OVEhcIilbMF07XHJcbiAgICAgICAgICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKHRoaXMubW9udGhseVN0YXRpc3RpYy5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNb250aCA9IHRvZGF5LnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwgeyBtb250aDogJ2xvbmcnIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRZZWFyID0gdG9kYXkuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FsY0hvdXJzKHRpbWVJbk1pbnV0ZXM6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRpbWVJbk1pbnV0ZXMgLyA2MCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbGNNaW51dGVzUmVtYWluZGVyKHRpbWVJbk1pbnV0ZXM6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aW1lSW5NaW51dGVzICUgNjA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0SW50cm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb1NlcnZpY2Uuc3RhcnRJbnN0cnVjdG9ySG9tZVBhZ2VJbnRybygpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iLCJpbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlLCBJQ291cnNlV2l0aFByb2dyZXNzfSBmcm9tIFwiLi4vLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi8uLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi8uLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtSZXNpemVWaWV3U2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1Jlc2l6ZVZpZXdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvdXJzZXMvQ291cnNlU2VydmljZVwiO1xyXG5pbXBvcnQge1Byb2dyZXNzU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvdXJzZXMvUHJvZ3Jlc3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi8uLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge0lDb3Vyc2VTZWN0aW9uUHJvZ3Jlc3NFbnRyeX0gZnJvbSBcIi4uLy4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VTZWN0aW9uUHJvZ3Jlc3NFbnRyeVwiO1xyXG5pbXBvcnQge1BlcnNvbmFsU2VydmljZX0gZnJvbSBcIi4uLy4uL3BlcnNvbmFsL1BlcnNvbmFsU2VydmljZVwiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge0ludHJvU2VydmljZX0gZnJvbSBcIi4uLy4uL2luZm8vSW50cm9TZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uSG9tZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21tb24vQ29tbW9uSG9tZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VQcm9ncmVzc1N0YXR1c30gZnJvbSBcIi4uLy4uL2NvdXJzZXMvbW9kZWxzL0NvdXJzZVByb2dyZXNzU3RhdHVzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSG9tZUNvdXJzZXNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaG9tZS5Ib21lQ291cnNlc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG4gICAgcHVibGljIHJlc2l6ZVZpZXdTZXJ2aWNlOiBSZXNpemVWaWV3U2VydmljZTtcclxuICAgIHB1YmxpYyBjb3Vyc2VzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElDb3Vyc2VXaXRoUHJvZ3Jlc3M+O1xyXG4gICAgcHVibGljIHJvd1Nob3c6IE1hcDxudW1iZXIsIGJvb2xlYW4+ID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb3Vyc2VzOiBNYXA8bnVtYmVyLCBJQ291cnNlPiA9IG5ldyBNYXA8bnVtYmVyLCBJQ291cnNlPigpO1xyXG4gICAgcHVibGljIGlzQ291cnNlc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGN1cnJlbnRNZW51SXRlbUtleTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBjdXJyZW50TWVudUl0ZW1OYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIHB1YmxpYyBjb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3RvcmFnZUZpbHRlclZhbHVlczogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzaG93RXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvdXJzZXNVcmw6IHN0cmluZyA9IFwiL2FwaS9jb3Vyc2VzL3NlYXJjaFwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUHJvZ3Jlc3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb21tb25GaWx0ZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgSW50cm9TZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uSG9tZVNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHByb2dyZXNzU2VydmljZTogUHJvZ3Jlc3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc0FwaTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsU2VydmljZTogUGVyc29uYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkhvbWVTZXJ2aWNlOiBDb21tb25Ib21lU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5IT01FX0NPVVJTRVNfS0VZKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRJbnRybygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmludHJvU2VydmljZS5zdGFydExlYXJuZXJIb21lUGFnZUludHJvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTdG9yYWdlRmlsdGVycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0RmlsdGVyVmFsdWVzKEhvbWVDb3Vyc2VzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmFwcGx5U3RvcmFnZUZpbHRlcih0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMsXHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0U2VhcmNoSW5wdXQoSG9tZUNvdXJzZXNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLm9wZW5TZWFyY2hJbnB1dCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdG9wU3RhdHVzID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldFRvcFN0YXR1cyhIb21lQ291cnNlc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgaWYodG9wU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUb3BTdGF0dXModG9wU3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0TG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLmlzQ291cnNlc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY291cnNlcyA9IG5ldyBNYXA8bnVtYmVyLCBJQ291cnNlPigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmRMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5lbnRyaWVzXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKGNvdXJzZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZXMuc2V0KGNvdXJzZS5pZCwgY291cnNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pc0NvdXJzZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jb3Vyc2VzLmdldChjb3Vyc2VJZCkucGVybWlzc2lvbnMudmlldykge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwoY291cnNlSWQpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIllvdSBhcmUgbm90IGdyYW50ZWQgcGVybWlzc2lvbiB0byB2aWV3IHRoaXMgY291cnNlXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1c2VyO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy51c2VyUHJvZmlsZSA/XHJcbiAgICAgICAgICAgICAgICBOdW1iZXIodGhpcy51c2VyUHJvZmlsZS5wYWdlVmlld01vZGUpIDogMTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2Uub2xkVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJQYWdlVmlld01vZGUoQm9vbGVhbih2aWV3VHlwZSkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy52aWV3VHlwZSA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVVc2VyUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvd25sb2FkQ291cnNlVHJhbnNjcmlwdFJlcG9ydChjb3Vyc2VJZDogbnVtYmVyLCBjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGFyYW1ldGVyczogYW55ID0ge1xyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlclByb2ZpbGUuaWQsXHJcbiAgICAgICAgICAgIGNvdXJzZUlkOiBjb3Vyc2VJZCxcclxuICAgICAgICAgICAgY291cnNlUHJvZ3Jlc3NJZDogY291cnNlUHJvZ3Jlc3NJZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UuZG93bmxvYWRDb3Vyc2VUcmFuc2NyaXB0UmVwb3J0KHBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cub3BlbihyZXN1bHQpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb3dubG9hZEdlbmVyYWxUcmFuc2NyaXB0UmVwb3J0KCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBwYXJhbWV0ZXJzOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VyUHJvZmlsZS5pZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc1NlcnZpY2UuZG93bmxvYWRHZW5lcmFsVHJhbnNjcmlwdFJlcG9ydChwYXJhbWV0ZXJzKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4ocmVzdWx0KVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0ZpbHRlckRpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2hvd0ZpbHRlckRpYWxvZyh3aW5kb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRvZG86IHJlbW92ZSBkdXBsaWNhdGVkXHJcbiAgICBwdWJsaWMgdXBkYXRlVG9wU3RhdHVzKHN0YXR1czogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hcHBseVRvcFN0YXR1cyhzdGF0dXMpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlVG9wU3RhdHVzKEhvbWVDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCBzdGF0dXMpO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGx5VG9wU3RhdHVzKHN0YXR1czogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSAnQUxMJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlU3RhdHVzID0gXCJOT1RfU1RBUlRFRCxTVEFSVEVELENPTVBMRVRFRFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ05PVF9TVEFSVEVEJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuY291cnNlU3RhdHVzID0gXCJOT1RfU1RBUlRFRFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1NUQVJURUQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VTdGF0dXMgPSBcIlNUQVJURURcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdDT01QTEVURUQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VTdGF0dXMgPSBcIkNPTVBMRVRFRFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBY3RpdmVTdGF0dXNOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLmNvdXJzZVN0YXR1cykge1xyXG4gICAgICAgICAgICBjYXNlICdOT1RfU1RBUlRFRCxTVEFSVEVELENPTVBMRVRFRCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJBbGxcIjtcclxuICAgICAgICAgICAgY2FzZSAnTk9UX1NUQVJURUQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiTmV3XCI7XHJcbiAgICAgICAgICAgIGNhc2UgJ1NUQVJURUQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiSW4tUHJvZ3Jlc3NcIjtcclxuICAgICAgICAgICAgY2FzZSAnQ09NUExFVEVEJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIkNvbXBsZXRlZFwiO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdBbGwnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRmlsdGVyKHR5cGU6IHN0cmluZywgcmVmZXJlbmNlT2JqZWN0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb3VudEFjdGl2ZUluY3JlbWVudCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS51cGRhdGVHZW5lcmFsRmlsdGVyKHR5cGUsIHJlZmVyZW5jZU9iamVjdCwgSG9tZUNvdXJzZXNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgKz0gY291bnRBY3RpdmVJbmNyZW1lbnQ7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsZWFyRmlsdGVyKEhvbWVDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCB0aGlzLmNvdXJzZXNHcmlkTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hLZXlQcmVzcygpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2F2ZVNlYXJjaElucHV0KEhvbWVDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCB0aGlzLnNlYXJjaElucHV0KTtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbG9zZVNlYXJjaElucHV0KEhvbWVDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCB3aW5kb3cpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hJbnB1dCB8fCB0aGlzLnNlYXJjaElucHV0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvd25sb2FkQ2VydGlmaWNhdGUoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZCA6bnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFVzZXJDZXJ0aWZpY2F0ZXMoY291cnNlSWQsIGNvdXJzZVByb2dyZXNzSWQpLnRoZW4oY2VydGlmaWNhdGVzID0+IHtcclxuICAgICAgICAgICAgaWYoISFjZXJ0aWZpY2F0ZXMgJiYgY2VydGlmaWNhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNlcnQgb2YgY2VydGlmaWNhdGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UuZG93bmxvYWRDZXJ0aWZpY2F0ZShjZXJ0LmNlcnRpZmljYXRlSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLiR3aW5kb3cub3BlbihyZXN1bHQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUdyaWQoKSB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzVXJsID0gdGhpcy5zaG93RXhwaXJlZFxyXG4gICAgICAgICAgICA/IFwiL2FwaS9jb3Vyc2VzL3NlYXJjaC9ob21lL2xlYXJuZXIvbXlQcm9ncmVzcy9leHBpcmVkXCJcclxuICAgICAgICAgICAgOiBcIi9hcGkvY291cnNlcy9zZWFyY2gvaG9tZS9sZWFybmVyL215UHJvZ3Jlc3NcIlxyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2UgPSBuZXcgUmVzaXplVmlld1NlcnZpY2UodGhpcy52aWV3VHlwZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHdpbmRvd0VsZW1lbnQ6IGFueSA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG4gICAgICAgIHdpbmRvd0VsZW1lbnQuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHdpbmRvd0VsZW1lbnQudW5iaW5kKCdyZXNpemUnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUNvdXJzZVdpdGhQcm9ncmVzcz4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZSh0aGlzLmNvdXJzZXNVcmwpKSk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5jb3Vyc2VTdGF0dXMgPSBcIk5PVF9TVEFSVEVELFNUQVJURUQsQ09NUExFVEVELEVYUElSRURcIjtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRTdG9yYWdlRmlsdGVycygpO1xyXG5cclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxODAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGUuaWQsIGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2hvcnRDb3Vyc2VOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIG5hbWUubGVuZ3RoID4gNDAgPyBuYW1lLnN1YnN0cmluZygwLCA0MCkgKyAnLi4uJyA6IG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNob3J0U3VtbWFyeShvcmlnaW5hbFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RyaW5nICE9IHVuZGVmaW5lZCAmJiBvcmlnaW5hbFN0cmluZy5sZW5ndGggPiAyNTZcclxuICAgICAgICAgICAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHJpbmcoMCwgMjU2KSArICcuLi4nXHJcbiAgICAgICAgICAgIDogb3JpZ2luYWxTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtRdWl6emVzUm91dGVyfSBmcm9tIFwiLi4vLi4vdXJscy9RdWl6emVzUm91dGVyXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uLy4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q3VzdG9tQnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYnJhbmRpbmcvQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtRdWl6VHlwZX0gZnJvbSBcIi4uLy4uL3F1aXp6ZXMvbW9kZWxzL1F1aXpUeXBlXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0lRdWl6fSBmcm9tIFwiLi4vLi4vcXVpenplcy9tb2RlbHMvSVF1aXpcIjtcclxuaW1wb3J0IHtSZXNpemVWaWV3U2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1Jlc2l6ZVZpZXdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLi8uLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJSb2xlfSBmcm9tIFwiLi4vLi4vdXNlcnMvbW9kZWxzL1VzZXJSb2xlXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaW5mby9JbnRyb1NlcnZpY2VcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbW9kZWxzL0V2ZW50XCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi8uLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lRmxhc2hjYXJkc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJob21lLkhvbWVGbGFzaGNhcmRzQ29udHJvbGxlclwiO1xyXG4gICAgcHVibGljIGN1cnJlbnRNZW51SXRlbUtleTogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHB1YmxpYyByb3dTaG93OiBNYXA8bnVtYmVyLCBib29sZWFuPiA9IG5ldyBNYXA8bnVtYmVyLCBib29sZWFuPigpO1xyXG4gICAgcHVibGljIHF1aXp6ZXNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SVF1aXo+O1xyXG4gICAgcHVibGljIHJlc2l6ZVZpZXdTZXJ2aWNlOiBSZXNpemVWaWV3U2VydmljZTtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyB3aW5kb3c6IGFueTtcclxuICAgIHB1YmxpYyBxdWl6VHlwZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHR5cGUgPSBbXHJcbiAgICAgICAgUXVpelR5cGVbUXVpelR5cGUuUVVJWl0sXHJcbiAgICAgICAgUXVpelR5cGVbUXVpelR5cGUuU1VSVkVZXSxcclxuICAgICAgICBRdWl6VHlwZVtRdWl6VHlwZS5GTEFTSENBUkRdXHJcbiAgICBdO1xyXG4gICAgcHVibGljIG93bmVyOiBJU2VsZWN0YWJsZVtdID0gW107XHJcblxyXG4gICAgcHVibGljIGNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgUXVpenplc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBJbnRyb1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHF1aXp6ZXNSb3V0ZXI6IFF1aXp6ZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY29tbW9uRmlsdGVyU2VydmljZTogQ29tbW9uRmlsdGVyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkhPTUVfRkxBU0hDQVJEU19LRVkpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1lbnVJdGVtS2V5ID0gTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHF1aXp6ZXNVcmwgPSBcIi9hcGkvcXVpenplcy9cIiArIFF1aXpUeXBlW1F1aXpUeXBlLkZMQVNIQ0FSRF07XHJcbiAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVF1aXo+KCRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKHF1aXp6ZXNVcmwpKSk7XHJcbiAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxMjAwKXtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZSA9IG5ldyBSZXNpemVWaWV3U2VydmljZSh0aGlzLnZpZXdUeXBlKTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cgPSBhbmd1bGFyLmVsZW1lbnQodGhpcy4kd2luZG93KTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZih3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwubG9hZFBhZ2UgKDApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5sb2FkUGFnZSAoMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMucmVzaXplVmlld1NlcnZpY2Uuc2V0UmVzaXplVmlld1R5cGUodGhpcy52aWV3VHlwZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJcIik7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvdy51bmJpbmQoJ3Jlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiZGVzdHJveVwiKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRPd25lcnNVcmwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdXNlcjtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMudXNlclByb2ZpbGUgP1xyXG4gICAgICAgICAgICAgICAgTnVtYmVyKHRoaXMudXNlclByb2ZpbGUucGFnZVZpZXdNb2RlKSA6IDE7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRJbnRybygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmludHJvU2VydmljZS5zdGFydEF1dGhvckhvbWVQYWdlSW50cm8oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KHBhcmFtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKSk7XHJcbiAgICAgICAgaWYgKHBhcmFtID09IFwiZGVzdHJveVwiKSB7XHJcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0gPT0gXCJcIikge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW0uaGFzQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXJ0TG9hZGluZygpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kTG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKChxdWl6OiBJUXVpeikgPT4ge1xyXG4gICAgICAgICAgICBxdWl6LnN1YmplY3ROYW1lQW5kVGl0bGUgPSBxdWl6LnN1YmplY3ROYW1lICsgXCIvXCIgKyBxdWl6LnRpdGxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhpbmRleDogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpIHtcclxuICAgICAgICBpZihrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaW5kZXgsICF0aGlzLnJvd1Nob3cuZ2V0KGluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hRdWl6KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFF1aXpEZXRhaWxzKHF1aXpJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucXVpenplc1JvdXRlci5mbGFzaGNhcmRzRGV0YWlsc1VybChxdWl6SWQpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHNldFZpZXdUeXBlKHZpZXdUeXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZS5vbGRWaWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVXNlclBhZ2VWaWV3TW9kZShCb29sZWFuKHZpZXdUeXBlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVVc2VyUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE93bmVyc1VybCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldE93bmVyc1VybCgpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHRoaXMub3duZXIgPSByZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEtleVByZXNzKCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlU2VhcmNoSW5wdXQoSG9tZUZsYXNoY2FyZHNDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsb3NlU2VhcmNoSW5wdXQoSG9tZUZsYXNoY2FyZHNDb250cm9sbGVyLk5BTUUsIHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0ZpbHRlckRpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2hvd0ZpbHRlckRpYWxvZyh3aW5kb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVGaWx0ZXIodHlwZTogc3RyaW5nLCByZWZlcmVuY2VPYmplY3Q6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgKz0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnVwZGF0ZUdlbmVyYWxGaWx0ZXIodHlwZSwgcmVmZXJlbmNlT2JqZWN0LCBIb21lRmxhc2hjYXJkc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbGVhckZpbHRlcihIb21lRmxhc2hjYXJkc0NvbnRyb2xsZXIuTkFNRSwgdGhpcy5xdWl6emVzR3JpZE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNb2JpbGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2ODtcclxuICAgIH1cclxuXHJcbiAgICAvL3RvZG8gaW1wb3J0IGZsYXNoY2FyZFxyXG4gICAgcHVibGljIGltcG9ydFF1aXooKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRicm9hZGNhc3QoRXZlbnQuUVVJWl9TVVJWRVlfSU1QT1JUX1VQREFURSk7XHJcbiAgICAgICAgJChcIiNpbXBvcnRRdWl6VGVtcGxhdGVcIikubW9kYWwoXCJ0b2dnbGVcIik7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uLy4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uLy4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7SU1lbnVHcm91cH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvUGVyc29uYWxNZW51RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoc1JvdXRlcn0gZnJvbSBcIi4uLy4uL3VybHMvTGVhcm5pbmdQYXRoc1JvdXRlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFNlcnZpY2V9IGZyb20gXCIuLi8uLi9sZWFybmluZ1BhdGhzL0xlYXJuaW5nUGF0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoQ291cnNlfSBmcm9tIFwiLi4vLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aENvdXJzZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGV9IGZyb20gXCIuLi8uLi9sZWFybmluZ1BhdGhzL21vZGVscy9MZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlXCI7XHJcbmltcG9ydCB7Q291cnNlUHJvZ3Jlc3NTdGF0dXN9IGZyb20gXCIuLi8uLi9jb3Vyc2VzL21vZGVscy9Db3Vyc2VQcm9ncmVzc1N0YXR1c1wiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGgsIElMZWFybmluZ1BhdGhXaXRoUHJvZ3Jlc3N9IGZyb20gXCIuLi8uLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9sZWFybmluZ1BhdGhzL0xlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZVwiO1xyXG5pbXBvcnQgcGFyc2VJbnQgPSBrZW5kby5wYXJzZUludDtcclxuaW1wb3J0IHtDb21tb25Ib21lU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25Ib21lU2VydmljZVwiO1xyXG5pbXBvcnQge1BlcnNvbmFsU2VydmljZX0gZnJvbSBcIi4uLy4uL3BlcnNvbmFsL1BlcnNvbmFsU2VydmljZVwiO1xyXG5pbXBvcnQge0ludHJvU2VydmljZX0gZnJvbSBcIi4uLy4uL2luZm8vSW50cm9TZXJ2aWNlXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5kZWNsYXJlIHZhciAkOiBhbnk7XHJcblxyXG5leHBvcnQgY2xhc3MgSG9tZUxlYXJuaW5nUGF0aHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaG9tZS5Ib21lTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTGVhcm5pbmdQYXRoV2l0aFByb2dyZXNzPjtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaG9tZU1lbnVCeVBlcm1pc3Npb246IElNZW51R3JvdXA7XHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVJdGVtS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIGN1cnJlbnRNZW51SXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG4gICAgcHVibGljIHN0YXJ0V2luZG93V2lkdGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBvbGRTZWFyY2hWaWV3VHlwZTogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBub3RTdGFydGVkU3RhdHVzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBpblByb2dyZXNzU3RhdHVzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBjb21wbGV0ZWRTdGF0dXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHZpbHRBdXRvUmVnaXN0ZXJSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhTdGF0dXMgPSBcIk5PVF9TVEFSVEVELFNUQVJURUQsQ09NUExFVEVEXCI7XHJcblxyXG4gICAgcHVibGljIHN0b3JhZ2VGaWx0ZXJWYWx1ZXM6IGFueTtcclxuICAgIHByaXZhdGUgaXNTaG93QWxsQ2FyZHM6IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBpc0luaXRTbGljayA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzaG93RXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aHNVcmw6IHN0cmluZyA9IFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaFwiO1xyXG4gICAgcHVibGljIGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlO1xyXG4gICAgcHVibGljIGlzQ29uZmlybWVkTGVhcm5pbmdQYXRoczogbnVtYmVyW10gPSBbXTtcclxuICAgIHB1YmxpYyBpc0Rpc2FibGVDb25maXJtUHJvZ3Jlc3NCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIENvbW1vbkhvbWVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uRmlsdGVyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcnNvbmFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEludHJvU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoU2VydmljZTogTGVhcm5pbmdQYXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkhvbWVTZXJ2aWNlOiBDb21tb25Ib21lU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlOiBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY29tbW9uRmlsdGVyU2VydmljZTogQ29tbW9uRmlsdGVyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkhPTUVfTEVBUk5JTkdfUEFUSF9LRVkpO1xyXG5cclxuICAgICAgICB0aGlzLmh0dHAgPSAkaHR0cDtcclxuXHJcbiAgICAgICAgdGhpcy52aWx0QXV0b1JlZ2lzdGVyUmVxdWlyZWQgPSAkbG9jYXRpb24uc2VhcmNoKClbQ291cnNlc1JvdXRlci5WSUxUX1NFU1NJT05TX0FVVE9fUkVHSVNURVJfUkVRVUlSRURdIHx8IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZpbHRBdXRvUmVnaXN0ZXJSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSArIFwiIy9ob21lL2xlYXJuaW5nUGF0aHM/cm9sZT1MRUFSTkVSXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh1cmwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJHb29kIG5ld3MhIFlvdSBhbHJlYWR5IGhhdmUgYW4gYWNjZXNzLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ291cnNlIGFscmVhZHkgYXZhaWxhYmxlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xyXG5cclxuICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiXCIpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3cudW5iaW5kKCdyZXNpemUnKTtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcImRlc3Ryb3lcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdXNlcjtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMudXNlclByb2ZpbGUgP1xyXG4gICAgICAgICAgICAgICAgTnVtYmVyKHRoaXMudXNlclByb2ZpbGUucGFnZVZpZXdNb2RlKSA6IDE7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRJbnRybygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmludHJvU2VydmljZS5zdGFydExlYXJuZXJIb21lUGFnZUludHJvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTdG9yYWdlRmlsdGVycyhpc0luaXQ/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlRmlsdGVyVmFsdWVzID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldEZpbHRlclZhbHVlcyhIb21lTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5hcHBseVN0b3JhZ2VGaWx0ZXIodGhpcy5zdG9yYWdlRmlsdGVyVmFsdWVzLFxyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0U2VhcmNoSW5wdXQoSG9tZUxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLm9wZW5TZWFyY2hJbnB1dCgpO1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdG9wU3RhdHVzID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldFRvcFN0YXR1cyhIb21lTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgaWYodG9wU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUb3BTdGF0dXModG9wU3RhdHVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaXNJbml0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0TG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLmlzSW5pdFNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aHNMb2FkZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kTG9hZGluZygpIHtcclxuICAgICAgICBjb25zdCBscEFycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmVudHJpZXNcclxuICAgICAgICAgICAgLmZvckVhY2gobGVhcm5pbmdQYXRoID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChsZWFybmluZ1BhdGgucHJvZ3Jlc3NTdGF0dXMgPT09IFwiTk9UX1NUQVJURURcIiB8fCBsZWFybmluZ1BhdGgubGVhcm5pbmdQYXRoUHJvZ3Jlc3NFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxwQXJyYXkucHVzaChhbmd1bGFyLmNvcHkobGVhcm5pbmdQYXRoKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHByb2dyZXNzIG9mIGxlYXJuaW5nUGF0aC5sZWFybmluZ1BhdGhQcm9ncmVzc0VudHJpZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdXJzZUNvcHkgPSBhbmd1bGFyLmNvcHkobGVhcm5pbmdQYXRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VDb3B5LmxlYXJuaW5nUGF0aFByb2dyZXNzSWQgPSBwcm9ncmVzcy5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZUNvcHkucHJvZ3Jlc3NTdGF0dXMgPSBwcm9ncmVzcy5zdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VDb3B5LnByb2dyZXNzU3RhcnREYXRlID0gcHJvZ3Jlc3Muc3RhcnREYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlQ29weS5wcm9ncmVzc0NvbXBsZXRlZERhdGUgPSBwcm9ncmVzcy5jb21wbGV0aW9uRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZUNvcHkucHJvZ3Jlc3NTdGF0dXMgPSBcIk5PVF9TVEFSVEVSXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbHBBcnJheS5wdXNoKGNvdXJzZUNvcHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmVudHJpZXMgPSBscEFycmF5O1xyXG5cclxuICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGljaygpLCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkocGFyYW06IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBlbGVtID0gYW5ndWxhci5lbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpKTtcclxuICAgICAgICBpZiAocGFyYW0gPT0gXCJkZXN0cm95XCIpIHtcclxuICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbS5oYXNDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIikpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVXNlclBhZ2VWaWV3TW9kZShCb29sZWFuKHZpZXdUeXBlKSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZXdUeXBlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwucGFnZVNpemUgPSA0O1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVXNlclBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkTGVhcm5pbmdQYXRoKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLmRldGFpbHNVcmwobGVhcm5pbmdQYXRoSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZENvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kZXRhaWxzVXJsKGNvdXJzZUlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRmlsdGVyQ2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLlwiICsga2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuXCIgKyBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLmxhbmd1YWdlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc291cmNlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLm5vdFN0YXJ0ZWRTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5Qcm9ncmVzc1N0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZWRTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzID0gdGhpcy5nZXRDb3Vyc2VTdGF0dXNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhTdGF0dXMgPSBcIk5PVF9TVEFSVEVELFNUQVJURUQsQ09NUExFVEVEXCI7XHJcblxyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci52aWV3VHlwZVwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zdWJqZWN0SWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIubGFuZ3VhZ2VJZFwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zb3VyY2VJZFwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5sZWFybmluZ1BhdGhTdGF0dXNcIik7XHJcblxyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFNlYXJjaCgpIHtcclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIudmlld1R5cGVcIikpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy52aWV3VHlwZSA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnZpZXdUeXBlXCIpKTtcclxuICAgICAgICAvLyAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZSA9IHRoaXMudmlld1R5cGUgPT09IDAgPyAwIDogbnVsbDtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnNvdXJjZUlkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc291cmNlSWQgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zb3VyY2VJZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q291cnNlU3RhdHVzTGlzdCgpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgbGV0IHN0YXR1c0xpc3QgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5ub3RTdGFydGVkU3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHN0YXR1c0xpc3QucHVzaCgnTk9UX1NUQVJURUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaW5Qcm9ncmVzc1N0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBzdGF0dXNMaXN0LnB1c2goJ1NUQVJURUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGVkU3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHN0YXR1c0xpc3QucHVzaCgnQ09NUExFVEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdGF0dXNMaXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb21wbGV0ZWRNYW5kYXRvcnlDb3Vyc2VzKGNvdXJzZXNCeUxQOiBJTGVhcm5pbmdQYXRoQ291cnNlW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjb3VudENvbXBsZXRlZENvdXJzZXMgPSAwO1xyXG4gICAgICAgIGxldCBjb3VudE1hbmRhdG9yeUNvdXJzZXMgPSAwO1xyXG5cclxuICAgICAgICBpZiAoISFjb3Vyc2VzQnlMUCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvdXJzZSBvZiBjb3Vyc2VzQnlMUCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VJbmNsdXNpb25UeXBlID09PSBMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlW0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGUuTUFOREFUT1JZXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuUkVTRVRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5FWFBJUkVEXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCBjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudENvbXBsZXRlZENvdXJzZXMrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRNYW5kYXRvcnlDb3Vyc2VzKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvdW50Q29tcGxldGVkQ291cnNlcyArICcgb2YgJyArIGNvdW50TWFuZGF0b3J5Q291cnNlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcGxldGVkRWxlY3RpdmVDb3Vyc2VzKGNvdXJzZXNCeUxQOiBJTGVhcm5pbmdQYXRoQ291cnNlW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjb3VudENvbXBsZXRlZENvdXJzZXMgPSAwO1xyXG4gICAgICAgIGxldCBjb3VudE1hbmRhdG9yeUNvdXJzZXMgPSAwO1xyXG5cclxuICAgICAgICBpZiAoISFjb3Vyc2VzQnlMUCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvdXJzZSBvZiBjb3Vyc2VzQnlMUCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VJbmNsdXNpb25UeXBlID09PSBMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlW0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGUuRUxFQ1RJVkVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5SRVNFVF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzID09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLkVYUElSRURdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5DT01QTEVURURdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Q29tcGxldGVkQ291cnNlcysrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3VudE1hbmRhdG9yeUNvdXJzZXMrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY291bnRDb21wbGV0ZWRDb3Vyc2VzICsgJyBvZiAnICsgY291bnRNYW5kYXRvcnlDb3Vyc2VzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25maXJtUHJvZ3Jlc3MobGVhcm5pbmdQYXRoSWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZUNvbmZpcm1Qcm9ncmVzc0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UuY29uZmlybUxlYXJuaW5nUGF0aFByb2dyZXNzKGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTGVhcm5pbmcgUGF0aCBwcm9ncmVzcyBoYXMgYmVlbiByZWNhbGN1bGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ29uZmlybWVkTGVhcm5pbmdQYXRocy5wdXNoKGxlYXJuaW5nUGF0aElkKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVDb25maXJtUHJvZ3Jlc3NCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dGaWx0ZXJEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNob3dGaWx0ZXJEaWFsb2cod2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0b2RvOiByZW1vdmUgZHVwbGljYXRlZFxyXG4gICAgcHVibGljIHVwZGF0ZVRvcFN0YXR1cyhzdGF0dXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYXBwbHlUb3BTdGF0dXMoc3RhdHVzKTtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2F2ZVRvcFN0YXR1cyhIb21lTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSwgc3RhdHVzKTtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5VG9wU3RhdHVzKHN0YXR1czogc3RyaW5nKSB7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSAnQUxMJzpcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzID0gXCJOT1RfU1RBUlRFRCxTVEFSVEVELENPTVBMRVRFRFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhTdGF0dXMgPSBcIk5PVF9TVEFSVEVELFNUQVJURUQsQ09NUExFVEVEXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnTk9UX1NUQVJURUQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5sZWFybmluZ1BhdGhTdGF0dXMgPSBcIk5PVF9TVEFSVEVEXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFN0YXR1cyA9IFwiTk9UX1NUQVJURURcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdTVEFSVEVEJzpcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzID0gXCJTVEFSVEVEXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFN0YXR1cyA9IFwiU1RBUlRFRFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0NPTVBMRVRFRCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLmxlYXJuaW5nUGF0aFN0YXR1cyA9IFwiQ09NUExFVEVEXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFN0YXR1cyA9IFwiQ09NUExFVEVEXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFjdGl2ZVN0YXR1c05hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzKSB7XHJcbiAgICAgICAgY2FzZSAnTk9UX1NUQVJURUQsU1RBUlRFRCxDT01QTEVURUQnOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJBbGxcIjtcclxuICAgICAgICBjYXNlICdOT1RfU1RBUlRFRCc6XHJcbiAgICAgICAgICAgIHJldHVybiBcIk5ld1wiO1xyXG4gICAgICAgIGNhc2UgJ1NUQVJURUQnOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJJbi1Qcm9ncmVzc1wiO1xyXG4gICAgICAgIGNhc2UgJ0NPTVBMRVRFRCc6XHJcbiAgICAgICAgICAgIHJldHVybiBcIkNvbXBsZXRlZFwiO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAnQWxsJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUZpbHRlcih0eXBlOiBzdHJpbmcsIHJlZmVyZW5jZU9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY291bnRBY3RpdmVJbmNyZW1lbnQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UudXBkYXRlR2VuZXJhbEZpbHRlcih0eXBlLCByZWZlcmVuY2VPYmplY3QsXHJcbiAgICAgICAgICAgIEhvbWVMZWFybmluZ1BhdGhzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyICs9IGNvdW50QWN0aXZlSW5jcmVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xlYXJGaWx0ZXIoSG9tZUxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEtleVByZXNzKCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlU2VhcmNoSW5wdXQoSG9tZUxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsb3NlU2VhcmNoSW5wdXQoSG9tZUxlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzbGljayBscFxyXG4gICAgcHVibGljIGluaXRpYWxpemVTbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzSW5pdFNsaWNrID0gdGhpcy5jb21tb25Ib21lU2VydmljZS5pbml0aWFsaXplU2xpY2sodGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0FsbExQKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzU2hvd0FsbENhcmRzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbW1vbkhvbWVTZXJ2aWNlLnNob3dBbGxMUChsZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKT0+dGhpcy5zZXRQb3B1cENsYXNzZXMoKSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGlkZUFsbExQKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzU2hvd0FsbENhcmRzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb21tb25Ib21lU2VydmljZS5oaWRlQWxsTFAobGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PnRoaXMuc2V0UG9wdXBDbGFzc2VzKCksIDUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5DYXJkKGluZGV4UGxhbkxwOiBudW1iZXIsIGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkhvbWVTZXJ2aWNlLm9wZW5DYXJkKGluZGV4UGxhbkxwLCBsZWFybmluZ1BhdGhJZCwgdGhpcy5pc1Nob3dBbGxDYXJkcyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBkb3dubG9hZFVzZXJDZXJ0aWZpY2F0ZXMobGVhcm5pbmdQYXRoSWQ6IG51bWJlciwgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYoIWxlYXJuaW5nUGF0aFByb2dyZXNzSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFNlcnZpY2UuZ2V0VXNlckNlcnRpZmljYXRlcyhsZWFybmluZ1BhdGhJZCwgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgLnRoZW4oY2VydGlmaWNhdGVzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKCEhY2VydGlmaWNhdGVzICYmIGNlcnRpZmljYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2VydGlmaWNhdGUgb2YgY2VydGlmaWNhdGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uYWxTZXJ2aWNlLmRvd25sb2FkQ2VydGlmaWNhdGUoY2VydGlmaWNhdGUuY2VydGlmaWNhdGVJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLiR3aW5kb3cub3BlbihyZXN1bHQpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVHcmlkKCkge1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc1VybCA9ICF0aGlzLnNob3dFeHBpcmVkXHJcbiAgICAgICAgICAgID8gXCIvYXBpL2xlYXJuaW5nUGF0aHMvc2VhcmNoL2xlYXJuZXIvbXlQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgIDogXCIvYXBpL2xlYXJuaW5nUGF0aHMvc2VhcmNoL2xlYXJuZXIvbXlQcm9ncmVzcy9leHBpcmVkXCJcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJTGVhcm5pbmdQYXRoV2l0aFByb2dyZXNzPih0aGlzLmh0dHAsIHRoaXMudXJsLnNlcnZpY2UodGhpcy5sZWFybmluZ1BhdGhzVXJsKSkpO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzID0gXCJOT1RfU1RBUlRFRCxTVEFSVEVELENPTVBMRVRFRFwiO1xyXG4gICAgICAgIHRoaXMuZ2V0U3RvcmFnZUZpbHRlcnModHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDQ7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbGRTZWFyY2hWaWV3VHlwZSA9IHRoaXMudmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy53aW5kb3cgPSBhbmd1bGFyLmVsZW1lbnQodGhpcy4kd2luZG93KTtcclxuICAgICAgICBpZiAodGhpcy53aW5kb3cuaW5uZXJXaWR0aCA8IDk5Mikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V2luZG93V2lkdGggPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRXaW5kb3dXaWR0aCA9IDEwMDAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA5OTIgJiYgd2luZG93LmlubmVyV2lkdGggPCB0aGlzLnN0YXJ0V2luZG93V2lkdGggJiYgIXRoaXMudmlld1R5cGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2xkU2VhcmNoVmlld1R5cGUgPSB0aGlzLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFdpbmRvd1dpZHRoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+PSA5OTIgJiYgd2luZG93LmlubmVyV2lkdGggPiB0aGlzLnN0YXJ0V2luZG93V2lkdGggJiYgIXRoaXMub2xkU2VhcmNoVmlld1R5cGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLm9sZFNlYXJjaFZpZXdUeXBlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFdpbmRvd1dpZHRoID0gMTAwMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkU2VhcmNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZURhdGVzU3RyaW5nKGNvdXJzZTogSUNvdXJzZSk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIGxldCBjb3Vyc2VEYXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgICAgICAgaWYgKGNvdXJzZS5lbmREYXRlKSB7XHJcbiAgICAgICAgICAgIGNvdXJzZURhdGVzLnNldChcImVuZERhdGVcIiwgbmV3IERhdGUoY291cnNlLmVuZERhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY291cnNlLmVuZERhdGUgfHwgY291cnNlLnN0YXJ0RGF0ZSA+IERhdGUubm93KCkpIHtcclxuICAgICAgICAgICAgY291cnNlRGF0ZXMuc2V0KFwic3RhcnREYXRlXCIsIG5ldyBEYXRlKGNvdXJzZS5zdGFydERhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvdXJzZURhdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRQb3B1cENsYXNzZXMoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGNhcmRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxwX19wbGFuLWNhcmQgaW5mb3JtYXRpb25fdG9vbHRpcFwiKSk7XHJcbiAgICAgICAgZm9yIChsZXQgY2FyZCBvZiBjYXJkcykge1xyXG4gICAgICAgICAgICBsZXQgcmVjOiBDbGllbnRSZWN0ID0gY2FyZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgbGV0IHBvcHVwOiBFbGVtZW50ID0gY2FyZC5wYXJlbnRFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJwb3B1cF9vbmhvdmVyXCIpLml0ZW0oMCk7XHJcbiAgICAgICAgICAgIGlmIChwb3B1cC5jbGllbnRXaWR0aCA+PSB3aW5kb3cuaW5uZXJXaWR0aCAtIGNhcmQuY2xpZW50V2lkdGggLSByZWMubGVmdCkge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIGxlZnRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJpZ2h0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInBvcHVwX29uaG92ZXIgcmlnaHRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImxlZnQtcG9pbnRlclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2hvcnRTdW1tYXJ5KG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmcgIT0gdW5kZWZpbmVkICYmIG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA+IDI1NlxyXG4gICAgICAgICAgICA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cmluZygwLCAyNTYpICsgJy4uLidcclxuICAgICAgICAgICAgOiBvcmlnaW5hbFN0cmluZztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWF0ZXJpYWxzL01hdGVyaWFsU2VydmljZVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJTWF0ZXJpYWx9IGZyb20gXCIuLi8uLi9tYXRlcmlhbHMvbW9kZWxzL0lNYXRlcmlhbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SU1lbnVHcm91cH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvUGVyc29uYWxNZW51RGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi8uLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge01hdGVyaWFsc1JvdXRlcn0gZnJvbSBcIi4uLy4uL3VybHMvTWF0ZXJpYWxzUm91dGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtPYmplY3RUeXBlVXRpbHN9IGZyb20gXCIuLi8uLi91dGlscy9PYmplY3RUeXBlVXRpbHNcIjtcclxuaW1wb3J0IHtDb21tb25GaWx0ZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vY29tbW9uL0NvbW1vbkZpbHRlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtJbnRyb1NlcnZpY2V9IGZyb20gXCIuLi8uLi9pbmZvL0ludHJvU2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuXHJcbmludGVyZmFjZSBJRXh0TWF0ZXJpYWwgZXh0ZW5kcyBJTWF0ZXJpYWwge1xyXG4gICAgc2hvd24/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSG9tZU1hdGVyaWFsc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJob21lLkhvbWVNYXRlcmlhbHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIG1hdGVyaWFsc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTWF0ZXJpYWw+O1xyXG4gICAgcHVibGljIHZpZXdUeXBlOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaG9tZU1lbnVCeVBlcm1pc3Npb246IElNZW51R3JvdXA7XHJcbiAgICBwdWJsaWMgY3VycmVudE1lbnVJdGVtS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIGN1cnJlbnRNZW51SXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgcHVibGljIHN0b3JhZ2VGaWx0ZXJWYWx1ZXM6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgdG9wVHlwZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBNYXRlcmlhbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTWF0ZXJpYWxzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBDb21tb25GaWx0ZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgSW50cm9TZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSwgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWF0ZXJpYWxTZXJ2aWNlOiBNYXRlcmlhbFNlcnZpY2UsICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSwgcHJpdmF0ZSBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkhPTUVfTUFURVJJQUxTX0tFWSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TWVudUl0ZW1LZXkgPSBNZW51SGVscGVyLmdldEN1cnJlbnRNZW51SXRlbUtleSgpO1xyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElNYXRlcmlhbD4oJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL21hdGVyaWFsc1wiKSkpO1xyXG5cclxuICAgICAgICB0aGlzLnRvcFR5cGUgPSAnQUxMJztcclxuXHJcbiAgICAgICAgdGhpcy5nZXRTdG9yYWdlRmlsdGVycygpO1xyXG5cclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxODAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwucGFnZVNpemUgPSA5O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIodGhpcyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlclBhZ2VWaWV3TW9kZSgpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSByZXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0SW50cm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb1NlcnZpY2Uuc3RhcnRMZWFybmVySG9tZVBhZ2VJbnRybygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlRmlsdGVyVmFsdWVzID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldEZpbHRlclZhbHVlcyhIb21lTWF0ZXJpYWxzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmFwcGx5U3RvcmFnZUZpbHRlcih0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMsXHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsKTtcclxuICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldFNlYXJjaElucHV0KEhvbWVNYXRlcmlhbHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLm9wZW5TZWFyY2hJbnB1dCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0b3BUeXBlID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldFRvcFN0YXR1cyhIb21lTWF0ZXJpYWxzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICBpZih0b3BUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9wVHlwZSA9IHRvcFR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlNYXRlcmlhbFRvcFR5cGUodG9wVHlwZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJQYWdlVmlld01vZGUoQm9vbGVhbih2aWV3VHlwZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVXNlclBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydExvYWRpbmcoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmRMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaCgobWF0ZXJpYWw6IElNYXRlcmlhbCkgPT4ge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zdWJqZWN0QW5kVG9waWMgPSBtYXRlcmlhbC5zdWJqZWN0TmFtZSArIFwiIC8gXCIgKyBtYXRlcmlhbC50aXRsZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZE1hdGVyaWFsKG1hdGVyaWFsSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5lbnRyaWVzLmZpbHRlcihtID0+IG0uaWQgPT09IG1hdGVyaWFsSWQpWzBdLnBlcm1pc3Npb25zLnZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLndhdGNoVXJsKG1hdGVyaWFsSWQpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIllvdSBhcmUgbm90IGdyYW50ZWQgcGVybWlzc2lvbiB0byB2aWV3IHRoaXMgY291cnNlXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TWF0ZXJpYWxUeXBlVGl0bGUobWF0ZXJpYWxUeXBlSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFR5cGVVdGlscy5nZXRNYXRlcmlhbFR5cGVUaXRsZShtYXRlcmlhbFR5cGVJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dEZXRhaWxzKG1hdGVyaWFsOiBJRXh0TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2hvd24gPSAhbWF0ZXJpYWwuc2hvd247XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVRvcFR5cGUoc3RhdHVzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRvcFR5cGUgPSBzdGF0dXM7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNhdmVUb3BTdGF0dXMoSG9tZU1hdGVyaWFsc0NvbnRyb2xsZXIuTkFNRSwgc3RhdHVzKVxyXG4gICAgICAgIHRoaXMuYXBwbHlNYXRlcmlhbFRvcFR5cGUoc3RhdHVzKTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGx5TWF0ZXJpYWxUb3BUeXBlKHN0YXR1czogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmFwcGx5TWF0ZXJpYWxUb3BUeXBlKHN0YXR1cywgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hLZXlQcmVzcygpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2F2ZVNlYXJjaElucHV0KEhvbWVNYXRlcmlhbHNDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbG9zZVNlYXJjaElucHV0KEhvbWVNYXRlcmlhbHNDb250cm9sbGVyLk5BTUUsIHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dGaWx0ZXJEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNob3dGaWx0ZXJEaWFsb2cod2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRmlsdGVyKHR5cGU6IHN0cmluZywgcmVmZXJlbmNlT2JqZWN0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb3VudEFjdGl2ZUluY3JlbWVudCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS51cGRhdGVHZW5lcmFsRmlsdGVyKHR5cGUsIHJlZmVyZW5jZU9iamVjdCxcclxuICAgICAgICAgICAgSG9tZU1hdGVyaWFsc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciArPSBjb3VudEFjdGl2ZUluY3JlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsZWFyRmlsdGVyKEhvbWVNYXRlcmlhbHNDb250cm9sbGVyLk5BTUUsIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UG9wdXBDbGFzc2VzKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjYXJkcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJjYXJkIGluZm9ybWF0aW9uX3Rvb2x0aXBcIikpO1xyXG4gICAgICAgIGZvciAobGV0IGNhcmQgb2YgY2FyZHMpIHtcclxuICAgICAgICAgICAgbGV0IHJlYzogQ2xpZW50UmVjdCA9IGNhcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIGxldCBwb3B1cDogRWxlbWVudCA9IGNhcmQucGFyZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicG9wdXBfb25ob3ZlclwiKS5pdGVtKDApO1xyXG4gICAgICAgICAgICBpZiAocmVjLnJpZ2h0ICsgcG9wdXAuY2xpZW50V2lkdGggPj0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIGxlZnRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJpZ2h0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInBvcHVwX29uaG92ZXIgcmlnaHRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImxlZnQtcG9pbnRlclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TWF0ZXJpYWxUeXBlTmFtZSh0eXBlS2V5KSB7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlS2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0FMTCc6IHJldHVybiAnQUxMJztcclxuICAgICAgICAgICAgY2FzZSAnQVVESU8nOiByZXR1cm4gJ0FVRElPJztcclxuICAgICAgICAgICAgY2FzZSAnVklERU8nIDogcmV0dXJuICdWSURFTyc7XHJcbiAgICAgICAgICAgIGNhc2UgJ1BIT1RPJyA6IHJldHVybiAnSU1BR0UnO1xyXG4gICAgICAgICAgICBjYXNlICdMSU5LJyA6IHJldHVybiAnTElOSyc7XHJcbiAgICAgICAgICAgIGNhc2UgJ0RPQ1VNRU5UUyc6IHJldHVybiAnT1RIRVInO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2hvcnRTdW1tYXJ5KG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmcgIT0gdW5kZWZpbmVkICYmIG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA+IDI1NlxyXG4gICAgICAgICAgICA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cmluZygwLCAyNTYpICsgJy4uLidcclxuICAgICAgICAgICAgOiBvcmlnaW5hbFN0cmluZztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc3RhdGlzdGljcy9TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7SVN0YXRpc3RpY0ZvckxlYXJuZXJQZXJpb2R9IGZyb20gXCIuLi8uLi9zdGF0aXN0aWNzL21vZGVscy9JU3RhdGlzdGljRm9yTGVhcm5lclBlcmlvZFwiO1xyXG5pbXBvcnQge0lTdGF0aXN0aWNGb3JMZWFybmVyRW50cnl9IGZyb20gXCIuLi8uLi9zdGF0aXN0aWNzL21vZGVscy9JU3RhdGlzdGljRm9yTGVhcm5lckVudHJ5XCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vaW5mby9JbnRyb1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lUmVwb3J0c0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJob21lLkhvbWVSZXBvcnRzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGlzdGljOiBJU3RhdGlzdGljRm9yTGVhcm5lckVudHJ5O1xyXG4gICAgcHJpdmF0ZSBkYWlseVN0YXRpc3RpYzogSVN0YXRpc3RpY0ZvckxlYXJuZXJQZXJpb2Q7XHJcbiAgICBwcml2YXRlIHdlZWtseVN0YXRpc3RpYzogSVN0YXRpc3RpY0ZvckxlYXJuZXJQZXJpb2Q7XHJcbiAgICBwcml2YXRlIG1vbnRobHlTdGF0aXN0aWM6IElTdGF0aXN0aWNGb3JMZWFybmVyUGVyaW9kO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50TW9udGg6IHN0cmluZztcclxuICAgIHByaXZhdGUgY3VycmVudFllYXI6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nU3RhdGlzdGljID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBJbnRyb1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlOiBTdGF0aXN0aWNSZXBvcnRzU2VydmljZSwgcHJpdmF0ZSBpbnRyb1NlcnZpY2U6IEludHJvU2VydmljZSkge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuSE9NRV9SRVBPUlRTX0tFWSk7XHJcbiAgICAgICAgc3RhdGlzdGljUmVwb3J0c1NlcnZpY2UuZ2V0SW5mb0ZvckxlYXJuZXIoKS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGlzdGljID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5kYWlseVN0YXRpc3RpYyAgPSB0aGlzLnN0YXRpc3RpYy5zdGF0aXN0aWNQZXJpb2RzLmZpbHRlcihwID0+IHAucGVyaW9kVHlwZSA9PT0gXCJEQVlcIilbMF07XHJcbiAgICAgICAgICAgIHRoaXMud2Vla2x5U3RhdGlzdGljID0gdGhpcy5zdGF0aXN0aWMuc3RhdGlzdGljUGVyaW9kcy5maWx0ZXIocCA9PiBwLnBlcmlvZFR5cGUgPT09IFwiV0VFS1wiKVswXTtcclxuICAgICAgICAgICAgdGhpcy5tb250aGx5U3RhdGlzdGljID0gdGhpcy5zdGF0aXN0aWMuc3RhdGlzdGljUGVyaW9kcy5maWx0ZXIocCA9PiBwLnBlcmlvZFR5cGUgPT09IFwiTU9OVEhcIilbMF07XHJcbiAgICAgICAgICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKHRoaXMubW9udGhseVN0YXRpc3RpYy5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNb250aCA9IHRvZGF5LnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwgeyBtb250aDogJ2xvbmcnIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRZZWFyID0gdG9kYXkuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdTdGF0aXN0aWMgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRJbnRybygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmludHJvU2VydmljZS5zdGFydExlYXJuZXJIb21lUGFnZUludHJvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbGNIb3Vycyh0aW1lOiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgaG91cnMgPSBNYXRoLmZsb29yKCh0aW1lIC8gKDEwMDAgKiA2MCAqIDYwKSkgJSAyNCk7XHJcbiAgICAgICAgcmV0dXJuIChob3VycyA8IDEwKSA/IFwiMFwiICsgaG91cnMgOiBob3VycztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FsY01pbnV0ZXNSZW1haW5kZXIodGltZTogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0aW1lIC8gKDEwMDAgKiA2MCkpICUgNjApO1xyXG4gICAgICAgIHJldHVybiAobWludXRlcyA8IDEwKSA/IFwiMFwiICsgbWludXRlcyA6IG1pbnV0ZXM7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIlxyXG5leHBvcnQgZW51bSBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbSB7XHJcbiAgICBEQVlfQ09NTUVOVFMsXHJcbiAgICBXRUVLX0NPTU1FTlRTLFxyXG4gICAgTkVXX0FTU0VTU01FTlRTXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgTk9USUZJQ0FUSU9OU19NT0RBTF9JTlNUUlVDVE9SX01FTlUgPSBbXHJcbiAgICBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5EQVlfQ09NTUVOVFMsXHJcbiAgICBOb3RpZmljYXRpb25zTW9kYWxNZW51SXRlbS5XRUVLX0NPTU1FTlRTLFxyXG4gICAgTm90aWZpY2F0aW9uc01vZGFsTWVudUl0ZW0uTkVXX0FTU0VTU01FTlRTXHJcbl07XHJcblxyXG5leHBvcnQgdmFyIE5PVElGSUNBVElPTlNfTU9EQUxfQVRURU5ERUVfTUFOQUdFUl9NRU5VICA9IFtcclxuICAgIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLkRBWV9DT01NRU5UUyxcclxuICAgIE5vdGlmaWNhdGlvbnNNb2RhbE1lbnVJdGVtLldFRUtfQ09NTUVOVFNcclxuXTtcclxuXHJcbiIsImV4cG9ydCBlbnVtIFVzZXJSb2xlIHtcclxuICAgIExFQVJORVIsXHJcbiAgICBBRE1JTklTVFJBVE9SXHJcbn1cclxuIiwiaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge1JlZGlyZWN0UmVhc29ufSBmcm9tIFwiLi8uLi9hdXRoY29yZS9SZWRpcmVjdFJlYXNvblwiO1xyXG5pbXBvcnQge0F1dGhSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvQXV0aFJvdXRlclwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtDb21tb25OYXZpZ2F0aW9ufSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vbk5hdmlnYXRpb25cIjtcclxuaW1wb3J0IHtWSUVXU19VUkxfUFJFRklYfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSHR0cEludGVyY2VwdG9yIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaHR0cC5IdHRwSW50ZXJjZXB0b3JcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEZhY3RvcnkoJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25OYXZpZ2F0aW9uOiBDb21tb25OYXZpZ2F0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwSW50ZXJjZXB0b3IoJHEsIGF1dGhSZWRpcmVjdCwgYXV0aE1hbmFnZXIsIGNvbW1vbk5hdmlnYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb21tb25OYXZpZ2F0aW9uOiBDb21tb25OYXZpZ2F0aW9uKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcXVlc3QgPSAoY29uZmlnKSA9PiB7XHJcbiAgICAgICAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcclxuICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmF1dGhNYW5hZ2VyLmdldFRva2VuKCk7XHJcbiAgICAgICAgaWYgKHRva2VuICE9IG51bGwgJiYgY29uZmlnLnVybC5pbmRleE9mKFZJRVdTX1VSTF9QUkVGSVgpICE9IDAgJiYgIWNvbmZpZy53aXRob3V0QXV0aG9yaXphdGlvbikge1xyXG4gICAgICAgICAgICBjb25maWcuaGVhZGVycy5BdXRob3JpemF0aW9uID0gdG9rZW4udG9rZW5UeXBlICsgXCIgXCIgKyB0b2tlbi5hY2Nlc3NUb2tlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uZmlnLmhlYWRlcnNbXCJYLVRpbWV6b25lXCJdID0gbW9tZW50KG5ldyBEYXRlKCkpLnV0Y09mZnNldCgpO1xyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyByZXNwb25zZUVycm9yID0gKHJlamVjdGlvbikgPT4ge1xyXG4gICAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvTG9nT24oUmVkaXJlY3RSZWFzb24uQUNDRVNTX0RFTklFRCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LmZvcndhcmRUb0FjY2Vzc0RlbmllZCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmF1dGhNYW5hZ2VyLmhhc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0xvZ09uKFJlZGlyZWN0UmVhc29uLkFDQ0VTU19ERU5JRUQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5sb2dPZmYoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0xvZ09uKFJlZGlyZWN0UmVhc29uLlRPS0VOX0VYUElSRUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWplY3Rpb24uc3RhdHVzID49IDUwMCAmJiB0cnVlICE9PSByZWplY3Rpb24uY29uZmlnLmlnbm9yZTUwMCkge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlF1ZXJ5IGhhcyBmYWlsZWQ6IHBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3Igb3IgaGVscCBkZXNrXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDA5ICYmIHRydWUgIT09IHJlamVjdGlvbi5jb25maWcuaWdub3JlNDA5KSB7XHJcbiAgICAgICAgICAgIGlmIChyZWplY3Rpb24uZGF0YS5lcnJvciA9PT0gXCJJbnZhbGlkU3RhdGVcIiB8fCByZWplY3Rpb24uZGF0YS5lcnJvciA9PT0gXCJPcHRpbWlzdGljTG9ja1wiKVxyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYW5vdGhlciB1c2VyOiBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDA0ICYmIHRydWUgIT09IHJlamVjdGlvbi5jb25maWcuaWdub3JlNDA0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uTmF2aWdhdGlvbi5yZWRpcmVjdFRvTm90Rm91bmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHEucmVqZWN0KHJlamVjdGlvbik7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgcmVkaXJlY3RUb0xvZ09uKHJlYXNvbjogUmVkaXJlY3RSZWFzb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLmVyYXNlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5yZWRpcmVjdFRvTG9nT24ocmVhc29uKTtcclxuICAgIH1cclxufVxyXG5cclxuSHR0cEludGVyY2VwdG9yLkZhY3RvcnkuJGluamVjdCA9IFtcclxuICAgIFwiJHFcIixcclxuICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgIENvbW1vbk5hdmlnYXRpb24uTkFNRVxyXG5dOyIsImltcG9ydCB7SHR0cEludGVyY2VwdG9yfSBmcm9tIFwiLi9IdHRwSW50ZXJjZXB0b3JcIjtcclxuXHJcbmltcG9ydCB7QXV0aENvcmVNb2R1bGV9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhDb3JlTW9kdWxlXCI7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiLi8uLi9jb21tb24vQ29tbW9uTW9kdWxlXCI7XHJcblxyXG5leHBvcnQgdmFyIEh0dHBNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJodHRwXCIsIFtcclxuICAgICAgICBBdXRoQ29yZU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIENvbW1vbk1vZHVsZS5uYW1lXHJcbiAgICBdKVxyXG4gICAgLmZhY3RvcnkoSHR0cEludGVyY2VwdG9yLk5BTUUsIEh0dHBJbnRlcmNlcHRvci5GYWN0b3J5KTsiLCJleHBvcnQgZW51bSBJTFRSZXBlYXRUeXBlIHtcclxuICAgIE9OQ0UsXHJcbiAgICBEQUlMWSxcclxuICAgIFdFRUtMWSxcclxuICAgIEVWRVJZX1dFRUtfREFZXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBJTFRSZXBlYXQgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgbmFtZTogXCJPTkNFXCIsXHJcbiAgICAgICAgYWJicmV2aWF0aW9uOiBcIk9uY2VcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBuYW1lOiBcIkRBSUxZXCIsXHJcbiAgICAgICAgYWJicmV2aWF0aW9uOiBcIkRhaWx5XCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgbmFtZTogXCJXRUVLTFlcIixcclxuICAgICAgICBhYmJyZXZpYXRpb246IFwiV2Vla2x5XCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgbmFtZTogXCJFVkVSWV9XRUVLX0RBWVwiLFxyXG4gICAgICAgIGFiYnJldmlhdGlvbjogXCJFdmVyeSB3ZWVrIGRheVwiXHJcbiAgICB9XHJcbl07IiwiZXhwb3J0IGVudW0gSUxUU2Vzc2lvbkF0dGVuZGFuY2VTdGF0dXMge1xyXG4gICAgTUlTU0VELFxyXG4gICAgQVRURU5ERURcclxufSIsImV4cG9ydCBlbnVtIElMVFNlc3Npb25SZWdpc3RyYXRpb25TdGF0dXMge1xyXG4gICAgSU5fV0FJVF9MSVNULFxyXG4gICAgUkVHSVNURVJFRFxyXG59IiwiZXhwb3J0IGVudW0gSUxUU2Vzc2lvblN0YXR1cyB7XHJcbiAgICBTQ0hFRFVMRUQsXHJcbiAgICBGSU5JU0hFRCxcclxuICAgIENBTkNFTExFRFxyXG59IiwiaW1wb3J0IHtJbXBvcnRSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0ltcG9ydFJvdXRlclwiO1xyXG5pbXBvcnQge0V4cG9ydFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvRXhwb3J0Um91dGVyXCI7XHJcbmltcG9ydCB7SW1wb3J0RXhwb3J0U2VydmljZX0gZnJvbSBcIi4vSW1wb3J0RXhwb3J0U2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtJQnVzaW5lc3NVbml0fSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9tb2RlbHMvSUJ1c2luZXNzVW5pdFwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBFeHBvcnRDb250cm9sbGVye1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJpbXBvcnRFeHBvcnQuRXhwb3J0Q29udHJvbGxlclwiO1xyXG4gICAgcHVibGljIElNUE9SVF9UQUJfS0VZOiBzdHJpbmcgPSBcImltcG9ydFwiO1xyXG4gICAgcHVibGljIEVYUE9SVF9UQUJfS0VZOiBzdHJpbmcgPSBcImV4cG9ydFwiO1xyXG4gICAgcHVibGljIElNUE9SVF9VUkw6IHN0cmluZztcclxuICAgIHB1YmxpYyBFWFBPUlRfVVJMOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdG9wTWVudUtleTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zID0ge307XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcbiAgICBwdWJsaWMgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0czogQXJyYXk8SUJ1c2luZXNzVW5pdD4gPSBbXTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRJZDogbnVtYmVyO1xyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBJbXBvcnRSb3V0ZXIuTkFNRSxcclxuICAgICAgICBFeHBvcnRSb3V0ZXIuTkFNRSxcclxuICAgICAgICBJbXBvcnRFeHBvcnRTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBpbXBvcnRSb3V0ZXI6IEltcG9ydFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZXhwb3J0Um91dGVyOiBFeHBvcnRSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGltcG9ydEV4cG9ydFNlcnZpY2U6IEltcG9ydEV4cG9ydFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlXHJcbiAgICApe1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5pbXBvcnRJbmZvcm1hdGlvbik7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSB1c2VyLmFsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZEJ1c2luZXNzVW5pdHMoKTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BNZW51S2V5ID0gdGhpcy5FWFBPUlRfVEFCX0tFWTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0lNUE9SVF9FWFBPUlRfS0VZKTtcclxuICAgICAgICB0aGlzLklNUE9SVF9VUkwgPSAnIycgKyB0aGlzLmltcG9ydFJvdXRlci5pbmRleFVybCgpO1xyXG4gICAgICAgIHRoaXMuRVhQT1JUX1VSTCA9ICcjJyArIHRoaXMuZXhwb3J0Um91dGVyLmluZGV4VXJsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQnVzaW5lc3NVbml0cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEJ1c2luZXNzVW5pdHNGb3JTZWxlY3RvcigpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzID0gPEFycmF5PElCdXNpbmVzc1VuaXQ+PnJlc3VsdDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYnVzaW5lc3NVbml0cy5sZW5ndGggPT0gMSAmJiAhdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdElkID0gdGhpcy5idXNpbmVzc1VuaXRzWzBdID09IHVuZGVmaW5lZCB8fCB0aGlzLmJ1c2luZXNzVW5pdHNbMF0uaWQgPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmJ1c2luZXNzVW5pdHNbMF0uaWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4cG9ydFVzZXJzKCkge1xyXG4gICAgICAgIHRoaXMuaW1wb3J0RXhwb3J0U2VydmljZS5leHBvcnRVc2Vycyh0aGlzLmJ1c2luZXNzVW5pdElkID8gdGhpcy5idXNpbmVzc1VuaXRJZCA6IG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1RvcE1lbnVBY3RpdmUodG9wTWVudUtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9wTWVudUtleSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0ltcG9ydEV4cG9ydFNlcnZpY2V9IGZyb20gXCIuL0ltcG9ydEV4cG9ydFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJbXBvcnRSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0ltcG9ydFJvdXRlclwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJQnVzaW5lc3NVbml0fSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9tb2RlbHMvSUJ1c2luZXNzVW5pdFwiO1xyXG5pbXBvcnQge0V4cG9ydFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvRXhwb3J0Um91dGVyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5fSBmcm9tIFwiLi4vcmVmZXJlbmNlL21vZGVscy9JU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eVwiO1xyXG5pbXBvcnQge0lSb3dJbnB1dH0gZnJvbSBcIi4vbW9kZWwvSVJvd0lucHV0XCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUltcG9ydElucHV0fSBmcm9tIFwiLi9tb2RlbC9JSW1wb3J0SW5wdXRcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7VXNlcnNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1VzZXJzUm91dGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtCaWxsaW5nUGxhblNlcnZpY2V9IGZyb20gXCIuLi9maW5hbmNlcy9CaWxsaW5nUGxhblNlcnZpY2VcIjtcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtJTG9nb25Qcm92aWRlcn0gZnJvbSBcIi4uL2F1dGgvSUxvZ29uUHJvdmlkZXJcIjtcclxuXHJcbmVudW0gSW1wb3J0VHlwZSB7XHJcbiAgICBVU0VSUyxcclxuICAgIENFLFxyXG4gICAgQUxMXHJcbn1cclxuXHJcbmVudW0gUmVzdWx0VHlwZSB7XHJcbiAgICBFUlJPUixcclxuICAgIFVTRVJTLFxyXG4gICAgQ0UsXHJcbiAgICBBTExcclxufVxyXG5cclxuaW50ZXJmYWNlIElTZWxlY3RhYmxlRXh0ZW5kZWQgZXh0ZW5kcyBJU2VsZWN0YWJsZSB7XHJcbiAgICBzZWxlY3RlZD86IGJvb2xlYW47XHJcbiAgICBzaG93bj86IGJvb2xlYW47XHJcbiAgICBjYW5CZVJlbW92ZWQ/OiBib29sZWFuO1xyXG4gICAgdG9nZ2xlPzogKCkgPT4gdm9pZDtcclxuICAgIHNlbGVjdD86ICgpID0+IHZvaWQ7XHJcbiAgICB1bnNlbGVjdD86ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJbXBvcnRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaW1wb3J0RXhwb3J0LkltcG9ydENvbnRyb2xsZXJcIjtcclxuICAgIHB1YmxpYyBJTVBPUlRfVEFCX0tFWTogc3RyaW5nID0gXCJpbXBvcnRcIjtcclxuICAgIHB1YmxpYyBFWFBPUlRfVEFCX0tFWTogc3RyaW5nID0gXCJleHBvcnRcIjtcclxuICAgIHB1YmxpYyBJTVBPUlRfVVJMOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgRVhQT1JUX1VSTDogc3RyaW5nO1xyXG4gICAgcHVibGljIERPV05MT0FEX1RFTVBMQVRFX0xJTks6IHN0cmluZztcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zID0ge307XHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0OiBhbnk7XHJcbiAgICBwdWJsaWMgdG9wTWVudUtleTogc3RyaW5nO1xyXG4gICAgcHVibGljIG1ldGhvZDogc3RyaW5nO1xyXG4gICAgcHVibGljIGZpbGU6IEZpbGU7XHJcbiAgICBwcml2YXRlIGRpc2FibGVCdXR0b25zOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzaG93TW9kYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyByZWZlcmVuY2VFbnRpdGllczogQXJyYXk8SVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHk+O1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdHM6IEFycmF5PElCdXNpbmVzc1VuaXQ+ID0gW107XHJcbiAgICBwdWJsaWMgaW5pdGlhbFZhbHVlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgaW5wdXRSZWNvcmRzOiBBcnJheTxJUm93SW5wdXQ+ID0gW107XHJcbiAgICBwdWJsaWMgaW1wb3J0SW5wdXQ6IElJbXBvcnRJbnB1dCA9IHt9O1xyXG4gICAgcHVibGljIGZpbHRlcmVkSW5wdXRSZWNvcmRzOiBBcnJheTxJUm93SW5wdXQ+ID0gW107XHJcbiAgICBwdWJsaWMgdG90YWxMaW5lczogbnVtYmVyO1xyXG4gICAgcHVibGljIGVycm9yc0NvdW50OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmlnaHRDb3VudDogbnVtYmVyO1xyXG4gICAgcHVibGljIGltcG9ydFR5cGVzID0gSW1wb3J0VHlwZTtcclxuICAgIHB1YmxpYyByZXN1bHRUeXBlcyA9IFJlc3VsdFR5cGU7XHJcbiAgICBwdWJsaWMgaW1wb3J0VHlwZTtcclxuICAgIHB1YmxpYyBuZXdVc2Vyc0NvdW50OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgaW5hY3RpdmVVc2Vyc0NvdW50OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbmV3Q2VDb3VudDogbnVtYmVyO1xyXG4gICAgcHVibGljIGhhc0FsbEJ1c2luZXNzVW5pdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNyZWRpdHNMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcHVibGljIG5ld0NyZWRpdHNMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcHVibGljIG5ld0dyb3Vwc0xpc3Q6IElTZWxlY3RhYmxlW10gPSBbXTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRJZDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50VXNlcjogSVVzZXJJbmZvO1xyXG4gICAgcHJpdmF0ZSBtb2RpZmljYXRpb25Hcm91cHM6IElTZWxlY3RhYmxlRXh0ZW5kZWRbXSA9IFtdO1xyXG4gICAgcHVibGljIGlzRnJlZVBsYW5CdUZ1bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBtYXhGcmVlUGxhblVzZXJzOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBJbXBvcnRSb3V0ZXIuTkFNRSxcclxuICAgICAgICBFeHBvcnRSb3V0ZXIuTkFNRSxcclxuICAgICAgICBJbXBvcnRFeHBvcnRTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgVXNlcnNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBCaWxsaW5nUGxhblNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGltcG9ydFJvdXRlcjogSW1wb3J0Um91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBleHBvcnRSb3V0ZXI6IEV4cG9ydFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaW1wb3J0RXhwb3J0U2VydmljZTogSW1wb3J0RXhwb3J0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVzaW5lc3NVbml0c1NlcnZpY2U6IEJ1c2luZXNzVW5pdHNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlcnNSb3V0ZXI6IFVzZXJzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBiaWxsaW5nUGxhblNlcnZpY2U6IEJpbGxpbmdQbGFuU2VydmljZVxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSB1c2VyLmFsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5pbXBvcnRJbmZvcm1hdGlvbik7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudG9wTWVudUtleSA9IHRoaXMuSU1QT1JUX1RBQl9LRVk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9JTVBPUlRfRVhQT1JUX0tFWSk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5JTVBPUlRfVVJMID0gJyMnICsgdGhpcy5pbXBvcnRSb3V0ZXIuaW5kZXhVcmwoKTtcclxuICAgICAgICB0aGlzLkVYUE9SVF9VUkwgPSAnIycgKyB0aGlzLmV4cG9ydFJvdXRlci5pbmRleFVybCgpO1xyXG4gICAgICAgIHRoaXMuRE9XTkxPQURfVEVNUExBVEVfTElOSyA9IHRoaXMuZ2V0RG93bmxvYWRUZW1wbGF0ZUxpbmsoKTtcclxuICAgICAgICB0aGlzLmxvYWRCdXNpbmVzc1VuaXRzKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JvdXBzTGlzdCgpO1xyXG5cclxuICAgICAgICBsZXQgYnVzaW5lc3NVbml0SWQ7XHJcbiAgICAgICAgaWYgKCB0aGlzLmJ1c2luZXNzVW5pdElkID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXRJZCA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQgPSB0aGlzLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDcmVkaXRzTGlzdHMoYnVzaW5lc3NVbml0SWQpO1xyXG4gICAgICAgIHRoaXMubG9hZFVzZXJHcm91cHNGb3JTZWxlY3RvcihidXNpbmVzc1VuaXRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuYWJsZUJ1dHRvbnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcmVCdXR0b25zRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZSA9PSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5CZU51bGxhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1c2luZXNzVW5pdHMgPT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmVkZWZpbmVkVmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVzaW5lc3NVbml0cyAhPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFJlZ2lzdGVySW5wdXRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmltcG9ydEV4cG9ydFNlcnZpY2UuZ2V0UmVnaXN0ZXJJbnB1dHModGhpcy5maWxlLCB0aGlzLmJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZElucHV0UmVjb3JkcyA9IHRoaXMuaW5wdXRSZWNvcmRzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbExpbmVzID0gdGhpcy5pbnB1dFJlY29yZHMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbmFjdGl2ZVVzZXJzQ291bnQgPSB0aGlzLmlucHV0UmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5lcnJvck1lc3NhZ2UgJiYgcmVjb3JkLmVycm9yTWVzc2FnZS5zcGxpdCgnLicpWzBdID09ICdVc2VyIHdpbGwgYmUgY3JlYXRlZCBhcyBpbmFjdGl2ZScpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzQ291bnQgPSB0aGlzLmlucHV0UmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5lcnJvckZsYWcgPT0gdHJ1ZSAmJiByZWNvcmQuZXJyb3JNZXNzYWdlLnNwbGl0KCcuJylbMF0gIT0gJ1VzZXIgd2lsbCBiZSBjcmVhdGVkIGFzIGluYWN0aXZlJykubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodENvdW50ID0gdGhpcy5pbnB1dFJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQuZXJyb3JGbGFnID09IGZhbHNlIHx8IHJlY29yZC5lcnJvck1lc3NhZ2Uuc3BsaXQoJy4nKVswXSA9PSAnVXNlciB3aWxsIGJlIGNyZWF0ZWQgYXMgaW5hY3RpdmUnKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmltcG9ydFR5cGUgPSB0aGlzLmltcG9ydFR5cGVzW3RoaXMuaW1wb3J0VHlwZXMuVVNFUlNdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW1wb3J0TW9kYWwoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkludmFsaWRGaWxlTW9kYWwoKTtcclxuICAgICAgICAgICAgICAgIC8vbm90aWZpZXIuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB1cGxvYWRpbmdcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDRUlucHV0cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRFeHBvcnRTZXJ2aWNlLmdldENFSW5wdXRzKHRoaXMuZmlsZSwgdGhpcy5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkSW5wdXRSZWNvcmRzID0gdGhpcy5pbnB1dFJlY29yZHMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsTGluZXMgPSB0aGlzLmlucHV0UmVjb3Jkcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yc0NvdW50ID0gdGhpcy5pbnB1dFJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQuZXJyb3JGbGFnID09IHRydWUpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDb3VudCA9IHRoaXMuaW5wdXRSZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmVycm9yRmxhZyA9PSBmYWxzZSkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRUeXBlID0gdGhpcy5pbXBvcnRUeXBlc1t0aGlzLmltcG9ydFR5cGVzLkNFXTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkltcG9ydE1vZGFsKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5JbnZhbGlkRmlsZU1vZGFsKCk7XHJcbiAgICAgICAgICAgICAgICAvL25vdGlmaWVyLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdXBsb2FkaW5nXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWxsSW5wdXRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmltcG9ydEV4cG9ydFNlcnZpY2UuZ2V0QWxsSW5wdXRzKHRoaXMuZmlsZSwgdGhpcy5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkSW5wdXRSZWNvcmRzID0gdGhpcy5pbnB1dFJlY29yZHMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsTGluZXMgPSB0aGlzLmlucHV0UmVjb3Jkcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yc0NvdW50ID0gdGhpcy5pbnB1dFJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQuZXJyb3JGbGFnID09IHRydWUpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3VXNlcnNDb3VudCA9IHRoaXMuaW5wdXRSZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmNyZWF0ZVVzZXJGbGFnID09IHRydWUpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnROZXdDZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRUeXBlID0gdGhpcy5pbXBvcnRUeXBlc1t0aGlzLmltcG9ydFR5cGVzLkFMTF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5JbXBvcnRNb2RhbCgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW52YWxpZEZpbGVNb2RhbCgpO1xyXG4gICAgICAgICAgICAgICAgLy9ub3RpZmllci5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHVwbG9hZGluZ1wiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVVc2VycygpIHtcclxuICAgICAgICBsZXQgYnVzaW5lc3NVbml0SWQgPSB0aGlzLmJ1c2luZXNzVW5pdElkID09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IG51bGxcclxuICAgICAgICAgICAgOiB0aGlzLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIHRoaXMuaW1wb3J0RXhwb3J0U2VydmljZS5nZXRSZWdpc3RlcklucHV0cyh0aGlzLmZpbGUsIHRoaXMuYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkSW5wdXRSZWNvcmRzID0gdGhpcy5pbnB1dFJlY29yZHMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRJbnB1dC5yb3dJbnB1dHMgPSB0aGlzLmlucHV0UmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5lcnJvckZsYWcgPT0gZmFsc2UgfHwgcmVjb3JkLmVycm9yTWVzc2FnZS5zcGxpdCgnLicpWzBdID09ICdVc2VyIHdpbGwgYmUgY3JlYXRlZCBhcyBpbmFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRJbnB1dC5ncm91cHMgPSB0aGlzLmdldEdyb3Vwc0lkc0Zyb21TZWxlY3RhYmxlTGlzdCh0aGlzLm5ld0dyb3Vwc0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRJbnB1dC5jcmVkaXRzID0gdGhpcy5uZXdDcmVkaXRzTGlzdDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmltcG9ydElucHV0LnJvd0lucHV0cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKHRoaXMuZ2V0RnJlZVBsYW5NZXNzYWdlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBsb2NhbGU6IHN0cmluZztcclxuICAgICAgICAgICAgICAgIGlmIChidXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QnVzaW5lc3NVbml0QnlJZChidXNpbmVzc1VuaXRJZCkudGhlbihidXNpbmVzc1VuaXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBidXNpbmVzc1VuaXQubG9jYWxlID8gYnVzaW5lc3NVbml0LmxvY2FsZSA6IEFwcFByb3BlcnRpZXMuZGVmYXVsdExvY2FsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0RXhwb3J0U2VydmljZS51cGxvYWRVc2Vycyh0aGlzLmltcG9ydElucHV0LCBsb2NhbGUsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU3VjY2VzcyEgTnVtYmVyIG9mIHVwbG9hZGVkIHJlY29yZHM6IFwiICsgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB1cGxvYWRpbmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0RXhwb3J0U2VydmljZS51cGxvYWRVc2Vycyh0aGlzLmltcG9ydElucHV0LCBBcHBQcm9wZXJ0aWVzLmRlZmF1bHRMb2NhbGUsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlN1Y2Nlc3MhIE51bWJlciBvZiB1cGxvYWRlZCByZWNvcmRzOiBcIiArIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB1cGxvYWRpbmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVDRSgpIHtcclxuICAgICAgICBsZXQgYnVzaW5lc3NVbml0SWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuYnVzaW5lc3NVbml0SWQgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzVW5pdElkID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXRJZCA9IHRoaXMuYnVzaW5lc3NVbml0SWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmltcG9ydElucHV0LnJvd0lucHV0cyA9IHRoaXMuaW5wdXRSZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmVycm9yRmxhZyA9PSBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRJbnB1dC5ncm91cHMgPSB0aGlzLmdldEdyb3Vwc0lkc0Zyb21TZWxlY3RhYmxlTGlzdCh0aGlzLm5ld0dyb3Vwc0xpc3QpO1xyXG4gICAgICAgIHRoaXMuaW1wb3J0SW5wdXQuY3JlZGl0cyA9IHRoaXMubmV3Q3JlZGl0c0xpc3Q7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmltcG9ydEV4cG9ydFNlcnZpY2UudXBsb2FkQ0UodGhpcy5pbXBvcnRJbnB1dCwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU3VjY2VzcyEgTnVtYmVyIG9mIHVwbG9hZGVkIHJlY29yZHM6IFwiICsgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHVwbG9hZGluZ1wiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVBbGwoKSB7XHJcbiAgICAgICAgbGV0IGJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIGlmICh0aGlzLmJ1c2luZXNzVW5pdElkID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXRJZCA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQgPSB0aGlzLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbXBvcnRJbnB1dC5yb3dJbnB1dHMgPSB0aGlzLmlucHV0UmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5lcnJvckZsYWcgPT0gZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuaW1wb3J0SW5wdXQuZ3JvdXBzID0gdGhpcy5nZXRHcm91cHNJZHNGcm9tU2VsZWN0YWJsZUxpc3QodGhpcy5uZXdHcm91cHNMaXN0KTtcclxuICAgICAgICB0aGlzLmltcG9ydElucHV0LmNyZWRpdHMgPSB0aGlzLm5ld0NyZWRpdHNMaXN0O1xyXG5cclxuICAgICAgICBsZXQgbG9jYWxlOiBzdHJpbmc7XHJcbiAgICAgICAgaWYgKGJ1c2luZXNzVW5pdElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QnVzaW5lc3NVbml0QnlJZChidXNpbmVzc1VuaXRJZCkudGhlbihidXNpbmVzc1VuaXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxlID0gYnVzaW5lc3NVbml0LmxvY2FsZSA/IGJ1c2luZXNzVW5pdC5sb2NhbGUgOiBBcHBQcm9wZXJ0aWVzLmRlZmF1bHRMb2NhbGU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRFeHBvcnRTZXJ2aWNlLnVwbG9hZEFsbCh0aGlzLmltcG9ydElucHV0LCBsb2NhbGUsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MocmVzdWx0LnVzZXJDb3VudCArIFwiIG5ldyB1c2VycyBhbmQgXCIgKyByZXN1bHQuY3JlZGl0Q291bnQgKyBcIiBuZXcgQ0UgcmVjb3JkcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdXBsb2FkaW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRFeHBvcnRTZXJ2aWNlLnVwbG9hZEFsbCh0aGlzLmltcG9ydElucHV0LCBBcHBQcm9wZXJ0aWVzLmRlZmF1bHRMb2NhbGUsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKHJlc3VsdC51c2VyQ291bnQgKyBcIiBuZXcgdXNlcnMgYW5kIFwiICsgcmVzdWx0LmNyZWRpdENvdW50ICsgXCIgbmV3IENFIHJlY29yZHMgY3JlYXRlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdXBsb2FkaW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEJ1c2luZXNzVW5pdHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRzRm9yU2VsZWN0b3IoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0cyA9IDxBcnJheTxJQnVzaW5lc3NVbml0Pj5yZXN1bHQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1c2luZXNzVW5pdHMubGVuZ3RoID09IDEgJiYgIXRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRJZCA9IHRoaXMuYnVzaW5lc3NVbml0c1swXSA9PSB1bmRlZmluZWQgfHwgdGhpcy5idXNpbmVzc1VuaXRzWzBdLmlkID09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5idXNpbmVzc1VuaXRzWzBdLmlkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREb3dubG9hZFRlbXBsYXRlTGluaygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmltcG9ydEV4cG9ydFNlcnZpY2UuZ2V0RG93bmxvYWRUZW1wbGF0ZVVybCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdERpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmJ1c2luZXNzVW5pdHMgPT0gdW5kZWZpbmVkIHx8IHRoaXMuYnVzaW5lc3NVbml0cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZpbHRlclJlc3VsdHModHlwZTogUmVzdWx0VHlwZSk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFJlc3VsdFR5cGUuVVNFUlM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkSW5wdXRSZWNvcmRzID0gdGhpcy5pbnB1dFJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQuY3JlYXRlVXNlckZsYWcgPT0gdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBSZXN1bHRUeXBlLkNFOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZElucHV0UmVjb3JkcyA9IHRoaXMuaW5wdXRSZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmVycm9yRmxhZyA9PSBmYWxzZSAmJiByZWNvcmQudHlwZSAhPSB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUmVzdWx0VHlwZS5FUlJPUjpcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRJbnB1dFJlY29yZHMgPSB0aGlzLmlucHV0UmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5lcnJvckZsYWcgPT0gdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBSZXN1bHRUeXBlLkFMTDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRJbnB1dFJlY29yZHMgPSB0aGlzLmlucHV0UmVjb3JkcztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvdW50TmV3Q2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZXdDZUNvdW50ID0gMDtcclxuICAgICAgICB0aGlzLmlucHV0UmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5lcnJvckZsYWcgPT0gZmFsc2UgJiYgcmVjb3JkLnR5cGUgIT0gdW5kZWZpbmVkKS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3Q2VDb3VudCsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgJChcIiNpbmZvRGlhbG9nXCIpLm1vZGFsKFwic2hvd1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dNb2RhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuSW1wb3J0TW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgJChcIiNhZGREaWFsb2dcIikubW9kYWwoXCJzaG93XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuQ0VNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICAkKFwiI2FkZENFRGlhbG9nXCIpLm1vZGFsKFwic2hvd1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlbkludmFsaWRGaWxlTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgJChcIiNpbnZhbGlkRmlsZVwiKS5tb2RhbChcInNob3dcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2F2ZUJ1dHRvbkVuYWJsZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRSZWNvcmRzLmxlbmd0aCAhPSB0aGlzLmlucHV0UmVjb3Jkcy5maWx0ZXIociA9PiByLmVycm9yRmxhZyAmJiByLmVycm9yTWVzc2FnZS5zcGxpdCgnLicpWzBdICE9ICdVc2VyIHdpbGwgYmUgY3JlYXRlZCBhcyBpbmFjdGl2ZScpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTYXZlQWxsQnV0dG9uRW5hYmxlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFJlY29yZHMubGVuZ3RoICE9IHRoaXMuaW5wdXRSZWNvcmRzLmZpbHRlcihyID0+IHIuZXJyb3JGbGFnKS5sZW5ndGggfHwgdGhpcy5pbnB1dFJlY29yZHMubGVuZ3RoICE9IHRoaXMuaW5wdXRSZWNvcmRzLmZpbHRlcihyID0+IHIuY3JlYXRlVXNlckZsYWcgPT0gZmFsc2UpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CdXNpbmVzc1VuaXRDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoYSA9PiB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdHJ1ZSwgMCk7XHJcbiAgICAgICAgbGV0IGJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgIGlmICh0aGlzLmJ1c2luZXNzVW5pdElkID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXRJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuaXNGcmVlUGxhbkJ1RnVsbCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzVW5pdElkID0gdGhpcy5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICAgICAgbGV0IGFycmF5OiBBcnJheTxudW1iZXI+ID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAgICAgICAgICAgYXJyYXkucHVzaChidXNpbmVzc1VuaXRJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QnVzaW5lc3NVbml0c1dpdGhGcmVlUGxhbihhcnJheSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5pc0ZyZWVCdXNpbmVzc1VuaXRzRnVsbChyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0ZyZWVQbGFuQnVGdWxsID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm5ld0NyZWRpdHNMaXN0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ3JlZGl0c0xpc3RzKGJ1c2luZXNzVW5pdElkKTtcclxuICAgICAgICB0aGlzLmxvYWRVc2VyR3JvdXBzRm9yU2VsZWN0b3IoYnVzaW5lc3NVbml0SWQpO1xyXG4gICAgICAgIHRoaXMuYmlsbGluZ1BsYW5TZXJ2aWNlLmdldE1heEZyZWVQbGFuVXNlcnMoKS50aGVuKGRhdGEgPT4gdGhpcy5tYXhGcmVlUGxhblVzZXJzID0gZGF0YSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJHcm91cHNGb3JTZWxlY3RvcihidXNpbmVzc1VuaXRJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRFeHBvcnRTZXJ2aWNlLmdldEdyb3Vwc0ZvckN1cnJlbnRCdShidXNpbmVzc1VuaXRJZCkudGhlbihncm91cHMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGlmaWNhdGlvbkdyb3VwcyA9IGFuZ3VsYXIuY29weShncm91cHMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ3JlZGl0c0xpc3RzKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmltcG9ydEV4cG9ydFNlcnZpY2UuZ2V0Q0VDcmVkaXRzRm9yQ3VycmVudEJ1KGJ1c2luZXNzVW5pdElkKS50aGVuKGNyZWRpdHMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWRpdHNMaXN0ID0gY3JlZGl0cztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRHcm91cHNMaXN0KCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBidXNpbmVzc1VuaXRJZHMgPSBbXTtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHMuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgYnVzaW5lc3NVbml0SWRzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRHcm91cHMoKSB7XHJcbiAgICAgICAgdGhpcy5uZXdHcm91cHNMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5tb2RpZmljYXRpb25Hcm91cHMuZm9yRWFjaChnID0+IHtcclxuICAgICAgICAgICAgaWYgKGcuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3R3JvdXBzTGlzdC5wdXNoKGcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZUdyb3VwKGdyb3VwSWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMubW9kaWZpY2F0aW9uR3JvdXBzLmZvckVhY2goKGdyb3VwOiBJU2VsZWN0YWJsZUV4dGVuZGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChncm91cC5pZCA9PSBncm91cElkKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5uZXdHcm91cHNMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5tb2RpZmljYXRpb25Hcm91cHMuZm9yRWFjaChyID0+IHtcclxuICAgICAgICAgICAgaWYgKHIuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3R3JvdXBzTGlzdC5wdXNoKHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMubW9kaWZpY2F0aW9uR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICAgICAgICBncm91cC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubmV3R3JvdXBzTGlzdCA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RHcm91cChpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGdyb3VwOiBJU2VsZWN0YWJsZUV4dGVuZGVkID0gdGhpcy5tb2RpZmljYXRpb25Hcm91cHNbaW5kZXhdO1xyXG4gICAgICAgIGdyb3VwLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFkZEdyb3VwcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBzSWRzRnJvbVNlbGVjdGFibGVMaXN0KGdyb3VwczogQXJyYXk8SVNlbGVjdGFibGU+KTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICAgICAgbGV0IGdyb3Vwc0lkcyA9IFtdO1xyXG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgICAgICAgZ3JvdXBzSWRzLnB1c2goZ3JvdXAuaWQpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGdyb3Vwc0lkcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5zZWxlY3RHcm91cChpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGdyb3VwOiBJU2VsZWN0YWJsZUV4dGVuZGVkID0gdGhpcy5tb2RpZmljYXRpb25Hcm91cHNbaW5kZXhdO1xyXG4gICAgICAgIGdyb3VwLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hZGRHcm91cHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RnJlZVBsYW5NZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJZb3UgaGF2ZSByZWFjaGVkIG1heGltdW0gOm51bWJlciBhY3RpdmUgdXNlcnMgYWxsb3dlZCBmb3IgRnJlZSBQbGFuXCIpXHJcbiAgICAgICAgICAgIC53aXRoKFwiOm51bWJlclwiLCB0aGlzLm1heEZyZWVQbGFuVXNlcnMpLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVG9wTWVudUFjdGl2ZSh0b3BNZW51S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b3BNZW51S2V5ID09IHRvcE1lbnVLZXk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1NlY3VyaXR5TW9kdWxlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcbmltcG9ydCB7SW1wb3J0RXhwb3J0U2VydmljZX0gZnJvbSBcIi4vSW1wb3J0RXhwb3J0U2VydmljZVwiO1xyXG5pbXBvcnQge0ltcG9ydENvbnRyb2xsZXJ9IGZyb20gXCIuL0ltcG9ydENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtBdXRoQ29yZU1vZHVsZX0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhDb3JlTW9kdWxlXCI7XHJcbmltcG9ydCB7RXhwb3J0Q29udHJvbGxlcn0gZnJvbSBcIi4vRXhwb3J0Q29udHJvbGxlclwiO1xyXG5cclxuZXhwb3J0IHZhciBJbXBvcnRFeHBvcnRNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJpbXBvcnRFeHBvcnRcIiwgW1xyXG4gICAgICAgIEF1dGhDb3JlTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgU2VjdXJpdHlNb2R1bGUubmFtZSxcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWVcclxuICAgIF0pXHJcbiAgICAuc2VydmljZShJbXBvcnRFeHBvcnRTZXJ2aWNlLk5BTUUsIEltcG9ydEV4cG9ydFNlcnZpY2UpXHJcbiAgICAuY29udHJvbGxlcihJbXBvcnRDb250cm9sbGVyLk5BTUUsIEltcG9ydENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihFeHBvcnRDb250cm9sbGVyLk5BTUUsIEV4cG9ydENvbnRyb2xsZXIpOyIsImltcG9ydCB7SVVybEJ1aWxkZXIsIFVybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVJvd0lucHV0fSBmcm9tIFwiLi9tb2RlbC9JUm93SW5wdXRcIjtcclxuaW1wb3J0IHtJVXNlckFuZENFSW5wdXR9IGZyb20gXCIuL21vZGVsL0lVc2VyQW5kQ0VJbnB1dFwiO1xyXG5pbXBvcnQge0lJbXBvcnRJbnB1dH0gZnJvbSBcIi4vbW9kZWwvSUltcG9ydElucHV0XCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLi9JU2VsZWN0YWJsZVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBJbXBvcnRFeHBvcnRTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaW1wb3J0RXhwb3J0LkltcG9ydEV4cG9ydFNlcnZpY2VcIjtcclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREb3dubG9hZFRlbXBsYXRlVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2ltcG9ydEV4cG9ydC9kb3dubG9hZFRlbXBsYXRlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwbG9hZFVzZXJzKGltcG9ydElucHV0OiBJSW1wb3J0SW5wdXQsIGxvY2FsZTogc3RyaW5nLCBidXNpbmVzc1VuaXRJZD86IGFueSk6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgbGV0IHVybCA9IFwiL2FwaS9pbXBvcnRFeHBvcnQvaW1wb3J0VXNlcnNcIjtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyBcIj9idXNpbmVzc1VuaXRJZD1cIiArIGJ1c2luZXNzVW5pdElkLnRvU3RyaW5nKCkgKyBcIiZsb2NhbGU9XCIgKyBsb2NhbGU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsICtcIj9sb2NhbGU9XCIgKyBsb2NhbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZSh1cmwpLCBpbXBvcnRJbnB1dClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB1cGxvYWRDRShpbXBvcnRJbnB1dDogSUltcG9ydElucHV0LCBidXNpbmVzc1VuaXRJZDogYW55KTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICBsZXQgdXJsID0gXCIvYXBpL2ltcG9ydEV4cG9ydC9pbXBvcnRDRVwiO1xyXG4gICAgICAgIGlmIChidXNpbmVzc1VuaXRJZCAhPSBudWxsKVxyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyBcIj9idXNpbmVzc1VuaXRJZD1cIiArIGJ1c2luZXNzVW5pdElkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKHVybCksIGltcG9ydElucHV0KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHVwbG9hZEFsbChpbXBvcnRJbnB1dDogSUltcG9ydElucHV0LCBsb2NhbGU6IHN0cmluZywgYnVzaW5lc3NVbml0SWQ6IGFueSk6IGFuZ3VsYXIuSVByb21pc2U8SVVzZXJBbmRDRUlucHV0PiB7XHJcbiAgICAgICAgbGV0IHVybCA9IFwiL2FwaS9pbXBvcnRFeHBvcnQvaW1wb3J0QWxsXCI7XHJcbiAgICAgICAgaWYgKGJ1c2luZXNzVW5pdElkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsICsgXCI/YnVzaW5lc3NVbml0SWQ9XCIgKyBidXNpbmVzc1VuaXRJZC50b1N0cmluZygpICsgXCImbG9jYWxlPVwiICsgbG9jYWxlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVybCA9IHVybCArXCI/bG9jYWxlPVwiICsgbG9jYWxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UodXJsKSwgaW1wb3J0SW5wdXQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBnZXRSZWdpc3RlcklucHV0cyhmaWxlOiBGaWxlLCBidXNpbmVzc1VuaXRJZD86IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVJvd0lucHV0Pj4ge1xyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcclxuICAgICAgICBkYXRhLmFwcGVuZCgnYnVzaW5lc3NVbml0SWQnLCBidXNpbmVzc1VuaXRJZCA9PSB1bmRlZmluZWQgPyAnJyA6IGJ1c2luZXNzVW5pdElkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGxldCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9pbXBvcnRFeHBvcnQvZ2V0UmVnaXN0ZXJJbnB1dHNcIiksIGRhdGEsIGNvbmZpZylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXRDRUlucHV0cyhmaWxlOiBGaWxlLCBidXNpbmVzc1VuaXRJZD86IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVJvd0lucHV0Pj4ge1xyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcclxuICAgICAgICBkYXRhLmFwcGVuZCgnYnVzaW5lc3NVbml0SWRzJywgYnVzaW5lc3NVbml0SWQgPT0gdW5kZWZpbmVkID8gJycgOiBidXNpbmVzc1VuaXRJZC50b1N0cmluZygpKVxyXG4gICAgICAgIGxldCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9pbXBvcnRFeHBvcnQvZ2V0Q0VJbnB1dHNcIiksIGRhdGEsIGNvbmZpZylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxJbnB1dHMoZmlsZTogRmlsZSwgYnVzaW5lc3NVbml0SWQ/OiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElSb3dJbnB1dD4+IHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGRhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XHJcbiAgICAgICAgZGF0YS5hcHBlbmQoJ2J1c2luZXNzVW5pdElkcycsIGJ1c2luZXNzVW5pdElkID09IHVuZGVmaW5lZCA/ICcnIDogYnVzaW5lc3NVbml0SWQudG9TdHJpbmcoKSlcclxuICAgICAgICBsZXQgY29uZmlnID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvaW1wb3J0RXhwb3J0L2dldEFsbElucHV0c1wiKSwgZGF0YSwgY29uZmlnKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDRUNyZWRpdHNGb3JDdXJyZW50QnUoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xyXG4gICAgICAgIGxldCB1cmw6IHN0cmluZyA9IFwiL2FwaS9pbXBvcnRFeHBvcnQvZ2V0QXZhaWxhYmxlQ3JlZGl0c1wiO1xyXG4gICAgICAgIGlmIChidXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCI/YnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1cmxCdWlsZGVyOiBJVXJsQnVpbGRlciA9IHRoaXMudXJsLmJhc2UodXJsKTtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQpIHtcclxuICAgICAgICAgICAgdXJsQnVpbGRlci5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh1cmxCdWlsZGVyLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEdyb3Vwc0ZvckN1cnJlbnRCdShidXNpbmVzc1VuaXRzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVNlbGVjdGFibGU+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2ltcG9ydEV4cG9ydC9nZXRBdmFpbGFibGVHcm91cHNcIiksIHtwYXJhbXM6IHtidXNpbmVzc1VuaXRzSWQ6IGJ1c2luZXNzVW5pdHNJZH19KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydFVzZXJzKGJ1c2luZXNzVW5pdElkPzogYW55KSB7XHJcbiAgICAgICAgbGV0IHVybCA9IFwiL2FwaS9pbXBvcnRFeHBvcnQvZXhwb3J0VXNlcnNcIjtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQgIT0gbnVsbClcclxuICAgICAgICAgICAgdXJsID0gdXJsICsgXCI/YnVzaW5lc3NVbml0SWQ9XCIgKyBidXNpbmVzc1VuaXRJZC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cmwuYmFzZSh1cmwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtTZWFyY2hDb250cm9sSGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9TZWFyY2hDb250cm9sSGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBYm91dENvbXBhbnlDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaW5mby5BYm91dENvbXBhbnlDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRMb2NhbGU6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsIHB1YmxpYyB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFCT1VUX0NPTVBBTllfTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiQWJvdXQgVXNcIiArIFwiIENvcmUgUGFydG5lcnNcIikudXBkYXRlKCk7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2NhbGUgPSBkYXRhLmxvY2FsZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1NlYXJjaENvbnRyb2xIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1NlYXJjaENvbnRyb2xIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi8uLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRkFRQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImluZm8uRkFRQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRsb2NhdGlvblwiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkZBUV9NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJDb3JlIEFDSElFVkUgLSBcIiArIFwiSGVscFwiKS51cGRhdGUoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0Fib3V0Q29tcGFueUNvbnRyb2xsZXJ9IGZyb20gXCIuL0Fib3V0Q29tcGFueUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtGQVFDb250cm9sbGVyfSBmcm9tIFwiLi9GQVFDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJ9IGZyb20gXCIuLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7SW50cm9TZXJ2aWNlfSBmcm9tIFwiLi9JbnRyb1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCB2YXIgSW5mb01vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgLm1vZHVsZShcImluZm9cIiwgW10pXHJcbiAgICAuY29udHJvbGxlcihBYm91dENvbXBhbnlDb250cm9sbGVyLk5BTUUsIEFib3V0Q29tcGFueUNvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihGQVFDb250cm9sbGVyLk5BTUUsIEZBUUNvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5OQU1FLCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcilcclxuICAgIC5zZXJ2aWNlKEludHJvU2VydmljZS5OQU1FLCBJbnRyb1NlcnZpY2UpOyIsImltcG9ydCB7SW50cm9Kc30gZnJvbSBcImludHJvLmpzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSW50cm9TZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaW5mby5JbnRyb1NlcnZpY2VcIjtcclxuXHJcbiAgICBwcml2YXRlIGludHJvSnNPYmplY3Q6IEludHJvSnM7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWVkIGltcGxlbWVudGVkIGludHJvIGpzIGZvciBzb21lIGRpc3BsYXkgdHlwZXMoZGVza3RvcCwgdGFibGV0LCBtb2JpbGUpXHJcbiAgICAgKiBTb21lIGNsYXNzZXMgZG9lc24ndCB1c2UgZm9yIG1vYmlsZS4gUmVtZW1iZXIgYWJvdXQgaXRcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgYW5ndWxhci5lbGVtZW50KHdpbmRvdykuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnRyb0pzT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmludHJvSnNPYmplY3QuZXhpdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0TGVhcm5lckhvbWVQYWdlSW50cm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb0pzT2JqZWN0ID0gaW50cm9KcygpLnNldE9wdGlvbnMoe1xyXG4gICAgICAgICAgICBzdGVwczogdGhpcy5idWlsZExlYXJuZXJIb21lUGFnZU9wdGlvbnMoKVxyXG4gICAgICAgIH0pLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0QWRtaW5pc3RyYXRpb25Ib21lUGFnZUludHJvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW50cm9Kc09iamVjdCA9IGludHJvSnMoKS5zZXRPcHRpb25zKHtcclxuICAgICAgICAgICAgc3RlcHM6IHRoaXMuYnVpbGRBZG1pbmlzdHJhdGlvblBhZ2VPcHRpb25zKClcclxuICAgICAgICB9KS5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydEluc3RydWN0b3JIb21lUGFnZUludHJvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW50cm9Kc09iamVjdCA9IGludHJvSnMoKS5zZXRPcHRpb25zKHtcclxuICAgICAgICAgICAgc3RlcHM6IHRoaXMuYnVpbGRJbnN0cnVjdG9ySG9tZVBhZ2VPcHRpb25zKClcclxuICAgICAgICB9KS5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydEF0dGVuZGVlTWFuYWdlckhvbWVQYWdlSW50cm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb0pzT2JqZWN0ID0gaW50cm9KcygpLnNldE9wdGlvbnMoe1xyXG4gICAgICAgICAgICBzdGVwczogdGhpcy5idWlsZEF0dGVuZGVlTWFuYWdlckhvbWVQYWdlT3B0aW9ucygpXHJcbiAgICAgICAgfSkuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRBdXRob3JIb21lUGFnZUludHJvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW50cm9Kc09iamVjdCA9IGludHJvSnMoKS5zZXRPcHRpb25zKHtcclxuICAgICAgICAgICAgc3RlcHM6IHRoaXMuYnVpbGRBdXRob3JIb21lUGFnZU9wdGlvbnMoKVxyXG4gICAgICAgIH0pLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0RWRpdE1hdGVyaWFsUGFnZUludHJvKGludHJvTnVtYmVyOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKGludHJvTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMToge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRyb0pzT2JqZWN0ID0gaW50cm9KcygpLnNldE9wdGlvbnMoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXBzOiB0aGlzLmJ1aWxkRWRpdE1hdGVyaWFsUGFnZUZpcnN0T3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICB9KS5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAyOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmludHJvSnNPYmplY3QgPSBpbnRyb0pzKCkuc2V0T3B0aW9ucyh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuYnVpbGRFZGl0TWF0ZXJpYWxQYWdlU2Vjb25kT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICB9KS5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAzOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmludHJvSnNPYmplY3QgPSBpbnRyb0pzKCkuc2V0T3B0aW9ucyh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuYnVpbGRFZGl0TWF0ZXJpYWxQYWdlVGhpcmRPcHRpb25zKClcclxuICAgICAgICAgICAgICAgIH0pLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIDQ6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW50cm9Kc09iamVjdCA9IGludHJvSnMoKS5zZXRPcHRpb25zKHtcclxuICAgICAgICAgICAgICAgICAgICBzdGVwczogdGhpcy5idWlsZEVkaXRNYXRlcmlhbFBhZ2VGb3VydGhPcHRpb25zKClcclxuICAgICAgICAgICAgICAgIH0pLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkTGVhcm5lckhvbWVQYWdlT3B0aW9ucygpOiBhbnkge1xyXG4gICAgICAgIGxldCBzdGVwcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJtb2JpbGVIb21lXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkhvbWUgcGFnZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlNtYXJ0IGhvbWUgcGFnZSBkZWxpdmVyaW5nIGFsbCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gaW4gb25lIHBsYWNlLiBUaGlzIGRhc2hib2FyZCBhbGxvd3MgdG8gdmlldyBtYWluIGxlYXJuaW5nIGNvbnRlbnQgd2hpY2ggaXMgYWxyZWFkeSBhdmFpbGFibGUgdG8geW91LlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibW9iaWxlSG9tZVwiKVswXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXQoKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJ0YWJsZXRIb21lXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkhvbWUgcGFnZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlNtYXJ0IGhvbWUgcGFnZSBkZWxpdmVyaW5nIGFsbCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gaW4gb25lIHBsYWNlLiBUaGlzIGRhc2hib2FyZCBhbGxvd3MgdG8gdmlldyBtYWluIGxlYXJuaW5nIGNvbnRlbnQgd2hpY2ggaXMgYWxyZWFkeSBhdmFpbGFibGUgdG8geW91LlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwidGFibGV0SG9tZVwiKVswXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJmaXJzdEludHJvUGFnZVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJIb21lIHBhZ2VcIixcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJTbWFydCBob21lIHBhZ2UgZGVsaXZlcmluZyBhbGwgaW1wb3J0YW50IGluZm9ybWF0aW9uIGluIG9uZSBwbGFjZS4gVGhpcyBkYXNoYm9hcmQgYWxsb3dzIHRvIHZpZXcgbWFpbiBsZWFybmluZyBjb250ZW50IHdoaWNoIGlzIGFscmVhZHkgYXZhaWxhYmxlIHRvIHlvdS5cIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpcnN0SW50cm9QYWdlXCIpWzBdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcInF1aWNrRmlsdGVyXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlF1aWNrIGZpbHRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwicXVpY2tGaWx0ZXJcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiUXVpY2sgZmlsdGVyIGJ5IHN0YXR1czogQWxsLCBOZXcsIEluIFByb2dyZXNzLCBDb21wbGV0ZWRcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJxdWlja0ZpbHRlck1hdGVyaWFsc1wiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJRdWljayBmaWx0ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcInF1aWNrRmlsdGVyTWF0ZXJpYWxzXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlF1aWNrIGZpbHRlciBieSBzdGF0dXM6IEFsbCwgQXVkaW8sIFZpZGVvLCBJbWFnZSwgTGluaywgT3RoZXJcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbHRlcnNGaWVsZFwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiQWR2YW5jZWQgZmlsdGVyXCIsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbHRlcnNGaWVsZFwiKVswXSxcclxuICAgICAgICAgICAgICAgIGludHJvOiBcIkFkdmFuY2VkIGZpbHRlcjogYWRkaXRpb25hbCBhZHZhbmNlZCBmaWxlciBieSBzdWJqZWN0LCB0eXBlLCBldGMuXCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJzZWFyY2hGaWVsZFwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiU2VhcmNoXCIsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcInNlYXJjaEZpZWxkXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgaW50cm86IFwiU2VhcmNoIGJ5IHRpdGxlLCBkZXNjcmlwdGlvbiwgdGFncy5cIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVZpZXcoKSAmJiAhdGhpcy5pc1RhYmxldCgpICYmICF0aGlzLmxlc3NUaGVuTWluKCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9jb3Vyc2VzSW50cm9TdGVwXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkNvdXJzZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9jb3Vyc2VzSW50cm9TdGVwXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlZpZXcgdGlsZXMgb2YgY291cnNlcyB5b3UgYXJlIHdvcmtpbmcgb24gYW5kIHByb2dyZXNzIG9mIHRoZWlyIGNvbXBsZXRpb24uIFN3aXRjaCB0byBsaXN0IHRvIGdldCB5b3VyIFRyYW5zY3JpcHRzIGFuZCBDZXJ0aWZpY2F0ZXMuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX2xlYXJuaW5nUGF0aHNJbnRyb1N0ZXBcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiTGVhcm5pbmcgcGF0aFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9sZWFybmluZ1BhdGhzSW50cm9TdGVwXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlZpZXcgdGl0bGUgb2YgYXNzaWduZWQgbGVhcm5pbmcgcGF0aHMgb3BlbmVkIG9uIG5leHQgY291cnNlIHlvdSBuZWVkIHRvIHdvcmsgb24uIFN3aXRjaCB0byBsaXN0IHRvIGdldCB5b3VyIENlcnRpZmljYXRlLiBUaGV5IGFyZSBhdmFpbGFibGUgb25seSBpZiB5b3UgaGF2ZSBhdCBsaXN0IG9uZSBMZWFybmluZyBQYXRocyBhc3NpZ25lZC4gSWYgeW91IGRvLCBNeSBMZWFybmluZyBQYXRoIHdpbGwgYmUgeW91ciBIb21lIHBhZ2UuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX21hdGVyaWFsc0ludHJvU3RlcFwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJNYXRlcmlhbHNcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImhvbWVfbWF0ZXJpYWxzSW50cm9TdGVwXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIkFjY2VzcyBsZWFybmluZyBtYXRlcmlhbHMgd2hpY2ggYXJlIGF2YWlsYWJsZSBmb3IgeW91LlwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9yZXBvcnRzSW50cm9TdGVwXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlJlcG9ydHNcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImhvbWVfcmVwb3J0c0ludHJvU3RlcFwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJWaWV3IHN0YXRpc3RpY3Mgb24geW91ciBwcm9ncmVzcyBhbmQgYWNoaWV2ZW1lbnRzLlwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImRyb3BEb3duSG9tZU1lbnVcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiTWVudVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiZHJvcERvd25Ib21lTWVudVwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJRdWlja2x5IGdldCB0byB0YXNrIHlvdSBuZWVkIHRvIGFjY29tcGxpc2hcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVZpZXcoKSAmJiAhdGhpcy5pc1RhYmxldCgpICYmICF0aGlzLnNtYWxsRGlzcGxheSgpKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImFkdmFuY2VkTWVudVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJBZHZhbmNlZCBtZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJhZHZhbmNlZE1lbnVcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiU2luZ2xlIHBvaW50IHRvIGZpbmQgYW5kIGFjY2VzcyBldmVyeXRoaW5nIGluIHlvdXIgQ29yZUFjaGlldmUgcGxhdGZvcm0uIENob29zZSBNeSBDb3Vyc2VzIHRvIGFjY2VzcyB5b3VyIG93biBsZWFybmluZyBob21lcGFnZS5cIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVZpZXcoKSAmJiAhdGhpcy5pc1RhYmxldCgpICYmIHRoaXMuc21hbGxEaXNwbGF5KCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiYWR2YW5jZWRNZW51U21hbGxEaXNwbGF5XCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkFkdmFuY2VkIG1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImFkdmFuY2VkTWVudVNtYWxsRGlzcGxheVwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJTaW5nbGUgcG9pbnQgdG8gZmluZCBhbmQgYWNjZXNzIGV2ZXJ5dGhpbmcgaW4geW91ciBDb3JlQWNoaWV2ZSBwbGF0Zm9ybS4gQ2hvb3NlIE15IENvdXJzZXMgdG8gYWNjZXNzIHlvdXIgb3duIGxlYXJuaW5nIGhvbWVwYWdlLlwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibW9iaWxlQ2FsZW5kYXJcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ2FsZW5kYXJcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcIm1vYmlsZUNhbGVuZGFyXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlZpZXcgbGlzdCBvZiBjb3Vyc2VzLCBJTFQgYW5kIHZJTFQgc2Vzc2lvbnMgZm9yIGRheSwgd2Vlaywgb3IgbW9udGguXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVGFibGV0KCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwidGFibGV0Q2FsZW5kYXJcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ2FsZW5kYXJcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcInRhYmxldENhbGVuZGFyXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlZpZXcgbGlzdCBvZiBjb3Vyc2VzLCBJTFQgYW5kIHZJTFQgc2Vzc2lvbnMgZm9yIGRheSwgd2Vlaywgb3IgbW9udGguXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiY2FsZW5kYXJcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ2FsZW5kYXJcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImNhbGVuZGFyXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlZpZXcgbGlzdCBvZiBjb3Vyc2VzLCBJTFQgYW5kIHZJTFQgc2Vzc2lvbnMgZm9yIGRheSwgd2Vlaywgb3IgbW9udGguXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZEFkbWluaXN0cmF0aW9uUGFnZU9wdGlvbnMoKTogYW55IHtcclxuICAgICAgICBsZXQgc3RlcHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibW9iaWxlSG9tZVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJIb21lIHBhZ2VcIixcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJTbWFydCBob21lIHBhZ2UgZGVsaXZlcmluZyBhbGwgaW1wb3J0YW50IGluZm9ybWF0aW9uIGluIG9uZSBwbGFjZS4gVGhpcyBkYXNoYm9hcmQgYWxsb3dzIHRvIHZpZXcgbWFpbiBsZWFybmluZyBjb250ZW50IHdoaWNoIGlzIGFscmVhZHkgYXZhaWxhYmxlIHRvIHlvdS5cIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcIm1vYmlsZUhvbWVcIilbMF1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVGFibGV0KCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwidGFibGV0SG9tZVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJIb21lIHBhZ2VcIixcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJTbWFydCBob21lIHBhZ2UgZGVsaXZlcmluZyBhbGwgaW1wb3J0YW50IGluZm9ybWF0aW9uIGluIG9uZSBwbGFjZS4gVGhpcyBkYXNoYm9hcmQgYWxsb3dzIHRvIHZpZXcgbWFpbiBsZWFybmluZyBjb250ZW50IHdoaWNoIGlzIGFscmVhZHkgYXZhaWxhYmxlIHRvIHlvdS5cIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcInRhYmxldEhvbWVcIilbMF1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiZmlyc3RJbnRyb1BhZ2VcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiSG9tZSBwYWdlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiU21hcnQgaG9tZSBwYWdlIGRlbGl2ZXJpbmcgYWxsIGltcG9ydGFudCBpbmZvcm1hdGlvbiBpbiBvbmUgcGxhY2UuIFRoaXMgZGFzaGJvYXJkIGFsbG93cyB0byB2aWV3IG1haW4gbGVhcm5pbmcgY29udGVudCB3aGljaCBpcyBhbHJlYWR5IGF2YWlsYWJsZSB0byB5b3UuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJmaXJzdEludHJvUGFnZVwiKVswXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVZpZXcoKSAmJiAhdGhpcy5pc1RhYmxldCgpKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImxlZnRNYWluTWVudVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJMZWFybmVyIE1lbnUgaXRlbXMgdmlzaWJpbGl0eVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibGVmdE1haW5NZW51XCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlNob3cgYW5kIGhpZGUgbWVudSBpdGVtcyB0byBzaW1wbGlmeSBVSSBldmVuIG1vcmUuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJhZG1pbmlzdHJhdGlvbl9sZWFybmluZ0NvbnRlbnRBZG1pbmlzdHJhdGlvbkNhcmRcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkxlYXJuaW5nIENvbnRlbnRcIixcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiYWRtaW5pc3RyYXRpb25fbGVhcm5pbmdDb250ZW50QWRtaW5pc3RyYXRpb25DYXJkXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgaW50cm86IFwiR2V0IHRvIFF1aXp6ZXMsIFN1cnZleXMsIEZsYXNoY2FyZHMsIE1hdGVyaWFscyBmcm9tIG9uZSB0aWxlLlwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9yZXBvcnRzSW50cm9TdGVwXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJSZXBvcnRzXCIsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImhvbWVfcmVwb3J0c0ludHJvU3RlcFwiKVswXSxcclxuICAgICAgICAgICAgICAgIGludHJvOiBcIlZpZXcgc3RhdGlzdGljcyBvbiB5b3VyIHVzZXIgcHJvZ3Jlc3MsIGFjdGl2aXR5LCBhbmQgYWNoaWV2ZW1lbnRzLlwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlVmlldygpICYmICF0aGlzLmlzVGFibGV0KCkgJiYgIXRoaXMuc21hbGxEaXNwbGF5KCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiYWR2YW5jZWRNZW51XCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkFkdmFuY2VkIG1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImFkdmFuY2VkTWVudVwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJTaW5nbGUgcG9pbnQgdG8gZmluZCBhbmQgYWNjZXNzIGV2ZXJ5dGhpbmcgaW4geW91ciBDb3JlQWNoaWV2ZSBwbGF0Zm9ybS4gQ2hvb3NlIE15IENvdXJzZXMgdG8gYWNjZXNzIHlvdXIgb3duIGxlYXJuaW5nIGhvbWVwYWdlLlwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlVmlldygpICYmICF0aGlzLmlzVGFibGV0KCkgJiYgdGhpcy5zbWFsbERpc3BsYXkoKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJhZHZhbmNlZE1lbnVTbWFsbERpc3BsYXlcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQWR2YW5jZWQgbWVudVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiYWR2YW5jZWRNZW51U21hbGxEaXNwbGF5XCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlNpbmdsZSBwb2ludCB0byBmaW5kIGFuZCBhY2Nlc3MgZXZlcnl0aGluZyBpbiB5b3VyIENvcmVBY2hpZXZlIHBsYXRmb3JtLiBDaG9vc2UgTXkgQ291cnNlcyB0byBhY2Nlc3MgeW91ciBvd24gbGVhcm5pbmcgaG9tZXBhZ2UuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGVWaWV3KCkgJiYgIXRoaXMuaXNUYWJsZXQoKSAmJiAhdGhpcy5sZXNzVGhlbk1pbigpKXtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ2aHMtbmF2YmFyX19hY2NvdW50LW5hbWVcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiTXkgUHJvZmlsZS9TZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ2aHMtbmF2YmFyX19hY2NvdW50LW5hbWVcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiR28gdG8gTXkgUHJvZmlsZS9TZXR0aW5ncyBhbmQgc2VsZWN0IHlvdXIgaG9tZSBwYWdlIHZpZXcgaWYgeW91IGhhdmUgbXVsdGlwbGUgcm9sZXMgKGFkbWluaXN0cmF0b3IsIGluc3RydWN0b3IsIGF0dGVuZGVlIG1hbmFnZXIsIGF1dGhvciwgbGVhcm5lcikuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZEluc3RydWN0b3JIb21lUGFnZU9wdGlvbnMoKTogYW55IHtcclxuICAgICAgICBsZXQgc3RlcHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibW9iaWxlSG9tZVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJIb21lIHBhZ2VcIixcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJTbWFydCBob21lIHBhZ2UgZGVsaXZlcmluZyBhbGwgaW1wb3J0YW50IGluZm9ybWF0aW9uIGluIG9uZSBwbGFjZS4gVGhpcyBkYXNoYm9hcmQgYWxsb3dzIHRvIHZpZXcgeW91ciBtYWluIGxlYXJuaW5nIGNvbnRlbnQgYW5kIGRhdGEuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJtb2JpbGVIb21lXCIpWzBdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1RhYmxldCgpKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcInRhYmxldEhvbWVcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiSG9tZSBwYWdlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiU21hcnQgaG9tZSBwYWdlIGRlbGl2ZXJpbmcgYWxsIGltcG9ydGFudCBpbmZvcm1hdGlvbiBpbiBvbmUgcGxhY2UuIFRoaXMgZGFzaGJvYXJkIGFsbG93cyB0byB2aWV3IHlvdXIgbWFpbiBsZWFybmluZyBjb250ZW50IGFuZCBkYXRhLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwidGFibGV0SG9tZVwiKVswXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJmaXJzdEludHJvUGFnZVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJIb21lIHBhZ2VcIixcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJTbWFydCBob21lIHBhZ2UgZGVsaXZlcmluZyBhbGwgaW1wb3J0YW50IGluZm9ybWF0aW9uIGluIG9uZSBwbGFjZS4gVGhpcyBkYXNoYm9hcmQgYWxsb3dzIHRvIHZpZXcgeW91ciBtYWluIGxlYXJuaW5nIGNvbnRlbnQgYW5kIGRhdGEuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJmaXJzdEludHJvUGFnZVwiKVswXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJjb21tZW50c0FuZEFzc2Vzc21lbnRzXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkNvbW1lbnRzIGFuZCBBc3Nlc3NtZW50c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiY29tbWVudHNBbmRBc3Nlc3NtZW50c1wiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJWaWV3IG5ldyBjb21tZW50cyBhbmQgYXNzZXNzbWVudHMgd2FpdGluZyBmb3IgeW91ciByZXNwb25zZSBmb3IgdG9kYXkgb3IgbGFzdCB3ZWVrLlwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwic2VhcmNoQW5kRmlsdGVyXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJTZWFyY2ggYW5kIGZpbHRlclwiLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJzZWFyY2hBbmRGaWx0ZXJcIilbMF0sXHJcbiAgICAgICAgICAgICAgICBpbnRybzogXCJTZWFyY2ggYnkgdGl0bGUsIGRlc2NyaXB0aW9uLCB0YWdzLiBGaWx0ZXIgYnkgc3ViamVjdCwgdHlwZSwgZXRjLlwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlVmlldygpICYmICF0aGlzLmlzVGFibGV0KCkgJiYgIXRoaXMubGVzc1RoZW5NaW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX2luc3RydWN0b3JfY291cnNlc0ludHJvU3RlcFwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJDb3Vyc2VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX2luc3RydWN0b3JfY291cnNlc0ludHJvU3RlcFwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJWaWV3IGNvdXJzZXMgeW91IGFyZSByZXNwb25zaWJsZSBmb3IuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX2luc3RydWN0b3JfbGVhcm5pbmdQYXRoc0ludHJvU3RlcFwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJMZWFybmluZyBQYXRoc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9pbnN0cnVjdG9yX2xlYXJuaW5nUGF0aHNJbnRyb1N0ZXBcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiVmlldyBsZWFybmluZyBwYXRocyBpbmNsdWRpbmcgY291cnNlcyB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvci4gVGhleSBhcmUgYXZhaWxhYmxlIG9ubHkgaWYgeW91IGhhdmUgYXQgbGlzdCBvbmUgTGVhcm5pbmcgUGF0aHMgYXNzaWduZWQuIElmIHlvdSBkbywgTGVhcm5pbmcgUGF0aCB3aWxsIGJlIHlvdXIgSG9tZSBwYWdlLlwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9pbnN0cnVjdG9yX3JlcG9ydHNJbnRyb1N0ZXBcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiUmVwb3J0c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9pbnN0cnVjdG9yX3JlcG9ydHNJbnRyb1N0ZXBcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiVmlldyBzdGF0aXN0aWNzIG9uIGxlYXJuaW5nIHByb2dyZXNzLCBjb3Vyc2Ugc3RhcnRzIGFuZCBjb21wbGV0aW9ucyBieSBjb3Vyc2VzIG1hbmFnZWQgYnkgeW91ci5cIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJkcm9wRG93bkhvbWVNZW51XCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIk1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImRyb3BEb3duSG9tZU1lbnVcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiUXVpY2tseSBnZXQgdG8gdGFzayB5b3UgbmVlZCB0byBhY2NvbXBsaXNoXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGVWaWV3KCkgJiYgIXRoaXMuaXNUYWJsZXQoKSAmJiAhdGhpcy5zbWFsbERpc3BsYXkoKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJhZHZhbmNlZE1lbnVcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQWR2YW5jZWQgbWVudVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiYWR2YW5jZWRNZW51XCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlNpbmdsZSBwb2ludCB0byBmaW5kIGFuZCBhY2Nlc3MgZXZlcnl0aGluZyBpbiB5b3VyIENvcmVBY2hpZXZlIHBsYXRmb3JtLiBDaG9vc2UgTXkgQ291cnNlcyB0byBhY2Nlc3MgeW91ciBvd24gbGVhcm5pbmcgaG9tZXBhZ2UuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGVWaWV3KCkgJiYgIXRoaXMuaXNUYWJsZXQoKSAmJiB0aGlzLnNtYWxsRGlzcGxheSgpKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImFkdmFuY2VkTWVudVNtYWxsRGlzcGxheVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJBZHZhbmNlZCBtZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJhZHZhbmNlZE1lbnVTbWFsbERpc3BsYXlcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiU2luZ2xlIHBvaW50IHRvIGZpbmQgYW5kIGFjY2VzcyBldmVyeXRoaW5nIGluIHlvdXIgQ29yZUFjaGlldmUgcGxhdGZvcm0uIENob29zZSBNeSBDb3Vyc2VzIHRvIGFjY2VzcyB5b3VyIG93biBsZWFybmluZyBob21lcGFnZS5cIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVZpZXcoKSAmJiAhdGhpcy5pc1RhYmxldCgpICYmICF0aGlzLmxlc3NUaGVuTWluKCkpe1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInZocy1uYXZiYXJfX2FjY291bnQtbmFtZVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJNeSBQcm9maWxlL1NldHRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInZocy1uYXZiYXJfX2FjY291bnQtbmFtZVwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJHbyB0byBNeSBQcm9maWxlL1NldHRpbmdzIGFuZCBzZWxlY3QgeW91ciBob21lIHBhZ2UgdmlldyBpZiB5b3UgaGF2ZSBtdWx0aXBsZSByb2xlcyAoYWRtaW5pc3RyYXRvciwgaW5zdHJ1Y3RvciwgYXR0ZW5kZWUgbWFuYWdlciwgYXV0aG9yLCBsZWFybmVyKS5cIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGVwcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkQXR0ZW5kZWVNYW5hZ2VySG9tZVBhZ2VPcHRpb25zKCk6IGFueSB7XHJcbiAgICAgICAgbGV0IHN0ZXBzID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcIm1vYmlsZUhvbWVcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiSG9tZSBwYWdlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiU21hcnQgaG9tZSBwYWdlIGRlbGl2ZXJpbmcgYWxsIGltcG9ydGFudCBpbmZvcm1hdGlvbiBpbiBvbmUgcGxhY2UuIFRoaXMgZGFzaGJvYXJkIGFsbG93cyB0byB2aWV3IHlvdXIgbWFpbiBsZWFybmluZyBjb250ZW50IGFuZCBkYXRhLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibW9iaWxlSG9tZVwiKVswXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXQoKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJ0YWJsZXRIb21lXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkhvbWUgcGFnZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlNtYXJ0IGhvbWUgcGFnZSBkZWxpdmVyaW5nIGFsbCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gaW4gb25lIHBsYWNlLiBUaGlzIGRhc2hib2FyZCBhbGxvd3MgdG8gdmlldyB5b3VyIG1haW4gbGVhcm5pbmcgY29udGVudCBhbmQgZGF0YS5cIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcInRhYmxldEhvbWVcIilbMF1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiZmlyc3RJbnRyb1BhZ2VcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiSG9tZSBwYWdlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiU21hcnQgaG9tZSBwYWdlIGRlbGl2ZXJpbmcgYWxsIGltcG9ydGFudCBpbmZvcm1hdGlvbiBpbiBvbmUgcGxhY2UuIFRoaXMgZGFzaGJvYXJkIGFsbG93cyB0byB2aWV3IHlvdXIgbWFpbiBsZWFybmluZyBjb250ZW50IGFuZCBkYXRhLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiZmlyc3RJbnRyb1BhZ2VcIilbMF1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiY29tbWVudHNcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ29tbWVudHNcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImNvbW1lbnRzXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlZpZXcgbmV3IGNvbW1lbnRzIHdhaXRpbmcgZm9yIHlvdXIgcmVzcG9uc2UgZm9yIHRvZGF5IG9yIGxhc3Qgd2Vlay5cIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcInNlYXJjaEFuZEZpbHRlclwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiU2VhcmNoIGFuZCBmaWx0ZXJcIixcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwic2VhcmNoQW5kRmlsdGVyXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgaW50cm86IFwiU2VhcmNoIGJ5IHRpdGxlLCBkZXNjcmlwdGlvbiwgdGFncy4gRmlsdGVyIGJ5IHN1YmplY3QsIHR5cGUsIGV0Yy5cIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVZpZXcoKSAmJiAhdGhpcy5pc1RhYmxldCgpICYmICF0aGlzLmxlc3NUaGVuTWluKCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9hdHRlbmRlZU1hbmFnZXJfcGFydGljaXBhbnRzSW50cm9TdGVwXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlByb2dyZXNzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX2F0dGVuZGVlTWFuYWdlcl9wYXJ0aWNpcGFudHNJbnRyb1N0ZXBcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiVmlldyBkZXRhaWxlZCBkYXRhIG9uIGxlYXJuaW5nIHByb2dyZXNzIGJ5IGNvdXJzZXMgbWFuYWdlZCBieSB5b3UuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX2F0dGVuZGVlTWFuYWdlcl9jb3Vyc2VzSW50cm9TdGVwXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkNvdXJzZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImhvbWVfYXR0ZW5kZWVNYW5hZ2VyX2NvdXJzZXNJbnRyb1N0ZXBcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiVmlldyBjb3Vyc2VzIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yLlwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9hdHRlbmRlZU1hbmFnZXJfbGVhcm5pbmdQYXRoc0ludHJvU3RlcFwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJMZWFybmluZyBQYXRoc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9hdHRlbmRlZU1hbmFnZXJfbGVhcm5pbmdQYXRoc0ludHJvU3RlcFwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJWaWV3IGxlYXJuaW5nIHBhdGhzIGluY2x1ZGluZyBjb3Vyc2VzIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yLlwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9hdHRlbmRlZU1hbmFnZXJfcmVwb3J0c0ludHJvU3RlcFwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJSZXBvcnRzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX2F0dGVuZGVlTWFuYWdlcl9yZXBvcnRzSW50cm9TdGVwXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlZpZXcgc3RhdGlzdGljcyBvbiBsZWFybmluZyBwcm9ncmVzcywgY291cnNlIHN0YXJ0cyBhbmQgY29tcGxldGlvbnMgYnkgY291cnNlcyBtYW5hZ2VkIGJ5IHlvdXIuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiZHJvcERvd25Ib21lTWVudVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJNZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJkcm9wRG93bkhvbWVNZW51XCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlF1aWNrbHkgZ2V0IHRvIHRhc2sgeW91IG5lZWQgdG8gYWNjb21wbGlzaFwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlVmlldygpICYmICF0aGlzLmlzVGFibGV0KCkgJiYgIXRoaXMuc21hbGxEaXNwbGF5KCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiYWR2YW5jZWRNZW51XCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkFkdmFuY2VkIG1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImFkdmFuY2VkTWVudVwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJTaW5nbGUgcG9pbnQgdG8gZmluZCBhbmQgYWNjZXNzIGV2ZXJ5dGhpbmcgaW4geW91ciBDb3JlQWNoaWV2ZSBwbGF0Zm9ybS4gQ2hvb3NlIE15IENvdXJzZXMgdG8gYWNjZXNzIHlvdXIgb3duIGxlYXJuaW5nIGhvbWVwYWdlLlwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlVmlldygpICYmICF0aGlzLmlzVGFibGV0KCkgJiYgdGhpcy5zbWFsbERpc3BsYXkoKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJhZHZhbmNlZE1lbnVTbWFsbERpc3BsYXlcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQWR2YW5jZWQgbWVudVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiYWR2YW5jZWRNZW51U21hbGxEaXNwbGF5XCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlNpbmdsZSBwb2ludCB0byBmaW5kIGFuZCBhY2Nlc3MgZXZlcnl0aGluZyBpbiB5b3VyIENvcmVBY2hpZXZlIHBsYXRmb3JtLiBDaG9vc2UgTXkgQ291cnNlcyB0byBhY2Nlc3MgeW91ciBvd24gbGVhcm5pbmcgaG9tZXBhZ2UuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGVWaWV3KCkgJiYgIXRoaXMuaXNUYWJsZXQoKSAmJiAhdGhpcy5sZXNzVGhlbk1pbigpKXtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ2aHMtbmF2YmFyX19hY2NvdW50LW5hbWVcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiTXkgUHJvZmlsZS9TZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ2aHMtbmF2YmFyX19hY2NvdW50LW5hbWVcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiR28gdG8gTXkgUHJvZmlsZS9TZXR0aW5ncyBhbmQgc2VsZWN0IHlvdXIgaG9tZSBwYWdlIHZpZXcgaWYgeW91IGhhdmUgbXVsdGlwbGUgcm9sZXMgKGFkbWluaXN0cmF0b3IsIGluc3RydWN0b3IsIGF0dGVuZGVlIG1hbmFnZXIsIGF1dGhvciwgbGVhcm5lcikuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZEF1dGhvckhvbWVQYWdlT3B0aW9ucygpOiBhbnkge1xyXG4gICAgICAgIGxldCBzdGVwcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJtb2JpbGVIb21lXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkhvbWUgcGFnZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlNtYXJ0IGhvbWUgcGFnZSBkZWxpdmVyaW5nIGFsbCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gaW4gb25lIHBsYWNlLiBUaGlzIGRhc2hib2FyZCBhbGxvd3MgdG8gdmlldyB5b3VyIG1haW4gbGVhcm5pbmcgY29udGVudCBhbmQgZGF0YS5cIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcIm1vYmlsZUhvbWVcIilbMF1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVGFibGV0KCkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwidGFibGV0SG9tZVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJIb21lIHBhZ2VcIixcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJTbWFydCBob21lIHBhZ2UgZGVsaXZlcmluZyBhbGwgaW1wb3J0YW50IGluZm9ybWF0aW9uIGluIG9uZSBwbGFjZS4gVGhpcyBkYXNoYm9hcmQgYWxsb3dzIHRvIHZpZXcgeW91ciBtYWluIGxlYXJuaW5nIGNvbnRlbnQgYW5kIGRhdGEuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJ0YWJsZXRIb21lXCIpWzBdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpcnN0SW50cm9QYWdlXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkhvbWUgcGFnZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlNtYXJ0IGhvbWUgcGFnZSBkZWxpdmVyaW5nIGFsbCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gaW4gb25lIHBsYWNlLiBUaGlzIGRhc2hib2FyZCBhbGxvd3MgdG8gdmlldyB5b3VyIG1haW4gbGVhcm5pbmcgY29udGVudCBhbmQgZGF0YS5cIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpcnN0SW50cm9QYWdlXCIpWzBdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwic2VhcmNoQW5kRmlsdGVyXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJTZWFyY2ggYW5kIGZpbHRlclwiLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJzZWFyY2hBbmRGaWx0ZXJcIilbMF0sXHJcbiAgICAgICAgICAgICAgICBpbnRybzogXCJTZWFyY2ggYnkgdGl0bGUsIGRlc2NyaXB0aW9uLCB0YWdzLiBGaWx0ZXIgYnkgc3ViamVjdCwgdHlwZSwgZXRjLlwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcInF1aWNrRmlsdGVyTWF0ZXJpYWxzXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlF1aWNrIGZpbHRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwicXVpY2tGaWx0ZXJNYXRlcmlhbHNcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiUXVpY2sgZmlsdGVyIGJ5IHN0YXR1czogQWxsLCBBdWRpbywgVmlkZW8sIEltYWdlLCBMaW5rLCBPdGhlclwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwic2VhcmNoRmllbGRcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIlNlYXJjaFwiLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJzZWFyY2hGaWVsZFwiKVswXSxcclxuICAgICAgICAgICAgICAgIGludHJvOiBcIlNlYXJjaCBieSB0aXRsZSwgZGVzY3JpcHRpb24sIHRhZ3MuXCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGVWaWV3KCkgJiYgIXRoaXMuaXNUYWJsZXQoKSAmJiAhdGhpcy5sZXNzVGhlbk1pbigpKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImhvbWVfYXV0aG9yX2NvdXJzZXNJbnRyb1N0ZXBcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ291cnNlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiaG9tZV9hdXRob3JfY291cnNlc0ludHJvU3RlcFwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJWaWV3IGNvdXJzZXMgbWFuYWdlZCBieSB5b3UuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX2F1dGhvcl9sZWFybmluZ1BhdGhzSW50cm9TdGVwXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkxlYXJuaW5nIFBhdGhzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX2F1dGhvcl9sZWFybmluZ1BhdGhzSW50cm9TdGVwXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlZpZXcgbGVhcm5pbmcgcGF0aHMgbWFuYWdlZCBieSB5b3UuIExlYXJuaW5nIFBhdGggd2lsbCBiZSB5b3VyIEhvbWUgcGFnZS5cIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcIlRocmVlSW50cm9TdGVwXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlF1aXp6ZXMsIFN1cnZleXMsIE1hdGVyaWFsc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiVGhyZWVJbnRyb1N0ZXBcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiVmlldyBxdWl6emVzLCBzdXJ2ZXlzLCBtYXRlcmlhbHMgbWFuYWdlZCBieSB5b3UuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJob21lX2F1dGhvcl9yZXBvcnRzSW50cm9TdGVwXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlJlcG9ydHNcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImhvbWVfYXV0aG9yX3JlcG9ydHNJbnRyb1N0ZXBcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiVmlldyBzdGF0aXN0aWNzIG9uIGxlYXJuaW5nIHByb2dyZXNzLCBjb3Vyc2Ugc3RhcnRzIGFuZCBjb21wbGV0aW9ucyBieSBjb3Vyc2VzIG1hbmFnZWQgYnkgeW91ci5cIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJkcm9wRG93bkhvbWVNZW51XCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIk1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImRyb3BEb3duSG9tZU1lbnVcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiUXVpY2tseSBnZXQgdG8gdGFzayB5b3UgbmVlZCB0byBhY2NvbXBsaXNoXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGVWaWV3KCkgJiYgIXRoaXMuaXNUYWJsZXQoKSAmJiAhdGhpcy5zbWFsbERpc3BsYXkoKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJhZHZhbmNlZE1lbnVcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQWR2YW5jZWQgbWVudVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwiYWR2YW5jZWRNZW51XCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGludHJvOiBcIlNpbmdsZSBwb2ludCB0byBmaW5kIGFuZCBhY2Nlc3MgZXZlcnl0aGluZyBpbiB5b3VyIENvcmVBY2hpZXZlIHBsYXRmb3JtLiBDaG9vc2UgTXkgQ291cnNlcyB0byBhY2Nlc3MgeW91ciBvd24gbGVhcm5pbmcgaG9tZXBhZ2UuXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGVWaWV3KCkgJiYgIXRoaXMuaXNUYWJsZXQoKSAmJiB0aGlzLnNtYWxsRGlzcGxheSgpKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImFkdmFuY2VkTWVudVNtYWxsRGlzcGxheVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJBZHZhbmNlZCBtZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJhZHZhbmNlZE1lbnVTbWFsbERpc3BsYXlcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW50cm86IFwiU2luZ2xlIHBvaW50IHRvIGZpbmQgYW5kIGFjY2VzcyBldmVyeXRoaW5nIGluIHlvdXIgQ29yZUFjaGlldmUgcGxhdGZvcm0uIENob29zZSBNeSBDb3Vyc2VzIHRvIGFjY2VzcyB5b3VyIG93biBsZWFybmluZyBob21lcGFnZS5cIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVZpZXcoKSAmJiAhdGhpcy5pc1RhYmxldCgpICYmICF0aGlzLmxlc3NUaGVuTWluKCkpe1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInZocy1uYXZiYXJfX2FjY291bnQtbmFtZVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJNeSBQcm9maWxlL1NldHRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInZocy1uYXZiYXJfX2FjY291bnQtbmFtZVwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgICBpbnRybzogXCJHbyB0byBNeSBQcm9maWxlL1NldHRpbmdzIGFuZCBzZWxlY3QgeW91ciBob21lIHBhZ2UgdmlldyBpZiB5b3UgaGF2ZSBtdWx0aXBsZSByb2xlcyAoYWRtaW5pc3RyYXRvciwgaW5zdHJ1Y3RvciwgYXR0ZW5kZWUgbWFuYWdlciwgYXV0aG9yLCBsZWFybmVyKS5cIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGVwcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkRWRpdE1hdGVyaWFsUGFnZUZpcnN0T3B0aW9ucygpOiBhbnkge1xyXG4gICAgICAgIGxldCBzdGVwcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJtYXRlcmlhbF91cGxvYWRGaWxlc1wiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdOZXcgZmVhdHVyZXMgZm9yIHZpZGVvL2F1ZGlvJyxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibWF0ZXJpYWxfdXBsb2FkRmlsZXNcIilbMF0sXHJcbiAgICAgICAgICAgICAgICBpbnRybzogJ1VwbG9hZCBhIHZpZGVvIG9yIGF1ZGlvIGZpbGUgYW5kIGEgbmV3IGZlYXR1cmUgLSBcIkNoZWNrcG9pbnRzXCIgd2lsbCBiZSBhdmFpbGFibGUgdG8geW91LidcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZEVkaXRNYXRlcmlhbFBhZ2VTZWNvbmRPcHRpb25zKCk6IGFueSB7XHJcbiAgICAgICAgbGV0IHN0ZXBzID0gW107XHJcblxyXG4gICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcIm1hdGVyaWFsX2NoZWNrcG9pbnRzXCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0FkZGluZyBDaGVja3BvaW50cycsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcIm1hdGVyaWFsX2NoZWNrcG9pbnRzXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgaW50cm86IFwiQ2hlY2twb2ludHMgZnVuY3Rpb25hbGl0eSBhbGxvd3MgeW91ICB0byBhdXRvbWF0aWNhbGx5IHBhdXNlIHRoZSB2aWRlby9hdWRpbyBhdCBzcGVjaWZpYyBpbnRlcnZhbHMsIHByb21wdGluZyBsZWFybmVycyB0byBjb25maXJtIHRoZWlyIHByZXNlbmNlIGFuZCBhdHRlbnRpdmVuZXNzLjxicj5TYXZlIHRoZSBtYXRlcmlhbCBhbmQgcmV0dXJuIHRvIGVkaXQgbW9kZSB0byBhZGQgY2hlY2twb2ludHMuXCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZEVkaXRNYXRlcmlhbFBhZ2VUaGlyZE9wdGlvbnMoKTogYW55IHtcclxuICAgICAgICBsZXQgc3RlcHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibWF0ZXJpYWxfQ2hlY2twb2ludFR5cGVcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAnQ2hlY2twb2ludCB0eXBlJyxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibWF0ZXJpYWxfQ2hlY2twb2ludFR5cGVcIilbMF0sXHJcbiAgICAgICAgICAgICAgICBpbnRybzogXCJTZWxlY3QgdGhlIHR5cGUgb2YgdGhlIGNoZWNrcG9pbnQuPGJyPlRvIGNvbnRpbnVlLCB0aGUgc3R1ZGVudCB3aWxsIG5lZWQgdG8gZWl0aGVyIHByZXNzIGEgYnV0dG9uIG9yIGFuc3dlciBhIHF1ZXN0aW9uLlwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibWF0ZXJpYWxfQ2hlY2twb2ludEF0dHJpYnV0ZXNcIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAnT3RoZXIgY2hlY2twb2ludCBhdHRyaWJ1dGVzJyxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibWF0ZXJpYWxfQ2hlY2twb2ludEF0dHJpYnV0ZXNcIilbMF0sXHJcbiAgICAgICAgICAgICAgICBpbnRybzogXCJTcGVjaWZ5IHRoZSB0aXRsZSAtIHRoZSB0ZXh0IG9mIHRoZSBjaGVja3BvaW50IHlvdSB3YW50IHRvIGFkZHJlc3MgdG8gdGhlIGxlYXJuZXIsIHRoZSB0aW1lIG9mIHRoZSBjaGVja3BvaW50IGFwcGVhcmFuY2UgYW5kIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gdG8gcHJlc3MgdG8gY29udGludWUgd2F0Y2hpbmcuXCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJtYXRlcmlhbF9jaGVja3BvaW50VGltZVwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdPdGhlciBjaGVja3BvaW50IGF0dHJpYnV0ZXMnLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJtYXRlcmlhbF9jaGVja3BvaW50VGltZVwiKVswXSxcclxuICAgICAgICAgICAgICAgIGludHJvOiBcIkRlZmluZSB0aGUgdGltZSBhbGxvdHRlZCB0byB0aGUgbGVhcm5lciB0byBwYXNzIHRoZSBjaGVja3BvaW50IGFuZCB3aGF0IHNob3VsZCBoYXBwZW4gaWYgdGhlIGxlYXJuZXIgZG9lc27igJl0IGNsaWNrIHRoZSBidXR0b24gYmVmb3JlIHRoZSB0aW1lb3V0LlwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibWF0ZXJpYWxfY2hlY2twb2ludEFuc3dlclwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdPdGhlciBjaGVja3BvaW50IGF0dHJpYnV0ZXMnLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJtYXRlcmlhbF9jaGVja3BvaW50QW5zd2VyXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgaW50cm86ICdTcGVjaWZ5IHRoZSBhbnN3ZXJzIGFuZCBtYXJrIHRoZSBjb3JyZWN0IG9wdGlvbi4nXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN0ZXBzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRFZGl0TWF0ZXJpYWxQYWdlRm91cnRoT3B0aW9ucygpOiBhbnkge1xyXG4gICAgICAgIGxldCBzdGVwcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJtYXRlcmlhbF9jaGVja3BvaW50TGlzdFwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdDaGVja3BvaW50cyBsaXN0JyxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwibWF0ZXJpYWxfY2hlY2twb2ludExpc3RcIilbMF0sXHJcbiAgICAgICAgICAgICAgICBpbnRybzogJ0hlcmUgeW91IGNhbiBzZWUgYW5kIG1hbmFnZSBhbGwgdGhlIGNyZWF0ZWQgY2hlY2twb2ludHMuJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcIm1hdGVyaWFsX3Jld2luZFByZXZlbnRpb25cIikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAnUmV3aW5kIHByZXZlbnRpb24nLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCJtYXRlcmlhbF9yZXdpbmRQcmV2ZW50aW9uXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgaW50cm86IFwiWW91IGNhbiBwcmV2ZW50IHRoZSB1c2VyIGZyb20gcmV3aW5kaW5nIHRocm91Z2ggdGhlIHZpZGVvLjxicj5BZnRlciBhZGRpbmcgYSBjaGVja3BvaW50LCB0aGlzIG9wdGlvbiBpcyBhdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYuXCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc01vYmlsZVZpZXcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5zY3JlZW4ud2lkdGggPD0gNzY3O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNUYWJsZXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5zY3JlZW4ud2lkdGggPD0gOTkxICYmIHdpbmRvdy5zY3JlZW4ud2lkdGggPj0gNzY4O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbGVzc1RoZW5NaW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNtYWxsRGlzcGxheSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA5OTI7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgY2xhc3MgRXZlbnRTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaW5mcmFzdHJ1Y3R1cmUuRXZlbnRTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnM6IE1hcDxzdHJpbmcsIEFycmF5PCgpID0+IHZvaWQ+PiA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJMaXN0ZW5lcihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJcIjtcclxuICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmhhcyhldmVudCkpIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGV2ZW50LCBbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzLmdldChldmVudCkucHVzaChsaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVucmVnaXN0ZXJMaXN0ZW5lcihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJcIjtcclxuICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmhhcyhldmVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlzdGVuZXJzLmdldChldmVudCkubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgdmFyIGwgPSB0aGlzLmxpc3RlbmVycy5nZXQoZXZlbnQpW2ldO1xyXG4gICAgICAgICAgICBpZiAobCA9PSBsaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuZ2V0KGV2ZW50KS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5saXN0ZW5lcnMuZ2V0KGV2ZW50KS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5kZWxldGUoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbm90aWZ5KGV2ZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBldmVudCA9IGV2ZW50IHx8IFwiXCI7XHJcbiAgICAgICAgdmFyIGxpc3RlbmVyczogQXJyYXk8YW55PiA9IHRoaXMubGlzdGVuZXJzLmdldChldmVudCk7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKGxpc3RlbmVycywgbGlzdGVuZXIgPT4gbGlzdGVuZXIoKSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1N0b3JhZ2VzfSBmcm9tIFwiLi9TdG9yYWdlXCI7XHJcbmltcG9ydCB7RXZlbnRTZXJ2aWNlfSBmcm9tIFwiLi9FdmVudFNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCB2YXIgSW5mcmFzdHJ1Y3R1cmVNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJpbmZyYXN0cnVjdHVyZVwiLCBbXSlcclxuICAgIC5jb25zdGFudChTdG9yYWdlcy5MT0NBTF9OQU1FLCBTdG9yYWdlcy5MT0NBTClcclxuICAgIC5jb25zdGFudChTdG9yYWdlcy5TRVNTSU9OX05BTUUsIFN0b3JhZ2VzLlNFU1NJT04pXHJcbiAgICAuc2VydmljZShFdmVudFNlcnZpY2UuTkFNRSwgRXZlbnRTZXJ2aWNlKTsiLCJleHBvcnQgY2xhc3MgU3RvcmFnZVdyYXBwZXIge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHB1dDxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQpIHtcclxuICAgICAgICB2YXIgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBzdHJpbmdpZmllZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldDxUPihrZXk6IHN0cmluZyk6IFQge1xyXG4gICAgICAgIHZhciBzdHJpbmdpZmllZCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkICYmIHN0cmluZ2lmaWVkLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyAkLnBhcnNlSlNPTihzdHJpbmdpZmllZClcclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb250YWlucyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBzdHJpbmdpZmllZCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkICYmIHN0cmluZ2lmaWVkLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZShrZXk6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdG9yYWdlcyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIExPQ0FMX05BTUUgPSBcImluZnJhc3RydWN0dXJlLkxvY2FsU3RvcmFnZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBTRVNTSU9OX05BTUUgPSBcImluZnJhc3RydWN0dXJlLlNlc3Npb25TdG9yYWdlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBMT0NBTDogU3RvcmFnZVdyYXBwZXIgPSBuZXcgU3RvcmFnZVdyYXBwZXIobG9jYWxTdG9yYWdlKTtcclxuICAgIHB1YmxpYyBzdGF0aWMgU0VTU0lPTjogU3RvcmFnZVdyYXBwZXIgPSBuZXcgU3RvcmFnZVdyYXBwZXIoc2Vzc2lvblN0b3JhZ2UpO1xyXG59XHJcbiIsImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiLi4vLi4vY29tbW9uL0NvbW1vbk1vZHVsZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5TW9kdWxlfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi4vLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcbmltcG9ydCB7Q29udGVudE1vZHVsZX0gZnJvbSBcIi4uLy4uL2NvbnRlbnQvQ29udGVudE1vZHVsZVwiO1xyXG5pbXBvcnQge0F1dGhvcml6ZU5ldFNlcnZpY2V9IGZyb20gXCIuL0F1dGhvcml6ZU5ldFNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCB2YXIgQXV0aG9yaXplTmV0TW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiYXV0aG9yaXplTmV0XCIsIFtcclxuICAgICAgICBDb21tb25Nb2R1bGUubmFtZSxcclxuICAgICAgICBTZWN1cml0eU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIFVybHNNb2R1bGUubmFtZSxcclxuICAgICAgICBDb250ZW50TW9kdWxlLm5hbWVcclxuICAgIF0pXHJcbiAgICAuc2VydmljZShBdXRob3JpemVOZXRTZXJ2aWNlLk5BTUUsIEF1dGhvcml6ZU5ldFNlcnZpY2UpOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUHVyY2hhc2VQcm9kdWN0Q2hlY2t9IGZyb20gXCIuLi9wYXlwYWwvbW9kZWwvSVB1cmNoYXNlUHJvZHVjdENoZWNrXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFOZXRPcmRlciB7XHJcbiAgICBidXNpbmVzc1VuaXRJZDogbnVtYmVyO1xyXG4gICAgYW1vdW50OiBudW1iZXI7XHJcbiAgICByZXR1cm5Vcmw6IHN0cmluZztcclxuICAgIHByb2R1Y3RJZDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQXV0aG9yaXplTmV0U2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImludGVncmF0aW9uLmF1dGhvcml6ZW5ldC5BdXRob3JpemVOZXRTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUb2tlbihidXNpbmVzc1VuaXRJZDogbnVtYmVyLCBhbW91bnQ6IG51bWJlciwgcmV0dXJuVXJsOiBzdHJpbmcsIHByb2R1Y3RJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBsZXQgb3JkZXJDcmVhdGlvbklucHV0ID0ge1xyXG4gICAgICAgICAgICBwcm9kdWN0SWQ6IHByb2R1Y3RJZCxcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQ6IGJ1c2luZXNzVW5pdElkLFxyXG4gICAgICAgICAgICByZXR1cm5Vcmw6IHJldHVyblVybFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9pbnRlZ3JhdGlvbi9hdXRob3JpemVuZXQvb3JkZXJzXCIpLnNlcnZpY2UoKSwgb3JkZXJDcmVhdGlvbklucHV0KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25maXJtT3JkZXIodHJhbnNhY3Rpb25JZDogc3RyaW5nLCBwcm9kdWN0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2ludGVncmF0aW9uL2F1dGhvcml6ZW5ldC9jb25maXJtLzpwcm9kdWN0SWQvb3JkZXI/dHJhbnNhY3Rpb25JZD06dHJhbnNhY3Rpb25JZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cHJvZHVjdElkXCIsIHByb2R1Y3RJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnRyYW5zYWN0aW9uSWRcIiwgdHJhbnNhY3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiLi4vLi4vY29tbW9uL0NvbW1vbk1vZHVsZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5TW9kdWxlfSBmcm9tIFwiLi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi4vLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcbmltcG9ydCB7QXp1cmVDb2duaXRpdmVTZXJ2aWNlc1NlcnZpY2V9IGZyb20gXCIuL0F6dXJlQ29nbml0aXZlU2VydmljZXNTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgdmFyIEF6dXJlQ29nbml0aXZlU2VydmljZXNNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJjb2duaXRpdmVTZXJ2aWNlc1wiLCBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgU2VjdXJpdHlNb2R1bGUubmFtZSxcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWUsXHJcbiAgICBdKVxyXG4gICAgLnNlcnZpY2UoQXp1cmVDb2duaXRpdmVTZXJ2aWNlc1NlcnZpY2UuTkFNRSwgQXp1cmVDb2duaXRpdmVTZXJ2aWNlc1NlcnZpY2UpO1xyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUltbWVyc2l2ZVJlYWRlckxhdW5jaERhdGF9IGZyb20gXCIuL21vZGVsL0lJbW1lcnNpdmVSZWFkZXJMYXVuY2hEYXRhXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQXp1cmVDb2duaXRpdmVTZXJ2aWNlc1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJpbnRlZ3JhdGlvbi5henVyZUNvZ25pdGl2ZVNlcnZpY2VzLkF6dXJlQ29nbml0aXZlU2VydmljZXNTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbW1lcnNpdmVSZWFkZXJMYXVuY2hEYXRhKCk6IGFuZ3VsYXIuSVByb21pc2U8SUltbWVyc2l2ZVJlYWRlckxhdW5jaERhdGE+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvaW50ZWdyYXRpb24vY29nbml0aXZlU2VydmljZXMvaW1tZXJzaXZlUmVhZGVyL2xhdW5jaERhdGFcIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25Nb2R1bGVcIjtcclxuaW1wb3J0IHtTZWN1cml0eU1vZHVsZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1NlY3VyaXR5TW9kdWxlXCI7XHJcbmltcG9ydCB7VXJsc01vZHVsZX0gZnJvbSBcIi4uLy4uL3VybHMvVXJsc01vZHVsZVwiO1xyXG5pbXBvcnQge0F6dXJlV2ViY2hhdEJvdGZyYW1ld29ya1NlcnZpY2V9IGZyb20gXCIuL0F6dXJlV2ViY2hhdEJvdGZyYW1ld29ya1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCB2YXIgQXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwid2ViY2hhdEJvdGZyYW1ld29ya1wiLCBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgU2VjdXJpdHlNb2R1bGUubmFtZSxcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWUsXHJcbiAgICBdKVxyXG4gICAgLnNlcnZpY2UoQXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrU2VydmljZS5OQU1FLCBBenVyZVdlYmNoYXRCb3RmcmFtZXdvcmtTZXJ2aWNlKTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJvdFNldHRpbmdzfSBmcm9tIFwiLi9tb2RlbC9JQm90U2V0dGluZ3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBenVyZVdlYmNoYXRCb3RmcmFtZXdvcmtTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaW50ZWdyYXRpb24uYXp1cmVXZWJjaGF0Qm90ZnJhbWV3b3JrLkF6dXJlV2ViY2hhdEJvdGZyYW1ld29ya1NlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNldHRpbmdzKCk6IGFuZ3VsYXIuSVByb21pc2U8SUJvdFNldHRpbmdzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2ludGVncmF0aW9uL3dlYmNoYXQvYm90ZnJhbWV3b3JrL3NldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSBcIi4uLy4uL2NvbW1vbi9Db21tb25Nb2R1bGVcIjtcclxuaW1wb3J0IHtTZWN1cml0eU1vZHVsZX0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L1NlY3VyaXR5TW9kdWxlXCI7XHJcbmltcG9ydCB7VXJsc01vZHVsZX0gZnJvbSBcIi4uLy4uL3VybHMvVXJsc01vZHVsZVwiO1xyXG5pbXBvcnQge0NvbnRlbnRNb2R1bGV9IGZyb20gXCIuLi8uLi9jb250ZW50L0NvbnRlbnRNb2R1bGVcIjtcclxuaW1wb3J0IHtGcmVlRW5yb2xsbWVudFNlcnZpY2V9IGZyb20gXCIuL0ZyZWVFbnJvbGxtZW50U2VydmljZVwiO1xyXG5cclxuZXhwb3J0IHZhciBGcmVlRW5yb2xsbWVudE1vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgLm1vZHVsZShcImZyZWVlbnJvbGxtZW50XCIsIFtcclxuICAgICAgICBDb21tb25Nb2R1bGUubmFtZSxcclxuICAgICAgICBTZWN1cml0eU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIFVybHNNb2R1bGUubmFtZSxcclxuICAgICAgICBDb250ZW50TW9kdWxlLm5hbWVcclxuICAgIF0pXHJcbiAgICAuc2VydmljZShGcmVlRW5yb2xsbWVudFNlcnZpY2UuTkFNRSwgRnJlZUVucm9sbG1lbnRTZXJ2aWNlKTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZyZWVFbnJvbGxtZW50T3JkZXIge1xyXG4gICAgYnVzaW5lc3NVbml0SWQ6IG51bWJlcjtcclxuICAgIHJldHVyblVybDogc3RyaW5nO1xyXG4gICAgcHJvZHVjdElkOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGcmVlRW5yb2xsbWVudFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJpbnRlZ3JhdGlvbi5mcmVlZW5yb2xsbWVudC5GcmVlRW5yb2xsbWVudFNlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZU9yZGVyKGZyZWVFbnJvbGxtZW50T3JkZXI6IEZyZWVFbnJvbGxtZW50T3JkZXIpOmFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9pbnRlZ3JhdGlvbi9lbnJvbGxtZW50L29yZGVycy9jcmVhdGVcIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgZnJlZUVucm9sbG1lbnRPcmRlcilcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29uZmlybUZyZWVFbnJvbGxtZW50KHByb2R1Y3RJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvaW50ZWdyYXRpb24vZW5yb2xsbWVudC9jb25maXJtLzpwcm9kdWN0SWQvb3JkZXJcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnByb2R1Y3RJZFwiLCBwcm9kdWN0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1BheVBhbFJvdXRlcn0gZnJvbSBcIi4uLy4uL3VybHMvUGF5UGFsUm91dGVyXCI7XHJcbmltcG9ydCB7UGF5UGFsU2VydmljZX0gZnJvbSBcIi4vUGF5UGFsU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4uLy4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQgSVFTZXJ2aWNlID0gYW5ndWxhci5JUVNlcnZpY2U7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uLy4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBheVBhbE9yZGVyQ2FuY2VsbGF0aW9uQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImludGVncmF0aW9uLnBheXBhbC5QYXlQYWxPcmRlckNhbmNlbGxhdGlvbkNvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwcml2YXRlIG9yZGVySWQ6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgUGF5UGFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRxOiBJUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwYXlQYWxTZXJ2aWNlOiBQYXlQYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcikge1xyXG4gICAgICAgIHRoaXMub3JkZXJJZCA9ICRyb3V0ZVBhcmFtc1tQYXlQYWxSb3V0ZXIuT1JERVJfSURfUEFSQU1dO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vcmRlcklkID09IG51bGwgfHwgdGhpcy5vcmRlcklkID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuZm9yd2FyZFRvQWNjZXNzRGVuaWVkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkcS5hbGwoW1xyXG4gICAgICAgICAgICAkcS53aGVuKHRoaXMuJHRpbWVvdXQoZnVuY3Rpb24oKSB7fSwgNTAwMCkpLFxyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZU9yZGVyKClcclxuICAgICAgICBdKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKGNvdXJzZXNSb3V0ZXIuaW5kZXhVcmwoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWxldGVPcmRlcigpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBheVBhbFNlcnZpY2UuZGVsZXRlT3JkZXIodGhpcy5vcmRlcklkKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7UGF5UGFsUm91dGVyfSBmcm9tIFwiLi4vLi4vdXJscy9QYXlQYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHtQYXlQYWxTZXJ2aWNlfSBmcm9tIFwiLi9QYXlQYWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7RmluYW5jZXNSb3V0ZXJ9IGZyb20gXCIuLi8uLi91cmxzL0ZpbmFuY2VzUm91dGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUGF5UGFsT3JkZXJDb25maXJtYXRpb25Db250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaW50ZWdyYXRpb24ucGF5cGFsLlBheVBhbE9yZGVyQ29uZmlybWF0aW9uQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgb3JkZXJJZDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgUGF5UGFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIEZpbmFuY2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwYXlQYWxTZXJ2aWNlOiBQYXlQYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZmluYW5jZXNSb3V0ZXI6IEZpbmFuY2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyKSB7XHJcbiAgICAgICAgdGhpcy5vcmRlcklkID0gJHJvdXRlUGFyYW1zW1BheVBhbFJvdXRlci5PUkRFUl9JRF9QQVJBTV07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9yZGVySWQgPT09IG51bGwgfHwgdGhpcy5vcmRlcklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuZm9yd2FyZFRvQWNjZXNzRGVuaWVkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbmZpcm1PcmRlcigpXHJcbiAgICAgICAgICAgIC50aGVuKChwdXJjaGFzZWRPcmRlcklkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybChmaW5hbmNlc1JvdXRlci5wdXJjaGFzZWRQcm9kdWN0VXJsKHB1cmNoYXNlZE9yZGVySWQpKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRhdGEuZXJyb3IgPT09IFwiZXJyb3Iub3JkZXIuY3JlYXRpb24udGltZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaW1lIGZvciBjb21wbGV0aW5nIHRoZSBwYXltZW50IGhhcyBleHBpcmVkLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwoY291cnNlc1JvdXRlci5pbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25maXJtT3JkZXIoKTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXlQYWxTZXJ2aWNlLmNvbmZpcm1PcmRlcih0aGlzLm9yZGVySWQpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVJlZmVyZW5jZWRPYmplY3R9IGZyb20gXCIuLi8uLi9JUmVmZXJlbmNlZE9iamVjdFwiO1xyXG5pbXBvcnQge0lQdXJjaGFzZVByb2R1Y3RDaGVja30gZnJvbSBcIi4vbW9kZWwvSVB1cmNoYXNlUHJvZHVjdENoZWNrXCI7XHJcbmltcG9ydCB7SVB1cmNoYXNlZFByb2R1Y3R9IGZyb20gXCIuLi8uLi9maW5hbmNlcy9tb2RlbHMvSVB1cmNoYXNlZFByb2R1Y3RcIjtcclxuaW1wb3J0IHtJSHR0cFByb21pc2VDYWxsYmFja0FyZ30gZnJvbSBcImFuZ3VsYXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQYXlQYWxTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiaW50ZWdyYXRpb24ucGF5cGFsLlBheVBhbFNlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZU9yZGVyKHByb2R1Y3RJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBsZXQgb3JkZXJDcmVhdGlvbklucHV0ID0ge1xyXG4gICAgICAgICAgICBwcm9kdWN0SWQ6IHByb2R1Y3RJZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9pbnRlZ3JhdGlvbi9wYXlwYWwvb3JkZXJzXCIpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG9yZGVyQ3JlYXRpb25JbnB1dClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlT3JkZXJTbWFydChwcm9kdWN0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgbGV0IG9yZGVyQ3JlYXRpb25JbnB1dCA9IHtcclxuICAgICAgICAgICAgcHJvZHVjdElkOiBwcm9kdWN0SWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvaW50ZWdyYXRpb24vcGF5cGFsL29yZGVycy9zbWFydFwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBvcmRlckNyZWF0aW9uSW5wdXQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbmZpcm1PcmRlcihvcmRlcklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9pbnRlZ3JhdGlvbi9wYXlwYWwvb3JkZXJzLzpvcmRlcklkL2NvbmZpcm1cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9yZGVySWRcIiwgb3JkZXJJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbmZpcm1PcmRlclNtYXJ0KG9yZGVySWQ6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9pbnRlZ3JhdGlvbi9wYXlwYWwvb3JkZXJzL2NvbmZpcm0vc21hcnRcIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgb3JkZXJJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+ICByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZU9yZGVyKG9yZGVySWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL2ludGVncmF0aW9uL3BheXBhbC9vcmRlcnMvOm9yZGVySWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9yZGVySWRcIiwgb3JkZXJJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlU3Vic2NyaXB0aW9uUHVyY2hhc2VPcmRlcihwcm9kdWN0SWQ6IG51bWJlciwgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBvcmRlckNyZWF0aW9uSW5wdXQgPSB7XHJcbiAgICAgICAgICAgIHByb2R1Y3RJZDogcHJvZHVjdElkLFxyXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25JZDogc3Vic2NyaXB0aW9uSWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvaW50ZWdyYXRpb24vcGF5cGFsL3N1YnNjcmlwdGlvbnMvb3JkZXJzXCIpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG9yZGVyQ3JlYXRpb25JbnB1dClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwcm92ZVN1YnNjcmlwdGlvbihwcm9kdWN0SWQ6IG51bWJlciwgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2ludGVncmF0aW9uL3BheXBhbC9zdWJzY3JpcHRpb25zLzpzdWJzY3JpcHRpb25JZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c3Vic2NyaXB0aW9uSWRcIiwgc3Vic2NyaXB0aW9uSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbFN1YnNjcmlwdGlvbihwdXJjaGFzZU9yZGVySWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2ludGVncmF0aW9uL3BheXBhbC9zdWJzY3JpcHRpb25zLzpwdXJjaGFzZU9yZGVySWQvY2FuY2VsXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpwdXJjaGFzZU9yZGVySWRcIiwgcHVyY2hhc2VPcmRlcklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFeHBpcmF0aW9uRGF0ZUZvclN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25JZDogc3RyaW5nKTogbmcuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvaW50ZWdyYXRpb24vcGF5cGFsL3N1YnNjcmlwdGlvbnMvJHtzdWJzY3JpcHRpb25JZH0vZXhwaXJhdGlvbmApKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxudW1iZXI+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFB1cmNoYXNlZE9yZGVyc1JlcG9ydChwYXJhbWV0ZXJzOiBhbnkpOiBuZy5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBsZXQgcmVwb3J0VHlwZSA9ICdQVVJDSEFTRURfT1JERVJTX1JFUE9SVCc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9kb3dubG9hZFRva2VuLzpyZXBvcnRUeXBlXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6cmVwb3J0VHlwZVwiLCByZXBvcnRUeXBlKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSx7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKS50aGVuKChyZXN1bHQ6IGFueSkgPT4gdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9kb3dubG9hZC86dG9rZW5cIikucGFyYW0oXCI6dG9rZW5cIiwgcmVzdWx0LmRhdGEudG9rZW4pLnNlcnZpY2UoKSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge0NvbnRlbnRNb2R1bGV9IGZyb20gXCIuLi8uLi9jb250ZW50L0NvbnRlbnRNb2R1bGVcIjtcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCIuLi8uLi9jb21tb24vQ29tbW9uTW9kdWxlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlNb2R1bGV9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9TZWN1cml0eU1vZHVsZVwiO1xyXG5pbXBvcnQge1VybHNNb2R1bGV9IGZyb20gXCIuLi8uLi91cmxzL1VybHNNb2R1bGVcIjtcclxuaW1wb3J0IHtQYXlQYWxTZXJ2aWNlfSBmcm9tIFwiLi9QYXlQYWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGF5UGFsT3JkZXJDYW5jZWxsYXRpb25Db250cm9sbGVyfSBmcm9tIFwiLi9QYXlQYWxPcmRlckNhbmNlbGxhdGlvbkNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtQYXlQYWxPcmRlckNvbmZpcm1hdGlvbkNvbnRyb2xsZXJ9IGZyb20gXCIuL1BheVBhbE9yZGVyQ29uZmlybWF0aW9uQ29udHJvbGxlclwiO1xyXG5cclxuZXhwb3J0IHZhciBQYXlQYWxNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJwdXJjaGFzZXNcIiwgW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZS5uYW1lLFxyXG4gICAgICAgIFNlY3VyaXR5TW9kdWxlLm5hbWUsXHJcbiAgICAgICAgVXJsc01vZHVsZS5uYW1lLFxyXG4gICAgICAgIENvbnRlbnRNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5jb250cm9sbGVyKFBheVBhbE9yZGVyQ2FuY2VsbGF0aW9uQ29udHJvbGxlci5OQU1FLCBQYXlQYWxPcmRlckNhbmNlbGxhdGlvbkNvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihQYXlQYWxPcmRlckNvbmZpcm1hdGlvbkNvbnRyb2xsZXIuTkFNRSwgUGF5UGFsT3JkZXJDb25maXJtYXRpb25Db250cm9sbGVyKVxyXG4gICAgLnNlcnZpY2UoUGF5UGFsU2VydmljZS5OQU1FLCBQYXlQYWxTZXJ2aWNlKTsiLCJpbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge0lTY2hlZHVsZWRKb2J9IGZyb20gXCIuL21vZGVsL0lTY2hlZHVsZWRKb2JcIjtcclxuaW1wb3J0IHtJU2NoZWR1bGVkSm9iU2VydmVySW5zdGFuY2V9IGZyb20gXCIuL21vZGVsL0lTY2hlZHVsZWRKb2JTZXJ2ZXJJbnN0YW5jZVwiO1xyXG5pbXBvcnQgSUxvY2F0aW9uU2VydmljZSA9IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZTtcclxuaW1wb3J0IHtTeXN0ZW1Qcm9wZXJ0eUtleX0gZnJvbSBcIi4uL3NldHRpbmdzL21vZGVscy9TeXN0ZW1Qcm9wZXJ0eUtleVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi4vSVNlbGVjdGFibGVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBKb2JzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImpvYnMuSm9ic0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgam9ic0dyaWRNb2RlbDogR3JpZE1vZGVsPElTY2hlZHVsZWRKb2I+O1xyXG4gICAgcHVibGljIGluc3RhbmNlc0dyaWRNb2RlbDogR3JpZE1vZGVsPElTY2hlZHVsZWRKb2JTZXJ2ZXJJbnN0YW5jZT47XHJcbiAgICBwdWJsaWMgc2VhcmNoaW5nVGFzazogc3RyaW5nO1xyXG4gICAgcHVibGljIHNvcnRlZEFzYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGpvYnNNYXA6IE1hcDxTdHJpbmcsIEFycmF5PElTY2hlZHVsZWRKb2I+PjtcclxuICAgIHB1YmxpYyBqb2JzTWFwS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgIHB1YmxpYyBhY3RpdmVKb2JzR3JvdXA6IHN0cmluZyA9ICdBTEwnO1xyXG4gICAgcHVibGljIG5lZWRzVG9GZWVsTWFwOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIC8vIHB1YmxpYyBuZWVkc1RvU2hvd1BhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0NST05fSk9CU19LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiQmFja2dyb3VuZCBKb2JzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmpvYnNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJU2NoZWR1bGVkSm9iPigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvam9ic1wiKSkpO1xyXG4gICAgICAgIHRoaXMuaW5zdGFuY2VzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVNjaGVkdWxlZEpvYlNlcnZlckluc3RhbmNlPigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvam9icy9zZXJ2ZXJzXCIpKSk7XHJcbiAgICAgICAgdGhpcy5qb2JzR3JpZE1vZGVsLnBhZ2VTaXplID0gNDA7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hpbmdUYXNrID0gbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXJ0Sm9iKGpvYjogSVNjaGVkdWxlZEpvYikge1xyXG4gICAgICAgIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL2pvYnMvJHtqb2IubmFtZX0vdHJpZ2dlcmApLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmpvYnNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiSm9iIFNUQVJURURcIik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiBub3RpZmllci5lcnJvcihcIkVycm9yIGluIEpvYiBzdGFydFwiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGludGVycnVwdEpvYihqb2I6IElTY2hlZHVsZWRKb2IpIHtcclxuICAgICAgICB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShgL2FwaS9qb2JzLyR7am9iLm5hbWV9L2ludGVycnVwdGApLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmpvYnNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU3RvcCBjb21tYW5kIHNlbnRcIik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiBub3RpZmllci5lcnJvcihcIkVycm9yIGluIHN0b3AgY29tbWFuZCBzZW5kaW5nXCIpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgQ2xlYXJTZWFyY2hpbmdUYXNrKCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoaW5nVGFzayA9IG51bGw7XHJcbiAgICAgICAgLy8gdGhpcy5qb2JzR3JpZE1vZGVsLnBhZ2VTaXplID0gMjA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHVibGljIGlzU2VhcmNoaW5nVGFza0lzTnVsbE9yQmxhbmsoKTogYm9vbGVhbiB7XHJcbiAgICAvLyAgICAgaWYodGhpcy5zZWFyY2hpbmdUYXNrICE9PSBudWxsICYmIHRoaXMuc2VhcmNoaW5nVGFzayAhPT0gJycpe1xyXG4gICAgLy8gICAgICAgICB0aGlzLmpvYnNHcmlkTW9kZWwucGFnZVNpemUgPSA0MDtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuam9ic0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcHVibGljIHNvcnRKb2JzQnlOYW1lKCkge1xyXG4gICAgICAgIC8vIHRoaXMuam9ic0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDQwO1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUpvYnNHcm91cCA9PSAnQUxMJykge1xyXG4gICAgICAgICAgICB0aGlzLmpvYnNHcmlkTW9kZWwuZW50cmllcy5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBmaXJzdC5uYW1lLmxvY2FsZUNvbXBhcmUoc2Vjb25kLm5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNvcnRlZEFzYykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0ZWRBc2MgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5qb2JzR3JpZE1vZGVsLmVudHJpZXMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0ZWRBc2MgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuam9ic01hcC5nZXQodGhpcy5hY3RpdmVKb2JzR3JvdXApLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IGZpcnN0Lm5hbWUubG9jYWxlQ29tcGFyZShzZWNvbmQubmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc29ydGVkQXNjKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRlZEFzYyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmpvYnNNYXAuZ2V0KHRoaXMuYWN0aXZlSm9ic0dyb3VwKS5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRlZEFzYyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQWxsSm9icygpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5uZWVkc1RvRmVlbE1hcCkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmpvYnNHcmlkTW9kZWwucGFnZVNpemUgPSA0MDtcclxuICAgICAgICAgICAgbGV0IGpvYnNHcm91cHMgPSBKU09OLnBhcnNlKFN5c3RlbVByb3BlcnR5S2V5LmpvYnNHcm91cEpzb24pO1xyXG4gICAgICAgICAgICBsZXQgam9ic01hcDogTWFwPHN0cmluZywgQXJyYXk8SVNjaGVkdWxlZEpvYj4+ID0gbmV3IE1hcDxzdHJpbmcsIEFycmF5PElTY2hlZHVsZWRKb2I+PigpO1xyXG4gICAgICAgICAgICB0aGlzLmpvYnNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKGpvYiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoam9ic01hcC5oYXMoam9ic0dyb3Vwc1tqb2IubmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgam9ic01hcC5nZXQoam9ic0dyb3Vwc1tqb2IubmFtZV0pLnB1c2goam9iKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgam9ic01hcC5zZXQoam9ic0dyb3Vwc1tqb2IubmFtZV0sIFtdKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmpvYnNNYXBLZXlzLnB1c2goam9ic0dyb3Vwc1tqb2IubmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGpvYnNNYXAuZ2V0KGpvYnNHcm91cHNbam9iLm5hbWVdKS5wdXNoKGpvYik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmpvYnNNYXAgPSBqb2JzTWFwO1xyXG4gICAgICAgICAgICB0aGlzLm5lZWRzVG9GZWVsTWFwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZUFjdGl2ZShqb2JzR3JvdXA6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRoaXMubmVlZHNUb1Nob3dQYWdpbmF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgLy8gdGhpcy5qb2JzR3JpZE1vZGVsLnBhZ2VTaXplID0gNDA7XHJcbiAgICAgICAgc3dpdGNoIChqb2JzR3JvdXApIHtcclxuICAgICAgICAgICAgY2FzZSAnQUxMJzoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVKb2JzR3JvdXAgPSAnQUxMJztcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMubmVlZHNUb1Nob3dQYWdpbmF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuam9ic0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnU1lTVEVNJzp7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUpvYnNHcm91cCA9ICdTWVNURU0nO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAgJ0NPVVJTRSc6e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVKb2JzR3JvdXAgPSAnQ09VUlNFJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ0NFUlRJRklDQVRFJzp7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUpvYnNHcm91cCA9ICdDRVJUSUZJQ0FURSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdRVUlaJzp7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUpvYnNHcm91cCA9ICdRVUlaJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ0ZJTEUnOntcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSm9ic0dyb3VwID0gJ0ZJTEUnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnV0VCSU5BUic6e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVKb2JzR3JvdXAgPSAnV0VCSU5BUic7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdMRUFSTklOR19QQVRIJzp7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUpvYnNHcm91cCA9ICdMRUFSTklOR19QQVRIJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ1BST0RVQ1QnOntcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSm9ic0dyb3VwID0gJ1BST0RVQ1QnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnQlVTSU5FU1NfVU5JVFMnOntcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSm9ic0dyb3VwID0gJ0JVU0lORVNTX1VOSVRTJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ0dBTUlGSUNBVElPTic6e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVKb2JzR3JvdXAgPSAnR0FNSUZJQ0FUSU9OJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtKb2JzQ29udHJvbGxlcn0gZnJvbSBcIi4vSm9ic0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcblxyXG5leHBvcnQgY29uc3QgSm9ic01vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgLm1vZHVsZShcImpvYnNcIiwgW1xyXG4gICAgICAgIFVybHNNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5jb250cm9sbGVyKEpvYnNDb250cm9sbGVyLk5BTUUsIEpvYnNDb250cm9sbGVyKTsiLCJpbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7SUNlcnRpZmljYXRlVGVtcGxhdGV9IGZyb20gXCIuLi9jZXJ0aWZpY2F0ZXMvbW9kZWxzL0lDZXJ0aWZpY2F0ZVRlbXBsYXRlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoU2VydmljZX0gZnJvbSBcIi4vTGVhcm5pbmdQYXRoU2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7VXBsb2FkVXRpbHN9IGZyb20gXCIuLi91dGlscy9VcGxvYWRVdGlsc1wiO1xyXG5pbXBvcnQge0NlcnRpZmljYXRlU2VydmljZX0gZnJvbSBcIi4uL2NlcnRpZmljYXRlcy9DZXJ0aWZpY2F0ZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7VXBsb2Fkc1NlcnZpY2V9IGZyb20gXCIuLi9zdG9yYWdlL1VwbG9hZHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtDZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZX0gZnJvbSBcIi4uL2NlcnRpZmljYXRlcy9tb2RlbHMvQ2VydGlmaWNhdGVUZW1wbGF0ZVR5cGVcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoQ291cnNlfSBmcm9tIFwiLi9tb2RlbHMvSUxlYXJuaW5nUGF0aENvdXJzZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGV9IGZyb20gXCIuL21vZGVscy9MZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlXCI7XHJcbmltcG9ydCB7UHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzfSBmcm9tIFwiLi4vdXRpbHMvUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzXCI7XHJcbmltcG9ydCB7Q291cnNlQ29tcGxldGlvbk9yZGVyfSBmcm9tIFwiLi9tb2RlbHMvQ291cnNlQ29tcGxldGlvbk9yZGVyXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0lRU2VydmljZX0gZnJvbSBcImFuZ3VsYXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV4dGVuZGVkQ2VydGlmaWNhdGVUZW1wbGF0ZSBleHRlbmRzIElDZXJ0aWZpY2F0ZVRlbXBsYXRlIHtcclxuICAgIHR5cGU/OiBDZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExlYXJuaW5nUGF0aENyZWF0ZUVkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibGVhcm5pbmdQYXRocy5MZWFybmluZ1BhdGhDcmVhdGVFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoYXNBbGxCdXNpbmVzc1VuaXRzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGxhbmd1YWdlU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoQ291cnNlc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRpc2FibGVkU2F2ZUJ1dHRvbjogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1ZhbGlkaXR5SW5QZXJwZXR1aXR5OiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBoYXNQcmV2aWV3VXJsQ2FuY2VsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGg6IElMZWFybmluZ1BhdGggPSB7fTtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhDb3Vyc2VzOiBJTGVhcm5pbmdQYXRoQ291cnNlW10gPSBbXTtcclxuICAgIHB1YmxpYyBwcmV2aWV3VXJsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVzOiBBcnJheTxJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlPiA9IFtdO1xyXG4gICAgcHVibGljIGNob3NlbkNlcnRpZmljYXRlVGVtcGxhdGU6IElFeHRlbmRlZENlcnRpZmljYXRlVGVtcGxhdGU7XHJcbiAgICBwdWJsaWMgcHJldmlldzogRmlsZTtcclxuICAgIHB1YmxpYyBjcm9wcGVkSW1hZ2U6IEZpbGU7XHJcbiAgICBwdWJsaWMgdXNlcjogSVVzZXJJbmZvID0ge307XHJcbiAgICBwdWJsaWMgZWR1Y2F0aW9uSXRlbVR5cGU6IHN0cmluZyA9IFwiTGVhcm5pbmcgUGF0aFwiO1xyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyQnVzaW5lc3NVbml0czogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBpc0xlYXJuaW5nUGF0aEluVXNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNMZWFybmluZ1BhdGhDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGlzRGVhY3RpdmF0ZUJ1dHRvbkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFzTWFuZGF0b3J5Q291cnNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgVXBsb2FkVXRpbHMuTkFNRSxcclxuICAgICAgICBDZXJ0aWZpY2F0ZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoc1JvdXRlcjogTGVhcm5pbmdQYXRoc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoU2VydmljZTogTGVhcm5pbmdQYXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXBsb2FkVXRpbHM6IFVwbG9hZFV0aWxzLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjZXJ0aWZpY2F0ZVNlcnZpY2U6IENlcnRpZmljYXRlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlOiBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnJhbmRpbmdTZXJ2aWNlOiBDdXN0b21CcmFuZGluZ1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aElkID0gJHJvdXRlUGFyYW1zW0xlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IGhhc0xlYXJuaW5nUGF0aElkOiBib29sZWFuID0gdGhpcy5sZWFybmluZ1BhdGhJZCAhPSBudWxsO1xyXG4gICAgICAgIGxldCBsZWFybmluZ1BhdGhJZFN0cjogc3RyaW5nID0gU3RyaW5nKHRoaXMubGVhcm5pbmdQYXRoSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZVxyXG4gICAgICAgICAgICAuZGVtYW5kTGVhcm5pbmdQYXRoUGVybWlzc2lvbnNJZihoYXNMZWFybmluZ1BhdGhJZCwgbGVhcm5pbmdQYXRoSWRTdHIsIGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zID0+IGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zLmVkaXQpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9uc0lmKCFoYXNMZWFybmluZ1BhdGhJZCwgc3lzdGVtUGVybWlzc2lvbnMgPT4gc3lzdGVtUGVybWlzc2lvbnMuYWRkTGVhcm5pbmdQYXRocyk7XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuRURVQ0FUSU9OX0xFQVJOSU5HX1BBVEhTX01FTlVfS0VZKTtcclxuXHJcbiAgICAgICAgaWYgKGhhc0xlYXJuaW5nUGF0aElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZExlYXJuaW5nUGF0aCgpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGVhcm5pbmdQYXRoSW5Vc2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMZWFybmluZ1BhdGhMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQ2VydGlmaWNhdGVzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRMZWFybmluZ1BhdGhDb3Vyc2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhDb3Vyc2VzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJOZXcgTGVhcm5pbmcgUGF0aFwiKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodXNlciwgdGhpcy51c2VyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXJCdXNpbmVzc1VuaXRzID0gdXNlci5idXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzID0gdXNlci5hbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoLm51bWJlck9mRWxlY3RpdmVDb3Vyc2VzVG9CZUNvbXBsZXRlZCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aC5sYW5ndWFnZUlkID0gUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzLmRldGVybWluZVJlbGF0ZWRMYW5ndWFnZUlkKHVzZXIubG9jYWxlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aC5jb3Vyc2VDb21wbGV0aW9uT3JkZXIgPSBDb3Vyc2VDb21wbGV0aW9uT3JkZXJbQ291cnNlQ29tcGxldGlvbk9yZGVyLkZSRUVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGguc3RhcnREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oJ2NoYW5nZUNvdXJzZUluY2x1c2lvblR5cGUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzTWFuZGF0b3J5Q291cnNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoQ291cnNlcy5mb3JFYWNoKGNvdXJzZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY291cnNlLmNvdXJzZUluY2x1c2lvblR5cGUgPT0gTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZVtMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlLk1BTkRBVE9SWV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc01hbmRhdG9yeUNvdXJzZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc0xlYXJuaW5nUGF0aEluVXNlV2FybmluZ01lc3NhZ2VJZk5lZWQoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgbGV0IHByZXZpZXc6IEZpbGUgPSB0aGlzLmNyb3BwZWRJbWFnZSA/IHRoaXMuY3JvcHBlZEltYWdlIDogdGhpcy5wcmV2aWV3O1xyXG4gICAgICAgIGxldCBoYXNQcmV2aWV3VXJsQ2FuY2VsZWQ6IGJvb2xlYW4gPSB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZDtcclxuICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoLmVuZERhdGUgPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5sZWFybmluZ1BhdGguZW5kRGF0ZVRleHQpO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoLnN0YXJ0RGF0ZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmxlYXJuaW5nUGF0aC5zdGFydERhdGVUZXh0KTtcclxuICAgICAgICBpZiAodGhpcy5sZWFybmluZ1BhdGhJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFNlcnZpY2UudXBkYXRlKHRoaXMubGVhcm5pbmdQYXRoLCBoYXNQcmV2aWV3VXJsQ2FuY2VsZWQsIHByZXZpZXcsIHRoaXMubGVhcm5pbmdQYXRoQ291cnNlcylcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdFtVcGxvYWRzU2VydmljZS5MRUFSTklOR19QQVRIX0tFWV0sIHRoaXMubGVhcm5pbmdQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpZXcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFV0aWxzLmNhbmNlbExlYXJuaW5nUGF0aFByZXZpZXdzKHRoaXMubGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gdGhpcy51cGxvYWQocHJldmlldywgdGhpcy5sZWFybmluZ1BhdGhJZCwgXCJwcmV2aWV3XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVNlcnZpY2UudXBkYXRlQ2VydGlmaWNhdGVUZW1wbGF0ZXNGb3JMZWFybmluZ1BhdGgodGhpcy5sZWFybmluZ1BhdGhJZCwgdGhpcy5sZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHEud2hlbihwcm9taXNlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdWNjZXNzQ2FsbGJhY2sodGhpcy5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLmNyZWF0ZSh0aGlzLmxlYXJuaW5nUGF0aCwgcHJldmlldywgdGhpcy5sZWFybmluZ1BhdGhDb3Vyc2VzKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0W1VwbG9hZHNTZXJ2aWNlLkxFQVJOSU5HX1BBVEhfS0VZXSwgdGhpcy5sZWFybmluZ1BhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aWV3ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWQocHJldmlldywgdGhpcy5sZWFybmluZ1BhdGguaWQsIFwicHJldmlld1wiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aElkID0gdGhpcy5sZWFybmluZ1BhdGguaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVNlcnZpY2UudXBkYXRlQ2VydGlmaWNhdGVUZW1wbGF0ZXNGb3JMZWFybmluZ1BhdGgodGhpcy5sZWFybmluZ1BhdGhJZCwgdGhpcy5sZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NDYWxsYmFjayh0aGlzLmxlYXJuaW5nUGF0aElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aElkID0gdGhpcy5sZWFybmluZ1BhdGguaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVTZXJ2aWNlLnVwZGF0ZUNlcnRpZmljYXRlVGVtcGxhdGVzRm9yTGVhcm5pbmdQYXRoKHRoaXMubGVhcm5pbmdQYXRoSWQsIHRoaXMubGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3VjY2Vzc0NhbGxiYWNrKHRoaXMubGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgY2FzZSBcImVycm9yLnN0b3JhZ2Uubm90LmF2YWlsYWJsZVwiOlxyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZS4gVGh1bWJuYWlsIGhhcyBub3QgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZXJyb3IucHJldmlldy50eXBlXCI6XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkludmFsaWQgZmlsZSBmb3JtYXQ6IHBsZWFzZSBzZWxlY3QgYSBmaWxlIHdpdGggLmpwZyBvciAucG5nIGV4dGVuc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZXJyb3IuZHVwbGljYXRlLnByb2R1Y3QuaWRcIjpcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiUHJvZHVjdCBJRCBpcyBub3QgdW5pcXVlXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsZWFybmluZy5wYXRoLnJlcXVpcmVkLmNvdXJzZS5jb3VudFwiOlxyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJMZWFybmluZyBwYXRoIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY291cnNlXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihyZXNwb25zZS5kYXRhLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRQcmV2aWV3KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3VXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlld1VybCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5oYXNQcmV2aWV3VXJsQ2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jcm9wcGVkSW1hZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jcm9wcGVkSW1hZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXN0b3JlUHJldmlld1VybCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByZXZpZXcgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3VXJsID0gdGhpcy5sZWFybmluZ1BhdGgucHJldmlld1VybDtcclxuICAgICAgICB0aGlzLnByZXZpZXcgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5jcm9wcGVkSW1hZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMubGVhcm5pbmdQYXRoLnByZXZpZXdVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGgucHJldmlld1VybCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5oYXNQcmV2aWV3VXJsQ2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYW5WYWxpZGl0eSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aC5lbmREYXRlVGV4dCA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmxlYXJuaW5nUGF0aCAmJiB0aGlzLmxlYXJuaW5nUGF0aC5wZXJtaXNzaW9ucyAmJiB0aGlzLmxlYXJuaW5nUGF0aC5wZXJtaXNzaW9ucy52aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuZGV0YWlsc1VybCh0aGlzLmxlYXJuaW5nUGF0aElkKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubGVhcm5pbmdQYXRoc1JvdXRlci5pbmRleFVybCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTGVhcm5pbmdQYXRoKCk6IGFuZ3VsYXIuSVByb21pc2U8SUxlYXJuaW5nUGF0aD4ge1xyXG4gICAgICAgIGxldCBwcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGg+ID0gdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLmdldCh0aGlzLmxlYXJuaW5nUGF0aElkKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5sZWFybmluZ1BhdGgpO1xyXG4gICAgICAgICAgICBsZXQgbGVhcm5pbmdQYXRoQnJlYWRjcnVtYiA9IHRoaXMubGVhcm5pbmdQYXRoLm5hbWUgfHwgdGhpcy5sZWFybmluZ1BhdGguc3ViamVjdE5hbWU7XHJcbiAgICAgICAgICAgIGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIgPSBsZWFybmluZ1BhdGhCcmVhZGNydW1iLmxlbmd0aCA+IDQwID8gbGVhcm5pbmdQYXRoQnJlYWRjcnVtYi5zdWJzdHJpbmcoMCwgNDApICsgXCIuLi5cIiA6IGxlYXJuaW5nUGF0aEJyZWFkY3J1bWI7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxlYXJuaW5nUGF0aC5uYW1lID09IFwiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBsZWFybmluZyBwYXRoIGRldGFpbHNcIil7XHJcbiAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJFZGl0IExlYXJuaW5nIFBhdGggXCIgKyBcIuKAmFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKyBsZWFybmluZ1BhdGhCcmVhZGNydW1iICsgXCLigJlcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aC5lbmREYXRlVGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShyZXN1bHQuZW5kRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoLnN0YXJ0RGF0ZVRleHQgPSBNb21lbnQuaXNWYWxpZERhdGUocmVzdWx0LnN0YXJ0RGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxlYXJuaW5nUGF0aC5lbmREYXRlVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbGlkaXR5SW5QZXJwZXR1aXR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3VXJsID0gdGhpcy5sZWFybmluZ1BhdGgucHJldmlld1VybCA/IHRoaXMubGVhcm5pbmdQYXRoLnByZXZpZXdVcmwgOiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZExlYXJuaW5nUGF0aENvdXJzZXMoKTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoQ291cnNlW10+IHtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLmdldExlYXJuaW5nUGF0aENvdXJzZXModGhpcy5sZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnRoZW4oKGNvdXJzZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoQ291cnNlcyA9IGFuZ3VsYXIuY29weShjb3Vyc2VzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzTWFuZGF0b3J5Q291cnNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXMuZm9yRWFjaChjb3Vyc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3Vyc2UuY291cnNlSW5jbHVzaW9uVHlwZSA9PSBMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlW0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGUuTUFOREFUT1JZXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc01hbmRhdG9yeUNvdXJzZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoQ291cnNlcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ291cnNlU2VsZWN0OiAoSUxlYXJuaW5nUGF0aENvdXJzZSkgPT4gdm9pZCA9IChjb3Vyc2U6IElMZWFybmluZ1BhdGhDb3Vyc2UpOiB2b2lkID0+IHtcclxuICAgICAgICBjb3Vyc2UuY291cnNlU2VxdWVuY2VOdW1iZXIgPSB0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXMubGVuZ3RoO1xyXG4gICAgICAgIGNvdXJzZS5jb3Vyc2VJbmNsdXNpb25UeXBlID0gTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZVtMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlLkVMRUNUSVZFXTtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXMucHVzaChjb3Vyc2UpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIGxvYWRDZXJ0aWZpY2F0ZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVNlcnZpY2UuZ2V0TGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVUZW1wbGF0ZXModGhpcy5sZWFybmluZ1BhdGhJZCkudGhlbihjZXJ0aWZpY2F0ZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aENlcnRpZmljYXRlcyA9IFtdO1xyXG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuZm9yRWFjaChjZXJ0aWZpY2F0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYzogSUV4dGVuZGVkQ2VydGlmaWNhdGVUZW1wbGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBjZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBpZDogY2VydGlmaWNhdGUuY2VydGlmaWNhdGVUZW1wbGF0ZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlLmNlcnRpZmljYXRlVGVtcGxhdGVOYW1lXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXMucHVzaChjKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb3J0QnlOYW1lKGNlcnRpZmljYXRlczogQXJyYXk8SUNlcnRpZmljYXRlVGVtcGxhdGU+KTogdm9pZCB7XHJcbiAgICAgICAgY2VydGlmaWNhdGVzLnNvcnQoKGEsIGIpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYS5uYW1lID49IGIubmFtZSkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIC0xO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzU3VjY2Vzc0NhbGxiYWNrKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTGVhcm5pbmcgcGF0aCBoYXMgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLnVwZGF0ZVVybChsZWFybmluZ1BhdGhJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlU3VjY2Vzc0NhbGxiYWNrKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJNb2RpZmljYXRpb25zIG9mIHRoZSBsZWFybmluZyBwYXRoIGhhdmUgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICB0aGlzLmxvYWRMZWFybmluZ1BhdGgoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ2VydGlmaWNhdGVzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQnVzaW5lc3NVbml0Q2hhbmdlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5sZWFybmluZ1BhdGhJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoQ291cnNlcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLiR0aW1lb3V0KGEgPT4gdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWUsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QnVzaW5lc3NVbml0U2VsZWN0b3JWaXNpYmxlKCkge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0VmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb250YWluQXV0b0NlcnRpZmljYXRlKGNlcnRpZmljYXRlczogQXJyYXk8SUV4dGVuZGVkQ2VydGlmaWNhdGVUZW1wbGF0ZT4pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgY29udGFpbnNBdXRvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGNlcnRpZmljYXRlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGFpbnNBdXRvO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjZXJ0aWZpY2F0ZXMuZm9yRWFjaChjZXJ0aWZpY2F0ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQXV0byhjZXJ0aWZpY2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5zQXV0byA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY29udGFpbnNBdXRvO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0F1dG8oY2VydGlmaWNhdGU6IElFeHRlbmRlZENlcnRpZmljYXRlVGVtcGxhdGUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKGNlcnRpZmljYXRlLnR5cGUgPT0gQ2VydGlmaWNhdGVUZW1wbGF0ZVR5cGUuQVVUTyB8fCBjZXJ0aWZpY2F0ZS50eXBlLnRvU3RyaW5nKCkgPT0gXCJBVVRPXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRBdXRvKGNlcnRpZmljYXRlOiBJRXh0ZW5kZWRDZXJ0aWZpY2F0ZVRlbXBsYXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgaWYgKGMuaWQgIT0gY2VydGlmaWNhdGUuaWQpIHtcclxuICAgICAgICAgICAgICAgIGMudHlwZSA9IENlcnRpZmljYXRlVGVtcGxhdGVUeXBlLk1BTlVBTDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlLnR5cGUgPSBDZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZS5BVVRPO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldE1hbnVhbChjZXJ0aWZpY2F0ZTogSUV4dGVuZGVkQ2VydGlmaWNhdGVUZW1wbGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjLmlkID09IGNlcnRpZmljYXRlLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjLnR5cGUgPSBDZXJ0aWZpY2F0ZVRlbXBsYXRlVHlwZS5NQU5VQUw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlVHlwZShjZXJ0aWZpY2F0ZTogSUV4dGVuZGVkQ2VydGlmaWNhdGVUZW1wbGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNBdXRvKGNlcnRpZmljYXRlKSA/IHRoaXMuc2V0TWFudWFsKGNlcnRpZmljYXRlKSA6IHRoaXMuc2V0QXV0byhjZXJ0aWZpY2F0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1lbnVQYXRoVG9DZXJ0aWZpY2F0ZVRlbXBsYXRlcygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIkFkbWluaXN0cmF0aW9uXCIgKyBcIuKGklwiICsgXCJDZXJ0aWZpY2F0ZSBUZW1wbGF0ZXNcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWxsb3dlZENvdW50T2ZFbGVjdGl2ZUNvdXJzZXMoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5sZWFybmluZ1BhdGhDb3Vyc2VzID09IG51bGwgfHwgdGhpcy5sZWFybmluZ1BhdGhDb3Vyc2VzID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBlbGVjdGl2ZUNvdXJzZXNDb3VudDogbnVtYmVyID0gMDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXMuZm9yRWFjaChjb3Vyc2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY291cnNlLmNvdXJzZUluY2x1c2lvblR5cGUgPT0gTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZVtMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlLkVMRUNUSVZFXSkge1xyXG4gICAgICAgICAgICAgICAgZWxlY3RpdmVDb3Vyc2VzQ291bnQrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZWxlY3RpdmVDb3Vyc2VzQ291bnQgPiAwID8gZWxlY3RpdmVDb3Vyc2VzQ291bnQgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZhbGlkRXhwaXJhdGlvbkRhdGUoc3RhcnREYXRlVGV4dDogc3RyaW5nLCBlbmREYXRlVGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzdGFydERhdGVUZXh0IHx8ICFlbmREYXRlVGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmxlYXJuaW5nUGF0aC5zdGFydERhdGVUZXh0KTtcclxuICAgICAgICBsZXQgZW5kRGF0ZSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmxlYXJuaW5nUGF0aC5lbmREYXRlVGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIGVuZERhdGUgPiBzdGFydERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uTGFuZ3VhZ2VDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZVNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhDb3Vyc2VzID0gW107XHJcbiAgICAgICAgdGhpcy4kdGltZW91dChhID0+IHRoaXMubGFuZ3VhZ2VTZWxlY3RlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGdldExlYXJuaW5nUGF0aEluVXNlKCkge1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLmdldE51bWJlck9mVXNlcnNXaXRoVW5jb21wbGV0ZWRQcm9ncmVzcyh0aGlzLmxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAudGhlbigobnVtYmVyT2ZVbmNvbXBsZXRlZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZVbmNvbXBsZXRlZCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoSW5Vc2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoSW5Vc2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzTGVhcm5pbmdQYXRoSW5Vc2VXYXJuaW5nTWVzc2FnZUlmTmVlZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc0xlYXJuaW5nUGF0aEluVXNlKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJUaGUgY2hhbmdlcyBjYW4gY2F1c2UgcHJvYmxlbXMgaW4gcGFzc2luZyB0aGUgbGVhcm5pbmcgcGF0aCBieSB1c2VycyB3aG8gaGFkIGFscmVhZHkgc3RhcnRlZCBpdFwiKTtcclxuICAgICAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aENoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZChmaWxlOiBGaWxlLCBsZWFybmluZ1BhdGhJZDogbnVtYmVyLCBmaWxlVHlwZTogc3RyaW5nKTogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkUHJvbWlzZTxGaWxlPiB7XHJcbiAgICAgICAgbGV0IHVybEJ1aWxkZXIgPSB0aGlzLnVybC5iYXNlKFwiL2FwaS9sZWFybmluZ1BhdGhzL3VwbG9hZD9sZWFybmluZ1BhdGhJZD06bGVhcm5pbmdQYXRoSWQmZmlsZVR5cGU9OmZpbGVUeXBlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCBsZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmZpbGVUeXBlXCIsIGZpbGVUeXBlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGFuZ3VsYXIuY29weSh1cmxCdWlsZGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JvcHBlck1vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjaW1hZ2VDcm9wcGVyTW9kYWxcIikubW9kYWwoXCJzaG93XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JvcHBlck1vZGFsQWZ0ZXJMb2FkKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlldyAhPSB1bmRlZmluZWQgfHwgdGhpcy5wcmV2aWV3VXJsICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNob3dDcm9wcGVyTW9kYWwoKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNob3dDcm9wcGVyTW9kYWxBZnRlckxvYWQoKVxyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtNb21lbnR9IGZyb20gXCIuLi91dGlscy9Nb21lbnRcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoU2VydmljZX0gZnJvbSBcIi4vTGVhcm5pbmdQYXRoU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IElSb290U2NvcGVTZXJ2aWNlID0gYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZTtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtQZXJzb25hbFNlcnZpY2V9IGZyb20gXCIuLi9wZXJzb25hbC9QZXJzb25hbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aENvdXJzZX0gZnJvbSBcIi4vbW9kZWxzL0lMZWFybmluZ1BhdGhDb3Vyc2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuL0xlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZVwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhQcm9ncmVzc30gZnJvbSBcIi4vbW9kZWxzL0lMZWFybmluZ1BhdGhQcm9ncmVzc1wiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTGVhcm5pbmdQYXRoRGV0YWlsc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJsZWFybmluZ1BhdGhzLkxlYXJuaW5nUGF0aERldGFpbHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc0xlYXJuaW5nUGF0aExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHZpZXdUeXBlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcm93U2hvdzogTWFwPG51bWJlciwgYm9vbGVhbj4gPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aDtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhQcm9ncmVzczogSUxlYXJuaW5nUGF0aFByb2dyZXNzO1xyXG4gICAgcHVibGljIGNvdXJzZXNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUxlYXJuaW5nUGF0aENvdXJzZT47XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG4gICAgcHVibGljIHN0YXJ0V2luZG93V2lkdGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBvbGRTZWFyY2hWaWV3VHlwZTogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBJUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoU2VydmljZTogTGVhcm5pbmdQYXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlOiBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsU2VydmljZTogUGVyc29uYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyKSB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhJZCA9ICRyb3V0ZVBhcmFtc1tMZWFybmluZ1BhdGhzUm91dGVyLkxFQVJOSU5HX1BBVEhfSURfUEFSQU1dO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgbGV0IGxlYXJuaW5nUGF0aElkU3RyID0gU3RyaW5nKHRoaXMubGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kZW1hbmRMZWFybmluZ1BhdGhQZXJtaXNzaW9ucyhsZWFybmluZ1BhdGhJZFN0ciwgbGVhcm5pbmdQYXRoUGVybWlzc2lvbnMgPT4gbGVhcm5pbmdQYXRoUGVybWlzc2lvbnMudmlldyk7XHJcblxyXG4gICAgICAgIGxldCBtZW51SXRlbUtleTogc3RyaW5nID0gTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKTtcclxuICAgICAgICBpZiAoIW1lbnVJdGVtS2V5IHx8IG1lbnVJdGVtS2V5Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuRURVQ0FUSU9OX0xFQVJOSU5HX1BBVEhTX01FTlVfS0VZKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMub2xkU2VhcmNoVmlld1R5cGUgPSB0aGlzLnZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKHRoaXMud2luZG93LmlubmVyV2lkdGggPCA5OTIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFdpbmRvd1dpZHRoID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V2luZG93V2lkdGggPSAxMDAwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgdGhpcy5zdGFydFdpbmRvd1dpZHRoICYmICF0aGlzLnZpZXdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sZFNlYXJjaFZpZXdUeXBlID0gdGhpcy52aWV3VHlwZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRXaW5kb3dXaWR0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPj0gOTkyICYmIHdpbmRvdy5pbm5lcldpZHRoID4gdGhpcy5zdGFydFdpbmRvd1dpZHRoICYmICF0aGlzLm9sZFNlYXJjaFZpZXdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5vbGRTZWFyY2hWaWV3VHlwZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRXaW5kb3dXaWR0aCA9IDEwMDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJcIik7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvdy51bmJpbmQoJ3Jlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiZGVzdHJveVwiKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMZWFybmluZ1BhdGhMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KHBhcmFtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKSk7XHJcbiAgICAgICAgaWYgKHBhcmFtID09IFwiZGVzdHJveVwiKSB7XHJcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0gPT0gXCJcIikge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW0uaGFzQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWREYXRhKCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZExlYXJuaW5nUGF0aCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFByb2dyZXNzKCk7XHJcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUxlYXJuaW5nUGF0aENvdXJzZT4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9sZWFybmluZ1BhdGhzLzpsZWFybmluZ1BhdGhJZC9jb3Vyc2VzXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCB0aGlzLmxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwucGFnZVNpemUgPSAxMjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkUHJvZ3Jlc3MoKTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoUHJvZ3Jlc3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UuZ2V0TGVhcm5pbmdQYXRoUHJvZ3Jlc3ModGhpcy5sZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3MgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRMZWFybmluZ1BhdGgoKTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5nZXQodGhpcy5sZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aC5zdGFydERhdGVUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKHJlc3VsdC5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIgPSB0aGlzLmxlYXJuaW5nUGF0aC5uYW1lIHx8IHRoaXMubGVhcm5pbmdQYXRoLnN1YmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgbGVhcm5pbmdQYXRoQnJlYWRjcnVtYiA9IGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIubGVuZ3RoID4gNDAgPyBsZWFybmluZ1BhdGhCcmVhZGNydW1iLnN1YnN0cmluZygwLCA0MCkgKyBcIi4uLlwiIDogbGVhcm5pbmdQYXRoQnJlYWRjcnVtYjtcclxuICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KClcclxuICAgICAgICAgICAgICAgICAgICAuaGVhZGVyKFwiVmlld1wiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRQYXJlbnRMaW5rKGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiI1wiICsgdGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLmRldGFpbHNVcmwodGhpcy5sZWFybmluZ1BhdGhJZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkVG9GYXZvcml0ZXMoY291cnNlOiBJTGVhcm5pbmdQYXRoQ291cnNlKSB7XHJcbiAgICAgICAgdGhpcy5yb3dTaG93LnNldChjb3Vyc2UuaWQsICF0aGlzLnJvd1Nob3cuZ2V0KGNvdXJzZS5pZCkpO1xyXG4gICAgICAgIHRoaXMucGVyc29uYWxTZXJ2aWNlLmFkZFRvRmF2b3JpdGVzKGNvdXJzZS5pZCwgY291cnNlLnZlcnNpb24sIFJlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIGNvdXJzZSBoYXMgYmVlbiBhZGRlZCB0byB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgY291cnNlLmlzRmF2b3JpdGUgPSB0cnVlO1xyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuYWxyZWFkeS5pbi5mYXZvcml0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgY291cnNlIGlzIGFscmVhZHkgaW4geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuaXMuY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgZGF0YSBoYXMgYmVlbiBtb2RpZmllZCBieSBhbm90aGVyIHVzZXI6IHBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGFuZCB0cnkgYWdhaW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlRnJvbUZhdm9yaXRlcyhjb3Vyc2U6IElMZWFybmluZ1BhdGhDb3Vyc2UpIHtcclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGNvdXJzZS5pZCwgIXRoaXMucm93U2hvdy5nZXQoY291cnNlLmlkKSk7XHJcbiAgICAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UucmVtb3ZlRnJvbUZhdm9yaXRlcyhjb3Vyc2UuaWQsIGNvdXJzZS52ZXJzaW9uLCBSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0UpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBjb3Vyc2UgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICBjb3Vyc2UuaXNGYXZvcml0ZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3Qubm90LmluLmZhdm9yaXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHJlbW92ZSBmcm9tIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmlzLmNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYW5vdGhlciB1c2VyOiBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFZpZXdUeXBlKHZpZXdUeXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dEZXRhaWxzKGluZGV4OiBudW1iZXIsIGtleUNvZGU6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaW5kZXgsICF0aGlzLnJvd1Nob3cuZ2V0KGluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwoY291cnNlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29uZmlybVByb2dyZXNzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNMZWFybmluZ1BhdGhMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5jb25maXJtTGVhcm5pbmdQYXRoUHJvZ3Jlc3ModGhpcy5sZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkxlYXJuaW5nIFBhdGggcHJvZ3Jlc3MgaGFzIGJlZW4gcmVjYWxjdWxhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZERhdGEoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb3VudE9mQ291cnNlcygpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGVhcm5pbmdQYXRoLm51bWJlck9mRWxlY3RpdmVDb3Vyc2VzVG9CZUNvbXBsZXRlZCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiQ29tcGxldGVkIGNvdXJzZXM6IDpjb21wbGV0ZWRNYW5kYXRvcnlDb3Vyc2VzIG9mIDphbGxNYW5kYXRvcnlDb3Vyc2VzIE1hbmRhdG9yeSwgOmNvbXBsZXRlZEVsZWN0aXZlQ291cnNlcyBvZiA6bnVtYmVyT2ZFbGVjdGl2ZUNvdXJzZXNUb0JlQ29tcGxldGVkIEVsZWN0aXZlXCIpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjpjb21wbGV0ZWRNYW5kYXRvcnlDb3Vyc2VzXCIsIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3MuY291bnRPZkNvbXBsZXRlZE1hbmRhdG9yeUNvdXJzZXMpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjphbGxNYW5kYXRvcnlDb3Vyc2VzXCIsIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3MuY291bnRPZk1hbmRhdG9yeUNvdXJzZXMpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjpjb21wbGV0ZWRFbGVjdGl2ZUNvdXJzZXNcIiwgdGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzcy5jb3VudE9mQ29tcGxldGVkRWxlY3RpdmVDb3Vyc2VzKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6bnVtYmVyT2ZFbGVjdGl2ZUNvdXJzZXNUb0JlQ29tcGxldGVkXCIsIHRoaXMubGVhcm5pbmdQYXRoLm51bWJlck9mRWxlY3RpdmVDb3Vyc2VzVG9CZUNvbXBsZXRlZClcclxuICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJDb21wbGV0ZWQgY291cnNlczogOmNvbXBsZXRlZE1hbmRhdG9yeUNvdXJzZXMgb2YgOmFsbE1hbmRhdG9yeUNvdXJzZXMgTWFuZGF0b3J5XCIpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjpjb21wbGV0ZWRNYW5kYXRvcnlDb3Vyc2VzXCIsIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3MuY291bnRPZkNvbXBsZXRlZE1hbmRhdG9yeUNvdXJzZXMpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjphbGxNYW5kYXRvcnlDb3Vyc2VzXCIsIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3MuY291bnRPZk1hbmRhdG9yeUNvdXJzZXMpXHJcbiAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SVJld2FyZH0gZnJvbSBcIi4uL2dhbWlmaWNhdGlvbi9tb2RlbHMvSVJld2FyZFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0lIdHRwU2VydmljZX0gZnJvbSBcImFuZ3VsYXJcIjtcclxuaW1wb3J0IHtJQmFkZ2V9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vbW9kZWxzL0lCYWRnZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7R2FtZUxlYXJuaW5nT2JqZWN0QWN0aW9uU2VydmljZX0gZnJvbSBcIi4uL2dhbWlmaWNhdGlvbi9HYW1lTGVhcm5pbmdPYmplY3RBY3Rpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJlZE9iamVjdFR5cGV9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9TZWN1cmVkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge1Jld2FyZEFjdGlvblR5cGV9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vbW9kZWxzL1Jld2FyZEFjdGlvblR5cGVcIjtcclxuaW1wb3J0IHtCYWRnZXNTZXJ2aWNlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL0JhZGdlc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRofSBmcm9tIFwiLi9tb2RlbHMvSUxlYXJuaW5nUGF0aFwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFNlcnZpY2V9IGZyb20gXCIuL0xlYXJuaW5nUGF0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcbmltcG9ydCB7SUxldmVsfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL21vZGVscy9JTGV2ZWxcIjtcclxuaW1wb3J0IHtJQWN0aW9uQmFkZ2V9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vbW9kZWxzL0lBY3Rpb25CYWRnZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIExlYXJuaW5nUGF0aEdhbWlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibGVhcm5pbmdQYXRoLkxlYXJuaW5nUGF0aEdhbWlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoOiBJTGVhcm5pbmdQYXRoO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcbiAgICBwdWJsaWMgcmV3YXJkc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJUmV3YXJkPjtcclxuICAgIHB1YmxpYyBiYWRnZXNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUJhZGdlPjtcclxuICAgIHB1YmxpYyBuZXdSZXdhcmQ6IElSZXdhcmQgPSB7fTtcclxuICAgIHB1YmxpYyByZXdhcmRUb0VkaXQ6IElSZXdhcmQgPSB7fTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZEJhZGdlOiBJQmFkZ2U7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRCYWRnZUltYWdlVXJsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmV3YXJkVHlwZXMgPSBbJ0JhZGdlJ107XHJcbiAgICBwdWJsaWMgcmFkaW9SZXN1bHQgPSAnZGVmYXVsdCc7XHJcbiAgICBwdWJsaWMgaXNCYWRnZVRhYmxlVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGVkaXRlZFJld2FyZFR5cGVEcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRlZmF1bHRQb2ludHNTdWJqZWN0ID0gJ1lvdSB3ZXJlIGF3YXJkZWQgcG9pbnRzJztcclxuICAgIHB1YmxpYyBkZWZhdWx0UG9pbnRzTWVzc2FnZSA9ICdEZWFyIHt1c2VyfSxcXG5Db25ncmF0dWxhdGlvbnMsIHlvdSB3ZXJlIGF3YXJkZWQge251bWJlciBvZiBwb2ludHN9IHBvaW50KHMpISc7XHJcbiAgICBwdWJsaWMgZXhjbHVkZWRCYWRnZXM6IEFycmF5PG51bWJlcj4gPSBbMTAwXTtcclxuICAgIHB1YmxpYyBiYWRnZUlkczogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgcHVibGljIHRvb2xiYXIgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBMZWFybmluZ1BhdGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQmFkZ2VzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEdhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2UuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBJSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aFNlcnZpY2U6IExlYXJuaW5nUGF0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoc1JvdXRlcjogTGVhcm5pbmdQYXRoc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFkZ2VzU2VydmljZTogQmFkZ2VzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZ2FtZUxlYXJuaW5nT2JqZWN0QWN0aW9uU2VydmljZTogR2FtZUxlYXJuaW5nT2JqZWN0QWN0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoSWQgPSByb3V0ZVBhcmFtc1tMZWFybmluZ1BhdGhzUm91dGVyLkxFQVJOSU5HX1BBVEhfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBsZWFybmluZ1BhdGhJZFN0ciA9IFN0cmluZyh0aGlzLmxlYXJuaW5nUGF0aElkKTtcclxuICAgICAgICB0aGlzLnJld2FyZHNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJUmV3YXJkPih0aGlzLiRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL2xlYXJuaW5nUGF0aHMvJHt0aGlzLmxlYXJuaW5nUGF0aElkfS9hY3Rpb25QYWdlYCkpKTtcclxuICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElCYWRnZT4odGhpcy4kaHR0cCwgdGhpcy51cmwuc2VydmljZShgL2FwaS9iYWRnZXMvZ2FtZUFjdGlvbnNgKSkpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRMZWFybmluZ1BhdGhQZXJtaXNzaW9uc0lmKCEhdGhpcy5sZWFybmluZ1BhdGhJZCwgbGVhcm5pbmdQYXRoSWRTdHIsIGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zID0+IGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zLmVkaXQpO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgICAgICAudGhlbih1ID0+IHRoaXMuY3VycmVudFVzZXIgPSB1KTtcclxuXHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLmdldCh0aGlzLmxlYXJuaW5nUGF0aElkKS50aGVuKGxlYXJuaW5nUGF0aCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoID0gbGVhcm5pbmdQYXRoO1xyXG5cclxuICAgICAgICAgICAgbGV0IG1lbnVJdGVtS2V5OiBzdHJpbmcgPSBNZW51SGVscGVyLmdldEN1cnJlbnRNZW51SXRlbUtleSgpO1xyXG4gICAgICAgICAgICBpZiAoIW1lbnVJdGVtS2V5IHx8IG1lbnVJdGVtS2V5Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkVEVUNBVElPTl9MRUFSTklOR19QQVRIU19NRU5VX0tFWSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwuZmlsdGVyLmJ1c2luZXNzVW5pdElkID0gbGVhcm5pbmdQYXRoLmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDU7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRUb01vZGVsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJhZGlvUmVzdWx0ID09PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXdhcmQuc2hvd01lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXdhcmQuc2hvd0RlZmF1bHRNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhZGlvUmVzdWx0ID09PSAnY3VzdG9tJykge1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Jld2FyZC5zaG93TWVzc2FnZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmV3YXJkLnNob3dEZWZhdWx0TWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmV3YXJkLnNob3dNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmV3YXJkLnNob3dEZWZhdWx0TWVzc2FnZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRUb0VkaXRNb2RlbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5yYWRpb1Jlc3VsdCA9PT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0LnNob3dNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0LnNob3dEZWZhdWx0TWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYWRpb1Jlc3VsdCA9PT0gJ2N1c3RvbScpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQuc2hvd01lc3NhZ2UgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5zaG93RGVmYXVsdE1lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5zaG93TWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5zaG93RGVmYXVsdE1lc3NhZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGVtcGxhdGVGb3JJbmNsdWRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsLnRlbXBsYXRlKHRlbXBsYXRlTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldElzQWN0aXZlR3JpZFN0eWxlKGlzQWN0aXZlOiBib29sZWFuKTogYW55IHtcclxuICAgICAgICByZXR1cm4gaXNBY3RpdmVcclxuICAgICAgICAgICAgPyB7fVxyXG4gICAgICAgICAgICA6IHtcImNvbG9yXCI6IFwiIzk5OTk5OVwifTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjb252ZXJ0SXNBY3RpdmUoaXNBY3RpdmU6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBpc0FjdGl2ZSAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpc0FjdGl2ZSA/IFwiWWVzXCIgOiBcIk5vXCJcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZEJhZGdlKGJhZGdlOiBJQmFkZ2UsIGlzRWRpdDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKGlzRWRpdCkge1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5yZXdhcmRJZCA9IGJhZGdlLmlkO1xyXG4gICAgICAgICAgICB0aGlzLmlzQmFkZ2VUYWJsZVZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgJCgnI2NvbGxhcHNlU2VsZWN0QmFkZ2VFZGl0JykuY29sbGFwc2UoJ2hpZGUnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Jld2FyZC5yZXdhcmRJZCA9IGJhZGdlLmlkO1xyXG4gICAgICAgICAgICB0aGlzLmlzQmFkZ2VUYWJsZVZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgJCgnI2NvbGxhcHNlU2VsZWN0QmFkZ2UnKS5jb2xsYXBzZSgnaGlkZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEJhZGdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VJZHMgPSB0aGlzLmJhZGdlSWRzLmZpbHRlcihpZCA9PiB0aGlzLnNlbGVjdGVkQmFkZ2UuaWQgIT09IGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5iYWRnZUlkcy5wdXNoKGJhZGdlLmlkKTtcclxuICAgICAgICB0aGlzLmxvYWRCYWRnZXModHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJhZGdlID0gYmFkZ2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJhZGdlSW1hZ2VVcmwgPSB0aGlzLmdldEltYWdlQmFkZ2UodGhpcy5zZWxlY3RlZEJhZGdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZEJhZGdlcyhjdXJyZW50OiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwuZmlsdGVyLmV4Y2x1ZGVkQmFkZ2VzID0gdGhpcy5iYWRnZUlkcztcclxuICAgICAgICBpZiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dDcmVhdGVNb2RhbCgpIHtcclxuICAgICAgICB0aGlzLnJhZGlvUmVzdWx0ID0gJ2RlZmF1bHQnXHJcbiAgICAgICAgJChcIiNhZGRSZXdhcmRcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXNCYWRnZVRhYmxlVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmV3UmV3YXJkLnJld2FyZFR5cGUgPSAnQmFkZ2UnO1xyXG4gICAgICAgICQoJyNjb2xsYXBzZVNlbGVjdEJhZGdlRWRpdCcpLmNvbGxhcHNlKCdoaWRlJyk7XHJcbiAgICAgICAgdGhpcy5hZGRUb01vZGVsKCk7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLmdldEdhbWVMZWFybmluZ09iamVjdHNCYWRnZUlkcyh0aGlzLmxlYXJuaW5nUGF0aC5pZCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlSWRzID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkQmFkZ2VzLmZvckVhY2goYiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlSWRzLnB1c2goYik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRCYWRnZXMoZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RWRpdE1vZGFsKGlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmdhbWVMZWFybmluZ09iamVjdEFjdGlvblNlcnZpY2UuZ2V0UmV3YXJkKGlkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXdhcmRUb0VkaXQucmV3YXJkVHlwZSA9PSAnQkFER0UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5yZXdhcmRUeXBlID0gJ0JhZGdlJztcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5nZXRCYWRnZSh0aGlzLnJld2FyZFRvRWRpdC5yZXdhcmRJZCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCYWRnZSA9IHJlcztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQmFkZ2VJbWFnZVVybCA9IHRoaXMuZ2V0SW1hZ2VCYWRnZShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVkaXRNb2RhbCgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJld2FyZFRvRWRpdC5yZXdhcmRUeXBlID09ICdQT0lOVFMnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5yZXdhcmRUeXBlID0gJ1BvaW50cyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5FZGl0TW9kYWwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5FZGl0TW9kYWwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJld2FyZFRvRWRpdC5zaG93RGVmYXVsdE1lc3NhZ2UgJiYgIXRoaXMucmV3YXJkVG9FZGl0LnNob3dNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFkaW9SZXN1bHQgPSAnbm9uZSc7XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5yZXdhcmRUb0VkaXQuc2hvd0RlZmF1bHRNZXNzYWdlICYmIHRoaXMucmV3YXJkVG9FZGl0LnNob3dNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFkaW9SZXN1bHQgPSAnY3VzdG9tJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJhZGlvUmVzdWx0ID0gJ2RlZmF1bHQnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzQmFkZ2VUYWJsZVZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAkKCcjY29sbGFwc2VTZWxlY3RCYWRnZUVkaXQnKS5jb2xsYXBzZSgnaGlkZScpO1xyXG5cclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFNlcnZpY2UuZ2V0R2FtZUxlYXJuaW5nT2JqZWN0c0JhZGdlSWRzKHRoaXMubGVhcm5pbmdQYXRoLmlkKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFkZ2VJZHMgPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZXhjbHVkZWRCYWRnZXMuZm9yRWFjaChiID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VJZHMucHVzaChiKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEJhZGdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlSWRzLnB1c2godGhpcy5zZWxlY3RlZEJhZGdlLmlkKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkQmFkZ2VzKGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChcIiNlZGl0UmV3YXJkXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VFZGl0TW9kYWwoKSB7XHJcbiAgICAgICAgJChcIiNlZGl0UmV3YXJkXCIpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgdGhpcy5jbGVhclBvcHVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUJhZGdlKCkge1xyXG4gICAgICAgIHRoaXMuYmFkZ2VJZHMgPSB0aGlzLmJhZGdlSWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gdGhpcy5zZWxlY3RlZEJhZGdlLmlkKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQmFkZ2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCYWRnZUltYWdlVXJsID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5ld1Jld2FyZC5yZXdhcmRJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQucmV3YXJkSWQgPSBudWxsO1xyXG4gICAgICAgIGlmICghdGhpcy5pc0JhZGdlVGFibGVWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNCYWRnZVRhYmxlVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICQoJyNjb2xsYXBzZVNlbGVjdEJhZGdlRWRpdCcpLmNvbGxhcHNlKCdzaG93Jyk7XHJcbiAgICAgICAgICAgICQoJyNjb2xsYXBzZVNlbGVjdEJhZGdlJykuY29sbGFwc2UoJ3Nob3cnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZEJhZGdlcyhmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZVJld2FyZCgpIHtcclxuICAgICAgICB0aGlzLm5ld1Jld2FyZC5vYmplY3RUeXBlID0gU2VjdXJlZE9iamVjdFR5cGUuTEVBUk5JTkdfUEFUSC5uYW1lO1xyXG4gICAgICAgIHRoaXMubmV3UmV3YXJkLm9iamVjdElkID0gdGhpcy5sZWFybmluZ1BhdGhJZDtcclxuICAgICAgICB0aGlzLm5ld1Jld2FyZC5nYW1lSWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5ld1Jld2FyZC5zaG93RGVmYXVsdE1lc3NhZ2UgfHwgKCF0aGlzLm5ld1Jld2FyZC5zaG93RGVmYXVsdE1lc3NhZ2UgJiYgIXRoaXMubmV3UmV3YXJkLnNob3dNZXNzYWdlKSkge1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Jld2FyZC5jdXN0b21NZXNzYWdlU3ViamVjdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXdhcmQuY3VzdG9tTWVzc2FnZUJvZHkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5uZXdSZXdhcmQucmV3YXJkVHlwZSA9PSAnQmFkZ2UnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmV3YXJkLnBvaW50cyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmV3YXJkLmFjdGlvbiA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoUmV3YXJkQWN0aW9uVHlwZS5CQURHRV9MUF9DT01QTEVURUQpXHJcbiAgICAgICAgICAgICAgICAud2l0aCgnOmJhZGdlTmFtZScsIHRoaXMuc2VsZWN0ZWRCYWRnZS5uYW1lKS5idWlsZCgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5uZXdSZXdhcmQucmV3YXJkVHlwZSA9PSAnUG9pbnRzJykge1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Jld2FyZC5yZXdhcmRJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgbGV0IGFjdGlvbiA9IHRoaXMubmV3UmV3YXJkLnBvaW50cyA9PT0gMSA/IFJld2FyZEFjdGlvblR5cGUuUE9JTlRfTFBfQ09NUExFVEVEIDogUmV3YXJkQWN0aW9uVHlwZS5QT0lOVFNfTFBfQ09NUExFVEVEO1xyXG4gICAgICAgICAgICB0aGlzLm5ld1Jld2FyZC5hY3Rpb24gPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKGFjdGlvbilcclxuICAgICAgICAgICAgICAgIC53aXRoKCc6cG9pbnRzJywgdGhpcy5uZXdSZXdhcmQucG9pbnRzKS5idWlsZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nYW1lTGVhcm5pbmdPYmplY3RBY3Rpb25TZXJ2aWNlLmNyZWF0ZVJld2FyZCh0aGlzLm5ld1Jld2FyZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJSZXdhcmQgaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgICQoXCIjYWRkUmV3YXJkXCIpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcignQ3JlYXRpb24gZXJyb3InKTtcclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXdhcmQgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJhZGdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnJhZGlvUmVzdWx0ID0gJ2RlZmF1bHQnO1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmJhZGdlc0dyaWRNb2RlbC5zb3J0aW5nID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdFJld2FyZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5yZXdhcmRUb0VkaXQuc2hvd0RlZmF1bHRNZXNzYWdlIHx8ICghdGhpcy5yZXdhcmRUb0VkaXQuc2hvd0RlZmF1bHRNZXNzYWdlICYmICF0aGlzLnJld2FyZFRvRWRpdC5zaG93TWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQuY3VzdG9tTWVzc2FnZVN1YmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0LmN1c3RvbU1lc3NhZ2VCb2R5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmV3YXJkVG9FZGl0LnJld2FyZFR5cGUgPT0gJ0JhZGdlJykge1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5wb2ludHMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5hY3Rpb24gPSBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFJld2FyZEFjdGlvblR5cGUuQkFER0VfTFBfQ09NUExFVEVEKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoJzpiYWRnZU5hbWUnLCB0aGlzLnNlbGVjdGVkQmFkZ2UubmFtZSkuYnVpbGQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmV3YXJkVG9FZGl0LnJld2FyZFR5cGUgPT0gJ1BvaW50cycpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQucmV3YXJkSWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGxldCBhY3Rpb24gPSB0aGlzLnJld2FyZFRvRWRpdC5wb2ludHMgPT09IDEgPyBSZXdhcmRBY3Rpb25UeXBlLlBPSU5UX0xQX0NPTVBMRVRFRCA6IFJld2FyZEFjdGlvblR5cGUuUE9JTlRTX0xQX0NPTVBMRVRFRDtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRUb0VkaXQuYWN0aW9uID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShhY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAud2l0aCgnOnBvaW50cycsIHRoaXMucmV3YXJkVG9FZGl0LnBvaW50cykuYnVpbGQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZUxlYXJuaW5nT2JqZWN0QWN0aW9uU2VydmljZS5lZGl0UmV3YXJkKHRoaXMucmV3YXJkVG9FZGl0LmlkLCB0aGlzLnJld2FyZFRvRWRpdCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJNb2RpZmljYXRpb25zIG9mIHRoZSByZXdhcmQgaGF2ZSBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICAkKFwiI2VkaXRSZXdhcmRcIikubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKCdFZGl0aW5nIGVycm9yJyk7XHJcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0ID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCYWRnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5yYWRpb1Jlc3VsdCA9ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwuc29ydGluZyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyUG9wdXAoKSB7XHJcbiAgICAgICAgdGhpcy5uZXdSZXdhcmQgPSB7fTtcclxuICAgICAgICB0aGlzLnJld2FyZFRvRWRpdCA9IHt9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCYWRnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQmFkZ2VJbWFnZVVybCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnJhZGlvUmVzdWx0ID0gJ2RlZmF1bHQnO1xyXG4gICAgICAgIHRoaXMuYmFkZ2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5iYWRnZXNHcmlkTW9kZWwuc29ydGluZyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY3RpdmF0ZShpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5nYW1lTGVhcm5pbmdPYmplY3RBY3Rpb25TZXJ2aWNlLmFjdGl2YXRlKGlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlJld2FyZCBoYXMgYmVlbiBhY3RpdmF0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmV3YXJkVG9FZGl0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJld2FyZFRvRWRpdC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGUoaWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuZ2FtZUxlYXJuaW5nT2JqZWN0QWN0aW9uU2VydmljZS5kZWFjdGl2YXRlKGlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlJld2FyZCBoYXMgYmVlbiBkZWFjdGl2YXRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXdhcmRUb0VkaXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkVG9FZGl0LmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZShpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJUaGlzIHJld2FyZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBDb250aW51ZT9cIiwge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJEZWxldGUgcmV3YXJkXCJcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nYW1lTGVhcm5pbmdPYmplY3RBY3Rpb25TZXJ2aWNlLnJlbW92ZShpZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiUmV3YXJkIGhhcyBiZWVuIHJlbW92ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJld2FyZHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXdhcmRUb0VkaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRWRpdE1vZGFsKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQmFkZ2VzKHRydWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9ybWF0VHlwZVN0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFzdHIpIHJldHVybiBzdHI7XHJcblxyXG4gICAgICAgIHJldHVybiBzdHJbMF0udG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhclN5bWJvbHMobGV2ZWw6IElMZXZlbCkge1xyXG4gICAgICAgIGlmIChsZXZlbC5wb2ludHMudG9TdHJpbmcoKS5pbmRleE9mKCcuJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGxldmVsLnBvaW50cyA9ICtsZXZlbC5wb2ludHMudG9TdHJpbmcoKS5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxldmVsLm5ld0JvbnVzUG9pbnRzLnRvU3RyaW5nKCkuaW5kZXhPZignLicpICE9PSAtMSkge1xyXG4gICAgICAgICAgICBsZXZlbC5uZXdCb251c1BvaW50cyA9ICtsZXZlbC5uZXdCb251c1BvaW50cy50b1N0cmluZygpLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbWFnZUJhZGdlKGJhZGdlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoYmFkZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCFiYWRnZS5maWxlSWQgJiYgYmFkZ2UubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGltYWdlTmFtZSA9IGJhZGdlLm5hbWUuc3BsaXQoJyAnKS5qb2luKCcnKTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFkZ2UuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEwMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VOYW1lID0gXCJDb3Vyc2VGaW5pc2hlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU5hbWUgPSBcIkxlYXJuaW5nUGF0aEZpbmlzaGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB0aGVtZXMvZGVmYXVsdC9pbWcvYmFkZ2VzLyR7aW1hZ2VOYW1lfS5wbmdgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiYWRnZS5wcmV2aWV3VXJsID8gYmFkZ2UucHJldmlld1VybCA6ICcnO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoU2VydmljZX0gZnJvbSBcIi4vTGVhcm5pbmdQYXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4vbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIExlYXJuaW5nUGF0aFBhcnRpY2lwYXRpb25Gb3JtRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJsZWFybmluZ1BhdGhzLkxlYXJuaW5nUGF0aFBhcnRpY2lwYXRpb25Gb3JtRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGg6IElMZWFybmluZ1BhdGg7XHJcblxyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoU2VydmljZTogTGVhcm5pbmdQYXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSkge1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoSWQgPSAkcm91dGVQYXJhbXNbTGVhcm5pbmdQYXRoc1JvdXRlci5MRUFSTklOR19QQVRIX0lEX1BBUkFNXTtcclxuICAgICAgICBsZXQgbGVhcm5pbmdQYXRoSWRTdHI6IHN0cmluZyA9IFN0cmluZyh0aGlzLmxlYXJuaW5nUGF0aElkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2VcclxuICAgICAgICAgICAgLmRlbWFuZExlYXJuaW5nUGF0aFBlcm1pc3Npb25zKGxlYXJuaW5nUGF0aElkU3RyLCBsZWFybmluZ1BhdGhQZXJtaXNzaW9ucyA9PiBsZWFybmluZ1BhdGhQZXJtaXNzaW9ucy5lZGl0KTtcclxuXHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5FRFVDQVRJT05fTEVBUk5JTkdfUEFUSFNfTUVOVV9LRVkpO1xyXG5cclxuICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb2FkTGVhcm5pbmdQYXRoKHRoaXMubGVhcm5pbmdQYXRoSWQpXHJcbiAgICAgICAgICAgIC50aGVuKGxlYXJuaW5nUGF0aCA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIgPSBsZWFybmluZ1BhdGgubmFtZSB8fCBsZWFybmluZ1BhdGguc3ViamVjdE5hbWU7XHJcbiAgICAgICAgICAgICAgICBsZWFybmluZ1BhdGhCcmVhZGNydW1iID0gbGVhcm5pbmdQYXRoQnJlYWRjcnVtYi5sZW5ndGggPiA0MCA/IGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIuc3Vic3RyaW5nKDAsIDQwKSArIFwiLi4uXCIgOiBsZWFybmluZ1BhdGhCcmVhZGNydW1iO1xyXG4gICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5oZWFkZXIoXCJFZGl0IHBhcnRpY2lwYXRpb24gZm9ybVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRQYXJlbnRMaW5rKGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiI1wiICsgdGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLmRldGFpbHNVcmwodGhpcy5sZWFybmluZ1BhdGhJZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZExlYXJuaW5nUGF0aChsZWFybmluZ1BhdGhJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5nZXQobGVhcm5pbmdQYXRoSWQpLnRoZW4obGVhcm5pbmdQYXRoID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGggPSBhbmd1bGFyLmNvcHkobGVhcm5pbmdQYXRoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TGVhcm5pbmdQYXRoc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTGVhcm5pbmdQYXRoc1JvdXRlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoU2VydmljZX0gZnJvbSBcIi4vTGVhcm5pbmdQYXRoU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aFByb2dyZXNzfSBmcm9tIFwiLi9tb2RlbHMvSUxlYXJuaW5nUGF0aFByb2dyZXNzXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uRm9ybUZpbGxDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibGVhcm5pbmdQYXRocy5MZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uRm9ybUZpbGxDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoOiBJTGVhcm5pbmdQYXRoO1xyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aFByb2dyZXNzOiBJTGVhcm5pbmdQYXRoUHJvZ3Jlc3M7XHJcblxyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoUmVkaXJlY3QuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoU2VydmljZTogTGVhcm5pbmdQYXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlOiBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc1JvdXRlcjogTGVhcm5pbmdQYXRoc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0KSB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhJZCA9ICRyb3V0ZVBhcmFtc1tMZWFybmluZ1BhdGhzUm91dGVyLkxFQVJOSU5HX1BBVEhfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBsZWFybmluZ1BhdGhJZFN0cjogc3RyaW5nID0gU3RyaW5nKHRoaXMubGVhcm5pbmdQYXRoSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZVxyXG4gICAgICAgICAgICAuZGVtYW5kTGVhcm5pbmdQYXRoUGVybWlzc2lvbnMobGVhcm5pbmdQYXRoSWRTdHIsIGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zID0+IGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zLnZpZXcpO1xyXG5cclxuICAgICAgICBsZXQgbWVudUl0ZW1LZXk6IHN0cmluZyA9IE1lbnVIZWxwZXIuZ2V0Q3VycmVudE1lbnVJdGVtS2V5KCk7XHJcbiAgICAgICAgaWYgKCFtZW51SXRlbUtleSB8fCBtZW51SXRlbUtleS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkVEVUNBVElPTl9MRUFSTklOR19QQVRIU19NRU5VX0tFWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBsb2FkTGVhcm5pbmdQYXRoUHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBsb2FkTGVhcm5pbmdQYXRoUHJvbWlzZXMucHVzaChcclxuICAgICAgICAgICAgdGhpcy5sb2FkTGVhcm5pbmdQYXRoKCksXHJcbiAgICAgICAgICAgIHRoaXMubG9hZExlYXJuaW5nUGF0aFByb2dyZXNzKClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAkcS5hbGwobG9hZExlYXJuaW5nUGF0aFByb21pc2VzKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTGVhcm5pbmdQYXRoKCk6IGFuZ3VsYXIuSVByb21pc2U8SUxlYXJuaW5nUGF0aD4ge1xyXG4gICAgICAgIGxldCBwcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGg+ID0gdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLmdldCh0aGlzLmxlYXJuaW5nUGF0aElkKTtcclxuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgIGxldCBsZWFybmluZ1BhdGhCcmVhZGNydW1iID0gdGhpcy5sZWFybmluZ1BhdGgubmFtZSB8fCB0aGlzLmxlYXJuaW5nUGF0aC5zdWJqZWN0TmFtZTtcclxuICAgICAgICAgICAgbGVhcm5pbmdQYXRoQnJlYWRjcnVtYiA9IGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIubGVuZ3RoID4gNDAgPyBsZWFybmluZ1BhdGhCcmVhZGNydW1iLnN1YnN0cmluZygwLCA0MCkgKyBcIi4uLlwiIDogbGVhcm5pbmdQYXRoQnJlYWRjcnVtYjtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKVxyXG4gICAgICAgICAgICAgICAgLmhlYWRlcihcIkZpbGwgcGFydGljaXBhdGlvbiBmb3JtXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkUGFyZW50TGluayhsZWFybmluZ1BhdGhCcmVhZGNydW1iLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiI1wiICsgdGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLmRldGFpbHNVcmwodGhpcy5sZWFybmluZ1BhdGhJZCkpXHJcbiAgICAgICAgICAgICAgICAudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRMZWFybmluZ1BhdGhQcm9ncmVzcygpOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGhQcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5nZXRMZWFybmluZ1BhdGhQcm9ncmVzcyh0aGlzLmxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAudGhlbigobGVhcm5pbmdQYXRoUHJvZ3Jlc3M6IElMZWFybmluZ1BhdGhQcm9ncmVzcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzcyA9IGFuZ3VsYXIuY29weShsZWFybmluZ1BhdGhQcm9ncmVzcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzcyA9PSBudWxsIHx8IHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3MgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuZm9yd2FyZFRvQWNjZXNzRGVuaWVkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFBhcnRpY2lwYXRpb25Gb3JtRGF0YTogKCkgPT4gYW5ndWxhci5JUHJvbWlzZTxhbnk+ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5nZXRQYXJ0aWNpcGF0aW9uRm9ybURhdGEodGhpcy5sZWFybmluZ1BhdGhJZCwgdGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzcy5pZCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBvblN1Ym1pdDogKGFueSkgPT4gYW5ndWxhci5JUHJvbWlzZTxhbnk+ID0gKHBhcnRpY2lwYXRpb25Gb3JtRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLnNldFBhcnRpY2lwYXRpb25Gb3JtRGF0YSh0aGlzLmxlYXJuaW5nUGF0aElkLFxyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzLmlkLCBwYXJ0aWNpcGF0aW9uRm9ybURhdGEpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJQYXJ0aWNpcGF0aW9uIEZvcm0gZGF0YSBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwZGF0ZWRcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfTtcclxufVxyXG4iLCJpbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoU2VydmljZX0gZnJvbSBcIi4vTGVhcm5pbmdQYXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL1NlY3VyZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMZWFybmluZ1BhdGhQZXJtaXNzaW9uc0RlbGVnYXRpb25Db250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibGVhcm5pbmdQYXRocy5MZWFybmluZ1BhdGhQZXJtaXNzaW9uc0RlbGVnYXRpb25Db250cm9sbGVyXCI7XHJcbiAgICBwcml2YXRlIERFRkFVTFRfVE9QX01FTlVfSVRFTTogc3RyaW5nID0gJ3Blcm1pc3Npb25zRGVsZWdhdGlvbic7XHJcblxyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoOiBJTGVhcm5pbmdQYXRoO1xyXG4gICAgcHVibGljIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzOiBBcnJheTxJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcz4gPSBbXTtcclxuICAgIHB1YmxpYyBtZW51S2V5OiBhbnk7XHJcbiAgICBwdWJsaWMgZGlzYWJsZWRTYXZlQnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBpc0xlYXJuaW5nUGF0aExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsZWFybmluZ1BhdGhTZXJ2aWNlOiBMZWFybmluZ1BhdGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdXBsb2FkZXI6IG5nLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhJZCA9ICRyb3V0ZVBhcmFtc1tMZWFybmluZ1BhdGhzUm91dGVyLkxFQVJOSU5HX1BBVEhfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBsZWFybmluZ1BhdGhJZFN0cjogc3RyaW5nID0gU3RyaW5nKHRoaXMubGVhcm5pbmdQYXRoSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRMZWFybmluZ1BhdGhQZXJtaXNzaW9ucyhsZWFybmluZ1BhdGhJZFN0ciwgbGVhcm5pbmdQYXRoUGVybWlzc2lvbnMgPT4gbGVhcm5pbmdQYXRoUGVybWlzc2lvbnMucGVybWlzc2lvbnNEZWxlZ2F0aW9uKTtcclxuXHJcbiAgICAgICAgbGV0IG1lbnVJdGVtS2V5OiBzdHJpbmcgPSBNZW51SGVscGVyLmdldEN1cnJlbnRNZW51SXRlbUtleSgpO1xyXG4gICAgICAgIGlmICghbWVudUl0ZW1LZXkgfHwgbWVudUl0ZW1LZXkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5FRFVDQVRJT05fTEVBUk5JTkdfUEFUSFNfTUVOVV9LRVkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tZW51S2V5ID0ge1xyXG4gICAgICAgICAgICB0b3BNZW51OiB0aGlzLkRFRkFVTFRfVE9QX01FTlVfSVRFTSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMubG9hZExlYXJuaW5nUGF0aCgpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMZWFybmluZ1BhdGhMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLkxFQVJOSU5HX1BBVEgsIGxlYXJuaW5nUGF0aElkU3RyKTtcclxuICAgICAgICB0aGlzLnNldFRvcE1lbnUoJ2xlYXJuaW5nUGF0aCcpO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRMZWFybmluZ1BhdGgoKTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoPiB7XHJcbiAgICAgICAgbGV0IHByb21pc2U6IGFuZ3VsYXIuSVByb21pc2U8SUxlYXJuaW5nUGF0aD4gPSB0aGlzLmxlYXJuaW5nUGF0aFNlcnZpY2UuZ2V0KHRoaXMubGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGggPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuXHJcbiAgICAgICAgICAgIGxldCBsZWFybmluZ1BhdGhCcmVhZGNydW1iID0gdGhpcy5sZWFybmluZ1BhdGgubmFtZSB8fCB0aGlzLmxlYXJuaW5nUGF0aC5zdWJqZWN0TmFtZTtcclxuICAgICAgICAgICAgbGVhcm5pbmdQYXRoQnJlYWRjcnVtYiA9IGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIubGVuZ3RoID4gNDAgPyBsZWFybmluZ1BhdGhCcmVhZGNydW1iLnN1YnN0cmluZygwLCA0MCkgKyBcIi4uLlwiIDogbGVhcm5pbmdQYXRoQnJlYWRjcnVtYjtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKVxyXG4gICAgICAgICAgICAgICAgLmhlYWRlcihcIkFzc2lnbiBwZXJtaXNzaW9uc1wiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFBhcmVudExpbmsobGVhcm5pbmdQYXRoQnJlYWRjcnVtYixcclxuICAgICAgICAgICAgICAgICAgICBcIiNcIiArIHRoaXMubGVhcm5pbmdQYXRoc1JvdXRlci5kZXRhaWxzVXJsKHRoaXMubGVhcm5pbmdQYXRoSWQpKVxyXG4gICAgICAgICAgICAgICAgLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sZWFybmluZ1BhdGg7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkUGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoc2VjdXJlZE9iamVjdFR5cGU6IFNlY3VyZWRPYmplY3RUeXBlLCBvYmplY3RJZD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEFsbE9iamVjdFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKHNlY3VyZWRPYmplY3RUeXBlLCBvYmplY3RJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFNlcnZpY2UudXBkYXRlVmlld0FuZFN0YXJ0TGVhcm5pbmdQYXRoUGVybWlzc2lvbnModGhpcy5sZWFybmluZ1BhdGhJZCwgdGhpcy5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMubGVhcm5pbmdQYXRoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3VjY2Vzc0NhbGxiYWNrKHJlc3VsdC5pZCk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5zdG9yYWdlLm5vdC5hdmFpbGFibGVcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZS4gVGh1bWJuYWlsIGhhcyBub3QgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlU3VjY2Vzc0NhbGxiYWNrKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJNb2RpZmljYXRpb25zIG9mIHRoZSBsZWFybmluZyBwYXRoIGhhdmUgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gW107XHJcbiAgICAgICAgdGhpcy5sb2FkUGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoU2VjdXJlZE9iamVjdFR5cGUuTEVBUk5JTkdfUEFUSCwgU3RyaW5nKGxlYXJuaW5nUGF0aElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFRvcE1lbnUodG9wTWVudUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tZW51S2V5ID0ge1xyXG4gICAgICAgICAgICB0b3BNZW51OiB0b3BNZW51S2V5LFxyXG4gICAgICAgICAgICBsZWZ0TWVudU1vZHVsZTogdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlLFxyXG4gICAgICAgICAgICBsZWZ0TWVudU1vZHVsZUV4cGFuZGVkOiB0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZCxcclxuICAgICAgICAgICAgbGVmdE1lbnVJdGVtOiB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb3BNZW51QWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVLZXkudG9wTWVudSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0xlZnRNZW51TW9kdWxlQWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZywgbGVmdE1vZHVsZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUtleS50b3BNZW51ID09IHRvcE1lbnVLZXkgJiYgdGhpcy5tZW51S2V5LmxlZnRNZW51TW9kdWxlRXhwYW5kZWQgPT0gbGVmdE1vZHVsZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNMZWZ0TWVudUl0ZW1BY3RpdmUodG9wTWVudUtleTogc3RyaW5nLCBsZWZ0TW9kdWxlOiBudW1iZXIsIGl0ZW06IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnVLZXkudG9wTWVudSA9PSB0b3BNZW51S2V5XHJcbiAgICAgICAgICAgICYmICh0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGUgPT0gbGVmdE1vZHVsZSB8fCB0aGlzLm1lbnVLZXkubGVmdE1lbnVNb2R1bGVFeHBhbmRlZCA9PSBsZWZ0TW9kdWxlKVxyXG4gICAgICAgICAgICAmJiB0aGlzLm1lbnVLZXkubGVmdE1lbnVJdGVtID09IGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRMZWFybmluZ1BhdGgoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubGVhcm5pbmdQYXRoSWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubGVhcm5pbmdQYXRoICYmIHRoaXMubGVhcm5pbmdQYXRoLnBlcm1pc3Npb25zICYmIHRoaXMubGVhcm5pbmdQYXRoLnBlcm1pc3Npb25zLnZpZXcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuZGV0YWlsc1VybCh0aGlzLmxlYXJuaW5nUGF0aElkKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLmluZGV4VXJsKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TGVhcm5pbmdQYXRoc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTGVhcm5pbmdQYXRoc1JvdXRlclwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhTZXJ2aWNlfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzXCI7XHJcbmltcG9ydCB7U2VjdXJlZE9iamVjdFR5cGV9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9TZWN1cmVkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTGVhcm5pbmdQYXRoUGVybWlzc2lvbnNFZGl0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImxlYXJuaW5nUGF0aHMuTGVhcm5pbmdQYXRoUGVybWlzc2lvbnNFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aDtcclxuXHJcbiAgICBwdWJsaWMgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IEFycmF5PElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzPiA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyOiBJVXNlckluZm8gPSB7fTtcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcklkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY3VycmVudFVzZXJOYW1lOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcGVybWlzc2lvbnNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZWRTYXZlQnV0dG9uOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoc1JvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoU2VydmljZTogTGVhcm5pbmdQYXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoc1JvdXRlcjogTGVhcm5pbmdQYXRoc1JvdXRlcikge1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoSWQgPSAkcm91dGVQYXJhbXNbTGVhcm5pbmdQYXRoc1JvdXRlci5MRUFSTklOR19QQVRIX0lEX1BBUkFNXTtcclxuICAgICAgICBsZXQgaGFzTGVhcm5pbmdQYXRoSWQ6IGJvb2xlYW4gPSB0aGlzLmxlYXJuaW5nUGF0aElkICE9IG51bGw7XHJcbiAgICAgICAgbGV0IGxlYXJuaW5nUGF0aElkU3RyOiBzdHJpbmcgPSBTdHJpbmcodGhpcy5sZWFybmluZ1BhdGhJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZExlYXJuaW5nUGF0aFBlcm1pc3Npb25zSWYoaGFzTGVhcm5pbmdQYXRoSWQsIGxlYXJuaW5nUGF0aElkU3RyLCBsZWFybmluZ1BhdGhQZXJtaXNzaW9ucyA9PiBsZWFybmluZ1BhdGhQZXJtaXNzaW9ucy5lZGl0KTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weSh1c2VyLCB0aGlzLnVzZXIpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VySWQgPSB1c2VyLmlkO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyTmFtZSA9IHVzZXIuZnVsbE5hbWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuRURVQ0FUSU9OX0xFQVJOSU5HX1BBVEhTX01FTlVfS0VZKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkTGVhcm5pbmdQYXRoKHRoaXMubGVhcm5pbmdQYXRoSWQpLnRoZW4obGVhcm5pbmdQYXRoID0+IHtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJFZGl0IExlYXJuaW5nIFBhdGggXCIgKyBcIuKAmFwiXHJcbiAgICAgICAgICAgICAgICArIGxlYXJuaW5nUGF0aC5uYW1lICsgXCLigJlcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMZWFybmluZ1BhdGhMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLkxFQVJOSU5HX1BBVEgsIGxlYXJuaW5nUGF0aElkU3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRMZWFybmluZ1BhdGgobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUxlYXJuaW5nUGF0aD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFNlcnZpY2UuZ2V0KGxlYXJuaW5nUGF0aElkKS50aGVuKGxlYXJuaW5nUGF0aCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoID0gYW5ndWxhci5jb3B5KGxlYXJuaW5nUGF0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhzZWN1cmVkT2JqZWN0VHlwZTogU2VjdXJlZE9iamVjdFR5cGUsIG9iamVjdElkPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEFsbE9iamVjdFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKHNlY3VyZWRPYmplY3RUeXBlLCBvYmplY3RJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZSgpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhTZXJ2aWNlLnVwZGF0ZUxlYXJuaW5nUGF0aFBlcm1pc3Npb25zKHRoaXMubGVhcm5pbmdQYXRoSWQsIHRoaXMubGVhcm5pbmdQYXRoLnZlcnNpb24sIHRoaXMucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IG5vdGlmaWVyLnN1Y2Nlc3MoXCJNb2RpZmljYXRpb25zIG9mIHRoZSBsZWFybmluZyBwYXRoIGhhdmUgYmVlbiBzYXZlZFwiKSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmxlYXJuaW5nUGF0aCAmJiB0aGlzLmxlYXJuaW5nUGF0aC5wZXJtaXNzaW9ucyAmJiB0aGlzLmxlYXJuaW5nUGF0aC5wZXJtaXNzaW9ucy52aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuZGV0YWlsc1VybCh0aGlzLmxlYXJuaW5nUGF0aElkKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubGVhcm5pbmdQYXRoc1JvdXRlci5pbmRleFVybCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4vbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhTZXJ2aWNlfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoQ291cnNlfSBmcm9tIFwiLi9tb2RlbHMvSUxlYXJuaW5nUGF0aENvdXJzZVwiO1xyXG5pbXBvcnQgSVFTZXJ2aWNlID0gYW5ndWxhci5JUVNlcnZpY2U7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aFByb2dyZXNzfSBmcm9tIFwiLi9tb2RlbHMvSUxlYXJuaW5nUGF0aFByb2dyZXNzXCI7XHJcbmltcG9ydCB7SUNvdXJzZVByb2dyZXNzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVByb2dyZXNzXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Qcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7SVVzZXJDZXJ0aWZpY2F0ZX0gZnJvbSBcIi4uL3BlcnNvbmFsL21vZGVscy9JVXNlckNlcnRpZmljYXRlXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVTZXJ2aWNlfSBmcm9tIFwiLi4vY2VydGlmaWNhdGVzL0NlcnRpZmljYXRlU2VydmljZVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vY29tcG9uZW50cy9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtJUGFydGljaXBhdGlvbkZvcm0sIFBhcnRpY2lwYXRpb25Gb3JtRmllbGR9IGZyb20gXCIuLi9jb21tb24vSVBhcnRpY2lwYXRpb25Gb3JtXCI7XHJcbmltcG9ydCB7U2VjdXJlZE9iamVjdFR5cGV9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9TZWN1cmVkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge0NvbW1vblNlcnZpY2V9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uU2VydmljZVwiO1xyXG5pbXBvcnQge0lJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUluZGl2aWR1YWxTZWN0aW9uUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtUcmVlRWxlbWVudHNJbmZvRmlsbGVyfSBmcm9tIFwiLi4vdHJlZS9UcmVlRWxlbWVudHNJbmZvRmlsbGVyXCI7XHJcbmltcG9ydCB7SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSVNlY3Rpb25JbkhpZXJhcmNoeVwiO1xyXG5pbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuLi9jb3Vyc2VzL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhDb3Vyc2VQcm9ncmVzc30gZnJvbSBcIi4vbW9kZWxzL0lMZWFybmluZ1BhdGhDb3Vyc2VQcm9ncmVzc1wiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SVBhcnRpY2lwYW50c30gZnJvbSBcIi4uL2hvbWUvbW9kZWxzL0lQYXJ0aWNpcGFudHNcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0hvbWVSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0hvbWVSb3V0ZXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV4dGVuZGVkU2VsZWN0YWJsZSBleHRlbmRzIElTZWxlY3RhYmxlIHtcclxuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExlYXJuaW5nUGF0aFByb2dyZXNzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImxlYXJuaW5nUGF0aHMuTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHJpdmF0ZSBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudFVzZXI6IElVc2VySW5mbyA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhVc2VyczogQXJyYXk8SUV4dGVuZGVkU2VsZWN0YWJsZT4gPSBbXTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFVzZXJJZDogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG4gICAgcHVibGljIGRpc2FibGVTZWxlY3RCdXR0b25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdXNlck5hbWVTZWFyY2hTdHJpbmc6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgdXNlckxvZ29uU2VhcmNoU3RyaW5nOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aDogSUxlYXJuaW5nUGF0aDtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhDb3Vyc2VzOiBJTGVhcm5pbmdQYXRoQ291cnNlW10gPSBbXTtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXM6IElTZWxlY3RhYmxlW10gPSBbXTtcclxuICAgIHB1YmxpYyBwYXJ0aWNpcGF0aW9uRm9ybTogTWFwPHN0cmluZywgYW55PjtcclxuXHJcbiAgICBwdWJsaWMgdXNlckxlYXJuaW5nUGF0aFByb2dyZXNzZXM6IElMZWFybmluZ1BhdGhQcm9ncmVzc1tdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkUHJvZ3Jlc3NJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHVzZXJDb3Vyc2VzUHJvZ3Jlc3NlczogSUxlYXJuaW5nUGF0aENvdXJzZVByb2dyZXNzW107XHJcbiAgICBwdWJsaWMgdXNlckNlcnRpZmljYXRlczogSVVzZXJDZXJ0aWZpY2F0ZVtdID0gW107XHJcbiAgICBwdWJsaWMgcGFydGljaXBhdGlvbkZvcm1GaWVsZHM6IFBhcnRpY2lwYXRpb25Gb3JtRmllbGRbXTtcclxuXHJcbiAgICBwdWJsaWMgaXNMZWFybmluZ1BhdGhMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0xlYXJuaW5nUGF0aFVzZXJzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzVXNlclByb2dyZXNzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RlZFVzZXJOYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRDb3Vyc2VJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHNlbGVjdGVkQ291cnNlOiBJQ291cnNlO1xyXG4gICAgcHVibGljIHNlbGVjdGVkQ291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHNlbGVjdGVkQ291cnNlUHJvZ3Jlc3M6IElDb3Vyc2VQcm9ncmVzcztcclxuICAgIHB1YmxpYyBzZWxlY3RlZENvdXJzZVByb2dyZXNzU2VjdGlvblByb2dyZXNzZXM6IElJbmRpdmlkdWFsU2VjdGlvblByb2dyZXNzW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRDb3Vyc2VTZWN0aW9uczogSVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRDb3Vyc2VDZXJ0aWZpY2F0ZXM6IEFycmF5PElTZWxlY3RhYmxlPiA9IFtdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkQ291cnNlVXNlckNlcnRpZmljYXRlczogQXJyYXk8SVVzZXJDZXJ0aWZpY2F0ZT47XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRDb3Vyc2VQYXJ0aWNpcGF0aW9uRm9ybTogTWFwPHN0cmluZywgYW55PjtcclxuICAgIHB1YmxpYyBzZWxlY3RlZENvdXJzZVBhcnRpY2lwYXRpb25Gb3JtRmllbGRzOiBQYXJ0aWNpcGF0aW9uRm9ybUZpZWxkW107XHJcbiAgICBwdWJsaWMgaXNVc2VyQ291cnNlUHJvZ3Jlc3NMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRVc2VyRnVsbE5hbWU6IHN0cmluZyA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwdWJsaWMgcGFydGljaXBhbnRzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElQYXJ0aWNpcGFudHM+O1xyXG4gICAgcHVibGljIHNlYXJjaFR5cGU6IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgaXNPbmx5QWN0aXZlRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbW9kZWxUeXBlOiBzdHJpbmcgPSBIb21lUm91dGVyLlBBUlRJQ0lQQU5UX1RZUEVfTFA7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUHJvZ3Jlc3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ2VydGlmaWNhdGVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IElRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBuZy5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFueSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aFNlcnZpY2U6IExlYXJuaW5nUGF0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZTogTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2VydGlmaWNhdGVTZXJ2aWNlOiBDZXJ0aWZpY2F0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoSWQgPSAkcm91dGVQYXJhbXNbTGVhcm5pbmdQYXRoc1JvdXRlci5MRUFSTklOR19QQVRIX0lEX1BBUkFNXTtcclxuICAgICAgICBsZXQgbGVhcm5pbmdQYXRoSWRTdHIgPSBTdHJpbmcodGhpcy5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2VcclxuICAgICAgICAgICAgLmRlbWFuZExlYXJuaW5nUGF0aFBlcm1pc3Npb25zKGxlYXJuaW5nUGF0aElkU3RyLCBsZWFybmluZ1BhdGhQZXJtaXNzaW9ucyA9PiBsZWFybmluZ1BhdGhQZXJtaXNzaW9ucy52aWV3KTtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkVEVUNBVElPTl9MRUFSTklOR19QQVRIU19NRU5VX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZExlYXJuaW5nUGF0aCgpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMubG9hZEN1cnJlbnRVc2VyKCkpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxlYXJuaW5nUGF0aC5wZXJtaXNzaW9ucy52aWV3T3RoZXJVc2Vyc1Byb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlcnMoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZCA9IHRoaXMuY3VycmVudFVzZXIuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEud2hlbig8e30+dGhpcy5jdXJyZW50VXNlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxlYXJuaW5nUGF0aC5wZXJtaXNzaW9ucy52aWV3T3RoZXJVc2Vyc1Byb2dyZXNzICYmIHRoaXMubGVhcm5pbmdQYXRoVXNlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5yZWplY3QoXCJubyB1c2VycyBmb3IgbGVhcm5pbmcgcGF0aFwiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEuYWxsKFt0aGlzLmxvYWRMZWFybmluZ1BhdGhDb3Vyc2VzKCksIHRoaXMubG9hZExlYXJuaW5nUGF0aFBhcnRpY2lwYXRpb25Gb3JtRmllbGRzKCldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVhcm5pbmdQYXRoLnBlcm1pc3Npb25zLnZpZXdPdGhlclVzZXJzUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5yZWplY3QoXCJub3QgbmVlZCB0byBsb2FkIG90aGVyIGZvciBhZG1pbiBub3dcIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRMZWFybmluZ1BhdGhQcm9ncmVzc2VzRm9yVXNlcih0aGlzLnNlbGVjdGVkVXNlcklkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEuYWxsKFtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRDb3Vyc2VQcm9ncmVzc2VzRm9yTGVhcm5pbmdQYXRoUHJvZ3Jlc3MoKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRMZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXMoKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFVzZXJDZXJ0aWZpY2F0ZXMoKVxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMZWFybmluZ1BhdGhMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJJZDogbnVtYmVyID0gJHJvdXRlUGFyYW1zW0xlYXJuaW5nUGF0aHNSb3V0ZXIuVVNFUl9JRF9QQVJBTV0gfHwgLTE7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlcklkICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkVXNlcjogSUV4dGVuZGVkU2VsZWN0YWJsZSA9IHRoaXMubGVhcm5pbmdQYXRoVXNlcnMuZmlsdGVyKHUgPT4gdS5pZCA9PSB1c2VySWQpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFVzZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFVzZXIuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RVc2VyKHNlbGVjdGVkVXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJUGFydGljaXBhbnRzPigkaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcIi9hcGkvbGVhcm5pbmdQYXRocy9zZWFyY2gvcGFydGljaXBhbnRzL2luZm8/cm9sZT1hdHRlbmRlZU1hbmFnZXJcIikpKTtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhbnRzR3JpZE1vZGVsLmZpbHRlci5sZWFybmVyTmFtZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNHcmlkTW9kZWwuZmlsdGVyLm9iamVjdE5hbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhbnRzR3JpZE1vZGVsLmZpbHRlci5zdGF0dXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhbnRzR3JpZE1vZGVsLmZpbHRlci5vYmplY3RJZCA9IHRoaXMubGVhcm5pbmdQYXRoSWQ7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihFdmVudC5MRUFSTklOR19QQVRIX1BST0dSRVNTX1JFU0VUX1BST0dSRVNTLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ1c2VyUHJvZ3Jlc3NSZXNldFwiLCBldmVudCk7XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFVzZXI6IElFeHRlbmRlZFNlbGVjdGFibGUgPSB0aGlzLmxlYXJuaW5nUGF0aFVzZXJzLmZpbHRlcih1ID0+IHUuc2VsZWN0ZWQgPT0gdHJ1ZSlbMF07XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFVzZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRVc2VyLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFVzZXIoc2VsZWN0ZWRVc2VyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oRXZlbnQuTEVBUk5JTkdfUEFUSF9QUk9HUkVTU19SRUxPQURfUFJPR1JFU1MsIChldmVudCwgYXJncykgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlbG9hZExlYXJuaW5nUGF0aFByb2dyZXNzU3RhcnRlZFwiLCBldmVudCwgYXJncyk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEFsbFByb2dyZXNzRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oRXZlbnQuTEVBUk5JTkdfUEFUSF9QUk9HUkVTU19DSEFOR0VfUFJPR1JFU1NfRVhURVJOQUxMWSwgKGV2ZW50LCBhcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkID0gYXJncy5zZWxlY3RlZFByb2dyZXNzSWQ7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEFsbFByb2dyZXNzRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oRXZlbnQuTEVBUk5JTkdfUEFUSF9QUk9HUkVTU19TSE9XX0NPVVJTRV9QUk9HUkVTU19ERVRBSUxTLCAoZXZlbnQsIGFyZ3MpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvdXJzZUlkID0gYXJncy5jb3Vyc2VJZDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvdXJzZVByb2dyZXNzSWQgPSBhcmdzLmNvdXJzZVByb2dyZXNzSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0xlYXJuaW5nUGF0aENvdXJzZVByb2dyZXNzRGV0YWlscygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oRXZlbnQuQ09VUlNFX1BST0dSRVNTX1JFU0VUX1BST0dSRVNTLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ1c2VyUHJvZ3Jlc3NSZXNldFwiLCBldmVudCk7XHJcbiAgICAgICAgICAgICQoXCIjY291cnNlUHJvZ3Jlc3NEZXRhaWxzTW9kYWxcIikubW9kYWwoXCJoaWRlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdChFdmVudC5MRUFSTklOR19QQVRIX1BST0dSRVNTX1JFTE9BRF9QUk9HUkVTUyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihFdmVudC5DT1VSU0VfUFJPR1JFU1NfUkVMT0FEX1BST0dSRVNTLCAoZXZlbnQsIGFyZ3MpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJyZWxvYWRQcm9ncmVzc1N0YXJ0ZWRcIiwgZXZlbnQsIGFyZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRBbGxTZWxlY3RlZENvdXJzZURhdGEoKTtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGVtaXQoRXZlbnQuTEVBUk5JTkdfUEFUSF9QUk9HUkVTU19SRUxPQURfUFJPR1JFU1MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZExlYXJuaW5nUGF0aCgpOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGg+IHtcclxuICAgICAgICBsZXQgcHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoPiA9IHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5nZXQodGhpcy5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aCA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIgPSB0aGlzLmxlYXJuaW5nUGF0aC5uYW1lIHx8IHRoaXMubGVhcm5pbmdQYXRoLnN1YmplY3ROYW1lO1xyXG4gICAgICAgICAgICBsZWFybmluZ1BhdGhCcmVhZGNydW1iID0gbGVhcm5pbmdQYXRoQnJlYWRjcnVtYi5sZW5ndGggPiA0MCA/IGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIuc3Vic3RyaW5nKDAsIDQwKSArIFwiLi4uXCIgOiBsZWFybmluZ1BhdGhCcmVhZGNydW1iO1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpXHJcbiAgICAgICAgICAgICAgICAuaGVhZGVyKFwiUHJvZ3Jlc3NcIilcclxuICAgICAgICAgICAgICAgIC5hZGRQYXJlbnRMaW5rKGxlYXJuaW5nUGF0aEJyZWFkY3J1bWIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCIjXCIgKyB0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuZGV0YWlsc1VybCh0aGlzLmxlYXJuaW5nUGF0aElkKSlcclxuICAgICAgICAgICAgICAgIC51cGRhdGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZExlYXJuaW5nUGF0aENvdXJzZXMoKTogSVByb21pc2U8SUxlYXJuaW5nUGF0aENvdXJzZVtdPiB7XHJcbiAgICAgICAgbGV0IHByb21pc2U6IGFuZ3VsYXIuSVByb21pc2U8SUxlYXJuaW5nUGF0aENvdXJzZVtdPiA9IHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5nZXRMZWFybmluZ1BhdGhDb3Vyc2VzKHRoaXMubGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhDb3Vyc2VzID0gYW5ndWxhci5jb3B5KHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aENvdXJzZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ3VycmVudFVzZXIoKTogSVByb21pc2U8SVVzZXJJbmZvPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkodXNlciwgdGhpcy5jdXJyZW50VXNlcik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZExlYXJuaW5nUGF0aFByb2dyZXNzZXNGb3JVc2VyKHVzZXJJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoUHJvZ3Jlc3NbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5nZXRMZWFybmluZ1BhdGhQcm9ncmVzc2VzRm9yVXNlcih0aGlzLmxlYXJuaW5nUGF0aElkLCB0aGlzLnNlbGVjdGVkVXNlcklkKVxyXG4gICAgICAgICAgICAudGhlbigodXNlckxlYXJuaW5nUGF0aFByb2dyZXNzZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlckxlYXJuaW5nUGF0aFByb2dyZXNzZXMgPSBhbmd1bGFyLmNvcHkodXNlckxlYXJuaW5nUGF0aFByb2dyZXNzZXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlckxlYXJuaW5nUGF0aFByb2dyZXNzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQgPSB0aGlzLnVzZXJMZWFybmluZ1BhdGhQcm9ncmVzc2VzWzBdLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLnJlamVjdChcIk5vIHByb2dyZXNzIGZvciBVc2VyOiBcIiArIHVzZXJJZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyTGVhcm5pbmdQYXRoUHJvZ3Jlc3NlcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlUHJvZ3Jlc3Nlc0ZvckxlYXJuaW5nUGF0aFByb2dyZXNzKCk6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SUxlYXJuaW5nUGF0aENvdXJzZVByb2dyZXNzPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5nZXRDb3Vyc2VQcm9ncmVzc2VzRm9yTGVhcm5pbmdQYXRoUHJvZ3Jlc3ModGhpcy5sZWFybmluZ1BhdGhJZCwgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC50aGVuKCh1c2VyQ291cnNlc1Byb2dyZXNzZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlckNvdXJzZXNQcm9ncmVzc2VzID0gYW5ndWxhci5jb3B5KHVzZXJDb3Vyc2VzUHJvZ3Jlc3Nlcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyQ291cnNlc1Byb2dyZXNzZXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZExlYXJuaW5nUGF0aENlcnRpZmljYXRlcygpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNlcnRpZmljYXRlU2VydmljZS5nZXRMZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZVRlbXBsYXRlcyh0aGlzLmxlYXJuaW5nUGF0aElkKS50aGVuKGNlcnRpZmljYXRlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVzLnNwbGljZSgwKTtcclxuICAgICAgICAgICAgY2VydGlmaWNhdGVzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aENlcnRpZmljYXRlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogYy5jZXJ0aWZpY2F0ZVRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYy5jZXJ0aWZpY2F0ZVRlbXBsYXRlTmFtZX0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoQ2VydGlmaWNhdGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VXNlckNlcnRpZmljYXRlcygpOiBhbmd1bGFyLklQcm9taXNlPElVc2VyQ2VydGlmaWNhdGVbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFNlcnZpY2UuZ2V0VXNlckNlcnRpZmljYXRlcyh0aGlzLmxlYXJuaW5nUGF0aElkLCB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgLnRoZW4oKHVzZXJDZXJ0aWZpY2F0ZXM6IElVc2VyQ2VydGlmaWNhdGVbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyQ2VydGlmaWNhdGVzID0gYW5ndWxhci5jb3B5KHVzZXJDZXJ0aWZpY2F0ZXMsIHRoaXMudXNlckNlcnRpZmljYXRlcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyQ2VydGlmaWNhdGVzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFBhcnRpY2lwYXRpb25Gb3JtRm9yUHJvZ3Jlc3MoKTogYW5ndWxhci5JUHJvbWlzZTxNYXA8c3RyaW5nLCBhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLmdldFBhcnRpY2lwYXRpb25Gb3JtRGF0YSh0aGlzLmxlYXJuaW5nUGF0aElkLCB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgLnRoZW4oKHBhcnRpY2lwYXRpb25Gb3JtOiBNYXA8c3RyaW5nLCBhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtID0gcGFydGljaXBhdGlvbkZvcm07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydGljaXBhdGlvbkZvcm07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkZvcm1GaWVsZHMoKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlLmdldFBhcnRpY2lwYXRpb25Gb3JtKHRoaXMubGVhcm5pbmdQYXRoSWQsIFNlY3VyZWRPYmplY3RUeXBlLkxFQVJOSU5HX1BBVEgubmFtZS50b1VwcGVyQ2FzZSgpKVxyXG4gICAgICAgICAgICAudGhlbigocGFydGljaXBhdGlvbkZvcm06IElQYXJ0aWNpcGF0aW9uRm9ybSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGF0aW9uRm9ybUZpZWxkcyA9IHBhcnRpY2lwYXRpb25Gb3JtLmZpZWxkcztcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtRmllbGRzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZEFsbFByb2dyZXNzRGF0YSgpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRoaXMudXNlckNvdXJzZXNQcm9ncmVzc2VzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVzZXJDZXJ0aWZpY2F0ZXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhdGlvbkZvcm0gPSBudWxsO1xyXG4gICAgICAgIGxldCBkYXRhTG9hZGluZ1Byb21pc2VzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMubGVhcm5pbmdQYXRoLnBlcm1pc3Npb25zLnZpZXdPdGhlclVzZXJzUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgZGF0YUxvYWRpbmdQcm9taXNlcy5wdXNoKHRoaXMubG9hZExlYXJuaW5nUGF0aFByb2dyZXNzZXNGb3JVc2VyKHRoaXMuc2VsZWN0ZWRVc2VySWQpKTtcclxuICAgICAgICAgICAgZGF0YUxvYWRpbmdQcm9taXNlcy5wdXNoKHRoaXMubG9hZENvdXJzZVByb2dyZXNzZXNGb3JMZWFybmluZ1BhdGhQcm9ncmVzcygpKTtcclxuICAgICAgICAgICAgZGF0YUxvYWRpbmdQcm9taXNlcy5wdXNoKHRoaXMubG9hZFBhcnRpY2lwYXRpb25Gb3JtRm9yUHJvZ3Jlc3MoKSk7XHJcbiAgICAgICAgICAgIGRhdGFMb2FkaW5nUHJvbWlzZXMucHVzaCh0aGlzLmxvYWRMZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXMoKSk7XHJcbiAgICAgICAgICAgIGRhdGFMb2FkaW5nUHJvbWlzZXMucHVzaCh0aGlzLmdldFVzZXJDZXJ0aWZpY2F0ZXMoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YUxvYWRpbmdQcm9taXNlcy5wdXNoKHRoaXMubG9hZExlYXJuaW5nUGF0aFByb2dyZXNzZXNGb3JVc2VyKHRoaXMuc2VsZWN0ZWRVc2VySWQpKTtcclxuICAgICAgICAgICAgZGF0YUxvYWRpbmdQcm9taXNlcy5wdXNoKHRoaXMubG9hZENvdXJzZVByb2dyZXNzZXNGb3JMZWFybmluZ1BhdGhQcm9ncmVzcygpKTtcclxuICAgICAgICAgICAgZGF0YUxvYWRpbmdQcm9taXNlcy5wdXNoKHRoaXMubG9hZExlYXJuaW5nUGF0aENlcnRpZmljYXRlcygpKTtcclxuICAgICAgICAgICAgZGF0YUxvYWRpbmdQcm9taXNlcy5wdXNoKHRoaXMuZ2V0VXNlckNlcnRpZmljYXRlcygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHEuYWxsKGRhdGFMb2FkaW5nUHJvbWlzZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckRhdGEoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFVzZXJzLmZvckVhY2godSA9PiB1LnNlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudXNlckxlYXJuaW5nUGF0aFByb2dyZXNzZXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhcnRpY2lwYXRpb25Gb3JtID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVzZXJDb3Vyc2VzUHJvZ3Jlc3NlcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy51c2VyQ2VydGlmaWNhdGVzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0VXNlcih1c2VyOiBJRXh0ZW5kZWRTZWxlY3RhYmxlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHVzZXIuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdXNlci5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcklkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJGdWxsTmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyRnVsbE5hbWUgPSB1c2VyLm5hbWU7XHJcbiAgICAgICAgdGhpcy5pc1VzZXJQcm9ncmVzc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyRGF0YSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcklkID0gdXNlci5pZDtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFVzZXJzW3RoaXMubGVhcm5pbmdQYXRoVXNlcnMuaW5kZXhPZih1c2VyKV0uc2VsZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRMZWFybmluZ1BhdGhQcm9ncmVzc2VzRm9yVXNlcih1c2VyLmlkKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZENvdXJzZVByb2dyZXNzZXNGb3JMZWFybmluZ1BhdGhQcm9ncmVzcygpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFBhcnRpY2lwYXRpb25Gb3JtRm9yUHJvZ3Jlc3MoKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRMZWFybmluZ1BhdGhDZXJ0aWZpY2F0ZXMoKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFVzZXJDZXJ0aWZpY2F0ZXMoKSxcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3RCdXR0b25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVXNlclByb2dyZXNzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0VXNlck9uQnV0dG9uUHJlc3NlZCh1c2VyOiBJRXh0ZW5kZWRTZWxlY3RhYmxlLCBrZXlDb2RlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoa2V5Q29kZSA9PSAxMyB8fCAha2V5Q29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFVzZXIodXNlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVc2VycygpOiBJUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFVzZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmNsZWFyRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuaXNMZWFybmluZ1BhdGhVc2Vyc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5nZXRMZWFybmluZ1BhdGhVc2Vycyh0aGlzLmxlYXJuaW5nUGF0aElkLCB0aGlzLnVzZXJOYW1lU2VhcmNoU3RyaW5nLCB0aGlzLnVzZXJMb2dvblNlYXJjaFN0cmluZywgdGhpcy5pc09ubHlBY3RpdmVGaWx0ZXIpXHJcbiAgICAgICAgICAgIC50aGVuKHVzZXJzID0+IHtcclxuICAgICAgICAgICAgICAgIHVzZXJzLmZvckVhY2godSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVuZGVkVXNlckluZm86IElFeHRlbmRlZFNlbGVjdGFibGUgPSB7c2VsZWN0ZWQ6IGZhbHNlfTtcclxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodSwgZXh0ZW5kZWRVc2VySW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRVc2VySW5mby5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoVXNlcnMucHVzaChleHRlbmRlZFVzZXJJbmZvKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aFVzZXJzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlcnNPbkJ1dHRvblByZXNzZWQoa2V5Q29kZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IDEzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlcnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyU2VhcmNoKCkge1xyXG4gICAgICAgIHRoaXMudXNlck5hbWVTZWFyY2hTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXNlckxvZ29uU2VhcmNoU3RyaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdldFVzZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIExlYXJuaW5nIHBhdGggQ291cnNlIHByb2dyZXNzIGRldGFpbHMgZGF0YSBsb2FkaW5nICoqL1xyXG5cclxuICAgIHB1YmxpYyBzaG93TGVhcm5pbmdQYXRoQ291cnNlUHJvZ3Jlc3NEZXRhaWxzKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBzZWFyY2hDb3Vyc2VQcm9ncmVzc1Jlc3VsdHM6IElDb3Vyc2VQcm9ncmVzc1tdID0gdGhpcy51c2VyQ291cnNlc1Byb2dyZXNzZXMuZmlsdGVyKHByb2dyZXNzID0+IHByb2dyZXNzLmlkID09IHRoaXMuc2VsZWN0ZWRDb3Vyc2VQcm9ncmVzc0lkKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ291cnNlUHJvZ3Jlc3MgPSBzZWFyY2hDb3Vyc2VQcm9ncmVzc1Jlc3VsdHMubGVuZ3RoID09IDEgPyBzZWFyY2hDb3Vyc2VQcm9ncmVzc1Jlc3VsdHNbMF0gOiBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlck5hbWUgPSB0aGlzLmdldFNlbGVjdGVkVXNlck5hbWUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1VzZXJDb3Vyc2VQcm9ncmVzc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI2NvdXJzZVByb2dyZXNzRGV0YWlsc01vZGFsXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZEFsbFNlbGVjdGVkQ291cnNlRGF0YSgpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuaXNVc2VyQ291cnNlUHJvZ3Jlc3NMb2FkZWQgPSB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFNlbGVjdGVkVXNlck5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlci5pZCA9PSB0aGlzLnNlbGVjdGVkVXNlcklkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyLmZ1bGxOYW1lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBzZWFyY2hVc2VyUmVzdWx0cyA9IHRoaXMubGVhcm5pbmdQYXRoVXNlcnMuZmlsdGVyKHVzZXIgPT4gdXNlci5pZCA9PSB0aGlzLnNlbGVjdGVkVXNlcklkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNlYXJjaFVzZXJSZXN1bHRzLmxlbmd0aCA+IDAgPyBzZWFyY2hVc2VyUmVzdWx0c1swXS5uYW1lIDogXCJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQWxsU2VsZWN0ZWRDb3Vyc2VEYXRhKCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZENvdXJzZSh0aGlzLnNlbGVjdGVkQ291cnNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBsb2FkRGF0YVByb21pc2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb3Vyc2UucGVybWlzc2lvbnMudmlld090aGVyVXNlcnNQcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWREYXRhUHJvbWlzZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUGFydGljaXBhdGlvbkZvcm1Gb3JDb3Vyc2VQcm9ncmVzcyh0aGlzLnNlbGVjdGVkQ291cnNlSWQsIHRoaXMuc2VsZWN0ZWRDb3Vyc2VQcm9ncmVzc0lkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQ291cnNlUGFydGljaXBhdGlvbkZvcm1GaWVsZHModGhpcy5zZWxlY3RlZENvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbG9hZERhdGFQcm9taXNlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ291cnNlU2VjdGlvbnModGhpcy5zZWxlY3RlZENvdXJzZUlkKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTZWN0aW9uUHJvZ3Jlc3Nlc0ZvckNvdXJzZVByb2dyZXNzKHRoaXMuc2VsZWN0ZWRDb3Vyc2VJZCwgdGhpcy5zZWxlY3RlZENvdXJzZVByb2dyZXNzSWQpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZENvdXJzZUNlcnRpZmljYXRlcyh0aGlzLnNlbGVjdGVkQ291cnNlSWQpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFVzZXJDb3Vyc2VDZXJ0aWZpY2F0ZXModGhpcy5zZWxlY3RlZENvdXJzZUlkLCB0aGlzLnNlbGVjdGVkQ291cnNlUHJvZ3Jlc3NJZClcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEuYWxsKGxvYWREYXRhUHJvbWlzZXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRDb3Vyc2UoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0KGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvdXJzZSA9IGFuZ3VsYXIuY29weShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3Vyc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0QWxsQ291cnNlU2VjdGlvbnMoY291cnNlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVNlY3Rpb25JbkhpZXJhcmNoeUV4dGVuZGVkW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc1NlcnZpY2UuZ2V0QWxsU2VjdGlvbnNJbkhpZXJhcmNoeShjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3Vyc2VTZWN0aW9ucyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50c0luZm9GaWxsZXIuZmlsbEhpZXJhcmNoeUluZm9XaXRoTWF4TGV2ZWwodGhpcy5zZWxlY3RlZENvdXJzZVNlY3Rpb25zLCBOdW1iZXIuTUFYX1ZBTFVFKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ291cnNlU2VjdGlvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFNlY3Rpb25Qcm9ncmVzc2VzRm9yQ291cnNlUHJvZ3Jlc3MoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJSW5kaXZpZHVhbFNlY3Rpb25Qcm9ncmVzc1tdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmdldEFsbFNlY3Rpb25Qcm9ncmVzc2VzRm9yQ291cnNlUHJvZ3Jlc3MoY291cnNlSWQsIGNvdXJzZVByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLnNlbGVjdGVkQ291cnNlUHJvZ3Jlc3NTZWN0aW9uUHJvZ3Jlc3NlcyA9IHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlQ2VydGlmaWNhdGVzKGNvdXJzZUlkOiBudW1iZXIpOiBJUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jZXJ0aWZpY2F0ZVNlcnZpY2UuZ2V0Q291cnNlQ2VydGlmaWNhdGVUZW1wbGF0ZXMoY291cnNlSWQpLnRoZW4oY2VydGlmaWNhdGVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvdXJzZUNlcnRpZmljYXRlcy5zcGxpY2UoMCk7XHJcbiAgICAgICAgICAgIGNlcnRpZmljYXRlcy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvdXJzZUNlcnRpZmljYXRlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogYy5jZXJ0aWZpY2F0ZVRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYy5jZXJ0aWZpY2F0ZVRlbXBsYXRlTmFtZX0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3Vyc2VDZXJ0aWZpY2F0ZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlckNvdXJzZUNlcnRpZmljYXRlcyhjb3Vyc2VJZDogbnVtYmVyLCBjb3Vyc2VQcm9ncmVzc0lkOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldFVzZXJDZXJ0aWZpY2F0ZXMoY291cnNlSWQsIGNvdXJzZVByb2dyZXNzSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvdXJzZVVzZXJDZXJ0aWZpY2F0ZXMgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3Vyc2VVc2VyQ2VydGlmaWNhdGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFBhcnRpY2lwYXRpb25Gb3JtRm9yQ291cnNlUHJvZ3Jlc3MoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogSVByb21pc2U8TWFwPHN0cmluZywgYW55Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzU2VydmljZS5nZXRDb3Vyc2VQcm9ncmVzc1BhcnRpY2lwYXRpb25Gb3JtKGNvdXJzZUlkLCBjb3Vyc2VQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAudGhlbigocGFydGljaXBhdGlvbkZvcm06IE1hcDxzdHJpbmcsIGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3Vyc2VQYXJ0aWNpcGF0aW9uRm9ybSA9IHBhcnRpY2lwYXRpb25Gb3JtO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3Vyc2VQYXJ0aWNpcGF0aW9uRm9ybTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQ291cnNlUGFydGljaXBhdGlvbkZvcm1GaWVsZHMoY291cnNlSWQ6IG51bWJlcik6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0UGFydGljaXBhdGlvbkZvcm0oY291cnNlSWQsIFNlY3VyZWRPYmplY3RUeXBlLkNPVVJTRS5uYW1lLnRvVXBwZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChwYXJ0aWNpcGF0aW9uRm9ybTogSVBhcnRpY2lwYXRpb25Gb3JtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ291cnNlUGFydGljaXBhdGlvbkZvcm1GaWVsZHMgPSBwYXJ0aWNpcGF0aW9uRm9ybS5maWVsZHM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENvdXJzZVBhcnRpY2lwYXRpb25Gb3JtRmllbGRzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWxlY3RlZFByb2dyZXNzQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlckNvdXJzZXNQcm9ncmVzc2VzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVzZXJDZXJ0aWZpY2F0ZXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRlbWl0KEV2ZW50LkxFQVJOSU5HX1BBVEhfUFJPR1JFU1NfQ0hBTkdFX1BST0dSRVNTX0VYVEVSTkFMTFksIHtzZWxlY3RlZFByb2dyZXNzSWQ6IHRoaXMuc2VsZWN0ZWRQcm9ncmVzc0lkfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlbGVjdGVkUHJvZ3Jlc3NTdGF0dXMoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBwcm9ncmVzcyA9ICEhdGhpcy51c2VyTGVhcm5pbmdQYXRoUHJvZ3Jlc3NlcyA/IHRoaXMudXNlckxlYXJuaW5nUGF0aFByb2dyZXNzZXMuZmlsdGVyKHAgPT4gcC5pZCA9PT0gdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQpLnBvcCgpOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBwcm9ncmVzcyA/IHByb2dyZXNzLnN0YXR1cyA6IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlbGVjdGVkUHJvZ3Jlc3MoKTogSUNvdXJzZVByb2dyZXNzIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnVzZXJMZWFybmluZ1BhdGhQcm9ncmVzc2VzID8gdGhpcy51c2VyTGVhcm5pbmdQYXRoUHJvZ3Jlc3Nlcy5maWx0ZXIocCA9PiBwLmlkID09PSB0aGlzLnNlbGVjdGVkUHJvZ3Jlc3NJZCkucG9wKCkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWFjdGl2YXRlTGVhcm5pbmdQYXRoUHJvZ3Jlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgICAgICAgIFwiRG8geW91IHdhbnQgdG8gZGVhY3RpdmF0ZSB1c2VyIHByb2dyZXNzIG9uIHRoaXMgbGVhcm5pbmcgcGF0aD9cIiwge1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRGVhY3RpdmF0ZSB1c2VyIHByb2dyZXNzP1wiLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJZZXNcIixcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlLmRlYWN0aXZhdGVMZWFybmluZ1BhdGhQcm9ncmVzcyh0aGlzLmxlYXJuaW5nUGF0aC5pZCwgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS4kZW1pdChFdmVudC5MRUFSTklOR19QQVRIX1BST0dSRVNTX1JFU0VUX1BST0dSRVNTKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuY29tbW9uRXJyb3IocmVzcG9uc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VGaWx0ZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVHlwZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXRoID0gdGhpcy4kbG9jYXRpb24ucGF0aCgpLnNwbGl0KFwiP1wiKVswXTtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHBhdGgpO1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aFVzZXJzLmZvckVhY2goKHU6IElFeHRlbmRlZFNlbGVjdGFibGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyZXNzSWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyRnVsbE5hbWUgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVzZXJOYW1lU2VhcmNoU3RyaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVzZXJMb2dvblNlYXJjaFN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5nZXRVc2VycygpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoUHJvZ3Jlc3N9IGZyb20gXCIuL21vZGVscy9JTGVhcm5pbmdQYXRoUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtJQ291cnNlUHJvZ3Jlc3N9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9JQ291cnNlUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aENvdXJzZVByb2dyZXNzfSBmcm9tIFwiLi9tb2RlbHMvSUxlYXJuaW5nUGF0aENvdXJzZVByb2dyZXNzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibGVhcm5pbmdQYXRocy5MZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHNjZVwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjZTogYW5ndWxhci5JU0NFU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExlYXJuaW5nUGF0aFByb2dyZXNzKGxlYXJuaW5nUGF0aElkOiBudW1iZXIsIGxlYXJuaW5nUGF0aFByb2dyZXNzSWQ/OiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGhQcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9sZWFybmluZ1BhdGhzLzpsZWFybmluZ1BhdGhJZD9sZWFybmluZ1BhdGhQcm9ncmVzc0lkPTpsZWFybmluZ1BhdGhQcm9ncmVzc0lkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCBsZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aFByb2dyZXNzSWRcIiwgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NJZCB8fCBcIlwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25maXJtTGVhcm5pbmdQYXRoUHJvZ3Jlc3MobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9sZWFybmluZ1BhdGhzLzpsZWFybmluZ1BhdGhJZC9jb25maXJtXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCBsZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExlYXJuaW5nUGF0aFByb2dyZXNzRm9yVXNlcihsZWFybmluZ1BhdGhJZDogbnVtYmVyLCB1c2VySWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUxlYXJuaW5nUGF0aFByb2dyZXNzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL2xlYXJuaW5nUGF0aHMvOmxlYXJuaW5nUGF0aElkL3VzZXJzLzp1c2VySWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dXNlcklkXCIsIHVzZXJJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TGVhcm5pbmdQYXRoUHJvZ3Jlc3Nlc0ZvclVzZXIobGVhcm5pbmdQYXRoSWQ6IG51bWJlciwgdXNlcklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElMZWFybmluZ1BhdGhQcm9ncmVzcz4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvcHJvZ3Jlc3MvbGVhcm5pbmdQYXRocy86bGVhcm5pbmdQYXRoSWQvdXNlcnMvOnVzZXJJZC9hbGxcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dXNlcklkXCIsIHVzZXJJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlUHJvZ3Jlc3Nlc0ZvckxlYXJuaW5nUGF0aFByb2dyZXNzKGxlYXJuaW5nUGF0aElkOiBudW1iZXIsIGxlYXJuaW5nUGF0aFByb2dyZXNzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SUxlYXJuaW5nUGF0aENvdXJzZVByb2dyZXNzPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9sZWFybmluZ1BhdGhzLzpsZWFybmluZ1BhdGhJZC9jb3Vyc2VzP2xlYXJuaW5nUGF0aFByb2dyZXNzSWQ9OmxlYXJuaW5nUGF0aFByb2dyZXNzSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bGVhcm5pbmdQYXRoUHJvZ3Jlc3NJZFwiLCBsZWFybmluZ1BhdGhQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYXJ0aWNpcGF0aW9uRm9ybURhdGEobGVhcm5pbmdQYXRoSWQ6IG51bWJlciwgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NJZD86IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3Byb2dyZXNzL2xlYXJuaW5nUGF0aHMvOmxlYXJuaW5nUGF0aElkL3BhcnRpY2lwYXRpb25Gb3JtRGF0YT9sZWFybmluZ1BhdGhQcm9ncmVzc0lkPTpsZWFybmluZ1BhdGhQcm9ncmVzc0lkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCBsZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aFByb2dyZXNzSWRcIiwgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NJZCB8fCBcIlwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRQYXJ0aWNpcGF0aW9uRm9ybURhdGEobGVhcm5pbmdQYXRoSWQ6IG51bWJlciwgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NJZD86IG51bWJlciwgcGFydGljaXBhdGlvbkZvcm1EYXRhPzogYW55KTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvcHJvZ3Jlc3MvbGVhcm5pbmdQYXRocy86bGVhcm5pbmdQYXRoSWQvcGFydGljaXBhdGlvbkZvcm1EYXRhP2xlYXJuaW5nUGF0aFByb2dyZXNzSWQ9OmxlYXJuaW5nUGF0aFByb2dyZXNzSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bGVhcm5pbmdQYXRoUHJvZ3Jlc3NJZFwiLCBsZWFybmluZ1BhdGhQcm9ncmVzc0lkIHx8IFwiXCIpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHBhcnRpY2lwYXRpb25Gb3JtRGF0YSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TnVtYmVyT2ZVc2Vyc1dpdGhVbmNvbXBsZXRlZFByb2dyZXNzKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wcm9ncmVzcy9sZWFybmluZ1BhdGhzLzpsZWFybmluZ1BhdGhJZC9udW1iZXJPZlVuY29tcGxldGVkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCBsZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TGVhcm5pbmdQYXRoVXNlcnMobGVhcm5pbmdQYXRoSWQ6IG51bWJlciwgdXNlck5hbWVTZWFyY2hTdHJpbmc6IHN0cmluZywgdXNlckxvZ29uU2VhcmNoU3RyaW5nOiBzdHJpbmcsIG9ubHlBY3RpdmU/OiBib29sZWFuKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VsZWN0YWJsZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvbGVhcm5pbmdQYXRocy86bGVhcm5pbmdQYXRoSWQvdXNlcnM/dXNlck5hbWVTZWFyY2hTdHJpbmc9OnVzZXJOYW1lU2VhcmNoU3RyaW5nJnVzZXJMb2dvblNlYXJjaFN0cmluZz06dXNlckxvZ29uU2VhcmNoU3RyaW5nJm9ubHlBY3RpdmU9Om9ubHlBY3RpdmVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dXNlck5hbWVTZWFyY2hTdHJpbmdcIiwgdXNlck5hbWVTZWFyY2hTdHJpbmcgfHwgXCJcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnVzZXJMb2dvblNlYXJjaFN0cmluZ1wiLCB1c2VyTG9nb25TZWFyY2hTdHJpbmcgfHwgXCJcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9ubHlBY3RpdmVcIiwgb25seUFjdGl2ZSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVhY3RpdmF0ZUxlYXJuaW5nUGF0aFByb2dyZXNzKGxlYXJuaW5nUGF0aElkOiBudW1iZXIsIGxlYXJuaW5nUGF0aFByb2dyZXNzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoXHJcbiAgICAgICAgICAgIGAvYXBpL3Byb2dyZXNzL2xlYXJuaW5nUGF0aHMvJHtsZWFybmluZ1BhdGhJZH0vaW5hY3RpdmU/bGVhcm5pbmdQYXRoUHJvZ3Jlc3NJZD0ke2xlYXJuaW5nUGF0aFByb2dyZXNzSWR9YFxyXG4gICAgICAgICksIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtJTGVhcm5pbmdQYXRofSBmcm9tIFwiLi9tb2RlbHMvSUxlYXJuaW5nUGF0aFwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFNlcnZpY2V9IGZyb20gXCIuL0xlYXJuaW5nUGF0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMZWFybmluZ1BhdGhSZWxhdGVkUHJvZHVjdHNFZGl0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImNvdXJzZXMuTGVhcm5pbmdQYXRoUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGg6IElMZWFybmluZ1BhdGg7XHJcblxyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGlzTGVhcm5pbmdQYXRoTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBMZWFybmluZ1BhdGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsZWFybmluZ1BhdGhTZXJ2aWNlOiBMZWFybmluZ1BhdGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhJZCA9ICRyb3V0ZVBhcmFtc1tMZWFybmluZ1BhdGhzUm91dGVyLkxFQVJOSU5HX1BBVEhfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBoYXNMZWFybmluZ1BhdGhJZDogYm9vbGVhbiA9IHRoaXMubGVhcm5pbmdQYXRoSWQgIT0gbnVsbDtcclxuICAgICAgICBsZXQgbGVhcm5pbmdQYXRoSWRTdHI6IHN0cmluZyA9IFN0cmluZyh0aGlzLmxlYXJuaW5nUGF0aElkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kTGVhcm5pbmdQYXRoUGVybWlzc2lvbnNJZihoYXNMZWFybmluZ1BhdGhJZCwgbGVhcm5pbmdQYXRoSWRTdHIsIGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zID0+IGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zLmVkaXQpO1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkVEVUNBVElPTl9MRUFSTklOR19QQVRIU19NRU5VX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZExlYXJuaW5nUGF0aCh0aGlzLmxlYXJuaW5nUGF0aElkKS50aGVuKGxlYXJuaW5nUGF0aCA9PiB7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiRWRpdCBMZWFybmluZyBQYXRoIFwiICsgXCLigJhcIlxyXG4gICAgICAgICAgICAgICAgKyBsZWFybmluZ1BhdGgubmFtZSArIFwi4oCZXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRMZWFybmluZ1BhdGgobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUxlYXJuaW5nUGF0aD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aFNlcnZpY2UuZ2V0KGxlYXJuaW5nUGF0aElkKS50aGVuKGxlYXJuaW5nUGF0aCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoID0gYW5ndWxhci5jb3B5KGxlYXJuaW5nUGF0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Qcm9kdWN0c1NhdmVTdWNjZXNzOiAoKSA9PiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGg+ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRMZWFybmluZ1BhdGgodGhpcy5sZWFybmluZ1BhdGhJZCk7XHJcbiAgICB9O1xyXG59IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc1wiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhDb3Vyc2V9IGZyb20gXCIuL21vZGVscy9JTGVhcm5pbmdQYXRoQ291cnNlXCI7XHJcbmltcG9ydCB7SVVzZXJDZXJ0aWZpY2F0ZX0gZnJvbSBcIi4uL3BlcnNvbmFsL21vZGVscy9JVXNlckNlcnRpZmljYXRlXCI7XHJcbmltcG9ydCB7U2VjdXJlZE9iamVjdFR5cGV9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9TZWN1cmVkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge0lRdWl6QW5zd2VyUmVzdWx0fSBmcm9tIFwiLi4vcXVpenplcy9tb2RlbHMvSVF1aXpBbnN3ZXJSZXN1bHRcIjtcclxuXHJcbmludGVyZmFjZSBJTGVhcm5pbmdQYXRoQ291cnNlSW5wdXQge1xyXG4gICAgY291cnNlSWQ6IG51bWJlcjtcclxuICAgIHNlcXVlbmNlTnVtYmVyOiBudW1iZXI7XHJcbiAgICBpbmNsdXNpb25UeXBlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJRXh0TGVhcm5pbmdQYXRoIGV4dGVuZHMgSUxlYXJuaW5nUGF0aCB7XHJcbiAgICBwcmV2aWV3PzogYW55O1xyXG4gICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM/OiBBcnJheTxJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcz47XHJcbiAgICByZXNldFByZXZpZXc/OiBib29sZWFuO1xyXG4gICAgY291cnNlcz86IElMZWFybmluZ1BhdGhDb3Vyc2VJbnB1dFtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGVhcm5pbmdQYXRoU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImxlYXJuaW5nUGF0aHMuTGVhcm5pbmdQYXRoU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0KGlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGg+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvbGVhcm5pbmdQYXRocy86aWQ/XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBpZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKS5jYXRjaChyZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBsZWFybmluZyBwYXRoIGRldGFpbHMnXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExlYXJuaW5nUGF0aENvdXJzZXMoaWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUxlYXJuaW5nUGF0aENvdXJzZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2xlYXJuaW5nUGF0aHMvOmlkL2NvdXJzZXMvYWxsXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBpZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlKGxlYXJuaW5nUGF0aDogSUV4dExlYXJuaW5nUGF0aCwgcHJldmlldz86IEZpbGUsIGNvdXJzZXM/OiBJTGVhcm5pbmdQYXRoQ291cnNlW10pOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGg+IHtcclxuICAgICAgICBsZWFybmluZ1BhdGgucHJldmlldyA9IHByZXZpZXcgIT0gbnVsbFxyXG4gICAgICAgICAgICA/IHtuYW1lOiBwcmV2aWV3Lm5hbWUsIHR5cGU6IHByZXZpZXcudHlwZSwgc2l6ZTogcHJldmlldy5zaXplfVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgbGVhcm5pbmdQYXRoLmNvdXJzZXMgPSBjb3Vyc2VzICE9IG51bGxcclxuICAgICAgICAgICAgPyBMZWFybmluZ1BhdGhTZXJ2aWNlLmdldExlYXJuaW5nUGF0aENvdXJzZUlucHV0cyhjb3Vyc2VzKVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9sZWFybmluZ1BhdGhzXCIpLCBsZWFybmluZ1BhdGgpLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGxlYXJuaW5nUGF0aDogSUV4dExlYXJuaW5nUGF0aCwgaXNSZXNldFByZXZpZXc6IGJvb2xlYW4sIHByZXZpZXc/OiBGaWxlLCBjb3Vyc2VzPzogSUxlYXJuaW5nUGF0aENvdXJzZVtdKTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoPiB7XHJcbiAgICAgICAgbGVhcm5pbmdQYXRoLnByZXZpZXcgPSBwcmV2aWV3ICE9IG51bGxcclxuICAgICAgICAgICAgPyB7bmFtZTogcHJldmlldy5uYW1lLCB0eXBlOiBwcmV2aWV3LnR5cGUsIHNpemU6IHByZXZpZXcuc2l6ZX1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIGxlYXJuaW5nUGF0aC5yZXNldFByZXZpZXcgPSBpc1Jlc2V0UHJldmlldztcclxuICAgICAgICBsZWFybmluZ1BhdGguY291cnNlcyA9IGNvdXJzZXMgIT0gbnVsbFxyXG4gICAgICAgICAgICA/IExlYXJuaW5nUGF0aFNlcnZpY2UuZ2V0TGVhcm5pbmdQYXRoQ291cnNlSW5wdXRzKGNvdXJzZXMpXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvbGVhcm5pbmdQYXRoc1wiKSwgbGVhcm5pbmdQYXRoKS50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUxlYXJuaW5nUGF0aFBlcm1pc3Npb25zKGxlYXJuaW5nUGF0aElkOiBudW1iZXIsIHZlcnNpb246IG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwczogQXJyYXk8SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHM+KTogYW5ndWxhci5JUHJvbWlzZTxJTGVhcm5pbmdQYXRoPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9sZWFybmluZ1BhdGhzLzpsZWFybmluZ1BhdGhJZC9wZXJtaXNzaW9uc1wiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGxlYXJuaW5nUGF0aElkLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogdmVyc2lvbixcclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzOiBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3Vwc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKS50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YVtcImxlYXJuaW5nUGF0aFwiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVZpZXdBbmRTdGFydExlYXJuaW5nUGF0aFBlcm1pc3Npb25zKGxlYXJuaW5nUGF0aElkOiBudW1iZXIsIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzOiBBcnJheTxJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcz4pOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGg+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL2xlYXJuaW5nUGF0aHMvOmxlYXJuaW5nUGF0aElkL3VwZGF0ZVZpZXdBbmRTdGFydFBlcm1pc3Npb25zXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6bGVhcm5pbmdQYXRoSWRcIiwgbGVhcm5pbmdQYXRoSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3Vwc1xyXG4gICAgICAgICkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGFbXCJsZWFybmluZ1BhdGhcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGdldExlYXJuaW5nUGF0aENvdXJzZUlucHV0cyhjb3Vyc2VzOiBJTGVhcm5pbmdQYXRoQ291cnNlW10pOiBJTGVhcm5pbmdQYXRoQ291cnNlSW5wdXRbXSB7XHJcbiAgICAgICAgbGV0IGNvdXJzZUlucHV0czogSUxlYXJuaW5nUGF0aENvdXJzZUlucHV0W10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdXJzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY291cnNlSW5wdXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgY291cnNlSWQ6IGNvdXJzZXNbaV0uaWQsXHJcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZU51bWJlcjogaSArIDEsXHJcbiAgICAgICAgICAgICAgICBpbmNsdXNpb25UeXBlOiBjb3Vyc2VzW2ldLmNvdXJzZUluY2x1c2lvblR5cGUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY291cnNlSW5wdXRzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWFjdGl2YXRlTGVhcm5pbmdQYXRoKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmRlbGV0ZShcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvbGVhcm5pbmdQYXRocy86bGVhcm5pbmdQYXRoSWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCBsZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlckNlcnRpZmljYXRlcyhsZWFybmluZ1BhdGhJZDogbnVtYmVyLCBsZWFybmluZ1BhdGhQcm9ncmVzc0lkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElVc2VyQ2VydGlmaWNhdGU+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL2xlYXJuaW5nUGF0aHMvOmxlYXJuaW5nUGF0aElkL3Byb2dyZXNzLzpsZWFybmluZ1BhdGhQcm9ncmVzc0lkL3VzZXJDZXJ0aWZpY2F0ZXNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bGVhcm5pbmdQYXRoUHJvZ3Jlc3NJZFwiLCBsZWFybmluZ1BhdGhQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVVc2VyQ2VydGlmaWNhdGVzKGxlYXJuaW5nUGF0aElkOiBudW1iZXIsIGxlYXJuaW5nUGF0aFByb2dyZXNzSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5kZWxldGUodGhpcy51cmwuYmFzZShcIi9hcGkvbGVhcm5pbmdQYXRocy86bGVhcm5pbmdQYXRoSWQvcHJvZ3Jlc3MvOmxlYXJuaW5nUGF0aFByb2dyZXNzSWQvdXNlckNlcnRpZmljYXRlc1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bGVhcm5pbmdQYXRoSWRcIiwgbGVhcm5pbmdQYXRoSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhQcm9ncmVzc0lkXCIsIGxlYXJuaW5nUGF0aFByb2dyZXNzSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvd25sb2FkQ2VydGlmaWNhdGUocGFyYW1ldGVyczogYW55KTogbmcuSVByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgbGV0IHJlcG9ydFR5cGUgPSAnTEVBUk5JTkdfUEFUSF9DRVJUSUZJQ0FURSc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9kb3dubG9hZFRva2VuLzpyZXBvcnRUeXBlXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6cmVwb3J0VHlwZVwiLCByZXBvcnRUeXBlKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSwge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczogSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkudGhlbigocmVzdWx0OiBhbnkpID0+IHRoaXMudXJsLmJhc2UoXCIvYXBpL3JlcG9ydHMvZG93bmxvYWQvOnRva2VuXCIpLnBhcmFtKFwiOnRva2VuXCIsIHJlc3VsdC5kYXRhLnRva2VuKS5zZXJ2aWNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlQ2VydGlmaWNhdGVGb3JVc2VyKHBhcmFtZXRlcnM6IGFueSk6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3JlcG9ydHMvY2VydGlmaWNhdGUvc2F2ZVwiKSwge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczogSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycyksXHJcbiAgICAgICAgICAgICAgICBzZWN1cmVkT2JqZWN0VHlwZTogU2VjdXJlZE9iamVjdFR5cGUuTEVBUk5JTkdfUEFUSC5uYW1lLnRvVXBwZXJDYXNlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNeUxlYXJuaW5nUGF0aHNCeUlkcyhsZWFybmluZ1BhdGhJZHM6IEFycmF5PG51bWJlcj4pOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElMZWFybmluZ1BhdGg+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2xlYXJuaW5nUGF0aHMvbXlcIiksIHtwYXJhbXM6IHtsZWFybmluZ1BhdGhJZHM6IGxlYXJuaW5nUGF0aElkc319KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbnN0cnVjdG9yTGVhcm5pbmdQYXRoc0NvdW50KCk6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2xlYXJuaW5nUGF0aHMvaW5zdHJ1Y3Rvci9jb3VudFwiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QXR0ZW5kZWVNYW5hZ2VyTGVhcm5pbmdQYXRoc0NvdW50KCk6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2xlYXJuaW5nUGF0aHMvYXR0ZW5kZWVNYW5hZ2VyL2NvdW50XCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0V4aXN0UGFydGljaXBhbnRzSW5mbyhyb2xlOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvbGVhcm5pbmdQYXRocy9zZWFyY2gvZXhpc3QvcGFydGljaXBhbnRzL2luZm8/cm9sZT06cm9sZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cm9sZVwiLCByb2xlKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gPGJvb2xlYW4+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlUGVybWlzc2lvbkFzc2lnbm1lbnRzKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL2xlYXJuaW5nUGF0aHMvcmVtb3ZlUGVybWlzc2lvbkFzc2lnbm1lbnRzLyR7bGVhcm5pbmdQYXRoSWR9YCksIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRHYW1lTGVhcm5pbmdPYmplY3RzQmFkZ2VJZHMobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8bnVtYmVyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9sZWFybmluZ1BhdGhzLzpsZWFybmluZ1BhdGhJZC9hY3Rpb25QYWdlL2JhZGdlSWRzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpXHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4vbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoUmVkaXJlY3RcIjtcclxuaW1wb3J0IHtDb3Vyc2VQcm9ncmVzc1N0YXR1c30gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0NvdXJzZVByb2dyZXNzU3RhdHVzXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aENvdXJzZX0gZnJvbSBcIi4vbW9kZWxzL0lMZWFybmluZ1BhdGhDb3Vyc2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlfSBmcm9tIFwiLi9tb2RlbHMvTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZVwiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge0NvbW1vbkhvbWVTZXJ2aWNlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vbkhvbWVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZX0gZnJvbSBcIi4vTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcbmV4cG9ydCBjbGFzcyBMZWFybmluZ1BhdGhzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImxlYXJuaW5nUGF0aHMuTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwcml2YXRlIERFRkFVTFRfVE9QX01FTlVfSVRFTTogc3RyaW5nID0gJ2xlYXJuaW5nUGF0aCc7XHJcblxyXG4gICAgcHVibGljIHB1cmNoYXNlZE9yZGVySWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBtZW51S2V5OiBhbnk7XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElMZWFybmluZ1BhdGg+O1xyXG5cclxuICAgIHB1YmxpYyB3aW5kb3c6IGFueTtcclxuICAgIHB1YmxpYyBzdGFydFdpbmRvd1dpZHRoOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgb2xkU2VhcmNoVmlld1R5cGU6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgbm90U3RhcnRlZFN0YXR1czogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaW5Qcm9ncmVzc1N0YXR1czogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgY29tcGxldGVkU3RhdHVzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwdWJsaWMgY291bnRBY3RpdmVGaWx0ZXIgPSAwO1xyXG4gICAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBpc1Nob3dBbGxDYXJkczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc0xlYXJuaW5nUGF0aHNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RvcmFnZUZpbHRlclZhbHVlczogYW55O1xyXG5cclxuICAgIHB1YmxpYyB0b3BTdGF0dXMgPSAnQUxMJztcclxuICAgIHByaXZhdGUgaXNJbml0U2xpY2sgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGlzSW5pdGlhbGl6ZWRTbGljayA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBpc0NvbmZpcm1lZExlYXJuaW5nUGF0aHM6IG51bWJlcltdID0gW107XHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlQ29uZmlybVByb2dyZXNzQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHNob3dFeHBpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc1VybDogc3RyaW5nID0gXCIvYXBpL2xlYXJuaW5nUGF0aHMvc2VhcmNoXCI7XHJcbiAgICBwdWJsaWMgaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2U7XHJcblxyXG4gICAgcHVibGljIHVzZXJQcm9maWxlOiBJVXNlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvbW1vbkhvbWVTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uRmlsdGVyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc0FwaTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBob21lQ29tbW9uU2VydmljZTogQ29tbW9uSG9tZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY29tbW9uRmlsdGVyU2VydmljZTogQ29tbW9uRmlsdGVyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlOiBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMucHVyY2hhc2VkT3JkZXJJZCA9IHBhcnNlSW50KCRsb2NhdGlvbi5zZWFyY2goKVtDb3Vyc2VzUm91dGVyLlBVUkNIQVNFRF9PUkRFUl0pIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMubWVudUtleSA9IHtcclxuICAgICAgICAgICAgdG9wTWVudTogdGhpcy5ERUZBVUxUX1RPUF9NRU5VX0lURU1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuXHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5FRFVDQVRJT05fTEVBUk5JTkdfUEFUSFNfTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTGVhcm5pbmcgUGF0aHNcIikudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gIGVsc2Uge1xyXG4gICAgICAgICAgICBpZigkbG9jYXRpb24uc2VhcmNoKClbQ291cnNlc1JvdXRlci5MT0dPTl9SRVFVSVJFRF0pIHtcclxuICAgICAgICAgICAgICAgIGF1dGhSZWRpcmVjdC5yZWRpcmVjdFRvTG9nT24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmh0dHAgPSAkaHR0cDtcclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1c2VyO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy51c2VyUHJvZmlsZSA/XHJcbiAgICAgICAgICAgICAgICBOdW1iZXIodGhpcy51c2VyUHJvZmlsZS5wYWdlVmlld01vZGUpIDogMTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFN0b3JhZ2VGaWx0ZXJzKGlzSW5pdD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VGaWx0ZXJWYWx1ZXMgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0RmlsdGVyVmFsdWVzKExlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlTdG9yYWdlRmlsdGVyKHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyxcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRTZWFyY2hJbnB1dChMZWFybmluZ1BhdGhzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICBpZih0aGlzLnNlYXJjaElucHV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5vcGVuU2VhcmNoSW5wdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHRvcFN0YXR1cyA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRUb3BTdGF0dXMoTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgaWYodG9wU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9wU3RhdHVzID0gdG9wU3RhdHVzXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUb3BTdGF0dXModG9wU3RhdHVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaXNJbml0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0TG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLmlzSW5pdFNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aHNMb2FkZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kTG9hZGluZygpIHtcclxuICAgICAgICB0aGlzLmlzTGVhcm5pbmdQYXRoc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGljaygpLCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkocGFyYW06IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBlbGVtID0gYW5ndWxhci5lbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpKTtcclxuICAgICAgICBpZiAocGFyYW0gPT0gXCJkZXN0cm95XCIpIHtcclxuICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbS5oYXNDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIikpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoXCJ2aHMtcGFnZS1oZWFkZXItaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHZpZXdUeXBlID09IDEpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGljaygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVXNlclBhZ2VWaWV3TW9kZShCb29sZWFuKHZpZXdUeXBlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVVc2VyUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRMZWFybmluZ1BhdGgobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuZGV0YWlsc1VybChsZWFybmluZ1BhdGhJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlKGNvdXJzZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmRldGFpbHNVcmwoY291cnNlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3ViamVjdEFuZE5hbWUobGVhcm5pbmdQYXRoOiBJTGVhcm5pbmdQYXRoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gbGVhcm5pbmdQYXRoLnN1YmplY3ROYW1lICE9IG51bGwgJiYgbGVhcm5pbmdQYXRoLm5hbWUgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gbGVhcm5pbmdQYXRoLnN1YmplY3ROYW1lICsgXCIgLyBcIiArIGxlYXJuaW5nUGF0aC5uYW1lXHJcbiAgICAgICAgICAgIDogbGVhcm5pbmdQYXRoLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaExlYXJuaW5nUGF0aCgpIHtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRmlsdGVyQ2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLlwiICsga2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuXCIgKyBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0ZpbHRlckRpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2hvd0ZpbHRlckRpYWxvZyh3aW5kb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVUb3BTdGF0dXMoc3RhdHVzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2F2ZVRvcFN0YXR1cyhMZWFybmluZ1BhdGhzQ29udHJvbGxlci5OQU1FLCBzdGF0dXMpO1xyXG4gICAgICAgIHRoaXMudG9wU3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgIHRoaXMuYXBwbHlUb3BTdGF0dXMoc3RhdHVzKTtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5VG9wU3RhdHVzKHN0YXR1czogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSAnQUxMJzpcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzID0gXCJOT1RfU1RBUlRFRCxTVEFSVEVELENPTVBMRVRFRFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RTdGFydGVkU3RhdHVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5Qcm9ncmVzc1N0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZFN0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnTk9UX1NUQVJURUQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5sZWFybmluZ1BhdGhTdGF0dXMgPSBcIk5PVF9TVEFSVEVEXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdFN0YXJ0ZWRTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pblByb2dyZXNzU3RhdHVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZFN0YXR1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1NUQVJURUQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5sZWFybmluZ1BhdGhTdGF0dXMgPSBcIlNUQVJURURcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90U3RhcnRlZFN0YXR1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pblByb2dyZXNzU3RhdHVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVkU3RhdHVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQ09NUExFVEVEJzpcclxuICAgICAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzID0gXCJDT01QTEVURURcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90U3RhcnRlZFN0YXR1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pblByb2dyZXNzU3RhdHVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZFN0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFjdGl2ZVN0YXR1c05hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ05PVF9TVEFSVEVELFNUQVJURUQsQ09NUExFVEVEJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIkFsbFwiO1xyXG4gICAgICAgICAgICBjYXNlICdOT1RfU1RBUlRFRCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOZXdcIjtcclxuICAgICAgICAgICAgY2FzZSAnU1RBUlRFRCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJJbi1Qcm9ncmVzc1wiO1xyXG4gICAgICAgICAgICBjYXNlICdDT01QTEVURUQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiQ29tcGxldGVkXCI7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0FsbCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVGaWx0ZXIodHlwZTogc3RyaW5nLCByZWZlcmVuY2VPYmplY3Q6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvdW50QWN0aXZlSW5jcmVtZW50ID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnVwZGF0ZUdlbmVyYWxGaWx0ZXIodHlwZSwgcmVmZXJlbmNlT2JqZWN0LCBMZWFybmluZ1BhdGhzQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyICs9IGNvdW50QWN0aXZlSW5jcmVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgICAgICB0aGlzLnNob3dFeHBpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsZWFyRmlsdGVyKExlYXJuaW5nUGF0aHNDb250cm9sbGVyLk5BTUUsIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEtleVByZXNzKCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlU2VhcmNoSW5wdXQoTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSwgdGhpcy5zZWFyY2hJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGNsb3NlU2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsb3NlU2VhcmNoSW5wdXQoTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSwgd2luZG93KTtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoSW5wdXQgfHwgdGhpcy5zZWFyY2hJbnB1dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhclNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zdWJqZWN0SWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGFuZ3VhZ2VJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zb3VyY2VJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zaG93RXhwaXJlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnVzZXJQcm9maWxlID9cclxuICAgICAgICAgICAgTnVtYmVyKHRoaXMudXNlclByb2ZpbGUucGFnZVZpZXdNb2RlKSA6IDE7XHJcblxyXG4gICAgICAgIHRoaXMubm90U3RhcnRlZFN0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pblByb2dyZXNzU3RhdHVzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlZFN0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5sZWFybmluZ1BhdGhTdGF0dXMgPSB0aGlzLmdldENvdXJzZVN0YXR1c0xpc3QoKTtcclxuXHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnZpZXdUeXBlXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnN1YmplY3RJZFwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5sYW5ndWFnZUlkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnNvdXJjZUlkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLmxlYXJuaW5nUGF0aFN0YXR1c1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkU2VhcmNoKCkge1xyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zZWFyY2hTdHJpbmdcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci52aWV3VHlwZVwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIudmlld1R5cGVcIikpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnN1YmplY3RJZFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnN1YmplY3RJZCA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnN1YmplY3RJZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5sYW5ndWFnZUlkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGFuZ3VhZ2VJZCA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLmxhbmd1YWdlSWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0xlYXJuaW5nUGF0aHNGaWx0ZXIuc291cmNlSWRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zb3VyY2VJZCA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLnNvdXJjZUlkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLmxlYXJuaW5nUGF0aFN0YXR1c1wiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb3Vyc2VTdGF0dXNTZXNzaW9uTGlzdDogc3RyaW5nW10gPSBzZXNzaW9uU3RvcmFnZVxyXG4gICAgICAgICAgICAgICAgLmdldEl0ZW0oXCJ2aHNMZWFybmluZ1BhdGhzRmlsdGVyLmxlYXJuaW5nUGF0aFN0YXR1c1wiKS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzID0gY291cnNlU3RhdHVzU2Vzc2lvbkxpc3Q7XHJcbiAgICAgICAgICAgIHRoaXMubm90U3RhcnRlZFN0YXR1cyA9IGNvdXJzZVN0YXR1c1Nlc3Npb25MaXN0LmluZGV4T2YoJ05PVF9TVEFSVEVEJykgPj0gMDtcclxuICAgICAgICAgICAgdGhpcy5pblByb2dyZXNzU3RhdHVzID0gY291cnNlU3RhdHVzU2Vzc2lvbkxpc3QuaW5kZXhPZignU1RBUlRFRCcpID49IDA7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVkU3RhdHVzID0gY291cnNlU3RhdHVzU2Vzc2lvbkxpc3QuaW5kZXhPZignQ09NUExFVEVEJykgPj0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLmxlYXJuaW5nUGF0aFN0YXR1cyA9IHRoaXMuZ2V0Q291cnNlU3RhdHVzTGlzdCgpO1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5sZWFybmluZ1BhdGhTdGF0dXNcIiwgXCJOT1RfU1RBUlRFRCxTVEFSVEVELENPTVBMRVRFRFwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnNob3dFeHBpcmVkID0gdGhpcy5zaG93RXhwaXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Q291cnNlU3RhdHVzRmlsdGVyKGlzSW5pdD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBsZXQgc3RhdHVzTGlzdCA9IHRoaXMuZ2V0Q291cnNlU3RhdHVzTGlzdCgpO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIubGVhcm5pbmdQYXRoU3RhdHVzID0gc3RhdHVzTGlzdDtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwidmhzTGVhcm5pbmdQYXRoc0ZpbHRlci5sZWFybmluZ1BhdGhTdGF0dXNcIiwgc3RhdHVzTGlzdC5qb2luKFwiLFwiKSk7XHJcbiAgICAgICAgaWYgKCFpc0luaXQpIHtcclxuICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENvdXJzZVN0YXR1c0xpc3QoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGxldCBzdGF0dXNMaXN0ID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMubm90U3RhcnRlZFN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBzdGF0dXNMaXN0LnB1c2goJ05PVF9TVEFSVEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmluUHJvZ3Jlc3NTdGF0dXMgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgc3RhdHVzTGlzdC5wdXNoKCdTVEFSVEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBsZXRlZFN0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBzdGF0dXNMaXN0LnB1c2goJ0NPTVBMRVRFRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RhdHVzTGlzdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0b2RvOiByZXBsYWNlIHRvIGNvbW1vbiBzZXJ2aWNlXHJcbiAgICBwdWJsaWMgZ2V0Q29tcGxldGVkTWFuZGF0b3J5Q291cnNlcyhjb3Vyc2VzQnlMUDogSUxlYXJuaW5nUGF0aENvdXJzZVtdKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgY291bnRDb21wbGV0ZWRDb3Vyc2VzID0gMDtcclxuICAgICAgICBsZXQgY291bnRNYW5kYXRvcnlDb3Vyc2VzID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjb3Vyc2Ugb2YgY291cnNlc0J5TFApIHtcclxuICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VJbmNsdXNpb25UeXBlID09PSBMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlW0xlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGUuTUFOREFUT1JZXSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VQcm9ncmVzc1N0YXR1cyA9PSBDb3Vyc2VQcm9ncmVzc1N0YXR1c1tDb3Vyc2VQcm9ncmVzc1N0YXR1cy5SRVNFVF1cclxuICAgICAgICAgICAgICAgICAgICB8fCBjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuRVhQSVJFRF1cclxuICAgICAgICAgICAgICAgICAgICB8fCBjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuQ09NUExFVEVEXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50Q29tcGxldGVkQ291cnNlcysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY291bnRNYW5kYXRvcnlDb3Vyc2VzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvdW50Q29tcGxldGVkQ291cnNlcyArICcgb2YgJyArIGNvdW50TWFuZGF0b3J5Q291cnNlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcGxldGVkRWxlY3RpdmVDb3Vyc2VzKGNvdXJzZXNCeUxQOiBJTGVhcm5pbmdQYXRoQ291cnNlW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjb3VudENvbXBsZXRlZENvdXJzZXMgPSAwO1xyXG4gICAgICAgIGxldCBjb3VudE1hbmRhdG9yeUNvdXJzZXMgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNvdXJzZSBvZiBjb3Vyc2VzQnlMUCkge1xyXG4gICAgICAgICAgICBpZiAoY291cnNlLmNvdXJzZUluY2x1c2lvblR5cGUgPT09IExlYXJuaW5nUGF0aENvdXJzZUluY2x1c2lvblR5cGVbTGVhcm5pbmdQYXRoQ291cnNlSW5jbHVzaW9uVHlwZS5FTEVDVElWRV0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb3Vyc2UuY291cnNlUHJvZ3Jlc3NTdGF0dXMgPT0gQ291cnNlUHJvZ3Jlc3NTdGF0dXNbQ291cnNlUHJvZ3Jlc3NTdGF0dXMuUkVTRVRdXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzID09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLkVYUElSRURdXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgY291cnNlLmNvdXJzZVByb2dyZXNzU3RhdHVzID09IENvdXJzZVByb2dyZXNzU3RhdHVzW0NvdXJzZVByb2dyZXNzU3RhdHVzLkNPTVBMRVRFRF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3VudENvbXBsZXRlZENvdXJzZXMrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvdW50TWFuZGF0b3J5Q291cnNlcysrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3VudENvbXBsZXRlZENvdXJzZXMgKyAnIG9mICcgKyBjb3VudE1hbmRhdG9yeUNvdXJzZXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIHNsaWNrIGxwXHJcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZVNsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNJbml0U2xpY2sgPSB0aGlzLmhvbWVDb21tb25TZXJ2aWNlLmluaXRpYWxpemVTbGljayh0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0FsbExQKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzU2hvd0FsbENhcmRzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmhvbWVDb21tb25TZXJ2aWNlLnNob3dBbGxMUChsZWFybmluZ1BhdGhJZCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKT0+dGhpcy5zZXRQb3B1cENsYXNzZXMoKSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGlkZUFsbExQKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzU2hvd0FsbENhcmRzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ob21lQ29tbW9uU2VydmljZS5oaWRlQWxsTFAobGVhcm5pbmdQYXRoSWQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PnRoaXMuc2V0UG9wdXBDbGFzc2VzKCksIDUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5DYXJkKGluZGV4UGxhbkxwOiBudW1iZXIsIGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhvbWVDb21tb25TZXJ2aWNlLm9wZW5DYXJkKGluZGV4UGxhbkxwLCBsZWFybmluZ1BhdGhJZCwgdGhpcy5pc1Nob3dBbGxDYXJkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZURhdGVzU3RyaW5nKGNvdXJzZTogSUNvdXJzZSk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIGxldCBjb3Vyc2VEYXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgICAgICAgaWYgKGNvdXJzZS5lbmREYXRlKSB7XHJcbiAgICAgICAgICAgIGNvdXJzZURhdGVzLnNldChcImVuZERhdGVcIiwgbmV3IERhdGUoY291cnNlLmVuZERhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY291cnNlLmVuZERhdGUgfHwgY291cnNlLnN0YXJ0RGF0ZSA+IERhdGUubm93KCkpIHtcclxuICAgICAgICAgICAgY291cnNlRGF0ZXMuc2V0KFwic3RhcnREYXRlXCIsIG5ldyBEYXRlKGNvdXJzZS5zdGFydERhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvdXJzZURhdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRQb3B1cENsYXNzZXMoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGNhcmRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxwX19wbGFuLWNhcmQgaW5mb3JtYXRpb25fdG9vbHRpcFwiKSk7XHJcbiAgICAgICAgZm9yIChsZXQgY2FyZCBvZiBjYXJkcykge1xyXG4gICAgICAgICAgICBsZXQgcmVjOiBDbGllbnRSZWN0ID0gY2FyZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgbGV0IHBvcHVwOiBFbGVtZW50ID0gY2FyZC5wYXJlbnRFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJwb3B1cF9vbmhvdmVyXCIpLml0ZW0oMCk7XHJcbiAgICAgICAgICAgIGlmIChwb3B1cC5jbGllbnRXaWR0aCA+PSB3aW5kb3cuaW5uZXJXaWR0aCAtIGNhcmQuY2xpZW50V2lkdGggLSByZWMubGVmdCkge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIGxlZnRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJpZ2h0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInBvcHVwX29uaG92ZXIgcmlnaHRcIik7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlcIikuaXRlbSgwKS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImxlZnQtcG9pbnRlclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBjb25maXJtUHJvZ3Jlc3MobGVhcm5pbmdQYXRoSWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZUNvbmZpcm1Qcm9ncmVzc0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UuY29uZmlybUxlYXJuaW5nUGF0aFByb2dyZXNzKGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTGVhcm5pbmcgUGF0aCBwcm9ncmVzcyBoYXMgYmVlbiByZWNhbGN1bGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ29uZmlybWVkTGVhcm5pbmdQYXRocy5wdXNoKGxlYXJuaW5nUGF0aElkKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVDb25maXJtUHJvZ3Jlc3NCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVHcmlkKCkge1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc1VybCA9IHRoaXMucHVyY2hhc2VkT3JkZXJJZCAhPSBudWxsXHJcbiAgICAgICAgICAgICAgICA/IFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaC9wdXJjaGFzZWQ/cHVyY2hhc2VkT3JkZXI9XCIgKyB0aGlzLnB1cmNoYXNlZE9yZGVySWRcclxuICAgICAgICAgICAgICAgIDogXCIvYXBpL2xlYXJuaW5nUGF0aHMvc2VhcmNoXCI7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUxlYXJuaW5nUGF0aD4odGhpcy5odHRwLCB0aGlzLnVybC5zZXJ2aWNlKHRoaXMubGVhcm5pbmdQYXRoc1VybCkpKTtcclxuICAgICAgICB0aGlzLmdldFN0b3JhZ2VGaWx0ZXJzKHRydWUpO1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDQ7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuICAgICAgICB0aGlzLnNldENvdXJzZVN0YXR1c0ZpbHRlcih0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbGRTZWFyY2hWaWV3VHlwZSA9IHRoaXMudmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy53aW5kb3cgPSBhbmd1bGFyLmVsZW1lbnQodGhpcy4kd2luZG93KTtcclxuICAgICAgICBpZiAodGhpcy53aW5kb3cuaW5uZXJXaWR0aCA8IDk5Mikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V2luZG93V2lkdGggPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRXaW5kb3dXaWR0aCA9IDEwMDAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA5OTIgJiYgd2luZG93LmlubmVyV2lkdGggPCB0aGlzLnN0YXJ0V2luZG93V2lkdGggJiYgIXRoaXMudmlld1R5cGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2xkU2VhcmNoVmlld1R5cGUgPSB0aGlzLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFdpbmRvd1dpZHRoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+PSA5OTIgJiYgd2luZG93LmlubmVyV2lkdGggPiB0aGlzLnN0YXJ0V2luZG93V2lkdGggJiYgIXRoaXMub2xkU2VhcmNoVmlld1R5cGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLm9sZFNlYXJjaFZpZXdUeXBlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFdpbmRvd1dpZHRoID0gMTAwMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcIlwiKTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJkZXN0cm95XCIpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICB0aGlzLmxvYWRTZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2hvcnRTdW1tYXJ5KG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmcgIT0gdW5kZWZpbmVkICYmIG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA+IDI1NlxyXG4gICAgICAgICAgICA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cmluZygwLCAyNTYpICsgJy4uLidcclxuICAgICAgICAgICAgOiBvcmlnaW5hbFN0cmluZztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1VybHNNb2R1bGV9IGZyb20gXCIuLi91cmxzL1VybHNNb2R1bGVcIjtcclxuaW1wb3J0IHtBdXRoQ29yZU1vZHVsZX0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhDb3JlTW9kdWxlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlNb2R1bGV9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eU1vZHVsZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNDb250cm9sbGVyfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aENyZWF0ZUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhDcmVhdGVFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aERldGFpbHNDb250cm9sbGVyfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhEZXRhaWxzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFNlcnZpY2V9IGZyb20gXCIuL0xlYXJuaW5nUGF0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzTW9kdWxlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VzTW9kdWxlXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoUHJvZ3Jlc3NTZXJ2aWNlfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uRm9ybUVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uRm9ybUVkaXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkZvcm1GaWxsQ29udHJvbGxlcn0gZnJvbSBcIi4vTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkZvcm1GaWxsQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFBlcm1pc3Npb25zRGVsZWdhdGlvbkNvbnRyb2xsZXJ9IGZyb20gXCIuL0xlYXJuaW5nUGF0aFBlcm1pc3Npb25zRGVsZWdhdGlvbkNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhQcm9ncmVzc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0xlYXJuaW5nUGF0aFByb2dyZXNzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFJlbGF0ZWRQcm9kdWN0c0VkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9MZWFybmluZ1BhdGhSZWxhdGVkUHJvZHVjdHNFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aFBlcm1pc3Npb25zRWRpdENvbnRyb2xsZXJ9IGZyb20gXCIuL0xlYXJuaW5nUGF0aFBlcm1pc3Npb25zRWRpdENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtHYW1pZmljYXRpb25Nb2R1bGV9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vR2FtaWZpY2F0aW9uTW9kdWxlXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoR2FtaWZpY2F0aW9uRGV0YWlsc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0xlYXJuaW5nUGF0aEdhbWlmaWNhdGlvbkRldGFpbHNDb250cm9sbGVyXCI7XHJcblxyXG5leHBvcnQgdmFyIExlYXJuaW5nUGF0aHNNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJsZWFybmluZ1BhdGhzXCIsIFtcclxuICAgICAgICBTZWN1cml0eU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIEF1dGhDb3JlTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgVXJsc01vZHVsZS5uYW1lLFxyXG4gICAgICAgIENvdXJzZXNNb2R1bGUubmFtZSxcclxuICAgICAgICBHYW1pZmljYXRpb25Nb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKExlYXJuaW5nUGF0aFNlcnZpY2UuTkFNRSwgTGVhcm5pbmdQYXRoU2VydmljZSlcclxuICAgIC5zZXJ2aWNlKExlYXJuaW5nUGF0aFByb2dyZXNzU2VydmljZS5OQU1FLCBMZWFybmluZ1BhdGhQcm9ncmVzc1NlcnZpY2UpXHJcbiAgICAuY29udHJvbGxlcihMZWFybmluZ1BhdGhzQ29udHJvbGxlci5OQU1FLCBMZWFybmluZ1BhdGhzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKExlYXJuaW5nUGF0aENyZWF0ZUVkaXRDb250cm9sbGVyLk5BTUUsIExlYXJuaW5nUGF0aENyZWF0ZUVkaXRDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoTGVhcm5pbmdQYXRoRGV0YWlsc0NvbnRyb2xsZXIuTkFNRSwgTGVhcm5pbmdQYXRoRGV0YWlsc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihMZWFybmluZ1BhdGhQcm9ncmVzc0NvbnRyb2xsZXIuTkFNRSwgTGVhcm5pbmdQYXRoUHJvZ3Jlc3NDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkZvcm1FZGl0Q29udHJvbGxlci5OQU1FLCBMZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uRm9ybUVkaXRDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoTGVhcm5pbmdQYXRoUGFydGljaXBhdGlvbkZvcm1GaWxsQ29udHJvbGxlci5OQU1FLCBMZWFybmluZ1BhdGhQYXJ0aWNpcGF0aW9uRm9ybUZpbGxDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoTGVhcm5pbmdQYXRoUGVybWlzc2lvbnNEZWxlZ2F0aW9uQ29udHJvbGxlci5OQU1FLCBMZWFybmluZ1BhdGhQZXJtaXNzaW9uc0RlbGVnYXRpb25Db250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoTGVhcm5pbmdQYXRoUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXIuTkFNRSwgTGVhcm5pbmdQYXRoUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihMZWFybmluZ1BhdGhQZXJtaXNzaW9uc0VkaXRDb250cm9sbGVyLk5BTUUsIExlYXJuaW5nUGF0aFBlcm1pc3Npb25zRWRpdENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihMZWFybmluZ1BhdGhHYW1pZmljYXRpb25EZXRhaWxzQ29udHJvbGxlci5OQU1FLCBMZWFybmluZ1BhdGhHYW1pZmljYXRpb25EZXRhaWxzQ29udHJvbGxlcik7IiwiZXhwb3J0IGVudW0gQ291cnNlQ29tcGxldGlvbk9yZGVyIHtcclxuICAgIFNFUVVFTlRJQUwsXHJcbiAgICBGUkVFXHJcbn0iLCJleHBvcnQgZW51bSBMZWFybmluZ1BhdGhDb3Vyc2VJbmNsdXNpb25UeXBlIHtcclxuICAgIE1BTkRBVE9SWSxcclxuICAgIEVMRUNUSVZFXHJcbn0iLCJleHBvcnQgaW50ZXJmYWNlIElTZWN1cml0eUxvZyB7XHJcbiAgICB1c2VySWQ/OiBudW1iZXI7XHJcbiAgICBsb2dvbklkPzogbnVtYmVyO1xyXG4gICAgc2Vzc2lvblV1aWQ/OiBzdHJpbmc7XHJcbiAgICBpcD86IHN0cmluZztcclxuICAgIGFjdGlvbj86IFNlY3VyaXR5TG9nQWN0aW9uRW51bTtcclxuICAgIGFjdGlvbkRhdGU/OiBudW1iZXI7XHJcbiAgICBsb2dvbk5hbWU/OiBzdHJpbmc7XHJcbiAgICBzdGF0dXM/OiBTZWN1cml0eUxvZ1N0YXR1c0VudW07XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU2VjdXJpdHlMb2dTdGF0dXNFbnVtIHtcclxuICAgIFNVQ0NFU1MsXHJcbiAgICBGQUlMRUQsXHJcbiAgICBGQUlMRURfSU5WQUxJRF9DUkVERU5USUFMUyxcclxuICAgIEZBSUxFRF9VTktOT1dOX0NSRURFTlRJQUxTLFxyXG4gICAgRkFJTEVEX0FDQ0VTU19ERU5JRURcclxufVxyXG5leHBvcnQgdmFyIFNFQ1VSSVRZX0xPR19TVEFUVVNfRU5VTV9WQUxVRVMgPSBbXHJcbiAgICBTZWN1cml0eUxvZ1N0YXR1c0VudW0uU1VDQ0VTUyxcclxuICAgIFNlY3VyaXR5TG9nU3RhdHVzRW51bS5GQUlMRUQsXHJcbiAgICBTZWN1cml0eUxvZ1N0YXR1c0VudW0uRkFJTEVEX0lOVkFMSURfQ1JFREVOVElBTFMsXHJcbiAgICBTZWN1cml0eUxvZ1N0YXR1c0VudW0uRkFJTEVEX1VOS05PV05fQ1JFREVOVElBTFMsXHJcbiAgICBTZWN1cml0eUxvZ1N0YXR1c0VudW0uRkFJTEVEX0FDQ0VTU19ERU5JRURcclxuXTtcclxuXHJcbmV4cG9ydCBlbnVtIFNlY3VyaXR5TG9nQWN0aW9uRW51bSB7XHJcbiAgICBBVVRIRU5USUNBVElPTixcclxuICAgIExPR09VVCxcclxuICAgIEFVVEhPUklaQVRJT05cclxufVxyXG5leHBvcnQgdmFyIFNFQ1VSSVRZX0xPR19BQ1RJT05fRU5VTV9WQUxVRVMgPSBbXHJcbiAgICBTZWN1cml0eUxvZ0FjdGlvbkVudW0uQVVUSEVOVElDQVRJT04sXHJcbiAgICBTZWN1cml0eUxvZ0FjdGlvbkVudW0uTE9HT1VULFxyXG4gICAgU2VjdXJpdHlMb2dBY3Rpb25FbnVtLkFVVEhPUklaQVRJT05cclxuXHJcbl07IiwiZXhwb3J0IGludGVyZmFjZSBJU3lzdGVtTG9nIHtcclxuICAgIHVzZXJJZD86IG51bWJlcjtcclxuICAgIHNlc3Npb25VdWlkPzogc3RyaW5nO1xyXG4gICAgbGV2ZWw/OiBTeXN0ZW1Mb2dMZXZlbEVudW07XHJcbiAgICBldmVudERhdGU/OiBudW1iZXI7XHJcbiAgICBzb3VyY2U/OiBTeXN0ZW1Mb2dTb3VyY2VFbnVtO1xyXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgICBtZDVzdW0/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFN5c3RlbUxvZ1NvdXJjZUVudW0ge1xyXG4gICAgU0VSVkVSLFxyXG4gICAgQ0xJRU5ULFxyXG4gICAgVVNFUl9SRVBPUlRcclxufVxyXG5cclxuZXhwb3J0IHZhciBTWVNURU1fTE9HX1NPVVJDRV9FTlVNX1ZBTFVFUyA9IFtcclxuICAgIFN5c3RlbUxvZ1NvdXJjZUVudW0uU0VSVkVSLFxyXG4gICAgU3lzdGVtTG9nU291cmNlRW51bS5DTElFTlQsXHJcbiAgICBTeXN0ZW1Mb2dTb3VyY2VFbnVtLlVTRVJfUkVQT1JUXHJcbl07XHJcblxyXG5leHBvcnQgZW51bSBTeXN0ZW1Mb2dMZXZlbEVudW0ge1xyXG4gICAgRVJST1IsXHJcbiAgICBXQVJOLFxyXG4gICAgSU5GTyxcclxuICAgIERFQlVHXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgU1lTVEVNX0xPR19MRVZFTF9FTlVNX1ZBTFVFUyA9IFtcclxuICAgIFN5c3RlbUxvZ0xldmVsRW51bS5FUlJPUixcclxuICAgIFN5c3RlbUxvZ0xldmVsRW51bS5XQVJOLFxyXG4gICAgU3lzdGVtTG9nTGV2ZWxFbnVtLklORk8sXHJcbiAgICBTeXN0ZW1Mb2dMZXZlbEVudW0uREVCVUdcclxuXHJcbl07IiwiaW1wb3J0IHtTZWN1cml0eUxvZ0NvbnRyb2xsZXJ9IGZyb20gXCIuL1NlY3VyaXR5TG9nQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge1N5c3RlbUxvZ0NvbnRyb2xsZXJ9IGZyb20gXCIuL1N5c3RlbUxvZ0NvbnRyb2xsZXJcIjtcclxuXHJcbmltcG9ydCB7VXJsc01vZHVsZX0gZnJvbSBcIi4vLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcblxyXG5leHBvcnQgdmFyIExvZ3NNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJsb2dzXCIsIFtcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWVcclxuICAgIF0pXHJcbiAgICAuY29udHJvbGxlcihTZWN1cml0eUxvZ0NvbnRyb2xsZXIuTkFNRSwgU2VjdXJpdHlMb2dDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoU3lzdGVtTG9nQ29udHJvbGxlci5OQU1FLCBTeXN0ZW1Mb2dDb250cm9sbGVyKTsiLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtNb21lbnR9IGZyb20gXCIuLy4uL3V0aWxzL01vbWVudFwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtJR3JpZE1vZGVsLCBHcmlkTW9kZWwsIElHcmlkTG9hZGluZ0xpc3RlbmVyfSBmcm9tIFwiLi8uLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgICBJU2VjdXJpdHlMb2csXHJcbiAgICBTZWN1cml0eUxvZ1N0YXR1c0VudW0sXHJcbiAgICBTZWN1cml0eUxvZ0FjdGlvbkVudW0sXHJcbiAgICBTRUNVUklUWV9MT0dfQUNUSU9OX0VOVU1fVkFMVUVTLFxyXG4gICAgU0VDVVJJVFlfTE9HX1NUQVRVU19FTlVNX1ZBTFVFU1xyXG59IGZyb20gXCIuL0lTZWN1cml0eUxvZ1wiO1xyXG5pbXBvcnQge1VzZXJzUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL1VzZXJzUm91dGVyXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4vLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi8uLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge1ByZWRlZmluZWRVc2Vyc0VudW19IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IElTQ0VTZXJ2aWNlID0gYW5ndWxhci5JU0NFU2VydmljZTtcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWN1cml0eUxvZ0NvbnRyb2xsZXIgaW1wbGVtZW50cyBJR3JpZExvYWRpbmdMaXN0ZW5lciB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJsb2dzLlNlY3VyaXR5TG9nQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzZWN1cml0eUxvZ3NHcmlkTW9kZWw6IEdyaWRNb2RlbDxJU2VjdXJpdHlMb2c+O1xyXG4gICAgcHVibGljIGZvckRhdGVGaWx0ZXI6IHN0cmluZztcclxuICAgIHB1YmxpYyBzZWN1cml0eUFjdGlvblR5cGVzOiBBcnJheTxJU2VsZWN0YWJsZT4gPSBbXTtcclxuICAgIHB1YmxpYyBzZWN1cml0eUxvZ1N0YXR1c2VzOiBBcnJheTxJU2VsZWN0YWJsZT4gPSBbXTtcclxuICAgIHB1YmxpYyBhY3Rpb25zRmlsdGVyOiBBcnJheTxudW1iZXI+ID0gW107XHJcbiAgICBwdWJsaWMgc3RhdHVzZXNGaWx0ZXI6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuICAgIHByaXZhdGUgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHNjZVwiLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2Vyc1JvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBJU0NFU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHVzZXJzUm91dGVyOiBVc2Vyc1JvdXRlclxyXG4gICAgKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TRUNVUklUWV9MT0dTX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJTZWN1cml0eSBMb2dzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdGhpcy5mb3JEYXRlRmlsdGVyID0gbW9tZW50KGRhdGUpLmZvcm1hdChNb21lbnQuREVGQVVMVF9GT1JNQVQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5TG9nc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElTZWN1cml0eUxvZz4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2xvZ3Mvc2VjdXJpdHlcIikpKTtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5TG9nc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbGxTZWN1cml0eUFjdGlvblR5cGVzKCk7XHJcbiAgICAgICAgdGhpcy5maWxsU2VjdXJpdHlMb2dTdGF0dXNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydExvYWRpbmcoKSB7XHJcbiAgICAgICAgbGV0IGk7XHJcbiAgICAgICAgbGV0IGRhdGVWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9yRGF0ZUZpbHRlcikge1xyXG4gICAgICAgICAgICBkYXRlVmFsdWUgPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5mb3JEYXRlRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eUxvZ3NHcmlkTW9kZWwuZmlsdGVyW1wiZm9yRGF0ZVwiXSA9IGRhdGVWYWx1ZTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3RhdHVzZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdHVzZXNGaWx0ZXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgc3RhdHVzZXMucHVzaChTZWN1cml0eUxvZ1N0YXR1c0VudW1bdGhpcy5zdGF0dXNlc0ZpbHRlcltpXV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlY3VyaXR5TG9nc0dyaWRNb2RlbC5maWx0ZXJbXCJzdGF0dXNlc1wiXSA9IHN0YXR1c2VzO1xyXG5cclxuICAgICAgICBjb25zdCBhY3Rpb25UeXBlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hY3Rpb25zRmlsdGVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGVzLnB1c2goU2VjdXJpdHlMb2dBY3Rpb25FbnVtW3RoaXMuYWN0aW9uc0ZpbHRlcltpXV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlY3VyaXR5TG9nc0dyaWRNb2RlbC5maWx0ZXJbXCJhY3Rpb25zXCJdID0gYWN0aW9uVHlwZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuZExvYWRpbmcoKSB7XHJcbiAgICAgICAgLy9kbyBub3RoaW5nXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaWxsU2VjdXJpdHlBY3Rpb25UeXBlcygpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IFNFQ1VSSVRZX0xPR19BQ1RJT05fRU5VTV9WQUxVRVMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5zZWN1cml0eUFjdGlvblR5cGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IGksXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBTZWN1cml0eUxvZ0FjdGlvbkVudW1bU0VDVVJJVFlfTE9HX0FDVElPTl9FTlVNX1ZBTFVFU1tpXV1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsbFNlY3VyaXR5TG9nU3RhdHVzZXMoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBTRUNVUklUWV9MT0dfU1RBVFVTX0VOVU1fVkFMVUVTLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdXJpdHlMb2dTdGF0dXNlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiBpLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogU2VjdXJpdHlMb2dTdGF0dXNFbnVtW1NFQ1VSSVRZX0xPR19TVEFUVVNfRU5VTV9WQUxVRVNbaV1dXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9ybWF0TWVzc2FnZShpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2NlLnRydXN0QXNIdG1sKGlucHV0LnJlcGxhY2UoL1xcXFx0L2csIFwiXFx0XCIpLnJlcGxhY2UoL1xcXFxyXFxcXG4vZywgXCJcXG5cIikpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0d1ZXN0VXNlcih1c2VySWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB1c2VySWQgPT0gUHJlZGVmaW5lZFVzZXJzRW51bS5HVUVTVDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTeXN0ZW1Vc2VyKHVzZXJJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHVzZXJJZCA9PSBQcmVkZWZpbmVkVXNlcnNFbnVtLlNZU1RFTTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtNb21lbnR9IGZyb20gXCIuLy4uL3V0aWxzL01vbWVudFwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTG9hZGluZ0xpc3RlbmVyfSBmcm9tIFwiLi8uLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgICBJU3lzdGVtTG9nLFxyXG4gICAgU3lzdGVtTG9nTGV2ZWxFbnVtLFxyXG4gICAgU3lzdGVtTG9nU291cmNlRW51bSxcclxuICAgIFNZU1RFTV9MT0dfTEVWRUxfRU5VTV9WQUxVRVMsXHJcbiAgICBTWVNURU1fTE9HX1NPVVJDRV9FTlVNX1ZBTFVFU1xyXG59IGZyb20gXCIuL0lTeXN0ZW1Mb2dcIjtcclxuaW1wb3J0IHtVc2Vyc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9Vc2Vyc1JvdXRlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU2VsZWN0YWJsZX0gZnJvbSBcIi4vLi4vSVNlbGVjdGFibGVcIjtcclxuaW1wb3J0IElTQ0VTZXJ2aWNlID0gYW5ndWxhci5JU0NFU2VydmljZTtcclxuaW1wb3J0IHtQcmVkZWZpbmVkVXNlcnNFbnVtfSBmcm9tIFwiLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3lzdGVtTG9nQ29udHJvbGxlciBpbXBsZW1lbnRzIElHcmlkTG9hZGluZ0xpc3RlbmVyIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcImxvZ3MuU3lzdGVtTG9nQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzeXN0ZW1Mb2dzR3JpZE1vZGVsOiBHcmlkTW9kZWw8SVN5c3RlbUxvZz47XHJcbiAgICBwdWJsaWMgZm9yRGF0ZUZpbHRlcjogc3RyaW5nO1xyXG4gICAgcHVibGljIHN5c3RlbUxvZ0xldmVsczogQXJyYXk8SVNlbGVjdGFibGU+ID0gW107XHJcbiAgICBwdWJsaWMgc3lzdGVtTG9nU291cmNlczogQXJyYXk8SVNlbGVjdGFibGU+ID0gW107XHJcbiAgICBwdWJsaWMgbGV2ZWxzRmlsdGVyOiBBcnJheTxudW1iZXI+ID0gW107XHJcbiAgICBwdWJsaWMgc291cmNlc0ZpbHRlcjogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHNjZVwiLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2Vyc1JvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBJU0NFU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHVzZXJzUm91dGVyOiBVc2Vyc1JvdXRlcikge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU1lTVEVNX0xPR1NfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIlN5c3RlbSBMb2dzXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkgPSBwZXJtaXNzaW9uc0FwaTtcclxuICAgICAgICB0aGlzLnVzZXJzUm91dGVyID0gdXNlcnNSb3V0ZXI7XHJcblxyXG5cclxuICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdGhpcy5mb3JEYXRlRmlsdGVyID0gbW9tZW50KGRhdGUpLmZvcm1hdChNb21lbnQuREVGQVVMVF9GT1JNQVQpO1xyXG5cclxuICAgICAgICB0aGlzLnN5c3RlbUxvZ3NHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJU3lzdGVtTG9nPigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvbG9ncy9zeXN0ZW1cIikpKTtcclxuICAgICAgICB0aGlzLnN5c3RlbUxvZ3NHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihwID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5maWxsU3lzdGVtQWN0aW9uVHlwZXMoKTtcclxuICAgICAgICB0aGlzLmZpbGxTeXN0ZW1Mb2dTdGF0dXNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRXaWR0aCgpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgICAgIGxldCBpO1xyXG4gICAgICAgIGxldCBkYXRlVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmZvckRhdGVGaWx0ZXIpIHtcclxuICAgICAgICAgICAgZGF0ZVZhbHVlID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuZm9yRGF0ZUZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3lzdGVtTG9nc0dyaWRNb2RlbC5maWx0ZXJbXCJmb3JEYXRlXCJdID0gZGF0ZVZhbHVlO1xyXG5cclxuICAgICAgICBjb25zdCBzb3VyY2VzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnNvdXJjZXNGaWx0ZXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgc291cmNlcy5wdXNoKFN5c3RlbUxvZ1NvdXJjZUVudW1bdGhpcy5zb3VyY2VzRmlsdGVyW2ldXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3lzdGVtTG9nc0dyaWRNb2RlbC5maWx0ZXJbXCJzb3VyY2VzXCJdID0gc291cmNlcztcclxuXHJcbiAgICAgICAgY29uc3QgbGV2ZWxzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxldmVsc0ZpbHRlci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXZlbHMucHVzaChTeXN0ZW1Mb2dMZXZlbEVudW1bdGhpcy5sZXZlbHNGaWx0ZXJbaV1dKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1Mb2dzR3JpZE1vZGVsLmZpbHRlcltcImxldmVsc1wiXSA9IGxldmVscztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kTG9hZGluZygpIHtcclxuICAgICAgICAvL2RvIG5vdGhpbmdcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbGxTeXN0ZW1BY3Rpb25UeXBlcygpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IFNZU1RFTV9MT0dfTEVWRUxfRU5VTV9WQUxVRVMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1Mb2dMZXZlbHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogaSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IFN5c3RlbUxvZ0xldmVsRW51bVtTWVNURU1fTE9HX0xFVkVMX0VOVU1fVkFMVUVTW2ldXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaWxsU3lzdGVtTG9nU3RhdHVzZXMoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBTWVNURU1fTE9HX1NPVVJDRV9FTlVNX1ZBTFVFUy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbUxvZ1NvdXJjZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogaSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IFN5c3RlbUxvZ1NvdXJjZUVudW1bU1lTVEVNX0xPR19TT1VSQ0VfRU5VTV9WQUxVRVNbaV1dXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9ybWF0TWVzc2FnZShpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2NlLnRydXN0QXNIdG1sKGlucHV0LnJlcGxhY2UoL1xcXFx0L2csIFwiXFx0XCIpLnJlcGxhY2UoL1xcXFxyXFxcXG4vZywgXCJcXG5cIikpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0d1ZXN0VXNlcih1c2VySWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB1c2VySWQgPT0gUHJlZGVmaW5lZFVzZXJzRW51bS5HVUVTVDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTeXN0ZW1Vc2VyKHVzZXJJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHVzZXJJZCA9PSBQcmVkZWZpbmVkVXNlcnNFbnVtLlNZU1RFTTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7TmV3c1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTmV3c1JvdXRlclwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZVNlcnZpY2V9IGZyb20gXCIuLi9yZWZlcmVuY2UvUmVmZXJlbmNlU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5fSBmcm9tIFwiLi4vcmVmZXJlbmNlL21vZGVscy9JU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eVwiO1xyXG5pbXBvcnQge0F1dGhSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0F1dGhSb3V0ZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtTG9jYWxlfSBmcm9tIFwiLi4vc2V0dGluZ3MvbW9kZWxzL0lTeXN0ZW1Mb2NhbGVcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5nc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtMb2dPbkNvbnRyb2xsZXJ9IGZyb20gXCIuLi9hdXRoL0xvZ09uQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0hvbWVwYWdlSGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvSG9tZXBhZ2VIZWxwZXJcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUHJvcGVydHl9IGZyb20gXCIuLi9zZXR0aW5ncy9tb2RlbHMvSVN5c3RlbVByb3BlcnR5XCI7XHJcbmltcG9ydCB7QXBwUHJvcGVydGllc30gZnJvbSBcIi4uL3V0aWxzL0FwcFByb3BlcnRpZXNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYWluQ29udHJvbGxlciB7XHJcbiAgICBzdGF0aWMgZ2V0ICRpbmplY3QoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl8kaW5qZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzZXQgJGluamVjdCh2YWx1ZTogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLl8kaW5qZWN0ID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcIm1haW4uTWFpbkNvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFJFRkVSRU5DRV9OQU1FID0gXCJzdWJqZWN0c1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBTRUFSQ0hfU1RSSU5HX1BBUkFNRVRFUiA9IFwic2VhcmNoU3RyaW5nXCI7XHJcblxyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzdWJqZWN0UmVmZXJlbmNlRW50aXRpZXM6IElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5O1xyXG4gICAgcHVibGljIGlzTWFpblBhZ2U6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYWxsb3dNYWluUGFnZTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc01lbnVIaWRkZW46IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYXZhaWxhYmxlTG9jYWxlczogQXJyYXk8SVN5c3RlbUxvY2FsZT47XHJcbiAgICBwdWJsaWMgZGVmYXVsdExvY2FsZTogSVN5c3RlbUxvY2FsZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIF8kaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIE1hdGVyaWFsc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBOZXdzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUmVmZXJlbmNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhSb3V0ZXIuTkFNRSxcclxuICAgICAgICBTZXR0aW5nc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG5ld3NSb3V0ZXI6IE5ld3NSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlZmVyZW5jZUFwaTogUmVmZXJlbmNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJvdXRlcjogQXV0aFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2V0dGluZ3NBcGk6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aEFwaTogQXV0aFNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmlzTWFpblBhZ2UgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWxsb3dNYWluUGFnZSA9IEFwcFByb3BlcnRpZXMuYWxsb3dNYWluUGFnZSA9PSAndHJ1ZSc7XHJcbiAgICAgICAgdGhpcy5pc01lbnVIaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlVG9wTWVudVZpc2liaWxpdHkoKTtcclxuICAgICAgICB0aGlzLnRvZ2dsZVZoc1BhZ2VIZWFkZXJWaXNpYmlsaXR5KFwiXCIpO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc01haW5QYWdlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlVG9wTWVudVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcImRlc3Ryb3lcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5NQUlOX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIlwiKS51cGRhdGUoKTtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NBcGkuZ2V0SG9tZXBhZ2UoKS50aGVuKChob21lcGFnZTogSVN5c3RlbVByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwoSG9tZXBhZ2VIZWxwZXIuZ2V0SG9tZXBhZ2VVcmwoaG9tZXBhZ2UpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5hbGxvd01haW5QYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmF1dGhSb3V0ZXIubG9nb25VcmwoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRBdmFpbGFibGVMb2NhbGVzKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlQXBpLmdldEFjdGl2ZVJlZmVyZW5jZUVudGl0aWVzRm9yU2VsZWN0b3JXaXRob3V0UGFyYW1zKE1haW5Db250cm9sbGVyLlJFRkVSRU5DRV9OQU1FLCBudWxsKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3ViamVjdFJlZmVyZW5jZUVudGl0aWVzID0gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9nZ2xlVG9wTWVudVZpc2liaWxpdHkoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzTWFpblBhZ2UpIHtcclxuICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyhcIm1lbnUtaGlkZGVuXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoXCJtZW51LWhpZGRlblwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShwYXJhbTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikpO1xyXG4gICAgICAgIGlmIChwYXJhbSA9PSBcImRlc3Ryb3lcIikge1xyXG4gICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtID09IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtLmhhc0NsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQXZhaWxhYmxlTG9jYWxlcygpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzQXBpLmdldEF2YWlsYWJsZUxvY2FsZXMoKS50aGVuKGxvY2FsZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxvY2FsZXMgPSBsb2NhbGVzO1xyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGUgPSB0aGlzLmdldEN1cnJlbnRTdG9yYWdlTG9jYWxlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50U3RvcmFnZUxvY2FsZSgpOiBJU3lzdGVtTG9jYWxlIHtcclxuICAgICAgICBjb25zdCBMT0NBTEVfU1RPUkFHRV9LRVkgPSBcInZocy5hcHBsaWNhdGlvbi5jdXJyZW50LmxvY2FsZVwiO1xyXG4gICAgICAgIGlmICh0aGlzLmF2YWlsYWJsZUxvY2FsZXMgJiYgdGhpcy5hdmFpbGFibGVMb2NhbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlTG9jYWxlcy5maWx0ZXIobCA9PiBsLmxvY2FsZSA9PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMT0NBTEVfU1RPUkFHRV9LRVkpKVswXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEJ5U3ViamVjdChzdWJqZWN0TmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLmluZGV4VXJsKCkpXHJcbiAgICAgICAgICAgIC5zZWFyY2goTWFpbkNvbnRyb2xsZXIuU0VBUkNIX1NUUklOR19QQVJBTUVURVIsIHN1YmplY3ROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlTWVudVZpc2liaWxpdHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc01lbnVIaWRkZW4gPSAhdGhpcy5pc01lbnVIaWRkZW47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9Mb2dpblBhZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYXV0aFJvdXRlci5sb2dvblVybCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVsb2FkQXBwbGljYXRpb25Gb3JMb2NhbGVJZk5lZWRlZChsb2NhbGU6IHN0cmluZywgJGV2ZW50OiBhbmd1bGFyLklBbmd1bGFyRXZlbnQpIHtcclxuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IExvZ09uQ29udHJvbGxlci5yZWxvYWRBcHBsaWNhdGlvbkZvckxvY2FsZUlmTmVlZGVkKGxvY2FsZSwgZmFsc2UpLCAwKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGUgPSB0aGlzLmdldEN1cnJlbnRTdG9yYWdlTG9jYWxlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtNYWluU2VydmljZX0gZnJvbSBcIi4vTWFpblNlcnZpY2VcIjtcclxuaW1wb3J0IHtNYWluQ29udHJvbGxlcn0gZnJvbSBcIi4vTWFpbkNvbnRyb2xsZXJcIjtcclxuXHJcbmltcG9ydCB7VXJsc01vZHVsZX0gZnJvbSBcIi4vLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcblxyXG5leHBvcnQgdmFyIE1haW5Nb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJtYWluXCIsIFtcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWVcclxuICAgIF0pXHJcbiAgICAuc2VydmljZShNYWluU2VydmljZS5OQU1FLCBNYWluU2VydmljZSlcclxuICAgIC5jb250cm9sbGVyKE1haW5Db250cm9sbGVyLk5BTUUsIE1haW5Db250cm9sbGVyKTsiLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYWluU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcIm1haW4uTWFpblNlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL1NlY3VyZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIi4uL3V0aWxzL01vbWVudFwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7QWN0aW9uTG9nU2VydmljZX0gZnJvbSBcIi4uL3N0YXRpc3RpY3MvQWN0aW9uTG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0FjdGlvblR5cGV9IGZyb20gXCIuLi9zdGF0aXN0aWNzL21vZGVscy9BY3Rpb25UeXBlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlZE9iamVjdFR5cGV9IGZyb20gXCIuLi9SZWZlcmVuY2VkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVcGxvYWRVdGlsc30gZnJvbSBcIi4uL3V0aWxzL1VwbG9hZFV0aWxzXCI7XHJcbmltcG9ydCB7VXBsb2Fkc1NlcnZpY2V9IGZyb20gXCIuLi9zdG9yYWdlL1VwbG9hZHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29udGVudFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvQ29udGVudFV0aWxzXCI7XHJcbmltcG9ydCB7SU11bHRpbWVkaWFTb3VyY2V9IGZyb20gXCIuLi9jb21wb25lbnRzL21vZGVscy9JTXVsdGltZWRpYVwiO1xyXG5pbXBvcnQge0lNYXRlcmlhbH0gZnJvbSBcIi4vbW9kZWxzL0lNYXRlcmlhbFwiO1xyXG5pbXBvcnQge01hdGVyaWFsVHlwZSwgTWF0ZXJpYWxUeXBlRW51bX0gZnJvbSBcIi4vbW9kZWxzL01hdGVyaWFsVHlwZVwiO1xyXG5pbXBvcnQge01hdGVyaWFsU2VydmljZX0gZnJvbSBcIi4vTWF0ZXJpYWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5pbXBvcnQge09iamVjdFR5cGVVdGlsc30gZnJvbSBcIi4uL3V0aWxzL09iamVjdFR5cGVVdGlsc1wiO1xyXG5pbXBvcnQge1ByZWRlZmluZWRMYW5ndWFnZXNVdGlsc30gZnJvbSBcIi4uL3V0aWxzL1ByZWRlZmluZWRMYW5ndWFnZXNVdGlsc1wiO1xyXG5pbXBvcnQge1JlZmVyZW5jZVNlcnZpY2V9IGZyb20gXCIuLi9yZWZlcmVuY2UvUmVmZXJlbmNlU2VydmljZVwiO1xyXG5pbXBvcnQgSVByb21pc2UgPSBhbmd1bGFyLklQcm9taXNlO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0ludHJvU2VydmljZX0gZnJvbSBcIi4uL2luZm8vSW50cm9TZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlIGV4dGVuZHMgRmlsZSB7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVkaXRNYXRlcmlhbENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJtYXRlcmlhbHMuRWRpdE1hdGVyaWFsQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBpc1ZhbGlkaXR5SW5QZXJwZXR1aXR5OiBib29sZWFuO1xyXG4gICAgcHVibGljIGF0dGFjaEZvcm1hdDogc3RyaW5nO1xyXG4gICAgcHVibGljIGlzRWRpdE1vZGU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZmlsZTogRmlsZTtcclxuICAgIHB1YmxpYyBmaWxlTGlzdDogRmlsZVtdID0gW107XHJcbiAgICBwdWJsaWMgZmlsdGVyZWRGaWxlTGlzdDogRmlsZVtdID0gW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRGaWxlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzRXJyb3JGaWxlRm9ybWF0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxMaXN0OiBJTWF0ZXJpYWxbXSA9IFtdO1xyXG4gICAgcHVibGljIGlzTXVsdGlwbGVVcGxvYWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcHJldmlldzogSUZpbGU7XHJcbiAgICBwdWJsaWMgY3JvcHBlZEltYWdlOiBGaWxlO1xyXG4gICAgcHVibGljIG1hdGVyaWFsOiBJTWF0ZXJpYWw7XHJcbiAgICBwdWJsaWMgZGlzYWJsZWRTYXZlQnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIGRpc2FibGVkVXBsb2FkQnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIHNob3dVcGxvYWRCdXR0b246IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgdHlwZUlkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdXBsb2FkQ29udGVudFR5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBtdWx0aW1lZGlhU291cmNlczogSU11bHRpbWVkaWFTb3VyY2VbXTtcclxuICAgIHB1YmxpYyB5b3V0dWJlTXVsdGltZWRpYVNvdXJjZXM6IElNdWx0aW1lZGlhU291cmNlW107XHJcblxyXG4gICAgcHVibGljIGhhc0ZpbGU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNNYXRlcmlhbEZpbGVTdGF0dXNSZWFkeTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc0F1ZGlvT3JWaWRlbzogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1Bob3RvOiBib29sZWFuO1xyXG4gICAgcHVibGljIGlzWW91dHViZTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1ZpbWVvOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBtYXRlcmlhbElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZmlsZU5hbWU6IHN0cmluZztcclxuICAgIHB1YmxpYyBwcmV2aWV3VXJsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaGFzUHJldmlld1VybENhbmNlbGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc3VidGl0bGVzOiBJRmlsZTtcclxuICAgIHB1YmxpYyBzdWJ0aXRsZXNVcmw6IHN0cmluZztcclxuICAgIHB1YmxpYyBzdWJ0aXRsZXNOYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaGFzU3VidGl0bGVzVXJsQ2FuY2VsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgY3VycmVudFVzZXI6IElTZWxlY3RhYmxlID0ge307XHJcbiAgICBwcml2YXRlIGN1cnJlbnRVc2VyTG9jYWxlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZHVyYXRpb247XHJcblxyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc0FsbEJ1c2luZXNzVW5pdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTWF0ZXJpYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBBY3Rpb25Mb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVwbG9hZFV0aWxzLk5BTUUsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIlVwbG9hZFwiLFxyXG4gICAgICAgIFJlZmVyZW5jZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBJbnRyb1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYXRlcmlhbFNlcnZpY2U6IE1hdGVyaWFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWF0ZXJpYWxzUm91dGVyOiBNYXRlcmlhbHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGFjdGlvbkxvZ1NlcnZpY2U6IEFjdGlvbkxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRVdGlsczogVXBsb2FkVXRpbHMsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdXBsb2FkZXI6IG5nLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWZlcmVuY2VTZXJ2aWNlOiBSZWZlcmVuY2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBpbnRyb1NlcnZpY2U6IEludHJvU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxJZCA9ICRyb3V0ZVBhcmFtc1tNYXRlcmlhbHNSb3V0ZXIuTUFURVJJQUxfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBtYXRlcmlhbElkU3RyOiBzdHJpbmcgPSBTdHJpbmcodGhpcy5tYXRlcmlhbElkKTtcclxuICAgICAgICBsZXQgaGFzTWF0ZXJpYWxJZDogYm9vbGVhbiA9IHRoaXMubWF0ZXJpYWxJZCAhPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9uc0lmKCFoYXNNYXRlcmlhbElkLCBzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5hZGRNYXRlcmlhbClcclxuICAgICAgICAgICAgLmRlbWFuZE1hdGVyaWFsUGVybWlzc2lvbnNJZihoYXNNYXRlcmlhbElkLCBtYXRlcmlhbElkU3RyLCBtYXRlcmlhbFBlcm1pc3Npb25zID0+IG1hdGVyaWFsUGVybWlzc2lvbnMuZWRpdCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNWYWxpZGl0eUluUGVycGV0dWl0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hGb3JtYXQgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwgPSB7fTtcclxuICAgICAgICB0aGlzLmlzTXVsdGlwbGVVcGxvYWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFVwbG9hZEJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkVEVUNBVElPTl9NQVRFUklBTFNfTUVOVV9LRVkpO1xyXG5cclxuICAgICAgICBpZiAoaGFzTWF0ZXJpYWxJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzRWRpdE1vZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkTWF0ZXJpYWwoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkVkaXQgTWF0ZXJpYWwgXCIgKyBcIuKAmFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKyB0aGlzLm1hdGVyaWFsLnRpdGxlICsgXCLigJlcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyA9IHVzZXIuYWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZUJ1dHRvbkZvckxpbmtVcGxvYWQoKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzRWRpdE1vZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93VXBsb2FkQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJOZXcgTWF0ZXJpYWxcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMudHlwZUlkID0gMTtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRDb250ZW50VHlwZSA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5vd25lcklkID0gdXNlci5pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwub3duZXJOYW1lID0gdXNlci5mdWxsTmFtZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB7aWQ6IHVzZXIuaWQsIG5hbWU6IHVzZXIuZnVsbE5hbWV9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlckxvY2FsZSA9IHVzZXIubG9jYWxlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzID0gdXNlci5hbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwubGFuZ3VhZ2VJZCA9IFByZWRlZmluZWRMYW5ndWFnZXNVdGlscy5kZXRlcm1pbmVSZWxhdGVkTGFuZ3VhZ2VJZCh1c2VyLmxvY2FsZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRMYW5ndWFnZU5hbWUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5kcmFnb3ZlckV2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJFdmVudEhhbmRsZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZHJhZ292ZXJFdmVudEhhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ25vbmUnO1xyXG5cclxuICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xyXG4gICAgICAgIGxldCBkcm9wRnJvbUVkaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRyb3BGcm9tRWRpdFwiKTtcclxuICAgICAgICBsZXQgZHJvcEZyb21FZGl0UHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZHJvcEZyb21FZGl0UHJldmlld1wiKTtcclxuICAgICAgICBsZXQgcHJldmlld0ZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcmV2aWV3RmllbGRcIik7XHJcbiAgICAgICAgbGV0IGRyb3BGcm9tRWRpdE5vdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImRyb3BGcm9tRWRpdE5vdGVcIik7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZHJvcEZyb21FZGl0Tm90ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZHJvcEZyb21FZGl0Tm90ZVtpXSA9PSBlbGVtKSB7XHJcbiAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZHJvcEZyb21FZGl0ID09IGVsZW0gfHwgcHJldmlld0ZpZWxkID09IGVsZW0gfHwgZHJvcEZyb21FZGl0UHJldmlldyA9PT0gZWxlbSkge1xyXG4gICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTGFuZ3VhZ2VOYW1lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlU2VydmljZS5nZXRBY3RpdmVSZWZlcmVuY2VFbnRpdGllcygnbGFuZ3VhZ2VzJywge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZW50aXRpZXMuZm9yRWFjaChlbnRpdHkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbnRpdHlbJ2lkJ10gJiYgZW50aXR5WydpZCddID09IHRoaXMubWF0ZXJpYWwubGFuZ3VhZ2VJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmxhbmd1YWdlTmFtZSA9IGVudGl0eVsnbmFtZSddO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRNYXRlcmlhbCgpOiBhbmd1bGFyLklQcm9taXNlPElNYXRlcmlhbD4ge1xyXG4gICAgICAgIHZhciBwcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPElNYXRlcmlhbD4gPSB0aGlzLm1hdGVyaWFsU2VydmljZS5nZXQodGhpcy5tYXRlcmlhbElkKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5tYXRlcmlhbCk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnZhbGlkaXR5VGV4dCA9IE1vbWVudC5pc1ZhbGlkRGF0ZShyZXN1bHQudmFsaWRpdHkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbC52YWxpZGl0eVRleHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZGl0eUluUGVycGV0dWl0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlld1VybCA9IHRoaXMubWF0ZXJpYWwucHJldmlld1VybCA/IHRoaXMubWF0ZXJpYWwucHJldmlld1VybCA6IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc3VidGl0bGVzVXJsID0gdGhpcy5tYXRlcmlhbC5zdWJ0aXRsZXNVcmwgPyB0aGlzLm1hdGVyaWFsLnN1YnRpdGxlc1VybCA6IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc3VidGl0bGVzTmFtZSA9IHRoaXMubWF0ZXJpYWwuc3VidGl0bGVzTmFtZSA/IHRoaXMubWF0ZXJpYWwuc3VidGl0bGVzTmFtZSA6IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWUgPSByZXN1bHQuZmlsZU5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMudHlwZUlkID0gcmVzdWx0LnR5cGVJZDtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5saW5rID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkQ29udGVudFR5cGUgPSAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRDb250ZW50VHlwZSA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwudHlwZUlkICE9IDMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1VwbG9hZEJ1dHRvbiA9ICF0aGlzLm1hdGVyaWFsLmZpbGVJZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm11bHRpbWVkaWFTb3VyY2VzID0gW3tcclxuICAgICAgICAgICAgICAgIHNyYzogdGhpcy5tYXRlcmlhbC5kb3dubG9hZFVybCB8fCAnJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMubWF0ZXJpYWwuY29udGVudFR5cGVcclxuICAgICAgICAgICAgfV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVNYXRlcmlhbChtYXRlcmlhbDogSU1hdGVyaWFsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRVcGxvYWRCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwudHlwZUlkID0gdGhpcy50eXBlSWQ7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC52YWxpZGl0eSA9IE1vbWVudC50ZXh0VG9KYXZhRGF0ZShtYXRlcmlhbC52YWxpZGl0eVRleHQpO1xyXG4gICAgICAgIGxldCBwcmV2aWV3ID0gdGhpcy5jcm9wcGVkSW1hZ2UgPyB0aGlzLmNyb3BwZWRJbWFnZSA6IHRoaXMucHJldmlldztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdGVyaWFsKG1hdGVyaWFsLCB0aGlzLmZpbGUsIHByZXZpZXcsIHRoaXMuc3VidGl0bGVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1hdGVyaWFsKG1hdGVyaWFsLCBwcmV2aWV3LCB0aGlzLnN1YnRpdGxlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVNYXRlcmlhbChtYXRlcmlhbDogSU1hdGVyaWFsLCBwcmV2aWV3OiBGaWxlLCBzdWJ0aXRsZXM6IEZpbGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5tYXRlcmlhbC50eXBlSWQgPT0gTWF0ZXJpYWxUeXBlLkxJTkspIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbFNlcnZpY2UuY3JlYXRlKG1hdGVyaWFsLCBudWxsLCBwcmV2aWV3LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU1hdGVyaWFsU3VjY2Vzc0NhbGxiYWNrKHJlc3VsdCwgbnVsbCwgcHJldmlldywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdE9yQ2xlYXJGaWVsZHMoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlQnV0dG9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBzYXZlTWF0ZXJpYWxEZWZlcnJlZCA9IHRoaXMuJHEuZGVmZXIoKTtcclxuICAgICAgICAgICAgc2F2ZU1hdGVyaWFsRGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICBsZXQgc2F2ZU1hdGVyaWFsUHJvbWlzZTogSVByb21pc2U8YW55PiA9IHNhdmVNYXRlcmlhbERlZmVycmVkLnByb21pc2U7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuZmlsbE1hdGVyaWFsTGlzdEZyb21GaWxlTGlzdCgpO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2godGhpcy5tYXRlcmlhbExpc3QsIChtYXRlcmlhbCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnZhbGlkaXR5ID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMubWF0ZXJpYWwudmFsaWRpdHlUZXh0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLm1hdGVyaWFsTGlzdCwgKG1hdGVyaWFsLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2F2ZU1hdGVyaWFsUHJvbWlzZSA9IHNhdmVNYXRlcmlhbFByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGU6IEZpbGUgPSB0aGlzLmZpbHRlcmVkRmlsZUxpc3RbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChDb250ZW50VXRpbHMuY2hlY2tGaWxlRXh0KG1hdGVyaWFsLnR5cGVJZCwgQ29udGVudFV0aWxzLmdldEZpbGVFeHQoZmlsZS5uYW1lKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNYXRlcmlhbEZpZWxkc0JlZm9yZVVwbG9hZChtYXRlcmlhbCwgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsU2VydmljZS5jcmVhdGUobWF0ZXJpYWwsIGZpbGUsIHByZXZpZXcsIHN1YnRpdGxlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVNYXRlcmlhbFN1Y2Nlc3NDYWxsYmFjayhyZXN1bHQsIGZpbGUsIHByZXZpZXcsIHN1YnRpdGxlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gVE9ETzogYSBzcGVjaWZpYyBlcnJvciBjb2RlIHNob3VsZCBiZSBjYXVnaHQgaGVyZSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBleGNlcHRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHVwbG9hZCB0aGlzIGZpbGU6IHBsZWFzZSBjaGVjayB3aGV0aGVyIHRoZSBmaWxlIGZvcm1hdCBpcyB2YWxpZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEud2hlbihudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSB0aGlzLm1hdGVyaWFsTGlzdC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2F2ZU1hdGVyaWFsUHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVCdXR0b24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdE9yQ2xlYXJGaWVsZHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlTWF0ZXJpYWxTdWNjZXNzQ2FsbGJhY2sobWF0ZXJpYWw6IElNYXRlcmlhbCwgZmlsZTogRmlsZSwgcHJldmlldzogRmlsZSwgc3VidGl0bGVzOiBGaWxlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IGFuZ3VsYXIuY29weShtYXRlcmlhbFtVcGxvYWRzU2VydmljZS5NQVRFUklBTF9LRVldKTtcclxuICAgICAgICBpZiAocHJldmlldykge1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZChwcmV2aWV3LCB0aGlzLm1hdGVyaWFsLmlkLCBcInByZXZpZXdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdWJ0aXRsZXMpIHtcclxuICAgICAgICAgICAgbGV0IHN1YnRpdGxlc1VwbG9hZFVybDogc3RyaW5nID0gbWF0ZXJpYWxbVXBsb2Fkc1NlcnZpY2UuU1VCVElUTEVTX1VQTE9BRF9VUkxfS0VZXTtcclxuICAgICAgICAgICAgbGV0IHN1YnRpdGxlc1VwbG9hZE1ldGhvZDogc3RyaW5nID0gbWF0ZXJpYWxbVXBsb2Fkc1NlcnZpY2UuU1VCVElUTEVTX1VQTE9BRF9NRVRIT0RfS0VZXTtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRVdGlscy51cGxvYWRNYXRlcmlhbEJ5Q2h1bmtzKHN1YnRpdGxlcywgdGhpcy5tYXRlcmlhbC5zdWJ0aXRsZXNJZCwgdGhpcy5tYXRlcmlhbC5pZCwgc3VidGl0bGVzVXBsb2FkVXJsLCBzdWJ0aXRsZXNVcGxvYWRNZXRob2QsIHRoaXMubWF0ZXJpYWwudGl0bGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgICBsZXQgZmlsZVVwbG9hZFVybDogc3RyaW5nID0gbWF0ZXJpYWxbVXBsb2Fkc1NlcnZpY2UuRklMRV9VUExPQURfVVJMX0tFWV07XHJcbiAgICAgICAgICAgIGxldCBmaWxlVXBsb2FkTWV0aG9kOiBzdHJpbmcgPSBtYXRlcmlhbFtVcGxvYWRzU2VydmljZS5GSUxFX1VQTE9BRF9NRVRIT0RfS0VZXTtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRVdGlscy51cGxvYWRNYXRlcmlhbEJ5Q2h1bmtzKGZpbGUsIHRoaXMubWF0ZXJpYWwuZmlsZUlkLCB0aGlzLm1hdGVyaWFsLmlkLCBmaWxlVXBsb2FkVXJsLCBmaWxlVXBsb2FkTWV0aG9kLCB0aGlzLm1hdGVyaWFsLnRpdGxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2dNYXRlcmlhbENyZWF0aW9uKHRoaXMubWF0ZXJpYWwuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVNYXRlcmlhbChtYXRlcmlhbDogSU1hdGVyaWFsLCBmaWxlOiBGaWxlLCBwcmV2aWV3OiBGaWxlLCBzdWJ0aXRsZXM6IEZpbGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5tYXRlcmlhbC50eXBlSWQgIT0gTWF0ZXJpYWxUeXBlLkFVRElPICYmIHRoaXMubWF0ZXJpYWwudHlwZUlkICE9IE1hdGVyaWFsVHlwZS5WSURFTykge1xyXG4gICAgICAgICAgICBzdWJ0aXRsZXMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzU3VidGl0bGVzVXJsQ2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwudHlwZUlkID09IE1hdGVyaWFsVHlwZS5MSU5LKSB7XHJcbiAgICAgICAgICAgIGZpbGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWZpbGUgfHwgdGhpcy5tYXRlcmlhbC50eXBlSWQgPT0gTWF0ZXJpYWxUeXBlLkxJTksgfHwgKGZpbGUgJiYgQ29udGVudFV0aWxzLmNoZWNrRmlsZUV4dChtYXRlcmlhbC50eXBlSWQsIENvbnRlbnRVdGlscy5nZXRGaWxlRXh0KGZpbGUubmFtZSkpKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsU2VydmljZS51cGRhdGUobWF0ZXJpYWwsIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkLCB0aGlzLmhhc1N1YnRpdGxlc1VybENhbmNlbGVkLCBmaWxlLCBwcmV2aWV3LCBzdWJ0aXRsZXMpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0ZXJpYWxTdWNjZXNzQ2FsbGJhY2socmVzdWx0LCBmaWxlLCBwcmV2aWV3LCBzdWJ0aXRsZXMpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVCdXR0b24oKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHsgLy8gVE9ETzogYSBzcGVjaWZpYyBlcnJvciBjb2RlIHNob3VsZCBiZSBjYXVnaHQgaGVyZSBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBleGNlcHRpb25zXHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHVwbG9hZCB0aGlzIGZpbGU6IHBsZWFzZSBjaGVjayB3aGV0aGVyIHRoZSBmaWxlIGZvcm1hdCBpcyB2YWxpZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5lbmFibGVCdXR0b24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVNYXRlcmlhbFN1Y2Nlc3NDYWxsYmFjayhtYXRlcmlhbDogSU1hdGVyaWFsLCBmaWxlOiBGaWxlLCBwcmV2aWV3OiBGaWxlLCBzdWJ0aXRsZXM6IEZpbGUpIHtcclxuICAgICAgICBsZXQgdXBsb2FkUHJvbWlzZTogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkUHJvbWlzZTxGaWxlPjtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsID0gYW5ndWxhci5jb3B5KG1hdGVyaWFsW1VwbG9hZHNTZXJ2aWNlLk1BVEVSSUFMX0tFWV0pO1xyXG4gICAgICAgIGlmIChwcmV2aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkVXRpbHMuY2FuY2VsTWF0ZXJpYWxQcmV2aWV3cyhtYXRlcmlhbC5pZCk7XHJcbiAgICAgICAgICAgIHVwbG9hZFByb21pc2UgPSB0aGlzLnVwbG9hZChwcmV2aWV3LCB0aGlzLm1hdGVyaWFsLmlkLCBcInByZXZpZXdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdWJ0aXRsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRVdGlscy5jYW5jZWxNYXRlcmlhbFN1YnRpdGxlcyhtYXRlcmlhbC5pZCk7XHJcbiAgICAgICAgICAgIGxldCBzdWJ0aXRsZXNVcGxvYWRVcmw6IHN0cmluZyA9IG1hdGVyaWFsW1VwbG9hZHNTZXJ2aWNlLlNVQlRJVExFU19VUExPQURfVVJMX0tFWV07XHJcbiAgICAgICAgICAgIGxldCBzdWJ0aXRsZXNVcGxvYWRNZXRob2Q6IHN0cmluZyA9IG1hdGVyaWFsW1VwbG9hZHNTZXJ2aWNlLlNVQlRJVExFU19VUExPQURfTUVUSE9EX0tFWV07XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkVXRpbHMudXBsb2FkTWF0ZXJpYWxCeUNodW5rcyhzdWJ0aXRsZXMsIHRoaXMubWF0ZXJpYWwuc3VidGl0bGVzSWQsIHRoaXMubWF0ZXJpYWwuaWQsIHN1YnRpdGxlc1VwbG9hZFVybCwgc3VidGl0bGVzVXBsb2FkTWV0aG9kLCB0aGlzLm1hdGVyaWFsLnRpdGxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRVdGlscy5jYW5jZWxNYXRlcmlhbEZpbGVzKG1hdGVyaWFsLmlkKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVVcGxvYWRVcmw6IHN0cmluZyA9IG1hdGVyaWFsW1VwbG9hZHNTZXJ2aWNlLkZJTEVfVVBMT0FEX1VSTF9LRVldO1xyXG4gICAgICAgICAgICBsZXQgZmlsZVVwbG9hZE1ldGhvZDogc3RyaW5nID0gbWF0ZXJpYWxbVXBsb2Fkc1NlcnZpY2UuRklMRV9VUExPQURfTUVUSE9EX0tFWV07XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkVXRpbHMudXBsb2FkTWF0ZXJpYWxCeUNodW5rcyhmaWxlLCB0aGlzLm1hdGVyaWFsLmZpbGVJZCwgdGhpcy5tYXRlcmlhbC5pZCwgZmlsZVVwbG9hZFVybCwgZmlsZVVwbG9hZE1ldGhvZCwgdGhpcy5tYXRlcmlhbC50aXRsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9nTWF0ZXJpYWxDcmVhdGlvbih0aGlzLm1hdGVyaWFsLmlkKTtcclxuXHJcbiAgICAgICAgaWYgKHVwbG9hZFByb21pc2UpIHtcclxuICAgICAgICAgICAgdXBsb2FkUHJvbWlzZS50aGVuKCgpID0+IHRoaXMucmVkaXJlY3RPckNsZWFyRmllbGRzKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVkaXJlY3RPckNsZWFyRmllbGRzKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnN0b3JhZ2Uubm90LmF2YWlsYWJsZVwiKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTm8gYXZhaWxhYmxlIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IucHJldmlldy50eXBlXCIpIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJbnZhbGlkIGZpbGUgZm9ybWF0LiBQbGVhc2Ugc2VsZWN0IGEgZmlsZSB3aXRoIC5qcGcgb3IgLnBuZyBleHRlbnNpb25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IuZHVwbGljYXRlLnByb2R1Y3QuaWRcIikge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlByb2R1Y3QgSUQgaXMgbm90IHVuaXF1ZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5maWxlLmVtcHR5XCIpIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGUgbWF0ZXJpYWwgY2Fubm90IGJlIHNhdmVkIHdpdGggZW1wdHkgZmlsZS5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2dNYXRlcmlhbENyZWF0aW9uKG1hdGVyaWFsSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aW9uTG9nU2VydmljZS5jcmVhdGUobWF0ZXJpYWxJZCwgUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUwsIEFjdGlvblR5cGUuTUFURVJJQUxfQ1JFQVRJT04pO1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgbWF0ZXJpYWwgaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWRpcmVjdE9yQ2xlYXJGaWVsZHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWxJZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnBlcm1pc3Npb25zICYmIHRoaXMubWF0ZXJpYWwucGVybWlzc2lvbnMudmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLndhdGNoVXJsKHRoaXMubWF0ZXJpYWxJZCkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLmluZGV4VXJsKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhbkZpZWxkcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5hYmxlQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFVwbG9hZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmFibGVCdXR0b25Gb3JMaW5rVXBsb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhbkZpZWxkcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzVmFsaWRpdHlJblBlcnBldHVpdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Vycm9yRmlsZUZvcm1hdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZVVwbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdGVyaWFsLmhhc093blByb3BlcnR5KGtleSkgJiYga2V5ICE9IFwiYnVzaW5lc3NVbml0SWRcIikge1xyXG4gICAgICAgICAgICAgICAgKDxhbnk+IHRoaXMubWF0ZXJpYWwpW2tleV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC5sYW5ndWFnZUlkID0gUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzLmRldGVybWluZVJlbGF0ZWRMYW5ndWFnZUlkKHRoaXMuY3VycmVudFVzZXJMb2NhbGUpO1xyXG4gICAgICAgIHRoaXMubG9hZExhbmd1YWdlTmFtZSgpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkQ29udGVudFR5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMuc2V0RmlsZU9yTGlua1R5cGUoKTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLm93bmVySWQgPSB0aGlzLmN1cnJlbnRVc2VyLmlkO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwub3duZXJOYW1lID0gdGhpcy5jdXJyZW50VXNlci5uYW1lO1xyXG4gICAgICAgIHRoaXMuZmlsZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmZpbGVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuY3JvcHBlZEltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc3VidGl0bGVzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYW5WYWxpZGl0eSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnZhbGlkaXR5VGV4dCA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0UHJldmlldygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHJldmlld1VybCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXdVcmwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3JvcHBlZEltYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JvcHBlZEltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRTdWJ0aXRsZXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VidGl0bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VidGl0bGVzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdWJ0aXRsZXNOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VidGl0bGVzVXJsID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnN1YnRpdGxlc05hbWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzU3VidGl0bGVzVXJsQ2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdG9yZVByZXZpZXdVcmwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuY3JvcHBlZEltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucHJldmlld1VybCA9IHRoaXMubWF0ZXJpYWwucHJldmlld1VybDtcclxuICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXN0b3JlU3VidGl0bGVzVXJsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3VidGl0bGVzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc3VidGl0bGVzVXJsID0gdGhpcy5tYXRlcmlhbC5zdWJ0aXRsZXNVcmw7XHJcbiAgICAgICAgdGhpcy5zdWJ0aXRsZXNOYW1lID0gdGhpcy5tYXRlcmlhbC5zdWJ0aXRsZXNOYW1lO1xyXG4gICAgICAgIHRoaXMuaGFzU3VidGl0bGVzVXJsQ2FuY2VsZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmV1cGxvYWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1VwbG9hZEJ1dHRvbikge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVOYW1lID0gdGhpcy5tYXRlcmlhbC5maWxlTmFtZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVOYW1lID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dVcGxvYWRCdXR0b24gPSAhdGhpcy5zaG93VXBsb2FkQnV0dG9uO1xyXG4gICAgICAgIHRoaXMuZmlsZSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GaWxlVXBsb2FkRWRpdE1vZGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUxpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja0ZpbGVzRm9yRm9ybWF0RXJyb3IoKTtcclxuICAgICAgICAgICAgdGhpcy5maWxlID0gdGhpcy5maWx0ZXJlZEZpbGVMaXN0WzBdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXREdXJhdGlvbih0aGlzLmZpbGUpLnRoZW4oKGR1cmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50eXBlSWQgPSB0aGlzLm1hdGVyaWFsLnR5cGVJZCA9IENvbnRlbnRVdGlscy5maW5kTWF0ZXJpYWxUeXBlQnlGaWxlRXh0ZW5zaW9uKENvbnRlbnRVdGlscy5nZXRGaWxlRXh0KHRoaXMuZmlsZS5uYW1lKSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRQcmV2aWV3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZpbGVzVXBsb2FkQ3JlYXRpb25Nb2RlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUxpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja0ZpbGVzRm9yRm9ybWF0RXJyb3IoKTtcclxuICAgICAgICAgICAgdGhpcy5maWxsTWF0ZXJpYWxMaXN0RnJvbUZpbGVMaXN0KCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmVkRmlsZUxpc3QubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNNdWx0aXBsZVVwbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmVkRmlsZUxpc3QubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc011bHRpcGxlVXBsb2FkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTdWJ0aXRsZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJlZEZpbGVMaXN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZENvbnRlbnRUeXBlID0gMTtcclxuICAgICAgICAgICAgLy8gdGhpcy5tYXRlcmlhbC50eXBlSWQgPSBNYXRlcmlhbFR5cGVFbnVtLkFVRElPOyAvL2RlZmF1bHQgdmFsdWVcclxuICAgICAgICAgICAgdGhpcy5zaG93VXBsb2FkQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRGaWxlTGlzdC5tYXAoKGZpbGUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldER1cmF0aW9uKGZpbGUpLnRoZW4oKGR1cmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbExpc3RbaW5kZXhdLmR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC50aXRsZSA9IHRoaXMubWF0ZXJpYWwudGl0bGUgfHwgdGhpcy5tYXRlcmlhbExpc3RbMF0udGl0bGU7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudHlwZUlkID0gdGhpcy5tYXRlcmlhbExpc3RbMF0udHlwZUlkO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnR5cGVLZXkgPSB0aGlzLm1hdGVyaWFsTGlzdFswXS50eXBlS2V5O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbC50eXBlS2V5ICYmICh0aGlzLm1hdGVyaWFsLnR5cGVLZXkgPT09IFwiVklERU9cIiB8fCB0aGlzLm1hdGVyaWFsLnR5cGVLZXkgPT09IFwiQVVESU9cIikpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuaXNSZXdpbmRBbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrRmlsZXNGb3JGb3JtYXRFcnJvcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5maWxlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNFcnJvckZpbGVGb3JtYXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRGaWxlTGlzdCA9IHRoaXMuZmlsZUxpc3QuZmlsdGVyKGZpbGUgPT4gQ29udGVudFV0aWxzLk1BUF9GSUxFX0VYVEVOU0lPTlNfVE9fTUFURVJJQUxfVFlQRVNbQ29udGVudFV0aWxzLmdldEZpbGVFeHQoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkpXSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVMaXN0LmZpbHRlcihmaWxlID0+ICFDb250ZW50VXRpbHMuTUFQX0ZJTEVfRVhURU5TSU9OU19UT19NQVRFUklBTF9UWVBFU1tDb250ZW50VXRpbHMuZ2V0RmlsZUV4dChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSldKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3JGaWxlRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNFcnJvckZpbGVGb3JtYXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRGaWxlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlQnV0dG9uKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbGxNYXRlcmlhbExpc3RGcm9tRmlsZUxpc3QoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRGaWxlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxMaXN0ID0gW107XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50TWF0ZXJpYWw6IElNYXRlcmlhbDtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEZpbGVMaXN0LmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50TWF0ZXJpYWwgPSB7fTtcclxuICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weSh0aGlzLm1hdGVyaWFsLCBjdXJyZW50TWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudE1hdGVyaWFsLnRpdGxlID0gY3VycmVudE1hdGVyaWFsLnRpdGxlIHx8IENvbnRlbnRVdGlscy5nZXRGaWxlV2l0aG91dEV4dChmaWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudE1hdGVyaWFsLnR5cGVJZCA9IENvbnRlbnRVdGlscy5maW5kTWF0ZXJpYWxUeXBlQnlGaWxlRXh0ZW5zaW9uKENvbnRlbnRVdGlscy5nZXRGaWxlRXh0KGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50TWF0ZXJpYWwudmFsaWRpdHkgPSBNb21lbnQudGV4dFRvSmF2YURhdGUoY3VycmVudE1hdGVyaWFsLnZhbGlkaXR5VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50TWF0ZXJpYWwudHlwZUtleSA9IE1hdGVyaWFsVHlwZUVudW1bY3VycmVudE1hdGVyaWFsLnR5cGVJZF07XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50TWF0ZXJpYWwuZmlsZU5hbWUgPSBDb250ZW50VXRpbHMuZ2V0RmlsZVdpdGhvdXRFeHQoZmlsZS5uYW1lKSB8fCBjdXJyZW50TWF0ZXJpYWwudGl0bGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsTGlzdC5wdXNoKGN1cnJlbnRNYXRlcmlhbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZU1hdGVyaWFsRmllbGRzQmVmb3JlVXBsb2FkKHVwbG9hZE1hdGVyaWFsOiBJTWF0ZXJpYWwsIGZpbGU6IEZpbGUpOiB2b2lkIHtcclxuICAgICAgICBsZXQgbWF0ZXJpYWwgPSBhbmd1bGFyLmNvcHkodXBsb2FkTWF0ZXJpYWwpO1xyXG4gICAgICAgIGFuZ3VsYXIuY29weSh0aGlzLm1hdGVyaWFsLCB1cGxvYWRNYXRlcmlhbCk7XHJcbiAgICAgICAgdXBsb2FkTWF0ZXJpYWwudGl0bGUgPSBtYXRlcmlhbC50aXRsZSB8fCBDb250ZW50VXRpbHMuZ2V0RmlsZVdpdGhvdXRFeHQoZmlsZS5uYW1lKTtcclxuICAgICAgICB1cGxvYWRNYXRlcmlhbC50eXBlSWQgPSBtYXRlcmlhbC50eXBlSWQ7XHJcbiAgICAgICAgdXBsb2FkTWF0ZXJpYWwudmFsaWRpdHkgPSBtYXRlcmlhbC52YWxpZGl0eTtcclxuICAgICAgICB1cGxvYWRNYXRlcmlhbC50eXBlS2V5ID0gbWF0ZXJpYWwudHlwZUtleTtcclxuICAgICAgICB1cGxvYWRNYXRlcmlhbC5kdXJhdGlvbiA9IG1hdGVyaWFsLmR1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRGaWxlT3JMaW5rVHlwZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRXJyb3JGaWxlRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMudXBsb2FkQ29udGVudFR5cGUgPT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnR5cGVJZCA9IE1hdGVyaWFsVHlwZS5BVURJTzsgLy9kZWZhdWx0IHZhbHVlXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1VwbG9hZEJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50eXBlSWQgPSBNYXRlcmlhbFR5cGUuTElOSztcclxuICAgICAgICAgICAgdGhpcy5maWxlTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd1ByZXZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICQoXCIjcHJldmlld0RpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoXCIjcHJldmlld0RpYWxvZ1wiKS5vbignaGlkZS5icy5tb2RhbCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgndmlkZW8nKS50cmlnZ2VyKCdwYXVzZScpO1xyXG4gICAgICAgICAgICAkKCdhdWRpbycpLnRyaWdnZXIoJ3BhdXNlJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaGFzRmlsZSA9ICEhdGhpcy5maWxlO1xyXG4gICAgICAgIHRoaXMuaXNNYXRlcmlhbEZpbGVTdGF0dXNSZWFkeSA9IHRoaXMubWF0ZXJpYWxJZCAmJiB0aGlzLm1hdGVyaWFsLmZpbGVTdGF0dXMgPT0gJ1JFQURZJztcclxuICAgICAgICB0aGlzLmlzQXVkaW9PclZpZGVvID0gdGhpcy5tYXRlcmlhbC50eXBlS2V5ID09PSAnVklERU8nIHx8IHRoaXMubWF0ZXJpYWwudHlwZUtleSA9PT0gJ0FVRElPJztcclxuICAgICAgICB0aGlzLmlzUGhvdG8gPSB0aGlzLm1hdGVyaWFsLnR5cGVLZXkgPT09ICdQSE9UTyc7XHJcbiAgICAgICAgdGhpcy5pc1lvdXR1YmUgPSB0aGlzLnR5cGVJZCA9PT0gTWF0ZXJpYWxUeXBlLkxJTksgJiYgT2JqZWN0VHlwZVV0aWxzLmlzWW91dHViZVVybCh0aGlzLm1hdGVyaWFsLmxpbmspO1xyXG4gICAgICAgIHRoaXMuaXNWaW1lbyA9IHRoaXMudHlwZUlkID09PSBNYXRlcmlhbFR5cGUuTElOSyAmJiBPYmplY3RUeXBlVXRpbHMuaXNWaW1lb1VybCh0aGlzLm1hdGVyaWFsLmxpbmspO1xyXG4gICAgICAgIGlmICh0aGlzLmlzVmltZW8pIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluayA9ICdodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vJyArIE9iamVjdFR5cGVVdGlscy5leHRyYWN0VmltZW9VcmwodGhpcy5tYXRlcmlhbC5saW5rKTtcclxuICAgICAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmcmFtZS12aW1lbycpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGxpbmspO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy55b3V0dWJlTXVsdGltZWRpYVNvdXJjZXMgPSBbe1xyXG4gICAgICAgICAgICBzcmM6IHRoaXMubWF0ZXJpYWwubGluayxcclxuICAgICAgICAgICAgdHlwZTogXCJ2aWRlby95b3V0dWJlXCJcclxuICAgICAgICB9XTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RvcFZpZGVvQW5kQXVkaW9PbkhpZGVQcmV2aWV3KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNNYXRlcmlhbEZpbGVTdGF0dXNSZWFkeSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNBdWRpb09yVmlkZW8gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzUGhvdG8gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzWW91dHViZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAkKFwiI3ByZXZpZXdEaWFsb2dcIikub24oJ2hpZGRlbi5icy5tb2RhbCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgndmlkZW8nKS50cmlnZ2VyKCdwYXVzZScpO1xyXG4gICAgICAgICAgICAkKCdhdWRpbycpLnRyaWdnZXIoJ3BhdXNlJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1hdGVyaWFsU3ViamVjdENoYW5nZUNhbGxiYWNrID0gKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc3ViamVjdE5hbWUgPSBuYW1lO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxMYW5ndWFnZUNoYW5nZUNhbGxiYWNrID0gKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwubGFuZ3VhZ2VOYW1lID0gbmFtZTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIG1hdGVyaWFsT3duZXJDaGFuZ2VDYWxsYmFjayA9IChzZWxlY3RlZDogYm9vbGVhbiwgbmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC5vd25lck5hbWUgPSBzZWxlY3RlZCA/IG5hbWUgOiBudWxsO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgbXVsdGltZWRpYUVycm9yQ2FsbGJhY2soY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElNYXRlcmlhbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRNYXRlcmlhbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNYXRlcmlhbFZhbGlkaXR5KCk6IG51bWJlciB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC52YWxpZGl0eVRleHQgPyB0aGlzLm1hdGVyaWFsLnZhbGlkaXR5ID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMubWF0ZXJpYWwudmFsaWRpdHlUZXh0KVxyXG4gICAgICAgICAgICA6IHRoaXMubWF0ZXJpYWwudmFsaWRpdHkgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsLnZhbGlkaXR5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJ1c2luZXNzVW5pdENoYW5nZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubWF0ZXJpYWxJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwub3duZXJJZCA9IHRoaXMuY3VycmVudFVzZXIuaWQ7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwub3duZXJOYW1lID0gdGhpcy5jdXJyZW50VXNlci5uYW1lO1xyXG4gICAgICAgICAgICB0aGlzLiR0aW1lb3V0KGEgPT4gdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWUsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QnVzaW5lc3NVbml0U2VsZWN0b3JWaXNpYmxlKCkge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0VmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE93bmVyc1VybChidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgYmFzZVVybDogc3RyaW5nID0gXCIvYXBpL3VzZXJTZWxlY3Rvci91c2Vyc1wiO1xyXG4gICAgICAgIHJldHVybiBidXNpbmVzc1VuaXRJZFxyXG4gICAgICAgICAgICA/IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoYmFzZVVybCArIFwiP2J1c2luZXNzVW5pdElkPTpidXNpbmVzc1VuaXRJZFwiKVxyXG4gICAgICAgICAgICAgICAgLndpdGgoXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgICAgICAgICAuYnVpbGQoKVxyXG4gICAgICAgICAgICA6IGJhc2VVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGxvYWQoZmlsZTogRmlsZSwgbWF0ZXJpYWxJZDogbnVtYmVyLCBmaWxlVHlwZTogc3RyaW5nKTogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkUHJvbWlzZTxGaWxlPiB7XHJcbiAgICAgICAgbGV0IHVybEJ1aWxkZXIgPSB0aGlzLnVybC5iYXNlKFwiL2FwaS9tYXRlcmlhbHMvdXBsb2FkP21hdGVyaWFsSWQ9Om1hdGVyaWFsSWQmZmlsZVR5cGU9OmZpbGVUeXBlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjptYXRlcmlhbElkXCIsIG1hdGVyaWFsSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpmaWxlVHlwZVwiLCBmaWxlVHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVwbG9hZGVyLnVwbG9hZCh7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBhbmd1bGFyLmNvcHkodXJsQnVpbGRlcilcclxuICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0Nyb3BwZXJNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAkKFwiI2ltYWdlQ3JvcHBlck1vZGFsXCIpLm1vZGFsKFwic2hvd1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0Nyb3BwZXJNb2RhbEFmdGVyTG9hZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3ICE9IHVuZGVmaW5lZCB8fCB0aGlzLnByZXZpZXdVcmwgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZU1haW5Db250ZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgIT0gdW5kZWZpbmVkIHx8IHRoaXMucHJldmlld1VybCAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgID8gdGhpcy5zaG93Q3JvcHBlck1vZGFsKClcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zaG93Q3JvcHBlck1vZGFsQWZ0ZXJMb2FkKClcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREdXJhdGlvbihmaWxlKTogSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRxKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ2aWRlb1wiKTtcclxuICAgICAgICAgICAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzb3VyY2VcIik7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2Uuc3JjID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgdmlkZW8ucHJlbG9hZCA9IFwibWV0YWRhdGFcIjtcclxuICAgICAgICAgICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKHNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICB2aWRlby5vbmxvYWRlZG1ldGFkYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmlkZW8uZHVyYXRpb24pXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRJbnRybyhpbnRyb051bWJlcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnRyb1NlcnZpY2Uuc3RhcnRFZGl0TWF0ZXJpYWxQYWdlSW50cm8oaW50cm9OdW1iZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVhY3RpdmF0ZU1haW5Db250ZW50KCkge1xyXG4gICAgICAgIGxldCBtYWluRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIFwiI21hdGVyaWFsLXVwbG9hZC1kaXNhYmxlXCIpO1xyXG4gICAgICAgIG1haW5FbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZU1haW5Db250ZW50KCkge1xyXG4gICAgICAgIGxldCBtYWluRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIFwiI21hdGVyaWFsLXVwbG9hZC1kaXNhYmxlXCIpO1xyXG4gICAgICAgIG1haW5FbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge01hdGVyaWFsc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbFNlcnZpY2V9IGZyb20gXCIuL01hdGVyaWFsU2VydmljZVwiO1xyXG5pbXBvcnQge0lNYXRlcmlhbH0gZnJvbSBcIi4vbW9kZWxzL0lNYXRlcmlhbFwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi8uLi9JU2VsZWN0YWJsZVwiO1xyXG5cclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtPYmplY3RUeXBlVXRpbHN9IGZyb20gXCIuLy4uL3V0aWxzL09iamVjdFR5cGVVdGlsc1wiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SU11bHRpbWVkaWFTb3VyY2V9IGZyb20gXCIuLy4uL2NvbXBvbmVudHMvbW9kZWxzL0lNdWx0aW1lZGlhXCI7XHJcbmltcG9ydCB7UGVyc29uYWxTZXJ2aWNlfSBmcm9tIFwiLi8uLi9wZXJzb25hbC9QZXJzb25hbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTb2NpYWxTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zb2NpYWwvU29jaWFsU2VydmljZVwiO1xyXG5pbXBvcnQge0lHcmlkTW9kZWwsIEdyaWRNb2RlbCwgSUdyaWRMb2FkaW5nTGlzdGVuZXJ9IGZyb20gXCIuLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4vLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ29tbWVudH0gZnJvbSBcIi4vLi4vc29jaWFsL21vZGVscy9JQ29tbWVudFwiO1xyXG5pbXBvcnQge0lDb21tZW50SW5IaWVyYXJjaHl9IGZyb20gXCIuLy4uL3NvY2lhbC9tb2RlbHMvSUNvbW1lbnRJbkhpZXJhcmNoeVwiO1xyXG5pbXBvcnQge0lUcmVlRWxlbWVudEluZm99IGZyb20gXCIuLy4uL3RyZWUvbW9kZWxzL1RyZWVFbGVtZW50SW5mb1wiO1xyXG5pbXBvcnQge1RyZWVFbGVtZW50c0luZm9GaWxsZXJ9IGZyb20gXCIuLy4uL3RyZWUvVHJlZUVsZW1lbnRzSW5mb0ZpbGxlclwiO1xyXG5pbXBvcnQge0FjdGlvbkxvZ1NlcnZpY2V9IGZyb20gXCIuLy4uL3N0YXRpc3RpY3MvQWN0aW9uTG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0FjdGlvblR5cGV9IGZyb20gXCIuLy4uL3N0YXRpc3RpY3MvbW9kZWxzL0FjdGlvblR5cGVcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4vLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtGaW5hbmNlc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9GaW5hbmNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi8uLi9jb3Vyc2VzL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi8uLi9jb3Vyc2VzL21vZGVscy9JQ291cnNlXCI7XHJcbmltcG9ydCB7UGxheWxpc3RTZXJ2aWNlfSBmcm9tIFwiLi9QbGF5bGlzdFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUGxheWxpc3R9IGZyb20gXCIuL21vZGVscy9JUGxheWxpc3RcIjtcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5pbXBvcnQge1VwbG9hZFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvVXBsb2FkVXRpbHNcIjtcclxuaW1wb3J0IHtNYXRlcmlhbFR5cGVLZXlFbnVtfSBmcm9tIFwiLi9tb2RlbHMvTWF0ZXJpYWxUeXBlXCI7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZGlhbG9nL0RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtQdXJjaGFzZVNlcnZpY2V9IGZyb20gXCIuLi9maW5hbmNlcy9QdXJjaGFzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdH0gZnJvbSBcIi4uL2ZpbmFuY2VzL21vZGVscy9JUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdFwiO1xyXG5pbXBvcnQge0lNYXRlcmlhbFBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSU1hdGVyaWFsUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtRdWl6U2VydmljZX0gZnJvbSBcIi4uL3F1aXp6ZXMvUXVpelNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUXVpen0gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6XCI7XHJcbmltcG9ydCBzZXRUaW1lID0ga2VuZG8uZGF0ZS5zZXRUaW1lO1xyXG5cclxuaW50ZXJmYWNlIElDb21tZW50SW5IaWVyYXJjaHlFeHRlbmRlZCBleHRlbmRzIElUcmVlRWxlbWVudEluZm88SUNvbW1lbnRJbkhpZXJhcmNoeUV4dGVuZGVkPiwgSUNvbW1lbnRJbkhpZXJhcmNoeSB7XHJcbiAgICByZXBseT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbENvbnRyb2xsZXIgaW1wbGVtZW50cyBJR3JpZExvYWRpbmdMaXN0ZW5lciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcIm1hdGVyaWFscy5NYXRlcmlhbENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIG1hdGVyaWFsOiBJTWF0ZXJpYWwgPSB7fTtcclxuICAgIHB1YmxpYyBtdWx0aW1lZGlhU291cmNlczogSU11bHRpbWVkaWFTb3VyY2VbXTtcclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcmVsYXRlZE1hdGVyaWFsczogSU1hdGVyaWFsW107XHJcbiAgICBwdWJsaWMgY29tbWVudHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUNvbW1lbnRJbkhpZXJhcmNoeUV4dGVuZGVkPjtcclxuICAgIHB1YmxpYyBuZXdDb21tZW50OiBJQ29tbWVudDtcclxuICAgIHB1YmxpYyBuZXdSZXBseUNvbW1lbnQ6IElDb21tZW50O1xyXG4gICAgcHVibGljIGFuY2hvckNvbXBsZXRlOiBib29sZWFuO1xyXG4gICAgcHVibGljIGNvbW1lbnRzQ291bnQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIG1hdGVyaWFsUGVybWlzc2lvbnM6IElNYXRlcmlhbFBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGRpc2FibGVkUmVtb3ZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGlzTWF0ZXJpYWxFbXB0eTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc01hdGVyaWFsTm90UmVhZHk6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNWaWV3QWxsb3dlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBtYXRlcmlhbFR5cGU6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgcmVsYXRlZE1hdGVyaWFsc1ZpZXdMaW1pdDogbnVtYmVyO1xyXG4gICAgcHVibGljIHJlbGF0ZWRNYXRlcmlhbHNDdXJyZW50TGltaXQ6IG51bWJlcjtcclxuXHJcbiAgICBwcml2YXRlIGxvYWRpbmdEaWFsb2dJZDogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJGFuY2hvclNjcm9sbFwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgTWF0ZXJpYWxzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgRmluYW5jZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBNYXRlcmlhbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTb2NpYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBBY3Rpb25Mb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBsYXlsaXN0U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVwbG9hZFV0aWxzLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFB1cmNoYXNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFF1aXpTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkYW5jaG9yU2Nyb2xsOiBhbmd1bGFyLklBbmNob3JTY3JvbGxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBmaW5hbmNlUm91dGVyOiBGaW5hbmNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBtYXRlcmlhbFNlcnZpY2U6IE1hdGVyaWFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBzb2NpYWxTZXJ2aWNlOiBTb2NpYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGF1dGhSZWRpcmVjdDogQXV0aFJlZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGFjdGlvbkxvZ1NlcnZpY2U6IEFjdGlvbkxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBsYXlsaXN0U2VydmljZTogUGxheWxpc3RTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRVdGlsczogVXBsb2FkVXRpbHMsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnJhbmRpbmdTZXJ2aWNlOiBDdXN0b21CcmFuZGluZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHB1cmNoYXNlU2VydmljZTogUHVyY2hhc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6U2VydmljZTogUXVpelNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsSWQgPSAkcm91dGVQYXJhbXNbTWF0ZXJpYWxzUm91dGVyLk1BVEVSSUFMX0lEX1BBUkFNXTtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgdGhpcy5hbmNob3JDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVsYXRlZE1hdGVyaWFsc1ZpZXdMaW1pdCA9IDM7XHJcblxyXG4gICAgICAgIGxldCBsb2FkUGVybWlzc2lvbnNQcm9taXNlcyA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICBsZXQgc3lzdGVtUGVybWlzc2lvbnNQcm9taXNlID0gdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxldCBtYXRlcmlhbFBlcm1pc3Npb25zUHJvbWlzZSA9IHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0TWF0ZXJpYWxQZXJtaXNzaW9ucyhTdHJpbmcodGhpcy5tYXRlcmlhbElkKSkudGhlbihtYXRlcmlhbFBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxQZXJtaXNzaW9ucyA9IG1hdGVyaWFsUGVybWlzc2lvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbG9hZFBlcm1pc3Npb25zUHJvbWlzZXMucHVzaChzeXN0ZW1QZXJtaXNzaW9uc1Byb21pc2UpO1xyXG4gICAgICAgICAgICBsb2FkUGVybWlzc2lvbnNQcm9taXNlcy5wdXNoKG1hdGVyaWFsUGVybWlzc2lvbnNQcm9taXNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKSkge1xyXG4gICAgICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkVEVUNBVElPTl9NQVRFUklBTFNfTUVOVV9LRVkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy4kcS5hbGwobG9hZFBlcm1pc3Npb25zUHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy52aWV3TWF0ZXJpYWxDb21tZW50IHx8IHRoaXMubWF0ZXJpYWxQZXJtaXNzaW9ucy5hZGRDb21tZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUNvbW1lbnRJbkhpZXJhcmNoeUV4dGVuZGVkPigkaHR0cCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9zb2NpYWwvY29tbWVudHM/b2JqZWN0SWQ9Om9iamVjdElkJm9iamVjdFR5cGU9Om9iamVjdFR5cGVcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdElkXCIsIHRoaXMubWF0ZXJpYWxJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdFR5cGVcIiwgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUxdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZENvbW1lbnRzQ291bnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRNYXRlcmlhbCh0aGlzLm1hdGVyaWFsSWQpO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxTZXJ2aWNlLmdldFJlbGF0ZWRNYXRlcmlhbHModGhpcy5tYXRlcmlhbElkKS50aGVuKHJlc3VsdFJlbGF0ZWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlbGF0ZWRNYXRlcmlhbHMgPSByZXN1bHRSZWxhdGVkO1xyXG4gICAgICAgICAgICB0aGlzLnJlbGF0ZWRNYXRlcmlhbHMubGVuZ3RoIDw9IHRoaXMucmVsYXRlZE1hdGVyaWFsc1ZpZXdMaW1pdCA/XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0ZWRNYXRlcmlhbHNDdXJyZW50TGltaXQgPSB0aGlzLnJlbGF0ZWRNYXRlcmlhbHMubGVuZ3RoIDpcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRlZE1hdGVyaWFsc0N1cnJlbnRMaW1pdCA9IHRoaXMucmVsYXRlZE1hdGVyaWFsc1ZpZXdMaW1pdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgICAgIC8vZG8gbm90aGluZ1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmRMb2FkaW5nKCkge1xyXG4gICAgICAgIFRyZWVFbGVtZW50c0luZm9GaWxsZXIuZmlsbEhpZXJhcmNoeUluZm9XaXRoTWF4TGV2ZWwodGhpcy5jb21tZW50c0dyaWRNb2RlbC5lbnRyaWVzLCBOdW1iZXIuTUFYX1ZBTFVFKTtcclxuICAgICAgICB0aGlzLiR0aW1lb3V0KCgpPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbEFuY2hvcigpO1xyXG4gICAgICAgIH0sIDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2Nyb2xsQW5jaG9yKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5hbmNob3JDb21wbGV0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLiRhbmNob3JTY3JvbGwodGhpcy4kbG9jYXRpb24uaGFzaCgpKTtcclxuICAgICAgICAgICAgdGhpcy5hbmNob3JDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRGaWxlVHlwZU5hbWUoZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3ZpZGVvJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcInZpZGVvXCI7XHJcbiAgICAgICAgICAgIGNhc2UgJ2F1ZGlvJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImF1ZGlvXCI7XHJcbiAgICAgICAgICAgIGNhc2UgJ3ByZXNlbnRhdGlvbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcmVzZW50YXRpb25cIjtcclxuICAgICAgICAgICAgY2FzZSAndGV4dCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ0ZXh0IGZpbGVcIjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcInZpZGVvXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1lvdXR1YmVMaW5rKG1hdGVyaWFsOiBJTWF0ZXJpYWwpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWwudHlwZUlkID09IDMgJiYgT2JqZWN0VHlwZVV0aWxzLmlzWW91dHViZVVybChtYXRlcmlhbC5saW5rKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaW1lb0xpbmsobWF0ZXJpYWw6IElNYXRlcmlhbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbC50eXBlSWQgPT0gMyAmJiBPYmplY3RUeXBlVXRpbHMuaXNWaW1lb1VybChtYXRlcmlhbC5saW5rKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNBd3NMaW5rKG1hdGVyaWFsOiBJTWF0ZXJpYWwpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWwudHlwZUlkID09IDMgJiYgT2JqZWN0VHlwZVV0aWxzLmlzQXdzVXJsKG1hdGVyaWFsLmxpbmspO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkTWF0ZXJpYWwobWF0ZXJpYWxJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJTWF0ZXJpYWw+IHtcclxuICAgICAgICB0aGlzLm5ld0NvbW1lbnQgPSB7dGV4dDogXCJcIn07XHJcbiAgICAgICAgdGhpcy5uZXdSZXBseUNvbW1lbnQgPSB7dGV4dDogXCJcIn07XHJcblxyXG4gICAgICAgIGxldCBwcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPElNYXRlcmlhbD4gPSB0aGlzLm1hdGVyaWFsU2VydmljZS5nZXQobWF0ZXJpYWxJZCk7XHJcbiAgICAgICAgcHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzWW91dHViZUxpbmsodGhpcy5tYXRlcmlhbCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxUeXBlID0gJ1lPVVRVQkUnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNWaW1lb0xpbmsodGhpcy5tYXRlcmlhbCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxUeXBlID0gJ1ZJTUVPJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxUeXBlID0gdGhpcy5tYXRlcmlhbC50eXBlS2V5O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWF0ZXJpYWxFbXB0eSA9IHRoaXMubWF0ZXJpYWwuaWQgJiYgdGhpcy5tYXRlcmlhbC50eXBlS2V5ICE9PSBNYXRlcmlhbFR5cGVLZXlFbnVtW01hdGVyaWFsVHlwZUtleUVudW0uTElOS10gJiZcclxuICAgICAgICAgICAgICAgICghdGhpcy5tYXRlcmlhbC5maWxlU3RhdHVzIHx8IHRoaXMubWF0ZXJpYWwuZmlsZVN0YXR1cyA9PT0gJ0VNUFRZJyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNNYXRlcmlhbE5vdFJlYWR5ID0gIXRoaXMuaXNNYXRlcmlhbEVtcHR5ICYmIHRoaXMubWF0ZXJpYWwuaWQgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudHlwZUtleSAhPT0gTWF0ZXJpYWxUeXBlS2V5RW51bVtNYXRlcmlhbFR5cGVLZXlFbnVtLkxJTktdICYmIHRoaXMubWF0ZXJpYWwuZmlsZVN0YXR1c1xyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5tYXRlcmlhbC5maWxlU3RhdHVzICE9PSAnRU1QVFknICYmIHRoaXMubWF0ZXJpYWwuZmlsZVN0YXR1cyAhPT0gJ1JFQURZJztcclxuICAgICAgICAgICAgdGhpcy5pc1ZpZXdBbGxvd2VkID0gdGhpcy5tYXRlcmlhbC5wZXJtaXNzaW9ucy52aWV3ICYmICF0aGlzLmlzTWF0ZXJpYWxFbXB0eSAmJiAhdGhpcy5pc01hdGVyaWFsTm90UmVhZHk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm11bHRpbWVkaWFTb3VyY2VzID0gW3tcclxuICAgICAgICAgICAgICAgIHNyYzogdGhpcy5pc1lvdXR1YmVMaW5rKHRoaXMubWF0ZXJpYWwpIHx8IHRoaXMuaXNBd3NMaW5rKHRoaXMubWF0ZXJpYWwpID8gdGhpcy5tYXRlcmlhbC5saW5rIDogKHRoaXMubWF0ZXJpYWwuZG93bmxvYWRVcmwgfHwgJycpLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy5pc1lvdXR1YmVMaW5rKHRoaXMubWF0ZXJpYWwpID8gXCJ2aWRlby95b3V0dWJlXCIgOiAodGhpcy5pc0F3c0xpbmsodGhpcy5tYXRlcmlhbCkgPyBcInZpZGVvL21wNFwiIDp0aGlzLm1hdGVyaWFsLmNvbnRlbnRUeXBlKVxyXG4gICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNBd3NMaW5rKHRoaXMubWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsVHlwZSA9IFwiVklERU9cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbC5wZXJtaXNzaW9ucy52aWV3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkxvZ1NlcnZpY2UuY3JlYXRlKHRoaXMubWF0ZXJpYWwuaWQsIFJlZmVyZW5jZWRPYmplY3RUeXBlLk1BVEVSSUFMLCBBY3Rpb25UeXBlLk1BVEVSSUFMX1ZJRVcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm1hdGVyaWFsLmlzLm5vdC5hdmFpbGFibGVcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJBY2Nlc3MgdG8gdGhlIG1hdGVyaWFsIGlzIHJlc3RyaWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2F2ZWRVcmw6IHN0cmluZyA9IHRoaXMuJGxvY2F0aW9uLnVybCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNhdmVkVXJsID09PSB0aGlzLiRsb2NhdGlvbi51cmwoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdvQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIDUwMDApOyAvLyBUT0RPOiBwZWVyIHJldmlld1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBtYXRlcmlhbCBkZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCLigJhcIiArICh0aGlzLm1hdGVyaWFsLnRpdGxlIHx8ICcnKSArIFwi4oCZXCJcclxuICAgICAgICAgICAgKS51cGRhdGUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRDb21tZW50c0NvdW50KCkge1xyXG4gICAgICAgIHRoaXMuc29jaWFsU2VydmljZS5nZXRDb21tZW50c0NvdW50KHRoaXMubWF0ZXJpYWxJZCwgUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUwpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb21tZW50c0NvdW50ID0gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRUb0Zhdm9yaXRlcygpIHtcclxuICAgICAgICB0aGlzLnBlcnNvbmFsU2VydmljZS5hZGRUb0Zhdm9yaXRlcyh0aGlzLm1hdGVyaWFsSWQsIHRoaXMubWF0ZXJpYWwudmVyc2lvbiwgUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUwpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBtYXRlcmlhbCBoYXMgYmVlbiBhZGRlZCB0byB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5mYXZvcml0ZSA9IHRydWU7XHJcbiAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5hbHJlYWR5LmluLmZhdm9yaXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBtYXRlcmlhbCBpcyBhbHJlYWR5IGluIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmlzLmNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYW5vdGhlciB1c2VyOiBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUZyb21GYXZvcml0ZXMoKSB7XHJcbiAgICAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UucmVtb3ZlRnJvbUZhdm9yaXRlcyh0aGlzLm1hdGVyaWFsSWQsIHRoaXMubWF0ZXJpYWwudmVyc2lvbiwgUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUwpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBtYXRlcmlhbCBoYXMgYmVlbiByZW1vdmVkIGZyb20geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZmF2b3JpdGUgPSBmYWxzZTtcclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0Lm5vdC5pbi5mYXZvcml0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byByZW1vdmUgZnJvbSBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuaXMuY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgZGF0YSBoYXMgYmVlbiBtb2RpZmllZCBieSBhbm90aGVyIHVzZXI6IHBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGFuZCB0cnkgYWdhaW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlTWF0ZXJpYWxSYXRpbmcoaXNMaWtlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5yZWRpcmVjdFRvTG9nT24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNvY2lhbFNlcnZpY2UuY2hhbmdlT2JqZWN0UmF0aW5nKHRoaXMubWF0ZXJpYWxJZCwgdGhpcy5tYXRlcmlhbC52ZXJzaW9uLCBSZWZlcmVuY2VkT2JqZWN0VHlwZS5NQVRFUklBTCwgaXNMaWtlKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmxpa2VzQ291bnQgPSByZXN1bHQubGlrZXNDb3VudDtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGlzbGlrZXNDb3VudCA9IHJlc3VsdC5kaXNsaWtlc0NvdW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTGlrZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwubGlrZWQgPSAhdGhpcy5tYXRlcmlhbC5saWtlZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmRpc2xpa2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzTGlrZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGlzbGlrZWQgPSAhdGhpcy5tYXRlcmlhbC5kaXNsaWtlZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmxpa2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmlzLmNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGFub3RoZXIgdXNlcjogcGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYW5kIHRyeSBhZ2FpblwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtdWx0aW1lZGlhRXJyb3JDYWxsYmFjayhjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SU1hdGVyaWFsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZE1hdGVyaWFsKHRoaXMubWF0ZXJpYWxJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZENvbW1lbnQocmVwbHk6IGJvb2xlYW4sIHBhcmVudElkOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAocmVwbHkpIHtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXBseUNvbW1lbnQucGFyZW50SWQgPSBwYXJlbnRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zb2NpYWxTZXJ2aWNlLmFkZENvbW1lbnQodGhpcy5tYXRlcmlhbElkLCB0aGlzLm1hdGVyaWFsLnZlcnNpb24sIFJlZmVyZW5jZWRPYmplY3RUeXBlLk1BVEVSSUFMLCByZXBseSA/IHRoaXMubmV3UmVwbHlDb21tZW50IDogdGhpcy5uZXdDb21tZW50KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJDb21tZW50IGhhcyBiZWVuIGFkZGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1lbnRzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm5ld0NvbW1lbnQudGV4dCA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmVwbHlDb21tZW50LnRleHQgPSBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLm5ld1JlcGx5Q29tbWVudC5wYXJlbnRJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZENvbW1lbnRzQ291bnQoKTtcclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmlzLmNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYW5vdGhlciB1c2VyOiBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFuQ29tbWVudCgpIHtcclxuICAgICAgICB0aGlzLm5ld0NvbW1lbnQudGV4dCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5uZXdSZXBseUNvbW1lbnQudGV4dCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5uZXdSZXBseUNvbW1lbnQucGFyZW50SWQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXBseUNvbW1lbnQoY29tbWVudElkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmNvbW1lbnRzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaCgoYzogSUNvbW1lbnRJbkhpZXJhcmNoeUV4dGVuZGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGMucmVwbHkgPSBjLmlkID09IGNvbW1lbnRJZDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdE1hdGVyaWFsKG1hdGVyaWFsOiBJTWF0ZXJpYWwpIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5tYXRlcmlhbHNSb3V0ZXIudXBkYXRlVXJsKG1hdGVyaWFsLmlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZU1hdGVyaWFsKG1hdGVyaWFsOiBJTWF0ZXJpYWwpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkUmVtb3ZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdEaWFsb2dJZCA9IHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtQW5kUmV0dXJuRGlhbG9nSWQoXCJUaGUgc3lzdGVtIHNlYXJjaGVzIGZvciBjb25uZWN0aW9ucyB3aXRoIG90aGVyIG9iamVjdHMuIFBsZWFzZSB3YWl0LlwiLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmdcIixcclxuICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgaGlkZUNvbmZpcm1CdXR0b246IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wdXJjaGFzZVNlcnZpY2UuZ2V0UmVmZXJlbmNlZE9iamVjdFByb2R1Y3RzTGlzdChtYXRlcmlhbC5pZCwgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUxdKS50aGVuKHByb2R1Y3RzID0+IHtcclxuICAgICAgICAgICAgaWYgKHByb2R1Y3RzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZmluZENvdXJzZXNCeU1hdGVyaWFsKG1hdGVyaWFsLmlkKS50aGVuKGNvdXJzZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3Vyc2VzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpelNlcnZpY2UuZmluZFF1aXp6ZXNCeU1hdGVyaWFsKG1hdGVyaWFsLmlkKS50aGVuKHF1aXp6ZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1aXp6ZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsU2VydmljZS5pc01hdGVyaWFsUHVyY2hhc2VkKG1hdGVyaWFsLmlkKS50aGVuKHB1cmNoYXNlZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHVyY2hhc2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXlsaXN0U2VydmljZS5maW5kUGxheWxpc3RzQnlNYXRlcmlhbChtYXRlcmlhbC5pZCkudGhlbihwbGF5bGlzdHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRGdW5jOiAocGxheWxpc3Q6IElTZWxlY3RhYmxlLCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgPSAocGxheWxpc3Q6IElQbGF5bGlzdCwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4ICsgMSkgKyBcIi4gXCIgKyBwbGF5bGlzdC5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZyA9IHBsYXlsaXN0cy5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiVGhpcyBtYXRlcmlhbCB3aWxsIGJlIGNvbXBsZXRlbHkgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uIENvbnRpbnVlP1wiICsgXCJcXG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJUaGUgbWF0ZXJpYWwgaXMgaW5jbHVkZWQgaW4gdGhlIGZvbGxvd2luZyBwbGF5bGlzdHM6IDpsaXN0cyBDb25maXJtIHJlbW92aW5nIHRoZSBtYXRlcmlhbD9cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6bGlzdHNcIiwgXCJcXG5cXG5cIiArIHRoaXMuZ2V0SXRlbXNGb3JtYXR0ZWRTdHJpbmc8SVBsYXlsaXN0PihwbGF5bGlzdHMsIGZvcm1hdHRlZEZ1bmMsIFwiXFxuXCIpICsgXCJcXG5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkgKyBcIlxcblwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShtZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlJlbW92ZSBtYXRlcmlhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsU2VydmljZS5kZWxldGUobWF0ZXJpYWwuaWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgbWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkUmVtb3ZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLmluZGV4VXJsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFV0aWxzLmNhbmNlbE1hdGVyaWFsUHJldmlld3MobWF0ZXJpYWwuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVdGlscy5jYW5jZWxNYXRlcmlhbEZpbGVzKG1hdGVyaWFsLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFJlbW92ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJUaGlzIG1hdGVyaWFsIGhhcyBiZWVuIHB1cmNoYXNlZC4gSW1wb3NzaWJsZSB0byByZW1vdmVcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlJlbW92ZSBtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRGdW5jOiAocXVpejogSVF1aXosIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyA9IChxdWl6OiBJUXVpeiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8cD5cIiArIChpbmRleCArIDEpICsgXCIuIFwiICsgcXVpei50aXRsZSArIFwiPC9wPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZyA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCI8cD5UaGUgbWF0ZXJpYWwgY2Fubm90IGJlIHJlbW92ZWQuIEl0IGlzIHVzZWQgaW4gdGhlIHF1aXp6ZXM6OnF1aXp6ZXM8L3A+XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOnF1aXp6ZXNcIiwgdGhpcy5nZXRJdGVtc0Zvcm1hdHRlZFN0cmluZzxJUXVpej4ocXVpenplcywgZm9ybWF0dGVkRnVuYywgXCJcXG5cIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiUmVtb3ZlIG1hdGVyaWFsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9kYXkgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwaXJlZENvdXJzZXMgPSBjb3Vyc2VzLmZpbHRlcihjID0+IGMuZW5kRGF0ZSAmJiBjLmVuZERhdGUgPD0gdG9kYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybWF0dGVkRnVuYzogKGNvdXJzZTogSUNvdXJzZSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nID0gKGNvdXJzZTogSUNvdXJzZSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiPHA+XCIgKyAoaW5kZXggKyAxKSArIFwiLiBcIiArIGNvdXJzZS5zdWJqZWN0TmFtZSArIFwiLiBcIiArIGNvdXJzZS50b3BpYyArIFwiPC9wPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwaXJlZENvdXJzZXMubGVuZ3RoICE9IGNvdXJzZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIjxwPlRoZSBtYXRlcmlhbCBjYW5ub3QgYmUgcmVtb3ZlZC4gSXQgaXMgdXNlZCBpbiB0aGUgY291cnNlczo6Y291cnNlczwvcD5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpjb3Vyc2VzXCIsIHRoaXMuZ2V0SXRlbXNGb3JtYXR0ZWRTdHJpbmc8SUNvdXJzZT4oY291cnNlcy5maWx0ZXIoYyA9PiBleHBpcmVkQ291cnNlcy5pbmRleE9mKGMpIDwgMCksIGZvcm1hdHRlZEZ1bmMsIFwiXFxuXCIpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0obWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlJlbW92ZSBtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZyA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCI8cD5UaGlzIG1hdGVyaWFsIHdpbGwgYmUgY29tcGxldGVseSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gSXQgaXMgdXNlZCBpbiB0aGUgY291cnNlczo6Y291cnNlcyBDb250aW51ZT88L3A+XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6Y291cnNlc1wiLCB0aGlzLmdldEl0ZW1zRm9ybWF0dGVkU3RyaW5nPElDb3Vyc2U+KGNvdXJzZXMsIGZvcm1hdHRlZEZ1bmMsIFwiXFxuXCIpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0obWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlJlbW92ZSBtYXRlcmlhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbFNlcnZpY2UuZGVsZXRlKG1hdGVyaWFsLmlkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgbWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRSZW1vdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1hdGVyaWFsc1JvdXRlci5pbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkVXRpbHMuY2FuY2VsTWF0ZXJpYWxQcmV2aWV3cyhtYXRlcmlhbC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkVXRpbHMuY2FuY2VsTWF0ZXJpYWxGaWxlcyhtYXRlcmlhbC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRSZW1vdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZvcm1hdHRlZEZ1bmM6IChwcm9kdWN0OiBJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdCwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nID0gKHByb2R1Y3Q6IElQcm9kdWN0VG9SZWZlcmVuY2VkT2JqZWN0LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiPHA+XCIgKyAoaW5kZXggKyAxKSArIFwiLiBcIiArIHByb2R1Y3QubmFtZSArIFwiLiBcIiArIChwcm9kdWN0LmRlc2NyaXB0aW9uID09IG51bGwgPyBcIlwiIDogcHJvZHVjdC5kZXNjcmlwdGlvbikgKyBcIjwvcD5cIjtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIjxwPlRoZSBtYXRlcmlhbCBjYW5ub3QgYmUgcmVtb3ZlZC4gSXQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBwcm9kdWN0czo6cHJvZHVjdHM8L3A+XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6cHJvZHVjdHNcIiwgdGhpcy5nZXRJdGVtc0Zvcm1hdHRlZFN0cmluZzxJUHJvZHVjdFRvUmVmZXJlbmNlZE9iamVjdD4ocHJvZHVjdHMsIGZvcm1hdHRlZEZ1bmMsIFwiXFxuXCIpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0obWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlJlbW92ZSBtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRJdGVtc0Zvcm1hdHRlZFN0cmluZzxUPihpdGVtczogQXJyYXk8VD4sIGZvcm1hdHRlZEZ1bmM6IChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBmb3JtYXR0ZWRGdW5jKGl0ZW0sIGluZGV4KSArIHNlcGFyYXRvcjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVNYXRlcmlhbERvd25sb2FkQWN0aW9uTG9nKG1hdGVyaWFsSWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aW9uTG9nU2VydmljZS5jcmVhdGUobWF0ZXJpYWxJZCwgUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUwsIEFjdGlvblR5cGUuTUFURVJJQUxfRE9XTkxPQUQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnb0JhY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHdpbmRvdy5oaXN0b3J5Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy4kd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LmZvcndhcmRUb0FjY2Vzc0RlbmllZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlQXV0aG9yU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucGVyc29uYWxTZXJ2aWNlLmNoYW5nZUF1dGhvclN1YnNjcmlwdGlvbih0aGlzLm1hdGVyaWFsLm93bmVySWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IG5vdGlmaWVyLnN1Y2Nlc3MoXCJZb3Ugc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gcHVibGljYXRpb25zIG9mXCIgKyBcIiBcIiArIHRoaXMubWF0ZXJpYWwub3duZXJOYW1lKVxyXG4gICAgICAgICAgICAgICAgOiBub3RpZmllci5zdWNjZXNzKFwiWW91IHN1Y2Nlc3NmdWxseSB1bnN1YnNjcmliZWQgZnJvbSBwdWJsaWNhdGlvbnMgb2ZcIiArIFwiIFwiICsgdGhpcy5tYXRlcmlhbC5vd25lck5hbWUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5zdWJzY3JpYmUgPSByZXN1bHQ7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsUmVwbHkoY29tbWVudElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbW1lbnRzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaCgoYzogSUNvbW1lbnRJbkhpZXJhcmNoeUV4dGVuZGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjLmlkID09IGNvbW1lbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgYy5yZXBseSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5uZXdSZXBseUNvbW1lbnQudGV4dCA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFsVHlwZVRpdGxlKG1hdGVyaWFsVHlwZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RUeXBlVXRpbHMuZ2V0TWF0ZXJpYWxUeXBlVGl0bGUobWF0ZXJpYWxUeXBlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkTWF0ZXJpYWxQYWdlKG1hdGVyaWFsSWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1hdGVyaWFsc1JvdXRlci53YXRjaFVybChtYXRlcmlhbElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhpZGVTaG93UmVzdFJlbGF0ZWRNYXRlcmlhbHMoKTogdm9pZCB7XHJcbiAgICAgICAgJCgnLm1hdGVyaWFsX19vdGhlcnMtbW9yZScpLmNsb3Nlc3QoJy5tYXRlcmlhbF9fb3RoZXJzJykudG9nZ2xlQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgIHRoaXMucmVsYXRlZE1hdGVyaWFsc0N1cnJlbnRMaW1pdCA9PT0gdGhpcy5yZWxhdGVkTWF0ZXJpYWxzVmlld0xpbWl0ID9cclxuICAgICAgICAgICAgdGhpcy5yZWxhdGVkTWF0ZXJpYWxzQ3VycmVudExpbWl0ID0gdGhpcy5yZWxhdGVkTWF0ZXJpYWxzLmxlbmd0aCA6XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZE1hdGVyaWFsc0N1cnJlbnRMaW1pdCA9IHRoaXMucmVsYXRlZE1hdGVyaWFsc1ZpZXdMaW1pdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlUmVwbHlNZXNzYWdlcyhjb21tZW50KSB7XHJcbiAgICAgICAgbGV0IGFycmF5OiBudW1iZXJbXSA9IFtjb21tZW50LmlkXTtcclxuXHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMuY29tbWVudHNHcmlkTW9kZWwuZW50cmllcy5maWx0ZXIoZW50cnkgPT4gY29tbWVudC5pZCA9PSBlbnRyeS5wYXJlbnRJZCk7XHJcbiAgICAgICAgd2hpbGUocGFyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXJyYXkucHVzaChwYXJlbnRbMF0uaWQpO1xyXG4gICAgICAgICAgICBwYXJlbnRbMF0uY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBhcnJheS5wdXNoKGNoaWxkLmlkKSk7XHJcbiAgICAgICAgICAgIHBhcmVudCA9IHRoaXMuY29tbWVudHNHcmlkTW9kZWwuZW50cmllcy5maWx0ZXIoZW50cnkgPT4gcGFyZW50WzBdLmlkID09IGVudHJ5LnBhcmVudElkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFycmF5ID0gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0sIHBvcykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSA9PSBwb3M7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGFycmF5LmZvckVhY2gobnVtID0+IHtcclxuICAgICAgICAgICAgJChcIiNtYXRlcmlhbC1zaW5nbGVfXCIgKyBudW0pXHJcbiAgICAgICAgICAgICAgICAuY2xvc2VzdCgnLm1lc3NhZ2VzLXNpbmdsZScpXHJcbiAgICAgICAgICAgICAgICAudG9nZ2xlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFsVHlwZU5hbWUodHlwZUtleSkge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZUtleSkge1xyXG4gICAgICAgICAgICBjYXNlICdBTEwnOiByZXR1cm4gJ0FMTCc7XHJcbiAgICAgICAgICAgIGNhc2UgJ0FVRElPJzogcmV0dXJuICdBVURJTyc7XHJcbiAgICAgICAgICAgIGNhc2UgJ1ZJREVPJyA6IHJldHVybiAnVklERU8nO1xyXG4gICAgICAgICAgICBjYXNlICdQSE9UTycgOiByZXR1cm4gJ0lNQUdFJztcclxuICAgICAgICAgICAgY2FzZSAnTElOSycgOiByZXR1cm4gJ0xJTksnO1xyXG4gICAgICAgICAgICBjYXNlICdET0NVTUVOVFMnOiByZXR1cm4gJ09USEVSJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvd25sb2FkQ3Jvc3NPcmlnaW5CbG9iKCk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwuZG93bmxvYWRVcmwuc2VhcmNoKFwiZmlsZW5hbWVcIikgPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLm1hdGVyaWFsLmRvd25sb2FkVXJsLCB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xyXG4gICAgICAgICAgICB9KS50aGVuKChyIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFtyLmRhdGFdLCB7dHlwZTogci5kYXRhLnR5cGV9KTtcclxuICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICAgICAgbGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgICAgIGxpbmsuaWQgPSBcInRlbXBCbG9iTGlua1wiXHJcbiAgICAgICAgICAgICAgICBsaW5rLnRhcmdldCA9IFwiX2JsYW5rXCI7XHJcbiAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCB0aGlzLm1hdGVyaWFsLmRvd25sb2FkVXJsLnNwbGl0KFwiZmlsZW5hbWU9XCIpWzFdKTtcclxuICAgICAgICAgICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SU1hdGVyaWFsfSBmcm9tIFwiLi9tb2RlbHMvSU1hdGVyaWFsXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbFNlcnZpY2V9IGZyb20gXCIuL01hdGVyaWFsU2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzXCI7XHJcbmltcG9ydCB7U2VjdXJlZE9iamVjdFR5cGV9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9TZWN1cmVkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxQZXJtaXNzaW9uc0VkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibWF0ZXJpYWxzLk1hdGVyaWFsUGVybWlzc2lvbnNFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBtYXRlcmlhbElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbWF0ZXJpYWw6IElNYXRlcmlhbDtcclxuXHJcbiAgICBwdWJsaWMgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgdXNlcjogSVVzZXJJbmZvID0ge307XHJcblxyXG4gICAgcHVibGljIGlzTWF0ZXJpYWxMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwZXJtaXNzaW9uc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBkaXNhYmxlZFNhdmVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTWF0ZXJpYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTWF0ZXJpYWxzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG1hdGVyaWFsU2VydmljZTogTWF0ZXJpYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxJZCA9ICRyb3V0ZVBhcmFtc1tNYXRlcmlhbHNSb3V0ZXIuTUFURVJJQUxfSURfUEFSQU1dO1xyXG4gICAgICAgIGxldCBtYXRlcmlhbElkU3RyOiBzdHJpbmcgPSBTdHJpbmcodGhpcy5tYXRlcmlhbElkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kTWF0ZXJpYWxQZXJtaXNzaW9ucyhtYXRlcmlhbElkU3RyLCBtYXRlcmlhbFBlcm1pc3Npb25zID0+IG1hdGVyaWFsUGVybWlzc2lvbnMuZWRpdCk7XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuRURVQ0FUSU9OX01BVEVSSUFMU19NRU5VX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkodXNlciwgdGhpcy51c2VyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkTWF0ZXJpYWwodGhpcy5tYXRlcmlhbElkKS50aGVuKG1hdGVyaWFsID0+IHtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJFZGl0IE1hdGVyaWFsIFwiICsgXCLigJhcIlxyXG4gICAgICAgICAgICAgICAgKyBtYXRlcmlhbC50aXRsZSArIFwi4oCZXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmlzTWF0ZXJpYWxMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLk1BVEVSSUFMLCBtYXRlcmlhbElkU3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRNYXRlcmlhbChtYXRlcmlhbElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElNYXRlcmlhbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsU2VydmljZS5nZXQobWF0ZXJpYWxJZCkudGhlbihtYXRlcmlhbCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBhbmd1bGFyLmNvcHkobWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRlcmlhbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhzZWN1cmVkT2JqZWN0VHlwZTogU2VjdXJlZE9iamVjdFR5cGUsIG9iamVjdElkPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEFsbE9iamVjdFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKHNlY3VyZWRPYmplY3RUeXBlLCBvYmplY3RJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZSgpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbFNlcnZpY2UudXBkYXRlTWF0ZXJpYWxQZXJtaXNzaW9ucyh0aGlzLm1hdGVyaWFsSWQsIHRoaXMubWF0ZXJpYWwudmVyc2lvbiwgdGhpcy5tYXRlcmlhbC5vd25lcklkLCB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhTZWN1cmVkT2JqZWN0VHlwZS5NQVRFUklBTCwgU3RyaW5nKHRoaXMubWF0ZXJpYWxJZCkpO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBtYXRlcmlhbCBoYXMgYmVlbiBtb2RpZmllZFwiKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3QoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC5wZXJtaXNzaW9ucyAmJiB0aGlzLm1hdGVyaWFsLnBlcm1pc3Npb25zLnZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLndhdGNoVXJsKHRoaXMubWF0ZXJpYWxJZCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1hdGVyaWFsc1JvdXRlci5pbmRleFVybCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuYWJsZVNhdmVCdXR0b24oKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgIH1cclxufSIsImltcG9ydCB7SU1hdGVyaWFsfSBmcm9tIFwiLi9tb2RlbHMvSU1hdGVyaWFsXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbFNlcnZpY2V9IGZyb20gXCIuL01hdGVyaWFsU2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFJlbGF0ZWRQcm9kdWN0c0VkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibWF0ZXJpYWxzLk1hdGVyaWFsUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIG1hdGVyaWFsOiBJTWF0ZXJpYWw7XHJcblxyXG4gICAgcHVibGljIGlzTWF0ZXJpYWxMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgTWF0ZXJpYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTWF0ZXJpYWxzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYXRlcmlhbFNlcnZpY2U6IE1hdGVyaWFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbElkID0gJHJvdXRlUGFyYW1zW01hdGVyaWFsc1JvdXRlci5NQVRFUklBTF9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IG1hdGVyaWFsSWRTdHI6IHN0cmluZyA9IFN0cmluZyh0aGlzLm1hdGVyaWFsSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRNYXRlcmlhbFBlcm1pc3Npb25zKG1hdGVyaWFsSWRTdHIsIG1hdGVyaWFsUGVybWlzc2lvbnMgPT4gbWF0ZXJpYWxQZXJtaXNzaW9ucy5lZGl0KTtcclxuXHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5FRFVDQVRJT05fTUFURVJJQUxTX01FTlVfS0VZKTtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRNYXRlcmlhbCh0aGlzLm1hdGVyaWFsSWQpLnRoZW4obWF0ZXJpYWwgPT4ge1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkVkaXQgTWF0ZXJpYWwgXCIgKyBcIuKAmFwiXHJcbiAgICAgICAgICAgICAgICArIG1hdGVyaWFsLnRpdGxlICsgXCLigJlcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNNYXRlcmlhbExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTWF0ZXJpYWwobWF0ZXJpYWxJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJTWF0ZXJpYWw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXRlcmlhbFNlcnZpY2UuZ2V0KG1hdGVyaWFsSWQpLnRoZW4obWF0ZXJpYWwgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsID0gYW5ndWxhci5jb3B5KG1hdGVyaWFsKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWw7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUHJvZHVjdHNTYXZlU3VjY2VzczogKCkgPT4gYW5ndWxhci5JUHJvbWlzZTxJTWF0ZXJpYWw+ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRNYXRlcmlhbCh0aGlzLm1hdGVyaWFsSWQpO1xyXG4gICAgfTtcclxufSIsImltcG9ydCB7SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lNYXRlcmlhbH0gZnJvbSBcIi4vbW9kZWxzL0lNYXRlcmlhbFwiO1xyXG5pbXBvcnQge0lFbWJlZGRlZE1hdGVyaWFsfSBmcm9tIFwiLi9tb2RlbHMvSUVtYmVkZGVkTWF0ZXJpYWxcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRofSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aFwiO1xyXG5cclxuaW50ZXJmYWNlIElFeHRNYXRlcmlhbCBleHRlbmRzIElNYXRlcmlhbCB7XHJcbiAgICBmaWxlPzogYW55O1xyXG4gICAgcHJldmlldz86IGFueTtcclxuICAgIHN1YnRpdGxlcz86IGFueTtcclxuICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzPzogQXJyYXk8SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHM+O1xyXG4gICAgaXNSZXNldFByZXZpZXc/OiBib29sZWFuO1xyXG4gICAgaXNSZXNldFN1YnRpdGxlcz86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJtYXRlcmlhbHMuTWF0ZXJpYWxTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY2VcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY2U6IGFuZ3VsYXIuSVNDRVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQoaWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SU1hdGVyaWFsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL21hdGVyaWFscy86aWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQdWJsaWNJbmZvKG1hdGVyaWFsSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SU1hdGVyaWFsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL21hdGVyaWFscy86aWQvcHVibGljSW5mb1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgbWF0ZXJpYWxJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlKG1hdGVyaWFsOklFeHRNYXRlcmlhbCwgZmlsZT86RmlsZSwgcHJldmlldz86RmlsZSwgc3VidGl0bGVzPzpGaWxlKTpuZy5JUHJvbWlzZTxJTWF0ZXJpYWw+IHtcclxuICAgICAgICBtYXRlcmlhbC5maWxlID0gZmlsZSAhPSBudWxsXHJcbiAgICAgICAgICAgID8ge25hbWU6IGZpbGUubmFtZSwgdHlwZTogZmlsZS50eXBlLCBzaXplOiBmaWxlLnNpemV9XHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBtYXRlcmlhbC5wcmV2aWV3ID0gcHJldmlldyAhPSBudWxsXHJcbiAgICAgICAgICAgID8ge25hbWU6IHByZXZpZXcubmFtZSwgdHlwZTogcHJldmlldy50eXBlLCBzaXplOiBwcmV2aWV3LnNpemV9XHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBtYXRlcmlhbC5zdWJ0aXRsZXMgPSBzdWJ0aXRsZXMgIT0gbnVsbFxyXG4gICAgICAgICAgICA/IHtuYW1lOiBzdWJ0aXRsZXMubmFtZSwgdHlwZTogc3VidGl0bGVzLnR5cGUsIHNpemU6IHN1YnRpdGxlcy5zaXplfVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9tYXRlcmlhbHNcIiksIG1hdGVyaWFsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUobWF0ZXJpYWw6SUV4dE1hdGVyaWFsLCBpc1Jlc2V0UHJldmlldzpib29sZWFuLCBpc1Jlc2V0U3VidGl0bGVzOmJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIGZpbGU/OkZpbGUsIHByZXZpZXc/OkZpbGUsIHN1YnRpdGxlcz86RmlsZSk6bmcuSVByb21pc2U8SU1hdGVyaWFsPiB7XHJcbiAgICAgICAgbWF0ZXJpYWwuZmlsZSA9IGZpbGUgIT0gbnVsbFxyXG4gICAgICAgICAgICA/IHtuYW1lOiBmaWxlLm5hbWUsIHR5cGU6IGZpbGUudHlwZSwgc2l6ZTogZmlsZS5zaXplfVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgbWF0ZXJpYWwucHJldmlldyA9IHByZXZpZXcgIT0gbnVsbFxyXG4gICAgICAgICAgICA/IHtuYW1lOiBwcmV2aWV3Lm5hbWUsIHR5cGU6IHByZXZpZXcudHlwZSwgc2l6ZTogcHJldmlldy5zaXplfVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgbWF0ZXJpYWwuc3VidGl0bGVzID0gc3VidGl0bGVzICE9IG51bGxcclxuICAgICAgICAgICAgPyB7bmFtZTogc3VidGl0bGVzLm5hbWUsIHR5cGU6IHN1YnRpdGxlcy50eXBlLCBzaXplOiBzdWJ0aXRsZXMuc2l6ZX1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIG1hdGVyaWFsLmlzUmVzZXRQcmV2aWV3ID0gaXNSZXNldFByZXZpZXc7XHJcbiAgICAgICAgbWF0ZXJpYWwuaXNSZXNldFN1YnRpdGxlcyA9IGlzUmVzZXRTdWJ0aXRsZXM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL21hdGVyaWFsc1wiKSwgbWF0ZXJpYWwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZU1hdGVyaWFsUGVybWlzc2lvbnMobWF0ZXJpYWxJZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIG93bmVySWQ6IG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzOiBBcnJheTxJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcz4pOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGg+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL21hdGVyaWFscy86bWF0ZXJpYWxJZC9wZXJtaXNzaW9uc1wiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOm1hdGVyaWFsSWRcIiwgbWF0ZXJpYWxJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlkOiBtYXRlcmlhbElkLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogdmVyc2lvbixcclxuICAgICAgICAgICAgICAgIG93bmVySWQ6IG93bmVySWQsXHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwczogcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGFbXCJtYXRlcmlhbFwiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZShtYXRlcmlhbElkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5kZWxldGUodGhpcy51cmwuYmFzZShcIi9hcGkvbWF0ZXJpYWxzLzppZFwiKS5wYXJhbShcIjppZFwiLCBtYXRlcmlhbElkKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFJlbGF0ZWRNYXRlcmlhbHMoaWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SU1hdGVyaWFsW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvbWF0ZXJpYWxzLzppZC9yZWxhdGVkXCIpLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTWF0ZXJpYWxQdXJjaGFzZWQobWF0ZXJpYWxJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL21hdGVyaWFscy86aWQvaXMvcHVyY2hhc2VkXCIpLnBhcmFtKFwiOmlkXCIsIG1hdGVyaWFsSWQpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW1iZWRkZWRNYXRlcmlhbChtYXRlcmlhbElkOiBudW1iZXIsIHNvdXJjZUlkOiBudW1iZXIsIHNvdXJjZVR5cGU6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUVtYmVkZGVkTWF0ZXJpYWw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvbWF0ZXJpYWxzL2VtYmVkZGVkL21hdGVyaWFsLzptYXRlcmlhbElkL3NvdXJjZS86c291cmNlSWQvc291cmNlVHlwZS86c291cmNlVHlwZS9cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1hdGVyaWFsSWRcIiwgbWF0ZXJpYWxJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNvdXJjZUlkXCIsIHNvdXJjZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c291cmNlVHlwZVwiLCBzb3VyY2VUeXBlKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0V4aXN0TWF0ZXJpYWxzKCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL21hdGVyaWFscy9pc0V4aXN0TWF0ZXJpYWxzXCIpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01hdGVyaWFsU2VydmljZX0gZnJvbSBcIi4vTWF0ZXJpYWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VhcmNoQ29udHJvbGxlcn0gZnJvbSBcIi4vU2VhcmNoQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge01hdGVyaWFsQ29udHJvbGxlcn0gZnJvbSBcIi4vTWF0ZXJpYWxDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7TXlEb3dubG9hZHNDb250cm9sbGVyfSBmcm9tIFwiLi9NeURvd25sb2Fkc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtFZGl0TWF0ZXJpYWxDb250cm9sbGVyfSBmcm9tIFwiLi9FZGl0TWF0ZXJpYWxDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7UGxheWxpc3RzQ29udHJvbGxlcn0gZnJvbSBcIi4vUGxheWxpc3RzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge1BsYXlsaXN0RGV0YWlsc0NvbnRyb2xsZXJ9IGZyb20gXCIuL1BsYXlsaXN0RGV0YWlsc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtQbGF5bGlzdEVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9QbGF5bGlzdEVkaXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7UGxheWxpc3RTZXJ2aWNlfSBmcm9tIFwiLi9QbGF5bGlzdFNlcnZpY2VcIjtcclxuXHJcbmltcG9ydCB7QXV0aENvcmVNb2R1bGV9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhDb3JlTW9kdWxlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlNb2R1bGV9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1NlY3VyaXR5TW9kdWxlXCI7XHJcbmltcG9ydCB7VXJsc01vZHVsZX0gZnJvbSBcIi4vLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcbmltcG9ydCB7UGVyc29uYWxNb2R1bGV9IGZyb20gXCIuLy4uL3BlcnNvbmFsL1BlcnNvbmFsTW9kdWxlXCI7XHJcbmltcG9ydCB7U29jaWFsTW9kdWxlfSBmcm9tIFwiLi8uLi9zb2NpYWwvU29jaWFsTW9kdWxlXCI7XHJcbmltcG9ydCB7U3RvcmFnZU1vZHVsZX0gZnJvbSBcIi4vLi4vc3RvcmFnZS9TdG9yYWdlTW9kdWxlXCI7XHJcbmltcG9ydCB7VXNlcnNNb2R1bGV9IGZyb20gXCIuLy4uL3VzZXJzL1VzZXJzTW9kdWxlXCI7XHJcbmltcG9ydCB7Q291cnNlc01vZHVsZX0gZnJvbSBcIi4vLi4vY291cnNlcy9Db3Vyc2VzTW9kdWxlXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxSZWxhdGVkUHJvZHVjdHNFZGl0Q29udHJvbGxlcn0gZnJvbSBcIi4vTWF0ZXJpYWxSZWxhdGVkUHJvZHVjdHNFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge01hdGVyaWFsUGVybWlzc2lvbnNFZGl0Q29udHJvbGxlcn0gZnJvbSBcIi4vTWF0ZXJpYWxQZXJtaXNzaW9uc0VkaXRDb250cm9sbGVyXCI7XHJcblxyXG5leHBvcnQgdmFyIE1hdGVyaWFsc01vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgICAgIC5tb2R1bGUoXCJtYXRlcmlhbHNcIiwgW1xyXG4gICAgICAgICAgICBBdXRoQ29yZU1vZHVsZS5uYW1lLFxyXG4gICAgICAgICAgICBTZWN1cml0eU1vZHVsZS5uYW1lLFxyXG4gICAgICAgICAgICBVcmxzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgICAgIFBlcnNvbmFsTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgICAgIFNvY2lhbE1vZHVsZS5uYW1lLFxyXG4gICAgICAgICAgICBTdG9yYWdlTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgICAgIFVzZXJzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgICAgIENvdXJzZXNNb2R1bGUubmFtZVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgLnNlcnZpY2UoTWF0ZXJpYWxTZXJ2aWNlLk5BTUUsIE1hdGVyaWFsU2VydmljZSlcclxuICAgICAgICAuc2VydmljZShQbGF5bGlzdFNlcnZpY2UuTkFNRSwgUGxheWxpc3RTZXJ2aWNlKVxyXG4gICAgICAgIC5jb250cm9sbGVyKFNlYXJjaENvbnRyb2xsZXIuTkFNRSwgU2VhcmNoQ29udHJvbGxlcilcclxuICAgICAgICAuY29udHJvbGxlcihNYXRlcmlhbENvbnRyb2xsZXIuTkFNRSwgTWF0ZXJpYWxDb250cm9sbGVyKVxyXG4gICAgICAgIC5jb250cm9sbGVyKE15RG93bmxvYWRzQ29udHJvbGxlci5OQU1FLCBNeURvd25sb2Fkc0NvbnRyb2xsZXIpXHJcbiAgICAgICAgLmNvbnRyb2xsZXIoRWRpdE1hdGVyaWFsQ29udHJvbGxlci5OQU1FLCBFZGl0TWF0ZXJpYWxDb250cm9sbGVyKVxyXG4gICAgICAgIC5jb250cm9sbGVyKFBsYXlsaXN0c0NvbnRyb2xsZXIuTkFNRSwgUGxheWxpc3RzQ29udHJvbGxlcilcclxuICAgICAgICAuY29udHJvbGxlcihQbGF5bGlzdERldGFpbHNDb250cm9sbGVyLk5BTUUsIFBsYXlsaXN0RGV0YWlsc0NvbnRyb2xsZXIpXHJcbiAgICAgICAgLmNvbnRyb2xsZXIoUGxheWxpc3RFZGl0Q29udHJvbGxlci5OQU1FLCBQbGF5bGlzdEVkaXRDb250cm9sbGVyKVxyXG4gICAgICAgIC5jb250cm9sbGVyKE1hdGVyaWFsUmVsYXRlZFByb2R1Y3RzRWRpdENvbnRyb2xsZXIuTkFNRSwgTWF0ZXJpYWxSZWxhdGVkUHJvZHVjdHNFZGl0Q29udHJvbGxlcilcclxuICAgICAgICAuY29udHJvbGxlcihNYXRlcmlhbFBlcm1pc3Npb25zRWRpdENvbnRyb2xsZXIuTkFNRSwgTWF0ZXJpYWxQZXJtaXNzaW9uc0VkaXRDb250cm9sbGVyKTtcclxuIiwiaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL01hdGVyaWFsc1JvdXRlclwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtTZWFyY2hDb250cm9sSGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9TZWFyY2hDb250cm9sSGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE15RG93bmxvYWRzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcIm1hdGVyaWFscy5NeURvd25sb2Fkc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgcm93U2hvdzogTWFwPG51bWJlciwgYm9vbGVhbj4gPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIE1hdGVyaWFsc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgbWF0ZXJpYWxzUm91dGVyOiBNYXRlcmlhbHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kU3lzdGVtUGVybWlzc2lvbnMoc3lzdGVtUGVybWlzc2lvbnMgPT4gc3lzdGVtUGVybWlzc2lvbnMuYWRkTWF0ZXJpYWwpO1xyXG5cclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KDEsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KDIsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KDMsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KDQsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDA7XHJcblxyXG4gICAgICAgIC8vIFRPRE86IHRoaXMgbWVudSBpdGVtIHdhcyBkZWxldGVkLCBuZWVkcyB1cGRhdGluZyAvLyBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBVUkNIQVNFU19ET1dOTE9BREVEX0ZJTEVTX01FTlVfS0VZKTtcclxuICAgICAgICAvLyBUT0RPOiAvLyBQYWdlSGVhZGVyLnNldCgpLmhlYWRlciguLi4pLnVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5yb3dTaG93LnNldChpbmRleCwgIXRoaXMucm93U2hvdy5nZXQoaW5kZXgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgd2F0Y2gobWF0ZXJpYWxJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLndhdGNoVXJsKG1hdGVyaWFsSWQpKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7U2VhcmNoQ29udHJvbEhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvU2VhcmNoQ29udHJvbEhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvTWF0ZXJpYWxzUm91dGVyXCI7XHJcbmltcG9ydCB7SUdyaWRNb2RlbCwgR3JpZE1vZGVsfSBmcm9tIFwiLi8uLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SU1hdGVyaWFsfSBmcm9tIFwiLi9tb2RlbHMvSU1hdGVyaWFsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGxheWxpc3RTZXJ2aWNlfSBmcm9tIFwiLi9QbGF5bGlzdFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUGxheWxpc3R9IGZyb20gXCIuL21vZGVscy9JUGxheWxpc3RcIjtcclxuaW1wb3J0IHtPYmplY3RUeXBlVXRpbHN9IGZyb20gXCIuLy4uL3V0aWxzL09iamVjdFR5cGVVdGlsc1wiO1xyXG5pbXBvcnQge0FjdGlvbkxvZ1NlcnZpY2V9IGZyb20gXCIuLy4uL3N0YXRpc3RpY3MvQWN0aW9uTG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0FjdGlvblR5cGV9IGZyb20gXCIuLy4uL3N0YXRpc3RpY3MvbW9kZWxzL0FjdGlvblR5cGVcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4vLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SUdyaWRMb2FkaW5nTGlzdGVuZXJ9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7Q3VzdG9tQnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vYnJhbmRpbmcvQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUGxheWxpc3REZXRhaWxzQ29udHJvbGxlciBpbXBsZW1lbnRzIElHcmlkTG9hZGluZ0xpc3RlbmVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibWF0ZXJpYWxzLlBsYXlsaXN0RGV0YWlsc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgcm93U2hvdzogTWFwPG51bWJlciwgYm9vbGVhbj4gPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIHBsYXlsaXN0SWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBtYXRlcmlhbHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SU1hdGVyaWFsPjtcclxuXHJcbiAgICBwcml2YXRlIHBsYXlsaXN0OiBJUGxheWxpc3QgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGxheWxpc3RTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQWN0aW9uTG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwbGF5bGlzdFNlcnZpY2U6IFBsYXlsaXN0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYWN0aW9uTG9nU2VydmljZTogQWN0aW9uTG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMucGxheWxpc3RJZCA9ICRyb3V0ZVBhcmFtc1tNYXRlcmlhbHNSb3V0ZXIuUExBWUxJU1RfSURfUEFSQU1dO1xyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElNYXRlcmlhbD4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3BsYXlsaXN0cy9cIiArIHRoaXMucGxheWxpc3RJZCArIFwiL21hdGVyaWFsc1wiKSkpO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yb3dTaG93LnNldChlLmlkLCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIHZhciBtZW51SXRlbUtleTogc3RyaW5nID0gTWVudUhlbHBlci5nZXRDdXJyZW50TWVudUl0ZW1LZXkoKTtcclxuICAgICAgICBpZiAoIW1lbnVJdGVtS2V5IHx8IG1lbnVJdGVtS2V5Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuTVlfTElCUkFSWV9QTEFZTElTVFNfTUVOVV9LRVkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRQbGF5bGlzdCgpO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydExvYWRpbmcoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuZExvYWRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKChtYXRlcmlhbDogSU1hdGVyaWFsKSA9PiB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnN1YmplY3RBbmRUb3BpYyA9IG1hdGVyaWFsLnN1YmplY3ROYW1lICsgXCIvXCIgKyBtYXRlcmlhbC50b3BpYztcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFBsYXlsaXN0KCk6IHZvaWQge1xyXG4gICAgICAgIHZhciBwcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPElQbGF5bGlzdD4gPSB0aGlzLnBsYXlsaXN0U2VydmljZS5nZXQodGhpcy5wbGF5bGlzdElkKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5wbGF5bGlzdCk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uTG9nU2VydmljZS5jcmVhdGUodGhpcy5wbGF5bGlzdC5pZCwgUmVmZXJlbmNlZE9iamVjdFR5cGUuUExBWUxJU1QsIEFjdGlvblR5cGUuUExBWUxJU1RfVklFVyk7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwi4oCYXCIgKyByZXN1bHQubmFtZSArIFwi4oCZXCIpLnVwZGF0ZSgpOyAvLyBUT0RPOiByZWFsIHRpdGxlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFsVHlwZUNsYXNzKG1hdGVyaWFsVHlwZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RUeXBlVXRpbHMuZ2V0TWF0ZXJpYWxHbHlwaGljb25DbGFzcyhtYXRlcmlhbFR5cGVJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRNYXRlcmlhbFBhZ2UobWF0ZXJpYWw6IElNYXRlcmlhbCkge1xyXG4gICAgICAgIGlmKCFtYXRlcmlhbC5hdmFpbGFibGUpIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJBY2Nlc3MgdG8gdGhlIG1hdGVyaWFsIGlzIHJlc3RyaWN0ZWRcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLndhdGNoVXJsKG1hdGVyaWFsLmlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhpbmRleDogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZihrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaW5kZXgsICF0aGlzLnJvd1Nob3cuZ2V0KGluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hQbGF5bGlzdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtQbGF5bGlzdFNlcnZpY2V9IGZyb20gXCIuL1BsYXlsaXN0U2VydmljZVwiO1xyXG5pbXBvcnQge01hdGVyaWFsc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJUGxheWxpc3R9IGZyb20gXCIuL21vZGVscy9JUGxheWxpc3RcIjtcclxuaW1wb3J0IHtJTWF0ZXJpYWx9IGZyb20gXCIuL21vZGVscy9JTWF0ZXJpYWxcIjtcclxuXHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHNcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7U2VhcmNoQ29udHJvbEhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvU2VhcmNoQ29udHJvbEhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvU2VjdXJlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtNb21lbnR9IGZyb20gXCIuLy4uL3V0aWxzL01vbWVudFwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJR3JpZE1vZGVsLCBHcmlkTW9kZWx9IGZyb20gXCIuLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4vLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi4vSVNlbGVjdGFibGVcIjtcclxuXHJcblxyXG5pbnRlcmZhY2UgSU1hdGVyaWFsRXh0ZW5kZWQgZXh0ZW5kcyBJTWF0ZXJpYWwge1xyXG4gICAgbnVtYmVyPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlIGV4dGVuZHMgRmlsZSB7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFBsYXlsaXN0RWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJtYXRlcmlhbHMuUGxheWxpc3RFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBwbGF5bGlzdElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcGxheWxpc3Q6IElQbGF5bGlzdDtcclxuICAgIHB1YmxpYyBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwczogQXJyYXk8SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHM+ID0gW107XHJcbiAgICBwdWJsaWMgcGxheWxpc3RNYXRlcmlhbHM6IEFycmF5PElNYXRlcmlhbD4gPSBbXTtcclxuICAgIHB1YmxpYyB1c2VyTWF0ZXJpYWxzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElNYXRlcmlhbD47XHJcbiAgICBwdWJsaWMgcHJldmlldzogSUZpbGU7XHJcbiAgICBwdWJsaWMgcHJldmlld1VybDogc3RyaW5nO1xyXG4gICAgcHVibGljIGhhc1ByZXZpZXdVcmxDYW5jZWxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzUmVzZXRQcmV2aWV3OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGRpc2FibGVkU2F2ZUJ1dHRvbjogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc1ZhbGlkaXR5SW5QZXJwZXR1aXR5OiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoYXNBbGxCdXNpbmVzc1VuaXRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGN1cnJlbnRVc2VyOiBJU2VsZWN0YWJsZSA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBsYXlsaXN0U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIE1hdGVyaWFsc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdXBsb2FkZXI6IG5nLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwbGF5bGlzdFNlcnZpY2U6IFBsYXlsaXN0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMucGxheWxpc3RJZCA9ICRyb3V0ZVBhcmFtc1tNYXRlcmlhbHNSb3V0ZXIuUExBWUxJU1RfSURfUEFSQU1dO1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuTVlfTElCUkFSWV9QTEFZTElTVFNfTUVOVV9LRVkpO1xyXG5cclxuICAgICAgICBsZXQgcGxheWxpc3RJZFN0cjogc3RyaW5nID0gU3RyaW5nKHRoaXMucGxheWxpc3RJZCk7XHJcbiAgICAgICAgbGV0IGhhc1BsYXlsaXN0SWQ6IGJvb2xlYW4gPSB0aGlzLnBsYXlsaXN0SWQgIT0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kUGxheWxpc3RQZXJtaXNzaW9uc0lmKGhhc1BsYXlsaXN0SWQsIHBsYXlsaXN0SWRTdHIsIHBsYXlsaXN0UGVybWlzc2lvbnMgPT4gcGxheWxpc3RQZXJtaXNzaW9ucy5lZGl0KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1ZhbGlkaXR5SW5QZXJwZXR1aXR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBsYXlsaXN0ID0ge307XHJcblxyXG4gICAgICAgIGlmKGhhc1BsYXlsaXN0SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGxheWxpc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGxheWxpc3RNYXRlcmlhbHMoKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMoU2VjdXJlZE9iamVjdFR5cGUuUExBWUxJU1QsIHBsYXlsaXN0SWRTdHIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTmV3IFBsYXlsaXN0XCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGxheWxpc3Qub3duZXJJZCA9IHVzZXIuaWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXlsaXN0Lm93bmVyRnVsbE5hbWUgPSB1c2VyLmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzID0gdXNlci5hbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLmFsbEJ1c2luZXNzVW5pdHMgfHwgdXNlci5idXNpbmVzc1VuaXRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhTZWN1cmVkT2JqZWN0VHlwZS5QTEFZTElTVCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51c2VyTWF0ZXJpYWxzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SU1hdGVyaWFsPigkaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcIi9hcGkvcGxheWxpc3RzL3VzZXJNYXRlcmlhbHNcIikpKTtcclxuICAgICAgICB0aGlzLnVzZXJNYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLnBsYXlsaXN0SWQgPSB0aGlzLnBsYXlsaXN0SWQ7XHJcbiAgICAgICAgdGhpcy51c2VyTWF0ZXJpYWxzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFBsYXlsaXN0KCkge1xyXG4gICAgICAgIHZhciBwcm9taXNlOiBhbmd1bGFyLklQcm9taXNlPElQbGF5bGlzdD4gPSB0aGlzLnBsYXlsaXN0U2VydmljZS5nZXQodGhpcy5wbGF5bGlzdElkKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5wbGF5bGlzdCk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJNYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLmJ1c2luZXNzVW5pdElkID0gcmVzdWx0LmJ1c2luZXNzVW5pdElkO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJNYXRlcmlhbHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWxpc3QudmFsaWRpdHlUZXh0ID0gTW9tZW50LmlzVmFsaWREYXRlKHJlc3VsdC52YWxpZGl0eSk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucGxheWxpc3QudmFsaWRpdHlUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsaWRpdHlJblBlcnBldHVpdHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkVkaXQgUGxheWxpc3QgXCIgKyBcIuKAmFwiXHJcbiAgICAgICAgICAgICAgICArIHRoaXMucGxheWxpc3QubmFtZSArIFwi4oCZXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXdVcmwgPSB0aGlzLnBsYXlsaXN0LnByZXZpZXdVcmwgPyB0aGlzLnBsYXlsaXN0LnByZXZpZXdVcmwgOiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFBsYXlsaXN0TWF0ZXJpYWxzKCkge1xyXG4gICAgICAgIHRoaXMucGxheWxpc3RTZXJ2aWNlLmdldE1hdGVyaWFscyh0aGlzLnBsYXlsaXN0SWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5wbGF5bGlzdE1hdGVyaWFscyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhzZWN1cmVkT2JqZWN0VHlwZTogU2VjdXJlZE9iamVjdFR5cGUsIG9iamVjdElkPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEFsbE9iamVjdFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKHNlY3VyZWRPYmplY3RUeXBlLCBvYmplY3RJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGxheWxpc3QudmFsaWRpdHkgPSB0aGlzLmdldFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy5wbGF5bGlzdC5tYXRlcmlhbElkcyA9IHRoaXMucGxheWxpc3RNYXRlcmlhbHMubWFwKChtYXRlcmlhbDogSU1hdGVyaWFsKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRlcmlhbC5pZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMucGxheWxpc3RJZFxyXG4gICAgICAgICAgICA/IHRoaXMucGxheWxpc3RTZXJ2aWNlLnVwZGF0ZSh0aGlzLnBsYXlsaXN0LCB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLCB0aGlzLmlzUmVzZXRQcmV2aWV3LCB0aGlzLnByZXZpZXcpXHJcbiAgICAgICAgICAgIDogdGhpcy5wbGF5bGlzdFNlcnZpY2UuY3JlYXRlKHRoaXMucGxheWxpc3QsIHRoaXMucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMpO1xyXG4gICAgICAgIHByb21pc2UudGhlbihwbGF5bGlzdCA9PiB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJldmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZCh0aGlzLnByZXZpZXcsIHBsYXlsaXN0LmlkLCBcInByZXZpZXdcIikudGhlbihyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdWNjZXNzQ2FsbGJhY2socGxheWxpc3QuaWQpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc3RvcmFnZS5ub3QuYXZhaWxhYmxlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZS4gVGh1bWJuYWlsIGhhcyBub3QgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5wcmV2aWV3LnR5cGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkludmFsaWQgZmlsZSBmb3JtYXQuIFBsZWFzZSBzZWxlY3QgYSBmaWxlIHdpdGggLmpwZyBvciAucG5nIGV4dGVuc2lvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NDYWxsYmFjayhwbGF5bGlzdC5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc1N1Y2Nlc3NDYWxsYmFjayhwbGF5bGlzdElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgcGxheWxpc3QgaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLnBsYXlsaXN0RGV0YWlsc1VybChwbGF5bGlzdElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGxvYWQoZmlsZTogRmlsZSwgcGxheWxpc3RJZDogbnVtYmVyLCBmaWxlVHlwZTogc3RyaW5nKTogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkUHJvbWlzZTxGaWxlPiB7XHJcbiAgICAgICAgdmFyIHVybEJ1aWxkZXIgPSB0aGlzLnVybC5iYXNlKFwiL2FwaS9wbGF5bGlzdHMvdXBsb2FkP3BsYXlsaXN0SWQ9OnBsYXlsaXN0SWQmZmlsZVR5cGU9OmZpbGVUeXBlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpwbGF5bGlzdElkXCIsIHBsYXlsaXN0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpmaWxlVHlwZVwiLCBmaWxlVHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVwbG9hZGVyLnVwbG9hZCh7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBhbmd1bGFyLmNvcHkodXJsQnVpbGRlcilcclxuICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZX1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VmFsaWRpdHkoKTogbnVtYmVyIHtcclxuICAgICAgICB0aGlzLnBsYXlsaXN0LnZhbGlkaXR5VGV4dCA/IHRoaXMucGxheWxpc3QudmFsaWRpdHkgPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5wbGF5bGlzdC52YWxpZGl0eVRleHQpXHJcbiAgICAgICAgICAgIDogdGhpcy5wbGF5bGlzdC52YWxpZGl0eSA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheWxpc3QudmFsaWRpdHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWRpcmVjdE9yQ2xlYXJGaWVsZHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYodGhpcy5wbGF5bGlzdElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1hdGVyaWFsc1JvdXRlci5wbGF5bGlzdERldGFpbHNVcmwodGhpcy5wbGF5bGlzdElkKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhbkZpZWxkcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFuRmllbGRzKCkgOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzVmFsaWRpdHlJblBlcnBldHVpdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGxheWxpc3QgPSB7fTtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbGF5bGlzdC5vd25lcklkID0gdXNlci5pZDtcclxuICAgICAgICAgICAgdGhpcy5wbGF5bGlzdC5vd25lckZ1bGxOYW1lID0gdXNlci5mdWxsTmFtZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gW107XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxvYWRQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhTZWN1cmVkT2JqZWN0VHlwZS5QTEFZTElTVCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFuVmFsaWRpdHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wbGF5bGlzdC52YWxpZGl0eVRleHQgPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRNYXRlcmlhbFRvUGxheWxpc3QobWF0ZXJpYWw6IElNYXRlcmlhbCkge1xyXG4gICAgICAgIHRoaXMucGxheWxpc3RNYXRlcmlhbHMucHVzaChtYXRlcmlhbCk7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy51c2VyTWF0ZXJpYWxzR3JpZE1vZGVsLmVudHJpZXMuaW5kZXhPZihtYXRlcmlhbCk7XHJcbiAgICAgICAgdGhpcy51c2VyTWF0ZXJpYWxzR3JpZE1vZGVsLmVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlTWF0ZXJpYWxGcm9tUGxheWxpc3QoaW5kZXg6IG51bWJlciwgbWF0ZXJpYWw6IElNYXRlcmlhbCkge1xyXG4gICAgICAgIHRoaXMucGxheWxpc3RNYXRlcmlhbHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnVzZXJNYXRlcmlhbHNHcmlkTW9kZWwuZW50cmllcy5wdXNoKG1hdGVyaWFsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbW92ZVVwKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSB7fTtcclxuICAgICAgICB2YXIgb2JqZWN0VG9Nb3ZlID0gdGhpcy5wbGF5bGlzdE1hdGVyaWFscy5zcGxpY2UoaW5kZXgsIDEsIHBsYWNlaG9sZGVyKVswXTtcclxuICAgICAgICB0aGlzLnBsYXlsaXN0TWF0ZXJpYWxzLnNwbGljZShpbmRleCAtIDEsIDAsIG9iamVjdFRvTW92ZSk7XHJcbiAgICAgICAgdGhpcy5wbGF5bGlzdE1hdGVyaWFscy5zcGxpY2UodGhpcy5wbGF5bGlzdE1hdGVyaWFscy5pbmRleE9mKHBsYWNlaG9sZGVyKSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1vdmVEb3duKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSB7fTtcclxuICAgICAgICB2YXIgb2JqZWN0VG9Nb3ZlID0gdGhpcy5wbGF5bGlzdE1hdGVyaWFscy5zcGxpY2UoaW5kZXggKyAxLCAxLCBwbGFjZWhvbGRlcilbMF07XHJcbiAgICAgICAgdGhpcy5wbGF5bGlzdE1hdGVyaWFscy5zcGxpY2UoaW5kZXgsIDAsIG9iamVjdFRvTW92ZSk7XHJcbiAgICAgICAgdGhpcy5wbGF5bGlzdE1hdGVyaWFscy5zcGxpY2UodGhpcy5wbGF5bGlzdE1hdGVyaWFscy5pbmRleE9mKHBsYWNlaG9sZGVyKSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTW92ZVVwKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gaW5kZXggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vdmVEb3duKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gaW5kZXggPCB0aGlzLnBsYXlsaXN0TWF0ZXJpYWxzLmxlbmd0aCAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc3RvcmVQcmV2aWV3VXJsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJldmlldyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnByZXZpZXdVcmwgPSB0aGlzLnBsYXlsaXN0LnByZXZpZXdVcmw7XHJcbiAgICAgICAgdGhpcy5oYXNQcmV2aWV3VXJsQ2FuY2VsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzUmVzZXRQcmV2aWV3ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0UHJldmlldygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldmlld1VybCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXdVcmwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1Jlc2V0UHJldmlldyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQnVzaW5lc3NVbml0Q2hhbmdlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5wbGF5bGlzdElkKXtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlsaXN0Lm93bmVySWQgPSB0aGlzLmN1cnJlbnRVc2VyLmlkO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlsaXN0Lm93bmVyRnVsbE5hbWUgPSB0aGlzLmN1cnJlbnRVc2VyLm5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLlBMQVlMSVNUKTtcclxuICAgICAgICAgICAgdGhpcy4kdGltZW91dChhID0+IHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEJ1c2luZXNzVW5pdFNlbGVjdG9yVmlzaWJsZSgpIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHNcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLy4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7SVBsYXlsaXN0fSBmcm9tIFwiLi9tb2RlbHMvSVBsYXlsaXN0XCI7XHJcbmltcG9ydCB7SU1hdGVyaWFsfSBmcm9tIFwiLi9tb2RlbHMvSU1hdGVyaWFsXCI7XHJcblxyXG5pbnRlcmZhY2UgSUV4dFBsYXlsaXN0IGV4dGVuZHMgSVBsYXlsaXN0IHtcclxuICAgIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzPzogQXJyYXk8SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHM+O1xyXG4gICAgcmVzZXRQcmV2aWV3PzogYm9vbGVhbjtcclxuICAgIHByZXZpZXc/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQbGF5bGlzdFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJtYXRlcmlhbHMuUGxheWxpc3RTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRzY2VcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY2U6IGFuZ3VsYXIuSVNDRVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmaW5kUGxheWxpc3RzQnlNYXRlcmlhbChtYXRlcmlhbElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElTZWxlY3RhYmxlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wbGF5bGlzdHMvYnkvbWF0ZXJpYWwvOm1hdGVyaWFsSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1hdGVyaWFsSWRcIiwgbWF0ZXJpYWxJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0KGlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElQbGF5bGlzdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wbGF5bGlzdHMvOmlkP1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZShwbGF5bGlzdDogSUV4dFBsYXlsaXN0LCBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwczogQXJyYXk8SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHM+KTogYW5ndWxhci5JUHJvbWlzZTxJUGxheWxpc3Q+IHtcclxuICAgICAgICBwbGF5bGlzdC5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyA9IHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvcGxheWxpc3RzXCIpLCBwbGF5bGlzdCkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUocGxheWxpc3Q6IElFeHRQbGF5bGlzdCwgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IEFycmF5PElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzPiwgaXNSZXNldFByZXZpZXc6IGJvb2xlYW4sIHByZXZpZXc/OiBGaWxlKTogYW5ndWxhci5JUHJvbWlzZTxJUGxheWxpc3Q+IHtcclxuICAgICAgICBwbGF5bGlzdC5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyA9IHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzO1xyXG4gICAgICAgIHBsYXlsaXN0LnByZXZpZXcgPSBwcmV2aWV3ICE9IG51bGxcclxuICAgICAgICAgICAgPyB7bmFtZTogcHJldmlldy5uYW1lLCB0eXBlOiBwcmV2aWV3LnR5cGUsIHNpemU6IHByZXZpZXcuc2l6ZX1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIHBsYXlsaXN0LnJlc2V0UHJldmlldyA9IGlzUmVzZXRQcmV2aWV3O1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9wbGF5bGlzdHNcIiksIHBsYXlsaXN0KS50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFscyhpZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJTWF0ZXJpYWw+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3BsYXlsaXN0cy86aWQvbWF0ZXJpYWxzTGlzdFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7U2VhcmNoQ29udHJvbEhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvU2VhcmNoQ29udHJvbEhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvTWF0ZXJpYWxzUm91dGVyXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lQbGF5bGlzdH0gZnJvbSBcIi4vbW9kZWxzL0lQbGF5bGlzdFwiO1xyXG5pbXBvcnQge0lHcmlkTW9kZWwsIEdyaWRNb2RlbH0gZnJvbSBcIi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge09iamVjdFR5cGVVdGlsc30gZnJvbSBcIi4vLi4vdXRpbHMvT2JqZWN0VHlwZVV0aWxzXCI7XHJcbmltcG9ydCB7UGVyc29uYWxTZXJ2aWNlfSBmcm9tIFwiLi8uLi9wZXJzb25hbC9QZXJzb25hbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlZE9iamVjdFR5cGV9IGZyb20gXCIuLy4uL1JlZmVyZW5jZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7UmVzaXplVmlld1NlcnZpY2V9IGZyb20gXCIuLi91dGlscy9SZXNpemVWaWV3U2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBsYXlsaXN0c0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJtYXRlcmlhbHMuUGxheWxpc3RzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIHJvd1Nob3c6IE1hcDxudW1iZXIsIGJvb2xlYW4+ID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgcGxheWxpc3RzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElQbGF5bGlzdD47XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG4gICAgcHVibGljIHJlc2l6ZVZpZXdTZXJ2aWNlOiBSZXNpemVWaWV3U2VydmljZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVyc29uYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc0FwaTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsU2VydmljZTogUGVyc29uYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnJhbmRpbmdTZXJ2aWNlOiBDdXN0b21CcmFuZGluZ1NlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLk1ZX0xJQlJBUllfUExBWUxJU1RTX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIlBsYXlsaXN0c1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLnByZXNlcnZlSGVhZGVyKClcclxuICAgICAgICAgICAgICAgICAgICAuYWRkQWN0aW9uTGlua0lmKHN5c3RlbVBlcm1pc3Npb25zLmFkZFBsYXlsaXN0cywgJysmbmJzcDtOZXcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsc1JvdXRlci5wbGF5bGlzdENyZWF0ZVVybCgpKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBsYXlsaXN0c0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElQbGF5bGlzdD4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3BsYXlsaXN0c1wiKSkpO1xyXG4gICAgICAgIHRoaXMucGxheWxpc3RzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuXHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZSA9IG5ldyBSZXNpemVWaWV3U2VydmljZSh0aGlzLnZpZXdUeXBlKTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cgPSBhbmd1bGFyLmVsZW1lbnQodGhpcy4kd2luZG93KTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcIlwiKTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJkZXN0cm95XCIpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShwYXJhbTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikpO1xyXG4gICAgICAgIGlmIChwYXJhbSA9PSBcImRlc3Ryb3lcIikge1xyXG4gICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtID09IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtLmhhc0NsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExhbmd1YWdlcyhsYW5ndWFnZXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBsYW5ndWFnZXNTdHI6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGFuZ3VhZ2VzLmZvckVhY2gobCA9PiB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlc1N0ciArPSAgbCArIFwiLCBcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbGFuZ3VhZ2VzU3RyLnN1YnN0cmluZygwLCBsYW5ndWFnZXNTdHIubGVuZ3RoLTIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hQbGF5bGlzdHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wbGF5bGlzdHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRQbGF5bGlzdChwbGF5bGlzdElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5tYXRlcmlhbHNSb3V0ZXIucGxheWxpc3REZXRhaWxzVXJsKHBsYXlsaXN0SWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RldGFpbHMoaW5kZXg6IG51bWJlciwga2V5Q29kZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYoa2V5Q29kZSA9PSAxMyB8fCAha2V5Q29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGluZGV4LCAhdGhpcy5yb3dTaG93LmdldChpbmRleCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkVG9GYXZvcml0ZXMocGxheWxpc3Q6IElQbGF5bGlzdCkge1xyXG4gICAgICAgIHRoaXMucm93U2hvdy5zZXQocGxheWxpc3QuaWQsICF0aGlzLnJvd1Nob3cuZ2V0KHBsYXlsaXN0LmlkKSk7XHJcbiAgICAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UuYWRkVG9GYXZvcml0ZXMocGxheWxpc3QuaWQsIHBsYXlsaXN0LnZlcnNpb24sIFJlZmVyZW5jZWRPYmplY3RUeXBlLlBMQVlMSVNUKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgcGxheWxpc3QgaGFzIGJlZW4gYWRkZWQgdG8geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIHBsYXlsaXN0LmZhdm9yaXRlID0gdHJ1ZTtcclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuYWxyZWFkeS5pbi5mYXZvcml0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgcGxheWxpc3QgaXMgYWxyZWFkeSBpbiB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5pcy5jaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGFub3RoZXIgdXNlcjogcGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYW5kIHRyeSBhZ2FpblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVGcm9tRmF2b3JpdGVzKHBsYXlsaXN0OiBJUGxheWxpc3QpIHtcclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KHBsYXlsaXN0LmlkLCAhdGhpcy5yb3dTaG93LmdldChwbGF5bGlzdC5pZCkpO1xyXG4gICAgICAgIHRoaXMucGVyc29uYWxTZXJ2aWNlLnJlbW92ZUZyb21GYXZvcml0ZXMocGxheWxpc3QuaWQsIHBsYXlsaXN0LnZlcnNpb24sIFJlZmVyZW5jZWRPYmplY3RUeXBlLlBMQVlMSVNUKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgcGxheWxpc3QgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICBwbGF5bGlzdC5mYXZvcml0ZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5ub3QuaW4uZmF2b3JpdGVcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmVtb3ZlIGZyb20geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuaXMuY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgZGF0YSBoYXMgYmVlbiBtb2RpZmllZCBieSBhbm90aGVyIHVzZXI6IHBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGFuZCB0cnkgYWdhaW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcbiAgICAgICAgdGhpcy5wbGF5bGlzdHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wbGF5bGlzdHNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBsYXlsaXN0c0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBsYXlsaXN0c0dyaWRNb2RlbC5maWx0ZXIuY29tcGxleGl0eUxldmVsID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBsYXlsaXN0c0dyaWRNb2RlbC5maWx0ZXIubGFuZ3VhZ2VJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wbGF5bGlzdHNHcmlkTW9kZWwuZmlsdGVyLnNvdXJjZUlkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBsYXlsaXN0c0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLm9sZFZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsImltcG9ydCB7VmhzU2VhcmNoQ29udHJvbGxlcn0gZnJvbSBcIi4uL2NvbXBvbmVudHMvVmhzU2VhcmNoRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7QXV0aE1hbmFnZXJ9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtPYmplY3RUeXBlVXRpbHN9IGZyb20gXCIuLi91dGlscy9PYmplY3RUeXBlVXRpbHNcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL01hdGVyaWFsc1JvdXRlclwiO1xyXG5cclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTG9hZGluZ0xpc3RlbmVyLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lNYXRlcmlhbH0gZnJvbSBcIi4vbW9kZWxzL0lNYXRlcmlhbFwiO1xyXG5pbXBvcnQge1Jlc2l6ZVZpZXdTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvUmVzaXplVmlld1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxUeXBlLCBNYXRlcmlhbFR5cGVFbnVtfSBmcm9tIFwiLi9tb2RlbHMvTWF0ZXJpYWxUeXBlXCI7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcblxyXG5pbnRlcmZhY2UgSUV4dE1hdGVyaWFsIGV4dGVuZHMgSU1hdGVyaWFsIHtcclxuICAgIHNob3duPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNlYXJjaENvbnRyb2xsZXIgaW1wbGVtZW50cyBJR3JpZExvYWRpbmdMaXN0ZW5lciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcIm1hdGVyaWFscy5TZWFyY2hDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHJpdmF0ZSBzZWFyY2hUeXBlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHNlYXJjaFF1ZXJ5OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHB1cmNoYXNlZE9yZGVySWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBtYXRlcmlhbHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SU1hdGVyaWFsPjtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIHNlYXJjaFZpZXdUeXBlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2hvd1VwbG9hZERhdGVGaWx0ZXI6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgd2luZG93OiBhbnk7XHJcbiAgICBwdWJsaWMgcmVzaXplVmlld1NlcnZpY2U6IFJlc2l6ZVZpZXdTZXJ2aWNlO1xyXG4gICAgcHVibGljIGlzU2lkZWJhckZpbHRlckhpZGRlbjogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBtYXRlcmlhbFR5cGUgPSBNYXRlcmlhbFR5cGVFbnVtO1xyXG5cclxuICAgIHB1YmxpYyBjb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICBwdWJsaWMgc3RvcmFnZUZpbHRlclZhbHVlczogYW55O1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIE1hdGVyaWFsc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY29tbW9uRmlsdGVyU2VydmljZTogQ29tbW9uRmlsdGVyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5wdXJjaGFzZWRPcmRlcklkID0gcGFyc2VJbnQoJGxvY2F0aW9uLnNlYXJjaCgpW0NvdXJzZXNSb3V0ZXIuUFVSQ0hBU0VEX09SREVSXSkgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLnNlYXJjaFR5cGUgPSAkbG9jYXRpb24uc2VhcmNoKClbVmhzU2VhcmNoQ29udHJvbGxlci5GSUxFX0ZPUk1BVF9QQVJBTUVURVJdO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAkbG9jYXRpb24uc2VhcmNoKClbVmhzU2VhcmNoQ29udHJvbGxlci5TRUFSQ0hfU1RSSU5HX1BBUkFNRVRFUl07XHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpO1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkVEVUNBVElPTl9NQVRFUklBTFNfTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTWF0ZXJpYWxzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0F1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZigkbG9jYXRpb24uc2VhcmNoKClbQ291cnNlc1JvdXRlci5MT0dPTl9SRVFVSVJFRF0pIHtcclxuICAgICAgICAgICAgICAgIGF1dGhSZWRpcmVjdC5yZWRpcmVjdFRvTG9nT24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuXHJcbiAgICAgICAgbGV0IG1hdGVyaWFsc1VybDogc3RyaW5nID0gdGhpcy5wdXJjaGFzZWRPcmRlcklkICE9IG51bGxcclxuICAgICAgICAgICAgPyBcIi9hcGkvbWF0ZXJpYWxzL3B1cmNoYXNlZD9wdXJjaGFzZWRPcmRlcj1cIiArIHRoaXMucHVyY2hhc2VkT3JkZXJJZFxyXG4gICAgICAgICAgICA6IFwiL2FwaS9tYXRlcmlhbHNcIjtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElNYXRlcmlhbD4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UobWF0ZXJpYWxzVXJsKSkpO1xyXG4gICAgICAgIHRoaXMuZ2V0U3RvcmFnZUZpbHRlcnMoKTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIodGhpcyk7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCl7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwucGFnZVNpemUgPSA5O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlYXJjaFR5cGUgIT0gbnVsbCA/IHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5maWxlVHlwZSA9IHRoaXMuc2VhcmNoVHlwZSA6IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSAhPSBudWxsID8gdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoUXVlcnkgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMuc2hvd1VwbG9hZERhdGVGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNTaWRlYmFyRmlsdGVySGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMuc2VhcmNoVmlld1R5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRTZWFyY2goKTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cgPSBhbmd1bGFyLmVsZW1lbnQodGhpcy4kd2luZG93KTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFBhZ2UgPSB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5jdXJyZW50UGFnZSA+PSB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC50b3RhbFBhZ2VDb3VudFxyXG4gICAgICAgICAgICAgICAgPyAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuY3VycmVudFBhZ2UgLSAxXHJcbiAgICAgICAgICAgICAgICA6dGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuY3VycmVudFBhZ2U7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkUGFnZShjdXJyZW50UGFnZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkUGFnZShjdXJyZW50UGFnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWaWV3VHlwZSA9IHRoaXMucmVzaXplVmlld1NlcnZpY2Uuc2V0UmVzaXplVmlld1R5cGUodGhpcy5zZWFyY2hWaWV3VHlwZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3cudW5iaW5kKCdyZXNpemUnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1c2VyO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy51c2VyUHJvZmlsZSA/XHJcbiAgICAgICAgICAgICAgICBOdW1iZXIodGhpcy51c2VyUHJvZmlsZS5wYWdlVmlld01vZGUpIDogMTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlRmlsdGVyVmFsdWVzID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldEZpbHRlclZhbHVlcyhTZWFyY2hDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuYXBwbHlTdG9yYWdlRmlsdGVyKHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyxcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0U2VhcmNoSW5wdXQoU2VhcmNoQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICBpZih0aGlzLnNlYXJjaElucHV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5vcGVuU2VhcmNoSW5wdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdG9wVHlwZSA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRUb3BTdGF0dXMoU2VhcmNoQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICBpZih0b3BUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUb3BUeXBlKHRvcFR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLm9sZFZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVVc2VyUGFnZVZpZXdNb2RlKEJvb2xlYW4odmlld1R5cGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVVzZXJQYWdlVmlld01vZGUocGFnZVZpZXdNb2RlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS51cGRhdGVQYWdlVmlld01vZGUocGFnZVZpZXdNb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaWV3VHlwZVNlbGVjdGVkKHZpZXdUeXBlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3VHlwZSA9PSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVG9wVHlwZShzdGF0dXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5zYXZlVG9wU3RhdHVzKFNlYXJjaENvbnRyb2xsZXIuTkFNRSwgc3RhdHVzKTtcclxuICAgICAgICB0aGlzLmFwcGx5VG9wVHlwZShzdGF0dXMpO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwbHlUb3BUeXBlKHN0YXR1czogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSAnQUxMJzpcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5maWxlVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQVVESU8nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLmZpbGVUeXBlID0gTWF0ZXJpYWxUeXBlLkFVRElPO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1ZJREVPJzpcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5maWxlVHlwZSA9IE1hdGVyaWFsVHlwZS5WSURFTztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdQSE9UTyc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuZmlsZVR5cGUgPSBNYXRlcmlhbFR5cGUuUEhPVE87XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnTElOSyc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuZmlsZVR5cGUgPSBNYXRlcmlhbFR5cGUuTElOSztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdET0NVTUVOVFMnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLmZpbGVUeXBlID0gTWF0ZXJpYWxUeXBlLkRPQ1VNRU5UUztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoS2V5UHJlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNhdmVTZWFyY2hJbnB1dChTZWFyY2hDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xvc2VTZWFyY2hJbnB1dChTZWFyY2hDb250cm9sbGVyLk5BTUUsIHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGFydExvYWRpbmcoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmRMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaCgobWF0ZXJpYWw6IElNYXRlcmlhbCkgPT4ge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zdWJqZWN0QW5kVG9waWMgPSBtYXRlcmlhbC5zdWJqZWN0TmFtZSArIFwiIC8gXCIgKyBtYXRlcmlhbC50aXRsZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoTWF0ZXJpYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLmRhdGVGcm9tID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5kYXRlRnJvbVRleHQpO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5kYXRlVG8gPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLmRhdGVUb1RleHQpO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZSA9IHRoaXMudmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRmlsdGVyQ2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ2aHNNYXRlcmlhbHNGaWx0ZXIuXCIgKyBrZXksIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTWF0ZXJpYWxzRmlsdGVyLlwiICsga2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRTZWFyY2goKSB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNNYXRlcmlhbHNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTWF0ZXJpYWxzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNNYXRlcmlhbHNGaWx0ZXIudmlld1R5cGVcIikpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLnZpZXdUeXBlID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc01hdGVyaWFsc0ZpbHRlci52aWV3VHlwZVwiKSk7XHJcbiAgICAgICAgLy8gICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGU7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTWF0ZXJpYWxzRmlsdGVyLnN1YmplY3RJZFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc01hdGVyaWFsc0ZpbHRlci5zdWJqZWN0SWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc01hdGVyaWFsc0ZpbHRlci5maWxlVHlwZVwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuZmlsZVR5cGUgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzTWF0ZXJpYWxzRmlsdGVyLmZpbGVUeXBlXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNNYXRlcmlhbHNGaWx0ZXIudG9waWNcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLnRvcGljID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc01hdGVyaWFsc0ZpbHRlci50b3BpY1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNNYXRlcmlhbHNGaWx0ZXIuc2VhcmNoVmlld1R5cGVcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFZpZXdUeXBlID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc01hdGVyaWFsc0ZpbHRlci5zZWFyY2hWaWV3VHlwZVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmlld1R5cGUgPSB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoVmlld1R5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhclNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5vd25lcklkID0gXCJcIjtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gXCJcIjtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIudG9waWMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5sYW5ndWFnZUlkID0gXCJcIjtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5maWx0ZXIuZmlsZVR5cGUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5kYXRlRnJvbSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLmRhdGVGcm9tVGV4dCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLmRhdGVUbyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNHcmlkTW9kZWwuZmlsdGVyLmRhdGVUb1RleHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVmlld1R5cGUgPSAxO1xyXG5cclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTWF0ZXJpYWxzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTWF0ZXJpYWxzRmlsdGVyLnZpZXdUeXBlXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNNYXRlcmlhbHNGaWx0ZXIuc3ViamVjdElkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNNYXRlcmlhbHNGaWx0ZXIudG9waWNcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc01hdGVyaWFsc0ZpbHRlci5maWxlVHlwZVwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzTWF0ZXJpYWxzRmlsdGVyLnNlYXJjaFZpZXdUeXBlXCIpO1xyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZE1hdGVyaWFsUGFnZShtYXRlcmlhbElkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5tYXRlcmlhbHNSb3V0ZXIud2F0Y2hVcmwobWF0ZXJpYWxJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93UHVjaGFzZUhpbnQoaWQ6IG51bWJlciwgJGV2ZW50OiBhbmd1bGFyLklBbmd1bGFyRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICAkKCcjYnV0dG9uLXB1cmNoYXNlLScgKyBpZCkucG9wb3Zlcignc2hvdycpO1xyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4gJCgnI2J1dHRvbi1wdXJjaGFzZS0nICsgaWQpLnBvcG92ZXIoJ2hpZGUnKSwgNTAwMCk7XHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFsVHlwZUNsYXNzKG1hdGVyaWFsVHlwZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RUeXBlVXRpbHMuZ2V0TWF0ZXJpYWxHbHlwaGljb25DbGFzcyhtYXRlcmlhbFR5cGVJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFsVHlwZVRpdGxlKG1hdGVyaWFsVHlwZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RUeXBlVXRpbHMuZ2V0TWF0ZXJpYWxUeXBlVGl0bGUobWF0ZXJpYWxUeXBlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhtYXRlcmlhbDogSUV4dE1hdGVyaWFsLCBrZXlDb2RlOiBudW1iZXIpIHtcclxuICAgICAgICBpZihrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNob3duID0gIW1hdGVyaWFsLnNob3duO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0U2VhcmNoVmlld1R5cGUodmlld1R5cGU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLm9sZFZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VhcmNoVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE93bmVyc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIi9hcGkvdXNlclNlbGVjdG9yL3VzZXJzRm9yQ3VycmVudFVzZXJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlU2lkZWJhckZpbHRlclZpc2liaWxpdHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1NpZGViYXJGaWx0ZXJIaWRkZW4gPSAhdGhpcy5pc1NpZGViYXJGaWx0ZXJIaWRkZW47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dGaWx0ZXJEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNob3dGaWx0ZXJEaWFsb2cod2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRmlsdGVyKHR5cGU6IHN0cmluZywgcmVmZXJlbmNlT2JqZWN0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb3VudEFjdGl2ZUluY3JlbWVudCA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS51cGRhdGVHZW5lcmFsRmlsdGVyKHR5cGUsIHJlZmVyZW5jZU9iamVjdCxcclxuICAgICAgICAgICAgU2VhcmNoQ29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyICs9IGNvdW50QWN0aXZlSW5jcmVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xlYXJGaWx0ZXIoU2VhcmNoQ29udHJvbGxlci5OQU1FLCB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hdGVyaWFsVHlwZU5hbWUodHlwZUtleSkge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZUtleSkge1xyXG4gICAgICAgICAgICBjYXNlICdBTEwnOiByZXR1cm4gJ0FMTCc7XHJcbiAgICAgICAgICAgIGNhc2UgJ0FVRElPJzogcmV0dXJuICdBVURJTyc7XHJcbiAgICAgICAgICAgIGNhc2UgJ1ZJREVPJyA6IHJldHVybiAnVklERU8nO1xyXG4gICAgICAgICAgICBjYXNlICdQSE9UTycgOiByZXR1cm4gJ0lNQUdFJztcclxuICAgICAgICAgICAgY2FzZSAnTElOSycgOiByZXR1cm4gJ0xJTksnO1xyXG4gICAgICAgICAgICBjYXNlICdET0NVTUVOVFMnOiByZXR1cm4gJ09USEVSJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFBvcHVwQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgICAgICBsZXQgY2FyZHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiY2FyZCBpbmZvcm1hdGlvbl90b29sdGlwXCIpKTtcclxuICAgICAgICBmb3IgKGxldCBjYXJkIG9mIGNhcmRzKSB7XHJcbiAgICAgICAgICAgIGxldCByZWM6IENsaWVudFJlY3QgPSBjYXJkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICBsZXQgcG9wdXA6IEVsZW1lbnQgPSBjYXJkLnBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInBvcHVwX29uaG92ZXJcIikuaXRlbSgwKTtcclxuICAgICAgICAgICAgaWYgKHJlYy5yaWdodCArIHBvcHVwLmNsaWVudFdpZHRoID49IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwicG9wdXBfb25ob3ZlciBsZWZ0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJyaWdodC1wb2ludGVyXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIHJpZ2h0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJsZWZ0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNob3J0U3VtbWFyeShvcmlnaW5hbFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RyaW5nICE9IHVuZGVmaW5lZCAmJiBvcmlnaW5hbFN0cmluZy5sZW5ndGggPiAyNTZcclxuICAgICAgICAgICAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHJpbmcoMCwgMjU2KSArICcuLi4nXHJcbiAgICAgICAgICAgIDogb3JpZ2luYWxTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlY29kZVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdHlwZTtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIkF1ZGlvXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiQXVkaW9cIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJWaWRlb1wiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIlZpZGVvXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiTGlua1wiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIkxpbmtcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJJbWFnZVwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIkltYWdlXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiT3RoZXIgZG9jdW1lbnRzXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiT3RoZXIgZG9jdW1lbnRzXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIENoZWNrcG9pbnRUeXBlIHtcclxuICAgIEJVVFRPTixcclxuICAgIFFVRVNUSU9OXHJcbn1cclxuIiwiaW1wb3J0IHtJVmhzTWF0ZXJpYWxEaXJlY3RpdmVTY29wZX0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvVmhzTWF0ZXJpYWxEaXJlY3RpdmVcIjtcclxuaW1wb3J0IElTdWJ0aXRsZVNvdXJjZSBmcm9tIFwiLi9JU3VidGl0bGVTb3VyY2VcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElNdWx0aW1lZGlhTWF0ZXJpYWxTZXR0aW5ncyB7XHJcbiAgICBtYXRlcmlhbElkOiBzdHJpbmc7XHJcbiAgICBzb3VyY2U6IHN0cmluZztcclxuICAgIHBvc3Rlcjogc3RyaW5nO1xyXG4gICAgY2hlY2twb2ludHM6IHN0cmluZztcclxuICAgIGlzUmV3aW5kQWxsb3dlZDogYm9vbGVhbjtcclxuICAgIHN1YnRpdGxlczogQXJyYXk8SVN1YnRpdGxlU291cmNlPjtcclxuICAgIGN1cnJlbnRUcmFjazogc3RyaW5nO1xyXG4gICAgY291cnNlSWQ6IHN0cmluZztcclxuICAgIHNlY3Rpb25JZDogc3RyaW5nO1xyXG4gICAgJHNjb3BlOiBhbnk7XHJcbn0iLCJleHBvcnQgZW51bSBNYXRlcmlhbFR5cGVFbnVtIHtcclxuICAgIEFVRElPID0gMSxcclxuICAgIFZJREVPID0gMixcclxuICAgIExJTksgPSAzLFxyXG4gICAgUEhPVE8gPSA0LFxyXG4gICAgRE9DVU1FTlRTID0gNVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBNYXRlcmlhbFR5cGVLZXlFbnVtIHtcclxuICAgIEFVRElPLFxyXG4gICAgVklERU8sXHJcbiAgICBMSU5LLFxyXG4gICAgUEhPVE8sXHJcbiAgICBET0NVTUVOVFNcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsVHlwZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFVRElPOiBudW1iZXIgPSAxO1xyXG4gICAgcHVibGljIHN0YXRpYyBWSURFTzogbnVtYmVyID0gMjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTElOSzogbnVtYmVyID0gMztcclxuICAgIHB1YmxpYyBzdGF0aWMgUEhPVE86IG51bWJlciA9IDQ7XHJcbiAgICBwdWJsaWMgc3RhdGljIERPQ1VNRU5UUzogbnVtYmVyID0gNTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTWF0ZXJpYWxUeXBlIHtcclxuICAgIGlkPzogbnVtYmVyO1xyXG4gICAgbmFtZT86IHN0cmluZztcclxufSIsImV4cG9ydCBlbnVtIE5vQW5zd2VyRWZmZWN0VHlwZSB7XHJcbiAgICBKVU1QX1RPX1RJTUUsXHJcbiAgICBSRURJUkVDVF9UT19MSU5LXHJcbn0iLCJleHBvcnQgY2xhc3MgVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkge1xyXG4gICAgcHVibGljIHN0YXRpYyBWSURFT19QTEFZRVJfS0VZOiBzdHJpbmcgPSBcInZpZGVvUGxheWVyLVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBTT1VSQ0VfS0VZOiBzdHJpbmcgPSBWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5WSURFT19QTEFZRVJfS0VZICsgXCJ2aWRlb1VSTFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBQT1NURVJfVVJMX0tFWTogc3RyaW5nID0gVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuVklERU9fUExBWUVSX0tFWSArIFwicG9zdGVyXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRJTUVTVEFNUF9LRVk6IHN0cmluZyA9IFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LlZJREVPX1BMQVlFUl9LRVkgKyBcInRpbWVzdGFtcFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBTVUJUSVRMRVNfVFJBQ0tTOiBzdHJpbmcgPSBWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5WSURFT19QTEFZRVJfS0VZICsgXCJzdWJ0aXRsZXNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ0hFQ0tQT0lOVFNfS0VZOiBzdHJpbmcgPSBWaWRlb1BsYXllckxvY2FsU3RvcmFnZUtleS5WSURFT19QTEFZRVJfS0VZICsgXCJjaGVja3BvaW50c1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBDT05GSUdVUkFUSU9OX0tFWTogc3RyaW5nID0gVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuVklERU9fUExBWUVSX0tFWSArIFwiY29uZmlndXJhdGlvblwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBTVUJUSVRMRVNfQ1VSUkVOVF9UUkFDSzogc3RyaW5nID0gVmlkZW9QbGF5ZXJMb2NhbFN0b3JhZ2VLZXkuVklERU9fUExBWUVSX0tFWSArIFwiY3VycmVudFRyYWNrXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIENVUlJFTlRfQ0hFQ0tQT0lOVF9LRVk6IHN0cmluZyA9IFZpZGVvUGxheWVyTG9jYWxTdG9yYWdlS2V5LlZJREVPX1BMQVlFUl9LRVkgKyBcImN1cnJlbnRDaGVja3BvaW50XCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBTRUNUSU9OX0tFWTogc3RyaW5nID0gXCJzZWN0aW9uSWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTUFURVJJQUxfS0VZOiBzdHJpbmcgPSBcIm1hdGVyaWFsSURcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUFJFVl9NQVRFUklBTF9LRVk6IHN0cmluZyA9IFwicHJldk1hdGVyaWFsUHJvZ3Jlc3NcIjtcclxufSIsImltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SU5ld3N9IGZyb20gXCIuL21vZGVscy9JTmV3c1wiO1xyXG5pbXBvcnQge05ld3NTZXJ2aWNlfSBmcm9tIFwiLi9OZXdzU2VydmljZVwiO1xyXG5pbXBvcnQge05ld3NSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL05ld3NSb3V0ZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSGVscERldGFpbHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibmV3cy5IZWxwRGV0YWlsc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwcml2YXRlIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwcml2YXRlIG5ld3NJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIG5ld3M6IElOZXdzID0ge307XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgTmV3c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBOZXdzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgbmV3c1NlcnZpY2U6IE5ld3NTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBuZXdzUm91dGVyOiBOZXdzUm91dGVyXHJcbiAgICApIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkZBUV9NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJIZWxwXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgIGlmICgkcm91dGVQYXJhbXNbTmV3c1JvdXRlci5PTkVfTkVXU19JRF9QQVJBTV0gPT09ICdudWxsJykge1xyXG4gICAgICAgICAgICB0aGlzLm5ld3NTZXJ2aWNlLmdldEhlbHBEZXRhaWxzKCkudGhlbihyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghIXIuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5uZXdzUm91dGVyLmhlbHBVcmwoci5pZCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5ld3NJZCA9ICRyb3V0ZVBhcmFtc1tOZXdzUm91dGVyLk9ORV9ORVdTX0lEX1BBUkFNXTtcclxuICAgICAgICAgICAgdGhpcy5uZXdzU2VydmljZS5nZXROZXdzKHRoaXMubmV3c0lkKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkocmVzdWx0LCB0aGlzLm5ld3MpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtOZXdzUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL05ld3NSb3V0ZXJcIjtcclxuaW1wb3J0IHtOZXdzU2VydmljZX0gZnJvbSBcIi4vTmV3c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi8uLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuXHJcbmltcG9ydCB7SU5ld3N9IGZyb20gXCIuL21vZGVscy9JTmV3c1wiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE5ld3NFZGl0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcIm5ld3MuTmV3c0VkaXRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIG5ld3NJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIG5ld3M6IElOZXdzID0ge3R5cGU6IFwiQUxMXCJ9O1xyXG5cclxuICAgIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZGlzYWJsZWRTYXZlQnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHVzZXI6IElVc2VySW5mbztcclxuICAgIHB1YmxpYyBuZXdzVHlwZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBBdXRoUmVkaXJlY3QuTkFNRSxcclxuICAgICAgICBOZXdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIE5ld3NSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgbmV3c1NlcnZpY2U6IE5ld3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBuZXdzUm91dGVyOiBOZXdzUm91dGVyKSB7XHJcbiAgICAgICAgdGhpcy5uZXdzVHlwZSA9ICRyb3V0ZVBhcmFtc1tOZXdzUm91dGVyLk5FV1NfVFlQRV9QQVJBTV07XHJcbiAgICAgICAgdGhpcy5uZXdzSWQgPSAkcm91dGVQYXJhbXNbTmV3c1JvdXRlci5PTkVfTkVXU19JRF9QQVJBTV07XHJcblxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICAgIGF1dGhSZWRpcmVjdC5yZWRpcmVjdFRvTG9nT24oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kU3lzdGVtUGVybWlzc2lvbnNJZih0aGlzLm5ld3NJZCA9PSBudWxsLCBzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5hZGROZXdzKVxyXG4gICAgICAgICAgICAuZGVtYW5kTmV3c1Blcm1pc3Npb25zSWYodGhpcy5uZXdzSWQgIT0gbnVsbCwgU3RyaW5nKHRoaXMubmV3c0lkKSwgbmV3c1Blcm1pc3Npb25zID0+IG5ld3NQZXJtaXNzaW9ucy5lZGl0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmV3c0lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZE5ld3MoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFMTF9ORVdTX01FTlVfS0VZKTtcclxuICAgICAgICAgICAgbGV0IG5ld3NUeXBlTG9jYWw6IHN0cmluZyA9IHRoaXMubmV3c1R5cGUudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIobmV3c1R5cGVMb2NhbCA9PT0gXCJORVdTXCIgPyBcIkFkZCBOZXdzXCIgOiBcIkFkZCBEaXNjdXNzaW9uXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm5ld3MudHlwZSA9IG5ld3NUeXBlTG9jYWw7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyA9IHVzZXIuYWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZE5ld3MoKSB7XHJcbiAgICAgICAgdGhpcy5uZXdzU2VydmljZS5nZXROZXdzKHRoaXMubmV3c0lkKS50aGVuKG4gPT4ge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkobiwgdGhpcy5uZXdzKTtcclxuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZXdzLnR5cGUudG9VcHBlckNhc2UoKSA9PT0gXCJIRUxQXCIpIHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkVkaXQgSGVscCBcIjtcclxuICAgICAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuRkFRX01FTlVfS0VZKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkVkaXQgTmV3cyBcIjtcclxuICAgICAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQUxMX05FV1NfTUVOVV9LRVkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKG1lc3NhZ2UgKyBcIuKAmFwiXHJcbiAgICAgICAgICAgICAgICArIHRoaXMubmV3cy50aXRsZSArIFwi4oCZXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBsZXQgbWVzc2FnZSA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlciAmJiB0aGlzLnVzZXIuYnVzaW5lc3NVbml0cyAmJiB0aGlzLnVzZXIuYnVzaW5lc3NVbml0cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLm5ld3MuYnVzaW5lc3NVbml0SWQgPSB0aGlzLnVzZXIuYnVzaW5lc3NVbml0c1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLm5ld3NJZFxyXG4gICAgICAgICAgICA/IHRoaXMubmV3c1NlcnZpY2UudXBkYXRlKHRoaXMubmV3cylcclxuICAgICAgICAgICAgOiB0aGlzLm5ld3NTZXJ2aWNlLmNyZWF0ZSh0aGlzLm5ld3MpO1xyXG4gICAgICAgIHByb21pc2UudGhlbihuID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLm5ld3MudHlwZS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiTkVXU1wiOlxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIk5ld3MgaGFzIGJlZW4gc2F2ZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJIRUxQXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiSGVscCBoYXMgYmVlbiBzYXZlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIkRJU0NVU1NJT05cIjpcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJEaXNjdXNzaW9uIGhhcyBiZWVuIHNhdmVkXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhtZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubmV3cy50eXBlLnRvVXBwZXJDYXNlKCkgPT09IFwiSEVMUFwiID8gdGhpcy5uZXdzUm91dGVyLmhlbHBVcmwobi5pZCkgOiB0aGlzLm5ld3NSb3V0ZXIub25lTmV3c1VybChuLmlkKSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RPckNsZWFyRmllbGRzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmKHRoaXMubmV3c0lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm5ld3NSb3V0ZXIub25lTmV3c1VybCh0aGlzLm5ld3NJZCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm5ld3NSb3V0ZXIubmV3c1NlYXJjaFVybCh0aGlzLm5ld3NUeXBlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvSGVscERldGFpbHNPckNsZWFyRmllbGRzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmKHRoaXMubmV3c0lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm5ld3NSb3V0ZXIuaGVscFVybCh0aGlzLm5ld3NJZCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYW5GaWVsZHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhbkZpZWxkcygpIDogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZXdzID0ge307XHJcbiAgICAgICAgdGhpcy5uZXdzLnR5cGUgPSB0aGlzLm5ld3NUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJ1c2luZXNzVW5pdENoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uZXdzLmZ1bGxUZXh0ID0gXCJcIjtcclxuICAgICAgICB0aGlzLiR0aW1lb3V0KGEgPT4gdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TmV3c1NlcnZpY2V9IGZyb20gXCIuL05ld3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TmV3c1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9OZXdzUm91dGVyXCI7XHJcbmltcG9ydCB7TmV3c1NlYXJjaENvbnRyb2xsZXJ9IGZyb20gXCIuL05ld3NTZWFyY2hDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7T25lTmV3c0NvbnRyb2xsZXJ9IGZyb20gXCIuL09uZU5ld3NDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7TmV3c0VkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9OZXdzRWRpdENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtIZWxwRGV0YWlsc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0hlbHBEZXRhaWxzQ29udHJvbGxlclwiO1xyXG5cclxuaW1wb3J0IHtBdXRoQ29yZU1vZHVsZX0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aENvcmVNb2R1bGVcIjtcclxuaW1wb3J0IHtTb2NpYWxNb2R1bGV9IGZyb20gXCIuLy4uL3NvY2lhbC9Tb2NpYWxNb2R1bGVcIjtcclxuaW1wb3J0IHtTZWN1cml0eU1vZHVsZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuXHJcbmV4cG9ydCB2YXIgTmV3c01vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIm5ld3NcIiwgW1xyXG4gICAgICAgIEF1dGhDb3JlTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgU29jaWFsTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgU2VjdXJpdHlNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKE5ld3NTZXJ2aWNlLk5BTUUsIE5ld3NTZXJ2aWNlKVxyXG4gICAgLmNvbnRyb2xsZXIoTmV3c1NlYXJjaENvbnRyb2xsZXIuTkFNRSwgTmV3c1NlYXJjaENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihPbmVOZXdzQ29udHJvbGxlci5OQU1FLCBPbmVOZXdzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKE5ld3NFZGl0Q29udHJvbGxlci5OQU1FLCBOZXdzRWRpdENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihIZWxwRGV0YWlsc0NvbnRyb2xsZXIuTkFNRSwgSGVscERldGFpbHNDb250cm9sbGVyKTsiLCJpbXBvcnQge05ld3NSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvTmV3c1JvdXRlclwiO1xyXG5pbXBvcnQge05ld3NTZXJ2aWNlfSBmcm9tIFwiLi9OZXdzU2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge0lHcmlkTW9kZWwsIEdyaWRNb2RlbH0gZnJvbSBcIi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi8uLi91dGlscy9Nb21lbnRcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcblxyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi8uLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJzb25hbFNlcnZpY2V9IGZyb20gXCIuLy4uL3BlcnNvbmFsL1BlcnNvbmFsU2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtJTmV3c30gZnJvbSBcIi4vbW9kZWxzL0lOZXdzXCJcclxuXHJcbmV4cG9ydCBjbGFzcyBOZXdzU2VhcmNoQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcIm5ld3MuTmV3c1NlYXJjaENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwcml2YXRlIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgbmV3c1R5cGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBuZXdzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElOZXdzPjtcclxuICAgIHB1YmxpYyBzdWJzY3JpYmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RyaW5nU2VhcmNoOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc3RyaW5nTm90Rm91bmQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBOZXdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIE5ld3NSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVyc29uYWxTZXJ2aWNlOiBQZXJzb25hbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG5ld3NTZXJ2aWNlOiBOZXdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbmV3c1JvdXRlcjogTmV3c1JvdXRlcikge1xyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLm5ld3NUeXBlID0gJHJvdXRlUGFyYW1zW05ld3NSb3V0ZXIuTkVXU19UWVBFX1BBUkFNXTtcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLm5ld3NUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJuZXdzXCI6XHJcbiAgICAgICAgICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFMTF9ORVdTX01FTlVfS0VZKTtcclxuICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTmV3c1wiKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nU2VhcmNoID0gXCJTZWFyY2ggaW4gbmV3c1wiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkaXNjdXNzaW9uXCI6XHJcbiAgICAgICAgICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlNUVURFTlRTX09GRkVSU19NRU5VX0tFWSk7XHJcbiAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkRpc2N1c3Npb24gYm9hcmRcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ1NlYXJjaCA9IFwiU2VhcmNoIGluIGRpc2N1c3Npb25zXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubmV3c0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElOZXdzPigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvbmV3c1wiKSkpO1xyXG4gICAgICAgIHRoaXMubmV3c0dyaWRNb2RlbC5maWx0ZXIudHlwZSA9IHRoaXMubmV3c1R5cGUudG9VcHBlckNhc2UoKTtcclxuICAgICAgICB0aGlzLm5ld3NHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tTdWJzY3JpcHRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3Blbk9uZU5ld3Mob25lTmV3c0lkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5uZXdzUm91dGVyLm9uZU5ld3NVcmwob25lTmV3c0lkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5RmlsdGVyKCkge1xyXG4gICAgICAgIHRoaXMubmV3c0dyaWRNb2RlbC5maWx0ZXIuZGF0ZUZyb20gPSBNb21lbnQudGV4dFRvSmF2YURhdGUodGhpcy5uZXdzR3JpZE1vZGVsLmZpbHRlci5kYXRlRnJvbVRleHQpO1xyXG4gICAgICAgIHRoaXMubmV3c0dyaWRNb2RlbC5maWx0ZXIuZGF0ZVRvID0gTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMubmV3c0dyaWRNb2RlbC5maWx0ZXIuZGF0ZVRvVGV4dCk7XHJcbiAgICAgICAgdGhpcy5uZXdzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckZpbHRlcigpIHtcclxuICAgICAgICB0aGlzLm5ld3NHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5uZXdzR3JpZE1vZGVsLmZpbHRlci50YWdzID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5ld3NHcmlkTW9kZWwuZmlsdGVyLmF1dGhvck5hbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV3c0dyaWRNb2RlbC5maWx0ZXIuZGF0ZUZyb20gPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV3c0dyaWRNb2RlbC5maWx0ZXIuZGF0ZUZyb21UZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5ld3NHcmlkTW9kZWwuZmlsdGVyLmRhdGVUbyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5uZXdzR3JpZE1vZGVsLmZpbHRlci5kYXRlVG9UZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5ld3NHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgICAgIHRoaXMubmV3c1NlcnZpY2UuY2hlY2tOZXdzU3Vic2NyaXB0aW9uKHRoaXMubmV3c1R5cGUudG9VcHBlckNhc2UoKSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZSA9IHJlc3VsdDtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VOZXdzU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucGVyc29uYWxTZXJ2aWNlLmNoYW5nZU5ld3NTdWJzY3JpcHRpb24odGhpcy5uZXdzVHlwZS50b1VwcGVyQ2FzZSgpKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm5ld3NUeXBlID09IFwibmV3c1wiXHJcbiAgICAgICAgICAgICAgICA/IG5vdGlmaWVyLnN1Y2Nlc3MoXCJZb3Ugc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gbmV3c1wiKVxyXG4gICAgICAgICAgICAgICAgOiBub3RpZmllci5zdWNjZXNzKFwiWW91IHN1Y2Nlc3NmdWxseSBzdWJzY3JpYmVkIHRvIGRpc2N1c3Npb24gYm9hcmRcIilcclxuICAgICAgICAgICAgICAgIDogdGhpcy5uZXdzVHlwZSA9PSBcIm5ld3NcIlxyXG4gICAgICAgICAgICAgICAgPyBub3RpZmllci5zdWNjZXNzKFwiWW91IHN1Y2Nlc3NmdWxseSB1bnN1YnNjcmliZWQgZnJvbSBuZXdzXCIpXHJcbiAgICAgICAgICAgICAgICA6IG5vdGlmaWVyLnN1Y2Nlc3MoXCJZb3Ugc3VjY2Vzc2Z1bGx5IHVuc3Vic2NyaWJlZCBmcm9tIGRpc2N1c3Npb24gYm9hcmRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlID0gcmVzdWx0O1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdE1lc3NhZ2VOb3RGb3VuZCgpe1xyXG4gICAgICAgIHRoaXMuc3RyaW5nTm90Rm91bmQgPSB0aGlzLm5ld3NUeXBlID09IFwibmV3c1wiID8gXCJObyBuZXdzIGZvdW5kXCIgOiBcIk5vIGRpc2N1c3Npb24gZm91bmRcIjtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdOb3RGb3VuZDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuXHJcbmltcG9ydCB7SU5ld3N9IGZyb20gXCIuL21vZGVscy9JTmV3c1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE5ld3NTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibmV3cy5OZXdzU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgXTtcclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVOZXdzQnlJZChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL25ld3MvOmlkXCIpLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5ld3MoaWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SU5ld3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvbmV3cy86aWRcIikucGFyYW0oXCI6aWRcIiwgaWQpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlKG5ld3M6IElOZXdzKTogbmcuSVByb21pc2U8SU5ld3M+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL25ld3NcIiksIG5ld3MpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShuZXdzOiBJTmV3cyk6IG5nLklQcm9taXNlPElOZXdzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL25ld3NcIiksIG5ld3MpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEhlbHBEZXRhaWxzKCk6IG5nLklQcm9taXNlPElOZXdzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL25ld3MvaGVscFwiKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrTmV3c1N1YnNjcmlwdGlvbihuZXdzVHlwZTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL25ld3Mvc3Vic2NyaXB0aW9uP25ld3NUeXBlPTpuZXdzVHlwZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bmV3c1R5cGVcIiwgbmV3c1R5cGUpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge05ld3NSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvTmV3c1JvdXRlclwiO1xyXG5pbXBvcnQge05ld3NTZXJ2aWNlfSBmcm9tIFwiLi9OZXdzU2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U29jaWFsU2VydmljZX0gZnJvbSBcIi4vLi4vc29jaWFsL1NvY2lhbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi8uLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SVRyZWVFbGVtZW50SW5mb30gZnJvbSBcIi4vLi4vdHJlZS9tb2RlbHMvVHJlZUVsZW1lbnRJbmZvXCI7XHJcbmltcG9ydCB7VHJlZUVsZW1lbnRzSW5mb0ZpbGxlcn0gZnJvbSBcIi4vLi4vdHJlZS9UcmVlRWxlbWVudHNJbmZvRmlsbGVyXCI7XHJcbmltcG9ydCB7SUdyaWRNb2RlbCwgR3JpZE1vZGVsLCBJR3JpZExvYWRpbmdMaXN0ZW5lcn0gZnJvbSBcIi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLy4uL0lOb3RpZmllclwiO1xyXG5cclxuaW1wb3J0IHtJTmV3c30gZnJvbSBcIi4vbW9kZWxzL0lOZXdzXCI7XHJcbmltcG9ydCB7SUNvbW1lbnR9IGZyb20gXCIuLy4uL3NvY2lhbC9tb2RlbHMvSUNvbW1lbnRcIjtcclxuaW1wb3J0IHtJQ29tbWVudEluSGllcmFyY2h5fSBmcm9tIFwiLi8uLi9zb2NpYWwvbW9kZWxzL0lDb21tZW50SW5IaWVyYXJjaHlcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4vLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5cclxuaW50ZXJmYWNlIElDb21tZW50SW5IaWVyYXJjaHlFeHRlbmRlZCBleHRlbmRzIElUcmVlRWxlbWVudEluZm88SUNvbW1lbnRJbkhpZXJhcmNoeUV4dGVuZGVkPiwgSUNvbW1lbnRJbkhpZXJhcmNoeSB7XHJcbiAgICByZXBseT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPbmVOZXdzQ29udHJvbGxlciBpbXBsZW1lbnRzIElHcmlkTG9hZGluZ0xpc3RlbmVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibmV3cy5PbmVOZXdzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgbmV3c0lkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbmV3czogSU5ld3MgPSB7fTtcclxuICAgIHB1YmxpYyBjb21tZW50c0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQ29tbWVudEluSGllcmFyY2h5RXh0ZW5kZWQ+O1xyXG4gICAgcHVibGljIG5ld0NvbW1lbnQ6IElDb21tZW50ID0ge307XHJcbiAgICBwdWJsaWMgbmV3UmVwbHlDb21tZW50OiBJQ29tbWVudCA9IHt9O1xyXG4gICAgcHVibGljIGFuY2hvckNvbXBsZXRlOiBib29sZWFuO1xyXG4gICAgcHVibGljIGNvbW1lbnRzQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRhbmNob3JTY3JvbGxcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIE5ld3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU29jaWFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIE5ld3NSb3V0ZXIuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkYW5jaG9yU2Nyb2xsOiBhbmd1bGFyLklBbmNob3JTY3JvbGxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgbmV3c1NlcnZpY2U6IE5ld3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHNvY2lhbFNlcnZpY2U6IFNvY2lhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG5ld3NSb3V0ZXI6IE5ld3NSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLm5ld3NJZCA9ICRyb3V0ZVBhcmFtc1tOZXdzUm91dGVyLk9ORV9ORVdTX0lEX1BBUkFNXTtcclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgdGhpcy5hbmNob3JDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BTExfTkVXU19NRU5VX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZE5ld3MoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21tZW50c0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElDb21tZW50SW5IaWVyYXJjaHlFeHRlbmRlZD4oJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL3NvY2lhbC9jb21tZW50cz9vYmplY3RJZD06b2JqZWN0SWQmb2JqZWN0VHlwZT06b2JqZWN0VHlwZVwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdElkXCIsIHRoaXMubmV3c0lkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdFR5cGVcIiwgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTkVXU10pXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpKSk7XHJcbiAgICAgICAgdGhpcy5jb21tZW50c0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIodGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2FkQ29tbWVudHNDb3VudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydExvYWRpbmcoKSB7XHJcbiAgICAgICAgLy9kbyBub3RoaW5nXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuZExvYWRpbmcoKSB7XHJcbiAgICAgICAgVHJlZUVsZW1lbnRzSW5mb0ZpbGxlci5maWxsSGllcmFyY2h5SW5mb1dpdGhNYXhMZXZlbCh0aGlzLmNvbW1lbnRzR3JpZE1vZGVsLmVudHJpZXMsIE51bWJlci5NQVhfVkFMVUUpO1xyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQW5jaG9yKCk7XHJcbiAgICAgICAgfSwgMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzY3JvbGxBbmNob3IoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFuY2hvckNvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGFuY2hvclNjcm9sbCh0aGlzLiRsb2NhdGlvbi5oYXNoKCkpO1xyXG4gICAgICAgICAgICB0aGlzLmFuY2hvckNvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWROZXdzKCkge1xyXG4gICAgICAgIHRoaXMubmV3c1NlcnZpY2UuZ2V0TmV3cyh0aGlzLm5ld3NJZCkudGhlbihuID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KG4sIHRoaXMubmV3cyk7XHJcbiAgICAgICAgICAgIGlmIChuLnR5cGUgPT0gXCJESVNDVVNTSU9OXCIpIHtcclxuICAgICAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuU1RVREVOVFNfT0ZGRVJTX01FTlVfS0VZKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFMTF9ORVdTX01FTlVfS0VZKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihuLnRpdGxlKS51cGRhdGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRDb21tZW50c0NvdW50KCkge1xyXG4gICAgICAgIHRoaXMuc29jaWFsU2VydmljZS5nZXRDb21tZW50c0NvdW50KHRoaXMubmV3c0lkLCBSZWZlcmVuY2VkT2JqZWN0VHlwZS5ORVdTKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbWVudHNDb3VudCA9IHJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkQ29tbWVudChyZXBseTogYm9vbGVhbiwgcGFyZW50SWQ6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChyZXBseSkge1xyXG4gICAgICAgICAgICB0aGlzLm5ld1JlcGx5Q29tbWVudC5wYXJlbnRJZCA9IHBhcmVudElkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNvY2lhbFNlcnZpY2UuYWRkQ29tbWVudCh0aGlzLm5ld3NJZCwgdGhpcy5uZXdzLnZlcnNpb24sIFJlZmVyZW5jZWRPYmplY3RUeXBlLk5FV1MsIHJlcGx5ID8gdGhpcy5uZXdSZXBseUNvbW1lbnQgOiB0aGlzLm5ld0NvbW1lbnQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkNvbW1lbnQgaGFzIGJlZW4gYWRkZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbWVudHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgIHRoaXMubmV3Q29tbWVudC50ZXh0ID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5uZXdSZXBseUNvbW1lbnQudGV4dCA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UmVwbHlDb21tZW50LnBhcmVudElkID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ29tbWVudHNDb3VudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhbkNvbW1lbnQoKSB7XHJcbiAgICAgICAgdGhpcy5uZXdDb21tZW50LnRleHQgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubmV3UmVwbHlDb21tZW50LnRleHQgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubmV3UmVwbHlDb21tZW50LnBhcmVudElkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVwbHlDb21tZW50KGNvbW1lbnRJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jb21tZW50c0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgIGMucmVwbHkgPSBjLmlkID09IGNvbW1lbnRJZDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0b2RvOiByZW1vdmUgZHVwbGljYXRlXHJcbiAgICBwdWJsaWMgdG9nZ2xlUmVwbHlNZXNzYWdlcyhjb21tZW50KSB7XHJcbiAgICAgICAgbGV0IGFycmF5OiBudW1iZXJbXSA9IFtjb21tZW50LmlkXTtcclxuXHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMuY29tbWVudHNHcmlkTW9kZWwuZW50cmllcy5maWx0ZXIoZW50cnkgPT4gY29tbWVudC5pZCA9PSBlbnRyeS5wYXJlbnRJZCk7XHJcbiAgICAgICAgd2hpbGUocGFyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcGFyZW50LmZvckVhY2gocGFyZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnB1c2gocGFyZW50LmlkKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGFycmF5LnB1c2goY2hpbGQuaWQpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHBhcmVudCA9IHRoaXMuY29tbWVudHNHcmlkTW9kZWwuZW50cmllcy5maWx0ZXIoZW50cnkgPT4gcGFyZW50WzBdLmlkID09IGVudHJ5LnBhcmVudElkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFycmF5ID0gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0sIHBvcykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSA9PSBwb3M7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGFycmF5LmZvckVhY2gobnVtID0+IHtcclxuICAgICAgICAgICAgJChcIiNuZXdzLXNpbmdsZV9cIiArIG51bSlcclxuICAgICAgICAgICAgICAgIC5jbG9zZXN0KCcubWVzc2FnZXMtc2luZ2xlJylcclxuICAgICAgICAgICAgICAgIC50b2dnbGVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVsZXRlTmV3cyhuZXdzOiBJTmV3cyk6IHZvaWQge1xyXG4gICAgICAgIHZhciB0aXRsZTtcclxuICAgICAgICB2YXIgdHlwZTtcclxuXHJcbiAgICAgICAgaWYgKG5ld3MudHlwZSA9PSBcIk5FV1NcIikge1xyXG4gICAgICAgICAgICB0eXBlID0gXCJUaGlzIG5ld3MgXCI7XHJcbiAgICAgICAgICAgIHRpdGxlID0gXCJEZWxldGUgbmV3cyBcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld3MudHlwZSA9PSBcIkRJU0NVU1NJT05cIikge1xyXG4gICAgICAgICAgICB0eXBlID0gXCJUaGlzIGRpc2N1c3Npb24gXCI7XHJcbiAgICAgICAgICAgIHRpdGxlID0gXCJEZWxldGUgZGlzY3Vzc2lvbiBcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0eXBlID0gXCJUaGlzIFwiICsgbmV3cy50eXBlO1xyXG4gICAgICAgICAgICB0aXRsZSA9IFwiRGVsZXRlIFwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgICAgICAgIHR5cGUgKyAnIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uIENvbnRpbnVlPycsIHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiWWVzXCIsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b246IFwiTm9cIlxyXG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3c1NlcnZpY2UuZGVsZXRlTmV3c0J5SWQobmV3cy5pZCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm5ld3NSb3V0ZXIubmV3c1NlYXJjaFVybChuZXdzLnR5cGUpKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIE5ld3NLZXkge1xyXG4gICAgSEVMUF9ERUZBVUxUID0gMTAwMCxcclxuICAgIEhFTFBfU1lTVEVNX1NFVFRJTkdTID0gMTAwMSxcclxuICAgIEhFTFBfUEFZX1BBTF9TVUJTQ1JJUFRJT05TID0gMTAwMixcclxuICAgIEhFTFBfQVVUSE9SSVpFX05FVF9QQVlNRU5UX01FVEhPRCA9IDEwMDMsXHJcbiAgICBIRUxQX01TX1RFQU1TX1dFQklOQVJfVFlQRSA9IDEwMDQsXHJcbiAgICBIRUxQX1BBWV9QQUxfUEFZTUVOVF9NRVRIT0QgPSAxMDE1LFxyXG4gICAgSEVMUF9aT09NPSAxMDE2LFxyXG4gICAgSEVMUF9TTElERV9ERUNLID0gMTAxN1xyXG59XHJcbiIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJub3RpZmljYXRpb25UZW1wbGF0ZXMuTm90aWZpY2F0aW9uQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9OT1RJRklDQVRJT05fVEVNUExBVEVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIk5vdGlmaWNhdGlvbiBUZW1wbGF0ZXNcIikudXBkYXRlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ3JlYXRlRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJub3RpZmljYXRpb25UZW1wbGF0ZXMuTm90aWZpY2F0aW9uQ3JlYXRlRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fTk9USUZJQ0FUSU9OX1RFTVBMQVRFX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJFZGl0IG5vdGlmaWNhdGlvbiB0ZW1wbGF0ZVwiKS51cGRhdGUoKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7Tm90aWZpY2F0aW9uU2VydmljZX0gZnJvbSBcIi4vTm90aWZpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQge05vdGlmaWNhdGlvbkNvbnRyb2xsZXJ9IGZyb20gXCIuL05vdGlmaWNhdGlvbkNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtOb3RpZmljYXRpb25DcmVhdGVFZGl0Q29udHJvbGxlcn0gZnJvbSBcIi4vTm90aWZpY2F0aW9uQ3JlYXRlRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbmV4cG9ydCB2YXIgTm90aWZpY2F0aW9uTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwibm90aWZpY2F0aW9uVGVtcGxhdGVzXCIsIFtdKVxyXG4gICAgLnNlcnZpY2UoTm90aWZpY2F0aW9uU2VydmljZS5OQU1FLCBOb3RpZmljYXRpb25TZXJ2aWNlKVxyXG4gICAgLmNvbnRyb2xsZXIoTm90aWZpY2F0aW9uQ29udHJvbGxlci5OQU1FLCBOb3RpZmljYXRpb25Db250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoTm90aWZpY2F0aW9uQ3JlYXRlRWRpdENvbnRyb2xsZXIuTkFNRSwgTm90aWZpY2F0aW9uQ3JlYXRlRWRpdENvbnRyb2xsZXIpOyIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJTm90aWZpY2F0aW9uVGVtcGxhdGV9IGZyb20gXCIuL21vZGVsL0lOb3RpZmljYXRpb25UZW1wbGF0ZVwiO1xyXG5pbXBvcnQge0lOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHN9IGZyb20gXCIuL21vZGVsL0lOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHNcIjtcclxuaW1wb3J0IHtJTm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzU2F2ZX0gZnJvbSBcIi4vbW9kZWwvSU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsc1NhdmVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25TZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwibm90aWZpY2F0aW9uVGVtcGxhdGVzLk5vdGlmaWNhdGlvblNlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEFjdGl2ZVByb3BlcnR5KG5vdGlmaWNhdGlvblRlbXBsYXRlSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCBhY3RpdmU6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQ/OiBudW1iZXIsIHJlZmVyZW5jZU9iamVjdElkPzogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJTm90aWZpY2F0aW9uVGVtcGxhdGU+IHtcclxuICAgICAgICBsZXQgdXJsID0gXCIvYXBpL25vdGlmaWNhdGlvblRlbXBsYXRlcy86bm90aWZpY2F0aW9uVGVtcGxhdGVJZC9pbmFjdGl2ZS86YWN0aXZlP3ZlcnNpb249OnZlcnNpb25cIjtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsICsgXCImYnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZWZlcmVuY2VPYmplY3RJZCkge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyBcIiZyZWZlcmVuY2VPYmplY3RJZD06cmVmZXJlbmNlT2JqZWN0SWRcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwYXJhbWV0ZXJpemVkVXJsID0gdGhpcy51cmwuYmFzZSh1cmwpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpub3RpZmljYXRpb25UZW1wbGF0ZUlkXCIsIG5vdGlmaWNhdGlvblRlbXBsYXRlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjphY3RpdmVcIiwgYWN0aXZlKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dmVyc2lvblwiLCB2ZXJzaW9uKTtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyaXplZFVybC5wYXJhbShcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZWZlcmVuY2VPYmplY3RJZCkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJpemVkVXJsLnBhcmFtKFwiOnJlZmVyZW5jZU9iamVjdElkXCIsIHJlZmVyZW5jZU9iamVjdElkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChwYXJhbWV0ZXJpemVkVXJsLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Tm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzQnlJZChub3RpZmljYXRpb25UZW1wbGF0ZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvbm90aWZpY2F0aW9uVGVtcGxhdGVzLzpub3RpZmljYXRpb25UZW1wbGF0ZUlkL2RldGFpbHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm5vdGlmaWNhdGlvblRlbXBsYXRlSWRcIiwgbm90aWZpY2F0aW9uVGVtcGxhdGVJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNhZ2VSZWNpcGllbnRzVGFncyh0ZW1wbGF0ZURldGFpbHNJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXJbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9ub3RpZmljYXRpb25UZW1wbGF0ZXMvOnRlbXBsYXRlRGV0YWlsc0lkL3JlY2lwaWVudHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnRlbXBsYXRlRGV0YWlsc0lkXCIsIHRlbXBsYXRlRGV0YWlsc0lkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVc2FnZUNDUmVjaXBpZW50c1RhZ3ModGVtcGxhdGVEZXRhaWxzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvbm90aWZpY2F0aW9uVGVtcGxhdGVzLzp0ZW1wbGF0ZURldGFpbHNJZC9jYy9yZWNpcGllbnRzXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp0ZW1wbGF0ZURldGFpbHNJZFwiLCB0ZW1wbGF0ZURldGFpbHNJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZU5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlscyh0ZW1wbGF0ZURldGFpbHM6IElOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHNTYXZlKTogYW5ndWxhci5JUHJvbWlzZTxJTm90aWZpY2F0aW9uVGVtcGxhdGVEZXRhaWxzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9ub3RpZmljYXRpb25UZW1wbGF0ZXMvc2F2ZVwiKSwgdGVtcGxhdGVEZXRhaWxzKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHModGVtcGxhdGVEZXRhaWxzSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL25vdGlmaWNhdGlvblRlbXBsYXRlcy86dGVtcGxhdGVEZXRhaWxzSWQvcmVtb3ZlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp0ZW1wbGF0ZURldGFpbHNJZFwiLCB0ZW1wbGF0ZURldGFpbHNJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVhY3RpdmF0ZUNvdXJzZVRlbXBsYXRlKHRlbXBsYXRlRGV0YWlsc0lkOiBudW1iZXIsIHJlZmVyZW5jZU9iaklkOiBudW1iZXIsIHJlZmVyZW5jZU9ialR5cGU6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL25vdGlmaWNhdGlvblRlbXBsYXRlcy86dGVtcGxhdGVEZXRhaWxzSWQvY291cnNlL2RlYWN0aXZhdGU/cmVmZXJlbmNlT2JqSWQ9OnJlZmVyZW5jZU9iaklkJnJlZmVyZW5jZU9ialR5cGU9OnJlZmVyZW5jZU9ialR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnRlbXBsYXRlRGV0YWlsc0lkXCIsIHRlbXBsYXRlRGV0YWlsc0lkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cmVmZXJlbmNlT2JqSWRcIiwgcmVmZXJlbmNlT2JqSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpyZWZlcmVuY2VPYmpUeXBlXCIsIHJlZmVyZW5jZU9ialR5cGUpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvblRlbXBsYXRlRGV0YWlsc0ZvclJldmVydChub3RpZmljYXRpb25UZW1wbGF0ZUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElOb3RpZmljYXRpb25UZW1wbGF0ZURldGFpbHM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvbm90aWZpY2F0aW9uVGVtcGxhdGVzLzpub3RpZmljYXRpb25UZW1wbGF0ZUlkL2RldGFpbHNGb3JSZXZlcnRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm5vdGlmaWNhdGlvblRlbXBsYXRlSWRcIiwgbm90aWZpY2F0aW9uVGVtcGxhdGVJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBlbnVtIE5vdGlmaWNhdGlvbkV2ZW50S2V5IHtcclxuICAgIENfQ01QTCA9IDEsXHJcbiAgICBQX1BSQ0hTX0xSTlIgPSAyLFxyXG4gICAgQ19DRVJUX0VYUF9STU5ERVIgPSAzLFxyXG4gICAgQ19FTlJMTVRfTFJOUiA9IDQsXHJcbiAgICBQX1BSQ0hTX0VYUF9STU5ERVIgPSA1LFxyXG4gICAgQ19JTkNNUEwgPSA2LFxyXG4gICAgQ19JTkNNUExfUk1OREVSID0gNyxcclxuICAgIENfTldfQVZMQkxfTFJOUiA9IDgsXHJcbiAgICBQX1BSQ0hTX0NOQ0xEID0gOSxcclxuICAgIENSX1RSRlJfRVJSX01HUiA9IDEwLFxyXG4gICAgQ19FWFBJUkVEID0gMTEsXHJcbiAgICBDX0xQX0NFUlRfRVhQID0gMTIsXHJcbiAgICBDX1NUQVJUID0gMTMsXHJcbiAgICBDX1NUQVJUX1JNTkRFUiA9IDE0LFxyXG4gICAgQ19QUk9HUkVTU19TVEFSVCA9IDE1LFxyXG4gICAgXHJcbiAgICBDX0VOUkxNVF9QREFQUFJWX0xSTiA9IDE2LFxyXG4gICAgQ19FTlJMTVRfUERBUFBSVl9NR1IgPSAxNyxcclxuICAgIENfRU5STE1UX1BEQVBQUlZfTUdSX1JNTkRFUiA9IDE4LFxyXG4gICAgQ19FTlJMTVRfV1RMSVNUX0xSTlIgPSAxOSxcclxuICAgIENfRU5STE1UX01HUiA9IDIwLFxyXG4gICAgQ19FTlJMTVRfUkVKRUNURUQgPSAyMSxcclxuICAgIENfVU5FTlJMTVRfTFJOUiA9IDIyLFxyXG4gICAgQ19VTkVOUkxNVF9NR1IgPSAyMyxcclxuICAgIENfQVZMQkxfTFJOUiA9IDI0LFxyXG4gICAgXHJcbiAgICBQX1BSQ0hTX01HUiA9IDI1LFxyXG4gICAgUF9QUkNIU19FWFAgPSAyNixcclxuICAgIFBfUFJDSFNfTkVXX0lUTSA9IDI3LFxyXG4gICAgXHJcbiAgICBTX1NDSERMID0gMjgsXHJcbiAgICBTX1JHU1RSRF9MUk5SID0gMjksXHJcbiAgICBTX1JHU1RSRF9NR1IgPSAzMCxcclxuICAgIFNfVU5SR1NUUkRfTFJOUiA9IDMxLFxyXG4gICAgU19VTlJHU1RSRF9NR1IgPSAzMixcclxuICAgIFNfUkdTVFJfV1RMSVNUX0xSTlIgPSAzMyxcclxuICAgIFNfQVZMQkxfTFJOUiA9IDM0LFxyXG4gICAgU19BVFREX0xSTlIgPSAzNSxcclxuICAgIFNfQVRURF9NR1IgPSAzNixcclxuICAgIFNfTVNEX0xSTlIgPSAzNyxcclxuICAgIFNfTVNEX01HUiA9IDM4LFxyXG4gICAgU19DTkNMRF9NR1IgPSAzOSxcclxuICAgIFNfRVhUUkFfVVNFUlNfUk1OREVSID0gNTEsXHJcblxyXG4gICAgVV9SR1NSX1VSUyA9IDQwLFxyXG4gICAgVV9SR1NSX01HUiA9IDQxLFxyXG4gICAgVV9UUkxfUkdTUl9VUlMgPSA0MixcclxuICAgIFVfVFJMX1JHU1JfQURNID0gNDMsXHJcbiAgICBVX1JTVF9QU1dEID0gNDQsXHJcbiAgICBVX0NITkdfTENUTiA9IDUzLFxyXG5cclxuICAgIEFfU0NSRF9MUk5SID0gNDUsXHJcbiAgICBBX05FV19NR1IgPSA0NixcclxuICAgIExQX0NNUEwgPSA0NyxcclxuICAgIExQX1BST0dSRVNTX1NUQVJUID0gNDgsXHJcbiAgICBDX0VYUElSRURfUk1OREVSID0gNDlcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHN5c3RlbUV2ZW50czogc3RyaW5nW10gPSBbXHJcbiAgICBOb3RpZmljYXRpb25FdmVudEtleVtOb3RpZmljYXRpb25FdmVudEtleS5VX1JTVF9QU1dEXSxcclxuICAgIE5vdGlmaWNhdGlvbkV2ZW50S2V5W05vdGlmaWNhdGlvbkV2ZW50S2V5LlVfQ0hOR19MQ1ROXSxcclxuICAgIE5vdGlmaWNhdGlvbkV2ZW50S2V5W05vdGlmaWNhdGlvbkV2ZW50S2V5LlVfVFJMX1JHU1JfVVJTXSxcclxuICAgIE5vdGlmaWNhdGlvbkV2ZW50S2V5W05vdGlmaWNhdGlvbkV2ZW50S2V5LlVfVFJMX1JHU1JfQURNXSxcclxuICAgIE5vdGlmaWNhdGlvbkV2ZW50S2V5W05vdGlmaWNhdGlvbkV2ZW50S2V5LlNfRVhUUkFfVVNFUlNfUk1OREVSXVxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IGhpZGRlbkV2ZW50czogc3RyaW5nW10gPSBbXHJcbiAgICAvLyByZW1pbmRlcnNcclxuICAgIC8qTm90aWZpY2F0aW9uRXZlbnRLZXlbTm90aWZpY2F0aW9uRXZlbnRLZXkuUF9QUkNIU19FWFBfUk1OREVSXSxcclxuICAgIE5vdGlmaWNhdGlvbkV2ZW50S2V5W05vdGlmaWNhdGlvbkV2ZW50S2V5LkNfSU5DTVBMX1JNTkRFUl0sXHJcbiAgICBOb3RpZmljYXRpb25FdmVudEtleVtOb3RpZmljYXRpb25FdmVudEtleS5DX0VOUkxNVF9QREFQUFJWX01HUl9STU5ERVJdLFxyXG4gICAgTm90aWZpY2F0aW9uRXZlbnRLZXlbTm90aWZpY2F0aW9uRXZlbnRLZXkuQ19FWFBJUkVEX1JNTkRFUl0sKi9cclxuICAgIC8vb3RoZXJcclxuICAgIE5vdGlmaWNhdGlvbkV2ZW50S2V5W05vdGlmaWNhdGlvbkV2ZW50S2V5LlBfUFJDSFNfQ05DTERdLFxyXG4gICAgTm90aWZpY2F0aW9uRXZlbnRLZXlbTm90aWZpY2F0aW9uRXZlbnRLZXkuQ1JfVFJGUl9FUlJfTUdSXVxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IHJlbWluZGVyczogbnVtYmVyW10gPSBbXHJcbiAgICBOb3RpZmljYXRpb25FdmVudEtleS5DX0NFUlRfRVhQX1JNTkRFUixcclxuICAgIE5vdGlmaWNhdGlvbkV2ZW50S2V5LlBfUFJDSFNfRVhQX1JNTkRFUixcclxuICAgIE5vdGlmaWNhdGlvbkV2ZW50S2V5LkNfSU5DTVBMX1JNTkRFUixcclxuICAgIE5vdGlmaWNhdGlvbkV2ZW50S2V5LkNfU1RBUlRfUk1OREVSLFxyXG4gICAgTm90aWZpY2F0aW9uRXZlbnRLZXkuQ19FTlJMTVRfUERBUFBSVl9NR1JfUk1OREVSLFxyXG4gICAgTm90aWZpY2F0aW9uRXZlbnRLZXkuQ19FWFBJUkVEX1JNTkRFUixcclxuICAgIE5vdGlmaWNhdGlvbkV2ZW50S2V5LlNfRVhUUkFfVVNFUlNfUk1OREVSXHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgZGVsYXllZEV2ZW50czogbnVtYmVyW10gPSBbXHJcbiAgICBOb3RpZmljYXRpb25FdmVudEtleS5DX0NNUExcclxuXTtcclxuIiwiZXhwb3J0IGVudW0gTm90aWZpY2F0aW9uVGVtcGxhdGVzU2NvcGUge1xyXG4gICAgREVGQVVMVCxcclxuICAgIFNZU1RFTSxcclxuICAgIEJVU0lORVNTX1VOSVQsXHJcbiAgICBSRUZFUkVOQ0VfRU5USVRZXHJcbn0iLCJpbXBvcnQge1NldHRpbmdzTW9kdWxlfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NNb2R1bGVcIjtcclxuaW1wb3J0IHtVc2Vyc01vZHVsZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJzTW9kdWxlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlNb2R1bGV9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eU1vZHVsZVwiO1xyXG5pbXBvcnQge1VybHNNb2R1bGV9IGZyb20gXCIuLi91cmxzL1VybHNNb2R1bGVcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VNb2R1bGV9IGZyb20gXCIuLi9yZWZlcmVuY2UvUmVmZXJlbmNlTW9kdWxlXCI7XHJcbmltcG9ydCB7QXNzZXNzbWVudHNTZXJ2aWNlfSBmcm9tIFwiLi4vYXNzZXNzbWVudHMvQXNzZXNzbWVudHNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXNzZXNzbWVudHNDb250cm9sbGVyfSBmcm9tIFwiLi4vYXNzZXNzbWVudHMvQXNzZXNzbWVudHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7QXNzZXNzbWVudHNEZXRhaWxzQ29udHJvbGxlcn0gZnJvbSBcIi4uL2Fzc2Vzc21lbnRzL0Fzc2Vzc21lbnRzRGV0YWlsc0NvbnRyb2xsZXJcIjtcclxuXHJcbmV4cG9ydCB2YXIgQXNzZXNzbWVudHNNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJhc3Nlc3NtZW50c1wiLCBbXHJcbiAgICAgICAgU2VjdXJpdHlNb2R1bGUubmFtZSxcclxuICAgICAgICBVcmxzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgU2V0dGluZ3NNb2R1bGUubmFtZSxcclxuICAgICAgICBSZWZlcmVuY2VNb2R1bGUubmFtZSxcclxuICAgICAgICBVc2Vyc01vZHVsZS5uYW1lXHJcbiAgICBdKVxyXG4gICAgLnNlcnZpY2UoQXNzZXNzbWVudHNTZXJ2aWNlLk5BTUUsIEFzc2Vzc21lbnRzU2VydmljZSlcclxuICAgIC5jb250cm9sbGVyKEFzc2Vzc21lbnRzQ29udHJvbGxlci5OQU1FLCBBc3Nlc3NtZW50c0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihBc3Nlc3NtZW50c0RldGFpbHNDb250cm9sbGVyLk5BTUUsIEFzc2Vzc21lbnRzRGV0YWlsc0NvbnRyb2xsZXIpOyIsImltcG9ydCB7SUNhbGVuZGFyRXZlbnR9IGZyb20gXCIuL21vZGVscy9JQ2FsZW5kYXJFdmVudFwiO1xyXG5pbXBvcnQge0NhbGVuZGFyRXZlbnRUeXBlRW51bX0gZnJvbSBcIi4vbW9kZWxzL0NhbGVuZGFyRXZlbnRUeXBlRW51bVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTZXNzaW9uVHlwZUVudW19IGZyb20gXCIuL21vZGVscy9TZXNzaW9uVHlwZUVudW1cIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVyc29uYWxTZXJ2aWNlfSBmcm9tIFwiLi9QZXJzb25hbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VTZXJ2aWNlfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VGltZVpvbmV9IGZyb20gXCIuLi93ZWJpbmFycy9tb2RlbHMvVGltZVpvbmVUeXBlXCI7XHJcbmltcG9ydCBJV2luZG93U2VydmljZSA9IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2U7XHJcbmltcG9ydCB7Q29tbW9uRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uL2NvbW1vbi9Db21tb25GaWx0ZXJTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuQ2FsZW5kYXJDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIGV2ZW50czogSUNhbGVuZGFyRXZlbnRbXTtcclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoU3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyByZWdpc3RlcmVkT3JXYWl0bGlzdGVkQ2hlY2tib3g6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaWx0U2Vzc2lvbkNoZWNrYm94OiBib29sZWFuO1xyXG4gICAgcHVibGljIHZpbHRTZXNzaW9uQ2hlY2tib3g6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbm90QXZhaWxhYmxlRm9yUmVnaXN0cmF0aW9uQ2hlY2tib3g6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgY291cnNlQ2hlY2tib3g6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIGlzRGF0YUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSB2aWV3c0ZvcktlbmRvOiBhbnlbXTtcclxuICAgIHByaXZhdGUgaXNNb2JpbGU6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHRpbWVab25lID0gVGltZVpvbmU7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVyc29uYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgJHdpbmRvdzogSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb21tb25GaWx0ZXJTZXJ2aWNlOiBDb21tb25GaWx0ZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlID0gL01vYmlsZXx3ZWJPU3xCbGFja0JlcnJ5fElFTW9iaWxlfE1lZUdvfG1pbml8RmVubmVjfFdpbmRvd3MgUGhvbmV8QW5kcm9pZHxpUChhZHxvZHxob25lKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuUEVSU09OQUxfQUNDT1VOVF9DQUxFTkRBUl9NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJDYWxlbmRhclwiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UuZ2V0Q2FsZW5kYXJFdmVudHMoKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHMgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHMuZm9yRWFjaCgoZXZlbnQ6IElDYWxlbmRhckV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmV2ZW50VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJFdmVudFR5cGVFbnVtW0NhbGVuZGFyRXZlbnRUeXBlRW51bS5OT1RfUkVHSVNURVJFRF9TRVNTSU9OXTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnNlc3Npb25UeXBlID09IFNlc3Npb25UeXBlRW51bVtTZXNzaW9uVHlwZUVudW0uSUxUX1NFU1NJT05dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jb2xvciA9IFwiIzQ4MzZCOFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jb2xvciA9IFwiI0RFMkJCN1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIENhbGVuZGFyRXZlbnRUeXBlRW51bVtDYWxlbmRhckV2ZW50VHlwZUVudW0uUkVHSVNURVJFRF9TRVNTSU9OXTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY29sb3IgPSBcIiMzNkI4NEFcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBDYWxlbmRhckV2ZW50VHlwZUVudW1bQ2FsZW5kYXJFdmVudFR5cGVFbnVtLk5PVF9BVkFJTEFCTEVfU0VTU0lPTl06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmNvbG9yID0gXCIjMmFhMWMwXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJFdmVudFR5cGVFbnVtW0NhbGVuZGFyRXZlbnRUeXBlRW51bS5BVkFJTEFCTEVfQ09VUlNFXTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY29sb3IgPSBcIiM5ZTllOWVcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBDYWxlbmRhckV2ZW50VHlwZUVudW1bQ2FsZW5kYXJFdmVudFR5cGVFbnVtLkFWQUlMQUJMRV9DT1VSU0VdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuaXNBbGxEYXkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0ID0gbmV3IERhdGUoZXZlbnQuc3RhcnREYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5lbmQgPSBuZXcgRGF0ZShldmVudC5zdGFydERhdGUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5pc0FsbERheSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0ID0gbmV3IERhdGUodGhpcy5kYXRlVG9UaW1lWm9uZURhdGUoZXZlbnQudGltZXpvbmUsIGV2ZW50LnN0YXJ0RGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0LnNldEhvdXJzKG5ldyBEYXRlKGV2ZW50LnN0YXJ0RGF0ZSkuZ2V0SG91cnMoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnQuc2V0TWludXRlcyhuZXcgRGF0ZShldmVudC5zdGFydERhdGUpLmdldE1pbnV0ZXMoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZW5kID0gbmV3IERhdGUodGhpcy5kYXRlVG9UaW1lWm9uZURhdGUoZXZlbnQudGltZXpvbmUsIGV2ZW50LmVuZERhdGUpKTtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5lbmQuc2V0SG91cnMobmV3IERhdGUoZXZlbnQuZW5kRGF0ZSkuZ2V0SG91cnMoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZW5kLnNldE1pbnV0ZXMobmV3IERhdGUoZXZlbnQuZW5kRGF0ZSkuZ2V0TWludXRlcygpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkRmlsdGVyRnJvbVN0b3JhZ2UoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVmlld0FycmF5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEtlbmRvR3JpZCgpO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy4kd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5vblJlc2l6ZUZ1bmN0aW9uKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy4kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5vblJlc2l6ZUZ1bmN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uUmVzaXplRnVuY3Rpb246IChldmVudCkgPT4gYW55ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95S2VuZG9HcmlkKCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VWaWV3QXJyYXkoKTtcclxuICAgICAgICB0aGlzLmluaXRLZW5kb0dyaWQoKTtcclxuICAgICAgICB0aGlzLmZpbHRlcigpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIGRhdGVUb1RpbWVab25lRGF0ZSh0aW1lWm9uZTogYW55LCBkYXRlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBvZmZzZXQ7XHJcbiAgICAgICAgdGhpcy50aW1lWm9uZS5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodC5uYW1lID09IHRpbWVab25lKSB7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLmdldFRpbWVab25lT2Zmc2V0KHQudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIChkYXRlICsgbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDAgLSBvZmZzZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VGltZVpvbmVPZmZzZXQodGltZVpvbmU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgbGV0IGxvY2FsVGltZTogbnVtYmVyID0gTWF0aC5mbG9vcigobm93LmdldFRpbWUoKSAvIDEwMDApKSAqIDEwMDA7XHJcbiAgICAgICAgbGV0IHRpbWVab25lVGltZTogbnVtYmVyID0gbmV3IERhdGUobm93LnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiB0aW1lWm9uZX0pKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIG5vdy5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDAgKyAobG9jYWxUaW1lIC0gdGltZVpvbmVUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlc3Ryb3lLZW5kb0dyaWQoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHNjaGVkdWxlciA9ICQoXCIjc2NoZWR1bGVyXCIpLmRhdGEoXCJrZW5kb1NjaGVkdWxlclwiKTtcclxuICAgICAgICBzY2hlZHVsZXIuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICBsZXQgbGlzdE9mVG9vbGJhckVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImstc2NoZWR1bGVyLXRvb2xiYXIgay10b29sYmFyXCIpO1xyXG4gICAgICAgIGlmIChsaXN0T2ZUb29sYmFyRWxlbWVudHMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+bGlzdE9mVG9vbGJhckVsZW1lbnRzLml0ZW0oMCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkKFwiI3NjaGVkdWxlclwiKS5vZmYoXCJjbGlja1wiLCBcIi5rLWV2ZW50XCIpO1xyXG4gICAgICAgICQoXCIjc2NoZWR1bGVyXCIpLm9mZihcImNsaWNrXCIsIFwiLmstdGFza1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRLZW5kb0dyaWQoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHNjaGVkdWxlciA9IG5ldyBrZW5kby51aS5TY2hlZHVsZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzY2hlZHVsZXJcIiksIHtcclxuICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUsXHJcbiAgICAgICAgICAgIGhlaWdodDogNjU1LFxyXG4gICAgICAgICAgICB2aWV3czogdGhpcy52aWV3c0ZvcktlbmRvLFxyXG4gICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3dXb3JrSG91cnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBmb290ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB3b3JrRGF5U3RhcnQ6IG5ldyBEYXRlKFwiMTIuMDAgQU1cIiksXHJcbiAgICAgICAgICAgIHdvcmtEYXlFbmQ6IG5ldyBEYXRlKFwiMTEuMDAgUE1cIiksXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2U6IHRoaXMuZXZlbnRzLFxyXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogXCJjb2xvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFDb2xvckZpZWxkOiBcImNvbG9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVZhbHVlRmllbGQ6IFwiY29sb3JcIixcclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb2xvcjogXCIjNDgzNkI4XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sb3I6IFwiI0RFMkJCN1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbG9yOiBcIiMzNkI4NEFcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb2xvcjogXCIjMmFhMWMwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sb3I6IFwiIzllOWU5ZVwifSxcclxuICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIG1vdmVTdGFydChlOiBrZW5kby51aS5TY2hlZHVsZXJNb3ZlU3RhcnRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZXNpemVTdGFydChlOiBrZW5kby51aS5TY2hlZHVsZXJSZXNpemVTdGFydEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2NoZWR1bGVyLndyYXBwZXIua2VuZG9Ub29sdGlwKHtcclxuICAgICAgICAgICAgZmlsdGVyOiBcIi5rLWV2ZW50XCIsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiAyMzAsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBldmVudCA9IHNjaGVkdWxlci5vY2N1cnJlbmNlQnlVaWQodGFyZ2V0LmRhdGEoXCJ1aWRcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXQoXCJldmVudFR5cGVcIikgPT0gQ2FsZW5kYXJFdmVudFR5cGVFbnVtW0NhbGVuZGFyRXZlbnRUeXBlRW51bS5BVkFJTEFCTEVfQ09VUlNFXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJrLXRvb2x0aXAtdGl0bGVcIj5Db3Vyc2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPk5hbWU6PC9zdHJvbmc+ICR7ZXZlbnQudGl0bGV9PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+U3RhcnRpbmcgZGF0ZTo8L3N0cm9uZz4gJHtldmVudC5zdGFydC5nZXRNb250aCgpICsgMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICArIFwiL1wiICsgZXZlbnQuc3RhcnQuZ2V0RGF0ZSgpICsgXCIvXCIgKyBldmVudC5zdGFydC5nZXRGdWxsWWVhcigpfTwvcD5gXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvb2x0aXBEZXNjcmlwdGlvbiA9IGA8cD48c3Ryb25nPiR7ZXZlbnQuc3RhcnQuZ2V0TW9udGgoKSArIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyBcIi9cIiArIGV2ZW50LnN0YXJ0LmdldERhdGUoKSArIFwiL1wiICsgZXZlbnQuc3RhcnQuZ2V0RnVsbFllYXIoKX0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkeyhldmVudC5zdGFydC5nZXRIb3VycygpLnRvU3RyaW5nKCkubGVuZ3RoID09IDIgPyBldmVudC5zdGFydC5nZXRIb3VycygpIDogXCIwXCIgKyBldmVudC5zdGFydC5nZXRIb3VycygpKSArIFwiOlwiICsgKGV2ZW50LnN0YXJ0LmdldE1pbnV0ZXMoKS50b1N0cmluZygpLmxlbmd0aCA9PSAyID8gZXZlbnQuc3RhcnQuZ2V0TWludXRlcygpIDogXCIwXCIgKyBldmVudC5zdGFydC5nZXRNaW51dGVzKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsgXCIgLSBcIiArIChldmVudC5lbmQuZ2V0SG91cnMoKS50b1N0cmluZygpLmxlbmd0aCA9PSAyID8gZXZlbnQuZW5kLmdldEhvdXJzKCkgOiBcIjBcIiArIGV2ZW50LmVuZC5nZXRIb3VycygpKSArIFwiOlwiICsgKGV2ZW50LmVuZC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5sZW5ndGggPT0gMiA/IGV2ZW50LmVuZC5nZXRNaW51dGVzKCkgOiBcIjBcIiArIGV2ZW50LmVuZC5nZXRNaW51dGVzKCkpfTwvc3Ryb25nPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlRpdGxlOjwvc3Ryb25nPiAgJHtldmVudC50aXRsZX0gPC9wPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkNvdXJzZTo8L3N0cm9uZz4gJHtldmVudC5nZXQoXCJjb3Vyc2VOYW1lXCIpfTwvcD5gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGVzY3JpcHRpb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcERlc2NyaXB0aW9uID0gdG9vbHRpcERlc2NyaXB0aW9uICsgYDxwPjxzdHJvbmc+RGVzY3JpcHRpb246PC9zdHJvbmc+ICR7ZXZlbnQuZGVzY3JpcHRpb259PC9wPmA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldChcInNlc3Npb25UeXBlXCIpID09IFNlc3Npb25UeXBlRW51bVtTZXNzaW9uVHlwZUVudW0uSUxUX1NFU1NJT05dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJrLXRvb2x0aXAtdGl0bGVcIj5JTFQgc2Vzc2lvbjwvZGl2PmAgKyB0b29sdGlwRGVzY3JpcHRpb24gKyBgPHA+PHN0cm9uZz5Mb2NhdGlvbjogPC9zdHJvbmc+ICR7ZXZlbnQuZ2V0KFwibG9jYXRpb25cIil9PC9wPmBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImstdG9vbHRpcC10aXRsZVwiPnZJTFQgc2Vzc2lvbjwvZGl2PmAgKyB0b29sdGlwRGVzY3JpcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChcIiNzY2hlZHVsZXJcIikub24oXCJjbGlja1wiLCBcIi5rLWV2ZW50XCIsICAoZTogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vblNjaGVkdWxlckV2ZW50Q2xpY2soZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChcIiNzY2hlZHVsZXJcIikub24oXCJjbGlja1wiLCBcIi5rLXRhc2tcIiwgIChlOiBKUXVlcnlFdmVudE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2NoZWR1bGVyRXZlbnRDbGljayhlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA8PSA5OTEgfHwgdGhpcy5pc01vYmlsZSkge1xyXG4gICAgICAgIC8vICAgICBsZXQgbGlzdE9mRWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiay1zcGFjZXIgay10b29sYmFyLXNwYWNlclwiKTtcclxuICAgICAgICAvLyAgICAgaWYgKGxpc3RPZkVsZW1lbnRzLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBsZXQgZWxlbWVudCA9IDxIVE1MRWxlbWVudD5saXN0T2ZFbGVtZW50cy5pdGVtKDApO1xyXG4gICAgICAgIC8vICAgICAgICAgZWxlbWVudC5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyZW5kJywgXCI8YnV0dG9uIGlkPSdtb2JpbGVGaWx0ZXJzJyBjbGFzcz0nYnRuIGJ0bi1zZWNvbmRhcnknPkZpbHRlcjwvYnV0dG9uPlwiKTtcclxuICAgICAgICAvLyAgICAgICAgIGxldCBidXR0b25FbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtb2JpbGVGaWx0ZXJzXCIpO1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gICAgICAgICBidXR0b25FbGVtLm9uY2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5vcGVuRmlsdGVyTW9kYWwoKTtcclxuICAgICAgICAvLyAgICAgICAgIH07XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNjaGVkdWxlckV2ZW50Q2xpY2soZTogSlF1ZXJ5RXZlbnRPYmplY3QpOiB2b2lkIHtcclxuICAgICAgICAgICAgbGV0IHNjaGVkdWxlciA9ICQoXCIjc2NoZWR1bGVyXCIpLmRhdGEoXCJrZW5kb1NjaGVkdWxlclwiKTtcclxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gc2NoZWR1bGVyLmRhdGFTb3VyY2UuZ2V0QnlVaWQoJChlLmN1cnJlbnRUYXJnZXQpLmF0dHIoXCJkYXRhLXVpZFwiKSk7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlci5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5nZXQoXCJzZXNzaW9uVHlwZVwiKSA9PSBTZXNzaW9uVHlwZUVudW1bU2Vzc2lvblR5cGVFbnVtLklMVF9TRVNTSU9OXSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldChcImV2ZW50VHlwZVwiKSAhPSBDYWxlbmRhckV2ZW50VHlwZUVudW1bQ2FsZW5kYXJFdmVudFR5cGVFbnVtLk5PVF9BVkFJTEFCTEVfU0VTU0lPTl0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0U2VjdGlvbkFuZE1vZHVsZUlkc0J5SUxUU2Vzc2lvbklkKGV2ZW50LmdldChcImNvdXJzZUlkXCIpLCBldmVudC5nZXQoXCJpZFwiKSkudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuc2VjdGlvbkRldGFpbHNSb3V0ZShldmVudC5nZXQoXCJjb3Vyc2VJZFwiKSwgcmVzdWx0Lm1vZHVsZUlkLCByZXN1bHQuc2VjdGlvbklkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybChldmVudC5nZXQoXCJjb3Vyc2VJZFwiKSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmdldChcInNlc3Npb25UeXBlXCIpID09IFNlc3Npb25UeXBlRW51bVtTZXNzaW9uVHlwZUVudW0udklMVF9TRVNTSU9OXSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldChcImV2ZW50VHlwZVwiKSAhPSBDYWxlbmRhckV2ZW50VHlwZUVudW1bQ2FsZW5kYXJFdmVudFR5cGVFbnVtLk5PVF9BVkFJTEFCTEVfU0VTU0lPTl0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0U2VjdGlvbkFuZE1vZHVsZUlkc0J5VklMVFNlc3Npb25JZChldmVudC5nZXQoXCJjb3Vyc2VJZFwiKSwgZXZlbnQuZ2V0KFwiaWRcIikpLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLnNlY3Rpb25EZXRhaWxzUm91dGUoZXZlbnQuZ2V0KFwiY291cnNlSWRcIiksIHJlc3VsdC5tb2R1bGVJZCwgcmVzdWx0LnNlY3Rpb25JZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybChldmVudC5nZXQoXCJjb3Vyc2VJZFwiKSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kZXRhaWxzVXJsKGV2ZW50LmdldChcImNvdXJzZUlkXCIpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmlsdGVyID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCBzY2hlZHVsZXIgPSAkKFwiI3NjaGVkdWxlclwiKS5kYXRhKFwia2VuZG9TY2hlZHVsZXJcIik7XHJcbiAgICAgICAgbGV0IGZpbHRlciA9IHtsb2dpYzogJ2FuZCcsIGZpbHRlcnM6IFtdfTtcclxuICAgICAgICBsZXQgc2VhcmNoRmlsdGVyID0ge2xvZ2ljOiAnb3InLCBmaWx0ZXJzOiBbXX07XHJcbiAgICAgICAgbGV0IGNoZWNrQm94ZXNGaWx0ZXIgPSB7bG9naWM6ICdvcicsIGZpbHRlcnM6IFtdfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlQ2hlY2tib3gpIHtcclxuICAgICAgICAgICAgY2hlY2tCb3hlc0ZpbHRlci5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdldmVudFR5cGUnLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdlcScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogQ2FsZW5kYXJFdmVudFR5cGVFbnVtW0NhbGVuZGFyRXZlbnRUeXBlRW51bS5BVkFJTEFCTEVfQ09VUlNFXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLmNvdXJzZUNoZWNrYm94XCIsIFwidHJ1ZVwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwidmhzQ2FsZW5kYXJGaWx0ZXIuY291cnNlQ2hlY2tib3hcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlsdFNlc3Npb25DaGVja2JveCkge1xyXG4gICAgICAgICAgICBsZXQgaWx0RmlsdGVyID0ge2xvZ2ljOiAnYW5kJywgZmlsdGVyczogW119O1xyXG4gICAgICAgICAgICBpbHRGaWx0ZXIuZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZXZlbnRUeXBlJyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnZXEnLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IENhbGVuZGFyRXZlbnRUeXBlRW51bVtDYWxlbmRhckV2ZW50VHlwZUVudW0uTk9UX1JFR0lTVEVSRURfU0VTU0lPTl1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlsdEZpbHRlci5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdzZXNzaW9uVHlwZScsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2VxJyxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBTZXNzaW9uVHlwZUVudW1bU2Vzc2lvblR5cGVFbnVtLklMVF9TRVNTSU9OXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY2hlY2tCb3hlc0ZpbHRlci5maWx0ZXJzLnB1c2goaWx0RmlsdGVyKTtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLmlsdFNlc3Npb25DaGVja2JveFwiLCBcInRydWVcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLmlsdFNlc3Npb25DaGVja2JveFwiLCBcImZhbHNlXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVnaXN0ZXJlZE9yV2FpdGxpc3RlZENoZWNrYm94KSB7XHJcbiAgICAgICAgICAgIGNoZWNrQm94ZXNGaWx0ZXIuZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZXZlbnRUeXBlJyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnZXEnLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IENhbGVuZGFyRXZlbnRUeXBlRW51bVtDYWxlbmRhckV2ZW50VHlwZUVudW0uUkVHSVNURVJFRF9TRVNTSU9OXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLnJlZ2lzdGVyZWRPcldhaXRsaXN0ZWRDaGVja2JveFwiLCBcInRydWVcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLnJlZ2lzdGVyZWRPcldhaXRsaXN0ZWRDaGVja2JveFwiLCBcImZhbHNlXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlsdFNlc3Npb25DaGVja2JveCkge1xyXG4gICAgICAgICAgICBsZXQgdklsdEZpbHRlciA9IHtsb2dpYzogJ2FuZCcsIGZpbHRlcnM6IFtdfTtcclxuICAgICAgICAgICAgdklsdEZpbHRlci5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdldmVudFR5cGUnLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdlcScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogQ2FsZW5kYXJFdmVudFR5cGVFbnVtW0NhbGVuZGFyRXZlbnRUeXBlRW51bS5OT1RfUkVHSVNURVJFRF9TRVNTSU9OXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdklsdEZpbHRlci5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdzZXNzaW9uVHlwZScsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2VxJyxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBTZXNzaW9uVHlwZUVudW1bU2Vzc2lvblR5cGVFbnVtLnZJTFRfU0VTU0lPTl1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNoZWNrQm94ZXNGaWx0ZXIuZmlsdGVycy5wdXNoKHZJbHRGaWx0ZXIpO1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwidmhzQ2FsZW5kYXJGaWx0ZXIudmlsdFNlc3Npb25DaGVja2JveFwiLCBcInRydWVcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLnZpbHRTZXNzaW9uQ2hlY2tib3hcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5vdEF2YWlsYWJsZUZvclJlZ2lzdHJhdGlvbkNoZWNrYm94KSB7XHJcbiAgICAgICAgICAgIGNoZWNrQm94ZXNGaWx0ZXIuZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZXZlbnRUeXBlJyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnZXEnLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IENhbGVuZGFyRXZlbnRUeXBlRW51bVtDYWxlbmRhckV2ZW50VHlwZUVudW0uTk9UX0FWQUlMQUJMRV9TRVNTSU9OXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLm5vdEF2YWlsYWJsZUZvclJlZ2lzdHJhdGlvbkNoZWNrYm94XCIsIFwidHJ1ZVwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwidmhzQ2FsZW5kYXJGaWx0ZXIubm90QXZhaWxhYmxlRm9yUmVnaXN0cmF0aW9uQ2hlY2tib3hcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFN0cmluZyAhPSBudWxsICYmIHRoaXMuc2VhcmNoU3RyaW5nICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgc2VhcmNoRmlsdGVyLmZpbHRlcnMucHVzaCh7ZmllbGQ6ICdkZXNjcmlwdGlvbicsIG9wZXJhdG9yOiAnY29udGFpbnMnLCB2YWx1ZTogdGhpcy5zZWFyY2hTdHJpbmd9KTtcclxuICAgICAgICAgICAgc2VhcmNoRmlsdGVyLmZpbHRlcnMucHVzaCh7ZmllbGQ6ICdjb3Vyc2VOYW1lJywgb3BlcmF0b3I6ICdjb250YWlucycsIHZhbHVlOiB0aGlzLnNlYXJjaFN0cmluZ30pO1xyXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXIuZmlsdGVycy5wdXNoKHtmaWVsZDogJ3RpdGxlJywgb3BlcmF0b3I6ICdjb250YWlucycsIHZhbHVlOiB0aGlzLnNlYXJjaFN0cmluZ30pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoZWNrQm94ZXNGaWx0ZXIuZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2goY2hlY2tCb3hlc0ZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWFyY2hGaWx0ZXIuZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2goc2VhcmNoRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlci5maWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVyLmRhdGFTb3VyY2UuZmlsdGVyKGZpbHRlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVyLmRhdGFTb3VyY2UuZmlsdGVyKHt9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgY2hhbmdlVmlld0FycmF5KCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggPD0gOTkxIHx8IHRoaXMuaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3c0ZvcktlbmRvID0gW3t0eXBlOiBcImFnZW5kYVwiLCBzZWxlY3RlZDogdHJ1ZX1dO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld3NGb3JLZW5kbyA9IFtcIm1vbnRoXCIsIFwid2Vla1wiLCBcImRheVwiLCBcImFnZW5kYVwiXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5GaWx0ZXJNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICAkKFwiI2ZpbHRlckRpYWxvZ1wiKS5tb2RhbChcInNob3dcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkRmlsdGVyRnJvbVN0b3JhZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDYWxlbmRhckZpbHRlci5zZWFyY2hTdHJpbmdcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ2FsZW5kYXJGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ2FsZW5kYXJGaWx0ZXIuY291cnNlQ2hlY2tib3hcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VDaGVja2JveCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDYWxlbmRhckZpbHRlci5jb3Vyc2VDaGVja2JveFwiKSA9PSBcInRydWVcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLmlsdFNlc3Npb25DaGVja2JveFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmlsdFNlc3Npb25DaGVja2JveCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDYWxlbmRhckZpbHRlci5pbHRTZXNzaW9uQ2hlY2tib3hcIikgPT0gXCJ0cnVlXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbHRTZXNzaW9uQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDYWxlbmRhckZpbHRlci5yZWdpc3RlcmVkT3JXYWl0bGlzdGVkQ2hlY2tib3hcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcmVkT3JXYWl0bGlzdGVkQ2hlY2tib3ggPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ2FsZW5kYXJGaWx0ZXIucmVnaXN0ZXJlZE9yV2FpdGxpc3RlZENoZWNrYm94XCIpID09IFwidHJ1ZVwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZE9yV2FpdGxpc3RlZENoZWNrYm94ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ2FsZW5kYXJGaWx0ZXIudmlsdFNlc3Npb25DaGVja2JveFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZpbHRTZXNzaW9uQ2hlY2tib3ggPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ2FsZW5kYXJGaWx0ZXIudmlsdFNlc3Npb25DaGVja2JveFwiKSA9PSBcInRydWVcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpbHRTZXNzaW9uQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDYWxlbmRhckZpbHRlci5ub3RBdmFpbGFibGVGb3JSZWdpc3RyYXRpb25DaGVja2JveFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLm5vdEF2YWlsYWJsZUZvclJlZ2lzdHJhdGlvbkNoZWNrYm94ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLm5vdEF2YWlsYWJsZUZvclJlZ2lzdHJhdGlvbkNoZWNrYm94XCIpID09IFwidHJ1ZVwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90QXZhaWxhYmxlRm9yUmVnaXN0cmF0aW9uQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuY291cnNlQ2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlsdFNlc3Npb25DaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ub3RBdmFpbGFibGVGb3JSZWdpc3RyYXRpb25DaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkT3JXYWl0bGlzdGVkQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlsdFNlc3Npb25DaGVja2JveCA9IHRydWU7XHJcblxyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ2aHNDYWxlbmRhckZpbHRlci5zZWFyY2hTdHJpbmdcIiwgXCJcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLmNvdXJzZUNoZWNrYm94XCIsIFwiZmFsc2VcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLmlsdFNlc3Npb25DaGVja2JveFwiLCBcInRydWVcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLnJlZ2lzdGVyZWRPcldhaXRsaXN0ZWRDaGVja2JveFwiLCBcInRydWVcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc0NhbGVuZGFyRmlsdGVyLnZpbHRTZXNzaW9uQ2hlY2tib3hcIiwgXCJ0cnVlXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ2aHNDYWxlbmRhckZpbHRlci5ub3RBdmFpbGFibGVGb3JSZWdpc3RyYXRpb25DaGVja2JveFwiLCBcInRydWVcIik7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dGaWx0ZXJEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSAkKFwiLmZpbHRlci1tb2RhbCAubW9kYWwtZGlhbG9nXCIpO1xyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApIHtcclxuICAgICAgICAgICAgbW9kYWwuY3NzKCdtYXJnaW4tcmlnaHQnLCAnYXV0bycpO1xyXG4gICAgICAgICAgICBtb2RhbC5jc3MoJ21hcmdpbi1sZWZ0JywgJ2F1dG8nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmaWx0ZXJfX21haW5cIik7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRXaWR0aCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIDEwO1xyXG4gICAgICAgICAgICAgICAgbW9kYWwuY3NzKCdtYXJnaW4tbGVmdCcsIGxlZnRXaWR0aCArICdweCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbG9zZVNlYXJjaElucHV0KENhbGVuZGFyQ29udHJvbGxlci5OQU1FLCB3aW5kb3cpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtQZXJzb25hbFNlcnZpY2V9IGZyb20gXCIuL1BlcnNvbmFsU2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLy4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJDZXJ0aWZpY2F0ZX0gZnJvbSBcIi4vbW9kZWxzL0lVc2VyQ2VydGlmaWNhdGVcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4vLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7QXBwUHJvcGVydGllc30gZnJvbSBcIi4uL3V0aWxzL0FwcFByb3BlcnRpZXNcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXJ9IGZyb20gXCIuLi9jb21wb25lbnRzL3JpY2h0ZXh0L1JpY2hUZXh0RWRpdG9yRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVTZXJ2aWNlfSBmcm9tIFwiLi4vY2VydGlmaWNhdGVzL0NlcnRpZmljYXRlU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SUJ1c2luZXNzVW5pdH0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvbW9kZWxzL0lCdXNpbmVzc1VuaXRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDZXJ0aWZpY2F0ZXNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuQ2VydGlmaWNhdGVzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcbiAgICBwdWJsaWMgY2VydGlmaWNhdGVzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElVc2VyQ2VydGlmaWNhdGU+O1xyXG4gICAgcHVibGljIHJvd1Nob3c6IE1hcDxudW1iZXIsIGJvb2xlYW4+ID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBhcGlBcHBsaWNhdGlvblVybDogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgZG9tYWluc01hcDogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XHJcbiAgICBwdWJsaWMgc2hhcmVkQ2VydGlmaWNhdGU6IElVc2VyQ2VydGlmaWNhdGU7XHJcbiAgICBwdWJsaWMgc2hhcmVkVXJsOiBzdHJpbmcgPSAnJztcclxuICAgIHB1YmxpYyB1cmxGb3JGYWNlYm9vazogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgdXJsRm9yTGlua2VkSW46IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIHByaXZhdGUgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBzdWJqZWN0OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGFkZHJlc3M6IHN0cmluZ1xyXG4gICAgcHVibGljIHRvb2xiYXIgPVxyXG4gICAgICAgIFtbXSxbJ2JvbGQnLCAnaXRhbGljcycsICd1bmRlcmxpbmUnLCAnc3RyaWtlVGhyb3VnaCcsIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9GT05UX0NPTE9SLCBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfQkFDS0dST1VORF9GT05UX0NPTE9SXSxcclxuICAgICAgICAgICAgWyd1bCcsICdvbCcsICdpbmRlbnQnLCAnb3V0ZGVudCcsICdqdXN0aWZ5TGVmdCcsICdqdXN0aWZ5Q2VudGVyJywgJ2p1c3RpZnlSaWdodCcsICdqdXN0aWZ5RnVsbCddLFxyXG4gICAgICAgICAgICBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ3AnLCAncHJlJywgJ3F1b3RlJ10sW10sXHJcbiAgICAgICAgICAgIFsncmVkbycsICd1bmRvJywgJ2NsZWFyJywgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0ZVTExTQ1JFRU5fQlVUVE9OLCAnaHRtbCddXTtcclxuICAgIHB1YmxpYyBpc0VtYWlsU2VuZGluZ0luUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJHJvdXRlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVyc29uYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENlcnRpZmljYXRlU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFueSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBuZy5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGU6IGFueSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsU2VydmljZTogUGVyc29uYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc1JvdXRlcjogTGVhcm5pbmdQYXRoc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY2VydGlmaWNhdGVTZXJ2aWNlOiBDZXJ0aWZpY2F0ZVNlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfQ09VUlNFU19DRVJUSUZJQ0FURVNfTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTXkgY2VydGlmaWNhdGVzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICBsZXQgdG1wVXJsID0gQXBwUHJvcGVydGllcy5zZXJ2aWNlUm9vdC5zcGxpdCgnXFwvXFwvJylbMV0uc3BsaXQoJy4nKTtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldEFsbEJ1RG9tYWlucygpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb21haW5zTWFwID0gcmVzO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFwaUFwcGxpY2F0aW9uVXJsID0gKHRtcFVybC5sZW5ndGggPT0gMyAmJiB0bXBVcmxbMF0uaW5kZXhPZigndmhzLXRlc3QnKSA9PT0gLTEgPyB0bXBVcmxbdG1wVXJsLmxlbmd0aCAtIDJdICsgJy4nICsgdG1wVXJsW3RtcFVybC5sZW5ndGggLSAxXSA6IHRtcFVybC5qb2luKCcuJykpICsgJ2FwaS8nO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmNlcnRpZmljYXRlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElVc2VyQ2VydGlmaWNhdGU+KCRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9jb21tb24vY2VydGlmaWNhdGVzL215XCIpKSk7XHJcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZXNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKChlOiBJVXNlckNlcnRpZmljYXRlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoZS5jZXJ0aWZpY2F0ZUlkLCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hLZXlQcmVzcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhpZDogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZihrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaWQsICF0aGlzLnJvd1Nob3cuZ2V0KGlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkTGVhcm5pbmdPYmplY3QoY2VydGlmaWNhdGU6IElVc2VyQ2VydGlmaWNhdGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2VydGlmaWNhdGUuc2VjdXJlZE9iamVjdFR5cGUgPT0gJ0NPVVJTRScpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kZXRhaWxzVXJsKGNlcnRpZmljYXRlLm9iamVjdElkKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjZXJ0aWZpY2F0ZS5zZWN1cmVkT2JqZWN0VHlwZSA9PSAnTEVBUk5JTkdfUEFUSCcpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubGVhcm5pbmdQYXRoc1JvdXRlci5kZXRhaWxzVXJsKGNlcnRpZmljYXRlLm9iamVjdElkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb3dubG9hZENlcnRpZmljYXRlKGlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGlkLCAhdGhpcy5yb3dTaG93LmdldChpZCkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcnNvbmFsU2VydmljZS5kb3dubG9hZENlcnRpZmljYXRlKGlkKS50aGVuKHJlc3VsdCA9PiB0aGlzLiR3aW5kb3cub3BlbihyZXN1bHQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1O1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFZpZXdUeXBlKHZpZXdUeXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN0YXR1cyhjZXJ0aWZpY2F0ZTogSVVzZXJDZXJ0aWZpY2F0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGNlcnRpZmljYXRlLnZhbGlkVG9EYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoRGF0ZS5ub3coKSkuaXNTYW1lKGNlcnRpZmljYXRlLnZhbGlkVG9EYXRlLCAnZGF5JykgfHwgbW9tZW50KERhdGUubm93KCkpLmlzQmVmb3JlKGNlcnRpZmljYXRlLnZhbGlkVG9EYXRlLCAnZGF5JykgP1xyXG4gICAgICAgICAgICAgICAgXCJWYWxpZFwiIDogXCJFeHBpcmVkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlZhbGlkXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEtleVByZXNzKCkge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcInBlcnNvbmFsLm1haW4uc2VhcmNoXCIsKGV2ZW50LCBzZWFyY2hJbnB1dCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNlcnRpZmljYXRlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3B5VmVyaWZpY2F0aW9uTGluayhjZXJ0aWZpY2F0ZTogSVVzZXJDZXJ0aWZpY2F0ZSkge1xyXG4gICAgICAgIGxldCB0ZXh0ID0gdGhpcy5nZXRWZXJpZmljYXRpb25QYWdlKGNlcnRpZmljYXRlKVxyXG4gICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbSk7XHJcbiAgICAgICAgZWxlbS52YWx1ZSA9IFwiXCIgKyB0ZXh0O1xyXG4gICAgICAgIGVsZW0uc2VsZWN0KCk7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dTaGFyZURpYWxvZyhjZXJ0aWZpY2F0ZTogSVVzZXJDZXJ0aWZpY2F0ZSkge1xyXG4gICAgICAgIHRoaXMuc2hhcmVkQ2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZTtcclxuICAgICAgICB0aGlzLnNoYXJlZFVybCA9IHRoaXMuZ2V0VmVyaWZpY2F0aW9uUGFnZShjZXJ0aWZpY2F0ZSk7XHJcbiAgICAgICAgdGhpcy51cmxGb3JGYWNlYm9vayA9IHRoaXMuJHNjZS50cnVzdEFzUmVzb3VyY2VVcmwoYGh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL3NoYXJlX2J1dHRvbi5waHA/aHJlZj0ke3RoaXMuc2hhcmVkVXJsICsgJz9sYXRlc3QnfSZsYXlvdXQ9YnV0dG9uJnNpemU9bGFyZ2Umd2lkdGg9NzcmaGVpZ2h0PTI4JmFwcElkYCk7XHJcbiAgICAgICAgdGhpcy5nZXRMaW5rRm9yTGlua2VkSW4oKTtcclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNzaGFyZURpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2hhcmVEaWFsb2coKSB7XHJcbiAgICAgICAgdGhpcy5zaGFyZWRDZXJ0aWZpY2F0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zaGFyZWRVcmwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMudXJsRm9yRmFjZWJvb2sgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMudXJsRm9yTGlua2VkSW4gPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWZXJpZmljYXRpb25QYWdlKGNlcnRpZmljYXRlOiBJVXNlckNlcnRpZmljYXRlKSB7XHJcbiAgICAgICAgbGV0IHNwbGl0ZWRVcmwgPSBBcHBQcm9wZXJ0aWVzLnNlcnZpY2VSb290LnNwbGl0KCdcXC9cXC8nKVsxXS5zcGxpdCgnLicpO1xyXG4gICAgICAgIGxldCBkb21haW4gPSBzcGxpdGVkVXJsLmxlbmd0aCA9PT0gMyA/IHNwbGl0ZWRVcmxbMF0gKyAnLicgOiAnJztcclxuICAgICAgICBpZiAodGhpcy5kb21haW5zTWFwICYmIGNlcnRpZmljYXRlLmJ1c2luZXNzVW5pdElkICYmIHRoaXMuZG9tYWluc01hcFtjZXJ0aWZpY2F0ZS5idXNpbmVzc1VuaXRJZF0pIHtcclxuICAgICAgICAgICAgZG9tYWluID0gdGhpcy5kb21haW5zTWFwW2NlcnRpZmljYXRlLmJ1c2luZXNzVW5pdElkXSArICcuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEFwcFByb3BlcnRpZXMuc2VydmljZVJvb3Quc3BsaXQoJ1xcL1xcLycpWzBdICsgJy8vJyArIGRvbWFpbiArICh0aGlzLmFwaUFwcGxpY2F0aW9uVXJsLmluZGV4T2YoXCJ2aHMtdGVzdFwiKSAhPT0gLTEgJiYgZG9tYWluID8gdGhpcy5hcGlBcHBsaWNhdGlvblVybC5yZXBsYWNlKHNwbGl0ZWRVcmxbMF0gKyAnLicsICcnKSA6IHRoaXMuYXBpQXBwbGljYXRpb25VcmwpICsgYHZlcmlmaWNhdGlvbi9jZXJ0aWZpY2F0ZS8ke2NlcnRpZmljYXRlLnV1aWR9YDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERhdGUoZGF0ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T3JnYW5pemF0aW9uSWRGb3JVcmwobGlua2VkaW5Pcmdhbml6YXRpb25JZDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGxpbmtlZGluT3JnYW5pemF0aW9uSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcmb3JnYW5pemF0aW9uSWQ9JyArIGxpbmtlZGluT3JnYW5pemF0aW9uSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEV4cGlyYXRpb25EYXRlRm9yVXJsKGRhdGU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJydcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmFsaWRUbyA9IG5ldyBEYXRlKGRhdGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gJyZleHBpcmF0aW9uWWVhcj0nICsgdmFsaWRUby5nZXRGdWxsWWVhcigpICsgJyZleHBpcmF0aW9uTW9udGg9JyArICh2YWxpZFRvLmdldE1vbnRoKCkgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldExpbmtGb3JMaW5rZWRJbigpIHtcclxuICAgICAgICB0aGlzLnVybEZvckxpbmtlZEluID0gJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9wcm9maWxlL2FkZD9zdGFydFRhc2s9Q0VSVElGSUNBVElPTl9OQU1FJm5hbWU9J1xyXG4gICAgICAgICAgICArIHRoaXMuc2hhcmVkQ2VydGlmaWNhdGUub2JqZWN0TmFtZSArICcmb3JnYW5pemF0aW9uTmFtZT0nICsgdGhpcy5zaGFyZWRDZXJ0aWZpY2F0ZS5idXNpbmVzc1VuaXROYW1lXHJcbiAgICAgICAgICAgICsgdGhpcy5nZXRPcmdhbml6YXRpb25JZEZvclVybCh0aGlzLnNoYXJlZENlcnRpZmljYXRlLmxpbmtlZGluT3JnYW5pemF0aW9uSWQpXHJcbiAgICAgICAgICAgICsgJyZpc3N1ZVllYXI9JyArIHRoaXMuZ2V0RGF0ZSh0aGlzLnNoYXJlZENlcnRpZmljYXRlLnJlY2VpcHREYXRlKS5nZXRGdWxsWWVhcigpXHJcbiAgICAgICAgICAgICsgJyZpc3N1ZU1vbnRoPScgKyAodGhpcy5nZXREYXRlKHRoaXMuc2hhcmVkQ2VydGlmaWNhdGUucmVjZWlwdERhdGUpLmdldE1vbnRoKCkgKyAxKVxyXG4gICAgICAgICAgICArIHRoaXMuZ2V0RXhwaXJhdGlvbkRhdGVGb3JVcmwodGhpcy5zaGFyZWRDZXJ0aWZpY2F0ZS52YWxpZFRvRGF0ZSlcclxuICAgICAgICAgICAgKyAnJmNlcnRVcmw9JyArIHRoaXMuc2hhcmVkVXJsXHJcbiAgICAgICAgICAgICsgJyZjZXJ0SWQ9JyArIHRoaXMuc2hhcmVkQ2VydGlmaWNhdGUuY2VydGlmaWNhdGVJZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0NyZWF0aW9uRW1haWxNb2RhbCh2ZXJpZmljYXRpb25Vcmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2xlYXJFbWFpbEZpZWxkcyh2ZXJpZmljYXRpb25VcmwpO1xyXG4gICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI3Nob3dDcmVhdGlvbkVtYWlsRGlhbG9nXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFyRW1haWxGaWVsZHModmVyaWZpY2F0aW9uVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXNzdWVkQnlUZXh0ID0geGhyLnJlc3BvbnNlWE1MLmhlYWQucXVlcnlTZWxlY3RvcihcIltwcm9wZXJ0eX49J29nOnRpdGxlJ11bY29udGVudF1cIikuY29udGVudDtcclxuICAgICAgICAgICAgbGV0IGNlcnRpZmljYXRlSW1hZ2U6IHN0cmluZyA9IHhoci5yZXNwb25zZVhNTC5oZWFkLnF1ZXJ5U2VsZWN0b3IoXCJbcHJvcGVydHl+PSdvZzppbWFnZSddW2NvbnRlbnRdXCIpLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgIGNlcnRpZmljYXRlSW1hZ2UgPSBjZXJ0aWZpY2F0ZUltYWdlLmluZGV4T2YoJ2h0dHAnKSAhPSAtMSA/IGNlcnRpZmljYXRlSW1hZ2UgOiBBcHBQcm9wZXJ0aWVzLnNlcnZpY2VSb290XHJcbiAgICAgICAgICAgICAgICArIChjZXJ0aWZpY2F0ZUltYWdlLmNoYXJBdCgwKSA9PSAnLycgPyBjZXJ0aWZpY2F0ZUltYWdlLnN1YnN0cmluZygxKSA6IGNlcnRpZmljYXRlSW1hZ2UpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdWJqZWN0ID0gYCR7dGhpcy51c2VyUHJvZmlsZS5mdWxsTmFtZX0gaXMgc2hhcmluZyB0aGVpciBuZXcgZUxlYXJuaW5nIGFjaGlldmVtZW50YDtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gYCR7dGhpcy51c2VyUHJvZmlsZS5mdWxsTmFtZX0gaXMgc2hhcmluZyB0aGVpciBuZXcgZUxlYXJuaW5nIGFjaGlldmVtZW50IHdpdGggeW91PGJyPmBcclxuICAgICAgICAgICAgICAgICsgYDxpbWcgc3JjPVwiJHtjZXJ0aWZpY2F0ZUltYWdlfVwiIGhlaWdodD1cIjIwMFwiPjxicj5gXHJcbiAgICAgICAgICAgICAgICArIGAke2lzc3VlZEJ5VGV4dH08YnI+YFxyXG4gICAgICAgICAgICAgICAgKyBgPGEgaHJlZj1cIiR7dmVyaWZpY2F0aW9uVXJsfVwiPlZpZXcgaXQgbm93PC9hPjxicj5gXHJcbiAgICAgICAgICAgICAgICArIFwib3IgY29weSBhbmQgcGFzdGUgdGhpcyBsaW5rIGluIHlvdXIgYnJvd3Nlcjxicj5cIlxyXG4gICAgICAgICAgICAgICAgKyBgPGEgaHJlZj1cIiR7dmVyaWZpY2F0aW9uVXJsfVwiPiR7dmVyaWZpY2F0aW9uVXJsfTwvYT5gO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgdGhpcy5zaGFyZWRVcmwpO1xyXG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBcImRvY3VtZW50XCI7XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb3NlU2VuZE1haWxNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFkZHJlc3MgPSBcIlwiO1xyXG4gICAgICAgICQoJyNpbmZvRmllbGQnKS5jb2xsYXBzZSgnaGlkZScpO1xyXG4gICAgICAgICQoXCIjc2hvd0NyZWF0aW9uRW1haWxEaWFsb2dcIikubW9kYWwoJ2hpZGUnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VuZEVtYWlsV2l0aEJhZGdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNFbWFpbFNlbmRpbmdJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNlcnRpZmljYXRlU2VydmljZS5zZW5kRW1haWxXaXRoQ2VydGlmaWNhdGUodGhpcy5zaGFyZWRDZXJ0aWZpY2F0ZS51dWlkLCB0aGlzLm1lc3NhZ2UsIHRoaXMuc3ViamVjdCwgdGhpcy5hZGRyZXNzKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiRW1haWwgd2FzIHN1Y2Nlc3NmdWxseSBzZW50XCIpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gc2VuZCBhbiBlbWFpbFwiKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVNlbmRNYWlsTW9kYWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbWFpbFNlbmRpbmdJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLy4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ291cG9uc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJwZXJzb25hbC5Db3Vwb25zQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfQ09VUE9OU19NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJDb3Vwb25zXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1ID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHU7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsImltcG9ydCB7UGVyc29uYWxTZXJ2aWNlfSBmcm9tIFwiLi9QZXJzb25hbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7UmVzaXplVmlld1NlcnZpY2V9IGZyb20gXCIuLi91dGlscy9SZXNpemVWaWV3U2VydmljZVwiO1xyXG5pbXBvcnQge0lDb3Vyc2VQcm9ncmVzc30gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VQcm9ncmVzc1wiO1xyXG5pbXBvcnQge0NvdXJzZVNlcnZpY2V9IGZyb20gXCIuLi9jb3Vyc2VzL0NvdXJzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NlcnZpY2V9IGZyb20gXCIuLi9jb3Vyc2VzL1Byb2dyZXNzU2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZXNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuQ291cnNlc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG4gICAgcHVibGljIHJlc2l6ZVZpZXdTZXJ2aWNlOiBSZXNpemVWaWV3U2VydmljZTtcclxuICAgIHB1YmxpYyBjb3Vyc2VzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElDb3Vyc2VQcm9ncmVzcz47XHJcbiAgICBwdWJsaWMgcm93U2hvdzogTWFwPG51bWJlciwgYm9vbGVhbj4gPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIGNvdXJzZXM6IE1hcDxudW1iZXIsIElDb3Vyc2U+ID0gbmV3IE1hcDxudW1iZXIsIElDb3Vyc2U+KCk7XHJcbiAgICBwdWJsaWMgaXNDb3Vyc2VzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcnNvbmFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDb3Vyc2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUHJvZ3Jlc3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsU2VydmljZTogUGVyc29uYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHByb2dyZXNzU2VydmljZTogUHJvZ3Jlc3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfQ09VUlNFU19NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJNeSBjb3Vyc2VzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMudmlld1R5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdy5iaW5kKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLnNldFJlc2l6ZVZpZXdUeXBlKHRoaXMudmlld1R5cGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElDb3Vyc2VQcm9ncmVzcz4oJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2NvdXJzZXMvbXlQcm9ncmVzc2VzXCIpKSk7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuICAgICAgICB0aGlzLmNvdXJzZXNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGUuaWQsIGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgICAgIC8vIGRvIG5vdGhpbmdcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kTG9hZGluZygpIHtcclxuICAgICAgICBsZXQgY291cnNlSWRzID0gdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmVudHJpZXNcclxuICAgICAgICAgICAgLm1hcChjb3Vyc2VQcm9ncmVzcyA9PiBjb3Vyc2VQcm9ncmVzcy5jb3Vyc2VJZClcclxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSwgcG9zLCBzZWxmKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRleE9mKGl0ZW0pID09IHBvcztcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS5nZXRNeUNvdXJzZXNCeUlkcyhjb3Vyc2VJZHMpXHJcbiAgICAgICAgICAgIC50aGVuKGNvdXJzZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgY291cnNlcy5mb3JFYWNoKGNvdXJzZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VzLnNldChjb3Vyc2UuaWQsIGNvdXJzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvdXJzZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZENvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY291cnNlcy5nZXQoY291cnNlSWQpLnBlcm1pc3Npb25zLnZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kZXRhaWxzVXJsKGNvdXJzZUlkKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJZb3UgYXJlIG5vdCBncmFudGVkIHBlcm1pc3Npb24gdG8gdmlldyB0aGlzIGNvdXJzZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZENvdXJzZVRvRmF2b3JpdGVzKGNvdXJzZTogSUNvdXJzZSkge1xyXG4gICAgICAgIHRoaXMuYWRkVG9GYXZvcml0ZXMoY291cnNlLmlkLCBjb3Vyc2UudmVyc2lvbiwgUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgY291cnNlIGhhcyBiZWVuIGFkZGVkIHRvIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICBjb3Vyc2UuZmF2b3JpdGUgPSB0cnVlO1xyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuYWxyZWFkeS5pbi5mYXZvcml0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgY291cnNlIGlzIGFscmVhZHkgaW4geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuaXMuY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgZGF0YSBoYXMgYmVlbiBtb2RpZmllZCBieSBhbm90aGVyIHVzZXI6IHBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGFuZCB0cnkgYWdhaW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlQ291cnNlRnJvbUZhdm9yaXRlcyhjb3Vyc2U6IElDb3Vyc2UpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21GYXZvcml0ZXMoY291cnNlLmlkLCBjb3Vyc2UudmVyc2lvbiwgUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgY291cnNlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgY291cnNlLmZhdm9yaXRlID0gZmFsc2U7XHJcbiAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5ub3QuaW4uZmF2b3JpdGVcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmVtb3ZlIGZyb20geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3QuaXMuY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgZGF0YSBoYXMgYmVlbiBtb2RpZmllZCBieSBhbm90aGVyIHVzZXI6IHBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGFuZCB0cnkgYWdhaW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZFRvRmF2b3JpdGVzKGlkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgdHlwZTogUmVmZXJlbmNlZE9iamVjdFR5cGUpIHtcclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGlkLCAhdGhpcy5yb3dTaG93LmdldChpZCkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcnNvbmFsU2VydmljZS5hZGRUb0Zhdm9yaXRlcyhpZCwgdmVyc2lvbiwgdHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tRmF2b3JpdGVzKGlkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgdHlwZTogUmVmZXJlbmNlZE9iamVjdFR5cGUpIHtcclxuICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGlkLCAhdGhpcy5yb3dTaG93LmdldChpZCkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcnNvbmFsU2VydmljZS5yZW1vdmVGcm9tRmF2b3JpdGVzKGlkLCB2ZXJzaW9uLCB0eXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1O1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFZpZXdUeXBlKHZpZXdUeXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZS5vbGRWaWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWNvZGVDb3Vyc2VQcm9ncmVzc1N0YXR1cyhzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJOT1RfQVZBSUxBQkxFXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiTm90IGF2YWlsYWJsZVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIk5PVF9TVEFSVEVEXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiTm90IHN0YXJ0ZWRcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJTVEFSVEVEXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiU3RhcnRlZFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkZBSUxFRFwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIkZhaWxlZFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkNPTVBMRVRFRFwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIkNvbXBsZXRlZFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkVYUElSRURcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJFeHBpcmVkXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiUkVTRVRcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJQZXJtaXNzaW9ucyByZXZva2VkXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb3dubG9hZENvdXJzZVRyYW5zY3JpcHRSZXBvcnQoY291cnNlSWQ6IG51bWJlciwgY291cnNlUHJvZ3Jlc3NJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnM6IGFueSA9IHtcclxuICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJQcm9maWxlLmlkLFxyXG4gICAgICAgICAgICBjb3Vyc2VJZDogY291cnNlSWQsXHJcbiAgICAgICAgICAgIGNvdXJzZVByb2dyZXNzSWQ6IGNvdXJzZVByb2dyZXNzSWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmRvd25sb2FkQ291cnNlVHJhbnNjcmlwdFJlcG9ydChwYXJhbWV0ZXJzKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4ocmVzdWx0KVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRHZW5lcmFsVHJhbnNjcmlwdFJlcG9ydCgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGFyYW1ldGVyczogYW55ID0ge1xyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlclByb2ZpbGUuaWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTZXJ2aWNlLmRvd25sb2FkR2VuZXJhbFRyYW5zY3JpcHRSZXBvcnQocGFyYW1ldGVycylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5vcGVuKHJlc3VsdClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVkaXRzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInBlcnNvbmFsLkNyZWRpdHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHJpdmF0ZSB1c2VyOiBJVXNlcjtcclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpO1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuUEVSU09OQUxfQUNDT1VOVF9DUkVESVRTX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIk15IGNyZWRpdHNcIikudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIGF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAgICAgLnRoZW4oIHUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyID0gdTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1BlcnNvbmFsU2VydmljZX0gZnJvbSBcIi4vUGVyc29uYWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge1Jlc2l6ZVZpZXdTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvUmVzaXplVmlld1NlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBFeHBpcmVkQ291cnNlc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJwZXJzb25hbC5FeHBpcmVkQ291cnNlc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG4gICAgcHVibGljIGNvdXJzZXNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUNvdXJzZT47XHJcbiAgICBwdWJsaWMgcm93U2hvdzogTWFwPG51bWJlciwgYm9vbGVhbj4gPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyB3aW5kb3c6IGFueTtcclxuICAgIHB1YmxpYyByZXNpemVWaWV3U2VydmljZTogUmVzaXplVmlld1NlcnZpY2U7XHJcblxyXG4gICAgcHJpdmF0ZSBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVyc29uYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ291cnNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc0FwaTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfRVhQSVJFRF9DT1VSU0VTX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkV4cGlyZWQgY291cnNlc1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMudmlld1R5cGUpO1xyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMucmVzaXplVmlld1NlcnZpY2Uuc2V0UmVzaXplVmlld1R5cGUodGhpcy52aWV3VHlwZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3cudW5iaW5kKCdyZXNpemUnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUNvdXJzZT4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2NvdXJzZXMvZXhwaXJlZFwiKSkpO1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoZS5pZCwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhpbmRleDogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZihrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaW5kZXgsICF0aGlzLnJvd1Nob3cuZ2V0KGluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkQ291cnNlKGNvdXJzZTogSUNvdXJzZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjb3Vyc2UucGVybWlzc2lvbnMudmlldyB8fCB0aGlzLnN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUxlYXJuaW5nT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybChjb3Vyc2UuaWQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZENvdXJzZVRvRmF2b3JpdGVzKGNvdXJzZTogSUNvdXJzZSkge1xyXG4gICAgICAgIHRoaXMuYWRkVG9GYXZvcml0ZXMoY291cnNlLmlkLCBjb3Vyc2UudmVyc2lvbiwgUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJUaGUgY291cnNlIGhhcyBiZWVuIGFkZGVkIHRvIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICBjb3Vyc2UuZmF2b3JpdGUgPSB0cnVlO1xyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5hbHJlYWR5LmluLmZhdm9yaXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBjb3Vyc2UgaXMgYWxyZWFkeSBpbiB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5pcy5jaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGFub3RoZXIgdXNlcjogcGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYW5kIHRyeSBhZ2FpblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVDb3Vyc2VGcm9tRmF2b3JpdGVzKGNvdXJzZTogSUNvdXJzZSkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUZhdm9yaXRlcyhjb3Vyc2UuaWQsIGNvdXJzZS52ZXJzaW9uLCBSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0UpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBjb3Vyc2UgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICBjb3Vyc2UuZmF2b3JpdGUgPSBmYWxzZTtcclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3Qubm90LmluLmZhdm9yaXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHJlbW92ZSBmcm9tIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmlzLmNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYW5vdGhlciB1c2VyOiBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRUb0Zhdm9yaXRlcyhpZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHR5cGU6IFJlZmVyZW5jZWRPYmplY3RUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5yb3dTaG93LnNldChpZCwgIXRoaXMucm93U2hvdy5nZXQoaWQpKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJzb25hbFNlcnZpY2UuYWRkVG9GYXZvcml0ZXMoaWQsIHZlcnNpb24sIHR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlRnJvbUZhdm9yaXRlcyhpZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHR5cGU6IFJlZmVyZW5jZWRPYmplY3RUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5yb3dTaG93LnNldChpZCwgIXRoaXMucm93U2hvdy5nZXQoaWQpKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJzb25hbFNlcnZpY2UucmVtb3ZlRnJvbUZhdm9yaXRlcyhpZCwgdmVyc2lvbiwgdHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2Uub2xkVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaWV3VHlwZVNlbGVjdGVkKHZpZXdUeXBlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3VHlwZSA9PSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoS2V5UHJlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0O1xyXG4gICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlblNlYXJjaElucHV0KCkge1xyXG4gICAgICAgICQoXCIjZmlsdGVyX19zZWFyY2hcIikuYW5pbWF0ZSh7d2lkdGg6IFwiMHB4XCIsIG9wYWNpdHk6IFwiMFwiLCBwYWRkaW5nOiBcIjBcIn0sMjAwKTtcclxuICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2hcIikuYW5pbWF0ZSh7d2lkdGg6ICcyMjBweCcsIGJvcmRlcjogXCIycHhcIiAgfSwyMDApO1xyXG4gICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaCBpbnB1dFwiKS5hbmltYXRlKHt3aWR0aDogJzIwMHB4JywgcGFkZGluZ0xlZnQ6ICczMHB4J30sMjAwKTtcclxuICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2ggLmdseXBoaWNvbi52aHMtaW1hZ2Uuc3ZnLXNlYXJjaFwiKS5hbmltYXRlKHtvcGFjaXR5OiAnMSd9LDIwMCk7XHJcbiAgICAgICAgJChcIiNmaWx0ZXJfX29wZW4tc2VhcmNoICNjbG9zZS1zZWFyY2gtZmlsdGVyXCIpLmFuaW1hdGUoe29wYWNpdHk6ICcxJ30sMjAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICAkKFwiI2ZpbHRlcl9fb3Blbi1zZWFyY2ggLmdseXBoaWNvbi52aHMtaW1hZ2Uuc3ZnLXNlYXJjaFwiKS5hbmltYXRlKHtvcGFjaXR5OiAnMCd9LDIwMCk7XHJcbiAgICAgICAgJChcIiNmaWx0ZXJfX29wZW4tc2VhcmNoXCIpLmFuaW1hdGUoe3dpZHRoOiAnMCcsIGJvcmRlcjogXCIwcHhcIiAgfSwyMDApO1xyXG4gICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaCBpbnB1dFwiKS5hbmltYXRlKHt3aWR0aDogJzAnLCBwYWRkaW5nTGVmdDogJzAnfSwyMDApO1xyXG4gICAgICAgICQoXCIjZmlsdGVyX19vcGVuLXNlYXJjaCAjY2xvc2Utc2VhcmNoLWZpbHRlclwiKS5hbmltYXRlKHtvcGFjaXR5OiAnMCd9LDIwMCk7XHJcblxyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDc2OCkge1xyXG4gICAgICAgICAgICAkKFwiI2ZpbHRlcl9fc2VhcmNoXCIpLmFuaW1hdGUoe3dpZHRoOiBcIjQycHhcIiwgb3BhY2l0eTogXCIxXCIsIHBhZGRpbmdMZWZ0OiBcIjBcIixwYWRkaW5nUmlnaHQ6IFwiMFwifSwyMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQoXCIjZmlsdGVyX19zZWFyY2hcIikuYW5pbWF0ZSh7d2lkdGg6IFwiMTA5cHhcIiwgb3BhY2l0eTogXCIxXCIsIHBhZGRpbmdMZWZ0OiBcIjE1cHhcIixwYWRkaW5nUmlnaHQ6IFwiMTVweFwifSwyMDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5jb3Vyc2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZXNpemVWaWV3U2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1Jlc2l6ZVZpZXdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aH0gZnJvbSBcIi4uL2xlYXJuaW5nUGF0aHMvbW9kZWxzL0lMZWFybmluZ1BhdGhcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7Q3VzdG9tQnJhbmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vYnJhbmRpbmcvQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRXhwaXJlZExlYXJuaW5nUGF0aHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuRXhwaXJlZExlYXJuaW5nUGF0aHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHVzZXJQcm9maWxlOiBJVXNlcjtcclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElMZWFybmluZ1BhdGg+O1xyXG4gICAgcHVibGljIHJvd1Nob3c6IE1hcDxudW1iZXIsIGJvb2xlYW4+ID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgd2luZG93OiBhbnk7XHJcbiAgICBwdWJsaWMgcmVzaXplVmlld1NlcnZpY2U6IFJlc2l6ZVZpZXdTZXJ2aWNlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfRVhQSVJFRF9MRUFSTklOR19QQVRIU19NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJFeHBpcmVkIGxlYXJuaW5nIHBhdGhzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZSA9IG5ldyBSZXNpemVWaWV3U2VydmljZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdy5iaW5kKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLnNldFJlc2l6ZVZpZXdUeXBlKHRoaXMudmlld1R5cGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElMZWFybmluZ1BhdGg+KCRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9sZWFybmluZ1BhdGhzL3NlYXJjaC9leHBpcmVkXCIpKSk7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChsZWFybmluZ1BhdGggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGxlYXJuaW5nUGF0aC5pZCwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhpbmRleDogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZihrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaW5kZXgsICF0aGlzLnJvd1Nob3cuZ2V0KGluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkTGVhcm5pbmdQYXRoKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLmRldGFpbHNVcmwobGVhcm5pbmdQYXRoSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1c2VyO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFZpZXdUeXBlKHZpZXdUeXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZS5vbGRWaWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdWJqZWN0QW5kTmFtZShsZWFybmluZ1BhdGg6IElMZWFybmluZ1BhdGgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBsZWFybmluZ1BhdGguc3ViamVjdE5hbWUgIT0gbnVsbCAmJiBsZWFybmluZ1BhdGgubmFtZSAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBsZWFybmluZ1BhdGguc3ViamVjdE5hbWUgKyBcIiAvIFwiICsgbGVhcm5pbmdQYXRoLm5hbWVcclxuICAgICAgICAgICAgOiBsZWFybmluZ1BhdGgubmFtZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi8uLi9hdXRoY29yZS9BdXRoTWFuYWdlclwiO1xyXG5pbXBvcnQge1BlcnNvbmFsU2VydmljZX0gZnJvbSBcIi4vUGVyc29uYWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1NlYXJjaENvbnRyb2xIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1NlYXJjaENvbnRyb2xIZWxwZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvTWF0ZXJpYWxzUm91dGVyXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge0lHcmlkTW9kZWwsIEdyaWRNb2RlbH0gZnJvbSBcIi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUZhdm9yaXRlfSBmcm9tIFwiLi9tb2RlbHMvSUZhdm9yaXRlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge09iamVjdFR5cGVVdGlsc30gZnJvbSBcIi4vLi4vdXRpbHMvT2JqZWN0VHlwZVV0aWxzXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLy4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi8uLi9SZWZlcmVuY2VkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge0lHcmlkTG9hZGluZ0xpc3RlbmVyfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge1Jlc2l6ZVZpZXdTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvUmVzaXplVmlld1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBGYXZvcml0ZXNDb250cm9sbGVyIGltcGxlbWVudHMgSUdyaWRMb2FkaW5nTGlzdGVuZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJwZXJzb25hbC5GYXZvcml0ZXNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHJvd1Nob3c6IE1hcDxudW1iZXIsIGJvb2xlYW4+ID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBmYXZvcml0ZXNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUZhdm9yaXRlPjtcclxuICAgIHB1YmxpYyBkaXNhYmxlUmVtb3ZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG4gICAgcHVibGljIHJlc2l6ZVZpZXdTZXJ2aWNlOiBSZXNpemVWaWV3U2VydmljZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aE1hbmFnZXIuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcGVyc29uYWxTZXJ2aWNlOiBQZXJzb25hbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgbWF0ZXJpYWxzUm91dGVyOiBNYXRlcmlhbHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnJhbmRpbmdTZXJ2aWNlOiBDdXN0b21CcmFuZGluZ1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpO1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLk1ZX0xJQlJBUllfRkFWT1JJVEVTX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkZhdm9yaXRlc1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5mYXZvcml0ZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJRmF2b3JpdGU+KCRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9wZXJzb25hbC9mYXZvcml0ZXNcIikpKTtcclxuICAgICAgICB0aGlzLmZhdm9yaXRlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDk7XHJcbiAgICAgICAgdGhpcy5mYXZvcml0ZXNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMudmlld1R5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdy5iaW5kKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLnNldFJlc2l6ZVZpZXdUeXBlKHRoaXMudmlld1R5cGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmRMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMuZmF2b3JpdGVzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChmYXZvcml0ZSA9PiB7XHJcbiAgICAgICAgICAgaWYgKHRoaXMuaXNNYXRlcmlhbE9iamVjdChmYXZvcml0ZS5vYmplY3RUeXBlKSkge1xyXG4gICAgICAgICAgICAgICBmYXZvcml0ZS50aXRsZSA9IGZhdm9yaXRlLnN1YmplY3ROYW1lICsgXCIgLyBcIiArIGZhdm9yaXRlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmF2b3JpdGUuYXV0aG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmF2b3JpdGUudGl0bGUgKz1cIiAoXCIgKyBmYXZvcml0ZS5hdXRob3IgICsgXCIpXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhdm9yaXRlLnRpdGxlICs9XCIgKFwiICsgZmF2b3JpdGUub3duZXIgICsgXCIpXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUGxheWxpc3RPYmplY3QoZmF2b3JpdGUub2JqZWN0VHlwZSkpIHtcclxuICAgICAgICAgICAgICAgZmF2b3JpdGUudGl0bGUgPSBmYXZvcml0ZS5zdWJqZWN0TmFtZSArIFwiIC8gXCIgKyBmYXZvcml0ZS5uYW1lICsgXCIgKFwiICsgZmF2b3JpdGUuc291cmNlTmFtZSArIFwiKVwiO1xyXG4gICAgICAgICAgIH0gZWxzZSBpZih0aGlzLmlzQ291cnNlT2JqZWN0KGZhdm9yaXRlLm9iamVjdFR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgIGZhdm9yaXRlLnRpdGxlID0gZmF2b3JpdGUubmFtZSArIFwiIChcIiArIGZhdm9yaXRlLnNvdXJjZU5hbWUgKyBcIilcIjtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dEZXRhaWxzKGluZGV4OiBudW1iZXIsIGZhdm9yaXRlOiBJRmF2b3JpdGUsIGtleUNvZGU6IG51bWJlcikge1xyXG4gICAgICAgIGlmKGtleUNvZGUgPT0gMTMgfHwgIWtleUNvZGUpIHtcclxuICAgICAgICAgICAgaWYgKGZhdm9yaXRlLmF2YWlsYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dTaG93LnNldChpbmRleCwgIXRoaXMucm93U2hvdy5nZXQoaW5kZXgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZEZhdm9yaXRlUGFnZShmYXZvcml0ZTogSUZhdm9yaXRlKSB7XHJcbiAgICAgICAgaWYgKGZhdm9yaXRlLm9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUxdKSB7XHJcbiAgICAgICAgICAgIGlmKCFmYXZvcml0ZS5hdmFpbGFibGUpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQWNjZXNzIHRvIHRoaXMgbWF0ZXJpYWwgaXMgcmVzdHJpY3RlZFwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1hdGVyaWFsc1JvdXRlci53YXRjaFVybChmYXZvcml0ZS5vYmplY3RJZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmYXZvcml0ZS5vYmplY3RUeXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLlBMQVlMSVNUXSkge1xyXG4gICAgICAgICAgICBpZighZmF2b3JpdGUuYXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkFjY2VzcyB0byB0aGlzIHBsYXlsaXN0IGlzIHJlc3RyaWN0ZWRcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5tYXRlcmlhbHNSb3V0ZXIucGxheWxpc3REZXRhaWxzVXJsKGZhdm9yaXRlLm9iamVjdElkKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZhdm9yaXRlLm9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFXSkge1xyXG4gICAgICAgICAgICBpZighZmF2b3JpdGUuYXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkFjY2VzcyB0byB0aGlzIGNvdXJzZSBpcyByZXN0cmljdGVkXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuY291cnNlc1JvdXRlci5kZXRhaWxzVXJsKGZhdm9yaXRlLm9iamVjdElkKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTWF0ZXJpYWxPYmplY3QocmVmZXJlbmNlT2JqZWN0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFR5cGVVdGlscy5pc01hdGVyaWFsT2JqZWN0KHJlZmVyZW5jZU9iamVjdFR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1BsYXlsaXN0T2JqZWN0KHJlZmVyZW5jZU9iamVjdFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RUeXBlVXRpbHMuaXNQbGF5bGlzdE9iamVjdChyZWZlcmVuY2VPYmplY3RUeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDb3Vyc2VPYmplY3QocmVmZXJlbmNlT2JqZWN0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFR5cGVVdGlscy5pc0NvdXJzZU9iamVjdChyZWZlcmVuY2VPYmplY3RUeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TWF0ZXJpYWxUeXBlQ2xhc3MobWF0ZXJpYWxUeXBlS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RUeXBlVXRpbHMuZ2V0TWF0ZXJpYWxHbHlwaGljb25DbGFzc0Zyb21LZXkobWF0ZXJpYWxUeXBlS2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29udGVudFR5cGVUaXRsZShjb250ZW50VHlwZUtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0VHlwZVV0aWxzLmdldENvbnRlbnRUeXBlVGl0bGUoY29udGVudFR5cGVLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVGcm9tRmF2b3JpdGVzKGZhdm9yaXRlSWQ6IG51bWJlciwgZmF2b3JpdGVUeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVSZW1vdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGVyc29uYWxTZXJ2aWNlLnJlbW92ZUZyb21GYXZvcml0ZXMoZmF2b3JpdGVJZCwgbnVsbCwgT2JqZWN0VHlwZVV0aWxzLmdldFJlZmVyZW5jZU9iamVjdFR5cGVGcm9tU3RyaW5nKGZhdm9yaXRlVHlwZSkpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2Vzcyh0aGlzLmdldFJlbW92ZU1lc3NhZ2UoZmF2b3JpdGVUeXBlKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmF2b3JpdGVzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVSZW1vdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmlzLmNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYW5vdGhlciB1c2VyOiBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmVtb3ZlIGl0IGZyb20geW91ciBmYXZvcml0ZXNcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlUmVtb3ZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSZW1vdmVNZXNzYWdlKGZhdm9yaXRlVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKGZhdm9yaXRlVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiTUFURVJJQUxcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIk1hdGVyaWFsIHJlbW92ZWQgZnJvbSB5b3VyIGZhdm9yaXRlc1wiO1xyXG4gICAgICAgICAgICBjYXNlIFwiUExBWUxJU1RcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlBsYXlsaXN0IHJlbW92ZWQgZnJvbSB5b3VyIGZhdm9yaXRlc1wiO1xyXG4gICAgICAgICAgICBjYXNlIFwiQ09VUlNFXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJDb3Vyc2UgcmVtb3ZlZCBmcm9tIHlvdXIgZmF2b3JpdGVzXCI7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJNYXRlcmlhbCByZW1vdmVkIGZyb20geW91ciBmYXZvcml0ZXNcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExhbmd1YWdlcyhsYW5ndWFnZXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBsYW5ndWFnZXNTdHI6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGFuZ3VhZ2VzLmZvckVhY2gobCA9PiB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlc1N0ciArPSAgbCArIFwiLCBcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbGFuZ3VhZ2VzU3RyLnN1YnN0cmluZygwLCBsYW5ndWFnZXNTdHIubGVuZ3RoLTIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2Uub2xkVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaWV3VHlwZVNlbGVjdGVkKHZpZXdUeXBlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3VHlwZSA9PSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoRmF2b3JpdGVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmF2b3JpdGVzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhclNlYXJjaCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICB0aGlzLmZhdm9yaXRlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZhdm9yaXRlc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZmF2b3JpdGVzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVcmwoZmF2b3JpdGU6IElGYXZvcml0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGZhdm9yaXRlLm9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUxdKSB7XHJcbiAgICAgICAgICAgIGlmKCFmYXZvcml0ZS5hdmFpbGFibGUpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQWNjZXNzIHRvIHRoaXMgbWF0ZXJpYWwgaXMgcmVzdHJpY3RlZFwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsc1JvdXRlci53YXRjaFVybChmYXZvcml0ZS5vYmplY3RJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZhdm9yaXRlLm9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuUExBWUxJU1RdKSB7XHJcbiAgICAgICAgICAgIGlmKCFmYXZvcml0ZS5hdmFpbGFibGUpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiQWNjZXNzIHRvIHRoaXMgcGxheWxpc3QgaXMgcmVzdHJpY3RlZFwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsc1JvdXRlci5wbGF5bGlzdERldGFpbHNVcmwoZmF2b3JpdGUub2JqZWN0SWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmYXZvcml0ZS5vYmplY3RUeXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRV0pIHtcclxuICAgICAgICAgICAgaWYoIWZhdm9yaXRlLmF2YWlsYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJBY2Nlc3MgdG8gdGhpcyBjb3Vyc2UgaXMgcmVzdHJpY3RlZFwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZXNSb3V0ZXIuZGV0YWlsc1VybChmYXZvcml0ZS5vYmplY3RJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiL1wiO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGh9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTGVhcm5pbmdQYXRoc1JvdXRlclwiO1xyXG5pbXBvcnQge0lHcmlkTW9kZWwsIEdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1Jlc2l6ZVZpZXdTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvUmVzaXplVmlld1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRoUHJvZ3Jlc3N9IGZyb20gXCIuLi9sZWFybmluZ1BhdGhzL21vZGVscy9JTGVhcm5pbmdQYXRoUHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhTZXJ2aWNlfSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9MZWFybmluZ1BhdGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMZWFybmluZ1BhdGhzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInBlcnNvbmFsLkxlYXJuaW5nUGF0aHNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHVzZXJQcm9maWxlOiBJVXNlcjtcclxuICAgIHB1YmxpYyByZXNpemVWaWV3U2VydmljZTogUmVzaXplVmlld1NlcnZpY2U7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTGVhcm5pbmdQYXRoUHJvZ3Jlc3M+O1xyXG4gICAgcHVibGljIHZpZXdUeXBlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoczogTWFwPG51bWJlciwgSUxlYXJuaW5nUGF0aD4gPSBuZXcgTWFwPG51bWJlciwgSUxlYXJuaW5nUGF0aD4oKTtcclxuICAgIHB1YmxpYyBpc0xlYXJuaW5nUGF0aHNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgd2luZG93OiBhbnk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIExlYXJuaW5nUGF0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsZWFybmluZ1BhdGhTZXJ2aWNlOiBMZWFybmluZ1BhdGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfTEVBUk5JTkdfUEFUSFNfTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTXkgbGVhcm5pbmcgcGF0aHNcIikudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2UgPSBuZXcgUmVzaXplVmlld1NlcnZpY2UodGhpcy52aWV3VHlwZSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJHdpbmRvdyk7XHJcblxyXG4gICAgICAgIHRoaXMud2luZG93LmJpbmQoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMucmVzaXplVmlld1NlcnZpY2Uuc2V0UmVzaXplVmlld1R5cGUodGhpcy52aWV3VHlwZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3cudW5iaW5kKCdyZXNpemUnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUxlYXJuaW5nUGF0aFByb2dyZXNzPigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvbGVhcm5pbmdQYXRocy9zZWFyY2gvbXlQcm9ncmVzc2VzXCIpKSk7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgICAgIC8vIGRvIG5vdGhpbmdcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kTG9hZGluZygpIHtcclxuICAgICAgICBsZXQgbGVhcm5pbmdQYXRoSWRzID0gdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmVudHJpZXNcclxuICAgICAgICAgICAgLm1hcChsZWFybmluZ1BhdGhQcm9ncmVzcyA9PiBsZWFybmluZ1BhdGhQcm9ncmVzcy5sZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSwgcG9zLCBzZWxmKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRleE9mKGl0ZW0pID09IHBvcztcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoU2VydmljZS5nZXRNeUxlYXJuaW5nUGF0aHNCeUlkcyhsZWFybmluZ1BhdGhJZHMpXHJcbiAgICAgICAgICAgIC50aGVuKGxlYXJuaW5nUGF0aHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGVhcm5pbmdQYXRocy5mb3JFYWNoKGxlYXJuaW5nUGF0aCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzLnNldChsZWFybmluZ1BhdGguaWQsIGxlYXJuaW5nUGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xlYXJuaW5nUGF0aHNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZExlYXJuaW5nUGF0aChsZWFybmluZ1BhdGhJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubGVhcm5pbmdQYXRocy5nZXQobGVhcm5pbmdQYXRoSWQpLnBlcm1pc3Npb25zLnZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubGVhcm5pbmdQYXRoc1JvdXRlci5kZXRhaWxzVXJsKGxlYXJuaW5nUGF0aElkKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJZb3UgYXJlIG5vdCBncmFudGVkIHBlcm1pc3Npb24gdG8gdmlldyB0aGlzIGxlYXJuaW5nIHBhdGhcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1ID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHU7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLm9sZFZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlld1R5cGVTZWxlY3RlZCh2aWV3VHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1R5cGUgPT0gdmlld1R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlY29kZUxlYXJuaW5nUGF0aFByb2dyZXNzU3RhdHVzKHN0YXR1czogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSBcIk5PVF9TVEFSVEVEXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiTm90IHN0YXJ0ZWRcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJTVEFSVEVEXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiU3RhcnRlZFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkNPTVBMRVRFRFwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIkNvbXBsZXRlZFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkVYUElSRURcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJFeHBpcmVkXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiUkVTRVRcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJQZXJtaXNzaW9ucyByZXZva2VkXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7SVJld2FyZEJhZGdlc30gZnJvbSBcIi4uL2dhbWlmaWNhdGlvbi9tb2RlbHMvSVJld2FyZEJhZGdlc1wiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7UmljaFRleHRFZGl0b3JDb250cm9sbGVyfSBmcm9tIFwiLi4vY29tcG9uZW50cy9yaWNodGV4dC9SaWNoVGV4dEVkaXRvckRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0JhZGdlc1NlcnZpY2V9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vQmFkZ2VzU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SUJhZGdlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL21vZGVscy9JQmFkZ2VcIjtcclxuaW1wb3J0IHtQYWdlTW9kZX0gZnJvbSBcIi4uL1BhZ2VNb2RlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTXlCYWRnZXNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuTXlCYWRnZXNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHVzZXJQcm9maWxlOiBJVXNlcjtcclxuICAgIHB1YmxpYyByZXdhcmRCYWRnZXNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SVJld2FyZEJhZGdlcz47XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzaGFyZWRCYWRnZTogSVJld2FyZEJhZGdlcztcclxuICAgIHB1YmxpYyBzaGFyZWRVcmw6IHN0cmluZyA9ICcnO1xyXG4gICAgcHVibGljIHVybEZvckZhY2Vib29rOiBzdHJpbmcgPSAnJztcclxuICAgIHB1YmxpYyBhcGlBcHBsaWNhdGlvblVybDogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgZG9tYWluc01hcDogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHN1YmplY3Q6IHN0cmluZztcclxuICAgIHByaXZhdGUgYWRkcmVzczogc3RyaW5nXHJcbiAgICBwdWJsaWMgdG9vbGJhciA9XHJcbiAgICAgICAgW1tdLFsnYm9sZCcsICdpdGFsaWNzJywgJ3VuZGVybGluZScsICdzdHJpa2VUaHJvdWdoJywgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0ZPTlRfQ09MT1IsIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9CQUNLR1JPVU5EX0ZPTlRfQ09MT1JdLFxyXG4gICAgICAgICAgICBbJ3VsJywgJ29sJywgJ2luZGVudCcsICdvdXRkZW50JywgJ2p1c3RpZnlMZWZ0JywgJ2p1c3RpZnlDZW50ZXInLCAnanVzdGlmeVJpZ2h0JywgJ2p1c3RpZnlGdWxsJ10sXHJcbiAgICAgICAgICAgIFsnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAncCcsICdwcmUnLCAncXVvdGUnXSxbXSxcclxuICAgICAgICAgICAgWydyZWRvJywgJ3VuZG8nLCAnY2xlYXInLCBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfRlVMTFNDUkVFTl9CVVRUT04sICdodG1sJ11dO1xyXG4gICAgcHVibGljIGlzRW1haWxTZW5kaW5nSW5Qcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkcm91dGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiRzY2VcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTGVhcm5pbmdQYXRoc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQmFkZ2VzU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFueSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBuZy5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGU6IGFueSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJ1c2luZXNzVW5pdHNTZXJ2aWNlOiBCdXNpbmVzc1VuaXRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBiYWRnZXNTZXJ2aWNlOiBCYWRnZXNTZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX0JBREdFU19NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJNeSBiYWRnZXNcIikudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIGxldCB0bXBVcmwgPSBBcHBQcm9wZXJ0aWVzLnNlcnZpY2VSb290LnNwbGl0KCdcXC9cXC8nKVsxXS5zcGxpdCgnLicpO1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QWxsQnVEb21haW5zKCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRvbWFpbnNNYXAgPSByZXM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXBpQXBwbGljYXRpb25VcmwgPSAodG1wVXJsLmxlbmd0aCA9PSAzICYmIHRtcFVybFswXS5pbmRleE9mKCd2aHMtdGVzdCcpID09PSAtMSA/IHRtcFVybFt0bXBVcmwubGVuZ3RoIC0gMl0gKyAnLicgKyB0bXBVcmxbdG1wVXJsLmxlbmd0aCAtIDFdIDogdG1wVXJsLmpvaW4oJy4nKSkgKyAnYXBpLyc7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcbiAgICAgICAgdGhpcy5yZXdhcmRCYWRnZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJUmV3YXJkQmFkZ2VzPigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvYmFkZ2VzL3BlcnNvbmFsXCIpKSk7XHJcbiAgICAgICAgdGhpcy5yZXdhcmRCYWRnZXNHcmlkTW9kZWwucmVxdWVzdHNQYWdlTW9kZSA9IFBhZ2VNb2RlW1BhZ2VNb2RlLkVOVFJJRVNfQU5EX1RPVEFMXTtcclxuICAgICAgICB0aGlzLnNlYXJjaEtleVByZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dEZXRhaWxzKGlkOiBudW1iZXIsIGtleUNvZGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmKGtleUNvZGUgPT0gMTMgfHwgIWtleUNvZGUpIHtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdTtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IE51bWJlcih0aGlzLnVzZXJQcm9maWxlLnBhZ2VWaWV3TW9kZSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJQYWdlVmlld01vZGUoQm9vbGVhbih2aWV3VHlwZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVXNlclBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hLZXlQcmVzcygpIHtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCJwZXJzb25hbC5tYWluLnNlYXJjaFwiLChldmVudCwgc2VhcmNoSW5wdXQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXdhcmRCYWRnZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHNlYXJjaElucHV0O1xyXG4gICAgICAgICAgICB0aGlzLnJld2FyZEJhZGdlc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW1hZ2VGb3JCYWRnZShiYWRnZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGJhZGdlLmJhZGdlVHlwZSA9PSBcIkJBREdFXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW1hZ2VCYWRnZShiYWRnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFiYWRnZS5wcmV2aWV3VXJsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYHRoZW1lcy9kZWZhdWx0L2ltZy9hY3Rpb25CYWRnZXMvJHtiYWRnZS5iYWRnZUtleX0ucG5nYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYmFkZ2UucHJldmlld1VybDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEltYWdlQmFkZ2UoYmFkZ2U6IElCYWRnZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGJhZGdlKSB7XHJcbiAgICAgICAgICAgIGlmICghYmFkZ2UucHJldmlld1VybCAmJiBiYWRnZS5iYWRnZUtleSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGltYWdlTmFtZSA9IGJhZGdlLmJhZGdlTmFtZS5zcGxpdCgnICcpLmpvaW4oJycpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChiYWRnZS5iYWRnZUtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJDX0NNUExcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VOYW1lID0gXCJDb3Vyc2VGaW5pc2hlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiTFBfQ01QTFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU5hbWUgPSBcIkxlYXJuaW5nUGF0aEZpbmlzaGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB0aGVtZXMvZGVmYXVsdC9pbWcvYmFkZ2VzLyR7aW1hZ2VOYW1lfS5wbmdgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiYWRnZS5wcmV2aWV3VXJsID8gYmFkZ2UucHJldmlld1VybCA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCYWRnZVR5cGUoYmFkZ2UpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAoYmFkZ2UuYmFkZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWSVRZX0JBREdFJzogcmV0dXJuICdBY3Rpdml0eSBiYWRnZSc7XHJcbiAgICAgICAgICAgIGNhc2UgJ0JBREdFJzpcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFkZ2UuYmFkZ2VLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdDX0NNUEwnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJDb3Vyc2UgY29tcGxldGlvblwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xQX0NNUEwnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJMZWFybmluZyBwYXRoIGNvbXBsZXRpb25cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZlcmlmaWNhdGlvblBhZ2UoYmFkZ2U6IElSZXdhcmRCYWRnZXMpIHtcclxuICAgICAgICBsZXQgc3BsaXRlZFVybCA9IEFwcFByb3BlcnRpZXMuc2VydmljZVJvb3Quc3BsaXQoJ1xcL1xcLycpWzFdLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgbGV0IGRvbWFpbiA9IHNwbGl0ZWRVcmwubGVuZ3RoID09PSAzID8gc3BsaXRlZFVybFswXSArICcuJyA6ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLmRvbWFpbnNNYXAgJiYgYmFkZ2UuYnVzaW5lc3NVbml0SWQgJiYgdGhpcy5kb21haW5zTWFwW2JhZGdlLmJ1c2luZXNzVW5pdElkXSkge1xyXG4gICAgICAgICAgICBkb21haW4gPSB0aGlzLmRvbWFpbnNNYXBbYmFkZ2UuYnVzaW5lc3NVbml0SWRdICsgJy4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQXBwUHJvcGVydGllcy5zZXJ2aWNlUm9vdC5zcGxpdCgnXFwvXFwvJylbMF0gKyAnLy8nICsgZG9tYWluICsgKHRoaXMuYXBpQXBwbGljYXRpb25VcmwuaW5kZXhPZihcInZocy10ZXN0XCIpICE9PSAtMSAmJiBkb21haW4gPyB0aGlzLmFwaUFwcGxpY2F0aW9uVXJsLnJlcGxhY2Uoc3BsaXRlZFVybFswXSArICcuJywgJycpIDogdGhpcy5hcGlBcHBsaWNhdGlvblVybCkgKyBgdmVyaWZpY2F0aW9uL2JhZGdlLyR7YmFkZ2UudXVpZH1gO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3B5VmVyaWZpY2F0aW9uTGluayhiYWRnZTogSVJld2FyZEJhZGdlcykge1xyXG4gICAgICAgIGxldCB0ZXh0ID0gdGhpcy5nZXRWZXJpZmljYXRpb25QYWdlKGJhZGdlKVxyXG4gICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbSk7XHJcbiAgICAgICAgZWxlbS52YWx1ZSA9IFwiXCIgKyB0ZXh0O1xyXG4gICAgICAgIGVsZW0uc2VsZWN0KCk7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dTaGFyZURpYWxvZyhiYWRnZTogSVJld2FyZEJhZGdlcykge1xyXG4gICAgICAgIHRoaXMuc2hhcmVkQmFkZ2UgPSBiYWRnZTtcclxuICAgICAgICB0aGlzLnNoYXJlZFVybCA9IHRoaXMuZ2V0VmVyaWZpY2F0aW9uUGFnZShiYWRnZSk7XHJcbiAgICAgICAgdGhpcy51cmxGb3JGYWNlYm9vayA9IHRoaXMuJHNjZS50cnVzdEFzUmVzb3VyY2VVcmwoYGh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL3NoYXJlX2J1dHRvbi5waHA/aHJlZj0ke3RoaXMuc2hhcmVkVXJsICsgJz9sYXRlc3QnfSZsYXlvdXQ9YnV0dG9uJnNpemU9bGFyZ2Umd2lkdGg9NzcmaGVpZ2h0PTI4JmFwcElkYCk7XHJcbiAgICAgICAgJChcIi5tb2RhbC1ib2R5XCIpLmNzcyhcIm92ZXJmbG93LXlcIiwgXCJhdXRvXCIpO1xyXG4gICAgICAgICQoXCIjc2hhcmVEaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JlYXRpb25FbWFpbE1vZGFsKHZlcmlmaWNhdGlvblVybDogc3RyaW5nLCBiYWRnZUltYWdlVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNsZWFyRW1haWxGaWVsZHModmVyaWZpY2F0aW9uVXJsLCBiYWRnZUltYWdlVXJsKTtcclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNzaG93Q3JlYXRpb25FbWFpbERpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhckVtYWlsRmllbGRzKHZlcmlmaWNhdGlvblVybDogc3RyaW5nLCBiYWRnZUltYWdlVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXNzdWVkQnlUZXh0ID0geGhyLnJlc3BvbnNlWE1MLmhlYWQucXVlcnlTZWxlY3RvcihcIltwcm9wZXJ0eX49J29nOnRpdGxlJ11bY29udGVudF1cIikuY29udGVudDtcclxuICAgICAgICAgICAgbGV0IGJhZGdlSW1hZ2UgPSBiYWRnZUltYWdlVXJsLmluZGV4T2YoJ2h0dHAnKSAhPSAtMVxyXG4gICAgICAgICAgICAgICAgPyBiYWRnZUltYWdlVXJsXHJcbiAgICAgICAgICAgICAgICA6IGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3QgKyAobG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZihcImFwcC5odG1sXCIpICE9IC0xID8gbG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoXCJhcHAuaHRtbFwiKVswXSA6IGxvY2F0aW9uLnBhdGhuYW1lKSArIGJhZGdlSW1hZ2VVcmw7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN1YmplY3QgPSBgJHt0aGlzLnVzZXJQcm9maWxlLmZ1bGxOYW1lfSBpcyBzaGFyaW5nIHRoZWlyIG5ldyBlTGVhcm5pbmcgYWNoaWV2ZW1lbnRgO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBgJHt0aGlzLnVzZXJQcm9maWxlLmZ1bGxOYW1lfSBpcyBzaGFyaW5nIHRoZWlyIG5ldyBlTGVhcm5pbmcgYWNoaWV2ZW1lbnQgd2l0aCB5b3U8YnI+YFxyXG4gICAgICAgICAgICAgICAgKyBgPGltZyBzcmM9XCIke2JhZGdlSW1hZ2V9XCIgaGVpZ2h0PVwiMjAwXCI+PGJyPmBcclxuICAgICAgICAgICAgICAgICsgYCR7aXNzdWVkQnlUZXh0fTxicj5gXHJcbiAgICAgICAgICAgICAgICArIGA8YSBocmVmPVwiJHt2ZXJpZmljYXRpb25Vcmx9XCI+VmlldyBpdCBub3c8L2E+PGJyPmBcclxuICAgICAgICAgICAgICAgICsgXCJvciBjb3B5IGFuZCBwYXN0ZSB0aGlzIGxpbmsgaW4geW91ciBicm93c2VyPGJyPlwiXHJcbiAgICAgICAgICAgICAgICArIGA8YSBocmVmPVwiJHt2ZXJpZmljYXRpb25Vcmx9XCI+JHt2ZXJpZmljYXRpb25Vcmx9PC9hPmA7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCB0aGlzLnNoYXJlZFVybCk7XHJcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFwiZG9jdW1lbnRcIjtcclxuICAgICAgICB4aHIuc2VuZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xvc2VTZW5kTWFpbE1vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWRkcmVzcyA9IFwiXCI7XHJcbiAgICAgICAgJCgnI2luZm9GaWVsZCcpLmNvbGxhcHNlKCdoaWRlJyk7XHJcbiAgICAgICAgJChcIiNzaG93Q3JlYXRpb25FbWFpbERpYWxvZ1wiKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZW5kRW1haWxXaXRoQmFkZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0VtYWlsU2VuZGluZ0luUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYmFkZ2VzU2VydmljZS5zZW5kRW1haWxXaXRoQmFkZ2UodGhpcy5zaGFyZWRCYWRnZS51dWlkLCB0aGlzLm1lc3NhZ2UsIHRoaXMuc3ViamVjdCwgdGhpcy5hZGRyZXNzKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiRW1haWwgd2FzIHN1Y2Nlc3NmdWxseSBzZW50XCIpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gc2VuZCBhbiBlbWFpbFwiKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVNlbmRNYWlsTW9kYWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbWFpbFNlbmRpbmdJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNoYXJlRGlhbG9nKCkge1xyXG4gICAgICAgIHRoaXMuc2hhcmVkQmFkZ2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2hhcmVkVXJsID0gXCJcIjtcclxuICAgICAgICB0aGlzLnVybEZvckZhY2Vib29rID0gXCJcIjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0lPYmplY3RXaXRoQ29tbWVudHN9IGZyb20gXCIuL21vZGVscy9JT2JqZWN0V2l0aENvbW1lbnRzXCI7XHJcbmltcG9ydCB7UGVyc29uYWxTZXJ2aWNlfSBmcm9tIFwiLi9QZXJzb25hbFNlcnZpY2VcIjtcclxuXHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLy4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge09iamVjdFR5cGVVdGlsc30gZnJvbSBcIi4vLi4vdXRpbHMvT2JqZWN0VHlwZVV0aWxzXCI7XHJcbmltcG9ydCB7SUNvbW1lbnR9IGZyb20gXCIuLy4uL3NvY2lhbC9tb2RlbHMvSUNvbW1lbnRcIjtcclxuaW1wb3J0IHtNYXRlcmlhbHNSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvTWF0ZXJpYWxzUm91dGVyXCI7XHJcbmltcG9ydCB7TmV3c1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9OZXdzUm91dGVyXCI7XHJcbmltcG9ydCB7SUdyaWRNb2RlbCwgR3JpZE1vZGVsfSBmcm9tIFwiLi8uLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4vLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTdG9yYWdlcywgU3RvcmFnZVdyYXBwZXJ9IGZyb20gXCIuLi9pbmZyYXN0cnVjdHVyZS9TdG9yYWdlXCI7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIE5ld0NvbW1lbnRzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInBlcnNvbmFsLk5ld0NvbW1lbnRzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcbiAgICBwdWJsaWMgb2JqZWN0c1dpdGhDb21tZW50c0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJT2JqZWN0V2l0aENvbW1lbnRzPjtcclxuICAgIHB1YmxpYyByb3dTaG93OiBNYXA8bnVtYmVyLCBib29sZWFuPiA9IG5ldyBNYXA8bnVtYmVyLCBib29sZWFuPigpO1xyXG4gICAgcHVibGljIG9iamVjdENvbW1lbnRzOiBNYXA8bnVtYmVyLCBBcnJheTxJQ29tbWVudD4+ID0gbmV3IE1hcDxudW1iZXIsIEFycmF5PElDb21tZW50Pj4oKTtcclxuICAgIHB1YmxpYyBkaXNhYmxlR2V0Q29tbWVudHNCdXR0b246IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcnNvbmFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIE1hdGVyaWFsc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBOZXdzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG5ld3NSb3V0ZXI6IE5ld3NSb3V0ZXIpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfTkVXX0NPTU1FTlRTX01FTlVfS0VZKTtcclxuICAgICAgICAvLyBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIk5ldyBjb21tZW50c1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlR2V0Q29tbWVudHNCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vYmplY3RzV2l0aENvbW1lbnRzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SU9iamVjdFdpdGhDb21tZW50cz4oJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3BlcnNvbmFsL2NvbW1lbnRzL29iamVjdHNcIikpKTtcclxuICAgICAgICB0aGlzLm9iamVjdHNXaXRoQ29tbWVudHNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGUub2JqZWN0SWQsIGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0NvbW1lbnRzKG9iamVjdElkOiBudW1iZXIsIG9iamVjdFR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5yb3dTaG93LmdldChvYmplY3RJZCkgJiYgIXRoaXMuZGlzYWJsZUdldENvbW1lbnRzQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5vYmplY3RDb21tZW50cy5oYXMob2JqZWN0SWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVHZXRDb21tZW50c0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvbmFsU2VydmljZS5nZXRVc2VyQ29tbWVudHNGb3JPYmplY3Qob2JqZWN0SWQsIE9iamVjdFR5cGVVdGlscy5nZXRSZWZlcmVuY2VPYmplY3RUeXBlRnJvbVN0cmluZyhvYmplY3RUeXBlKSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0Q29tbWVudHMuc2V0KG9iamVjdElkLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQob2JqZWN0SWQsICF0aGlzLnJvd1Nob3cuZ2V0KG9iamVjdElkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlR2V0Q29tbWVudHNCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dTaG93LnNldChvYmplY3RJZCwgIXRoaXMucm93U2hvdy5nZXQob2JqZWN0SWQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE9iamVjdFJvdXRlKG9iamVjdDogSU9iamVjdFdpdGhDb21tZW50cykge1xyXG4gICAgICAgIGlmIChvYmplY3Quc291cmNlID09ICdDT1VSU0UgRElTQ1VTU0lPTicpIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RocmVhZElkJywgYCR7b2JqZWN0Lm9iamVjdElkfWApO1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5jb3Vyc2VzUm91dGVyLmRpc2N1c3Npb25Vcmwob2JqZWN0LmNvdXJzZUlkKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvYmplY3Qub2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5NQVRFUklBTF0pIHtcclxuICAgICAgICAgICAgaWYgKCFvYmplY3QuYXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkFjY2VzcyB0byB0aGUgbWF0ZXJpYWwgaXMgcmVzdHJpY3RlZFwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1hdGVyaWFsc1JvdXRlci53YXRjaFVybChvYmplY3Qub2JqZWN0SWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0Lm9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTkVXU10pIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubmV3c1JvdXRlci5vbmVOZXdzVXJsKG9iamVjdC5vYmplY3RJZCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0R2x5cGhpY29uQ2xhc3Mob2JqZWN0VHlwZTogc3RyaW5nLCBtYXRlcmlhbFR5cGVJZD86IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoIChvYmplY3RUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUxdOiByZXR1cm4gT2JqZWN0VHlwZVV0aWxzLmdldE1hdGVyaWFsR2x5cGhpY29uQ2xhc3MobWF0ZXJpYWxUeXBlSWQpO1xyXG4gICAgICAgICAgICBjYXNlIFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLk5FV1NdOiByZXR1cm4gT2JqZWN0VHlwZVV0aWxzLmdldE5ld3NHbHlwaGljb25DbGFzcygpO1xyXG4gICAgICAgICAgICBjYXNlICdDT1VSU0UgRElTQ1VTU0lPTic6IHJldHVybiBPYmplY3RUeXBlVXRpbHMuZ2V0TmV3c0dseXBoaWNvbkNsYXNzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUeXBlVGl0bGUob2JqZWN0VHlwZTogc3RyaW5nLCBtYXRlcmlhbFR5cGVJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5NQVRFUklBTF06IHJldHVybiBPYmplY3RUeXBlVXRpbHMuZ2V0TWF0ZXJpYWxUeXBlVGl0bGUobWF0ZXJpYWxUeXBlSWQpO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gT2JqZWN0VHlwZVV0aWxzLmdldFJlZmVyZW5jZU9iamVjdFR5cGVUaXRsZShvYmplY3RUeXBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE9iamVjdFJvdXRlRm9yQ29tbWVudChvYmplY3Q6SU9iamVjdFdpdGhDb21tZW50cywgY29tbWVudElkOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAob2JqZWN0LnBlcm1pc3Npb25zLnZpZXcpIHtcclxuICAgICAgICAgICAgaWYgKG9iamVjdC5vYmplY3RUeXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLk1BVEVSSUFMXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLndhdGNoVXJsKG9iamVjdC5vYmplY3RJZCkpLmhhc2goXCJjb21tZW50XCIgKyBjb21tZW50SWQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC5vYmplY3RUeXBlID09IFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLk5FV1NdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5uZXdzUm91dGVyLm9uZU5ld3NVcmwob2JqZWN0Lm9iamVjdElkKSkuaGFzaChcImNvbW1lbnRcIiArIGNvbW1lbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJzb25hbFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvUGVyc29uYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb21tb25GaWx0ZXJTZXJ2aWNlfSBmcm9tIFwiLi4vY29tbW9uL0NvbW1vbkZpbHRlclNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQZXJzb25hbE1haW5Db250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuUGVyc29uYWxNYWluQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBwYWdlTmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHNob3dDcmVhdGVFZGl0QXZhdGFyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2hvd1NlYXJjaElucHV0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRQYWdlSW5kZXggPSAwO1xyXG4gICAgcHVibGljIGN1cnJlbnRQYWdlSW5kZXhJbnRlcnZhbDtcclxuICAgIHByaXZhdGUgcGVyc29uYWxNZW51O1xyXG5cclxuICAgIHB1YmxpYyBwcmV2aWV3O1xyXG4gICAgcHVibGljIGlzUmVzZXRQcmV2aWV3OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbnksXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZTogYW55LFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnBlcnNvbmFsTWVudSA9ICRzY29wZS5tZW51Vk07XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuICAgICAgICB0aGlzLmNoYW5nZVJvdXRlRXZlbnQoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRQYWdlSW5kZXgoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hLZXlQcmVzcygpIHtcclxuICAgICAgICB0aGlzLiRzY29wZS4kYnJvYWRjYXN0KFwicGVyc29uYWwubWFpbi5zZWFyY2hcIiwgdGhpcy5zZWFyY2hJbnB1dClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuY2xvc2VTZWFyY2hJbnB1dChQZXJzb25hbE1haW5Db250cm9sbGVyLk5BTUUsIHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRicm9hZGNhc3QoXCJwZXJzb25hbC5tYWluLnNlYXJjaFwiLCB0aGlzLnNlYXJjaElucHV0KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlUm91dGVFdmVudCgpIHtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oJ3BlcnNvbmFsLmNoYW5nZS5yb3V0ZScsKGV2ZW50LCBwYWdlTmFtZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvdXRlKHBhZ2VOYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGVtcGxhdGVGb3JQYXRoKCkge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy4kbG9jYXRpb24ucGF0aCgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUGVyc29uYWxSb3V0ZXIuY2VydGlmaWNhdGVzUm91dGU6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaElucHV0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVybC50ZW1wbGF0ZShcInBlcnNvbmFsL2NlcnRpZmljYXRlcy5odG1sXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgUGVyc29uYWxSb3V0ZXIuY3JlZGl0c1JvdXRlOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cmwudGVtcGxhdGUoXCJwZXJzb25hbC9jcmVkaXRzLmh0bWxcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBQZXJzb25hbFJvdXRlci5wdXJjaGFzZWRPcmRlcnNSb3V0ZToge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoSW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXJsLnRlbXBsYXRlKFwicGVyc29uYWwvcHVyY2hhc2VkT3JkZXJzLmh0bWxcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBQZXJzb25hbFJvdXRlci5zdWJzY3JpcHRpb25zUm91dGU6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVybC50ZW1wbGF0ZShcInBlcnNvbmFsL3N1YnNjcmlwdGlvbnMuaHRtbFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFBlcnNvbmFsUm91dGVyLmJhZGdlc1JvdXRlOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cmwudGVtcGxhdGUoXCJwZXJzb25hbC9teUJhZGdlcy5odG1sXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgUGVyc29uYWxSb3V0ZXIubmV3Q29tbWVudHNSb3V0ZToge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXJsLnRlbXBsYXRlKFwicGVyc29uYWwvbmV3Q29tbWVudHMuaHRtbFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFBlcnNvbmFsUm91dGVyLnNldHRpbmdzUm91dGU6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZUVkaXRBdmF0YXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXJsLnRlbXBsYXRlKFwicGVyc29uYWwvc2V0dGluZ3MuaHRtbFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFBlcnNvbmFsUm91dGVyLnN1cHBvcnRSb3V0ZToge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXJsLnRlbXBsYXRlKFwicGVyc29uYWwvc3VwcG9ydC5odG1sXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVybC50ZW1wbGF0ZShcInBlcnNvbmFsL3NldHRpbmdzLmh0bWxcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVBhdGhGb3JQZXJzb25hbCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5wZXJzb25hbE1lbnUucGFyZW50TWFwLmdldCh0aGlzLnBlcnNvbmFsTWVudS5jdXJyZW50TWVudUl0ZW1LZXkpLml0ZW1zW3RoaXMuY3VycmVudFBhZ2VJbmRleF1cclxuICAgICAgICB0aGlzLnBlcnNvbmFsTWVudS5jdXJyZW50TWVudUdyb3VwS2V5ID0gaXRlbS5rZXk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhdGggPSBpdGVtLnVybC5zdWJzdHJpbmcoMSwgaXRlbS51cmwubGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVJvdXRlKHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlUm91dGUocGFnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2hvd0NyZWF0ZUVkaXRBdmF0YXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTZWFyY2hJbnB1dCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnBhdGgocGFnZU5hbWUsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnBhZ2VOYW1lID0gcGFnZU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUN1cnJlbnRQYWdlSW5kZXgoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBlcnNvbmFsTWVudSA9IHRoaXMucGVyc29uYWxNZW51LnBhcmVudE1hcC5nZXQodGhpcy5wZXJzb25hbE1lbnUuY3VycmVudE1lbnVJdGVtS2V5KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5wZXJzb25hbE1lbnUgfHwgIXBlcnNvbmFsTWVudSB8fCAoISFwZXJzb25hbE1lbnUgJiYgIXBlcnNvbmFsTWVudS5pdGVtcykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhcnJheSA9IHBlcnNvbmFsTWVudS5pdGVtc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25hbE1lbnUuY3VycmVudE1lbnVJdGVtS2V5ID09IGFycmF5W2ldLmtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmN1cnJlbnRQYWdlSW5kZXhJbnRlcnZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7UGVyc29uYWxTZXJ2aWNlfSBmcm9tIFwiLi9QZXJzb25hbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtGYXZvcml0ZXNDb250cm9sbGVyfSBmcm9tIFwiLi9GYXZvcml0ZXNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7VXBsb2Fkc0NvbnRyb2xsZXJ9IGZyb20gXCIuL1VwbG9hZHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7Q291cnNlc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0NvdXJzZXNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0xlYXJuaW5nUGF0aHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7Q2VydGlmaWNhdGVzQ29udHJvbGxlcn0gZnJvbSBcIi4vQ2VydGlmaWNhdGVzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge1F1aXp6ZXNDb250cm9sbGVyfSBmcm9tIFwiLi9RdWl6emVzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge1BsYXlsaXN0c0NvbnRyb2xsZXJ9IGZyb20gXCIuL1BsYXlsaXN0c0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb25zQ29udHJvbGxlcn0gZnJvbSBcIi4vU3Vic2NyaXB0aW9uc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtOZXdDb21tZW50c0NvbnRyb2xsZXJ9IGZyb20gXCIuL05ld0NvbW1lbnRzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge1N1cHBvcnRDb250cm9sbGVyfSBmcm9tIFwiLi9TdXBwb3J0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NvdXBvbnNDb250cm9sbGVyfSBmcm9tIFwiLi9Db3Vwb25zQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge1NldHRpbmdzQ29udHJvbGxlcn0gZnJvbSBcIi4vU2V0dGluZ3NDb250cm9sbGVyXCI7XHJcblxyXG5pbXBvcnQge1NlY3VyaXR5TW9kdWxlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi4vdXJscy9VcmxzTW9kdWxlXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NNb2R1bGV9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5nc01vZHVsZVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZU1vZHVsZX0gZnJvbSBcIi4uL3JlZmVyZW5jZS9SZWZlcmVuY2VNb2R1bGVcIjtcclxuaW1wb3J0IHtVc2Vyc01vZHVsZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJzTW9kdWxlXCI7XHJcbmltcG9ydCB7RXhwaXJlZENvdXJzZXNDb250cm9sbGVyfSBmcm9tIFwiLi9FeHBpcmVkQ291cnNlc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtFeHBpcmVkTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXJ9IGZyb20gXCIuL0V4cGlyZWRMZWFybmluZ1BhdGhzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge1F1aXpEZXRhaWxzQ29udHJvbGxlcn0gZnJvbSBcIi4vUXVpekRldGFpbHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7UHVyY2hhc2VkT3JkZXJzQ29udHJvbGxlcn0gZnJvbSBcIi4vUHVyY2hhc2VkT3JkZXJzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NyZWRpdHNDb250cm9sbGVyfSBmcm9tIFwiLi9DcmVkaXRzQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0NhbGVuZGFyQ29udHJvbGxlcn0gZnJvbSBcIi4vQ2FsZW5kYXJDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7UGVyc29uYWxNYWluQ29udHJvbGxlcn0gZnJvbSBcIi4vUGVyc29uYWxNYWluQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge015QmFkZ2VzQ29udHJvbGxlcn0gZnJvbSBcIi4vTXlCYWRnZXNDb250cm9sbGVyXCI7XHJcblxyXG5leHBvcnQgdmFyIFBlcnNvbmFsTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwicGVyc29uYWxcIiwgW1xyXG4gICAgICAgIFNlY3VyaXR5TW9kdWxlLm5hbWUsXHJcbiAgICAgICAgVXJsc01vZHVsZS5uYW1lLFxyXG4gICAgICAgIFNldHRpbmdzTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgUmVmZXJlbmNlTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgVXNlcnNNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKFBlcnNvbmFsU2VydmljZS5OQU1FLCBQZXJzb25hbFNlcnZpY2UpXHJcbiAgICAuY29udHJvbGxlcihGYXZvcml0ZXNDb250cm9sbGVyLk5BTUUsIEZhdm9yaXRlc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihVcGxvYWRzQ29udHJvbGxlci5OQU1FLCBVcGxvYWRzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKENvdXJzZXNDb250cm9sbGVyLk5BTUUsIENvdXJzZXNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSwgTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihDZXJ0aWZpY2F0ZXNDb250cm9sbGVyLk5BTUUsIENlcnRpZmljYXRlc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihRdWl6emVzQ29udHJvbGxlci5OQU1FLCBRdWl6emVzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKFF1aXpEZXRhaWxzQ29udHJvbGxlci5OQU1FLCBRdWl6RGV0YWlsc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihQbGF5bGlzdHNDb250cm9sbGVyLk5BTUUsIFBsYXlsaXN0c0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihOZXdDb21tZW50c0NvbnRyb2xsZXIuTkFNRSwgTmV3Q29tbWVudHNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoU3Vic2NyaXB0aW9uc0NvbnRyb2xsZXIuTkFNRSwgU3Vic2NyaXB0aW9uc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihTdXBwb3J0Q29udHJvbGxlci5OQU1FLCBTdXBwb3J0Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKENvdXBvbnNDb250cm9sbGVyLk5BTUUsIENvdXBvbnNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoU2V0dGluZ3NDb250cm9sbGVyLk5BTUUsIFNldHRpbmdzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEV4cGlyZWRDb3Vyc2VzQ29udHJvbGxlci5OQU1FLCBFeHBpcmVkQ291cnNlc0NvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihFeHBpcmVkTGVhcm5pbmdQYXRoc0NvbnRyb2xsZXIuTkFNRSwgRXhwaXJlZExlYXJuaW5nUGF0aHNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoUHVyY2hhc2VkT3JkZXJzQ29udHJvbGxlci5OQU1FLCBQdXJjaGFzZWRPcmRlcnNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoTXlCYWRnZXNDb250cm9sbGVyLk5BTUUsIE15QmFkZ2VzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKENyZWRpdHNDb250cm9sbGVyLk5BTUUsIENyZWRpdHNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoQ2FsZW5kYXJDb250cm9sbGVyLk5BTUUsIENhbGVuZGFyQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKFBlcnNvbmFsTWFpbkNvbnRyb2xsZXIuTkFNRSwgUGVyc29uYWxNYWluQ29udHJvbGxlcik7XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lDb21tZW50fSBmcm9tIFwiLi8uLi9zb2NpYWwvbW9kZWxzL0lDb21tZW50XCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlZE9iamVjdFR5cGV9IGZyb20gXCIuLy4uL1JlZmVyZW5jZWRPYmplY3RUeXBlXCI7XHJcbmltcG9ydCB7SUNhbGVuZGFyRXZlbnR9IGZyb20gXCIuL21vZGVscy9JQ2FsZW5kYXJFdmVudFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBlcnNvbmFsU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInBlcnNvbmFsLlBlcnNvbmFsU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkVG9GYXZvcml0ZXMob2JqZWN0SWQ6IG51bWJlciwgb2JqZWN0VmVyc2lvbjogbnVtYmVyLCBvYmplY3RUeXBlOiBSZWZlcmVuY2VkT2JqZWN0VHlwZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvcGVyc29uYWwvZmF2b3JpdGVzP29iamVjdElkPTpvYmplY3RJZCZvYmplY3RWZXJzaW9uPTpvYmplY3RWZXJzaW9uJm9iamVjdFR5cGU9Om9iamVjdFR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdElkXCIsIG9iamVjdElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0VmVyc2lvblwiLCBvYmplY3RWZXJzaW9uKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0VHlwZVwiLCBSZWZlcmVuY2VkT2JqZWN0VHlwZVtvYmplY3RUeXBlXSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlRnJvbUZhdm9yaXRlcyhvYmplY3RJZDogbnVtYmVyLCBvYmplY3RWZXJzaW9uOiBudW1iZXIsIG9iamVjdFR5cGU6IFJlZmVyZW5jZWRPYmplY3RUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3BlcnNvbmFsL2Zhdm9yaXRlc1wiKSwge1xyXG4gICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgIG9iamVjdElkOiBvYmplY3RJZCxcclxuICAgICAgICAgICAgICAgIG9iamVjdFZlcnNpb246IG9iamVjdFZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBvYmplY3RUeXBlOiBSZWZlcmVuY2VkT2JqZWN0VHlwZVtvYmplY3RUeXBlXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVc2VyQ29tbWVudHNGb3JPYmplY3Qob2JqZWN0SWQ6IG51bWJlciwgb2JqZWN0VHlwZTogUmVmZXJlbmNlZE9iamVjdFR5cGUpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElDb21tZW50Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wZXJzb25hbC9jb21tZW50cz9vYmplY3RJZD06b2JqZWN0SWQmb2JqZWN0VHlwZT06b2JqZWN0VHlwZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0SWRcIiwgb2JqZWN0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvYmplY3RUeXBlXCIsIFJlZmVyZW5jZWRPYmplY3RUeXBlW29iamVjdFR5cGVdKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VBdXRob3JTdWJzY3JpcHRpb24oYXV0aG9ySWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvcGVyc29uYWwvc3Vic2NyaWJlL2F1dGhvcj9hdXRob3JJZD06YXV0aG9ySWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmF1dGhvcklkXCIsIGF1dGhvcklkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VOZXdzU3Vic2NyaXB0aW9uKG5ld3NUeXBlOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3BlcnNvbmFsL3N1YnNjcmliZS9uZXdzXCIpLCBKU09OLnN0cmluZ2lmeShuZXdzVHlwZSkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRTdWJzY3JpcHRpb25zKCk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3BlcnNvbmFsL3N1YnNjcmlwdGlvbnNcIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVN1YnNjcmlwdGlvbnMoc3Vic2NyaXB0aW9uczogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9wZXJzb25hbC9zdWJzY3JpYmUvYWxsXCIpLCBzdWJzY3JpcHRpb25zKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZW5kTWVzc2FnZVRvU3VwcG9ydChtZXNzYWdlVG9TdXBwb3J0OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3BlcnNvbmFsL3N1cHBvcnRcIiksIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VUb1N1cHBvcnQpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb3dubG9hZENlcnRpZmljYXRlKGNlcnRpZmljYXRlSWQ6IG51bWJlcik6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcGVyc29uYWwvY2VydGlmaWNhdGVzLzppZC9kb3dubG9hZFRva2VuXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgY2VydGlmaWNhdGVJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICApLnRoZW4oKHJlc3VsdDogYW55KSA9PiB0aGlzLnVybC5iYXNlKFwiL2FwaS9wZXJzb25hbC9jZXJ0aWZpY2F0ZXMvZG93bmxvYWQvOnRva2VuXCIpLnBhcmFtKFwiOnRva2VuXCIsIHJlc3VsdC5kYXRhLnRva2VuKS5zZXJ2aWNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDYWxlbmRhckV2ZW50cygpOiBuZy5JUHJvbWlzZTxBcnJheTxJQ2FsZW5kYXJFdmVudD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3BlcnNvbmFsL2NhbGVuZGFyL2V2ZW50c1wiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1BlcnNvbmFsU2VydmljZX0gZnJvbSBcIi4vUGVyc29uYWxTZXJ2aWNlXCI7XHJcblxyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi8uLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVBsYXlsaXN0fSBmcm9tIFwiLi8uLi9tYXRlcmlhbHMvbW9kZWxzL0lQbGF5bGlzdFwiO1xyXG5pbXBvcnQge01hdGVyaWFsc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJR3JpZE1vZGVsLCBHcmlkTW9kZWx9IGZyb20gXCIuLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4vLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi8uLi9SZWZlcmVuY2VkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1Jlc2l6ZVZpZXdTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvUmVzaXplVmlld1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQbGF5bGlzdHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuUGxheWxpc3RzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXI7XHJcbiAgICBwdWJsaWMgcGxheWxpc3RzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElQbGF5bGlzdD47XHJcbiAgICBwdWJsaWMgcm93U2hvdzogTWFwPG51bWJlciwgYm9vbGVhbj4gPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIHBsYXlsaXN0Vmlld1R5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyByZXNpemVWaWV3U2VydmljZTogUmVzaXplVmlld1NlcnZpY2U7XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcnNvbmFsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIE1hdGVyaWFsc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX1BMQVlMSVNUU19NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJNeSBwbGF5bGlzdHNcIikudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMucGxheWxpc3RWaWV3VHlwZSA9IDE7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZSA9IG5ldyBSZXNpemVWaWV3U2VydmljZSh0aGlzLnZpZXdUeXBlKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cgPSBhbmd1bGFyLmVsZW1lbnQodGhpcy4kd2luZG93KTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvdy51bmJpbmQoJ3Jlc2l6ZScpO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMucGxheWxpc3RzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVBsYXlsaXN0PigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvcGxheWxpc3RzL3Byb2ZpbGVQbGF5bGlzdHNcIikpKTtcclxuICAgICAgICB0aGlzLnBsYXlsaXN0c0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoZS5pZCwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhpbmRleDogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZihrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaW5kZXgsICF0aGlzLnJvd1Nob3cuZ2V0KGluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkUGxheWxpc3QocGxheWxpc3RJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMubWF0ZXJpYWxzUm91dGVyLnBsYXlsaXN0RGV0YWlsc1VybChwbGF5bGlzdElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFBsYXlsaXN0Vmlld1R5cGUodmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGxheWxpc3RWaWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoR3JpZE1vZGVsT2JqZWN0cyh0aGlzLnBsYXlsaXN0c0dyaWRNb2RlbCwgdGhpcy5wbGF5bGlzdFZpZXdUeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkUGxheWxpc3RUb0Zhdm9yaXRlcyhwbGF5bGlzdDogSVBsYXlsaXN0KSB7XHJcbiAgICAgICAgdGhpcy5hZGRUb0Zhdm9yaXRlcyhwbGF5bGlzdC5pZCwgcGxheWxpc3QudmVyc2lvbiwgUmVmZXJlbmNlZE9iamVjdFR5cGUuUExBWUxJU1QpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBwbGF5bGlzdCBoYXMgYmVlbiBhZGRlZCB0byB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgcGxheWxpc3QuZmF2b3JpdGUgPSB0cnVlO1xyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9iamVjdC5hbHJlYWR5LmluLmZhdm9yaXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhpcyBwbGF5bGlzdCBpcyBhbHJlYWR5IGluIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmlzLmNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYW5vdGhlciB1c2VyOiBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVBsYXlsaXN0RnJvbUZhdm9yaXRlcyhwbGF5bGlzdDogSVBsYXlsaXN0KSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tRmF2b3JpdGVzKHBsYXlsaXN0LmlkLCBwbGF5bGlzdC52ZXJzaW9uLCBSZWZlcmVuY2VkT2JqZWN0VHlwZS5QTEFZTElTVCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIHBsYXlsaXN0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB5b3VyIGZhdm9yaXRlc1wiKTtcclxuICAgICAgICAgICAgcGxheWxpc3QuZmF2b3JpdGUgPSBmYWxzZTtcclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJvYmplY3Qubm90LmluLmZhdm9yaXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHJlbW92ZSBmcm9tIHlvdXIgZmF2b3JpdGVzXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib2JqZWN0LmlzLmNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJUaGlzIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYW5vdGhlciB1c2VyOiBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExhbmd1YWdlcyhsYW5ndWFnZXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBsYW5ndWFnZXNTdHI6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGFuZ3VhZ2VzLmZvckVhY2gobCA9PiB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlc1N0ciArPSAgbCArIFwiLCBcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbGFuZ3VhZ2VzU3RyLnN1YnN0cmluZygwLCBsYW5ndWFnZXNTdHIubGVuZ3RoLTIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2VhcmNoR3JpZE1vZGVsT2JqZWN0cyhncmlkTW9kZWw6IElHcmlkTW9kZWw8YW55Piwgdmlld1R5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGdyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICBncmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRUb0Zhdm9yaXRlcyhpZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHR5cGU6IFJlZmVyZW5jZWRPYmplY3RUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5yb3dTaG93LnNldChpZCwgIXRoaXMucm93U2hvdy5nZXQoaWQpKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJzb25hbFNlcnZpY2UuYWRkVG9GYXZvcml0ZXMoaWQsIHZlcnNpb24sIHR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlRnJvbUZhdm9yaXRlcyhpZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHR5cGU6IFJlZmVyZW5jZWRPYmplY3RUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5yb3dTaG93LnNldChpZCwgIXRoaXMucm93U2hvdy5nZXQoaWQpKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJzb25hbFNlcnZpY2UucmVtb3ZlRnJvbUZhdm9yaXRlcyhpZCwgdmVyc2lvbiwgdHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2Uub2xkVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaWV3VHlwZVNlbGVjdGVkKHZpZXdUeXBlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3VHlwZSA9PSB2aWV3VHlwZTtcclxuICAgIH1cclxufSIsImltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SVB1cmNoYXNlZE9yZGVyfSBmcm9tIFwiLi4vZmluYW5jZXMvbW9kZWxzL0lQdXJjaGFzZWRPcmRlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0ZpbmFuY2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9GaW5hbmNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge1BlcnNvbmFsTWFpbkNvbnRyb2xsZXJ9IGZyb20gXCIuL1BlcnNvbmFsTWFpbkNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtQYXlQYWxTZXJ2aWNlfSBmcm9tIFwiLi4vaW50ZWdyYXRpb24vcGF5cGFsL1BheVBhbFNlcnZpY2VcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwiLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7SVdpbmRvd1NlcnZpY2V9IGZyb20gXCJhbmd1bGFyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUHVyY2hhc2VkT3JkZXJzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInBlcnNvbmFsLlB1cmNoYXNlZE9yZGVyc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG4gICAgcHVibGljIHB1cmNoYXNlZE9yZGVyc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJUHVyY2hhc2VkT3JkZXI+O1xyXG4gICAgcHVibGljIGRpc2FibGVkQ2FuY2VsQnV0dG9uOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBGaW5hbmNlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQYXlQYWxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBJV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbmNlc1JvdXRlcjogRmluYW5jZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnJhbmRpbmdTZXJ2aWNlOiBDdXN0b21CcmFuZGluZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY29tbW9uRmlsdGVyU2VydmljZTogQ29tbW9uRmlsdGVyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBwYXlQYWxTZXJ2aWNlOiBQYXlQYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5QRVJTT05BTF9QVVJDSEFTRURfT1JERVJTX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIk15IHB1cmNoYXNlc1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuICAgICAgICB0aGlzLnB1cmNoYXNlZE9yZGVyc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElQdXJjaGFzZWRPcmRlcj4oJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2ZpbmFuY2UvcHVyY2hhc2VkUHJvZHVjdHNcIikpKTtcclxuICAgICAgICB0aGlzLnB1cmNoYXNlZE9yZGVyc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEyO1xyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaEtleVByZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hLZXlQcmVzcygpIHtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCJwZXJzb25hbC5tYWluLnNlYXJjaFwiLChldmVudCwgc2VhcmNoSW5wdXQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnNhdmVTZWFyY2hJbnB1dChQZXJzb25hbE1haW5Db250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgICAgICB0aGlzLnB1cmNoYXNlZE9yZGVyc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgICAgIHRoaXMucHVyY2hhc2VkT3JkZXJzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxTdWJzY3JpcHRpb24ocHVyY2hhc2VPcmRlcklkOiBudW1iZXIsIGV4cGlyYXRpb25EYXRlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgZGlhbG9nTWVzc2FnZSA9IFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHlvdXIgc3Vic2NyaXB0aW9uPyBTdWJzY3JpcHRpb24gYWNjZXNzIHdpbGwgYmUgdmFsaWQgdW50aWwgOmV4cGlyYXRpb25EYXRlXCIpXHJcbiAgICAgICAgICAgIC53aXRoKFwiOmV4cGlyYXRpb25EYXRlXCIsIG1vbWVudChleHBpcmF0aW9uRGF0ZSkuZm9ybWF0KE1vbWVudC5ERUZBVUxUX0ZPUk1BVCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJDYW5jZWwgc3Vic2NyaXB0aW9uXCIsXHJcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiWWVzXCIsXHJcbiAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShkaWFsb2dNZXNzYWdlLCBvcHRpb25zKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wYXlQYWxTZXJ2aWNlLmNhbmNlbFN1YnNjcmlwdGlvbihwdXJjaGFzZU9yZGVySWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXJjaGFzZWRPcmRlcnNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlN1YnNjcmlwdGlvbiBjYW5jZWxlZCBzdWNjZXNzZnVsbHlcIilcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5lcnJvciAmJiByZXNwb25zZS5kYXRhLmVycm9yID09ICdlcnJvci4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiUGF5UGFsIHN1YnNjcmlwdGlvbiBjYW5jZWwgZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZENhbmNlbEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFeHBpcmF0aW9uRGF0ZUZvclN1YnNjcmlwdGlvbihwdXJjaGFzZU9yZGVyOiBJUHVyY2hhc2VkT3JkZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkQ2FuY2VsQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBheVBhbFNlcnZpY2UuZ2V0RXhwaXJhdGlvbkRhdGVGb3JTdWJzY3JpcHRpb24ocHVyY2hhc2VPcmRlci5zdWJzY3JpcHRpb25JZClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxTdWJzY3JpcHRpb24ocHVyY2hhc2VPcmRlci5pZCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJUaGUgb3BlcmF0aW9uIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlIG1vbWVudCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlclwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ2FuY2VsIHN1YnNjcmlwdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZENhbmNlbEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZXhwb3J0VG9QZGYocHVyY2hhc2VPcmRlcklkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGFyYW1ldGVyczogYW55ID0ge1xyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlclByb2ZpbGUuaWQsXHJcbiAgICAgICAgICAgIHB1cmNoYXNlT3JkZXJJZDogcHVyY2hhc2VPcmRlcklkXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnBheVBhbFNlcnZpY2UuZ2V0UHVyY2hhc2VkT3JkZXJzUmVwb3J0KHBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIC50aGVuKGRvd25sb2FkVXJsID0+IHRoaXMuJHdpbmRvdy5vcGVuKGRvd25sb2FkVXJsKSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLy4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJzb25hbFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvUGVyc29uYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1F1aXp6ZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1F1aXp6ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtRdWl6U2VydmljZX0gZnJvbSBcIi4uL3F1aXp6ZXMvUXVpelNlcnZpY2VcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge0lRdWl6UXVlc3Rpb259IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpelF1ZXN0aW9uXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVpekRldGFpbHNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuUXVpekRldGFpbHNDb250cm9sbGVyXCI7XHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUXVpelNlcnZpY2UuTkFNRSxcclxuICAgICAgICBRdWl6emVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUGVyc29uYWxSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuICAgIHByaXZhdGUgcmVkaXJlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBxdWl6UmVzdWx0SWQ6IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgcXVpek5hbWU6IHN0cmluZyA9ICcnO1xyXG4gICAgcHVibGljIHF1aXpRdWVzdGlvbnM6IElRdWl6UXVlc3Rpb25bXSA9IFtdO1xyXG4gICAgcHVibGljIHNob3dRdWl6RGV0YWlsc0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCAkcm91dGVQYXJhbXM6IG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcXVpelNlcnZpY2U6IFF1aXpTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHF1aXp6ZXNSb3V0ZXI6IFF1aXp6ZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcGVyc29uYWxSb3V0ZXI6IFBlcnNvbmFsUm91dGVyKSB7XHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfUVVJWlpFU19NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJNeSBxdWl6emVzIC8gc3VydmV5c1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuICAgICAgICB0aGlzLnF1aXpSZXN1bHRJZCA9IHRoaXMuJHJvdXRlUGFyYW1zW1BlcnNvbmFsUm91dGVyLlFVSVpfUkVTVUxUX0lEX1BBUkFNXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1O1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9CYWNrKCk6IHN0cmluZyB7XHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdGVkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucGVyc29uYWxSb3V0ZXIucXVpenplc1VybCgpKS5hYnNVcmwoKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtRdWl6U2VydmljZX0gZnJvbSBcIi4uL3F1aXp6ZXMvUXVpelNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUXVpen0gZnJvbSBcIi4uL3F1aXp6ZXMvbW9kZWxzL0lRdWl6XCI7XHJcbmltcG9ydCB7SVF1aXpSZXN1bHR9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9JUXVpelJlc3VsdFwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UXVpenplc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvUXVpenplc1JvdXRlclwiO1xyXG5pbXBvcnQge0lHcmlkTW9kZWwsIEdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSBcIi4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1BlcnNvbmFsUm91dGVyfSBmcm9tIFwiLi4vdXJscy9QZXJzb25hbFJvdXRlclwiO1xyXG5pbXBvcnQge1F1aXpSZXN1bHRTdGF0dXN9IGZyb20gXCIuLi9xdWl6emVzL21vZGVscy9RdWl6UmVzdWx0U3RhdHVzXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVzaXplVmlld1NlcnZpY2V9IGZyb20gXCIuLi91dGlscy9SZXNpemVWaWV3U2VydmljZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1aXp6ZXNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuUXVpenplc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG4gICAgcHVibGljIGNyZWF0ZWRRdWl6emVzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElRdWl6PjtcclxuICAgIHB1YmxpYyBwYXNzZWRRdWl6emVzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElRdWl6UmVzdWx0PjtcclxuICAgIHB1YmxpYyByb3dTaG93OiBNYXA8bnVtYmVyLCBib29sZWFuPiA9IG5ldyBNYXA8bnVtYmVyLCBib29sZWFuPigpO1xyXG4gICAgcHVibGljIHF1aXpSZXN1bHRzOiBNYXA8bnVtYmVyLCBBcnJheTxJUXVpelJlc3VsdD4+ID0gbmV3IE1hcDxudW1iZXIsIEFycmF5PElRdWl6UmVzdWx0Pj4oKTtcclxuICAgIHB1YmxpYyB2aWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIHF1aXpWaWV3VHlwZTogbnVtYmVyO1xyXG4gICAgcHVibGljIGhhc0NyZWF0ZWRRdWl6emVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGlzYWJsZUdldFF1aXpSZXN1bHRzQnV0dG9uOiBib29sZWFuO1xyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG4gICAgcHVibGljIHJlc2l6ZVZpZXdTZXJ2aWNlOiBSZXNpemVWaWV3U2VydmljZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBRdWl6U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFF1aXp6ZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFJvdXRlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEN1c3RvbUJyYW5kaW5nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6U2VydmljZTogUXVpelNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcXVpenplc1JvdXRlcjogUXVpenplc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBwZXJzb25hbFJvdXRlcjogUGVyc29uYWxSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgYnJhbmRpbmdTZXJ2aWNlOiBDdXN0b21CcmFuZGluZ1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpO1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuUEVSU09OQUxfQUNDT1VOVF9RVUlaWkVTX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIk15IHF1aXp6ZXMgLyBzdXJ2ZXlzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWl6Vmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2UgPSBuZXcgUmVzaXplVmlld1NlcnZpY2UodGhpcy52aWV3VHlwZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZUdldFF1aXpSZXN1bHRzQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcbiAgICAgICAgdGhpcy5oYXNVc2VyQ3JlYXRlZFF1aXp6ZXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cgPSBhbmd1bGFyLmVsZW1lbnQodGhpcy4kd2luZG93KTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiJGRlc3Ryb3lcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvdy51bmJpbmQoJ3Jlc2l6ZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZWRRdWl6emVzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVF1aXo+KCRodHRwLCB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9xdWl6emVzL3Byb2ZpbGVRdWl6emVzL2NyZWF0ZWRcIikpKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZWRRdWl6emVzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yb3dTaG93LnNldChlLmlkLCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFzc2VkUXVpenplc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElRdWl6UmVzdWx0PigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvcXVpenplcy9wcm9maWxlUXVpenplcy9wYXNzZWRcIikpKTtcclxuICAgICAgICB0aGlzLnBhc3NlZFF1aXp6ZXNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGUuaWQsIGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UXVpelZpZXdUeXBlKHZpZXdUeXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnF1aXpWaWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMucm93U2hvdy5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhpbmRleDogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZihrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaW5kZXgsICF0aGlzLnJvd1Nob3cuZ2V0KGluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRRdWl6RGV0YWlsc1VybChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzRGV0YWlsc1VybChpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1aXpSZXN1bHRVcmwocXVpeklkOiBudW1iZXIsIHF1aXpSZXN1bHRJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc29uYWxSb3V0ZXIucXVpekRldGFpbHNVcmwocXVpeklkLCBxdWl6UmVzdWx0SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkUXVpeihxdWl6SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnF1aXp6ZXNSb3V0ZXIucXVpenplc0RldGFpbHNVcmwocXVpeklkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRRdWl6UmVzdWx0KHF1aXpJZDogbnVtYmVyLCBxdWl6UmVzdWx0SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnBlcnNvbmFsUm91dGVyLnF1aXpEZXRhaWxzVXJsKHF1aXpJZCwgcXVpelJlc3VsdElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNVc2VyQ3JlYXRlZFF1aXp6ZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5xdWl6U2VydmljZS5oYXNVc2VyQ3JlYXRlZFF1aXp6ZXMoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzQ3JlYXRlZFF1aXp6ZXMgPSByZXN1bHQ7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyUHJvZmlsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB1O1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFZpZXdUeXBlKHZpZXdUeXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gdmlld1R5cGU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVWaWV3U2VydmljZS5vbGRWaWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1Bhc3NlZChzdGF0dXM6IFF1aXpSZXN1bHRTdGF0dXMpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RhdHVzLnRvU3RyaW5nKCkgPT0gUXVpelJlc3VsdFN0YXR1c1tRdWl6UmVzdWx0U3RhdHVzLlBBU1NFRF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU3VibWl0dGVkKHN0YXR1czogUXVpelJlc3VsdFN0YXR1cyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdGF0dXMudG9TdHJpbmcoKSA9PSBRdWl6UmVzdWx0U3RhdHVzW1F1aXpSZXN1bHRTdGF0dXMuU1VCTUlUVEVEXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNGYWlsZWQoc3RhdHVzOiBRdWl6UmVzdWx0U3RhdHVzKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0YXR1cy50b1N0cmluZygpID09IFF1aXpSZXN1bHRTdGF0dXNbUXVpelJlc3VsdFN0YXR1cy5GQUlMRURdO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7SVVzZXJMb2dvbn0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JVXNlckxvZ29uXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLy4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UHJlZGVmaW5lZFVzZXJzRW51bX0gZnJvbSBcIi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtTG9jYWxlfSBmcm9tIFwiLi8uLi9zZXR0aW5ncy9tb2RlbHMvSVN5c3RlbUxvY2FsZVwiO1xyXG5pbXBvcnQge1NldHRpbmdzU2VydmljZX0gZnJvbSBcIi4vLi4vc2V0dGluZ3MvU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLy4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuLi9jb21wb25lbnRzL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvQXV0aFJvdXRlclwiO1xyXG5pbXBvcnQge0lGaWxlfSBmcm9tIFwiLi4vdXNlcnMvVXNlckVkaXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyUm9sZX0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9Vc2VyUm9sZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtCYWRnZXNTZXJ2aWNlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL0JhZGdlc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJQWN0aW9uQmFkZ2V9IGZyb20gXCIuLi9nYW1pZmljYXRpb24vbW9kZWxzL0lBY3Rpb25CYWRnZVwiO1xyXG5pbXBvcnQge1BlcnNvbmFsUm91dGVyfSBmcm9tIFwiLi4vdXJscy9QZXJzb25hbFJvdXRlclwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7SUJhZGdlfSBmcm9tIFwiLi4vZ2FtaWZpY2F0aW9uL21vZGVscy9JQmFkZ2VcIjtcclxuaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuU2V0dGluZ3NDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHVzZXJJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHVzZXJQcm9maWxlOiBJVXNlcjtcclxuICAgIHB1YmxpYyBuZXdVc2VyUHJvZmlsZTogSVVzZXI7XHJcbiAgICBwdWJsaWMgdXNlckxvZ29uOiBJVXNlckxvZ29uO1xyXG4gICAgcHVibGljIGF2YWlsYWJsZUxvY2FsZXM6IEFycmF5PElTeXN0ZW1Mb2NhbGU+O1xyXG4gICAgcHVibGljIGRpc2FibGVTYXZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY29uZmlybVBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaXNEZWxldGlvbkFsbG93ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNFdmVyeXRoaW5nRGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbWluUGFzc3dvcmRMZW5ndGg6IG51bWJlciA9IFVzZXJTZXJ2aWNlLm1pblBhc3N3b3JkTGVuZ3RoO1xyXG5cclxuICAgIHB1YmxpYyBwcmV2aWV3OiBJRmlsZTtcclxuICAgIHB1YmxpYyBpc1Jlc2V0UHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBhdmFpbGFibGVSb2xlczogQXJyYXk8U3RyaW5nPjtcclxuICAgIHB1YmxpYyBub0F2YWlsYWJsZVJvbGVzID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNFeHRlcm5hbEFjY291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0NoZWNrUGFzc3dvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93Q3JlYXRlRWRpdEF2YXRhciA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIGlzTG9hZGluZ0ltYWdlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyByZXdhcmRzOiBBcnJheTxJQmFkZ2U+ID0gW107XHJcbiAgICBwdWJsaWMgcmV3YXJkVG9TaG93OiBJQmFkZ2U7XHJcbiAgICBwdWJsaWMgYXZhdGFyRXJyb3JzOiBhbnkgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgcm9sZXNGb3JVc2VyRXllczogQXJyYXk8e2tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nfT4gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBrZXk6IFVzZXJSb2xlW1VzZXJSb2xlLkFETUlOSVNUUkFUT1JdLFxyXG4gICAgICAgICAgICB2YWx1ZTogXCJBZG1pbmlzdHJhdG9yXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5OiBVc2VyUm9sZVtVc2VyUm9sZS5JTlNUUlVDVE9SXSxcclxuICAgICAgICAgICAgdmFsdWU6IFwiSW5zdHJ1Y3RvclwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleTogVXNlclJvbGVbVXNlclJvbGUuQVRURU5ERUVfTUFOQUdFUl0sXHJcbiAgICAgICAgICAgIHZhbHVlOiBcIkF0dGVuZGVlIG1hbmFnZXJcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBrZXk6IFVzZXJSb2xlW1VzZXJSb2xlLkFVVEhPUl0sXHJcbiAgICAgICAgICAgIHZhbHVlOiBcIkF1dGhvclwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleTogVXNlclJvbGVbVXNlclJvbGUuTEVBUk5FUl0sXHJcbiAgICAgICAgICAgIHZhbHVlOiBcIkxlYXJuZXJcIlxyXG4gICAgICAgIH0sXHJcbiAgICBdXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm9vdFNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIlVwbG9hZFwiLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2V0dGluZ3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJvdXRlci5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBEaWFsb2dTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCYWRnZXNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVyc29uYWxSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR1cGxvYWRlcjogbmcuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUm91dGVyOiBBdXRoUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFkZ2VzU2VydmljZTogQmFkZ2VzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVyc29uYWxSb3V0ZXI6IFBlcnNvbmFsUm91dGVyKSB7XHJcbiAgICAgICAgJHNjb3BlLnZtID0gdGhpcztcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfU0VUVElOR1NfTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiU2V0dGluZ3NcIikudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMubmV3VXNlclByb2ZpbGUgPSB7XHJcbiAgICAgICAgICAgIGZ1bGxOYW1lOiBcIlwiLFxyXG4gICAgICAgICAgICBsb2NhbGU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXNlckxvZ29uID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlwiLFxyXG4gICAgICAgICAgICBwYXNzd29yZDogXCJcIlxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkVXNlckxvZ29uKCk7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lckF2YXRhckltYWdlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmlzQ2hlY2tQYXNzd29yZCgpXHJcbiAgICAgICAgICAgIC50aGVuKGlzQ2hlY2sgPT4gdGhpcy5pc0NoZWNrUGFzc3dvcmQgPSBpc0NoZWNrKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmlzTG9hZGluZ0ltYWdlID0gZmFsc2UsIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lckF2YXRhckltYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbignYXZhdGFyLnVwZGF0ZS5pbWcnLChldmVudCwgcHJldmlldykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgPSBwcmV2aWV3O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oJ2F2YXRhci5yZXNldC5pbWcnLChldmVudCwgcHJldmlldywgcHJldmlld1VybCwgaXNSZXNldFByZXZpZXcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ID0gcHJldmlldztcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5wcmV2aWV3VXJsID0gcHJldmlld1VybDtcclxuICAgICAgICAgICAgdGhpcy5pc1Jlc2V0UHJldmlldyA9IGlzUmVzZXRQcmV2aWV3O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUHJvZmlsZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoISF0aGlzLnVzZXJMb2dvbi5wYXNzd29yZCAmJiB0aGlzLmlzQ2hlY2tQYXNzd29yZCAmJiAhdGhpcy5hdXRoU2VydmljZS5jaGVja1Bhc3N3b3JkKHRoaXMudXNlckxvZ29uLnBhc3N3b3JkKSkge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCAxIGxldHRlciwgMSBudW1iZXIsIDEgc3BlY2lhbCBjaGFyYWN0ZXIgZnJvbSAhQCMkJV4mKiBhbmQgbXVzdCBiZSA4IG9yIG1vcmUgY2hhcmFjdGVyc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcHJldmlldzogRmlsZSA9IHRoaXMucHJldmlldztcclxuICAgICAgICBsZXQgcHJvbWlzZSA9IHRoaXMudXNlclNlcnZpY2UudXBkYXRlQ3VycmVudFVzZXJQcm9maWxlKHRoaXMubmV3VXNlclByb2ZpbGUsIHRoaXMudXNlckxvZ29uLnBhc3N3b3JkLCBwcmV2aWV3LCB0aGlzLmlzUmVzZXRQcmV2aWV3KTtcclxuXHJcbiAgICAgICAgcHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHRbXCJ1c2VyXCJdLCB0aGlzLnVzZXJQcm9maWxlKTtcclxuICAgICAgICAgICAgdGhpcy5uZXdVc2VyUHJvZmlsZS52ZXJzaW9uID0gdGhpcy51c2VyUHJvZmlsZS52ZXJzaW9uO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IHRoaXMudXNlclByb2ZpbGUuaWQ7XHJcbiAgICAgICAgICAgIGxldCBwcm9taXNlOiBJUHJvbWlzZTxhbnk+O1xyXG4gICAgICAgICAgICBpZiAocHJldmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlID0gdGhpcy51cGxvYWQocHJldmlldywgdGhpcy51c2VySWQsIFwicHJldmlld1wiKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnVwZGF0ZUN1cnJlbnRVc2VyKHJlc3VsdFtcInVzZXJcIl0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZXdVc2VyUHJvZmlsZS5sb2NhbGUgIT0gdGhpcy51c2VyUHJvZmlsZS5sb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJZb3VyIHNldHRpbmdzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgdXBkYXRlZC4gUGxlYXNlIGxvZyBpbiBhZ2FpbiB0byBzZWUgdGhlIGNoYW5nZXNcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU2V0dGluZ3MgYXJlIHN1Y2Nlc3NmdWxseSBzYXZlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdCgnYXZhdGFyLnVwbG9hZC5pbWcnLCB0aGlzLnByZXZpZXcsIHRoaXMuaXNSZXNldFByZXZpZXcpO1xyXG4gICAgICAgICAgICBTZXR0aW5nc0NvbnRyb2xsZXIucmVsb2FkQXBwbGljYXRpb25Gb3JMb2NhbGVJZk5lZWRlZCh0aGlzLnVzZXJQcm9maWxlLmxvY2FsZSk7XHJcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoZXJyID09IFwiZXJyb3IuZW1haWwubm90LnVuaXF1ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlRoaXMgZW1haWwgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGluIHRoZSBzeXN0ZW1cIilcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gXCJlcnJvci50cnkudXBkYXRlLmFub3RoZXIudXNlclwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIllvdSBjYW4gY2hhbmdlIG9ubHkgeW91ciBvd24gcHJvZmlsZSBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gXCJlcnJvci51c2VyLnBhc3N3b3JkLnNob3J0XCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIGxlbmd0aCBvZiBwYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDggY2hhcmFjdGVyc1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSggKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxQcm9maWxlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuICAgICAgICB0aGlzLmxvYWRVc2VyTG9nb24oKTtcclxuICAgICAgICB0aGlzLmF2YXRhckVycm9ycyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVNeUFjY291bnQoKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgICAgICAgIFwiWW91IGFyZSBhYm91dCB0byBwZXJtYW5lbnRseSBkZWxldGUgdGhlIGFjY291bnQgXCIgKyB0aGlzLnVzZXJQcm9maWxlLmZ1bGxOYW1lICsgXCIuIEFyZSB5b3Ugc3VyZT9cIiwge1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiQWNjb3VudCBkZWxldGluZ1wiLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJEZWxldGVcIixcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJDYW5jZWxcIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHRoaXMudXNlclNlcnZpY2UuZGVsZXRlTXlBY2NvdW50KHRoaXMudXNlclByb2ZpbGUuaWQpO1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLmF1dGhSb3V0ZXIubG9nb3V0VXJsKCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29uZmlybVBhc3N3b3JkID0gXCJcIjtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHU7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodSwgdGhpcy5uZXdVc2VyUHJvZmlsZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGVsZXRpb25BbGxvd2VkID0gISh1LmlkIGluIFByZWRlZmluZWRVc2Vyc0VudW0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0V2ZXJ5dGhpbmdEaXNhYmxlZCA9ICh1LmlkID09IFByZWRlZmluZWRVc2Vyc0VudW0uR1VFU1QpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQXZhaWxhYmxlTG9jYWxlcygpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEF2YWlsYWJsZVVzZXJSb2xlc0ZvckN1cnJlbnRVc2VyKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyb2xlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm9BdmFpbGFibGVSb2xlcyA9IHJvbGVzLmxlbmd0aCA9PSAwIHx8IChyb2xlcy5sZW5ndGggPT0gMSAmJiByb2xlc1swXSA9PSBVc2VyUm9sZVtVc2VyUm9sZS5MRUFSTkVSXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlUm9sZXMgPSByb2xlcy5sZW5ndGggPiAwID8gcm9sZXMgOiBbVXNlclJvbGVbVXNlclJvbGUuTEVBUk5FUl1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvbGVzRm9yVXNlckV5ZXMgPSB0aGlzLnJvbGVzRm9yVXNlckV5ZXMuZmlsdGVyKHJvbGUgPT4gdGhpcy5hdmFpbGFibGVSb2xlcy5pbmRleE9mKHJvbGUua2V5KSAhPT0gLTEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5ub0F2YWlsYWJsZVJvbGVzICYmICF0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzUm9sZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1JvbGUgPSBVc2VyUm9sZVtVc2VyUm9sZS5MRUFSTkVSXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3VXNlclByb2ZpbGUuYnVzaW5lc3NSb2xlID0gVXNlclJvbGVbVXNlclJvbGUuTEVBUk5FUl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZXNTZXJ2aWNlLm5vdGlmeVVzZXJBZnRlclJld2FyZChBcnJheShcIlVTUl9QUkZMX0FWQVRBUlwiKSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGJyb2FkY2FzdCgnbm90aWZ5UmV3YXJkJywgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlckxvZ29uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNFeHRlcm5hbEFjY291bnQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJMb2NhbExvZ29uKCkudGhlbihsb2dvbiA9PiB7XHJcbiAgICAgICAgICAgIGlmIChsb2dvbikge1xyXG4gICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KGxvZ29uLCB0aGlzLnVzZXJMb2dvbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRXh0ZXJuYWxBY2NvdW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEF2YWlsYWJsZUxvY2FsZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0QXZhaWxhYmxlTG9jYWxlcygpLnRoZW4obG9jYWxlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTG9jYWxlcyA9IGxvY2FsZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGxvYWQoZmlsZTogRmlsZSwgdXNlcklkOiBudW1iZXIsIGZpbGVUeXBlOiBzdHJpbmcpOiBhbmd1bGFyLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRQcm9taXNlPEZpbGU+IHtcclxuICAgICAgICBsZXQgdXJsQnVpbGRlciA9IHRoaXMudXJsLmJhc2UoXCIvYXBpL3VzZXJzL3VwbG9hZD91c2VySWQ9OnVzZXJJZCZmaWxlVHlwZT06ZmlsZVR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnVzZXJJZFwiLCB1c2VySWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpmaWxlVHlwZVwiLCBmaWxlVHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVwbG9hZGVyLnVwbG9hZCh7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBhbmd1bGFyLmNvcHkodXJsQnVpbGRlcilcclxuICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW1hZ2VGb3JBY3Rpdml0eUJhZGdlKGJhZGdlOiBJQmFkZ2UpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChiYWRnZSkge1xyXG4gICAgICAgICAgICBpZiAoIWJhZGdlLnByZXZpZXdJZCAmJiBiYWRnZS5iYWRnZUtleSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB0aGVtZXMvZGVmYXVsdC9pbWcvYWN0aW9uQmFkZ2VzLyR7YmFkZ2UuYmFkZ2VLZXl9LnBuZ2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGJhZGdlLnByZXZpZXdVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEltYWdlc0ZvckFjdGl2aXR5QmFkZ2VzKGJhZGdlczogSUJhZGdlW10pOiB2b2lkIHtcclxuICAgICAgICBiYWRnZXMuZm9yRWFjaChiID0+IHtcclxuICAgICAgICAgICAgYi5wcmV2aWV3VXJsID0gdGhpcy5nZXRJbWFnZUZvckFjdGl2aXR5QmFkZ2UoYik7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3VibWl0UmV3YXJkKHJld2FyZElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgdGVtcFJld2FyZHMgPSB0aGlzLnJld2FyZHMuZmlsdGVyKHIgPT4gci5pZCAhPT0gcmV3YXJkSWQpO1xyXG4gICAgICAgIGlmICh0ZW1wUmV3YXJkcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAkKCcucmV3YXJkTm90aWZpY2F0aW9uJykuYWRkQ2xhc3MoJ3Jld2FyZE5vdGlmaWNhdGlvbi11cCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmV3YXJkcyA9IHRlbXBSZXdhcmRzO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXdhcmRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkVG9TaG93ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICQoJy5yZXdhcmROb3RpZmljYXRpb24nKS5yZW1vdmVDbGFzcygncmV3YXJkTm90aWZpY2F0aW9uLWRvd24nKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJld2FyZFRvU2hvdyA9IHRoaXMucmV3YXJkc1swXTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRUb1Nob3cgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tQYXNzd29yZChwYXNzd29yZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuY2hlY2tQYXNzd29yZChwYXNzd29yZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyByZWxvYWRBcHBsaWNhdGlvbkZvckxvY2FsZUlmTmVlZGVkKHVzZXJMb2NhbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChBcHBQcm9wZXJ0aWVzLmN1cnJlbnRMb2NhbGUgIT0gdXNlckxvY2FsZSkge1xyXG4gICAgICAgICAgICBTZXR0aW5nc0NvbnRyb2xsZXIuY2hhbmdlQXBwbGljYXRpb25Mb2NhbGVJblN0b3JhZ2UodXNlckxvY2FsZSk7XHJcbiAgICAgICAgICAgIG51bWVyYWwubGFuZ3VhZ2UodXNlckxvY2FsZS5zdWJzdHIoMCwgMikpOyAvLyBlLmcuICdlbicgb3IgJ3J1JyBvciAnZXMnIG9yICdmcidcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgY2hhbmdlQXBwbGljYXRpb25Mb2NhbGVJblN0b3JhZ2UodXNlckxvY2FsZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgTE9DQUxFX1NUT1JBR0VfS0VZID0gXCJ2aHMuYXBwbGljYXRpb24uY3VycmVudC5sb2NhbGVcIjtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMT0NBTEVfU1RPUkFHRV9LRVksIHVzZXJMb2NhbGUpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7UGVyc29uYWxTZXJ2aWNlfSBmcm9tIFwiLi9QZXJzb25hbFNlcnZpY2VcIjtcclxuXHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLy4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSBcIi4vLi4vcmVmZXJlbmNlL1JlZmVyZW5jZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLy4uL0lTZWxlY3RhYmxlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvbnNDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuU3Vic2NyaXB0aW9uc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG4gICAgcHVibGljIHN1YnNjcmlwdGlvbnM6IGFueTtcclxuICAgIHB1YmxpYyBub3RpZmljYXRpb25zRnJlcXVlbmN5OiBBcnJheTxJU2VsZWN0YWJsZT47XHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBSZWZlcmVuY2VTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJzb25hbFNlcnZpY2U6IFBlcnNvbmFsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVmZXJlbmNlQXBpOiBSZWZlcmVuY2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX1NVQlNDUklQVElPTlNfTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTXkgc3Vic2NyaXB0aW9uc1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0ge1xyXG4gICAgICAgICAgICBzdWJqZWN0c0lkczogW10sXHJcbiAgICAgICAgICAgIGFsbE5ld3NTdWJzY3JpcHRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICBzdHVkZW50c05ld3NTdWJzY3JpcHRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICBjb21tZW50c1N1YnNjcmlwdGlvbjogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xyXG4gICAgICAgIHRoaXMubG9hZFN1YnNjcmlwdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmxvYWROb3RpZmljYXRpb25zRnJlcXVlbmN5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVN1YnNjcmlwdGlvbnNTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBlcnNvbmFsU2VydmljZS5jaGFuZ2VTdWJzY3JpcHRpb25zKHRoaXMuc3Vic2NyaXB0aW9ucykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmNoYW5nZVVzZXJOb3RpZmljYXRpb25GcmVxdWVuY3kodGhpcy51c2VyUHJvZmlsZS5ub3RpZmljYXRpb25GcmVxdWVuY3lJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlN1YnNjcmlwdGlvbnMgYXJlIHN1Y2Nlc3NmdWxseSBzYXZlZFwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2UubG9hZFN1YnNjcmlwdGlvbnMoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShyZXN1bHQsIHRoaXMuc3Vic2NyaXB0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbFN1YnNjcmlwdGlvbnNTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxvYWRTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0T3duZXJzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiL2FwaS91c2VyU2VsZWN0b3IvdXNlcnNGb3JDdXJyZW50VXNlclwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZE5vdGlmaWNhdGlvbnNGcmVxdWVuY3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VBcGkuZ2V0QWN0aXZlUmVmZXJlbmNlRW50aXRpZXNGb3JTZWxlY3RvcldpdGhvdXRQYXJhbXMoXCJjYWxlbmRhclBlcmlvZHNcIiwgW10pXHJcbiAgICAgICAgICAgIC50aGVuKGZyZXF1ZW5jeSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNGcmVxdWVuY3kgPSBmcmVxdWVuY3k7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtQZXJzb25hbFNlcnZpY2V9IGZyb20gXCIuL1BlcnNvbmFsU2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLy4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cHBvcnRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuU3VwcG9ydENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG4gICAgcHVibGljIG1lc3NhZ2VUb1N1cHBvcnQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJzb25hbFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsU2VydmljZTogUGVyc29uYWxTZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX1NVUFBPUlRfTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiU3VwcG9ydFwiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kQXV0aGVudGljYXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VuZE1lc3NhZ2VUb1N1cHBvcnQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wZXJzb25hbFNlcnZpY2Uuc2VuZE1lc3NhZ2VUb1N1cHBvcnQodGhpcy5tZXNzYWdlVG9TdXBwb3J0KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJZb3VyIG1lc3NhZ2UgaGFzIGJlZW4gc2VudCB0byB0aGUgaGVscCBkZXNrLCB5b3Ugd2lsbCBoZWFyIGZyb20gdGhlbSBzb29uXCIpO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VUb1N1cHBvcnQgPSBcIlwiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJQcm9maWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1ID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZSA9IHU7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge09iamVjdFR5cGVVdGlsc30gZnJvbSBcIi4uL3V0aWxzL09iamVjdFR5cGVVdGlsc1wiO1xyXG5pbXBvcnQge0lNYXRlcmlhbH0gZnJvbSBcIi4uL21hdGVyaWFscy9tb2RlbHMvSU1hdGVyaWFsXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJR3JpZE1vZGVsLCBHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlZE9iamVjdFR5cGV9IGZyb20gXCIuLi9SZWZlcmVuY2VkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge0lHcmlkTG9hZGluZ0xpc3RlbmVyfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge1Jlc2l6ZVZpZXdTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvUmVzaXplVmlld1NlcnZpY2VcIjtcclxuaW1wb3J0IHtDdXN0b21CcmFuZGluZ1NlcnZpY2V9IGZyb20gXCIuLi9icmFuZGluZy9DdXN0b21CcmFuZGluZ1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRzQ29udHJvbGxlciBpbXBsZW1lbnRzIElHcmlkTG9hZGluZ0xpc3RlbmVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicGVyc29uYWwuVXBsb2Fkc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgdXNlclByb2ZpbGU6IElVc2VyO1xyXG4gICAgcHVibGljIHVwbG9hZHNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SU1hdGVyaWFsPjtcclxuICAgIHB1YmxpYyByb3dTaG93OiBNYXA8bnVtYmVyLCBib29sZWFuPiA9IG5ldyBNYXA8bnVtYmVyLCBib29sZWFuPigpO1xyXG4gICAgcHVibGljIHZpZXdUeXBlOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHdpbmRvdzogYW55O1xyXG4gICAgcHVibGljIHJlc2l6ZVZpZXdTZXJ2aWNlOiBSZXNpemVWaWV3U2VydmljZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDdXN0b21CcmFuZGluZ1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBtYXRlcmlhbHNSb3V0ZXI6IE1hdGVyaWFsc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicmFuZGluZ1NlcnZpY2U6IEN1c3RvbUJyYW5kaW5nU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZFN5c3RlbVBlcm1pc3Npb25zKHN5c3RlbVBlcm1pc3Npb25zID0+IHN5c3RlbVBlcm1pc3Npb25zLmFkZE1hdGVyaWFsKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfVVBMT0FEU19NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJNeSB1cGxvYWRzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMudmlld1R5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdy5iaW5kKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlLnNldFJlc2l6ZVZpZXdUeXBlKHRoaXMudmlld1R5cGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SU1hdGVyaWFsPigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvbWF0ZXJpYWxzL3VwbG9hZHNcIikpKTtcclxuICAgICAgICB0aGlzLnVwbG9hZHNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudXBsb2Fkc0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoZS5pZCwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmRMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMudXBsb2Fkc0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goKHVwbG9hZDogSU1hdGVyaWFsKSA9PiB7XHJcbiAgICAgICAgICAgIHVwbG9hZC5zdWJqZWN0QW5kVG9waWMgPSB1cGxvYWQuc3ViamVjdE5hbWUgKyBcIi9cIiArIHVwbG9hZC50aXRsZTtcclxuICAgICAgICAgICAgaWYgKHVwbG9hZC5hdXRob3IpIHtcclxuICAgICAgICAgICAgICAgIHVwbG9hZC5zdWJqZWN0QW5kVG9waWMgKz1cIiAoXCIgKyB1cGxvYWQuYXV0aG9yICsgXCIpXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RldGFpbHMoaW5kZXg6IG51bWJlciwga2V5Q29kZTpudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZihrZXlDb2RlID09IDEzIHx8ICFrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93U2hvdy5zZXQoaW5kZXgsICF0aGlzLnJvd1Nob3cuZ2V0KGluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB3YXRjaChtYXRlcmlhbElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5tYXRlcmlhbHNSb3V0ZXIud2F0Y2hVcmwobWF0ZXJpYWxJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRHbHlwaGljb25DbGFzcyhvYmplY3RUeXBlOiBzdHJpbmcsIG1hdGVyaWFsVHlwZUlkPzogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5NQVRFUklBTF06IHJldHVybiBPYmplY3RUeXBlVXRpbHMuZ2V0TWF0ZXJpYWxHbHlwaGljb25DbGFzcyhtYXRlcmlhbFR5cGVJZCk7XHJcbiAgICAgICAgICAgIGNhc2UgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTkVXU106IHJldHVybiBPYmplY3RUeXBlVXRpbHMuZ2V0TmV3c0dseXBoaWNvbkNsYXNzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUeXBlVGl0bGUob2JqZWN0VHlwZTogc3RyaW5nLCBtYXRlcmlhbFR5cGVJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5NQVRFUklBTF06IHJldHVybiBPYmplY3RUeXBlVXRpbHMuZ2V0TWF0ZXJpYWxUeXBlVGl0bGUobWF0ZXJpYWxUeXBlSWQpO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gT2JqZWN0VHlwZVV0aWxzLmdldFJlZmVyZW5jZU9iamVjdFR5cGVUaXRsZShvYmplY3RUeXBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2Uub2xkVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaWV3VHlwZVNlbGVjdGVkKHZpZXdUeXBlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3VHlwZSA9PSB2aWV3VHlwZTtcclxuICAgIH1cclxufSIsImV4cG9ydCBlbnVtIENhbGVuZGFyRXZlbnRUeXBlRW51bSB7XHJcbiAgICBOT1RfUkVHSVNURVJFRF9TRVNTSU9OLFxyXG4gICAgUkVHSVNURVJFRF9TRVNTSU9OLFxyXG4gICAgTk9UX0FWQUlMQUJMRV9TRVNTSU9OLFxyXG4gICAgQVZBSUxBQkxFX0NPVVJTRVxyXG59IiwiZXhwb3J0IGVudW0gU2Vzc2lvblR5cGVFbnVtIHtcclxuICAgIElMVF9TRVNTSU9OLFxyXG4gICAgdklMVF9TRVNTSU9OXHJcbn0iLCJpbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7UG9saWNpZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1BvbGljaWVzUm91dGVyXCI7XHJcbmltcG9ydCBJV2luZG93U2VydmljZSA9IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2U7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29va2llUG9saWN5Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInBvbGljaWVzLkNvb2tpZVBvbGljeUNvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudExvY2FsZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJGFuY2hvclNjcm9sbFwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFBvbGljaWVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkYW5jaG9yU2Nyb2xsOiBhbmd1bGFyLklBbmNob3JTY3JvbGxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljICR3aW5kb3c6IElXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHBvbGljaWVzUm91dGVyOiBQb2xpY2llc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLlBPTElDSUVTX0NPT0tJRV9QT0xJQ1lfTElOS19LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiQ29va2llIFBvbGljeVwiKS51cGRhdGUoKTtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2FsZSA9IGRhdGEubG9jYWxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvUHJpdmFjeVBvbGljeSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5wb2xpY2llc1JvdXRlci5wcml2YWN5UG9saWN5VXJsKCkpO1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5zY3JvbGwoMCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNjcm9sbFRvQ29va2llVGFibGVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLmhhc2goJ2Nvb2tpZVRhYmxlcycpO1xyXG4gICAgICAgIHRoaXMuJGFuY2hvclNjcm9sbCgpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtQcml2YWN5UG9saWN5Q29udHJvbGxlcn0gZnJvbSBcIi4vUHJpdmFjeVBvbGljeUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtDb29raWVQb2xpY3lDb250cm9sbGVyfSBmcm9tIFwiLi9Db29raWVQb2xpY3lDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7VGVybXNPZlVzZUNvbnRyb2xsZXJ9IGZyb20gXCIuL1Rlcm1zT2ZVc2VDb250cm9sbGVyXCI7XHJcblxyXG5leHBvcnQgdmFyIFBvbGljaWVzTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwicG9saWNpZXNcIiwgW10pXHJcbiAgICAuY29udHJvbGxlcihQcml2YWN5UG9saWN5Q29udHJvbGxlci5OQU1FLCBQcml2YWN5UG9saWN5Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKENvb2tpZVBvbGljeUNvbnRyb2xsZXIuTkFNRSwgQ29va2llUG9saWN5Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKFRlcm1zT2ZVc2VDb250cm9sbGVyLk5BTUUsIFRlcm1zT2ZVc2VDb250cm9sbGVyKTsiLCJpbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7UG9saWNpZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1BvbGljaWVzUm91dGVyXCI7XHJcbmltcG9ydCBJV2luZG93U2VydmljZSA9IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2U7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUHJpdmFjeVBvbGljeUNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJwb2xpY2llcy5Qcml2YWN5UG9saWN5Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50TG9jYWxlOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgUG9saWNpZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgJHdpbmRvdzogSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcG9saWNpZXNSb3V0ZXI6IFBvbGljaWVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuUE9MSUNJRVNfUFJJVkFDWV9QT0xJQ1lfTElOS19LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiUHJpdmFjeSBQb2xpY3lcIikudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbihkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9jYWxlID0gZGF0YS5sb2NhbGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9Db29raWVQb2xpY3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucG9saWNpZXNSb3V0ZXIuY29va2llUG9saWN5VXJsKCkpO1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5zY3JvbGwoMCwgMCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1BvbGljaWVzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Qb2xpY2llc1JvdXRlclwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXJzL1VzZXJTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVGVybXNPZlVzZUNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJwb2xpY2llcy5UZXJtc09mVXNlQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50TG9jYWxlOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFBvbGljaWVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcG9saWNpZXNSb3V0ZXI6IFBvbGljaWVzUm91dGVyLCBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5QT0xJQ0lFU19URVJNU19PRl9VU0VfTElOS19LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiVGVybXMgb2YgVXNlXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyUHJvZmlsZSgpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2FsZSA9IGRhdGEubG9jYWxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtJUXVpen0gZnJvbSBcIi4vbW9kZWxzL0lRdWl6XCI7XHJcbmltcG9ydCB7SVF1aXpSZXN1bHR9IGZyb20gXCIuL21vZGVscy9JUXVpelJlc3VsdFwiO1xyXG5pbXBvcnQge1F1aXp6ZXNSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvUXVpenplc1JvdXRlclwiO1xyXG5pbXBvcnQge1F1aXpTZXJ2aWNlfSBmcm9tIFwiLi9RdWl6U2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi8uLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLy4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge1F1aXpSZXN1bHRTdGF0dXN9IGZyb20gXCIuL21vZGVscy9RdWl6UmVzdWx0U3RhdHVzXCI7XHJcbmltcG9ydCB7Q291cnNlRGV0YWlsc0NvbnRyb2xsZXJ9IGZyb20gXCIuLi9jb3Vyc2VzL0NvdXJzZURldGFpbHNDb250cm9sbGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVpekNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJxdWl6emVzLlF1aXpDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBNQVhfUkVDVVJTSU9OX0RFUFRIID0gMztcclxuXHJcbiAgICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBxdWl6SWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBxdWl6OiBJUXVpeiA9IHt9O1xyXG4gICAgcHVibGljIHF1aXpSZXN1bHRzOiBBcnJheTxJUXVpelJlc3VsdD4gPSBbXTtcclxuICAgIHB1YmxpYyBpc1F1aXpMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHB1YmxpYyByZWN1cnNpb25EZXB0aDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwdWJsaWMgZnVsbFNjcmVlbk1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUUsXHJcbiAgICAgICAgUXVpelNlcnZpY2UuTkFNRSxcclxuICAgICAgICBRdWl6emVzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhNYW5hZ2VyOiBBdXRoTWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcXVpelNlcnZpY2U6IFF1aXpTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6emVzUm91dGVyOiBRdWl6emVzUm91dGVyKSB7XHJcbiAgICAgICAgdGhpcy5xdWl6SWQgPSAkcm91dGVQYXJhbXNbUXVpenplc1JvdXRlci5RVUlaX0lEX1BBUkFNXTtcclxuICAgICAgICB0aGlzLmZ1bGxTY3JlZW5Nb2RlID0gJGxvY2F0aW9uLnNlYXJjaCgpW0NvdXJzZURldGFpbHNDb250cm9sbGVyLkZVTExfU0NSRUVOX1BBUkFNRVRFUl0gIT0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0odGhpcy5xdWl6emVzUm91dGVyLmdldE1lbnVJdGVtKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSkpO1xyXG4gICAgICAgIHRoaXMubG9hZFF1aXooKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRRdWl6KCkge1xyXG4gICAgICAgIHRoaXMucXVpelNlcnZpY2UuZ2V0UXVpekluZm8odGhpcy5xdWl6SWQpLnRoZW4ocSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcS5pZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbXNnOiBzdHJpbmcgPSBxLnF1aXpUeXBlID09PSBcIlFVSVpcIiA/IFwiVGhpcyBxdWl6IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICA6IChxLnF1aXpUeXBlID09PSBcIlNVUlZFWVwiID8gXCJUaGlzIHN1cnZleSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN5c3RlbVwiIDogXCJUaGlzIGZsYXNoY2FyZCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN5c3RlbVwiKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKG1zZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLnF1aXp6ZXNJbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkocSwgdGhpcy5xdWl6KTtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIocS50aXRsZSkudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFVzZXJRdWl6UmVzdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNRdWl6TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJRdWl6UmVzdWx0KCkge1xyXG4gICAgICAgIHRoaXMucXVpelNlcnZpY2UuZ2V0Q3VycmVudFVzZXJRdWl6UmVzdWx0cyh0aGlzLnF1aXpJZCwgXCJRVUlaXCIpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5xdWl6UmVzdWx0cyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0UXVpeigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LnJlZGlyZWN0VG9Mb2dPbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucmVjdXJzaW9uRGVwdGggPCBRdWl6Q29udHJvbGxlci5NQVhfUkVDVVJTSU9OX0RFUFRIKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY3Vyc2lvbkRlcHRoKys7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXpTZXJ2aWNlLnN0YXJ0UXVpekJ5VXNlcih0aGlzLnF1aXpJZCwgXCJRVUlaXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN1cnNpb25EZXB0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnF1aXp6ZXNSb3V0ZXIucGFzc2luZ1VybCh0aGlzLnF1aXpJZCwgcmVzdWx0LmlkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc3RhcnQucXVpei5uby5xdWVzdGlvbnNcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIllvdSBoYXZlIGFscmVhZHkgYW5zd2VyZWQgb24gYWxsIHF1ZXN0aW9ucyBpbiB0aGF0IHF1aXpcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLm5vLnN1aXRhYmxlLnF1ZXN0aW9uc1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiTm8gc3VpdGFibGUgcXVlc3Rpb24gZm91bmQgdG8gZGlzcGxheVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwib3B0aW1pc3RpYy5sb2NraW5nLmZhaWxlZC5jYXRjaGVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRRdWl6KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNQYXNzZWQoc3RhdHVzOiBRdWl6UmVzdWx0U3RhdHVzKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0YXR1cy50b1N0cmluZygpID09IFF1aXpSZXN1bHRTdGF0dXNbUXVpelJlc3VsdFN0YXR1cy5QQVNTRURdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1N1Ym1pdHRlZChzdGF0dXM6IFF1aXpSZXN1bHRTdGF0dXMpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RhdHVzLnRvU3RyaW5nKCkgPT0gUXVpelJlc3VsdFN0YXR1c1tRdWl6UmVzdWx0U3RhdHVzLlNVQk1JVFRFRF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRmFpbGVkKHN0YXR1czogUXVpelJlc3VsdFN0YXR1cyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdGF0dXMudG9TdHJpbmcoKSA9PSBRdWl6UmVzdWx0U3RhdHVzW1F1aXpSZXN1bHRTdGF0dXMuRkFJTEVEXTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHtJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzXCI7XHJcbmltcG9ydCB7SVF1aXp9IGZyb20gXCIuL21vZGVscy9JUXVpelwiO1xyXG5pbXBvcnQge0lRdWl6UXVlc3Rpb259IGZyb20gXCIuL21vZGVscy9JUXVpelF1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SVF1aXpRdWVzdGlvbkFuc3dlckV4cGxhbmF0aW9ufSBmcm9tIFwiLi9tb2RlbHMvSVF1aXpRdWVzdGlvbkFuc3dlckV4cGxhbmF0aW9uXCI7XHJcbmltcG9ydCB7SVF1aXpBbnN3ZXJ9IGZyb20gXCIuL21vZGVscy9JUXVpekFuc3dlclwiO1xyXG5pbXBvcnQge1F1aXpDb3JyZWN0QW5zd2Vyc1R5cGV9IGZyb20gXCIuLi9jb3Vyc2VzL21vZGVscy9RdWl6Q29ycmVjdEFuc3dlcnNUeXBlXCI7XHJcbmltcG9ydCB7UXVpelR5cGV9IGZyb20gXCIuL21vZGVscy9RdWl6VHlwZVwiO1xyXG5pbXBvcnQge1F1ZXN0aW9uVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1F1ZXN0aW9uVHlwZVwiO1xyXG5pbXBvcnQge1NlY3VyZWRPYmplY3RUeXBlfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvU2VjdXJlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtRdWl6U2VydmljZX0gZnJvbSBcIi4vUXVpelNlcnZpY2VcIjtcclxuaW1wb3J0IHtRdWl6emVzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9RdWl6emVzUm91dGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcbmltcG9ydCB7UHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzfSBmcm9tIFwiLi4vdXRpbHMvUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge1NjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1NjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZVwiO1xyXG5pbXBvcnQge05leHRRdWVzdGlvblR5cGV9IGZyb20gXCIuL21vZGVscy9OZXh0UXVlc3Rpb25UeXBlXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UXVpekltcG9ydEV4cG9ydFNlcnZpY2V9IGZyb20gXCIuL1F1aXpJbXBvcnRFeHBvcnRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXBsb2FkVXRpbHN9IGZyb20gXCIuLi91dGlscy9VcGxvYWRVdGlsc1wiO1xyXG5pbXBvcnQge0J1bmRsZVNlcnZpY2V9IGZyb20gXCIuLi9idW5kbGVzL0J1bmRsZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSAnLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZSc7XHJcbmltcG9ydCB7SU1hdGVyaWFsfSBmcm9tICcuLi9tYXRlcmlhbHMvbW9kZWxzL0lNYXRlcmlhbCc7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tICcuLi9JR3JpZE1vZGVsJztcclxuaW1wb3J0IHtIdHRwR3JpZEhlbHBlcn0gZnJvbSAnLi4vSUh0dHBHcmlkU2VydmljZSc7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tICcuLi91cmxzL01hdGVyaWFsc1JvdXRlcic7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcblxyXG5pbnRlcmZhY2UgSVF1aXpRdWVzdGlvbkV4dGVuZGVkIGV4dGVuZHMgSVF1aXpRdWVzdGlvbiB7XHJcbiAgICBmaWxlRm9ybT86IEZpbGU7XHJcbiAgICBpc0Vycm9yRmlsZUZvcm1hdD86IGJvb2xlYW47XHJcbiAgICBpc1F1ZXN0aW9uVmFsaWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlIGV4dGVuZHMgRmlsZSB7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1aXpFZGl0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInF1aXp6ZXMuUXVpekVkaXRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBQRVJDRU5UQUdFX1RZUEUgPSBcIlBFUkNFTlRBR0VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFJFU1BPTlNFX0RFRkFVTFRfTUFYX1RFWFRfTEVOR1RIID0gMTAwMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgUkVTUE9OU0VfREVGQVVMVF9NQVhfQVVESU9fTEVOR1RIID0gMTgwO1xyXG5cclxuICAgIHB1YmxpYyBORVhUX1FVRVNUSU9OX1NFUVVFTkNFX05VTUJFUjogbnVtYmVyID0gLTE7XHJcbiAgICBwdWJsaWMgRU5EX09GX1RIRV9RVUlaX1NFUVVFTkNFX05VTUJFUjogbnVtYmVyID0gLTI7XHJcblxyXG4gICAgcHVibGljIGlzUXVpekxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHB1YmxpYyBxdWl6OiBJUXVpejtcclxuICAgIHB1YmxpYyBxdWl6UXVlc3Rpb25zOiBBcnJheTxJUXVpelF1ZXN0aW9uRXh0ZW5kZWQ+ID0gW107XHJcbiAgICBwdWJsaWMgY3VycmVudFF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uRXh0ZW5kZWQgPSB7fTtcclxuICAgIHB1YmxpYyBjdXJyZW50QW5zd2VyczogQXJyYXk8SVF1aXpBbnN3ZXI+ID0gW107XHJcbiAgICBwdWJsaWMgY3VycmVudEV4cGxhbmF0aW9uczogQXJyYXk8SVF1aXpRdWVzdGlvbkFuc3dlckV4cGxhbmF0aW9uPiA9IFtdO1xyXG4gICAgcHVibGljIGlzRWRpdFF1ZXN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZWRpdFF1ZXN0aW9uSW5kZXg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwZXJjZW50YWdlTnVtYmVyOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcG9pbnRzTnVtYmVyOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcHJldmlld1VybDogc3RyaW5nO1xyXG4gICAgcHVibGljIGhhc1ByZXZpZXdVcmxDYW5jZWxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzUmVzZXRQcmV2aWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYW5zd2VyVHlwZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGFuc3dlclN1YnR5cGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBhbGxvd05hdmlnYXRpb246IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHF1aXpJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHByZXZpZXc6IElGaWxlO1xyXG4gICAgcHVibGljIGNyb3BwZWRJbWFnZTogRmlsZTtcclxuICAgIHB1YmxpYyBkaXNhYmxlZFNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoYXNBbGxCdXNpbmVzc1VuaXRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IEFycmF5PElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzPiA9IFtdO1xyXG4gICAgcHVibGljIHF1aXpUeXBlO1xyXG4gICAgcHVibGljIHF1ZXN0aW9uT3JkZXI6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbWF0Y2hpbmdPcHRpb25zSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZmlsbGFibGVGb3JtU2hvd2luZ0luUG9wVXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93TWF0ZXJpYWxDcmVhdGlvbkZvcm06IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgc2VjdGlvbk1hdGVyaWFsczogQXJyYXk8SU1hdGVyaWFsPiA9IFtdO1xyXG4gICAgcHVibGljIG1hdGVyaWFsc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTWF0ZXJpYWw+O1xyXG5cclxuICAgIHB1YmxpYyBpc0ZpbGVVcGxvYWRzRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIG9wZW5Mb2FkTWF0ZXJpYWxzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGFyZVF1ZXN0aW9uc1RhZ3NMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBxdWVzdGlvbnNUYWdzOiBzdHJpbmdbXTtcclxuICAgIHB1YmxpYyBxdWVzdGlvbkNvZGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBxdWVzdGlvblRhYk5hbWU6IHN0cmluZyA9IFwiQWRkIGEgcXVlc3Rpb25cIjtcclxuXHJcbiAgICBwdWJsaWMgbG9hZFF1ZXN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIG51bWJlck9mUXVlc3Rpb25zOiBudW1iZXIgPSAxMDA7XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcbiAgICBwdWJsaWMgdXNlclBlcm1pc3Npb25zO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiVXBsb2FkXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFF1aXpTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBRdWl6emVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1bmRsZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcGxvYWRVdGlscy5OQU1FLFxyXG4gICAgICAgIFF1aXpJbXBvcnRFeHBvcnRTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBBdXRoUmVkaXJlY3QuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6U2VydmljZTogUXVpelNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcXVpenplc1JvdXRlcjogUXVpenplc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1bmRsZVNlcnZpY2U6IEJ1bmRsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVwbG9hZFV0aWxzOiBVcGxvYWRVdGlscyxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcXVpekltcG9ydEV4cG9ydFNlcnZpY2U6IFF1aXpJbXBvcnRFeHBvcnRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMucXVpeklkID0gJHJvdXRlUGFyYW1zW1F1aXp6ZXNSb3V0ZXIuUVVJWl9JRF9QQVJBTV07XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0odGhpcy5xdWl6emVzUm91dGVyLmdldE1lbnVJdGVtKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSkpO1xyXG5cclxuICAgICAgICBsZXQgcXVpeklkU3RyOiBzdHJpbmcgPSBTdHJpbmcodGhpcy5xdWl6SWQpO1xyXG4gICAgICAgIGxldCBoYXNRdWl6SWQ6IGJvb2xlYW4gPSB0aGlzLnF1aXpJZCAhPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9uc0lmKCFoYXNRdWl6SWQsIHN5c3RlbVBlcm1pc3Npb25zID0+IHN5c3RlbVBlcm1pc3Npb25zLmFkZFF1aXp6ZXMpXHJcbiAgICAgICAgICAgIC5kZW1hbmRRdWl6UGVybWlzc2lvbnNJZihoYXNRdWl6SWQsIHF1aXpJZFN0ciwgcXVpelBlcm1pc3Npb25zID0+IHF1aXpQZXJtaXNzaW9ucy52aWV3KVxyXG4gICAgICAgICAgICAuZGVtYW5kUXVpelBlcm1pc3Npb25zSWYoaGFzUXVpeklkLCBxdWl6SWRTdHIsIHF1aXpQZXJtaXNzaW9ucyA9PiBxdWl6UGVybWlzc2lvbnMuZWRpdCB8fCBxdWl6UGVybWlzc2lvbnMudmlldyk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdXNlcjtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzUXVpeklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRRdWl6UGVybWlzc2lvbnModGhpcy5xdWl6SWQudG9TdHJpbmcoKSkudGhlbigocGVybWlzc2lvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyUGVybWlzc2lvbnMuZWRpdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUXVpeigpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFF1ZXN0aW9uc1RhZ3ModGhpcy5xdWl6SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IHRoaXMucXVpei5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHRoaXMubG9hZFF1ZXN0aW9ucyA9IHRydWUsIDUwMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3RTY29wZS4kb24oJyRsb2NhdGlvbkNoYW5nZVN0YXJ0JywgKGV2ZW50LCBuZXdMb2NhdGlvbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dOYXZpZ2F0aW9uICYmIHRoaXMuY3VycmVudFVzZXIuZnVsbE5hbWUgIT0gXCJHdWVzdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIllvdSBjYW4ndCBsZWF2ZSB0aGlzIHBhZ2UgdW5sZXNzIHlvdSBzYXZlIG9yIGNhbmNlbCB0aGUgcXVpeiAoc3VydmV5IG9yIGZsYXNoY2FyZHMpXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzRGV0YWlsc1VybCh0aGlzLnF1aXpJZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLlFVSVosIHF1aXpJZFN0cik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlci5mdWxsTmFtZSAhPT0gJ0d1ZXN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dOYXZpZ2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLnF1aXp6ZXNEZXRhaWxzVXJsKHRoaXMucXVpeklkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6VHlwZSA9ICRyb3V0ZVBhcmFtc1tRdWl6emVzUm91dGVyLlFVSVpfVFlQRV0udG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUXVpekxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXoucXVpelR5cGUgPSB0aGlzLnF1aXpUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpei5xdWVzdGlvbnNJbkFjY29yZGFuY2VXaXRoU2VxdWVuY2VOdW1iZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25PcmRlciA9ICF0aGlzLnF1aXoucXVlc3Rpb25zSW5BY2NvcmRhbmNlV2l0aFNlcXVlbmNlTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1aXpUeXBlID09IFwiUVVJWlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTmV3IHF1aXpcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1aXpUeXBlID09IFwiU1VSVkVZXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJOZXcgc3VydmV5XCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXouc2hvd0NvcnJlY3RBbnN3ZXJzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1aXpUeXBlID09IFwiRkxBU0hDQVJEXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJOZXcgZmxhc2hjYXJkc1wiKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6Lm9uZVF1ZXN0aW9uQXRBVGltZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpei5zaG93Q29ycmVjdEFuc3dlcnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6LnF1ZXN0aW9uc0luQWNjb3JkYW5jZVdpdGhTZXF1ZW5jZU51bWJlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uT3JkZXIgPSAhdGhpcy5xdWl6LnF1ZXN0aW9uc0luQWNjb3JkYW5jZVdpdGhTZXF1ZW5jZU51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24udHlwZSA9IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuRkxBU0hfQ0FSRF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXoub3duZXJJZCA9IHVzZXIuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpei5vd25lck5hbWUgPSB1c2VyLmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSB1c2VyLmFsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLmFsbEJ1c2luZXNzVW5pdHMgfHwgdXNlci5idXNpbmVzc1VuaXRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLlFVSVopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpei5sYW5ndWFnZUlkID0gUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzLmRldGVybWluZVJlbGF0ZWRMYW5ndWFnZUlkKHVzZXIubG9jYWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRRdWVzdGlvbnNUYWdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUXVlc3Rpb25zID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93TmF2aWdhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMucXVpeiA9IHtcclxuICAgICAgICAgICAgcXVlc3Rpb25zOiBbXSxcclxuICAgICAgICAgICAgY29ycmVjdEFuc3dlcnNUeXBlOiAnUEVSQ0VOVEFHRScsXHJcbiAgICAgICAgICAgIGdlbmVyYXRlRnJvbUJhbms6IGZhbHNlLFxyXG4gICAgICAgICAgICBudW1iZXJPZlF1ZXN0aW9uczogbnVsbCxcclxuICAgICAgICAgICAgb25lUXVlc3Rpb25BdEFUaW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvd0NvcnJlY3RBbnN3ZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICByZXF1aXJlQWxsQW5zd2VyczogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IHRydWUsXHJcbiAgICAgICAgICAgIGV4Y2x1ZGVDb3JyZWN0bHlBbnN3ZXJlZFF1ZXN0aW9uczogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbiA9IHtcclxuICAgICAgICAgICAgdGV4dDogXCJcIixcclxuICAgICAgICAgICAgdHlwZTogUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5NVUxUSVBMRV9DSE9JQ0VfU0lOR0xFX0FOU1dFUl0sXHJcbiAgICAgICAgICAgIGFuc3dlcnM6IFtdLFxyXG4gICAgICAgICAgICBleHBsYW5hdGlvbnM6IFtdLFxyXG4gICAgICAgICAgICBzaG9ydEFuc3dlck1heExlbmd0aDogbnVsbCxcclxuICAgICAgICAgICAgcG9pbnRzOiAxLFxyXG4gICAgICAgICAgICBpc0Vycm9yRmlsZUZvcm1hdDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLnF1ZXN0aW9uQ29kZSA9IFwiUVwiICsgKHRoaXMucXVpelF1ZXN0aW9ucy5sZW5ndGggKyAxKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRFeHBsYW5hdGlvbnMgPSBbe2V4cGxhbmF0aW9uOiBcIlwifV07XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJUeXBlID0gXCJtdWx0aXBsZS1jaG9pY2Utc2luZ2xlLWFuc3dlclwiO1xyXG4gICAgICAgIGhhc1F1aXpJZCA9PSBmYWxzZSA/IHRoaXMucGVyY2VudGFnZU51bWJlciA9IDcwIDogdGhpcy5wZXJjZW50YWdlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRJc1F1aXpGaWxlc1VwbG9hZHNFbmFibGVkKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHRoaXMuaXNGaWxlVXBsb2Fkc0VuYWJsZWQgPSByZXN1bHQpO1xyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElNYXRlcmlhbD4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcIi9hcGkvbWF0ZXJpYWxzL2ZvclF1aXpcIikpKTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDU7XHJcblxyXG4gICAgICAgICQod2luZG93KS5vbihcImJlZm9yZXVubG9hZFwiLCAoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd05hdmlnYXRpb24gJiYgdGhpcy5jdXJyZW50VXNlci5mdWxsTmFtZSAhPSBcIkd1ZXN0XCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIllvdSBjYW4ndCBsZWF2ZSB0aGlzIHBhZ2UgdW5sZXNzIHlvdSBzYXZlIG9yIGNhbmNlbCB0aGUgcXVpeiAoc3VydmV5IG9yIGZsYXNoY2FyZHMpXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kd2F0Y2hHcm91cChbXHJcbiAgICAgICAgICAgIFwidm0ucXVpei5vbmVRdWVzdGlvbkF0QVRpbWVcIixcclxuICAgICAgICAgICAgXCJ2bS5xdWl6LnF1ZXN0aW9uc0luQWNjb3JkYW5jZVdpdGhTZXF1ZW5jZU51bWJlclwiLFxyXG4gICAgICAgICAgICBcInZtLnF1aXouZ2VuZXJhdGVGcm9tQmFua1wiLFxyXG4gICAgICAgICAgICBcInZtLnF1aXouZXhjbHVkZUNvcnJlY3RseUFuc3dlcmVkUXVlc3Rpb25zXCJcclxuICAgICAgICBdLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQ3VycmVudFF1ZXN0aW9uRmllbGRzKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUXVpekJyYW5jaGluZ0FsbG93ZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihxdWVzdGlvbiA9PiBxdWVzdGlvbi50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuTVVMVElQTEVfQ0hPSUNFX1NJTkdMRV9BTlNXRVJdKVxyXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKHF1ZXN0aW9uID0+IHF1ZXN0aW9uLmFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyOiBJUXVpekFuc3dlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLm5leHRRdWVzdGlvblR5cGUgPT0gbnVsbCB8fCBhbnN3ZXIubmV4dFF1ZXN0aW9uVHlwZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlci5uZXh0UXVlc3Rpb25UeXBlID0gTmV4dFF1ZXN0aW9uVHlwZVtOZXh0UXVlc3Rpb25UeXBlLk5FWFRfUVVFU1RJT05dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gdGhpcy5ORVhUX1FVRVNUSU9OX1NFUVVFTkNFX05VTUJFUjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuYmxvY2tTcGFjZXMgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAkKCdpbnB1dCcpLmtleXVwKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzdHIgPSAkKHRoaXMpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xccy9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbChzdHIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRmlsZVVwbG9hZChxdWVzdGlvbjogSVF1aXpRdWVzdGlvbkV4dGVuZGVkKTogdm9pZCB7XHJcbiAgICAgICAgaWYocXVlc3Rpb24uZmlsZUZvcm0pIHtcclxuICAgICAgICAgICAgcXVlc3Rpb24uYXR0YWNoZWRGaWxlTmFtZSA9IHF1ZXN0aW9uLmZpbGVGb3JtLm5hbWU7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLmlzRXJyb3JGaWxlRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlc3Rpb24uaXNFcnJvckZpbGVGb3JtYXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRRdWl6KCk6IGFuZ3VsYXIuSVByb21pc2U8SVF1aXo+IHtcclxuICAgICAgICBsZXQgcHJvbWlzZTogYW5ndWxhci5JUHJvbWlzZTxJUXVpej4gPSB0aGlzLnF1aXpTZXJ2aWNlLmdldFF1aXpGb3JFZGl0aW5nKHRoaXMucXVpeklkKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQuaWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1zZzogc3RyaW5nID0gcmVzdWx0LnF1aXpUeXBlID09PSBcIlFVSVpcIiA/IFwiVGhpcyBxdWl6IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICA6IFwiVGhpcyBzdXJ2ZXkgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW1cIjtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKG1zZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLnF1aXp6ZXNJbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHJlc3VsdCwgdGhpcy5xdWl6KTtcclxuICAgICAgICAgICAgdGhpcy5xdWl6VHlwZSA9IHRoaXMucXVpei5xdWl6VHlwZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucXVpei5xdWl6VHlwZSA9PSAnUVVJWicpIHtcclxuICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiRWRpdCBxdWl6IFwiICsgXCLigJhcIlxyXG4gICAgICAgICAgICAgICAgICAgICsgdGhpcy5xdWl6LnRpdGxlICsgXCLigJlcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWl6LnF1aXpUeXBlID09ICdTVVJWRVknKSB7XHJcbiAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkVkaXQgc3VydmV5IFwiICsgXCLigJhcIlxyXG4gICAgICAgICAgICAgICAgICAgICsgdGhpcy5xdWl6LnRpdGxlICsgXCLigJlcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWl6LnF1aXpUeXBlID09ICdGTEFTSENBUkQnKSB7XHJcbiAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkVkaXQgZmxhc2hjYXJkcyBcIiArIFwi4oCYXCJcclxuICAgICAgICAgICAgICAgICAgICArIHRoaXMucXVpei50aXRsZSArIFwi4oCZXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmR1cmF0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpei5kdXJhdGlvbiA9IHJlc3VsdC5kdXJhdGlvbiAvIDYwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucXVpei5xdWVzdGlvbnNcclxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChxdWVzdGlvbjogSVF1aXpRdWVzdGlvbkV4dGVuZGVkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24udGFnc0xpc3QgPSAocXVlc3Rpb24udGFncyAhPSBudWxsICYmIHF1ZXN0aW9uLnRhZ3MgIT0gdW5kZWZpbmVkICYmIHF1ZXN0aW9uLnRhZ3MubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBxdWVzdGlvbi50YWdzLnNwbGl0KFwiLFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5GSUxMQUJMRV9GT1JNXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5maWxlRm9ybSA9IDxGaWxlPnt9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXoucXVlc3Rpb25zXHJcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLk1VTFRJUExFX0NIT0lDRV9TSU5HTEVfQU5TV0VSXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5hbnN3ZXJzLmZvckVhY2goKGFuc3dlcjogSVF1aXpBbnN3ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIubmV4dFF1ZXN0aW9uVHlwZSA9PSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuRU5EX09GX1RIRV9RVUlaXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlci5uZXh0UXVlc3Rpb25TZXF1ZW5jZU51bWJlciA9IHRoaXMuRU5EX09GX1RIRV9RVUlaX1NFUVVFTkNFX05VTUJFUjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLm5leHRRdWVzdGlvblR5cGUgPT0gTmV4dFF1ZXN0aW9uVHlwZVtOZXh0UXVlc3Rpb25UeXBlLk5FWFRfUVVFU1RJT05dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gdGhpcy5ORVhUX1FVRVNUSU9OX1NFUVVFTkNFX05VTUJFUjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLm5leHRRdWVzdGlvblR5cGUgPT0gTmV4dFF1ZXN0aW9uVHlwZVtOZXh0UXVlc3Rpb25UeXBlLkVORF9PRl9USEVfUVVJWl0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gdGhpcy5FTkRfT0ZfVEhFX1FVSVpfU0VRVUVOQ0VfTlVNQkVSO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLm5leHRRdWVzdGlvblR5cGUgPT0gTmV4dFF1ZXN0aW9uVHlwZVtOZXh0UXVlc3Rpb25UeXBlLk5FWFRfUVVFU1RJT05dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5uZXh0UXVlc3Rpb25TZXF1ZW5jZU51bWJlciA9IHRoaXMuTkVYVF9RVUVTVElPTl9TRVFVRU5DRV9OVU1CRVI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHRoaXMucXVpei5xdWVzdGlvbnMsIHRoaXMucXVpelF1ZXN0aW9ucyk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuY29ycmVjdEFuc3dlcnNUeXBlID09IFF1aXpFZGl0Q29udHJvbGxlci5QRVJDRU5UQUdFX1RZUEUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyY2VudGFnZU51bWJlciA9IHJlc3VsdC5jb3JyZWN0QW5zd2Vyc051bWJlcjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRzTnVtYmVyID0gcmVzdWx0LmNvcnJlY3RBbnN3ZXJzTnVtYmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlld1VybCA9IHRoaXMucXVpei5wcmV2aWV3VXJsID8gdGhpcy5xdWl6LnByZXZpZXdVcmwgOiBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmlzUXVpekxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbk9yZGVyID0gIXRoaXMucXVpei5xdWVzdGlvbnNJbkFjY29yZGFuY2VXaXRoU2VxdWVuY2VOdW1iZXI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhzZWN1cmVkT2JqZWN0VHlwZTogU2VjdXJlZE9iamVjdFR5cGUsIG9iamVjdElkPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEFsbE9iamVjdFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKHNlY3VyZWRPYmplY3RUeXBlLCBvYmplY3RJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFF1ZXN0aW9uc1RhZ3MocXVpeklkPzogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgICAgIGxldCBidXNpbmVzc1VuaXRUYWdzID0gW107XHJcbiAgICAgICAgbGV0IHN5c3RlbVRhZ3MgPSBbXTtcclxuXHJcbiAgICAgICAgbGV0IGxvYWRCdXNpbmVzc1VuaXRUYWdzID0gdGhpcy5xdWl6LmJ1c2luZXNzVW5pdElkXHJcbiAgICAgICAgICAgID8gdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRUYWdzKHRoaXMucXVpei5idXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKChxdWVzdGlvbnNUYWdzOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBidXNpbmVzc1VuaXRUYWdzID0gcXVlc3Rpb25zVGFncy5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih0YWcgPT4gdGFnICE9IHVuZGVmaW5lZCAmJiB0YWcubGVuZ3RoID4gMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1c2luZXNzVW5pdFRhZ3M7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICA6IHRoaXMuJHEud2hlbihudWxsKTtcclxuXHJcbiAgICAgICAgbGV0IGxvYWRTeXN0ZW1UYWdzID0gdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0UXVlc3Rpb25zVGFncyhxdWl6SWQpXHJcbiAgICAgICAgICAgIC50aGVuKChxdWVzdGlvbnNUYWdzOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHN5c3RlbVRhZ3MgPSBxdWVzdGlvbnNUYWdzLnNwbGl0KFwiLFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIodGFnID0+IHRhZyAhPSB1bmRlZmluZWQgJiYgdGFnLmxlbmd0aCA+IDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5c3RlbVRhZ3M7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICBsb2FkQnVzaW5lc3NVbml0VGFncyxcclxuICAgICAgICAgICAgbG9hZFN5c3RlbVRhZ3NcclxuICAgICAgICBdKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNUYWdzID0gW107XHJcbiAgICAgICAgICAgIGJ1c2luZXNzVW5pdFRhZ3MuZm9yRWFjaCh0ID0+IHRoaXMucXVlc3Rpb25zVGFncy5wdXNoKHQpKTtcclxuICAgICAgICAgICAgc3lzdGVtVGFncy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25zVGFncy5pbmRleE9mKHQpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNUYWdzLnB1c2godCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmFyZVF1ZXN0aW9uc1RhZ3NMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNUYWdzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUXVpeigpIHtcclxuICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnF1aXpJZCAmJiB0aGlzLnF1aXouc3RhcnRlZCkge1xyXG4gICAgICAgICAgICBsZXQgZGlhbG9nTWVzc2FnZTtcclxuICAgICAgICAgICAgbGV0IGRpYWxvZ1RpdGxlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWl6LnF1aXpUeXBlID09IFF1aXpUeXBlW1F1aXpUeXBlLlFVSVpdKSB7XHJcbiAgICAgICAgICAgICAgICBkaWFsb2dUaXRsZSA9IFwiVXBkYXRlIHF1aXpcIjtcclxuICAgICAgICAgICAgICAgIGRpYWxvZ01lc3NhZ2UgPSBcIlNvbWUgdXNlcnMgaGF2ZSBhbHJlYWR5IGJlZ3VuIHBhc3NpbmcgdGhlIHF1aXouIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgaXQ/XCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWl6LnF1aXpUeXBlID09IFF1aXpUeXBlW1F1aXpUeXBlLlNVUlZFWV0pIHtcclxuICAgICAgICAgICAgICAgIGRpYWxvZ1RpdGxlID0gXCJVcGRhdGUgc3VydmV5XCI7XHJcbiAgICAgICAgICAgICAgICBkaWFsb2dNZXNzYWdlID0gXCJTb21lIHVzZXJzIGhhdmUgYWxyZWFkeSBiZWd1biBwYXNzaW5nIHRoZSBzdXJ2ZXkuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgaXQ/XCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWl6LnF1aXpUeXBlID09IFF1aXpUeXBlW1F1aXpUeXBlLkZMQVNIQ0FSRF0pIHtcclxuICAgICAgICAgICAgICAgIGRpYWxvZ1RpdGxlID0gXCJVcGRhdGUgZmxhc2hjYXJkXCI7XHJcbiAgICAgICAgICAgICAgICBkaWFsb2dNZXNzYWdlID0gXCJTb21lIHVzZXJzIGhhdmUgYWxyZWFkeSBiZWd1biBwYXNzaW5nIHRoZSBmbGFzaGNhcmQuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgaXQ/XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oZGlhbG9nTWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRpYWxvZ1RpdGxlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJZZXNcIixcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJOb1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnNhdmUoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWxsb3dOYXZpZ2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsUXVpeigpIHtcclxuICAgICAgICB0aGlzLmFsbG93TmF2aWdhdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUXVpekJyYW5jaGluZ0FsbG93ZWQoKSAmJiB0aGlzLnF1aXpRdWVzdGlvbnMuZmlsdGVyKHEgPT4gcS5wb2ludHMgPCAwKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBkaWFsb2dBcmd1bWVudHMgPSB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJJbmNvcnJlY3QgcG9pbnRzIG51bWJlclwiLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJPa1wiLFxyXG4gICAgICAgICAgICAgICAgaGlkZUNhbmNlbEJ1dHRvbjogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIlF1aXogY2Fubm90IGNvbnRhaW4gcXVlc3Rpb25zIHdpdGggMCBwb2ludHMgYmVjYXVzZSBjdXJyZW50IHNldHRpbmdzIGRvbid0IGFsbG93IGJyYW5jaGluZyBsb2dpYy5cIiwgZGlhbG9nQXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnF1aXpRdWVzdGlvbnNcclxuICAgICAgICAgICAgLmZpbHRlcihxdWVzdGlvbiA9PiBxdWVzdGlvbi50eXBlICE9IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuRklMTEFCTEVfRk9STV0pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKHF1ZXN0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbi5tYXRlcmlhbElkICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24ubWF0ZXJpYWxJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5oYXNTaG9ydE9yRmlsbEZvcm1BbnN3ZXIoKSB8fCB0aGlzLnF1aXpUeXBlID09IFF1aXpUeXBlW1F1aXpUeXBlLlNVUlZFWV0pIHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6LmNvcnJlY3RBbnN3ZXJzVHlwZSA9IFF1aXpDb3JyZWN0QW5zd2Vyc1R5cGVbUXVpekNvcnJlY3RBbnN3ZXJzVHlwZS5QT0lOVFNdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnF1aXoucXVlc3Rpb25zSW5BY2NvcmRhbmNlV2l0aFNlcXVlbmNlTnVtYmVyID0gIXRoaXMucXVlc3Rpb25PcmRlcjtcclxuICAgICAgICB0aGlzLmRlYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLndyaXRlSW5kZXhlcyh0aGlzLnF1aXpRdWVzdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuZmlsbFF1ZXN0aW9uc1RhZ3ModGhpcy5xdWl6UXVlc3Rpb25zKTtcclxuICAgICAgICB0aGlzLmZpbHRlclF1aXpFeHBsYW5hdGlvbnModGhpcy5xdWl6UXVlc3Rpb25zKTtcclxuICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IGZhbHNlO1xyXG4gICAgICAgIGFuZ3VsYXIuY29weSh0aGlzLnF1aXpRdWVzdGlvbnMsIHRoaXMucXVpei5xdWVzdGlvbnMpO1xyXG4gICAgICAgIGlmICh0aGlzLnF1aXpUeXBlID09IFwiUVVJWlwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpei5jb3JyZWN0QW5zd2Vyc051bWJlciA9IHRoaXMucXVpei5jb3JyZWN0QW5zd2Vyc1R5cGUgPT0gUXVpekVkaXRDb250cm9sbGVyLlBFUkNFTlRBR0VfVFlQRSA/IHRoaXMucGVyY2VudGFnZU51bWJlciA6IHRoaXMucG9pbnRzTnVtYmVyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpei5jb3JyZWN0QW5zd2Vyc051bWJlciA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcHJldmlldyA9IHRoaXMuY3JvcHBlZEltYWdlID8gdGhpcy5jcm9wcGVkSW1hZ2UgOiB0aGlzLnByZXZpZXdcclxuICAgICAgICBsZXQgcHJvbWlzZSA9IHRoaXMucXVpeklkXHJcbiAgICAgICAgICAgID8gdGhpcy5xdWl6U2VydmljZS51cGRhdGUodGhpcy5xdWl6LCB0aGlzLnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzLCB0aGlzLmlzUmVzZXRQcmV2aWV3LCBwcmV2aWV3KVxyXG4gICAgICAgICAgICA6IHRoaXMucXVpelNlcnZpY2UuY3JlYXRlKHRoaXMucXVpeiwgdGhpcy5wZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3Vwcyk7XHJcbiAgICAgICAgcHJvbWlzZS50aGVuKHF1aXogPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1aXpRdWVzdGlvbnMuZm9yRWFjaChvbGRRdWVzdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKG9sZFF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5GSUxMQUJMRV9GT1JNXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCBvbGRRdWVzdGlvbi50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuSE9UU1BPVF9TSU5HTEVfQ0hPSUNFXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCBvbGRRdWVzdGlvbi50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuSE9UU1BPVF9NVUxUSVBMRV9DSE9JQ0VdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRRdWVzdGlvbi5maWxlRm9ybSAgJiYgb2xkUXVlc3Rpb24uZmlsZUZvcm0ubmFtZSAmJiBvbGRRdWVzdGlvbi5maWxlRm9ybS5uYW1lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3UXVlc3Rpb24gPSBxdWl6LnF1ZXN0aW9ucy5maWx0ZXIocSA9PiBxLmluZGV4TnVtYmVyID09IG9sZFF1ZXN0aW9uLmluZGV4TnVtYmVyKVswXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEF0dGFjaGVkRmlsZShvbGRRdWVzdGlvbi5maWxlRm9ybSwgcXVpei5pZCwgbmV3UXVlc3Rpb24uaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc3RvcmFnZS5ub3QuYXZhaWxhYmxlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkF0dGFjaG1lbnQgdXBsb2FkaW5nIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAocHJldmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZChwcmV2aWV3LCBxdWl6LmlkLCBcInByZXZpZXdcIikudGhlbihyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdWNjZXNzQ2FsbGJhY2socXVpeik7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5zdG9yYWdlLm5vdC5hdmFpbGFibGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIk5vIGF2YWlsYWJsZSBzdG9yYWdlLiBUaHVtYm5haWwgaGFzIG5vdCBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnByZXZpZXcudHlwZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiSW52YWxpZCBmaWxlIGZvcm1hdC4gUGxlYXNlIHNlbGVjdCBhIGZpbGUgd2l0aCAuanBnIG9yIC5wbmcgZXh0ZW5zaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdWNjZXNzQ2FsbGJhY2socXVpeik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IuZ2VuZXJhdGUuZnJvbS5iYW5rLnBvaW50cy5zY29yaW5nLnR5cGVcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgICAgICAgICAgICAgICAgXCJBIHF1aXogY2FuIG5vdCBoYXZlIGJvdGggYSAnR2VuZXJhdGUgcXVpeiBmcm9tIHRoZSBxdWVzdGlvbnMgYmFuaycgaXMgT04gYW5kIGEgcXVlc3Rpb24gd2l0aCB0eXBlIFNob3J0IGFuc3dlciBvciBGaWxsYWJsZSBmb3JtLiBQbGVhc2UgY2hhbmdlIHRoZSBxdWl6XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiSW5jb3JyZWN0IHF1aXogcGFyYW1ldGVyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIk9rXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29weVF1aXooKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiRG8geW91IHdhbnQgdG8gY29weSB0aGUgcXVpej9cIiwge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJDb3B5IHF1aXpcIixcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucXVpeklkKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiQ29weWluZyBvZiB0aGUgcXVpeiBoYXMgYmVlbiBzdGFydGVkLiBUaGUgbmV3IHF1aXogcGFnZSB3aWxsIGJlIG9wZW5lZCBhdXRvbWF0aWNhbGx5IHdoZW4gY29weWluZyBpcyBjb21wbGV0ZS4gRG8gbm90IGxlYXZlIHRoaXMgcGFnZVwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpelNlcnZpY2UuY29weSh0aGlzLnF1aXpJZClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCIgQSBjb3B5IG9mIDpxdWl6X25hbWUgaGFzIGJlZW4gY3JlYXRlZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6cXVpel9uYW1lXCIsIHRoaXMucXVpei50aXRsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dOYXZpZ2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzVXBkYXRlVXJsKHJlc3VsdC5pZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd05hdmlnYXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnN0b3JhZ2Uubm90LmF2YWlsYWJsZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiTm8gYXZhaWxhYmxlIHN0b3JhZ2UuIFRodW1ibmFpbCBoYXMgbm90IGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IucHJldmlldy50eXBlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJbnZhbGlkIGZpbGUgZm9ybWF0LiBQbGVhc2Ugc2VsZWN0IGEgZmlsZSB3aXRoIC5qcGcgb3IgLnBuZyBleHRlbnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29weVN1cnZleSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXCJEbyB5b3Ugd2FudCB0byBjb3B5IHRoZSBzdXJ2ZXk/XCIsIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiQ29weSBzdXJ2ZXlcIixcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdXR0b24gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucXVpeklkKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiQ29weWluZyBvZiB0aGUgc3VydmV5IGhhcyBiZWVuIHN0YXJ0ZWQuIFRoZSBuZXcgc3VydmV5IHBhZ2Ugd2lsbCBiZSBvcGVuZWQgYXV0b21hdGljYWxseSB3aGVuIGNvcHlpbmcgaXMgY29tcGxldGUuIERvIG5vdCBsZWF2ZSB0aGlzIHBhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXpTZXJ2aWNlLmNvcHkodGhpcy5xdWl6SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiIEEgY29weSBvZiA6cXVpel9uYW1lIGhhcyBiZWVuIGNyZWF0ZWRcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOnF1aXpfbmFtZVwiLCB0aGlzLnF1aXoudGl0bGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93TmF2aWdhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnF1aXp6ZXNSb3V0ZXIuc3VydmV5c1VwZGF0ZVVybChyZXN1bHQuaWQpKTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dOYXZpZ2F0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5zdG9yYWdlLm5vdC5hdmFpbGFibGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIk5vIGF2YWlsYWJsZSBzdG9yYWdlLiBUaHVtYm5haWwgaGFzIG5vdCBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnByZXZpZXcudHlwZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiSW52YWxpZCBmaWxlIGZvcm1hdC4gUGxlYXNlIHNlbGVjdCBhIGZpbGUgd2l0aCAuanBnIG9yIC5wbmcgZXh0ZW5zaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvcHlGbGFzaGNhcmQoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFwiRG8geW91IHdhbnQgdG8gY29weSB0aGUgZmxhc2hjYXJkP1wiLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkNvcHkgZmxhc2hjYXJkXCIsXHJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1aXpJZCkge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIkNvcHlpbmcgb2YgdGhlIGZsYXNoY2FyZCBoYXMgYmVlbiBzdGFydGVkLiBUaGUgbmV3IGZsYXNoY2FyZCBwYWdlIHdpbGwgYmUgb3BlbmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBjb3B5aW5nIGlzIGNvbXBsZXRlLiBEbyBub3QgbGVhdmUgdGhpcyBwYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6U2VydmljZS5jb3B5KHRoaXMucXVpeklkKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIiBBIGNvcHkgb2YgOnF1aXpfbmFtZSBoYXMgYmVlbiBjcmVhdGVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpxdWl6X25hbWVcIiwgdGhpcy5xdWl6LnRpdGxlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd05hdmlnYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLmZsYXNoY2FyZHNVcGRhdGVVcmwocmVzdWx0LmlkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93TmF2aWdhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc3RvcmFnZS5ub3QuYXZhaWxhYmxlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZS4gVGh1bWJuYWlsIGhhcyBub3QgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5wcmV2aWV3LnR5cGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkludmFsaWQgZmlsZSBmb3JtYXQuIFBsZWFzZSBzZWxlY3QgYSBmaWxlIHdpdGggLmpwZyBvciAucG5nIGV4dGVuc2lvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc1N1Y2Nlc3NDYWxsYmFjayhxdWl6OiBJUXVpeik6IHZvaWQge1xyXG4gICAgICAgIGlmIChxdWl6LnF1aXpUeXBlID09ICdRVUlaJykge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBxdWl6IGlzIHN1Y2Nlc3NmdWxseSBzYXZlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzRGV0YWlsc1VybChxdWl6LmlkKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChxdWl6LnF1aXpUeXBlID09ICdTVVJWRVknKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVNYWluQ29udGVudCgpO1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVGhlIHN1cnZleSBpcyBzdWNjZXNzZnVsbHkgc2F2ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnF1aXp6ZXNSb3V0ZXIuc3VydmV5c0RldGFpbHNVcmwocXVpei5pZCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocXVpei5xdWl6VHlwZSA9PSAnRkxBU0hDQVJEJykge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlTWFpbkNvbnRlbnQoKTtcclxuICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlRoZSBmbGFzaGNhcmQgaXMgc3VjY2Vzc2Z1bGx5IHNhdmVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLmZsYXNoY2FyZHNEZXRhaWxzVXJsKHF1aXouaWQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGxvYWQoZmlsZTogRmlsZSwgcXVpeklkOiBudW1iZXIsIGZpbGVUeXBlOiBzdHJpbmcpOiBhbmd1bGFyLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRQcm9taXNlPEZpbGU+IHtcclxuICAgICAgICBsZXQgdXJsQnVpbGRlciA9IHRoaXMudXJsLmJhc2UoXCIvYXBpL3F1aXp6ZXMvdXBsb2FkP3F1aXpJZD06cXVpeklkJmZpbGVUeXBlPTpmaWxlVHlwZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cXVpeklkXCIsIHF1aXpJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmZpbGVUeXBlXCIsIGZpbGVUeXBlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGFuZ3VsYXIuY29weSh1cmxCdWlsZGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBsb2FkQXR0YWNoZWRGaWxlKGZpbGU6IEZpbGUsIHF1aXpJZDogbnVtYmVyLCBxdWVzdGlvbklkOiBudW1iZXIpOiBhbmd1bGFyLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRQcm9taXNlPEZpbGU+IHtcclxuICAgICAgICBsZXQgdXJsQnVpbGRlciA9IHRoaXMudXJsLmJhc2UoXCIvYXBpL3F1aXp6ZXMvdXBsb2FkQXR0YWNoZWRGaWxlP3F1aXpJZD06cXVpeklkJnF1ZXN0aW9uSWQ9OnF1ZXN0aW9uSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnF1aXpJZFwiLCBxdWl6SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpxdWVzdGlvbklkXCIsIHF1ZXN0aW9uSWQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiR1cGxvYWRlci51cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgIHVybDogYW5ndWxhci5jb3B5KHVybEJ1aWxkZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNlcnZpY2UoKSxcclxuICAgICAgICAgICAgICAgIGZpbGU6IGZpbGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0T3JDbGVhckZpZWxkcygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5xdWl6SWQpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzRGV0YWlsc1VybCh0aGlzLnF1aXpJZCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYW5GaWVsZHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhbkZpZWxkcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnF1aXogPSB7fTtcclxuICAgICAgICB0aGlzLmxvYWRQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhTZWN1cmVkT2JqZWN0VHlwZS5RVUlaKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJDdXJyZW50UXVlc3Rpb25GaWVsZHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblRhYk5hbWUgPSBcIkFkZCBhIHF1ZXN0aW9uXCI7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24gPSB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXHJcbiAgICAgICAgICAgIHR5cGU6IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuTVVMVElQTEVfQ0hPSUNFX1NJTkdMRV9BTlNXRVJdLFxyXG4gICAgICAgICAgICBhbnN3ZXJzOiBbXSxcclxuICAgICAgICAgICAgZXhwbGFuYXRpb25zOiBbXSxcclxuICAgICAgICAgICAgc2hvcnRBbnN3ZXJNYXhMZW5ndGg6IG51bGwsXHJcbiAgICAgICAgICAgIHBvaW50czogMSxcclxuICAgICAgICAgICAgaXNFcnJvckZpbGVGb3JtYXQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5xdWl6LnF1aXpUeXBlID09PSBRdWl6VHlwZVtRdWl6VHlwZS5GTEFTSENBUkRdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLnR5cGUgPSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkZMQVNIX0NBUkRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRBbnN3ZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24ucXVlc3Rpb25Db2RlID0gXCJRXCIgKyAodGhpcy5xdWl6UXVlc3Rpb25zLmxlbmd0aCArIDEpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEV4cGxhbmF0aW9ucyA9IFt7ZXhwbGFuYXRpb246IFwiXCJ9XTtcclxuICAgICAgICB0aGlzLmlzRWRpdFF1ZXN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0UXVlc3Rpb25JbmRleCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJUeXBlID0gXCJtdWx0aXBsZS1jaG9pY2Utc2luZ2xlLWFuc3dlclwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FsbFF1aXpRdWVzdGlvbnNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6UXVlc3Rpb25zLmxlbmd0aCA+IDBcclxuICAgICAgICAmJiB0aGlzLnF1aXpRdWVzdGlvbnMuZXZlcnkocSA9PlxyXG4gICAgICAgICAgICB0aGlzLmlzTWF0Y2hpbmdRdWVzdGlvblZhbGlkKHEpXHJcbiAgICAgICAgICAgIHx8IHRoaXMuaXNTaG9ydEFuc3dlclF1ZXN0aW9uVmFsaWQocSlcclxuICAgICAgICAgICAgfHwgdGhpcy5pc1NpbmdsZUNob2ljZVF1ZXN0aW9uVmFsaWQocSlcclxuICAgICAgICAgICAgfHwgdGhpcy5pc011bHRpcGxlQ2hvaWNlUXVlc3Rpb25WYWxpZChxKVxyXG4gICAgICAgICAgICB8fCB0aGlzLmlzRmlsbEluVGhlQmxhbmtRdWVzdGlvblZhbGlkKHEpXHJcbiAgICAgICAgICAgIHx8IHRoaXMuaXNGaWxsYWJsZUZvcm1RdWVzdGlvblZhbGlkKHEpXHJcbiAgICAgICAgICAgIHx8IHRoaXMuaXNGbGFzaGNhcmRWYWxpZChxKVxyXG4gICAgICAgICAgICB8fCB0aGlzLmlzU2NhbGVRdWVzdGlvblZhbGlkKHEpXHJcbiAgICAgICAgICAgIHx8IHRoaXMuaXNIb3RzcG90UXVlc3Rpb25WYWxpZChxKVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzU2NhbGVRdWVzdGlvblZhbGlkKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTY2FsZWRBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb24pXHJcbiAgICAgICAgICAgICYmIHF1ZXN0aW9uLnRleHQgIT0gXCJcIiAmJiBxdWVzdGlvbi5hbnN3ZXJzLmV2ZXJ5KGEgPT4gYS50ZXh0ICE9IFwiXCIpXHJcbiAgICAgICAgICAgICYmIHF1ZXN0aW9uLmFuc3dlcnMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzRmxhc2hjYXJkVmFsaWQocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0ZsYXNoY2FyZFF1ZXN0aW9uVHlwZShxdWVzdGlvbilcclxuICAgICAgICAgICAgJiYgcXVlc3Rpb24uZXhwbGFuYXRpb25zWzBdICE9IG51bGxcclxuICAgICAgICAgICAgJiYgcXVlc3Rpb24uZXhwbGFuYXRpb25zWzBdICE9IFwiXCJcclxuICAgICAgICAgICAgJiYgcXVlc3Rpb24udGV4dCAhPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNNYXRjaGluZ1F1ZXN0aW9uVmFsaWQocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuaXNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxdWVzdGlvbikgfHwgdGhpcy5pc0hpZGluZ09wdGlvbnNNYXRjaGluZ1F1ZXN0aW9uVHlwZShxdWVzdGlvbikpXHJcbiAgICAgICAgICAgICYmIHF1ZXN0aW9uLnRleHQgIT0gXCJcIlxyXG4gICAgICAgICAgICAmJiBxdWVzdGlvbi5hbnN3ZXJzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgJiYgcXVlc3Rpb24uYW5zd2Vycy5ldmVyeShhID0+IGEudGV4dCAhPSBcIlwiICYmIGEub3B0aW9uICYmIGEub3B0aW9uICE9IFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNTaG9ydEFuc3dlclF1ZXN0aW9uVmFsaWQocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuaXNTaG9ydEFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbilcclxuICAgICAgICAgICAgfHwgdGhpcy5pc1Nob3J0QW5zd2VyQXVkaW9SZXNwb25zZVF1ZXN0aW9uVHlwZShxdWVzdGlvbilcclxuICAgICAgICAgICAgfHwgdGhpcy5pc1Nob3J0QW5zd2VyV2l0aFVwbG9hZFF1ZXN0aW9uVHlwZShxdWVzdGlvbikpXHJcbiAgICAgICAgICAgICYmIHF1ZXN0aW9uLnRleHQgIT0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzU2luZ2xlQ2hvaWNlUXVlc3Rpb25WYWxpZChxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzTXVsdGlwbGVDaG9pY2VTaW5nbGVBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb24pXHJcbiAgICAgICAgJiYgcXVlc3Rpb24udGV4dCAhPSBcIlwiXHJcbiAgICAgICAgJiYgcXVlc3Rpb24uYW5zd2Vycy5sZW5ndGggPiAwXHJcbiAgICAgICAgJiYgcXVlc3Rpb24uYW5zd2Vycy5ldmVyeShhID0+IGEudGV4dCAhPSBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTXVsdGlwbGVDaG9pY2VRdWVzdGlvblZhbGlkKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNdWx0aXBsZUNob2ljZU11bHRpcGxlQW5zd2VyUXVlc3Rpb25UeXBlKHF1ZXN0aW9uKVxyXG4gICAgICAgICAgICAmJiBxdWVzdGlvbi50ZXh0ICE9IFwiXCJcclxuICAgICAgICAgICAgJiYgcXVlc3Rpb24uYW5zd2Vycy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICYmIHF1ZXN0aW9uLmFuc3dlcnMuZXZlcnkoYSA9PiBhLnRleHQgIT0gXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0ZpbGxJblRoZUJsYW5rUXVlc3Rpb25WYWxpZChxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzRmlsbEluVGhlQmxhbmtRdWVzdGlvblR5cGUocXVlc3Rpb24pXHJcbiAgICAgICAgICAgICYmIHF1ZXN0aW9uLnRleHQgIT0gXCJcIlxyXG4gICAgICAgICAgICAmJiBxdWVzdGlvbi5hbnN3ZXJzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgJiYgcXVlc3Rpb24uYW5zd2Vycy5ldmVyeShhID0+IGEudGV4dCAhPSBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzRmlsbGFibGVGb3JtUXVlc3Rpb25WYWxpZChxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzRmlsbGFibGVGb3JtUXVlc3Rpb25UeXBlKHF1ZXN0aW9uKVxyXG4gICAgICAgICAgICAmJiBxdWVzdGlvbi50ZXh0ICE9IFwiXCJcclxuICAgICAgICAgICAgJiYgcXVlc3Rpb24ubWF0ZXJpYWxOYW1lXHJcbiAgICAgICAgICAgICYmIHF1ZXN0aW9uLm1hdGVyaWFsTmFtZSAhPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNIb3RzcG90UXVlc3Rpb25WYWxpZChxdWVzdGlvbjogSVF1aXpRdWVzdGlvbkV4dGVuZGVkKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmlzSG90c3BvdFNpbmdsZUNob2ljZVF1ZXN0aW9uVHlwZShxdWVzdGlvbikgfHwgdGhpcy5pc0hvdHNwb3RNdWx0aXBsZUNob2ljZVF1ZXN0aW9uVHlwZShxdWVzdGlvbikpXHJcbiAgICAgICAgICAgICYmIHF1ZXN0aW9uLnRleHQgJiYgcXVlc3Rpb24udGV4dC5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICYmIChxdWVzdGlvbi5maWxlRm9ybSAhPT0gbnVsbCAmJiBxdWVzdGlvbi5maWxlRm9ybSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB8fCBxdWVzdGlvbi5hdHRhY2hlZEZpbGVVcmwgIT09IG51bGwgJiYgcXVlc3Rpb24uYXR0YWNoZWRGaWxlVXJsICE9PSB1bmRlZmluZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50UXVlc3Rpb25WYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlc3Rpb24udGV4dCAhPSBcIlwiICYmIHRoaXMuY3VycmVudEFuc3dlcnMuZXZlcnkoYSA9PiBhLnRleHQgIT0gXCJcIilcclxuICAgICAgICAgICAgJiYgdGhpcy5jdXJyZW50QW5zd2VycyAmJiB0aGlzLmN1cnJlbnRBbnN3ZXJzLmZpbHRlcigoYTogSVF1aXpBbnN3ZXIpID0+IGEuaXNDb3JyZWN0KS5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICYmIHRoaXMuaXNRdWl6KClcclxuICAgICAgICAgICAgfHwgdGhpcy5jdXJyZW50UXVlc3Rpb24udGV4dCAhPSBcIlwiXHJcbiAgICAgICAgICAgICYmICh0aGlzLmlzU2hvcnRBbnN3ZXJRdWVzdGlvblR5cGUodGhpcy5jdXJyZW50UXVlc3Rpb24pXHJcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmlzU2hvcnRBbnN3ZXJBdWRpb1Jlc3BvbnNlUXVlc3Rpb25UeXBlKHRoaXMuY3VycmVudFF1ZXN0aW9uKVxyXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5pc1Nob3J0QW5zd2VyV2l0aFVwbG9hZFF1ZXN0aW9uVHlwZSh0aGlzLmN1cnJlbnRRdWVzdGlvbilcclxuICAgICAgICAgICAgICAgIHx8ICh0aGlzLmlzRmxhc2hjYXJkUXVlc3Rpb25UeXBlKHRoaXMuY3VycmVudFF1ZXN0aW9uKSAmJiB0aGlzLmN1cnJlbnRFeHBsYW5hdGlvbnNbMF0gIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuY3VycmVudEV4cGxhbmF0aW9uc1swXS5leHBsYW5hdGlvbiAhPSBcIlwiKSlcclxuICAgICAgICAgICAgfHwgdGhpcy5jdXJyZW50UXVlc3Rpb24udGV4dCAhPSBcIlwiICYmIHRoaXMuY3VycmVudEFuc3dlcnMuZXZlcnkoYSA9PiBhLnRleHQgIT0gXCJcIilcclxuICAgICAgICAgICAgJiYgdGhpcy5jdXJyZW50QW5zd2Vycy5sZW5ndGggPiAwICYmICF0aGlzLmlzUXVpeigpXHJcbiAgICAgICAgICAgIHx8IHRoaXMuaXNGaWxsSW5UaGVCbGFua1F1ZXN0aW9uVHlwZSh0aGlzLmN1cnJlbnRRdWVzdGlvbilcclxuICAgICAgICAgICAgJiYgdGhpcy5jdXJyZW50QW5zd2Vycy5sZW5ndGggPiAwICYmIHRoaXMuY3VycmVudEFuc3dlcnMuZXZlcnkoYSA9PiBhLnRleHQgIT0gXCJcIilcclxuICAgICAgICAgICAgfHwgKHRoaXMuaXNNYXRjaGluZ1F1ZXN0aW9uVHlwZSh0aGlzLmN1cnJlbnRRdWVzdGlvbikgfHwgdGhpcy5pc0hpZGluZ09wdGlvbnNNYXRjaGluZ1F1ZXN0aW9uVHlwZSh0aGlzLmN1cnJlbnRRdWVzdGlvbikpXHJcbiAgICAgICAgICAgICYmIHRoaXMuY3VycmVudFF1ZXN0aW9uLnRleHQgIT0gXCJcIlxyXG4gICAgICAgICAgICAmJiB0aGlzLmN1cnJlbnRBbnN3ZXJzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgJiYgdGhpcy5jdXJyZW50QW5zd2Vycy5ldmVyeShhID0+IGEudGV4dCAhPSBcIlwiICYmIGEub3B0aW9uICYmIGEub3B0aW9uICE9IFwiXCIpXHJcbiAgICAgICAgICAgIHx8IHRoaXMuaXNGaWxsYWJsZUZvcm1RdWVzdGlvblR5cGUodGhpcy5jdXJyZW50UXVlc3Rpb24pXHJcbiAgICAgICAgICAgICYmIHRoaXMuY3VycmVudFF1ZXN0aW9uLnRleHQgJiYgdGhpcy5jdXJyZW50UXVlc3Rpb24udGV4dC5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICYmIHRoaXMuY3VycmVudFF1ZXN0aW9uLm1hdGVyaWFsTmFtZSAmJiB0aGlzLmN1cnJlbnRRdWVzdGlvbi5tYXRlcmlhbE5hbWUubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAmJiAhdGhpcy5jdXJyZW50UXVlc3Rpb24uaXNFcnJvckZpbGVGb3JtYXRcclxuICAgICAgICAgICAgfHwgKHRoaXMuaXNIb3RzcG90U2luZ2xlQ2hvaWNlUXVlc3Rpb25UeXBlKHRoaXMuY3VycmVudFF1ZXN0aW9uKSB8fCB0aGlzLmlzSG90c3BvdE11bHRpcGxlQ2hvaWNlUXVlc3Rpb25UeXBlKHRoaXMuY3VycmVudFF1ZXN0aW9uKSlcclxuICAgICAgICAgICAgJiYgdGhpcy5jdXJyZW50UXVlc3Rpb24udGV4dCAmJiB0aGlzLmN1cnJlbnRRdWVzdGlvbi50ZXh0Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgJiYgKHRoaXMuY3VycmVudFF1ZXN0aW9uLmZpbGVGb3JtICE9PSBudWxsICYmIHRoaXMuY3VycmVudFF1ZXN0aW9uLmZpbGVGb3JtICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIHx8IHRoaXMuY3VycmVudFF1ZXN0aW9uLmF0dGFjaGVkRmlsZVVybCAhPT0gbnVsbCAmJiB0aGlzLmN1cnJlbnRRdWVzdGlvbi5hdHRhY2hlZEZpbGVVcmwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgJiYgdGhpcy5jdXJyZW50UXVlc3Rpb24uaXNRdWVzdGlvblZhbGlkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja0N1cnJlbnRDb3JyZWN0QW5zd2VyKGFuc3dlcjogSVF1aXpBbnN3ZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBbnN3ZXJzLmZvckVhY2goKGE6IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgIGEuaXNDb3JyZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYW5zd2VyLmlzQ29ycmVjdCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRRdWVzdGlvbihpbmRleDogbnVtYmVyLCBxdWVzdGlvbjogSVF1aXpRdWVzdGlvbkV4dGVuZGVkKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblRhYk5hbWUgPSBcIkVkaXQgcXVlc3Rpb25cIjtcclxuICAgICAgICB0aGlzLmZvY3VzT25FbGVtZW50KFwidGV4dE5ld1F1ZXN0aW9uXCIpO1xyXG4gICAgICAgIGFuZ3VsYXIuY29weShxdWVzdGlvbiwgdGhpcy5jdXJyZW50UXVlc3Rpb24pO1xyXG4gICAgICAgIGlmKHF1ZXN0aW9uLmZpbGVGb3JtICYmIHF1ZXN0aW9uLmZpbGVGb3JtICE9IDxGaWxlPnt9KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLmZpbGVGb3JtID0gcXVlc3Rpb24uZmlsZUZvcm07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFuZ3VsYXIuY29weShxdWVzdGlvbi5hbnN3ZXJzLCB0aGlzLmN1cnJlbnRBbnN3ZXJzKTtcclxuICAgICAgICB0aGlzLnNldEFuc3dlclR5cGUocXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMuc2V0QW5zd2VyU3VidHlwZShxdWVzdGlvbik7XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmV4cGxhbmF0aW9ucyAhPSBudWxsICYmIHF1ZXN0aW9uLmV4cGxhbmF0aW9ucy5maWx0ZXIoZSA9PiBlLmFuc3dlcklkID09IG51bGwpLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShxdWVzdGlvbi5leHBsYW5hdGlvbnMsIHRoaXMuY3VycmVudEV4cGxhbmF0aW9ucyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RXhwbGFuYXRpb25zID0gW3tleHBsYW5hdGlvbjogXCJcIn1dO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5hbnN3ZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24uZXhwbGFuYXRpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5pc0VkaXRRdWVzdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lZGl0UXVlc3Rpb25JbmRleCA9IGluZGV4O1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGlkaW5nT3B0aW9uc01hdGNoaW5nUXVlc3Rpb25UeXBlKHF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGNoaW5nT3B0aW9uc0hpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTWF0Y2hpbmdRdWVzdGlvblR5cGUocXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0Y2hpbmdPcHRpb25zSGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRmlsbGFibGVGb3JtUXVlc3Rpb25UeXBlKHF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxhYmxlRm9ybVNob3dpbmdJblBvcFVwID0gcXVlc3Rpb24uc2hvd0FzUG9wVXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRBbnN3ZXJUb1F1ZXN0aW9uKCkge1xyXG4gICAgICAgIGxldCBhbnN3ZXI6IElRdWl6QW5zd2VyID0ge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxyXG4gICAgICAgICAgICBpc0NvcnJlY3Q6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLk1VTFRJUExFX0NIT0lDRV9TSU5HTEVfQU5TV0VSXSkge1xyXG4gICAgICAgICAgICBhbnN3ZXIubmV4dFF1ZXN0aW9uVHlwZSA9IE5leHRRdWVzdGlvblR5cGVbTmV4dFF1ZXN0aW9uVHlwZS5ORVhUX1FVRVNUSU9OXTtcclxuICAgICAgICAgICAgYW5zd2VyLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gdGhpcy5ORVhUX1FVRVNUSU9OX1NFUVVFTkNFX05VTUJFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QW5zd2Vycy5wdXNoKGFuc3dlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUFuc3dlckZyb21RdWVzdGlvbihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QW5zd2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRRdWVzdGlvblRvUXVpeigpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uVGFiTmFtZSA9IFwiQWRkIGEgcXVlc3Rpb25cIjtcclxuICAgICAgICBhbmd1bGFyLmNvcHkodGhpcy5jdXJyZW50QW5zd2VycywgdGhpcy5jdXJyZW50UXVlc3Rpb24uYW5zd2Vycyk7XHJcbiAgICAgICAgYW5ndWxhci5jb3B5KHRoaXMuY3VycmVudEV4cGxhbmF0aW9ucywgdGhpcy5jdXJyZW50UXVlc3Rpb24uZXhwbGFuYXRpb25zKTtcclxuICAgICAgICBpZiAoaXNOYU4odGhpcy5jdXJyZW50UXVlc3Rpb24uc2hvcnRBbnN3ZXJNYXhMZW5ndGgpIHx8IHRoaXMuY3VycmVudFF1ZXN0aW9uLnNob3J0QW5zd2VyTWF4TGVuZ3RoID4gNDAwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5zaG9ydEFuc3dlck1heExlbmd0aCA9IDQwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbi5wb2ludHMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5wb2ludHMgPSB0aGlzLmlzUXVpekJyYW5jaGluZ0FsbG93ZWQoKSAmJiB0aGlzLmN1cnJlbnRRdWVzdGlvbi50eXBlID09ICdNVUxUSVBMRV9DSE9JQ0VfU0lOR0xFX0FOU1dFUicgPyAwIDogMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0UXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25zLnNwbGljZSh0aGlzLmVkaXRRdWVzdGlvbkluZGV4LCAxLCB0aGlzLmN1cnJlbnRRdWVzdGlvbilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5pbmRleE51bWJlciA9IHRoaXMucXVpelF1ZXN0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMucXVpelF1ZXN0aW9ucy5wdXNoKHRoaXMuY3VycmVudFF1ZXN0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb24ucXVlc3Rpb25Db2RlID09IFwiXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24ucXVlc3Rpb25Db2RlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGaWxsYWJsZUZvcm1RdWVzdGlvblR5cGUodGhpcy5jdXJyZW50UXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLnNob3dBc1BvcFVwID0gdGhpcy5maWxsYWJsZUZvcm1TaG93aW5nSW5Qb3BVcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jbGVhckN1cnJlbnRRdWVzdGlvbkZpZWxkcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVRdWVzdGlvbkZyb21RdWl6KGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnF1aXpRdWVzdGlvbnNcclxuICAgICAgICAgICAgLmZvckVhY2gocXVlc3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5NVUxUSVBMRV9DSE9JQ0VfU0lOR0xFX0FOU1dFUl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5hbnN3ZXJzLmZvckVhY2goKGFuc3dlcjogSVF1aXpBbnN3ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5uZXh0UXVlc3Rpb25UeXBlID09IE5leHRRdWVzdGlvblR5cGVbTmV4dFF1ZXN0aW9uVHlwZS5TUEVDSUZJRURfUVVFU1RJT05dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID09IGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyLm5leHRRdWVzdGlvblR5cGUgPSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuTkVYVF9RVUVTVElPTl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gdGhpcy5ORVhUX1FVRVNUSU9OX1NFUVVFTkNFX05VTUJFUjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID4gaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXIubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXItLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uVHlwZSA9PSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuU1BFQ0lGSUVEX1FVRVNUSU9OXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPT0gaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLm5leHRRdWVzdGlvblR5cGUgPSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuTkVYVF9RVUVTVElPTl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5uZXh0UXVlc3Rpb25TZXF1ZW5jZU51bWJlciA9IHRoaXMuTkVYVF9RVUVTVElPTl9TRVFVRU5DRV9OVU1CRVI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPiBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24ubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXItLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25zXHJcbiAgICAgICAgICAgIC5maWx0ZXIocXVlc3Rpb24gPT4gcXVlc3Rpb24uaW5kZXhOdW1iZXIgPiBpbmRleClcclxuICAgICAgICAgICAgLmZvckVhY2gocXVlc3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24uaW5kZXhOdW1iZXItLTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1Nob3J0T3JGaWxsRm9ybUFuc3dlcigpICYmIHRoaXMucXVpei5nZW5lcmF0ZUZyb21CYW5rKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpei5jb3JyZWN0QW5zd2Vyc1R5cGUgPSBRdWl6Q29ycmVjdEFuc3dlcnNUeXBlW1F1aXpDb3JyZWN0QW5zd2Vyc1R5cGUuUEVSQ0VOVEFHRV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgd3JpdGVJbmRleGVzKHF1ZXN0aW9uczogQXJyYXk8SVF1aXpRdWVzdGlvbj4pOiB2b2lkIHtcclxuICAgICAgICBxdWVzdGlvbnMuZm9yRWFjaCgocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pID0+IHtcclxuICAgICAgICAgICAgcXVlc3Rpb24uYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXI6IElRdWl6QW5zd2VyKSA9PiBhbnN3ZXIuaW5kZXhOdW1iZXIgPSBxdWVzdGlvbi5hbnN3ZXJzLmluZGV4T2YoYW5zd2VyKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaWxsUXVlc3Rpb25zVGFncyhxdWVzdGlvbnM6IEFycmF5PElRdWl6UXVlc3Rpb24+KTogdm9pZCB7XHJcbiAgICAgICAgcXVlc3Rpb25zLmZvckVhY2goKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLnRhZ3MgPSAocXVlc3Rpb24udGFnc0xpc3QgJiYgcXVlc3Rpb24udGFnc0xpc3QubGVuZ3RoID4gMCkgPyBxdWVzdGlvbi50YWdzTGlzdC5qb2luKCcsJykgOiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsdGVyUXVpekV4cGxhbmF0aW9ucyhxdWVzdGlvbnM6IEFycmF5PElRdWl6UXVlc3Rpb24+KTogdm9pZCB7XHJcbiAgICAgICAgcXVlc3Rpb25zLmZvckVhY2goKHE6IElRdWl6UXVlc3Rpb24pID0+IHtcclxuICAgICAgICAgICAgcS5leHBsYW5hdGlvbnMgPSBxLmV4cGxhbmF0aW9ucy5maWx0ZXIoZSA9PiBlLmV4cGxhbmF0aW9uLmxlbmd0aCA+IDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRRdWl6UG9pbnRzU3VtKCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHN1bSA9IDA7XHJcbiAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25zLmZvckVhY2goKHE6IElRdWl6UXVlc3Rpb24pID0+IHtcclxuICAgICAgICAgICAgc3VtICs9IHEucG9pbnRzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBzdW07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1vdmVRdWVzdGlvblVwKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGxhY2Vob2xkZXIgPSB7fTtcclxuICAgICAgICBsZXQgcXVlc3Rpb25Ub01vdmUgPSB0aGlzLnF1aXpRdWVzdGlvbnMuc3BsaWNlKGluZGV4LCAxLCBwbGFjZWhvbGRlcilbMF07XHJcblxyXG4gICAgICAgIHRoaXMucXVpelF1ZXN0aW9ucy5zcGxpY2UoaW5kZXggLSAxLCAwLCBxdWVzdGlvblRvTW92ZSk7XHJcbiAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25zLnNwbGljZSh0aGlzLnF1aXpRdWVzdGlvbnMuaW5kZXhPZihwbGFjZWhvbGRlciksIDEpO1xyXG5cclxuICAgICAgICBsZXQgb2xkU2VxdWVuY2VOdW1iZXIgPSBxdWVzdGlvblRvTW92ZS5pbmRleE51bWJlcjtcclxuICAgICAgICBsZXQgbmV3U2VxdWVuY2VOdW1iZXIgPSBxdWVzdGlvblRvTW92ZS5pbmRleE51bWJlciAtIDE7XHJcbiAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25zXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKHF1ZXN0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuTVVMVElQTEVfQ0hPSUNFX1NJTkdMRV9BTlNXRVJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24uYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXI6IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIubmV4dFF1ZXN0aW9uVHlwZSA9PSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuU1BFQ0lGSUVEX1FVRVNUSU9OXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5uZXh0UXVlc3Rpb25TZXF1ZW5jZU51bWJlciA9PSBvbGRTZXF1ZW5jZU51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlci5uZXh0UXVlc3Rpb25TZXF1ZW5jZU51bWJlciA9IG5ld1NlcXVlbmNlTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPT0gbmV3U2VxdWVuY2VOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXIubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPSBvbGRTZXF1ZW5jZU51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uVHlwZSA9PSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuU1BFQ0lGSUVEX1FVRVNUSU9OXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPT0gb2xkU2VxdWVuY2VOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gbmV3U2VxdWVuY2VOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPT0gbmV3U2VxdWVuY2VOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gb2xkU2VxdWVuY2VOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBxdWVzdGlvblRvTW92ZS5pbmRleE51bWJlci0tO1xyXG4gICAgICAgIHRoaXMucXVpelF1ZXN0aW9uc1t0aGlzLnF1aXpRdWVzdGlvbnMuaW5kZXhPZihxdWVzdGlvblRvTW92ZSkgKyAxXS5pbmRleE51bWJlcisrO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlUXVlc3Rpb25Eb3duKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGxhY2Vob2xkZXIgPSB7fTtcclxuICAgICAgICBsZXQgcXVlc3Rpb25Ub01vdmUgPSB0aGlzLnF1aXpRdWVzdGlvbnMuc3BsaWNlKGluZGV4ICsgMSwgMSwgcGxhY2Vob2xkZXIpWzBdO1xyXG5cclxuICAgICAgICB0aGlzLnF1aXpRdWVzdGlvbnMuc3BsaWNlKGluZGV4LCAwLCBxdWVzdGlvblRvTW92ZSk7XHJcbiAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25zLnNwbGljZSh0aGlzLnF1aXpRdWVzdGlvbnMuaW5kZXhPZihwbGFjZWhvbGRlciksIDEpO1xyXG5cclxuICAgICAgICBsZXQgb2xkU2VxdWVuY2VOdW1iZXIgPSBxdWVzdGlvblRvTW92ZS5pbmRleE51bWJlcjtcclxuICAgICAgICBsZXQgbmV3U2VxdWVuY2VOdW1iZXIgPSBxdWVzdGlvblRvTW92ZS5pbmRleE51bWJlciAtIDE7XHJcbiAgICAgICAgdGhpcy5xdWl6UXVlc3Rpb25zXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKHF1ZXN0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuTVVMVElQTEVfQ0hPSUNFX1NJTkdMRV9BTlNXRVJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24uYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXI6IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIubmV4dFF1ZXN0aW9uVHlwZSA9PSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuU1BFQ0lGSUVEX1FVRVNUSU9OXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5uZXh0UXVlc3Rpb25TZXF1ZW5jZU51bWJlciA9PSBvbGRTZXF1ZW5jZU51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlci5uZXh0UXVlc3Rpb25TZXF1ZW5jZU51bWJlciA9IG5ld1NlcXVlbmNlTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPT0gbmV3U2VxdWVuY2VOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXIubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPSBvbGRTZXF1ZW5jZU51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uVHlwZSA9PSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuU1BFQ0lGSUVEX1FVRVNUSU9OXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPT0gb2xkU2VxdWVuY2VOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gbmV3U2VxdWVuY2VOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPT0gbmV3U2VxdWVuY2VOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gb2xkU2VxdWVuY2VOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBxdWVzdGlvblRvTW92ZS5pbmRleE51bWJlci0tO1xyXG4gICAgICAgIHRoaXMucXVpelF1ZXN0aW9uc1t0aGlzLnF1aXpRdWVzdGlvbnMuaW5kZXhPZihxdWVzdGlvblRvTW92ZSkgKyAxXS5pbmRleE51bWJlcisrO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlVXAoaW5kZXg6IG51bWJlciwgb2JqZWN0QXJyYXk6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBwbGFjZWhvbGRlciA9IHt9O1xyXG4gICAgICAgIGxldCBvYmplY3RUb01vdmUgPSBvYmplY3RBcnJheS5zcGxpY2UoaW5kZXgsIDEsIHBsYWNlaG9sZGVyKVswXTtcclxuICAgICAgICBvYmplY3RBcnJheS5zcGxpY2UoaW5kZXggLSAxLCAwLCBvYmplY3RUb01vdmUpO1xyXG4gICAgICAgIG9iamVjdEFycmF5LnNwbGljZShvYmplY3RBcnJheS5pbmRleE9mKHBsYWNlaG9sZGVyKSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1vdmVEb3duKGluZGV4OiBudW1iZXIsIG9iamVjdEFycmF5OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBsZXQgcGxhY2Vob2xkZXIgPSB7fTtcclxuICAgICAgICBsZXQgb2JqZWN0VG9Nb3ZlID0gb2JqZWN0QXJyYXkuc3BsaWNlKGluZGV4ICsgMSwgMSwgcGxhY2Vob2xkZXIpWzBdO1xyXG4gICAgICAgIG9iamVjdEFycmF5LnNwbGljZShpbmRleCwgMCwgb2JqZWN0VG9Nb3ZlKTtcclxuICAgICAgICBvYmplY3RBcnJheS5zcGxpY2Uob2JqZWN0QXJyYXkuaW5kZXhPZihwbGFjZWhvbGRlciksIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vdmVVcChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNb3ZlRG93bihpbmRleDogbnVtYmVyLCBvYmplY3RBcnJheTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4IDwgb2JqZWN0QXJyYXkubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdG9yZVByZXZpZXdVcmwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuY3JvcHBlZEltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucHJldmlld1VybCA9IHRoaXMucXVpei5wcmV2aWV3VXJsO1xyXG4gICAgICAgIHRoaXMuaGFzUHJldmlld1VybENhbmNlbGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1Jlc2V0UHJldmlldyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFByZXZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJldmlldykge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3VXJsID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmhhc1ByZXZpZXdVcmxDYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNyb3BwZWRJbWFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNyb3BwZWRJbWFnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1Jlc2V0UHJldmlldyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQnVzaW5lc3NVbml0Q2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmZpbHRlci5idXNpbmVzc1VuaXRJZCA9IHRoaXMucXVpei5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnF1aXpJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKFNlY3VyZWRPYmplY3RUeXBlLlFVSVopO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRRdWVzdGlvbnNUYWdzKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXpRdWVzdGlvbnMuZm9yRWFjaCgocTogSVF1aXpRdWVzdGlvbkV4dGVuZGVkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcS50YWdzTGlzdCA9IHEudGFnc0xpc3QuZmlsdGVyKHQgPT4gdGhpcy5xdWVzdGlvbnNUYWdzLmluZGV4T2YodCkgIT0gLTEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi50YWdzTGlzdCA9IHRoaXMuY3VycmVudFF1ZXN0aW9uLnRhZ3NMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih0ID0+IHRoaXMucXVlc3Rpb25zVGFncy5pbmRleE9mKHQpICE9IC0xKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoYSA9PiB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdHJ1ZSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRCdXNpbmVzc1VuaXRTZWxlY3RvclZpc2libGUoKSB7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0T3duZXJzVXJsKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBiYXNlVXJsOiBzdHJpbmcgPSBcIi9hcGkvdXNlclNlbGVjdG9yL3VzZXJzXCI7XHJcbiAgICAgICAgcmV0dXJuIGJ1c2luZXNzVW5pdElkXHJcbiAgICAgICAgICAgID8gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShiYXNlVXJsICsgXCI/YnVzaW5lc3NVbml0SWQ9OmJ1c2luZXNzVW5pdElkXCIpXHJcbiAgICAgICAgICAgICAgICAud2l0aChcIjpidXNpbmVzc1VuaXRJZFwiLCBidXNpbmVzc1VuaXRJZClcclxuICAgICAgICAgICAgICAgIC5idWlsZCgpXHJcbiAgICAgICAgICAgIDogYmFzZVVybDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3duZXJDaGFuZ2VDYWxsYmFjayA9IChzZWxlY3RlZDogYm9vbGVhbiwgbmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWl6Lm93bmVyTmFtZSA9IHNlbGVjdGVkID8gbmFtZSA6IG51bGw7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBvbkdlbmVyYXRlRnJvbUJhbmtDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnF1aXouZ2VuZXJhdGVGcm9tQmFuayA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpei5udW1iZXJPZlF1ZXN0aW9ucyA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMucXVpei5jb3JyZWN0QW5zd2Vyc1R5cGUgPSBRdWl6Q29ycmVjdEFuc3dlcnNUeXBlW1F1aXpDb3JyZWN0QW5zd2Vyc1R5cGUuUEVSQ0VOVEFHRV07XHJcbiAgICAgICAgICAgIHRoaXMucXVpei5xdWVzdGlvbnNJbkFjY29yZGFuY2VXaXRoU2VxdWVuY2VOdW1iZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbk9yZGVyID0gIXRoaXMucXVpei5xdWVzdGlvbnNJbkFjY29yZGFuY2VXaXRoU2VxdWVuY2VOdW1iZXI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1aXouZ2VuZXJhdGVGcm9tQmFuayA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1aXoubnVtYmVyT2ZRdWVzdGlvbnMgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZsYXNoY2FyZCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXouZXhjbHVkZUNvcnJlY3RseUFuc3dlcmVkUXVlc3Rpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEN1cnJlbnRRdWVzdGlvblR5cGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24uc2hvd0FzUG9wVXAgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmFuc3dlclR5cGUgPT0gXCJzaG9ydC1hbnN3ZXJcIikge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi50eXBlID0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hbnN3ZXJUeXBlID09IFwic2hvcnQtYW5zd2VyLWF1ZGlvLXJlc3BvbnNlXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24udHlwZSA9IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0hPUlRfQU5TV0VSX0FVRElPX1JFU1BPTlNFXTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYW5zd2VyVHlwZSA9PSBcInNob3J0LWFuc3dlci13aXRoLXVwbG9hZFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLnR5cGUgPSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9XSVRIX1VQTE9BRF07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFuc3dlclR5cGUgPT0gXCJtdWx0aXBsZS1jaG9pY2Utc2luZ2xlLWFuc3dlclwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLnR5cGUgPSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLk1VTFRJUExFX0NIT0lDRV9TSU5HTEVfQU5TV0VSXTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckNvcnJlY3RBbnN3ZXJzKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFuc3dlclR5cGUgPT0gXCJtdWx0aXBsZS1jaG9pY2UtbXVsdGlwbGUtYW5zd2VyXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24udHlwZSA9IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuTVVMVElQTEVfQ0hPSUNFX01VTFRJUExFX0FOU1dFUl07XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb3JyZWN0QW5zd2VycygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hbnN3ZXJUeXBlID09IFwic2NhbGVkLWFuc3dlclwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLnR5cGUgPSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNDQUxFRF9BTlNXRVJdO1xyXG4gICAgICAgICAgICB0aGlzLmFuc3dlclN1YnR5cGUgPSBcInNjYWxlZC1hbnN3ZXIteWVzLW5vXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UXVlc3Rpb25TdWJ0eXBlKHRoaXMuY3VycmVudFF1ZXN0aW9uKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYW5zd2VyVHlwZSA9PSBcImZpbGwtaW4tdGhlLWJsYW5rXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24udHlwZSA9IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuRklMTF9JTl9USEVfQkxBTktdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hbnN3ZXJUeXBlID09IFwibWF0Y2hpbmctYW5zd2VyXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VNYXRjaGluZ1R5cGUodGhpcy5jdXJyZW50UXVlc3Rpb24pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hbnN3ZXJUeXBlID09IFwiZmlsbGFibGUtZm9ybVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLnR5cGUgPSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkZJTExBQkxFX0ZPUk1dO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hbnN3ZXJUeXBlID09IFwiaG90c3BvdC1zaW5nbGUtY2hvaWNlXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24udHlwZSA9IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuSE9UU1BPVF9TSU5HTEVfQ0hPSUNFXTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYW5zd2VyVHlwZSA9PSBcImhvdHNwb3QtbXVsdGlwbGUtY2hvaWNlXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24udHlwZSA9IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuSE9UU1BPVF9NVUxUSVBMRV9DSE9JQ0VdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYW5zd2VyVHlwZSA9PSBcInNob3J0LWFuc3dlclwiIHx8IHRoaXMuYW5zd2VyVHlwZSA9PSBcInNob3J0LWFuc3dlci1hdWRpby1yZXNwb25zZVwiXHJcbiAgICAgICAgICAgIHx8IHRoaXMuYW5zd2VyVHlwZSA9PSBcInNob3J0LWFuc3dlci13aXRoLXVwbG9hZFwiIHx8IHRoaXMuYW5zd2VyVHlwZSA9PSBcImZpbGxhYmxlLWZvcm1cIikge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBbnN3ZXJzID0gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLmFuc3dlclR5cGUgPT0gXCJmaWxsYWJsZS1mb3JtXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxsYWJsZUZvcm1TaG93aW5nSW5Qb3BVcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBbnN3ZXJzID0gW107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maWxsYWJsZUZvcm1TaG93aW5nSW5Qb3BVcCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hbnN3ZXJUeXBlID09IFwibWF0Y2hpbmctYW5zd2VyXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QW5zd2VycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGNoaW5nT3B0aW9uc0hpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYW5zd2VyVHlwZSA9PSBcIm11bHRpcGxlLWNob2ljZS1zaW5nbGUtYW5zd2VyXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QW5zd2Vycy5mb3JFYWNoKChhOiBJUXVpekFuc3dlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGEubmV4dFF1ZXN0aW9uVHlwZSA9PSBudWxsIHx8IGEubmV4dFF1ZXN0aW9uVHlwZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhLm5leHRRdWVzdGlvblR5cGUgPSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuTkVYVF9RVUVTVElPTl07XHJcbiAgICAgICAgICAgICAgICAgICAgYS5uZXh0UXVlc3Rpb25TZXF1ZW5jZU51bWJlciA9IHRoaXMuTkVYVF9RVUVTVElPTl9TRVFVRU5DRV9OVU1CRVI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLm5leHRRdWVzdGlvblR5cGUgPSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuTkVYVF9RVUVTVElPTl07XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gdGhpcy5ORVhUX1FVRVNUSU9OX1NFUVVFTkNFX05VTUJFUjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLnNob3J0QW5zd2VyTWF4TGVuZ3RoID0gKHRoaXMuaXNTaG9ydEFuc3dlclF1ZXN0aW9uVHlwZSh0aGlzLmN1cnJlbnRRdWVzdGlvbilcclxuICAgICAgICAgICAgfHwgdGhpcy5pc1Nob3J0QW5zd2VyV2l0aFVwbG9hZFF1ZXN0aW9uVHlwZSh0aGlzLmN1cnJlbnRRdWVzdGlvbikpXHJcbiAgICAgICAgICAgID8gUXVpekVkaXRDb250cm9sbGVyLlJFU1BPTlNFX0RFRkFVTFRfTUFYX1RFWFRfTEVOR1RIXHJcbiAgICAgICAgICAgIDogdGhpcy5pc1Nob3J0QW5zd2VyQXVkaW9SZXNwb25zZVF1ZXN0aW9uVHlwZSh0aGlzLmN1cnJlbnRRdWVzdGlvbilcclxuICAgICAgICAgICAgICAgID8gUXVpekVkaXRDb250cm9sbGVyLlJFU1BPTlNFX0RFRkFVTFRfTUFYX0FVRElPX0xFTkdUSFxyXG4gICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xlYXJDb3JyZWN0QW5zd2VycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBbnN3ZXJzLmZvckVhY2goKGE6IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgIGEuaXNDb3JyZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFF1ZXN0aW9uU3VidHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmFuc3dlclR5cGUgPT0gXCJzY2FsZWQtYW5zd2VyXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5zd2VyU3VidHlwZSA9PSBcInNjYWxlZC1hbnN3ZXIteWVzLW5vXCIpIHtcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLnN1YnR5cGUgPSBTY2FsZWRBbnN3ZXJRdWVzdGlvblR5cGVbU2NhbGVkQW5zd2VyUXVlc3Rpb25UeXBlLllFU19OT107XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hbnN3ZXJTdWJ0eXBlID09IFwic2NhbGVkLWFuc3dlci1yZWNvbW1lbmRlZC0zLWFuc3dlcnNcIikge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24uc3VidHlwZSA9IFNjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZVtTY2FsZWRBbnN3ZXJRdWVzdGlvblR5cGUuUkVDT01NRU5ERURfM19BTlNXRVJTXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFuc3dlclN1YnR5cGUgPT0gXCJzY2FsZWQtYW5zd2VyLWFncmVlLTUtYW5zd2Vyc1wiKSB7XHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbi5zdWJ0eXBlID0gU2NhbGVkQW5zd2VyUXVlc3Rpb25UeXBlW1NjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZS5BR1JFRV81X0FOU1dFUlNdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0QW5zd2VyVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2hvcnRBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5zd2VyVHlwZSA9IFwic2hvcnQtYW5zd2VyXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzU2hvcnRBbnN3ZXJBdWRpb1Jlc3BvbnNlUXVlc3Rpb25UeXBlKHF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFuc3dlclR5cGUgPSBcInNob3J0LWFuc3dlci1hdWRpby1yZXNwb25zZVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1Nob3J0QW5zd2VyV2l0aFVwbG9hZFF1ZXN0aW9uVHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJUeXBlID0gXCJzaG9ydC1hbnN3ZXItd2l0aC11cGxvYWRcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNNdWx0aXBsZUNob2ljZVNpbmdsZUFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJUeXBlID0gXCJtdWx0aXBsZS1jaG9pY2Utc2luZ2xlLWFuc3dlclwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc011bHRpcGxlQ2hvaWNlTXVsdGlwbGVBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5zd2VyVHlwZSA9IFwibXVsdGlwbGUtY2hvaWNlLW11bHRpcGxlLWFuc3dlclwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1NjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJUeXBlID0gXCJzY2FsZWQtYW5zd2VyXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRmlsbEluVGhlQmxhbmtRdWVzdGlvblR5cGUocXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5zd2VyVHlwZSA9XCJmaWxsLWluLXRoZS1ibGFua1wiO1xyXG4gICAgICAgIH0gZWxzZSBpZih0aGlzLmlzTWF0Y2hpbmdRdWVzdGlvblR5cGUocXVlc3Rpb24pIHx8IHRoaXMuaXNIaWRpbmdPcHRpb25zTWF0Y2hpbmdRdWVzdGlvblR5cGUocXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5zd2VyVHlwZSA9IFwibWF0Y2hpbmctYW5zd2VyXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmKHRoaXMuaXNGaWxsYWJsZUZvcm1RdWVzdGlvblR5cGUocXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5zd2VyVHlwZSA9IFwiZmlsbGFibGUtZm9ybVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZih0aGlzLmlzSG90c3BvdFNpbmdsZUNob2ljZVF1ZXN0aW9uVHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJUeXBlID0gXCJob3RzcG90LXNpbmdsZS1jaG9pY2VcIjtcclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5pc0hvdHNwb3RNdWx0aXBsZUNob2ljZVF1ZXN0aW9uVHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJUeXBlID0gXCJob3RzcG90LW11bHRpcGxlLWNob2ljZVwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEFuc3dlclN1YnR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc1NjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTY2FsZWRBbnN3ZXJZZXNOb1N1YnR5cGUocXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuc3dlclN1YnR5cGUgPSBcInNjYWxlZC1hbnN3ZXIteWVzLW5vXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1NjYWxlZEFuc3dlclJlY29tbWVuZGVkM0Fuc3dlcnNTdWJ0eXBlKHF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJTdWJ0eXBlID0gXCJzY2FsZWQtYW5zd2VyLXJlY29tbWVuZGVkLTMtYW5zd2Vyc1wiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNTY2FsZWRBbnN3ZXJBZ3JlZTVBbnN3ZXJzU3VidHlwZShxdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5zd2VyU3VidHlwZSA9IFwic2NhbGVkLWFuc3dlci1hZ3JlZS01LWFuc3dlcnNcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNGaWxsYWJsZUZvcm1RdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5GSUxMQUJMRV9GT1JNXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNGaWxsSW5UaGVCbGFua1F1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkZJTExfSU5fVEhFX0JMQU5LXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlTWF0Y2hpbmdUeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgcXVlc3Rpb24udHlwZSA9IHRoaXMubWF0Y2hpbmdPcHRpb25zSGlkZGVuXHJcbiAgICAgICAgICAgID8gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5ISURJTkdfT1BUSU9OU19NQVRDSElOR19BTlNXRVJdXHJcbiAgICAgICAgICAgIDogUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5NQVRDSElOR19BTlNXRVJdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01hdGNoaW5nUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuTUFUQ0hJTkdfQU5TV0VSXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNIaWRpbmdPcHRpb25zTWF0Y2hpbmdRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5ISURJTkdfT1BUSU9OU19NQVRDSElOR19BTlNXRVJdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc011bHRpcGxlQ2hvaWNlTXVsdGlwbGVBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5NVUxUSVBMRV9DSE9JQ0VfTVVMVElQTEVfQU5TV0VSXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNdWx0aXBsZUNob2ljZVNpbmdsZUFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLk1VTFRJUExFX0NIT0lDRV9TSU5HTEVfQU5TV0VSXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG9ydEFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRmxhc2hjYXJkUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuRkxBU0hfQ0FSRF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzSG90c3BvdFNpbmdsZUNob2ljZVF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLkhPVFNQT1RfU0lOR0xFX0NIT0lDRV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzSG90c3BvdE11bHRpcGxlQ2hvaWNlUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuSE9UU1BPVF9NVUxUSVBMRV9DSE9JQ0VdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRNYXRlcmlhbFRvUXVpeihtYXRlcmlhbDogSU1hdGVyaWFsKTogdm9pZCB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLm1hdGVyaWFsSWQgPSBtYXRlcmlhbC5pZDtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24ubWF0ZXJpYWxOYW1lID0gbWF0ZXJpYWwudGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRNYXRlcmlhbHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vcGVuTG9hZE1hdGVyaWFscyA9ICF0aGlzLm9wZW5Mb2FkTWF0ZXJpYWxzO1xyXG4gICAgICAgIGlmICh0aGlzLm9wZW5Mb2FkTWF0ZXJpYWxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG9ydEFuc3dlckF1ZGlvUmVzcG9uc2VRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNIT1JUX0FOU1dFUl9BVURJT19SRVNQT05TRV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2hvcnRBbnN3ZXJXaXRoVXBsb2FkUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJfV0lUSF9VUExPQURdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0NBTEVEX0FOU1dFUl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2NhbGVkQW5zd2VyWWVzTm9TdWJ0eXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TQ0FMRURfQU5TV0VSXVxyXG4gICAgICAgICAgICAmJiBxdWVzdGlvbi5zdWJ0eXBlID09IFNjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZVtTY2FsZWRBbnN3ZXJRdWVzdGlvblR5cGUuWUVTX05PXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTY2FsZWRBbnN3ZXJSZWNvbW1lbmRlZDNBbnN3ZXJzU3VidHlwZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbiAmJiBxdWVzdGlvbi50eXBlID09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuU0NBTEVEX0FOU1dFUl1cclxuICAgICAgICAgICAgJiYgcXVlc3Rpb24uc3VidHlwZSA9PSBTY2FsZWRBbnN3ZXJRdWVzdGlvblR5cGVbU2NhbGVkQW5zd2VyUXVlc3Rpb25UeXBlLlJFQ09NTUVOREVEXzNfQU5TV0VSU107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2NhbGVkQW5zd2VyQWdyZWU1QW5zd2Vyc1N1YnR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PSBRdWVzdGlvblR5cGVbUXVlc3Rpb25UeXBlLlNDQUxFRF9BTlNXRVJdXHJcbiAgICAgICAgICAgICYmIHF1ZXN0aW9uLnN1YnR5cGUgPT0gU2NhbGVkQW5zd2VyUXVlc3Rpb25UeXBlW1NjYWxlZEFuc3dlclF1ZXN0aW9uVHlwZS5BR1JFRV81X0FOU1dFUlNdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNTaG9ydE9yRmlsbEZvcm1BbnN3ZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVpelF1ZXN0aW9ucy5zb21lKHF1ZXN0aW9uID0+XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJdXHJcbiAgICAgICAgICAgIHx8IHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJfQVVESU9fUkVTUE9OU0VdXHJcbiAgICAgICAgICAgIHx8IHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJfV0lUSF9VUExPQURdXHJcbiAgICAgICAgICAgIHx8IHF1ZXN0aW9uLnR5cGUgPT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5GSUxMQUJMRV9GT1JNXVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUXVpeigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6VHlwZSA9PT0gXCJRVUlaXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU3VydmV5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1aXpUeXBlID09PSBcIlNVUlZFWVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0ZsYXNoY2FyZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6VHlwZSA9PT0gXCJGTEFTSENBUkRcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNRdWl6QnJhbmNoaW5nQWxsb3dlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6Lm9uZVF1ZXN0aW9uQXRBVGltZSAmJiB0aGlzLnF1aXoucXVlc3Rpb25zSW5BY2NvcmRhbmNlV2l0aFNlcXVlbmNlTnVtYmVyXHJcbiAgICAgICAgICAgICYmICF0aGlzLnF1aXouZ2VuZXJhdGVGcm9tQmFuayAmJiAhdGhpcy5xdWl6LmV4Y2x1ZGVDb3JyZWN0bHlBbnN3ZXJlZFF1ZXN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25BbnN3ZXJOZXh0UXVlc3Rpb25DaGFuZ2UoYW5zd2VyOiBJUXVpekFuc3dlcik6IHZvaWQge1xyXG4gICAgICAgIGFuc3dlci5uZXh0UXVlc3Rpb25TZXF1ZW5jZU51bWJlciA9IE51bWJlcihhbnN3ZXIubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIpO1xyXG4gICAgICAgIGlmIChhbnN3ZXIubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPT0gdGhpcy5ORVhUX1FVRVNUSU9OX1NFUVVFTkNFX05VTUJFUikge1xyXG4gICAgICAgICAgICBhbnN3ZXIubmV4dFF1ZXN0aW9uVHlwZSA9IE5leHRRdWVzdGlvblR5cGVbTmV4dFF1ZXN0aW9uVHlwZS5ORVhUX1FVRVNUSU9OXTtcclxuICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5uZXh0UXVlc3Rpb25TZXF1ZW5jZU51bWJlciA9PSB0aGlzLkVORF9PRl9USEVfUVVJWl9TRVFVRU5DRV9OVU1CRVIpIHtcclxuICAgICAgICAgICAgYW5zd2VyLm5leHRRdWVzdGlvblR5cGUgPSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuRU5EX09GX1RIRV9RVUlaXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbnN3ZXIubmV4dFF1ZXN0aW9uVHlwZSA9IE5leHRRdWVzdGlvblR5cGVbTmV4dFF1ZXN0aW9uVHlwZS5TUEVDSUZJRURfUVVFU1RJT05dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25RdWVzdGlvbk5leHRRdWVzdGlvbkNoYW5nZShxdWVzdGlvbjogSVF1aXpRdWVzdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHF1ZXN0aW9uLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyID0gTnVtYmVyKHF1ZXN0aW9uLm5leHRRdWVzdGlvblNlcXVlbmNlTnVtYmVyKTtcclxuICAgICAgICBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPT0gdGhpcy5ORVhUX1FVRVNUSU9OX1NFUVVFTkNFX05VTUJFUikge1xyXG4gICAgICAgICAgICBxdWVzdGlvbi5uZXh0UXVlc3Rpb25UeXBlID0gTmV4dFF1ZXN0aW9uVHlwZVtOZXh0UXVlc3Rpb25UeXBlLk5FWFRfUVVFU1RJT05dO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocXVlc3Rpb24ubmV4dFF1ZXN0aW9uU2VxdWVuY2VOdW1iZXIgPT0gdGhpcy5FTkRfT0ZfVEhFX1FVSVpfU0VRVUVOQ0VfTlVNQkVSKSB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLm5leHRRdWVzdGlvblR5cGUgPSBOZXh0UXVlc3Rpb25UeXBlW05leHRRdWVzdGlvblR5cGUuRU5EX09GX1RIRV9RVUlaXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVzdGlvbi5uZXh0UXVlc3Rpb25UeXBlID0gTmV4dFF1ZXN0aW9uVHlwZVtOZXh0UXVlc3Rpb25UeXBlLlNQRUNJRklFRF9RVUVTVElPTl07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDYW5jZWxRdWl6SHJlZigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMucXVpeklkID8gdGhpcy5xdWl6emVzUm91dGVyLnF1aXp6ZXNEZXRhaWxzVXJsKHRoaXMucXVpeklkKVxyXG4gICAgICAgICAgICA6IHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzSW5kZXhVcmwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2FuY2VsU3VydmV5SHJlZigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMucXVpeklkID8gdGhpcy5xdWl6emVzUm91dGVyLnN1cnZleXNEZXRhaWxzVXJsKHRoaXMucXVpeklkKVxyXG4gICAgICAgICAgICA6IHRoaXMucXVpenplc1JvdXRlci5zdXJ2ZXlzSW5kZXhVcmwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2FuY2VsRmxhc2hjYXJkSHJlZigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMucXVpeklkID8gdGhpcy5xdWl6emVzUm91dGVyLmZsYXNoY2FyZHNEZXRhaWxzVXJsKHRoaXMucXVpeklkKVxyXG4gICAgICAgICAgICA6IHRoaXMucXVpenplc1JvdXRlci5mbGFzaGNhcmRzSW5kZXhVcmwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRRdWl6QXNDc3YoKSB7XHJcbiAgICAgICAgdGhpcy5xdWl6SW1wb3J0RXhwb3J0U2VydmljZS5nZXRRdWl6Q3N2VG9rZW4odGhpcy5xdWl6SWQpXHJcbiAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRva2VuOiBzdHJpbmcgPSBkYXRhW1widG9rZW5cIl07XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR3aW5kb3cub3BlbihcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiYXBpL3F1aXp6ZXMvZG93bmxvYWRRdWl6Q3N2Lzp0b2tlblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucGFyYW0oXCI6dG9rZW5cIiwgdG9rZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JvcHBlck1vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjaW1hZ2VDcm9wcGVyTW9kYWxcIikubW9kYWwoXCJzaG93XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JvcHBlck1vZGFsQWZ0ZXJMb2FkKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgIT0gdW5kZWZpbmVkIHx8IHRoaXMucHJldmlld1VybCAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgID8gdGhpcy5zaG93Q3JvcHBlck1vZGFsKClcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zaG93Q3JvcHBlck1vZGFsQWZ0ZXJMb2FkKClcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmb2N1c09uRWxlbWVudCh0YWJOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGFuZ3VsYXIuZWxlbWVudChcIiNcIiArIHRhYk5hbWUpLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYk5hbWUpLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVBlcmNlbnRhZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGVyY2VudGFnZU51bWJlciA9PSAwICYmIHRoaXMucXVpei5jb3JyZWN0QW5zd2Vyc1R5cGUgPT0gUXVpekVkaXRDb250cm9sbGVyLlBFUkNFTlRBR0VfVFlQRSkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcmNlbnRhZ2VOdW1iZXIgPSA3MDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucXVpei5jb3JyZWN0QW5zd2Vyc1R5cGUgIT0gUXVpekVkaXRDb250cm9sbGVyLlBFUkNFTlRBR0VfVFlQRSkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcmNlbnRhZ2VOdW1iZXIgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5jcmVhc2VOdW1iZXJPZlF1ZXN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLm51bWJlck9mUXVlc3Rpb25zICs9IDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlYWN0aXZhdGVNYWluQ29udGVudCgpIHtcclxuICAgICAgICBsZXQgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcImRpdiNtYWluQ29udGVudFwiKTtcclxuICAgICAgICBsZXQgbWFpbkxvYWRpbmdFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggXCJkaXYjbWFpbkNvbnRlbnRMb2FkaW5nXCIpO1xyXG4gICAgICAgIG1haW5FbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgbWFpbkxvYWRpbmdFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZU1haW5Db250ZW50KCkge1xyXG4gICAgICAgIGxldCBtYWluRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIFwiZGl2I21haW5Db250ZW50XCIpO1xyXG4gICAgICAgIGxldCBtYWluTG9hZGluZ0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcImRpdiNtYWluQ29udGVudExvYWRpbmdcIik7XHJcbiAgICAgICAgbWFpbkVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICBtYWluTG9hZGluZ0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbHlTdHlsZXNUb1RleHQocXVlc3Rpb246IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgaW1nVGFnUnggPSAvPGltZyhcXHNzcmM9XCJkYXRhOmltYWdlXFxTKz8pPi9naTtcclxuXHJcbiAgICAgICAgbGV0IHN1YnN0aXR1dGVkTGluZXMgPSBbXTtcclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICBsZXQgYWRkZWRJbWFnZSA9IGltZ1RhZ1J4LmV4ZWMocXVlc3Rpb24gPyB0aGlzLmN1cnJlbnRRdWVzdGlvbi50ZXh0IDogdGhpcy5jdXJyZW50RXhwbGFuYXRpb25zWzBdLmV4cGxhbmF0aW9uKVxyXG4gICAgICAgICAgICBpZiAoIWFkZGVkSW1hZ2UpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgc3Vic3RpdHV0ZWRMaW5lcy5wdXNoKGFkZGVkSW1hZ2VbMF0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdWJzdGl0dXRlZExpbmVzLm1hcCgobGluZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLnRleHQgPSB0aGlzLmN1cnJlbnRRdWVzdGlvbi50ZXh0LnJlcGxhY2UobGluZSwgbGluZS5zbGljZSgwLCAtMikgKyAnIHN0eWxlPVwid2lkdGg6IDEwMCVcIi8+JylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEV4cGxhbmF0aW9uc1swXS5leHBsYW5hdGlvbiA9IHRoaXMuY3VycmVudEV4cGxhbmF0aW9uc1swXS5leHBsYW5hdGlvbi5yZXBsYWNlKGxpbmUsIGxpbmUuc2xpY2UoMCwgLTIpICsgJyBzdHlsZT1cIndpZHRoOiAxMDAlXCIvPicpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUXVpelJvd0lucHV0fSBmcm9tIFwiLi9tb2RlbHMvSVF1aXpSb3dJbnB1dFwiO1xyXG5pbXBvcnQge0lRdWl6fSBmcm9tIFwiLi9tb2RlbHMvSVF1aXpcIjtcclxuaW1wb3J0IHtRdWl6VHlwZX0gZnJvbSBcIi4vbW9kZWxzL1F1aXpUeXBlXCI7XHJcblxyXG5pbnRlcmZhY2UgSUV4dFF1aXogZXh0ZW5kcyBJUXVpeiB7XHJcbiAgICBxdWl6Um93SW5wdXRMaXN0PzogQXJyYXk8SVF1aXpSb3dJbnB1dD5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1aXpJbXBvcnRFeHBvcnRTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicXVpenplcy5RdWl6SW1wb3J0RXhwb3J0U2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVpelJvdyhmaWxlOiBGaWxlLCBxdWl6VHlwZTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJUXVpelJvd0lucHV0Pj4ge1xyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcclxuICAgICAgICBkYXRhLmFwcGVuZCgncXVpelR5cGUnLCBxdWl6VHlwZSk7XHJcbiAgICAgICAgbGV0IGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3F1aXp6ZXMvZ2V0UXVpelJvd1wiKSwgZGF0YSwgY29uZmlnKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVRdWl6RnJvbUZpbGUocXVpelJvd0lucHV0TGlzdDogQXJyYXk8SVF1aXpSb3dJbnB1dD4sIHF1aXo6IElFeHRRdWl6KTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICBxdWl6LnF1aXpSb3dJbnB1dExpc3QgPSBxdWl6Um93SW5wdXRMaXN0O1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvcXVpenplcy9jcmVhdGVRdWl6RnJvbUZpbGVcIiksIHF1aXopLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVpekNzdlRva2VuKHF1aXpJZDogbnVtYmVyKTogbmcuSVByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9xdWl6emVzLzpxdWl6SWQvY3N2L2Rvd25sb2FkVG9rZW5cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnF1aXpJZFwiLCBxdWl6SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERvd25sb2FkVGVtcGxhdGVVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51cmwuc2VydmljZShcIi9hcGkvcXVpenplcy9kb3dubG9hZFRlbXBsYXRlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREb3dubG9hZEZsYXNoY2FyZFRlbXBsYXRlVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3F1aXp6ZXMvZG93bmxvYWRGbGFzaGNhcmRUZW1wbGF0ZVwiKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7SVF1aXp9IGZyb20gXCIuL21vZGVscy9JUXVpelwiO1xyXG5pbXBvcnQge0lRdWl6UXVlc3Rpb259IGZyb20gXCIuL21vZGVscy9JUXVpelF1ZXN0aW9uXCI7XHJcbmltcG9ydCB7SVF1aXpBbnN3ZXJ9IGZyb20gXCIuL21vZGVscy9JUXVpekFuc3dlclwiO1xyXG5pbXBvcnQge0lRdWl6UmVzdWx0fSBmcm9tIFwiLi9tb2RlbHMvSVF1aXpSZXN1bHRcIjtcclxuaW1wb3J0IHtJUXVpekFuc3dlclJlc3VsdH0gZnJvbSBcIi4vbW9kZWxzL0lRdWl6QW5zd2VyUmVzdWx0XCI7XHJcbmltcG9ydCB7UXVpenplc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9RdWl6emVzUm91dGVyXCI7XHJcbmltcG9ydCB7UXVpelNlcnZpY2V9IGZyb20gXCIuL1F1aXpTZXJ2aWNlXCI7XHJcblxyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7U2VhcmNoQ29udHJvbEhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvU2VhcmNoQ29udHJvbEhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0xvY2F0aW9uQ2hhbmdlSGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTG9jYXRpb25DaGFuZ2VIZWxwZXJcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5nc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtRdWVzdGlvblR5cGV9IGZyb20gXCIuL21vZGVscy9RdWVzdGlvblR5cGVcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1aXpQYXNzaW5nQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInF1aXp6ZXMuUXVpelBhc3NpbmdDb250cm9sbGVyXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE1BWF9SRUNVUlNJT05fREVQVEggPSAzO1xyXG5cclxuICAgIHByaXZhdGUgcXVpeklkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHF1aXpSZXN1bHRJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHF1aXo6IElRdWl6ID0ge307XHJcbiAgICBwdWJsaWMgcXVpelJlc3VsdDogSVF1aXpSZXN1bHQgPSB7fTtcclxuICAgIHB1YmxpYyBkdXJhdGlvbjogbnVtYmVyO1xyXG4gICAgcHVibGljIGRpc2FibGVDb21wbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNhbmNlbFF1aXo6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBxdWl6Q29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcmVjdXJzaW9uRGVwdGg6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFF1aXpTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUXVpenplc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIERpYWxvZ1NlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcXVpelNlcnZpY2U6IFF1aXpTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBxdWl6emVzUm91dGVyOiBRdWl6emVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMucXVpeklkID0gJHJvdXRlUGFyYW1zW1F1aXp6ZXNSb3V0ZXIuUVVJWl9JRF9QQVJBTV07XHJcbiAgICAgICAgdGhpcy5xdWl6UmVzdWx0SWQgPSAkcm91dGVQYXJhbXNbUXVpenplc1JvdXRlci5RVUlaX1JFU1VMVF9JRF9QQVJBTV07XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5FRFVDQVRJT05fUVVJWlpFU19NRU5VX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFF1aXooKTtcclxuXHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKCckbG9jYXRpb25DaGFuZ2VTdGFydCcsIChldmVudCwgbmV3TG9jYXRpb246IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoTG9jYXRpb25DaGFuZ2VIZWxwZXIuaXNFbmFibGVQcmV2ZW50TG9jYXRpb25DaGFuZ2UobmV3TG9jYXRpb24pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUNvbXBsZXRlQnV0dG9uICYmIHRoaXMucXVpelJlc3VsdCAmJiB0aGlzLnF1aXpSZXN1bHQuaWQgJiYgIXRoaXMuY2FuY2VsUXVpeikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJZb3UgY2FuJ3QgbGVhdmUgdGhpcyBwYWdlIHVubGVzcyB5b3UgY29tcGxldGUgb3IgY2FuY2VsIHRoZSBxdWl6IChzdXJ2ZXkgb3IgZmxhc2hjYXJkcylcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJRdWl6UmVzdWx0KCkge1xyXG4gICAgICAgIHRoaXMucXVpelNlcnZpY2UuZ2V0VXNlclF1aXpDdXJyZW50UmVzdWx0KHRoaXMucXVpeklkLCB0aGlzLnF1aXpSZXN1bHQuYXR0ZW1wdCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1aXpSZXN1bHQgPSBhbmd1bGFyLmNvcHkocmVzdWx0KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucXVpelJlc3VsdCAmJiB0aGlzLnF1aXpSZXN1bHQuaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHVyYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgZmluZCB5b3VyIHVuZmluaXNoZWQgc2Vzc2lvbiBmb3IgdGhpcyBRdWl6LlwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnF1aXp6ZXNSb3V0ZXIucXVpenplc0RldGFpbHNVcmwodGhpcy5xdWl6SWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFF1aXooKSB7XHJcbiAgICAgICAgdGhpcy5xdWl6U2VydmljZS5nZXRRdWl6Rm9yUGFzc2luZyh0aGlzLnF1aXpJZCwgdGhpcy5xdWl6UmVzdWx0SWQpLnRoZW4ocSA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShxLCB0aGlzLnF1aXopO1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihxLnRpdGxlKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkVXNlclF1aXpSZXN1bHQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0Q3VycmVudEFuc3dlcihxdWVzdGlvbjogSVF1aXpRdWVzdGlvbiwgYW5zd2VyOiBJUXVpekFuc3dlcik6IHZvaWQge1xyXG4gICAgICAgIHF1ZXN0aW9uLmFuc3dlcnMuZm9yRWFjaCgoYTogSVF1aXpBbnN3ZXIpID0+IHtcclxuICAgICAgICAgICAgYS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFuc3dlci5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0b3BRdWl6KGNvbmZpcm06IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5xdWl6LmR1cmF0aW9uICE9IG51bGwgJiYgIWNvbmZpcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbCB0aGUgcXVpej8gV2hlbiB0aGUgdGltZXIgaXMgZXhwaXJlZCwgdGhlICdGYWlsZWQnIHJlc3VsdCB3aWxsIGJlIHNhdmVkLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ2FuY2VsIHRoZSBxdWl6XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJZZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b246IFwiTm9cIlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3BRdWl6KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxRdWl6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJtb2RhbC1vcGVuXCIpO1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLnF1aXp6ZXNEZXRhaWxzVXJsKHRoaXMucXVpeklkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb21wbGV0ZVF1aXooKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1aXpDb21wbGV0ZWQgJiYgdGhpcy5yZWN1cnNpb25EZXB0aCA8IFF1aXpQYXNzaW5nQ29udHJvbGxlci5NQVhfUkVDVVJTSU9OX0RFUFRIKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNvbXBsZXRlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5xdWl6Q29tcGxldGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZWN1cnNpb25EZXB0aCsrO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXpSZXN1bHQuYW5zd2VycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXoucXVlc3Rpb25zLmZvckVhY2goKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0OiBJUXVpekFuc3dlclJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBxdWl6UmVzdWx0SWQ6IHRoaXMucXVpelJlc3VsdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICBhbnN3ZXJJZHM6IHF1ZXN0aW9uLmFuc3dlcnMuZmlsdGVyKChhOiBJUXVpekFuc3dlcikgPT4gYS5zZWxlY3RlZCkubWFwKChhOiBJUXVpekFuc3dlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5pZDtcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBhbnN3ZXJUZXh0OiBxdWVzdGlvbi5zaG9ydEFuc3dlclxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpelJlc3VsdC5hbnN3ZXJzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucXVpelNlcnZpY2UuY29tcGxldGVRdWl6QnlVc2VyKHRoaXMucXVpelJlc3VsdCkudGhlbigocXVpejogSVF1aXopID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVjdXJzaW9uRGVwdGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6LnF1ZXN0aW9ucy5mb3JFYWNoKChxRnJvbTogSVF1aXpRdWVzdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHFGcm9tLmFuc3dlcnMuZm9yRWFjaCgoYUZyb206IElRdWl6QW5zd2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1aXoucXVlc3Rpb25zLmZvckVhY2goKHFUbzogSVF1aXpRdWVzdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHFGcm9tLmlkID09IHFUby5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFUby5hbnN3ZXJzLmZvckVhY2goKGFUbzogSVF1aXpBbnN3ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFGcm9tLmlkID09PSBhVG8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUby5zZWxlY3RlZCA9IGFGcm9tLnNlbGVjdGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShxdWl6LCB0aGlzLnF1aXopO1xyXG4gICAgICAgICAgICB9KS5jYXRjaCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcIm9wdGltaXN0aWMubG9ja2luZy5mYWlsZWQuY2F0Y2hlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVpekNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlUXVpeigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXR1cm5Ub1F1aXp6ZXNEZXRhaWxzKCkge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnF1aXp6ZXNSb3V0ZXIucXVpenplc0RldGFpbHNVcmwodGhpcy5xdWl6SWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNdWx0aXBsZUNob2ljZU11bHRpcGxlQW5zd2VyUXVlc3Rpb25UeXBlKHF1ZXN0aW9uOiBJUXVpelF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLnR5cGUgPT09IFF1ZXN0aW9uVHlwZVtRdWVzdGlvblR5cGUuTVVMVElQTEVfQ0hPSUNFX01VTFRJUExFX0FOU1dFUl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTXVsdGlwbGVDaG9pY2VTaW5nbGVBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5NVUxUSVBMRV9DSE9JQ0VfU0lOR0xFX0FOU1dFUl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2hvcnRBbnN3ZXJRdWVzdGlvblR5cGUocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24gJiYgcXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlW1F1ZXN0aW9uVHlwZS5TSE9SVF9BTlNXRVJdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1Rvb0xvbmdBbnN3ZXJGb3IocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAocXVlc3Rpb24uc2hvcnRBbnN3ZXIpe1xyXG4gICAgICAgICAgICByZXR1cm4gcXVlc3Rpb24uc2hvcnRBbnN3ZXIubGVuZ3RoID49IHF1ZXN0aW9uLnNob3J0QW5zd2VyTWF4TGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrU2hvcnRBbnN3ZXJMZW5ndGgocXVlc3Rpb246IElRdWl6UXVlc3Rpb24pIHtcclxuICAgICAgICBpZiAocXVlc3Rpb24uc2hvcnRBbnN3ZXIubGVuZ3RoID4gcXVlc3Rpb24uc2hvcnRBbnN3ZXJNYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgcXVlc3Rpb24uc2hvcnRBbnN3ZXIgPSBxdWVzdGlvbi5zaG9ydEFuc3dlci5zbGljZSgwLCBxdWVzdGlvbi5zaG9ydEFuc3dlck1heExlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZSwgSVVybEJ1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVF1aXp9IGZyb20gXCIuL21vZGVscy9JUXVpelwiO1xyXG5pbXBvcnQge0lRdWl6UmVzdWx0fSBmcm9tIFwiLi9tb2RlbHMvSVF1aXpSZXN1bHRcIjtcclxuaW1wb3J0IHtJUXVpekFuc3dlclJlc3VsdH0gZnJvbSBcIi4vbW9kZWxzL0lRdWl6QW5zd2VyUmVzdWx0XCI7XHJcbmltcG9ydCB7SVF1aXpRdWVzdGlvbn0gZnJvbSBcIi4vbW9kZWxzL0lRdWl6UXVlc3Rpb25cIjtcclxuaW1wb3J0IHtJQXNzZXNzbWVudFJlc3VsdH0gZnJvbSBcIi4uL2Fzc2Vzc21lbnRzL21vZGVscy9JQXNzZXNzbWVudFJlc3VsdFwiO1xyXG5pbXBvcnQge0lRdWl6U3VydmV5U3RhdGlzdGljc30gZnJvbSBcIi4vbW9kZWxzL0lRdWl6U3VydmV5U3RhdGlzdGljc1wiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi4vSVNlbGVjdGFibGVcIjtcclxuaW1wb3J0IHtJQ291cnNlfSBmcm9tIFwiLi4vY291cnNlcy9tb2RlbHMvSUNvdXJzZVwiO1xyXG5cclxuaW50ZXJmYWNlIElFeHRRdWl6IGV4dGVuZHMgSVF1aXoge1xyXG4gICAgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM/OiBBcnJheTxJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcz47XHJcbiAgICByZXNldFByZXZpZXc/OiBib29sZWFuO1xyXG4gICAgcHJldmlldz86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1aXpTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicXVpenplcy5RdWl6U2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkc2NlXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkc2NlOiBhbmd1bGFyLklTQ0VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVpekluZm8oaWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVF1aXo+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvcXVpenplcy9xdWl6SW5mby86aWQ/XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBpZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVpeihxdWl6UmVzdWx0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVF1aXo+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvcXVpenplcy9xdWl6LzpxdWl6UmVzdWx0SWQ/XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpxdWl6UmVzdWx0SWRcIiwgcXVpelJlc3VsdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3B5KHF1aXpJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUXVpej4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvcXVpenplcy86cXVpeklkL2NvcHlcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnF1aXpJZFwiLCBxdWl6SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1aXpGb3JQYXNzaW5nKHF1aXpJZDogbnVtYmVyLCBxdWl6UmVzdWx0SWQ6IG51bWJlciwgY291cnNlSWQ/OiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElRdWl6PiB7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nID0gXCIvYXBpL3F1aXp6ZXMvcXVpekZvclBhc3NpbmcvOnF1aXpJZD9jb3Vyc2VJZD06Y291cnNlSWRcIjtcclxuICAgICAgICBpZiAocXVpelJlc3VsdElkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiJnF1aXpSZXN1bHRJZD06cXVpelJlc3VsdElkXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdXJsQnVpbGRlcjogSVVybEJ1aWxkZXIgPSB0aGlzLnVybC5iYXNlKHVybClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnF1aXpJZFwiLCBxdWl6SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZCB8fCBcIlwiKTtcclxuICAgICAgICBpZiAocXVpelJlc3VsdElkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdXJsQnVpbGRlci5wYXJhbShcIjpxdWl6UmVzdWx0SWRcIiwgcXVpelJlc3VsdElkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh1cmxCdWlsZGVyLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1aXpGb3JFZGl0aW5nKGlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElRdWl6PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3F1aXp6ZXMvcXVpekZvckVkaXRpbmcvOmlkP1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZShxdWl6OiBJRXh0UXVpeiwgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IEFycmF5PElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzPik6IGFuZ3VsYXIuSVByb21pc2U8SVF1aXo+IHtcclxuICAgICAgICBxdWl6LnBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzID0gcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9xdWl6emVzXCIpLCBxdWl6KS50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShxdWl6OiBJRXh0UXVpeiwgcGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHM6IEFycmF5PElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzPiwgaXNSZXNldFByZXZpZXc6IGJvb2xlYW4sIHByZXZpZXc/OiBGaWxlKTogYW5ndWxhci5JUHJvbWlzZTxJUXVpej4ge1xyXG4gICAgICAgIHF1aXoucGVybWlzc2lvbnNXaXRoVXNlcnNBbmRHcm91cHMgPSBwZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcztcclxuICAgICAgICBxdWl6LnByZXZpZXcgPSBwcmV2aWV3ICE9IG51bGxcclxuICAgICAgICAgICAgPyB7bmFtZTogcHJldmlldy5uYW1lLCB0eXBlOiBwcmV2aWV3LnR5cGUsIHNpemU6IHByZXZpZXcuc2l6ZX1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIHF1aXoucmVzZXRQcmV2aWV3ID0gaXNSZXNldFByZXZpZXc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3F1aXp6ZXNcIiksIHF1aXopLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRRdWl6QnlVc2VyKHF1aXpJZDogbnVtYmVyLCBzb3VyY2VUeXBlOiBzdHJpbmcsIHF1aXpUYWdzPzogc3RyaW5nW10sIGNvdXJzZUlkPzogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uSWQ/OiBudW1iZXIsIGNvdXJzZVByb2dyZXNzSWQ/OiBudW1iZXIsIGZsYXNoY2FyZE5leHRSb3VuZD86IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SVF1aXpSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3F1aXp6ZXMvcmVzdWx0c1wiKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcXVpeklkOiBxdWl6SWQsXHJcbiAgICAgICAgICAgICAgICBzb3VyY2VUeXBlOiBzb3VyY2VUeXBlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRRdWl6VGFnczogcXVpelRhZ3MsXHJcbiAgICAgICAgICAgICAgICBjb3Vyc2VJZDogY291cnNlSWQsXHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uSWQ6IHNlY3Rpb25JZCxcclxuICAgICAgICAgICAgICAgIGNvdXJzZVByb2dyZXNzSWQ6IGNvdXJzZVByb2dyZXNzSWQsXHJcbiAgICAgICAgICAgICAgICBmbGFzaGNhcmROZXh0Um91bmQ6IGZsYXNoY2FyZE5leHRSb3VuZFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb21wbGV0ZVF1aXpCeVVzZXIocXVpelJlc3VsdDogSVF1aXpSZXN1bHQsIGNvdXJzZUlkPzogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUXVpej4ge1xyXG4gICAgICAgIGxldCBwYXJhbXM6IGFueSA9IHF1aXpSZXN1bHQ7XHJcbiAgICAgICAgaWYgKGNvdXJzZUlkKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5jb3Vyc2VJZCA9IGNvdXJzZUlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvcXVpenplcy9yZXN1bHRzXCIpLCBwYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29tcGxldGVRdWVzdGlvbkJ5VXNlcihxdWl6SWQ6IG51bWJlciwgcXVpelJlc3VsdElkOiBudW1iZXIsIHF1aXpSZXN1bHRWZXJzaW9uOiBudW1iZXIsIHF1ZXN0aW9uSWQ6IG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlcjogSVF1aXpBbnN3ZXJSZXN1bHQsIGNvdXJzZUlkPzogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUXVpelF1ZXN0aW9uPiB7XHJcbiAgICAgICAgbGV0IHBhcmFtczogYW55ID0gYW5zd2VyO1xyXG4gICAgICAgIGlmIChjb3Vyc2VJZCkge1xyXG4gICAgICAgICAgICBwYXJhbXMuY291cnNlSWQgPSBjb3Vyc2VJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3F1aXp6ZXMvOnF1aXpJZC9yZXN1bHRzLzpxdWl6UmVzdWx0SWQvcXVlc3Rpb24vOnF1ZXN0aW9uSWQ/dmVyc2lvbj06dmVyc2lvblwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOnF1aXpJZFwiLCBxdWl6SWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6cXVpelJlc3VsdElkXCIsIHF1aXpSZXN1bHRJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpxdWVzdGlvbklkXCIsIHF1ZXN0aW9uSWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6dmVyc2lvblwiLCBxdWl6UmVzdWx0VmVyc2lvbilcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgIHBhcmFtcylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudFVzZXJRdWl6UmVzdWx0cyhxdWl6SWQ6IG51bWJlciwgc291cmNlVHlwZT86IHN0cmluZywgc2VjdGlvbklkPzogbnVtYmVyLCBjb3Vyc2VQcm9ncmVzc0lkPzogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUXVpelJlc3VsdFtdPiB7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nID0gXCIvYXBpL3F1aXp6ZXMvcmVzdWx0cy86cXVpeklkXCI7XHJcbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCI/c291cmNlVHlwZT06c291cmNlVHlwZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VjdGlvbklkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiJnNlY3Rpb25JZD06c2VjdGlvbklkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb3Vyc2VQcm9ncmVzc0lkKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBcIiZjb3Vyc2VQcm9ncmVzc0lkPTpjb3Vyc2VQcm9ncmVzc0lkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1cmxCdWlsZGVyOiBJVXJsQnVpbGRlciA9IHRoaXMudXJsLmJhc2UodXJsKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cXVpeklkXCIsIHF1aXpJZCk7XHJcbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB1cmxCdWlsZGVyLnBhcmFtKFwiOnNvdXJjZVR5cGVcIiwgc291cmNlVHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWN0aW9uSWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB1cmxCdWlsZGVyLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY291cnNlUHJvZ3Jlc3NJZCkge1xyXG4gICAgICAgICAgICB1cmxCdWlsZGVyLnBhcmFtKFwiOmNvdXJzZVByb2dyZXNzSWRcIiwgY291cnNlUHJvZ3Jlc3NJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh1cmxCdWlsZGVyLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvdXJzZVF1aXpSZXN1bHRzKHNlY3Rpb25JZDogbnVtYmVyLCBjb3Vyc2VQcm9ncmVzc0lkcz86IEFycmF5PG51bWJlcj4sIHVzZXJJZHM/OiBBcnJheTxudW1iZXI+LCBncm91cElkcz86IEFycmF5PG51bWJlcj4pOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElRdWl6UmVzdWx0Pj4ge1xyXG4gICAgICAgIGxldCByZXF1ZXN0Q29uZmlnOiBhbmd1bGFyLklSZXF1ZXN0U2hvcnRjdXRDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogbGltaXQgdGhlIG51bWJlciBvZiBsaXN0IGl0ZW1zIGJlY2F1c2UgVVJJIGxlbmd0aCBzaG91bGQgbm90IGV4Y2VlZCAyMDgzIGNoYXJhY3RlcnNcclxuICAgICAgICAgICAgICAgIGNvdXJzZVByb2dyZXNzSWRzOiBjb3Vyc2VQcm9ncmVzc0lkcyxcclxuICAgICAgICAgICAgICAgIHVzZXJJZHNGaWx0ZXI6IHVzZXJJZHMsXHJcbiAgICAgICAgICAgICAgICBncm91cElkc0ZpbHRlcjogZ3JvdXBJZHNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3F1aXp6ZXMvY291cnNlUmVzdWx0cz9zZWN0aW9uSWQ9OnNlY3Rpb25JZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c2VjdGlvbklkXCIsIHNlY3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgcmVxdWVzdENvbmZpZykudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRRdWl6UXVlc3Rpb25zKGNvdXJzZUlkOiBudW1iZXIsIHNlY3Rpb25JZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJUXVpelF1ZXN0aW9uPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKCBcIi9hcGkvcXVpenplcy9xdWVzdGlvbnM/Y291cnNlSWQ9OmNvdXJzZUlkJnNlY3Rpb25JZD06c2VjdGlvbklkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnNlY3Rpb25JZFwiLCBzZWN0aW9uSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN1cnZleVF1ZXN0aW9ucyhzdXJ2ZXlJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJUXVpelF1ZXN0aW9uPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKCBcIi9hcGkvcXVpenplcy9zdXJ2ZXlRdWVzdGlvbnM/c3VydmV5SWQ9OnN1cnZleUlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzdXJ2ZXlJZFwiLCBzdXJ2ZXlJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWxsU3VydmV5UXVlc3Rpb25zKHN1cnZleUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElRdWl6UXVlc3Rpb24+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoIFwiL2FwaS9xdWl6emVzL2FsbFN1cnZleVF1ZXN0aW9ucz9zdXJ2ZXlJZD06c3VydmV5SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnN1cnZleUlkXCIsIHN1cnZleUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRRdWl6UXVlc3Rpb25zRm9yUXVpeihxdWl6UmVzdWx0SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVF1aXpRdWVzdGlvbj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxRdWl6UXVlc3Rpb25zRm9yUXVpeihxdWl6UmVzdWx0SWQsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWxsUXVpelF1ZXN0aW9uc0ZvclF1aXoocXVpelJlc3VsdElkOiBudW1iZXIsIGlzSW5jbHVkZUluYWN0aXZlOiBib29sZWFuKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJUXVpelF1ZXN0aW9uPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9xdWl6emVzL3F1aXpRdWVzdGlvbnM/cXVpelJlc3VsdElkPTpxdWl6UmVzdWx0SWQmaXNJbmNsdWRlSW5hY3RpdmU9OmlzSW5jbHVkZUluYWN0aXZlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpxdWl6UmVzdWx0SWRcIiwgcXVpelJlc3VsdElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aXNJbmNsdWRlSW5hY3RpdmVcIiwgaXNJbmNsdWRlSW5hY3RpdmUpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1aXpBbnN3ZXJSZXN1bHRzKGNvdXJzZUlkOiBudW1iZXIsIHF1aXpSZXN1bHRJZHM/OiBBcnJheTxudW1iZXI+KTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJUXVpekFuc3dlclJlc3VsdD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvcXVpenplcy9hbnN3ZXJSZXN1bHRzP2NvdXJzZUlkPTpjb3Vyc2VJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHtwYXJhbXM6IHtxdWl6UmVzdWx0SWRzOiBxdWl6UmVzdWx0SWRzfX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1aXpBbnN3ZXJSZXN1bHRzRm9yUXVpelJlc3VsdChxdWl6UmVzdWx0SWQ6IG51bWJlcik6ICBhbmd1bGFyLklQcm9taXNlPEFycmF5PElRdWl6QW5zd2VyUmVzdWx0Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9xdWl6emVzL3F1aXpBbnN3ZXJSZXN1bHRzP3F1aXpSZXN1bHRJZD06cXVpelJlc3VsdElkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpxdWl6UmVzdWx0SWRcIiwgcXVpelJlc3VsdElkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVc2VyUXVpekN1cnJlbnRSZXN1bHQocXVpeklkOiBudW1iZXIsIGF0dGVtcHQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVF1aXpSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvcXVpenplcy9yZXN1bHRzL2N1cnJlbnQvOnF1aXpJZD9hdHRlbXB0PTphdHRlbXB0XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpxdWl6SWRcIiwgcXVpeklkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YXR0ZW1wdFwiLCBhdHRlbXB0IHx8IFwiXCIpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1aXpSZXN1bHQocXVpeklkOiBudW1iZXIsIHF1aXpSZXN1bHRJZD86IG51bWJlciwgY291cnNlSWQ/OiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElRdWl6UmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nID0gXCIvYXBpL3F1aXp6ZXMvOnF1aXpJZC9yZXN1bHRzLzpxdWl6UmVzdWx0SWRcIjtcclxuICAgICAgICBpZiAoY291cnNlSWQpIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiP2NvdXJzZUlkPTpjb3Vyc2VJZFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdXJsQnVpbGRlcjogSVVybEJ1aWxkZXIgPSB0aGlzLnVybC5iYXNlKHVybClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnF1aXpJZFwiLCBxdWl6SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpxdWl6UmVzdWx0SWRcIixxdWl6UmVzdWx0SWQpO1xyXG4gICAgICAgIGlmIChjb3Vyc2VJZCkge1xyXG4gICAgICAgICAgICB1cmxCdWlsZGVyLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHVybEJ1aWxkZXIuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlclF1aXpSZXN1bHQocXVpeklkOiBudW1iZXIsIHF1aXpSZXN1bHRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJUXVpelJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9xdWl6emVzLzpxdWl6SWQvcmVzdWx0cy86cXVpelJlc3VsdElkL215XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpxdWl6SWRcIiwgcXVpeklkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cXVpelJlc3VsdElkXCIsIHF1aXpSZXN1bHRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKnB1YmxpYyByZW1vdmVDdXJyZW50UmVzdWx0KGN1cnJlbnRJZDogbnVtYmVyKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL3F1aXp6ZXMvOmlkXCIpLnBhcmFtKFwiOmlkXCIsIGN1cnJlbnRJZCkuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfSovXHJcblxyXG4gICAgcHVibGljIGhhc1VzZXJDcmVhdGVkUXVpenplcygpOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvcXVpenplcy9wcm9maWxlUXVpenplcy9oYXNDcmVhdGVkXCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBc3Nlc3NtZW50UmVzdWx0KHF1ZXN0aW9uSWQ6IG51bWJlciwgcXVpelJlc3VsdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElBc3Nlc3NtZW50UmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3F1aXp6ZXMvYXNzZXNzbWVudC86cXVpelJlc3VsdElkLzpxdWVzdGlvbklkL1wiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cXVpelJlc3VsdElkXCIsIHF1aXpSZXN1bHRJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnF1ZXN0aW9uSWRcIiwgcXVlc3Rpb25JZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QXNzZXNzbWVudFJlc3VsdHMocXVpelJlc3VsdElkOiBudW1iZXIsIHF1ZXN0aW9uc0lkczogbnVtYmVyW10pOiBhbmd1bGFyLklQcm9taXNlPElBc3Nlc3NtZW50UmVzdWx0W10+IHtcclxuICAgICAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICBpZDogcXVlc3Rpb25zSWRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvcXVpenplcy9hc3Nlc3NtZW50LzpxdWl6UmVzdWx0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnF1aXpSZXN1bHRJZFwiLCBxdWl6UmVzdWx0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHtwYXJhbXM6IHBhcmFtc30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJ1bmRsZUlkRm9yUXVpelJlc3VsdChxdWl6SWQ6IG51bWJlciwgcXVpelJlc3VsdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9xdWl6emVzLzpxdWl6SWQvcmVzdWx0cy86cXVpelJlc3VsdElkL2J1bmRsZUlkRm9yUmVzdWx0XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpxdWl6SWRcIiwgcXVpeklkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cXVpelJlc3VsdElkXCIsIHF1aXpSZXN1bHRJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVpelN1cnZleVN0YXRpc3RpY3MoY291cnNlSWQ6IG51bWJlciwgc3VydmV5SWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVF1aXpTdXJ2ZXlTdGF0aXN0aWNzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoIFwiL2FwaS9xdWl6emVzL2NvdXJzZS86Y291cnNlSWQvc3VydmV5LzpzdXJ2ZXlJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzdXJ2ZXlJZFwiLCBzdXJ2ZXlJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3VydmV5c0ZvckNvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJU2VsZWN0YWJsZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvcXVpenplcy9zdXJ2ZXlGb3JDb3Vyc2U/Y291cnNlSWQ9JHtjb3Vyc2VJZH1gKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGVwZW5kZW50Q291cnNlc0Zyb21RdWl6U3VydmV5KHF1aXpJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJQ291cnNlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL3F1aXp6ZXMvJHtxdWl6SWR9L2NvdXJzZXNgKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5hY3RpdmVRdWl6U3VydmV5KHF1aXpJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvcXVpenplcy8ke3F1aXpJZH0vaW5hY3RpdmVgKSwge30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFuc3dlclJlc3VsdEJ5UXVlc3Rpb25Db2RlKGNvdXJzZVByb2dyZXNzSWQ6IG51bWJlciwgcXVlc3Rpb25Db2RlOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKGAvYXBpL3F1aXp6ZXMvOmNvdXJzZVByb2dyZXNzSWQvYW5zd2VyUmVzdWx0QnlRdWVzdGlvbkNvZGU/cXVlc3Rpb25Db2RlPTpxdWVzdGlvbkNvZGVgKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlUHJvZ3Jlc3NJZFwiLCBjb3Vyc2VQcm9ncmVzc0lkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cXVlc3Rpb25Db2RlXCIsIHF1ZXN0aW9uQ29kZSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUZpbGxhYmxlRm9ybShxdWl6SWQ6IG51bWJlciwgcXVlc3Rpb25JZDogbnVtYmVyLCBidW5kbGVJZDogbnVtYmVyLCBjb3Vyc2VJZDogbnVtYmVyLCBkYXRhOiBhbnkpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZSgnL2FwaS9xdWl6emVzLzpxdWl6SWQvc2F2ZUZpbGxhYmxlRm9ybS86cXVlc3Rpb25JZD9idW5kbGVJZD06YnVuZGxlSWQmY291cnNlSWQ9OmNvdXJzZUlkJylcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpxdWl6SWRcIiwgcXVpeklkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOnF1ZXN0aW9uSWRcIiwgcXVlc3Rpb25JZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpidW5kbGVJZFwiLCBidW5kbGVJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpjb3Vyc2VJZFwiLCBjb3Vyc2VJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksIGRhdGEpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVpenplc0ZvckNvdXJzZShjb3Vyc2VJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJUXVpej4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgL2FwaS9xdWl6emVzL3F1aXpGb3JDb3Vyc2U/Y291cnNlSWQ9JHtjb3Vyc2VJZH1gKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmluZFF1aXp6ZXNCeU1hdGVyaWFsKG1hdGVyaWFsSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVF1aXo+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3F1aXp6ZXMvYnkvbWF0ZXJpYWwvOm1hdGVyaWFsSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm1hdGVyaWFsSWRcIiwgbWF0ZXJpYWxJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7SVF1aXp9IGZyb20gXCIuL21vZGVscy9JUXVpelwiO1xyXG5pbXBvcnQge1F1aXp6ZXNSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvUXVpenplc1JvdXRlclwiO1xyXG5cclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJR3JpZE1vZGVsLCBHcmlkTW9kZWx9IGZyb20gXCIuLy4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vLi4vdXNlcnMvVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtJR3JpZExvYWRpbmdMaXN0ZW5lcn0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtSZXNpemVWaWV3U2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1Jlc2l6ZVZpZXdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UXVpelR5cGV9IGZyb20gXCIuL21vZGVscy9RdWl6VHlwZVwiO1xyXG5pbXBvcnQge0N1c3RvbUJyYW5kaW5nU2VydmljZX0gZnJvbSBcIi4uL2JyYW5kaW5nL0N1c3RvbUJyYW5kaW5nU2VydmljZVwiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuLi9jb21wb25lbnRzL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGV9IGZyb20gXCIuLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vY29tcG9uZW50cy9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9JVXNlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1aXp6ZXNDb250cm9sbGVyIGltcGxlbWVudHMgSUdyaWRMb2FkaW5nTGlzdGVuZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJxdWl6emVzLlF1aXp6ZXNDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgcm93U2hvdzogTWFwPG51bWJlciwgYm9vbGVhbj4gPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyBxdWl6emVzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElRdWl6PjtcclxuICAgIHB1YmxpYyByZXNpemVWaWV3U2VydmljZTogUmVzaXplVmlld1NlcnZpY2U7XHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgd2luZG93OiBhbnk7XHJcbiAgICBwdWJsaWMgcXVpelR5cGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBxdWl6VHlwZXMgPSBbXHJcbiAgICAgICAge2lkOiBRdWl6VHlwZS5RVUlaLCBuYW1lOiBcIlF1aXpcIn0sXHJcbiAgICAgICAge2lkOiBRdWl6VHlwZS5TVVJWRVksIG5hbWU6IFwiU3VydmV5XCJ9XHJcbiAgICBdO1xyXG4gICAgcHVibGljIG93bmVyOiBJU2VsZWN0YWJsZVtdID0gW107XHJcblxyXG4gICAgcHVibGljIGNvdW50QWN0aXZlRmlsdGVyID0gMDtcclxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdG9yYWdlRmlsdGVyVmFsdWVzOiBhbnk7XHJcblxyXG4gICAgcHVibGljIHVzZXJQcm9maWxlOiBJVXNlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR3aW5kb3dcIixcclxuICAgICAgICBRdWl6emVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvbW1vbkZpbHRlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHF1aXp6ZXNSb3V0ZXI6IFF1aXp6ZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJyYW5kaW5nU2VydmljZTogQ3VzdG9tQnJhbmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJUXVpej4oJGh0dHAsIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3F1aXp6ZXNcIikpKTtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLmdldFN0b3JhZ2VGaWx0ZXJzKCk7XHJcbiAgICAgICAgdGhpcy5zZXRUeXBlUGFyYW1ldGVycygpO1xyXG5cclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxMjAwKXtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLnBhZ2VTaXplID0gOTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSA9PSBRdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFJvdXRlKSB7XHJcbiAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLnByZXNlcnZlSGVhZGVyKClcclxuICAgICAgICAgICAgICAgICAgICAuYWRkQWN0aW9uTGlua0lmKHN5c3RlbVBlcm1pc3Npb25zLmFkZFF1aXp6ZXMsICcrJm5ic3A7TmV3JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWl6emVzUm91dGVyLmNyZWF0ZVVybChcIlNVUlZFWVwiKSkudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy4kbG9jYXRpb24ucGF0aCgpID09IFF1aXp6ZXNSb3V0ZXIucXVpenplc0luZGV4Um91dGUpIHtcclxuICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkucHJlc2VydmVIZWFkZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRBY3Rpb25MaW5rSWYoc3lzdGVtUGVybWlzc2lvbnMuYWRkUXVpenplcywgJysmbmJzcDtOZXcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNSb3V0ZXIuY3JlYXRlVXJsKFwiUVVJWlwiKSkudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy4kbG9jYXRpb24ucGF0aCgpID09IFF1aXp6ZXNSb3V0ZXIuZmxhc2hjYXJkc0luZGV4Um91dGUpIHtcclxuICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkucHJlc2VydmVIZWFkZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRBY3Rpb25MaW5rSWYoc3lzdGVtUGVybWlzc2lvbnMuYWRkUXVpenplcywgJysmbmJzcDtOZXcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNSb3V0ZXIuY3JlYXRlVXJsKFwiRkxBU0hDQVJEXCIpKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdUeXBlID0gMTtcclxuICAgICAgICB0aGlzLnJlc2l6ZVZpZXdTZXJ2aWNlID0gbmV3IFJlc2l6ZVZpZXdTZXJ2aWNlKHRoaXMudmlld1R5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLndpbmRvdyA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiR3aW5kb3cpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xyXG5cclxuICAgICAgICAvLyB0aGlzLmxvYWRTZWFyY2goKTtcclxuXHJcbiAgICAgICAgdGhpcy53aW5kb3cuYmluZCgncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFBhZ2UgPSB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuY3VycmVudFBhZ2UgPj0gdGhpcy5xdWl6emVzR3JpZE1vZGVsLnRvdGFsUGFnZUNvdW50XHJcbiAgICAgICAgICAgICAgICA/ICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuY3VycmVudFBhZ2UgLSAxXHJcbiAgICAgICAgICAgICAgICA6dGhpcy5xdWl6emVzR3JpZE1vZGVsLmN1cnJlbnRQYWdlO1xyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5sb2FkUGFnZShjdXJyZW50UGFnZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwucGFnZVNpemUgPSA5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmxvYWRQYWdlKGN1cnJlbnRQYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdUeXBlID0gdGhpcy5yZXNpemVWaWV3U2VydmljZS5zZXRSZXNpemVWaWV3VHlwZSh0aGlzLnZpZXdUeXBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShcIlwiKTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCIkZGVzdHJveVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93LnVuYmluZCgncmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlVmhzUGFnZUhlYWRlclZpc2liaWxpdHkoXCJkZXN0cm95XCIpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCcjaW5mb0RpYWxvZycpLm9uKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAkKFwiYm9keVwiKS5hZGRDbGFzcyhcIm1vZGFsLW9wZW5cIik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0T3duZXJzVXJsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlclByb2ZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlclByb2ZpbGUoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlID0gdXNlcjtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMudXNlclByb2ZpbGUgP1xyXG4gICAgICAgICAgICAgICAgTnVtYmVyKHRoaXMudXNlclByb2ZpbGUucGFnZVZpZXdNb2RlKSA6IDE7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFN0b3JhZ2VGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZUZpbHRlclZhbHVlcyA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJWYWx1ZXMoUXVpenplc0NvbnRyb2xsZXIuTkFNRSk7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciA9IHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5hcHBseVN0b3JhZ2VGaWx0ZXIodGhpcy5zdG9yYWdlRmlsdGVyVmFsdWVzLFxyXG4gICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwpO1xyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldFNlYXJjaElucHV0KFF1aXp6ZXNDb250cm9sbGVyLk5BTUUpO1xyXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLm9wZW5TZWFyY2hJbnB1dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFR5cGVQYXJhbWV0ZXJzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSA9PSBRdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFJvdXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIudHlwZUlkID0gUXVpelR5cGUuU1VSVkVZO1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIlN1cnZleXNcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuRURVQ0FUSU9OX1NVUlZFWVNfTUVOVV9LRVkpO1xyXG4gICAgICAgIH0gZWxzZSBpZih0aGlzLiRsb2NhdGlvbi5wYXRoKCkgPT0gUXVpenplc1JvdXRlci5xdWl6emVzSW5kZXhSb3V0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuZmlsdGVyLnR5cGVJZCA9IFF1aXpUeXBlLlFVSVo7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiUXVpenplc1wiKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5FRFVDQVRJT05fUVVJWlpFU19NRU5VX0tFWSk7XHJcbiAgICAgICAgfSBlbHNlIGlmKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSA9PSBRdWl6emVzUm91dGVyLmZsYXNoY2FyZHNJbmRleFJvdXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIudHlwZUlkID0gUXVpelR5cGUuRkxBU0hDQVJEO1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkZsYXNoY2FyZHNcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuRURVQ0FUSU9OX0ZMQVNIQ0FSRFNfTUVOVV9LRVkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNRdWl6KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRsb2NhdGlvbi5wYXRoKCkgPT0gUXVpenplc1JvdXRlci5xdWl6emVzSW5kZXhSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTdXJ2ZXkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGxvY2F0aW9uLnBhdGgoKSA9PSBRdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0ZsYXNoY2FyZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kbG9jYXRpb24ucGF0aCgpID09IFF1aXp6ZXNSb3V0ZXIuZmxhc2hjYXJkc0luZGV4Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRldGFpbFVybChxdWl6SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSA9PSBRdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFJvdXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1aXp6ZXNSb3V0ZXIuc3VydmV5c0RldGFpbHNVcmwocXVpeklkKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSA9PSBRdWl6emVzUm91dGVyLnF1aXp6ZXNJbmRleFJvdXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1aXp6ZXNSb3V0ZXIucXVpenplc0RldGFpbHNVcmwocXVpeklkKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSA9PSBRdWl6emVzUm91dGVyLmZsYXNoY2FyZHNJbmRleFJvdXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1aXp6ZXNSb3V0ZXIuZmxhc2hjYXJkc0RldGFpbHNVcmwocXVpeklkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVVybChxdWl6SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSA9PSBRdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFJvdXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1aXp6ZXNSb3V0ZXIuc3VydmV5c1VwZGF0ZVVybChxdWl6SWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4kbG9jYXRpb24ucGF0aCgpID09IFF1aXp6ZXNSb3V0ZXIucXVpenplc0luZGV4Um91dGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzVXBkYXRlVXJsKHF1aXpJZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiRsb2NhdGlvbi5wYXRoKCkgPT0gUXVpenplc1JvdXRlci5mbGFzaGNhcmRzSW5kZXhSb3V0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWl6emVzUm91dGVyLmZsYXNoY2FyZHNVcGRhdGVVcmwocXVpeklkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b2dnbGVWaHNQYWdlSGVhZGVyVmlzaWJpbGl0eShwYXJhbTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGVsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikpO1xyXG4gICAgICAgIGlmIChwYXJhbSA9PSBcImRlc3Ryb3lcIikge1xyXG4gICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtID09IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtLmhhc0NsYXNzKFwidmhzLXBhZ2UtaGVhZGVyLWhpZGRlblwiKSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyhcInZocy1wYWdlLWhlYWRlci1oaWRkZW5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGFydExvYWRpbmcoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuZExvYWRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaCgocXVpejogSVF1aXopID0+IHtcclxuICAgICAgICAgICAgcXVpei5zdWJqZWN0TmFtZUFuZFRpdGxlID0gcXVpei5zdWJqZWN0TmFtZSArIFwiL1wiICsgcXVpei50aXRsZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RldGFpbHMoaW5kZXg6IG51bWJlciwga2V5Q29kZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYoa2V5Q29kZSA9PSAxMyB8fCAha2V5Q29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd1Nob3cuc2V0KGluZGV4LCAhdGhpcy5yb3dTaG93LmdldChpbmRleCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoUXVpeigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRRdWl6RGV0YWlscyhxdWl6SWQ6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLiRsb2NhdGlvbi5wYXRoKCkgPT0gUXVpenplc1JvdXRlci5zdXJ2ZXlzSW5kZXhSb3V0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5xdWl6emVzUm91dGVyLnN1cnZleXNEZXRhaWxzVXJsKHF1aXpJZCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4kbG9jYXRpb24ucGF0aCgpID09IFF1aXp6ZXNSb3V0ZXIucXVpenplc0luZGV4Um91dGUpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzRGV0YWlsc1VybChxdWl6SWQpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJGxvY2F0aW9uLnBhdGgoKSA9PSBRdWl6emVzUm91dGVyLmZsYXNoY2FyZHNJbmRleFJvdXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnF1aXp6ZXNSb3V0ZXIuZmxhc2hjYXJkc0RldGFpbHNVcmwocXVpeklkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROb3RGb3VuZE1lc3NhZ2UoKSB7XHJcbiAgICAgICAgaWYodGhpcy4kbG9jYXRpb24ucGF0aCgpID09IFF1aXp6ZXNSb3V0ZXIuc3VydmV5c0luZGV4Um91dGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiU3VydmV5cyBub3QgZm91bmRcIjtcclxuICAgICAgICB9IGVsc2UgaWYodGhpcy4kbG9jYXRpb24ucGF0aCgpID09IFF1aXp6ZXNSb3V0ZXIucXVpenplc0luZGV4Um91dGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiUXVpenplcyBub3QgZm91bmRcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1aXpEZXRhaWxzVXJsKGlkOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWl6emVzUm91dGVyLnF1aXp6ZXNEZXRhaWxzVXJsKGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFNlYXJjaCgpIHtcclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc1F1aXp6ZXNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc1F1aXp6ZXNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc1F1aXp6ZXNGaWx0ZXIudmlld1R5cGVcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmZpbHRlci52aWV3VHlwZSA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNRdWl6emVzRmlsdGVyLnZpZXdUeXBlXCIpKTtcclxuICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzUXVpenplc0ZpbHRlci5zdWJqZWN0SWRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmZpbHRlci5zdWJqZWN0SWQgPSBwYXJzZUludChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzUXVpenplc0ZpbHRlci5zdWJqZWN0SWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc1F1aXp6ZXNGaWx0ZXIub3duZXJJZFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuZmlsdGVyLmZpbGVUeXBlID0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc1F1aXp6ZXNGaWx0ZXIub3duZXJJZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzUXVpenplc0ZpbHRlci5sYW5ndWFnZUlkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIudG9waWMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzUXVpenplc0ZpbHRlci5sYW5ndWFnZUlkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc1F1aXp6ZXNGaWx0ZXIudHlwZUlkXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIudHlwZUlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc1F1aXp6ZXNGaWx0ZXIudHlwZUlkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJTZWFyY2goKXtcclxuXHJcbiAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIudmlld1R5cGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIuc3ViamVjdElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwuZmlsdGVyLm93bmVySWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIubGFuZ3VhZ2VJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmZpbHRlci50eXBlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG5cclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzUXVpenplc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc1F1aXp6ZXNGaWx0ZXIudHlwZUlkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNRdWl6emVzRmlsdGVyLnN1YmplY3RJZFwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzUXVpenplc0ZpbHRlci5vd25lcklkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJ2aHNRdWl6emVzRmlsdGVyLmxhbmd1YWdlSWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZoc1F1aXp6ZXNGaWx0ZXIudmlld1R5cGVcIik7XHJcblxyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GaWx0ZXJDaGFuZ2Uoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInZoc1F1aXp6ZXNGaWx0ZXIuXCIgKyBrZXksIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmhzUXVpenplc0ZpbHRlci5cIiArIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWaWV3VHlwZSh2aWV3VHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMucmVzaXplVmlld1NlcnZpY2Uub2xkVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJQYWdlVmlld01vZGUoQm9vbGVhbih2aWV3VHlwZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVXNlclBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVBhZ2VWaWV3TW9kZShwYWdlVmlld01vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZpZXdUeXBlU2VsZWN0ZWQodmlld1R5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdUeXBlID09IHZpZXdUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRPd25lcnNVcmwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRPd25lcnNVcmwoKVxyXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB0aGlzLm93bmVyID0gcmVzcG9uc2UpO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gXCIvYXBpL3VzZXJTZWxlY3Rvci91c2Vyc0ZvckN1cnJlbnRVc2VyXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy90b2RvOiBkZWxldGUgbWV0aG9kIHdoZW4gcmVhbGx5IGRlbGV0ZSB0aGUgcXVpei9zdXJ2ZXlcclxuICAgIHB1YmxpYyBjYWxjVG90YWxDb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBjb3VudDogbnVtYmVyID0gMDtcclxuICAgICAgICBmb3IgKGxldCBxdWl6IG9mIHRoaXMucXVpenplc0dyaWRNb2RlbC5lbnRyaWVzKSB7XHJcbiAgICAgICAgICAgIHF1aXouYWN0aXZlPyBjb3VudCsrIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbXBvcnRRdWl6KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS4kYnJvYWRjYXN0KEV2ZW50LlFVSVpfU1VSVkVZX0lNUE9SVF9VUERBVEUpO1xyXG4gICAgICAgICQoXCIjaW1wb3J0UXVpelRlbXBsYXRlXCIpLm1vZGFsKFwidG9nZ2xlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hLZXlQcmVzcygpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2F2ZVNlYXJjaElucHV0KFF1aXp6ZXNDb250cm9sbGVyLk5BTUUsIHRoaXMuc2VhcmNoSW5wdXQpO1xyXG4gICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICB0aGlzLnF1aXp6ZXNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uRmlsdGVyU2VydmljZS5jbG9zZVNlYXJjaElucHV0KFF1aXp6ZXNDb250cm9sbGVyLk5BTUUsIHdpbmRvdyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0IHx8IHRoaXMuc2VhcmNoSW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMucXVpenplc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5xdWl6emVzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0ZpbHRlckRpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2hvd0ZpbHRlckRpYWxvZyh3aW5kb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVGaWx0ZXIodHlwZTogc3RyaW5nLCByZWZlcmVuY2VPYmplY3Q6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY291bnRBY3RpdmVGaWx0ZXIgKz0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLnVwZGF0ZUdlbmVyYWxGaWx0ZXIodHlwZSwgcmVmZXJlbmNlT2JqZWN0LCBRdWl6emVzQ29udHJvbGxlci5OQU1FKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb3VudEFjdGl2ZUZpbHRlciA9IDA7XHJcbiAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmNsZWFyRmlsdGVyKFF1aXp6ZXNDb250cm9sbGVyLk5BTUUsIHRoaXMucXVpenplc0dyaWRNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTW9iaWxlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA3Njg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFBvcHVwQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgICAgICBsZXQgY2FyZHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiY2FyZCBpbmZvcm1hdGlvbl90b29sdGlwXCIpKTtcclxuICAgICAgICBmb3IgKGxldCBjYXJkIG9mIGNhcmRzKSB7XHJcbiAgICAgICAgICAgIGxldCByZWM6IENsaWVudFJlY3QgPSBjYXJkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICBsZXQgcG9wdXA6IEVsZW1lbnQgPSBjYXJkLnBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInBvcHVwX29uaG92ZXJcIikuaXRlbSgwKTtcclxuICAgICAgICAgICAgaWYgKHJlYy5yaWdodCArIHBvcHVwLmNsaWVudFdpZHRoID49IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwicG9wdXBfb25ob3ZlciBsZWZ0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJyaWdodC1wb2ludGVyXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwb3B1cF9vbmhvdmVyIHJpZ2h0XCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLml0ZW0oMCkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJsZWZ0LXBvaW50ZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtRdWl6U2VydmljZX0gZnJvbSBcIi4vUXVpelNlcnZpY2VcIjtcclxuaW1wb3J0IHtRdWl6SW1wb3J0RXhwb3J0U2VydmljZX0gZnJvbSBcIi4vUXVpekltcG9ydEV4cG9ydFNlcnZpY2VcIjtcclxuaW1wb3J0IHtRdWl6emVzQ29udHJvbGxlcn0gZnJvbSBcIi4vUXVpenplc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtRdWl6RWRpdENvbnRyb2xsZXJ9IGZyb20gXCIuL1F1aXpFZGl0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge1F1aXpDb250cm9sbGVyfSBmcm9tIFwiLi9RdWl6Q29udHJvbGxlclwiO1xyXG5pbXBvcnQge1F1aXpQYXNzaW5nQ29udHJvbGxlcn0gZnJvbSBcIi4vUXVpelBhc3NpbmdDb250cm9sbGVyXCI7XHJcblxyXG5pbXBvcnQge0F1dGhNb2R1bGV9IGZyb20gXCIuLy4uL2F1dGgvQXV0aE1vZHVsZVwiO1xyXG5pbXBvcnQge0F1dGhDb3JlTW9kdWxlfSBmcm9tIFwiLi8uLi9hdXRoY29yZS9BdXRoQ29yZU1vZHVsZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5TW9kdWxlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eU1vZHVsZVwiO1xyXG5pbXBvcnQge1VzZXJzTW9kdWxlfSBmcm9tIFwiLi8uLi91c2Vycy9Vc2Vyc01vZHVsZVwiO1xyXG5pbXBvcnQge1VybHNNb2R1bGV9IGZyb20gXCIuLy4uL3VybHMvVXJsc01vZHVsZVwiO1xyXG5cclxuZXhwb3J0IHZhciBRdWl6emVzTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwicXVpenplc1wiLCBbXHJcbiAgICAgICAgQXV0aE1vZHVsZS5uYW1lLFxyXG4gICAgICAgIEF1dGhDb3JlTW9kdWxlLm5hbWUsXHJcbiAgICAgICAgU2VjdXJpdHlNb2R1bGUubmFtZSxcclxuICAgICAgICBVc2Vyc01vZHVsZS5uYW1lLFxyXG4gICAgICAgIFVybHNNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKFF1aXpTZXJ2aWNlLk5BTUUsIFF1aXpTZXJ2aWNlKVxyXG4gICAgLnNlcnZpY2UoUXVpekltcG9ydEV4cG9ydFNlcnZpY2UuTkFNRSwgUXVpekltcG9ydEV4cG9ydFNlcnZpY2UpXHJcbiAgICAuY29udHJvbGxlcihRdWl6emVzQ29udHJvbGxlci5OQU1FLCBRdWl6emVzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKFF1aXpFZGl0Q29udHJvbGxlci5OQU1FLCBRdWl6RWRpdENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihRdWl6Q29udHJvbGxlci5OQU1FLCBRdWl6Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKFF1aXpQYXNzaW5nQ29udHJvbGxlci5OQU1FLCBRdWl6UGFzc2luZ0NvbnRyb2xsZXIpO1xyXG4iLCJleHBvcnQgZW51bSBJUXVpekltcG9ydEV4cG9ydEVycm9yQ29kZSB7XHJcbiAgICBOT19FUlJPUlMsXHJcbiAgICBRVUlaX05BTUVfV0FTX05PVF9HSVZFTixcclxuICAgIElTX0NPUlJFQ1RfRklFTERfSVNfRU1QVFksXHJcbiAgICBRVUVTVElPTl9UWVBFX1dBU19OT1RfR0lWRU4sXHJcbiAgICBRVUVTVElPTl9UWVBFX0lTX1dST05HLFxyXG4gICAgT1BUSU9OX1dBU19OT1RfR0lWRU4sXHJcbiAgICBRVUVTVElPTl9GSUVMRF9JU19FTVBUWSxcclxuICAgIEFOU1dFUl9GSUVMRF9JU19FTVBUWSxcclxuICAgIFNVQlRZUEVfRklFTERfRE9FU19OMFRfTUFUQ0hfVE9fVEhFX0FMTE9XRUQsXHJcbiAgICBcIkNvcnJlY3QgYW5zd2VyIGhhcyBub3QgYmVlbiBpbmNsdWRlZCBmb3IgdGhlIHF1ZXN0aW9uOiBcIixcclxuICAgIE5PTkUsXHJcbiAgICBTVUJUWVBFX0ZJRUxEX0lTX0VNUFRZLFxyXG4gICAgRkxBU0hDQVJEX05BTUVfV0FTX05PVF9HSVZFTixcclxuICAgIEFMTE9XRURfT05MWV9PTkVfQ09SUkVDVF9BTlNXRVJcclxufSIsImV4cG9ydCBlbnVtIE5leHRRdWVzdGlvblR5cGUge1xyXG4gICAgTkVYVF9RVUVTVElPTixcclxuICAgIFNQRUNJRklFRF9RVUVTVElPTixcclxuICAgIEVORF9PRl9USEVfUVVJWlxyXG59IiwiZXhwb3J0IGVudW0gUXVlc3Rpb25UeXBlIHtcclxuICAgIFNIT1JUX0FOU1dFUixcclxuICAgIFNIT1JUX0FOU1dFUl9BVURJT19SRVNQT05TRSxcclxuICAgIE1VTFRJUExFX0NIT0lDRV9TSU5HTEVfQU5TV0VSLFxyXG4gICAgTVVMVElQTEVfQ0hPSUNFX01VTFRJUExFX0FOU1dFUixcclxuICAgIFNDQUxFRF9BTlNXRVIsXHJcbiAgICBTSE9SVF9BTlNXRVJfV0lUSF9VUExPQUQsXHJcbiAgICBGSUxMX0lOX1RIRV9CTEFOSyxcclxuICAgIE1BVENISU5HX0FOU1dFUixcclxuICAgIEhJRElOR19PUFRJT05TX01BVENISU5HX0FOU1dFUixcclxuICAgIEZJTExBQkxFX0ZPUk0sXHJcbiAgICBGTEFTSF9DQVJELFxyXG4gICAgSE9UU1BPVF9TSU5HTEVfQ0hPSUNFLFxyXG4gICAgSE9UU1BPVF9NVUxUSVBMRV9DSE9JQ0VcclxufSIsImV4cG9ydCBlbnVtIFF1aXpSZXN1bHRTdGF0dXMge1xyXG4gICAgUEFTU0VELFxyXG4gICAgRkFJTEVELFxyXG4gICAgU1VCTUlUVEVEXHJcbn0iLCJleHBvcnQgZW51bSBRdWl6VHlwZSB7XHJcbiAgICBRVUlaLFxyXG4gICAgU1VSVkVZLFxyXG4gICAgRkxBU0hDQVJEXHJcbn0iLCJleHBvcnQgZW51bSBTY2FsZWRBbnN3ZXJRdWVzdGlvblR5cGUge1xyXG4gICAgWUVTX05PLFxyXG4gICAgUkVDT01NRU5ERURfM19BTlNXRVJTLFxyXG4gICAgQUdSRUVfNV9BTlNXRVJTXHJcbn0iLCJpbXBvcnQge1JlZmVyZW5jZVV0aWxzfSBmcm9tIFwiLi9SZWZlcmVuY2VVdGlsc1wiO1xyXG5pbXBvcnQge1JlZmVyZW5jZVNlcnZpY2V9IGZyb20gXCIuL1JlZmVyZW5jZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUmVmZXJlbmNlRW50aXR5TWV0YWRhdGF9IGZyb20gXCIuL21vZGVscy9SZWZlcmVuY2VNZXRhZGF0YVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4vLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi8uLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi8uLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL1JlZmVyZW5jZVJvdXRlclwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtCdW5kbGVTZXJ2aWNlfSBmcm9tIFwiLi4vYnVuZGxlcy9CdW5kbGVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJ1bmRsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlckluZm99IGZyb20gXCIuLi9zZWN1cml0eS9JVXNlckluZm9cIjtcclxuaW1wb3J0IHtDaGVja0J1c2luZXNzVW5pdElkfSBmcm9tIFwiLi4vdXRpbHMvQ2hlY2tCdXNpbmVzc1VuaXRJZFwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5fSBmcm9tIFwiLi9tb2RlbHMvSVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHlcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicmVmZXJlbmNlLlJlZmVyZW5jZUNvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgU1VCSkVDVFNfVEFCX0tFWTogc3RyaW5nID0gXCJzdWJqZWN0c1wiO1xyXG4gICAgcHVibGljIExBTkdVQUdFU19UQUJfS0VZOiBzdHJpbmcgPSBcImxhbmd1YWdlc1wiO1xyXG4gICAgcHVibGljIExFQVJOSU5HX1BBVEhfVFlQRVNfVEFCX0tFWTogc3RyaW5nID0gXCJsZWFybmluZ1BhdGhUeXBlc1wiO1xyXG4gICAgcHVibGljIENPVVJTRV9UWVBFU19UQUJfS0VZOiBzdHJpbmcgPSBcImNvdXJzZVR5cGVzXCI7XHJcbiAgICBwdWJsaWMgU09VUkNFU19UQUJfS0VZOiBzdHJpbmcgPSBcInNvdXJjZXNcIjtcclxuICAgIHB1YmxpYyBTT1VSQ0VfVFlQRVNfVEFCX0tFWTogc3RyaW5nID0gXCJzb3VyY2VUeXBlc1wiO1xyXG4gICAgcHVibGljIENPTVBMRVhJVFlfTEVWRUxTX1RBQl9LRVk6IHN0cmluZyA9IFwiY29tcGxleGl0eUxldmVsc1wiO1xyXG4gICAgcHVibGljIENSRURJVF9UWVBFU19UQUJfS0VZOiBzdHJpbmcgPSBcImNyZWRpdFR5cGVzXCI7XHJcbiAgICBwdWJsaWMgTE9DQVRJT05fVFlQRVNfVEFCX0tFWTogc3RyaW5nID0gXCJsb2NhdGlvblR5cGVzXCI7XHJcbiAgICBwdWJsaWMgTE9DQVRJT05TX1RBQl9LRVk6IHN0cmluZyA9IFwibG9jYXRpb25zXCI7XHJcbiAgICBwdWJsaWMgRVFVSVBNRU5UU19UQUJfS0VZOiBzdHJpbmcgPSBcImVxdWlwbWVudFwiO1xyXG5cclxuICAgIHB1YmxpYyByZWZlcmVuY2VFbnRpdGllc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxNYXA8c3RyaW5nLCBhbnk+PjtcclxuICAgIHB1YmxpYyByZWZlcmVuY2VNZXRhZGF0YTogSVJlZmVyZW5jZUVudGl0eU1ldGFkYXRhO1xyXG5cclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHJvdGVjdGVkIHJlZmVyZW5jZURlZmF1bHRWYWx1ZXM6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCByZWZlcmVuY2VGaWx0ZXI6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCByZWZlcmVuY2VBc3NvY2lhdGlvbkZpbHRlcnM6IHN0cmluZztcclxuICAgIHB1YmxpYyBzeXN0ZW1CdW5kbGU6IElCdW5kbGU7XHJcbiAgICBwdWJsaWMgY3VycmVudFVzZXI6IElVc2VySW5mbztcclxuICAgIHByaXZhdGUgYnVzaW5lc3NVbml0czogQXJyYXk8SVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHk+O1xyXG5cclxuICAgIHByaXZhdGUgdG9wTWVudUtleTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBSZWZlcmVuY2VSb3V0ZXIuTkFNRSxcclxuICAgICAgICBSZWZlcmVuY2VVdGlscy5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1bmRsZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkICRodHRwOiBuZy5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgJHJvdXRlUGFyYW1zOiBuZy5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCByZWZlcmVuY2VSb3V0ZXI6IFJlZmVyZW5jZVJvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyByZWZlcmVuY2VVdGlsczogUmVmZXJlbmNlVXRpbHMsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcmVmZXJlbmNlU2VydmljZTogUmVmZXJlbmNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1bmRsZVNlcnZpY2U6IEJ1bmRsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1c2luZXNzVW5pdHNTZXJ2aWNlOiBCdXNpbmVzc1VuaXRzU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZFN5c3RlbVBlcm1pc3Npb25zKHN5c3RlbVBlcm1pc3Npb25zID0+IHN5c3RlbVBlcm1pc3Npb25zLnZpZXdSZWZlcmVuY2VEYXRhKTtcclxuXHJcbiAgICAgICAgbGV0IHJlZmVyZW5jZU5hbWU6IHN0cmluZyA9IHRoaXMuJHJvdXRlUGFyYW1zW1JlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfTkFNRV9QQVJBTV07XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TWVNURU1fRElDVElPTkFSSUVTX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcih0aGlzLmdldFJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRvcE1lbnVLZXkocmVmZXJlbmNlTmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlRGVmYXVsdFZhbHVlcyA9IHRoaXMuJGxvY2F0aW9uLnNlYXJjaCgpW1JlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfREVGQVVMVF9WQUxVRVNfUEFSQU1dO1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlRmlsdGVyID0gdGhpcy4kbG9jYXRpb24uc2VhcmNoKClbUmVmZXJlbmNlUm91dGVyLlJFRkVSRU5DRV9GSUxURVJfUEFSQU1dO1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlQXNzb2NpYXRpb25GaWx0ZXJzID0gdGhpcy4kbG9jYXRpb24uc2VhcmNoKClbUmVmZXJlbmNlUm91dGVyLlJFRkVSRU5DRV9BU1NPQ0lBVElPTl9GSUxURVJTX1BBUkFNXTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VFbnRpdGllc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPE1hcDxzdHJpbmcsIGFueT4+KHRoaXMuJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL3JlZmVyZW5jZS86bmFtZS9lbnRpdGllc1wiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOm5hbWVcIiwgcmVmZXJlbmNlTmFtZSkuc2VydmljZSgpKSk7XHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VFbnRpdGllc0dyaWRNb2RlbC5maWx0ZXIucmVmZXJlbmNlRmlsdGVyID0gdGhpcy5yZWZlcmVuY2VGaWx0ZXI7XHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VFbnRpdGllc0dyaWRNb2RlbC5maWx0ZXIucmVmZXJlbmNlU2VhcmNoU3RyaW5nID0gXCJcIjtcclxuICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0aWVzR3JpZE1vZGVsLmZpbHRlci5yZWZlcmVuY2VTcGxpdFBhcmFtID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLmdldFJlZmVyZW5jZU1ldGFkYXRhKHJlZmVyZW5jZU5hbWUpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlTWV0YWRhdGEgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJ1bmRsZVNlcnZpY2UuZ2V0U3lzdGVtQnVuZGxlKClcclxuICAgICAgICAgICAgLnRoZW4oYiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbUJ1bmRsZSA9IGI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbUJ1bmRsZSA9IHtpZDogMX07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdXNlcjtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRzRGVhY3RpdmF0ZUZvclNlbGVjdG9yKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHRoaXMuYnVzaW5lc3NVbml0cyA9IDxBcnJheTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT4+IHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFJlZmVyZW5jZUVkaXRVcmwoaWQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlTWV0YWRhdGFcclxuICAgICAgICAgICAgPyBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKHRoaXMucmVmZXJlbmNlUm91dGVyLmVkaXRVcmwodGhpcy5yZWZlcmVuY2VNZXRhZGF0YS5rZXksIGlkKSlcclxuICAgICAgICAgICAgICAgIC5hZGQoXCI/XCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkSWYodGhpcy5yZWZlcmVuY2VEZWZhdWx0VmFsdWVzICE9IG51bGwsIFJlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfREVGQVVMVF9WQUxVRVNfUEFSQU0sIFwiPVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlVXRpbHMuZ2V0U3RyaW5nSW5Ccm93c2VyRm9ybWF0KHRoaXMucmVmZXJlbmNlRGVmYXVsdFZhbHVlcyksIFwiJlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZElmKHRoaXMucmVmZXJlbmNlRmlsdGVyICE9IG51bGwsIFJlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfRklMVEVSX1BBUkFNLCBcIj1cIixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZVV0aWxzLmdldFN0cmluZ0luQnJvd3NlckZvcm1hdCh0aGlzLnJlZmVyZW5jZUZpbHRlciksIFwiJlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZElmKHRoaXMucmVmZXJlbmNlQXNzb2NpYXRpb25GaWx0ZXJzICE9IG51bGwsIFJlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfQVNTT0NJQVRJT05fRklMVEVSU19QQVJBTSwgXCI9XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VVdGlscy5nZXRTdHJpbmdJbkJyb3dzZXJGb3JtYXQodGhpcy5yZWZlcmVuY2VBc3NvY2lhdGlvbkZpbHRlcnMpLCBcIiZcIilcclxuICAgICAgICAgICAgICAgIC5idWlsZCgpXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01ldGFMb2FkZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN5c3RlbVBlcm1pc3Npb25zIHx8ICF0aGlzLnJlZmVyZW5jZU1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0VkaXRBbGxvd2VkKGVudGl0eSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc01ldGFMb2FkZWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5lZGl0UmVmZXJlbmNlRGF0YVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5yZWZlcmVuY2VNZXRhZGF0YS5pc0ludGVybmFsXHJcbiAgICAgICAgICAgICYmIGVudGl0eVt0aGlzLnJlZmVyZW5jZVV0aWxzLmdldEVudGl0eUlzQWN0aXZlUHJvcGVydHkoKV1cclxuICAgICAgICAgICAgJiYgKCFlbnRpdHkuaGFzT3duUHJvcGVydHkoUmVmZXJlbmNlVXRpbHMuQlVTSU5FU1NfVU5JVF9JRF9QUk9QRVJUWSkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKSAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5nZXRDdXJyZW50VXNlcigpLmFsbEJ1c2luZXNzVW5pdHNcclxuICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmF1dGhNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkuYnVzaW5lc3NVbml0cy5pbmRleE9mKGVudGl0eVtSZWZlcmVuY2VVdGlscy5CVVNJTkVTU19VTklUX0lEX1BST1BFUlRZXSkgIT0gLTFcclxuICAgICAgICAgICAgICAgICkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY3RpdmF0ZUVudGl0eShpbmRleDogbnVtYmVyLCBlbnRpdHk6IE1hcDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcclxuICAgICAgICBsZXQgcmVmZXJlbmNlTmFtZTogc3RyaW5nID0gdGhpcy5yZWZlcmVuY2VNZXRhZGF0YS5rZXk7XHJcbiAgICAgICAgbGV0IGlkOiBudW1iZXIgPSBlbnRpdHlbUmVmZXJlbmNlVXRpbHMuZW50aXR5SWRQcm9wZXJ0eV07XHJcbiAgICAgICAgbGV0IHZlcnNpb246IG51bWJlciA9IGVudGl0eVtSZWZlcmVuY2VVdGlscy5lbnRpdHlWZXJzaW9uUHJvcGVydHldO1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlU2VydmljZS5zZXRBY3RpdmVSZWZlcmVuY2VFbnRpdHkocmVmZXJlbmNlTmFtZSwgaWQsIHZlcnNpb24sIHRydWUpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VFbnRpdGllc0dyaWRNb2RlbC5lbnRyaWVzW2luZGV4XSA9IHJlc3VsdDtcclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IucmVmZXJlbmNlcy5kdXBsaWNhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJSZWZlcmVuY2VkIGRhdGEgZWxlbWVudCBhbHJlYWR5IGV4aXN0c1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UmVmZXJlbmNlTmFtZShyZWZlcmVuY2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAocmVmZXJlbmNlTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwic3ViamVjdHNcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlN1YmplY3RzXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsYW5ndWFnZXNcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIkxhbmd1YWdlc1wiO1xyXG4gICAgICAgICAgICBjYXNlIFwibGVhcm5pbmdQYXRoVHlwZXNcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIkxlYXJuaW5nIHBhdGggdHlwZXNcIjtcclxuICAgICAgICAgICAgY2FzZSBcImNvdXJzZVR5cGVzXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJDb3Vyc2UgdHlwZXNcIjtcclxuICAgICAgICAgICAgY2FzZSBcInNvdXJjZXNcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlNvdXJjZXNcIjtcclxuICAgICAgICAgICAgY2FzZSBcInNvdXJjZVR5cGVzXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJTb3VyY2UgdHlwZXNcIjtcclxuICAgICAgICAgICAgY2FzZSBcImNvbXBsZXhpdHlMZXZlbHNcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIkNvbXBsZXhpdHkgbGV2ZWxzXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjcmVkaXRUeXBlc1wiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiQ3JlZGl0IHR5cGVzXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsb2NhdGlvblR5cGVzXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJMb2NhdGlvbiB0eXBlc1wiO1xyXG4gICAgICAgICAgICBjYXNlIFwibG9jYXRpb25zXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJMb2NhdGlvbnNcIjtcclxuICAgICAgICAgICAgY2FzZSBcImVxdWlwbWVudFwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiRXF1aXBtZW50XCI7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJDb3JlIEFDSElFVkVcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc1VzZXJTYW1lQnVzaW5lc3NVbml0cyhidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKGJ1c2luZXNzVW5pdElkID09IG51bGwgJiYgdGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQ2hlY2tCdXNpbmVzc1VuaXRJZC5oYXNVc2VyU2FtZUJ1c2luZXNzVW5pdHModGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzLCBidXNpbmVzc1VuaXRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJ1c2luZXNzVW5pdEJ5SWQoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmJ1c2luZXNzVW5pdHMuZmlsdGVyKGJ1ID0+IGJ1LmlkID09IGJ1c2luZXNzVW5pdElkKVswXS5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0VG9wTWVudUtleShyZWZlcmVuY2VOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKHJlZmVyZW5jZU5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSBcInN1YmplY3RzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcE1lbnVLZXkgPSB0aGlzLlNVQkpFQ1RTX1RBQl9LRVk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImxhbmd1YWdlc1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BNZW51S2V5ID0gdGhpcy5MQU5HVUFHRVNfVEFCX0tFWTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibGVhcm5pbmdQYXRoVHlwZXNcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMudG9wTWVudUtleSA9IHRoaXMuTEVBUk5JTkdfUEFUSF9UWVBFU19UQUJfS0VZO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjb3Vyc2VUeXBlc1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BNZW51S2V5ID0gdGhpcy5DT1VSU0VfVFlQRVNfVEFCX0tFWTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwic291cmNlc1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BNZW51S2V5ID0gdGhpcy5TT1VSQ0VTX1RBQl9LRVk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNvdXJjZVR5cGVzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcE1lbnVLZXkgPSB0aGlzLlNPVVJDRV9UWVBFU19UQUJfS0VZO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJjb21wbGV4aXR5TGV2ZWxzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcE1lbnVLZXkgPSB0aGlzLkNPTVBMRVhJVFlfTEVWRUxTX1RBQl9LRVk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImNyZWRpdFR5cGVzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcE1lbnVLZXkgPSB0aGlzLkNSRURJVF9UWVBFU19UQUJfS0VZO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsb2NhdGlvblR5cGVzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcE1lbnVLZXkgPSB0aGlzLkxPQ0FUSU9OX1RZUEVTX1RBQl9LRVk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImxvY2F0aW9uc1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BNZW51S2V5ID0gdGhpcy5MT0NBVElPTlNfVEFCX0tFWTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZXF1aXBtZW50XCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcE1lbnVLZXkgPSB0aGlzLkVRVUlQTUVOVFNfVEFCX0tFWTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BNZW51S2V5ID0gdGhpcy5pc0N1cnJlbnRVc2VyU3lzdGVtQWRtaW5pc3RyYXRvcigpID8gdGhpcy5MQU5HVUFHRVNfVEFCX0tFWSA6IHRoaXMuU1VCSkVDVFNfVEFCX0tFWTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ3VycmVudFVzZXJTeXN0ZW1BZG1pbmlzdHJhdG9yKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkgJiYgdGhpcy5hdXRoTWFuYWdlci5nZXRDdXJyZW50VXNlcigpLmlkID09PSAxO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1RvcE1lbnVBY3RpdmUodG9wTWVudUtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9wTWVudUtleSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWNvZGVBdHRyaWJ1dGVzKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aXRsZTtcclxuICAgICAgICBzd2l0Y2ggKHRpdGxlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJMb2NhdGlvbiB0eXBlXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiTG9jYXRpb24gdHlwZVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkRlc2NyaXB0aW9uXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiRGVzY3JpcHRpb25cIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJDYXBhY2l0eVwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIkNhcGFjaXR5XCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiQWRkcmVzc1wiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIkFkZHJlc3NcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSZWZlcmVuY2VVdGlsc30gZnJvbSBcIi4vUmVmZXJlbmNlVXRpbHNcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VTZXJ2aWNlfSBmcm9tIFwiLi9SZWZlcmVuY2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlUmVkaXJlY3R9IGZyb20gXCIuL1JlZmVyZW5jZVJlZGlyZWN0XCI7XHJcbmltcG9ydCB7SVJlZmVyZW5jZUVudGl0eU1ldGFkYXRhfSBmcm9tIFwiLi9tb2RlbHMvUmVmZXJlbmNlTWV0YWRhdGFcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VJc1JlcXVpcmVkVmFsaWRhdG9yfSBmcm9tIFwiLi92YWxpZGF0b3JzL1JlZmVyZW5jZUlzUmVxdWlyZWRWYWxpZGF0b3JcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VNYXhMZW5ndGhWYWxpZGF0b3J9IGZyb20gXCIuL3ZhbGlkYXRvcnMvUmVmZXJlbmNlTWF4TGVuZ3RoVmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlUmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXBWYWxpZGF0b3J9IGZyb20gXCIuL3ZhbGlkYXRvcnMvUmVmZXJlbmNlUmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXBWYWxpZGF0b3JcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi8uLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZVJvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9SZWZlcmVuY2VSb3V0ZXJcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VNaW5WYWx1ZVZhbGlkYXRvcn0gZnJvbSBcIi4vdmFsaWRhdG9ycy9SZWZlcmVuY2VNaW5WYWx1ZVZhbGlkYXRvclwiO1xyXG5cclxuaW50ZXJmYWNlIElOYW1lZFJlZmVyZW5jZWRPYmplY3Qge1xyXG4gICAgaWQ/OiBudW1iZXI7XHJcbiAgICB0eXBlPzogc3RyaW5nO1xyXG4gICAgdHlwZVRleHRDYXA/OiBzdHJpbmc7XHJcbiAgICBuYW1lPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVmZXJlbmNlRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJyZWZlcmVuY2UuUmVmZXJlbmNlRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgcmVmZXJlbmNlRW50aXR5OiBNYXA8c3RyaW5nLCBhbnk+O1xyXG4gICAgcHVibGljIHJlZmVyZW5jZU1ldGFkYXRhOiBJUmVmZXJlbmNlRW50aXR5TWV0YWRhdGE7XHJcbiAgICBwdWJsaWMgcmVmZXJlbmNlQXNzb2NpYXRpb25GaWx0ZXJzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gICAgcHVibGljIHJlZmVyZW5jZVZhbGlkYXRpb25FcnJvcnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBkaXNhYmxlU2F2ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByb3RlY3RlZCByZWZlcmVuY2VEZWZhdWx0VmFsdWVzOiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgcmVmZXJlbmNlRmlsdGVyOiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgcmVmZXJlbmNlQXNzb2NpYXRpb25GaWx0ZXJzOiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgcmVmZXJlbmNlRGVmYXVsdFZhbHVlc01hcDogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcml2YXRlIHJlZGlyZWN0U3RvcmFnZVVybDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByZWRpcmVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyB1c2VkSW5MaXN0OiBJTmFtZWRSZWZlcmVuY2VkT2JqZWN0W107XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBSZWZlcmVuY2VSb3V0ZXIuTkFNRSxcclxuICAgICAgICBSZWZlcmVuY2VVdGlscy5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBSZWZlcmVuY2VSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkICRyb290U2NvcGUsIHByb3RlY3RlZCAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgJHJvdXRlUGFyYW1zOiBuZy5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcmVmZXJlbmNlUm91dGVyOiBSZWZlcmVuY2VSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcmVmZXJlbmNlVXRpbHM6IFJlZmVyZW5jZVV0aWxzLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHJlZmVyZW5jZUFwaTogUmVmZXJlbmNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCByZWZlcmVuY2VSZWRpcmVjdDogUmVmZXJlbmNlUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS4kb24oUmVmZXJlbmNlUmVkaXJlY3QuUkVESVJFQ1RfVE9fRURJVF9SRUZFUkVOQ0VfSVRFTV9NRVNTQUdFLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVkaXJlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZGlyZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlUmVkaXJlY3QuZ2V0QW5kUmVtb3ZlU3RvcmFnZVVybCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCByZWZlcmVuY2VJZDogbnVtYmVyID0gcGFyc2VJbnQodGhpcy4kcm91dGVQYXJhbXNbUmVmZXJlbmNlUm91dGVyLlJFRkVSRU5DRV9JRF9QQVJBTV0sIDEwKTtcclxuICAgICAgICBsZXQgcmVmZXJlbmNlTmFtZTogc3RyaW5nID0gdGhpcy4kcm91dGVQYXJhbXNbUmVmZXJlbmNlUm91dGVyLlJFRkVSRU5DRV9OQU1FX1BBUkFNXTtcclxuICAgICAgICBsZXQgaGFzUmVmZXJlbmNlSWQ6IGJvb2xlYW4gPSAhaXNOYU4ocmVmZXJlbmNlSWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9uc0lmKGhhc1JlZmVyZW5jZUlkLCBzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5lZGl0UmVmZXJlbmNlRGF0YSlcclxuICAgICAgICAgICAgLmRlbWFuZFN5c3RlbVBlcm1pc3Npb25zSWYoIWhhc1JlZmVyZW5jZUlkLCBzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5hZGRSZWZlcmVuY2VEYXRhKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShcImFkbWluaXN0cmF0aW9uX1wiICsgcmVmZXJlbmNlTmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VEZWZhdWx0VmFsdWVzID0gdGhpcy4kbG9jYXRpb24uc2VhcmNoKClbUmVmZXJlbmNlUm91dGVyLlJFRkVSRU5DRV9ERUZBVUxUX1ZBTFVFU19QQVJBTV07XHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VGaWx0ZXIgPSB0aGlzLiRsb2NhdGlvbi5zZWFyY2goKVtSZWZlcmVuY2VSb3V0ZXIuUkVGRVJFTkNFX0ZJTFRFUl9QQVJBTV07XHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VBc3NvY2lhdGlvbkZpbHRlcnMgPSB0aGlzLiRsb2NhdGlvbi5zZWFyY2goKVtSZWZlcmVuY2VSb3V0ZXIuUkVGRVJFTkNFX0FTU09DSUFUSU9OX0ZJTFRFUlNfUEFSQU1dO1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlRGVmYXVsdFZhbHVlc01hcCA9IHRoaXMuZ2V0UmVmZXJlbmNlRGVmYXVsdFZhbHVlc01hcCh0aGlzLnJlZmVyZW5jZURlZmF1bHRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlQXNzb2NpYXRpb25GaWx0ZXJzTWFwID0gdGhpcy5nZXRSZWZlcmVuY2VBc3NvY2lhdGlvbkZpbHRlcnNNYXAodGhpcy5yZWZlcmVuY2VBc3NvY2lhdGlvbkZpbHRlcnMpO1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlVmFsaWRhdGlvbkVycm9yc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcblxyXG4gICAgICAgIGlmIChoYXNSZWZlcmVuY2VJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUFwaS5nZXRSZWZlcmVuY2VFbnRpdHkocmVmZXJlbmNlTmFtZSwgcmVmZXJlbmNlSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlRW50aXR5ID0gcmVzdWx0LmVudGl0eTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlTWV0YWRhdGEgPSByZXN1bHQubWV0YWRhdGE7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5lbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlJlZmVyZW5jZWQgZGF0YSBlbGVtZW50IG5vdCBmb3VuZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9CYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VVdGlscy5maXhJbnB1dFJlZmVyZW5jZUVudGl0eUF0dHJpYnV0ZXModGhpcy5yZWZlcmVuY2VFbnRpdHksIHRoaXMucmVmZXJlbmNlTWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIodGhpcy5yZWZlcmVuY2VFbnRpdHlbdGhpcy5yZWZlcmVuY2VNZXRhZGF0YS5zZWxlY3RvckF0dHJpYnV0ZS5zeXN0ZW1OYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmVmZXJlbmNlVXNhZ2UocmVmZXJlbmNlTmFtZSwgcmVmZXJlbmNlSWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUFwaS5nZXRFbXB0eVJlZmVyZW5jZUVudGl0eShyZWZlcmVuY2VOYW1lKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0eSA9IHJlc3VsdC5lbnRpdHk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZU1ldGFkYXRhID0gcmVzdWx0Lm1ldGFkYXRhO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VVdGlscy5maXhJbnB1dFJlZmVyZW5jZUVudGl0eUF0dHJpYnV0ZXModGhpcy5yZWZlcmVuY2VFbnRpdHksIHRoaXMucmVmZXJlbmNlTWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0UmVmZXJlbmNlRW50aXR5QXR0cmlidXRlc1ZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJOZXcgZGF0YSBlbnRyeSBvZlwiICsgXCIg4oCYXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyB0aGlzLmdldFJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkgKyBcIuKAmVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC51cGRhdGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzID0gdXNlci5hbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvQmFjaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVkaXJlY3RTdG9yYWdlVXJsID0gdGhpcy5yZWZlcmVuY2VSZWRpcmVjdC5nZXRBbmRSZW1vdmVTdG9yYWdlVXJsKCk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVkaXJlY3RTdG9yYWdlVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnJlZGlyZWN0U3RvcmFnZVVybCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHJlZmVyZW5jZU5hbWU6IHN0cmluZyA9IHRoaXMucmVmZXJlbmNlTWV0YWRhdGEua2V5O1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5yZWZlcmVuY2VSb3V0ZXIuaW5kZXhVcmwocmVmZXJlbmNlTmFtZSkpXHJcbiAgICAgICAgICAgICAgICAuc2VhcmNoKFJlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfREVGQVVMVF9WQUxVRVNfUEFSQU0sIHRoaXMucmVmZXJlbmNlVXRpbHMuZ2V0U3RyaW5nSW5Ccm93c2VyRm9ybWF0KHRoaXMucmVmZXJlbmNlRGVmYXVsdFZhbHVlcykpXHJcbiAgICAgICAgICAgICAgICAuc2VhcmNoKFJlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfRklMVEVSX1BBUkFNLCB0aGlzLnJlZmVyZW5jZVV0aWxzLmdldFN0cmluZ0luQnJvd3NlckZvcm1hdCh0aGlzLnJlZmVyZW5jZUZpbHRlcikpXHJcbiAgICAgICAgICAgICAgICAuc2VhcmNoKFJlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfQVNTT0NJQVRJT05fRklMVEVSU19QQVJBTSwgdGhpcy5yZWZlcmVuY2VVdGlscy5nZXRTdHJpbmdJbkJyb3dzZXJGb3JtYXQodGhpcy5yZWZlcmVuY2VBc3NvY2lhdGlvbkZpbHRlcnMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVFbnRpdHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgbGV0IHJlZmVyZW5jZU5hbWU6IHN0cmluZyA9IHRoaXMucmVmZXJlbmNlTWV0YWRhdGEua2V5O1xyXG4gICAgICAgIGxldCBpZDogbnVtYmVyID0gdGhpcy5yZWZlcmVuY2VFbnRpdHlbUmVmZXJlbmNlVXRpbHMuZW50aXR5SWRQcm9wZXJ0eV07XHJcbiAgICAgICAgbGV0IGNhbGw6IG5nLklQcm9taXNlPGFueT4gPSBpZCAhPSBudWxsXHJcbiAgICAgICAgICAgID8gdGhpcy5yZWZlcmVuY2VBcGkudXBkYXRlUmVmZXJlbmNlRW50aXR5KHJlZmVyZW5jZU5hbWUsIGlkLCB0aGlzLnJlZmVyZW5jZUVudGl0eSlcclxuICAgICAgICAgICAgOiB0aGlzLnJlZmVyZW5jZUFwaS5jcmVhdGVSZWZlcmVuY2VFbnRpdHkocmVmZXJlbmNlTmFtZSwgdGhpcy5yZWZlcmVuY2VFbnRpdHkpO1xyXG5cclxuICAgICAgICBjYWxsLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICQoXCIjY2hhbmdlTmFtZURpYWxvZ1wiKS5tb2RhbChcImhpZGVcIik7XHJcbiAgICAgICAgICAgICAgICAkKCcubW9kYWwtYmFja2Ryb3AnKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRmlsdGVyRW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5yZWZlcmVuY2VzLmR1cGxpY2F0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJSZWZlcmVuY2VkIGRhdGEgZWxlbWVudCBhbHJlYWR5IGV4aXN0c1wiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnJlZmVyZW5jZS5uYW1lLmNvbnRhaW4uY29tbWFcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiVGhlIHZhbHVlIGNhbid0IGNvbnRhaW4gJywnXCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5jb21tb25FcnJvcihyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQ3JlZGl0VHlwZXNOYW1lKCkge1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlQXBpLnVwZGF0ZUNyZWRpdFR5cGVzTmFtZSh0aGlzLnJlZmVyZW5jZUVudGl0eVtSZWZlcmVuY2VVdGlscy5lbnRpdHlOYW1lUHJvcGVydHldLCB0aGlzLnJlZmVyZW5jZUVudGl0eVtSZWZlcmVuY2VVdGlscy5lbnRpdHlJZFByb3BlcnR5XSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gIHRoaXMucmVkaXJlY3RUb0JhY2soKSlcclxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgJChcIiNjaGFuZ2VOYW1lRGlhbG9nXCIpLm1vZGFsKFwiaGlkZVwiKTtcclxuICAgICAgICAgICAgICAgICQoJy5tb2RhbC1iYWNrZHJvcCcpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5yZWZlcmVuY2VzLmR1cGxpY2F0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJSZWZlcmVuY2VkIGRhdGEgZWxlbWVudCBhbHJlYWR5IGV4aXN0c1wiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuY29tbW9uRXJyb3IocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTs7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTmVlZFVwZGF0ZUNyZWRpdFR5cGVzTmFtZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VFbnRpdHlbUmVmZXJlbmNlVXRpbHMuZW50aXR5SWRQcm9wZXJ0eV0gIT0gbnVsbCAmJiB0aGlzLnJlZmVyZW5jZU1ldGFkYXRhLmtleSA9PT0gXCJjcmVkaXRUeXBlc1wiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuVXBkYXRlQ3JlZGl0VHlwZXNOYW1lRGlhbG9nKCkge1xyXG4gICAgICAgICQoXCIjY2hhbmdlTmFtZURpYWxvZ1wiKS5tb2RhbChcInNob3dcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGVFbnRpdHkoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHJlZmVyZW5jZU5hbWU6IHN0cmluZyA9IHRoaXMucmVmZXJlbmNlTWV0YWRhdGEua2V5O1xyXG4gICAgICAgIGxldCBpZDogbnVtYmVyID0gdGhpcy5yZWZlcmVuY2VFbnRpdHlbUmVmZXJlbmNlVXRpbHMuZW50aXR5SWRQcm9wZXJ0eV07XHJcbiAgICAgICAgbGV0IHZlcnNpb246IG51bWJlciA9IHRoaXMucmVmZXJlbmNlRW50aXR5W1JlZmVyZW5jZVV0aWxzLmVudGl0eVZlcnNpb25Qcm9wZXJ0eV07XHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VBcGkuc2V0QWN0aXZlUmVmZXJlbmNlRW50aXR5KHJlZmVyZW5jZU5hbWUsIGlkLCB2ZXJzaW9uLCBmYWxzZSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZUZpbHRlckVtaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbnRpdHlWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLnJlZmVyZW5jZVZhbGlkYXRpb25FcnJvcnNNYXAuY2xlYXIoKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlZmVyZW5jZU1heExlbmd0aFZhbGlkYXRvcih0aGlzLnJlZmVyZW5jZVV0aWxzLCB0aGlzLnJlZmVyZW5jZUVudGl0eSwgdGhpcy5yZWZlcmVuY2VNZXRhZGF0YSxcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlVmFsaWRhdGlvbkVycm9yc01hcClcclxuICAgICAgICAgICAgICAgIC52YWxpZCgpXHJcbiAgICAgICAgICAgICYmIG5ldyBSZWZlcmVuY2VNaW5WYWx1ZVZhbGlkYXRvcih0aGlzLnJlZmVyZW5jZVV0aWxzLCB0aGlzLnJlZmVyZW5jZUVudGl0eSwgdGhpcy5yZWZlcmVuY2VNZXRhZGF0YSxcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlVmFsaWRhdGlvbkVycm9yc01hcClcclxuICAgICAgICAgICAgICAgIC52YWxpZCgpXHJcbiAgICAgICAgICAgICYmICh0aGlzLnJlZmVyZW5jZU1ldGFkYXRhLnJlcXVpcmVkQXR0cmlidXRlc0dyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgUmVmZXJlbmNlUmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXBWYWxpZGF0b3IodGhpcy5yZWZlcmVuY2VVdGlscywgdGhpcy5yZWZlcmVuY2VFbnRpdHksIHRoaXMucmVmZXJlbmNlTWV0YWRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlVmFsaWRhdGlvbkVycm9yc01hcClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnZhbGlkKClcclxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBSZWZlcmVuY2VJc1JlcXVpcmVkVmFsaWRhdG9yKHRoaXMucmVmZXJlbmNlVXRpbHMsIHRoaXMucmVmZXJlbmNlRW50aXR5LCB0aGlzLnJlZmVyZW5jZU1ldGFkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZVZhbGlkYXRpb25FcnJvcnNNYXApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC52YWxpZCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJlZmVyZW5jZURlZmF1bHRWYWx1ZXNNYXAocmVmZXJlbmNlRGVmYXVsdFZhbHVlczogc3RyaW5nKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgICAgICAgaWYgKHJlZmVyZW5jZURlZmF1bHRWYWx1ZXMgJiYgcmVmZXJlbmNlRGVmYXVsdFZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWVzOiBzdHJpbmdbXSA9IHJlZmVyZW5jZURlZmF1bHRWYWx1ZXMuc3BsaXQoXCI7XCIpO1xyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWVzLmZvckVhY2goZGVmYXVsdFZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWVQYXJ0czogc3RyaW5nW10gPSBkZWZhdWx0VmFsdWUuc3BsaXQoXCI9XCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5OiBzdHJpbmcgPSBkZWZhdWx0VmFsdWVQYXJ0c1swXTtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gZGVmYXVsdFZhbHVlUGFydHNbMV07XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KHByb3BlcnR5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UmVmZXJlbmNlQXNzb2NpYXRpb25GaWx0ZXJzTWFwKHJlZmVyZW5jZUFzc29jaWF0aW9uRmlsdGVyczogc3RyaW5nKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgICAgICAgaWYgKHJlZmVyZW5jZUFzc29jaWF0aW9uRmlsdGVycyAmJiByZWZlcmVuY2VBc3NvY2lhdGlvbkZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgYXNzb2NpYXRpb25GaWx0ZXJzOiBzdHJpbmdbXSA9IHJlZmVyZW5jZUFzc29jaWF0aW9uRmlsdGVycy5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgIGFzc29jaWF0aW9uRmlsdGVycy5mb3JFYWNoKGFzc29jaWF0aW9uRmlsdGVyID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBhc3NvY2lhdGlvbkZpbHRlclBhcnRzOiBzdHJpbmdbXSA9IGFzc29jaWF0aW9uRmlsdGVyLnNwbGl0KFwiPT5cIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXNzb2NpYXRpb246IHN0cmluZyA9IGFzc29jaWF0aW9uRmlsdGVyUGFydHNbMF07XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyOiBzdHJpbmcgPSBhc3NvY2lhdGlvbkZpbHRlclBhcnRzWzFdO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChhc3NvY2lhdGlvbiwgZmlsdGVyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0UmVmZXJlbmNlRW50aXR5QXR0cmlidXRlc1ZhbHVlcygpIHtcclxuICAgICAgICB0aGlzLnJlZmVyZW5jZU1ldGFkYXRhLmRlZmF1bHRBdHRyaWJ1dGVzLmZvckVhY2goYXR0ciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBhdHRyVHlwZTogc3RyaW5nID0gYXR0ci50eXBlO1xyXG4gICAgICAgICAgICBsZXQgYXR0clN5c05hbWU6IHN0cmluZyA9IGF0dHIuc3lzdGVtTmFtZTtcclxuICAgICAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogc3RyaW5nID0gdGhpcy5yZWZlcmVuY2VEZWZhdWx0VmFsdWVzTWFwLmdldChhdHRyU3lzTmFtZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5yZWZlcmVuY2VVdGlscy5pc1RleHRBdHRyaWJ1dGVUeXBlKGF0dHJUeXBlKSB8fCB0aGlzLnJlZmVyZW5jZVV0aWxzLmlzSHRtbEF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0eVthdHRyU3lzTmFtZV0gPSB0aGlzLnJlZmVyZW5jZVV0aWxzLmNvbnZlcnRTdHJpbmdEZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlZmVyZW5jZVV0aWxzLmlzTnVtYmVyQXR0cmlidXRlVHlwZShhdHRyVHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlRW50aXR5W2F0dHJTeXNOYW1lXSA9IHRoaXMucmVmZXJlbmNlVXRpbHMuY29udmVydE51bWJlckRlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVmZXJlbmNlVXRpbHMuaXNCb29sZWFuQXR0cmlidXRlVHlwZShhdHRyVHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlRW50aXR5W2F0dHJTeXNOYW1lXSA9IHRoaXMucmVmZXJlbmNlVXRpbHMuY29udmVydEJvb2xlYW5EZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlZmVyZW5jZVV0aWxzLmlzRGF0ZUF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0eVthdHRyU3lzTmFtZV0gPSB0aGlzLnJlZmVyZW5jZVV0aWxzLmNvbnZlcnREYXRlRGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZWZlcmVuY2VVdGlscy5pc01vbmV5QXR0cmlidXRlVHlwZShhdHRyVHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlRW50aXR5W2F0dHJTeXNOYW1lXSA9IHRoaXMucmVmZXJlbmNlVXRpbHMuY29udmVydE1vbmV5RGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZWZlcmVuY2VVdGlscy5pc09uZUFzc29jaWF0aW9uQXR0cmlidXRlVHlwZShhdHRyVHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlRW50aXR5W2F0dHJTeXNOYW1lXSA9IHRoaXMucmVmZXJlbmNlVXRpbHMuY29udmVydE9uZUFzc29jaWF0aW9uRGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZWZlcmVuY2VVdGlscy5pc01hbnlBc3NvY2lhdGlvbkF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUVudGl0eVthdHRyU3lzTmFtZV0gPSB0aGlzLnJlZmVyZW5jZVV0aWxzLmNvbnZlcnRNYW55QXNzb2NpYXRpb25EZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UmVmZXJlbmNlTmFtZShyZWZlcmVuY2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAocmVmZXJlbmNlTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwic3ViamVjdHNcIjogcmV0dXJuIFwiU3ViamVjdHNcIjtcclxuICAgICAgICAgICAgY2FzZSBcImxhbmd1YWdlc1wiOiByZXR1cm4gXCJMYW5ndWFnZXNcIjtcclxuICAgICAgICAgICAgY2FzZSBcImxlYXJuaW5nUGF0aFR5cGVzXCI6IHJldHVybiBcIkxlYXJuaW5nIHBhdGggdHlwZXNcIjtcclxuICAgICAgICAgICAgY2FzZSBcImNvdXJzZVR5cGVzXCI6IHJldHVybiBcIkNvdXJzZSB0eXBlc1wiO1xyXG4gICAgICAgICAgICBjYXNlIFwic291cmNlc1wiOiByZXR1cm4gXCJTb3VyY2VzXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzb3VyY2VUeXBlc1wiOiByZXR1cm4gXCJTb3VyY2UgdHlwZXNcIjtcclxuICAgICAgICAgICAgY2FzZSBcImNvbXBsZXhpdHlMZXZlbHNcIjogcmV0dXJuIFwiQ29tcGxleGl0eSBsZXZlbHNcIjtcclxuICAgICAgICAgICAgY2FzZSBcImNyZWRpdFR5cGVzXCI6IHJldHVybiBcIkNyZWRpdCB0eXBlc1wiO1xyXG4gICAgICAgICAgICBjYXNlIFwibG9jYXRpb25UeXBlc1wiOiByZXR1cm4gXCJMb2NhdGlvbiB0eXBlc1wiO1xyXG4gICAgICAgICAgICBjYXNlIFwibG9jYXRpb25zXCI6IHJldHVybiBcIkxvY2F0aW9uc1wiO1xyXG4gICAgICAgICAgICBjYXNlIFwiZXF1aXBtZW50XCI6IHJldHVybiBcIkVxdWlwbWVudFwiO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gXCJDb3JlIEFDSElFVkVcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQnVzaW5lc3NVbml0Q2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLiR0aW1lb3V0KGEgPT4gdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UmVmZXJlbmNlVXNhZ2UocmVmZXJlbmNlTmFtZTogc3RyaW5nLCByZWZlcmVuY2VJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VBcGkuZ2V0UmVmZXJlbmNlVXNhZ2UocmVmZXJlbmNlTmFtZSwgcmVmZXJlbmNlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKHVzZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VkSW5MaXN0ID0gdXNlcztcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlZEluTGlzdC5mb3JFYWNoKG8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvLnR5cGUgPT0gJ0lMVF9TRVNTSU9OJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvLnR5cGVUZXh0Q2FwID0gJ0lMVCBzZXNzaW9uJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoby50eXBlID09ICdTRVNTSU9OJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvLnR5cGVUZXh0Q2FwID0gJ3ZJTFQgc2Vzc2lvbic7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgby50eXBlVGV4dENhcCA9IG8udHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG8udHlwZS5zbGljZSgxKS5yZXBsYWNlKFwiX1wiLCBcIiBcIikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VkSW5MaXN0LnNvcnQoKGEsIGIpID0+IGEudHlwZS5sb2NhbGVDb21wYXJlKGIudHlwZSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG93U3lzdGVtTmFtZShzeXN0ZW1OYW1lIDogc3RyaW5nKSA6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBhcmcxID0gc3lzdGVtTmFtZSAhPSdsb2NhdGlvblR5cGUnICYmIHN5c3RlbU5hbWUgIT0gJ2VxdWlwbWVudCc7XHJcbiAgICAgICAgbGV0IGFyZzIgPSAoc3lzdGVtTmFtZSA9PSdsb2NhdGlvblR5cGUnIHx8IHN5c3RlbU5hbWUgPT0gJ2VxdWlwbWVudCcpICYmIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIGFyZzEgfHwgYXJnMjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlRmlsdGVyRW1pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRzY29wZS4kZW1pdCgnY2hhbmdlRmlsdGVyRXZlbnQnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVjb2RlQXR0cmlidXRlcyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBuYW1lO1xyXG4gICAgICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIk5hbWVcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJsb2NhdGlvblR5cGVcIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJMb2NhdGlvbiB0eXBlXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiZGVzY3JpcHRpb25cIjoge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gXCJEZXNjcmlwdGlvblwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcImNhcGFjaXR5XCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiQ2FwYWNpdHlcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJhZGRyZXNzXCI6IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiQWRkcmVzc1wiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcImVxdWlwbWVudFwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIkVxdWlwbWVudFwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1JlZmVyZW5jZVV0aWxzfSBmcm9tIFwiLi9SZWZlcmVuY2VVdGlsc1wiO1xyXG5pbXBvcnQge1JlZmVyZW5jZVNlcnZpY2V9IGZyb20gXCIuL1JlZmVyZW5jZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VSZWRpcmVjdH0gZnJvbSBcIi4vUmVmZXJlbmNlUmVkaXJlY3RcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VDb250cm9sbGVyfSBmcm9tIFwiLi9SZWZlcmVuY2VDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlRWRpdENvbnRyb2xsZXJ9IGZyb20gXCIuL1JlZmVyZW5jZUVkaXRDb250cm9sbGVyXCI7XHJcblxyXG5pbXBvcnQge1NlY3VyaXR5TW9kdWxlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eU1vZHVsZVwiO1xyXG5pbXBvcnQge1VybHNNb2R1bGV9IGZyb20gXCIuLy4uL3VybHMvVXJsc01vZHVsZVwiO1xyXG5pbXBvcnQge0luZnJhc3RydWN0dXJlTW9kdWxlfSBmcm9tIFwiLi8uLi9pbmZyYXN0cnVjdHVyZS9JbmZyYXN0cnVjdHVyZU1vZHVsZVwiO1xyXG5cclxuZXhwb3J0IHZhciBSZWZlcmVuY2VNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJyZWZlcmVuY2VcIiwgW1xyXG4gICAgICAgIFNlY3VyaXR5TW9kdWxlLm5hbWUsXHJcbiAgICAgICAgVXJsc01vZHVsZS5uYW1lLFxyXG4gICAgICAgIEluZnJhc3RydWN0dXJlTW9kdWxlLm5hbWVcclxuICAgIF0pXHJcbiAgICAuc2VydmljZShSZWZlcmVuY2VVdGlscy5OQU1FLCBSZWZlcmVuY2VVdGlscylcclxuICAgIC5zZXJ2aWNlKFJlZmVyZW5jZVNlcnZpY2UuTkFNRSwgUmVmZXJlbmNlU2VydmljZSlcclxuICAgIC5zZXJ2aWNlKFJlZmVyZW5jZVJlZGlyZWN0Lk5BTUUsIFJlZmVyZW5jZVJlZGlyZWN0KVxyXG4gICAgLmNvbnRyb2xsZXIoUmVmZXJlbmNlQ29udHJvbGxlci5OQU1FLCBSZWZlcmVuY2VDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoUmVmZXJlbmNlRWRpdENvbnRyb2xsZXIuTkFNRSwgUmVmZXJlbmNlRWRpdENvbnRyb2xsZXIpOyIsImltcG9ydCB7UmVmZXJlbmNlVXRpbHN9IGZyb20gXCIuL1JlZmVyZW5jZVV0aWxzXCI7XHJcblxyXG5pbXBvcnQge1N0b3JhZ2VXcmFwcGVyLCBTdG9yYWdlc30gZnJvbSBcIi4vLi4vaW5mcmFzdHJ1Y3R1cmUvU3RvcmFnZVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZVJvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9SZWZlcmVuY2VSb3V0ZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VSZWRpcmVjdCB7XHJcbiAgICBwdWJsaWMgc3RhdGljIFJFRElSRUNUX1RPX0VESVRfUkVGRVJFTkNFX0lURU1fTUVTU0FHRSA9IFwiJHJlZGlyZWN0VG9FZGl0UmVmZXJlbmNlSXRlbVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJyZWZlcmVuY2UuUmVmZXJlbmNlUmVkaXJlY3RcIjtcclxuICAgIHByaXZhdGUgc3RhdGljIEtFWSA9IFwicmVmZXJlbmNlLXJlZGlyZWN0XCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgU3RvcmFnZXMuU0VTU0lPTl9OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVJvdXRlci5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVV0aWxzLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkcm9vdFNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2U6IFN0b3JhZ2VXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWZlcmVuY2VSb3V0ZXI6IFJlZmVyZW5jZVJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVmZXJlbmNlVXRpbHM6IFJlZmVyZW5jZVV0aWxzKSB7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5yZW1vdmUoUmVmZXJlbmNlUmVkaXJlY3QuS0VZKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0VkaXRSZWZlcmVuY2VJdGVtKHJlZmVyZW5jZU5hbWU6IHN0cmluZywgcmVmZXJlbmNlSWQ/OiBudW1iZXIsIHJlZmVyZW5jZURlZmF1bHRWYWx1ZXM/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUZpbHRlcj86IHN0cmluZywgcmVmZXJlbmNlQXNzb2NpYXRpb25GaWx0ZXJzPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy4kbG9jYXRpb24ucGF0aCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZXNzaW9uU3RvcmFnZS5jb250YWlucyhSZWZlcmVuY2VSZWRpcmVjdC5LRVkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UucHV0KFJlZmVyZW5jZVJlZGlyZWN0LktFWSwgW3VybF0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB1cmxzOiBzdHJpbmdbXSA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0PHN0cmluZ1tdPihSZWZlcmVuY2VSZWRpcmVjdC5LRVkpO1xyXG4gICAgICAgICAgICB1cmxzLnB1c2godXJsKTtcclxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5wdXQoUmVmZXJlbmNlUmVkaXJlY3QuS0VZLCB1cmxzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRlbWl0KFJlZmVyZW5jZVJlZGlyZWN0LlJFRElSRUNUX1RPX0VESVRfUkVGRVJFTkNFX0lURU1fTUVTU0FHRSk7XHJcbiAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMucmVmZXJlbmNlUm91dGVyLmVkaXRVcmwocmVmZXJlbmNlTmFtZSwgcmVmZXJlbmNlSWQpKVxyXG4gICAgICAgICAgICAuc2VhcmNoKFJlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfREVGQVVMVF9WQUxVRVNfUEFSQU0sIHRoaXMucmVmZXJlbmNlVXRpbHMuZ2V0U3RyaW5nSW5Ccm93c2VyRm9ybWF0KHJlZmVyZW5jZURlZmF1bHRWYWx1ZXMpKVxyXG4gICAgICAgICAgICAuc2VhcmNoKFJlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfRklMVEVSX1BBUkFNLCB0aGlzLnJlZmVyZW5jZVV0aWxzLmdldFN0cmluZ0luQnJvd3NlckZvcm1hdChyZWZlcmVuY2VGaWx0ZXIpKVxyXG4gICAgICAgICAgICAuc2VhcmNoKFJlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfQVNTT0NJQVRJT05fRklMVEVSU19QQVJBTSwgdGhpcy5yZWZlcmVuY2VVdGlscy5nZXRTdHJpbmdJbkJyb3dzZXJGb3JtYXQocmVmZXJlbmNlQXNzb2NpYXRpb25GaWx0ZXJzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFuZFJlbW92ZVN0b3JhZ2VVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgdXJsczogc3RyaW5nW10gPSB0aGlzLnNlc3Npb25TdG9yYWdlLmdldDxzdHJpbmdbXT4oUmVmZXJlbmNlUmVkaXJlY3QuS0VZKTtcclxuICAgICAgICBpZiAodXJscyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCB1cmw6IHN0cmluZyA9IHVybHMucG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UucHV0KFJlZmVyZW5jZVJlZGlyZWN0LktFWSwgdXJscyk7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtJUmVmZXJlbmNlRW50aXR5TWV0YWRhdGF9IGZyb20gXCIuL21vZGVscy9SZWZlcmVuY2VNZXRhZGF0YVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZUVudGl0aWVzUGFyYW1zLCBJUmVmZXJlbmNlRW50aXRpZXNQYXJhbXN9IGZyb20gXCIuL21vZGVscy9JUmVmZXJlbmNlRW50aXRpZXNQYXJhbXNcIjtcclxuaW1wb3J0IHtJUmVmZXJlbmNlRW50aXR5QW5kTWV0YWRhdGFSZXN1bHR9IGZyb20gXCIuL21vZGVscy9JUmVmZXJlbmNlRW50aXR5QW5kTWV0YWRhdGFSZXN1bHRcIjtcclxuaW1wb3J0IHtJUmVmZXJlbmNlRW50aXRpZXNBbmRNZXRhZGF0YVJlc3VsdH0gZnJvbSBcIi4vbW9kZWxzL0lSZWZlcmVuY2VFbnRpdGllc0FuZE1ldGFkYXRhUmVzdWx0XCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHl9IGZyb20gXCIuL21vZGVscy9JU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicmVmZXJlbmNlLlJlZmVyZW5jZVNlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogbmcuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcTogbmcuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWN0aXZlUmVmZXJlbmNlRW50aXRpZXMocmVmZXJlbmNlTmFtZTogc3RyaW5nLCByZWZlcmVuY2VQYXJhbXM6IElSZWZlcmVuY2VFbnRpdGllc1BhcmFtcyk6IG5nLklQcm9taXNlPElSZWZlcmVuY2VFbnRpdGllc0FuZE1ldGFkYXRhUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9yZWZlcmVuY2UvOm5hbWUvZW50aXRpZXMvYWN0aXZlXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6bmFtZVwiLCByZWZlcmVuY2VOYW1lKS5zZXJ2aWNlKCksIHRoaXMuY3JlYXRlUmVmZXJlbmNlRmlsdGVyUGFyYW1zKHJlZmVyZW5jZVBhcmFtcykpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFjdGl2ZVJlZmVyZW5jZUVudGl0aWVzRm9yU2VsZWN0b3IocmVmZXJlbmNlTmFtZTogc3RyaW5nLCByZWZlcmVuY2VQYXJhbXM6IElSZWZlcmVuY2VFbnRpdGllc1BhcmFtcywgaW5jbHVkZWRJZHM6IEFycmF5PG51bWJlcj4pOiBuZy5JUHJvbWlzZTxBcnJheTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT4+IHtcclxuICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5jcmVhdGVSZWZlcmVuY2VGaWx0ZXJQYXJhbXMocmVmZXJlbmNlUGFyYW1zKTtcclxuICAgICAgICBpZiAoaW5jbHVkZWRJZHMgJiYgaW5jbHVkZWRJZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBwYXJhbXMucGFyYW1zW1wiaW5jbHVkZWRJZHNcIl0gPSBpbmNsdWRlZElkcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS9yZWZlcmVuY2UvOm5hbWUvZW50aXRpZXMvZm9yU2VsZWN0b3JcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpuYW1lXCIsIHJlZmVyZW5jZU5hbWUpLnNlcnZpY2UoKSwgcGFyYW1zKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBY3RpdmVSZWZlcmVuY2VFbnRpdGllc0ZvclNlbGVjdG9yV2l0aG91dFBhcmFtcyhyZWZlcmVuY2VOYW1lOiBzdHJpbmcsIGluY2x1ZGVkSWRzOiBBcnJheTxudW1iZXI+KTogbmcuSVByb21pc2U8QXJyYXk8SVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHk+PiB7XHJcbiAgICAgICAgdmFyIHBhcmFtcyA9IHRoaXMuY3JlYXRlUmVmZXJlbmNlRmlsdGVyUGFyYW1zKG5ldyBSZWZlcmVuY2VFbnRpdGllc1BhcmFtcyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVkSWRzICYmIGluY2x1ZGVkSWRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcGFyYW1zLnBhcmFtc1tcImluY2x1ZGVkSWRzXCJdID0gaW5jbHVkZWRJZHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcmVmZXJlbmNlLzpuYW1lL2VudGl0aWVzL2ZvclNlbGVjdG9yXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6bmFtZVwiLCByZWZlcmVuY2VOYW1lKS5zZXJ2aWNlKCksIHBhcmFtcylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SGllcmFyY2hpY2FsUmVmZXJlbmNlRW50aXRpZXMocmVmZXJlbmNlTmFtZTogc3RyaW5nLCByZWZlcmVuY2VIaWVyYXJjaGljYWxQcm9wZXJ0eTogc3RyaW5nKTogbmcuSVByb21pc2U8SVJlZmVyZW5jZUVudGl0aWVzQW5kTWV0YWRhdGFSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL3JlZmVyZW5jZS86bmFtZS9lbnRpdGllcy9oaWVyYXJjaGljYWwvOmhpZXJhcmNoeVwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOm5hbWVcIiwgcmVmZXJlbmNlTmFtZSlcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpoaWVyYXJjaHlcIiwgcmVmZXJlbmNlSGllcmFyY2hpY2FsUHJvcGVydHkpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVmZXJlbmNlRW50aXR5KHJlZmVyZW5jZU5hbWU6IHN0cmluZywgaWQ6IG51bWJlcik6IG5nLklQcm9taXNlPElSZWZlcmVuY2VFbnRpdHlBbmRNZXRhZGF0YVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcmVmZXJlbmNlLzpuYW1lL2VudGl0eS86aWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpuYW1lXCIsIHJlZmVyZW5jZU5hbWUpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW1wdHlSZWZlcmVuY2VFbnRpdHkocmVmZXJlbmNlTmFtZTogc3RyaW5nKTogbmcuSVByb21pc2U8SVJlZmVyZW5jZUVudGl0eUFuZE1ldGFkYXRhUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3JlZmVyZW5jZS86bmFtZS9lbnRpdHkvZW1wdHlcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm5hbWVcIiwgcmVmZXJlbmNlTmFtZSkuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbXB0eVJlZmVyZW5jZUVudGl0eU5vTWV0YWRhdGEocmVmZXJlbmNlTmFtZTogc3RyaW5nKTogbmcuSVByb21pc2U8TWFwPHN0cmluZywgYW55Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9yZWZlcmVuY2UvOm5hbWUvZW50aXR5L2VtcHR5L25vL21ldGFkYXRhXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpuYW1lXCIsIHJlZmVyZW5jZU5hbWUpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVmZXJlbmNlTWV0YWRhdGEocmVmZXJlbmNlTmFtZTogc3RyaW5nKTogbmcuSVByb21pc2U8SVJlZmVyZW5jZUVudGl0eU1ldGFkYXRhPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3JlZmVyZW5jZS86bmFtZS9tZXRhZGF0YVwiKS5wYXJhbShcIjpuYW1lXCIsIHJlZmVyZW5jZU5hbWUpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QXNzb2NpYXRpb25SZWZlcmVuY2VzTWV0YWRhdGEocmVmZXJlbmNlTmFtZTogc3RyaW5nKTogbmcuSVByb21pc2U8TWFwPHN0cmluZywgSVJlZmVyZW5jZUVudGl0eU1ldGFkYXRhPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9yZWZlcmVuY2UvOm5hbWUvbWV0YWRhdGEvYXNzb2NpYXRpb25cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm5hbWVcIiwgcmVmZXJlbmNlTmFtZSkuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVSZWZlcmVuY2VFbnRpdHkocmVmZXJlbmNlTmFtZTogc3RyaW5nLCBtYXA6IE1hcDxzdHJpbmcsIGFueT4pOiBuZy5JUHJvbWlzZTxNYXA8c3RyaW5nLCBhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9yZWZlcmVuY2UvOm5hbWUvZW50aXR5L2NyZWF0ZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6bmFtZVwiLCByZWZlcmVuY2VOYW1lKS5zZXJ2aWNlKCksIG1hcClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlUmVmZXJlbmNlRW50aXR5KHJlZmVyZW5jZU5hbWU6IHN0cmluZywgaWQ6IG51bWJlciwgbWFwOiBNYXA8c3RyaW5nLCBhbnk+KTogbmcuSVByb21pc2U8TWFwPHN0cmluZywgYW55Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS9yZWZlcmVuY2UvOm5hbWUvZW50aXR5L3VwZGF0ZS86aWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm5hbWVcIiwgcmVmZXJlbmNlTmFtZSlcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCksIG1hcClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QWN0aXZlUmVmZXJlbmNlRW50aXR5KHJlZmVyZW5jZU5hbWU6IHN0cmluZywgaWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCBpc0FjdGl2ZTogYm9vbGVhbik6IG5nLklQcm9taXNlPE1hcDxzdHJpbmcsIGFueT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvcmVmZXJlbmNlLzpyZWZlcmVuY2VOYW1lL2VudGl0eS86aWQ/aXNBY3RpdmU9OmlzQWN0aXZlJnZlcnNpb249OnZlcnNpb25cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnJlZmVyZW5jZU5hbWVcIiwgcmVmZXJlbmNlTmFtZSlcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dmVyc2lvblwiLCB2ZXJzaW9uKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aXNBY3RpdmVcIiwgaXNBY3RpdmUpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVmZXJlbmNlVXNhZ2UocmVmZXJlbmNlTmFtZTogc3RyaW5nLCByZWZlcmVuY2VJZDogbnVtYmVyKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvcmVmZXJlbmNlLyR7cmVmZXJlbmNlTmFtZX0vZW50aXR5LyR7cmVmZXJlbmNlSWR9L3VzYWdlYCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUNyZWRpdFR5cGVzTmFtZShjcmVkaXROYW1lOiBzdHJpbmcsIGNyZWRpdElkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShgL2FwaS9yZWZlcmVuY2UvY3JlZGl0VHlwZXMvJHtjcmVkaXRJZH0vdXBkYXRlTmFtZS8/bmFtZT06bmFtZWApXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpuYW1lXCIsIGNyZWRpdE5hbWUpLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVJlZmVyZW5jZUZpbHRlclBhcmFtcyhyZWZlcmVuY2VQYXJhbXM6IElSZWZlcmVuY2VFbnRpdGllc1BhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXI6IHJlZmVyZW5jZVBhcmFtcy5yZWZlcmVuY2VGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VTb3J0aW5nOiByZWZlcmVuY2VQYXJhbXMucmVmZXJlbmNlU29ydGluZyxcclxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZVNlYXJjaFN0cmluZzogcmVmZXJlbmNlUGFyYW1zLnJlZmVyZW5jZVNlYXJjaFN0cmluZyxcclxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZVNwbGl0UGFyYW06IHJlZmVyZW5jZVBhcmFtcy5yZWZlcmVuY2VTcGxpdFBhcmFtLFxyXG4gICAgICAgICAgICAgICAgYnVzaW5lc3NVbml0RmlsdGVyOiByZWZlcmVuY2VQYXJhbXMgIT0gdW5kZWZpbmVkID8gcmVmZXJlbmNlUGFyYW1zLmJ1c2luZXNzVW5pdEZpbHRlciA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIG51bGxhYmxlQnVzaW5lc3NVbml0OiByZWZlcmVuY2VQYXJhbXMgIT0gdW5kZWZpbmVkID8gcmVmZXJlbmNlUGFyYW1zLm51bGxhYmxlQnVzaW5lc3NVbml0IDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge0lSZWZlcmVuY2VBdHRyaWJ1dGVNZXRhZGF0YSwgSVJlZmVyZW5jZUVudGl0eU1ldGFkYXRhfSBmcm9tIFwiLi9tb2RlbHMvUmVmZXJlbmNlTWV0YWRhdGFcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUF0dHJpYnV0ZUNvbnZlcnRlciB7XHJcbiAgICBjb252ZXJ0U3RyaW5nQXR0cmlidXRlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmc7XHJcblxyXG4gICAgY29udmVydE51bWJlckF0dHJpYnV0ZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyO1xyXG5cclxuICAgIGNvbnZlcnRCb29sZWFuQXR0cmlidXRlKHZhbHVlOiBib29sZWFuKTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnZlcnREYXRlQXR0cmlidXRlKHZhbHVlOiBudW1iZXIpOiBzdHJpbmc7XHJcblxyXG4gICAgY29udmVydE1vbmV5QXR0cmlidXRlKHZhbHVlOiBudW1iZXIpOiBzdHJpbmc7XHJcblxyXG4gICAgY29udmVydEdyb3VwQXR0cmlidXRlKGVudGl0eTogTWFwPHN0cmluZywgYW55PiwgZ3JvdXBUZW1wbGF0ZTogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQXR0cmlidXRlczogQXJyYXk8SVJlZmVyZW5jZUF0dHJpYnV0ZU1ldGFkYXRhPik6IHN0cmluZztcclxuXHJcbiAgICBjb252ZXJ0T25lQXNzb2NpYXRpb25BdHRyaWJ1dGUoZW50aXR5OiBNYXA8c3RyaW5nLCBhbnk+LCBhc3NvY2lhdGlvbkVudGl0eTogSVJlZmVyZW5jZUVudGl0eU1ldGFkYXRhKTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnZlcnRPbmVBc3NvY2lhdGlvbkF0dHJpYnV0ZVRvTnVtYmVyKGVudGl0eTogTWFwPHN0cmluZywgYW55Pik6IG51bWJlcjtcclxuXHJcbiAgICBjb252ZXJ0TWFueUFzc29jaWF0aW9uQXR0cmlidXRlVG9OdW1iZXJzKGVudGl0aWVzOiBBcnJheTxNYXA8c3RyaW5nLCBhbnk+Pik6IEFycmF5PG51bWJlcj47XHJcblxyXG4gICAgY29udmVydE9uZUFzc29jaWF0aW9uQXR0cmlidXRlRm9yR3JpZChlbnRpdHk6IE1hcDxzdHJpbmcsIGFueT4sIGFzc29jaWF0aW9uQXR0cmlidXRlOiBJUmVmZXJlbmNlQXR0cmlidXRlTWV0YWRhdGEpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSURlZmF1bHRWYWx1ZUNvbnZlcnQge1xyXG4gICAgY29udmVydFN0cmluZ0RlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnZlcnROdW1iZXJEZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZyk6IG51bWJlcjtcclxuXHJcbiAgICBjb252ZXJ0Qm9vbGVhbkRlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbjtcclxuXHJcbiAgICBjb252ZXJ0RGF0ZURlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnZlcnRNb25leURlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnZlcnRPbmVBc3NvY2lhdGlvbkRlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogbnVtYmVyO1xyXG5cclxuICAgIGNvbnZlcnRNYW55QXNzb2NpYXRpb25EZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZyk6IEFycmF5PG51bWJlcj47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUF0dHJpYnV0ZVZhbGlkYXRvciB7XHJcbiAgICB2YWxpZFN0cmluZ0F0dHJpYnV0ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbjtcclxuXHJcbiAgICB2YWxpZE51bWJlckF0dHJpYnV0ZSh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbjtcclxuXHJcbiAgICB2YWxpZEJvb2xlYW5BdHRyaWJ1dGUodmFsdWU6IGJvb2xlYW4pOiBib29sZWFuO1xyXG5cclxuICAgIHZhbGlkRGF0ZUF0dHJpYnV0ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbjtcclxuXHJcbiAgICB2YWxpZE1vbmV5QXR0cmlidXRlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuO1xyXG5cclxuICAgIHZhbGlkT25lQXNzb2NpYXRpb25BdHRyaWJ1dGUodmFsdWU6IG51bWJlcik6IGJvb2xlYW47XHJcblxyXG4gICAgdmFsaWRNYW55QXNzb2NpYXRpb25BdHRyaWJ1dGUodmFsdWU6IEFycmF5PG51bWJlcj4pOiBib29sZWFuO1xyXG5cclxuICAgIHZhbGlkQXR0cmlidXRlKGF0dHJUeXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBdHRyaWJ1dGVUeXBlSWRlbnRpZmllciB7XHJcbiAgICBpc1RleHRBdHRyaWJ1dGVUeXBlKGF0dHJpYnV0ZVR5cGU6IHN0cmluZyk6IGJvb2xlYW47XHJcblxyXG4gICAgaXNOdW1iZXJBdHRyaWJ1dGVUeXBlKGF0dHJpYnV0ZVR5cGU6IHN0cmluZyk6IGJvb2xlYW47XHJcblxyXG4gICAgaXNCb29sZWFuQXR0cmlidXRlVHlwZShhdHRyaWJ1dGVUeXBlOiBzdHJpbmcpOiBib29sZWFuO1xyXG5cclxuICAgIGlzRGF0ZUF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlVHlwZTogc3RyaW5nKTogYm9vbGVhbjtcclxuXHJcbiAgICBpc01vbmV5QXR0cmlidXRlVHlwZShhdHRyaWJ1dGVUeXBlOiBzdHJpbmcpOiBib29sZWFuO1xyXG5cclxuICAgIGlzR3JvdXBBdHRyaWJ1dGVUeXBlKGF0dHJpYnV0ZVR5cGU6IHN0cmluZyk6IGJvb2xlYW47XHJcblxyXG4gICAgaXNPbmVBc3NvY2lhdGlvbkF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlVHlwZTogc3RyaW5nKTogYm9vbGVhbjtcclxuXHJcbiAgICBpc01hbnlBc3NvY2lhdGlvbkF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlVHlwZTogc3RyaW5nKTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTG9naWNhbE9wZXJhdG9yVHlwZUlkZW50aWZpZXIge1xyXG4gICAgaXNBbmRMb2dpY2FsT3BlcmF0b3JUeXBlKGxvZ2ljYWxPcGVyYXRvclR5cGU6IHN0cmluZyk6IGJvb2xlYW47XHJcblxyXG4gICAgaXNPckxvZ2ljYWxPcGVyYXRvclR5cGUobG9naWNhbE9wZXJhdG9yVHlwZTogc3RyaW5nKTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW50aXR5TWFuaXB1bGF0b3Ige1xyXG4gICAgZ2V0RW50aXR5TmFtZUJ5QXR0cmlidXRlKGVudGl0eTogTWFwPHN0cmluZywgYW55PiwgYXR0cmlidXRlOiBJUmVmZXJlbmNlQXR0cmlidXRlTWV0YWRhdGEpOiBzdHJpbmc7XHJcblxyXG4gICAgZml4SW5wdXRSZWZlcmVuY2VFbnRpdHlBdHRyaWJ1dGVzKHJlZmVyZW5jZUVudGl0eTogTWFwPHN0cmluZywgYW55PixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VNZXRhZGF0YTogSVJlZmVyZW5jZUVudGl0eU1ldGFkYXRhKTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlZmVyZW5jZVV0aWxzIGltcGxlbWVudHMgSUF0dHJpYnV0ZUNvbnZlcnRlciwgSURlZmF1bHRWYWx1ZUNvbnZlcnQsIElBdHRyaWJ1dGVWYWxpZGF0b3IsXHJcbiAgICBJQXR0cmlidXRlVHlwZUlkZW50aWZpZXIsIElMb2dpY2FsT3BlcmF0b3JUeXBlSWRlbnRpZmllciwgSUVudGl0eU1hbmlwdWxhdG9yIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwicmVmZXJlbmNlLlJlZmVyZW5jZVV0aWxzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEJVU0lORVNTX1VOSVRfSURfUFJPUEVSVFkgPSBcImJ1c2luZXNzVW5pdElkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVudGl0eUlkUHJvcGVydHkgPSBcImlkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVudGl0eU5hbWVQcm9wZXJ0eSA9IFwibmFtZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBlbnRpdHlWZXJzaW9uUHJvcGVydHkgPSBcInZlcnNpb25cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZW50aXR5SXNBY3RpdmVQcm9wZXJ0eSA9IFwiaXNBY3RpdmVcIjtcclxuXHJcbiAgICBwdWJsaWMgZ2V0QnVzaW5lc3NVbml0SWRQcm9wZXJ0eSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBSZWZlcmVuY2VVdGlscy5CVVNJTkVTU19VTklUX0lEX1BST1BFUlRZO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbnRpdHlJZFByb3BlcnR5KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFJlZmVyZW5jZVV0aWxzLmVudGl0eUlkUHJvcGVydHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVudGl0eUlzQWN0aXZlUHJvcGVydHkoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUmVmZXJlbmNlVXRpbHMuZW50aXR5SXNBY3RpdmVQcm9wZXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SXNBY3RpdmVHcmlkU3R5bGUoaXNBY3RpdmU6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBpc0FjdGl2ZVxyXG4gICAgICAgICAgICA/IHt9XHJcbiAgICAgICAgICAgIDoge1wiY29sb3JcIjogXCIjOTk5OTk5XCJ9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRSZWZlcmVuY2VOYW1lKG1ldGE6IElSZWZlcmVuY2VFbnRpdHlNZXRhZGF0YSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFtZXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWV0YS50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udmVydFN0cmluZ0F0dHJpYnV0ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnZlcnROdW1iZXJBdHRyaWJ1dGUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb252ZXJ0Qm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IHZhbHVlID8gJ1llcycgOiAnTm8nXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb252ZXJ0RGF0ZUF0dHJpYnV0ZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gbW9tZW50KHZhbHVlKS5mb3JtYXQoXCJNL0QvWVlZWVwiKVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udmVydE1vbmV5QXR0cmlidXRlKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKHZhbHVlKS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb252ZXJ0R3JvdXBBdHRyaWJ1dGUoZW50aXR5OiBNYXA8c3RyaW5nLCBhbnk+LCBncm91cFRlbXBsYXRlOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQXR0cmlidXRlczogQXJyYXk8SVJlZmVyZW5jZUF0dHJpYnV0ZU1ldGFkYXRhPik6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgdmFyIHRlbXBsYXRlUGFydHMgPSBncm91cFRlbXBsYXRlLnNwbGl0KFwifFwiKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0ZW1wbGF0ZVBhcnRzLmxlbmd0aCB8fCBqIDwgY2hpbGRBdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0ID0gdGVtcGxhdGVQYXJ0c1tpXTtcclxuICAgICAgICAgICAgaWYgKHBhcnQuaW5kZXhPZihcIj9cIiwgMCkgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBjaGlsZEF0dHJpYnV0ZXNbal07XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0clR5cGUgPSBhdHRyLnR5cGU7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0clN5c05hbWUgPSBhdHRyLnN5c3RlbU5hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1RleHRBdHRyaWJ1dGVUeXBlKGF0dHJUeXBlKSB8fCB0aGlzLmlzSHRtbEF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNvbnZlcnRTdHJpbmdBdHRyaWJ1dGUoZW50aXR5W2F0dHJTeXNOYW1lXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNOdW1iZXJBdHRyaWJ1dGVUeXBlKGF0dHJUeXBlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb252ZXJ0TnVtYmVyQXR0cmlidXRlKGVudGl0eVthdHRyU3lzTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQm9vbGVhbkF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNvbnZlcnRCb29sZWFuQXR0cmlidXRlKGVudGl0eVthdHRyU3lzTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRGF0ZUF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNvbnZlcnREYXRlQXR0cmlidXRlKGVudGl0eVthdHRyU3lzTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTW9uZXlBdHRyaWJ1dGVUeXBlKGF0dHJUeXBlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb252ZXJ0TW9uZXlBdHRyaWJ1dGUoZW50aXR5W2F0dHJTeXNOYW1lXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnN1YnN0cigxLCBwYXJ0Lmxlbmd0aCkucmVwbGFjZShcIiUxXCIsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcGFydDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICsrajtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBwYXJ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnZlcnRPbmVBc3NvY2lhdGlvbkF0dHJpYnV0ZShlbnRpdHk6IE1hcDxzdHJpbmcsIGFueT4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jaWF0aW9uRW50aXR5OiBJUmVmZXJlbmNlRW50aXR5TWV0YWRhdGEpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eU5hbWVCeUF0dHJpYnV0ZShlbnRpdHksIGFzc29jaWF0aW9uRW50aXR5LnNlbGVjdG9yQXR0cmlidXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udmVydE9uZUFzc29jaWF0aW9uQXR0cmlidXRlRm9yR3JpZChlbnRpdHk6IE1hcDxzdHJpbmcsIGFueT4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbkF0dHJpYnV0ZTogSVJlZmVyZW5jZUF0dHJpYnV0ZU1ldGFkYXRhKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gZW50aXR5W2Fzc29jaWF0aW9uQXR0cmlidXRlLnN5c3RlbU5hbWUgKyBcIl9cIiArIGFzc29jaWF0aW9uQXR0cmlidXRlLmFzc29jaWF0aW9uLnNlbGVjdG9yQXR0cmlidXRlLnN5c3RlbU5hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb252ZXJ0T25lQXNzb2NpYXRpb25BdHRyaWJ1dGVUb051bWJlcihlbnRpdHk6IE1hcDxzdHJpbmcsIGFueT4pOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBlbnRpdHkgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gZW50aXR5W1wiaWRcIl1cclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnZlcnRNYW55QXNzb2NpYXRpb25BdHRyaWJ1dGVUb051bWJlcnMoZW50aXRpZXM6IEFycmF5PE1hcDxzdHJpbmcsIGFueT4+KTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdDogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICAgIGlmIChlbnRpdGllcyAmJiBlbnRpdGllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50aXRpZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRpdHkgPSBlbnRpdGllc1tpXTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY29udmVydE9uZUFzc29jaWF0aW9uQXR0cmlidXRlVG9OdW1iZXIoZW50aXR5KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udmVydFN0cmluZ0RlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnZlcnROdW1iZXJEZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnZlcnRCb29sZWFuRGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUgPT0gXCJ0cnVlXCJcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnZlcnREYXRlRGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udmVydE1vbmV5RGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udmVydE9uZUFzc29jaWF0aW9uRGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb252ZXJ0TWFueUFzc29jaWF0aW9uRGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBBcnJheTxudW1iZXI+IHtcclxuICAgICAgICB2YXIgcmVzdWx0OiBBcnJheTxudW1iZXI+ID0gW107XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHMgPSB2YWx1ZS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNvbnZlcnRPbmVBc3NvY2lhdGlvbkRlZmF1bHRWYWx1ZShpZHNbaV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZFN0cmluZ0F0dHJpYnV0ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZhbGlkTnVtYmVyQXR0cmlidXRlKHZhbHVlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZEJvb2xlYW5BdHRyaWJ1dGUodmFsdWU6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZERhdGVBdHRyaWJ1dGUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZE1vbmV5QXR0cmlidXRlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRPbmVBc3NvY2lhdGlvbkF0dHJpYnV0ZSh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRNYW55QXNzb2NpYXRpb25BdHRyaWJ1dGUodmFsdWU6IEFycmF5PG51bWJlcj4pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRBdHRyaWJ1dGUoYXR0clR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVGV4dEF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpIHx8IHRoaXMuaXNIdG1sQXR0cmlidXRlVHlwZShhdHRyVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRTdHJpbmdBdHRyaWJ1dGUodmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc051bWJlckF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkTnVtYmVyQXR0cmlidXRlKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNCb29sZWFuQXR0cmlidXRlVHlwZShhdHRyVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRCb29sZWFuQXR0cmlidXRlKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNEYXRlQXR0cmlidXRlVHlwZShhdHRyVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWREYXRlQXR0cmlidXRlKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNNb25leUF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkTW9uZXlBdHRyaWJ1dGUodmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc09uZUFzc29jaWF0aW9uQXR0cmlidXRlVHlwZShhdHRyVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRPbmVBc3NvY2lhdGlvbkF0dHJpYnV0ZSh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTWFueUFzc29jaWF0aW9uQXR0cmlidXRlVHlwZShhdHRyVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRNYW55QXNzb2NpYXRpb25BdHRyaWJ1dGUodmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUZXh0QXR0cmlidXRlVHlwZShhdHRyaWJ1dGVUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gYXR0cmlidXRlVHlwZSA9PSAnVEVYVCc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzSHRtbEF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVR5cGUgPT0gJ0hUTUwnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc051bWJlckF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVR5cGUgPT0gJ05VTUJFUic7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQm9vbGVhbkF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVR5cGUgPT0gJ0JPT0xFQU4nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0RhdGVBdHRyaWJ1dGVUeXBlKGF0dHJpYnV0ZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVUeXBlID09ICdEQVRFJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNNb25leUF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVR5cGUgPT0gJ01PTkVZJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNHcm91cEF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVR5cGUgPT0gJ0dST1VQJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNPbmVBc3NvY2lhdGlvbkF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVR5cGUgPT0gJ09ORV9BU1NPQ0lBVElPTic7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTWFueUFzc29jaWF0aW9uQXR0cmlidXRlVHlwZShhdHRyaWJ1dGVUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gYXR0cmlidXRlVHlwZSA9PSAnTUFOWV9BU1NPQ0lBVElPTic7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQW5kTG9naWNhbE9wZXJhdG9yVHlwZShsb2dpY2FsT3BlcmF0b3JUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbG9naWNhbE9wZXJhdG9yVHlwZSA9PSBcIkFORFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc09yTG9naWNhbE9wZXJhdG9yVHlwZShsb2dpY2FsT3BlcmF0b3JUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbG9naWNhbE9wZXJhdG9yVHlwZSA9PSBcIk9SXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVudGl0eU5hbWVCeUF0dHJpYnV0ZShlbnRpdHk6IE1hcDxzdHJpbmcsIGFueT4sIGF0dHJpYnV0ZTogSVJlZmVyZW5jZUF0dHJpYnV0ZU1ldGFkYXRhKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWVudGl0eSB8fCAhYXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYXR0clR5cGUgPSBhdHRyaWJ1dGUudHlwZTtcclxuICAgICAgICB2YXIgYXR0clN5c05hbWUgPSBhdHRyaWJ1dGUuc3lzdGVtTmFtZTtcclxuICAgICAgICBpZiAodGhpcy5pc1RleHRBdHRyaWJ1dGVUeXBlKGF0dHJUeXBlKSB8fCB0aGlzLmlzSHRtbEF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRTdHJpbmdBdHRyaWJ1dGUoZW50aXR5W2F0dHJTeXNOYW1lXSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQm9vbGVhbkF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRCb29sZWFuQXR0cmlidXRlKGVudGl0eVthdHRyU3lzTmFtZV0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0RhdGVBdHRyaWJ1dGVUeXBlKGF0dHJUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RGF0ZUF0dHJpYnV0ZShlbnRpdHlbYXR0clN5c05hbWVdKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNNb25leUF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRNb25leUF0dHJpYnV0ZShlbnRpdHlbYXR0clN5c05hbWVdKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNHcm91cEF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRHcm91cEF0dHJpYnV0ZShlbnRpdHksIGF0dHJpYnV0ZS5ncm91cFRlbXBsYXRlLCBhdHRyaWJ1dGUuY2hpbGRBdHRyaWJ1dGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZpeElucHV0UmVmZXJlbmNlRW50aXR5QXR0cmlidXRlcyhyZWZlcmVuY2VFbnRpdHk6IE1hcDxzdHJpbmcsIGFueT4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFkYXRhOiBJUmVmZXJlbmNlRW50aXR5TWV0YWRhdGEpOiB2b2lkIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZmVyZW5jZU1ldGFkYXRhLmRlZmF1bHRBdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBhdHRyID0gcmVmZXJlbmNlTWV0YWRhdGEuZGVmYXVsdEF0dHJpYnV0ZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBhdHRyVHlwZSA9IGF0dHIudHlwZTtcclxuICAgICAgICAgICAgdmFyIGF0dHJTeXNOYW1lID0gYXR0ci5zeXN0ZW1OYW1lO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RleHRBdHRyaWJ1dGVUeXBlKGF0dHJUeXBlKSB8fCB0aGlzLmlzSHRtbEF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VFbnRpdHlbYXR0clN5c05hbWVdID0gdGhpcy5jb252ZXJ0U3RyaW5nQXR0cmlidXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUVudGl0eVthdHRyU3lzTmFtZV0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNOdW1iZXJBdHRyaWJ1dGVUeXBlKGF0dHJUeXBlKSkge1xyXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlRW50aXR5W2F0dHJTeXNOYW1lXSA9IHRoaXMuY29udmVydE51bWJlckF0dHJpYnV0ZShcclxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VFbnRpdHlbYXR0clN5c05hbWVdKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRGF0ZUF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VFbnRpdHlbYXR0clN5c05hbWVdID0gdGhpcy5jb252ZXJ0RGF0ZUF0dHJpYnV0ZShcclxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VFbnRpdHlbYXR0clN5c05hbWVdKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTW9uZXlBdHRyaWJ1dGVUeXBlKGF0dHJUeXBlKSkge1xyXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlRW50aXR5W2F0dHJTeXNOYW1lXSA9IHRoaXMuY29udmVydE1vbmV5QXR0cmlidXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUVudGl0eVthdHRyU3lzTmFtZV0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNPbmVBc3NvY2lhdGlvbkF0dHJpYnV0ZVR5cGUoYXR0clR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VFbnRpdHlbYXR0clN5c05hbWVdID0gdGhpcy5jb252ZXJ0T25lQXNzb2NpYXRpb25BdHRyaWJ1dGVUb051bWJlcihcclxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VFbnRpdHlbYXR0clN5c05hbWVdKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTWFueUFzc29jaWF0aW9uQXR0cmlidXRlVHlwZShhdHRyVHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUVudGl0eVthdHRyU3lzTmFtZV0gPSB0aGlzLmNvbnZlcnRNYW55QXNzb2NpYXRpb25BdHRyaWJ1dGVUb051bWJlcnMoXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlRW50aXR5W2F0dHJTeXNOYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN0cmluZ0luQnJvd3NlckZvcm1hdChzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogc3RyaW5nID0gXCJcIjtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goc3RyLCBjaCA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY2gpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCI9XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChcIiUzRFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChjaCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNVc2VyVGhlU2FtZUJ1c2luZXNVbml0c1dpdGhFbnRpdHkodXNlckJ1c2luZXNzVW5pdHM6IEFycmF5PG51bWJlcj4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUVudGl0eTogTWFwPHN0cmluZywgYW55Pik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh1c2VyQnVzaW5lc3NVbml0cykge1xyXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlRW50aXR5ICYmIHJlZmVyZW5jZUVudGl0eVtcImJ1c2luZXNzVW5pdElkXCJdICYmXHJcbiAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NVbml0cy5zb21lKHggPT4geCA9PSByZWZlcmVuY2VFbnRpdHlbXCJidXNpbmVzc1VuaXRJZFwiXSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgSVJlZmVyZW5jZUVudGl0aWVzUGFyYW1zIHtcclxuICAgIHJlZmVyZW5jZUZpbHRlcj86IHN0cmluZztcclxuICAgIHJlZmVyZW5jZVNvcnRpbmc/OiBzdHJpbmc7XHJcbiAgICByZWZlcmVuY2VTZWFyY2hTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICByZWZlcmVuY2VTcGxpdFBhcmFtPzogYm9vbGVhbjtcclxuICAgIGJ1c2luZXNzVW5pdEZpbHRlcj86IG51bWJlcjtcclxuICAgIG51bGxhYmxlQnVzaW5lc3NVbml0PzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlZmVyZW5jZUVudGl0aWVzUGFyYW1zIGltcGxlbWVudHMgSVJlZmVyZW5jZUVudGl0aWVzUGFyYW1zIHtcclxuICAgIHB1YmxpYyByZWZlcmVuY2VGaWx0ZXI6IHN0cmluZztcclxuICAgIHB1YmxpYyByZWZlcmVuY2VTb3J0aW5nOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmVmZXJlbmNlU2VhcmNoU3RyaW5nOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmVmZXJlbmNlU3BsaXRQYXJhbTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRGaWx0ZXI6IG51bWJlcjtcclxuICAgIHB1YmxpYyBudWxsYWJsZUJ1c2luZXNzVW5pdDogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWZlcmVuY2VGaWx0ZXI6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZVNvcnRpbmc6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZVNlYXJjaFN0cmluZzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlU3BsaXRQYXJhbTogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgIGJ1c2luZXNzVW5pdEZpbHRlcjogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgbnVsbGFibGVCdXNpbmVzc1VuaXQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnJlZmVyZW5jZUZpbHRlciA9IHJlZmVyZW5jZUZpbHRlcjtcclxuICAgICAgICB0aGlzLnJlZmVyZW5jZVNvcnRpbmcgPSByZWZlcmVuY2VTb3J0aW5nO1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlU2VhcmNoU3RyaW5nID0gcmVmZXJlbmNlU2VhcmNoU3RyaW5nO1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlU3BsaXRQYXJhbSA9IHJlZmVyZW5jZVNwbGl0UGFyYW07XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRGaWx0ZXIgPSBidXNpbmVzc1VuaXRGaWx0ZXI7XHJcbiAgICAgICAgdGhpcy5udWxsYWJsZUJ1c2luZXNzVW5pdCA9IG51bGxhYmxlQnVzaW5lc3NVbml0O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtSZWZlcmVuY2VVdGlsc30gZnJvbSBcIi4vLi4vUmVmZXJlbmNlVXRpbHNcIlxyXG5pbXBvcnQge0lSZWZlcmVuY2VFbnRpdHlNZXRhZGF0YX0gZnJvbSBcIi4vLi4vbW9kZWxzL1JlZmVyZW5jZU1ldGFkYXRhXCJcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VJc1JlcXVpcmVkVmFsaWRhdG9yIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgdXRpbHM6IFJlZmVyZW5jZVV0aWxzO1xyXG4gICAgcHJvdGVjdGVkIGVudGl0eTogTWFwPHN0cmluZywgYW55PjtcclxuICAgIHByb3RlY3RlZCBtZXRhZGF0YTogSVJlZmVyZW5jZUVudGl0eU1ldGFkYXRhO1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRpb25FcnJvcnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgY29uc3RydWN0b3IodXRpbHM6IFJlZmVyZW5jZVV0aWxzLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiBNYXA8c3RyaW5nLCBhbnk+LFxyXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IElSZWZlcmVuY2VFbnRpdHlNZXRhZGF0YSxcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvcnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAgICAgICB0aGlzLnV0aWxzID0gdXRpbHM7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XHJcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yc01hcCA9IHZhbGlkYXRpb25FcnJvcnNNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy51dGlscyB8fCAhdGhpcy5lbnRpdHkgfHwgIXRoaXMubWV0YWRhdGEgfHwgIXRoaXMudmFsaWRhdGlvbkVycm9yc01hcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tZXRhZGF0YS5lZGl0YWJsZUF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgdmFyIGF0dHIgPSB0aGlzLm1ldGFkYXRhLmVkaXRhYmxlQXR0cmlidXRlc1tpXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJTeXNOYW1lID0gYXR0ci5zeXN0ZW1OYW1lO1xyXG4gICAgICAgICAgICB2YXIgYXR0cklzUmVxdWlyZWQgPSBhdHRyLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIGlmICghYXR0cklzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51dGlscy52YWxpZEF0dHJpYnV0ZShhdHRyLnR5cGUsIHRoaXMuZW50aXR5W2F0dHJTeXNOYW1lXSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yc01hcC5zZXQoYXR0clN5c05hbWUsIHRoaXMuYnVpbGRFcnJvck1lc3NhZ2UoYXR0ci50aXRsZSkpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkRXJyb3JNZXNzYWdlKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsdWUgZm9yIHRoZSBmaWVsZCBcXFwiJTFcXFwiXCIucmVwbGFjZShcIiUxXCIsIHRpdGxlKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7UmVmZXJlbmNlVXRpbHN9IGZyb20gXCIuLy4uL1JlZmVyZW5jZVV0aWxzXCJcclxuaW1wb3J0IHtJUmVmZXJlbmNlRW50aXR5TWV0YWRhdGF9IGZyb20gXCIuLy4uL21vZGVscy9SZWZlcmVuY2VNZXRhZGF0YVwiXHJcblxyXG5leHBvcnQgY2xhc3MgUmVmZXJlbmNlTWF4TGVuZ3RoVmFsaWRhdG9yIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgdXRpbHM6IFJlZmVyZW5jZVV0aWxzO1xyXG4gICAgcHJvdGVjdGVkIGVudGl0eTogTWFwPHN0cmluZywgYW55PjtcclxuICAgIHByb3RlY3RlZCBtZXRhZGF0YTogSVJlZmVyZW5jZUVudGl0eU1ldGFkYXRhO1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRpb25FcnJvcnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgY29uc3RydWN0b3IodXRpbHM6IFJlZmVyZW5jZVV0aWxzLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiBNYXA8c3RyaW5nLCBhbnk+LFxyXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IElSZWZlcmVuY2VFbnRpdHlNZXRhZGF0YSxcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvcnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAgICAgICB0aGlzLnV0aWxzID0gdXRpbHM7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XHJcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yc01hcCA9IHZhbGlkYXRpb25FcnJvcnNNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy51dGlscyB8fCAhdGhpcy5lbnRpdHkgfHwgIXRoaXMubWV0YWRhdGEgfHwgIXRoaXMudmFsaWRhdGlvbkVycm9yc01hcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tZXRhZGF0YS5lZGl0YWJsZUF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgdmFyIGF0dHIgPSB0aGlzLm1ldGFkYXRhLmVkaXRhYmxlQXR0cmlidXRlc1tpXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJTeXNOYW1lID0gYXR0ci5zeXN0ZW1OYW1lO1xyXG4gICAgICAgICAgICB2YXIgYXR0ck1heExlbmd0aCA9IGF0dHIubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoISh0aGlzLnV0aWxzLmlzVGV4dEF0dHJpYnV0ZVR5cGUoYXR0ci50eXBlKSB8fCB0aGlzLnV0aWxzLmlzSHRtbEF0dHJpYnV0ZVR5cGUoYXR0ci50eXBlKSlcclxuICAgICAgICAgICAgICAgIHx8ICFhdHRyTWF4TGVuZ3RoIHx8ICF0aGlzLmVudGl0eVthdHRyU3lzTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVudGl0eVthdHRyU3lzTmFtZV0ubGVuZ3RoID4gYXR0ck1heExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzTWFwLnNldChhdHRyU3lzTmFtZSwgdGhpcy5idWlsZEVycm9yTWVzc2FnZShhdHRyLnRpdGxlLCBhdHRyTWF4TGVuZ3RoKSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRFcnJvck1lc3NhZ2UodGl0bGU6IHN0cmluZywgbWF4TGVuZ3RoOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIkZpZWxkIGxlbmd0aCBcXFwiJTFcXFwiIGNhbm5vdCBleGNlZWQgJTEgc3ltYm9sc1wiLnJlcGxhY2UoXCIlMVwiLCB0aXRsZSkucmVwbGFjZShcIiUxXCIsIG1heExlbmd0aCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1JlZmVyZW5jZVV0aWxzfSBmcm9tIFwiLi4vUmVmZXJlbmNlVXRpbHNcIjtcclxuaW1wb3J0IHtJUmVmZXJlbmNlRW50aXR5TWV0YWRhdGF9IGZyb20gXCIuLi9tb2RlbHMvUmVmZXJlbmNlTWV0YWRhdGFcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VNaW5WYWx1ZVZhbGlkYXRvciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIHV0aWxzOiBSZWZlcmVuY2VVdGlscztcclxuICAgIHByb3RlY3RlZCBlbnRpdHk6IE1hcDxzdHJpbmcsIGFueT47XHJcbiAgICBwcm90ZWN0ZWQgbWV0YWRhdGE6IElSZWZlcmVuY2VFbnRpdHlNZXRhZGF0YTtcclxuICAgIHByb3RlY3RlZCB2YWxpZGF0aW9uRXJyb3JzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHV0aWxzOiBSZWZlcmVuY2VVdGlscyxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogTWFwPHN0cmluZywgYW55PixcclxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBJUmVmZXJlbmNlRW50aXR5TWV0YWRhdGEsXHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3JzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KSB7XHJcbiAgICAgICAgdGhpcy51dGlscyA9IHV0aWxzO1xyXG4gICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5O1xyXG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnNNYXAgPSB2YWxpZGF0aW9uRXJyb3JzTWFwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMudXRpbHMgfHwgIXRoaXMuZW50aXR5IHx8ICF0aGlzLm1ldGFkYXRhIHx8ICF0aGlzLnZhbGlkYXRpb25FcnJvcnNNYXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWV0YWRhdGEuZWRpdGFibGVBdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIGxldCBhdHRyID0gdGhpcy5tZXRhZGF0YS5lZGl0YWJsZUF0dHJpYnV0ZXNbaV07XHJcbiAgICAgICAgICAgIGxldCBhdHRyU3lzTmFtZSA9IGF0dHIuc3lzdGVtTmFtZTtcclxuICAgICAgICAgICAgbGV0IGF0dHJNaW5WYWx1ZSA9IGF0dHIubWluVmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51dGlscy5pc051bWJlckF0dHJpYnV0ZVR5cGUoYXR0ci50eXBlKSB8fCAoYXR0ck1pblZhbHVlID09IG51bGwgfHwgYXR0ck1pblZhbHVlID09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHx8ICF0aGlzLmVudGl0eVthdHRyU3lzTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVudGl0eVthdHRyU3lzTmFtZV0gPCBhdHRyTWluVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yc01hcC5zZXQoYXR0clN5c05hbWUsIHRoaXMuYnVpbGRFcnJvck1lc3NhZ2UoYXR0ci50aXRsZSwgYXR0ck1pblZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRFcnJvck1lc3NhZ2UodGl0bGU6IHN0cmluZywgbWluVmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiRmllbGQgXFxcIiUwXFxcIiB2YWx1ZSBjYW4ndCBiZSBsb3dlciB0aGFuICUxXCJcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIlMFwiLCB0aXRsZSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIlMVwiLCBtaW5WYWx1ZSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1JlZmVyZW5jZVV0aWxzfSBmcm9tIFwiLi8uLi9SZWZlcmVuY2VVdGlsc1wiXHJcbmltcG9ydCB7SVJlZmVyZW5jZUVudGl0eU1ldGFkYXRhLCBJUmVmZXJlbmNlUmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXBNZXRhZGF0YX0gZnJvbSBcIi4vLi4vbW9kZWxzL1JlZmVyZW5jZU1ldGFkYXRhXCJcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VSZXF1aXJlZEF0dHJpYnV0ZXNHcm91cFZhbGlkYXRvciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIHV0aWxzOiBSZWZlcmVuY2VVdGlscztcclxuICAgIHByb3RlY3RlZCBlbnRpdHk6IE1hcDxzdHJpbmcsIGFueT47XHJcbiAgICBwcm90ZWN0ZWQgbWV0YWRhdGE6IElSZWZlcmVuY2VFbnRpdHlNZXRhZGF0YTtcclxuICAgIHByb3RlY3RlZCB2YWxpZGF0aW9uRXJyb3JzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHV0aWxzOiBSZWZlcmVuY2VVdGlscyxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogTWFwPHN0cmluZywgYW55PixcclxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBJUmVmZXJlbmNlRW50aXR5TWV0YWRhdGEsXHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3JzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KSB7XHJcbiAgICAgICAgdGhpcy51dGlscyA9IHV0aWxzO1xyXG4gICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5O1xyXG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnNNYXAgPSB2YWxpZGF0aW9uRXJyb3JzTWFwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMudXRpbHMgfHwgIXRoaXMuZW50aXR5IHx8ICF0aGlzLm1ldGFkYXRhIHx8ICF0aGlzLnZhbGlkYXRpb25FcnJvcnNNYXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMubWV0YWRhdGEucmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmVudGl0eUJ5UmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXBWYWxpZCh0aGlzLmVudGl0eSwgdGhpcy5tZXRhZGF0YS5yZXF1aXJlZEF0dHJpYnV0ZXNHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBlbnRpdHlCeVJlcXVpcmVkQXR0cmlidXRlc0dyb3VwVmFsaWQocmVmZXJlbmNlRW50aXR5OiBNYXA8c3RyaW5nLCBhbnk+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXA6IElSZWZlcmVuY2VSZXF1aXJlZEF0dHJpYnV0ZXNHcm91cE1ldGFkYXRhKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIGxvZ2ljYWxPcGVyYXRvclR5cGUgPSByZXF1aXJlZEF0dHJpYnV0ZXNHcm91cC5sb2dpY2FsT3BlcmF0b3JUeXBlO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmVudGl0eUJ5UmVxdWlyZWRBdHRyaWJ1dGVzVmFsaWQocmVmZXJlbmNlRW50aXR5LCByZXF1aXJlZEF0dHJpYnV0ZXNHcm91cCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXF1aXJlZEF0dHJpYnV0ZXNHcm91cC5yZXF1aXJlZEF0dHJpYnV0ZXNHcm91cHMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgdmFyIHJlcXVpcmVkQXR0cnNHcm91cCA9IHJlcXVpcmVkQXR0cmlidXRlc0dyb3VwLnJlcXVpcmVkQXR0cmlidXRlc0dyb3Vwc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXRpbHMuaXNBbmRMb2dpY2FsT3BlcmF0b3JUeXBlKGxvZ2ljYWxPcGVyYXRvclR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5lbnRpdHlCeVJlcXVpcmVkQXR0cmlidXRlc0dyb3VwVmFsaWQocmVmZXJlbmNlRW50aXR5LCByZXF1aXJlZEF0dHJzR3JvdXApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNPckxvZ2ljYWxPcGVyYXRvclR5cGUobG9naWNhbE9wZXJhdG9yVHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLmVudGl0eUJ5UmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXBWYWxpZChyZWZlcmVuY2VFbnRpdHksIHJlcXVpcmVkQXR0cnNHcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVudGl0eUJ5UmVxdWlyZWRBdHRyaWJ1dGVzVmFsaWQocmVmZXJlbmNlRW50aXR5OiBNYXA8c3RyaW5nLCBhbnk+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkQXR0cmlidXRlc0dyb3VwOiBJUmVmZXJlbmNlUmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXBNZXRhZGF0YSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gcmVxdWlyZWRBdHRyaWJ1dGVzR3JvdXAuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgbG9naWNhbE9wZXJhdG9yVHlwZSA9IHJlcXVpcmVkQXR0cmlidXRlc0dyb3VwLmxvZ2ljYWxPcGVyYXRvclR5cGU7XHJcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVzIHx8IGF0dHJpYnV0ZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXRpbHMuaXNBbmRMb2dpY2FsT3BlcmF0b3JUeXBlKGxvZ2ljYWxPcGVyYXRvclR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZmlyc3RBdHRyID0gYXR0cmlidXRlc1swXTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy51dGlscy52YWxpZEF0dHJpYnV0ZShmaXJzdEF0dHIudHlwZSwgcmVmZXJlbmNlRW50aXR5W2ZpcnN0QXR0ci5zeXN0ZW1OYW1lXSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBhdHRyID0gYXR0cmlidXRlc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXRpbHMuaXNBbmRMb2dpY2FsT3BlcmF0b3JUeXBlKGxvZ2ljYWxPcGVyYXRvclR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy51dGlscy52YWxpZEF0dHJpYnV0ZShhdHRyLnR5cGUsIHJlZmVyZW5jZUVudGl0eVthdHRyLnN5c3RlbU5hbWVdKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzT3JMb2dpY2FsT3BlcmF0b3JUeXBlKGxvZ2ljYWxPcGVyYXRvclR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy51dGlscy52YWxpZEF0dHJpYnV0ZShhdHRyLnR5cGUsIHJlZmVyZW5jZUVudGl0eVthdHRyLnN5c3RlbU5hbWVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGVudW0gTG9nb25Qcm92aWRlckVudW0ge1xyXG4gICAgTE9DQUwgPSAxLFxyXG4gICAgQURfTE9DQUwgPSAyLFxyXG4gICAgQURfU1NPID0gMyxcclxuICAgIFBFUlNPTklGWV9TU08gPSAxMDEsXHJcbiAgICBQRVJTT05JRllfVVNFUlBBU1NXT1JEID0gMTAyLFxyXG4gICAgTE9DQUxfT1JfUEVSU09OSUZZID0gMTAzLFxyXG4gICAgQVBUSUZZX1NTTyA9IDIwMSxcclxuICAgIExJTktFRElOX1NTTyA9IDQwMSxcclxuICAgIE1JQ1JPU09GVF9BRF9TU08gPSA0MDIsXHJcbiAgICBGQUNFQk9PS19TU08gPSA0MDMsXHJcbiAgICBHT09HTEVfU1NPID0gNDA0LFxyXG4gICAgTUVSQ0FET19TU08gPSA1MDBcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9Tc29Qcm92aWRlcnM6IEFycmF5PExvZ29uUHJvdmlkZXJFbnVtPiA9IFtcclxuICAgIExvZ29uUHJvdmlkZXJFbnVtLlBFUlNPTklGWV9TU08sXHJcbiAgICBMb2dvblByb3ZpZGVyRW51bS5BUFRJRllfU1NPLFxyXG4gICAgTG9nb25Qcm92aWRlckVudW0uTUVSQ0FET19TU09cclxuXTtcclxuIiwiaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4vcGVybWlzc2lvbnMvU2VjdXJlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0V2ZW50XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNSZXBvc2l0b3J5IHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwic2VjdXJpdHkuUGVybWlzc2lvbnNSZXBvc2l0b3J5XCI7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgQ0FDSEVfRVhQSVJBVElPTl9USU1FID0gMTAwMCAqIDYwICogNTtcclxuICAgIHByaXZhdGUgc3RhdGljIENBQ0hFX0NMRUFSX0lOVEVSVkFMID0gMTAwMCAqIDU7XHJcblxyXG4gICAgcHJpdmF0ZSB0aW1lcjogYW5ndWxhci5JUHJvbWlzZTxhbnk+O1xyXG5cclxuICAgIHByaXZhdGUgcGVybWlzc2lvbnNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgICBwcml2YXRlIGV4cGlyYXRpb25DYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJGludGVydmFsXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGludGVydmFsOiBhbmd1bGFyLklJbnRlcnZhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgICAgICAkcm9vdFNjb3BlLiRvbihFdmVudC5MT0dHRURfT04sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckNhY2hlKHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICRyb290U2NvcGUuJG9uKEV2ZW50LkxPR0dFRF9PRkYsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckNhY2hlKHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudGltZXIgPSB0aGlzLiRpbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDYWNoZShmYWxzZSlcclxuICAgICAgICB9LCBQZXJtaXNzaW9uc1JlcG9zaXRvcnkuQ0FDSEVfQ0xFQVJfSU5URVJWQUwsIDAsIGZhbHNlKTtcclxuICAgICAgICAkcm9vdFNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuJGludGVydmFsLmNhbmNlbCh0aGlzLnRpbWVyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UGVybWlzc2lvbnNGb3JPYmplY3Qob2JqZWN0VHlwZTogU2VjdXJlZE9iamVjdFR5cGUsIG9iamVjdElkOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHZhciBrZXkgPSBvYmplY3RUeXBlLmtleSArICdfJyArIG9iamVjdElkO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMucGVybWlzc2lvbnNDYWNoZS5nZXQoa2V5KTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIHByb21pc2U6IG5nLklEZWZlcnJlZDxhbnk+ID0gdGhpcy4kcS5kZWZlcigpO1xyXG4gICAgICAgICAgICBwcm9taXNlLnJlc29sdmUodmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHByb21pc2UucHJvbWlzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9wZXJtaXNzaW9ucy86b2JqZWN0VHlwZS86aWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdFR5cGVcIiwgb2JqZWN0VHlwZS5uYW1lKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgb2JqZWN0SWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQ2FjaGUuc2V0KGtleSwgcmVzdWx0LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uQ2FjaGUuc2V0KGtleSwgbmV3IERhdGUoKS5nZXRUaW1lKCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFyQ2FjaGUoZm9yY2U6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvbkNhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGV4cGlyZWQgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGV4cGlyZWRGcm9tVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gUGVybWlzc2lvbnNSZXBvc2l0b3J5LkNBQ0hFX0VYUElSQVRJT05fVElNRTtcclxuICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uQ2FjaGUuZm9yRWFjaCgodmFsdWUsIGtleSwgbWFwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCBleHBpcmVkRnJvbVRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHBpcmVkLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwaXJlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGV4cGlyZWRbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQ2FjaGUuZGVsZXRlKGtleSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGlyYXRpb25DYWNoZS5kZWxldGUoa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImltcG9ydCB7UGVybWlzc2lvbnNSZXBvc2l0b3J5fSBmcm9tIFwiLi9QZXJtaXNzaW9uc1JlcG9zaXRvcnlcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuL3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lDb3Vyc2VQZXJtaXNzaW9uc30gZnJvbSBcIi4vcGVybWlzc2lvbnMvSUNvdXJzZVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SU1hdGVyaWFsUGVybWlzc2lvbnN9IGZyb20gXCIuL3Blcm1pc3Npb25zL0lNYXRlcmlhbFBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SVBsYXlsaXN0UGVybWlzc2lvbnN9IGZyb20gXCIuL3Blcm1pc3Npb25zL0lQbGF5bGlzdFBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SVF1aXpQZXJtaXNzaW9uc30gZnJvbSBcIi4vcGVybWlzc2lvbnMvSVF1aXpQZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lOZXdzUGVybWlzc2lvbnN9IGZyb20gXCIuL3Blcm1pc3Npb25zL0lOZXdzUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtTZWN1cmVkT2JqZWN0VHlwZX0gZnJvbSBcIi4vcGVybWlzc2lvbnMvU2VjdXJlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc30gZnJvbSBcIi4vcGVybWlzc2lvbnMvSVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHNcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2UsIElVcmxCdWlsZGVyfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUxlYXJuaW5nUGF0aFBlcm1pc3Npb25zfSBmcm9tIFwiLi9wZXJtaXNzaW9ucy9JTGVhcm5pbmdQYXRoUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJUHJvZHVjdFBlcm1pc3Npb25zfSBmcm9tIFwiLi9wZXJtaXNzaW9ucy9JUHJvZHVjdFBlcm1pc3Npb25zXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwic2VjdXJpdHkuUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNSZXBvc2l0b3J5Lk5BTUUsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhBcGk6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFBlcm1pc3Npb25zUmVwb3NpdG9yeSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3lzdGVtUGVybWlzc2lvbnMoKTogYW5ndWxhci5JUHJvbWlzZTxJU3lzdGVtUGVybWlzc2lvbnM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoQXBpLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAgICAgLnRoZW4odXNlciA9PiB1c2VyLnBlcm1pc3Npb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2VjdXJlZE9iamVjdFBlcm1pc3Npb25zKG9iamVjdFR5cGU6IFNlY3VyZWRPYmplY3RUeXBlLCBlbnRpdHlJZDogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1JlcG9zaXRvcnkuZ2V0UGVybWlzc2lvbnNGb3JPYmplY3Qob2JqZWN0VHlwZSwgZW50aXR5SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNYXRlcmlhbFBlcm1pc3Npb25zKG1hdGVyaWFsSWQ6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SU1hdGVyaWFsUGVybWlzc2lvbnM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1JlcG9zaXRvcnkuZ2V0UGVybWlzc2lvbnNGb3JPYmplY3QoU2VjdXJlZE9iamVjdFR5cGUuTUFURVJJQUwsIG1hdGVyaWFsSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQbGF5bGlzdFBlcm1pc3Npb25zKHBsYXlsaXN0SWQ6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SVBsYXlsaXN0UGVybWlzc2lvbnM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1JlcG9zaXRvcnkuZ2V0UGVybWlzc2lvbnNGb3JPYmplY3QoU2VjdXJlZE9iamVjdFR5cGUuUExBWUxJU1QsIHBsYXlsaXN0SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQcm9kdWN0UGVybWlzc2lvbnMocHJvZHVjdElkOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElQcm9kdWN0UGVybWlzc2lvbnM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1JlcG9zaXRvcnkuZ2V0UGVybWlzc2lvbnNGb3JPYmplY3QoU2VjdXJlZE9iamVjdFR5cGUuUFJPRFVDVCwgcHJvZHVjdElkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q291cnNlUGVybWlzc2lvbnMoY291cnNlSWQ6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUNvdXJzZVBlcm1pc3Npb25zPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnNSZXBvc2l0b3J5LmdldFBlcm1pc3Npb25zRm9yT2JqZWN0KFNlY3VyZWRPYmplY3RUeXBlLkNPVVJTRSwgY291cnNlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRRdWl6UGVybWlzc2lvbnMocXVpeklkOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElRdWl6UGVybWlzc2lvbnM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1JlcG9zaXRvcnkuZ2V0UGVybWlzc2lvbnNGb3JPYmplY3QoU2VjdXJlZE9iamVjdFR5cGUuUVVJWiwgcXVpeklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TmV3c1Blcm1pc3Npb25zKG5ld3NJZDogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxJTmV3c1Blcm1pc3Npb25zPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnNSZXBvc2l0b3J5LmdldFBlcm1pc3Npb25zRm9yT2JqZWN0KFNlY3VyZWRPYmplY3RUeXBlLk5FV1MsIG5ld3NJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExlYXJuaW5nUGF0aFBlcm1pc3Npb25zKGxlYXJuaW5nUGF0aElkOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPElMZWFybmluZ1BhdGhQZXJtaXNzaW9ucz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zUmVwb3NpdG9yeS5nZXRQZXJtaXNzaW9uc0Zvck9iamVjdChTZWN1cmVkT2JqZWN0VHlwZS5MRUFSTklOR19QQVRILCBsZWFybmluZ1BhdGhJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFsbE9iamVjdFBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzKHNlY3VyZWRPYmplY3RUeXBlOiBTZWN1cmVkT2JqZWN0VHlwZSwgb2JqZWN0SWQ/OiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzPj4ge1xyXG4gICAgICAgIGxldCB1cmw6IHN0cmluZyA9IFwiL2FwaS9wZXJtaXNzaW9ucy91c2Vyc0FuZEdyb3Vwcy86b2JqZWN0VHlwZVwiO1xyXG4gICAgICAgIGlmIChvYmplY3RJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBcIj9pZD06aWRcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHVybEJ1aWxkZXI6IElVcmxCdWlsZGVyID0gdGhpcy51cmwuYmFzZSh1cmwpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvYmplY3RUeXBlXCIsIHNlY3VyZWRPYmplY3RUeXBlLm5hbWUpO1xyXG4gICAgICAgIGlmIChvYmplY3RJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHVybEJ1aWxkZXIucGFyYW0oXCI6aWRcIiwgb2JqZWN0SWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodXJsQnVpbGRlci5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWaWV3QW5kU3RhcnRPYmplY3RQZXJtaXNzaW9uc1dpdGhVc2Vyc0FuZEdyb3VwcyhzZWN1cmVkT2JqZWN0VHlwZTogU2VjdXJlZE9iamVjdFR5cGUsIG9iamVjdElkOiBzdHJpbmcpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElQZXJtaXNzaW9uV2l0aFVzZXJzQW5kR3JvdXBzPj4ge1xyXG4gICAgICAgIGxldCB1cmw6IHN0cmluZyA9IFwiL2FwaS9wZXJtaXNzaW9ucy91c2Vyc0FuZEdyb3Vwcy86b2JqZWN0VHlwZS92aWV3QW5kU3RhcnRcIjtcclxuICAgICAgICBpZiAob2JqZWN0SWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCI/aWQ9OmlkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1cmxCdWlsZGVyOiBJVXJsQnVpbGRlciA9IHRoaXMudXJsLmJhc2UodXJsKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0VHlwZVwiLCBzZWN1cmVkT2JqZWN0VHlwZS5uYW1lKTtcclxuICAgICAgICBpZiAob2JqZWN0SWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB1cmxCdWlsZGVyLnBhcmFtKFwiOmlkXCIsIG9iamVjdElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHVybEJ1aWxkZXIuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQge1Blcm1pc3Npb25zUmVwb3NpdG9yeX0gZnJvbSBcIi4vUGVybWlzc2lvbnNSZXBvc2l0b3J5XCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuL1NlY3VyaXR5U2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi8uLi91cmxzL1VybHNNb2R1bGVcIjtcclxuaW1wb3J0IHtBdXRoTW9kdWxlfSBmcm9tIFwiLi8uLi9hdXRoL0F1dGhNb2R1bGVcIjtcclxuaW1wb3J0IHtBdXRoQ29yZU1vZHVsZX0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aENvcmVNb2R1bGVcIjtcclxuXHJcbmV4cG9ydCB2YXIgU2VjdXJpdHlNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJzZWN1cml0eVwiLCBbXHJcbiAgICAgICAgVXJsc01vZHVsZS5uYW1lLFxyXG4gICAgICAgIEF1dGhNb2R1bGUubmFtZSxcclxuICAgICAgICBBdXRoQ29yZU1vZHVsZS5uYW1lXHJcbiAgICBdKVxyXG4gICAgLnNlcnZpY2UoUGVybWlzc2lvbnNSZXBvc2l0b3J5Lk5BTUUsIFBlcm1pc3Npb25zUmVwb3NpdG9yeSlcclxuICAgIC5zZXJ2aWNlKFBlcm1pc3Npb25zU2VydmljZS5OQU1FLCBQZXJtaXNzaW9uc1NlcnZpY2UpXHJcbiAgICAuc2VydmljZShTZWN1cml0eVNlcnZpY2UuTkFNRSwgU2VjdXJpdHlTZXJ2aWNlKTsiLCJpbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4vUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJTWF0ZXJpYWxQZXJtaXNzaW9uc30gZnJvbSBcIi4vcGVybWlzc2lvbnMvSU1hdGVyaWFsUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJUGxheWxpc3RQZXJtaXNzaW9uc30gZnJvbSBcIi4vcGVybWlzc2lvbnMvSVBsYXlsaXN0UGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJQ291cnNlUGVybWlzc2lvbnN9IGZyb20gXCIuL3Blcm1pc3Npb25zL0lDb3Vyc2VQZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lQcm9kdWN0UGVybWlzc2lvbnN9IGZyb20gXCIuL3Blcm1pc3Npb25zL0lQcm9kdWN0UGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtJUXVpelBlcm1pc3Npb25zfSBmcm9tIFwiLi9wZXJtaXNzaW9ucy9JUXVpelBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SU5ld3NQZXJtaXNzaW9uc30gZnJvbSBcIi4vcGVybWlzc2lvbnMvSU5ld3NQZXJtaXNzaW9uc1wiO1xyXG5cclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLy4uL2F1dGhjb3JlL0F1dGhSZWRpcmVjdFwiO1xyXG5pbXBvcnQge1JlZGlyZWN0UmVhc29ufSBmcm9tIFwiLi8uLi9hdXRoY29yZS9SZWRpcmVjdFJlYXNvblwiO1xyXG5pbXBvcnQge0F1dGhSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvQXV0aFJvdXRlclwiO1xyXG5pbXBvcnQge0lMZWFybmluZ1BhdGhQZXJtaXNzaW9uc30gZnJvbSBcIi4vcGVybWlzc2lvbnMvSUxlYXJuaW5nUGF0aFBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlY3VyaXR5U2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInNlY3VyaXR5LlNlY3VyaXR5U2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJvdXRlci5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aE1hbmFnZXI6IEF1dGhNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJvdXRlcjogQXV0aFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVtYW5kQXV0aGVudGljYXRpb24oKTogU2VjdXJpdHlTZXJ2aWNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aE1hbmFnZXIuaGFzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5yZWRpcmVjdFRvTG9nT24oUmVkaXJlY3RSZWFzb24uQUNDRVNTX0RFTklFRCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5yZWRpcmVjdFRvTG9nT24oUmVkaXJlY3RSZWFzb24uVE9LRU5fRVhQSVJFRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZW1hbmROb3RBdXRoZW50aWNhdGVkKCk6IFNlY3VyaXR5U2VydmljZSB7IC8vIEd1ZXN0IHVzZXIgaXMgY29uc2lkZXJlZCBub3QgYXV0aGVudGljYXRlZCBvbiB0aGUgY2xpZW50IHNpZGU7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aE1hbmFnZXIuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QuZm9yd2FyZFRvQWNjZXNzRGVuaWVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhmdW5jOiAoc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucykgPT4gYm9vbGVhbik6IFNlY3VyaXR5U2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtYW5kU3lzdGVtUGVybWlzc2lvbnNJZih0cnVlLCBmdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVtYW5kU3lzdGVtUGVybWlzc2lvbnNJZihjb25kaXRpb246IGJvb2xlYW4sIGZ1bmM6IChzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zKSA9PiBib29sZWFuKTogU2VjdXJpdHlTZXJ2aWNlIHtcclxuICAgICAgICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZnVuYyhzeXN0ZW1QZXJtaXNzaW9ucykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcndhcmRUb0FjY2Vzc0RlbmllZE9yUmVkaXJlY3RMb2dPbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbWFuZE1hdGVyaWFsUGVybWlzc2lvbnMobWF0ZXJpYWxJZDogc3RyaW5nLCBmdW5jOiAobWF0ZXJpYWxQZXJtaXNzaW9uczogSU1hdGVyaWFsUGVybWlzc2lvbnMpID0+IGJvb2xlYW4pOiBTZWN1cml0eVNlcnZpY2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlbWFuZE1hdGVyaWFsUGVybWlzc2lvbnNJZih0cnVlLCBtYXRlcmlhbElkLCBmdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVtYW5kTWF0ZXJpYWxQZXJtaXNzaW9uc0lmKGNvbmRpdGlvbjogYm9vbGVhbiwgbWF0ZXJpYWxJZDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jOiAobWF0ZXJpYWxQZXJtaXNzaW9uczogSU1hdGVyaWFsUGVybWlzc2lvbnMpID0+IGJvb2xlYW4pOiBTZWN1cml0eVNlcnZpY2Uge1xyXG4gICAgICAgIGlmIChjb25kaXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRNYXRlcmlhbFBlcm1pc3Npb25zKG1hdGVyaWFsSWQpLnRoZW4obWF0ZXJpYWxQZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZ1bmMobWF0ZXJpYWxQZXJtaXNzaW9ucykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcndhcmRUb0FjY2Vzc0RlbmllZE9yUmVkaXJlY3RMb2dPbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbWFuZFBsYXlsaXN0UGVybWlzc2lvbnMocGxheWxpc3RJZDogc3RyaW5nLCBmdW5jOiAocGxheWxpc3RQZXJtaXNzaW9uczogSVBsYXlsaXN0UGVybWlzc2lvbnMpID0+IGJvb2xlYW4pOiBTZWN1cml0eVNlcnZpY2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlbWFuZFBsYXlsaXN0UGVybWlzc2lvbnNJZih0cnVlLCBwbGF5bGlzdElkLCBmdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVtYW5kUGxheWxpc3RQZXJtaXNzaW9uc0lmKGNvbmRpdGlvbjogYm9vbGVhbiwgcGxheWxpc3RJZDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jOiAocGxheWxpc3RQZXJtaXNzaW9uczogSVBsYXlsaXN0UGVybWlzc2lvbnMpID0+IGJvb2xlYW4pOiBTZWN1cml0eVNlcnZpY2Uge1xyXG4gICAgICAgIGlmIChjb25kaXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRQbGF5bGlzdFBlcm1pc3Npb25zKHBsYXlsaXN0SWQpLnRoZW4ocGxheWxpc3RQZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZ1bmMocGxheWxpc3RQZXJtaXNzaW9ucykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcndhcmRUb0FjY2Vzc0RlbmllZE9yUmVkaXJlY3RMb2dPbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbWFuZFByb2R1Y3RQZXJtaXNzaW9ucyhwcm9kdWN0SWQ6IHN0cmluZywgZnVuYzogKHByb2R1Y3RQZXJtaXNzaW9uczogSVByb2R1Y3RQZXJtaXNzaW9ucykgPT4gYm9vbGVhbik6IFNlY3VyaXR5U2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtYW5kUHJvZHVjdFBlcm1pc3Npb25zSWYodHJ1ZSwgcHJvZHVjdElkLCBmdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVtYW5kUHJvZHVjdFBlcm1pc3Npb25zSWYoY29uZGl0aW9uOiBib29sZWFuLCBwcm9kdWN0SWQ6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jOiAocHJvZHVjdFBlcm1pc3Npb25zOiBJUHJvZHVjdFBlcm1pc3Npb25zKSA9PiBib29sZWFuKTogU2VjdXJpdHlTZXJ2aWNlIHtcclxuICAgICAgICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0UHJvZHVjdFBlcm1pc3Npb25zKHByb2R1Y3RJZCkudGhlbihwcm9kdWN0UGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmdW5jKHByb2R1Y3RQZXJtaXNzaW9ucykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcndhcmRUb0FjY2Vzc0RlbmllZE9yUmVkaXJlY3RMb2dPbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbWFuZENvdXJzZVBlcm1pc3Npb25zKGNvdXJzZUlkOiBzdHJpbmcsIGZ1bmM6IChjb3Vyc2VQZXJtaXNzaW9uczogSUNvdXJzZVBlcm1pc3Npb25zKSA9PiBib29sZWFuKTogU2VjdXJpdHlTZXJ2aWNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZW1hbmRDb3Vyc2VQZXJtaXNzaW9uc0lmKHRydWUsIGNvdXJzZUlkLCBmdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVtYW5kVmlld0NvdXJzZVBlcm1pc3Npb25zKGNvdXJzZUlkOiBzdHJpbmcsIGZ1bmM6IChjb3Vyc2VQZXJtaXNzaW9uczogSUNvdXJzZVBlcm1pc3Npb25zKSA9PiBib29sZWFuKTogU2VjdXJpdHlTZXJ2aWNlIHtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldENvdXJzZVBlcm1pc3Npb25zKGNvdXJzZUlkKS50aGVuKGNvdXJzZVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmdW5jKGNvdXJzZVBlcm1pc3Npb25zKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVtYW5kQ291cnNlUGVybWlzc2lvbnNJZihjb25kaXRpb246IGJvb2xlYW4sIGNvdXJzZUlkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jOiAoY291cnNlUGVybWlzc2lvbnM6IElDb3Vyc2VQZXJtaXNzaW9ucykgPT4gYm9vbGVhbik6IFNlY3VyaXR5U2VydmljZSB7XHJcbiAgICAgICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldENvdXJzZVBlcm1pc3Npb25zKGNvdXJzZUlkKS50aGVuKGNvdXJzZVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZnVuYyhjb3Vyc2VQZXJtaXNzaW9ucykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcndhcmRUb0FjY2Vzc0RlbmllZE9yUmVkaXJlY3RMb2dPbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbWFuZFF1aXpQZXJtaXNzaW9ucyhxdWl6SWQ6IHN0cmluZywgZnVuYzogKHF1aXpQZXJtaXNzaW9uczogSVF1aXpQZXJtaXNzaW9ucykgPT4gYm9vbGVhbik6IFNlY3VyaXR5U2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtYW5kUXVpelBlcm1pc3Npb25zSWYodHJ1ZSwgcXVpeklkLCBmdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVtYW5kUXVpelBlcm1pc3Npb25zSWYoY29uZGl0aW9uOiBib29sZWFuLCBxdWl6SWQ6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jOiAocXVpelBlcm1pc3Npb25zOiBJUXVpelBlcm1pc3Npb25zKSA9PiBib29sZWFuKTogU2VjdXJpdHlTZXJ2aWNlIHtcclxuICAgICAgICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0UXVpelBlcm1pc3Npb25zKHF1aXpJZCkudGhlbihxdWl6UGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmdW5jKHF1aXpQZXJtaXNzaW9ucykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcndhcmRUb0FjY2Vzc0RlbmllZE9yUmVkaXJlY3RMb2dPbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbWFuZE5ld3NQZXJtaXNzaW9ucyhuZXdzSWQ6IHN0cmluZywgZnVuYzogKG5ld3NQZXJtaXNzaW9uczogSU5ld3NQZXJtaXNzaW9ucykgPT4gYm9vbGVhbik6IFNlY3VyaXR5U2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtYW5kTWF0ZXJpYWxQZXJtaXNzaW9uc0lmKHRydWUsIG5ld3NJZCwgZnVuYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbWFuZE5ld3NQZXJtaXNzaW9uc0lmKGNvbmRpdGlvbjogYm9vbGVhbiwgbmV3c0lkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYzogKG5ld3NQZXJtaXNzaW9uczogSU5ld3NQZXJtaXNzaW9ucykgPT4gYm9vbGVhbik6IFNlY3VyaXR5U2VydmljZSB7XHJcbiAgICAgICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldE5ld3NQZXJtaXNzaW9ucyhuZXdzSWQpLnRoZW4obmV3c1Blcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZnVuYyhuZXdzUGVybWlzc2lvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3J3YXJkVG9BY2Nlc3NEZW5pZWRPclJlZGlyZWN0TG9nT24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZW1hbmRMZWFybmluZ1BhdGhQZXJtaXNzaW9ucyhsZWFybmluZ1BhdGhJZDogc3RyaW5nLCBmdW5jOiAobGVhcm5pbmdQYXRoUGVybWlzc2lvbnM6IElMZWFybmluZ1BhdGhQZXJtaXNzaW9ucykgPT4gYm9vbGVhbik6IFNlY3VyaXR5U2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtYW5kTGVhcm5pbmdQYXRoUGVybWlzc2lvbnNJZih0cnVlLCBsZWFybmluZ1BhdGhJZCwgZnVuYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbWFuZExlYXJuaW5nUGF0aFBlcm1pc3Npb25zSWYoY29uZGl0aW9uOiBib29sZWFuLCBsZWFybmluZ1BhdGhJZDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYzogKGxlYXJuaW5nUGF0aFBlcm1pc3Npb25zOiBJTGVhcm5pbmdQYXRoUGVybWlzc2lvbnMpID0+IGJvb2xlYW4pOiBTZWN1cml0eVNlcnZpY2Uge1xyXG4gICAgICAgIGlmIChjb25kaXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRMZWFybmluZ1BhdGhQZXJtaXNzaW9ucyhsZWFybmluZ1BhdGhJZCkudGhlbihsZWFybmluZ1BhdGhQZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZ1bmMobGVhcm5pbmdQYXRoUGVybWlzc2lvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3J3YXJkVG9BY2Nlc3NEZW5pZWRPclJlZGlyZWN0TG9nT24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZW1hbmRVc2VyQnVzaW5lc3NSb2xlKGJ1c2luZXNzUm9sZTogc3RyaW5nKTogU2VjdXJpdHlTZXJ2aWNlIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyQnVzaW5lc3NSb2xlKCkudGhlbigocm9sZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChidXNpbmVzc1JvbGUgIT09IHJvbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9yd2FyZFRvQWNjZXNzRGVuaWVkT3JSZWRpcmVjdExvZ09uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvcndhcmRUb0FjY2Vzc0RlbmllZE9yUmVkaXJlY3RMb2dPbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRoTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5mb3J3YXJkVG9BY2Nlc3NEZW5pZWQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmF1dGhNYW5hZ2VyLmhhc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5lcmFzZVRva2VuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LnJlZGlyZWN0VG9Mb2dPbihSZWRpcmVjdFJlYXNvbi5BQ0NFU1NfREVOSUVEKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLmxvZ09mZigpO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLmVyYXNlVG9rZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5hdXRoUmVkaXJlY3QucmVkaXJlY3RUb0xvZ09uKFJlZGlyZWN0UmVhc29uLlRPS0VOX0VYUElSRUQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgU3NvRXJyb3JzIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTUVSQ0FET19JTlZBTElEX1RPS0VOX1NJR05BVFVSRTogc3RyaW5nID0gXCJtZXJjYWRvOmludmFsaWRfdG9rZW5fc2lnbmF0dXJlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE1FUkNBRE9fSU5WQUxJRF9UT0tFTjogc3RyaW5nID0gXCJtZXJjYWRvOmludmFsaWRfdG9rZW5cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTUVSQ0FET19DT01QQU5ZX05PVF9GT1VORDogc3RyaW5nID0gXCJtZXJjYWRvOmNvbXBhbnlfbm90X2ZvdW5kXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBCVVNJTkVTU19VTklUX1JFUVVJUkVEOiBzdHJpbmcgPSBcImVycm9yOmJ1c2luZXNzX3VuaXRfcmVxdWlyZWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgRlVMTF9OQU1FX1JFUVVJUkVEOiBzdHJpbmcgPSBcImVycm9yOmZ1bGxfbmFtZV9yZXF1aXJlZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBFTUFJTF9SRVFVSVJFRDogc3RyaW5nID0gXCJlcnJvcjplbWFpbF9yZXF1aXJlZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBFTUFJTF9EVVBMSUNBVEVEOiBzdHJpbmcgPSBcImVycm9yLnVzZXIuZHVwbGljYXRlLmVtYWlsXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEZSRUVfUExBTl9JU19GVUxMOiBzdHJpbmcgPSBcImVycm9yOmZyZWUucGxhbi5mdWxsXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNFTEZfUkVHSVNUUkFUSU9OX0RJU0FCTEVEID0gXCJlcnJvcjpzZWxmX3JlZ2lzdHJhdGlvbl9kaXNhYmxlZFwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgTE9HT05fTk9UX0FDVElWRSA9IFwiZXJyb3I6bG9nb25fbm90X2FjdGl2ZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBVU0VSX05PVF9BQ1RJVkUgPSBcImVycm9yOnVzZXJfbm90X2FjdGl2ZVwiO1xyXG59IiwiZXhwb3J0IGVudW0gU3NvUmVhc29uVHlwZSB7XHJcbiAgICBBVVRIRU5USUNBVElPTixcclxuICAgIFNUQVJUX1RSSUFMXHJcbn0iLCJleHBvcnQgaW50ZXJmYWNlIElQZXJtaXNzaW9uIHtcclxuICAgIGlkPzogbnVtYmVyO1xyXG4gICAgdmVyc2lvbj86IG51bWJlcjtcclxuICAgIHR5cGU/OiBzdHJpbmc7XHJcbiAgICBuYW1lPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWxsVXNlcnNQZXJtaXNzaW9ucyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIFZJRVdfTUFURVJJQUw6IG51bWJlciA9IDIwMTtcclxuICAgIHB1YmxpYyBzdGF0aWMgRE9XTkxPQURfTUFURVJJQUw6IG51bWJlciA9IDIwNDtcclxuICAgIHB1YmxpYyBzdGF0aWMgVklFV19DT1VSU0U6IG51bWJlciA9IDIxMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgVklFV19RVUlaOiBudW1iZXIgPSAyMjE7XHJcbiAgICBwdWJsaWMgc3RhdGljIFZJRVdfUExBWUxJU1Q6IG51bWJlciA9IDIzMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgVklFV19MRUFSTklOR19QQVRIOiBudW1iZXIgPSAyNTA7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBQRVJNSVNTSU9OU19JRFM6IEFycmF5PG51bWJlcj4gPSBbXHJcbiAgICAgICAgQWxsVXNlcnNQZXJtaXNzaW9ucy5WSUVXX01BVEVSSUFMLFxyXG4gICAgICAgIEFsbFVzZXJzUGVybWlzc2lvbnMuRE9XTkxPQURfTUFURVJJQUwsXHJcbiAgICAgICAgQWxsVXNlcnNQZXJtaXNzaW9ucy5WSUVXX0NPVVJTRSxcclxuICAgICAgICBBbGxVc2Vyc1Blcm1pc3Npb25zLlZJRVdfUVVJWixcclxuICAgICAgICBBbGxVc2Vyc1Blcm1pc3Npb25zLlZJRVdfUExBWUxJU1QsXHJcbiAgICAgICAgQWxsVXNlcnNQZXJtaXNzaW9ucy5WSUVXX0xFQVJOSU5HX1BBVEhdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWxsR3JvdXBzUGVybWlzc2lvbnMge1xyXG4gICAgcHVibGljIHN0YXRpYyBTWVNURU1fQ09ORklHVVJBVElPTl9FRElUOiBudW1iZXIgPSA3MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgU1lTVEVNX1NUT1JBR0VfUExBQ0VTX0VESVQ6IG51bWJlciA9IDcyO1xyXG4gICAgcHVibGljIHN0YXRpYyBTWVNURU1fVklFV19TRUNVUklUWV9MT0c6IG51bWJlciA9IDE1MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgU1lTVEVNX1ZJRVdfU1lTVEVNX0xPRzogbnVtYmVyID0gMTUxO1xyXG4gICAgcHVibGljIHN0YXRpYyBTWVNURU1fTUFOQUdFX0NST05fSk9CUzogbnVtYmVyID0gMTU1O1xyXG4gICAgcHVibGljIHN0YXRpYyBTWVNURU1fTUFOQUdFX0FOWV9CVTogbnVtYmVyID0gMTgwO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgTlVMTF9CVV9PTkxZX1NZU1RFTV9QRVJNSVNTSU9OU19JRFM6IEFycmF5PG51bWJlcj4gPSBbXHJcbiAgICAgICAgQWxsR3JvdXBzUGVybWlzc2lvbnMuU1lTVEVNX0NPTkZJR1VSQVRJT05fRURJVCxcclxuICAgICAgICBBbGxHcm91cHNQZXJtaXNzaW9ucy5TWVNURU1fU1RPUkFHRV9QTEFDRVNfRURJVCxcclxuICAgICAgICBBbGxHcm91cHNQZXJtaXNzaW9ucy5TWVNURU1fVklFV19TRUNVUklUWV9MT0csXHJcbiAgICAgICAgQWxsR3JvdXBzUGVybWlzc2lvbnMuU1lTVEVNX1ZJRVdfU1lTVEVNX0xPRyxcclxuICAgICAgICBBbGxHcm91cHNQZXJtaXNzaW9ucy5TWVNURU1fTUFOQUdFX0NST05fSk9CUyxcclxuICAgICAgICBBbGxHcm91cHNQZXJtaXNzaW9ucy5TWVNURU1fTUFOQUdFX0FOWV9CVVxyXG4gICAgXTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJvbGVzU3BlY2lmaWNQZXJtaXNzaW9ucyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNZU1RFTV9NWV9BTkFMWVRJQ1NfVklFVzogbnVtYmVyID0gMTAxO1xyXG4gICAgcHVibGljIHN0YXRpYyBTWVNURU1fQ09VUlNFU19ESVNDVVNTSU9OU19BQ0NFU1M6IG51bWJlciA9IDExNDtcclxuICAgIHB1YmxpYyBzdGF0aWMgU1lTVEVNX0FTU0VTU01FTlRfU0NPUkU6IG51bWJlciA9IDE3NDtcclxuICAgIHB1YmxpYyBzdGF0aWMgU1lTVEVNX0FOWV9MRUFSTklOR19PQkpFQ1RfTUFOQUdFOiBudW1iZXIgPSAxNzE7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBsZWFybmVyU3BlY2lmaWNQZXJtaXNzaW9uczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGluc3RydWN0b3JTcGVjaWZpY1Blcm1pc3Npb25zOiBudW1iZXJbXSA9IFtcclxuICAgICAgICBSb2xlc1NwZWNpZmljUGVybWlzc2lvbnMuU1lTVEVNX01ZX0FOQUxZVElDU19WSUVXLFxyXG4gICAgICAgIFJvbGVzU3BlY2lmaWNQZXJtaXNzaW9ucy5TWVNURU1fQ09VUlNFU19ESVNDVVNTSU9OU19BQ0NFU1MsXHJcbiAgICAgICAgUm9sZXNTcGVjaWZpY1Blcm1pc3Npb25zLlNZU1RFTV9BU1NFU1NNRU5UX1NDT1JFXHJcbiAgICBdO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgYXR0ZW5kZWVNYW5hZ2VyU3BlY2lmaWNQZXJtaXNzaW9uczogbnVtYmVyW10gPSBbXHJcbiAgICAgICAgUm9sZXNTcGVjaWZpY1Blcm1pc3Npb25zLlNZU1RFTV9NWV9BTkFMWVRJQ1NfVklFVyxcclxuICAgICAgICBSb2xlc1NwZWNpZmljUGVybWlzc2lvbnMuU1lTVEVNX0NPVVJTRVNfRElTQ1VTU0lPTlNfQUNDRVNTXHJcbiAgICBdO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgYXV0aG9yU3BlY2lmaWNQZXJtaXNzaW9uczogbnVtYmVyW10gPSBbXHJcbiAgICAgICAgUm9sZXNTcGVjaWZpY1Blcm1pc3Npb25zLlNZU1RFTV9NWV9BTkFMWVRJQ1NfVklFVyxcclxuICAgICAgICBSb2xlc1NwZWNpZmljUGVybWlzc2lvbnMuU1lTVEVNX0FOWV9MRUFSTklOR19PQkpFQ1RfTUFOQUdFXHJcbiAgICBdO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgYWRtaW5pc3RyYXRvclNwZWNpZmljUGVybWlzc2lvbnM6IG51bWJlcltdID0gW1xyXG4gICAgICAgIFJvbGVzU3BlY2lmaWNQZXJtaXNzaW9ucy5TWVNURU1fTVlfQU5BTFlUSUNTX1ZJRVdcclxuICAgIF07XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFNlY3VyZWRPYmplY3RUeXBlIHtcclxuICAgIHB1YmxpYyBrZXk6IG51bWJlcjtcclxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBNQVRFUklBTCA9IG5ldyBTZWN1cmVkT2JqZWN0VHlwZSgxLCAnbWF0ZXJpYWwnKTtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ09VUlNFID0gbmV3IFNlY3VyZWRPYmplY3RUeXBlKDIsICdjb3Vyc2UnKTtcclxuICAgIHB1YmxpYyBzdGF0aWMgUVVJWiA9IG5ldyBTZWN1cmVkT2JqZWN0VHlwZSgzLCAncXVpeicpO1xyXG4gICAgcHVibGljIHN0YXRpYyBQTEFZTElTVCA9IG5ldyBTZWN1cmVkT2JqZWN0VHlwZSg0LCAncGxheWxpc3QnKTtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkVXUyA9IG5ldyBTZWN1cmVkT2JqZWN0VHlwZSg1LCAnbmV3cycpO1xyXG4gICAgcHVibGljIHN0YXRpYyBMRUFSTklOR19QQVRIID0gbmV3IFNlY3VyZWRPYmplY3RUeXBlKDYsICdsZWFybmluZ19wYXRoJyk7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBST0RVQ1QgPSBuZXcgU2VjdXJlZE9iamVjdFR5cGUoNywgJ3Byb2R1Y3QnKTtcclxuICAgIHB1YmxpYyBzdGF0aWMgQkFER0UgPSBuZXcgU2VjdXJlZE9iamVjdFR5cGUoOCwgJ2JhZGdlJyk7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioa2V5OiBudW1iZXIsIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1NldHRpbmdzU2VydmljZX0gZnJvbSBcIi4vU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbUNvbW1vblNldHRpbmdzfSBmcm9tIFwiLi9tb2RlbHMvSVN5c3RlbUNvbW1vblNldHRpbmdzXCI7XHJcbmltcG9ydCB7SVN5c3RlbUxvY2FsZX0gZnJvbSBcIi4vbW9kZWxzL0lTeXN0ZW1Mb2NhbGVcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7U2VhcmNoQ29udHJvbEhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvU2VhcmNoQ29udHJvbEhlbHBlclwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtTeXN0ZW1TZXR0aW5nc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9TeXN0ZW1TZXR0aW5nc1JvdXRlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbW1vblNldHRpbmdzQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInNldHRpbmdzLkNvbW1vblNldHRpbmdzQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzZXR0aW5nczogSVN5c3RlbUNvbW1vblNldHRpbmdzID0ge307XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBhdmFpbGFibGVMb2NhbGVzOiBBcnJheTxJU3lzdGVtTG9jYWxlPjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBTZXR0aW5nc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBTeXN0ZW1TZXR0aW5nc1JvdXRlci5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNldHRpbmdzQXBpOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uc0FwaTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHN5c3RlbVNldHRpbmdzUm91dGVyOiBTeXN0ZW1TZXR0aW5nc1JvdXRlcikge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fQ09NTU9OX1NFVFRJTkdTX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkdlbmVyYWwgc3lzdGVtIHNldHRpbmdzXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgIHBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFNldHRpbmdzKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkQXZhaWxhYmxlTG9jYWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0FwaS5nZXRTeXN0ZW1Db21tb25TZXR0aW5ncygpLnRoZW4ocCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShwLCB0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NBcGkudXBkYXRlKHRoaXMuc2V0dGluZ3MpLnRoZW4oXHJcbiAgICAgICAgICAgICAgICByID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkociwgdGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3Ioci5kYXRhLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRBdmFpbGFibGVMb2NhbGVzKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NBcGkuZ2V0QXZhaWxhYmxlTG9jYWxlcygpLnRoZW4obG9jYWxlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTG9jYWxlcyA9IGxvY2FsZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1NldHRpbmdzU2VydmljZX0gZnJvbSBcIi4vU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29tbW9uU2V0dGluZ3NDb250cm9sbGVyfSBmcm9tIFwiLi9Db21tb25TZXR0aW5nc0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtTdG9yYWdlUGxhY2VzUmVnaXN0cnlDb250cm9sbGVyfSBmcm9tIFwiLi9TdG9yYWdlUGxhY2VzUmVnaXN0cnlDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7U3RvcmFnZVBsYWNlRWRpdENvbnRyb2xsZXJ9IGZyb20gXCIuL1N0b3JhZ2VQbGFjZUVkaXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7U3lzdGVtU2V0dGluZ3NDb250cm9sbGVyfSBmcm9tIFwiLi9TeXN0ZW1TZXR0aW5nc0NvbnRyb2xsZXJcIjtcclxuXHJcbmltcG9ydCB7U2VjdXJpdHlNb2R1bGV9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eU1vZHVsZVwiO1xyXG5pbXBvcnQge1VybHNNb2R1bGV9IGZyb20gXCIuLi91cmxzL1VybHNNb2R1bGVcIjtcclxuaW1wb3J0IHtTeXN0ZW1CcmFuZGluZ0NvbnRyb2xsZXJ9IGZyb20gXCIuL1N5c3RlbUJyYW5kaW5nQ29udHJvbGxlclwiO1xyXG5cclxuZXhwb3J0IHZhciBTZXR0aW5nc01vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgICAgIC5tb2R1bGUoXCJzZXR0aW5nc1wiLCBbXHJcbiAgICAgICAgICAgIFNlY3VyaXR5TW9kdWxlLm5hbWUsXHJcbiAgICAgICAgICAgIFVybHNNb2R1bGUubmFtZVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgLnNlcnZpY2UoU2V0dGluZ3NTZXJ2aWNlLk5BTUUsIFNldHRpbmdzU2VydmljZSlcclxuICAgICAgICAuY29udHJvbGxlcihDb21tb25TZXR0aW5nc0NvbnRyb2xsZXIuTkFNRSwgQ29tbW9uU2V0dGluZ3NDb250cm9sbGVyKVxyXG4gICAgICAgIC5jb250cm9sbGVyKFN0b3JhZ2VQbGFjZXNSZWdpc3RyeUNvbnRyb2xsZXIuTkFNRSwgU3RvcmFnZVBsYWNlc1JlZ2lzdHJ5Q29udHJvbGxlcilcclxuICAgICAgICAuY29udHJvbGxlcihTdG9yYWdlUGxhY2VFZGl0Q29udHJvbGxlci5OQU1FLCBTdG9yYWdlUGxhY2VFZGl0Q29udHJvbGxlcilcclxuICAgICAgICAuY29udHJvbGxlcihTeXN0ZW1TZXR0aW5nc0NvbnRyb2xsZXIuTkFNRSwgU3lzdGVtU2V0dGluZ3NDb250cm9sbGVyKVxyXG4gICAgICAgIC5jb250cm9sbGVyKFN5c3RlbUJyYW5kaW5nQ29udHJvbGxlci5OQU1FLCBTeXN0ZW1CcmFuZGluZ0NvbnRyb2xsZXIpO1xyXG5cclxuIiwiaW1wb3J0IHtJU3lzdGVtQ29tbW9uU2V0dGluZ3N9IGZyb20gXCIuL21vZGVscy9JU3lzdGVtQ29tbW9uU2V0dGluZ3NcIjtcclxuaW1wb3J0IHtJU3lzdGVtTG9jYWxlfSBmcm9tIFwiLi9tb2RlbHMvSVN5c3RlbUxvY2FsZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN0b3JhZ2VQbGFjZX0gZnJvbSBcIi4vbW9kZWxzL0lTdG9yYWdlUGxhY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUHJvcGVydHl9IGZyb20gXCIuL21vZGVscy9JU3lzdGVtUHJvcGVydHlcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IElRU2VydmljZSA9IGFuZ3VsYXIuSVFTZXJ2aWNlO1xyXG5pbXBvcnQgSVRpbWVvdXRTZXJ2aWNlID0gYW5ndWxhci5JVGltZW91dFNlcnZpY2U7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi91c2Vycy9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtJTWVudUl0ZW1TZXR0aW5nc30gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvbW9kZWxzL0lNZW51SXRlbVNldHRpbmdzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwic2V0dGluZ3MuU2V0dGluZ3NTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgUkVTRVRfQ1VSUkVOVF9EQVRFX1RJTUVPVVRfTVMgPSA1ICogMTAwMDtcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnREYXRlOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRxXCIsXHJcbiAgICAgICAgXCIkdGltZW91dFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTWF0ZXJpYWxzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBJUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBJVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN5c3RlbUNvbW1vblNldHRpbmdzKCk6IGFuZ3VsYXIuSVByb21pc2U8SVN5c3RlbUNvbW1vblNldHRpbmdzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zZXR0aW5ncy9jb21tb25cIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEF2YWlsYWJsZUxvY2FsZXMoKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU3lzdGVtTG9jYWxlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcIi9hcGkvc2V0dGluZ3MvY29tbW9uL2xvY2FsZXNcIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1ZXN0aW9uc1RhZ3MocXVpeklkPzogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBsZXQgdXJsID0gKHF1aXpJZCA9PSBudWxsIHx8IHF1aXpJZCA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgID8gXCIvYXBpL3NldHRpbmdzL2NvbW1vbi9xdWVzdGlvbnMvdGFnc1wiXHJcbiAgICAgICAgICAgIDogXCIvYXBpL3NldHRpbmdzL2NvbW1vbi9xdWVzdGlvbnMvdGFncz9xdWl6SWQ9OnF1aXpJZFwiO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKHVybCkucGFyYW0oXCI6cXVpeklkXCIsIHF1aXpJZCkuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJc1F1aXpGaWxlc1VwbG9hZHNFbmFibGVkKCk6IGFuZ3VsYXIuSVByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zZXR0aW5ncy9jb21tb24vcXVpenplcy9pc0ZpbGVVcGxvYWRzRW5hYmxlZFwiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoc2V0dGluZ3M6IElTeXN0ZW1Db21tb25TZXR0aW5ncyk6IGFuZ3VsYXIuSVByb21pc2U8SVN5c3RlbUNvbW1vblNldHRpbmdzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3NldHRpbmdzL2NvbW1vblwiKSwgc2V0dGluZ3MpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN0b3JhZ2VQbGFjZXMoKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU3RvcmFnZVBsYWNlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zZXR0aW5ncy9zdG9yYWdlUGxhY2VzXCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdG9yYWdlUGxhY2UoaWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVN0b3JhZ2VQbGFjZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9zZXR0aW5ncy9zdG9yYWdlUGxhY2VzLzppZFwiKS5wYXJhbShcIjppZFwiLCBpZCkuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVTdG9yYWdlUGxhY2Uoc3RvcmFnZVBsYWNlOiBJU3RvcmFnZVBsYWNlKTogYW5ndWxhci5JUHJvbWlzZTxJU3RvcmFnZVBsYWNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zZXR0aW5ncy9zdG9yYWdlUGxhY2VzXCIpLCBzdG9yYWdlUGxhY2UpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVN0b3JhZ2VQbGFjZShzdG9yYWdlUGxhY2U6IElTdG9yYWdlUGxhY2UpOiBhbmd1bGFyLklQcm9taXNlPElTdG9yYWdlUGxhY2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvc2V0dGluZ3Mvc3RvcmFnZVBsYWNlc1wiKSwgc3RvcmFnZVBsYWNlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTdG9yYWdlUGxhY2VBY3RpdmUoaWQ6IG51bWJlciwgaXNBY3RpdmU6IGJvb2xlYW4pOiBhbmd1bGFyLklQcm9taXNlPElTdG9yYWdlUGxhY2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvc2V0dGluZ3Mvc3RvcmFnZVBsYWNlcy86aWQvc2V0QWN0aXZlLzppc0FjdGl2ZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgaWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppc0FjdGl2ZVwiLCBpc0FjdGl2ZSkuc2VydmljZSgpLCB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEN1cnJlbnREYXRlKCk6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnREYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zZXR0aW5ncy9jb21tb24vY3VycmVudERhdGVcIikpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudERhdGUgPSA8bnVtYmVyPiByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnREYXRlID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBTZXR0aW5nc1NlcnZpY2UuUkVTRVRfQ1VSUkVOVF9EQVRFX1RJTUVPVVRfTVNcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEud2hlbih0aGlzLmN1cnJlbnREYXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEhvbWVwYWdlKCk6IGFuZ3VsYXIuSVByb21pc2U8SVN5c3RlbVByb3BlcnR5PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3NldHRpbmdzL2NvbW1vbi9ob21lcGFnZVwiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TWVudUl0ZW1zQXZhaWxhYmlsaXR5U2V0dGluZ3MoKTogYW5ndWxhci5JUHJvbWlzZTxJTWVudUl0ZW1TZXR0aW5ncz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zZXR0aW5ncy9jb21tb24vdmlzaWJpbGl0eS9tZW51SXRlbXNcIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiA8SU1lbnVJdGVtU2V0dGluZ3M+cmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNZW51SXRlbXNWaXNpYmlsaXR5U2V0dGluZygpOiBhbmd1bGFyLklQcm9taXNlPElNZW51SXRlbVNldHRpbmdzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2J1c2luZXNzVW5pdHMvdmlzaWJpbGl0eS9tZW51SXRlbXMvZm9yQ3VycmVudFVzZXJcIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiA8SU1lbnVJdGVtU2V0dGluZ3M+cmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCVVpvb21WaXNpYmlsaXR5U2V0dGluZyhidXNpbmVzc1VuaXRJZHM6IEFycmF5PG51bWJlcj4pOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9idXNpbmVzc1VuaXRzL3pvb20vdmlzaWJpbGl0eVwiKSxcclxuICAgICAgICAgICAge3BhcmFtczoge2J1c2luZXNzVW5pdElkczogYnVzaW5lc3NVbml0SWRzfX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFsbFN5c3RlbVByb3BlcnRpZXMoKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU3lzdGVtUHJvcGVydHk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zZXR0aW5ncy9zeXN0ZW0vYWxsXCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTeXN0ZW1Qcm9wZXJ0eShzeXN0ZW1Qcm9wZXJ0eUlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElTeXN0ZW1Qcm9wZXJ0eT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9zZXR0aW5ncy9zeXN0ZW0vOmlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBzeXN0ZW1Qcm9wZXJ0eUlkKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0U3lzdGVtUHJvcGVydHkoc3lzdGVtUHJvcGVydHlJZDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxJU3lzdGVtUHJvcGVydHk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvc2V0dGluZ3Mvc3lzdGVtLzppZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgc3lzdGVtUHJvcGVydHlJZCkuc2VydmljZSgpLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENhbGVuZGFyVmlzaWJpbGl0eSgpOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvc2V0dGluZ3Mvc3lzdGVtL2NhbGVuZGFyVmlzaWJpbGl0eVwiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRSZWRpcmVjdExvZ29VUkwoKTogYW5ndWxhci5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvc2V0dGluZ3Mvc3lzdGVtL3JlZGlyZWN0TG9nb1VybFwiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IDxzdHJpbmc+cmVzdWx0LmRhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFJlZGlyZWN0SGVscFVSTCgpOiBhbmd1bGFyLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zZXR0aW5ncy9zeXN0ZW0vcmVkaXJlY3RIZWxwVXJsXCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gPHN0cmluZz5yZXN1bHQuZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVkaXJlY3RBYm91dFVzVVJMKCk6IGFuZ3VsYXIuSVByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3NldHRpbmdzL3N5c3RlbS9yZWRpcmVjdEFib3V0VXNVcmxcIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiA8c3RyaW5nPnJlc3VsdC5kYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0NoZWNrUGFzc3dvcmQoKTogYW5ndWxhci5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3NldHRpbmdzL3N5c3RlbS9jaGVjay9wYXNzd29yZFwiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IDxib29sZWFuPnJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0lTdG9yYWdlUGxhY2V9IGZyb20gXCIuL21vZGVscy9JU3RvcmFnZVBsYWNlXCI7XHJcbmltcG9ydCB7U3RvcmFnZVR5cGVFbnVtfSBmcm9tIFwiLi9tb2RlbHMvU3RvcmFnZVR5cGVFbnVtXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi9TZXR0aW5nc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtTeXN0ZW1TZXR0aW5nc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9TeXN0ZW1TZXR0aW5nc1JvdXRlclwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi8uLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLy4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi8uLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3RvcmFnZVBsYWNlRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJzZXR0aW5ncy5TdG9yYWdlUGxhY2VFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgc3RvcmFnZVBsYWNlSWQ6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgc3RvcmFnZVBsYWNlOiBJU3RvcmFnZVBsYWNlID0ge1xyXG4gICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgIHZlcnNpb246IG51bGwsXHJcbiAgICAgICAgbmFtZTogXCJcIixcclxuICAgICAgICBleHRlcm5hbFVybDogbnVsbCxcclxuICAgICAgICBjb25uZWN0aW9uU3RyaW5nOiBudWxsLFxyXG4gICAgICAgIGxvZ2luOiBudWxsLFxyXG4gICAgICAgIHBhc3N3b3JkOiBudWxsLFxyXG4gICAgICAgIHR5cGU6IG51bGwsXHJcbiAgICAgICAgY2FwYWNpdHk6IG51bGwsXHJcbiAgICAgICAgdXNlZFNwYWNlOiBudWxsLFxyXG4gICAgICAgIHNlY3VyZWQ6IHRydWUsXHJcbiAgICAgICAgYWN0aXZlOiB0cnVlLFxyXG4gICAgICAgIGJ1c2luZXNzVW5pdElkOiBudWxsXHJcbiAgICB9O1xyXG4gICAgcHVibGljIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nO1xyXG4gICAgcHVibGljIGVycm9yOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBhdmFpbGFibGVTdG9yYWdlVHlwZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFN5c3RlbVNldHRpbmdzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNldHRpbmdzQXBpOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgc3lzdGVtU2V0dGluZ3NSb3V0ZXI6IFN5c3RlbVNldHRpbmdzUm91dGVyKSB7XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU1RPUkFHRV9QTEFDRVNfTUVOVV9LRVkpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVBsYWNlSWQgPSB0aGlzLiRyb3V0ZVBhcmFtc1tcInN0b3JhZ2VQbGFjZUlkXCJdO1xyXG4gICAgICAgIGlmICh0aGlzLnN0b3JhZ2VQbGFjZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiTmV3IHN0b3JhZ2VcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzID0gdXNlci5hbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHMgaW4gU3RvcmFnZVR5cGVFbnVtKSB7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihzKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVTdG9yYWdlVHlwZXMucHVzaChzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0FwaS5nZXRTdG9yYWdlUGxhY2UodGhpcy5zdG9yYWdlUGxhY2VJZCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihyZXN1bHQubmFtZSkudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2VQbGFjZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtUGFzc3dvcmQgPSByZXN1bHQucGFzc3dvcmQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBwcm9taXNlID0gKHRoaXMuc3RvcmFnZVBsYWNlSWQpXHJcbiAgICAgICAgICAgID8gdGhpcy5zZXR0aW5nc0FwaS51cGRhdGVTdG9yYWdlUGxhY2UodGhpcy5zdG9yYWdlUGxhY2UpXHJcbiAgICAgICAgICAgIDogdGhpcy5zZXR0aW5nc0FwaS5jcmVhdGVTdG9yYWdlUGxhY2UodGhpcy5zdG9yYWdlUGxhY2UpO1xyXG4gICAgICAgIHByb21pc2UudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBcIlN0b3JhZ2Ug4oCYXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm5hbWUgK1xyXG4gICAgICAgICAgICAgICAgXCLigJkgaGFzIGJlZW4gc2F2ZWRcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZVBsYWNlSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnN5c3RlbVNldHRpbmdzUm91dGVyLnN0b3JhZ2VQbGFjZUVkaXRVcmwocmVzdWx0LmlkKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWFjdGl2YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NBcGkuc2V0U3RvcmFnZVBsYWNlQWN0aXZlKHRoaXMuc3RvcmFnZVBsYWNlLmlkLCBmYWxzZSlcclxuICAgICAgICAgICAgLnRoZW4oc3RvcmFnZVBsYWNlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLnN5c3RlbVNldHRpbmdzUm91dGVyLnN0b3JhZ2VQbGFjZXNJbmRleFVybCgpKTtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlIOKAmFwiICtcclxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUGxhY2UubmFtZSArXHJcbiAgICAgICAgICAgICAgICAgICAgXCLigJkgaGFzIGJlZW4gZGVhY3RpdmF0ZWRcIik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQnVzaW5lc3NVbml0Q2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLiR0aW1lb3V0KGEgPT4gdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWUsIDApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SVN0b3JhZ2VQbGFjZX0gZnJvbSBcIi4vbW9kZWxzL0lTdG9yYWdlUGxhY2VcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuL1NldHRpbmdzU2VydmljZVwiO1xyXG5pbXBvcnQge1N5c3RlbVNldHRpbmdzUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL1N5c3RlbVNldHRpbmdzUm91dGVyXCI7XHJcbmltcG9ydCB7R3JpZE1vZGVsLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi8uLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLy4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi8uLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLy4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge0NoZWNrQnVzaW5lc3NVbml0SWR9IGZyb20gXCIuLi91dGlscy9DaGVja0J1c2luZXNzVW5pdElkXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHl9IGZyb20gXCIuLi9yZWZlcmVuY2UvbW9kZWxzL0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5XCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlVXRpbHN9IGZyb20gXCIuLi9yZWZlcmVuY2UvUmVmZXJlbmNlVXRpbHNcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdG9yYWdlUGxhY2VzUmVnaXN0cnlDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwic2V0dGluZ3MuU3RvcmFnZVBsYWNlc1JlZ2lzdHJ5Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzdG9yYWdlUGxhY2VzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElTdG9yYWdlUGxhY2U+O1xyXG5cclxuICAgIHByaXZhdGUgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcjogSVVzZXJJbmZvO1xyXG4gICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzOiBBcnJheTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT47XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBTZXR0aW5nc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBTeXN0ZW1TZXR0aW5nc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUmVmZXJlbmNlVXRpbHMuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNldHRpbmdzQXBpOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgc3lzdGVtU2V0dGluZ3NSb3V0ZXI6IFN5c3RlbVNldHRpbmdzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhBcGk6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcmVmZXJlbmNlVXRpbHM6IFJlZmVyZW5jZVV0aWxzKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TVE9SQUdFX1BMQUNFU19NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJTdG9yYWdlc1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgcGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5wcmVzZXJ2ZUhlYWRlcigpXHJcbiAgICAgICAgICAgICAgICAuYWRkQWN0aW9uTGlua0lmKHN5c3RlbVBlcm1pc3Npb25zLmVkaXRTdG9yYWdlUGxhY2VzLFxyXG4gICAgICAgICAgICAgICAgICAgICcrJm5ic3A7TmV3JyxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbVNldHRpbmdzUm91dGVyLnN0b3JhZ2VQbGFjZUNyZWF0ZVVybCgpKVxyXG4gICAgICAgICAgICAgICAgLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RvcmFnZVBsYWNlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElTdG9yYWdlUGxhY2U+KCRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zZXR0aW5ncy9zdG9yYWdlUGxhY2VzXCIpXHJcbiAgICAgICAgKSk7XHJcblxyXG4gICAgICAgIGF1dGhBcGkuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdXNlcjtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRzRGVhY3RpdmF0ZUZvclNlbGVjdG9yKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHRoaXMuYnVzaW5lc3NVbml0cyA9IDxBcnJheTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT4+IHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVXNlckFjY2Vzc2VkVG9CdXNpbmVzc1VuaXQoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0cy5zb21lKGlkID0+IGlkID09IGJ1c2luZXNzVW5pdElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldElzQWN0aXZlR3JpZFN0eWxlKGlzQWN0aXZlOiBib29sZWFuKTogYW55IHtcclxuICAgICAgICByZXR1cm4gaXNBY3RpdmVcclxuICAgICAgICAgICAgPyB7fVxyXG4gICAgICAgICAgICA6IHtcImNvbG9yXCI6IFwiIzk5OTk5OVwifTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udmVydElzQWN0aXZlKGlzQWN0aXZlOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gaXNBY3RpdmUgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaXNBY3RpdmUgPyAnWWVzJyA6ICdObydcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlKGluZGV4OiBudW1iZXIsIHN0b3JhZ2VQbGFjZUlkOiBudW1iZXIpIHtcclxuICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMuc2V0dGluZ3NBcGkuc2V0U3RvcmFnZVBsYWNlQWN0aXZlKHN0b3JhZ2VQbGFjZUlkLCB0cnVlKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4oc3RvcmFnZVBsYWNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlUGxhY2VzR3JpZE1vZGVsLmVudHJpZXNbaW5kZXhdID0gc3RvcmFnZVBsYWNlO1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgXCJTdG9yYWdlIOKAmFwiICtcclxuICAgICAgICAgICAgICAgIHN0b3JhZ2VQbGFjZS5uYW1lICtcclxuICAgICAgICAgICAgICAgIFwi4oCZIGhhcyBiZWVuIGFjdGl2YXRlZFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzVXNlclNhbWVCdXNpbmVzc1VuaXRzKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQgPT0gbnVsbCAmJiB0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBDaGVja0J1c2luZXNzVW5pdElkLmhhc1VzZXJTYW1lQnVzaW5lc3NVbml0cyh0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHMsIGJ1c2luZXNzVW5pdElkKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCdXNpbmVzc1VuaXRCeUlkKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgaWYgKGJ1c2luZXNzVW5pdElkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5idXNpbmVzc1VuaXRzLmZpbHRlcihidSA9PiBidS5pZCA9PSBidXNpbmVzc1VuaXRJZClbMF0ubmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtCcmFuZGluZ0VkaXRNb2RlfSBmcm9tIFwiLi4vYnJhbmRpbmcvQnJhbmRpbmdFZGl0TW9kZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN5c3RlbUJyYW5kaW5nQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInNldHRpbmdzLlN5c3RlbUJyYW5kaW5nQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBicmFuZGluZ01vZGU6IHN0cmluZyA9IEJyYW5kaW5nRWRpdE1vZGVbQnJhbmRpbmdFZGl0TW9kZS5USEVNRVNdO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TWVNURU1fU0VUVElOR19LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiQnJhbmRpbmdcIikudXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEJyYW5kaW5nTW9kZShicmFuZGluZ01vZGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuYnJhbmRpbmdNb2RlID0gYnJhbmRpbmdNb2RlO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5cclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1NldHRpbmdzU2VydmljZX0gZnJvbSBcIi4vU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge01hdGVyaWFsc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTWF0ZXJpYWxzUm91dGVyXCI7XHJcbmltcG9ydCB7U3lzdGVtU2V0dGluZ3NSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1N5c3RlbVNldHRpbmdzUm91dGVyXCI7XHJcblxyXG5pbXBvcnQge0lTeXN0ZW1Db21tb25TZXR0aW5nc30gZnJvbSBcIi4vbW9kZWxzL0lTeXN0ZW1Db21tb25TZXR0aW5nc1wiO1xyXG5pbXBvcnQge0lTeXN0ZW1Mb2NhbGV9IGZyb20gXCIuL21vZGVscy9JU3lzdGVtTG9jYWxlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7SVN5c3RlbVByb3BlcnR5fSBmcm9tIFwiLi9tb2RlbHMvSVN5c3RlbVByb3BlcnR5XCI7XHJcbmltcG9ydCB7SVBlcm1pc3Npb25XaXRoVXNlcnNBbmRHcm91cHN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwc1wiO1xyXG5pbXBvcnQge0hvbWVwYWdlVHlwZUVudW19IGZyb20gXCIuL21vZGVscy9Ib21lcGFnZVR5cGVFbnVtXCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTGVhcm5pbmdQYXRoc1JvdXRlclwiO1xyXG5pbXBvcnQge0ZpbmFuY2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9GaW5hbmNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0hvbWVSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0hvbWVSb3V0ZXJcIjtcclxuaW1wb3J0IHtTeXN0ZW1Qcm9wZXJ0eUtleX0gZnJvbSBcIi4vbW9kZWxzL1N5c3RlbVByb3BlcnR5S2V5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3lzdGVtU2V0dGluZ3NDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwic2V0dGluZ3MuU3lzdGVtU2V0dGluZ3NDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIGFsbFNldHRpbmdzOiBBcnJheTxJU3lzdGVtUHJvcGVydHk+O1xyXG4gICAgcHVibGljIGN1cnJlbnRTZXR0aW5nczogSVN5c3RlbVByb3BlcnR5O1xyXG4gICAgcHVibGljIHNldHRpbmdzOiBJU3lzdGVtQ29tbW9uU2V0dGluZ3MgPSB7fTtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGF2YWlsYWJsZUxvY2FsZXM6IEFycmF5PElTeXN0ZW1Mb2NhbGU+O1xyXG4gICAgcHVibGljIHBlcm1pc3Npb25zV2l0aFVzZXJzQW5kR3JvdXBzOiBBcnJheTxJUGVybWlzc2lvbldpdGhVc2Vyc0FuZEdyb3Vwcz4gPSBbXTtcclxuICAgIHB1YmxpYyB1cmxzOiBhbnk7XHJcbiAgICBwdWJsaWMgc2V0dGluZ3NNYXA6IE1hcDxzdHJpbmcsIEFycmF5PElTeXN0ZW1Qcm9wZXJ0eT4+O1xyXG4gICAgcHVibGljIHNldHRpbmdzTWFwS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgIHB1YmxpYyBhY3RpdmVHcm91cDogc3RyaW5nID0gJ0FMTCc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBQZXJtaXNzaW9uc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZXR0aW5nc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTWF0ZXJpYWxzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU3lzdGVtU2V0dGluZ3NSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgRmluYW5jZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBIb21lUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2V0dGluZ3NBcGk6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb3Vyc2VzUm91dGVyOiBDb3Vyc2VzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHN5c3RlbVNldHRpbmdzUm91dGVyOiBTeXN0ZW1TZXR0aW5nc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBsZWFybmluZ1BhdGhSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgZmluYW5jZVJvdXRlcjogRmluYW5jZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgaG9tZVJvdXRlcjogSG9tZVJvdXRlcikge1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX1NZU1RFTV9TRVRUSU5HX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJBcHBsaWNhdGlvbiBzZXR0aW5nc1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgcGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudXJscyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogSG9tZXBhZ2VUeXBlRW51bVtIb21lcGFnZVR5cGVFbnVtLkxFQVJOSU5HX1BBVEhTXSxcclxuICAgICAgICAgICAgICAgIHVybDogdGhpcy5sZWFybmluZ1BhdGhSb3V0ZXIuaW5kZXhVcmwoKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBIb21lcGFnZVR5cGVFbnVtW0hvbWVwYWdlVHlwZUVudW0uQ09VUlNFU10sXHJcbiAgICAgICAgICAgICAgICB1cmw6IHRoaXMuY291cnNlc1JvdXRlci5pbmRleFVybCgpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IEhvbWVwYWdlVHlwZUVudW1bSG9tZXBhZ2VUeXBlRW51bS5NQVRFUklBTFNdLFxyXG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLm1hdGVyaWFsc1JvdXRlci5pbmRleFVybCgpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IEhvbWVwYWdlVHlwZUVudW1bSG9tZXBhZ2VUeXBlRW51bS5DQVRBTE9HXSxcclxuICAgICAgICAgICAgICAgIHVybDogdGhpcy5maW5hbmNlUm91dGVyLnByb2R1Y3RzQ2F0YWxvZ1VybCgpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IEhvbWVwYWdlVHlwZUVudW1bSG9tZXBhZ2VUeXBlRW51bS5IT01FXSxcclxuICAgICAgICAgICAgICAgIHVybDogdGhpcy5ob21lUm91dGVyLmluZGV4VXJsKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc01hcCA9IHRoaXMubG9hZEFsbFNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRBbGxTZXR0aW5ncygpOiBNYXA8c3RyaW5nLCBBcnJheTxJU3lzdGVtUHJvcGVydHk+PiB7XHJcbiAgICAgICAgbGV0IHNldHRpbmdzTWFwOiBNYXA8c3RyaW5nLCBBcnJheTxJU3lzdGVtUHJvcGVydHk+PiA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTxJU3lzdGVtUHJvcGVydHk+PigpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NBcGkuZ2V0QWxsU3lzdGVtUHJvcGVydGllcygpLnRoZW4ociA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsU2V0dGluZ3MgPSByO1xyXG4gICAgICAgICAgICBsZXQgZ3JvdXBzID0gSlNPTi5wYXJzZShTeXN0ZW1Qcm9wZXJ0eUtleS5ncm91cHNKc29uKTtcclxuICAgICAgICAgICAgci5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoc2V0dGluZ3NNYXAuaGFzKGdyb3Vwc1tlbGVtZW50LmlkLnRvU3RyaW5nKCldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzTWFwLmdldChncm91cHNbZWxlbWVudC5pZC50b1N0cmluZygpXSkucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzTWFwLnNldChncm91cHNbZWxlbWVudC5pZC50b1N0cmluZygpXSwgW10pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NNYXBLZXlzLnB1c2goZ3JvdXBzW2VsZW1lbnQuaWQudG9TdHJpbmcoKV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzTWFwLmdldChncm91cHNbZWxlbWVudC5pZC50b1N0cmluZygpXSkucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHNldHRpbmdzTWFwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlU2V0dGluZyhpZDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0FwaS5zZXRTeXN0ZW1Qcm9wZXJ0eShpZCwgdmFsdWUpLnRoZW4ociA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiU2V0dGluZ3MgaGF2ZSBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2V0dGluZ3MgPSByO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChyID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3Ioci5kYXRhLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0FwaS5nZXRTeXN0ZW1Db21tb25TZXR0aW5ncygpLnRoZW4ocCA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShwLCB0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlQWN0aXZlKGdyb3VwOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKGdyb3VwKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0FMTCc6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlR3JvdXAgPSAnQUxMJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ1NZU1RFTSc6e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVHcm91cCA9ICdTWVNURU0nO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAgJ0NPVVJTRSc6e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVHcm91cCA9ICdDT1VSU0UnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnTUlTQyc6e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVHcm91cCA9ICdNSVNDJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ0VYUElSQVRJT04nOntcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlR3JvdXAgPSAnRVhQSVJBVElPTic7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdSRVBPUlRTJzp7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUdyb3VwID0gJ1JFUE9SVFMnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnQlVTSU5FU1NfVU5JVFMnOntcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlR3JvdXAgPSAnQlVTSU5FU1NfVU5JVFMnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnUkVESVJFQ1QnOntcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlR3JvdXAgPSAnUkVESVJFQ1QnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGVudW0gSG9tZXBhZ2VUeXBlRW51bSB7XHJcbiAgICBMRUFSTklOR19QQVRIUyxcclxuICAgIENPVVJTRVMsXHJcbiAgICBNQVRFUklBTFMsXHJcbiAgICBDQVRBTE9HLFxyXG4gICAgSE9NRVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIFN0b3JhZ2VUeXBlRW51bSB7XHJcbiAgICBMT0NBTCxcclxuICAgIFNNQixcclxuICAgIEFaVVJFXHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFN5c3RlbVByb3BlcnR5S2V5IHtcclxuICAgIHB1YmxpYyBzdGF0aWMgREVGQVVMVF9MT0NBTEU6IG51bWJlciA9IDE7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNVUFBPUlRfRU1BSUw6IG51bWJlciA9IDI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNZU1RFTV9MT0dTX0xFVkVMOiBudW1iZXIgPSAzO1xyXG4gICAgcHVibGljIHN0YXRpYyBTWVNURU1fU1RPUkFHRV9GSUxFX0RVUExJQ0FURTogbnVtYmVyID0gNDtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ09VUlNFX1NFUlRJRklDQVRFX0xBU1RfTlVNQkVSOiBudW1iZXIgPSA1O1xyXG4gICAgcHVibGljIHN0YXRpYyBOT1RJRklDQVRJT05TX0NPVVJTRV9TRUNUSU9OX0NPTVBMRVRJT05fRU5BQkxFRDogbnVtYmVyID0gNjtcclxuICAgIHB1YmxpYyBzdGF0aWMgU1lTVEVNX1BVUkNIQVNFU19PUkRFUl9EQVRFX0ZST006IG51bWJlciA9IDc7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNZU1RFTV9FTkFCTEVfU1RPUkFHRV9TTkFQU0hPVFM6IG51bWJlciA9IDg7XHJcbiAgICBwdWJsaWMgc3RhdGljIExPR09fSE9NRV9QQUdFOiBudW1iZXIgPSA5O1xyXG4gICAgcHVibGljIHN0YXRpYyBMRUFSTklOR19QQVRIX0NFUlRJRklDQVRFX0xBU1RfTlVNQkVSOiBudW1iZXIgPSAxMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgTFJTX0xBU1RfUFJPQ0VTU0VEX0NPVVJTRV9BQ1RJT05fTE9HX0lEOiBudW1iZXIgPSAxMTtcclxuICAgIHB1YmxpYyBzdGF0aWMgTFJTX0xBU1RfUFJPQ0VTU0VEX0xFQVJOSU5HX1BBVEhfQUNUSU9OX0xPR19JRDogbnVtYmVyID0gMTI7XHJcbiAgICBwdWJsaWMgc3RhdGljIExSU19MQVNUX1BST0NFU1NFRF9VU0VSX0NSRURJVF9JRDogbnVtYmVyID0gMTM7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFMTE9XRURfRU1BSUxTOiBudW1iZXIgPSAyMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgUVVFU1RJT05TX1RBR1M6IG51bWJlciA9IDMwO1xyXG4gICAgcHVibGljIHN0YXRpYyBFTkFCTEVfRklMRV9VUExPQURTX1NIT1JUX0FOU1dFUjogbnVtYmVyID0gMzE7XHJcbiAgICBwdWJsaWMgc3RhdGljIERBWVNfQ0VSVElGSUNBVEVfRVhQSVJBVElPTl9OT1RJRklDQVRJT046IG51bWJlciA9IDQwO1xyXG4gICAgcHVibGljIHN0YXRpYyBDRVJUSUZJQ0FURV9FWFBJUkFUSU9OX05PVElGSUNBVElPTl9MQVNUX0RBVEU6IG51bWJlciA9IDQxO1xyXG4gICAgcHVibGljIHN0YXRpYyBQVVJDSEFTRV9FWFBJUkFUSU9OX05PVElGSUNBVElPTl9MQVNUX0RBVEU6IG51bWJlciA9IDQyO1xyXG4gICAgcHVibGljIHN0YXRpYyBEQVlTX0NPVVJTRV9TVEFUVVNfRVZFTlRfTk9USUZJQ0FUSU9OOiBudW1iZXIgPSA0MztcclxuICAgIHB1YmxpYyBzdGF0aWMgQ09VUlNFX0lOQ09NUExFVElPTl9OT1RJRklDQVRJT05fTEFTVF9EQVRFOiBudW1iZXIgPSA0NDtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ09VUlNFX0VYUElSQVRJT05fTk9USUZJQ0FUSU9OX0xBU1RfREFURTogbnVtYmVyID0gNDU7XHJcbiAgICBwdWJsaWMgc3RhdGljIENPVVJTRV9TVEFSVF9OT1RJRklDQVRJT05fTEFTVF9EQVRFOiBudW1iZXIgPSA0NjtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ09VUlNFX0FQUFJPVkFMX0VOUk9MTE1FTlRfU0VBVF9MQVNUX0RBVEU6IG51bWJlciA9IDQ3O1xyXG4gICAgcHVibGljIHN0YXRpYyBQT1dFUl9CSV9FTUJFRERFRF9SRVBPUlRfREVGQVVMVDogbnVtYmVyID0gNTA7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBPV0VSX0JJX0VNQkVEREVEX1JFUE9SVF9HUk9VUF9QUk9HUkVTUzogbnVtYmVyID0gNTE7XHJcbiAgICBwdWJsaWMgc3RhdGljIEJVU0lORVNTX1VOSVRfTEVWRUxfQ0FUQUxPRzogbnVtYmVyID0gNTI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEVNQkVEREVEX1JFUE9SVFM6IG51bWJlciA9IDUzO1xyXG4gICAgcHVibGljIHN0YXRpYyBFTUFJTF9MT0dPX0lNQUdFX0lEOiBudW1iZXIgPSA1NDtcclxuICAgIHB1YmxpYyBzdGF0aWMgVVNFUlNfQUNUSVZJVFlfUkVQT1JUX0xBU1RfREFURTogbnVtYmVyID0gNTU7XHJcbiAgICBwdWJsaWMgc3RhdGljIENBTEVOREFSX1ZJU0lCSUxJVFk6IG51bWJlciA9IDU2O1xyXG4gICAgcHVibGljIHN0YXRpYyBCVVNJTkVTU19VTklUX0xFVkVMX0NPVVJTRVM6IG51bWJlciA9IDU3O1xyXG4gICAgcHVibGljIHN0YXRpYyBCVVNJTkVTU19VTklUX0xFVkVMX0xFQVJOSU5HX1BBVEhTOiBudW1iZXIgPSA1ODtcclxuICAgIHB1YmxpYyBzdGF0aWMgQlVTSU5FU1NfVU5JVF9MRVZFTF9ESVNDVVNTSU9OX0JPQVJEOiBudW1iZXIgPSA1OTtcclxuICAgIHB1YmxpYyBzdGF0aWMgQlVTSU5FU1NfVU5JVF9MRVZFTF9NQVRFUklBTFM6IG51bWJlciA9IDYwO1xyXG4gICAgcHVibGljIHN0YXRpYyBCVVNJTkVTU19VTklUX0xFVkVMX1FVSVpaRVM6IG51bWJlciA9IDYxO1xyXG4gICAgcHVibGljIHN0YXRpYyBSRURJUkVDVF9VUkxfTE9HTzogbnVtYmVyID0gNjI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFJFRElSRUNUX1VSTF9IRUxQX1BBR0U6IG51bWJlciA9IDYzO1xyXG4gICAgcHVibGljIHN0YXRpYyBSRURJUkVDVF9BQk9VVF9VU19QQUdFOiBudW1iZXIgPSA2NDtcclxuICAgIHB1YmxpYyBzdGF0aWMgQUxMT1dfR0xPQkFMX1VTRVJTX1RPX1NFTEZfUkVQT1JUX1RSQUlOSU5HU19DUkVESVRTOiBudW1iZXIgPSA3MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ0VSVElGSUNBVEVfRVhQSVJBVElPTl9SRU1JTkRFUl9MQVNUX0RBVEU6IG51bWJlciA9IDEwMDA7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFDVElWSVRZX0xBU1RfUFJPQ0VTU0VEX0NPVVJTRV9BQ1RJT05fTE9HX0lEOiBudW1iZXIgPSAxMDAxO1xyXG4gICAgcHVibGljIHN0YXRpYyBBQ1RJVklUWV9DT1VSU0VfQUNUSU9OX0xPR1NfQkFUQ0hfU0laRTogbnVtYmVyID0gMTAwMjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdyb3Vwc0pzb246IHN0cmluZyA9XHJcbiAgICAgICAgYHtcclxuICAgICAgICAgICAgXCIxXCIgOiBcIlNZU1RFTVwiLFxyXG4gICAgICAgICAgICBcIjJcIiA6IFwiU1lTVEVNXCIsXHJcbiAgICAgICAgICAgIFwiM1wiIDogXCJTWVNURU1cIixcclxuICAgICAgICAgICAgXCI0XCIgOiBcIlNZU1RFTVwiLFxyXG4gICAgICAgICAgICBcIjVcIiA6IFwiQ09VUlNFXCIsXHJcbiAgICAgICAgICAgIFwiNlwiIDogXCJDT1VSU0VcIixcclxuICAgICAgICAgICAgXCI3XCIgOiBcIlNZU1RFTVwiLFxyXG4gICAgICAgICAgICBcIjhcIiA6IFwiU1lTVEVNXCIsXHJcbiAgICAgICAgICAgIFwiOVwiIDogXCJTWVNURU1cIixcclxuICAgICAgICAgICAgXCIxMFwiIDogXCJNSVNDXCIsXHJcbiAgICAgICAgICAgIFwiMTFcIiA6IFwiTUlTQ1wiLFxyXG4gICAgICAgICAgICBcIjEyXCIgOiBcIk1JU0NcIixcclxuICAgICAgICAgICAgXCIxM1wiIDogXCJNSVNDXCIsXHJcbiAgICAgICAgICAgIFwiMjBcIiA6IFwiTUlTQ1wiLFxyXG4gICAgICAgICAgICBcIjMwXCIgOiBcIk1JU0NcIixcclxuICAgICAgICAgICAgXCIzMVwiIDogXCJNSVNDXCIsXHJcbiAgICAgICAgICAgIFwiNDBcIiA6IFwiRVhQSVJBVElPTlwiLFxyXG4gICAgICAgICAgICBcIjQxXCIgOiBcIkVYUElSQVRJT05cIixcclxuICAgICAgICAgICAgXCI0MlwiIDogXCJFWFBJUkFUSU9OXCIsXHJcbiAgICAgICAgICAgIFwiNDNcIiA6IFwiQ09VUlNFXCIsXHJcbiAgICAgICAgICAgIFwiNDRcIiA6IFwiQ09VUlNFXCIsXHJcbiAgICAgICAgICAgIFwiNDVcIiA6IFwiRVhQSVJBVElPTlwiLFxyXG4gICAgICAgICAgICBcIjQ2XCIgOiBcIkNPVVJTRVwiLFxyXG4gICAgICAgICAgICBcIjQ3XCIgOiBcIkNPVVJTRVwiLFxyXG4gICAgICAgICAgICBcIjUwXCIgOiBcIlJFUE9SVFNcIixcclxuICAgICAgICAgICAgXCI1MVwiIDogXCJSRVBPUlRTXCIsXHJcbiAgICAgICAgICAgIFwiNTJcIiA6IFwiQlVTSU5FU1NfVU5JVFNcIixcclxuICAgICAgICAgICAgXCI1M1wiIDogXCJSRVBPUlRTXCIsXHJcbiAgICAgICAgICAgIFwiNTRcIiA6IFwiU1lTVEVNXCIsXHJcbiAgICAgICAgICAgIFwiNTVcIiA6IFwiUkVQT1JUU1wiLFxyXG4gICAgICAgICAgICBcIjU2XCIgOiBcIlNZU1RFTVwiLFxyXG4gICAgICAgICAgICBcIjU3XCIgOiBcIkJVU0lORVNTX1VOSVRTXCIsXHJcbiAgICAgICAgICAgIFwiNThcIiA6IFwiQlVTSU5FU1NfVU5JVFNcIixcclxuICAgICAgICAgICAgXCI1OVwiIDogXCJCVVNJTkVTU19VTklUU1wiLFxyXG4gICAgICAgICAgICBcIjYwXCIgOiBcIkJVU0lORVNTX1VOSVRTXCIsXHJcbiAgICAgICAgICAgIFwiNjFcIiA6IFwiQlVTSU5FU1NfVU5JVFNcIixcclxuICAgICAgICAgICAgXCI2MlwiIDogXCJSRURJUkVDVFwiLFxyXG4gICAgICAgICAgICBcIjYzXCIgOiBcIlJFRElSRUNUXCIsXHJcbiAgICAgICAgICAgIFwiNjRcIiA6IFwiUkVESVJFQ1RcIixcclxuICAgICAgICAgICAgXCI3MFwiIDogXCJTWVNURU1cIixcclxuICAgICAgICAgICAgXCIxMDAwXCIgOiBcIkVYUElSQVRJT05cIixcclxuICAgICAgICAgICAgXCIxMDAxXCIgOiBcIkdBTUlGSUNBVElPTlwiLFxyXG4gICAgICAgICAgICBcIjEwMDJcIiA6IFwiR0FNSUZJQ0FUSU9OXCJcclxuICAgIH1gO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgam9ic0dyb3VwSnNvbjogc3RyaW5nID1cclxuICAgICAgICBge1xyXG4gICAgICAgICAgICBcImFjdGl2aXR5QmFkZ2VBc3NpZ25Kb2JfYXNzaWduQWN0aXZpdHlCYWRnZXNcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiR0FNSUZJQ0FUSU9OXCIsXHJcbiAgICAgICAgICAgIFwiY2xlYXJQZW5kaW5nUGF5bWVudEpvYl9jbGVhclBlbmRpbmdQYXltZW50XCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJDT1VSU0VcIixcclxuICAgICAgICAgICAgXCJjb3JlQmlsbGluZ1Byb2Nlc3NpbmdKb2JfYWRkQnVzaW5lc3NVbml0c0FuZFVzZXJzXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkJVU0lORVNTX1VOSVRTXCIsXHJcbiAgICAgICAgICAgIFwiY29yZUJpbGxpbmdQcm9jZXNzaW5nSm9iX2NoZWNrQXBwcm92aW5nT2ZOZXdTdWJzY3JpcHRpb25zXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJCVVNJTkVTU19VTklUU1wiLFxyXG4gICAgICAgICAgICBcImNvcmVCaWxsaW5nUHJvY2Vzc2luZ0pvYl91cGRhdGVTdGF0dXNlc09mQmlsbGluZ3NcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiQlVTSU5FU1NfVU5JVFNcIixcclxuICAgICAgICAgICAgXCJjb3Vyc2VFbnJvbGxtZW50QXBwcm92YWxSZW1pbmRlckpvYl9jcmVhdGVDb3Vyc2VFbnJvbGxtZW50QXBwcm92YWxSZW1pbmRlclwiICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkNPVVJTRVwiLFxyXG4gICAgICAgICAgICBcImNyZWF0ZUNlcnRpZmljYXRlRXhwaXJhdGlvbk5vdGlmaWNhdGlvbnNKb2JfY3JlYXRlQ2VydGlmaWNhdGVFeHBpcmF0aW9uTm90aWZpY2F0aW9uc1wiICAgICAgICAgICAgICA6IFwiQ0VSVElGSUNBVEVcIixcclxuICAgICAgICAgICAgXCJjcmVhdGVDZXJ0aWZpY2F0ZUV4cGlyYXRpb25Ob3RpZmljYXRpb25zSm9iX2NyZWF0ZUNlcnRpZmljYXRlRXhwaXJhdGlvblJlbWluZGVyTm90aWZpY2F0aW9uc1wiICAgICAgOiBcIkNFUlRJRklDQVRFXCIsXHJcbiAgICAgICAgICAgIFwic3RvcmFnZU9wZXJhdGlvbnNKb2JfdXNlckNlcnRpZmljYXRlc0ZpbGVDb250ZW50VG9TdG9yYWdlRmlsZVwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJDRVJUSUZJQ0FURVwiLFxyXG4gICAgICAgICAgICBcImNyZWF0ZUNvdXJzZVN0YXR1c05vdGlmaWNhdGlvbnNKb2JfY3JlYXRlQ291cnNlRXhwaXJhdGlvbk5vdGlmaWNhdGlvblwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiQ09VUlNFXCIsXHJcbiAgICAgICAgICAgIFwiY3JlYXRlQ291cnNlU3RhdHVzTm90aWZpY2F0aW9uc0pvYl9jcmVhdGVDb3Vyc2VFeHBpcmF0aW9uUmVtaW5kZXJcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJDT1VSU0VcIixcclxuICAgICAgICAgICAgXCJjcmVhdGVDb3Vyc2VTdGF0dXNOb3RpZmljYXRpb25zSm9iX2NyZWF0ZUNvdXJzZUluY29tcGxldGlvbk5vdGlmaWNhdGlvblwiICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkNPVVJTRVwiLFxyXG4gICAgICAgICAgICBcImNyZWF0ZUNvdXJzZVN0YXR1c05vdGlmaWNhdGlvbnNKb2JfY3JlYXRlQ291cnNlSW5jb21wbGV0aW9uUmVtaW5kZXJcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiQ09VUlNFXCIsXHJcbiAgICAgICAgICAgIFwiY3JlYXRlQ291cnNlU3RhdHVzTm90aWZpY2F0aW9uc0pvYl9jcmVhdGVDb3Vyc2VTdGFydE5vdGlmaWNhdGlvblwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJDT1VSU0VcIixcclxuICAgICAgICAgICAgXCJjcmVhdGVDb3Vyc2VTdGF0dXNOb3RpZmljYXRpb25zSm9iX2NyZWF0ZUNvdXJzZVN0YXJ0UmVtaW5kZXJcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkNPVVJTRVwiLFxyXG4gICAgICAgICAgICBcImNyZWF0ZVB1cmNoYXNlZE9yZGVyRXhwaXJhdGlvbk5vdGlmaWNhdGlvbnNKb2JfY3JlYXRlUHVyY2hhc2VkT3JkZXJFeHBpcmF0aW9uTm90aWZpY2F0aW9uc1wiICAgICAgICA6IFwiU1lTVEVNXCIsXHJcbiAgICAgICAgICAgIFwiZGVsZXRlTWF0ZXJpYWxzV2l0aG91dEZpbGVzSm9iX2RlbGV0ZU1hdGVyaWFsc1dpdGhvdXRGaWxlc1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJGSUxFXCIsXHJcbiAgICAgICAgICAgIFwiZnVsbFRleHRTZWFyY2hJbmRleEFjdGlvbk1lc3NhZ2VKb2JfdXBkYXRlSW5kZXhcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJTWVNURU1cIixcclxuICAgICAgICAgICAgXCJJTFRTZXNzaW9uc0ZpbmlzaGluZ0pvYl9maW5pc2hTZXNzaW9uc1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkNPVVJTRVwiLFxyXG4gICAgICAgICAgICBcIkxSU1N0YXRlbWVudHNTZW5kaW5nSm9iX3NlbmRcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiU1lTVEVNXCIsXHJcbiAgICAgICAgICAgIFwib3V0Z29pbmdFbWFpbFNlbmRpbmdKb2Jfc2VuZFBlbmRpbmdFbWFpbHNcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJTWVNURU1cIixcclxuICAgICAgICAgICAgXCJvdXRnb2luZ0VtYWlsU2VuZGluZ0pvYl9jbGVhck9sZEVtYWlsc1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlNZU1RFTVwiLFxyXG4gICAgICAgICAgICBcInF1aXpDb21wbGV0aW9uSm9iX2NoZWNrUXVpenplc0NvbXBsZXRpbmdcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiUVVJWlwiLFxyXG4gICAgICAgICAgICBcInNlbmRPdmVyU3Vic2NyaXB0aW9uUGxhblVzZXJzTGltaXROb3RpZmljYXRpb25Kb2Jfc2VuZE92ZXJTdWJzY3JpcHRpb25QbGFuVXNlcnNMaW1pdE5vdGlmaWNhdGlvblwiICA6IFwiQlVTSU5FU1NfVU5JVFNcIixcclxuICAgICAgICAgICAgXCJzdG9yYWdlT3BlcmF0aW9uc0pvYl9maWxlRHVyYXRpb25SZWNhbGN1bGF0aW9uXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkZJTEVcIixcclxuICAgICAgICAgICAgXCJzdG9yYWdlT3BlcmF0aW9uc0pvYl9maWxlUHJvY2Vzc2luZ0NvbXBsZXRpb25cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkZJTEVcIixcclxuICAgICAgICAgICAgXCJzdG9yYWdlT3BlcmF0aW9uc0pvYl9tZXJnZUZpbGVzQ2h1bmtzXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkZJTEVcIixcclxuICAgICAgICAgICAgXCJzdG9yYWdlT3BlcmF0aW9uc0pvYl9yZW1vdmVBYm9ydGVkRmlsZXNcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkZJTEVcIixcclxuICAgICAgICAgICAgXCJzdG9yYWdlT3BlcmF0aW9uc0pvYl9yZW1vdmVGaWxlc1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkZJTEVcIixcclxuICAgICAgICAgICAgXCJzdG9yYWdlT3BlcmF0aW9uc0pvYl9yZW1vdmVGaWxlc0NodW5rc1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkZJTEVcIixcclxuICAgICAgICAgICAgXCJzeXN0ZW1Mb2dzUmVtb3ZpbmdKb2JfcmVtb3ZlT2xkTG9nc1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlNZU1RFTVwiLFxyXG4gICAgICAgICAgICBcInVwZGF0ZUNvdXJzZVByb2dyZXNzU3RhdHVzSm9iX3VwZGF0ZUNvdXJzZVByb2dyZXNzU3RhdHVzQWZ0ZXJFeHBpcmF0aW9uRGF0ZVwiICAgICAgICAgICAgICAgICAgICAgICA6IFwiQ09VUlNFXCIsXHJcbiAgICAgICAgICAgIFwidXBkYXRlTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTdGF0dXNKb2JfdXBkYXRlTGVhcm5pbmdQYXRoUHJvZ3Jlc3NTdGF0dXNBZnRlckV4cGlyYXRpb25EYXRlXCIgICAgICAgICAgIDogXCJMRUFSTklOR19QQVRIXCIsXHJcbiAgICAgICAgICAgIFwidXBkYXRlUGVybWlzc2lvbnNGb3JQdXJjaGFzZWRQcm9kdWN0c0pvYl9yZW1vdmVFeHBpcmVkUGVybWlzc2lvbnNGb3JQcm9kdWN0c1wiICAgICAgICAgICAgICAgICAgICAgIDogXCJQUk9EVUNUXCIsXHJcbiAgICAgICAgICAgIFwidXBkYXRlUGVybWlzc2lvbnNGb3JQdXJjaGFzZWRQcm9kdWN0c0pvYl91cGRhdGVQZXJtaXNzaW9uc0ZvclByb2R1Y3RzXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJQUk9EVUNUXCIsXHJcbiAgICAgICAgICAgIFwidXNlZFN0b3JhZ2VDYXBhY2l0eUNhbGN1bGF0aW9uSm9iX3JlY2FsY3VsYXRlVXNlZENhcGFjaXR5XCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJTWVNURU1cIixcclxuICAgICAgICAgICAgXCJ1c2VyTm90aWZpY2F0aW9uc1NlbmRpbmdKb2Jfc2VuZFVzZXJOb3RpZmljYXRpb25zXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlNZU1RFTVwiLFxyXG4gICAgICAgICAgICBcInVzZXJzQWN0aXZpdHlSZXBvcnRKb2Jfc2VuZFVzZXJzQWN0aXZpdHlSZXBvcnRcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiU1lTVEVNXCIsXHJcbiAgICAgICAgICAgIFwiVklMVFNlc3Npb25TdGF0dXNVcGRhdGVKb2JfdXBkYXRlV2ViaW5hcnNcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJXRUJJTkFSXCIsXHJcbiAgICAgICAgICAgIFwid2ViaG9va1Byb2Nlc3NpbmdKb2Jfd2ViaG9va0hhbmRsZXJcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJTWVNURU1cIixcclxuICAgICAgICAgICAgXCJ1cGRhdGVBY3Rpdml0eUludGVydmFsc0pvYl91cGRhdGVBY3Rpdml0eUludGVydmFsc1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIkdBTUlGSUNBVElPTlwiXHJcbiAgICAgICAgfWA7XHJcbn1cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTbGlkZVRlbXBsYXRlfSBmcm9tIFwiLi9tb2RlbHMvSVNsaWRlVGVtcGxhdGVcIjtcclxuaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInNsaWRlcy5TbGlkZVNlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgXCJVcGxvYWRcIlxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBuZy5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBuZy5JUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTbGlkZVRlbXBsYXRlKGlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxJU2xpZGVUZW1wbGF0ZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9zbGlkZS86aWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVNsaWRlVGVtcGxhdGUoaWQ6IG51bWJlciwgc2xpZGVUZW1wbGF0ZTogSVNsaWRlVGVtcGxhdGUpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvc2xpZGUvOmlkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBpZCkuc2VydmljZSgpLCBzbGlkZVRlbXBsYXRlKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVTbGlkZVRlbXBsYXRlKHNsaWRlVGVtcGxhdGU6IElTbGlkZVRlbXBsYXRlKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9zbGlkZVwiKS5zZXJ2aWNlKCksIHNsaWRlVGVtcGxhdGUpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwbG9hZFNsaWRlVGVtcGxhdGUoc2xpZGVUZW1wbGF0ZUlkOiBudW1iZXIsIGZpbGU6IEZpbGUpOiBhbmd1bGFyLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiR1cGxvYWRlci51cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgIHVybDogYW5ndWxhci5jb3B5KHRoaXMudXJsLmJhc2UoXCIvYXBpL3NsaWRlLzppZC91cGxvYWRcIilcclxuICAgICAgICAgICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgc2xpZGVUZW1wbGF0ZUlkKSlcclxuICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QWN0aXZlU2xpZGVUZW1wbGF0ZShpZDogbnVtYmVyLCBpc0FjdGl2ZTogYm9vbGVhbik6IG5nLklQcm9taXNlPElTbGlkZVRlbXBsYXRlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3NsaWRlLzppZC86aXNBY3RpdmVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aXNBY3RpdmVcIiwgaXNBY3RpdmUpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIG51bGwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNsaWRlVGVtcGxhdGVzKGNvdXJzZUlkOiBudW1iZXIsIGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElTbGlkZVRlbXBsYXRlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS9zbGlkZS90ZW1wbGF0ZXMvY291cnNlLzpjb3Vyc2VJZD9idXNpbmVzc1VuaXRJZD06YnVzaW5lc3NVbml0SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6YnVzaW5lc3NVbml0SWRcIiwgYnVzaW5lc3NVbml0SWQgPyBidXNpbmVzc1VuaXRJZCA6IFwiXCIpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwbG9hZFNsaWRlVGVtcGxhdGVUaHVtYm5haWwoc2xpZGVUZW1wbGF0ZUlkOiBudW1iZXIsIGZpbGU6IEZpbGUpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgdXJsOiBhbmd1bGFyLmNvcHkodGhpcy51cmwuYmFzZShcIi9hcGkvc2xpZGUvOmlkL3VwbG9hZFRodW1ibmFpbFwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIHNsaWRlVGVtcGxhdGVJZCkpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICBmaWxlOiBmaWxlXHJcbiAgICAgICAgfSkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVTbGlkZVRlbXBsYXRlUmVnaXN0cnlCdW5kbGUoKTogYW5ndWxhci5JUHJvbWlzZTxJQnVuZGxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9zbGlkZS9idW5kbGVzL2NyZWF0ZUJ1bmRsZVwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTbGlkZVRlbXBsYXRlQnVuZGxlSWQoKTogYW5ndWxhci5JUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvc2xpZGUvYnVuZGxlcy9idW5kbGVJZFwiKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTbGlkZVRlbXBsYXRlQnVuZGxlRmlsZXMoYnVuZGxlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8QXJyYXk8bnVtYmVyPj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvc2xpZGUvYnVuZGxlcy86YnVuZGxlSWQvYnVuZGxlRmlsZXNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmJ1bmRsZUlkXCIsIGJ1bmRsZUlkKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtJQnVuZGxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZVwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuaW1wb3J0IElRU2VydmljZSA9IGFuZ3VsYXIuSVFTZXJ2aWNlO1xyXG5pbXBvcnQge0lCdW5kbGVGaWxlfSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZUZpbGVcIjtcclxuaW1wb3J0IHtJR3JpZE1vZGVsfSBmcm9tIFwiLi4vSUdyaWRNb2RlbFwiO1xyXG5pbXBvcnQge1NsaWRlVGVtcGxhdGVzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9TbGlkZVRlbXBsYXRlc1JvdXRlclwiO1xyXG5pbXBvcnQge1NsaWRlU2VydmljZX0gZnJvbSBcIi4vU2xpZGVTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGVzQnVuZGxlRWRpdENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJzbGlkZXMuU2xpZGVzQnVuZGxlRWRpdENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNJbml0aWFsaXplZDogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlU2xpZGVUZW1wbGF0ZUJ1bmRsZUZuOiAoKSA9PiBJUHJvbWlzZTxJQnVuZGxlPjtcclxuICAgIHB1YmxpYyBidW5kbGU6IElCdW5kbGU7XHJcbiAgICBwdWJsaWMgYnVuZGxlSWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBidW5kbGVGaWxlc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQnVuZGxlRmlsZT4gPSBudWxsO1xyXG4gICAgcHVibGljIGJ1bmRsZUZpbGVzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY3VycmVudFRvcEVkaXRQYWdlO1xyXG4gICAgcHVibGljIGNvbmZpcm1hdGlvbkRpYWxvZ01lc3NhZ2U6IHN0cmluZztcclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRzY29wZVwiLFxyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFNsaWRlVGVtcGxhdGVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU2xpZGVTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHJvdXRlUGFyYW1zOiBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBJUVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgc2xpZGVUZW1wbGF0ZXNSb3V0ZXI6IFNsaWRlVGVtcGxhdGVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHNsaWRlU2VydmljZTogU2xpZGVTZXJ2aWNlKSB7XHJcblxyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU0xJREVfVEVNUExBVEVfS0VZKTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9wRWRpdFBhZ2UgPSB0aGlzLnNsaWRlVGVtcGxhdGVzUm91dGVyLmJ1bmRsZVVybCgpO1xyXG4gICAgICAgIHRoaXMuc2xpZGVTZXJ2aWNlLmdldFNsaWRlVGVtcGxhdGVCdW5kbGVJZCgpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5idW5kbGVJZCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNyZWF0ZVNsaWRlVGVtcGxhdGVCdW5kbGVGbiA9IHRoaXMuY3JlYXRlU2xpZGVUZW1wbGF0ZUJ1bmRsZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlU2xpZGVUZW1wbGF0ZUJ1bmRsZSgpOiBJUHJvbWlzZTxJQnVuZGxlPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJ1bmRsZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlU2VydmljZS5jcmVhdGVTbGlkZVRlbXBsYXRlUmVnaXN0cnlCdW5kbGUoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYnVuZGxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGJ1bmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1bmRsZTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3Iuc3RvcmFnZS5ub3QuYXZhaWxhYmxlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJObyBhdmFpbGFibGUgc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEucmVqZWN0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHEucmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd1VwbG9hZEluc3RydWN0aW9ucygpOiB2b2lkIHtcclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiN1cGxvYWRJbnN0cnVjdGlvbnNEaWFsb2dcIikubW9kYWwoe1xyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q29uZmlybWF0aW9uRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI2RpYWxvZ01lc3NhZ2VcIikuaHRtbCh0aGlzLmNvbmZpcm1hdGlvbkRpYWxvZ01lc3NhZ2UpO1xyXG4gICAgICAgICQoXCIjY29uZmlybWF0aW9uRGlhbG9nXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb1VybCh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VUb3BFZGl0UGF0aCgpIHtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0VG9VcmwodGhpcy5jdXJyZW50VG9wRWRpdFBhZ2UpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTW9kZWx9IGZyb20gXCIuLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SUJ1bmRsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVcIjtcclxuaW1wb3J0IHtBdXRoTWFuYWdlcn0gZnJvbSBcIi4uL2F1dGhjb3JlL0F1dGhNYW5hZ2VyXCI7XHJcbmltcG9ydCB7U2xpZGVTZXJ2aWNlfSBmcm9tIFwiLi9TbGlkZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtCdW5kbGVTZXJ2aWNlfSBmcm9tIFwiLi4vYnVuZGxlcy9CdW5kbGVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlRGV0YWlsc1V0aWxzfSBmcm9tIFwiLi4vY291cnNlcy9Db3Vyc2VEZXRhaWxzVXRpbHNcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0h0dHBHcmlkSGVscGVyfSBmcm9tIFwiLi4vSUh0dHBHcmlkU2VydmljZVwiO1xyXG5pbXBvcnQge0lQcm9taXNlfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhfSBmcm9tIFwiLi4vY29tcG9uZW50cy9tb2RlbHMvSUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmljaFRleHRCaW5kQ29udHJvbGxlcn0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmljaHRleHQvUmljaFRleHRCaW5kRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7U2xpZGVUZW1wbGF0ZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1NsaWRlVGVtcGxhdGVzUm91dGVyXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvbW9kZWxzL0V2ZW50XCI7XHJcbmltcG9ydCB7SVNsaWRlVGVtcGxhdGV9IGZyb20gXCIuL21vZGVscy9JU2xpZGVUZW1wbGF0ZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJzbGlkZXMuU2xpZGVzQ29udHJvbGxlclwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBCVVNJTkVTU19VTklUX0lEX1BST1BFUlRZID0gXCJidXNpbmVzc1VuaXRJZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBlbnRpdHlWZXJzaW9uUHJvcGVydHkgPSBcInZlcnNpb25cIjtcclxuXHJcbiAgICBwdWJsaWMgc2xpZGVzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElTbGlkZVRlbXBsYXRlPjtcclxuXHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHByb3RlY3RlZCByZWZlcmVuY2VEZWZhdWx0VmFsdWVzOiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgcmVmZXJlbmNlRmlsdGVyOiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgcmVmZXJlbmNlQXNzb2NpYXRpb25GaWx0ZXJzOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc3lzdGVtQnVuZGxlOiBJQnVuZGxlO1xyXG4gICAgcHVibGljIHNsaWRlQnVuZGxlOiBJQnVuZGxlO1xyXG4gICAgcHVibGljIHNsaWRlVGVtcGxhdGVMb2FkQXRTdGFydEJ1bmRsZXNUZXh0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY3VycmVudFRvcEVkaXRQYWdlO1xyXG5cclxuICAgIHB1YmxpYyBkZWZhdWx0VGVtcGxhdGVzOiBBcnJheTxhbnk+ID0gW3twYXRoOiBcImRlZmF1bHRUZW1wbGF0ZVwiLCBuYW1lOiBcImRlZmF1bHQgdGVtcGxhdGVcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGF0aDogXCJkZWZhdWx0VGVtcGxhdGVXaXRoVGhyZWVDb2x1bW5zXCIsIG5hbWU6IFwiZGVmYXVsdCB0ZW1wbGF0ZSB3aXRoIDMgY29sdW1uc1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXRoOiBcImRlZmF1bHRUZW1wbGF0ZVdpdGhJbWFnZUxlZnRcIiwgbmFtZTogXCJkZWZhdWx0IHRlbXBsYXRlIHdpdGggaW1hZ2UgbGVmdFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXRoOiBcImRlZmF1bHRUZW1wbGF0ZVdpdGhJbWFnZVJpZ2h0XCIsIG5hbWU6IFwiZGVmYXVsdCB0ZW1wbGF0ZSB3aXRoIGltYWdlIHJpZ2h0XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhdGg6IFwiZGVmYXVsdFRlbXBsYXRlV2l0aEJpZ0ltYWdlTGVmdFwiLCBuYW1lOiBcImRlZmF1bHQgdGVtcGxhdGUgd2l0aCBiaWcgaW1hZ2UgbGVmdFwifV07XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTbGlkZVRlbXBsYXRlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEF1dGhNYW5hZ2VyLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQnVuZGxlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNsaWRlU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkICRodHRwOiBuZy5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgJHJvdXRlUGFyYW1zOiBuZy5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgc2xpZGVUZW1wbGF0ZXNSb3V0ZXI6IFNsaWRlVGVtcGxhdGVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVuZGxlU2VydmljZTogQnVuZGxlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgc2xpZGVTZXJ2aWNlOiBTbGlkZVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW55TGVhcm5pbmdPYmplY3QpO1xyXG5cclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX1NMSURFX1RFTVBMQVRFX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIodGhpcy5nZXRQYWdlSGVhZGVyTmFtZSgpKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9wRWRpdFBhZ2UgPSB0aGlzLnNsaWRlVGVtcGxhdGVzUm91dGVyLmluZGV4VXJsKCk7XHJcbiAgICAgICAgdGhpcy5zbGlkZXNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJU2xpZGVUZW1wbGF0ZT4odGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvc2xpZGVcIikuc2VydmljZSgpKSk7XHJcbiAgICAgICAgdGhpcy5zbGlkZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zbGlkZXNHcmlkTW9kZWwuZmlsdGVyLnNwbGl0UGFyYW0gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4ocCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBwO1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmFkZEFjdGlvbkxpbmtJZihwLm1hbmFnZUFueUxlYXJuaW5nT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgJysgTmV3JywgdGhpcy5nZXRTbGlkZUVkaXRVcmwoMCkpXHJcbiAgICAgICAgICAgICAgICAucHJlc2VydmVIZWFkZXIoKVxyXG4gICAgICAgICAgICAgICAgLnVwZGF0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmJ1bmRsZVNlcnZpY2UuZ2V0U3lzdGVtQnVuZGxlKClcclxuICAgICAgICAgICAgLnRoZW4oYiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbUJ1bmRsZSA9IGI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5c3RlbUJ1bmRsZSA9IHtpZDogMX07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZ2V0QnVuZGxlSWRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNsaWRlRWRpdFVybChpZDogYW55KTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZVRlbXBsYXRlc1JvdXRlci5lZGl0VXJsKGlkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGlzRWRpdEFsbG93ZWQoZW50aXR5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMubWFuYWdlQW55TGVhcm5pbmdPYmplY3RcclxuICAgICAgICAgICAgJiYgdGhpcy5nZXRFbnRpdHlJc0FjdGl2ZVByb3BlcnR5KGVudGl0eSlcclxuICAgICAgICAgICAgJiYgKCFlbnRpdHkuaGFzT3duUHJvcGVydHkoU2xpZGVzQ29udHJvbGxlci5CVVNJTkVTU19VTklUX0lEX1BST1BFUlRZKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoTWFuYWdlci5nZXRDdXJyZW50VXNlcigpICYmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkuYWxsQnVzaW5lc3NVbml0c1xyXG4gICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuYXV0aE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKS5idXNpbmVzc1VuaXRzLmluZGV4T2YoZW50aXR5W1NsaWRlc0NvbnRyb2xsZXIuQlVTSU5FU1NfVU5JVF9JRF9QUk9QRVJUWV0pICE9IC0xXHJcbiAgICAgICAgICAgICAgICApKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGdldEVudGl0eUlzQWN0aXZlUHJvcGVydHkoZW50aXR5OiBJU2xpZGVUZW1wbGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBlbnRpdHkuaXNBY3RpdmU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBhY3RpdmF0ZUVudGl0eShpbmRleDogbnVtYmVyLCBzbGlkZTogSVNsaWRlVGVtcGxhdGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNsaWRlU2VydmljZS5zZXRBY3RpdmVTbGlkZVRlbXBsYXRlKHNsaWRlLmlkLCB0cnVlKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzR3JpZE1vZGVsLmVudHJpZXNbaW5kZXhdID0gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGdldFBhZ2VIZWFkZXJOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiU2xpZGUgVGVtcGxhdGVzXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFjdGl2ZUxpbmtTdGF0ZShlbnRpdHkpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eUlzQWN0aXZlUHJvcGVydHkoZW50aXR5KSA/IFwiWWVzXCIgOiBcIk5vXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldElzQWN0aXZlR3JpZFN0eWxlKGlzQWN0aXZlOiBib29sZWFuKTogYW55IHtcclxuICAgICAgICByZXR1cm4gaXNBY3RpdmVcclxuICAgICAgICAgICAgPyB7fVxyXG4gICAgICAgICAgICA6IHtcImNvbG9yXCI6IFwiIzk5OTk5OVwifTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEJ1bmRsZUlkcygpIHtcclxuICAgICAgICB0aGlzLnNsaWRlU2VydmljZS5nZXRTbGlkZVRlbXBsYXRlQnVuZGxlSWQoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEJ1bmRsZShyZXN1bHQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChzbGlkZVRlbXBsYXRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsaWRlVGVtcGxhdGUuYnVuZGxlRmlsZU5hbWVDU1MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlVGVtcGxhdGUuY3NzRmlsZVVybCA9IHRoaXMuc2xpZGVCdW5kbGUuZmlsZXMuZmlsdGVyKGZpbGUgPT4gZmlsZS5rZXkgPT09IHNsaWRlVGVtcGxhdGUuYnVuZGxlRmlsZU5hbWVDU1MpWzBdLnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xpZGVUZW1wbGF0ZS5idW5kbGVGaWxlTmFtZUpTKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZVRlbXBsYXRlLmpzRmlsZVVybCA9IHRoaXMuc2xpZGVCdW5kbGUuZmlsZXMuZmlsdGVyKGZpbGUgPT4gZmlsZS5rZXkgPT09IHNsaWRlVGVtcGxhdGUuYnVuZGxlRmlsZU5hbWVKUylbMF0udXJsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQnVuZGxlKGJ1bmRsZUlkOiBudW1iZXIpOiBJUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idW5kbGVTZXJ2aWNlLmdldEJ1bmRsZShidW5kbGVJZCwgXCJIVE1MX09SX0xPQURFRF9BVF9TVEFSVFwiKVxyXG4gICAgICAgICAgICAudGhlbihidW5kbGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZUJ1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9zZVJpY2hUZXh0RnJvbUxvYWRBdFN0YXJ0QnVuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVUZW1wbGF0ZUxvYWRBdFN0YXJ0QnVuZGxlc1RleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJpY2hUZXh0TG9hZGVkUHJvbWlzZShcImNvdXJzZV9sb2FkX2F0X3N0YXJ0X2J1bmRsZXNfcmljaF90ZXh0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tcG9zZVJpY2hUZXh0RnJvbUxvYWRBdFN0YXJ0QnVuZGxlcygpIHtcclxuICAgICAgICBpZiAodGhpcy5zbGlkZUJ1bmRsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNsaWRlVGVtcGxhdGVMb2FkQXRTdGFydEJ1bmRsZXNUZXh0ID0gQ291cnNlRGV0YWlsc1V0aWxzLmNvbXBvc2VSaWNoVGV4dEZyb21Mb2FkQXRTdGFydEJ1bmRsZXModGhpcy5zbGlkZUJ1bmRsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UmljaFRleHRMb2FkZWRQcm9taXNlKHJpY2hUZXh0SWQ6IHN0cmluZyk6IElQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIC8vaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnN1bW1hcnkpIHtcclxuICAgICAgICBsZXQgZGVmZXJyZWQ6IGFuZ3VsYXIuSURlZmVycmVkPGFueT4gPSB0aGlzLiRxLmRlZmVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YTogSUZpbmRSaWNoVGV4dEJpbmRDb250cm9sbGVyRXZlbnREYXRhID0ge1xyXG4gICAgICAgICAgICByaWNoVGV4dEVsZW1lbnRJZDogcmljaFRleHRJZCxcclxuICAgICAgICAgICAgcmljaFRleHRCaW5kQ29udHJvbGxlcjogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZmluZFJpY2hUZXh0Q29udHJvbGxlcjogKCkgPT4gUmljaFRleHRCaW5kQ29udHJvbGxlciA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy4kc2NvcGUuJGJyb2FkY2FzdChFdmVudC5UQV9GSU5EX1JJQ0hfVEVYVF9CSU5EX0NPTlRST0xMRVIsIGV2ZW50RGF0YSk7XHJcbiAgICAgICAgICAgIHJldHVybiBldmVudERhdGEucmljaFRleHRCaW5kQ29udHJvbGxlcjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHdhaXRGb3JDb250ZW50TG9hZDogKHJpY2hUZXh0QmluZENvbnRyb2xsZXI6IFJpY2hUZXh0QmluZENvbnRyb2xsZXIpID0+IElQcm9taXNlPGFueT4gPVxyXG4gICAgICAgICAgICAocmljaFRleHRCaW5kQ29udHJvbGxlcjogUmljaFRleHRCaW5kQ29udHJvbGxlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJpY2hUZXh0QmluZENvbnRyb2xsZXIud2FpdEZvckNvbnRlbnRMb2FkZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgbGV0IHJpY2hUZXh0QmluZENvbnRyb2xsZXI6IFJpY2hUZXh0QmluZENvbnRyb2xsZXIgPSBmaW5kUmljaFRleHRDb250cm9sbGVyKCk7XHJcbiAgICAgICAgaWYgKHJpY2hUZXh0QmluZENvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgd2FpdEZvckNvbnRlbnRMb2FkKHJpY2hUZXh0QmluZENvbnRyb2xsZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGlkZUlmTW9iaWxlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA2NjA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9VcmwodXJsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRGaWxlKHNsaWRlVGVtcGxhdGU6IElTbGlkZVRlbXBsYXRlLCBkZWZhdWx0VGVtcGxhdGU6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGxldCBibG9iID0gbnVsbDtcclxuICAgICAgICBpZiAoc2xpZGVUZW1wbGF0ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGJsb2IgPSBuZXcgQmxvYihbc2xpZGVUZW1wbGF0ZS5zbGlkZVRlbXBsYXRlSHRtbF0sIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2h0bWwnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBzbGlkZVRlbXBsYXRlLmZpbGVUaXRsZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYmxvYiA9IG5ldyBCbG9iKFskKFwiI1wiICsgZGVmYXVsdFRlbXBsYXRlKS5odG1sKCldLCB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dC9odG1sJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZGVmYXVsdFRlbXBsYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZpbGVVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdocmVmJywgZmlsZVVybCk7XHJcbiAgICAgICAgZWxlbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbSk7XHJcbiAgICAgICAgZWxlbS5jbGljaygpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRlbXBsYXRlRm9ySW5jbHVkZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVybC50ZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VUb3BFZGl0UGF0aCgpIHtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0VG9VcmwodGhpcy5jdXJyZW50VG9wRWRpdFBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsYXN0UGFnZUluU2xpZGVUZW1wbGF0ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuICEodGhpcy5zbGlkZXNHcmlkTW9kZWwgJiYgdGhpcy5zbGlkZXNHcmlkTW9kZWwuZW50cmllcy5sZW5ndGggPiAwICYmIHRoaXMuc2xpZGVzR3JpZE1vZGVsLnNlbGVjdGVkUGFnZSAhPT0gdGhpcy5zbGlkZXNHcmlkTW9kZWwudG90YWxQYWdlQ291bnQpO1xyXG5cclxuICAgIH1cclxufSIsImltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtTbGlkZVRlbXBsYXRlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvU2xpZGVUZW1wbGF0ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTbGlkZVNlcnZpY2V9IGZyb20gXCIuL1NsaWRlU2VydmljZVwiO1xyXG5pbXBvcnQge0lTbGlkZVRlbXBsYXRlfSBmcm9tIFwiLi9tb2RlbHMvSVNsaWRlVGVtcGxhdGVcIjtcclxuaW1wb3J0IHtDb3Vyc2VEZXRhaWxzVXRpbHN9IGZyb20gXCIuLi9jb3Vyc2VzL0NvdXJzZURldGFpbHNVdGlsc1wiO1xyXG5pbXBvcnQge0lGaW5kUmljaFRleHRCaW5kQ29udHJvbGxlckV2ZW50RGF0YX0gZnJvbSBcIi4uL2NvbXBvbmVudHMvbW9kZWxzL0lGaW5kUmljaFRleHRCaW5kQ29udHJvbGxlckV2ZW50RGF0YVwiO1xyXG5pbXBvcnQge1JpY2hUZXh0QmluZENvbnRyb2xsZXJ9IGZyb20gXCIuLi9jb21wb25lbnRzL3JpY2h0ZXh0L1JpY2hUZXh0QmluZERpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0V2ZW50fSBmcm9tIFwiLi4vY29tcG9uZW50cy9tb2RlbHMvRXZlbnRcIjtcclxuaW1wb3J0IHtCdW5kbGVTZXJ2aWNlfSBmcm9tIFwiLi4vYnVuZGxlcy9CdW5kbGVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUJ1bmRsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVcIjtcclxuaW1wb3J0IHtJUHJvbWlzZX0gZnJvbSBcImFuZ3VsYXJcIjtcclxuaW1wb3J0IHtJQnVuZGxlRmlsZX0gZnJvbSBcIi4uL2J1bmRsZXMvbW9kZWxzL0lCdW5kbGVGaWxlXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZU1hdGVyaWFsQ29udHJvbGxlcn0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmljaHRleHQvVmhzU2VsZWN0RW1iZWRkZWRCdW5kbGVEaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtSYW5kb21VdGlsc30gZnJvbSBcIi4uL3V0aWxzL1JhbmRvbVV0aWxzXCI7XHJcblxyXG5kZWNsYXJlIHZhciBmZXRjaDtcclxuXHJcbmV4cG9ydCBjbGFzcyBTbGlkZXNDcmVhdGVFZGl0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInNsaWRlcy5TbGlkZXNDcmVhdGVFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzbGlkZVRlbXBsYXRlOiBJU2xpZGVUZW1wbGF0ZSA9IHtuYW1lOiBudWxsLCBmaWxlQ29udGVudElkOiBudWxsfTtcclxuICAgIHB1YmxpYyBuZXdTbGlkZVRlbXBsYXRlRmlsZTogRmlsZTtcclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGRpc2FibGVTYXZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZXJyb3JzTWFwOiBNYXA8U3RyaW5nLCBTdHJpbmc+ID0gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4oKTtcclxuICAgIHB1YmxpYyBmaWxlVGl0bGU6IFN0cmluZztcclxuICAgIHB1YmxpYyBzbGlkZUNvbnRlbnQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgc2xpZGVGaWxlVGl0bGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBpc1ByZXZpZXdIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhhc0FsbEJ1c2luZXNzVW5pdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzbGlkZVRlbXBsYXRlSHRtbDogc3RyaW5nO1xyXG4gICAgcHVibGljIHNsaWRlVGVtcGxhdGVUaHVtYm5haWw6IEZpbGU7XHJcbiAgICBwdWJsaWMgc2xpZGVCdW5kbGU6IElCdW5kbGU7XHJcbiAgICBwdWJsaWMgc2xpZGVUZW1wbGF0ZUxvYWRBdFN0YXJ0QnVuZGxlc1RleHQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBidW5kbGVGaWxlTmFtZUNTU0xpc3Q6IEFycmF5PHN0cmluZz47XHJcbiAgICBwdWJsaWMgYnVuZGxlRmlsZU5hbWVKU0xpc3Q6IEFycmF5PHN0cmluZz47XHJcbiAgICBwdWJsaWMgaXNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSByZWRpcmVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHJvb3RTY29wZVwiLFxyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIlVwbG9hZFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTbGlkZVRlbXBsYXRlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNsaWRlU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1bmRsZVNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgJHJvb3RTY29wZSwgcHJvdGVjdGVkICRzY29wZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCAkcm91dGVQYXJhbXM6IG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBzbGlkZVRlbXBsYXRlc1JvdXRlcjogU2xpZGVUZW1wbGF0ZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgc2xpZGVTZXJ2aWNlOiBTbGlkZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1bmRsZVNlcnZpY2U6IEJ1bmRsZVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpXHJcbiAgICAgICAgICAgIC5kZW1hbmRTeXN0ZW1QZXJtaXNzaW9ucyhzeXN0ZW1QZXJtaXNzaW9ucyA9PiBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCk7XHJcblxyXG4gICAgICAgIGxldCBzbGlkZUlkOiBudW1iZXIgPSB0aGlzLiRyb3V0ZVBhcmFtc1tTbGlkZVRlbXBsYXRlc1JvdXRlci5TTElERV9JRF9QQVJBTV07XHJcbiAgICAgICAgbGV0IGhhc1NsaWRlSWQ6IGJvb2xlYW4gPSAhaXNOYU4oc2xpZGVJZCk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TTElERV9URU1QTEFURV9LRVkpO1xyXG5cclxuICAgICAgICBpZiAoaGFzU2xpZGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNsaWRlU2VydmljZS5nZXRTbGlkZVRlbXBsYXRlKHNsaWRlSWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVUZW1wbGF0ZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVGaWxlVGl0bGUgPSByZXN1bHQuZmlsZVRpdGxlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIlNsaWRlIHRlbXBsYXRlIG5vdCBmb3VuZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9CYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihyZXN1bHQubmFtZSkudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zbGlkZVRlbXBsYXRlLmJ1bmRsZUlkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNsaWRlU2VydmljZS5nZXRTbGlkZVRlbXBsYXRlQnVuZGxlRmlsZXModGhpcy5zbGlkZVRlbXBsYXRlLmJ1bmRsZUlkKS50aGVuKGJ1bmRsZUZpbGVOYW1lcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZU5hbWVDU1NMaXN0ID0gYnVuZGxlRmlsZU5hbWVzW1wiYnVuZGxlRmlsZXNDU1NcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZU5hbWVKU0xpc3QgPSBidW5kbGVGaWxlTmFtZXNbXCJidW5kbGVGaWxlc0pTXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRCdW5kbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSB1c2VyLmFsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJOZXcgU2xpZGUgVGVtcGxhdGVcIikudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0JhY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5zbGlkZVRlbXBsYXRlc1JvdXRlci5pbmRleFVybCgpKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlU2xpZGVUZW1wbGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5uZXdTbGlkZVRlbXBsYXRlRmlsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNsaWRlVGVtcGxhdGUuZmlsZUNvbnRlbnRJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVUZW1wbGF0ZS5maWxlVGl0bGUgPSB0aGlzLm5ld1NsaWRlVGVtcGxhdGVGaWxlLm5hbWVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNhbGwgPSB0aGlzLnNsaWRlVGVtcGxhdGUuaWRcclxuICAgICAgICAgICAgPyB0aGlzLnNsaWRlU2VydmljZS51cGRhdGVTbGlkZVRlbXBsYXRlKHRoaXMuc2xpZGVUZW1wbGF0ZS5pZCwgdGhpcy5zbGlkZVRlbXBsYXRlKVxyXG4gICAgICAgICAgICA6IHRoaXMuc2xpZGVTZXJ2aWNlLmNyZWF0ZVNsaWRlVGVtcGxhdGUodGhpcy5zbGlkZVRlbXBsYXRlKTtcclxuICAgICAgICBjYWxsLnRoZW4oc2xpZGVUZW1wbGF0ZUlkID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmV3U2xpZGVUZW1wbGF0ZUZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVTZXJ2aWNlLnVwbG9hZFNsaWRlVGVtcGxhdGUoc2xpZGVUZW1wbGF0ZUlkLCB0aGlzLm5ld1NsaWRlVGVtcGxhdGVGaWxlKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVUZW1wbGF0ZVRodW1ibmFpbCA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVTZXJ2aWNlLnVwbG9hZFNsaWRlVGVtcGxhdGVUaHVtYm5haWwoc2xpZGVUZW1wbGF0ZUlkLCB0aGlzLnNsaWRlVGVtcGxhdGVUaHVtYm5haWwpXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9CYWNrKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IubmFtZS5kdXBsaWNhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiU2xpZGUgdGVtcGxhdGUgbmFtZSBtdXN0IGJlIHVuaXF1ZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVhY3RpdmF0ZUVudGl0eSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNsaWRlU2VydmljZS5zZXRBY3RpdmVTbGlkZVRlbXBsYXRlKHRoaXMuc2xpZGVUZW1wbGF0ZS5pZCwgZmFsc2UpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvQmFjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbnRpdHlWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYXNGaWxlKCkgJiYgdGhpcy5oYXNOYW1lKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBvbkJ1c2luZXNzVW5pdENoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy4kdGltZW91dChhID0+IHRoaXMuYnVzaW5lc3NVbml0U2VsZWN0ZWQgPSB0cnVlLCAwKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZEVycm9yTWVzc2FnZSh0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJQbGVhc2Ugc3BlY2lmeSBhIHZhbHVlIGZvciB0aGUgZmllbGQgXFxcIiUxXFxcIlwiLnJlcGxhY2UoXCIlMVwiLCB0aXRsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc05hbWUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNsaWRlVGVtcGxhdGUubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yc01hcC5zZXQoXCJuYW1lXCIsIHRoaXMuYnVpbGRFcnJvck1lc3NhZ2UoXCJuYW1lXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzRmlsZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2xpZGVGaWxlVGl0bGUpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnNNYXAuc2V0KFwiZmlsZVwiLCB0aGlzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiZmlsZVwiKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVNsaWRlVGVtcGxhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZXdTbGlkZVRlbXBsYXRlRmlsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zbGlkZUZpbGVUaXRsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zbGlkZVRlbXBsYXRlLmZpbGVDb250ZW50SWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2xpZGVDb250ZW50ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXR0YWNoRmlsZSgkZmlsZSkge1xyXG4gICAgICAgIGlmICh0aGlzLm5ld1NsaWRlVGVtcGxhdGVGaWxlICYmICEkZmlsZS4kZXJyb3IpIHtcclxuICAgICAgICAgICAgbGV0IGxpbmsgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHRoaXMubmV3U2xpZGVUZW1wbGF0ZUZpbGUpO1xyXG4gICAgICAgICAgICBmZXRjaChsaW5rKS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLnRleHQoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4odGV4dCA9PiB0aGlzLnNsaWRlVGVtcGxhdGVIdG1sID0gdGV4dCkpO1xyXG4gICAgICAgICAgICB0aGlzLnNsaWRlRmlsZVRpdGxlID0gdGhpcy5uZXdTbGlkZVRlbXBsYXRlRmlsZS5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRGaWxlKCkge1xyXG4gICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoW3RoaXMuc2xpZGVUZW1wbGF0ZS5zbGlkZVRlbXBsYXRlSHRtbF0sIHtcclxuICAgICAgICAgICAgdHlwZTogJ3RleHQvaHRtbCdcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgZmlsZVVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBmaWxlVXJsKTtcclxuICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCB0aGlzLnNsaWRlVGVtcGxhdGUuZmlsZVRpdGxlKTtcclxuICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtKTtcclxuICAgICAgICBlbGVtLmNsaWNrKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRCdW5kbGUoKTogSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVuZGxlU2VydmljZS5nZXRCdW5kbGUodGhpcy5zbGlkZVRlbXBsYXRlLmJ1bmRsZUlkLCBcIkhUTUxfT1JfTE9BREVEX0FUX1NUQVJUXCIpXHJcbiAgICAgICAgICAgIC50aGVuKGJ1bmRsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlQnVuZGxlID0gYnVuZGxlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wb3NlUmljaFRleHRGcm9tTG9hZEF0U3RhcnRCdW5kbGVzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zbGlkZVRlbXBsYXRlTG9hZEF0U3RhcnRCdW5kbGVzVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmljaFRleHRMb2FkZWRQcm9taXNlKFwiY291cnNlX2xvYWRfYXRfc3RhcnRfYnVuZGxlc19yaWNoX3RleHRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb21wb3NlUmljaFRleHRGcm9tTG9hZEF0U3RhcnRCdW5kbGVzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNsaWRlQnVuZGxlKSB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2xpZGVCdW5kbGUuZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBidW5kbGVGaWxlOiBJQnVuZGxlRmlsZSA9IHRoaXMuc2xpZGVCdW5kbGUuZmlsZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVuZGxlRmlsZS5sb2FkQXRTdGFydCAmJiAoYnVuZGxlRmlsZS5rZXkgPT09IHRoaXMuc2xpZGVUZW1wbGF0ZS5idW5kbGVGaWxlTmFtZUNTUyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1bmRsZUZpbGUua2V5ID09PSB0aGlzLnNsaWRlVGVtcGxhdGUuYnVuZGxlRmlsZU5hbWVKUykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShWaHNTZWxlY3RFbWJlZGRlZEJ1bmRsZU1hdGVyaWFsQ29udHJvbGxlci5FTUJFRERFRF9CVU5ETEVfVEFfSFRNTClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6YnVuZGxlSWRcIiwgUmFuZG9tVXRpbHMuZ2VuZXJhdGVSYW5kb21JZChidW5kbGVGaWxlLmtleSArIFwiX19fXCIpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpidW5kbGVLZXlcIiwgYnVuZGxlRmlsZS5rZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNsaWRlVGVtcGxhdGVMb2FkQXRTdGFydEJ1bmRsZXNUZXh0ID0gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJpY2hUZXh0TG9hZGVkUHJvbWlzZShyaWNoVGV4dElkOiBzdHJpbmcpOiBJUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICAvL2lmICh0aGlzLnNlbGVjdGVkU2VjdGlvbiAmJiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5zdW1tYXJ5KSB7XHJcbiAgICAgICAgbGV0IGRlZmVycmVkOiBhbmd1bGFyLklEZWZlcnJlZDxhbnk+ID0gdGhpcy4kcS5kZWZlcigpO1xyXG5cclxuICAgICAgICBjb25zdCBldmVudERhdGE6IElGaW5kUmljaFRleHRCaW5kQ29udHJvbGxlckV2ZW50RGF0YSA9IHtcclxuICAgICAgICAgICAgcmljaFRleHRFbGVtZW50SWQ6IHJpY2hUZXh0SWQsXHJcbiAgICAgICAgICAgIHJpY2hUZXh0QmluZENvbnRyb2xsZXI6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGZpbmRSaWNoVGV4dENvbnRyb2xsZXI6ICgpID0+IFJpY2hUZXh0QmluZENvbnRyb2xsZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRicm9hZGNhc3QoRXZlbnQuVEFfRklORF9SSUNIX1RFWFRfQklORF9DT05UUk9MTEVSLCBldmVudERhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnREYXRhLnJpY2hUZXh0QmluZENvbnRyb2xsZXI7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCB3YWl0Rm9yQ29udGVudExvYWQ6IChyaWNoVGV4dEJpbmRDb250cm9sbGVyOiBSaWNoVGV4dEJpbmRDb250cm9sbGVyKSA9PiBJUHJvbWlzZTxhbnk+ID1cclxuICAgICAgICAgICAgKHJpY2hUZXh0QmluZENvbnRyb2xsZXI6IFJpY2hUZXh0QmluZENvbnRyb2xsZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByaWNoVGV4dEJpbmRDb250cm9sbGVyLndhaXRGb3JDb250ZW50TG9hZGVkKClcclxuICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIGxldCByaWNoVGV4dEJpbmRDb250cm9sbGVyOiBSaWNoVGV4dEJpbmRDb250cm9sbGVyID0gZmluZFJpY2hUZXh0Q29udHJvbGxlcigpO1xyXG4gICAgICAgIGlmIChyaWNoVGV4dEJpbmRDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgIHdhaXRGb3JDb250ZW50TG9hZChyaWNoVGV4dEJpbmRDb250cm9sbGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNsaWRlVGVtcGxhdGVCdW5kbGVGaWxlTmFtZShidW5kbGVGaWxlTmFtZTogc3RyaW5nLCBidW5kbGVGaWxlVHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3dpdGNoIChidW5kbGVGaWxlVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiQ1NTXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlVGVtcGxhdGUuYnVuZGxlRmlsZU5hbWVDU1MgPSBidW5kbGVGaWxlTmFtZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiSlNcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVUZW1wbGF0ZS5idW5kbGVGaWxlTmFtZUpTID0gYnVuZGxlRmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnRhaW5zQnVuZGxlRmlsZU5hbWUoYnVuZGxlRmlsZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHN3aXRjaCAoYnVuZGxlRmlsZVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIkNTU1wiOlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNsaWRlVGVtcGxhdGUuYnVuZGxlRmlsZU5hbWVDU1MpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhKHRoaXMuYnVuZGxlRmlsZU5hbWVDU1NMaXN0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZU5hbWVDU1NMaXN0LmluZGV4T2YodGhpcy5zbGlkZVRlbXBsYXRlLmJ1bmRsZUZpbGVOYW1lQ1NTKSA+PSAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkpTXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2xpZGVUZW1wbGF0ZS5idW5kbGVGaWxlTmFtZUpTKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gISh0aGlzLmJ1bmRsZUZpbGVOYW1lSlNMaXN0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlRmlsZU5hbWVKU0xpc3QuaW5kZXhPZih0aGlzLnNsaWRlVGVtcGxhdGUuYnVuZGxlRmlsZU5hbWVKUykgPj0gMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRCdXNpbmVzc1VuaXRTZWxlY3RvclZpc2libGUoKSB7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxufSIsImltcG9ydCB7U29jaWFsU2VydmljZX0gZnJvbSBcIi4vU29jaWFsU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IHZhciBTb2NpYWxNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJzb2NpYWxcIiwgW1xyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKFNvY2lhbFNlcnZpY2UuTkFNRSwgU29jaWFsU2VydmljZSk7IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVJhdGluZ0luZm99IGZyb20gXCIuL21vZGVscy9JUmF0aW5nSW5mb1wiO1xyXG5pbXBvcnQge0lDb21tZW50fSBmcm9tIFwiLi9tb2RlbHMvSUNvbW1lbnRcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VkT2JqZWN0VHlwZX0gZnJvbSBcIi4vLi4vUmVmZXJlbmNlZE9iamVjdFR5cGVcIjtcclxuaW1wb3J0IHtJQ29tbWVudHNBbmREaXNjdXNzaW9ufSBmcm9tIFwiLi9tb2RlbHMvSUNvbW1lbnRzQW5kRGlzY3Vzc2lvblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNvY2lhbFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJzb2NpYWwuU29jaWFsU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlT2JqZWN0UmF0aW5nKG9iamVjdElkOiBudW1iZXIsIG9iamVjdFZlcnNpb246IG51bWJlciwgb2JqZWN0VHlwZTogUmVmZXJlbmNlZE9iamVjdFR5cGUsIGlzTGlrZTogYm9vbGVhbik6IGFuZ3VsYXIuSVByb21pc2U8SVJhdGluZ0luZm8+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3NvY2lhbC9yYXRpbmc/b2JqZWN0SWQ9Om9iamVjdElkJm9iamVjdFZlcnNpb249Om9iamVjdFZlcnNpb24mb2JqZWN0VHlwZT06b2JqZWN0VHlwZSZpc0xpa2U9OmlzTGlrZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0SWRcIiwgb2JqZWN0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvYmplY3RWZXJzaW9uXCIsIG9iamVjdFZlcnNpb24pXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvYmplY3RUeXBlXCIsIFJlZmVyZW5jZWRPYmplY3RUeXBlW29iamVjdFR5cGVdKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aXNMaWtlXCIsIGlzTGlrZSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkQ29tbWVudChvYmplY3RJZDogbnVtYmVyLCBvYmplY3RWZXJzaW9uOiBudW1iZXIsIG9iamVjdFR5cGU6IFJlZmVyZW5jZWRPYmplY3RUeXBlLCBjb21tZW50OiBJQ29tbWVudCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvc29jaWFsL2NvbW1lbnRzP29iamVjdElkPTpvYmplY3RJZCZvYmplY3RWZXJzaW9uPTpvYmplY3RWZXJzaW9uJm9iamVjdFR5cGU9Om9iamVjdFR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm9iamVjdElkXCIsIG9iamVjdElkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0VmVyc2lvblwiLCBvYmplY3RWZXJzaW9uKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0VHlwZVwiLCBSZWZlcmVuY2VkT2JqZWN0VHlwZVtvYmplY3RUeXBlXSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgY29tbWVudClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tbWVudHNDb3VudChvYmplY3RJZDogbnVtYmVyLCBvYmplY3RUeXBlOiBSZWZlcmVuY2VkT2JqZWN0VHlwZSk6IGFuZ3VsYXIuSVByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3NvY2lhbC9jb21tZW50cy9jb3VudD9vYmplY3RJZD06b2JqZWN0SWQmb2JqZWN0VHlwZT06b2JqZWN0VHlwZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6b2JqZWN0SWRcIiwgb2JqZWN0SWQpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvYmplY3RUeXBlXCIsIFJlZmVyZW5jZWRPYmplY3RUeXBlW29iamVjdFR5cGVdKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb21tZW50c0FuZERpc2N1c3Npb25Gb3JJbnN0cnVjdG9yKHBlcmlvZFR5cGU6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUNvbW1lbnRzQW5kRGlzY3Vzc2lvbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3NvY2lhbC9jb21tZW50cy9pbnN0cnVjdG9yP3BlcmlvZFR5cGU9OnBlcmlvZFR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnBlcmlvZFR5cGVcIiwgcGVyaW9kVHlwZSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tbWVudHNBbmREaXNjdXNzaW9uRm9yQXR0ZW5kZWVNYW5hZ2VyKHBlcmlvZFR5cGU6IHN0cmluZyk6IGFuZ3VsYXIuSVByb21pc2U8SUNvbW1lbnRzQW5kRGlzY3Vzc2lvbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3NvY2lhbC9jb21tZW50cy9hdHRlbmRlZU1hbmFnZXI/cGVyaW9kVHlwZT06cGVyaW9kVHlwZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6cGVyaW9kVHlwZVwiLCBwZXJpb2RUeXBlKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7QWN0aW9uVHlwZX0gZnJvbSBcIi4vbW9kZWxzL0FjdGlvblR5cGVcIjtcclxuXHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi8uLi9SZWZlcmVuY2VkT2JqZWN0VHlwZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFjdGlvbkxvZ1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJzdGF0aXN0aWNzLkFjdGlvbkxvZ1NlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBuZy5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGUob2JqZWN0SWQ6IG51bWJlciwgb2JqZWN0VHlwZTogUmVmZXJlbmNlZE9iamVjdFR5cGUsIGFjdGlvblR5cGU6IEFjdGlvblR5cGUpOiBuZy5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL2FjdGlvbkxvZ3NcIiksIHtcclxuICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkLFxyXG4gICAgICAgICAgICBvYmplY3RUeXBlOiBvYmplY3RUeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25UeXBlOiBhY3Rpb25UeXBlXHJcbiAgICAgICAgfSkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtBcHBQcm9wZXJ0aWVzfSBmcm9tIFwiLi4vdXRpbHMvQXBwUHJvcGVydGllc1wiO1xyXG5leHBvcnQgY2xhc3MgQmFzZVJlcG9ydENvbnRyb2xsZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcclxuICAgICAgICAgICAgJFsnanNEYXRlJ10ucmVnaW9uYWxbQXBwUHJvcGVydGllcy5kZWZhdWx0TG9jYWxlLnN1YnN0cmluZygwLCAyKV0gPSB7XHJcbiAgICAgICAgICAgICAgICBtb250aE5hbWVzOiBbJ0phbnVhcnknLCdGZWJydWFyeScsJ01hcmNoJyxcclxuICAgICAgICAgICAgICAgICAgICAnQXByaWwnLCdNYXknLCdKdW5lJyxcclxuICAgICAgICAgICAgICAgICAgICAnSnVseScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXHJcbiAgICAgICAgICAgICAgICBtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJyxcclxuICAgICAgICAgICAgICAgICAgICAnQXByJywnTWF5JywnSnVuJyxcclxuICAgICAgICAgICAgICAgICAgICAnSnVsJywnQXVnJywnU2VwJyxcclxuICAgICAgICAgICAgICAgICAgICAnT2N0JywnTm92JywnRGVjJ10sXHJcbiAgICAgICAgICAgICAgICBkYXlOYW1lczogWydTdW5kYXknLCdNb25kYXknLCdUdWVzZGF5JyxcclxuICAgICAgICAgICAgICAgICAgICAnV2VkbmVzZGF5JywnVGh1cnNkYXknLCdGcmlkYXknLFxyXG4gICAgICAgICAgICAgICAgICAgICdTYXR1cmRheSddLFxyXG4gICAgICAgICAgICAgICAgZGF5TmFtZXNTaG9ydDogWydTdScsJ01vJywnVHUnLFxyXG4gICAgICAgICAgICAgICAgICAgICdXZScsJ1RoJywnRnInLFxyXG4gICAgICAgICAgICAgICAgICAgICdTYSddLFxyXG4gICAgICAgICAgICAgICAgZm9ybWF0U3RyaW5nOiAnJWQtJW0tJVkgJUg6JU06JVMnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCAnZW4nKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lDb3Vyc2VBY3Rpb25Mb2d9IGZyb20gXCIuL21vZGVscy9JQ291cnNlQWN0aW9uTG9nXCI7XHJcbmltcG9ydCBJUmVxdWVzdFNob3J0Y3V0Q29uZmlnID0gYW5ndWxhci5JUmVxdWVzdFNob3J0Y3V0Q29uZmlnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZUFjdGlvbkxvZ1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJzdGF0aXN0aWNzLkNvdXJzZUFjdGlvbkxvZ1NlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRodHRwOiBuZy5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybDogVXJsU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGUoY291cnNlQWN0aW9uTG9nOiBJQ291cnNlQWN0aW9uTG9nKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9jb3Vyc2VBY3Rpb25Mb2dzXCIpLCBjb3Vyc2VBY3Rpb25Mb2csIDxJUmVxdWVzdFNob3J0Y3V0Q29uZmlnPiB7aWdub3JlNTAwOiB0cnVlfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7QmFzZVJlcG9ydENvbnRyb2xsZXJ9IGZyb20gXCIuL0Jhc2VSZXBvcnRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxSZXBvcnRUYXJnZXR9IGZyb20gXCIuL21vZGVscy9NYXRlcmlhbFJlcG9ydFRhcmdldFwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydFJlc3VsdH0gZnJvbSBcIi4vbW9kZWxzL1N0YXRpc3RpY1JlcG9ydFJlc3VsdFwiO1xyXG5pbXBvcnQge1JlcG9ydEdyb3VwVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1JlcG9ydEdyb3VwVHlwZVwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlfSBmcm9tIFwiLi9TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5pbXBvcnQge0lSZXBvcnRXcml0ZXIsIExpbmVEaWFncmFtc1JlcG9ydFdyaXRlcn0gZnJvbSBcIi4vdXRpbHMvUmVwb3J0V3JpdGVyc1wiO1xyXG5pbXBvcnQge2dldExpbmVEaWFncmFtc1JlcG9ydE9wdGlvbnN9IGZyb20gXCIuL3V0aWxzL1JlcG9ydE9wdGlvbnNcIjtcclxuaW1wb3J0IHtJUmVwb3J0VGFyZ2V0TmFtZXNNYWtlciwgT3duZXJOYW1lc01ha2VyLCBNYXRlcmlhbFR5cGVOYW1lc01ha2VyLCBTdWJqZWN0TmFtZXNNYWtlcn0gZnJvbSBcIi4vdXRpbHMvUmVwb3J0VGFyZ2V0TmFtZXNNYWtlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lTdWJqZWN0fSBmcm9tIFwiLi8uLi9JU3ViamVjdFwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi8uLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIi4vLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbERvd25sb2FkUmVwb3J0Q29udHJvbGxlciBleHRlbmRzIEJhc2VSZXBvcnRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwic3RhdGlzdGljcy5NYXRlcmlhbERvd25sb2FkUmVwb3J0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgcmVwb3J0OiBTdGF0aXN0aWNSZXBvcnRSZXN1bHQ8YW55LCBBcnJheTxhbnk+LCBudW1iZXI+O1xyXG4gICAgcHJpdmF0ZSBsaW5lRGlhZ3JhbXNSZXBvcnRXcml0ZXI6IElSZXBvcnRXcml0ZXIgPSBuZXcgTGluZURpYWdyYW1zUmVwb3J0V3JpdGVyKCk7XHJcbiAgICBwcml2YXRlIHJlcG9ydFRhcmdldE5hbWVzTWFrZXI6IElSZXBvcnRUYXJnZXROYW1lc01ha2VyO1xyXG4gICAgcHJpdmF0ZSByZXBvcnRUYXJnZXQ6IE1hdGVyaWFsUmVwb3J0VGFyZ2V0O1xyXG4gICAgcHJpdmF0ZSBncm91cFR5cGU6IFJlcG9ydEdyb3VwVHlwZSA9IFJlcG9ydEdyb3VwVHlwZS5EQVlTO1xyXG5cclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIG93bmVySWRzOiBBcnJheTxudW1iZXI+ID0gW107XHJcbiAgICBwdWJsaWMgbWF0ZXJpYWxUeXBlSWRzOiBBcnJheTxudW1iZXI+ID0gW107XHJcbiAgICBwdWJsaWMgc3ViamVjdElkczogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgcHVibGljIGRhdGVGcm9tVGV4dDogc3RyaW5nO1xyXG4gICAgcHVibGljIGRhdGVUb1RleHQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgbGluZURpYWdyYW1zUmVwb3J0RGF0YTogQXJyYXk8YW55PiA9IG51bGw7XHJcbiAgICBwdWJsaWMgbGluZURpYWdyYW1zUmVwb3J0T3B0aW9uczogYW55ID0gZ2V0TGluZURpYWdyYW1zUmVwb3J0T3B0aW9ucyhcIlRoZSByZXBvcnQgb24gbWF0ZXJpYWwgZG93bmxvYWRzXCIpO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBTdGF0aXN0aWNSZXBvcnRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0aXN0aWNSZXBvcnRzU2VydmljZTogU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BTkFMWVRJQ1NfTUFURVJJQUxfRE9XTkxPQURfUkVQT1JUX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIlRoZSByZXBvcnQgb24gbWF0ZXJpYWwgZG93bmxvYWRzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zQXBpLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihzeXN0ZW1QZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBzeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3lzdGVtUGVybWlzc2lvbnMudmlld0FuYWx5dGljcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRUYXJnZXQgPSBNYXRlcmlhbFJlcG9ydFRhcmdldC5PV05FUlM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFRhcmdldE5hbWVzTWFrZXIgPSBuZXcgT3duZXJOYW1lc01ha2VyKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFRhcmdldCA9IE1hdGVyaWFsUmVwb3J0VGFyZ2V0Lk1BVEVSSUFMX1RZUEVTO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRUYXJnZXROYW1lc01ha2VyID0gbmV3IE1hdGVyaWFsVHlwZU5hbWVzTWFrZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdSZXBvcnRHcm91cEJ5RGF5cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWZyZXNoUmVwb3J0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1JlcG9ydEdyb3VwQnkodGhpcy5ncm91cFR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2aWV3UmVwb3J0R3JvdXBCeURheXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3UmVwb3J0R3JvdXBCeShSZXBvcnRHcm91cFR5cGUuREFZUyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZpZXdSZXBvcnRHcm91cEJ5V2Vla3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3UmVwb3J0R3JvdXBCeShSZXBvcnRHcm91cFR5cGUuV0VFS1MpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2aWV3UmVwb3J0R3JvdXBCeU1vbnRocygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdSZXBvcnRHcm91cEJ5KFJlcG9ydEdyb3VwVHlwZS5NT05USFMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2aWV3UmVwb3J0R3JvdXBCeVllYXJzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1JlcG9ydEdyb3VwQnkoUmVwb3J0R3JvdXBUeXBlLllFQVJTKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlld1JlcG9ydEdyb3VwQnkoZ3JvdXBUeXBlOiBSZXBvcnRHcm91cFR5cGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdyb3VwVHlwZSA9IGdyb3VwVHlwZTtcclxuICAgICAgICB0aGlzLmxpbmVEaWFncmFtc1JlcG9ydERhdGEgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3RhdGlzdGljUmVwb3J0c1NlcnZpY2Uudmlld01hdGVyaWFsRG93bmxvYWRSZXBvcnQodGhpcy5yZXBvcnRUYXJnZXQsIHRoaXMuZ3JvdXBUeXBlLCB0aGlzLm93bmVySWRzLCB0aGlzLm1hdGVyaWFsVHlwZUlkcyxcclxuICAgICAgICAgICAgICAgIHRoaXMuc3ViamVjdElkcywgTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuZGF0ZUZyb21UZXh0KSwgTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuZGF0ZVRvVGV4dCkpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXBvcnQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMubGluZURpYWdyYW1zUmVwb3J0T3B0aW9ucy5zZXJpZXMgPSB0aGlzLnJlcG9ydFRhcmdldE5hbWVzTWFrZXIubWFrZSh0aGlzLnJlcG9ydCwgKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtsYWJlbDogbmFtZSwgbWFya2VyT3B0aW9uczoge3N0eWxlOiBcImNpcmNsZVwiLCBzaXplOiAxfX1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMubGluZURpYWdyYW1zUmVwb3J0RGF0YSA9IHRoaXMubGluZURpYWdyYW1zUmVwb3J0V3JpdGVyLnJlcG9ydGluZyh0aGlzLnJlcG9ydCwgKHZhbHVlOiBBcnJheTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW21vbWVudCh2YWx1ZVswXSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSwgdmFsdWVbMV1dO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDdXJyZW50T3duZXJzUmVwb3J0VGFyZ2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcG9ydFRhcmdldCA9PSBNYXRlcmlhbFJlcG9ydFRhcmdldC5PV05FUlM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ3VycmVudE1hdGVyaWFsVHlwZXNSZXBvcnRUYXJnZXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwb3J0VGFyZ2V0ID09IE1hdGVyaWFsUmVwb3J0VGFyZ2V0Lk1BVEVSSUFMX1RZUEVTO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0N1cnJlbnRTdWJqZWN0c1JlcG9ydFRhcmdldCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvcnRUYXJnZXQgPT0gTWF0ZXJpYWxSZXBvcnRUYXJnZXQuU1VCSkVDVFM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEN1cnJlbnRPd25lcnNSZXBvcnRUYXJnZXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50UmVwb3J0VGFyZ2V0KE1hdGVyaWFsUmVwb3J0VGFyZ2V0Lk9XTkVSUywgbmV3IE93bmVyTmFtZXNNYWtlcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Q3VycmVudE1hdGVyaWFsVHlwZXNSZXBvcnRUYXJnZXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50UmVwb3J0VGFyZ2V0KE1hdGVyaWFsUmVwb3J0VGFyZ2V0Lk1BVEVSSUFMX1RZUEVTLCBuZXcgTWF0ZXJpYWxUeXBlTmFtZXNNYWtlcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Q3VycmVudFN1YmplY3RzUmVwb3J0VGFyZ2V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFJlcG9ydFRhcmdldChNYXRlcmlhbFJlcG9ydFRhcmdldC5TVUJKRUNUUywgbmV3IFN1YmplY3ROYW1lc01ha2VyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRPd25lcnNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCIvYXBpL3VzZXJTZWxlY3Rvci91c2Vyc0ZvckN1cnJlbnRVc2VyXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRDdXJyZW50UmVwb3J0VGFyZ2V0KHJlcG9ydFRhcmdldDogTWF0ZXJpYWxSZXBvcnRUYXJnZXQsIHJlcG9ydFRhcmdldE5hbWVzTWFrZXI6IElSZXBvcnRUYXJnZXROYW1lc01ha2VyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vd25lcklkcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxUeXBlSWRzID0gW107XHJcbiAgICAgICAgdGhpcy5zdWJqZWN0SWRzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXBvcnRUYXJnZXQgPSByZXBvcnRUYXJnZXQ7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRUYXJnZXROYW1lc01ha2VyID0gcmVwb3J0VGFyZ2V0TmFtZXNNYWtlcjtcclxuICAgIH1cclxufSIsImltcG9ydCB7QmFzZVJlcG9ydENvbnRyb2xsZXJ9IGZyb20gXCIuL0Jhc2VSZXBvcnRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxSZXBvcnRUYXJnZXR9IGZyb20gXCIuL21vZGVscy9NYXRlcmlhbFJlcG9ydFRhcmdldFwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydFJlc3VsdH0gZnJvbSBcIi4vbW9kZWxzL1N0YXRpc3RpY1JlcG9ydFJlc3VsdFwiO1xyXG5pbXBvcnQge1JlcG9ydEdyb3VwVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1JlcG9ydEdyb3VwVHlwZVwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlfSBmcm9tIFwiLi9TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5pbXBvcnQge0lSZXBvcnRXcml0ZXIsIExpbmVEaWFncmFtc1JlcG9ydFdyaXRlcn0gZnJvbSBcIi4vdXRpbHMvUmVwb3J0V3JpdGVyc1wiO1xyXG5pbXBvcnQge2dldExpbmVEaWFncmFtc1JlcG9ydE9wdGlvbnN9IGZyb20gXCIuL3V0aWxzL1JlcG9ydE9wdGlvbnNcIjtcclxuaW1wb3J0IHtJUmVwb3J0VGFyZ2V0TmFtZXNNYWtlciwgT3duZXJOYW1lc01ha2VyLCBNYXRlcmlhbFR5cGVOYW1lc01ha2VyLCBTdWJqZWN0TmFtZXNNYWtlcn0gZnJvbSBcIi4vdXRpbHMvUmVwb3J0VGFyZ2V0TmFtZXNNYWtlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lTdWJqZWN0fSBmcm9tIFwiLi8uLi9JU3ViamVjdFwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi8uLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIi4vLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFVwbG9hZFJlcG9ydENvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlUmVwb3J0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInN0YXRpc3RpY3MuTWF0ZXJpYWxVcGxvYWRSZXBvcnRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHJpdmF0ZSByZXBvcnQ6IFN0YXRpc3RpY1JlcG9ydFJlc3VsdDxhbnksIEFycmF5PGFueT4sIG51bWJlcj47XHJcbiAgICBwcml2YXRlIGxpbmVEaWFncmFtc1JlcG9ydFdyaXRlcjogSVJlcG9ydFdyaXRlciA9IG5ldyBMaW5lRGlhZ3JhbXNSZXBvcnRXcml0ZXIoKTtcclxuICAgIHByaXZhdGUgcmVwb3J0VGFyZ2V0TmFtZXNNYWtlcjogSVJlcG9ydFRhcmdldE5hbWVzTWFrZXI7XHJcbiAgICBwcml2YXRlIHJlcG9ydFRhcmdldDogTWF0ZXJpYWxSZXBvcnRUYXJnZXQ7XHJcbiAgICBwcml2YXRlIGdyb3VwVHlwZTogUmVwb3J0R3JvdXBUeXBlID0gUmVwb3J0R3JvdXBUeXBlLkRBWVM7XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgb3duZXJJZHM6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuICAgIHB1YmxpYyBtYXRlcmlhbFR5cGVJZHM6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuICAgIHB1YmxpYyBzdWJqZWN0SWRzOiBBcnJheTxudW1iZXI+ID0gW107XHJcbiAgICBwdWJsaWMgZGF0ZUZyb21UZXh0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZGF0ZVRvVGV4dDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBsaW5lRGlhZ3JhbXNSZXBvcnREYXRhOiBBcnJheTxhbnk+ID0gbnVsbDtcclxuICAgIHB1YmxpYyBsaW5lRGlhZ3JhbXNSZXBvcnRPcHRpb25zOiBhbnkgPSBnZXRMaW5lRGlhZ3JhbXNSZXBvcnRPcHRpb25zKFwiVGhlIHJlcG9ydCBvbiBtYXRlcmlhbCB1cGxvYWRzXCIpO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBTdGF0aXN0aWNSZXBvcnRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0aXN0aWNSZXBvcnRzU2VydmljZTogU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BTkFMWVRJQ1NfTUFURVJJQUxfVVBMT0FEX1JFUE9SVF9NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJUaGUgcmVwb3J0IG9uIG1hdGVyaWFsIHVwbG9hZHNcIikudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHN5c3RlbVBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW5hbHl0aWNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFRhcmdldCA9IE1hdGVyaWFsUmVwb3J0VGFyZ2V0Lk9XTkVSUztcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0VGFyZ2V0TmFtZXNNYWtlciA9IG5ldyBPd25lck5hbWVzTWFrZXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0VGFyZ2V0ID0gTWF0ZXJpYWxSZXBvcnRUYXJnZXQuTUFURVJJQUxfVFlQRVM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFRhcmdldE5hbWVzTWFrZXIgPSBuZXcgTWF0ZXJpYWxUeXBlTmFtZXNNYWtlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudmlld1JlcG9ydEdyb3VwQnlEYXlzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2hSZXBvcnQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3UmVwb3J0R3JvdXBCeSh0aGlzLmdyb3VwVHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZpZXdSZXBvcnRHcm91cEJ5RGF5cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdSZXBvcnRHcm91cEJ5KFJlcG9ydEdyb3VwVHlwZS5EQVlTKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlld1JlcG9ydEdyb3VwQnlXZWVrcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdSZXBvcnRHcm91cEJ5KFJlcG9ydEdyb3VwVHlwZS5XRUVLUyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZpZXdSZXBvcnRHcm91cEJ5TW9udGhzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1JlcG9ydEdyb3VwQnkoUmVwb3J0R3JvdXBUeXBlLk1PTlRIUyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZpZXdSZXBvcnRHcm91cEJ5WWVhcnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3UmVwb3J0R3JvdXBCeShSZXBvcnRHcm91cFR5cGUuWUVBUlMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2aWV3UmVwb3J0R3JvdXBCeShncm91cFR5cGU6IFJlcG9ydEdyb3VwVHlwZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBUeXBlID0gZ3JvdXBUeXBlO1xyXG4gICAgICAgIHRoaXMubGluZURpYWdyYW1zUmVwb3J0RGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zdGF0aXN0aWNSZXBvcnRzU2VydmljZS52aWV3TWF0ZXJpYWxVcGxvYWRSZXBvcnQodGhpcy5yZXBvcnRUYXJnZXQsIHRoaXMuZ3JvdXBUeXBlLCB0aGlzLm93bmVySWRzLCB0aGlzLm1hdGVyaWFsVHlwZUlkcyxcclxuICAgICAgICAgICAgICAgIHRoaXMuc3ViamVjdElkcywgTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuZGF0ZUZyb21UZXh0KSwgTW9tZW50LnRleHRUb0phdmFEYXRlKHRoaXMuZGF0ZVRvVGV4dCkpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXBvcnQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMubGluZURpYWdyYW1zUmVwb3J0T3B0aW9ucy5zZXJpZXMgPSB0aGlzLnJlcG9ydFRhcmdldE5hbWVzTWFrZXIubWFrZSh0aGlzLnJlcG9ydCwgKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtsYWJlbDogbmFtZSwgbWFya2VyT3B0aW9uczoge3N0eWxlOiBcImNpcmNsZVwiLCBzaXplOiAxfX1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMubGluZURpYWdyYW1zUmVwb3J0RGF0YSA9IHRoaXMubGluZURpYWdyYW1zUmVwb3J0V3JpdGVyLnJlcG9ydGluZyh0aGlzLnJlcG9ydCwgKHZhbHVlOiBBcnJheTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW21vbWVudCh2YWx1ZVswXSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSwgdmFsdWVbMV1dO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDdXJyZW50T3duZXJzUmVwb3J0VGFyZ2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcG9ydFRhcmdldCA9PSBNYXRlcmlhbFJlcG9ydFRhcmdldC5PV05FUlM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ3VycmVudE1hdGVyaWFsVHlwZXNSZXBvcnRUYXJnZXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwb3J0VGFyZ2V0ID09IE1hdGVyaWFsUmVwb3J0VGFyZ2V0Lk1BVEVSSUFMX1RZUEVTO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0N1cnJlbnRTdWJqZWN0c1JlcG9ydFRhcmdldCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvcnRUYXJnZXQgPT0gTWF0ZXJpYWxSZXBvcnRUYXJnZXQuU1VCSkVDVFM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEN1cnJlbnRPd25lcnNSZXBvcnRUYXJnZXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50UmVwb3J0VGFyZ2V0KE1hdGVyaWFsUmVwb3J0VGFyZ2V0Lk9XTkVSUywgbmV3IE93bmVyTmFtZXNNYWtlcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Q3VycmVudE1hdGVyaWFsVHlwZXNSZXBvcnRUYXJnZXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50UmVwb3J0VGFyZ2V0KE1hdGVyaWFsUmVwb3J0VGFyZ2V0Lk1BVEVSSUFMX1RZUEVTLCBuZXcgTWF0ZXJpYWxUeXBlTmFtZXNNYWtlcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Q3VycmVudFN1YmplY3RzUmVwb3J0VGFyZ2V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFJlcG9ydFRhcmdldChNYXRlcmlhbFJlcG9ydFRhcmdldC5TVUJKRUNUUywgbmV3IFN1YmplY3ROYW1lc01ha2VyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRPd25lcnNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCIvYXBpL3VzZXJTZWxlY3Rvci91c2Vyc0ZvckN1cnJlbnRVc2VyXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRDdXJyZW50UmVwb3J0VGFyZ2V0KHJlcG9ydFRhcmdldDogTWF0ZXJpYWxSZXBvcnRUYXJnZXQsIHJlcG9ydFRhcmdldE5hbWVzTWFrZXI6IElSZXBvcnRUYXJnZXROYW1lc01ha2VyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vd25lcklkcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxUeXBlSWRzID0gW107XHJcbiAgICAgICAgdGhpcy5zdWJqZWN0SWRzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXBvcnRUYXJnZXQgPSByZXBvcnRUYXJnZXQ7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRUYXJnZXROYW1lc01ha2VyID0gcmVwb3J0VGFyZ2V0TmFtZXNNYWtlcjtcclxuICAgIH1cclxufSIsImltcG9ydCB7QmFzZVJlcG9ydENvbnRyb2xsZXJ9IGZyb20gXCIuL0Jhc2VSZXBvcnRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxSZXBvcnRUYXJnZXR9IGZyb20gXCIuL21vZGVscy9NYXRlcmlhbFJlcG9ydFRhcmdldFwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydFJlc3VsdH0gZnJvbSBcIi4vbW9kZWxzL1N0YXRpc3RpY1JlcG9ydFJlc3VsdFwiO1xyXG5pbXBvcnQge1JlcG9ydEdyb3VwVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1JlcG9ydEdyb3VwVHlwZVwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlfSBmcm9tIFwiLi9TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5pbXBvcnQge0lSZXBvcnRXcml0ZXIsIExpbmVEaWFncmFtc1JlcG9ydFdyaXRlcn0gZnJvbSBcIi4vdXRpbHMvUmVwb3J0V3JpdGVyc1wiO1xyXG5pbXBvcnQge2dldExpbmVEaWFncmFtc1JlcG9ydE9wdGlvbnN9IGZyb20gXCIuL3V0aWxzL1JlcG9ydE9wdGlvbnNcIjtcclxuaW1wb3J0IHtJUmVwb3J0VGFyZ2V0TmFtZXNNYWtlciwgT3duZXJOYW1lc01ha2VyLCBNYXRlcmlhbFR5cGVOYW1lc01ha2VyLCBTdWJqZWN0TmFtZXNNYWtlcn0gZnJvbSBcIi4vdXRpbHMvUmVwb3J0VGFyZ2V0TmFtZXNNYWtlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lTdWJqZWN0fSBmcm9tIFwiLi8uLi9JU3ViamVjdFwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi8uLi91c2Vycy9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi8uLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIi4vLi4vdXRpbHMvTW9tZW50XCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFZpZXdSZXBvcnRDb250cm9sbGVyIGV4dGVuZHMgQmFzZVJlcG9ydENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJzdGF0aXN0aWNzLk1hdGVyaWFsVmlld1JlcG9ydENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwcml2YXRlIHJlcG9ydDogU3RhdGlzdGljUmVwb3J0UmVzdWx0PGFueSwgQXJyYXk8YW55PiwgbnVtYmVyPjtcclxuICAgIHByaXZhdGUgbGluZURpYWdyYW1zUmVwb3J0V3JpdGVyOiBJUmVwb3J0V3JpdGVyID0gbmV3IExpbmVEaWFncmFtc1JlcG9ydFdyaXRlcigpO1xyXG4gICAgcHJpdmF0ZSByZXBvcnRUYXJnZXROYW1lc01ha2VyOiBJUmVwb3J0VGFyZ2V0TmFtZXNNYWtlcjtcclxuICAgIHByaXZhdGUgcmVwb3J0VGFyZ2V0OiBNYXRlcmlhbFJlcG9ydFRhcmdldDtcclxuICAgIHByaXZhdGUgZ3JvdXBUeXBlOiBSZXBvcnRHcm91cFR5cGUgPSBSZXBvcnRHcm91cFR5cGUuREFZUztcclxuXHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBvd25lcklkczogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgcHVibGljIG1hdGVyaWFsVHlwZUlkczogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgcHVibGljIHN1YmplY3RJZHM6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuICAgIHB1YmxpYyBkYXRlRnJvbVRleHQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBkYXRlVG9UZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGxpbmVEaWFncmFtc1JlcG9ydERhdGE6IEFycmF5PGFueT4gPSBudWxsO1xyXG4gICAgcHVibGljIGxpbmVEaWFncmFtc1JlcG9ydE9wdGlvbnM6IGFueSA9IGdldExpbmVEaWFncmFtc1JlcG9ydE9wdGlvbnMoXCJUaGUgcmVwb3J0IG9uIG1hdGVyaWFsIHZpZXdzXCIpO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBTdGF0aXN0aWNSZXBvcnRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0aXN0aWNSZXBvcnRzU2VydmljZTogU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNBcGk6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKCk7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BTkFMWVRJQ1NfTUFURVJJQUxfVklFV19SRVBPUlRfTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiVGhlIHJlcG9ydCBvbiBtYXRlcmlhbCB2aWV3c1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc0FwaS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4oc3lzdGVtUGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gc3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN5c3RlbVBlcm1pc3Npb25zLnZpZXdBbmFseXRpY3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0VGFyZ2V0ID0gTWF0ZXJpYWxSZXBvcnRUYXJnZXQuT1dORVJTO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRUYXJnZXROYW1lc01ha2VyID0gbmV3IE93bmVyTmFtZXNNYWtlcigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRUYXJnZXQgPSBNYXRlcmlhbFJlcG9ydFRhcmdldC5NQVRFUklBTF9UWVBFUztcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0VGFyZ2V0TmFtZXNNYWtlciA9IG5ldyBNYXRlcmlhbFR5cGVOYW1lc01ha2VyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aWV3UmVwb3J0R3JvdXBCeURheXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVmcmVzaFJlcG9ydCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdSZXBvcnRHcm91cEJ5KHRoaXMuZ3JvdXBUeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlld1JlcG9ydEdyb3VwQnlEYXlzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1JlcG9ydEdyb3VwQnkoUmVwb3J0R3JvdXBUeXBlLkRBWVMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2aWV3UmVwb3J0R3JvdXBCeVdlZWtzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1JlcG9ydEdyb3VwQnkoUmVwb3J0R3JvdXBUeXBlLldFRUtTKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlld1JlcG9ydEdyb3VwQnlNb250aHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3UmVwb3J0R3JvdXBCeShSZXBvcnRHcm91cFR5cGUuTU9OVEhTKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlld1JlcG9ydEdyb3VwQnlZZWFycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdSZXBvcnRHcm91cEJ5KFJlcG9ydEdyb3VwVHlwZS5ZRUFSUyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2aWV3UmVwb3J0R3JvdXBCeShncm91cFR5cGU6IFJlcG9ydEdyb3VwVHlwZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBUeXBlID0gZ3JvdXBUeXBlO1xyXG4gICAgICAgIHRoaXMubGluZURpYWdyYW1zUmVwb3J0RGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zdGF0aXN0aWNSZXBvcnRzU2VydmljZS52aWV3TWF0ZXJpYWxWaWV3UmVwb3J0KHRoaXMucmVwb3J0VGFyZ2V0LCB0aGlzLmdyb3VwVHlwZSwgdGhpcy5vd25lcklkcywgdGhpcy5tYXRlcmlhbFR5cGVJZHMsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YmplY3RJZHMsIE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmRhdGVGcm9tVGV4dCksIE1vbWVudC50ZXh0VG9KYXZhRGF0ZSh0aGlzLmRhdGVUb1RleHQpKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVwb3J0ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVEaWFncmFtc1JlcG9ydE9wdGlvbnMuc2VyaWVzID0gdGhpcy5yZXBvcnRUYXJnZXROYW1lc01ha2VyLm1ha2UodGhpcy5yZXBvcnQsIChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7bGFiZWw6IG5hbWUsIG1hcmtlck9wdGlvbnM6IHtzdHlsZTogXCJjaXJjbGVcIiwgc2l6ZTogMX19XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVEaWFncmFtc1JlcG9ydERhdGEgPSB0aGlzLmxpbmVEaWFncmFtc1JlcG9ydFdyaXRlci5yZXBvcnRpbmcodGhpcy5yZXBvcnQsICh2YWx1ZTogQXJyYXk8YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFttb21lbnQodmFsdWVbMF0pLmZvcm1hdChcIllZWVktTU0tRERcIiksIHZhbHVlWzFdXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ3VycmVudE93bmVyc1JlcG9ydFRhcmdldCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvcnRUYXJnZXQgPT0gTWF0ZXJpYWxSZXBvcnRUYXJnZXQuT1dORVJTO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0N1cnJlbnRNYXRlcmlhbFR5cGVzUmVwb3J0VGFyZ2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcG9ydFRhcmdldCA9PSBNYXRlcmlhbFJlcG9ydFRhcmdldC5NQVRFUklBTF9UWVBFUztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDdXJyZW50U3ViamVjdHNSZXBvcnRUYXJnZXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwb3J0VGFyZ2V0ID09IE1hdGVyaWFsUmVwb3J0VGFyZ2V0LlNVQkpFQ1RTO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRDdXJyZW50T3duZXJzUmVwb3J0VGFyZ2V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFJlcG9ydFRhcmdldChNYXRlcmlhbFJlcG9ydFRhcmdldC5PV05FUlMsIG5ldyBPd25lck5hbWVzTWFrZXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEN1cnJlbnRNYXRlcmlhbFR5cGVzUmVwb3J0VGFyZ2V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFJlcG9ydFRhcmdldChNYXRlcmlhbFJlcG9ydFRhcmdldC5NQVRFUklBTF9UWVBFUywgbmV3IE1hdGVyaWFsVHlwZU5hbWVzTWFrZXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEN1cnJlbnRTdWJqZWN0c1JlcG9ydFRhcmdldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldEN1cnJlbnRSZXBvcnRUYXJnZXQoTWF0ZXJpYWxSZXBvcnRUYXJnZXQuU1VCSkVDVFMsIG5ldyBTdWJqZWN0TmFtZXNNYWtlcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0T3duZXJzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiL2FwaS91c2VyU2VsZWN0b3IvdXNlcnNGb3JDdXJyZW50VXNlclwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0Q3VycmVudFJlcG9ydFRhcmdldChyZXBvcnRUYXJnZXQ6IE1hdGVyaWFsUmVwb3J0VGFyZ2V0LCByZXBvcnRUYXJnZXROYW1lc01ha2VyOiBJUmVwb3J0VGFyZ2V0TmFtZXNNYWtlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3duZXJJZHMgPSBbXTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsVHlwZUlkcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3ViamVjdElkcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVwb3J0VGFyZ2V0ID0gcmVwb3J0VGFyZ2V0O1xyXG4gICAgICAgIHRoaXMucmVwb3J0VGFyZ2V0TmFtZXNNYWtlciA9IHJlcG9ydFRhcmdldE5hbWVzTWFrZXI7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1N0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlfSBmcm9tIFwiLi9TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJUG93ZXJCaUVtYmVkZGVkUmVwb3J0RW50cnl9IGZyb20gXCIuL21vZGVscy9Qb3dlckJpRW1iZWRkZWRSZXBvcnRFbnRyeVwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY3NSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1N0YXRpc3RpY3NSb3V0ZXJcIjtcclxuaW1wb3J0IElSb3V0ZVBhcmFtc1NlcnZpY2UgPSBhbmd1bGFyLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2U7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG93ZXJCaVJlcG9ydENvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJzdGF0aXN0aWNzLlBvd2VyQmlSZXBvcnRDb250cm9sbGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnM7XHJcbiAgICBwdWJsaWMgcmVwb3J0OiBhbnk7XHJcbiAgICBwdWJsaWMgZnJhbWVVcmw6IHN0cmluZztcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRJZDogbnVtYmVyO1xyXG4gICAgcHVibGljIGlzRW1iZWRkZWRMaW5rOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHJlZGlyZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRzY2VcIixcclxuICAgICAgICBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBTdGF0aXN0aWNSZXBvcnRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFN0YXRpc3RpY3NSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRyb3V0ZVBhcmFtczogSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjZTogYW5ndWxhci5JU0NFU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlOiBTdGF0aXN0aWNSZXBvcnRzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHN0YXRpc3RpY3NSb3V0ZXI6IFN0YXRpc3RpY3NSb3V0ZXIpIHtcclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmRBdXRoZW50aWNhdGlvbigpO1xyXG4gICAgICAgIGxldCByZXBvcnRUeXBlID0gJHJvdXRlUGFyYW1zW1N0YXRpc3RpY3NSb3V0ZXIuUkVQT1JUX1RZUEVfS0VZX1BBUkFNXTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFOQUxZVElDU19NRU5VX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGlzdGljUmVwb3J0c1NlcnZpY2UuZ2V0Q29uZmlndXJhdGVkUG93ZXJCaUxpbmsoKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhcmVzdWx0LmxpbmspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyYW1lVXJsID0gdGhpcy4kc2NlLnRydXN0QXNSZXNvdXJjZVVybChyZXN1bHQubGluayk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRJZCA9IHJlc3VsdC5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRW1iZWRkZWRMaW5rID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0aXN0aWNSZXBvcnRzU2VydmljZS5nZW5lcmF0ZVBvd2VyQmlSZXBvcnRUb2tlbihyZXBvcnRUeXBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoZW1iZWRkZWRSZXBvcnQ6IElQb3dlckJpRW1iZWRkZWRSZXBvcnRFbnRyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtYmVkZGVkUmVwb3J0ICYmIGVtYmVkZGVkUmVwb3J0LnRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGVscyA9IHdpbmRvd1sncG93ZXJiaS1jbGllbnQnXS5tb2RlbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVtYmVkQ29uZmlndXJhdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3JlcG9ydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbWJlZGRlZFJlcG9ydC5yZXBvcnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1iZWRVcmw6ICdodHRwczovL2FwcC5wb3dlcmJpLmNvbS9yZXBvcnRFbWJlZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuVHlwZTogbW9kZWxzLlRva2VuVHlwZS5FbWJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzVG9rZW46IGVtYmVkZGVkUmVwb3J0LnRva2VuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFuZUVuYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydCA9IHdpbmRvd1sncG93ZXJiaSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5lbWJlZCh3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwb3dlckJpRW1iZWRkZWRSZXBvcnRDb250YWluZXJcIiksIGVtYmVkQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLndhcm5pbmcoXCJQb3dlciBCSSByZXBvcnRzIG5vdCBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIlBvd2VyIEJJIHJlcG9ydHMgbm90IGNvbmZpZ3VyZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZnVsbFNjcmVlbigpIHtcclxuICAgICAgICBpZiAoISF0aGlzLnJlcG9ydCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydC5mdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXBvcnRCaUVtYmVkZGVkXCIpLnJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93Q3JlYXRpb25Nb2RhbCgpIHtcclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNjcmVhdGlvbkRpYWxvZ1wiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9CYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVkaXJlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TWF0ZXJpYWxSZXBvcnRUYXJnZXR9IGZyb20gXCIuL21vZGVscy9NYXRlcmlhbFJlcG9ydFRhcmdldFwiO1xyXG5pbXBvcnQge1N0YXRpc3RpY1JlcG9ydFJlc3VsdH0gZnJvbSBcIi4vbW9kZWxzL1N0YXRpc3RpY1JlcG9ydFJlc3VsdFwiO1xyXG5pbXBvcnQge1JlcG9ydEdyb3VwVHlwZX0gZnJvbSBcIi4vbW9kZWxzL1JlcG9ydEdyb3VwVHlwZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUGFpcn0gZnJvbSBcIi4vLi4vSVBhaXJcIjtcclxuaW1wb3J0IElQcm9taXNlID0gYW5ndWxhci5JUHJvbWlzZTtcclxuaW1wb3J0IHtJUG93ZXJCaUVtYmVkZGVkUmVwb3J0RW50cnl9IGZyb20gXCIuL21vZGVscy9Qb3dlckJpRW1iZWRkZWRSZXBvcnRFbnRyeVwiO1xyXG5pbXBvcnQge0lTdGF0aXN0aWNGb3JBZG1pbkVudHJ5fSBmcm9tIFwiLi9tb2RlbHMvSVN0YXRpc3RpY0ZvckFkbWluRW50cnlcIjtcclxuaW1wb3J0IHtJU3RhdGlzdGljRm9yQXR0ZW5kZWVNYW5hZ2VyQW5kSW5zdHJ1Y3RvckVudHJ5fSBmcm9tIFwiLi9tb2RlbHMvSVN0YXRpc3RpY0ZvckF0dGVuZGVlTWFuYWdlckFuZEluc3RydWN0b3JFbnRyeVwiO1xyXG5pbXBvcnQge0lOb3RpZmljYXRpb25Db3VudHN9IGZyb20gXCIuLi9ob21lL21vZGVscy9JTm90aWZpY2F0aW9uQ291bnRzXCI7XHJcbmltcG9ydCB7SVN0YXRpc3RpY0ZvckF1dGhvckVudHJ5fSBmcm9tIFwiLi9tb2RlbHMvSVN0YXRpc3RpY0ZvckF1dGhvckVudHJ5XCI7XHJcbmltcG9ydCB7SVBvd2VyQmlFbWJlZGRlZExpbmtFbnRyeX0gZnJvbSBcIi4vbW9kZWxzL1Bvd2VyQmlFbWJlZGRlZExpbmtFbnRyeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXRpc3RpY1JlcG9ydHNTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwic3RhdGlzdGljcy5TdGF0aXN0aWNSZXBvcnRzU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IG5nLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZpZXdNYXRlcmlhbFZpZXdSZXBvcnQocmVwb3J0VGFyZ2V0OiBNYXRlcmlhbFJlcG9ydFRhcmdldCwgZ3JvdXBUeXBlOiBSZXBvcnRHcm91cFR5cGUsIG93bmVySWRzOiBBcnJheTxudW1iZXI+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxUeXBlSWRzOiBBcnJheTxudW1iZXI+LCBzdWJqZWN0SWRzOiBBcnJheTxudW1iZXI+LCBkYXRlRnJvbTogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZVRvOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxTdGF0aXN0aWNSZXBvcnRSZXN1bHQ8YW55LCBBcnJheTxhbnk+LCBudW1iZXI+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9zdGF0aXN0aWNzL3JlcG9ydHMvbWF0ZXJpYWxzL3ZpZXdzL2J5LzpyZXBvcnRUYXJnZXQvZ3JvdXBCeS86Z3JvdXBUeXBlXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpyZXBvcnRUYXJnZXRcIiwgTWF0ZXJpYWxSZXBvcnRUYXJnZXRbcmVwb3J0VGFyZ2V0XSlcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmdyb3VwVHlwZVwiLCBSZXBvcnRHcm91cFR5cGVbZ3JvdXBUeXBlXSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwge1xyXG4gICAgICAgICAgICAgICAgb3duZXJJZHM6IG93bmVySWRzLFxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxUeXBlSWRzOiBtYXRlcmlhbFR5cGVJZHMsXHJcbiAgICAgICAgICAgICAgICBzdWJqZWN0SWRzOiBzdWJqZWN0SWRzLFxyXG4gICAgICAgICAgICAgICAgZGF0ZUZyb206IGRhdGVGcm9tLFxyXG4gICAgICAgICAgICAgICAgZGF0ZVRvOiBkYXRlVG99KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gdGhpcy5maWxsTWlzc2luZ0RhdGUocmVzdWx0LmRhdGEsIGRhdGVGcm9tLCBkYXRlVG8sIGdyb3VwVHlwZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2aWV3TWF0ZXJpYWxEb3dubG9hZFJlcG9ydChyZXBvcnRUYXJnZXQ6IE1hdGVyaWFsUmVwb3J0VGFyZ2V0LCBncm91cFR5cGU6IFJlcG9ydEdyb3VwVHlwZSwgb3duZXJJZHM6IEFycmF5PG51bWJlcj4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxUeXBlSWRzOiBBcnJheTxudW1iZXI+LCBzdWJqZWN0SWRzOiBBcnJheTxudW1iZXI+LCBkYXRlRnJvbTogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVUbzogbnVtYmVyKTogbmcuSVByb21pc2U8U3RhdGlzdGljUmVwb3J0UmVzdWx0PGFueSwgQXJyYXk8YW55PiwgbnVtYmVyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShcIi9hcGkvc3RhdGlzdGljcy9yZXBvcnRzL21hdGVyaWFscy9kb3dubG9hZHMvYnkvOnJlcG9ydFRhcmdldC9ncm91cEJ5Lzpncm91cFR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnJlcG9ydFRhcmdldFwiLCBNYXRlcmlhbFJlcG9ydFRhcmdldFtyZXBvcnRUYXJnZXRdKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Z3JvdXBUeXBlXCIsIFJlcG9ydEdyb3VwVHlwZVtncm91cFR5cGVdKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB7XHJcbiAgICAgICAgICAgICAgICBvd25lcklkczogb3duZXJJZHMsXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbFR5cGVJZHM6IG1hdGVyaWFsVHlwZUlkcyxcclxuICAgICAgICAgICAgICAgIHN1YmplY3RJZHM6IHN1YmplY3RJZHMsXHJcbiAgICAgICAgICAgICAgICBkYXRlRnJvbTogZGF0ZUZyb20sXHJcbiAgICAgICAgICAgICAgICBkYXRlVG86IGRhdGVUb30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLmZpbGxNaXNzaW5nRGF0ZShyZXN1bHQuZGF0YSwgZGF0ZUZyb20sIGRhdGVUbywgZ3JvdXBUeXBlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZpZXdNYXRlcmlhbFVwbG9hZFJlcG9ydChyZXBvcnRUYXJnZXQ6IE1hdGVyaWFsUmVwb3J0VGFyZ2V0LCBncm91cFR5cGU6IFJlcG9ydEdyb3VwVHlwZSwgb3duZXJJZHM6IEFycmF5PG51bWJlcj4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsVHlwZUlkczogQXJyYXk8bnVtYmVyPiwgc3ViamVjdElkczogQXJyYXk8bnVtYmVyPiwgZGF0ZUZyb206IG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZVRvOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxTdGF0aXN0aWNSZXBvcnRSZXN1bHQ8YW55LCBBcnJheTxhbnk+LCBudW1iZXI+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS9zdGF0aXN0aWNzL3JlcG9ydHMvbWF0ZXJpYWxzL3VwbG9hZHMvYnkvOnJlcG9ydFRhcmdldC9ncm91cEJ5Lzpncm91cFR5cGVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnJlcG9ydFRhcmdldFwiLCBNYXRlcmlhbFJlcG9ydFRhcmdldFtyZXBvcnRUYXJnZXRdKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6Z3JvdXBUeXBlXCIsIFJlcG9ydEdyb3VwVHlwZVtncm91cFR5cGVdKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpLCB7XHJcbiAgICAgICAgICAgICAgICBvd25lcklkczogb3duZXJJZHMsXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbFR5cGVJZHM6IG1hdGVyaWFsVHlwZUlkcyxcclxuICAgICAgICAgICAgICAgIHN1YmplY3RJZHM6IHN1YmplY3RJZHMsXHJcbiAgICAgICAgICAgICAgICBkYXRlRnJvbTogZGF0ZUZyb20sXHJcbiAgICAgICAgICAgICAgICBkYXRlVG86IGRhdGVUb30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLmZpbGxNaXNzaW5nRGF0ZShyZXN1bHQuZGF0YSwgZGF0ZUZyb20sIGRhdGVUbywgZ3JvdXBUeXBlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdlbmVyYXRlUG93ZXJCaVJlcG9ydFRva2VuKHJlcG9ydFR5cGU/OiBzdHJpbmcpOiBJUHJvbWlzZTxJUG93ZXJCaUVtYmVkZGVkUmVwb3J0RW50cnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3JlcG9ydHMvcG93ZXJiaS9lbWJlZGRlZFRva2VuP3JlcG9ydFR5cGU9XCIgKyAocmVwb3J0VHlwZSA/IHJlcG9ydFR5cGUgOiBcIlwiKSlcclxuICAgICAgICApXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbmZpZ3VyYXRlZFBvd2VyQmlMaW5rKCk6IElQcm9taXNlPElQb3dlckJpRW1iZWRkZWRMaW5rRW50cnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvcmVwb3J0cy9wb3dlcmJpL2VtYmVkZGVkTGlua1wiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbGxNaXNzaW5nRGF0ZShyZXBvcnQ6IFN0YXRpc3RpY1JlcG9ydFJlc3VsdDxhbnksIEFycmF5PGFueT4sIG51bWJlcj4sIGRhdGVGcm9tOiBudW1iZXIsIGRhdGVUbzogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBUeXBlOiBSZXBvcnRHcm91cFR5cGUpOiBTdGF0aXN0aWNSZXBvcnRSZXN1bHQ8YW55LCBBcnJheTxhbnk+LCBudW1iZXI+IHtcclxuICAgICAgICBkYXRlRnJvbSA9IGRhdGVGcm9tICE9IG51bGwgPyBkYXRlRnJvbSA6IHJlcG9ydC5ncm91cGVkVmFsdWVzWzBdO1xyXG4gICAgICAgIGRhdGVUbyA9IGRhdGVUbyAhPSBudWxsID8gZGF0ZVRvIDogcmVwb3J0Lmdyb3VwZWRWYWx1ZXNbcmVwb3J0Lmdyb3VwZWRWYWx1ZXMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIHJlcG9ydC5kYXRhLmZvckVhY2goKGQ6IElQYWlyPGFueSwgQXJyYXk8YW55Pj4pID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlTWFwOiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcclxuICAgICAgICAgICAgZC52YWx1ZS5mb3JFYWNoKCh2OiBBcnJheTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZU1hcC5zZXQodlswXSwgdlsxXSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgbmV3VmFsdWVzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgICAgICAgIGxldCBmcm9tID0gbW9tZW50KGRhdGVGcm9tKTtcclxuICAgICAgICAgICAgbGV0IHRvID0gbW9tZW50KGRhdGVUbykuYWRkKDEsIHRoaXMuZ2V0VW5pdE9mVGltZShncm91cFR5cGUpKTtcclxuICAgICAgICAgICAgd2hpbGUgKGZyb20uaXNCZWZvcmUodG8pKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdW5peFRpbWUgPSBmcm9tLnZhbHVlT2YoKTtcclxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlcy5wdXNoKFt1bml4VGltZSwgdmFsdWVNYXAuaGFzKHVuaXhUaW1lKSA/IHZhbHVlTWFwLmdldCh1bml4VGltZSkgOiAwXSk7XHJcbiAgICAgICAgICAgICAgICBmcm9tID0gZnJvbS5hZGQoMSwgdGhpcy5nZXRVbml0T2ZUaW1lKGdyb3VwVHlwZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGQudmFsdWUgPSBuZXdWYWx1ZXM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXBvcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVbml0T2ZUaW1lKGdyb3VwVHlwZTogUmVwb3J0R3JvdXBUeXBlKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKGdyb3VwVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFJlcG9ydEdyb3VwVHlwZS5EQVlTOiByZXR1cm4gJ2QnO1xyXG4gICAgICAgICAgICBjYXNlIFJlcG9ydEdyb3VwVHlwZS5XRUVLUzogcmV0dXJuICd3JztcclxuICAgICAgICAgICAgY2FzZSBSZXBvcnRHcm91cFR5cGUuTU9OVEhTOiByZXR1cm4gJ00nO1xyXG4gICAgICAgICAgICBjYXNlIFJlcG9ydEdyb3VwVHlwZS5ZRUFSUzogcmV0dXJuICd5JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEluZm9Gb3JBZG1pbigpOiBJUHJvbWlzZTxJU3RhdGlzdGljRm9yQWRtaW5FbnRyeT4gIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3N0YXRpc3RpY3MvcmVwb3J0cy9hZG1pbi9pbmZvXCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbmZvRm9yTGVhcm5lcigpOiBJUHJvbWlzZTxJU3RhdGlzdGljRm9yQWRtaW5FbnRyeT4gIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3N0YXRpc3RpY3MvcmVwb3J0cy9sZWFybmVyL2luZm9cIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN0YXRpc3RpY0ZvckF1dGhvcigpOiBJUHJvbWlzZTxJU3RhdGlzdGljRm9yQXV0aG9yRW50cnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvc3RhdGlzdGljcy9yZXBvcnRzL2F1dGhvci9pbmZvXCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbmZvRm9yQXR0ZW5kZWVNYW5hZ2VyKCk6IElQcm9taXNlPElTdGF0aXN0aWNGb3JBdHRlbmRlZU1hbmFnZXJBbmRJbnN0cnVjdG9yRW50cnk+ICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zdGF0aXN0aWNzL3JlcG9ydHMvYXR0ZW5kZWVNYW5hZ2VyL2luZm9cIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEluZm9Gb3JJbnN0cnVjdG9yKCk6IElQcm9taXNlPElTdGF0aXN0aWNGb3JBdHRlbmRlZU1hbmFnZXJBbmRJbnN0cnVjdG9yRW50cnk+ICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zdGF0aXN0aWNzL3JlcG9ydHMvaW5zdHJ1Y3Rvci9pbmZvXCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbnN0cnVjdG9yTm90aWZpY2F0aW9uc0NvdW50cygpOiBJUHJvbWlzZTxJTm90aWZpY2F0aW9uQ291bnRzPiAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcIi9hcGkvc3RhdGlzdGljcy9yZXBvcnRzL2luc3RydWN0b3Ivbm90aWZpY2F0aW9uc1wiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW5zdHJ1Y3Rvck5vdGlmaWNhdGlvbnNOZXdDb3VudHMoKTogSVByb21pc2U8SU5vdGlmaWNhdGlvbkNvdW50cz4gIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3N0YXRpc3RpY3MvcmVwb3J0cy9pbnN0cnVjdG9yL25vdGlmaWNhdGlvbnMvbmV3XCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdHRlbmRlZU1hbmFnZXJOb3RpZmljYXRpb25zQ291bnRzKCk6IElQcm9taXNlPElOb3RpZmljYXRpb25Db3VudHM+ICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS9zdGF0aXN0aWNzL3JlcG9ydHMvYXR0ZW5kZWVNYW5hZ2VyL25vdGlmaWNhdGlvbnNcIikpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtTdGF0aXN0aWNSZXBvcnRzU2VydmljZX0gZnJvbSBcIi4vU3RhdGlzdGljUmVwb3J0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBY3Rpb25Mb2dTZXJ2aWNlfSBmcm9tIFwiLi9BY3Rpb25Mb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q291cnNlQWN0aW9uTG9nU2VydmljZX0gZnJvbSBcIi4vQ291cnNlQWN0aW9uTG9nU2VydmljZVwiO1xyXG5pbXBvcnQge01hdGVyaWFsVmlld1JlcG9ydENvbnRyb2xsZXJ9IGZyb20gXCIuL01hdGVyaWFsVmlld1JlcG9ydENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbERvd25sb2FkUmVwb3J0Q29udHJvbGxlcn0gZnJvbSBcIi4vTWF0ZXJpYWxEb3dubG9hZFJlcG9ydENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtNYXRlcmlhbFVwbG9hZFJlcG9ydENvbnRyb2xsZXJ9IGZyb20gXCIuL01hdGVyaWFsVXBsb2FkUmVwb3J0Q29udHJvbGxlclwiO1xyXG5cclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCIuLy4uL2NvbW1vbi9Db21tb25Nb2R1bGVcIjtcclxuaW1wb3J0IHtTZWN1cml0eU1vZHVsZX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvU2VjdXJpdHlNb2R1bGVcIjtcclxuaW1wb3J0IHtVcmxzTW9kdWxlfSBmcm9tIFwiLi8uLi91cmxzL1VybHNNb2R1bGVcIjtcclxuaW1wb3J0IHtQb3dlckJpUmVwb3J0Q29udHJvbGxlcn0gZnJvbSBcIi4vUG93ZXJCaVJlcG9ydENvbnRyb2xsZXJcIjtcclxuXHJcbmV4cG9ydCB2YXIgU3RhdGlzdGljc01vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgLm1vZHVsZShcInN0YXRpc3RpY3NcIiwgW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZS5uYW1lLFxyXG4gICAgICAgIFNlY3VyaXR5TW9kdWxlLm5hbWUsXHJcbiAgICAgICAgVXJsc01vZHVsZS5uYW1lXHJcbiAgICBdKVxyXG4gICAgLnNlcnZpY2UoU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UuTkFNRSwgU3RhdGlzdGljUmVwb3J0c1NlcnZpY2UpXHJcbiAgICAuc2VydmljZShBY3Rpb25Mb2dTZXJ2aWNlLk5BTUUsIEFjdGlvbkxvZ1NlcnZpY2UpXHJcbiAgICAuc2VydmljZShDb3Vyc2VBY3Rpb25Mb2dTZXJ2aWNlLk5BTUUsIENvdXJzZUFjdGlvbkxvZ1NlcnZpY2UpXHJcbiAgICAuY29udHJvbGxlcihNYXRlcmlhbFZpZXdSZXBvcnRDb250cm9sbGVyLk5BTUUsIE1hdGVyaWFsVmlld1JlcG9ydENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihNYXRlcmlhbERvd25sb2FkUmVwb3J0Q29udHJvbGxlci5OQU1FLCBNYXRlcmlhbERvd25sb2FkUmVwb3J0Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKE1hdGVyaWFsVXBsb2FkUmVwb3J0Q29udHJvbGxlci5OQU1FLCBNYXRlcmlhbFVwbG9hZFJlcG9ydENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihQb3dlckJpUmVwb3J0Q29udHJvbGxlci5OQU1FLCBQb3dlckJpUmVwb3J0Q29udHJvbGxlcik7IiwiZXhwb3J0IGVudW0gQWN0aW9uVHlwZSB7XHJcblxyXG4gICAgLy8gTWF0ZXJpYWwgQWN0aW9uc1xyXG4gICAgTUFURVJJQUxfVklFVyxcclxuICAgIE1BVEVSSUFMX0NSRUFUSU9OLFxyXG4gICAgTUFURVJJQUxfRE9XTkxPQUQsXHJcbiAgICBNQVRFUklBTF9QVVJDSEFTRSxcclxuXHJcbiAgICAvLyBQbGF5bGlzdCBBY3Rpb25zXHJcbiAgICBQTEFZTElTVF9WSUVXLFxyXG5cclxuICAgIC8vIENvdXJzZSBBY3Rpb25zXHJcbiAgICBDT1VSU0VfQ09NUExFVElPTixcclxuXHJcbiAgICAvLyBPdGhlciBBY3Rpb25zXHJcbiAgICBMT0dJTlxyXG59IiwiZXhwb3J0IGVudW0gQ291cnNlQWN0aW9uVHlwZSB7XHJcbiAgICBDT1VSU0VfU1RBUlRFRCxcclxuICAgIENPVVJTRV9DT01QTEVURUQsXHJcbiAgICBTRUNUSU9OX1ZJRVcsXHJcbiAgICBRVUlaX0NPTVBMRVRFLFxyXG4gICAgU1VSVkVZX0NPTVBMRVRFXHJcbn0iLCJleHBvcnQgZW51bSBNYXRlcmlhbFJlcG9ydFRhcmdldCB7XHJcbiAgICBPV05FUlMsXHJcbiAgICBNQVRFUklBTF9UWVBFUyxcclxuICAgIFNVQkpFQ1RTXHJcbn0iLCJleHBvcnQgZW51bSBSZXBvcnRHcm91cFR5cGUge1xyXG4gICAgREFZUyxcclxuICAgIFdFRUtTLFxyXG4gICAgTU9OVEhTLFxyXG4gICAgWUVBUlNcclxufSIsImV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lRGlhZ3JhbXNSZXBvcnRPcHRpb25zKHJlcG9ydE5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpdGxlOiByZXBvcnROYW1lLFxyXG4gICAgICAgIGFuaW1hdGU6IHRydWUsXHJcbiAgICAgICAgbGVnZW5kOiB7XHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIHJlbmRlcmVyOiAkWydqcXBsb3QnXVsnRW5oYW5jZWRMZWdlbmRSZW5kZXJlciddLFxyXG4gICAgICAgICAgICBwbGFjZW1lbnQ6IFwib3V0c2lkZUdyaWRcIixcclxuICAgICAgICAgICAgbG9jYXRpb246IFwibmVcIixcclxuICAgICAgICAgICAgcm93U3BhY2luZzogXCIwcHhcIixcclxuICAgICAgICAgICAgcmVuZGVyZXJPcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBzZXJpZXNUb2dnbGU6ICdub3JtYWwnLFxyXG4gICAgICAgICAgICAgICAgc2VyaWVzVG9nZ2xlUmVwbG90OiB7cmVzZXRBeGVzOiB0cnVlfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoaWdobGlnaHRlcjoge1xyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBheGVzOiB7XHJcbiAgICAgICAgICAgIHhheGlzOiB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlcjogJFsnanFwbG90J11bJ0RhdGVBeGlzUmVuZGVyZXInXSxcclxuICAgICAgICAgICAgICAgIHRpY2tPcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0U3RyaW5nOiAnJWIgJWQsICVZJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB5YXhpczp7XHJcbiAgICAgICAgICAgICAgICB0aWNrT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdFN0cmluZzogJyUuMGYnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SG9yaXpvbnRhbEJhckRpYWdyYW1PcHRpb25zKGRpYWdyYW1OYW1lOiBzdHJpbmcsIGN1c3RvbU9wdHM6IGFueSk6IGFueSB7XHJcbiAgICBjdXN0b21PcHRzID0gY3VzdG9tT3B0cyB8fCB7fTtcclxuICAgIGN1c3RvbU9wdHMuYXhlcyA9IGN1c3RvbU9wdHMuYXhlcyB8fCB7fTtcclxuICAgIGN1c3RvbU9wdHMuYXhlcy54YXhpcyA9IGN1c3RvbU9wdHMuYXhlcy54YXhpcyB8fCB7fTtcclxuICAgIGN1c3RvbU9wdHMuYXhlcy54YXhpcy50aWNrT3B0aW9ucyA9IGN1c3RvbU9wdHMuYXhlcy54YXhpcy50aWNrT3B0aW9ucyB8fCB7fTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdGl0bGU6IGRpYWdyYW1OYW1lLFxyXG4gICAgICAgIGFuaW1hdGU6IHRydWUsXHJcbiAgICAgICAgc2VyaWVzQ29sb3JzOltcIiNkYWQ1NGNcIiwgXCIjMDA5Y2QyXCIsIFwiIzczQzc3NFwiLCBcIiNlYzk1NTFcIiwgXCIjYmQ4YWI2XCIsIFwiI2Y3MDBlYlwiLCBcIiM5MmJkYmNcIiwgXCIjMDAzZGZmXCIsIFwiIzllNDBkMlwiLCBcIiMwMGQyMDdcIl0sXHJcbiAgICAgICAgc2VyaWVzRGVmYXVsdHM6IHtcclxuICAgICAgICAgICAgcmVuZGVyZXI6ICRbXCJqcXBsb3RcIl1bXCJCYXJSZW5kZXJlclwiXSxcclxuICAgICAgICAgICAgZmlsbDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVuZGVyZXJPcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBiYXJEaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLFxyXG4gICAgICAgICAgICAgICAgdmFyeUJhckNvbG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgYmFyV2lkdGg6IDI1XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGhpZ2hsaWdodGVyOiB7XHJcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgICB0b29sdGlwT2Zmc2V0OiAxNSxcclxuICAgICAgICAgICAgdG9vbHRpcEF4ZXM6IFwieFwiLFxyXG4gICAgICAgICAgICB0b29sdGlwTG9jYXRpb246IFwiZVwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBheGVzOiB7XHJcbiAgICAgICAgICAgIGF1dG9zY2FsZTogY3VzdG9tT3B0cy5heGVzLmF1dG9zY2FsZSB8fCBmYWxzZSxcclxuICAgICAgICAgICAgeGF4aXM6IHtcclxuICAgICAgICAgICAgICAgIG1pbjogY3VzdG9tT3B0cy5heGVzLnhheGlzLm1pbiAgfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgIG1heDogY3VzdG9tT3B0cy5heGVzLnhheGlzLm1heCAgfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgIHRpY2tPcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0U3RyaW5nOiBjdXN0b21PcHRzLmF4ZXMueGF4aXMudGlja09wdGlvbnMuZm9ybWF0U3RyaW5nIHx8IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0dyaWRsaW5lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdWZmaXg6IGN1c3RvbU9wdHMuYXhlcy54YXhpcy50aWNrT3B0aW9ucy5zdWZmaXggfHwgXCJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB5YXhpczp7XHJcbiAgICAgICAgICAgICAgICBsYWJlbFJlbmRlcmVyOiAkW1wianFwbG90XCJdW1wiQXhpc0xhYmVsUmVuZGVyZXJcIl0sXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlcjogJFtcImpxcGxvdFwiXVtcIkNhdGVnb3J5QXhpc1JlbmRlcmVyXCJdLFxyXG4gICAgICAgICAgICAgICAgdGlja09wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRTdHJpbmc6IFwiJWIgJWQsICVZXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hvd0dyaWRsaW5lOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbi8vZXhwb3J0IGZ1bmN0aW9uIGdldEhpc3RvZ3JhbXNSZXBvcnRPcHRpb25zKHJlcG9ydE5hbWU6IHN0cmluZyk6IGFueSB7XHJcbi8vICAgIHJldHVybiB7XHJcbi8vICAgICAgICB0aXRsZTogcmVwb3J0TmFtZSxcclxuLy8gICAgICAgIGxlZ2VuZDoge1xyXG4vLyAgICAgICAgICAgIHNob3c6IHRydWVcclxuLy8gICAgICAgIH0sXHJcbi8vICAgICAgICBzZXJpZXNEZWZhdWx0czoge1xyXG4vLyAgICAgICAgICAgIHJlbmRlcmVyOiAkWydqcXBsb3QnXVsnQmFyUmVuZGVyZXInXSxcclxuLy8gICAgICAgICAgICBwb2ludExhYmVsczoge3Nob3c6IHRydWV9XHJcbi8vICAgICAgICB9LFxyXG4vLyAgICAgICAgYXhlczoge1xyXG4vLyAgICAgICAgICAgIHhheGlzOiB7XHJcbi8vICAgICAgICAgICAgICAgIHJlbmRlcmVyOiAkWydqcXBsb3QnXVsnQ2F0ZWdvcnlBeGlzUmVuZGVyZXInXVxyXG4vLyAgICAgICAgICAgIH1cclxuLy8gICAgICAgIH1cclxuLy8gICAgfTtcclxuLy99IiwiaW1wb3J0IHtTdGF0aXN0aWNSZXBvcnRSZXN1bHR9IGZyb20gXCIuLy4uL21vZGVscy9TdGF0aXN0aWNSZXBvcnRSZXN1bHRcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4vLi4vLi4vdXNlcnMvbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7SU1hdGVyaWFsVHlwZX0gZnJvbSBcIi4vLi4vLi4vbWF0ZXJpYWxzL21vZGVscy9NYXRlcmlhbFR5cGVcIjtcclxuaW1wb3J0IHtJU3ViamVjdH0gZnJvbSBcIi4vLi4vLi4vSVN1YmplY3RcIjtcclxuaW1wb3J0IHtJUGFpcn0gZnJvbSBcIi4vLi4vLi4vSVBhaXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVJlcG9ydFRhcmdldE5hbWVzTWFrZXIge1xyXG4gICAgbWFrZShyZXBvcnQ6IFN0YXRpc3RpY1JlcG9ydFJlc3VsdDxhbnksIEFycmF5PGFueT4sIGFueT4sIGZ1bmM6IChuYW1lOiBzdHJpbmcpID0+IGFueSk6IEFycmF5PGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPd25lck5hbWVzTWFrZXIgaW1wbGVtZW50cyBJUmVwb3J0VGFyZ2V0TmFtZXNNYWtlciB7XHJcblxyXG4gICAgcHVibGljIG1ha2UocmVwb3J0OiBTdGF0aXN0aWNSZXBvcnRSZXN1bHQ8YW55LCBBcnJheTxhbnk+LCBhbnk+LCBmdW5jOiAobmFtZTogc3RyaW5nKSA9PiBhbnkpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgICAgcmVwb3J0LmRhdGEuZm9yRWFjaCgoZDogSVBhaXI8SVVzZXIsIEFycmF5PGFueT4+KSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZ1bmMoZC5rZXkuZnVsbE5hbWUpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxUeXBlTmFtZXNNYWtlciBpbXBsZW1lbnRzIElSZXBvcnRUYXJnZXROYW1lc01ha2VyIHtcclxuXHJcbiAgICBwdWJsaWMgbWFrZShyZXBvcnQ6IFN0YXRpc3RpY1JlcG9ydFJlc3VsdDxhbnksIEFycmF5PGFueT4sIGFueT4sIGZ1bmM6IChuYW1lOiBzdHJpbmcpID0+IGFueSk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICByZXBvcnQuZGF0YS5mb3JFYWNoKChkOiBJUGFpcjxJTWF0ZXJpYWxUeXBlLCBBcnJheTxhbnk+PikgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChmdW5jKGQua2V5Lm5hbWUpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3ViamVjdE5hbWVzTWFrZXIgaW1wbGVtZW50cyBJUmVwb3J0VGFyZ2V0TmFtZXNNYWtlciB7XHJcblxyXG4gICAgcHVibGljIG1ha2UocmVwb3J0OiBTdGF0aXN0aWNSZXBvcnRSZXN1bHQ8YW55LCBBcnJheTxhbnk+LCBhbnk+LCBmdW5jOiAobmFtZTogc3RyaW5nKSA9PiBhbnkpOiBBcnJheTxhbnk+IHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgICAgcmVwb3J0LmRhdGEuZm9yRWFjaCgoZDogSVBhaXI8SVN1YmplY3QsIEFycmF5PGFueT4+KSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZ1bmMoZC5rZXkubmFtZSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1N0YXRpc3RpY1JlcG9ydFJlc3VsdH0gZnJvbSBcIi4vLi4vbW9kZWxzL1N0YXRpc3RpY1JlcG9ydFJlc3VsdFwiO1xyXG5pbXBvcnQge0lQYWlyfSBmcm9tIFwiLi8uLi8uLi9JUGFpclwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVwb3J0V3JpdGVyIHtcclxuICAgIHJlcG9ydGluZyhyZXBvcnQ6IFN0YXRpc3RpY1JlcG9ydFJlc3VsdDxhbnksIEFycmF5PGFueT4sIGFueT4sIGZ1bmM6ICh2YWx1ZTogQXJyYXk8YW55PikgPT4gYW55KTogQXJyYXk8YW55PjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpbmVEaWFncmFtc1JlcG9ydFdyaXRlciBpbXBsZW1lbnRzIElSZXBvcnRXcml0ZXIge1xyXG5cclxuICAgIHB1YmxpYyByZXBvcnRpbmcocmVwb3J0OiBTdGF0aXN0aWNSZXBvcnRSZXN1bHQ8YW55LCBBcnJheTxhbnk+LCBudW1iZXI+LCBmdW5jOiAodmFsdWU6IEFycmF5PGFueT4pID0+IGFueSk6IEFycmF5PGFueT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IEFycmF5PEFycmF5PGFueT4+ID0gW107XHJcbiAgICAgICAgcmVwb3J0LmRhdGEuZm9yRWFjaCgoZDogSVBhaXI8YW55LCBBcnJheTxhbnk+PikgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbmV3VmFsdWU6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICAgICAgZC52YWx1ZS5mb3JFYWNoKCh2OiBBcnJheTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZS5wdXNoKGZ1bmModikpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3VmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vZXhwb3J0IGNsYXNzIEhpc3RvZ3JhbXNSZXBvcnRXcml0ZXIgaW1wbGVtZW50cyBJUmVwb3J0V3JpdGVyIHtcclxuLy9cclxuLy8gICAgcHVibGljIHJlcG9ydGluZyhyZXBvcnQ6IFN0YXRpc3RpY1JlcG9ydFJlc3VsdDxhbnksIEFycmF5PGFueT4sIGFueT4pOiBBcnJheTxhbnk+IHtcclxuLy8gICAgICAgIGxldCByZXN1bHQ6IEFycmF5PEFycmF5PGFueT4+ID0gQXJyYXkuYXBwbHkobnVsbCwgQXJyYXkocmVwb3J0LmRhdGEubGVuZ3RoKSkubWFwKCgpID0+IHtcclxuLy8gICAgICAgICAgICByZXR1cm4gQXJyYXkuYXBwbHkobnVsbCwgQXJyYXkocmVwb3J0Lmdyb3VwZWRWYWx1ZXMubGVuZ3RoKSkubWFwKCgpID0+IDApXHJcbi8vICAgICAgICB9KTtcclxuLy8gICAgICAgIGxldCBncm91cGVkVmFsdWVzTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuLy8gICAgICAgIHJlcG9ydC5ncm91cGVkVmFsdWVzLmZvckVhY2goKGRhdGU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4vLyAgICAgICAgICAgIGdyb3VwZWRWYWx1ZXNNYXAuc2V0KGRhdGUsIGluZGV4KTtcclxuLy8gICAgICAgIH0pO1xyXG4vLyAgICAgICAgcmVwb3J0LmRhdGEuZm9yRWFjaCgoZDogSVBhaXI8YW55LCBBcnJheTxhbnk+PiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4vLyAgICAgICAgICAgIGQudmFsdWUuZm9yRWFjaCh2ID0+IHtcclxuLy8gICAgICAgICAgICAgICAgaWYgKGdyb3VwZWRWYWx1ZXNNYXAuaGFzKHZbMF0pKSB7XHJcbi8vICAgICAgICAgICAgICAgICAgICByZXN1bHRbaW5kZXhdW2dyb3VwZWRWYWx1ZXNNYXAuZ2V0KHZbMF0pXSA9IHZbMV07XHJcbi8vICAgICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICAgICB9KTtcclxuLy8gICAgICAgIH0pO1xyXG4vLyAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuLy8gICAgfVxyXG4vL30iLCJpbXBvcnQge1VwbG9hZHNTZXJ2aWNlfSBmcm9tIFwiLi9VcGxvYWRzU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IHZhciBTdG9yYWdlTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwic3RvcmFnZVwiLCBbXSlcclxuICAgIC5zZXJ2aWNlKFVwbG9hZHNTZXJ2aWNlLk5BTUUsIFVwbG9hZHNTZXJ2aWNlKTtcclxuIiwiaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDdXJyZW50bHlVcGxvYWRhYmxlRmlsZSBleHRlbmRzIEZpbGUge1xyXG4gICAgdXBsb2FkZWQ/OiBudW1iZXI7XHJcbiAgICBndWlkPzogbnVtYmVyO1xyXG4gICAga2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXBsb2Fkc1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJzdG9yYWdlLlVwbG9hZHNTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBMRUFSTklOR19QQVRIX0tFWSA9IFwibGVhcm5pbmdQYXRoXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE1BVEVSSUFMX0tFWSA9IFwibWF0ZXJpYWxcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgQ09VUlNFX0tFWSA9IFwiY291cnNlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBSRVZJRVdfVVBMT0FEX1VSTF9LRVkgPSBcInByZXZpZXdVcGxvYWRVcmxcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUFJFVklFV19VUExPQURfTUVUSE9EX0tFWSA9IFwicHJldmlld1VwbG9hZE1ldGhvZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBTVUJUSVRMRVNfVVBMT0FEX1VSTF9LRVkgPSBcInN1YnRpdGxlc1VwbG9hZFVybFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBTVUJUSVRMRVNfVVBMT0FEX01FVEhPRF9LRVkgPSBcInN1YnRpdGxlc1VwbG9hZE1ldGhvZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBGSUxFX1VQTE9BRF9VUkxfS0VZID0gXCJmaWxlVXBsb2FkVXJsXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEZJTEVfVVBMT0FEX01FVEhPRF9LRVkgPSBcImZpbGVVcGxvYWRNZXRob2RcIjtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBVUExPQURfUEFSQUxMRUxfRklMRVMgPSAzO1xyXG5cclxuICAgIHByaXZhdGUgcXVldWU6IEFycmF5PEZpbGU+ID0gW107XHJcbiAgICBwcml2YXRlIGN1cnJlbnRseVVwbG9hZGFibGVGaWxlczogQXJyYXk8RmlsZT4gPSBBcnJheS5hcHBseShudWxsLCBBcnJheShVcGxvYWRzU2VydmljZS5VUExPQURfUEFSQUxMRUxfRklMRVMpKS5tYXAoKCkgPT4ge3JldHVybiBudWxsfSk7XHJcbiAgICBwcml2YXRlIGN1cnJlbnRseVVwbG9hZGFibGVGaWxlc01hcDogYW55ID0ge307XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgRmlsZUFQSS5jb3JzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudGx5VXBsb2FkYWJsZUZpbGVzKCk6IEFycmF5PEN1cnJlbnRseVVwbG9hZGFibGVGaWxlPiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogQXJyYXk8Q3VycmVudGx5VXBsb2FkYWJsZUZpbGU+ID0gW107XHJcbiAgICAgICAgdGhpcy5jdXJyZW50bHlVcGxvYWRhYmxlRmlsZXMuZm9yRWFjaCgoZmlsZTogQ3VycmVudGx5VXBsb2FkYWJsZUZpbGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpbGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZmlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnF1ZXVlLmZvckVhY2goKGZpbGU6IEN1cnJlbnRseVVwbG9hZGFibGVGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZpbGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbChmaWxlOiBDdXJyZW50bHlVcGxvYWRhYmxlRmlsZSk6IHZvaWQge1xyXG4gICAgICAgIGxldCB4aHI6IFhtbEh0dHBSZXF1ZXN0ID0gdGhpcy5jdXJyZW50bHlVcGxvYWRhYmxlRmlsZXNNYXBbZmlsZS5uYW1lICsgZmlsZS5ndWlkXS54aHI7XHJcbiAgICAgICAgeGhyLmFib3J0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbEJ5S2V5KGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGZpbGVLZXk6IHN0cmluZztcclxuICAgICAgICB0aGlzLmN1cnJlbnRseVVwbG9hZGFibGVGaWxlcy5mb3JFYWNoKChmaWxlOiBDdXJyZW50bHlVcGxvYWRhYmxlRmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlS2V5ID0gdGhpcy5jdXJyZW50bHlVcGxvYWRhYmxlRmlsZXNNYXBbZmlsZS5uYW1lICsgZmlsZS5ndWlkXS5rZXk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsZUtleSA9PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbChmaWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSwgZmlsZUtleTogc3RyaW5nLCB1cmw6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIHN1Y2Nlc3NGdW5jOiAoZmlsZTogRmlsZSkgPT4gdm9pZCwgYWJvcnRGdW5jOiAoZmlsZTogRmlsZSkgPT4gdm9pZCxcclxuICAgICAgICAgICAgICAgICAgZXJyb3JGdW5jOiAoZmlsZTogRmlsZSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIEZpbGVBUEkuZmlsdGVyRmlsZXMoW2ZpbGVdLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0sIChmaWxlczogQXJyYXk8RmlsZT4pID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZTogQ3VycmVudGx5VXBsb2FkYWJsZUZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlLmd1aWQgPSBtb21lbnQoKS52YWx1ZU9mKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudGx5VXBsb2FkYWJsZUZpbGVzTWFwW2ZpbGUubmFtZSArIGZpbGUuZ3VpZF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NGdW5jOiBzdWNjZXNzRnVuYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRGdW5jOiBhYm9ydEZ1bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yRnVuYzogZXJyb3JGdW5jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmlsZUtleVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkUGFyYWxsZWxGaWxlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGxvYWRQYXJhbGxlbEZpbGVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudGx5VXBsb2FkYWJsZUZpbGVzLmZvckVhY2goKGY6IEN1cnJlbnRseVVwbG9hZGFibGVGaWxlLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgZiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZTogQ3VycmVudGx5VXBsb2FkYWJsZUZpbGUgPSB0aGlzLnF1ZXVlLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRseVVwbG9hZGFibGVGaWxlc1tpbmRleF0gPSBmaWxlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlVcGxvYWRhYmxlRmlsZXNNYXBbZmlsZS5uYW1lICsgZmlsZS5ndWlkXS5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRPbmVGaWxlKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGxvYWRPbmVGaWxlKGZpbGU6IEN1cnJlbnRseVVwbG9hZGFibGVGaWxlKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1ZjogYW55ID0gdGhpcy5jdXJyZW50bHlVcGxvYWRhYmxlRmlsZXNNYXBbZmlsZS5uYW1lICsgZmlsZS5ndWlkXTtcclxuICAgICAgICBsZXQgeGhyOiBYbWxIdHRwUmVxdWVzdCA9IEZpbGVBUEkudXBsb2FkKHtcclxuICAgICAgICAgICAgdXJsOiBjdWYudXJsLFxyXG4gICAgICAgICAgICB1cGxvYWRNZXRob2Q6IGN1Zi5tZXRob2QsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIGd1aWQ6IGZpbGUuZ3VpZFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWxlczoge1xyXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjaHVua1NpemU6IDEwMCAqIEZpbGVBUEkuS0IsXHJcbiAgICAgICAgICAgIGNodW5rVXBsb2FkUmV0cnk6IDMsXHJcbiAgICAgICAgICAgIGZpbGVwcm9ncmVzczogdGhpcy5maWxlUHJvZ3Jlc3NGdW5jLFxyXG4gICAgICAgICAgICBmaWxlY29tcGxldGU6IHRoaXMuZmlsZUNvbXBsZXRlRnVuY1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGN1Zi54aHIgPSB4aHI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaWxlUHJvZ3Jlc3NGdW5jOiAoZXZ0OiBhbnksIGZpbGU6IEN1cnJlbnRseVVwbG9hZGFibGVGaWxlLCB4aHI6IFhtbEh0dHBSZXF1ZXN0LCBvcHRpb25zOiBhbnkpID0+IHZvaWRcclxuICAgICAgICAgICAgPSAoZXZ0OiBhbnksIGZpbGU6IEN1cnJlbnRseVVwbG9hZGFibGVGaWxlLCB4aHI6IFhtbEh0dHBSZXF1ZXN0LCBvcHRpb25zOiBhbnkpID0+IHtcclxuICAgICAgICBmaWxlLnVwbG9hZGVkID0gZXZ0LmxvYWRlZDtcclxuICAgICAgICBmaWxlLmd1aWQgPSBvcHRpb25zLmRhdGEuZ3VpZDtcclxuICAgICAgICBsZXQgY3VwOiBhbnkgPSB0aGlzLmN1cnJlbnRseVVwbG9hZGFibGVGaWxlc01hcFtmaWxlLm5hbWUgKyBmaWxlLmd1aWRdO1xyXG4gICAgICAgIGlmIChjdXApIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBjdXAuaW5kZXg7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudGx5VXBsb2FkYWJsZUZpbGVzW2luZGV4XSA9IGZpbGU7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIGZpbGVDb21wbGV0ZUZ1bmM6IChlcnI6IGFueSwgeGhyOiBYbWxIdHRwUmVxdWVzdCwgZmlsZTogQ3VycmVudGx5VXBsb2FkYWJsZUZpbGUsIG9wdGlvbnM6IGFueSkgPT4gdm9pZFxyXG4gICAgICAgICAgICA9IChlcnI6IGFueSwgeGhyOiBYbWxIdHRwUmVxdWVzdCwgZmlsZTogQ3VycmVudGx5VXBsb2FkYWJsZUZpbGUsIG9wdGlvbnM6IGFueSkgPT4ge1xyXG4gICAgICAgIGZpbGUuZ3VpZCA9IG9wdGlvbnMuZGF0YS5ndWlkO1xyXG4gICAgICAgIGlmIChlcnIgPT0gXCJhYm9ydFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudGx5VXBsb2FkYWJsZUZpbGVzTWFwW2ZpbGUubmFtZSArIGZpbGUuZ3VpZF0uYWJvcnRGdW5jKGZpbGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRseVVwbG9hZGFibGVGaWxlc01hcFtmaWxlLm5hbWUgKyBmaWxlLmd1aWRdLnN1Y2Nlc3NGdW5jKGZpbGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudGx5VXBsb2FkYWJsZUZpbGVzTWFwW2ZpbGUubmFtZSArIGZpbGUuZ3VpZF0uZXJyb3JGdW5jKGZpbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuY3VycmVudGx5VXBsb2FkYWJsZUZpbGVzTWFwW2ZpbGUubmFtZSArIGZpbGUuZ3VpZF0uaW5kZXg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50bHlVcGxvYWRhYmxlRmlsZXNbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRseVVwbG9hZGFibGVGaWxlc01hcFtmaWxlLm5hbWUgKyBmaWxlLmd1aWRdID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVwbG9hZFBhcmFsbGVsRmlsZXMoKTtcclxuICAgIH07XHJcbn0iLCJcclxuZXhwb3J0IGNsYXNzIFNjb3BlVXRpbHMge1xyXG4gICAgcHVibGljIHN0YXRpYyBhcHBseSgkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCBmbjogKHNjb3BlOiBhbmd1bGFyLklTY29wZSkgPT4gYW55KSB7XHJcbiAgICAgICAgY29uc3QgcGhhc2UgPSAkc2NvcGUuJHJvb3QuJCRwaGFzZTtcclxuICAgICAgICBpZiAocGhhc2UgPT09IFwiJGFwcGx5XCIgfHwgcGhhc2UgPT09IFwiJGRpZ2VzdFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChmbikge1xyXG4gICAgICAgICAgICAgICAgZm4oJHNjb3BlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZm4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImltcG9ydCB7SVRyZWVFbGVtZW50SW5mb30gZnJvbSBcIi4vbW9kZWxzL1RyZWVFbGVtZW50SW5mb1wiO1xyXG5pbXBvcnQge1RyZWVFbGVtZW50U3RhdGV9IGZyb20gXCIuL21vZGVscy9UcmVlRWxlbWVudFN0YXRlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUVsZW1lbnRzSW5mb0ZpbGxlciB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBNQVhfVklTSUJMRV9MRVZFTDogbnVtYmVyID0gMjtcclxuICAgIHB1YmxpYyBzdGF0aWMgRklSU1RfTEVWRUw6IG51bWJlciA9IDE7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBmaWxsSGllcmFyY2h5SW5mbyhncmlkVHJlZUVsZW1lbnRzOiBBcnJheTxJVHJlZUVsZW1lbnRJbmZvPGFueT4+KSB7XHJcbiAgICAgICAgVHJlZUVsZW1lbnRzSW5mb0ZpbGxlci5maWxsSGllcmFyY2h5SW5mb1dpdGhNYXhMZXZlbChncmlkVHJlZUVsZW1lbnRzLCBUcmVlRWxlbWVudHNJbmZvRmlsbGVyLk1BWF9WSVNJQkxFX0xFVkVMKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGZpbGxIaWVyYXJjaHlJbmZvV2l0aE1heExldmVsKGdyaWRUcmVlRWxlbWVudHM6IEFycmF5PElUcmVlRWxlbWVudEluZm88YW55Pj4sIG1heFZpc2libGVMZXZlbDogbnVtYmVyKSB7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JpZFRyZWVFbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudDogSVRyZWVFbGVtZW50SW5mbzxhbnk+ID0gZ3JpZFRyZWVFbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgdGhpcy5pbml0SGllcmFyY2h5RWxlbWVudChlbGVtZW50LCBtYXhWaXNpYmxlTGV2ZWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNoaWxkcmVuT25MZXZlbHM6IE1hcDxudW1iZXIsIEFycmF5PElUcmVlRWxlbWVudEluZm88YW55Pj4+ID0gbmV3IE1hcDxudW1iZXIsIEFycmF5PElUcmVlRWxlbWVudEluZm88YW55Pj4+KCk7XHJcbiAgICAgICAgdmFyIGxhc3RFbGVtZW50c09uTGV2ZWxzOiBNYXA8bnVtYmVyLCBJVHJlZUVsZW1lbnRJbmZvPGFueT4+ID0gbmV3IE1hcDxudW1iZXIsIElUcmVlRWxlbWVudEluZm88YW55Pj4oKTtcclxuICAgICAgICB2YXIgcHJldmlvdXNMZXZlbDogbnVtYmVyID0gLTE7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmlkVHJlZUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50OiBJVHJlZUVsZW1lbnRJbmZvPGFueT4gPSBncmlkVHJlZUVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExldmVsOiBudW1iZXIgPSBlbGVtZW50LmxldmVsO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudExldmVsID4gdGhpcy5GSVJTVF9MRVZFTCkgeyAvLyB0aGlzIGVsZW1lbnQgaXMgYSBjaGlsZCBmb3IgcHJldmlvdXMgbGV2ZWxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuT25MZXZlbHMuZ2V0KGN1cnJlbnRMZXZlbCAtIDEpLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2hpbGRyZW5PbkxldmVscy5zZXQoY3VycmVudExldmVsLCBlbGVtZW50LmNoaWxkcmVuKTtcclxuICAgICAgICAgICAgbGFzdEVsZW1lbnRzT25MZXZlbHMuc2V0KGN1cnJlbnRMZXZlbCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY3VycmVudExldmVsIDwgcHJldmlvdXNMZXZlbCkgeyAvL2dvIGJhY2sgdG8gcm9vdCBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBsdmwgPSBwcmV2aW91c0xldmVsOyBsdmwgPiBjdXJyZW50TGV2ZWw7IGx2bC0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVsZW1lbnRzT25MZXZlbHMuZ2V0KGx2bCkuaXNMYXN0Q2hpbGQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZpb3VzTGV2ZWwgPSBjdXJyZW50TGV2ZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcmV2aW91c0xldmVsID49IHRoaXMuRklSU1RfTEVWRUwpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgbHZsID0gcHJldmlvdXNMZXZlbDsgbHZsID49IHRoaXMuRklSU1RfTEVWRUw7IGx2bC0tKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0RWxlbWVudHNPbkxldmVscy5nZXQobHZsKS5pc0xhc3RDaGlsZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5pdEhpZXJhcmNoeUVsZW1lbnQoZWxlbWVudDogSVRyZWVFbGVtZW50SW5mbzxhbnk+LCBtYXhWaXNpYmxlTGV2ZWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChlbGVtZW50LmxldmVsID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LmxldmVsID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5jaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIGVsZW1lbnQuaXNMYXN0Q2hpbGQgPSBmYWxzZTtcclxuICAgICAgICBlbGVtZW50LnN0YXRlID0gZWxlbWVudC5sZXZlbCA8IG1heFZpc2libGVMZXZlbCA/IFRyZWVFbGVtZW50U3RhdGVbVHJlZUVsZW1lbnRTdGF0ZS5FWFBBTkRFRF0gOiBUcmVlRWxlbWVudFN0YXRlW1RyZWVFbGVtZW50U3RhdGUuQ09MTEFQU0VEXTtcclxuICAgICAgICBlbGVtZW50LnZpc2libGUgPSBlbGVtZW50LmxldmVsIDw9IG1heFZpc2libGVMZXZlbDtcclxuXHJcbiAgICAgICAgZWxlbWVudC5zaG93ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZWxlbWVudC5oaWRlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQudmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGVsZW1lbnQuY2hpbGRyZW4sIGNoaWxkID0+IGNoaWxkLmhpZGUoKSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBlbGVtZW50LmV4cGFuZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5zdGF0ZSA9IFRyZWVFbGVtZW50U3RhdGVbVHJlZUVsZW1lbnRTdGF0ZS5FWFBBTkRFRF07XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChlbGVtZW50LmNoaWxkcmVuLCBjaGlsZCA9PiBjaGlsZC5zaG93KCkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZWxlbWVudC5leHBhbmRBbGwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3RhdGUgPSBUcmVlRWxlbWVudFN0YXRlW1RyZWVFbGVtZW50U3RhdGUuRVhQQU5ERURdO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZWxlbWVudC5jaGlsZHJlbiwgY2hpbGQgPT4gY2hpbGQuZXhwYW5kKCkpO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZWxlbWVudC5jaGlsZHJlbiwgY2hpbGQgPT4gY2hpbGQuc2hvdygpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGVsZW1lbnQuY29sbGFwc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChlbGVtZW50LmNoaWxkcmVuLCBjaGlsZCA9PiBjaGlsZC5jb2xsYXBzZSgpKTtcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGVsZW1lbnQuY2hpbGRyZW4sIGNoaWxkID0+IGNoaWxkLmhpZGUoKSk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3RhdGUgPSBUcmVlRWxlbWVudFN0YXRlW1RyZWVFbGVtZW50U3RhdGUuQ09MTEFQU0VEXTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGVudW0gVHJlZUVsZW1lbnRTdGF0ZSB7XHJcbiAgICBDT0xMQVBTRUQsXHJcbiAgICBFWFBBTkRFRFxyXG59IiwiaW1wb3J0IHtDZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlcn0gZnJvbSBcIi4vQ2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2Vzc21lbnRzUm91dGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXJscy5Bc3Nlc3NtZW50c1JvdXRlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgYXNzZXNzbWVudHNSb3V0ZSA9IFwiL3BlcnNvbmFsL2Fzc2Vzc21lbnRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGFzc2Vzc21lbnREZXRhaWxzUm91dGUgPSBcIi9wZXJzb25hbC9hc3Nlc3NtZW50cy86YXNzZXNzbWVudElkXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBBU1NFU1NNRU5UX0lEX1BBUkFNID0gXCJhc3Nlc3NtZW50SWRcIjtcclxuXHJcblxyXG4gICAgcHVibGljIGFzc2Vzc21lbnRzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEFzc2Vzc21lbnRzUm91dGVyLmFzc2Vzc21lbnRzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzc2Vzc21lbnREZXRhaWxzVXJsKGFzc2Vzc21lbnRJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gQXNzZXNzbWVudHNSb3V0ZXIuYXNzZXNzbWVudERldGFpbHNSb3V0ZS5yZXBsYWNlKFwiOlwiICsgQXNzZXNzbWVudHNSb3V0ZXIuQVNTRVNTTUVOVF9JRF9QQVJBTSwgYXNzZXNzbWVudElkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtBcHBQcm9wZXJ0aWVzfSBmcm9tIFwiLi4vdXRpbHMvQXBwUHJvcGVydGllc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEF1dGhSb3V0ZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1cmxzLkF1dGhSb3V0ZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEFDQ0VTU19ERU5JRURfUEFSQU1fTkFNRSA9IFwiYWNjZXNzRGVuaWVkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRPS0VOX0VYUElSRURfUEFSQU1fTkFNRSA9IFwidG9rZW5FeHBpcmVkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIExPR09OX1JFUVVJUkVEX1BBUkFNX05BTUUgPSBcImxvZ29uUmVxdWlyZWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTE9HT05fUEFSQU1fTkFNRSA9IFwibG9nb25OYW1lXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBBU1NXT1JEX1RPS0VOX1BBUkFNX05BTUUgPSBcInRva2VuXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEJVU0lORVNTX1VOSVRfSURfUEFSQU0gPSBcIkJVaWRcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGxvZ29uUm91dGUgPSBcIi9hdXRoL2xvZ29uXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGxvZ291dFJvdXRlID0gXCIvYXV0aC9sb2dvdXRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgYWNjZXNzRGVuaWVkUm91dGUgPSBcIi9hdXRoL2FjY2Vzc0RlbmllZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyByZXN0b3JlUGFzc3dvcmRSb3V0ZSA9IFwiL2F1dGgvcmVzdG9yZS9wYXNzd29yZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBjaGVja1ZhbGlkQ29kZVJvdXRlID0gXCIvYXV0aC9jaGVjay9jb2RlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZU5ld1Bhc3N3b3JkUm91dGUgPSBgL2F1dGgvY3JlYXRlL25ldy9wYXNzd29yZC86JHtBdXRoUm91dGVyLlBBU1NXT1JEX1RPS0VOX1BBUkFNX05BTUV9YDtcclxuXHJcbiAgICBwdWJsaWMgbG9nb25VcmwoYnVzaW5lc3NVbml0SWQ/OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBidXNpbmVzc1VuaXRJZFxyXG4gICAgICAgICAgICA/IEF1dGhSb3V0ZXIubG9nb25Sb3V0ZSArIGA/JHtBdXRoUm91dGVyLkJVU0lORVNTX1VOSVRfSURfUEFSQU19PSR7YnVzaW5lc3NVbml0SWR9YFxyXG4gICAgICAgICAgICA6IEF1dGhSb3V0ZXIubG9nb25Sb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9nb3V0VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEF1dGhSb3V0ZXIubG9nb3V0Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjY2Vzc0RlbmllZFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBBdXRoUm91dGVyLmFjY2Vzc0RlbmllZFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXN0b3JlUGFzc3dvcmQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gQXV0aFJvdXRlci5yZXN0b3JlUGFzc3dvcmRSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlTmV3UGFzc3dvcmQodG9rZW46IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoQXV0aFJvdXRlci5jcmVhdGVOZXdQYXNzd29yZFJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBBdXRoUm91dGVyLlBBU1NXT1JEX1RPS0VOX1BBUkFNX05BTUUsIHRva2VuKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tWYWxpZENvZGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gQXV0aFJvdXRlci5jaGVja1ZhbGlkQ29kZVJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRvZG86IHJlZmFjdG9yaW5nXHJcbiAgICBwdWJsaWMgZ2V0Q3VzdG9tRG9tYWluRnJvbVVybChsb2NhdGlvbjogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgZXhlY0RvbWFpbiA9IG5ldyBSZWdFeHAoXCIoPzpodHRwcyo6XFwvXFwvKVteL10qXCIsIFwic1wiKS5leGVjKEFwcFByb3BlcnRpZXMuYmFzZVVybCk7XHJcbiAgICAgICAgbGV0IGJhc2VVcmwgPSBleGVjRG9tYWluICE9IG51bGwgPyBleGVjRG9tYWluWzBdIDogXCJcIjtcclxuXHJcbiAgICAgICAgaWYgKGxvY2F0aW9uLm9yaWdpbiAhPSBiYXNlVXJsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpbiA9IGxvY2F0aW9uLm9yaWdpbi5pbmRleE9mKFwiaHR0cFwiKSAhPSAtMSA/XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5vcmlnaW4uc3BsaXQoXCIvL1wiKVsxXS5zcGxpdChcIi5cIilcclxuICAgICAgICAgICAgICAgIDogbG9jYXRpb24ub3JpZ2luLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgICAgbGV0IGN1c3RvbURvbWFpbiA9IGRvbWFpblswXTtcclxuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbURvbWFpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1c2luZXNzVW5pdHNSb3V0ZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1cmxzLkJ1c2luZXNzVW5pdHNSb3V0ZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIElEX1BBUkFNX05BTUUgPSBcImlkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEJVX0xFVkVMX1BBUkFNX05BTUUgPSBcImJ1TGV2ZWxcIjtcclxuICAgIHByaXZhdGUgREVGQVVMVF9CVV9MRVZFTCA9IFwiZ2VuZXJhbERldGFpbHNcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGluZGV4Um91dGUgPSBcIi9idXNpbmVzc1VuaXRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJvdXRlID0gYC9idXNpbmVzc1VuaXRzL25ld2A7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVkaXRSb3V0ZSA9IGAvYnVzaW5lc3NVbml0cy86JHtCdXNpbmVzc1VuaXRzUm91dGVyLklEX1BBUkFNX05BTUV9Lzoke0J1c2luZXNzVW5pdHNSb3V0ZXIuQlVfTEVWRUxfUEFSQU1fTkFNRX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZW5lcmFsUm91dGUgPSBgL2J1c2luZXNzVW5pdHMvOiR7QnVzaW5lc3NVbml0c1JvdXRlci5JRF9QQVJBTV9OQU1FfS9nZW5lcmFsRGV0YWlsc2A7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJyYW5kaW5nUm91dGUgPSBgL2J1c2luZXNzVW5pdHMvOiR7QnVzaW5lc3NVbml0c1JvdXRlci5JRF9QQVJBTV9OQU1FfS9jdXN0b21CcmFuZGluZ2A7XHJcbiAgICBwdWJsaWMgc3RhdGljIG1lbnVJdGVtc1JvdXRlID0gYC9idXNpbmVzc1VuaXRzLzoke0J1c2luZXNzVW5pdHNSb3V0ZXIuSURfUEFSQU1fTkFNRX0vbWVudUl0ZW1zYDtcclxuICAgIHB1YmxpYyBzdGF0aWMgc3Vic2NyaXB0aW9uUm91dGUgPSBgL2J1c2luZXNzVW5pdHMvOiR7QnVzaW5lc3NVbml0c1JvdXRlci5JRF9QQVJBTV9OQU1FfS9iaWxsUGxhbmA7XHJcblxyXG4gICAgcHVibGljIGluZGV4VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEJ1c2luZXNzVW5pdHNSb3V0ZXIuaW5kZXhSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdFVybChpZDogc3RyaW5nIHwgbnVtYmVyLCBidUxldmVsPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShCdXNpbmVzc1VuaXRzUm91dGVyLmVkaXRSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoXCI6XCIgKyBCdXNpbmVzc1VuaXRzUm91dGVyLklEX1BBUkFNX05BTUUsIGlkKVxyXG4gICAgICAgICAgICAud2l0aChcIjpcIiArIEJ1c2luZXNzVW5pdHNSb3V0ZXIuQlVfTEVWRUxfUEFSQU1fTkFNRSwgYnVMZXZlbCA9PSBudWxsID8gdGhpcy5ERUZBVUxUX0JVX0xFVkVMIDogYnVMZXZlbClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdlbmVyYWxVcmwoaWQ6IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKEJ1c2luZXNzVW5pdHNSb3V0ZXIuZ2VuZXJhbFJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aChcIjpcIiArIEJ1c2luZXNzVW5pdHNSb3V0ZXIuSURfUEFSQU1fTkFNRSwgaWQpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBicmFuZGluZ1VybChpZDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoQnVzaW5lc3NVbml0c1JvdXRlci5icmFuZGluZ1JvdXRlKVxyXG4gICAgICAgICAgICAud2l0aChcIjpcIiArIEJ1c2luZXNzVW5pdHNSb3V0ZXIuSURfUEFSQU1fTkFNRSwgaWQpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVSb3V0ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBCdXNpbmVzc1VuaXRzUm91dGVyLmNyZWF0ZVJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtZW51SXRlbXNVcmwoaWQ6IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKEJ1c2luZXNzVW5pdHNSb3V0ZXIubWVudUl0ZW1zUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKFwiOlwiICsgQnVzaW5lc3NVbml0c1JvdXRlci5JRF9QQVJBTV9OQU1FLCBpZClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN1YnNjcmlwdGlvblVybChpZDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoQnVzaW5lc3NVbml0c1JvdXRlci5zdWJzY3JpcHRpb25Sb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoXCI6XCIgKyBCdXNpbmVzc1VuaXRzUm91dGVyLklEX1BBUkFNX05BTUUsIGlkKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxufVxyXG4iLCJcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQ2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1cmxzLkNlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBDRVJUSUZJQ0FURV9JRF9QQVJBTSA9IFwiY2VydGlmaWNhdGVJZFwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaW5kZXhSb3V0ZSA9IFwiL2NlcnRpZmljYXRlVGVtcGxhdGVzL1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBlZGl0Um91dGUgPSBcIi9jZXJ0aWZpY2F0ZVRlbXBsYXRlcy86Y2VydGlmaWNhdGVJZC9lZGl0XCI7XHJcblxyXG4gICAgcHVibGljIGluZGV4VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIENlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyLmluZGV4Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRVcmwoY2VydGlmaWNhdGVJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gY2VydGlmaWNhdGVJZCA9PSAwXHJcbiAgICAgICAgICAgID8gQ2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXIuZWRpdFJvdXRlLnJlcGxhY2UoXCI6XCIgKyBDZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlci5DRVJUSUZJQ0FURV9JRF9QQVJBTSwgXCJuZXdcIilcclxuICAgICAgICAgICAgOiBDZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlci5lZGl0Um91dGUucmVwbGFjZShcIjpcIiArIENlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyLkNFUlRJRklDQVRFX0lEX1BBUkFNLCBjZXJ0aWZpY2F0ZUlkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgQ29tbW9uUm91dGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXJscy5Db21tb25Sb3V0ZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIG5vdEZvdW5kUm91dGUgPSBcIi9ub3RGb3VuZFwiO1xyXG5cclxuICAgIHB1YmxpYyBub3RGb3VuZFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBDb21tb25Sb3V0ZXIubm90Rm91bmRSb3V0ZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1JlZmVyZW5jZWRPYmplY3RUeXBlfSBmcm9tIFwiLi8uLi9SZWZlcmVuY2VkT2JqZWN0VHlwZVwiO1xyXG5pbXBvcnQge01hdGVyaWFsc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb21tb25Sb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvQ29tbW9uUm91dGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29udGVudFJvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuQ29udGVudFJvdXRlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBDb3Vyc2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvdXJzZVJvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb21tb25Sb3V0ZXI6IENvbW1vblJvdXRlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXRhaWxzVXJsKG9iamVjdElkOiBudW1iZXIsIG9iamVjdFR5cGU6IGFueSkge1xyXG4gICAgICAgIGxldCBteU9iamVjdFR5cGU6IFJlZmVyZW5jZWRPYmplY3RUeXBlID1cclxuICAgICAgICAgICAgKHR5cGVvZiBvYmplY3RUeXBlID09PSAnc3RyaW5nJykgPyBSZWZlcmVuY2VkT2JqZWN0VHlwZVtvYmplY3RUeXBlXSA6XHJcbiAgICAgICAgICAgICAgICAodHlwZW9mIG9iamVjdFR5cGUgPT09ICdudW1iZXInKSA/IG9iamVjdFR5cGUgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgc3dpdGNoIChteU9iamVjdFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBSZWZlcmVuY2VkT2JqZWN0VHlwZS5NQVRFUklBTDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsc1JvdXRlci53YXRjaFVybChvYmplY3RJZCk7XHJcbiAgICAgICAgICAgIGNhc2UgUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291cnNlUm91dGVyLmRldGFpbHNVcmwob2JqZWN0SWQpO1xyXG4gICAgICAgICAgICBjYXNlIFJlZmVyZW5jZWRPYmplY3RUeXBlLlBMQVlMSVNUOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxzUm91dGVyLnBsYXlsaXN0RGV0YWlsc1VybChvYmplY3RJZCk7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21tb25Sb3V0ZXIubm90Rm91bmRVcmwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ291cnNlc1JvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuQ291cnNlc1JvdXRlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQ09VUlNFX0lEX1BBUkFNID0gXCJjb3Vyc2VJZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBDT1VSU0VfUVVJWl9JRF9QQVJBTSA9IFwicXVpeklkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE1PRFVMRV9JRF9QQVJBTSA9IFwibW9kdWxlSWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgU0VDVElPTl9JRF9QQVJBTSA9IFwic2VjdGlvbklkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFRIUkVBRF9JRF9QQVJBTSA9IFwidGhyZWFkSWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVVNFUl9JRF9QQVJBTSA9IFwidXNlcklkXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBDT1VSU0VfUEFSQU1FVEVSID0gXCJjb3Vyc2VcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTU9EVUxFX1BBUkFNRVRFUiA9IFwibW9kdWxlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNFQ1RJT05fUEFSQU1FVEVSID0gXCJzZWN0aW9uXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBQVVJDSEFTRURfT1JERVIgPSBcInB1cmNoYXNlZE9yZGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBMT0dPTl9SRVFVSVJFRCA9IFwibG9nb25SZXF1aXJlZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBWSUxUX1NFU1NJT05TX0FVVE9fUkVHSVNURVJfUkVRVUlSRUQgPSBcInBheW1lbnRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTk9USUZJQ0FUSU9OX1RFTVBMQVRFX0lEX1BBUkFNID0gXCJub3RpZmljYXRpb25JZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBOT1RJRklDQVRJT05fQlVTSU5FU1NfVU5JVF9QQVJBTSA9IFwiYnVzaW5lc3NVbml0SWRcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGluZGV4Um91dGUgPSBcIi9jb3Vyc2VzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGluZGV4UHVyY2hhc2VkUm91dGUgPSBcIi9jb3Vyc2VzL3B1cmNoYXNlZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBpbmRleFB1cmNoYXNlZE9yZGVyUm91dGUgPSBcIi9jb3Vyc2VzL3B1cmNoYXNlZFwiICtcclxuICAgICAgICBgP3B1cmNoYXNlZE9yZGVyPToke0NvdXJzZXNSb3V0ZXIuUFVSQ0hBU0VEX09SREVSfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRldGFpbHNSb3V0ZSA9IGAvY291cnNlcy86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBzZWN0aW9uRGV0YWlsc1JvdXRlID0gYC9jb3Vyc2VzLzoke0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNfWAgK1xyXG4gICAgICAgIGA/bW9kdWxlPToke0NvdXJzZXNSb3V0ZXIuTU9EVUxFX0lEX1BBUkFNfWAgKyBgJnNlY3Rpb249OiR7Q291cnNlc1JvdXRlci5TRUNUSU9OX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHByb2dyZXNzUm91dGUgPSBgL2NvdXJzZXMvOiR7Q291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU19YCArIFwiL3Byb2dyZXNzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHByb2dyZXNzUm91dGVVc2VyID0gYC9jb3Vyc2VzLzoke0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNfS9wcm9ncmVzcz91c2VySWQ9OiR7Q291cnNlc1JvdXRlci5VU0VSX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHdlYmluYXJSb3V0ZSA9IGAvY291cnNlcy86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX1gICsgXCIvd2ViaW5hcnNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgaWx0Um91dGUgPSBgL2NvdXJzZXMvOiR7Q291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU19YCArIFwiL2lsdFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBpbmZvUm91dGUgPSBgL2NvdXJzZXMvOiR7Q291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU19YCArIFwiL2luZm9cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZW5yb2xsbWVudERldGFpbHNSb3V0ZSA9IGAvY291cnNlcy86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX1gICsgXCIvZW5yb2xsbWVudERldGFpbHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZGlzY3Vzc2lvblJvdXRlID0gYC9jb3Vyc2VzLzoke0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNfWAgKyBcIi9kaXNjdXNzaW9uXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJvdXRlID0gXCIvY291cnNlcy9jcmVhdGVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgdXBkYXRlUm91dGUgPSBgL2NvdXJzZXMvdXBkYXRlLzoke0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVucm9sbG1lbnRFZGl0Um91dGUgPSBgL2NvdXJzZXMvdXBkYXRlLzoke0NvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNfWAgKyBcIi9lbnJvbGxtZW50XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN0cnVjdHVyZVVwZGF0ZVJvdXRlID0gYC9jb3Vyc2VzL3VwZGF0ZS86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX1gICsgXCIvc3RydWN0dXJlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlY3Rpb25VcGRhdGVSb3V0ZSA9IGAvY291cnNlcy91cGRhdGUvOiR7Q291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU19YCArIFwiL3N0cnVjdHVyZVwiICtcclxuICAgICAgICBgP21vZHVsZT06JHtDb3Vyc2VzUm91dGVyLk1PRFVMRV9JRF9QQVJBTX1gICsgYCZzZWN0aW9uPToke0NvdXJzZXNSb3V0ZXIuU0VDVElPTl9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBidW5kbGVVcGRhdGVSb3V0ZSA9IGAvY291cnNlcy91cGRhdGUvOiR7Q291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU19YCArIFwiL2J1bmRsZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBwYXJ0aWNpcGF0aW9uRm9ybVVwZGF0ZVJvdXRlID0gYC9jb3Vyc2VzL3VwZGF0ZS86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX1gICsgXCIvcGFydGljaXBhdGlvbkZvcm1cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbGFuZGluZ1BhZ2VVcGRhdGVSb3V0ZSA9IGAvY291cnNlcy91cGRhdGUvOiR7Q291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU19YCArIFwiL2xhbmRpbmdQYWdlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGV4cG9ydEltcG9ydFVwZGF0ZVJvdXRlID0gYC9jb3Vyc2VzL3VwZGF0ZS86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX1gICsgXCIvZXhwb3J0SW1wb3J0XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlbGF0ZWRQcm9kdWN0c1VwZGF0ZVJvdXRlID0gYC9jb3Vyc2VzL3VwZGF0ZS86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX1gICsgXCIvcmVsYXRlZFByb2R1Y3RzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHF1aXpEZXRhaWxzUm91dGUgPSBgL2NvdXJzZXMvcXVpenplcy86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9RVUlaX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBlcm1pc3Npb25zRGVsZWdhdGlvblJvdXRlID0gYC9jb3Vyc2VzL3Blcm1pc3Npb25zRGVsZWdhdGlvbi86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBzdXJ2ZXlSZXN1bHRzUm91dGUgPSBgL2NvdXJzZXMvOiR7Q291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU19YCArIFwiL3N1cnZleXNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbm90aWZpY2F0aW9uVGVtcGxhdGVzRGV0YWlsUm91dGUgPSBgL2NvdXJzZXMvOiR7Q291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU19YCArIFwiL25vdGlmaWNhdGlvbnNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbm90aWZpY2F0aW9uVGVtcGxhdGVzRWRpdFJvdXRlID0gYC9jb3Vyc2VzL3VwZGF0ZS86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX0vbm90aWZpY2F0aW9uLzoke0NvdXJzZXNSb3V0ZXIuTk9USUZJQ0FUSU9OX1RFTVBMQVRFX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGZsYXNoY2FyZFJlc3VsdHNSb3V0ZSA9IGAvY291cnNlcy86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX1gICsgXCIvZmxhc2hjYXJkc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBnYW1pZmljYXRpb25EZXRhaWxSb3V0ZSA9IGAvY291cnNlcy86JHtDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTX1gICsgXCIvZ2FtaWZpY2F0aW9uXCI7XHJcblxyXG4gICAgcHVibGljIGluZGV4VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIENvdXJzZXNSb3V0ZXIuaW5kZXhSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5kZXhQdXJjaGFzZWRPcmRlclVybChwdXJjaGFzZWRPcmRlcklkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShDb3Vyc2VzUm91dGVyLmluZGV4UHVyY2hhc2VkT3JkZXJSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5QVVJDSEFTRURfT1JERVIsIHB1cmNoYXNlZE9yZGVySWQpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXRhaWxzVXJsKGNvdXJzZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShDb3Vyc2VzUm91dGVyLmRldGFpbHNSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIGNvdXJzZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcm9ncmVzc1VybChjb3Vyc2VJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoQ291cnNlc1JvdXRlci5wcm9ncmVzc1JvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTSwgY291cnNlSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByb2dyZXNzVXJsRm9yVXNlcihjb3Vyc2VJZDogbnVtYmVyLCB1c2VySWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXJcclxuICAgICAgICAgICAgLmludGVycG9sYXRlKENvdXJzZXNSb3V0ZXIucHJvZ3Jlc3NSb3V0ZVVzZXIpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIENvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNLCBjb3Vyc2VJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBDb3Vyc2VzUm91dGVyLlVTRVJfSURfUEFSQU0sIHVzZXJJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgd2ViaW5hcnNVcmwoY291cnNlSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXJcclxuICAgICAgICAgICAgLmludGVycG9sYXRlKENvdXJzZXNSb3V0ZXIud2ViaW5hclJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTSwgY291cnNlSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlsdFVybChjb3Vyc2VJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoQ291cnNlc1JvdXRlci5pbHRSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIGNvdXJzZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbmZvVXJsKGNvdXJzZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShDb3Vyc2VzUm91dGVyLmluZm9Sb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIGNvdXJzZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbnJvbGxtZW50RGV0YWlsc1VybChjb3Vyc2VJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoQ291cnNlc1JvdXRlci5lbnJvbGxtZW50RGV0YWlsc1JvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTSwgY291cnNlSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc2N1c3Npb25VcmwoY291cnNlSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXJcclxuICAgICAgICAgICAgLmludGVycG9sYXRlKENvdXJzZXNSb3V0ZXIuZGlzY3Vzc2lvblJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTSwgY291cnNlSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBDb3Vyc2VzUm91dGVyLmNyZWF0ZVJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVVcmwoY291cnNlSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoQ291cnNlc1JvdXRlci51cGRhdGVSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIGNvdXJzZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbnJvbGxtZW50RWRpdFVybChjb3Vyc2VJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShDb3Vyc2VzUm91dGVyLmVucm9sbG1lbnRFZGl0Um91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIENvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNLCBjb3Vyc2VJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RydWN0dXJlVXBkYXRlVXJsKGNvdXJzZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShDb3Vyc2VzUm91dGVyLnN0cnVjdHVyZVVwZGF0ZVJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTSwgY291cnNlSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGJ1bmRsZVVwZGF0ZVVybChjb3Vyc2VJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoQ291cnNlc1JvdXRlci5idW5kbGVVcGRhdGVSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIGNvdXJzZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwYXJ0aWNpcGF0aW9uRm9ybVVwZGF0ZVVybChjb3Vyc2VJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoQ291cnNlc1JvdXRlci5wYXJ0aWNpcGF0aW9uRm9ybVVwZGF0ZVJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTSwgY291cnNlSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxhbmRpbmdQYWdlVXBkYXRlVXJsKGNvdXJzZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShDb3Vyc2VzUm91dGVyLmxhbmRpbmdQYWdlVXBkYXRlUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIENvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNLCBjb3Vyc2VJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZXhwb3J0SW1wb3J0VXBkYXRlVXJsKGNvdXJzZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShDb3Vyc2VzUm91dGVyLmV4cG9ydEltcG9ydFVwZGF0ZVJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTSwgY291cnNlSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbGF0ZWRQcm9kdWN0c1VwZGF0ZVVybChjb3Vyc2VJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoQ291cnNlc1JvdXRlci5yZWxhdGVkUHJvZHVjdHNVcGRhdGVSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIGNvdXJzZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBxdWl6RGV0YWlsc1VybChxdWl6SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXJcclxuICAgICAgICAgICAgLmludGVycG9sYXRlKENvdXJzZXNSb3V0ZXIucXVpekRldGFpbHNSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfUVVJWl9JRF9QQVJBTSwgcXVpeklkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwZXJtaXNzaW9uc0RlbGVnYXRpb25VcmwoY291cnNlSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoQ291cnNlc1JvdXRlci5wZXJtaXNzaW9uc0RlbGVnYXRpb25Sb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIGNvdXJzZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWN0aW9uVXBkYXRlUm91dGUoY291cnNlSWQ6IG51bWJlciwgbW9kdWxlSWQ6IG51bWJlciwgc2VjdGlvbklkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShDb3Vyc2VzUm91dGVyLnNlY3Rpb25VcGRhdGVSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIGNvdXJzZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIENvdXJzZXNSb3V0ZXIuTU9EVUxFX0lEX1BBUkFNLCBtb2R1bGVJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBDb3Vyc2VzUm91dGVyLlNFQ1RJT05fSURfUEFSQU0sIHNlY3Rpb25JZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VjdGlvbkRldGFpbHNSb3V0ZShjb3Vyc2VJZDogbnVtYmVyLCBtb2R1bGVJZDogbnVtYmVyLCBzZWN0aW9uSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXJcclxuICAgICAgICAgICAgLmludGVycG9sYXRlKENvdXJzZXNSb3V0ZXIuc2VjdGlvbkRldGFpbHNSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIGNvdXJzZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIENvdXJzZXNSb3V0ZXIuTU9EVUxFX0lEX1BBUkFNLCBtb2R1bGVJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBDb3Vyc2VzUm91dGVyLlNFQ1RJT05fSURfUEFSQU0sIHNlY3Rpb25JZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3VydmV5UmVzdWx0c1VybChjb3Vyc2VJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoQ291cnNlc1JvdXRlci5zdXJ2ZXlSZXN1bHRzUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIENvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNLCBjb3Vyc2VJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbm90aWZpY2F0aW9uRGV0YWlsc1VybChjb3Vyc2VJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoQ291cnNlc1JvdXRlci5ub3RpZmljYXRpb25UZW1wbGF0ZXNEZXRhaWxSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgQ291cnNlc1JvdXRlci5DT1VSU0VfSURfUEFSQU0sIGNvdXJzZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBub3RpZmljYXRpb25FZGl0VXJsKHRlbXBsYXRlSWQ6IG51bWJlciwgY291cnNlSWQ6IG51bWJlciwgYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGVkaXRVcmw6IHN0cmluZyA9IENvdXJzZXNSb3V0ZXIubm90aWZpY2F0aW9uVGVtcGxhdGVzRWRpdFJvdXRlXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiOlwiICsgQ291cnNlc1JvdXRlci5OT1RJRklDQVRJT05fVEVNUExBVEVfSURfUEFSQU0sIHRlbXBsYXRlSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCI6XCIgKyBDb3Vyc2VzUm91dGVyLkNPVVJTRV9JRF9QQVJBTSwgY291cnNlSWQudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICAgIGlmIChidXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICBlZGl0VXJsICs9IGA/JHtDb3Vyc2VzUm91dGVyLk5PVElGSUNBVElPTl9CVVNJTkVTU19VTklUX1BBUkFNfT0ke2J1c2luZXNzVW5pdElkLnRvU3RyaW5nKCl9YFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWRpdFVybDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIGdhbWlmaWNhdGlvbkRldGFpbHNVcmwoY291cnNlSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXJcclxuICAgICAgICAgICAgLmludGVycG9sYXRlKENvdXJzZXNSb3V0ZXIuZ2FtaWZpY2F0aW9uRGV0YWlsUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIENvdXJzZXNSb3V0ZXIuQ09VUlNFX0lEX1BBUkFNLCBjb3Vyc2VJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBFeHBvcnRSb3V0ZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1cmxzLkV4cG9ydFJvdXRlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaW5kZXhSb3V0ZSA9IFwiL2ltcG9ydC1leHBvcnRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZXhwb3J0Um91dGUgPSBcIi9pbXBvcnQtZXhwb3J0L2V4cG9ydFwiO1xyXG5cclxuXHJcbiAgICBwdWJsaWMgaW5kZXhVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gRXhwb3J0Um91dGVyLmV4cG9ydFJvdXRlO1xyXG4gICAgfVxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBFeHRlcm5hbFJlc291cmNlc1JvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuRXh0ZXJuYWxSb3V0ZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHpvb21Sb3V0ZSA9IGAvZXh0ZXJuYWxSZXNvdXJjZXMvem9vbWA7XHJcblxyXG4gICAgcHVibGljIHpvb21VcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gRXh0ZXJuYWxSZXNvdXJjZXNSb3V0ZXIuem9vbVJvdXRlO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBGaW5hbmNlc1JvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuRmluYW5jZXNSb3V0ZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIE9SREVSX0lEX1BBUkFNID0gXCJvcmRlcklkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBVUkNIQVNFRF9QUk9EVUNUX0lEX1BBUkFNID0gXCJwdXJjaGFzZWRQcm9kdWN0SWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUFJPRFVDVF9JRF9QQVJBTSA9IFwicHJvZHVjdElkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE9CSkVDVF9UWVBFX1BBUkFNID0gXCJvYmplY3RUeXBlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE9CSkVDVF9JRF9QQVJBTSA9IFwib2JqZWN0SWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgQU5FVF9UUkFOU0FDVElPTl9JRF9QQVJBTSA9IFwidHJhbnNJZFwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcHJvZHVjdHNDYXRhbG9nUm91dGUgPSBgL2NhdGFsb2dgO1xyXG4gICAgcHVibGljIHN0YXRpYyBwcm9kdWN0RGV0YWlsc1JvdXRlID0gYC9jYXRhbG9nLzoke0ZpbmFuY2VzUm91dGVyLlBST0RVQ1RfSURfUEFSQU19YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgcHVyY2hhc2VkT3JkZXJSb3V0ZSA9IGAvZmluYW5jZS9wdXJjaGFzZWRfb3JkZXIvOiR7RmluYW5jZXNSb3V0ZXIuT1JERVJfSURfUEFSQU19YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgbmFjZVB1cmNoYXNlZE9yZGVyUm91dGUgPSBgL25hY2UvOiR7RmluYW5jZXNSb3V0ZXIuT1JERVJfSURfUEFSQU19YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgcHVyY2hhc2VkUHJvZHVjdFJvdXRlID0gYC9maW5hbmNlL3B1cmNoYXNlZF9wcm9kdWN0Lzoke0ZpbmFuY2VzUm91dGVyLlBVUkNIQVNFRF9QUk9EVUNUX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIG9yZGVyUHJvZHVjdHNSb3V0ZSA9IGAvZmluYW5jZS9vcmRlcnMvOiR7RmluYW5jZXNSb3V0ZXIuT1JERVJfSURfUEFSQU19YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgcHJvZHVjdEVkaXRSb3V0ZSA9IGAvZmluYW5jZS9wcm9kdWN0cy86JHtGaW5hbmNlc1JvdXRlci5QUk9EVUNUX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlZmVyZW5jZWRPYmplY3RQcm9kdWN0RWRpdFJvdXRlID0gYC9maW5hbmNlL3Byb2R1Y3RzLzoke0ZpbmFuY2VzUm91dGVyLlBST0RVQ1RfSURfUEFSQU19YCArXHJcbiAgICAgICAgYD9vYmplY3RUeXBlPToke0ZpbmFuY2VzUm91dGVyLk9CSkVDVF9UWVBFX1BBUkFNfWAgKyBgJm9iamVjdElkPToke0ZpbmFuY2VzUm91dGVyLk9CSkVDVF9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBwcm9kdWN0QU5ldENvbW11bmljYXRvclJvdXRlID0gYC9hdXRob3JpemVDb21tdW5pY2F0b3IuaHRtbGA7XHJcblxyXG4gICAgcHVibGljIHByb2R1Y3RzQ2F0YWxvZ1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBGaW5hbmNlc1JvdXRlci5wcm9kdWN0c0NhdGFsb2dSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJvZHVjdERldGFpbHNVcmwocHJvZHVjdElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKEZpbmFuY2VzUm91dGVyLnByb2R1Y3REZXRhaWxzUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIEZpbmFuY2VzUm91dGVyLlBST0RVQ1RfSURfUEFSQU0sIHByb2R1Y3RJZClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHB1cmNoYXNlZE9yZGVyVXJsKG9yZGVySWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoRmluYW5jZXNSb3V0ZXIucHVyY2hhc2VkT3JkZXJSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgRmluYW5jZXNSb3V0ZXIuT1JERVJfSURfUEFSQU0sIG9yZGVySWQpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuYWNlUHVyY2hhc2VkT3JkZXJVcmwob3JkZXJJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoRmluYW5jZXNSb3V0ZXIubmFjZVB1cmNoYXNlZE9yZGVyUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIEZpbmFuY2VzUm91dGVyLk9SREVSX0lEX1BBUkFNLCBvcmRlcklkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwdXJjaGFzZWRQcm9kdWN0VXJsKHB1cmNoYXNlZFByb2R1Y3RJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShGaW5hbmNlc1JvdXRlci5wdXJjaGFzZWRQcm9kdWN0Um91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIEZpbmFuY2VzUm91dGVyLlBVUkNIQVNFRF9QUk9EVUNUX0lEX1BBUkFNLCBwdXJjaGFzZWRQcm9kdWN0SWQpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcmRlclByb2R1Y3RzVXJsKG9yZGVySWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoRmluYW5jZXNSb3V0ZXIub3JkZXJQcm9kdWN0c1JvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBGaW5hbmNlc1JvdXRlci5PUkRFUl9JRF9QQVJBTSwgb3JkZXJJZClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByb2R1Y3RFZGl0VXJsKHByb2R1Y3RJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShGaW5hbmNlc1JvdXRlci5wcm9kdWN0RWRpdFJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBGaW5hbmNlc1JvdXRlci5QUk9EVUNUX0lEX1BBUkFNLCBwcm9kdWN0SWQpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWZlcmVuY2VkT2JqZWN0UHJvZHVjdEVkaXRVcmwocHJvZHVjdElkOiBudW1iZXIsIG9iamVjdFR5cGU6IHN0cmluZywgb2JqZWN0SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoRmluYW5jZXNSb3V0ZXIucmVmZXJlbmNlZE9iamVjdFByb2R1Y3RFZGl0Um91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIEZpbmFuY2VzUm91dGVyLlBST0RVQ1RfSURfUEFSQU0sIHByb2R1Y3RJZClcclxuICAgICAgICAgICAgLndpdGgoJzonICsgRmluYW5jZXNSb3V0ZXIuT0JKRUNUX1RZUEVfUEFSQU0sIG9iamVjdFR5cGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIEZpbmFuY2VzUm91dGVyLk9CSkVDVF9JRF9QQVJBTSwgb2JqZWN0SWQpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcm9kdWN0QU5ldENvbW11bmljYXRvclVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBGaW5hbmNlc1JvdXRlci5wcm9kdWN0QU5ldENvbW11bmljYXRvclJvdXRlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFByb2R1Y3RBTmV0Q29tbXVuaWNhdG9yVXJsQnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBiYXNlRG9tYWluID0gdXJsLnNwbGl0KFwiOi8vXCIpWzBdICsgXCI6Ly9cIiArIHVybC5zcGxpdChcIjovL1wiKVsxXS5zcGxpdChcIi9cIilbMF07XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKFwiY2xpZW50XCIpID4gMCkge1xyXG4gICAgICAgICAgICBiYXNlRG9tYWluICs9IFwiL2NsaWVudFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodXJsLmluZGV4T2YoXCJhcHAuaHRtbFwiKSA+IDApIHtcclxuICAgICAgICAgICAgYmFzZURvbWFpbiArPSBcIi9hcHAuaHRtbFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYmFzZURvbWFpbitGaW5hbmNlc1JvdXRlci5wcm9kdWN0QU5ldENvbW11bmljYXRvclJvdXRlO1xyXG4gICAgfVxyXG59IiwiXHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblJvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuR2FtaWZpY2F0aW9uUm91dGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBQUk9HUkFNX0lEX1BBUkFNID0gJ3Byb2dyYW1JZCdcclxuICAgIHB1YmxpYyBzdGF0aWMgQkFER0VfSURfUEFSQU0gPSBcImJhZGdlSWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVEVNUExBVEVfSURfUEFSQU0gPSBcInRlbXBsYXRlSWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgQlVTSU5FU1NfVU5JVF9JRF9QQVJBTSA9IFwiYnVzaW5lc3NVbml0SWRcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdhbWVQcm9ncmFtc1JvdXRlID0gJy9nYW1pZmljYXRpb24vcHJvZ3JhbXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBnYW1lUHJvZ3JhbUVkaXRSb3V0ZSA9IGAvZ2FtaWZpY2F0aW9uL2VkaXQvOiR7R2FtaWZpY2F0aW9uUm91dGVyLlBST0dSQU1fSURfUEFSQU19YDtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdhbWVQcm9ncmFtQ3JlYXRlUm91dGUgPSAnL2dhbWlmaWNhdGlvbi9jcmVhdGUnXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpbmRleFJvdXRlID0gXCIvZ2FtaWZpY2F0aW9uXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBiYWRnZXNSb3V0ZSA9IFwiL2dhbWlmaWNhdGlvbi9iYWRnZXNcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGVkaXRSb3V0ZSA9IFwiL2dhbWlmaWNhdGlvbi9iYWRnZXMvOmJhZGdlSWQvZWRpdFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBhY3Rpb25CYWRnZXNFZGl0Um91dGUgPSBcIi9nYW1pZmljYXRpb24vYWN0aW9uQmFkZ2VzLzpiYWRnZUlkL2VkaXRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgYWN0aW9uQmFkZ2VzVmlld1JvdXRlID0gXCIvZ2FtaWZpY2F0aW9uL2FjdGlvbkJhZGdlcy86YmFkZ2VJZC92aWV3XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJvdXRlID0gXCIvZ2FtaWZpY2F0aW9uL2JhZGdlcy9uZXdcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHRvZ2dsZUFjdGl2ZVJvdXRlID0gYGdhbWlmaWNhdGlvbi9nYW1lLzoke0dhbWlmaWNhdGlvblJvdXRlci5QUk9HUkFNX0lEX1BBUkFNfS90b2dnbGVBY3RpdmVgXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBiYWRnZVRlbXBsYXRlc1JvdXRlID0gXCIvZ2FtaWZpY2F0aW9uL2JhZGdlcy90ZW1wbGF0ZXNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgYmFkZ2VUZW1wbGF0ZUVkaXRSb3V0ZSA9IGAvZ2FtaWZpY2F0aW9uL2JhZGdlcy90ZW1wbGF0ZXMvOiR7R2FtaWZpY2F0aW9uUm91dGVyLlRFTVBMQVRFX0lEX1BBUkFNfS9lZGl0YDtcclxuXHJcbiAgICBwdWJsaWMgcHJvZ3JhbXNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gR2FtaWZpY2F0aW9uUm91dGVyLmdhbWVQcm9ncmFtc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlZGl0UHJvZ3JhbVVybChwcm9ncmFtSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoR2FtaWZpY2F0aW9uUm91dGVyLmdhbWVQcm9ncmFtRWRpdFJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBHYW1pZmljYXRpb25Sb3V0ZXIuUFJPR1JBTV9JRF9QQVJBTSwgcHJvZ3JhbUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVQcm9ncmFtVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEdhbWlmaWNhdGlvblJvdXRlci5nYW1lUHJvZ3JhbUNyZWF0ZVJvdXRlXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGJhZGdlc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBHYW1pZmljYXRpb25Sb3V0ZXIuYmFkZ2VzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBHYW1pZmljYXRpb25Sb3V0ZXIuY3JlYXRlUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRVcmwoYmFkZ2VJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gR2FtaWZpY2F0aW9uUm91dGVyLmVkaXRSb3V0ZS5yZXBsYWNlKFwiOlwiICsgR2FtaWZpY2F0aW9uUm91dGVyLkJBREdFX0lEX1BBUkFNLCBiYWRnZUlkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY3Rpb25CYWRnZXNFZGl0VXJsKGJhZGdlSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEdhbWlmaWNhdGlvblJvdXRlci5hY3Rpb25CYWRnZXNFZGl0Um91dGUucmVwbGFjZShcIjpcIiArIEdhbWlmaWNhdGlvblJvdXRlci5CQURHRV9JRF9QQVJBTSwgYmFkZ2VJZC50b1N0cmluZygpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWN0aW9uQmFkZ2VzVmlld1VybChiYWRnZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBHYW1pZmljYXRpb25Sb3V0ZXIuYWN0aW9uQmFkZ2VzVmlld1JvdXRlLnJlcGxhY2UoXCI6XCIgKyBHYW1pZmljYXRpb25Sb3V0ZXIuQkFER0VfSURfUEFSQU0sIGJhZGdlSWQudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluZGV4VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEdhbWlmaWNhdGlvblJvdXRlci5pbmRleFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVHYW1lQWN0aXZlVXJsKGdhbWVJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShHYW1pZmljYXRpb25Sb3V0ZXIuZ2FtZVByb2dyYW1FZGl0Um91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIEdhbWlmaWNhdGlvblJvdXRlci5QUk9HUkFNX0lEX1BBUkFNLCBnYW1lSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRlbXBsYXRlc1VybCgpIHtcclxuICAgICAgICByZXR1cm4gR2FtaWZpY2F0aW9uUm91dGVyLmJhZGdlVGVtcGxhdGVzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRlbXBsYXRlRWRpdFVybCh0ZW1wbGF0ZUlkOiBudW1iZXIsIGJ1c2luZXNzVW5pdElkOiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgZWRpdFVybDogc3RyaW5nID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShHYW1pZmljYXRpb25Sb3V0ZXIuYmFkZ2VUZW1wbGF0ZUVkaXRSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgR2FtaWZpY2F0aW9uUm91dGVyLlRFTVBMQVRFX0lEX1BBUkFNLCB0ZW1wbGF0ZUlkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQpIHtcclxuICAgICAgICAgICAgZWRpdFVybCArPSBgPyR7R2FtaWZpY2F0aW9uUm91dGVyLkJVU0lORVNTX1VOSVRfSURfUEFSQU19PSR7YnVzaW5lc3NVbml0SWQudG9TdHJpbmcoKX1gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlZGl0VXJsO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lUm91dGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXJscy5Ib21lUm91dGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyByb2xlUGFyYW0gPSBcInJvbGVcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGluZGV4Um91dGUgPSAnL2hvbWUnO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaG9tZUNvdXJzZXNSb3V0ZSA9ICcvaG9tZS9jb3Vyc2VzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgaG9tZUxlYXJuaW5nUGF0aHNSb3V0ZSA9ICcvaG9tZS9sZWFybmluZ1BhdGhzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgaG9tZU1hdGVyaWFsc1JvdXRlID0gJy9ob21lL21hdGVyaWFscyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGhvbWVGbGFzaGNhcmRzUm91dGUgPSAnL2hvbWUvZmxhc2hjYXJkcyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGhvbWVSZXBvcnRzUm91dGUgPSAnL2hvbWUvcmVwb3J0cyc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBhZG1pbmlzdHJhdGlvbk1lbnVSb3V0ZSA9ICcvaG9tZS9hZG1pbmlzdHJhdGlvbi9tZW51JztcclxuICAgIHB1YmxpYyBzdGF0aWMgYWRtaW5pc3RyYXRpb25SZXBvcnRzUm91dGUgPSAnL2hvbWUvYWRtaW5pc3RyYXRpb24vcmVwb3J0cyc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBhdXRob3JNZW51Um91dGUgPSAnL2hvbWUvYXV0aG9yL2NvdXJzZXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBhdXRob3JDb3Vyc2VzUm91dGUgPSAnL2hvbWUvYXV0aG9yL2NvdXJzZXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBhdXRob3JMZWFybmluZ1BhdGhzUm91dGUgPSAnL2hvbWUvYXV0aG9yL2xlYXJuaW5nUGF0aHMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBhdXRob3JRdWl6emVzUm91dGUgPSAnL2hvbWUvYXV0aG9yL3F1aXp6ZXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBhdXRob3JTdXJ2ZXlzUm91dGUgPSAnL2hvbWUvYXV0aG9yL3N1cnZleXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBhdXRob3JGbGFzaGNhcmRzUm91dGUgPSAnL2hvbWUvYXV0aG9yL2ZsYXNoY2FyZHMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBhdXRob3JNYXRlcmlhbHNSb3V0ZSA9ICcvaG9tZS9hdXRob3IvbWF0ZXJpYWxzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgYXV0aG9yUmVwb3J0c1JvdXRlID0gJy9ob21lL2F1dGhvci9yZXBvcnRzJztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFBBUlRJQ0lQQU5UU19QQVJBTSA9IFwicHRjcFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBQQVJUSUNJUEFOVFNfR1JPVVBfUEFSQU0gPSBcImdyb3VwXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBBUlRJQ0lQQU5UX1RZUEVfQ09VUlNFUyA9IFwiY291cnNlc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBQQVJUSUNJUEFOVF9UWVBFX0xQID0gXCJsZWFybmluZ1BhdGhzXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBhdHRlbmRlZU1hbmFnZXJDb3Vyc2VzUm91dGUgPSAnL2hvbWUvYXR0ZW5kZWVNYW5hZ2VyL2NvdXJzZXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBhdHRlbmRlZU1hbmFnZXJMZWFybmluZ1BhdGhzUm91dGUgPSAnL2hvbWUvYXR0ZW5kZWVNYW5hZ2VyL2xlYXJuaW5nUGF0aHMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBhdHRlbmRlZU1hbmFnZXJSZXBvcnRzUm91dGUgPSAnL2hvbWUvYXR0ZW5kZWVNYW5hZ2VyL3JlcG9ydHMnO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdHJ1Y3RvckNvdXJzZXNSb3V0ZSA9ICcvaG9tZS9pbnN0cnVjdG9yL2NvdXJzZXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBpbnN0cnVjdG9yTGVhcm5pbmdQYXRoc1JvdXRlID0gJy9ob21lL2luc3RydWN0b3IvbGVhcm5pbmdQYXRocyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGluc3RydWN0b3JSZXBvcnRzUm91dGUgPSAnL2hvbWUvaW5zdHJ1Y3Rvci9yZXBvcnRzJztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHBhcnRpY2lwYW50c1JvdXRlID0gJy9ob21lL3Byb2dyZXNzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgcGFydGljaXBhbnRzVHlwZVJvdXRlID0gYC9ob21lL3Byb2dyZXNzP3B0Y3A9OiR7SG9tZVJvdXRlci5QQVJUSUNJUEFOVFNfUEFSQU19YDtcclxuXHJcbiAgICBwdWJsaWMgaW5kZXhVcmwocm9sZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm9sZVJvdXRlUGFyYW0oSG9tZVJvdXRlci5pbmRleFJvdXRlLCByb2xlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY291cnNlc1VybChyb2xlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRSb2xlUm91dGVQYXJhbShIb21lUm91dGVyLmhvbWVDb3Vyc2VzUm91dGUsIHJvbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdXRob3JDb3Vyc2VzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEhvbWVSb3V0ZXIuYXV0aG9yQ291cnNlc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzVXJsKHJvbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvbGVSb3V0ZVBhcmFtKEhvbWVSb3V0ZXIuaG9tZUxlYXJuaW5nUGF0aHNSb3V0ZSwgcm9sZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF1dGhvckxlYXJuaW5nUGF0aHNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gSG9tZVJvdXRlci5hdXRob3JMZWFybmluZ1BhdGhzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF1dGhvclF1aXp6ZXNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gSG9tZVJvdXRlci5hdXRob3JRdWl6emVzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF1dGhvclN1cnZleXNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gSG9tZVJvdXRlci5hdXRob3JTdXJ2ZXlzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF1dGhvckZsYXNoY2FyZHNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gSG9tZVJvdXRlci5hdXRob3JGbGFzaGNhcmRzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF1dGhvck1hdGVyaWFsc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBIb21lUm91dGVyLmF1dGhvck1hdGVyaWFsc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdXRob3JSZXBvcnRzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEhvbWVSb3V0ZXIuYXV0aG9yUmVwb3J0c1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXRlcmlhbHNVcmwocm9sZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm9sZVJvdXRlUGFyYW0oSG9tZVJvdXRlci5ob21lTWF0ZXJpYWxzUm91dGUsIHJvbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmbGFzaGNhcmRzVXJsKHJvbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvbGVSb3V0ZVBhcmFtKEhvbWVSb3V0ZXIuaG9tZUZsYXNoY2FyZHNSb3V0ZSwgcm9sZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcG9ydHNVcmwocm9sZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm9sZVJvdXRlUGFyYW0oSG9tZVJvdXRlci5ob21lUmVwb3J0c1JvdXRlLCByb2xlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRtaW5pc3RyYXRpb25NZW51VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEhvbWVSb3V0ZXIuYWRtaW5pc3RyYXRpb25NZW51Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF1dGhvck1lbnVVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gSG9tZVJvdXRlci5hdXRob3JNZW51Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkbWluaXN0cmF0aW9uUmVwb3J0c1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBIb21lUm91dGVyLmFkbWluaXN0cmF0aW9uUmVwb3J0c1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHRlbmRlZU1hbmFnZXJIb21lVXJsKGxlYXJuaW5nUGF0aENvdW50OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBsZWFybmluZ1BhdGhDb3VudCAmJiBsZWFybmluZ1BhdGhDb3VudCA+IDAgPyBIb21lUm91dGVyLmF0dGVuZGVlTWFuYWdlckxlYXJuaW5nUGF0aHNSb3V0ZSA6IEhvbWVSb3V0ZXIuYXR0ZW5kZWVNYW5hZ2VyQ291cnNlc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwYXJ0aWNpcGFudHNVcmwobW9kZWxUeXBlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobW9kZWxUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgICAgICAuaW50ZXJwb2xhdGUoSG9tZVJvdXRlci5wYXJ0aWNpcGFudHNUeXBlUm91dGUpXHJcbiAgICAgICAgICAgICAgICAud2l0aCgnOicgKyBIb21lUm91dGVyLlBBUlRJQ0lQQU5UU19QQVJBTSwgbW9kZWxUeXBlKVxyXG4gICAgICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBIb21lUm91dGVyLnBhcnRpY2lwYW50c1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHRlbmRlZU1hbmFnZXJDb3Vyc2VzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEhvbWVSb3V0ZXIuYXR0ZW5kZWVNYW5hZ2VyQ291cnNlc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHRlbmRlZU1hbmFnZXJMZWFybmluZ1BhdGhzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEhvbWVSb3V0ZXIuYXR0ZW5kZWVNYW5hZ2VyTGVhcm5pbmdQYXRoc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHRlbmRlZU1hbmFnZXJSZXBvcnRzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEhvbWVSb3V0ZXIuYXR0ZW5kZWVNYW5hZ2VyUmVwb3J0c1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbnN0cnVjdG9ySG9tZVVybChsZWFybmluZ1BhdGhDb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gbGVhcm5pbmdQYXRoQ291bnQgJiYgbGVhcm5pbmdQYXRoQ291bnQgPiAwID8gSG9tZVJvdXRlci5pbnN0cnVjdG9yTGVhcm5pbmdQYXRoc1JvdXRlIDogSG9tZVJvdXRlci5pbnN0cnVjdG9yQ291cnNlc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbnN0cnVjdG9yQ291cnNlc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBIb21lUm91dGVyLmluc3RydWN0b3JDb3Vyc2VzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluc3RydWN0b3JMZWFybmluZ1BhdGhzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEhvbWVSb3V0ZXIuaW5zdHJ1Y3RvckxlYXJuaW5nUGF0aHNSb3V0ZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbnN0cnVjdG9yUmVwb3J0c1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBIb21lUm91dGVyLmluc3RydWN0b3JSZXBvcnRzUm91dGVcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZFJvbGVSb3V0ZVBhcmFtKHJvdXRlOiBzdHJpbmcsIHJvbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChyb2xlKSB7XHJcbiAgICAgICAgICAgIHJvdXRlICs9IFwiP1wiICsgSG9tZVJvdXRlci5yb2xlUGFyYW0gKyBcIj1cIiArIHJvbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb3V0ZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBJbXBvcnRSb3V0ZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1cmxzLkltcG9ydFJvdXRlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaW5kZXhSb3V0ZSA9IFwiL2ltcG9ydC1leHBvcnRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgaW1wb3J0Um91dGUgPSBcIi9pbXBvcnQtZXhwb3J0L2ltcG9ydFwiO1xyXG5cclxuXHJcbiAgICBwdWJsaWMgaW5kZXhVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gSW1wb3J0Um91dGVyLmltcG9ydFJvdXRlO1xyXG4gICAgfVxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBJbmZvUm91dGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXJscy5JbmZvUm91dGVyXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGFib3V0UHJvamVjdFJvdXRlID0gXCIvaW5mby9hYm91dC9wcm9qZWN0XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGFib3V0Q29tcGFueVJvdXRlID0gXCIvaW5mby9hYm91dC9jb21wYW55XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGZhcVJvdXRlID0gXCIvaW5mby9mYXFcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgY29udGFjdHNSb3V0ZSA9IFwiL2luZm8vY29udGFjdHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgYWNjZXNzaWJpbGl0eVJvdXRlID0gXCIvaW5mby9hY2Nlc3NpYmlsaXR5XCI7XHJcblxyXG4gICAgcHVibGljIGFib3V0UHJvamVjdFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBJbmZvUm91dGVyLmFib3V0UHJvamVjdFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhYm91dENvbXBhbnlVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gSW5mb1JvdXRlci5hYm91dENvbXBhbnlSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmFxVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEluZm9Sb3V0ZXIuZmFxUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnRhY3RzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEluZm9Sb3V0ZXIuY29udGFjdHNSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWNjZXNzaWJpbGl0eVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBJbmZvUm91dGVyLmFjY2Vzc2liaWxpdHlSb3V0ZTtcclxuICAgIH1cclxufSIsImV4cG9ydCBjbGFzcyBKb2JzUm91dGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiam9icy5Kb2JzUm91dGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBqb2JzUm91dGU6IHN0cmluZyA9IFwiL2pvYnNcIjtcclxuXHJcbiAgICBwdWJsaWMgam9ic1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBKb2JzUm91dGVyLmpvYnNSb3V0ZTtcclxuICAgIH1cclxufSIsImltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMZWFybmluZ1BhdGhzUm91dGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXJscy5MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBMRUFSTklOR19QQVRIX0lEX1BBUkFNID0gXCJsZWFybmluZ1BhdGhJZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBQVVJDSEFTRURfT1JERVIgPSBcInB1cmNoYXNlZE9yZGVyXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFVTRVJfSURfUEFSQU0gPSBcInVzZXJJZFwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaW5kZXhSb3V0ZSA9IFwiL2xlYXJuaW5nUGF0aHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgaW5kZXhQdXJjaGFzZWRSb3V0ZSA9IFwiL2xlYXJuaW5nUGF0aHMvcHVyY2hhc2VkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGluZGV4UHVyY2hhc2VkT3JkZXJSb3V0ZSA9IFwiL2xlYXJuaW5nUGF0aHMvcHVyY2hhc2VkXCIgK1xyXG4gICAgICAgIGA/cHVyY2hhc2VkT3JkZXI9OiR7TGVhcm5pbmdQYXRoc1JvdXRlci5QVVJDSEFTRURfT1JERVJ9YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZGV0YWlsc1JvdXRlID0gYC9sZWFybmluZ1BhdGhzLzoke0xlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVSb3V0ZSA9IFwiL2xlYXJuaW5nUGF0aHMvY3JlYXRlXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHVwZGF0ZVJvdXRlID0gYC9sZWFybmluZ1BhdGhzL3VwZGF0ZS86JHtMZWFybmluZ1BhdGhzUm91dGVyLkxFQVJOSU5HX1BBVEhfSURfUEFSQU19YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgcmVsYXRlZFByb2R1Y3RzVXBkYXRlUm91dGUgPSBgL2xlYXJuaW5nUGF0aHMvdXBkYXRlLzoke0xlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTX1gICsgXCIvcmVsYXRlZFByb2R1Y3RzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBlcm1pc3Npb25zVXBkYXRlUm91dGUgPSBgL2xlYXJuaW5nUGF0aHMvdXBkYXRlLzoke0xlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTX1gICsgXCIvcGVybWlzc2lvbnNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgcHJvZ3Jlc3NSb3V0ZSA9IGAvbGVhcm5pbmdQYXRocy86JHtMZWFybmluZ1BhdGhzUm91dGVyLkxFQVJOSU5HX1BBVEhfSURfUEFSQU19YCArIFwiL3Byb2dyZXNzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHByb2dyZXNzUm91dGVVc2VyID0gYC9sZWFybmluZ1BhdGhzLzoke0xlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTX0vcHJvZ3Jlc3M/dXNlcklkPToke0xlYXJuaW5nUGF0aHNSb3V0ZXIuVVNFUl9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBwYXJ0aWNpcGF0aW9uRm9ybVVwZGF0ZVJvdXRlID0gYC9sZWFybmluZ1BhdGhzL3VwZGF0ZS86JHtMZWFybmluZ1BhdGhzUm91dGVyLkxFQVJOSU5HX1BBVEhfSURfUEFSQU19YCArIFwiL3BhcnRpY2lwYXRpb25Gb3JtXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBhcnRpY2lwYXRpb25Gb3JtRmlsbFJvdXRlID0gYC9sZWFybmluZ1BhdGhzL2ZpbGwvOiR7TGVhcm5pbmdQYXRoc1JvdXRlci5MRUFSTklOR19QQVRIX0lEX1BBUkFNfWAgKyBcIi9wYXJ0aWNpcGF0aW9uRm9ybVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBwZXJtaXNzaW9uc0RlbGVnYXRpb25Sb3V0ZSA9IGAvbGVhcm5pbmdQYXRocy9wZXJtaXNzaW9uc0RlbGVnYXRpb24vOiR7TGVhcm5pbmdQYXRoc1JvdXRlci5MRUFSTklOR19QQVRIX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdhbWlmaWNhdGlvbkRldGFpbFJvdXRlID0gYC9sZWFybmluZ1BhdGhzLzoke0xlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTX1gICsgXCIvZ2FtaWZpY2F0aW9uXCI7XHJcblxyXG4gICAgcHVibGljIGluZGV4UHVyY2hhc2VkT3JkZXJVcmwocHVyY2hhc2VkT3JkZXJJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoTGVhcm5pbmdQYXRoc1JvdXRlci5pbmRleFB1cmNoYXNlZE9yZGVyUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIExlYXJuaW5nUGF0aHNSb3V0ZXIuUFVSQ0hBU0VEX09SREVSLCBwdXJjaGFzZWRPcmRlcklkKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5kZXhVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gTGVhcm5pbmdQYXRoc1JvdXRlci5pbmRleFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gTGVhcm5pbmdQYXRoc1JvdXRlci5jcmVhdGVSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVXJsKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKExlYXJuaW5nUGF0aHNSb3V0ZXIudXBkYXRlUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIExlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTSwgbGVhcm5pbmdQYXRoSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbGF0ZWRQcm9kdWN0c1VwZGF0ZVVybChsZWFybmluZ1BhdGhJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoTGVhcm5pbmdQYXRoc1JvdXRlci5yZWxhdGVkUHJvZHVjdHNVcGRhdGVSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgTGVhcm5pbmdQYXRoc1JvdXRlci5MRUFSTklOR19QQVRIX0lEX1BBUkFNLCBsZWFybmluZ1BhdGhJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGVybWlzc2lvbnNVcGRhdGVVcmwobGVhcm5pbmdQYXRoSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXJcclxuICAgICAgICAgICAgLmludGVycG9sYXRlKExlYXJuaW5nUGF0aHNSb3V0ZXIucGVybWlzc2lvbnNVcGRhdGVSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgTGVhcm5pbmdQYXRoc1JvdXRlci5MRUFSTklOR19QQVRIX0lEX1BBUkFNLCBsZWFybmluZ1BhdGhJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGV0YWlsc1VybChsZWFybmluZ1BhdGhJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoTGVhcm5pbmdQYXRoc1JvdXRlci5kZXRhaWxzUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIExlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTSwgbGVhcm5pbmdQYXRoSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByb2dyZXNzVXJsKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShMZWFybmluZ1BhdGhzUm91dGVyLnByb2dyZXNzUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIExlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTSwgbGVhcm5pbmdQYXRoSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByb2dyZXNzVXJsRm9yVXNlcihsZWFybmluZ1BhdGhJZDogbnVtYmVyLCB1c2VySWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXJcclxuICAgICAgICAgICAgLmludGVycG9sYXRlKExlYXJuaW5nUGF0aHNSb3V0ZXIucHJvZ3Jlc3NSb3V0ZVVzZXIpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIExlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTSwgbGVhcm5pbmdQYXRoSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgTGVhcm5pbmdQYXRoc1JvdXRlci5VU0VSX0lEX1BBUkFNLCB1c2VySWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBhcnRpY2lwYXRpb25Gb3JtVXBkYXRlVXJsKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKExlYXJuaW5nUGF0aHNSb3V0ZXIucGFydGljaXBhdGlvbkZvcm1VcGRhdGVSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgTGVhcm5pbmdQYXRoc1JvdXRlci5MRUFSTklOR19QQVRIX0lEX1BBUkFNLCBsZWFybmluZ1BhdGhJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGFydGljaXBhdGlvbkZvcm1GaWxsVXJsKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKExlYXJuaW5nUGF0aHNSb3V0ZXIucGFydGljaXBhdGlvbkZvcm1GaWxsUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIExlYXJuaW5nUGF0aHNSb3V0ZXIuTEVBUk5JTkdfUEFUSF9JRF9QQVJBTSwgbGVhcm5pbmdQYXRoSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBlcm1pc3Npb25zRGVsZWdhdGlvblVybChsZWFybmluZ1BhdGhJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShMZWFybmluZ1BhdGhzUm91dGVyLnBlcm1pc3Npb25zRGVsZWdhdGlvblJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBMZWFybmluZ1BhdGhzUm91dGVyLkxFQVJOSU5HX1BBVEhfSURfUEFSQU0sIGxlYXJuaW5nUGF0aElkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnYW1pZmljYXRpb25EZXRhaWxzVXJsKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShMZWFybmluZ1BhdGhzUm91dGVyLmdhbWlmaWNhdGlvbkRldGFpbFJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBMZWFybmluZ1BhdGhzUm91dGVyLkxFQVJOSU5HX1BBVEhfSURfUEFSQU0sIGxlYXJuaW5nUGF0aElkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBMb2dzUm91dGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXJscy5Mb2dzUm91dGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBzZWN1cml0eUxvZ3NSb3V0ZSA9IFwiL2xvZ3Mvc2VjdXJpdHlcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc3lzdGVtTG9nc1JvdXRlID0gXCIvbG9ncy9zeXN0ZW1cIjtcclxuXHJcbiAgICBwdWJsaWMgc3lzdGVtTG9nc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBMb2dzUm91dGVyLnN5c3RlbUxvZ3NSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VjdXJpdHlMb2dzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIExvZ3NSb3V0ZXIuc2VjdXJpdHlMb2dzUm91dGU7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgY2xhc3MgTWFpblJvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuTWFpblJvdXRlclwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBtYWluUm91dGUgPSBcIi9cIjtcclxuXHJcbiAgICBwdWJsaWMgbWFpblVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBNYWluUm91dGVyLm1haW5Sb3V0ZTtcclxuICAgIH1cclxufSIsImltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsc1JvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuTWF0ZXJpYWxzUm91dGVyXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE1BVEVSSUFMX0lEX1BBUkFNID0gXCJtYXRlcmlhbElkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBMQVlMSVNUX0lEX1BBUkFNID0gXCJwbGF5bGlzdElkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBVUkNIQVNFRF9PUkRFUiA9IFwicHVyY2hhc2VkT3JkZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGluZGV4Um91dGUgPSBcIi9tYXRlcmlhbHMvc2VhcmNoXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGluZGV4UHVyY2hhc2VkUm91dGUgPSBcIi9tYXRlcmlhbHMvc2VhcmNoL3B1cmNoYXNlZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBpbmRleFB1cmNoYXNlZE9yZGVyUm91dGUgPSBcIi9tYXRlcmlhbHMvc2VhcmNoL3B1cmNoYXNlZFwiICtcclxuICAgICAgICBgP3B1cmNoYXNlZE9yZGVyPToke01hdGVyaWFsc1JvdXRlci5QVVJDSEFTRURfT1JERVJ9YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgbWF0ZXJpYWxSb3V0ZSA9IGAvbWF0ZXJpYWxzLzoke01hdGVyaWFsc1JvdXRlci5NQVRFUklBTF9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBteURvd25sb2Fkc1JvdXRlID0gXCIvbWF0ZXJpYWxzL215L2Rvd25sb2Fkc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVSb3V0ZSA9IFwiL21hdGVyaWFscy9jcmVhdGVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgcGxheWxpc3RzUm91dGUgPSBcIi9tYXRlcmlhbHMvcGxheWxpc3RzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBsYXlsaXN0Q3JlYXRlUm91dGUgPSBgL21hdGVyaWFscy9wbGF5bGlzdHMvY3JlYXRlYDtcclxuICAgIHB1YmxpYyBzdGF0aWMgcGxheWxpc3REZXRhaWxzUm91dGUgPSBgL21hdGVyaWFscy9wbGF5bGlzdHMvOiR7TWF0ZXJpYWxzUm91dGVyLlBMQVlMSVNUX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBsYXlsaXN0RWRpdFJvdXRlID0gYC9tYXRlcmlhbHMvcGxheWxpc3RzLzoke01hdGVyaWFsc1JvdXRlci5QTEFZTElTVF9JRF9QQVJBTX0vZWRpdGA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHVwZGF0ZVJvdXRlID0gYC9tYXRlcmlhbHMvdXBkYXRlLzoke01hdGVyaWFsc1JvdXRlci5NQVRFUklBTF9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyByZWxhdGVkUHJvZHVjdHNVcGRhdGVSb3V0ZSA9IGAvbWF0ZXJpYWxzL3VwZGF0ZS86JHtNYXRlcmlhbHNSb3V0ZXIuTUFURVJJQUxfSURfUEFSQU19YCArIFwiL3JlbGF0ZWRQcm9kdWN0c1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBwZXJtaXNzaW9uc1VwZGF0ZVJvdXRlID0gYC9tYXRlcmlhbHMvdXBkYXRlLzoke01hdGVyaWFsc1JvdXRlci5NQVRFUklBTF9JRF9QQVJBTX1gICsgXCIvcGVybWlzc2lvbnNcIjtcclxuXHJcbiAgICBwdWJsaWMgaW5kZXhVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gTWF0ZXJpYWxzUm91dGVyLmluZGV4Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluZGV4UHVyY2hhc2VkT3JkZXJVcmwocHVyY2hhc2VkT3JkZXJJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoTWF0ZXJpYWxzUm91dGVyLmluZGV4UHVyY2hhc2VkT3JkZXJSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgTWF0ZXJpYWxzUm91dGVyLlBVUkNIQVNFRF9PUkRFUiwgcHVyY2hhc2VkT3JkZXJJZClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdhdGNoVXJsKGZpbGVJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShNYXRlcmlhbHNSb3V0ZXIubWF0ZXJpYWxSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgTWF0ZXJpYWxzUm91dGVyLk1BVEVSSUFMX0lEX1BBUkFNLCBmaWxlSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG15RG93bmxvYWRzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGVyaWFsc1JvdXRlci5teURvd25sb2Fkc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gTWF0ZXJpYWxzUm91dGVyLmNyZWF0ZVJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwbGF5bGlzdHNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gTWF0ZXJpYWxzUm91dGVyLnBsYXlsaXN0c1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwbGF5bGlzdERldGFpbHNVcmwocGxheWxpc3RJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShNYXRlcmlhbHNSb3V0ZXIucGxheWxpc3REZXRhaWxzUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIE1hdGVyaWFsc1JvdXRlci5QTEFZTElTVF9JRF9QQVJBTSwgcGxheWxpc3RJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGxheWxpc3RFZGl0VXJsKHBsYXlsaXN0SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoTWF0ZXJpYWxzUm91dGVyLnBsYXlsaXN0RWRpdFJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBNYXRlcmlhbHNSb3V0ZXIuUExBWUxJU1RfSURfUEFSQU0sIHBsYXlsaXN0SWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBsYXlsaXN0Q3JlYXRlVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGVyaWFsc1JvdXRlci5wbGF5bGlzdENyZWF0ZVJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVVcmwobWF0ZXJpYWxJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShNYXRlcmlhbHNSb3V0ZXIudXBkYXRlUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIE1hdGVyaWFsc1JvdXRlci5NQVRFUklBTF9JRF9QQVJBTSwgbWF0ZXJpYWxJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVsYXRlZFByb2R1Y3RzVXBkYXRlVXJsKG1hdGVyaWFsSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoTWF0ZXJpYWxzUm91dGVyLnJlbGF0ZWRQcm9kdWN0c1VwZGF0ZVJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBNYXRlcmlhbHNSb3V0ZXIuTUFURVJJQUxfSURfUEFSQU0sIG1hdGVyaWFsSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBlcm1pc3Npb25zVXBkYXRlVXJsKG1hdGVyaWFsSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoTWF0ZXJpYWxzUm91dGVyLnBlcm1pc3Npb25zVXBkYXRlUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIE1hdGVyaWFsc1JvdXRlci5NQVRFUklBTF9JRF9QQVJBTSwgbWF0ZXJpYWxJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBOZXdzUm91dGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXJscy5OZXdzUm91dGVyXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE9ORV9ORVdTX0lEX1BBUkFNID0gXCJuZXdzSWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkVXU19UWVBFX1BBUkFNID0gXCJuZXdzVHlwZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgbmV3c1NlYXJjaFJvdXRlID0gYC9uZXdzL3NlYXJjaC86JHtOZXdzUm91dGVyLk5FV1NfVFlQRV9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBvbmVOZXdzQ3JlYXRlUm91dGUgPSBgL25ld3MvOiR7TmV3c1JvdXRlci5ORVdTX1RZUEVfUEFSQU19L2NyZWF0ZWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIG9uZU5ld3NSb3V0ZSA9IGAvbmV3cy86JHtOZXdzUm91dGVyLk9ORV9ORVdTX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIG9uZU5ld3NFZGl0Um91dGUgPSBgL25ld3MvOiR7TmV3c1JvdXRlci5PTkVfTkVXU19JRF9QQVJBTX0vZWRpdGA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGhlbHBSb3V0ZSA9IGAvaGVscC86JHtOZXdzUm91dGVyLk9ORV9ORVdTX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGhlbHBFZGl0Um91dGUgPSBgL2hlbHAvOiR7TmV3c1JvdXRlci5PTkVfTkVXU19JRF9QQVJBTX0vZWRpdGA7XHJcblxyXG4gICAgcHVibGljIG5ld3NTZWFyY2hVcmwobmV3c1R5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoTmV3c1JvdXRlci5uZXdzU2VhcmNoUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIE5ld3NSb3V0ZXIuTkVXU19UWVBFX1BBUkFNLCBuZXdzVHlwZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25lTmV3c1VybChuZXdzSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoTmV3c1JvdXRlci5vbmVOZXdzUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIE5ld3NSb3V0ZXIuT05FX05FV1NfSURfUEFSQU0sIG5ld3NJZClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uZU5ld3NFZGl0VXJsKG5ld3NJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShOZXdzUm91dGVyLm9uZU5ld3NFZGl0Um91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIE5ld3NSb3V0ZXIuT05FX05FV1NfSURfUEFSQU0sIG5ld3NJZClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uZU5ld3NDcmVhdGVVcmwobmV3c1R5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoTmV3c1JvdXRlci5vbmVOZXdzQ3JlYXRlUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKFwiOlwiICsgTmV3c1JvdXRlci5ORVdTX1RZUEVfUEFSQU0sIG5ld3NUeXBlKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGVscFVybChuZXdzSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoTmV3c1JvdXRlci5oZWxwUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIE5ld3NSb3V0ZXIuT05FX05FV1NfSURfUEFSQU0sIG5ld3NJZClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhlbHBFZGl0VXJsKG5ld3NJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShOZXdzUm91dGVyLmhlbHBFZGl0Um91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIE5ld3NSb3V0ZXIuT05FX05FV1NfSURfUEFSQU0sIG5ld3NJZClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuTm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBOT1RJRklDQVRJT05fVEVNUExBVEVfSURfUEFSQU0gPSBcIm5vdGlmaWNhdGlvbklkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5PVElGSUNBVElPTl9CVVNJTkVTU19VTklUX1BBUkFNID0gXCJidXNpbmVzc1VuaXRJZFwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaW5kZXhSb3V0ZSA9IFwiL25vdGlmaWNhdGlvblRlbXBsYXRlc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBlZGl0Um91dGUgPSBcIi9ub3RpZmljYXRpb25UZW1wbGF0ZXMvOm5vdGlmaWNhdGlvbklkL2VkaXRcIjtcclxuXHJcbiAgICBwdWJsaWMgaW5kZXhVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyLmluZGV4Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRVcmwodGVtcGxhdGVJZDogbnVtYmVyLCBidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgZWRpdFVybDogc3RyaW5nID0gTm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyLmVkaXRSb3V0ZVxyXG4gICAgICAgICAgICAucmVwbGFjZShcIjpcIiArIE5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlci5OT1RJRklDQVRJT05fVEVNUExBVEVfSURfUEFSQU0sIHRlbXBsYXRlSWQudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICAgIGlmIChidXNpbmVzc1VuaXRJZCkge1xyXG4gICAgICAgICAgICBlZGl0VXJsICs9IGA/JHtOb3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXIuTk9USUZJQ0FUSU9OX0JVU0lORVNTX1VOSVRfUEFSQU19PSR7YnVzaW5lc3NVbml0SWQudG9TdHJpbmcoKX1gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlZGl0VXJsO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBheVBhbFJvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuUGF5UGFsUm91dGVyXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBPUkRFUl9JRF9QQVJBTSA9IFwib3JkZXJJZFwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgb3JkZXJDYW5jZWxsYXRpb25Sb3V0ZSA9IGAvaW50ZWdyYXRpb24vcGF5cGFsL29yZGVycy86JHtQYXlQYWxSb3V0ZXIuT1JERVJfSURfUEFSQU19L2NhbmNlbGA7XHJcbiAgICBwdWJsaWMgc3RhdGljIG9yZGVyQ29uZmlybWF0aW9uUm91dGUgPSBgL2ludGVncmF0aW9uL3BheXBhbC9vcmRlcnMvOiR7UGF5UGFsUm91dGVyLk9SREVSX0lEX1BBUkFNfS9jb25maXJtYDtcclxuXHJcbiAgICBwdWJsaWMgb3JkZXJDYW5jZWxsYXRpb25Vcmwob3JkZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShQYXlQYWxSb3V0ZXIub3JkZXJDYW5jZWxsYXRpb25Sb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgUGF5UGFsUm91dGVyLk9SREVSX0lEX1BBUkFNLCBvcmRlcklkKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3JkZXJDb25maXJtYXRpb25Vcmwob3JkZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShQYXlQYWxSb3V0ZXIub3JkZXJDb25maXJtYXRpb25Sb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgUGF5UGFsUm91dGVyLk9SREVSX0lEX1BBUkFNLCBvcmRlcklkKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQZXJzb25hbFJvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuUGVyc29uYWxSb3V0ZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFFVSVpfSURfUEFSQU0gPSBcInF1aXpJZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBRVUlaX1JFU1VMVF9JRF9QQVJBTSA9IFwicXVpelJlc3VsdElkXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBmYXZvcml0ZXNSb3V0ZSA9IFwiL3BlcnNvbmFsL2Zhdm9yaXRlc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyB1cGxvYWRzUm91dGUgPSBcIi9wZXJzb25hbC91cGxvYWRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNvdXJzZXNSb3V0ZSA9IFwiL3BlcnNvbmFsL2NvdXJzZXNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbGVhcm5pbmdQYXRoc1JvdXRlID0gXCIvcGVyc29uYWwvbGVhcm5pbmdQYXRoc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBjZXJ0aWZpY2F0ZXNSb3V0ZSA9IFwiL3BlcnNvbmFsL2NlcnRpZmljYXRlc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBxdWl6emVzUm91dGUgPSBcIi9wZXJzb25hbC9xdWl6emVzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHF1aXpEZXRhaWxzUm91dGUgPSBgL3BlcnNvbmFsL3F1aXp6ZXMvOiR7UGVyc29uYWxSb3V0ZXIuUVVJWl9JRF9QQVJBTX0vcmVzdWx0cy86JHtQZXJzb25hbFJvdXRlci5RVUlaX1JFU1VMVF9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBwbGF5bGlzdHNSb3V0ZSA9IFwiL3BlcnNvbmFsL3BsYXlsaXN0c1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBzdWJzY3JpcHRpb25zUm91dGUgPSBcIi9wZXJzb25hbC9zdWJzY3JpcHRpb25zXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIG5ld0NvbW1lbnRzUm91dGUgPSBcIi9wZXJzb25hbC9jb21tZW50cy9uZXdzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN1cHBvcnRSb3V0ZSA9IFwiL3BlcnNvbmFsL3N1cHBvcnRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgY291cG9uc1JvdXRlID0gXCIvcGVyc29uYWwvY291cG9uc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBzZXR0aW5nc1JvdXRlID0gXCIvcGVyc29uYWwvc2V0dGluZ3NcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZXhwaXJlZENvdXJzZXNSb3V0ZSA9IFwiL3BlcnNvbmFsL2V4cGlyZWRDb3Vyc2VzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGV4cGlyZWRMZWFybmluZ1BhdGhzUm91dGUgPSBcIi9wZXJzb25hbC9leHBpcmVkTGVhcm5pbmdQYXRoc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBwdXJjaGFzZWRPcmRlcnNSb3V0ZSA9IFwiL3BlcnNvbmFsL3B1cmNoYXNlZE9yZGVyc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBjcmVkaXRzUm91dGUgPSBcIi9wZXJzb25hbC9jcmVkaXRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNhbGVuZGFyUm91dGUgPSBcIi9wZXJzb25hbC9jYWxlbmRhclwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBhc3Nlc3NtZW50c1JvdXRlID0gXCIvcGVyc29uYWwvYXNzZXNzbWVudHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgYmFkZ2VzUm91dGUgPSBcIi9wZXJzb25hbC9iYWRnZXNcIjtcclxuXHJcbiAgICBwdWJsaWMgZmF2b3JpdGVzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFBlcnNvbmFsUm91dGVyLmZhdm9yaXRlc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGxvYWRzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFBlcnNvbmFsUm91dGVyLnVwbG9hZHNSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY291cnNlc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBQZXJzb25hbFJvdXRlci5jb3Vyc2VzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxlYXJuaW5nUGF0aHNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUGVyc29uYWxSb3V0ZXIubGVhcm5pbmdQYXRoc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjZXJ0aWZpY2F0ZXNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUGVyc29uYWxSb3V0ZXIuY2VydGlmaWNhdGVzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHF1aXp6ZXNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUGVyc29uYWxSb3V0ZXIucXVpenplc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBxdWl6RGV0YWlsc1VybChxdWl6SWQ6IG51bWJlciwgcXVpelJlc3VsdElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShQZXJzb25hbFJvdXRlci5xdWl6RGV0YWlsc1JvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBQZXJzb25hbFJvdXRlci5RVUlaX0lEX1BBUkFNLCBxdWl6SWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgUGVyc29uYWxSb3V0ZXIuUVVJWl9SRVNVTFRfSURfUEFSQU0sIHF1aXpSZXN1bHRJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGxheWxpc3RzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFBlcnNvbmFsUm91dGVyLnBsYXlsaXN0c1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdWJzY3JpcHRpb25zVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFBlcnNvbmFsUm91dGVyLnN1YnNjcmlwdGlvbnNSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmV3Q29tbWVudHNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUGVyc29uYWxSb3V0ZXIubmV3Q29tbWVudHNSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3VwcG9ydFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBQZXJzb25hbFJvdXRlci5zdXBwb3J0Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvdXBvbnNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUGVyc29uYWxSb3V0ZXIuY291cG9uc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXR0aW5nc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBQZXJzb25hbFJvdXRlci5zZXR0aW5nc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleHBpcmVkQ291cnNlc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBQZXJzb25hbFJvdXRlci5leHBpcmVkQ291cnNlc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleHBpcmVkTGVhcm5pbmdQYXRoc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBQZXJzb25hbFJvdXRlci5leHBpcmVkTGVhcm5pbmdQYXRoc1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwdXJjaGFzZWRPcmRlcnNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUGVyc29uYWxSb3V0ZXIucHVyY2hhc2VkT3JkZXJzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWRpdHNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUGVyc29uYWxSb3V0ZXIuY3JlZGl0c1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYWxlbmRhclVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBQZXJzb25hbFJvdXRlci5jYWxlbmRhclJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3Nlc3NtZW50c1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBQZXJzb25hbFJvdXRlci5hc3Nlc3NtZW50c1JvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBiYWRnZXNVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUGVyc29uYWxSb3V0ZXIuYmFkZ2VzUm91dGU7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFBvbGljaWVzUm91dGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXJscy5Qb2xpY2llc1JvdXRlclwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBwcml2YWN5UG9saWN5Um91dGUgPSBcIi9wb2xpY2llcy9wcml2YWN5XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNvb2tpZVBvbGljeVJvdXRlID0gXCIvcG9saWNpZXMvY29va2llXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHRlcm1zT2ZVc2VSb3V0ZSA9IFwiL3BvbGljaWVzL3Rlcm1zT2ZVc2VcIjtcclxuXHJcbiAgICBwdWJsaWMgcHJpdmFjeVBvbGljeVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBQb2xpY2llc1JvdXRlci5wcml2YWN5UG9saWN5Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvb2tpZVBvbGljeVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBQb2xpY2llc1JvdXRlci5jb29raWVQb2xpY3lSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdGVybXNPZlVzZVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBQb2xpY2llc1JvdXRlci50ZXJtc09mVXNlUm91dGU7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1aXp6ZXNSb3V0ZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1cmxzLlF1aXp6ZXNSb3V0ZXJcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUVVJWl9JRF9QQVJBTSA9IFwicXVpeklkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFFVSVpfUkVTVUxUX0lEX1BBUkFNID0gXCJxdWl6UmVzdWx0SWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUVVJWl9UWVBFID0gXCJxdWl6VHlwZVwiO1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGdlbmVyYWxRdWl6VXJsQ29tcG9uZW50ID0gXCIvcXVpelwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBxdWl6emVzSW5kZXhSb3V0ZSA9IFwiL3F1aXp6ZXNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgcXVpenplc0RldGFpbHNSb3V0ZSA9IGAvcXVpenplcy86JHtRdWl6emVzUm91dGVyLlFVSVpfSURfUEFSQU19YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgcXVpenplc1Bhc3NpbmdSb3V0ZSA9IGAvcXVpenplcy9wYXNzaW5nLzoke1F1aXp6ZXNSb3V0ZXIuUVVJWl9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBxdWl6emVzVXBkYXRlUm91dGUgPSBgL3F1aXp6ZXMvdXBkYXRlLzoke1F1aXp6ZXNSb3V0ZXIuUVVJWl9JRF9QQVJBTX1gO1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGdlbmVyYWxTdXJ2ZXlVcmxDb21wb25lbnQgPSBcIi9zdXJ2ZXlcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc3VydmV5c0luZGV4Um91dGUgPSBcIi9zdXJ2ZXlzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN1cnZleXNEZXRhaWxzUm91dGUgPSBgL3N1cnZleXMvOiR7UXVpenplc1JvdXRlci5RVUlaX0lEX1BBUkFNfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN1cnZleXNQYXNzaW5nUm91dGUgPSBgL3N1cnZleXMvcGFzc2luZy86JHtRdWl6emVzUm91dGVyLlFVSVpfSURfUEFSQU19YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgc3VydmV5c1VwZGF0ZVJvdXRlID0gYC9zdXJ2ZXlzL3VwZGF0ZS86JHtRdWl6emVzUm91dGVyLlFVSVpfSURfUEFSQU19YDtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZW5lcmFsRmxhc2hjYXJkVXJsQ29tcG9uZW50ID0gXCIvZmxhc2hjYXJkc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBmbGFzaGNhcmRzSW5kZXhSb3V0ZSA9IFwiL2ZsYXNoY2FyZHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZmxhc2hjYXJkc0RldGFpbHNSb3V0ZSA9IGAvZmxhc2hjYXJkcy86JHtRdWl6emVzUm91dGVyLlFVSVpfSURfUEFSQU19YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZmxhc2hjYXJkc1Bhc3NpbmdSb3V0ZSA9IGAvZmxhc2hjYXJkcy9wYXNzaW5nLzoke1F1aXp6ZXNSb3V0ZXIuUVVJWl9JRF9QQVJBTX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyBmbGFzaGNhcmRzVXBkYXRlUm91dGUgPSBgL2ZsYXNoY2FyZHMvdXBkYXRlLzoke1F1aXp6ZXNSb3V0ZXIuUVVJWl9JRF9QQVJBTX1gO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlUm91dGUgPSBgL2NyZWF0ZS86JHtRdWl6emVzUm91dGVyLlFVSVpfVFlQRX1gO1xyXG5cclxuXHJcblxyXG4gICAgcHVibGljIHF1aXp6ZXNJbmRleFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBRdWl6emVzUm91dGVyLnF1aXp6ZXNJbmRleFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdXJ2ZXlzSW5kZXhVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gUXVpenplc1JvdXRlci5zdXJ2ZXlzSW5kZXhSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmxhc2hjYXJkc0luZGV4VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFF1aXp6ZXNSb3V0ZXIuZmxhc2hjYXJkc0luZGV4Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZVVybChxdWl6VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoUXVpenplc1JvdXRlci5jcmVhdGVSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgUXVpenplc1JvdXRlci5RVUlaX1RZUEUsIHF1aXpUeXBlKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcXVpenplc0RldGFpbHNVcmwocXVpeklkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyXHJcbiAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShRdWl6emVzUm91dGVyLnF1aXp6ZXNEZXRhaWxzUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIFF1aXp6ZXNSb3V0ZXIuUVVJWl9JRF9QQVJBTSwgcXVpeklkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBxdWl6emVzVXBkYXRlVXJsKHF1aXpJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShRdWl6emVzUm91dGVyLnF1aXp6ZXNVcGRhdGVSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgUXVpenplc1JvdXRlci5RVUlaX0lEX1BBUkFNLCBxdWl6SWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN1cnZleXNEZXRhaWxzVXJsKHF1aXpJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlclxyXG4gICAgICAgICAgICAuaW50ZXJwb2xhdGUoUXVpenplc1JvdXRlci5zdXJ2ZXlzRGV0YWlsc1JvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBRdWl6emVzUm91dGVyLlFVSVpfSURfUEFSQU0sIHF1aXpJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3VydmV5c1VwZGF0ZVVybChxdWl6SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoUXVpenplc1JvdXRlci5zdXJ2ZXlzVXBkYXRlUm91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKCc6JyArIFF1aXp6ZXNSb3V0ZXIuUVVJWl9JRF9QQVJBTSwgcXVpeklkLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmbGFzaGNhcmRzRGV0YWlsc1VybChxdWl6SWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXJcclxuICAgICAgICAgICAgLmludGVycG9sYXRlKFF1aXp6ZXNSb3V0ZXIuZmxhc2hjYXJkc0RldGFpbHNSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgUXVpenplc1JvdXRlci5RVUlaX0lEX1BBUkFNLCBxdWl6SWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZsYXNoY2FyZHNVcGRhdGVVcmwocXVpeklkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFF1aXp6ZXNSb3V0ZXIuZmxhc2hjYXJkc1VwZGF0ZVJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBRdWl6emVzUm91dGVyLlFVSVpfSURfUEFSQU0sIHF1aXpJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGFzc2luZ1VybChxdWl6SWQ6IG51bWJlciwgcXVpelJlc3VsdElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShRdWl6emVzUm91dGVyLnF1aXp6ZXNQYXNzaW5nUm91dGUpO1xyXG4gICAgICAgIGlmIChxdWl6UmVzdWx0SWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFkZChgPyR7UXVpenplc1JvdXRlci5RVUlaX1JFU1VMVF9JRF9QQVJBTX09OiR7UXVpenplc1JvdXRlci5RVUlaX1JFU1VMVF9JRF9QQVJBTX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0cmluZ0J1aWxkZXIud2l0aCgnOicgKyBRdWl6emVzUm91dGVyLlFVSVpfSURfUEFSQU0sIHF1aXpJZC50b1N0cmluZygpKTtcclxuICAgICAgICBpZiAocXVpelJlc3VsdElkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgc3RyaW5nQnVpbGRlci53aXRoKCc6JyArIFF1aXp6ZXNSb3V0ZXIuUVVJWl9SRVNVTFRfSURfUEFSQU0sIHF1aXpSZXN1bHRJZC50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1lbnVJdGVtKGxvY2F0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZihsb2NhdGlvblBhdGguaW5kZXhPZihRdWl6emVzUm91dGVyLmdlbmVyYWxTdXJ2ZXlVcmxDb21wb25lbnQpICE9PSAtMVxyXG4gICAgICAgICAgICB8fCBsb2NhdGlvblBhdGguaW5kZXhPZih0aGlzLmNyZWF0ZVVybChcIlNVUlZFWVwiKSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNZW51SGVscGVyLkVEVUNBVElPTl9TVVJWRVlTX01FTlVfS0VZO1xyXG4gICAgICAgIH0gZWxzZSBpZihsb2NhdGlvblBhdGguaW5kZXhPZihRdWl6emVzUm91dGVyLmdlbmVyYWxRdWl6VXJsQ29tcG9uZW50KSAhPT0gLTFcclxuICAgICAgICAgICAgfHwgbG9jYXRpb25QYXRoLmluZGV4T2YodGhpcy5jcmVhdGVVcmwoXCJRVUlaXCIpKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1lbnVIZWxwZXIuRURVQ0FUSU9OX1FVSVpaRVNfTUVOVV9LRVk7XHJcbiAgICAgICAgfSBlbHNlIGlmKGxvY2F0aW9uUGF0aC5pbmRleE9mKFF1aXp6ZXNSb3V0ZXIuZ2VuZXJhbEZsYXNoY2FyZFVybENvbXBvbmVudCkgIT09IC0xXHJcbiAgICAgICAgICAgIHx8IGxvY2F0aW9uUGF0aC5pbmRleE9mKHRoaXMuY3JlYXRlVXJsKFwiRkxBU0hDQVJEXCIpKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1lbnVIZWxwZXIuRURVQ0FUSU9OX0ZMQVNIQ0FSRFNfTUVOVV9LRVk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlZmVyZW5jZVJvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuUmVmZXJlbmNlUm91dGVyXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFJFRkVSRU5DRV9ERUZBVUxUX1ZBTFVFU19QQVJBTSA9IFwiZGVmYXVsdFZhbHVlc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBSRUZFUkVOQ0VfRklMVEVSX1BBUkFNID0gXCJmaWx0ZXJcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUkVGRVJFTkNFX0FTU09DSUFUSU9OX0ZJTFRFUlNfUEFSQU0gPSBcImFzc29jaWF0aW9uRmlsdGVyc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBSRUZFUkVOQ0VfTkFNRV9QQVJBTSA9IFwibmFtZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBSRUZFUkVOQ0VfSURfUEFSQU0gPSBcImlkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGluZGV4Um91dGUgPSBgL3JlZmVyZW5jZS86JHtSZWZlcmVuY2VSb3V0ZXIuUkVGRVJFTkNFX05BTUVfUEFSQU19YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZWRpdFJvdXRlID0gYC9yZWZlcmVuY2UvOiR7UmVmZXJlbmNlUm91dGVyLlJFRkVSRU5DRV9OQU1FX1BBUkFNfS86JHtSZWZlcmVuY2VSb3V0ZXIuUkVGRVJFTkNFX0lEX1BBUkFNfWA7XHJcblxyXG4gICAgcHVibGljIGluZGV4VXJsKHJlZmVyZW5jZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoUmVmZXJlbmNlUm91dGVyLmluZGV4Um91dGUpXHJcbiAgICAgICAgICAgIC53aXRoKFwiOlwiICsgUmVmZXJlbmNlUm91dGVyLlJFRkVSRU5DRV9OQU1FX1BBUkFNLCByZWZlcmVuY2VOYW1lKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdFVybChyZWZlcmVuY2VOYW1lOiBzdHJpbmcsIGlkPzogYW55KTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShSZWZlcmVuY2VSb3V0ZXIuZWRpdFJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aChcIjpcIiArIFJlZmVyZW5jZVJvdXRlci5SRUZFUkVOQ0VfTkFNRV9QQVJBTSwgcmVmZXJlbmNlTmFtZSlcclxuICAgICAgICAgICAgLndpdGgoXCI6XCIgKyBSZWZlcmVuY2VSb3V0ZXIuUkVGRVJFTkNFX0lEX1BBUkFNLCBpZCA9PSBudWxsID8gXCJuZXdcIiA6IGlkKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBjbGFzcyBTbGlkZVRlbXBsYXRlc1JvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuU2xpZGVUZW1wbGF0ZXNSb3V0ZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFNMSURFX0lEX1BBUkFNID0gXCJzbGlkZUlkXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpbmRleFJvdXRlID0gXCIvc2xpZGVUZW1wbGF0ZXMvXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVkaXRSb3V0ZSA9IFwiL3NsaWRlVGVtcGxhdGVzLzpzbGlkZUlkL2VkaXRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgYnVuZGxlVXBkYXRlUm91dGUgPSBcIi9zbGlkZVRlbXBsYXRlcy9idW5kbGVcIjtcclxuXHJcbiAgICBwdWJsaWMgaW5kZXhVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU2xpZGVUZW1wbGF0ZXNSb3V0ZXIuaW5kZXhSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdFVybChzbGlkZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzbGlkZUlkID09IDBcclxuICAgICAgICAgICAgPyBTbGlkZVRlbXBsYXRlc1JvdXRlci5lZGl0Um91dGUucmVwbGFjZShcIjpcIiArIFNsaWRlVGVtcGxhdGVzUm91dGVyLlNMSURFX0lEX1BBUkFNLCBcIm5ld1wiKVxyXG4gICAgICAgICAgICA6IFNsaWRlVGVtcGxhdGVzUm91dGVyLmVkaXRSb3V0ZS5yZXBsYWNlKFwiOlwiICsgU2xpZGVUZW1wbGF0ZXNSb3V0ZXIuU0xJREVfSURfUEFSQU0sIHNsaWRlSWQudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGJ1bmRsZVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTbGlkZVRlbXBsYXRlc1JvdXRlci5idW5kbGVVcGRhdGVSb3V0ZTtcclxuICAgIH1cclxuXHJcbn0iLCJleHBvcnQgY2xhc3MgU3RhdGlzdGljc1JvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuU3RhdGlzdGljc1JvdXRlclwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgUkVQT1JUX1RZUEVfS0VZX1BBUkFNID0gXCJyZXBvcnRUeXBlS2V5XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIG1hdGVyaWFsVmlld1JlcG9ydFJvdXRlID0gXCIvc3RhdGlzdGljcy9hbmFseXRpY3MvbWF0ZXJpYWwvdmlldy9yZXBvcnRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbWF0ZXJpYWxEb3dubG9hZFJlcG9ydFJvdXRlID0gXCIvc3RhdGlzdGljcy9hbmFseXRpY3MvbWF0ZXJpYWwvZG93bmxvYWQvcmVwb3J0XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIG1hdGVyaWFsVXBsb2FkUmVwb3J0Um91dGUgPSBcIi9zdGF0aXN0aWNzL2FuYWx5dGljcy9tYXRlcmlhbC91cGxvYWQvcmVwb3J0XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBvd2VyQmlSZXBvcnRSb3V0ZSA9IFwiL3N0YXRpc3RpY3MvYW5hbHl0aWNzL3Bvd2VyYmkvcmVwb3J0XCI7XHJcblxyXG4gICAgcHVibGljIG1hdGVyaWFsVmlld1JlcG9ydFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdGF0aXN0aWNzUm91dGVyLm1hdGVyaWFsVmlld1JlcG9ydFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXRlcmlhbERvd25sb2FkUmVwb3J0VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN0YXRpc3RpY3NSb3V0ZXIubWF0ZXJpYWxEb3dubG9hZFJlcG9ydFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXRlcmlhbFVwbG9hZFJlcG9ydFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdGF0aXN0aWNzUm91dGVyLm1hdGVyaWFsVXBsb2FkUmVwb3J0Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBvd2VyQmlSZXBvcnRVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RhdGlzdGljc1JvdXRlci5wb3dlckJpUmVwb3J0Um91dGU7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi8uLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3lzdGVtU2V0dGluZ3NSb3V0ZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1cmxzLlN5c3RlbVNldHRpbmdzUm91dGVyXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbW1vblNldHRpbmdzUm91dGUgPSBcIi9zZXR0aW5ncy9jb21tb25cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc3lzdGVtU2V0dGluZ3NSb3V0ZSA9IFwiL3NldHRpbmdzL3N5c3RlbVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgc3lzdGVtU2V0dGluZ3NDb25maWd1cmF0aW9uUm91dGUgPSBcIi9zZXR0aW5ncy9zeXN0ZW0vY29uZmlndXJhdGlvbnNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc3lzdGVtU2V0dGluZ3NCcmFuZGluZ1JvdXRlID0gXCIvc2V0dGluZ3Mvc3lzdGVtL2JyYW5kaW5nXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN5c3RlbVNldHRpbmdzTWVudUl0ZW1zVmlzaWJpbGl0eVJvdXRlID0gXCIvc2V0dGluZ3Mvc3lzdGVtL21lbnVJdGVtc1Zpc2liaWxpdHlcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFNUT1JBR0VfUExBQ0VfSURfUEFSQU0gPSBcInN0b3JhZ2VQbGFjZUlkXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBzdG9yYWdlUGxhY2VzSW5kZXhSb3V0ZSA9IFwiL3NldHRpbmdzL3N0b3JhZ2VQbGFjZXNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc3RvcmFnZVBsYWNlQ3JlYXRlUm91dGUgPSBcIi9zZXR0aW5ncy9zdG9yYWdlUGxhY2VzL2NyZWF0ZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBzdG9yYWdlUGxhY2VFZGl0Um91dGUgPSBgL3NldHRpbmdzL3N0b3JhZ2VQbGFjZXMvOiR7U3lzdGVtU2V0dGluZ3NSb3V0ZXIuU1RPUkFHRV9QTEFDRV9JRF9QQVJBTX0vZWRpdGA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN5c3RlbUJ1bmRsZUVkaXRSb3V0ZSA9IGAvc2V0dGluZ3MvYnVuZGxlcy9zeXN0ZW0vZWRpdGA7XHJcblxyXG4gICAgcHVibGljIGNvbW1vblNldHRpbmdzVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN5c3RlbVNldHRpbmdzUm91dGVyLmNvbW1vblNldHRpbmdzUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVNldHRpbmdzQ29uZmlndXJhdGlvblJvdXRlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN5c3RlbVNldHRpbmdzUm91dGVyLnN5c3RlbVNldHRpbmdzQ29uZmlndXJhdGlvblJvdXRlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN5c3RlbVNldHRpbmdzQnJhbmRpbmdSb3V0ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTeXN0ZW1TZXR0aW5nc1JvdXRlci5zeXN0ZW1TZXR0aW5nc0JyYW5kaW5nUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN5c3RlbVNldHRpbmdzTWVudUl0ZW1zVmlzaWJpbGl0eVJvdXRlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN5c3RlbVNldHRpbmdzUm91dGVyLnN5c3RlbVNldHRpbmdzTWVudUl0ZW1zVmlzaWJpbGl0eVJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzeXN0ZW1TZXR0aW5nc1VybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTeXN0ZW1TZXR0aW5nc1JvdXRlci5zeXN0ZW1TZXR0aW5nc1JvdXRlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0b3JhZ2VQbGFjZXNJbmRleFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTeXN0ZW1TZXR0aW5nc1JvdXRlci5zdG9yYWdlUGxhY2VzSW5kZXhSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RvcmFnZVBsYWNlQ3JlYXRlVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFN5c3RlbVNldHRpbmdzUm91dGVyLnN0b3JhZ2VQbGFjZUNyZWF0ZVJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdG9yYWdlUGxhY2VFZGl0VXJsKHN0b3JhZ2VQbGFjZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IFN0cmluZ0J1aWxkZXJcclxuICAgICAgICAgICAgLmludGVycG9sYXRlKFN5c3RlbVNldHRpbmdzUm91dGVyLnN0b3JhZ2VQbGFjZUVkaXRSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoXCI6XCIgKyBTeXN0ZW1TZXR0aW5nc1JvdXRlci5TVE9SQUdFX1BMQUNFX0lEX1BBUkFNLCBzdG9yYWdlUGxhY2VJZClcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3lzdGVtQnVuZGxlRWRpdFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTeXN0ZW1TZXR0aW5nc1JvdXRlci5zeXN0ZW1CdW5kbGVFZGl0Um91dGU7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLy4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBVcmxTZXJ2aWNlUHJvdmlkZXIgaW1wbGVtZW50cyBhbmd1bGFyLklTZXJ2aWNlUHJvdmlkZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1cmxzLlVybFNlcnZpY2VQcm92aWRlclwiO1xyXG5cclxuICAgIHByaXZhdGUgc2VydmljZVJvb3QgPSBcIi9cIjtcclxuICAgIHByaXZhdGUgYnVpbGRWZXJzaW9uID0gXCIvXCI7XHJcbiAgICBwcml2YXRlIGN1cnJlbnRMb2NhbGUgPSBcImVuX1VTXCI7XHJcblxyXG4gICAgcHVibGljIHNldFNlcnZpY2VSb290KHNlcnZpY2VSb290OiBzdHJpbmcpOiBVcmxTZXJ2aWNlUHJvdmlkZXIge1xyXG4gICAgICAgIHRoaXMuc2VydmljZVJvb3QgPSBzZXJ2aWNlUm9vdDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QnVpbGRWZXJzaW9uKGJ1aWxkVmVyc2lvbjogc3RyaW5nKTogVXJsU2VydmljZVByb3ZpZGVyIHtcclxuICAgICAgICB0aGlzLmJ1aWxkVmVyc2lvbiA9IGJ1aWxkVmVyc2lvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJGdldCgpOiBVcmxTZXJ2aWNlIHtcclxuICAgICAgICByZXR1cm4gbmV3IFVybFNlcnZpY2UodGhpcy5zZXJ2aWNlUm9vdCwgdGhpcy5idWlsZFZlcnNpb24sIHRoaXMuY3VycmVudExvY2FsZSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge01haW5Sb3V0ZXJ9IGZyb20gXCIuL01haW5Sb3V0ZXJcIjtcclxuaW1wb3J0IHtOZXdzUm91dGVyfSBmcm9tIFwiLi9OZXdzUm91dGVyXCI7XHJcbmltcG9ydCB7SW5mb1JvdXRlcn0gZnJvbSBcIi4vSW5mb1JvdXRlclwiO1xyXG5pbXBvcnQge0F1dGhSb3V0ZXJ9IGZyb20gXCIuL0F1dGhSb3V0ZXJcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VSb3V0ZXJ9IGZyb20gXCIuL1JlZmVyZW5jZVJvdXRlclwiO1xyXG5pbXBvcnQge1N5c3RlbVNldHRpbmdzUm91dGVyfSBmcm9tIFwiLi9TeXN0ZW1TZXR0aW5nc1JvdXRlclwiO1xyXG5pbXBvcnQge1VzZXJzUm91dGVyfSBmcm9tIFwiLi9Vc2Vyc1JvdXRlclwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTdGF0aXN0aWNzUm91dGVyfSBmcm9tIFwiLi9TdGF0aXN0aWNzUm91dGVyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtGaW5hbmNlc1JvdXRlcn0gZnJvbSBcIi4vRmluYW5jZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtQZXJzb25hbFJvdXRlcn0gZnJvbSBcIi4vUGVyc29uYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHtDb21tb25Sb3V0ZXJ9IGZyb20gXCIuL0NvbW1vblJvdXRlclwiO1xyXG5pbXBvcnQge0NvbnRlbnRSb3V0ZXJ9IGZyb20gXCIuL0NvbnRlbnRSb3V0ZXJcIjtcclxuaW1wb3J0IHtRdWl6emVzUm91dGVyfSBmcm9tIFwiLi9RdWl6emVzUm91dGVyXCI7XHJcbmltcG9ydCB7TG9nc1JvdXRlcn0gZnJvbSBcIi4vTG9nc1JvdXRlclwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2VQcm92aWRlcn0gZnJvbSBcIi4vVXJsU2VydmljZVByb3ZpZGVyXCI7XHJcblxyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7Sm9ic1JvdXRlcn0gZnJvbSBcIi4vSm9ic1JvdXRlclwiO1xyXG5pbXBvcnQge0NlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyfSBmcm9tIFwiLi9DZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50c1JvdXRlcn0gZnJvbSBcIi4vQXNzZXNzbWVudHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtQb2xpY2llc1JvdXRlcn0gZnJvbSBcIi4vUG9saWNpZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzUm91dGVyfSBmcm9tIFwiLi9CdXNpbmVzc1VuaXRzUm91dGVyXCI7XHJcbmltcG9ydCB7UGF5UGFsUm91dGVyfSBmcm9tIFwiLi9QYXlQYWxSb3V0ZXJcIjtcclxuaW1wb3J0IHtOb3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXJ9IGZyb20gXCIuL05vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlclwiO1xyXG5pbXBvcnQge0ltcG9ydFJvdXRlcn0gZnJvbSBcIi4vSW1wb3J0Um91dGVyXCI7XHJcbmltcG9ydCB7RXhwb3J0Um91dGVyfSBmcm9tIFwiLi9FeHBvcnRSb3V0ZXJcIjtcclxuaW1wb3J0IHtFeHRlcm5hbFJlc291cmNlc1JvdXRlcn0gZnJvbSBcIi4vRXh0ZXJuYWxSZXNvdXJjZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtIb21lUm91dGVyfSBmcm9tIFwiLi9Ib21lUm91dGVyXCI7XHJcbmltcG9ydCB7U2xpZGVUZW1wbGF0ZXNSb3V0ZXJ9IGZyb20gXCIuL1NsaWRlVGVtcGxhdGVzUm91dGVyXCI7XHJcbmltcG9ydCB7R2FtaWZpY2F0aW9uUm91dGVyfSBmcm9tIFwiLi9HYW1pZmljYXRpb25Sb3V0ZXJcIjtcclxuXHJcbmV4cG9ydCB2YXIgVXJsc01vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhclxyXG4gICAgLm1vZHVsZShcInVybHNcIiwgW10pXHJcbiAgICAuc2VydmljZShNYWluUm91dGVyLk5BTUUsIE1haW5Sb3V0ZXIpXHJcbiAgICAuc2VydmljZShOZXdzUm91dGVyLk5BTUUsIE5ld3NSb3V0ZXIpXHJcbiAgICAuc2VydmljZShJbmZvUm91dGVyLk5BTUUsIEluZm9Sb3V0ZXIpXHJcbiAgICAuc2VydmljZShBdXRoUm91dGVyLk5BTUUsIEF1dGhSb3V0ZXIpXHJcbiAgICAuc2VydmljZShSZWZlcmVuY2VSb3V0ZXIuTkFNRSwgUmVmZXJlbmNlUm91dGVyKVxyXG4gICAgLnNlcnZpY2UoU3lzdGVtU2V0dGluZ3NSb3V0ZXIuTkFNRSwgU3lzdGVtU2V0dGluZ3NSb3V0ZXIpXHJcbiAgICAuc2VydmljZShVc2Vyc1JvdXRlci5OQU1FLCBVc2Vyc1JvdXRlcilcclxuICAgIC5zZXJ2aWNlKENvdXJzZXNSb3V0ZXIuTkFNRSwgQ291cnNlc1JvdXRlcilcclxuICAgIC5zZXJ2aWNlKExlYXJuaW5nUGF0aHNSb3V0ZXIuTkFNRSwgTGVhcm5pbmdQYXRoc1JvdXRlcilcclxuICAgIC5zZXJ2aWNlKFN0YXRpc3RpY3NSb3V0ZXIuTkFNRSwgU3RhdGlzdGljc1JvdXRlcilcclxuICAgIC5zZXJ2aWNlKE1hdGVyaWFsc1JvdXRlci5OQU1FLCBNYXRlcmlhbHNSb3V0ZXIpXHJcbiAgICAuc2VydmljZShGaW5hbmNlc1JvdXRlci5OQU1FLCBGaW5hbmNlc1JvdXRlcilcclxuICAgIC5zZXJ2aWNlKFBlcnNvbmFsUm91dGVyLk5BTUUsIFBlcnNvbmFsUm91dGVyKVxyXG4gICAgLnNlcnZpY2UoQ29tbW9uUm91dGVyLk5BTUUsIENvbW1vblJvdXRlcilcclxuICAgIC5zZXJ2aWNlKENvbnRlbnRSb3V0ZXIuTkFNRSwgQ29udGVudFJvdXRlcilcclxuICAgIC5zZXJ2aWNlKFF1aXp6ZXNSb3V0ZXIuTkFNRSwgUXVpenplc1JvdXRlcilcclxuICAgIC5zZXJ2aWNlKExvZ3NSb3V0ZXIuTkFNRSwgTG9nc1JvdXRlcilcclxuICAgIC5zZXJ2aWNlKEpvYnNSb3V0ZXIuTkFNRSwgSm9ic1JvdXRlcilcclxuICAgIC5zZXJ2aWNlKENlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyLk5BTUUsIENlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyKVxyXG4gICAgLnNlcnZpY2UoTm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyLk5BTUUsIE5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlcilcclxuICAgIC5zZXJ2aWNlKEFzc2Vzc21lbnRzUm91dGVyLk5BTUUsIEFzc2Vzc21lbnRzUm91dGVyKVxyXG4gICAgLnNlcnZpY2UoUG9saWNpZXNSb3V0ZXIuTkFNRSwgUG9saWNpZXNSb3V0ZXIpXHJcbiAgICAuc2VydmljZShCdXNpbmVzc1VuaXRzUm91dGVyLk5BTUUsIEJ1c2luZXNzVW5pdHNSb3V0ZXIpXHJcbiAgICAuc2VydmljZShQYXlQYWxSb3V0ZXIuTkFNRSwgUGF5UGFsUm91dGVyKVxyXG4gICAgLnNlcnZpY2UoSW1wb3J0Um91dGVyLk5BTUUsIEltcG9ydFJvdXRlcilcclxuICAgIC5zZXJ2aWNlKEV4cG9ydFJvdXRlci5OQU1FLCBFeHBvcnRSb3V0ZXIpXHJcbiAgICAuc2VydmljZShFeHRlcm5hbFJlc291cmNlc1JvdXRlci5OQU1FLCBFeHRlcm5hbFJlc291cmNlc1JvdXRlcilcclxuICAgIC5zZXJ2aWNlKEhvbWVSb3V0ZXIuTkFNRSwgSG9tZVJvdXRlcilcclxuICAgIC5zZXJ2aWNlKFNsaWRlVGVtcGxhdGVzUm91dGVyLk5BTUUsIFNsaWRlVGVtcGxhdGVzUm91dGVyKVxyXG4gICAgLnNlcnZpY2UoR2FtaWZpY2F0aW9uUm91dGVyLk5BTUUsIEdhbWlmaWNhdGlvblJvdXRlcilcclxuICAgIC5wcm92aWRlcihVcmxTZXJ2aWNlLk5BTUUsIFVybFNlcnZpY2VQcm92aWRlcik7XHJcbiIsImltcG9ydCB7U3RyaW5nQnVpbGRlcn0gZnJvbSBcIi4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2Vyc1JvdXRlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVybHMuVXNlcnNSb3V0ZXJcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgVVNFUl9JRF9QQVJBTSA9IFwidXNlcklkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEdST1VQX0lEX1BBUkFNID0gXCJncm91cElkXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEJVU0lORVNTX1VOSVRfSURfUEFSQU0gPSBcIkJVaWRcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGluZGV4Um91dGUgPSBcIi91c2Vycy9cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgYWRkUm91dGUgPSBcIi91c2Vycy9jcmVhdGVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc3RhcnRUcmlhbFJvdXRlID0gXCIvdXNlcnMvZnJlZVBsYW5cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2lnblVwUm91dGUgPSBcIi91c2Vycy9zaWdudXBcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZWRpdFJvdXRlID0gXCIvdXNlcnMvOnVzZXJJZC9lZGl0XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGN1cnJlbnRQcm9maWxlUm91dGUgPSBcIi91c2Vycy86dXNlclByb2ZpbGVJZC9wcm9maWxlXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBncm91cEluZGV4Um91dGUgPSBcIi91c2Vycy9ncm91cHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ3JvdXBBZGRSb3V0ZSA9IFwiL3VzZXJzL2dyb3Vwcy9jcmVhdGVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ3JvdXBFZGl0Um91dGUgPSBcIi91c2Vycy9ncm91cHMvOmdyb3VwSWRcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ3JvdXBNYW5hZ2VQZXJtaXNzaW9uc1JvdXRlID0gXCIvdXNlcnMvZ3JvdXBzLzpncm91cElkL3Blcm1pc3Npb25zXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBtZXJnZVJvdXRlID0gXCIvdXNlcnMvOnVzZXJJZC9tZXJnZVwiO1xyXG5cclxuICAgIHB1YmxpYyBpbmRleFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBVc2Vyc1JvdXRlci5pbmRleFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gVXNlcnNSb3V0ZXIuYWRkUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNpZ251cFVybChidXNpbmVzc1VuaXRJZD86IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGJ1c2luZXNzVW5pdElkXHJcbiAgICAgICAgICAgID8gVXNlcnNSb3V0ZXIuc2lnblVwUm91dGUgKyBgPyR7VXNlcnNSb3V0ZXIuQlVTSU5FU1NfVU5JVF9JRF9QQVJBTX09JHtidXNpbmVzc1VuaXRJZH1gXHJcbiAgICAgICAgICAgIDogVXNlcnNSb3V0ZXIuc2lnblVwUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0VHJpYWxVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gVXNlcnNSb3V0ZXIuc3RhcnRUcmlhbFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlZGl0VXJsKHVzZXJJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gIXVzZXJJZFxyXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA6IFVzZXJzUm91dGVyLmVkaXRSb3V0ZS5yZXBsYWNlKFwiOnVzZXJJZFwiLCB1c2VySWQudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRQcm9maWxlVXJsKHByb2ZpbGVJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gIXByb2ZpbGVJZFxyXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA6IFVzZXJzUm91dGVyLmN1cnJlbnRQcm9maWxlUm91dGUucmVwbGFjZShcIjp1c2VyUHJvZmlsZUlkXCIsIHByb2ZpbGVJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdyb3Vwc0luZGV4VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFVzZXJzUm91dGVyLmdyb3VwSW5kZXhSb3V0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ3JvdXBzQWRkVXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFVzZXJzUm91dGVyLmdyb3VwQWRkUm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdyb3VwRWRpdFVybChncm91cElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFVzZXJzUm91dGVyLmdyb3VwRWRpdFJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBVc2Vyc1JvdXRlci5HUk9VUF9JRF9QQVJBTSwgZ3JvdXBJZC50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ3JvdXBNYW5hZ2VQZXJtaXNzaW9uc1VybChncm91cElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFVzZXJzUm91dGVyLmdyb3VwTWFuYWdlUGVybWlzc2lvbnNSb3V0ZSlcclxuICAgICAgICAgICAgLndpdGgoJzonICsgVXNlcnNSb3V0ZXIuR1JPVVBfSURfUEFSQU0sIGdyb3VwSWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1lcmdlVXJsKHVzZXJJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShVc2Vyc1JvdXRlci5tZXJnZVJvdXRlKVxyXG4gICAgICAgICAgICAud2l0aCgnOicgKyBVc2Vyc1JvdXRlci5VU0VSX0lEX1BBUkFNLCB1c2VySWQudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVXNlciwgUHJlZGVmaW5lZFVzZXJzRW51bX0gZnJvbSBcIi4vbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7SVVzZXJMb2dvbn0gZnJvbSBcIi4vbW9kZWxzL0lVc2VyTG9nb25cIjtcclxuaW1wb3J0IHtVc2Vyc1JvdXRlcn0gZnJvbSBcIi4vLi4vdXJscy9Vc2Vyc1JvdXRlclwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi8uLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1Mb2NhbGV9IGZyb20gXCIuLy4uL3NldHRpbmdzL21vZGVscy9JU3lzdGVtTG9jYWxlXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZXR0aW5ncy9TZXR0aW5nc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi8uLi9JTm90aWZpZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXJyZW50VXNlclByb2ZpbGVDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXNlcnMuQ3VycmVudFVzZXJQcm9maWxlQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBjb25maXJtUGFzc3dvcmQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgdXNlcjogSVVzZXI7XHJcbiAgICBwdWJsaWMgdXNlckxvZ29uOiBJVXNlckxvZ29uO1xyXG4gICAgcHVibGljIGdyb3VwczogQXJyYXk8SVNlbGVjdGFibGU+O1xyXG4gICAgcHVibGljIGF2YWlsYWJsZUxvY2FsZXM6IEFycmF5PElTeXN0ZW1Mb2NhbGU+O1xyXG5cclxuICAgIHB1YmxpYyBlcnJvcjogc3RyaW5nO1xyXG4gICAgcHVibGljIGRpc2FibGVTYXZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNFdmVyeXRoaW5nRGlzYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRsb2dcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgXCIkcVwiLFxyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgXCIkbG9jYXRpb25cIixcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2c6IGFuZ3VsYXIuSUxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJzQXBpOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2V0dGluZ3NBcGk6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyB1c2VyUm91dGVyOiBVc2Vyc1JvdXRlcikge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuVVNFUl9QUk9GSUxFX01FTlVfS0VZKTtcclxuICAgICAgICB0aGlzLnVzZXIgPSB7XHJcbiAgICAgICAgICAgIGZ1bGxOYW1lOiBcIlwiLFxyXG4gICAgICAgICAgICBsb2NhbGU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXNlckxvZ29uID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlwiLFxyXG4gICAgICAgICAgICBwYXNzd29yZDogXCJcIlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5sb2FkVXNlcigpO1xyXG4gICAgICAgIHRoaXMubG9hZFVzZXJMb2dvbigpO1xyXG4gICAgICAgIHRoaXMubG9hZEF2YWlsYWJsZUxvY2FsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyKCkge1xyXG4gICAgICAgIHRoaXMudXNlcnNBcGkuZ2V0Q3VycmVudFVzZXJQcm9maWxlKCkudGhlbih1ID0+IHtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIodS5mdWxsTmFtZSkudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weSh1LCB0aGlzLnVzZXIpO1xyXG4gICAgICAgICAgICB0aGlzLmlzRXZlcnl0aGluZ0Rpc2FibGVkID0gKHRoaXMudXNlci5pZCA9PSBQcmVkZWZpbmVkVXNlcnNFbnVtLkdVRVNUKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyTG9nb24oKSB7XHJcbiAgICAgICAgdGhpcy51c2Vyc0FwaS5nZXRDdXJyZW50VXNlckxvY2FsTG9nb24oKS50aGVuKGxvZ29uID0+IHtcclxuICAgICAgICAgICAgaWYgKGxvZ29uKSB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkobG9nb24sIHRoaXMudXNlckxvZ29uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQXZhaWxhYmxlTG9jYWxlcygpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzQXBpLmdldEF2YWlsYWJsZUxvY2FsZXMoKS50aGVuKGxvY2FsZXMgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb2NhbGVJbmZvID0gbG9jYWxlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVJbmZvLmRlZmF1bHRMb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIubG9jYWxlID0gbG9jYWxlSW5mby5sb2NhbGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVMb2NhbGVzID0gbG9jYWxlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZSgpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbmZpcm1QYXNzd29yZCA9IG51bGw7XHJcblxyXG4gICAgICAgIHZhciBwcm9taXNlID0gdGhpcy51c2Vyc0FwaS51cGRhdGVDdXJyZW50VXNlclByb2ZpbGUodGhpcy51c2VyLCB0aGlzLnVzZXJMb2dvbi5wYXNzd29yZCk7XHJcbiAgICAgICAgcHJvbWlzZS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJVc2VyICdcIiArIHRoaXMudXNlci5mdWxsTmFtZSArIFwiJyBoYXMgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkVXNlcigpO1xyXG4gICAgICAgIH0pLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLnRyeS51cGRhdGUuYW5vdGhlci51c2VyXCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiWW91IGNhbiBjaGFuZ2Ugb25seSB5b3VyIG93biBwcm9maWxlIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLmxvYWRVc2VyKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkVXNlckxvZ29uKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlcnNSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvVXNlcnNSb3V0ZXJcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4vLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLy4uL3NlY3VyaXR5L1Blcm1pc3Npb25zU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4vLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcblxyXG5pbXBvcnQge0lHcm91cH0gZnJvbSBcIi4vbW9kZWxzL0lHcm91cFwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4vbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlVXRpbHN9IGZyb20gXCIuLi9yZWZlcmVuY2UvUmVmZXJlbmNlVXRpbHNcIjtcclxuaW1wb3J0IHtBbGxHcm91cHNQZXJtaXNzaW9ucywgUm9sZXNTcGVjaWZpY1Blcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVBlcm1pc3Npb25cIjtcclxuaW1wb3J0IHtSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXJ9IGZyb20gXCIuLi9jb21wb25lbnRzL3JpY2h0ZXh0L1JpY2hUZXh0RWRpdG9yRGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7SUNvdXJzZX0gZnJvbSBcIi4uL2NvdXJzZXMvbW9kZWxzL0lDb3Vyc2VcIjtcclxuaW1wb3J0IHtJTGVhcm5pbmdQYXRofSBmcm9tIFwiLi4vbGVhcm5pbmdQYXRocy9tb2RlbHMvSUxlYXJuaW5nUGF0aFwiO1xyXG5pbXBvcnQge0NvbW1vbkZpbHRlclNlcnZpY2V9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uRmlsdGVyU2VydmljZVwiO1xyXG5pbXBvcnQge0NvdXJzZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0NvdXJzZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtMZWFybmluZ1BhdGhzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9MZWFybmluZ1BhdGhzUm91dGVyXCI7XHJcbmltcG9ydCB7VXNlclJvbGV9IGZyb20gXCIuL21vZGVscy9Vc2VyUm9sZVwiO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gXCIuLi9jb21wb25lbnRzL2RpYWxvZy9EaWFsb2dTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTZWxlY3RlYmxlIHtcclxuICAgIGlkPzogbnVtYmVyO1xyXG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXh0ZW5kZWQgZXh0ZW5kcyBJVXNlciB7XHJcbiAgICBzZWxlY3RlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvdXJzZUV4dGVuZGVkIGV4dGVuZHMgSUNvdXJzZSB7XHJcbiAgICBzZWxlY3RlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUxlYXJuaW5nUGF0aEV4dGVuZGVkIGV4dGVuZHMgSUxlYXJuaW5nUGF0aCB7XHJcbiAgICBzZWxlY3RlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cEVkaXRDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXNlcnMuR3JvdXBFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBncm91cElkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIHByaXZhdGUgc3ViamVjdDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBhZGRyZXNzOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZ3JvdXA6IGFueSA9IHtcclxuICAgICAgICBuYW1lOiBcIlwiLFxyXG4gICAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgIHBhcmVudElkOiBudWxsLFxyXG4gICAgICAgIHBlcm1pc3Npb25zSWRzOiBbXSxcclxuICAgICAgICBidXNpbmVzc1VuaXRJZDogbnVsbCxcclxuICAgICAgICBidWFsbG93ZWQ6IGZhbHNlLFxyXG4gICAgICAgIGJ1c2luZXNzUm9sZTogXCJcIlxyXG4gICAgfTtcclxuICAgIHB1YmxpYyBncm91cHNFbnRpdGllczogQXJyYXk8SUdyb3VwPjtcclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBncm91cFVzZXJzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElVc2VyRXh0ZW5kZWQ+O1xyXG4gICAgcHVibGljIG5vdEluR3JvdXBHcmlkTW9kZWw6IElHcmlkTW9kZWw8SVVzZXJFeHRlbmRlZD47XHJcbiAgICBwdWJsaWMgc2hvd1VzZXJzTm90SW5Hcm91cDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjb3Vyc2VHcmlkTW9kZWw6IElHcmlkTW9kZWw8SUNvdXJzZUV4dGVuZGVkPjtcclxuICAgIHB1YmxpYyBkaXNhbGxvd2VkQ291cnNlc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJQ291cnNlRXh0ZW5kZWQ+O1xyXG4gICAgcHVibGljIGFyZURpc2FsbG93ZWRDb3Vyc2VzU2hvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgbGVhcm5pbmdQYXRoc0dyaWRNb2RlbDogSUdyaWRNb2RlbDxJTGVhcm5pbmdQYXRoRXh0ZW5kZWQ+O1xyXG4gICAgcHVibGljIGRpc2FsbG93ZWRMZWFybmluZ1BhdGhzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElMZWFybmluZ1BhdGhFeHRlbmRlZD47XHJcbiAgICBwdWJsaWMgYXJlRGlzYWxsb3dlZExQc1Nob3duOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHNlbGVjdEFsbFRvUmVtb3ZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2VsZWN0QWxsVG9BZGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1zSWRzVG9SZW1vdmU6IG51bWJlcltdID0gW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtc0lkc1RvQWRkOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgcHVibGljIHNvcnRQcm9wZXJ0eSA9IFwic2VsZWN0ZWRcIjtcclxuICAgIHB1YmxpYyByZXZlcnNlU29ydGluZyA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIEFERF9NT0RFOiBzdHJpbmcgPSBcImFkZFwiO1xyXG4gICAgcHVibGljIFJFTU9WRV9NT0RFOiBzdHJpbmcgPSBcInJlbW92ZVwiO1xyXG4gICAgcHVibGljIGN1cnJlbnRNb2RlID0gdGhpcy5SRU1PVkVfTU9ERTtcclxuXHJcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXRUb1JlbW92ZTogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXRUb0FkZDogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlciA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBkaXNhYmxlZFBlcm1pc3Npb25zSWRzOiBudW1iZXJbXTtcclxuXHJcbiAgICBwdWJsaWMgYnRuU2VuZE5vdGlmaWNhdGlvbkNsaWNrZWQgPSBmYWxzZTtcclxuICAgIHB1YmxpYyB0YWJsZVRhYjogc3RyaW5nID0gXCJVU0VSU1wiO1xyXG5cclxuICAgIHB1YmxpYyBzdG9yYWdlRmlsdGVyVmFsdWVzOiBhbnk7XHJcbiAgICBwdWJsaWMgc2VhcmNoRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgVVNFUlNfVEFCX0tFWTogc3RyaW5nID0gXCJ1c2Vyc1wiO1xyXG4gICAgcHVibGljIENPVVJTRVNfVEFCX0tFWTogc3RyaW5nID0gXCJjb3Vyc2VzXCI7XHJcbiAgICBwdWJsaWMgTEVBUk5JTkdfUEFUSFNfVEFCX0tFWTogc3RyaW5nID0gXCJsZWFybmluZ1BhdGhzXCI7XHJcbiAgICBwdWJsaWMgYWN0aXZlVGFiS2V5ID0gdGhpcy5VU0VSU19UQUJfS0VZO1xyXG5cclxuICAgIHByaXZhdGUgZ3JvdXBDaGFuZ2VzV2F0Y2hlcjogYW55O1xyXG5cclxuICAgIHB1YmxpYyBvblBlcm1pc3Npb25zQ2hhbmdlID0gKCkgPT4gdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyB0b29sYmFyID1cclxuICAgICAgICBbW10sWydib2xkJywgJ2l0YWxpY3MnLCAndW5kZXJsaW5lJywgJ3N0cmlrZVRocm91Z2gnLCBSaWNoVGV4dEVkaXRvckNvbnRyb2xsZXIuVEFfRk9OVF9DT0xPUiwgUmljaFRleHRFZGl0b3JDb250cm9sbGVyLlRBX0JBQ0tHUk9VTkRfRk9OVF9DT0xPUl0sXHJcbiAgICAgICAgICAgIFsndWwnLCAnb2wnLCAnaW5kZW50JywgJ291dGRlbnQnLCAnanVzdGlmeUxlZnQnLCAnanVzdGlmeUNlbnRlcicsICdqdXN0aWZ5UmlnaHQnLCAnanVzdGlmeUZ1bGwnXSxcclxuICAgICAgICAgICAgWydoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdwJywgJ3ByZScsICdxdW90ZSddLFtdLFxyXG4gICAgICAgICAgICBbJ3JlZG8nLCAndW5kbycsICdjbGVhcicsIFJpY2hUZXh0RWRpdG9yQ29udHJvbGxlci5UQV9GVUxMU0NSRUVOX0JVVFRPTiwgJ2h0bWwnXV07XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHRpbWVvdXRcIixcclxuICAgICAgICBcIiRodHRwXCIsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVV0aWxzLk5BTUUsXHJcbiAgICAgICAgQ29tbW9uRmlsdGVyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJzU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHVzZXJzUm91dGVyOiBVc2Vyc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcmVmZXJlbmNlVXRpbHM6IFJlZmVyZW5jZVV0aWxzLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGNvbW1vbkZpbHRlclNlcnZpY2U6IENvbW1vbkZpbHRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgY291cnNlc1JvdXRlcjogQ291cnNlc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBsZWFybmluZ1BhdGhzUm91dGVyOiBMZWFybmluZ1BhdGhzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9HUk9VUFNfTUVOVV9LRVkpO1xyXG5cclxuICAgICAgICB0aGlzLmdyb3VwSWQgPSBwYXJzZUludCh0aGlzLiRyb3V0ZVBhcmFtc1tVc2Vyc1JvdXRlci5HUk9VUF9JRF9QQVJBTV0pO1xyXG5cclxuICAgICAgICBwZXJtaXNzaW9uc1NlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4gdGhpcy5jdXJyZW50VXNlciA9IHVzZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEdyb3VwKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmluaXRHcmlkcygpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgICAgICAudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSB1c2VyLmFsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIk5ldyB1c2VyIGdyb3VwXCIpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAgICAgICAgIC50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0cyA9IHVzZXIuYWxsQnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuc2V0RGlzYWJsZWRQZXJtaXNzaW9ucygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVHcm91cHNFbnRpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0RGlzYWJsZWRQZXJtaXNzaW9ucygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkUGVybWlzc2lvbnNJZHMgPSBbXTtcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmdyb3VwLmJ1c2luZXNzUm9sZSkge1xyXG4gICAgICAgICAgICBjYXNlIFVzZXJSb2xlW1VzZXJSb2xlLkxFQVJORVJdOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zSWRzID0gdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zSWRzLmNvbmNhdChSb2xlc1NwZWNpZmljUGVybWlzc2lvbnMubGVhcm5lclNwZWNpZmljUGVybWlzc2lvbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVXNlclJvbGVbVXNlclJvbGUuSU5TVFJVQ1RPUl06XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkUGVybWlzc2lvbnNJZHMgPSB0aGlzLmRpc2FibGVkUGVybWlzc2lvbnNJZHMuY29uY2F0KFJvbGVzU3BlY2lmaWNQZXJtaXNzaW9ucy5pbnN0cnVjdG9yU3BlY2lmaWNQZXJtaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBVc2VyUm9sZVtVc2VyUm9sZS5BVFRFTkRFRV9NQU5BR0VSXTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcyA9IHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcy5jb25jYXQoUm9sZXNTcGVjaWZpY1Blcm1pc3Npb25zLmF0dGVuZGVlTWFuYWdlclNwZWNpZmljUGVybWlzc2lvbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVXNlclJvbGVbVXNlclJvbGUuQVVUSE9SXTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcyA9IHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcy5jb25jYXQoUm9sZXNTcGVjaWZpY1Blcm1pc3Npb25zLmF1dGhvclNwZWNpZmljUGVybWlzc2lvbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVXNlclJvbGVbVXNlclJvbGUuQURNSU5JU1RSQVRPUl06XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkUGVybWlzc2lvbnNJZHMgPSB0aGlzLmRpc2FibGVkUGVybWlzc2lvbnNJZHMuY29uY2F0KFJvbGVzU3BlY2lmaWNQZXJtaXNzaW9ucy5hZG1pbmlzdHJhdG9yU3BlY2lmaWNQZXJtaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcyA9IHRoaXMuaGFzQWxsQnVzaW5lc3NVbml0c1xyXG4gICAgICAgICAgICA/IHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkc1xyXG4gICAgICAgICAgICA6IHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcy5jb25jYXQoQWxsR3JvdXBzUGVybWlzc2lvbnMuTlVMTF9CVV9PTkxZX1NZU1RFTV9QRVJNSVNTSU9OU19JRFMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEdyb3VwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwQ2hhbmdlc1dhdGNoZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5ncm91cENoYW5nZXNXYXRjaGVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVzZXJzU2VydmljZS5nZXRHcm91cCh0aGlzLmdyb3VwSWQpLnRoZW4oZyA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weShnLCB0aGlzLmdyb3VwKTtcclxuICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIodGhpcy5ncm91cC5uYW1lKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBDaGFuZ2VzV2F0Y2hlciA9IHRoaXMuJHNjb3BlLiR3YXRjaEdyb3VwKFtcclxuICAgICAgICAgICAgICAgICAgICBcInZtLmdyb3VwLm5hbWVcIixcclxuICAgICAgICAgICAgICAgICAgICBcInZtLmdyb3VwLmJ1YWxsb3dlZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidm0uZ3JvdXAucGFyZW50SWRcIixcclxuICAgICAgICAgICAgICAgICAgICBcInZtLmdyb3VwLmJ1c2luZXNzVW5pdElkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ2bS5ncm91cC5idXNpbmVzc1JvbGVcIiBdLFxyXG4gICAgICAgICAgICAgICAgKChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gb2xkVmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pLnRoZW4oKCkgPT4gdGhpcy5zZXREaXNhYmxlZFBlcm1pc3Npb25zKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0QWN0aXZlR3JvdXBzRW50aXRpZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLmdyb3VwSWRcclxuICAgICAgICAgICAgPyB0aGlzLnVzZXJzU2VydmljZS5nZXRBY3RpdmVHcm91cHNOb0NoaWxkcmVuKHRoaXMuZ3JvdXBJZClcclxuICAgICAgICAgICAgOiB0aGlzLnVzZXJzU2VydmljZS5nZXRBY3RpdmVHcm91cHModGhpcy5ncm91cC5idXNpbmVzc1VuaXRJZCk7XHJcbiAgICAgICAgcHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzRW50aXRpZXMgPSByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93Q3JlYXRpb25FbWFpbE1vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2xlYXJFbWFpbEZpZWxkcygpO1xyXG4gICAgICAgICQoXCIubW9kYWwtYm9keVwiKS5jc3MoXCJvdmVyZmxvdy15XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAkKFwiI3Nob3dDcmVhdGlvbkVtYWlsRGlhbG9nXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmdldFVzZXJzRW1haWxBZGRyZXNzZXMoKVxyXG4gICAgICAgIHRoaXMuYWRkcmVzcyA9IFwiQWxsIGdyb3VwIG1lbWJlcnNcIlxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xvc2VTZW5kTWFpbE1vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgICQoXCIjc2hvd0NyZWF0aW9uRW1haWxEaWFsb2dcIikubW9kYWwoJ2hpZGUnKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xlYXJFbWFpbEZpZWxkcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3ViamVjdCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVzZXJzRW1haWxBZGRyZXNzZXMoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGVtYWlsQWRkcmVzczogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdyb3VwVXNlcnNHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKGFkZHJlc3MgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYWRkcmVzcy5lbWFpbCAhPSBudWxsICYmIGFkZHJlc3MuZW1haWwgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbWFpbEFkZHJlc3MgKz0gYWRkcmVzcy5lbWFpbCArICcsICc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFkZHJlc3MgPSBlbWFpbEFkZHJlc3Muc2xpY2UoNCwgLTIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZW5kRW1haWxHcm91cE1lbWJlcnNOb3RpZmljYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYnRuU2VuZE5vdGlmaWNhdGlvbkNsaWNrZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ0blNlbmROb3RpZmljYXRpb25DbGlja2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3ViamVjdCA9PSBudWxsIHx8IHRoaXMuc3ViamVjdCA9PSB1bmRlZmluZWQgfHwgdGhpcy5zdWJqZWN0ID09IFwiXCIgfHwgdGhpcy5zdWJqZWN0LnRyaW0oKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1YmplY3QgPSBcIiBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51c2Vyc1NlcnZpY2Uuc2VuZEVtYWlsR3JvdXBNZW1iZXJzTm90aWZpY2F0aW9uKHRoaXMuZ3JvdXBJZCwgdGhpcy5tZXNzYWdlLCB0aGlzLnN1YmplY3QpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJNZXNzYWdlIGhhcyBiZWVuIHNlbnRcIik7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMuY2xvc2VTZW5kTWFpbE1vZGFsLCAxMzAwKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4gbm90aWZpZXIuZXJyb3IoXCJNZXNzYWdlIGhhcyBiZWVuIG5vdCBzZW50XCIpKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnRuU2VuZE5vdGlmaWNhdGlvbkNsaWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9LCAxMzAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZSgkZXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hGb2N1cykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwLmJ1c2luZXNzUm9sZSA9PSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLmJ1c2luZXNzUm9sZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwcm9taXNlID0gdGhpcy5ncm91cElkXHJcbiAgICAgICAgICAgID8gdGhpcy51c2Vyc1NlcnZpY2UudXBkYXRlR3JvdXAodGhpcy5ncm91cClcclxuICAgICAgICAgICAgOiB0aGlzLnVzZXJzU2VydmljZS5jcmVhdGVHcm91cCh0aGlzLmdyb3VwKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4oZyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiR3JvdXAgJ1wiICsgdGhpcy5ncm91cC5uYW1lICsgXCInIGhhcyBiZWVuIHNhdmVkXCIpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cElkID09IG51bGwgfHwgaXNOYU4odGhpcy5ncm91cElkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5lZGl0R3JvdXBcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuJGxvY2F0aW9uLnBhdGgodGhpcy51c2Vyc1JvdXRlci5ncm91cEVkaXRVcmwoZy5pZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiRsb2NhdGlvbi5wYXRoKHRoaXMudXNlcnNSb3V0ZXIuZ3JvdXBzSW5kZXhVcmwoKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRHcm91cCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yID09IFwiZXJyb3IuaW5jb3JyZWN0Lmdyb3VwLnBhcmVudFwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkluY29ycmVjdCBwYXJlbnQgZ3JvdXBcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YS5lcnJvciA9PSBcImVycm9yLmluY29ycmVjdC5ncm91cC5wYXJlbnQuZm9yLmxvY2FsdXNlclwiKSB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkluY29ycmVjdCBwYXJlbnQgZ3JvdXAuIFlvdSBjYW4gb25seSBzcGVjaWZ5ICdBdXRoZW50aWNhdGVkIFVzZXJzJyBncm91cCBhbmQgaXRzIGNoaWxkcmVuIGFzIHBhcmVudCBncm91cFwiKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IgPT0gXCJlcnJvci5uYW1lLmlzLmVtcHR5XCIpIHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiR3JvdXAgbmFtZSBpcyByZXF1aXJlZFwiKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gc2F2ZSB0aGUgZ3JvdXBcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGUoKSB7XHJcbiAgICAgICAgbGV0IHByb21pc2UgPSB0aGlzLnVzZXJzU2VydmljZS5zZXRBY3RpdmVHcm91cFdpdGhDaGlsZHJlbihmYWxzZSwgdGhpcy5ncm91cC5pZCk7XHJcbiAgICAgICAgcHJvbWlzZS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy51c2Vyc1JvdXRlci5ncm91cHNJbmRleFVybCgpKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJ1c2luZXNzVW5pdENoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVHcm91cHNFbnRpdGllcygpO1xyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoYSA9PiB0aGlzLmJ1c2luZXNzVW5pdFNlbGVjdGVkID0gdHJ1ZSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRHcm91cFVzZXJzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBVc2Vyc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZEdyb3VwQ291cnNlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvdXJzZUdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZEdyb3VwTFBzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkVXNlckdyb3VwUGVybWlzc2lvbnMoKSA6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaEZvY3VzIHx8IHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvQWRkLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1c2Vyc0lkcyA9IHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvQWRkO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCIvYXBpL3VzZXJzL2dyb3VwLzpncm91cElkL2FkZFRvR3JvdXBcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpncm91cElkXCIsIHRoaXMuZ3JvdXBJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksIEpTT04uc3RyaW5naWZ5KHVzZXJzSWRzKVxyXG4gICAgICAgICkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJVc2VyIGdyb3VwcyBzdWNjZXNzZnVsbHkgdXBkYXRlZFwiKTtcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHVwZGF0ZSB1c2VyIGdyb3Vwc1wiKTtcclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUFkZFVzZXJzVG9Hcm91cE1vZGFsKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVVzZXJHcm91cHNQZXJtaXNzaW9ucyh1c2VySWQ/OiBudW1iZXIpIDogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoRm9jdXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdXJsID0gXCIvYXBpL3VzZXJzL2dyb3VwLzpncm91cElkL3JlbW92ZUZyb21Hcm91cFwiO1xyXG5cclxuICAgICAgICBsZXQgcHJvbWlzZTtcclxuICAgICAgICBpZiAodXNlcklkKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBcIi86dXNlcklkXCI7XHJcbiAgICAgICAgICAgIHByb21pc2UgPSB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKHVybClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpncm91cElkXCIsIHRoaXMuZ3JvdXBJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjp1c2VySWRcIiwgdXNlcklkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSwgXCJcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHVzZXJzSWRzID0gdGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9SZW1vdmU7XHJcbiAgICAgICAgICAgIHByb21pc2UgPSB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKHVybClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpncm91cElkXCIsIHRoaXMuZ3JvdXBJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksIEpTT04uc3RyaW5naWZ5KHVzZXJzSWRzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiVXNlciBncm91cHMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWRcIik7XHJcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkZhaWxlZCB0byB1cGRhdGUgdXNlciBncm91cHNcIik7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBVc2Vyc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICAgICAgdGhpcy5ub3RJbkdyb3VwR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVBbGxJdGVtc1Blcm1pc3Npb25zKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXNJZHNUb1JlbW92ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbWVzc2FnZSA9IFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGUgc2VsZWN0ZWQgdXNlcnMgZnJvbSB0aGUgZ3JvdXA/XCI7XHJcbiAgICAgICAgbGV0IHJlbW92ZUZ1bmMgPSAoKSA9PiB0aGlzLnJlbW92ZVVzZXJHcm91cHNQZXJtaXNzaW9ucygpO1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3RpdmVUYWJLZXkpIHtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlVTRVJTX1RBQl9LRVk6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLkNPVVJTRVNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhlIHNlbGVjdGVkIGNvdXJzZXMgZnJvbSB0aGUgZ3JvdXA/XCI7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVGdW5jID0gKCkgPT4gdGhpcy5yZW1vdmVDb3Vyc2VzUGVybWlzc2lvbnMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuTEVBUk5JTkdfUEFUSFNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhlIHNlbGVjdGVkIGxlYXJuaW5nIHBhdGhzIGZyb20gdGhlIGdyb3VwP1wiO1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlRnVuYyA9ICgpID0+IHRoaXMucmVtb3ZlTGVhcm5pbmdQYXRoc1Blcm1pc3Npb25zKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgICAgICBtZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJBcmUgeW91IHN1cmU/XCIsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcIlllc1wiLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uOiBcIk5vXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlRnVuYygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9SZW1vdmUgPSBbXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVGhlcmVTb21lU2VsZWN0ZWQoKSB7XHJcbiAgICAgICAgbGV0IGdyaWRNb2RlbDogSUdyaWRNb2RlbDxhbnk+O1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3RpdmVUYWJLZXkpIHtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlVTRVJTX1RBQl9LRVk6XHJcbiAgICAgICAgICAgICAgICBncmlkTW9kZWwgPSB0aGlzLmN1cnJlbnRNb2RlID09PSB0aGlzLlJFTU9WRV9NT0RFXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdyb3VwVXNlcnNHcmlkTW9kZWxcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMubm90SW5Hcm91cEdyaWRNb2RlbDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuQ09VUlNFU19UQUJfS0VZOlxyXG4gICAgICAgICAgICAgICAgZ3JpZE1vZGVsID0gdGhpcy5jdXJyZW50TW9kZSA9PT0gdGhpcy5SRU1PVkVfTU9ERVxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5jb3Vyc2VHcmlkTW9kZWxcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZGlzYWxsb3dlZENvdXJzZXNHcmlkTW9kZWw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLkxFQVJOSU5HX1BBVEhTX1RBQl9LRVk6XHJcbiAgICAgICAgICAgICAgICBncmlkTW9kZWwgPSB0aGlzLmN1cnJlbnRNb2RlID09PSB0aGlzLlJFTU9WRV9NT0RFXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWxcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZGlzYWxsb3dlZExlYXJuaW5nUGF0aHNHcmlkTW9kZWw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChncmlkTW9kZWwuZW50cmllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdyaWRNb2RlbC5lbnRyaWVzLnNvbWUoaSA9PiBpLnNlbGVjdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNHcmlkRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGl2ZVRhYktleSkge1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVVNFUlNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdyb3VwVXNlcnNHcmlkTW9kZWwuZW50cmllcy5sZW5ndGggPT0gMDtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLkNPVVJTRVNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdXJzZUdyaWRNb2RlbC5lbnRyaWVzLmxlbmd0aCA9PSAwO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuTEVBUk5JTkdfUEFUSFNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZW50cmllcy5sZW5ndGggPT0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dBbGxVc2Vyc05vdEluR3JvdXAoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VXNlcnNOb3RJbkdyb3VwID0gIXRoaXMuc2hvd1VzZXJzTm90SW5Hcm91cDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzVXNlclNhbWVCdXNpbmVzc1VuaXRzKGFycjogQXJyYXk8bnVtYmVyPik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHNJZExpc3QpIHtcclxuICAgICAgICAgICAgbGV0IHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzSWRMaXN0LmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBzID0gYXJyLnNvbWUobSA9PiBtID09PSBuKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93TW9kYWxVbmF2YWlsYWJpbGl0eVJvbGVzKG9sZFZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5ncm91cElkICYmIG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGxldCBkaWFsb2cgPSAkKFwiI3VuYXZhaWxhYmlsaXR5Um9sZXNNb2RhbFwiKTtcclxuICAgICAgICAgICAgZGlhbG9nLm1vZGFsKFwic2hvd1wiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZENvdXJzZXNQZXJtaXNzaW9ucygpIDogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoRm9jdXMgfHwgdGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9BZGQubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGNvdXJzZXNJZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXNJZHNUb0FkZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy9ncm91cC86Z3JvdXBJZC9hZGRQZXJtaXNzaW9ucy9jb3Vyc2VzXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Z3JvdXBJZFwiLCB0aGlzLmdyb3VwSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLCBKU09OLnN0cmluZ2lmeShjb3Vyc2VzSWRzKVxyXG4gICAgICAgICkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJDb3Vyc2UgZ3JvdXBzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXCIpO1xyXG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIGNvdXJzZSBncm91cHNcIik7XHJcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBZGRDb3Vyc2VzVG9Hcm91cE1vZGFsKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUNvdXJzZXNQZXJtaXNzaW9ucyhjb3Vyc2VJZD86IG51bWJlcikgOiBhbmd1bGFyLklQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hGb2N1cykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1cmwgPSBcIi9hcGkvdXNlcnMvZ3JvdXAvOmdyb3VwSWQvcmVtb3ZlUGVybWlzc2lvbnMvY291cnNlc1wiO1xyXG5cclxuICAgICAgICBsZXQgcHJvbWlzZTtcclxuICAgICAgICBpZiAoY291cnNlSWQpIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiLzpjb3Vyc2VJZFwiO1xyXG4gICAgICAgICAgICBwcm9taXNlID0gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZSh1cmwpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Z3JvdXBJZFwiLCB0aGlzLmdyb3VwSWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLCBcIlwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgY291cnNlc0lkcyA9IHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvUmVtb3ZlO1xyXG4gICAgICAgICAgICBwcm9taXNlID0gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZSh1cmwpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Z3JvdXBJZFwiLCB0aGlzLmdyb3VwSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLCBKU09OLnN0cmluZ2lmeShjb3Vyc2VzSWRzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiQ291cnNlIGdyb3VwcyBzdWNjZXNzZnVsbHkgdXBkYXRlZFwiKTtcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHVwZGF0ZSBjb3Vyc2UgZ3JvdXBzXCIpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvdXJzZUdyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkTGVhcm5pbmdQYXRoc1Blcm1pc3Npb25zKCkgOiBhbmd1bGFyLklQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hGb2N1cyB8fCB0aGlzLnNlbGVjdGVkSXRlbXNJZHNUb0FkZC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbHBJZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXNJZHNUb0FkZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy9ncm91cC86Z3JvdXBJZC9hZGRQZXJtaXNzaW9ucy9sZWFybmluZ1BhdGhzXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Z3JvdXBJZFwiLCB0aGlzLmdyb3VwSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLCBKU09OLnN0cmluZ2lmeShscElkcylcclxuICAgICAgICApLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTGVhcm5pbmcgUGF0aCBncm91cHMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWRcIik7XHJcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkxlYXJuaW5nIFBhdGggZ3JvdXBzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXCIpO1xyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlQWRkTGVhcm5pbmdQYXRoc1RvR3JvdXBNb2RhbCgpO1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUxlYXJuaW5nUGF0aHNQZXJtaXNzaW9ucyhscElkPzogbnVtYmVyKSA6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaEZvY3VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHVybCA9IFwiL2FwaS91c2Vycy9ncm91cC86Z3JvdXBJZC9yZW1vdmVQZXJtaXNzaW9ucy9sZWFybmluZ1BhdGhzXCI7XHJcblxyXG4gICAgICAgIGxldCBwcm9taXNlO1xyXG4gICAgICAgIGlmIChscElkKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBcIi86bGVhcm5pbmdQYXRoSWRcIjtcclxuICAgICAgICAgICAgcHJvbWlzZSA9IHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UodXJsKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmdyb3VwSWRcIiwgdGhpcy5ncm91cElkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxwSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLCBcIlwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbGVhcm5pbmdQYXRoc0lkcyA9IHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvUmVtb3ZlO1xyXG4gICAgICAgICAgICBwcm9taXNlID0gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZSh1cmwpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Z3JvdXBJZFwiLCB0aGlzLmdyb3VwSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpLCBKU09OLnN0cmluZ2lmeShsZWFybmluZ1BhdGhzSWRzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiTGVhcm5pbmcgUGF0aCBncm91cHMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWRcIik7XHJcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcihcIkxlYXJuaW5nIFBhdGggZ3JvdXBzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXCIpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWxsb3dlZExlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dEaXNhbGxvd2VkQ291cnNlcygpIHtcclxuICAgICAgICB0aGlzLmFyZURpc2FsbG93ZWRDb3Vyc2VzU2hvd24gPSAhdGhpcy5hcmVEaXNhbGxvd2VkQ291cnNlc1Nob3duO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93RGlzYWxsb3dlZExlYXJuaW5nUGF0aHMoKSB7XHJcbiAgICAgICAgdGhpcy5hcmVEaXNhbGxvd2VkTFBzU2hvd24gPSAhdGhpcy5hcmVEaXNhbGxvd2VkTFBzU2hvd247XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEtleVByZXNzKCkge1xyXG4gICAgICAgIHRoaXMubm90SW5Hcm91cEdyaWRNb2RlbC5lbnRyaWVzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2Uuc2F2ZVNlYXJjaElucHV0KEdyb3VwRWRpdENvbnRyb2xsZXIuTkFNRSwgdGhpcy5zZWFyY2hJbnB1dFRvUmVtb3ZlKTtcclxuICAgICAgICB0aGlzLnNldFNlYXJjaFN0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlRmlsdGVyVmFsdWVzID0gdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLmdldEZpbHRlclZhbHVlcyhHcm91cEVkaXRDb250cm9sbGVyLk5BTUUpO1xyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaElucHV0VG9SZW1vdmUgPSB0aGlzLmNvbW1vbkZpbHRlclNlcnZpY2UuZ2V0U2VhcmNoSW5wdXQoR3JvdXBFZGl0Q29udHJvbGxlci5OQU1FKTtcclxuICAgICAgICBpZih0aGlzLnNlYXJjaElucHV0VG9SZW1vdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25GaWx0ZXJTZXJ2aWNlLm9wZW5TZWFyY2hJbnB1dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFNlYXJjaFN0cmluZygpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHRoaXMubm90SW5Hcm91cEdyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLm5vdEluR3JvdXBHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVGFiS2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5VU0VSU19UQUJfS0VZOiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RJbkdyb3VwR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cFVzZXJzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuQ09VUlNFU19UQUJfS0VZOiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhbGxvd2VkQ291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZoc0NvdXJzZXNGaWx0ZXIuc2VhcmNoU3RyaW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwidmhzQ291cnNlc0ZpbHRlci5zZWFyY2hTdHJpbmdcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuTEVBUk5JTkdfUEFUSFNfVEFCX0tFWToge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWxsb3dlZExlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ2aHNDb3Vyc2VzRmlsdGVyLnNlYXJjaFN0cmluZ1wiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTZWFyY2hTdHJpbmcoKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGl2ZVRhYktleSkge1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVVNFUlNfVEFCX0tFWToge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RJbkdyb3VwR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0VG9BZGQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwVXNlcnNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXRUb1JlbW92ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90SW5Hcm91cEdyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBVc2Vyc0dyaWRNb2RlbC5sb2FkQ3VycmVudFBhZ2UoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5DT1VSU0VTX1RBQl9LRVk6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWxsb3dlZENvdXJzZXNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXRUb0FkZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0VG9SZW1vdmU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FsbG93ZWRDb3Vyc2VzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuTEVBUk5JTkdfUEFUSFNfVEFCX0tFWToge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhbGxvd2VkTGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dFRvQWRkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0VG9SZW1vdmU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FsbG93ZWRMZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRDdXJyZW50UGFnZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0UGFnaW5hdGlvbigpIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVGFiS2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5VU0VSU19UQUJfS0VZOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdEluR3JvdXBHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXRUb0FkZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBVc2Vyc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dFRvUmVtb3ZlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RJbkdyb3VwR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFVzZXJzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSB0aGlzLkNPVVJTRVNfVEFCX0tFWToge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhbGxvd2VkQ291cnNlc0dyaWRNb2RlbC5maWx0ZXIuc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hJbnB1dFRvQWRkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXRUb1JlbW92ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWxsb3dlZENvdXJzZXNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUdyaWRNb2RlbC5sb2FkUGFnZSgwKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5MRUFSTklOR19QQVRIU19UQUJfS0VZOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FsbG93ZWRMZWFybmluZ1BhdGhzR3JpZE1vZGVsLmZpbHRlci5zZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaElucHV0VG9BZGQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwuZmlsdGVyLnNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoSW5wdXRUb1JlbW92ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWxsb3dlZExlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwubG9hZFBhZ2UoMCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoSW5wdXRUb1JlbW92ZSB8fCB0aGlzLnNlYXJjaElucHV0VG9SZW1vdmUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0VG9SZW1vdmUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZXRTZWFyY2hTdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0VG9BZGQgfHwgdGhpcy5zZWFyY2hJbnB1dFRvQWRkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFRvQWRkID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VhcmNoU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRBY3RpdmVUYWIodGFiS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVRhYktleSA9IHRhYktleTtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbFRvUmVtb3ZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zb3J0UHJvcGVydHkgPSBcInNlbGVjdGVkXCI7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlU29ydGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9SZW1vdmUgPSBbXTtcclxuICAgICAgICB0aGlzLnNlYXJjaElucHV0VG9SZW1vdmUgPSAnJztcclxuICAgICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb3BNZW51QWN0aXZlKHRvcE1lbnVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVRhYktleSA9PSB0b3BNZW51S2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0R3JpZHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVVzZXI+KFxyXG4gICAgICAgICAgICB0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiYXBpL3VzZXJzL2dyb3VwLzppZC91c2Vyc1wiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIHRoaXMuZ3JvdXBJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JvdXBVc2Vyc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIoe1xyXG4gICAgICAgICAgICBzdGFydExvYWRpbmc6ICgpID0+IHtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW5kTG9hZGluZzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBVc2Vyc0dyaWRNb2RlbC5zb3J0aW5nLmxlbmd0aCA+IDAgJiYgIXRoaXMuZ3JvdXBVc2Vyc0dyaWRNb2RlbC5zb3J0aW5nLnNvbWUocyA9PiBzLmZpZWxkTmFtZSA9PT0gXCJzZWxlY3RlZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydFByb3BlcnR5ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJldmVyc2VTb3J0aW5nID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBVc2Vyc0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goaSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvUmVtb3ZlLmluZGV4T2YoaS5pZCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5ub3RJbkdyb3VwR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SVVzZXI+KFxyXG4gICAgICAgICAgICB0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiYXBpL3VzZXJzL2dyb3VwLzppZC9ub3RcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCB0aGlzLmdyb3VwSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLm5vdEluR3JvdXBHcmlkTW9kZWwuYWRkTG9hZGluZ0xpc3RlbmVyKHtcclxuICAgICAgICAgICAgc3RhcnRMb2FkaW5nOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVuZExvYWRpbmc6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5vdEluR3JvdXBHcmlkTW9kZWwuc29ydGluZy5sZW5ndGggPiAwICYmICF0aGlzLm5vdEluR3JvdXBHcmlkTW9kZWwuc29ydGluZy5zb21lKHMgPT4gcy5maWVsZE5hbWUgPT09IFwic2VsZWN0ZWRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRQcm9wZXJ0eSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXZlcnNlU29ydGluZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdEluR3JvdXBHcmlkTW9kZWwuZW50cmllcy5mb3JFYWNoKGkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXNJZHNUb0FkZC5pbmRleE9mKGkuaWQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUNvdXJzZT4oXHJcbiAgICAgICAgICAgIHRoaXMuJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCJhcGkvdXNlcnMvZ3JvdXAvY291cnNlcy86aWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCB0aGlzLmdyb3VwSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmNvdXJzZUdyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIoe1xyXG4gICAgICAgICAgICBzdGFydExvYWRpbmc6ICgpID0+IHtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW5kTG9hZGluZzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291cnNlR3JpZE1vZGVsLnNvcnRpbmcubGVuZ3RoID4gMCAmJiAhdGhpcy5jb3Vyc2VHcmlkTW9kZWwuc29ydGluZy5zb21lKHMgPT4gcy5maWVsZE5hbWUgPT09IFwic2VsZWN0ZWRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRQcm9wZXJ0eSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXZlcnNlU29ydGluZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUdyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goaSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvUmVtb3ZlLmluZGV4T2YoaS5pZCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNhbGxvd2VkQ291cnNlc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElDb3Vyc2U+KFxyXG4gICAgICAgICAgICB0aGlzLiRodHRwLFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiYXBpL3VzZXJzL2dyb3VwL2NvdXJzZXMvOmlkL2Rpc2FsbG93ZWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCB0aGlzLmdyb3VwSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmRpc2FsbG93ZWRDb3Vyc2VzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih7XHJcbiAgICAgICAgICAgIHN0YXJ0TG9hZGluZzogKCkgPT4ge1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbmRMb2FkaW5nOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNhbGxvd2VkQ291cnNlc0dyaWRNb2RlbC5zb3J0aW5nLmxlbmd0aCA+IDAgJiYgIXRoaXMuZGlzYWxsb3dlZENvdXJzZXNHcmlkTW9kZWwuc29ydGluZy5zb21lKHMgPT4gcy5maWVsZE5hbWUgPT09IFwic2VsZWN0ZWRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRQcm9wZXJ0eSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXZlcnNlU29ydGluZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FsbG93ZWRDb3Vyc2VzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9BZGQuaW5kZXhPZihpLmlkKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJTGVhcm5pbmdQYXRoPihcclxuICAgICAgICAgICAgdGhpcy4kaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcImFwaS91c2Vycy9ncm91cC9sZWFybmluZ1BhdGhzLzppZFwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIHRoaXMuZ3JvdXBJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICApKTtcclxuXHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih7XHJcbiAgICAgICAgICAgIHN0YXJ0TG9hZGluZzogKCkgPT4ge1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbmRMb2FkaW5nOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLnNvcnRpbmcubGVuZ3RoID4gMCAmJiAhdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLnNvcnRpbmcuc29tZShzID0+IHMuZmllbGROYW1lID09PSBcInNlbGVjdGVkXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0UHJvcGVydHkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV2ZXJzZVNvcnRpbmcgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLmVudHJpZXMuZm9yRWFjaChpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9SZW1vdmUuaW5kZXhPZihpLmlkKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRpc2FsbG93ZWRMZWFybmluZ1BhdGhzR3JpZE1vZGVsID0gbmV3IEdyaWRNb2RlbChIdHRwR3JpZEhlbHBlci5jcmVhdGVMb2FkZXI8SUxlYXJuaW5nUGF0aD4oXHJcbiAgICAgICAgICAgIHRoaXMuJGh0dHAsXHJcbiAgICAgICAgICAgIHRoaXMudXJsLmJhc2UoXCJhcGkvdXNlcnMvZ3JvdXAvbGVhcm5pbmdQYXRocy86aWQvZGlzYWxsb3dlZFwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIHRoaXMuZ3JvdXBJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKClcclxuICAgICAgICApKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNhbGxvd2VkTGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5hZGRMb2FkaW5nTGlzdGVuZXIoe1xyXG4gICAgICAgICAgICBzdGFydExvYWRpbmc6ICgpID0+IHtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW5kTG9hZGluZzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWxsb3dlZExlYXJuaW5nUGF0aHNHcmlkTW9kZWwuc29ydGluZy5sZW5ndGggPiAwICYmICF0aGlzLmRpc2FsbG93ZWRMZWFybmluZ1BhdGhzR3JpZE1vZGVsLnNvcnRpbmcuc29tZShzID0+IHMuZmllbGROYW1lID09PSBcInNlbGVjdGVkXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0UHJvcGVydHkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV2ZXJzZVNvcnRpbmcgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhbGxvd2VkTGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5lbnRyaWVzLmZvckVhY2goaSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvQWRkLmluZGV4T2YoaS5pZCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzR3JpZE1vZGVsLnNob3dTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub3RJbkdyb3VwR3JpZE1vZGVsLnNob3dTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VHcmlkTW9kZWwuc2hvd1NwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc2FsbG93ZWRDb3Vyc2VzR3JpZE1vZGVsLnNob3dTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZWFybmluZ1BhdGhzR3JpZE1vZGVsLnNob3dTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kaXNhbGxvd2VkTGVhcm5pbmdQYXRoc0dyaWRNb2RlbC5zaG93U3Bpbm5lciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxlYXJuaW5nUGF0aHNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDAwMDtcclxuICAgICAgICB0aGlzLmRpc2FsbG93ZWRMZWFybmluZ1BhdGhzR3JpZE1vZGVsLnBhZ2VTaXplID0gMTAwMDA7XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlR3JpZE1vZGVsLnBhZ2VTaXplID0gMTAwMDA7XHJcbiAgICAgICAgdGhpcy5kaXNhbGxvd2VkQ291cnNlc0dyaWRNb2RlbC5wYWdlU2l6ZSA9IDEwMDAwO1xyXG5cclxuICAgICAgICB0aGlzLmdyb3VwVXNlcnNHcmlkTW9kZWwucGFnZVNpemUgPSAxMDAwMDtcclxuICAgICAgICB0aGlzLm5vdEluR3JvdXBHcmlkTW9kZWwucGFnZVNpemUgPSAxMDAwMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZERhdGEoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNUb3BNZW51QWN0aXZlKHRoaXMuVVNFUlNfVEFCX0tFWSkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkR3JvdXBVc2VycygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1RvcE1lbnVBY3RpdmUodGhpcy5DT1VSU0VTX1RBQl9LRVkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEdyb3VwQ291cnNlcygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1RvcE1lbnVBY3RpdmUodGhpcy5MRUFSTklOR19QQVRIU19UQUJfS0VZKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRHcm91cExQcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0FkZEl0ZW1zTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGl2ZVRhYktleSkge1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVVNFUlNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FkZFVzZXJzVG9Hcm91cE1vZGFsKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLkNPVVJTRVNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FkZENvdXJzZXNUb0dyb3VwTW9kYWwoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuTEVBUk5JTkdfUEFUSFNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FkZExlYXJuaW5nUGF0aHNUb0dyb3VwTW9kYWwoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWRkSXRlbXNCdXR0b25OYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGl2ZVRhYktleSkge1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVVNFUlNfVEFCX0tFWTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIkFkZCBVc2Vyc1wiO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuQ09VUlNFU19UQUJfS0VZOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiQWRkIENvdXJzZXNcIjtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLkxFQVJOSU5HX1BBVEhTX1RBQl9LRVk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJBZGQgTGVhcm5pbmcgUGF0aHNcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93QWRkVXNlcnNUb0dyb3VwTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IHRoaXMuQUREX01PREU7XHJcbiAgICAgICAgdGhpcy5ub3RJbkdyb3VwR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG5cclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNhZGRVc2Vyc1RvR3JvdXBNb2RhbFwiKS5tb2RhbCh7XHJcbiAgICAgICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xvc2VBZGRVc2Vyc1RvR3JvdXBNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNb2RlID0gdGhpcy5SRU1PVkVfTU9ERTtcclxuICAgICAgICAkKFwiI2FkZFVzZXJzVG9Hcm91cE1vZGFsXCIpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgdGhpcy5jbG9zZVNlYXJjaElucHV0KCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9BZGQgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbFRvQWRkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93QWRkQ291cnNlc1RvR3JvdXBNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNb2RlID0gdGhpcy5BRERfTU9ERTtcclxuICAgICAgICB0aGlzLmRpc2FsbG93ZWRDb3Vyc2VzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG5cclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNhZGRDb3Vyc2VzVG9Hcm91cE1vZGFsXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9zZUFkZENvdXJzZXNUb0dyb3VwTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IHRoaXMuUkVNT1ZFX01PREU7XHJcbiAgICAgICAgJChcIiNhZGRDb3Vyc2VzVG9Hcm91cE1vZGFsXCIpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgdGhpcy5jbG9zZVNlYXJjaElucHV0KCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9BZGQgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbFRvQWRkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93QWRkTGVhcm5pbmdQYXRoc1RvR3JvdXBNb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNb2RlID0gdGhpcy5BRERfTU9ERTtcclxuICAgICAgICB0aGlzLmRpc2FsbG93ZWRMZWFybmluZ1BhdGhzR3JpZE1vZGVsLmxvYWRQYWdlKDApO1xyXG5cclxuICAgICAgICAkKFwiLm1vZGFsLWJvZHlcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XHJcbiAgICAgICAgJChcIiNhZGRMZWFybmluZ1BhdGhzVG9Hcm91cE1vZGFsXCIpLm1vZGFsKHtcclxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9zZUFkZExlYXJuaW5nUGF0aHNUb0dyb3VwTW9kYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IHRoaXMuUkVNT1ZFX01PREU7XHJcbiAgICAgICAgJChcIiNhZGRMZWFybmluZ1BhdGhzVG9Hcm91cE1vZGFsXCIpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgdGhpcy5jbG9zZVNlYXJjaElucHV0KCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9BZGQgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbFRvQWRkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdEl0ZW0oaXRlbUlkOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TW9kZSA9PT0gdGhpcy5SRU1PVkVfTU9ERSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9SZW1vdmUuaW5kZXhPZihpdGVtSWQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvUmVtb3ZlLnNwbGljZSh0aGlzLnNlbGVjdGVkSXRlbXNJZHNUb1JlbW92ZS5pbmRleE9mKGl0ZW1JZCksIDEpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNJZHNUb1JlbW92ZS5wdXNoKGl0ZW1JZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9BZGQuaW5kZXhPZihpdGVtSWQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvQWRkLnNwbGljZSh0aGlzLnNlbGVjdGVkSXRlbXNJZHNUb0FkZC5pbmRleE9mKGl0ZW1JZCksIDEpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNJZHNUb0FkZC5wdXNoKGl0ZW1JZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsaWNrU2VsZWN0QWxsKGdyaWQ6IElHcmlkTW9kZWw8SVNlbGVjdGVibGU+KSB7XHJcbiAgICAgICAgZ3JpZC5lbnRyaWVzLmZvckVhY2godSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRNb2RlID09PSB0aGlzLlJFTU9WRV9NT0RFKSB7XHJcbiAgICAgICAgICAgICAgICB1LnNlbGVjdGVkID0gdGhpcy5zZWxlY3RBbGxUb1JlbW92ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdEFsbFRvUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9SZW1vdmUgPSBncmlkLmVudHJpZXMubWFwKGkgPT4gaS5pZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvUmVtb3ZlID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1LnNlbGVjdGVkID0gdGhpcy5zZWxlY3RBbGxUb0FkZDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdEFsbFRvQWRkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zSWRzVG9BZGQgPSBncmlkLmVudHJpZXMubWFwKGkgPT4gaS5pZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0lkc1RvQWRkID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc29ydEJ5U2VsZWN0ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0UHJvcGVydHkgPSBcInNlbGVjdGVkXCI7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlU29ydGluZyA9IHRoaXMucmV2ZXJzZVNvcnRpbmcgIT0gbnVsbCA/ICF0aGlzLnJldmVyc2VTb3J0aW5nIDogdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAubmFtZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5ncm91cC5uYW1lLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICYmICghdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzICYmIHRoaXMuZ3JvdXAuYnVzaW5lc3NVbml0SWQgfHwgdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge01lbnVIZWxwZXJ9IGZyb20gXCIuLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7VXNlcnNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1VzZXJzUm91dGVyXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SUdyb3VwfSBmcm9tIFwiLi9tb2RlbHMvSUdyb3VwXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtBbGxHcm91cHNQZXJtaXNzaW9ucywgUm9sZXNTcGVjaWZpY1Blcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVBlcm1pc3Npb25cIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoUmVkaXJlY3R9IGZyb20gXCIuLi9hdXRoY29yZS9BdXRoUmVkaXJlY3RcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtVc2VyUm9sZX0gZnJvbSBcIi4vbW9kZWxzL1VzZXJSb2xlXCI7XHJcblxyXG5pbnRlcmZhY2UgSUdyb3VwRXh0ZW5kZWQgZXh0ZW5kcyBJR3JvdXAge1xyXG4gICAgdmVyc2lvbjogbnVtYmVyO1xyXG4gICAgcGVybWlzc2lvbnNJZHM6IG51bWJlcltdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdXBNYW5hZ2VQZXJtaXNzaW9uc0NvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1c2Vycy5Hcm91cE1hbmFnZVBlcm1pc3Npb25zQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBncm91cElkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY3VycmVudFVzZXI6IElVc2VyID0ge307XHJcbiAgICBwdWJsaWMgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyB1c2VyQnVzaW5lc3NVbml0czogbnVtYmVyW107XHJcbiAgICBwdWJsaWMgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBncm91cDogSUdyb3VwRXh0ZW5kZWQ7XHJcbiAgICBwdWJsaWMgZGlzYWJsZWRQZXJtaXNzaW9uc0lkczogbnVtYmVyW107XHJcblxyXG4gICAgcHVibGljIGRpc2FibGVTYXZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJHJvdXRlUGFyYW1zXCIsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlcnNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJlZGlyZWN0Lk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgdXNlcnNSb3V0ZXI6IFVzZXJzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJzU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCkge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fR1JPVVBTX01FTlVfS0VZKTtcclxuICAgICAgICB0aGlzLmdyb3VwSWQgPSBwYXJzZUludCh0aGlzLiRyb3V0ZVBhcmFtc1tVc2Vyc1JvdXRlci5HUk9VUF9JRF9QQVJBTV0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZVxyXG4gICAgICAgICAgICAuZGVtYW5kQXV0aGVudGljYXRpb24oKVxyXG4gICAgICAgICAgICAuZGVtYW5kU3lzdGVtUGVybWlzc2lvbnMoc3lzdGVtUGVybWlzc2lvbnMgPT4gc3lzdGVtUGVybWlzc2lvbnMubWFuYWdlR3JvdXBQZXJtaXNzaW9ucyk7XHJcblxyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFN5c3RlbVBlcm1pc3Npb25zKCkudGhlbihwID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucyA9IHA7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgICAgICAudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSBhbmd1bGFyLmNvcHkodXNlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJCdXNpbmVzc1VuaXRzID0gYW5ndWxhci5jb3B5KHVzZXIuYnVzaW5lc3NVbml0cyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgPSBhbmd1bGFyLmNvcHkodXNlci5hbGxCdXNpbmVzc1VuaXRzKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEdyb3VwKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRQZXJtaXNzaW9ucygpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncm91cC5idXNpbmVzc1VuaXRJZCAhPSBudWxsICYmICF0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMgJiYgdGhpcy51c2VyQnVzaW5lc3NVbml0cy5pbmRleE9mKHRoaXMuZ3JvdXAuYnVzaW5lc3NVbml0SWQpID09IC0xXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5ncm91cC5idXNpbmVzc1VuaXRJZCA9PSBudWxsICYmICF0aGlzLmhhc0FsbEJ1c2luZXNzVW5pdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5mb3J3YXJkVG9BY2Nlc3NEZW5pZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXREaXNhYmxlZFBlcm1pc3Npb25zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcyA9IFtdO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMuZ3JvdXAuYnVzaW5lc3NSb2xlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVXNlclJvbGVbVXNlclJvbGUuTEVBUk5FUl06XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkUGVybWlzc2lvbnNJZHMgPSB0aGlzLmRpc2FibGVkUGVybWlzc2lvbnNJZHMuY29uY2F0KFJvbGVzU3BlY2lmaWNQZXJtaXNzaW9ucy5sZWFybmVyU3BlY2lmaWNQZXJtaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBVc2VyUm9sZVtVc2VyUm9sZS5JTlNUUlVDVE9SXTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcyA9IHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcy5jb25jYXQoUm9sZXNTcGVjaWZpY1Blcm1pc3Npb25zLmluc3RydWN0b3JTcGVjaWZpY1Blcm1pc3Npb25zKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFVzZXJSb2xlW1VzZXJSb2xlLkFUVEVOREVFX01BTkFHRVJdOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zSWRzID0gdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zSWRzLmNvbmNhdChSb2xlc1NwZWNpZmljUGVybWlzc2lvbnMuYXR0ZW5kZWVNYW5hZ2VyU3BlY2lmaWNQZXJtaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBVc2VyUm9sZVtVc2VyUm9sZS5BVVRIT1JdOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zSWRzID0gdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zSWRzLmNvbmNhdChSb2xlc1NwZWNpZmljUGVybWlzc2lvbnMuYXV0aG9yU3BlY2lmaWNQZXJtaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBVc2VyUm9sZVtVc2VyUm9sZS5BRE1JTklTVFJBVE9SXTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcyA9IHRoaXMuZGlzYWJsZWRQZXJtaXNzaW9uc0lkcy5jb25jYXQoUm9sZXNTcGVjaWZpY1Blcm1pc3Npb25zLmFkbWluaXN0cmF0b3JTcGVjaWZpY1Blcm1pc3Npb25zKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zSWRzID0gdGhpcy5oYXNBbGxCdXNpbmVzc1VuaXRzXHJcbiAgICAgICAgICAgID8gdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zSWRzXHJcbiAgICAgICAgICAgIDogdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zSWRzLmNvbmNhdChBbGxHcm91cHNQZXJtaXNzaW9ucy5OVUxMX0JVX09OTFlfU1lTVEVNX1BFUk1JU1NJT05TX0lEUyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkR3JvdXAoKTogYW5ndWxhci5JUHJvbWlzZTxJR3JvdXA+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2UuZ2V0R3JvdXAodGhpcy5ncm91cElkKS50aGVuKChncm91cDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSBhbmd1bGFyLmNvcHkoZ3JvdXApO1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcih0aGlzLmdyb3VwLm5hbWUpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncm91cDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZSgpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVzZXJzU2VydmljZS51cGRhdGVHcm91cFBlcm1pc3Npb25zKHRoaXMuZ3JvdXAuaWQsIHRoaXMuZ3JvdXAudmVyc2lvbiwgdGhpcy5ncm91cC5wZXJtaXNzaW9uc0lkcylcclxuICAgICAgICAgICAgLnRoZW4oZyA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkoZywgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcih0aGlzLmdyb3VwLm5hbWUpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIkdyb3VwICdcIiArIHRoaXMuZ3JvdXAubmFtZSArIFwiJyBoYXMgYmVlbiBzYXZlZFwiKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5cclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlcnNSb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvVXNlcnNSb3V0ZXJcIjtcclxuXHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1BhZ2VIZWFkZXJIZWxwZXJcIjtcclxuaW1wb3J0IHtHcmlkTW9kZWwsIElHcmlkTG9hZGluZ0xpc3RlbmVyLCBJR3JpZE1vZGVsfSBmcm9tIFwiLi8uLi9JR3JpZE1vZGVsXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLy4uL0lIdHRwR3JpZFNlcnZpY2VcIjtcclxuaW1wb3J0IHtJVHJlZUVsZW1lbnRJbmZvfSBmcm9tIFwiLi8uLi90cmVlL21vZGVscy9UcmVlRWxlbWVudEluZm9cIjtcclxuaW1wb3J0IHtUcmVlRWxlbWVudHNJbmZvRmlsbGVyfSBmcm9tIFwiLi8uLi90cmVlL1RyZWVFbGVtZW50c0luZm9GaWxsZXJcIjtcclxuXHJcbmltcG9ydCB7SUdyb3VwSW5IaWVyYXJjaHl9IGZyb20gXCIuL21vZGVscy9JR3JvdXBJbkhpZXJhcmNoeVwiO1xyXG5pbXBvcnQge0F1dGhTZXJ2aWNlfSBmcm9tIFwiLi4vYXV0aC9BdXRoU2VydmljZVwiO1xyXG5pbXBvcnQge0NoZWNrQnVzaW5lc3NVbml0SWR9IGZyb20gXCIuLi91dGlscy9DaGVja0J1c2luZXNzVW5pdElkXCI7XHJcbmltcG9ydCB7SVVzZXJJbmZvfSBmcm9tIFwiLi4vc2VjdXJpdHkvSVVzZXJJbmZvXCI7XHJcbmltcG9ydCB7SVNlbGVjdGFibGVSZWZlcmVuY2VFbnRpdHl9IGZyb20gXCIuLi9yZWZlcmVuY2UvbW9kZWxzL0lTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5XCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSBcIi4uL3JlZmVyZW5jZS9SZWZlcmVuY2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlVXRpbHN9IGZyb20gXCIuLi9yZWZlcmVuY2UvUmVmZXJlbmNlVXRpbHNcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuXHJcblxyXG5pbnRlcmZhY2UgSUdyb3VwSW5IaWVyYXJjaHlFeHRlbmRlZCBleHRlbmRzIElUcmVlRWxlbWVudEluZm88SUdyb3VwSW5IaWVyYXJjaHlFeHRlbmRlZD4sIElHcm91cEluSGllcmFyY2h5IHtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0NvbnRyb2xsZXIgaW1wbGVtZW50cyBJR3JpZExvYWRpbmdMaXN0ZW5lciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVzZXJzLkdyb3Vwc0NvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgZ3JvdXBzR3JpZE1vZGVsOiBJR3JpZE1vZGVsPElHcm91cEluSGllcmFyY2h5RXh0ZW5kZWQ+O1xyXG5cclxuICAgIHB1YmxpYyBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zO1xyXG4gICAgcHVibGljIGN1cnJlbnRVc2VyOiBJVXNlckluZm87XHJcbiAgICBwcml2YXRlIGJ1c2luZXNzVW5pdHM6IEFycmF5PElTZWxlY3RhYmxlUmVmZXJlbmNlRW50aXR5PjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBSZWZlcmVuY2VTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUmVmZXJlbmNlVXRpbHMuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2Vyc1NlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyB1c2Vyc1JvdXRlcjogVXNlcnNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogUmVmZXJlbmNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyByZWZlcmVuY2VVdGlsczogUmVmZXJlbmNlVXRpbHMsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJ1c2luZXNzVW5pdHNTZXJ2aWNlOiBCdXNpbmVzc1VuaXRzU2VydmljZSkge1xyXG4gICAgICAgIE1lbnVIZWxwZXIuc2V0Q3VycmVudE1lbnVJdGVtKE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fR1JPVVBTX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIlVzZXIgR3JvdXBzXCIpLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICBwZXJtaXNzaW9uc1NlcnZpY2UuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLnByZXNlcnZlSGVhZGVyKClcclxuICAgICAgICAgICAgICAgIC5hZGRBY3Rpb25MaW5rSWYocC5jcmVhdGVHcm91cCwgJysmbmJzcDtOZXcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcnNSb3V0ZXIuZ3JvdXBzQWRkVXJsKCkpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5ncm91cHNHcmlkTW9kZWwgPSBuZXcgR3JpZE1vZGVsKEh0dHBHcmlkSGVscGVyLmNyZWF0ZUxvYWRlcjxJR3JvdXBJbkhpZXJhcmNoeUV4dGVuZGVkPigkaHR0cCxcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VydmljZShcIi9hcGkvdXNlcnMvZ3JvdXBzL2FsbFwiKSkpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBzR3JpZE1vZGVsLmFkZExvYWRpbmdMaXN0ZW5lcih0aGlzKTtcclxuXHJcbiAgICAgICAgYXV0aFNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdXNlcjtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRzRGVhY3RpdmF0ZUZvclNlbGVjdG9yKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHRoaXMuYnVzaW5lc3NVbml0cyA9IDxBcnJheTxJU2VsZWN0YWJsZVJlZmVyZW5jZUVudGl0eT4+IHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVXNlckFjY2Vzc2VkVG9CdXNpbmVzc1VuaXQoYnVzaW5lc3NVbml0SWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyICYmIHRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlci5idXNpbmVzc1VuaXRzLnNvbWUoaWQgPT4gaWQgPT0gYnVzaW5lc3NVbml0SWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0R3JvdXBFZGl0VXJsKGlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJzUm91dGVyLmdyb3VwRWRpdFVybChpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlR3JvdXAoaWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlcnNTZXJ2aWNlLnNldEFjdGl2ZUdyb3VwV2l0aENoaWxkcmVuKHRydWUsIGlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNHcmlkTW9kZWwubG9hZEN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJc0FjdGl2ZUdyaWRTdHlsZShpc0FjdGl2ZTogYm9vbGVhbik6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWN0aXZlXHJcbiAgICAgICAgICAgID8ge31cclxuICAgICAgICAgICAgOiB7XCJjb2xvclwiOiBcIiM5OTk5OTlcIn07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnZlcnRJc0FjdGl2ZShpc0FjdGl2ZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWN0aXZlICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGlzQWN0aXZlID8gJ1llcycgOiAnTm8nXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydExvYWRpbmcoKSB7XHJcbiAgICAgICAgLy9kbyBub3RoaW5nXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuZExvYWRpbmcoKSB7XHJcbiAgICAgICAgVHJlZUVsZW1lbnRzSW5mb0ZpbGxlci5maWxsSGllcmFyY2h5SW5mb1dpdGhNYXhMZXZlbCh0aGlzLmdyb3Vwc0dyaWRNb2RlbC5lbnRyaWVzLCBOdW1iZXIuTUFYX1ZBTFVFKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzVXNlclNhbWVCdXNpbmVzc1VuaXRzKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlcikge1xyXG4gICAgICAgICAgICBpZiAoYnVzaW5lc3NVbml0SWQgPT0gbnVsbCAmJiB0aGlzLmN1cnJlbnRVc2VyICYmIHRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIENoZWNrQnVzaW5lc3NVbml0SWQuaGFzVXNlclNhbWVCdXNpbmVzc1VuaXRzKHRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0cywgYnVzaW5lc3NVbml0SWQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QnVzaW5lc3NVbml0QnlJZChidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIGlmIChidXNpbmVzc1VuaXRJZCAhPSBudWxsICYmIHRoaXMuYnVzaW5lc3NVbml0cykge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmJ1c2luZXNzVW5pdHMuZmlsdGVyKGJ1ID0+IGJ1LmlkID09IGJ1c2luZXNzVW5pdElkKVswXS5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7R3JvdXBFbnVtLCBJR3JvdXB9IGZyb20gXCIuL21vZGVscy9JR3JvdXBcIjtcclxuaW1wb3J0IHtJVXNlciwgUHJlZGVmaW5lZFVzZXJzRW51bX0gZnJvbSBcIi4vbW9kZWxzL0lVc2VyXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuL1VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlcnNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1VzZXJzUm91dGVyXCI7XHJcbmltcG9ydCB7SVN5c3RlbUxvY2FsZX0gZnJvbSBcIi4uL3NldHRpbmdzL21vZGVscy9JU3lzdGVtTG9jYWxlXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdXJpdHkvUGVybWlzc2lvbnNTZXJ2aWNlXCI7XHJcbmltcG9ydCB7SVN5c3RlbVBlcm1pc3Npb25zfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGVybWlzc2lvbnMvSVN5c3RlbVBlcm1pc3Npb25zXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4uL3V0aWxzL1VybFNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJVXNlckxvZ29ufSBmcm9tIFwiLi9tb2RlbHMvSVVzZXJMb2dvblwiO1xyXG5pbXBvcnQge0lMb2dvblByb3ZpZGVyfSBmcm9tIFwiLi4vYXV0aC9JTG9nb25Qcm92aWRlclwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi4vSVNlbGVjdGFibGVcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0lVc2VySW5mb30gZnJvbSBcIi4uL3NlY3VyaXR5L0lVc2VySW5mb1wiO1xyXG5pbXBvcnQge1JlZmVyZW5jZUVudGl0aWVzUGFyYW1zfSBmcm9tIFwiLi4vcmVmZXJlbmNlL21vZGVscy9JUmVmZXJlbmNlRW50aXRpZXNQYXJhbXNcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VTZXJ2aWNlfSBmcm9tIFwiLi4vcmVmZXJlbmNlL1JlZmVyZW5jZVNlcnZpY2VcIjtcclxuaW1wb3J0IHtJSXBBZGRyZXNzUmFuZ2V9IGZyb20gXCIuL21vZGVscy9JSXBBZGRyZXNzUmFuZ2VcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyUm9sZX0gZnJvbSBcIi4vbW9kZWxzL1VzZXJSb2xlXCI7XHJcbmltcG9ydCB7TG9nb25Qcm92aWRlckVudW19IGZyb20gXCIuLi9zZWN1cml0eS9Mb2dvblByb3ZpZGVyRW51bVwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLi91dGlscy9TdHJpbmdCdWlsZGVyXCI7XHJcbmltcG9ydCB7QmlsbGluZ1BsYW5TZXJ2aWNlfSBmcm9tIFwiLi4vZmluYW5jZXMvQmlsbGluZ1BsYW5TZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXBwUHJvcGVydGllc30gZnJvbSBcIi4uL3V0aWxzL0FwcFByb3BlcnRpZXNcIjtcclxuXHJcbmludGVyZmFjZSBJR3JvdXBFeHRlbmRlZCBleHRlbmRzIElHcm91cCB7XHJcbiAgICBzaG93bj86IGJvb2xlYW47XHJcbiAgICBjYW5CZVJlbW92ZWQ/OiBib29sZWFuO1xyXG4gICAgdG9nZ2xlPzogKCkgPT4gdm9pZDtcclxuICAgIHNlbGVjdD86ICgpID0+IHZvaWQ7XHJcbiAgICB1bnNlbGVjdD86ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJVXNlckV4dGVuZGVkIGV4dGVuZHMgSVVzZXIge1xyXG4gICAgdXNlckxvZ29ucz86IEFycmF5PElVc2VyTG9nb24+O1xyXG4gICAgaXBBZGRyZXNzUmFuZ2VzPzogQXJyYXk8SUlwQWRkcmVzc1JhbmdlPjtcclxuICAgIGJ1c2luZXNzVW5pdElkcz86IEFycmF5PG51bWJlcj47XHJcbiAgICBjcmVkaXRzTGlzdD86IHN0cmluZ1tdO1xyXG4gICAgY3JlZGl0VHlwZXM/OiBzdHJpbmc7XHJcbiAgICBub3RpZnk/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlIGV4dGVuZHMgRmlsZSB7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJFZGl0Q29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVzZXJzLlVzZXJFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgdXNlcklkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY29uZmlybVBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbm90aWZ5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcHJldmlldzogSUZpbGU7XHJcbiAgICBwdWJsaWMgaXNSZXNldFByZXZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IHN0cmluZyA9IFwiR0VORVJBTF9JTkZPXCI7IC8vICdHRU5FUkFMX0lORk8nIHwgXCJQUk9GSUxFXCIgfCBcIkNFX0NSRURJVFNcIlxyXG5cclxuICAgIHB1YmxpYyB1c2VyUHJvZmlsZTogSVVzZXJFeHRlbmRlZCA9IHtcclxuICAgICAgICBmdWxsTmFtZTogXCJcIixcclxuICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICBuZXdHcm91cHM6IFtdLFxyXG4gICAgICAgIGxvY2FsZTogbnVsbCxcclxuICAgICAgICB1c2VyTG9nb25zOiBbXSxcclxuICAgICAgICBidXNpbmVzc1VuaXRJZHM6IHVuZGVmaW5lZCxcclxuICAgICAgICBjcmVkaXRzTGlzdDogW10sXHJcbiAgICAgICAgY3JlZGl0VHlwZXM6IFwiXCIsXHJcbiAgICAgICAgcHJldmlld0lkOiBudWxsLFxyXG4gICAgICAgIHByZXZpZXdVcmw6IFwiXCIsXHJcbiAgICAgICAgaXBBZGRyZXNzUmFuZ2VzOiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgbW9kaWZpY2F0aW9uR3JvdXBzOiBBcnJheTxJR3JvdXBFeHRlbmRlZD47XHJcbiAgICBwdWJsaWMgdXNlckdyb3VwczogQXJyYXk8SUdyb3VwRXh0ZW5kZWQ+O1xyXG4gICAgcHVibGljIHVzZXJHcm91cHNMaXN0Rm9yRWRpdGluZzogQXJyYXk8SUdyb3VwRXh0ZW5kZWQ+O1xyXG4gICAgcHVibGljIGF2YWlsYWJsZUxvY2FsZXM6IEFycmF5PElTeXN0ZW1Mb2NhbGU+O1xyXG4gICAgcHJpdmF0ZSBsb2dvblByb3ZpZGVyczogQXJyYXk8SUxvZ29uUHJvdmlkZXI+ID0gW107XHJcbiAgICBwdWJsaWMgbG9nb25Qcm92aWRlcnNGb3JBZGQ6IEFycmF5PElMb2dvblByb3ZpZGVyPiA9IFtdO1xyXG4gICAgcHVibGljIGFsbG93ZWRCdXNpbmVzc1VuaXRzOiBBcnJheTxJU2VsZWN0YWJsZT47XHJcblxyXG4gICAgcHVibGljIGVycm9yOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbWluUGFzc3dvcmRMZW5ndGggPSBVc2VyU2VydmljZS5taW5QYXNzd29yZExlbmd0aDtcclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0RlYWN0aXZhdGlvbkFsbG93ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNEZWxldGlvbkFsbG93ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNFdmVyeXRoaW5nRGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuICAgIHB1YmxpYyBjdXJyZW50VXNlcjogSVVzZXJJbmZvID0ge307XHJcbiAgICBwdWJsaWMgZ3JvdXBCeUlkOiBNYXA8bnVtYmVyLCBJR3JvdXA+ID0gbmV3IE1hcDxudW1iZXIsIElHcm91cD4oKTtcclxuICAgIHB1YmxpYyB1c2VyR3JvdXBMaXN0OiBNYXA8bnVtYmVyLCBJR3JvdXA+ID0gbmV3IE1hcDxudW1iZXIsIElHcm91cD4oKTtcclxuXHJcbiAgICBwdWJsaWMgYXZhaWxhYmxlQ3JlZGl0VHlwZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgcHVibGljIGlwQWRkcmVzc1JhbmdlOiBJSXBBZGRyZXNzUmFuZ2UgPSB7fTtcclxuICAgIHB1YmxpYyBpc0FkZFJvd1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgZWRpdGluZ0lwQWRkcmVzc1JhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHNob3dlZElwQWRkcmVzc1RhYjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyB1c2VyUm9sZSA9IFVzZXJSb2xlO1xyXG5cclxuICAgIHB1YmxpYyBhdmFpbGFibGVSb2xlczogQXJyYXk8U3RyaW5nPiA9IFtdO1xyXG4gICAgcHVibGljIHVuYXZhaWxhYmxlUm9sZTogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBuZXh0Um9sZUJ5UHJpb3JpdHlOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIHJvbGVVbmF2YWlsYWJsZU1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgbmV4dFJvbGVCeVByaW9yaXR5TWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBwcml2YXRlIHVzZXJSb2xlcyA9IG5ldyBNYXA8U3RyaW5nLCBzdHJpbmc+KCk7XHJcblxyXG4gICAgcHVibGljIGxvZ29uUHJvdmlkZXI6IHN0cmluZyA9IFwiZGVmYXVsdFwiO1xyXG5cclxuICAgIHB1YmxpYyBpc0xvYWRpbmdMb2dvblByb3ZpZGVyID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIG1heEZyZWVQbGFuVXNlcnM6IG51bWJlcjtcclxuICAgIHB1YmxpYyBpc0ZyZWVQbGFuQnVGdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNGb3JtVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBidXNpbmVzc1VuaXRJZHNXaXRoRnJlZVBsYW46IEFycmF5PG51bWJlcj47XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnREeW5hbWljSVA6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgaXNDaGVja1Bhc3N3b3JkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHRpbWVvdXRJZDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBhdmF0YXJFcnJvcnM6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkc2NvcGVcIixcclxuICAgICAgICBcIiRyb290U2NvcGVcIixcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkbG9nXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFwiJHFcIixcclxuICAgICAgICBcIiRyb3V0ZVBhcmFtc1wiLFxyXG4gICAgICAgIFwiJGxvY2F0aW9uXCIsXHJcbiAgICAgICAgXCJVcGxvYWRcIixcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBlcm1pc3Npb25zU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgVXJsU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJpbGxpbmdQbGFuU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRsb2c6IGFuZ3VsYXIuSUxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkcm91dGVQYXJhbXM6IGFuZ3VsYXIucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR1cGxvYWRlcjogbmcuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHVzZXJzUm91dGVyOiBVc2Vyc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcmVmZXJlbmNlU2VydmljZTogUmVmZXJlbmNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJpbGxpbmdQbGFuU2VydmljZTogQmlsbGluZ1BsYW5TZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9VU0VSU19NRU5VX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMudXNlcklkID0gdGhpcy4kcm91dGVQYXJhbXNbXCJ1c2VySWRcIl07XHJcblxyXG4gICAgICAgIHBlcm1pc3Npb25zU2VydmljZS5nZXRTeXN0ZW1QZXJtaXNzaW9ucygpLnRoZW4ocCA9PiB7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkucHJlc2VydmVIZWFkZXIoKVxyXG4gICAgICAgICAgICAgICAgLmFkZEFjdGlvbkxpbmtJZihwLmNyZWF0ZVVzZXIsICcrJm5ic3A7TmV3JywgdGhpcy51c2Vyc1JvdXRlci5hZGRVcmwoKSkudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtUGVybWlzc2lvbnMgPSBwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudGhlbih1ID0+IHRoaXMuY3VycmVudFVzZXIgPSB1KTtcclxuXHJcbiAgICAgICAgdGhpcy4kcS5hbGwoW1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRBbGxvd2VkQnVzaW5lc3NVbml0cygpLFxyXG4gICAgICAgICAgICB0aGlzLmxvYWRHcm91cHMoKSxcclxuICAgICAgICAgICAgdGhpcy5sb2FkTG9nb25Qcm92aWRlcnMoKSxcclxuICAgICAgICAgICAgdGhpcy5sb2FkQXZhaWxhYmxlTG9jYWxlcygpXHJcbiAgICAgICAgXSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlcklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFVzZXIoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0ZyZWVQbGFuRm9yQlUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJOZXcgVXNlclwiKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzVW5pdElkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLndoZW4obnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRSb2xlcygpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5iaWxsaW5nUGxhblNlcnZpY2UuZ2V0TWF4RnJlZVBsYW5Vc2VycygpLnRoZW4oZGF0YSA9PiB0aGlzLm1heEZyZWVQbGFuVXNlcnMgPSBkYXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ZW5lckF2YXRhckltYWdlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXNlclJvbGVzLnNldChVc2VyUm9sZVtVc2VyUm9sZS5BRE1JTklTVFJBVE9SXSwgXCJBZG1pbmlzdHJhdG9yXCIpO1xyXG4gICAgICAgIHRoaXMudXNlclJvbGVzLnNldChVc2VyUm9sZVtVc2VyUm9sZS5JTlNUUlVDVE9SXSwgXCJJbnN0cnVjdG9yXCIpO1xyXG4gICAgICAgIHRoaXMudXNlclJvbGVzLnNldChVc2VyUm9sZVtVc2VyUm9sZS5BVFRFTkRFRV9NQU5BR0VSXSwgXCJBdHRlbmRlZSBtYW5hZ2VyXCIpO1xyXG4gICAgICAgIHRoaXMudXNlclJvbGVzLnNldChVc2VyUm9sZVtVc2VyUm9sZS5BVVRIT1JdLCBcIkF1dGhvclwiKTtcclxuICAgICAgICB0aGlzLnVzZXJSb2xlcy5zZXQoVXNlclJvbGVbVXNlclJvbGUuTEVBUk5FUl0sIFwiTGVhcm5lclwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuaXNDaGVja1Bhc3N3b3JkKClcclxuICAgICAgICAgICAgLnRoZW4oaXNDaGVjayA9PiB0aGlzLmlzQ2hlY2tQYXNzd29yZCA9IGlzQ2hlY2spO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VMb2dvblByb3ZpZGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWRkVXNlckxvZ29uKHRoaXMubG9nb25Qcm92aWRlcik7XHJcbiAgICAgICAgdGhpcy5sb2dvblByb3ZpZGVyID0gXCJkZWZhdWx0XCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lckF2YXRhckltYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbignYXZhdGFyLnVwZGF0ZS5pbWcnLChldmVudCwgcHJldmlldykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgPSBwcmV2aWV3O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oJ2F2YXRhci5yZXNldC5pbWcnLChldmVudCwgcHJldmlldywgcHJldmlld1VybCwgaXNSZXNldFByZXZpZXcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ID0gcHJldmlldztcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5wcmV2aWV3VXJsID0gcHJldmlld1VybDtcclxuICAgICAgICAgICAgdGhpcy5pc1Jlc2V0UHJldmlldyA9IGlzUmVzZXRQcmV2aWV3O1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbFVzZXJFZGl0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmKHRoaXMuaXNDcmVhdGVQYWdlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMudXNlcnNSb3V0ZXIuaW5kZXhVcmwoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ29uUHJvdmlkZXIgPSBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLmF2YXRhckVycm9ycyA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRVc2VyKCkudGhlbiggKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Jlc2V0UHJldmlldyA9ICF0aGlzLnVzZXJQcm9maWxlLnByZXZpZXdVcmw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRyb290U2NvcGUuJGVtaXQoJ2F2YXRhci51cGRhdGUuaW1nJywgdGhpcy51c2VyUHJvZmlsZS5wcmV2aWV3VXJsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXIoKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmlzRGVsZXRpb25BbGxvd2VkID0gdGhpcy5pc0RlYWN0aXZhdGlvbkFsbG93ZWQgPSAhKHRoaXMudXNlcklkIGluIFByZWRlZmluZWRVc2Vyc0VudW0pO1xyXG4gICAgICAgIHRoaXMuaXNFdmVyeXRoaW5nRGlzYWJsZWQgPSAodGhpcy51c2VySWQgPT0gUHJlZGVmaW5lZFVzZXJzRW51bS5HVUVTVCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuZ2V0KHRoaXMudXNlcklkKS50aGVuKHUgPT4ge1xyXG4gICAgICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcih1LmZ1bGxOYW1lKS51cGRhdGUoKTtcclxuICAgICAgICAgICAgYW5ndWxhci5jb3B5KHUsIHRoaXMudXNlclByb2ZpbGUpO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlLm5ld0dyb3VwcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlLnVzZXJMb2dvbnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5pcEFkZHJlc3NSYW5nZXMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RHluYW1pY0lQID0gdS5keW5hbWljSXA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRVc2VyR3JvdXBzKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRxLmFsbChbXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRVc2VyQnVzaW5lc3NVbml0cygpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVXNlckxvZ29ucygpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkSXBBZGRyZXNzUmFuZ2VzKClcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkR3JvdXBzKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ3JlYXRlUGFnZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRHcm91cHNPbkNyZWF0ZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRHcm91cHNPbkVkaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9ubHlVbmlxdWVSb2xlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVSb2xlcy5maWx0ZXIoKHgsIGksIGEpID0+IGEuaW5kZXhPZih4KSA9PSBpKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFJvbGVzKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ3JlYXRlUGFnZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlUm9sZXMgPSBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGUgJiYgdGhpcy51c2VyUHJvZmlsZS5ncm91cHNMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlLmdyb3Vwc0xpc3QuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVSb2xlcy5wdXNoKGdyb3VwLmJ1c2luZXNzUm9sZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kcS53aGVuKG51bGwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmdldEF2YWlsYWJsZVVzZXJSb2xlcyh0aGlzLnVzZXJJZCkudGhlbihyb2xlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZVJvbGVzID0gYW5ndWxhci5jb3B5KHJvbGVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocm9sZXMubGVuZ3RoICE9IDAgJiYgdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1JvbGUgIT0gdW5kZWZpbmVkICYmIHJvbGVzLmluZGV4T2YodGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1JvbGUpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5hdmFpbGFibGVSb2xlID0gdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1JvbGU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5hdmFpbGFibGVSb2xlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRSb2xlQnlQcmlvcml0eU5hbWUgPSByb2xlc1swXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlVW5hdmFpbGFibGVNZXNzYWdlID0gXCJTZWxlY3RlZCByb2xlIGlzIHVuYXZhaWxhYmxlLiBcIiArIHRoaXMubmV4dFJvbGVCeVByaW9yaXR5TmFtZSArIFwiIHdpbGwgYmUgdXNlZC5cIjtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dFJvbGVCeVByaW9yaXR5TWVzc2FnZSA9IFwiTm8gcm9sZSBzZWxlY3RlZC4gUm9sZSBcIiArIHRoaXMubmV4dFJvbGVCeVByaW9yaXR5TmFtZSArIFwiIHdpbGwgYmUgdXNlZC5cIjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1JvbGUgJiYgdGhpcy5hdmFpbGFibGVSb2xlcy5pbmRleE9mKHRoaXMudXNlclByb2ZpbGUuYnVzaW5lc3NSb2xlKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZVJvbGVzLnB1c2godGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1JvbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ3JlYXRlUGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMudXNlcklkID09PSBcInVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEdyb3Vwc09uRWRpdCgpOiBhbmd1bGFyLklQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZXRHcm91cHModGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1VuaXRJZHMpLnRoZW4oZ3JvdXBzID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyR3JvdXBzTGlzdEZvckVkaXRpbmcgPSBhbmd1bGFyLmNvcHkoZ3JvdXBzKTtcclxuICAgICAgICAgICAgdGhpcy51c2VyR3JvdXBzTGlzdEZvckVkaXRpbmcuZm9yRWFjaChnID0+IHRoaXMuZ3JvdXBCeUlkLnNldChnLmlkLCBnKSk7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckdyb3Vwcyh0aGlzLnVzZXJJZCkudGhlbih1c2VyR3JvdXBzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlckdyb3VwcyA9IGFuZ3VsYXIuY29weSh1c2VyR3JvdXBzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlckdyb3Vwcy5mb3JFYWNoKGcgPT4gdGhpcy51c2VyR3JvdXBMaXN0LnNldChnLmlkLCBnKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRVc2VyR3JvdXBzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkR3JvdXBzT25DcmVhdGUoKTogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuZ2V0R3JvdXBzKHRoaXMudXNlclByb2ZpbGUuYnVzaW5lc3NVbml0SWRzKS50aGVuKGdyb3VwcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlckdyb3Vwc0xpc3RGb3JFZGl0aW5nID0gYW5ndWxhci5jb3B5KGdyb3Vwcyk7XHJcbiAgICAgICAgICAgIHRoaXMudXNlckdyb3Vwc0xpc3RGb3JFZGl0aW5nLmZvckVhY2goZyA9PiB0aGlzLmdyb3VwQnlJZC5zZXQoZy5pZCwgZykpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZS5ncm91cHNMaXN0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUuZ3JvdXBzTGlzdC5mb3JFYWNoKGcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ncm91cEJ5SWQuaGFzKGcuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUuZ3JvdXBzTGlzdC5zcGxpY2UodGhpcy51c2VyUHJvZmlsZS5ncm91cHNMaXN0LmluZGV4T2YoZyksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFVzZXJHcm91cHMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRBbGxvd2VkQnVzaW5lc3NVbml0cygpOiBhbmd1bGFyLklQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZXRBbGxvd2VkQnVzaW5lc3NVbml0cygpLnRoZW4oYnVzaW5lc3NVbml0cyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsb3dlZEJ1c2luZXNzVW5pdHMgPSBidXNpbmVzc1VuaXRzO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTG9nb25Qcm92aWRlcnMoKTogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuZ2V0UHJvdmlkZXJzKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nb25Qcm92aWRlcnMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQXZhaWxhYmxlTG9nb25Qcm92aWRlcnMoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRVc2VyR3JvdXBzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnVzZXJHcm91cHNMaXN0Rm9yRWRpdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJHcm91cHNMaXN0Rm9yRWRpdGluZy5mb3JFYWNoKChncm91cDogSUdyb3VwRXh0ZW5kZWQpID0+IHtcclxuICAgICAgICAgICAgICAgIGdyb3VwLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBncm91cC5jYW5CZVJlbW92ZWQgPSAhKHRoaXMudXNlclByb2ZpbGUuaWQgPT0gUHJlZGVmaW5lZFVzZXJzRW51bS5BRE1JTiAmJiBncm91cC5pZCA9PSBHcm91cEVudW0uU1lTX0FETUlOUykgfHwgIXRoaXMudXNlclByb2ZpbGUuaWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZS5ncm91cHNMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5ncm91cHNMaXN0LmZvckVhY2goKHVzZXJHcm91cDogSUdyb3VwRXh0ZW5kZWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLmlkID09IHVzZXJHcm91cC5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51c2VyR3JvdXBzTGlzdEZvckVkaXRpbmcuc29tZShpZCA9PiBpZC5pZCA9PT0gdXNlckdyb3VwLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckdyb3VwLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJHcm91cC5jYW5CZVJlbW92ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckdyb3Vwc0xpc3RGb3JFZGl0aW5nLnB1c2goYW5ndWxhci5jb3B5KHVzZXJHcm91cCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZS5ncm91cHNMaXN0ICYmIHRoaXMudXNlckdyb3Vwc0xpc3RGb3JFZGl0aW5nLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUuZ3JvdXBzTGlzdC5mb3JFYWNoKCh1c2VyR3JvdXA6IElHcm91cEV4dGVuZGVkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB1c2VyR3JvdXAuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdXNlckdyb3VwLmNhbkJlUmVtb3ZlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyR3JvdXBzTGlzdEZvckVkaXRpbmcucHVzaChhbmd1bGFyLmNvcHkodXNlckdyb3VwKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vZGlmaWNhdGlvbkdyb3VwcyA9IGFuZ3VsYXIuY29weSh0aGlzLnVzZXJHcm91cHNMaXN0Rm9yRWRpdGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVXNlckxvZ29ucygpOiBhbmd1bGFyLklQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyTG9nb25zKHRoaXMudXNlclByb2ZpbGUuaWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS51c2VyTG9nb25zLnNwbGljZSgwLCB0aGlzLnVzZXJQcm9maWxlLnVzZXJMb2dvbnMubGVuZ3RoKTtcclxuICAgICAgICAgICAgcmVzdWx0LmZvckVhY2gociA9PiB0aGlzLnVzZXJQcm9maWxlLnVzZXJMb2dvbnMucHVzaChyKSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVBdmFpbGFibGVMb2dvblByb3ZpZGVycygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJCdXNpbmVzc1VuaXRzKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJCdXNpbmVzc1VuaXRzKHRoaXMudXNlclByb2ZpbGUuaWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1VuaXRJZHMgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2VjdXJpdHlDb25maWd1cmF0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMub25CdXNpbmVzc1VuaXRDaGFuZ2UoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRBdmFpbGFibGVMb2NhbGVzKCk6IGFuZ3VsYXIuSVByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRBdmFpbGFibGVMb2NhbGVzKCkudGhlbihsb2NhbGVzID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxvY2FsZUluZm8gPSBsb2NhbGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGVJbmZvLmRlZmF1bHRMb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5sb2NhbGUgPSBsb2NhbGVJbmZvLmxvY2FsZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVMb2NhbGVzID0gbG9jYWxlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZSgpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDaGVja1Bhc3N3b3JkICYmIHRoaXMudXNlclByb2ZpbGUudXNlckxvZ29uc1xyXG4gICAgICAgICAgICAmJiB0aGlzLnVzZXJQcm9maWxlLnVzZXJMb2dvbnMubGVuZ3RoICE9IDAgJiYgdGhpcy5jdXJyZW50VXNlci5pZCA9PSB0aGlzLnVzZXJJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBsb2NhbExvZ29uUHJvdmlkZXIgPSB0aGlzLnVzZXJQcm9maWxlLnVzZXJMb2dvbnNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIobG9nb24gPT4gbG9nb24ucHJvdmlkZXJLZXkgPT09IExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLkxPQ0FMXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobG9jYWxMb2dvblByb3ZpZGVyICYmIGxvY2FsTG9nb25Qcm92aWRlci5sZW5ndGggIT0gMFxyXG4gICAgICAgICAgICAgICAgJiYgbG9jYWxMb2dvblByb3ZpZGVyWzBdLnBhc3N3b3JkICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgJiYgIXRoaXMuYXV0aFNlcnZpY2UuY2hlY2tQYXNzd29yZChsb2NhbExvZ29uUHJvdmlkZXJbMF0ucGFzc3dvcmQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgMSBsZXR0ZXIsIDEgbnVtYmVyLCAxIHNwZWNpYWwgY2hhcmFjdGVyIGZyb20gIUAjJCVeJiogYW5kIG11c3QgYmUgOCBvciBtb3JlIGNoYXJhY3RlcnNcIjtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKHRoaXMuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmlzRnJlZUJ1c2luZXNzVW5pdHNGdWxsKHRoaXMuYnVzaW5lc3NVbml0SWRzV2l0aEZyZWVQbGFuKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0ZyZWVQbGFuQnVGdWxsID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgdGhpcy51c2VySWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1JvbGUgJiYgdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1JvbGUgIT09IFVzZXJSb2xlW1VzZXJSb2xlLkxFQVJORVJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF2YWlsYWJsZVJvbGVzICYmIHRoaXMuYXZhaWxhYmxlUm9sZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcIlRvIHNlbGVjdCBhIHJvbGUsIHlvdSBtdXN0IHNlbGVjdCBVc2VyIEdyb3VwLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiV2FybmluZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiT2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2FuY2VsQnV0dG9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmF2YWlsYWJsZVJvbGVzLmluZGV4T2YodGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1JvbGUpID09PSAtMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1JvbGUgPT0gdGhpcy51bmF2YWlsYWJsZVJvbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkaWFsb2dNZXNzYWdlOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dNZXNzYWdlID0gXCI8cD5DYW4ndCBhcHBseSB0aGlzIHVzZXIgcm9sZS4gWW91IGNhbiBjaG9vc2Ugb25seSB0aGUgbmV4dCByb2xlczo8L3A+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXZhaWxhYmxlUm9sZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hdmFpbGFibGVSb2xlc1tpXSA9PSB0aGlzLnVuYXZhaWxhYmxlUm9sZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9sZSA9IHRoaXMudXNlclJvbGVzLmdldCh0aGlzLmF2YWlsYWJsZVJvbGVzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dNZXNzYWdlICs9IFwiPHA+XCIgKyAoaSArIDEpICsgXCIuIFwiICsgcm9sZSArIFwiPC9wPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKGRpYWxvZ01lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJXYXJuaW5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJPa1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDYW5jZWxCdXR0b246IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUudXNlckxvZ29ucy5mb3JFYWNoKGxvZ29uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGUubm90aWZ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dvbi5yZXNldFBhc3N3b3JkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZ29uLnBhc3N3b3JkICYmIHRoaXMudXNlclByb2ZpbGUubm90aWZ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dvbi5wYXNzd29yZCA9IHRoaXMuZ2VuZXJhdGVSYW5kb21QYXNzd29yZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFsb2dvbi5wYXNzd29yZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nb24ucGFzc3dvcmQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtUGFzc3dvcmQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlLmdyb3Vwc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5uZXdHcm91cHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5ncm91cHNMaXN0LmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5uZXdHcm91cHMucHVzaChncm91cC5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5uZXdHcm91cHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGUuYnVzaW5lc3NSb2xlID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUuYnVzaW5lc3NSb2xlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSB0aGlzLnVzZXJJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudXNlclNlcnZpY2UudXBkYXRlKHRoaXMudXNlclByb2ZpbGUsIHRoaXMuaXNSZXNldFByZXZpZXcsIHRoaXMucHJldmlldylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLnVzZXJQcm9maWxlKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJVc2VyICdcIiArIHRoaXMudXNlclByb2ZpbGUuZnVsbE5hbWUgKyBcIicgaGFzIGJlZW4gc2F2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2Uubm90aWZ5Q3JlYXRlZCh0aGlzLnVzZXJQcm9maWxlLCB1LmlkKS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDQwOSAmJiByZXNwb25zZS5kYXRhLmNvZGUgPT0gXCJlcnJvci5ub3RpZmljYXRpb24udGVtcGxhdGUuZGlzYWJsZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIk5vdGlmaWNhdGlvbiB0ZW1wbGF0ZSBpcyBkaXNhYmxlZC4gRW1haWwgaGFzIG5vdCBiZWVuIHNlbnQuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IodGhpcy5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VySWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5lZGl0VXNlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy4kbG9jYXRpb24ucGF0aCh0aGlzLnVzZXJzUm91dGVyLmVkaXRVcmwodS5pZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiRsb2NhdGlvbi5wYXRoKHRoaXMudXNlcnNSb3V0ZXIuaW5kZXhVcmwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXBsb2FkID0gdGhpcy5wcmV2aWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnVwbG9hZCh0aGlzLnByZXZpZXcsIHRoaXMudXNlcklkLCBcInByZXZpZXdcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJHEud2hlbihudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkVXNlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlcklkID09IHRoaXMuY3VycmVudFVzZXIuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJvb3RTY29wZS4kYnJvYWRjYXN0KCdhdmF0YXIudXBsb2FkLmltZycsIHRoaXMucHJldmlldywgdGhpcy5pc1Jlc2V0UHJldmlldyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFJvbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDQwOSAmJiByZXNwb25zZS5kYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IudXNlci5kdXBsaWNhdGUubmFtZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJGdWxsIG5hbWUgXCIgKyB0aGlzLnVzZXJQcm9maWxlLmZ1bGxOYW1lICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLnVzZXIuZHVwbGljYXRlLmVtYWlsXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVtYWlsIFwiICsgdGhpcy51c2VyUHJvZmlsZS5lbWFpbCArIFwiIGFscmVhZHkgZXhpc3RzXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlcnJvci5kdXBsaWNhdGUubG9nb24ucHJvdmlkZXJcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiT25seSBvbmUgbG9nb24gZm9yIGVhY2ggdHlwZSBpcyBhbGxvd2VkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlcnJvci51c2VyLnBhc3N3b3JkLnNob3J0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlRoZSBsZW5ndGggb2YgcGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLmludmFsaWQucGFzc3dvcmRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiUGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IDEgbGV0dGVyLCAxIG51bWJlciwgMSBzcGVjaWFsIGNoYXJhY3RlciBmcm9tICFAIyQlXiYqIGFuZCBtdXN0IGJlIDggb3IgbW9yZSBjaGFyYWN0ZXJzXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9yLmluZGV4T2YoXCJlcnJvci5kdXBsaWNhdGUubG9naW4uZm9yLnByb3ZpZGVyLlwiKSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvdmlkZXJLZXkgPSByZXNwb25zZS5kYXRhLmVycm9yLnN1YnN0cmluZyhcImVycm9yLmR1cGxpY2F0ZS5sb2dpbi5mb3IucHJvdmlkZXIuXCIubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsb2dvbkZvdW5kID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy51c2VyUHJvZmlsZS51c2VyTG9nb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGUudXNlckxvZ29uc1tqXS5wcm92aWRlcktleSA9PSBwcm92aWRlcktleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dvbkZvdW5kID0gdGhpcy51c2VyUHJvZmlsZS51c2VyTG9nb25zW2pdLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dvbkZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVXNlcm5hbWUgXCIgKyBsb2dvbkZvdW5kICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiUXVlcnkgaGFzIGZhaWxlZDogcGxlYXNlIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBoZWxwIGRlc2tcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlF1ZXJ5IGhhcyBmYWlsZWQ6IHBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3Igb3IgaGVscCBkZXNrXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcih0aGlzLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcih0aGlzLmdldEZyZWVQbGFuTWVzc2FnZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZChmaWxlOiBGaWxlLCB1c2VySWQ6IG51bWJlciwgZmlsZVR5cGU6IHN0cmluZyk6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFByb21pc2U8RmlsZT4ge1xyXG4gICAgICAgIGxldCB1cmxCdWlsZGVyID0gdGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvdXBsb2FkP3VzZXJJZD06dXNlcklkJmZpbGVUeXBlPTpmaWxlVHlwZVwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6dXNlcklkXCIsIHVzZXJJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmZpbGVUeXBlXCIsIGZpbGVUeXBlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kdXBsb2FkZXIudXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGFuZ3VsYXIuY29weSh1cmxCdWlsZGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWFjdGl2YXRlKCkge1xyXG4gICAgICAgIGxldCBwcm9taXNlID0gdGhpcy51c2VyU2VydmljZS5zZXRBY3RpdmUodGhpcy51c2VyUHJvZmlsZS5pZCwgZmFsc2UpO1xyXG4gICAgICAgIHByb21pc2UudGhlbih1ID0+IHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMudXNlcnNSb3V0ZXIuaW5kZXhVcmwoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlKCkge1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuaXNGcmVlQnVzaW5lc3NVbml0c0Z1bGwodGhpcy5idXNpbmVzc1VuaXRJZHNXaXRoRnJlZVBsYW4pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRnJlZVBsYW5CdUZ1bGwgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2Uuc2V0QWN0aXZlKHRoaXMudXNlclByb2ZpbGUuaWQsIHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHUgPT4gdGhpcy5sb2FkVXNlcigpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcih0aGlzLmdldEZyZWVQbGFuTWVzc2FnZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0R3JvdXAoaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBncm91cDogSUdyb3VwRXh0ZW5kZWQgPSB0aGlzLm1vZGlmaWNhdGlvbkdyb3Vwc1tpbmRleF07XHJcbiAgICAgICAgZ3JvdXAuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYWZlR3JvdXBTZWxlY3QoaW5kZXg6IG51bWJlciwgaW1tdXRhYmxlOiBib29sZWFuLCAkZXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhpbmRleCwgaW1tdXRhYmxlKTtcclxuICAgICAgICBjb25zb2xlLmxvZygkZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1xyXG4gICAgICAgIGlmKGltbXV0YWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBncm91cDogSUdyb3VwRXh0ZW5kZWQgPSB0aGlzLm1vZGlmaWNhdGlvbkdyb3Vwc1tpbmRleF07XHJcbiAgICAgICAgZ3JvdXAuc2VsZWN0ZWQgPSAkZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVuc2VsZWN0R3JvdXAoaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBncm91cDogSUdyb3VwRXh0ZW5kZWQgPSB0aGlzLm1vZGlmaWNhdGlvbkdyb3Vwc1tpbmRleF07XHJcbiAgICAgICAgZ3JvdXAuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJTZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JvdXBzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZEdyb3VwcygpIHtcclxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlLmdyb3Vwc0xpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLm1vZGlmaWNhdGlvbkdyb3Vwcy5mb3JFYWNoKGcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZy5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5ncm91cHNMaXN0LnB1c2goZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCgnI2dyb3Vwc01vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlcklkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVVzZXJHcm91cHModGhpcy51c2VyUHJvZmlsZS5pZCwgdGhpcy51c2VyUHJvZmlsZS52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5ncm91cHNMaXN0Lm1hcCh1c2VyR3JvdXAgPT4gdXNlckdyb3VwLmlkKSlcclxuICAgICAgICAgICAgICAgIC50aGVuKCh1c2VyOiBJVXNlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJVc2VyIGdyb3VwcyBzdWNjZXNzZnVsbHkgdXBkYXRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUm9sZXMoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiRmFpbGVkIHRvIHVwZGF0ZSB1c2VyIGdyb3Vwc1wiKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFJvbGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVHcm91cChncm91cElkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLm1vZGlmaWNhdGlvbkdyb3Vwcy5mb3JFYWNoKChncm91cDogSUdyb3VwRXh0ZW5kZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGdyb3VwLmlkID09IGdyb3VwSWQpIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlLmdyb3Vwc0xpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLm1vZGlmaWNhdGlvbkdyb3Vwcy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoci5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5ncm91cHNMaXN0LnB1c2gocik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmxvYWRSb2xlcygpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHJlY2FsY3VsYXRlQXZhaWxhYmxlTG9nb25Qcm92aWRlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdMb2dvblByb3ZpZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb2dvblByb3ZpZGVyc0ZvckFkZC5zcGxpY2UoMCwgdGhpcy5sb2dvblByb3ZpZGVyc0ZvckFkZC5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMubG9nb25Qcm92aWRlcnMuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy51c2VyUHJvZmlsZS51c2VyTG9nb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZS51c2VyTG9nb25zW2pdLnByb3ZpZGVyS2V5ID09IHAua2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nb25Qcm92aWRlcnNGb3JBZGQucHVzaChwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTG9nb25Qcm92aWRlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExvZ29uUHJvdmlkZXJOYW1lKHByb3ZpZGVyS2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubG9nb25Qcm92aWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHByb3ZpZGVyS2V5ID09IHRoaXMubG9nb25Qcm92aWRlcnNbaV0ua2V5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dvblByb3ZpZGVyc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFVzZXJMb2dvbihwcm92aWRlcktleTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHVzZXJMb2dvbjogSVVzZXJMb2dvbiA9IHtcclxuICAgICAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VyUHJvZmlsZS5pZCxcclxuICAgICAgICAgICAgcHJvdmlkZXJLZXk6IHByb3ZpZGVyS2V5LFxyXG4gICAgICAgICAgICBuYW1lOiBudWxsLFxyXG4gICAgICAgICAgICBwYXNzd29yZDogbnVsbCxcclxuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2V0UGFzc3dvcmQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlLnVzZXJMb2dvbnMucHVzaCh1c2VyTG9nb24pO1xyXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVBdmFpbGFibGVMb2dvblByb3ZpZGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVVc2VyTG9nb24ocHJvdmlkZXJLZXk6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBsb2dvbkluZGV4ID0gLTE7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnVzZXJQcm9maWxlLnVzZXJMb2dvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGUudXNlckxvZ29uc1tpXS5wcm92aWRlcktleSA9PSBwcm92aWRlcktleSkge1xyXG4gICAgICAgICAgICAgICAgbG9nb25JbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobG9nb25JbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlLnVzZXJMb2dvbnMuc3BsaWNlKGxvZ29uSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQXZhaWxhYmxlTG9nb25Qcm92aWRlcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dvblByb3ZpZGVyID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJ1c2luZXNzVW5pdENoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLmxvYWRHcm91cHMoKTtcclxuICAgICAgICB0aGlzLmNoZWNrRnJlZVBsYW5Gb3JCVSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1Bhc3N3b3JkTWF0Y2hlZENvbmZpcm1QYXNzd29yZCgpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlLnVzZXJMb2dvbnMuZm9yRWFjaChsb2dvbiA9PiB7XHJcbiAgICAgICAgICAgIGlmIChsb2dvbi5wYXNzd29yZCA9PSBsb2dvbi5jb25maXJtUGFzc3dvcmQpXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IChsb2dvbi5wYXNzd29yZCA9PSBcIlwiIHx8IGxvZ29uLnBhc3N3b3JkID09IHVuZGVmaW5lZCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAobG9nb24uY29uZmlybVBhc3N3b3JkID09IFwiXCIgfHwgbG9nb24uY29uZmlybVBhc3N3b3JkID09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVBY2NvdW50KCkge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgICAgICBcIllvdSBhcmUgYWJvdXQgdG8gcGVybWFuZW50bHkgZGVsZXRlIHRoZSBhY2NvdW50IFwiICsgdGhpcy51c2VyUHJvZmlsZS5mdWxsTmFtZSArIFwiLiBBcmUgeW91IHN1cmU/XCIsIHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkFjY291bnQgZGVsZXRpbmdcIixcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiRGVsZXRlXCIsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b246IFwiQ2FuY2VsXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSB0aGlzLnVzZXJTZXJ2aWNlLmRlbGV0ZUFjY291bnQodGhpcy51c2VyUHJvZmlsZS5pZCk7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMudXNlcnNSb3V0ZXIuaW5kZXhVcmwoKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVXNlckFjY2Vzc2VkVG9CdXNpbmVzc1VuaXQoZ3JvdXBJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlckdyb3VwTGlzdC5oYXMoZ3JvdXBJZCkpIHtcclxuICAgICAgICAgICAgbGV0IGJ1c2luZXNzVW5pdElkID0gdGhpcy51c2VyR3JvdXBMaXN0LmdldChncm91cElkKS5idXNpbmVzc1VuaXRJZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0cykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXIuYnVzaW5lc3NVbml0cy5zb21lKGlkID0+IGlkID09IGJ1c2luZXNzVW5pdElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZENyZWRpdFR5cGVzQXZhaWxhYmxlRm9yVXNlcih1c2VyKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBsZXQgZm9yQnVzaW5lc3NVbml0ID0gdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1VuaXRJZHMgJiYgdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1VuaXRJZHMubGVuZ3RoID09IDEgPyB0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzVW5pdElkc1swXSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBsZXQgbnVsbGFibGVCdXNpbmVzc1VuaXQgPSB0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzVW5pdElkcyAmJiB0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzVW5pdElkcy5sZW5ndGggPT0gMCAmJiAhdXNlci5hbGxCdXNpbmVzc1VuaXRzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVNlcnZpY2UuZ2V0QWN0aXZlUmVmZXJlbmNlRW50aXRpZXNGb3JTZWxlY3RvcihcImNyZWRpdFR5cGVzXCIsXHJcbiAgICAgICAgICAgIG5ldyBSZWZlcmVuY2VFbnRpdGllc1BhcmFtcyh1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCx1bmRlZmluZWQsIGZvckJ1c2luZXNzVW5pdCxcclxuICAgICAgICAgICAgICAgIG51bGxhYmxlQnVzaW5lc3NVbml0KSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ3JlZGl0VHlwZXMgPSByZXN1bHQubWFwKGkgPT4gaS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUuY3JlZGl0c0xpc3QgPSB0aGlzLnVzZXJQcm9maWxlLmNyZWRpdHNMaXN0LmZpbHRlcihzID0+IHRoaXMuYXZhaWxhYmxlQ3JlZGl0VHlwZXMuaW5kZXhPZihzKSAhPSAtMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVDcmVkaXRUeXBlcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFZpZXdUeXBlKHZpZXdUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKHZpZXdUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJHRU5FUkFMX0lORk9cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSBcIkdFTkVSQUxfSU5GT1wiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1BST0ZJTEUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVXNlckNyZWRpdFR5cGVzKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnZpZXdUeXBlID0gXCJQUk9GSUxFXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0NFX0NSRURJVFMnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IFwiQ0VfQ1JFRElUU1wiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0lQX0FERFJFU1MnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IFwiSVBfQUREUkVTU1wiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFVzZXJDcmVkaXRUeXBlcygpOiBhbmd1bGFyLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJDcmVkaXRUeXBlcyh0aGlzLnVzZXJQcm9maWxlLmlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5jcmVkaXRUeXBlcyA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUuY3JlZGl0c0xpc3QgPSByZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCA+IDAgPyByZXN1bHQuc3BsaXQoXCIsXCIpIDogW107XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkQ3JlZGl0VHlwZXNBdmFpbGFibGVGb3JVc2VyKHRoaXMudXNlclByb2ZpbGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyUHJvZmlsZS5jcmVkaXRUeXBlcztcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVVzZXJDcmVkaXRUeXBlcygpOiBhbmd1bGFyLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGxldCBuZXdDcmVkaXRzID0gdGhpcy51c2VyUHJvZmlsZS5jcmVkaXRzTGlzdCAmJiB0aGlzLnVzZXJQcm9maWxlLmNyZWRpdHNMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLnVzZXJQcm9maWxlLmNyZWRpdHNMaXN0LmpvaW4oXCIsXCIpIDogXCJcIjtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS51cGRhdGVVc2VyQ3JlZGl0VHlwZXModGhpcy51c2VyUHJvZmlsZS5pZCwgbmV3Q3JlZGl0cylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJTdWNjZXNzZnVsbHkgc2F2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRJcEFkZHJlc3NSYW5nZXMoKTogYW5ndWxhci5JUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuZ2V0SXBBZGRyZXNzUmFuZ2VzKHRoaXMudXNlclByb2ZpbGUuaWQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5pcEFkZHJlc3NSYW5nZXMuc3BsaWNlKDAsIHRoaXMudXNlclByb2ZpbGUuaXBBZGRyZXNzUmFuZ2VzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKHIgPT4gdGhpcy51c2VyUHJvZmlsZS5pcEFkZHJlc3NSYW5nZXMucHVzaChyKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFySXBBZGRyZXNzUmFuZ2VGb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXBBZGRyZXNzUmFuZ2UgPSB7fTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZWRpdGluZ0lwQWRkcmVzc1JhbmdlID0gZmFsc2UsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlSXBBZGRyZXNzUmFuZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaXBBZGRyZXNzUmFuZ2U6IElJcEFkZHJlc3NSYW5nZSA9IHt9O1xyXG4gICAgICAgIGlwQWRkcmVzc1JhbmdlLnVzZXJJZCA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgIGlwQWRkcmVzc1JhbmdlLmZyb21JcCA9IHRoaXMuaXBBZGRyZXNzUmFuZ2UuZnJvbUlwO1xyXG4gICAgICAgIGlwQWRkcmVzc1JhbmdlLnRvSXAgPSB0aGlzLmlwQWRkcmVzc1JhbmdlLnRvSXA7XHJcbiAgICAgICAgaXBBZGRyZXNzUmFuZ2UuaXNJUHY2ID0gdGhpcy5pcEFkZHJlc3NSYW5nZS5pc0lQdjYgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogdGhpcy5pcEFkZHJlc3NSYW5nZS5pc0lQdjY7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmlwQWRkcmVzc1JhbmdlLmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2Uuc2F2ZUlwQWRkcmVzc1JhbmdlKGlwQWRkcmVzc1JhbmdlKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBZGRSb3dWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkSXBBZGRyZXNzUmFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhcklwQWRkcmVzc1JhbmdlRm9ybSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJJUCByYW5nZSBoYXMgYmVlbiBhZGRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFwiSVAgcmFuZ2UgZmFpbGVkIGFkZGVkXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpcEFkZHJlc3NSYW5nZS5pZCA9IHRoaXMuaXBBZGRyZXNzUmFuZ2UuaWQ7XHJcbiAgICAgICAgICAgIGlwQWRkcmVzc1JhbmdlLnZlcnNpb24gPSB0aGlzLmlwQWRkcmVzc1JhbmdlLnZlcnNpb247XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlSXBBZGRyZXNzUmFuZ2UoaXBBZGRyZXNzUmFuZ2UpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FkZFJvd1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRJcEFkZHJlc3NSYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFySXBBZGRyZXNzUmFuZ2VGb3JtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIklQIHJhbmdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoXCJJUCByYW5nZSBmYWlsZWQgdXBkYXRlZFwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlRHluYW1pY0lwKCkge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlRHluYW1pY0lwKHRoaXMudXNlcklkKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkVXNlcigpO1xyXG4gICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiRHluYW1pYyBJUCBzdWNjZXNzZnVsbHkgdXBkYXRlZFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsSXBBZGRyZXNzUmFuZ2VBZGQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jbGVhcklwQWRkcmVzc1JhbmdlRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuaXNBZGRSb3dWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXRJcEFkZHJlc3NSYW5nZShpcEFkZHJlc3NSYW5nZTogSUlwQWRkcmVzc1JhbmdlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pcEFkZHJlc3NSYW5nZSA9IHt9O1xyXG4gICAgICAgIHRoaXMuaXNBZGRSb3dWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nSXBBZGRyZXNzUmFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXBBZGRyZXNzUmFuZ2UuaWQgPSBpcEFkZHJlc3NSYW5nZS5pZDtcclxuICAgICAgICB0aGlzLmlwQWRkcmVzc1JhbmdlLnZlcnNpb24gPSBpcEFkZHJlc3NSYW5nZS52ZXJzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVJcEFkZHJlc3NSYW5nZShpcEFkZHJlc3NSYW5nZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnJlbW92ZUlwQWRkcmVzc1JhbmdlKGlwQWRkcmVzc1JhbmdlSWQpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZElwQWRkcmVzc1JhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhcIlNlbGVjdGVkIElQIHJhbmdlIGhhcyBiZWVuIHJlbW92ZWRcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWN1cml0eUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGUuYnVzaW5lc3NVbml0SWRzICYmIHRoaXMudXNlclByb2ZpbGUuYnVzaW5lc3NVbml0SWRzLmxlbmd0aCA9PSAxXHJcbiAgICAgICAgICAgICYmICh0aGlzLnN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUJ1c2luZXNzVW5pdCB8fCB0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmNvbmZpZ3VyZUJ1c2luZXNzVW5pdFNldHRpbmdzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmdldFNlY3VyaXR5Q29uZmlndXJhdGlvbih0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzVW5pdElkc1swXSlcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB0aGlzLnNob3dlZElwQWRkcmVzc1RhYiA9IHJlc3VsdC5lbmZvcmNlSXBWZXJpZmljYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhdGVTYXZlRm9ybSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRm9ybVZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaXBBZGRyZXNzUmFuZ2UuaXNJUHY2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pcEFkZHJlc3NSYW5nZS5pc0lQdjYgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGltZW91dElkKSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudmFsaWRhdGVJcEFkZHJlc3NSYW5nZSh0aGlzLmlwQWRkcmVzc1JhbmdlKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9ybVZhbGlkID0gcmVzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCAxNTAwKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHNob3dNb2RhbERpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBtb2RhbCA9ICQoXCIuZ3JvdXBzLW1vZGFsIC5tb2RhbC1kaWFsb2dcIik7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCkge1xyXG4gICAgICAgICAgICBtb2RhbC5jc3MoJ21hcmdpbi1yaWdodCcsICdhdXRvJyk7XHJcbiAgICAgICAgICAgIG1vZGFsLmNzcygnbWFyZ2luLWxlZnQnLCAnYXV0bycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZpbHRlcl9fbWFpblwiKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdFdpZHRoID0gZWxlbWVudC5vZmZzZXRMZWZ0IC0gNTA7XHJcbiAgICAgICAgICAgICAgICBtb2RhbC5jc3MoJ21hcmdpbi1sZWZ0JywgbGVmdFdpZHRoICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEdyb3VwRWRpdFVybChncm91cElkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJzUm91dGVyLmdyb3VwRWRpdFVybChncm91cElkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaG93R3JvdXBMaW5rKGdyb3VwOiBJR3JvdXApOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZ3JvdXAgJiYgZ3JvdXAuYnVzaW5lc3NVbml0SWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXIuYWxsQnVzaW5lc3NVbml0cyB8fCB0aGlzLmN1cnJlbnRVc2VyLmJ1c2luZXNzVW5pdHMuaW5kZXhPZihncm91cC5idXNpbmVzc1VuaXRJZCkgIT0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyLmFsbEJ1c2luZXNzVW5pdHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUmlnaHRQYXNzd29yZChwYXNzd29yZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDaGVja1Bhc3N3b3JkICYmIHBhc3N3b3JkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmNoZWNrUGFzc3dvcmQocGFzc3dvcmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0QWxsQlUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1VuaXRJZHMgPSB0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzVW5pdElkcy5sZW5ndGggPT09IHRoaXMuYWxsb3dlZEJ1c2luZXNzVW5pdHMubGVuZ3RoID8gW11cclxuICAgICAgICAgICAgOiB0aGlzLmFsbG93ZWRCdXNpbmVzc1VuaXRzLm1hcChidSA9PiBidS5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdERlc2VsZWN0QlUoaXRlbUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZSAmJiB0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzVW5pdElkcy5pbmRleE9mKGl0ZW1JZCkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGUuYnVzaW5lc3NVbml0SWRzLnB1c2goaXRlbUlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzVW5pdElkcyA9IHRoaXMudXNlclByb2ZpbGUuYnVzaW5lc3NVbml0SWRzLmZpbHRlcihidSA9PiBidSAhPT0gaXRlbUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGUuYnVzaW5lc3NVbml0SWRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0c1NlcnZpY2UuZ2V0QnVzaW5lc3NVbml0QnlJZCh0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzVW5pdElkc1swXSkudGhlbihidXNpbmVzc1VuaXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5sb2NhbGUgPSBidXNpbmVzc1VuaXQubG9jYWxlID8gYnVzaW5lc3NVbml0LmxvY2FsZSA6IEFwcFByb3BlcnRpZXMuZGVmYXVsdExvY2FsZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZS5sb2NhbGUgPSBBcHBQcm9wZXJ0aWVzLmRlZmF1bHRMb2NhbGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkKGl0ZW06IElTZWxlY3RhYmxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlclByb2ZpbGUgJiYgdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1VuaXRJZHMgJiYgdGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1VuaXRJZHMuaW5kZXhPZihpdGVtLmlkKSAhPT0gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEZyZWVQbGFuTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiWW91IGhhdmUgcmVhY2hlZCBtYXhpbXVtIDpudW1iZXIgYWN0aXZlIHVzZXJzIGFsbG93ZWQgZm9yIEZyZWUgUGxhblwiKVxyXG4gICAgICAgICAgICAud2l0aChcIjpudW1iZXJcIiwgdGhpcy5tYXhGcmVlUGxhblVzZXJzKS5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja0ZyZWVQbGFuRm9yQlUoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDtcclxuICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZS5idXNpbmVzc1VuaXRJZHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pc0ZyZWVQbGFuQnVGdWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRzV2l0aEZyZWVQbGFuKHRoaXMudXNlclByb2ZpbGUuYnVzaW5lc3NVbml0SWRzKVxyXG4gICAgICAgICAgICAudGhlbihpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdElkc1dpdGhGcmVlUGxhbiA9IGlkO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVzaW5lc3NVbml0SWRzV2l0aEZyZWVQbGFuLmxlbmd0aCA9PSB0aGlzLnVzZXJQcm9maWxlLmJ1c2luZXNzVW5pdElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdElkc1dpdGhGcmVlUGxhbi5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5pc0F2YWlsYWJsZUNyZWF0aW5nTmV3VXNlckZvckZyZWVQbGFuKGlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtyZXN1bHQgPSByZXN9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0ZyZWVQbGFuQnVGdWxsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlUmFuZG9tUGFzc3dvcmQoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgbnVtYmVycyA9ICcwMTIzNDU2Nzg5JztcclxuICAgICAgICBsZXQgc3ltYm9scyA9ICchQCMkJV4mKic7XHJcbiAgICAgICAgbGV0IGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonO1xyXG4gICAgICAgIGxldCBwYXNzd29yZExlbmd0aCA9IDEyO1xyXG4gICAgICAgIGxldCBwYXNzd29yZCA9ICcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHBhc3N3b3JkTGVuZ3RoIC8gNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCByYW5kID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWxwaGFiZXQubGVuZ3RoKTtcclxuICAgICAgICAgICAgcGFzc3dvcmQgKz0gYWxwaGFiZXQuc3Vic3RyaW5nKHJhbmQsIHJhbmQgKzEpO1xyXG5cclxuICAgICAgICAgICAgcmFuZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG51bWJlcnMubGVuZ3RoKTtcclxuICAgICAgICAgICAgcGFzc3dvcmQgKz0gbnVtYmVycy5zdWJzdHJpbmcocmFuZCwgcmFuZCArMSk7XHJcblxyXG4gICAgICAgICAgICByYW5kID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc3ltYm9scy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBwYXNzd29yZCArPSBzeW1ib2xzLnN1YnN0cmluZyhyYW5kLCByYW5kICsxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWNvZGVMb2dvblByb3ZpZGVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5hbWU7XHJcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJJbnRlcm5hbCBhY2NvdW50c1wiOiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBcIkludGVybmFsIGFjY291bnRzXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2dpbkFzVXNlcih1c2VySWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UubG9naW5Bc1RoaXNVc2VyKHVzZXJJZClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24ucGF0aCgnLycpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgPT09IFwiZXJyb3IudXNlcnMubG9nb25zLmlzLmVtcHR5XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmllci53YXJuaW5nKFwiVXNlciBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGxvZ29uIHdheSBmb3IgYXV0aG9yaXphdGlvblwiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIud2FybmluZyhcIkxvZ2luIGFzIHRoaXMgdXNlciBmYWlsZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SVVzZXJ9IGZyb20gXCIuL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge0lVc2VyTG9nb259IGZyb20gXCIuL21vZGVscy9JVXNlckxvZ29uXCI7XHJcbmltcG9ydCB7SUdyb3VwfSBmcm9tIFwiLi9tb2RlbHMvSUdyb3VwXCI7XHJcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0lTZWxlY3RhYmxlfSBmcm9tIFwiLi8uLi9JU2VsZWN0YWJsZVwiO1xyXG5pbXBvcnQge0lVc2VyQ3JlZGl0fSBmcm9tIFwiLi4vY3JlZGl0cy9tb2RlbHMvSVVzZXJDcmVkaXRcIjtcclxuaW1wb3J0IHtJSXBBZGRyZXNzUmFuZ2V9IGZyb20gXCIuL21vZGVscy9JSXBBZGRyZXNzUmFuZ2VcIjtcclxuaW1wb3J0IHtJSHR0cFByb21pc2VDYWxsYmFja0FyZ30gZnJvbSBcImFuZ3VsYXJcIjtcclxuaW1wb3J0IHtJTWVudUNvbmZpZ3VyYXRpb259IGZyb20gXCIuL21vZGVscy9JTWVudUNvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtFeHBpcmF0aW9uQ2FjaGV9IGZyb20gXCIuLi9jb21tb24vRXhwaXJhdGlvbkNhY2hlXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcblxyXG5pbnRlcmZhY2UgSUV4dFVzZXIgZXh0ZW5kcyBJVXNlciB7XHJcbiAgICBwcmV2aWV3PzogYW55O1xyXG4gICAgaXNSZXNldFByZXZpZXc/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1c2Vycy5Vc2VyU2VydmljZVwiO1xyXG5cclxuICAgIHByaXZhdGUgZXhwQ2FjaGUgPSBuZXcgRXhwaXJhdGlvbkNhY2hlKCk7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBtaW5QYXNzd29yZExlbmd0aCA9IDE7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xyXG4gICAgICAgIFwiJGh0dHBcIixcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBcIlVwbG9hZFwiXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHVwbG9hZGVyOiBuZy5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQoaWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SVVzZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvOmlkXCIpLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZSh1c2VyOiBJVXNlcik6IGFuZ3VsYXIuSVByb21pc2U8SVVzZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3VzZXJzXCIpLCB1c2VyKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBub3RpZnlDcmVhdGVkKHVzZXI6IElVc2VyLCB1c2VySWQ6IG51bWJlcikge1xyXG4gICAgICAgIHVzZXIuaWQgPSB1c2VySWQ7XHJcbiAgICAgICAgdXNlci52ZXJzaW9uID0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3VzZXJzL25vdGlmeVwiKSwgdXNlcilcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZlNpZ251cCh1c2VyOiBJVXNlcik6IGFuZ3VsYXIuSVByb21pc2U8SVVzZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3VzZXJzL3NlbGZTaWdudXBcIiksIHVzZXIpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0VHJpYWwoY29tcGFueU5hbWU6IHN0cmluZywgY29tcGFueURvbWFpbjogc3RyaW5nLCB1c2VyOiBJVXNlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy9zdGFydFRyaWFsP2NvbXBhbnlOYW1lPTpjb21wYW55TmFtZSZjb21wYW55RG9tYWluPTpjb21wYW55RG9tYWluXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpjb21wYW55TmFtZVwiLCBjb21wYW55TmFtZSlcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmNvbXBhbnlEb21haW5cIiwgY29tcGFueURvbWFpbilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgdXNlcilcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKHVzZXI6IElFeHRVc2VyLCBpc1Jlc2V0UHJldmlldzpib29sZWFuLCBwcmV2aWV3PzpGaWxlKTogYW5ndWxhci5JUHJvbWlzZTxJVXNlcj4ge1xyXG4gICAgICAgIHVzZXIucHJldmlldyA9IHByZXZpZXcgIT0gbnVsbFxyXG4gICAgICAgICAgICA/IHtuYW1lOiBwcmV2aWV3Lm5hbWUsIHR5cGU6IHByZXZpZXcudHlwZSwgc2l6ZTogcHJldmlldy5zaXplfVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgdXNlci5pc1Jlc2V0UHJldmlldyA9IGlzUmVzZXRQcmV2aWV3O1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS91c2Vyc1wiKSwgdXNlcilcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVXNlckdyb3Vwcyh1c2VySWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCBuZXdHcm91cHM6IEFycmF5PG51bWJlcj4pOiBhbmd1bGFyLklQcm9taXNlPElVc2VyPiB7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgIHZlcnNpb246IHZlcnNpb24sXHJcbiAgICAgICAgICAgIG5ld0dyb3VwczogbmV3R3JvdXBzXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvOnVzZXJJZC9ncm91cHNcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnVzZXJJZFwiLCB1c2VySWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEFjdGl2ZShpZDogbnVtYmVyLCBpc0FjdGl2ZTogYm9vbGVhbik6IGFuZ3VsYXIuSVByb21pc2U8SVVzZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvOmlkL3NldEFjdGl2ZS86aXNBY3RpdmVcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIGlkKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aXNBY3RpdmVcIiwgaXNBY3RpdmUpLnNlcnZpY2UoKSwgdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVBY2NvdW50KHVzZXJJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxJVXNlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy86dXNlcklkL2RlbGV0ZUFjY291bnRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnVzZXJJZFwiLCB1c2VySWQpLnNlcnZpY2UoKSwgdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVNeUFjY291bnQodXNlcklkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElVc2VyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3VzZXJzLzp1c2VySWQvZGVsZXRlTXlBY2NvdW50XCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp1c2VySWRcIiwgdXNlcklkKS5zZXJ2aWNlKCksIHVuZGVmaW5lZClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWVyZ2VVc2VycyhwcmVzZW50VXNlcklkOiBudW1iZXIsIHByZXNlbnRVc2VyVmVyc2lvbjogbnVtYmVyLCBvdXRkYXRlZFVzZXJJZDogbnVtYmVyLCBvdXRkYXRlZFVzZXJWZXJzaW9uOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxJVXNlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy86cHJlc2VudFVzZXJJZC86cHJlc2VudFVzZXJWZXJzaW9uL21lcmdlV2l0aC86b3V0ZGF0ZWRVc2VySWQvOm91dGRhdGVkVXNlclZlcnNpb25cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnByZXNlbnRVc2VySWRcIiwgcHJlc2VudFVzZXJJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnByZXNlbnRVc2VyVmVyc2lvblwiLCBwcmVzZW50VXNlclZlcnNpb24pXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpvdXRkYXRlZFVzZXJJZFwiLCBvdXRkYXRlZFVzZXJJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOm91dGRhdGVkVXNlclZlcnNpb25cIiwgb3V0ZGF0ZWRVc2VyVmVyc2lvbilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRHcm91cHMoYnVzaW5lc3NVbml0SWRzOiBBcnJheTxudW1iZXI+KTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJR3JvdXA+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3VzZXJzL2dyb3Vwc1wiKSwge3BhcmFtczoge2J1c2luZXNzVW5pdElkczogYnVzaW5lc3NVbml0SWRzfX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVzZXJMb2dvbnModXNlcklkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxBcnJheTxJVXNlckxvZ29uPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvOnVzZXJJZC9sb2dvbnNcIikucGFyYW0oXCI6dXNlcklkXCIsIHVzZXJJZCkuc2VydmljZSgpXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50VXNlclByb2ZpbGUoKTogYW5ndWxhci5JUHJvbWlzZTxJVXNlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS91c2Vycy9jdXJyZW50UHJvZmlsZVwiKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudFVzZXJMb2NhbExvZ29uKCk6IG5nLklQcm9taXNlPElVc2VyTG9nb24+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvdXNlcnMvY3VycmVudC9sb2NhbExvZ29uXCIpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVQYWdlVmlld01vZGUocGFnZVZpZXdNb2RlOiBib29sZWFuLCB1c2VySWQ/OiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPElVc2VyPiB7XHJcbiAgICAgICAgaWYgKHVzZXJJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvOmlkL3BhZ2VWaWV3TW9kZVwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmlkXCIsIHVzZXJJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCksIEpTT04uc3RyaW5naWZ5KHBhZ2VWaWV3TW9kZSkpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy9jdXJyZW50L3BhZ2VWaWV3TW9kZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSwgSlNPTi5zdHJpbmdpZnkocGFnZVZpZXdNb2RlKSlcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVDdXJyZW50VXNlclByb2ZpbGUodXNlcjogSUV4dFVzZXIsIHBhc3N3b3JkOiBzdHJpbmcsIHByZXZpZXc/OiBGaWxlLCBpc1Jlc2V0UHJldmlldz86IGJvb2xlYW4pOiBuZy5JUHJvbWlzZTxJVXNlcj4ge1xyXG4gICAgICAgIGxldCB1c2VyVXBkYXRlSW5wdXQ6IGFueSA9IGFuZ3VsYXIuY29weSh1c2VyKTtcclxuICAgICAgICB1c2VyVXBkYXRlSW5wdXQuaXNSZXNldFByZXZpZXcgPSBpc1Jlc2V0UHJldmlldztcclxuICAgICAgICB1c2VyVXBkYXRlSW5wdXQucGFzc3dvcmQgPSBwYXNzd29yZDtcclxuICAgICAgICB1c2VyVXBkYXRlSW5wdXQucHJldmlldyA9IHByZXZpZXcgIT0gbnVsbFxyXG4gICAgICAgICAgICA/IHtuYW1lOiBwcmV2aWV3Lm5hbWUsIHR5cGU6IHByZXZpZXcudHlwZSwgc2l6ZTogcHJldmlldy5zaXplfVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3VzZXJzL2N1cnJlbnRQcm9maWxlXCIpLCB1c2VyVXBkYXRlSW5wdXQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVzZXJzV2l0aG91dEV4Y2x1ZGVkVXNlcnNGb3JTZWxlY3RvcihidXNpbmVzc1VuaXRJZDogbnVtYmVyLCBleGNsdWRlZFVzZXJJZHM/OiBBcnJheTxudW1iZXI+KTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VsZWN0YWJsZT4+IHtcclxuICAgICAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICBidXNpbmVzc1VuaXRJZDogYnVzaW5lc3NVbml0SWQsXHJcbiAgICAgICAgICAgIGV4Y2x1ZGVkVXNlcklkczogZXhjbHVkZWRVc2VySWRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvdXNlclNlbGVjdG9yL3VzZXJzXCIpLCB7cGFyYW1zOiBwYXJhbXN9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZW5kRW1haWxHcm91cE1lbWJlcnNOb3RpZmljYXRpb24gKGdyb3VwSWQ6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nLCBzdWJqZWN0OiBzdHJpbmcpIDogYW5ndWxhci5JUHJvbWlzZTxhbnk+e1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuYmFzZShgYXBpL3VzZXJzL2dyb3Vwcy8ke2dyb3VwSWR9L3NlbmRFbWFpbHNgKS5zZXJ2aWNlKCkse21lc3NhZ2U6IG1lc3NhZ2UsIHN1YmplY3Q6IHN1YmplY3R9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNYW5hZ2VkVXNlcnNGb3JTZWxlY3RvcihidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJU2VsZWN0YWJsZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvdXNlclNlbGVjdG9yL21hbmFnZWRVc2Vyc1wiKSwge3BhcmFtczoge2J1c2luZXNzVW5pdElkOiBidXNpbmVzc1VuaXRJZH19KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRHcm91cHNXaXRob3V0RXhjbHVkZWRHcm91cHNGb3JTZWxlY3RvcihidXNpbmVzc1VuaXRJZDogbnVtYmVyLCBleGNsdWRlZEdyb3VwSWRzPzogQXJyYXk8bnVtYmVyPik6IGFuZ3VsYXIuSVByb21pc2U8QXJyYXk8SVNlbGVjdGFibGU+PiB7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgYnVzaW5lc3NVbml0SWQ6IGJ1c2luZXNzVW5pdElkLFxyXG4gICAgICAgICAgICBleGNsdWRlZEdyb3VwSWRzOiBleGNsdWRlZEdyb3VwSWRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvdXNlclNlbGVjdG9yL2dyb3Vwc1wiKSwge3BhcmFtczogcGFyYW1zfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TWFuYWdlZEdyb3Vwc0ZvclNlbGVjdG9yKGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPEFycmF5PElTZWxlY3RhYmxlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS91c2VyU2VsZWN0b3IvbWFuYWdlZEdyb3Vwc1wiKSwge3BhcmFtczoge2J1c2luZXNzVW5pdElkOiBidXNpbmVzc1VuaXRJZH19KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRBY3RpdmVHcm91cFdpdGhDaGlsZHJlbihpc0FjdGl2ZTogYm9vbGVhbiwgcGFyZW50SWQ6IG51bWJlcik6IG5nLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy9ncm91cHMvc2V0QWN0aXZlLzppc0FjdGl2ZS93aXRoL2NoaWxkcmVuLzpwYXJlbnRJZFwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6aXNBY3RpdmVcIiwgaXNBY3RpdmUpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpwYXJlbnRJZFwiLCBwYXJlbnRJZCkuc2VydmljZSgpLCB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEdyb3VwKGdyb3VwSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8SUdyb3VwPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3VzZXJzL2dyb3Vwcy86Z3JvdXBJZFwiKS5wYXJhbShcIjpncm91cElkXCIsIGdyb3VwSWQpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudFVzZXJCdXNpbmVzc1JvbGUoKTogYW5ndWxhci5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvY3VycmVudC9idXNpbmVzc1JvbGVcIilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlR3JvdXAoZ3JvdXA6IElHcm91cCk6IGFuZ3VsYXIuSVByb21pc2U8SUdyb3VwPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS91c2Vycy9ncm91cHNcIiksIGdyb3VwKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVHcm91cChncm91cDogSUdyb3VwKTogYW5ndWxhci5JUHJvbWlzZTxJR3JvdXA+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuc2VydmljZShcIi9hcGkvdXNlcnMvZ3JvdXBzXCIpLCBncm91cClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlR3JvdXBQZXJtaXNzaW9ucyhncm91cElkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcGVybWlzc2lvbnNJZHM6IG51bWJlcltdKTogYW5ndWxhci5JUHJvbWlzZTxJR3JvdXA+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvZ3JvdXBzLzpncm91cElkL3Blcm1pc3Npb25zP3ZlcnNpb249OnZlcnNpb25cIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmdyb3VwSWRcIiwgZ3JvdXBJZClcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnZlcnNpb25cIiwgdmVyc2lvbilcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgcGVybWlzc2lvbnNJZHMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFjdGl2ZUdyb3Vwc05vQ2hpbGRyZW4ocGFyZW50SWQ6IG51bWJlcik6IG5nLklQcm9taXNlPEFycmF5PElHcm91cD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvZ3JvdXBzL2FjdGl2ZS9uby9jaGlsZHJlbi86cGFyZW50SWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnBhcmVudElkXCIsIHBhcmVudElkKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFjdGl2ZUdyb3VwcyhidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogbmcuSVByb21pc2U8QXJyYXk8SUdyb3VwPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS91c2Vycy9ncm91cHMvYWN0aXZlXCIpLCB7cGFyYW1zOiB7YnVzaW5lc3NVbml0SWQ6IGJ1c2luZXNzVW5pdElkfX0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVVzZXJOb3RpZmljYXRpb25GcmVxdWVuY3koZnJlcXVlbmN5SWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvdXNlcnMvbm90aWZpY2F0aW9ucy9mcmVxdWVuY3lcIiksIEpTT04uc3RyaW5naWZ5KGZyZXF1ZW5jeUlkKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWxsb3dlZEJ1c2luZXNzVW5pdHMoKTogbmcuSVByb21pc2U8QXJyYXk8SVNlbGVjdGFibGU+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKFwiL2FwaS91c2Vycy9hbGxvd2VkQnVzaW5lc3NVbml0c1wiKVxyXG4gICAgICAgIClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlckJ1c2luZXNzVW5pdHModXNlcklkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxBcnJheTxudW1iZXI+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy86dXNlcklkL2J1c2luZXNzVW5pdHNcIikucGFyYW0oXCI6dXNlcklkXCIsIHVzZXJJZCkuc2VydmljZSgpXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVc2VyR3JvdXBzKHVzZXJJZDogbnVtYmVyKTogbmcuSVByb21pc2U8QXJyYXk8SUdyb3VwPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvOnVzZXJJZC9ncm91cHNcIikucGFyYW0oXCI6dXNlcklkXCIsIHVzZXJJZCkuc2VydmljZSgpXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBdmFpbGFibGVVc2VyUm9sZXModXNlcklkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxBcnJheTxTdHJpbmc+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy86dXNlcklkL2F2YWlsYWJsZVJvbGVzXCIpLnBhcmFtKFwiOnVzZXJJZFwiLCB1c2VySWQpLnNlcnZpY2UoKVxyXG4gICAgICAgIClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QXZhaWxhYmxlVXNlclJvbGVzRm9yQ3VycmVudFVzZXIoKTogbmcuSVByb21pc2U8QXJyYXk8U3RyaW5nPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy9jdXJyZW50L2F2YWlsYWJsZVJvbGVzXCIpLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IDxBcnJheTxTdHJpbmc+PnJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlckNyZWRpdFR5cGVzKHVzZXJJZDogbnVtYmVyKTogbmcuSVByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL3VzZXJzLyR7dXNlcklkfS9jcmVkaXRUeXBlc2ApXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVVc2VyQ3JlZGl0VHlwZXModXNlcklkOiBudW1iZXIsIG5ld0NyZWRpdFR5cGVzOiBzdHJpbmcpOiBuZy5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvdXNlcnMvJHt1c2VySWR9L2NyZWRpdFR5cGVzYCksXHJcbiAgICAgICAgICAgIG5ld0NyZWRpdFR5cGVzICYmIG5ld0NyZWRpdFR5cGVzLmxlbmd0aCA+IDAgPyBKU09OLnN0cmluZ2lmeShuZXdDcmVkaXRUeXBlcykgOiBudWxsXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVVc2VyQ3JlZGl0KHVzZXJJZDogbnVtYmVyLCB1c2VyQ3JlZGl0SWQ6IG51bWJlcik6IG5nLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5kZWxldGUoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvdXNlcnMvJHt1c2VySWR9L2NyZWRpdHMvJHt1c2VyQ3JlZGl0SWR9YClcclxuICAgICAgICApXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVzZXJDcmVkaXQodXNlcklkOiBudW1iZXIsIHVzZXJDcmVkaXRJZDogbnVtYmVyKTogbmcuSVByb21pc2U8SVVzZXJDcmVkaXQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvdXNlcnMvJHt1c2VySWR9L2NyZWRpdHMvJHt1c2VyQ3JlZGl0SWR9YClcclxuICAgICAgICApXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVXNlckNyZWRpdCh1c2VySWQ6IG51bWJlciwgdXNlckNyZWRpdElkOiBudW1iZXIsIHVwZGF0ZWRDcmVkaXQ6IElVc2VyQ3JlZGl0KTogbmcuSVByb21pc2U8SVVzZXJDcmVkaXQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQoXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvdXNlcnMvJHt1c2VySWR9L2NyZWRpdHMvJHt1c2VyQ3JlZGl0SWR9YCksXHJcbiAgICAgICAgICAgIHVwZGF0ZWRDcmVkaXRcclxuICAgICAgICApXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZVVzZXJDcmVkaXQodXNlcklkOiBudW1iZXIsIG5ld1VzZXJDcmVkaXQ6IElVc2VyQ3JlZGl0KTogbmcuSVByb21pc2U8SVVzZXJDcmVkaXQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL3VzZXJzLyR7dXNlcklkfS9jcmVkaXRzYCksXHJcbiAgICAgICAgICAgIG5ld1VzZXJDcmVkaXRcclxuICAgICAgICApXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwbG9hZFVzZXJDcmVkaXRBdHRhY2htZW50KHVzZXJDcmVkaXRJZDogbnVtYmVyLCBhdHRhY2htZW50OiBGaWxlKTogbmcuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVwbG9hZGVyLnVwbG9hZCh7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBhbmd1bGFyLmNvcHkodGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvY3JlZGl0cy86aWQvYXR0YWNobWVudC91cGxvYWRcIilcclxuICAgICAgICAgICAgICAgICAgICAucGFyYW0oXCI6aWRcIiwgdXNlckNyZWRpdElkKSlcclxuICAgICAgICAgICAgICAgICAgICAuc2VydmljZSgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZTogYXR0YWNobWVudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKS50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4cG9ydFVzZXJDcmVkaXRzKHBhcmFtZXRlcnM6IGFueSk6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGxldCByZXBvcnRUeXBlID0gJ1VTRVJfQ0VfQ1JFRElUX0xPRyc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdChcclxuICAgICAgICAgICAgdGhpcy51cmwuYmFzZShcIi9hcGkvcmVwb3J0cy9kb3dubG9hZFRva2VuLzpyZXBvcnRUeXBlXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6cmVwb3J0VHlwZVwiLCByZXBvcnRUeXBlKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKSwge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczogSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkudGhlbigocmVzdWx0OiBhbnkpID0+IHRoaXMudXJsLmJhc2UoXCIvYXBpL3JlcG9ydHMvZG93bmxvYWQvOnRva2VuXCIpLnBhcmFtKFwiOnRva2VuXCIsIHJlc3VsdC5kYXRhLnRva2VuKS5zZXJ2aWNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1VzZXJJbnN0cnVjdG9yKGNvdXJzZUlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvdXNlcnMvJHtjb3Vyc2VJZH0vaXNJbnN0cnVjdG9yYCksIHsgY2FjaGU6IHRoaXMuZXhwQ2FjaGUgfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNVc2VyUmVzcG9uc2libGVUZWFjaGVyKGNvdXJzZUlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvdXNlcnMvJHtjb3Vyc2VJZH0vaXNUZWFjaGVyYCksIHsgY2FjaGU6IHRoaXMuZXhwQ2FjaGUgfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNVc2VyU3lzdGVtQWRtaW5pc3RyYXRvcigpOiBuZy5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5zZXJ2aWNlKGAvYXBpL3VzZXJzL2lzU3lzdGVtQWRtaW5pc3RyYXRvcmApLCB7IGNhY2hlOiB0aGlzLmV4cENhY2hlIH0pXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1VzZXJBZG1pbmlzdHJhdG9yKGNvdXJzZUlkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvdXNlcnMvJHtjb3Vyc2VJZH0vaXNBZG1pbmlzdHJhdG9yYCksIHsgY2FjaGU6IHRoaXMuZXhwQ2FjaGUgfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0T3duZXJzVXJsKCk6IG5nLklQcm9taXNlPElTZWxlY3RhYmxlW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgL2FwaS91c2VyU2VsZWN0b3IvdXNlcnNGb3JDdXJyZW50VXNlcmApKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gPElTZWxlY3RhYmxlW10+cmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJcEFkZHJlc3NSYW5nZXModXNlcklkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxBcnJheTxJSXBBZGRyZXNzUmFuZ2U+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KFxyXG4gICAgICAgICAgICB0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy86dXNlcklkL2lwUmFuZ2VzXCIpLnBhcmFtKFwiOnVzZXJJZFwiLCB1c2VySWQpLnNlcnZpY2UoKVxyXG4gICAgICAgIClcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZUlwQWRkcmVzc1JhbmdlKGlwQWRkcmVzc1JhbmdlOiBJSXBBZGRyZXNzUmFuZ2UpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnBvc3QodGhpcy51cmwuc2VydmljZShcIi9hcGkvdXNlcnMvaXBSYW5nZVwiKSwgaXBBZGRyZXNzUmFuZ2UpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlSXBBZGRyZXNzUmFuZ2UoaXBBZGRyZXNzUmFuZ2U6IElJcEFkZHJlc3NSYW5nZSk6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucHV0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3VzZXJzL2lwUmFuZ2VcIiksIGlwQWRkcmVzc1JhbmdlKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxhbnk+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUlwQWRkcmVzc1JhbmdlKGlwQWRkcmVzc1JhbmdlSWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZGVsZXRlKHRoaXMudXJsLmJhc2UoXCIvYXBpL3VzZXJzL2lwUmFuZ2UvOmlwQWRkcmVzc1JhbmdlSWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOmlwQWRkcmVzc1JhbmdlSWRcIiwgaXBBZGRyZXNzUmFuZ2VJZClcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8YW55PikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRJcEFkZHJlc3NSYW5nZSh1c2VybmFtZTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wdXQodGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvaXBSYW5nZS86dXNlcm5hbWUvYWRkXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjp1c2VybmFtZVwiLCB1c2VybmFtZSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKSwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8YW55PikgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZUlwQWRkcmVzc1JhbmdlKGlwQWRkcmVzc1JhbmdlOiBJSXBBZGRyZXNzUmFuZ2UpOiBhbmd1bGFyLklQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5wb3N0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3VzZXJzL2lwUmFuZ2UvdmFsaWRhdGVcIiksaXBBZGRyZXNzUmFuZ2UpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGJvb2xlYW4+KSA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1lbnVDb25maWd1cmF0aW9uKGJ1c2luZXNzUm9sZTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxJTWVudUNvbmZpZ3VyYXRpb24+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuc2VydmljZShgL2FwaS91c2Vycy9tZW51L2xlYXJuZXIvY29uZmlndXJhdGlvbi8ke2J1c2luZXNzUm9sZX1gKSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IDxJTWVudUNvbmZpZ3VyYXRpb24+cmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMb2dvQnlVc2VySWQoaWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLmJhc2UoXCIvYXBpL3VzZXJzL2xvZ28vOmlkXCIpLnBhcmFtKFwiOmlkXCIsIGlkKS5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPHN0cmluZz4pID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlckdyb3Vwc0ZvckZpbHRlcihidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogYW5ndWxhci5JUHJvbWlzZTxBcnJheTxJR3JvdXA+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoXCIvYXBpL3VzZXJzL2dyb3Vwcy9mb3JGaWx0ZXJcIiksIHtwYXJhbXM6IHtidXNpbmVzc1VuaXRJZDogYnVzaW5lc3NVbml0SWR9fSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRHluYW1pY0lwKGlkOiBudW1iZXIpOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnB1dCh0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy86aWQvZHluYW1pY0lwXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjppZFwiLCBpZCkuc2VydmljZSgpLCB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVzZXJFbWFpbEJ5TG9nb25OYW1lKGxvZ29uTmFtZTogc3RyaW5nKTogYW5ndWxhci5JUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQodGhpcy51cmwuYmFzZShcIi9hcGkvdXNlcnMvZW1haWxCeUxvZ29uTmFtZS86bG9nb25OYW1lXCIpXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpsb2dvbk5hbWVcIiwgbG9nb25OYW1lKVxyXG4gICAgICAgICAgICAuc2VydmljZSgpKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVc2VyUGFnZVZpZXdNb2RlKCkgOiBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCh0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy9jdXJyZW50L3ZpZXdNb2RlXCIpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCkpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvZ2luQXNUaGlzVXNlcih1c2VySWQ6IG51bWJlcik6IGFuZ3VsYXIuSVByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAucG9zdCh0aGlzLnVybC5iYXNlKFwiL2FwaS91c2Vycy9nZW5lcmF0ZVRva2VuLzp1c2VySWRcIilcclxuICAgICAgICAgICAgLnBhcmFtKFwiOnVzZXJJZFwiLCB1c2VySWQpXHJcbiAgICAgICAgICAgIC5zZXJ2aWNlKCksIHt9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuY2hhbmdlVG9rZW5JbmZvKHJlc3VsdCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FsbG93ZWRDcmVkaXRzU2VsZlJlcG9ydGluZ0ZvclVzZXIodXNlcklkOiBudW1iZXIpOiBuZy5JUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLnNlcnZpY2UoYC9hcGkvdXNlcnMvJHt1c2VySWR9L2FsbG93Q3JlZGl0c1NlbGZSZXBvcnRpbmdgKSwgeyBjYWNoZTogdGhpcy5leHBDYWNoZSB9KVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7R3JvdXBFbnVtfSBmcm9tIFwiLi9tb2RlbHMvSUdyb3VwXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuL21vZGVscy9JVXNlclwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0lTeXN0ZW1Mb2NhbGV9IGZyb20gXCIuLy4uL3NldHRpbmdzL21vZGVscy9JU3lzdGVtTG9jYWxlXCI7XHJcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZXR0aW5ncy9TZXR0aW5nc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoUm91dGVyfSBmcm9tIFwiLi8uLi91cmxzL0F1dGhSb3V0ZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi8uLi91dGlscy9NZW51SGVscGVyXCI7XHJcbmltcG9ydCB7UGFnZUhlYWRlcn0gZnJvbSBcIi4vLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge25vdGlmaWVyfSBmcm9tIFwiLi8uLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtJVXNlckxvZ29ufSBmcm9tIFwiLi9tb2RlbHMvSVVzZXJMb2dvblwiO1xyXG5pbXBvcnQge01haW5Sb3V0ZXJ9IGZyb20gXCIuLy4uL3VybHMvTWFpblJvdXRlclwiO1xyXG5pbXBvcnQge0F1dGhSZWRpcmVjdH0gZnJvbSBcIi4vLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7U2VjdXJpdHlTZXJ2aWNlfSBmcm9tIFwiLi8uLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtMb2dvblByb3ZpZGVyRW51bX0gZnJvbSBcIi4vLi4vc2VjdXJpdHkvTG9nb25Qcm92aWRlckVudW1cIjtcclxuaW1wb3J0IHtQb2xpY2llc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvUG9saWNpZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge0FwcFByb3BlcnRpZXN9IGZyb20gXCIuLi91dGlscy9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7SVN5c3RlbVByb3BlcnR5fSBmcm9tIFwiLi4vc2V0dGluZ3MvbW9kZWxzL0lTeXN0ZW1Qcm9wZXJ0eVwiO1xyXG5pbXBvcnQge0hvbWVwYWdlSGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvSG9tZXBhZ2VIZWxwZXJcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtMb2dPbkNvbnRyb2xsZXJ9IGZyb20gXCIuLi9hdXRoL0xvZ09uQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0F1dGhNYW5hZ2VyfSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aE1hbmFnZXJcIjtcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kaWFsb2cvRGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQge0J1c2luZXNzVW5pdHNTZXJ2aWNlfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9CdXNpbmVzc1VuaXRzU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlckV4dGVuZGVkIGV4dGVuZHMgSVVzZXIge1xyXG4gICAgdXNlckxvZ29ucz86IEFycmF5PElVc2VyTG9nb24+XHJcbiAgICBidXNpbmVzc1VuaXRJZHM/OiBudW1iZXJbXTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJTaWdudXBDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXNlcnMuVXNlclNpZ251cENvbnRyb2xsZXJcIjtcclxuXHJcbiAgICBwdWJsaWMgaXNUZXJtc09mVXNlQW5kUHJpdmFjeVBvbGljeUFjY2VwdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHVzZXJMb2dvbjogSVVzZXJMb2dvbiA9IHtcclxuICAgICAgICBuYW1lOiBcIlwiLFxyXG4gICAgICAgIHBhc3N3b3JkOiBcIlwiLFxyXG4gICAgICAgIHByb3ZpZGVyS2V5OiBMb2dvblByb3ZpZGVyRW51bVtMb2dvblByb3ZpZGVyRW51bS5MT0NBTF0sXHJcbiAgICAgICAgaXNBY3RpdmU6IHRydWVcclxuICAgIH07XHJcbiAgICBwdWJsaWMgdXNlcjogSVVzZXJFeHRlbmRlZCA9IHtcclxuICAgICAgICBmdWxsTmFtZTogXCJcIixcclxuICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICBuZXdHcm91cHM6IFtHcm91cEVudW0uUkVHSVNURVJFRF9VU0VSU10sXHJcbiAgICAgICAgbG9jYWxlOiBudWxsLFxyXG4gICAgICAgIHVzZXJMb2dvbnM6IFt0aGlzLnVzZXJMb2dvbl1cclxuICAgIH07XHJcbiAgICBwdWJsaWMgY29uZmlybVBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgYXZhaWxhYmxlTG9jYWxlczogQXJyYXk8SVN5c3RlbUxvY2FsZT47XHJcbiAgICBwdWJsaWMgZGlzYWJsZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBlcnJvcjogc3RyaW5nO1xyXG4gICAgcHVibGljIG1pblBhc3N3b3JkTGVuZ3RoID0gVXNlclNlcnZpY2UubWluUGFzc3dvcmRMZW5ndGg7XHJcbiAgICBwdWJsaWMgaXNDaGVja1Bhc3N3b3JkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgU2V0dGluZ3NTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFJvdXRlci5OQU1FLFxyXG4gICAgICAgIEF1dGhSZWRpcmVjdC5OQU1FLFxyXG4gICAgICAgIE1haW5Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBTZWN1cml0eVNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoTWFuYWdlci5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFBvbGljaWVzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJ1c2luZXNzVW5pdHNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkd2luZG93OiBhbmd1bGFyLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyQXBpOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2V0dGluZ3NBcGk6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJvdXRlcjogQXV0aFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFJlZGlyZWN0OiBBdXRoUmVkaXJlY3QsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG1haW5Sb3V0ZXI6IE1haW5Sb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhBcGk6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoTWFuYWdlcjogQXV0aE1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcG9saWNpZXNSb3V0ZXI6IFBvbGljaWVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dGhNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgICAgICAgICAgXCJZb3UgYXJlIGFscmVhZHkgbG9nZ2VkIG9uIHRvIHRoZSBzeXN0ZW0uIFBsZWFzZSBsb2dvdXQgZmlyc3QgYmVmb3JlIGF0dGVtcHRpbmcgdG8gc2lnbiB1cFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiTG9nIG91dFwiICsgXCI/XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJMb2cgb3V0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uOiBcIkNhbmNlbFwiXHJcbiAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aEFwaS5sb2dPZmYoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1haW5Sb3V0ZXIubWFpblVybCgpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWN1cml0eVNlcnZpY2UuZGVtYW5kTm90QXV0aGVudGljYXRlZCgpOyAvLyBzZWxmIHNpZ24tdXAgaXMgYWxsb3dlZCB0byBndWVzdCB1c2VycyBvbmx5XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEF2YWlsYWJsZUxvY2FsZXMoKTtcclxuICAgICAgICAgICAgbGV0IGV4ZWNEb21haW4gPSBuZXcgUmVnRXhwKFwiKD86aHR0cHMqOlxcL1xcLylbXi9dKlwiLCBcInNcIikuZXhlYyhBcHBQcm9wZXJ0aWVzLmJhc2VVcmwpO1xyXG4gICAgICAgICAgICBsZXQgYmFzZVVybCA9IGV4ZWNEb21haW4gIT0gbnVsbCA/IGV4ZWNEb21haW5bMF0gOiBcIlwiO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gIT0gYmFzZVVybCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRvbWFpbiA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4uaW5kZXhPZihcImh0dHBcIikgIT0gLTEgP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4uc3BsaXQoXCIvL1wiKVsxXS5zcGxpdChcIi5cIilcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4uc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRCeURvbWFpbihkb21haW5bMF0pLnRoZW4oKHIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByICE9IFwiXCIgPyB0aGlzLnVzZXIuYnVzaW5lc3NVbml0SWRzID0gW3JdIDogdGhpcy51c2VyLmJ1c2luZXNzVW5pdElkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBidUlkSW52aXRlID0gdGhpcy4kbG9jYXRpb24uc2VhcmNoKClbQXV0aFJvdXRlci5CVVNJTkVTU19VTklUX0lEX1BBUkFNXTtcclxuICAgICAgICAgICAgICAgIGlmIChidUlkSW52aXRlICE9IG51bGwgJiYgYnVJZEludml0ZSAhPSB1bmRlZmluZWQgJiYgIWlzTmFOKGJ1SWRJbnZpdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyLmJ1c2luZXNzVW5pdElkcyA9IFtwYXJzZUludChidUlkSW52aXRlKV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5NQUlOX01FTlVfS0VZKTtcclxuICAgICAgICBQYWdlSGVhZGVyLnNldCgpLmhlYWRlcihcIkNvcmUgQUNISUVWRSAtIFNpZ24gVXBcIikudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmlzQ2hlY2tQYXNzd29yZCgpXHJcbiAgICAgICAgICAgIC50aGVuKGlzQ2hlY2sgPT4gdGhpcy5pc0NoZWNrUGFzc3dvcmQgPSBpc0NoZWNrKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRBdmFpbGFibGVMb2NhbGVzKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NBcGkuZ2V0QXZhaWxhYmxlTG9jYWxlcygpLnRoZW4obG9jYWxlcyA9PiB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jYWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvY2FsZUluZm8gPSBsb2NhbGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZUluZm8uZGVmYXVsdExvY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlci5sb2NhbGUgPSBsb2NhbGVJbmZvLmxvY2FsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxvY2FsZXMgPSBsb2NhbGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29uZmlybVBhc3N3b3JkID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDaGVja1Bhc3N3b3JkICYmICF0aGlzLmF1dGhTZXJ2aWNlLmNoZWNrUGFzc3dvcmQodGhpcy51c2VyTG9nb24ucGFzc3dvcmQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCAxIGxldHRlciwgMSBudW1iZXIsIDEgc3BlY2lhbCBjaGFyYWN0ZXIgZnJvbSAhQCMkJV4mKiBhbmQgbXVzdCBiZSA4IG9yIG1vcmUgY2hhcmFjdGVyc1wiO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwcm9taXNlID0gdGhpcy51c2VyQXBpLnNlbGZTaWdudXAodGhpcy51c2VyKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJVc2VyICdcIiArIHRoaXMudXNlci5mdWxsTmFtZSArIFwiJyBoYXMgYmVlbiBzYXZlZFwiKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5hdXRoUmVkaXJlY3QuY2xlYXJSZWRpcmVjdGlvbigpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5hdXRoUm91dGVyLmxvZ29uVXJsKCkpO1xyXG4gICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhBcGkubG9nT24oTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uTE9DQUxdICsgXCI6XCIgKyB0aGlzLnVzZXIudXNlckxvZ29uc1swXS5uYW1lLCB0aGlzLnVzZXIudXNlckxvZ29uc1swXS5wYXNzd29yZCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBsb2NhbGUgPSB1c2VyLmxvY2FsZSA/IHVzZXIubG9jYWxlIDogQXBwUHJvcGVydGllcy5jdXJyZW50TG9jYWxlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFMb2dPbkNvbnRyb2xsZXIucmVsb2FkQXBwbGljYXRpb25Gb3JMb2NhbGVJZk5lZWRlZChsb2NhbGUsIGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aE1hbmFnZXIuZW5hYmxlQXV0b1NzbygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmdldEhvbWVwYWdlKCkudGhlbigoaG9tZXBhZ2U6IElTeXN0ZW1Qcm9wZXJ0eSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5yZXR1cm5BZnRlckxvZ09uKGZhbHNlIC8qbmF0aXZlKi8sIEhvbWVwYWdlSGVscGVyLmdldEhvbWVwYWdlVXJsKGhvbWVwYWdlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KS5jYXRjaChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSA0MDkgJiYgcmVzcG9uc2UuZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5kYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLnVzZXIuZHVwbGljYXRlLm5hbWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRnVsbCBuYW1lIFwiICsgdGhpcy51c2VyLmZ1bGxOYW1lICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLnVzZXIuZHVwbGljYXRlLmVtYWlsXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVtYWlsIFwiICsgdGhpcy51c2VyLmVtYWlsICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLmR1cGxpY2F0ZS5sb2dvbi5wcm92aWRlclwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJPbmx5IG9uZSBsb2dvbiBmb3IgZWFjaCB0eXBlIGlzIGFsbG93ZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLnVzZXIucGFzc3dvcmQuc2hvcnRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVGhlIGxlbmd0aCBvZiBwYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDggY2hhcmFjdGVyc1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IuaW52YWxpZC5wYXNzd29yZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgMSBsZXR0ZXIsIDEgbnVtYmVyLCAxIHNwZWNpYWwgY2hhcmFjdGVyIGZyb20gIUAjJCVeJiogYW5kIG11c3QgYmUgOCBvciBtb3JlIGNoYXJhY3RlcnNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3IuaW5kZXhPZihcImVycm9yLmR1cGxpY2F0ZS5sb2dpbi5mb3IucHJvdmlkZXIuXCIpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdmlkZXJLZXkgPSByZXNwb25zZS5kYXRhLmVycm9yLnN1YnN0cmluZyhcImVycm9yLmR1cGxpY2F0ZS5sb2dpbi5mb3IucHJvdmlkZXIuXCIubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2dvbkZvdW5kID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy51c2VyLnVzZXJMb2dvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyLnVzZXJMb2dvbnNbal0ucHJvdmlkZXJLZXkgPT0gcHJvdmlkZXJLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nb25Gb3VuZCA9IHRoaXMudXNlci51c2VyTG9nb25zW2pdLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dvbkZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVXNlcm5hbWUgXCIgKyBsb2dvbkZvdW5kICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiUXVlcnkgaGFzIGZhaWxlZDogcGxlYXNlIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBoZWxwIGRlc2tcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlF1ZXJ5IGhhcyBmYWlsZWQ6IHBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3Igb3IgaGVscCBkZXNrXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub3RpZmllci5lcnJvcih0aGlzLmVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG9DYW5jZWwoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuJHdpbmRvdy5oaXN0b3J5Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy4kd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1haW5Sb3V0ZXIubWFpblVybCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9Qcml2YWN5UG9saWN5KCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBiYXNlVXJsID0gdGhpcy4kd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCIjXCIpWzBdLFxyXG4gICAgICAgICAgICB1cmwgPSBiYXNlVXJsICsgXCIjXCIgKyB0aGlzLnBvbGljaWVzUm91dGVyLnByaXZhY3lQb2xpY3lVcmwoKTtcclxuICAgICAgICB0aGlzLiR3aW5kb3cub3Blbih1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvVGVybXNPZlVzZSgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgYmFzZVVybCA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSxcclxuICAgICAgICAgICAgdXJsID0gYmFzZVVybCArIFwiI1wiICsgdGhpcy5wb2xpY2llc1JvdXRlci50ZXJtc09mVXNlVXJsKCk7XHJcbiAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4odXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNSaWdodFBhc3N3b3JkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ2hlY2tQYXNzd29yZCAmJiB0aGlzLnVzZXJMb2dvbi5wYXNzd29yZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5jaGVja1Bhc3N3b3JkKHRoaXMudXNlckxvZ29uLnBhc3N3b3JkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJU3lzdGVtTG9jYWxlfSBmcm9tIFwiLi4vc2V0dGluZ3MvbW9kZWxzL0lTeXN0ZW1Mb2NhbGVcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5nc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoUm91dGVyfSBmcm9tIFwiLi4vdXJscy9BdXRoUm91dGVyXCI7XHJcbmltcG9ydCB7QXV0aFJlZGlyZWN0fSBmcm9tIFwiLi4vYXV0aGNvcmUvQXV0aFJlZGlyZWN0XCI7XHJcbmltcG9ydCB7TWFpblJvdXRlcn0gZnJvbSBcIi4uL3VybHMvTWFpblJvdXRlclwiO1xyXG5pbXBvcnQge1NlY3VyaXR5U2VydmljZX0gZnJvbSBcIi4uL3NlY3VyaXR5L1NlY3VyaXR5U2VydmljZVwiO1xyXG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuLi91dGlscy9VcmxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7UG9saWNpZXNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1BvbGljaWVzUm91dGVyXCI7XHJcbmltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL01lbnVIZWxwZXJcIjtcclxuaW1wb3J0IHtQYWdlSGVhZGVyfSBmcm9tIFwiLi4vdXRpbHMvUGFnZUhlYWRlckhlbHBlclwiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtJVXNlckxvZ29ufSBmcm9tIFwiLi9tb2RlbHMvSVVzZXJMb2dvblwiO1xyXG5pbXBvcnQge0xvZ29uUHJvdmlkZXJFbnVtfSBmcm9tIFwiLi4vc2VjdXJpdHkvTG9nb25Qcm92aWRlckVudW1cIjtcclxuaW1wb3J0IHtHcm91cEVudW19IGZyb20gXCIuL21vZGVscy9JR3JvdXBcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5pbXBvcnQge1Nzb1JlYXNvblR5cGV9IGZyb20gXCIuLi9zZWN1cml0eS9Tc29SZWFzb25UeXBlXCI7XHJcbmltcG9ydCB7QXBwUHJvcGVydGllc30gZnJvbSBcIi4uL3V0aWxzL0FwcFByb3BlcnRpZXNcIjtcclxuaW1wb3J0IHtMb2dPbkNvbnRyb2xsZXJ9IGZyb20gXCIuLi9hdXRoL0xvZ09uQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge0lTeXN0ZW1Qcm9wZXJ0eX0gZnJvbSBcIi4uL3NldHRpbmdzL21vZGVscy9JU3lzdGVtUHJvcGVydHlcIjtcclxuaW1wb3J0IHtIb21lcGFnZUhlbHBlcn0gZnJvbSBcIi4uL3V0aWxzL0hvbWVwYWdlSGVscGVyXCI7XHJcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gXCIuLi9hdXRoL0F1dGhTZXJ2aWNlXCI7XHJcbmltcG9ydCB7QnVzaW5lc3NVbml0c1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQnVzaW5lc3NVbml0c1JvdXRlclwiO1xyXG5pbXBvcnQge1VzZXJzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Vc2Vyc1JvdXRlclwiO1xyXG5cclxuaW50ZXJmYWNlIElVc2VyRXh0ZW5kZWQgZXh0ZW5kcyBJVXNlciB7XHJcbiAgICB1c2VyTG9nb25zPzogQXJyYXk8SVVzZXJMb2dvbj5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJTdGFydFRyaWFsQ29udHJvbGxlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5BTUUgPSBcInVzZXJzLlVzZXJTdGFydFRyaWFsQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBpc0xlZ2FsQWdyZWVtZW50QWNjZXB0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgdXNlckxvZ29uOiBJVXNlckxvZ29uID0ge1xyXG4gICAgICAgIG5hbWU6IFwiXCIsXHJcbiAgICAgICAgcGFzc3dvcmQ6IFwiXCIsXHJcbiAgICAgICAgcHJvdmlkZXJLZXk6IExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLkxPQ0FMXSxcclxuICAgICAgICBpc0FjdGl2ZTogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHB1YmxpYyB1c2VyOiBJVXNlckV4dGVuZGVkID0ge1xyXG4gICAgICAgIGZpcnN0TmFtZTogXCJcIixcclxuICAgICAgICBsYXN0TmFtZTogXCJcIixcclxuICAgICAgICBlbWFpbDogXCJcIixcclxuICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICBuZXdHcm91cHM6IFtHcm91cEVudW0uU1lTX0FETUlOU10sXHJcbiAgICAgICAgdXNlckxvZ29uczogW3RoaXMudXNlckxvZ29uXVxyXG4gICAgfTtcclxuICAgIHB1YmxpYyBjb21wYW55TmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGNvbXBhbnlEb21haW46IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgYXZhaWxhYmxlTG9jYWxlczogQXJyYXk8SVN5c3RlbUxvY2FsZT47XHJcbiAgICBwdWJsaWMgZGVmYXVsdExvY2FsZTogSVN5c3RlbUxvY2FsZTtcclxuICAgIHB1YmxpYyBkaXNhYmxlU2F2ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGVycm9yOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaW5wdXRtYXNrOiBJbnB1dG1hc2s7XHJcblxyXG4gICAgcHVibGljIHNpZ25VcE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwcm9jZWVkVHJpYWxBZnRlclNzb0V4Y2hhbmdlOiBib29sZWFuO1xyXG4gICAgcHVibGljIGJ1c2luZXNzVW5pdFN1YnNjcmlwdGlvbnM6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgaXNDaGVja1Bhc3N3b3JkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiRsb2NhdGlvblwiLFxyXG4gICAgICAgIFwiJHdpbmRvd1wiLFxyXG4gICAgICAgIFwiJHNjb3BlXCIsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRSxcclxuICAgICAgICBTZXR0aW5nc1NlcnZpY2UuTkFNRSxcclxuICAgICAgICBBdXRoU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEF1dGhSb3V0ZXIuTkFNRSxcclxuICAgICAgICBBdXRoUmVkaXJlY3QuTkFNRSxcclxuICAgICAgICBNYWluUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNlY3VyaXR5U2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBQb2xpY2llc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFVzZXJzUm91dGVyLk5BTUVcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUm91dGVyOiBBdXRoUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhdXRoUmVkaXJlY3Q6IEF1dGhSZWRpcmVjdCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWFpblJvdXRlcjogTWFpblJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnVzaW5lc3NVbml0Um91dGVyOiBCdXNpbmVzc1VuaXRzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXJsOiBVcmxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHBvbGljaWVzUm91dGVyOiBQb2xpY2llc1JvdXRlcixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyB1c2Vyc1JvdXRlcjogVXNlcnNSb3V0ZXIpIHtcclxuICAgICAgICBpZiAoQXBwUHJvcGVydGllcy5hbGxvd1N0YXJ0VHJpYWwgPT0gXCJmYWxzZVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFJlZGlyZWN0LmZvcndhcmRUb0FjY2Vzc0RlbmllZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlY3VyaXR5U2VydmljZS5kZW1hbmROb3RBdXRoZW50aWNhdGVkKCk7IC8vIHN0YXJ0IHRyaWFsIGlzIGFsbG93ZWQgdG8gZ3Vlc3QgdXNlcnMgb25seVxyXG4gICAgICAgIGlmIChcIk1JQ1JPU09GVF9BRF9TU09cIiA9PT0gdGhpcy4kbG9jYXRpb24uc2VhcmNoKClbXCJhdXRvU1NPXCJdKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0F1dG9Tc28oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9jZWVkVHJpYWxBZnRlclNzb0V4Y2hhbmdlID0gXCJ0cnVlXCIgPT09IHRoaXMuJGxvY2F0aW9uLnNlYXJjaCgpW1wicHJvY2VlZFRyaWFsQWZ0ZXJTc29FeGNoYW5nZVwiXTtcclxuICAgICAgICBpZiAodGhpcy5wcm9jZWVkVHJpYWxBZnRlclNzb0V4Y2hhbmdlKSB7XHJcbiAgICAgICAgICAgIGxldCBlbmNvZGVkVXNlckluZm8gPSB0aGlzLiRsb2NhdGlvbi5zZWFyY2goKVtcImVuY29kZWRVc2VySW5mb1wiXTtcclxuICAgICAgICAgICAgaWYgKGVuY29kZWRVc2VySW5mbyAmJiBlbmNvZGVkVXNlckluZm8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mbyhlbmNvZGVkVXNlckluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgkbG9jYXRpb24udXJsKCkuaW5kZXhPZihVc2Vyc1JvdXRlci5zaWduVXBSb3V0ZSkgPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnNpZ25VcE1vZGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgKyBcIiBmcmVlUGxhblwiKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLk1BSU5fTUVOVV9LRVkpO1xyXG4gICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKFwiQ29yZSBBQ0hJRVZFIC0gU3RhcnQgZm9yIEZSRUVcIikudXBkYXRlKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkQXZhaWxhYmxlTG9jYWxlcygpO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5pc0NoZWNrUGFzc3dvcmQoKVxyXG4gICAgICAgICAgICAudGhlbihpc0NoZWNrID0+IHRoaXMuaXNDaGVja1Bhc3N3b3JkID0gaXNDaGVjayk7XHJcblxyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcIiRkZXN0cm95XCIsICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpLnJlcGxhY2UoXCJmcmVlUGxhblwiLCBcIlwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkQXZhaWxhYmxlTG9jYWxlcygpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5nZXRBdmFpbGFibGVMb2NhbGVzKCkudGhlbihsb2NhbGVzID0+IHtcclxuICAgICAgICAgICAgbGV0IGRlZmF1bHRMb2NhbGU7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jYWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvY2FsZUluZm8gPSBsb2NhbGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZUluZm8uZGVmYXVsdExvY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlci5sb2NhbGUgPSBsb2NhbGVJbmZvLmxvY2FsZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGUgPSBsb2NhbGVJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRMb2NhbGUgPSBsb2NhbGVJbmZvLmxvY2FsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoQXBwUHJvcGVydGllcy5jdXJyZW50TG9jYWxlICE9IGRlZmF1bHRMb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlci5sb2NhbGUgPSBsb2NhbGVzLmZpbHRlcihsID0+IGwubG9jYWxlID09IEFwcFByb3BlcnRpZXMuY3VycmVudExvY2FsZSlbMF0ubG9jYWxlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0TG9jYWxlID0gbG9jYWxlcy5maWx0ZXIobCA9PiBsLmxvY2FsZSA9PSBBcHBQcm9wZXJ0aWVzLmN1cnJlbnRMb2NhbGUpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTG9jYWxlcyA9IGxvY2FsZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbiA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMudXNlckxvZ29uLm5hbWUgPSB0aGlzLnVzZXIuZW1haWw7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5zdGFydFRyaWFsKHRoaXMuY29tcGFueU5hbWUsIHRoaXMuY29tcGFueURvbWFpbiwgdGhpcy51c2VyKVxyXG4gICAgICAgICAgICAudGhlbihidXNpbmVzc1VuaXRJZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBub3RpZmllci5zdWNjZXNzKFwiUmVzdG9yZSBwYXNzd29yZCBsaW5rIGhhcyBiZWVuIHNlbnQgdG8geW91ciBlbWFpbCBhZGRyZXNzLiBXaGVuIHlvdSByZWNlaXZlIHRoZSBlbWFpbCwgY2xpY2sgb24gdGhlIGxpbmsgaW5zaWRlIHRvIHJlc2V0IHlvdXIgcGFzc3dvcmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhSZWRpcmVjdC5jbGVhclJlZGlyZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5hdXRoUm91dGVyLmxvZ29uVXJsKCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dPbkFmdGVyUmVnaXN0cmF0aW9uKGJ1c2luZXNzVW5pdElkKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gNDA5ICYmIHJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLnJlZmVyZW5jZXMuZHVwbGljYXRlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJDb21wYW55IG5hbWUgXCIgKyB0aGlzLmNvbXBhbnlOYW1lICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IudXNlci5kdXBsaWNhdGUubmFtZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRnVsbCBuYW1lIFwiICsgdGhpcy51c2VyLmZ1bGxOYW1lICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IudXNlci5kdXBsaWNhdGUuZW1haWxcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVtYWlsIFwiICsgdGhpcy51c2VyLmVtYWlsICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IuZHVwbGljYXRlLmxvZ29uLnByb3ZpZGVyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJPbmx5IG9uZSBsb2dvbiBmb3IgZWFjaCB0eXBlIGlzIGFsbG93ZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IuY29tcGFueS5uYW1lLmlzLm5vdC51bmlxdWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkNvbXBhbnkgbmFtZSBub3QgdW5pcXVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IuY29tcGFueS5kb21haW4uaXMubm90LnVuaXF1ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiQ29tcGFueSBkb21haW4gbm90IHVuaXF1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVycm9yLmludmFsaWQuY29tcGFueS5uYW1lXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJDb21wYW55IG5hbWUgcmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlcnJvci5pbnZhbGlkLmNvbXBhbnkuZG9tYWluXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJDb21wYW55IGRvbWFpbiBpcyBpbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3IuaW52YWxpZC5wYXNzd29yZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiUGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IDEgbGV0dGVyLCAxIG51bWJlciwgMSBzcGVjaWFsIGNoYXJhY3RlciBmcm9tICFAIyQlXiYqIGFuZCBtdXN0IGJlIDggb3IgbW9yZSBjaGFyYWN0ZXJzXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlF1ZXJ5IGhhcyBmYWlsZWQ6IHBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3Igb3IgaGVscCBkZXNrXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IodGhpcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2dPbkFmdGVyUmVnaXN0cmF0aW9uKGJ1c2luZXNzVW5pdElkOiBzdHJpbmcgfCBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ09uKExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLkxPQ0FMXSArIFwiOlwiICsgdGhpcy51c2VyLmVtYWlsLCB0aGlzLnVzZXIudXNlckxvZ29uc1swXS5wYXNzd29yZCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRTdWJzY3JpcHRpb25zID0gdGhpcy5idXNpbmVzc1VuaXRSb3V0ZXIuc3Vic2NyaXB0aW9uVXJsKHVzZXIuYnVzaW5lc3NVbml0c1swXSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuYXV0aFJlZGlyZWN0LnJldHVybkFmdGVyTG9nT24oZmFsc2UgLypuYXRpdmUqLywgdGhpcy5idXNpbmVzc1VuaXRTdWJzY3JpcHRpb25zKTtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKHRoaXMuYnVzaW5lc3NVbml0U3Vic2NyaXB0aW9ucyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNEb21haW5WYWxpZCgpIHtcclxuICAgICAgICBsZXQgaW5wdXRNYXNrID0gbmV3IFJlZ0V4cChcIl5bYS16MC05XXszLDUwfSRcIik7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0TWFzay50ZXN0KHRoaXMuY29tcGFueURvbWFpbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvQ2FuY2VsKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9jZWVkVHJpYWxBZnRlclNzb0V4Y2hhbmdlICYmIHRoaXMuJHdpbmRvdy5oaXN0b3J5Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy4kd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCh0aGlzLm1haW5Sb3V0ZXIubWFpblVybCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9Mb2dpbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwodGhpcy5hdXRoUm91dGVyLmxvZ29uVXJsKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWRpcmVjdFRvVGVybXNPZlVzZSgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgYmFzZVVybCA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSxcclxuICAgICAgICAgICAgdXJsID0gYmFzZVVybCArIFwiI1wiICsgdGhpcy5wb2xpY2llc1JvdXRlci50ZXJtc09mVXNlVXJsKCk7XHJcbiAgICAgICAgdGhpcy4kd2luZG93Lm9wZW4odXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RUb1ByaXZhY3lQb2xpY3koKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGJhc2VVcmwgPSB0aGlzLiR3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0sXHJcbiAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyBcIiNcIiArIHRoaXMucG9saWNpZXNSb3V0ZXIucHJpdmFjeVBvbGljeVVybCgpO1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5vcGVuKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZGlyZWN0VG9BdXRvU3NvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy51cmwuYmFzZShcIi9hcGkvc3NvL3N0YXJ0P3Nzb1Byb3ZpZGVyPTpzc29Qcm92aWRlciZzc29SZWFzb249OnNzb1JlYXNvblwiKVxyXG4gICAgICAgICAgICAucGFyYW0oXCI6c3NvUHJvdmlkZXJcIiwgTG9nb25Qcm92aWRlckVudW1bTG9nb25Qcm92aWRlckVudW0uTUlDUk9TT0ZUX0FEX1NTT10pXHJcbiAgICAgICAgICAgIC5wYXJhbShcIjpzc29SZWFzb25cIiwgU3NvUmVhc29uVHlwZVtTc29SZWFzb25UeXBlLlNUQVJUX1RSSUFMXSlcclxuICAgICAgICAgICAgLnNlcnZpY2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVzZXJJbmZvKGJhc2U2NFN0cmluZykge1xyXG4gICAgICAgIGlmIChiYXNlNjRTdHJpbmcpIHtcclxuICAgICAgICAgICAgbGV0IHVzZXJJbmZvID0gSlNPTi5wYXJzZShhdG9iKGJhc2U2NFN0cmluZykpO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIuZnVsbE5hbWUgPSB1c2VySW5mby5mdWxsTmFtZTtcclxuICAgICAgICAgICAgdGhpcy51c2VyLmVtYWlsID0gdXNlckluZm8uZW1haWw7XHJcbiAgICAgICAgICAgIGlmICh1c2VySW5mby5wcm92aWRlcktleSAmJiB1c2VySW5mby5leHRlcm5hbFVzZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyLnVzZXJMb2dvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdXNlckluZm8uZXh0ZXJuYWxVc2VySWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJLZXk6IExvZ29uUHJvdmlkZXJFbnVtW0xvZ29uUHJvdmlkZXJFbnVtLk1JQ1JPU09GVF9BRF9TU09dLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVsb2FkQXBwbGljYXRpb25Gb3JMb2NhbGVJZk5lZWRlZCh1c2VyTG9jYWxlOiBJU3lzdGVtTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKEFwcFByb3BlcnRpZXMuY3VycmVudExvY2FsZSAhPSB1c2VyTG9jYWxlLmxvY2FsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIubG9jYWxlID0gdXNlckxvY2FsZS5sb2NhbGU7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdExvY2FsZSA9IHVzZXJMb2NhbGU7XHJcbiAgICAgICAgICAgIExvZ09uQ29udHJvbGxlci5jaGFuZ2VBcHBsaWNhdGlvbkxvY2FsZUluU3RvcmFnZSh1c2VyTG9jYWxlLmxvY2FsZSk7XHJcbiAgICAgICAgICAgIG51bWVyYWwubGFuZ3VhZ2UodXNlckxvY2FsZS5sb2NhbGUuc3Vic3RyKDAsIDIpKTsgLy8gZS5nLiAnZW4nIG9yICdydScgb3IgJ2VzJyBvciAnZnInXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0Nsb3NlUGFzc3dvcmQoZWxlbWVudElkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBwYXNzd29yZEVsZW1lbnQgPSAkKGVsZW1lbnRJZCk7XHJcbiAgICAgICAgaWYgKHBhc3N3b3JkRWxlbWVudC5hdHRyKFwidHlwZVwiKSA9PT0gXCJwYXNzd29yZFwiKSB7XHJcbiAgICAgICAgICAgIHBhc3N3b3JkRWxlbWVudC5hdHRyKFwidHlwZVwiLCBcInRleHRcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcGFzc3dvcmRFbGVtZW50LmF0dHIoXCJ0eXBlXCIsIFwicGFzc3dvcmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1VuaWNvZGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHBhdHRlcm4gPSAvXltcXHgyMC1cXHg3RV0qJC87XHJcbiAgICAgICAgcmV0dXJuICFwYXR0ZXJuLnRlc3QodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1JpZ2h0UGFzc3dvcmQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDaGVja1Bhc3N3b3JkICYmIHRoaXMudXNlci51c2VyTG9nb25zWzBdLnBhc3N3b3JkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmNoZWNrUGFzc3dvcmQodGhpcy51c2VyLnVzZXJMb2dvbnNbMF0ucGFzc3dvcmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0lTeXN0ZW1QZXJtaXNzaW9uc30gZnJvbSBcIi4uL3NlY3VyaXR5L3Blcm1pc3Npb25zL0lTeXN0ZW1QZXJtaXNzaW9uc1wiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtBdXRoU2VydmljZX0gZnJvbSBcIi4uL2F1dGgvQXV0aFNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9QZXJtaXNzaW9uc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vdXRpbHMvVXJsU2VydmljZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi9Vc2VyU2VydmljZVwiO1xyXG5pbXBvcnQge0dyaWRNb2RlbCwgSUdyaWRNb2RlbH0gZnJvbSBcIi4uL0lHcmlkTW9kZWxcIjtcclxuaW1wb3J0IHtVc2Vyc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvVXNlcnNSb3V0ZXJcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SHR0cEdyaWRIZWxwZXJ9IGZyb20gXCIuLi9JSHR0cEdyaWRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7bm90aWZpZXJ9IGZyb20gXCIuLi9JTm90aWZpZXJcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzU2VydmljZX0gZnJvbSBcIi4uL2J1c2luZXNzVW5pdHMvQnVzaW5lc3NVbml0c1NlcnZpY2VcIjtcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyfSBmcm9tIFwiLi4vdXRpbHMvU3RyaW5nQnVpbGRlclwiO1xyXG5pbXBvcnQge0JpbGxpbmdQbGFuU2VydmljZX0gZnJvbSBcIi4uL2ZpbmFuY2VzL0JpbGxpbmdQbGFuU2VydmljZVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2Vyc0xpc3RDb250cm9sbGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXNlcnMuVXNlcnNMaXN0Q29udHJvbGxlclwiO1xyXG5cclxuICAgIHByaXZhdGUgc3lzdGVtUGVybWlzc2lvbnM6IElTeXN0ZW1QZXJtaXNzaW9ucztcclxuXHJcbiAgICBwdWJsaWMgdXNlcnNHcmlkTW9kZWw6IElHcmlkTW9kZWw8SVVzZXI+O1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50VXNlckJ1c2luZXNzVW5pdElkczogQXJyYXk8bnVtYmVyPjtcclxuXHJcbiAgICBwdWJsaWMgYnVzaW5lc3NVbml0SWRzV2l0aEZyZWVQbGFuOiBBcnJheTxudW1iZXI+O1xyXG5cclxuICAgIHB1YmxpYyBtYXhGcmVlUGxhblVzZXJzOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGlzRnJlZVBsYW5CdUZ1bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBcIiR0aW1lb3V0XCIsXHJcbiAgICAgICAgXCIkbG9nXCIsXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVzZXJTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgUGVybWlzc2lvbnNTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlcnNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBVcmxTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBCdXNpbmVzc1VuaXRzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEJpbGxpbmdQbGFuU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSAkbG9nOiBhbmd1bGFyLklMb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2Vyc0FwaTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25zQXBpOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgdXNlcnNSb3V0ZXI6IFVzZXJzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGF1dGhBcGk6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRzU2VydmljZTogQnVzaW5lc3NVbml0c1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJpbGxpbmdQbGFuU2VydmljZTogQmlsbGluZ1BsYW5TZXJ2aWNlKSB7XHJcbiAgICAgICAgTWVudUhlbHBlci5zZXRDdXJyZW50TWVudUl0ZW0oTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9VU0VSU19NRU5VX0tFWSk7XHJcbiAgICAgICAgUGFnZUhlYWRlci5zZXQoKS5oZWFkZXIoXCJVc2Vyc1wiKS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgcGVybWlzc2lvbnNBcGkuZ2V0U3lzdGVtUGVybWlzc2lvbnMoKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVBlcm1pc3Npb25zID0gcDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy51c2Vyc0dyaWRNb2RlbCA9IG5ldyBHcmlkTW9kZWwoSHR0cEdyaWRIZWxwZXIuY3JlYXRlTG9hZGVyPElVc2VyPigkaHR0cCwgdGhpcy51cmwuc2VydmljZShcIi9hcGkvdXNlcnNcIikpKTtcclxuICAgICAgICBhdXRoQXBpLmdldEN1cnJlbnRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlckJ1c2luZXNzVW5pdElkcyA9IHVzZXIuYnVzaW5lc3NVbml0cztcclxuICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5nZXRCdXNpbmVzc1VuaXRzV2l0aEZyZWVQbGFuKHRoaXMuY3VycmVudFVzZXJCdXNpbmVzc1VuaXRJZHMpLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRJZHNXaXRoRnJlZVBsYW4gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2luZXNzVW5pdHNTZXJ2aWNlLmlzRnJlZUJ1c2luZXNzVW5pdHNGdWxsKHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRnJlZVBsYW5CdUZ1bGwgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkucHJlc2VydmVIZWFkZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZEFjdGlvbkxpbmtJZih0aGlzLnN5c3RlbVBlcm1pc3Npb25zLmNyZWF0ZVVzZXIsICcrJm5ic3A7TmV3JywgdGhpcy5nZXRBZGRSb3V0ZSgpLCByZXN1bHQpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5iaWxsaW5nUGxhblNlcnZpY2UuZ2V0TWF4RnJlZVBsYW5Vc2VycygpLnRoZW4oZGF0YSA9PiB0aGlzLm1heEZyZWVQbGFuVXNlcnMgPSBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWRkUm91dGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGcmVlUGxhbkJ1RnVsbCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51c2Vyc1JvdXRlci5hZGRVcmwoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiL3VzZXJzXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGhhc1VzZXJTYW1lQnVzaW5lc3NVbml0cyhhcnI6IEFycmF5PG51bWJlcj4pOiBib29sZWFuIHtcclxuICAgICAgICBpZih0aGlzLmN1cnJlbnRVc2VyQnVzaW5lc3NVbml0SWRzKSB7XHJcbiAgICAgICAgICAgIGxldCBzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXJCdXNpbmVzc1VuaXRJZHMuZm9yRWFjaCggbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZighcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgcyA9IGFyci5zb21lKG0gPT4gbSA9PT0gbilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGdldElzQWN0aXZlR3JpZFN0eWxlKGlzQWN0aXZlOiBib29sZWFuKTogYW55IHtcclxuICAgICAgICByZXR1cm4gaXNBY3RpdmVcclxuICAgICAgICAgICAgPyB7fVxyXG4gICAgICAgICAgICA6IHtcImNvbG9yXCI6IFwiIzk5OTk5OVwifTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVhY3RpdmF0ZUxpbmsoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0ZyZWVQbGFuQnVGdWxsXHJcbiAgICAgICAgICAgID8ge1wiY29sb3JcIjogXCIjOTk5OTk5XCIsIFwicG9pbnRlci1ldmVudHNcIjogXCJub25lXCJ9XHJcbiAgICAgICAgICAgIDoge307XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnZlcnRJc0FjdGl2ZShpc0FjdGl2ZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWN0aXZlICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGlzQWN0aXZlID8gJ1llcycgOiAnTm8nXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY3RpdmF0ZShpbmRleDogbnVtYmVyLCBpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5pc0ZyZWVCdXNpbmVzc1VuaXRzRnVsbCh0aGlzLmJ1c2luZXNzVW5pdElkc1dpdGhGcmVlUGxhbilcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNGcmVlUGxhbkJ1RnVsbCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMudXNlcnNBcGkuc2V0QWN0aXZlKGlkLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4odSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoXCJVc2VyICdcIiArIHUuZnVsbE5hbWUgKyBcIicgaGFzIGJlZW4gYWN0aXZhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkodGhpcy51c2Vyc0dyaWRNb2RlbC5lbnRyaWVzW2luZGV4XS5idXNpbmVzc1VuaXRzSWRMaXN0LCB1LmJ1c2luZXNzVW5pdHNJZExpc3QpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcnNHcmlkTW9kZWwuZW50cmllc1tpbmRleF0gPSB1O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gdGhpcy5idXNpbmVzc1VuaXRzU2VydmljZS5pc0ZyZWVCdXNpbmVzc1VuaXRzRnVsbCh0aGlzLmJ1c2luZXNzVW5pdElkc1dpdGhGcmVlUGxhbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGcmVlUGxhbkJ1RnVsbCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkucHJlc2VydmVIZWFkZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRBY3Rpb25MaW5rSWYodGhpcy5zeXN0ZW1QZXJtaXNzaW9ucy5jcmVhdGVVc2VyLCAnKyZuYnNwO05ldycsIHRoaXMudXNlcnNSb3V0ZXIuYWRkVXJsKCksIHJlc3VsdCkudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IodGhpcy5nZXRGcmVlUGxhbk1lc3NhZ2UoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRGcmVlUGxhbk1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIllvdSBoYXZlIHJlYWNoZWQgbWF4aW11bSA6bnVtYmVyIGFjdGl2ZSB1c2VycyBhbGxvd2VkIGZvciBGcmVlIFBsYW5cIilcclxuICAgICAgICAgICAgLndpdGgoXCI6bnVtYmVyXCIsIHRoaXMubWF4RnJlZVBsYW5Vc2VycykuYnVpbGQoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0lVc2VyLCBQcmVkZWZpbmVkVXNlcnNFbnVtfSBmcm9tIFwiLi9tb2RlbHMvSVVzZXJcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2Vyc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvVXNlcnNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eVNlcnZpY2VcIjtcclxuaW1wb3J0IHtNZW51SGVscGVyfSBmcm9tIFwiLi4vdXRpbHMvTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge1BhZ2VIZWFkZXJ9IGZyb20gXCIuLi91dGlscy9QYWdlSGVhZGVySGVscGVyXCI7XHJcbmltcG9ydCB7SVVzZXJMb2dvbn0gZnJvbSBcIi4vbW9kZWxzL0lVc2VyTG9nb25cIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4uL0lOb3RpZmllclwiO1xyXG5cclxuaW50ZXJmYWNlIElVc2VyRXh0ZW5kZWQgZXh0ZW5kcyBJVXNlciB7XHJcbiAgICB1c2VyTG9nb25zPzogQXJyYXk8SVVzZXJMb2dvbj47XHJcbiAgICBidXNpbmVzc1VuaXRJZHM/OiBBcnJheTxudW1iZXI+O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlcnNNZXJnZUNvbnRyb2xsZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1c2Vycy5Vc2Vyc01lcmdlQ29udHJvbGxlclwiO1xyXG5cclxuICAgIHB1YmxpYyBwcmVzZW50VXNlcklkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcHJlc2VudFVzZXI6IElVc2VyRXh0ZW5kZWQgPSB7XHJcbiAgICAgICAgZnVsbE5hbWU6IFwiXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgbmV3R3JvdXBzOiBbXSxcclxuICAgICAgICBsb2NhbGU6IG51bGwsXHJcbiAgICAgICAgdXNlckxvZ29uczogW10sXHJcbiAgICAgICAgYnVzaW5lc3NVbml0SWRzOiB1bmRlZmluZWRcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIG91dGRhdGVkVXNlcklkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgb3V0ZGF0ZWRVc2VyOiBJVXNlckV4dGVuZGVkID0ge1xyXG4gICAgICAgIGZ1bGxOYW1lOiBcIlwiLFxyXG4gICAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgIG5ld0dyb3VwczogW10sXHJcbiAgICAgICAgbG9jYWxlOiBudWxsLFxyXG4gICAgICAgIHVzZXJMb2dvbnM6IFtdLFxyXG4gICAgICAgIGJ1c2luZXNzVW5pdElkczogdW5kZWZpbmVkXHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBleGNsdWRlZFVzZXJJZHM6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkbG9nXCIsXHJcbiAgICAgICAgXCIkd2luZG93XCIsXHJcbiAgICAgICAgXCIkcm91dGVQYXJhbXNcIixcclxuICAgICAgICBVc2VyU2VydmljZS5OQU1FLFxyXG4gICAgICAgIFVzZXJzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU2VjdXJpdHlTZXJ2aWNlLk5BTUUsXHJcbiAgICAgICAgVXNlclNlcnZpY2UuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRsb2c6IGFuZ3VsYXIuSUxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlICRyb3V0ZVBhcmFtczogYW5ndWxhci5yb3V0ZS5JUm91dGVQYXJhbXNTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2Vyc0FwaTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgdXNlcnNSb3V0ZXI6IFVzZXJzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJlc2VudFVzZXJJZCA9IHRoaXMuJHJvdXRlUGFyYW1zW1widXNlcklkXCJdO1xyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmRlbWFuZEF1dGhlbnRpY2F0aW9uKClcclxuICAgICAgICAgICAgLmRlbWFuZFN5c3RlbVBlcm1pc3Npb25zKHN5c3RlbVBlcm1pc3Npb25zID0+IHN5c3RlbVBlcm1pc3Npb25zLmVkaXRVc2VyKTtcclxuICAgICAgICBNZW51SGVscGVyLnNldEN1cnJlbnRNZW51SXRlbShNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX1VTRVJTX01FTlVfS0VZKTtcclxuXHJcbiAgICAgICAgdGhpcy5leGNsdWRlZFVzZXJJZHMucHVzaCh0aGlzLnByZXNlbnRVc2VySWQpO1xyXG4gICAgICAgIHRoaXMuZXhjbHVkZWRVc2VySWRzLnB1c2goUHJlZGVmaW5lZFVzZXJzRW51bS5BRE1JTik7XHJcbiAgICAgICAgdGhpcy5leGNsdWRlZFVzZXJJZHMucHVzaChQcmVkZWZpbmVkVXNlcnNFbnVtLkdVRVNUKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkUHJlc2VudFVzZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRQcmVzZW50VXNlcigpIHtcclxuICAgICAgICB0aGlzLnVzZXJzQXBpLmdldCh0aGlzLnByZXNlbnRVc2VySWQpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIFBhZ2VIZWFkZXIuc2V0KCkuaGVhZGVyKHVzZXIuZnVsbE5hbWUpLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmNvcHkodXNlciwgdGhpcy5wcmVzZW50VXNlcik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFByZXNlbnRVc2VyTG9nb25zKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkT3V0ZGF0ZWRVc2VyKCkge1xyXG4gICAgICAgIHRoaXMudXNlcnNBcGkuZ2V0KHRoaXMub3V0ZGF0ZWRVc2VySWQpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuY29weSh1c2VyLCB0aGlzLm91dGRhdGVkVXNlcik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZE91dGRhdGVkVXNlckxvZ29ucygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFByZXNlbnRVc2VyTG9nb25zKCkge1xyXG4gICAgICAgIHRoaXMudXNlcnNBcGkuZ2V0VXNlckxvZ29ucyh0aGlzLnByZXNlbnRVc2VySWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVzZW50VXNlci51c2VyTG9nb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzZW50VXNlci51c2VyTG9nb25zLnNwbGljZSgwLCB0aGlzLnByZXNlbnRVc2VyLnVzZXJMb2dvbnMubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzZW50VXNlci51c2VyTG9nb25zID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZm9yRWFjaChyID0+IHRoaXMucHJlc2VudFVzZXIudXNlckxvZ29ucy5wdXNoKHIpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkT3V0ZGF0ZWRVc2VyTG9nb25zKCkge1xyXG4gICAgICAgIHRoaXMudXNlcnNBcGkuZ2V0VXNlckxvZ29ucyh0aGlzLm91dGRhdGVkVXNlcklkKVxyXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0ZGF0ZWRVc2VyLnVzZXJMb2dvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm91dGRhdGVkVXNlci51c2VyTG9nb25zLnNwbGljZSgwLCB0aGlzLm91dGRhdGVkVXNlci51c2VyTG9nb25zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0ZGF0ZWRVc2VyLnVzZXJMb2dvbnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKHIgPT4gdGhpcy5vdXRkYXRlZFVzZXIudXNlckxvZ29ucy5wdXNoKHIpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEF2YWlsYWJsZVVzZXJzVXJsKGV4Y2x1ZGVkVXNlcklkczogbnVtYmVyW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCB1cmw6IHN0cmluZyA9IFwiL2FwaS91c2VyU2VsZWN0b3IvdXNlcnM/XCI7XHJcbiAgICAgICAgaWYgKGV4Y2x1ZGVkVXNlcklkcyAmJiBleGNsdWRlZFVzZXJJZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBleGNsdWRlZFVzZXJJZHMuZm9yRWFjaChpZCA9PiB1cmwgKz0gYGV4Y2x1ZGVkVXNlcklkcz0ke2lkfSZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVybDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3V0ZGF0ZWRVc2VyQ2hhbmdlQ2FsbGJhY2sgPSAoc2VsZWN0ZWQ6IGJvb2xlYW4sIGlkOiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm91dGRhdGVkVXNlcklkID0gaWQ7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZE91dGRhdGVkVXNlcigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZGF0ZWRVc2VyID0ge1xyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG5ld0dyb3VwczogW10sXHJcbiAgICAgICAgICAgICAgICBsb2NhbGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB1c2VyTG9nb25zOiBbXSxcclxuICAgICAgICAgICAgICAgIGJ1c2luZXNzVW5pdElkczogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgbWVyZ2VBY2NvdW50cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLm1lcmdlVXNlcnModGhpcy5wcmVzZW50VXNlcklkLCB0aGlzLnByZXNlbnRVc2VyLnZlcnNpb24sIHRoaXMub3V0ZGF0ZWRVc2VySWQsIHRoaXMub3V0ZGF0ZWRVc2VyLnZlcnNpb24pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5zdWNjZXNzKFwiQWNjb3VudHMgc3VjY2Vzc2Z1bGx5IG1lcmdlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0VkaXRVc2VyKHJlc3VsdC5pZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVkaXJlY3RUb0VkaXRVc2VyKGlkOiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgYmFzZVVybCA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSxcclxuICAgICAgICAgICAgdXJsID0gYmFzZVVybCArIFwiI1wiICsgdGhpcy51c2Vyc1JvdXRlci5lZGl0VXJsKGlkKTtcclxuICAgICAgICB0aGlzLiR3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh1cmwpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vVXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHtDdXJyZW50VXNlclByb2ZpbGVDb250cm9sbGVyfSBmcm9tIFwiLi9DdXJyZW50VXNlclByb2ZpbGVDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7VXNlckVkaXRDb250cm9sbGVyfSBmcm9tIFwiLi9Vc2VyRWRpdENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtVc2VyU2lnbnVwQ29udHJvbGxlcn0gZnJvbSBcIi4vVXNlclNpZ251cENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtVc2VyU3RhcnRUcmlhbENvbnRyb2xsZXJ9IGZyb20gXCIuL1VzZXJTdGFydFRyaWFsQ29udHJvbGxlclwiO1xyXG5pbXBvcnQge1VzZXJzTGlzdENvbnRyb2xsZXJ9IGZyb20gXCIuL1VzZXJzTGlzdENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtHcm91cHNDb250cm9sbGVyfSBmcm9tIFwiLi9Hcm91cHNDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7R3JvdXBFZGl0Q29udHJvbGxlcn0gZnJvbSBcIi4vR3JvdXBFZGl0Q29udHJvbGxlclwiO1xyXG5cclxuaW1wb3J0IHtVc2Vyc01lcmdlQ29udHJvbGxlcn0gZnJvbSBcIi4vVXNlcnNNZXJnZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHtTZXR0aW5nc01vZHVsZX0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzTW9kdWxlXCI7XHJcbmltcG9ydCB7U2VjdXJpdHlNb2R1bGV9IGZyb20gXCIuLi9zZWN1cml0eS9TZWN1cml0eU1vZHVsZVwiO1xyXG5pbXBvcnQge1VybHNNb2R1bGV9IGZyb20gXCIuLi91cmxzL1VybHNNb2R1bGVcIjtcclxuaW1wb3J0IHtHcm91cE1hbmFnZVBlcm1pc3Npb25zQ29udHJvbGxlcn0gZnJvbSBcIi4vR3JvdXBNYW5hZ2VQZXJtaXNzaW9uc0NvbnRyb2xsZXJcIjtcclxuXHJcbmV4cG9ydCB2YXIgVXNlcnNNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJ1c2Vyc1wiLCBbXHJcbiAgICAgICAgU2V0dGluZ3NNb2R1bGUubmFtZSxcclxuICAgICAgICBTZWN1cml0eU1vZHVsZS5uYW1lLFxyXG4gICAgICAgIFVybHNNb2R1bGUubmFtZVxyXG4gICAgXSlcclxuICAgIC5zZXJ2aWNlKFVzZXJTZXJ2aWNlLk5BTUUsIFVzZXJTZXJ2aWNlKVxyXG4gICAgLmNvbnRyb2xsZXIoQ3VycmVudFVzZXJQcm9maWxlQ29udHJvbGxlci5OQU1FLCBDdXJyZW50VXNlclByb2ZpbGVDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoVXNlclNpZ251cENvbnRyb2xsZXIuTkFNRSwgVXNlclNpZ251cENvbnRyb2xsZXIpXHJcbiAgICAuY29udHJvbGxlcihVc2VyU3RhcnRUcmlhbENvbnRyb2xsZXIuTkFNRSwgVXNlclN0YXJ0VHJpYWxDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoVXNlckVkaXRDb250cm9sbGVyLk5BTUUsIFVzZXJFZGl0Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKFVzZXJzTGlzdENvbnRyb2xsZXIuTkFNRSwgVXNlcnNMaXN0Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEdyb3Vwc0NvbnRyb2xsZXIuTkFNRSwgR3JvdXBzQ29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEdyb3VwRWRpdENvbnRyb2xsZXIuTkFNRSwgR3JvdXBFZGl0Q29udHJvbGxlcilcclxuICAgIC5jb250cm9sbGVyKEdyb3VwTWFuYWdlUGVybWlzc2lvbnNDb250cm9sbGVyLk5BTUUsIEdyb3VwTWFuYWdlUGVybWlzc2lvbnNDb250cm9sbGVyKVxyXG4gICAgLmNvbnRyb2xsZXIoVXNlcnNNZXJnZUNvbnRyb2xsZXIuTkFNRSwgVXNlcnNNZXJnZUNvbnRyb2xsZXIpOyIsImV4cG9ydCBpbnRlcmZhY2UgSUdyb3VwIHtcclxuICAgIGlkPzogbnVtYmVyO1xyXG4gICAgcGFyZW50SWQ/OiBudW1iZXI7XHJcbiAgICBuYW1lPzogc3RyaW5nO1xyXG4gICAgcHJlZGVmaW5lZD86IGJvb2xlYW47XHJcbiAgICBhdmFpbGFibGU/OiBib29sZWFuO1xyXG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xyXG4gICAgYnVzaW5lc3NVbml0SWQ/OiBudW1iZXI7XHJcbiAgICBidXNpbmVzc1JvbGU/OiBTdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEdyb3VwRW51bSB7XHJcbiAgICBFVkVSWU9ORSA9IDEsXHJcbiAgICBTWVNfQURNSU5TID0gMixcclxuICAgIE1PREVSQVRPUlMgPSAzLFxyXG4gICAgUkVHSVNURVJFRF9VU0VSUyA9IDQsXHJcbiAgICBCVV9BRE1JTklTVFJBVE9SUyA9IDVcclxufVxyXG4iLCJpbXBvcnQge0lHcm91cH0gZnJvbSBcIi4vSUdyb3VwXCI7XHJcbmltcG9ydCB7VXNlclJvbGV9IGZyb20gXCIuL1VzZXJSb2xlXCI7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlciB7XHJcbiAgICBpZD86IG51bWJlcjtcclxuICAgIHZlcnNpb24/OiBudW1iZXI7XHJcbiAgICBmaXJzdE5hbWU/OiBzdHJpbmc7XHJcbiAgICBsYXN0TmFtZT86IHN0cmluZztcclxuICAgIGZ1bGxOYW1lPzogc3RyaW5nO1xyXG4gICAgZW1haWw/OiBzdHJpbmc7XHJcbiAgICBub3RpZmljYXRpb25GcmVxdWVuY3lJZD86IG51bWJlcjtcclxuICAgIGxvY2FsZT86IHN0cmluZztcclxuICAgIGlzQWN0aXZlPzogYm9vbGVhbjtcclxuICAgIGdyb3Vwc0xpc3Q/OiBBcnJheTxJR3JvdXA+O1xyXG4gICAgbmV3R3JvdXBzPzogQXJyYXk8bnVtYmVyPjtcclxuICAgIGJ1c2luZXNzVW5pdHNJZExpc3Q/OiBBcnJheTxudW1iZXI+O1xyXG4gICAgcGhvbmVOdW1iZXI/OiBzdHJpbmc7XHJcbiAgICBwcmV2aWV3SWQ/OiBudW1iZXI7XHJcbiAgICBwcmV2aWV3VXJsPzogc3RyaW5nO1xyXG4gICAgYnVzaW5lc3NSb2xlPzogc3RyaW5nO1xyXG4gICAgcGFnZVZpZXdNb2RlPzogYm9vbGVhbjtcclxuICAgIGR5bmFtaWNJcD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFByZWRlZmluZWRVc2Vyc0VudW0ge1xyXG4gICAgQURNSU4gPSAxLFxyXG4gICAgR1VFU1QgPSAyLFxyXG4gICAgU1lTVEVNID0gM1xyXG59XHJcbiIsImV4cG9ydCBlbnVtIFVzZXJSb2xlIHtcclxuICAgIExFQVJORVIsXHJcbiAgICBJTlNUUlVDVE9SLFxyXG4gICAgQVRURU5ERUVfTUFOQUdFUixcclxuICAgIEFVVEhPUixcclxuICAgIEFETUlOSVNUUkFUT1JcclxufSIsImV4cG9ydCBjbGFzcyBDaGVja0J1c2luZXNzVW5pdElkIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwiY2hlY2tCdXNpbmVzc1VuaXRJZFwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaGFzVXNlclNhbWVCdXNpbmVzc1VuaXRzKGN1cnJlbnRVc2VyQlVJZHM6IEFycmF5PG51bWJlcj4sIGJ1c2luZXNzVW5pdElkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoY3VycmVudFVzZXJCVUlkcykge1xyXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFVzZXJCVUlkcy5zb21lKG0gPT4gYnVzaW5lc3NVbml0SWQgPT0gbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TWF0ZXJpYWxUeXBlLCBNYXRlcmlhbFR5cGVFbnVtfSBmcm9tIFwiLi8uLi9tYXRlcmlhbHMvbW9kZWxzL01hdGVyaWFsVHlwZVwiXHJcblxyXG5leHBvcnQgY2xhc3MgQ29udGVudFV0aWxzIHtcclxuXHJcbiAgICBzdGF0aWMgTUFQX0ZJTEVfRVhURU5TSU9OU19UT19NQVRFUklBTF9UWVBFUyA9IHtcclxuXHJcbiAgICAgICAgJ21wMyc6IE1hdGVyaWFsVHlwZUVudW0uQVVESU8sXHJcblxyXG4gICAgICAgICdtcDQnOiBNYXRlcmlhbFR5cGVFbnVtLlZJREVPLFxyXG4gICAgICAgICdtb3YnOiBNYXRlcmlhbFR5cGVFbnVtLlZJREVPLFxyXG5cclxuICAgICAgICAnanBnJzogTWF0ZXJpYWxUeXBlRW51bS5QSE9UTyxcclxuICAgICAgICAncG5nJzogTWF0ZXJpYWxUeXBlRW51bS5QSE9UTyxcclxuXHJcbiAgICAgICAgJ3R4dCc6IE1hdGVyaWFsVHlwZUVudW0uRE9DVU1FTlRTLFxyXG4gICAgICAgICdkb2MnOiBNYXRlcmlhbFR5cGVFbnVtLkRPQ1VNRU5UUyxcclxuICAgICAgICAnZG9jeCc6IE1hdGVyaWFsVHlwZUVudW0uRE9DVU1FTlRTLFxyXG4gICAgICAgICdwcHQnOiBNYXRlcmlhbFR5cGVFbnVtLkRPQ1VNRU5UUyxcclxuICAgICAgICAncHB0eCc6IE1hdGVyaWFsVHlwZUVudW0uRE9DVU1FTlRTLFxyXG4gICAgICAgICdwZGYnOiBNYXRlcmlhbFR5cGVFbnVtLkRPQ1VNRU5UUyxcclxuICAgICAgICAneGxzJzogTWF0ZXJpYWxUeXBlRW51bS5ET0NVTUVOVFMsXHJcbiAgICAgICAgJ3hsc3gnOiBNYXRlcmlhbFR5cGVFbnVtLkRPQ1VNRU5UUyxcclxuICAgICAgICAnaHRtbCc6IE1hdGVyaWFsVHlwZUVudW0uRE9DVU1FTlRTLFxyXG4gICAgICAgICdlcHViJzogTWF0ZXJpYWxUeXBlRW51bS5ET0NVTUVOVFMsXHJcbiAgICAgICAgJ3ppcCc6IE1hdGVyaWFsVHlwZUVudW0uRE9DVU1FTlRTLFxyXG4gICAgICAgICc3eic6IE1hdGVyaWFsVHlwZUVudW0uRE9DVU1FTlRTXHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RmlsZUV4dChmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKCh+LWZpbGVOYW1lLmxhc3RJbmRleE9mKFwiLlwiKSA+Pj4gMCkgKyAyKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEZpbGVXaXRob3V0RXh0KGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjaGVja0ZpbGVFeHQobWF0ZXJpYWxUeXBlSWQ6IG51bWJlciwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChDb250ZW50VXRpbHMuTUFQX0ZJTEVfRVhURU5TSU9OU19UT19NQVRFUklBTF9UWVBFU1tmaWxlRXh0LnRvTG93ZXJDYXNlKCldID09PSBtYXRlcmlhbFR5cGVJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBmaW5kTWF0ZXJpYWxUeXBlQnlGaWxlRXh0ZW5zaW9uKGZpbGVFeHQ6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIENvbnRlbnRVdGlscy5NQVBfRklMRV9FWFRFTlNJT05TX1RPX01BVEVSSUFMX1RZUEVTW2ZpbGVFeHQudG9Mb3dlckNhc2UoKV07XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge0lBZGRlZEJ1bmRsZUZpbGV9IGZyb20gXCIuLi9idW5kbGVzL21vZGVscy9JQWRkZWRCdW5kbGVGaWxlXCI7XHJcbmltcG9ydCB7UmFuZG9tVXRpbHN9IGZyb20gXCIuL1JhbmRvbVV0aWxzXCI7XHJcbmltcG9ydCB7SUJ1bmRsZUlucHV0fSBmcm9tIFwiLi4vYnVuZGxlcy9tb2RlbHMvSUJ1bmRsZUlucHV0XCI7XHJcbmltcG9ydCB7Q29udGVudFV0aWxzfSBmcm9tIFwiLi9Db250ZW50VXRpbHNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJ1bmRsZUlucHV0SW5mbyB7XHJcbiAgICByZWNvcmRVcmw/OiBzdHJpbmc7XHJcbiAgICByZWNvcmROYW1lPzogc3RyaW5nO1xyXG4gICAgYWRkZWRCdW5kbGVGaWxlPzogSUFkZGVkQnVuZGxlRmlsZTtcclxuICAgIGFkZGVkRmlsZXNNYXA/OiBhbnk7XHJcbiAgICBidW5kbGVJbnB1dD86IElCdW5kbGVJbnB1dDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvdXJzZUJ1bmRsZVV0aWxzIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFByZXBhcmVkQnVuZGxlSW5wdXRJbmZvRnJvbUJsb2IoYnVuZGxlSWQ6IG51bWJlciwgYnVuZGxlVmVyc2lvbjogbnVtYmVyLCBibG9iOiBCbG9iLCBmaWxlTmFtZVByZWZpeDogc3RyaW5nKTogSUJ1bmRsZUlucHV0SW5mbyB7XHJcbiAgICAgICAgbGV0IGJ1bmRsZUlucHV0SW5mbzogSUJ1bmRsZUlucHV0SW5mbyA9IHt9O1xyXG4gICAgICAgIGJ1bmRsZUlucHV0SW5mby5hZGRlZEJ1bmRsZUZpbGUgPSB7XHJcbiAgICAgICAgICAgIGZpbGU6IENvdXJzZUJ1bmRsZVV0aWxzLmJsb2JUb0ZpbGUoYmxvYiwgZmlsZU5hbWVQcmVmaXgpLFxyXG4gICAgICAgICAgICByZWxhdGl2ZVBhdGg6IFwiXCJcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJ1bmRsZUlucHV0SW5mby5yZWNvcmROYW1lID0gYnVuZGxlSW5wdXRJbmZvLmFkZGVkQnVuZGxlRmlsZS5maWxlLm5hbWU7XHJcbiAgICAgICAgYnVuZGxlSW5wdXRJbmZvLnJlY29yZFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgbGV0IGFkZGVkRmlsZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICBhZGRlZEZpbGVzLnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiBidW5kbGVJbnB1dEluZm8uYWRkZWRCdW5kbGVGaWxlLmZpbGUubmFtZSxcclxuICAgICAgICAgICAgdHlwZTogYnVuZGxlSW5wdXRJbmZvLmFkZGVkQnVuZGxlRmlsZS5maWxlLnR5cGUsXHJcbiAgICAgICAgICAgIHNpemU6IGJ1bmRsZUlucHV0SW5mby5hZGRlZEJ1bmRsZUZpbGUuZmlsZS5zaXplLFxyXG4gICAgICAgICAgICBwYXRoOiBidW5kbGVJbnB1dEluZm8uYWRkZWRCdW5kbGVGaWxlLnJlbGF0aXZlUGF0aFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJ1bmRsZUlucHV0SW5mby5idW5kbGVJbnB1dCA9IHtcclxuICAgICAgICAgICAgaWQ6IGJ1bmRsZUlkLFxyXG4gICAgICAgICAgICB2ZXJzaW9uOiBidW5kbGVWZXJzaW9uLFxyXG4gICAgICAgICAgICBhZGRlZEZpbGVzOiBhZGRlZEZpbGVzLFxyXG4gICAgICAgICAgICBkZWxldGVkRmlsZUlkczogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBidW5kbGVJbnB1dEluZm87XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgYmxvYlRvRmlsZShibG9iOiBCbG9iLCBmaWxlTmFtZVByZWZpeDogc3RyaW5nKTogRmlsZSB7XHJcbiAgICAgICAgbGV0IGZpbGU6IGFueSA9IGJsb2I7XHJcbiAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBpZiAoZmlsZS5uYW1lKSB7XHJcbiAgICAgICAgICAgIGZpbGUubmFtZSA9IFJhbmRvbVV0aWxzLmdlbmVyYXRlUmFuZG9tSWQoZmlsZU5hbWVQcmVmaXgpICsgXCIuXCIgKyBDb250ZW50VXRpbHMuZ2V0RmlsZUV4dChmaWxlLm5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpbGUubmFtZSA9IFJhbmRvbVV0aWxzLmdlbmVyYXRlUmFuZG9tSWQoZmlsZU5hbWVQcmVmaXgpICsgXCIud2F2XCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gPEZpbGU+IGZpbGU7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgY2xhc3MgRG9tVXRpbHMge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZmluZFBhcmVudFdpdGhDbGFzcyhzb3VyY2VFbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnksIHRhcmdldENsYXNzOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcGFyZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkgPSA8YW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5PiBzb3VyY2VFbGVtZW50LnBhcmVudCgpO1xyXG4gICAgICAgIHdoaWxlKHBhcmVudCkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50Lmhhc0NsYXNzKHRhcmdldENsYXNzKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk+ICQocGFyZW50WzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJlbnQgPSA8YW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5PiBwYXJlbnQucGFyZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBmaW5kUGFyZW50V2l0aEF0dHIoc291cmNlRWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LCBhdHRyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHBhcmVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5ID0gPGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeT4gc291cmNlRWxlbWVudC5wYXJlbnQoKTtcclxuICAgICAgICB3aGlsZShwYXJlbnQgJiYgcGFyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHBhcmVudC5sZW5ndGggPiAwICYmIHBhcmVudC5hdHRyKGF0dHJOYW1lKSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiA8YW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5PiAkKHBhcmVudFswXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFyZW50ID0gPGFuZ3VsYXIuSUF1Z21lbnRlZEpRdWVyeT4gcGFyZW50LnBhcmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHtDb3Vyc2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Db3Vyc2VzUm91dGVyXCI7XHJcbmltcG9ydCB7TWF0ZXJpYWxzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9NYXRlcmlhbHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtIb21lcGFnZVR5cGVFbnVtfSBmcm9tIFwiLi4vc2V0dGluZ3MvbW9kZWxzL0hvbWVwYWdlVHlwZUVudW1cIjtcclxuaW1wb3J0IHtJU3lzdGVtUHJvcGVydHl9IGZyb20gXCIuLi9zZXR0aW5ncy9tb2RlbHMvSVN5c3RlbVByb3BlcnR5XCI7XHJcbmltcG9ydCB7TGVhcm5pbmdQYXRoc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTGVhcm5pbmdQYXRoc1JvdXRlclwiO1xyXG5pbXBvcnQge0ZpbmFuY2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9GaW5hbmNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0hvbWVSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0hvbWVSb3V0ZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBIb21lcGFnZUhlbHBlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEhvbWVwYWdlVXJsKGhvbWVwYWdlOiBJU3lzdGVtUHJvcGVydHkpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgICAgICBzd2l0Y2ggKGhvbWVwYWdlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgSG9tZXBhZ2VUeXBlRW51bVtIb21lcGFnZVR5cGVFbnVtLkxFQVJOSU5HX1BBVEhTXToge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gTGVhcm5pbmdQYXRoc1JvdXRlci5pbmRleFJvdXRlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBIb21lcGFnZVR5cGVFbnVtW0hvbWVwYWdlVHlwZUVudW0uQ09VUlNFU106IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IENvdXJzZXNSb3V0ZXIuaW5kZXhSb3V0ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgSG9tZXBhZ2VUeXBlRW51bVtIb21lcGFnZVR5cGVFbnVtLk1BVEVSSUFMU106IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IE1hdGVyaWFsc1JvdXRlci5pbmRleFJvdXRlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBIb21lcGFnZVR5cGVFbnVtW0hvbWVwYWdlVHlwZUVudW0uQ0FUQUxPR106IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpbmFuY2VzUm91dGVyLnByb2R1Y3RzQ2F0YWxvZ1JvdXRlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBIb21lcGFnZVR5cGVFbnVtW0hvbWVwYWdlVHlwZUVudW0uSE9NRV06IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IEhvbWVSb3V0ZXIuaW5kZXhSb3V0ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGludGVyZmFjZSBJUG9pbnQge1xyXG4gICAgeDogbnVtYmVyO1xyXG4gICAgeTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMaW5lIHtcclxuICAgIHAxOiBJUG9pbnQ7XHJcbiAgICBwMjogSVBvaW50O1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaGFwZVR5cGUge1xyXG4gICAgU0VMRUNURURfUE9JTlQsXHJcbiAgICBSRUNUQU5HTEUsXHJcbiAgICBDSVJDTEUsXHJcbiAgICBQT0xZR09OXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNoYXBlRHJhd2luZ01vZGUge1xyXG4gICAgRURJVCxcclxuICAgIE9SRElOQVJZLFxyXG4gICAgU0VMRUNURUQsXHJcbiAgICBDT1JSRUNULFxyXG4gICAgV1JPTkdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU2hhcGUge1xyXG4gICAgdHlwZTogc3RyaW5nO1xyXG5cclxuICAgIGRyYWdnaW5nOiBib29sZWFuO1xyXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgZHJhdyhjb250ZXh0OiBhbnksIHNoYXBlRHJhd2luZ01vZGU6IFNoYXBlRHJhd2luZ01vZGUpO1xyXG4gICAgaXNQb2ludEluc2lkZShwb2ludDogSVBvaW50KTogYm9vbGVhbjtcclxuICAgIG1vdmUoZFg6IG51bWJlciwgZFk6IG51bWJlcik6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RlZFBvaW50IGltcGxlbWVudHMgSVNoYXBlIHtcclxuICAgIHByaXZhdGUgc3RhdGljIElOVEVSTkFMX1JBRElVUzogbnVtYmVyID0gNTtcclxuICAgIHByaXZhdGUgc3RhdGljIEVYVEVSTkFMX1JBRElVUzogbnVtYmVyID0gMTA7XHJcblxyXG4gICAgcHVibGljIHR5cGUgPSBTaGFwZVR5cGVbU2hhcGVUeXBlLlNFTEVDVEVEX1BPSU5UXTtcclxuXHJcbiAgICBwdWJsaWMgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjZW50ZXJYOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY2VudGVyWTogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBkcmF3KGNvbnRleHQ6IGFueSwgc2hhcGVEcmF3aW5nTW9kZTogU2hhcGVEcmF3aW5nTW9kZSkge1xyXG4gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY29udGV4dC5hcmModGhpcy5jZW50ZXJYLCB0aGlzLmNlbnRlclksIFNlbGVjdGVkUG9pbnQuRVhURVJOQUxfUkFESVVTLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xyXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMDtcclxuICAgICAgICBpZiAoc2hhcGVEcmF3aW5nTW9kZSA9PSBTaGFwZURyYXdpbmdNb2RlLlNFTEVDVEVEKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMilcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAxKVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb250ZXh0LmZpbGwoKTtcclxuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG5cclxuICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIGNvbnRleHQuYXJjKHRoaXMuY2VudGVyWCwgdGhpcy5jZW50ZXJZLCBTZWxlY3RlZFBvaW50LklOVEVSTkFMX1JBRElVUywgMCwgMiAqIE1hdGguUEksIGZhbHNlKTtcclxuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDA7XHJcbiAgICAgICAgaWYgKHNoYXBlRHJhd2luZ01vZGUgPT0gU2hhcGVEcmF3aW5nTW9kZS5DT1JSRUNUKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gXCJyZ2IoOTMsMTc1LDExKVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEcmF3aW5nTW9kZSA9PSBTaGFwZURyYXdpbmdNb2RlLldST05HKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gXCJyZ2IoMjQ1LDEzMywxMDMpXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBcInJnYigyNDcsIDE3MSwgMTcpXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xyXG4gICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUG9pbnRJbnNpZGUocG9pbnQ6IElQb2ludCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coTWF0aC5hYnModGhpcy5jZW50ZXJYIC0gcG9pbnQueCksIDIpXHJcbiAgICAgICAgICAgICsgTWF0aC5wb3coTWF0aC5hYnModGhpcy5jZW50ZXJZIC0gcG9pbnQueSksIDIpKSA8IFNlbGVjdGVkUG9pbnQuRVhURVJOQUxfUkFESVVTO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlKGRYOiBudW1iZXIsIGRZOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNlbnRlclggKz0gZFg7XHJcbiAgICAgICAgdGhpcy5jZW50ZXJZICs9IGRZO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVjdGFuZ2xlIGltcGxlbWVudHMgSVNoYXBlIHtcclxuICAgIHB1YmxpYyB0eXBlID0gU2hhcGVUeXBlW1NoYXBlVHlwZS5SRUNUQU5HTEVdO1xyXG5cclxuICAgIHB1YmxpYyBkcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHRvcExlZnRYOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdG9wTGVmdFk6IG51bWJlcjtcclxuICAgIHB1YmxpYyB3aWR0aDogbnVtYmVyO1xyXG4gICAgcHVibGljIGhlaWdodDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBkcmF3KGNvbnRleHQ6IGFueSwgc2hhcGVEcmF3aW5nTW9kZTogU2hhcGVEcmF3aW5nTW9kZSkge1xyXG4gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY29udGV4dC5yZWN0KHRoaXMudG9wTGVmdFgsIHRoaXMudG9wTGVmdFksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDI7XHJcbiAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjMDAwMDAwJztcclxuICAgICAgICBpZiAoc2hhcGVEcmF3aW5nTW9kZSA9PSBTaGFwZURyYXdpbmdNb2RlLkVESVQpIHtcclxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbMTAsIDVdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYXBlRHJhd2luZ01vZGUgPT0gU2hhcGVEcmF3aW5nTW9kZS5TRUxFQ1RFRCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZURyYXdpbmdNb2RlID09IFNoYXBlRHJhd2luZ01vZGUuQ09SUkVDVCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFwicmdiKDkzLDE3NSwxMSwwLjUpXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZURyYXdpbmdNb2RlID09IFNoYXBlRHJhd2luZ01vZGUuV1JPTkcpIHtcclxuICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBcInJnYigyNDUsMTMzLDEwMywwLjUpXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBcInJnYmEoMTQyLCAyMTQsIDI1NSwgMC4zKVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb250ZXh0LmZpbGwoKTtcclxuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1BvaW50SW5zaWRlKHBvaW50OiBJUG9pbnQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcG9pbnQueCA+IHRoaXMudG9wTGVmdFggJiYgcG9pbnQueCA8IHRoaXMudG9wTGVmdFggKyB0aGlzLndpZHRoXHJcbiAgICAgICAgICAgICYmIHBvaW50LnkgPiB0aGlzLnRvcExlZnRZICYmIHBvaW50LnkgPCB0aGlzLnRvcExlZnRZICsgdGhpcy5oZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1vdmUoZFg6IG51bWJlciwgZFk6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudG9wTGVmdFggKz0gZFg7XHJcbiAgICAgICAgdGhpcy50b3BMZWZ0WSArPSBkWTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbm9ybWFsaXplKCkge1xyXG4gICAgICAgIGlmICh0aGlzLndpZHRoIDwgMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvcExlZnRYID0gdGhpcy50b3BMZWZ0WCArIHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLndpZHRoICogLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmhlaWdodCA8IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b3BMZWZ0WSA9IHRoaXMudG9wTGVmdFkgKyB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodCAqIC0xO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENpcmNsZSBpbXBsZW1lbnRzIElTaGFwZSB7XHJcbiAgICBwdWJsaWMgdHlwZSA9IFNoYXBlVHlwZVtTaGFwZVR5cGUuQ0lSQ0xFXTtcclxuXHJcbiAgICBwdWJsaWMgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjZW50ZXJYOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY2VudGVyWTogbnVtYmVyO1xyXG4gICAgcHVibGljIHJhZGl1czogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBkcmF3KGNvbnRleHQ6IGFueSwgc2hhcGVEcmF3aW5nTW9kZTogU2hhcGVEcmF3aW5nTW9kZSkge1xyXG4gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY29udGV4dC5hcmModGhpcy5jZW50ZXJYLCB0aGlzLmNlbnRlclksIHRoaXMucmFkaXVzLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xyXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMjtcclxuICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMwMDAwMDAnO1xyXG4gICAgICAgIGlmIChzaGFwZURyYXdpbmdNb2RlID09IFNoYXBlRHJhd2luZ01vZGUuRURJVCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFsxMCwgNV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhcGVEcmF3aW5nTW9kZSA9PSBTaGFwZURyYXdpbmdNb2RlLlNFTEVDVEVEKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRHJhd2luZ01vZGUgPT0gU2hhcGVEcmF3aW5nTW9kZS5DT1JSRUNUKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gXCJyZ2IoOTMsMTc1LDExLDAuNSlcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRHJhd2luZ01vZGUgPT0gU2hhcGVEcmF3aW5nTW9kZS5XUk9ORykge1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFwicmdiKDI0NSwxMzMsMTAzLDAuNSlcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFwicmdiYSgxNDIsIDIxNCwgMjU1LCAwLjMpXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xyXG4gICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUG9pbnRJbnNpZGUocG9pbnQ6IElQb2ludCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coTWF0aC5hYnModGhpcy5jZW50ZXJYIC0gcG9pbnQueCksIDIpXHJcbiAgICAgICAgICAgICsgTWF0aC5wb3coTWF0aC5hYnModGhpcy5jZW50ZXJZIC0gcG9pbnQueSksIDIpKSA8IHRoaXMucmFkaXVzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlKGRYOiBudW1iZXIsIGRZOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNlbnRlclggKz0gZFg7XHJcbiAgICAgICAgdGhpcy5jZW50ZXJZICs9IGRZO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUG9seWdvbiBpbXBsZW1lbnRzIElTaGFwZSB7XHJcbiAgICBwdWJsaWMgdHlwZSA9IFNoYXBlVHlwZVtTaGFwZVR5cGUuUE9MWUdPTl07XHJcblxyXG4gICAgcHVibGljIGRyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgcG9pbnRzOiBJUG9pbnRbXSA9IG5ldyBBcnJheTxJUG9pbnQ+KCk7XHJcbiAgICBwdWJsaWMgbGFzdFBvaW50OiBJUG9pbnQ7XHJcblxyXG4gICAgcHVibGljIGRyYXcoY29udGV4dDogYW55LCBzaGFwZURyYXdpbmdNb2RlOiBTaGFwZURyYXdpbmdNb2RlKSB7XHJcbiAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh0aGlzLnBvaW50c1swXS54LCB0aGlzLnBvaW50c1swXS55KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHRoaXMucG9pbnRzW2ldLngsIHRoaXMucG9pbnRzW2ldLnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhcGVEcmF3aW5nTW9kZSA9PSBTaGFwZURyYXdpbmdNb2RlLkVESVQgJiYgdGhpcy5sYXN0UG9pbnQpIHtcclxuICAgICAgICAgICAgY29udGV4dC5saW5lVG8odGhpcy5sYXN0UG9pbnQueCwgdGhpcy5sYXN0UG9pbnQueSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XHJcblxyXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMjtcclxuICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMwMDAwMDAnO1xyXG4gICAgICAgIGlmIChzaGFwZURyYXdpbmdNb2RlID09IFNoYXBlRHJhd2luZ01vZGUuRURJVCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFsxMCwgNV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNoYXBlRHJhd2luZ01vZGUgPT0gU2hhcGVEcmF3aW5nTW9kZS5TRUxFQ1RFRCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZURyYXdpbmdNb2RlID09IFNoYXBlRHJhd2luZ01vZGUuQ09SUkVDVCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFwicmdiKDkzLDE3NSwxMSwwLjUpXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZURyYXdpbmdNb2RlID09IFNoYXBlRHJhd2luZ01vZGUuV1JPTkcpIHtcclxuICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBcInJnYigyNDUsMTMzLDEwMywwLjUpXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBcInJnYmEoMTQyLCAyMTQsIDI1NSwgMC4zKVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb250ZXh0LmZpbGwoKTtcclxuXHJcbiAgICAgICAgY29udGV4dC5zdHJva2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNQb2ludEluc2lkZShwb2ludDogSVBvaW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgcG9pbnQgYXQgaW5maW5pdHksIHkgaXMgc2FtZSBhcyBwb2ludCBwXHJcbiAgICAgICAgbGV0IHRtcDogSVBvaW50ID0geyB4OiA5OTk5OSwgeTogcG9pbnQueSB9O1xyXG4gICAgICAgIGxldCBleGxpbmU6IElMaW5lID0geyBwMTogcG9pbnQsIHAyOiB0bXAgfTtcclxuICAgICAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIC8vIEZvcm1pbmcgYSBsaW5lIGZyb20gdHdvIGNvbnNlY3V0aXZlIHBvaW50cyBvZlxyXG4gICAgICAgICAgICAvLyBwb2x5Z29uXHJcbiAgICAgICAgICAgIGxldCBzaWRlOiBJTGluZSA9IHsgcDE6IHRoaXMucG9pbnRzW2ldLCBwMjogdGhpcy5wb2ludHNbKGkgKyAxKSAlIHRoaXMucG9pbnRzLmxlbmd0aF0gfTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbnRlcnNlY3Qoc2lkZSwgZXhsaW5lKSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHNpZGUgaXMgaW50ZXJzZWN0cyBleGxpbmVcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpcmVjdGlvbihzaWRlLnAxLCBwb2ludCwgc2lkZS5wMikgPT0gMClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vbkxpbmUoc2lkZSwgcG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gKGkgKyAxKSAlIHRoaXMucG9pbnRzLmxlbmd0aDtcclxuICAgICAgICB9IHdoaWxlIChpICE9IDApO1xyXG5cclxuICAgICAgICAvLyBXaGVuIGNvdW50IGlzIG9kZFxyXG4gICAgICAgIHJldHVybiBjb3VudCAlIDIgIT09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1vdmUoZFg6IG51bWJlciwgZFk6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucG9pbnRzLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgIHAueCArPSBkWDtcclxuICAgICAgICAgICAgcC55ICs9IGRZO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25MaW5lKGw6IElMaW5lLCBwOiBJUG9pbnQpIHtcclxuICAgICAgICByZXR1cm4gcC54IDw9IE1hdGgubWF4KGwucDEueCwgbC5wMi54KVxyXG4gICAgICAgICAgICAmJiBwLnggPj0gTWF0aC5taW4obC5wMS54LCBsLnAyLngpXHJcbiAgICAgICAgICAgICYmIChwLnkgPD0gTWF0aC5tYXgobC5wMS55LCBsLnAyLnkpXHJcbiAgICAgICAgICAgICAgICAmJiBwLnkgPj0gTWF0aC5taW4obC5wMS55LCBsLnAyLnkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRpcmVjdGlvbihhOiBJUG9pbnQsIGI6IElQb2ludCwgYzogSVBvaW50KSB7XHJcbiAgICAgICAgbGV0IHZhbCA9IChiLnkgLSBhLnkpICogKGMueCAtIGIueCkgLSAoYi54IC0gYS54KSAqIChjLnkgLSBiLnkpO1xyXG5cclxuICAgICAgICBpZiAodmFsID09IDApIHtcclxuICAgICAgICAgICAgLy8gQ29sbGluZWFyXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodmFsIDwgMCkge1xyXG4gICAgICAgICAgICAvLyBBbnRpLWNsb2Nrd2lzZSBkaXJlY3Rpb25cclxuICAgICAgICAgICAgcmV0dXJuIDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDbG9ja3dpc2UgZGlyZWN0aW9uXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0ludGVyc2VjdChsMTogSUxpbmUsIGwyOiBJTGluZSkge1xyXG4gICAgICAgIC8vIEZvdXIgZGlyZWN0aW9uIGZvciB0d28gbGluZXMgYW5kIHBvaW50cyBvZiBvdGhlciBsaW5lXHJcbiAgICAgICAgbGV0IGRpcjEgPSB0aGlzLmRpcmVjdGlvbihsMS5wMSwgbDEucDIsIGwyLnAxKTtcclxuICAgICAgICBsZXQgZGlyMiA9IHRoaXMuZGlyZWN0aW9uKGwxLnAxLCBsMS5wMiwgbDIucDIpO1xyXG4gICAgICAgIGxldCBkaXIzID0gdGhpcy5kaXJlY3Rpb24obDIucDEsIGwyLnAyLCBsMS5wMSk7XHJcbiAgICAgICAgbGV0IGRpcjQgPSB0aGlzLmRpcmVjdGlvbihsMi5wMSwgbDIucDIsIGwxLnAyKTtcclxuXHJcbiAgICAgICAgLy8gV2hlbiBpbnRlcnNlY3RpbmdcclxuICAgICAgICBpZiAoZGlyMSAhPSBkaXIyICYmIGRpcjMgIT0gZGlyNClcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIC8vIFdoZW4gcDIgb2YgbGluZTIgYXJlIG9uIHRoZSBsaW5lMVxyXG4gICAgICAgIGlmIChkaXIxID09IDAgJiYgdGhpcy5vbkxpbmUobDEsIGwyLnAxKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIC8vIFdoZW4gcDEgb2YgbGluZTIgYXJlIG9uIHRoZSBsaW5lMVxyXG4gICAgICAgIGlmIChkaXIyID09IDAgJiYgdGhpcy5vbkxpbmUobDEsIGwyLnAyKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIC8vIFdoZW4gcDIgb2YgbGluZTEgYXJlIG9uIHRoZSBsaW5lMlxyXG4gICAgICAgIGlmIChkaXIzID09IDAgJiYgdGhpcy5vbkxpbmUobDIsIGwxLnAxKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIC8vIFdoZW4gcDEgb2YgbGluZTEgYXJlIG9uIHRoZSBsaW5lMlxyXG4gICAgICAgIGlmIChkaXI0ID09IDAgJiYgdGhpcy5vbkxpbmUobDIsIGwxLnAyKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNjZW5lVXRpbHMge1xyXG4gICAgcHVibGljIHN0YXRpYyBzY2FsZVNlbGVjdGVkUG9pbnQoc2VsZWN0ZWRQb2ludDogU2VsZWN0ZWRQb2ludCwgc2NhbGVGYWN0b3I6IG51bWJlcik6IFNlbGVjdGVkUG9pbnQge1xyXG4gICAgICAgIGxldCBzY2FsZWRTZWxlY3RlZFBvaW50ID0gbmV3IFNlbGVjdGVkUG9pbnQoKTtcclxuICAgICAgICBzY2FsZWRTZWxlY3RlZFBvaW50LmNlbnRlclggPSBzZWxlY3RlZFBvaW50LmNlbnRlclggKiBzY2FsZUZhY3RvcjtcclxuICAgICAgICBzY2FsZWRTZWxlY3RlZFBvaW50LmNlbnRlclkgPSBzZWxlY3RlZFBvaW50LmNlbnRlclkgKiBzY2FsZUZhY3RvcjtcclxuICAgICAgICByZXR1cm4gc2NhbGVkU2VsZWN0ZWRQb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHNjYWxlUmVjdGFuZ2xlKHJlY3RhbmdsZTogUmVjdGFuZ2xlLCBzY2FsZUZhY3RvcjogbnVtYmVyKTogUmVjdGFuZ2xlIHtcclxuICAgICAgICBsZXQgc2NhbGVkUmVjdGFuZ2xlID0gbmV3IFJlY3RhbmdsZSgpO1xyXG4gICAgICAgIHNjYWxlZFJlY3RhbmdsZS50b3BMZWZ0WCA9IHJlY3RhbmdsZS50b3BMZWZ0WCAqIHNjYWxlRmFjdG9yO1xyXG4gICAgICAgIHNjYWxlZFJlY3RhbmdsZS50b3BMZWZ0WSA9IHJlY3RhbmdsZS50b3BMZWZ0WSAqIHNjYWxlRmFjdG9yO1xyXG4gICAgICAgIHNjYWxlZFJlY3RhbmdsZS53aWR0aCA9IHJlY3RhbmdsZS53aWR0aCAqIHNjYWxlRmFjdG9yO1xyXG4gICAgICAgIHNjYWxlZFJlY3RhbmdsZS5oZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0ICogc2NhbGVGYWN0b3I7XHJcbiAgICAgICAgcmV0dXJuIHNjYWxlZFJlY3RhbmdsZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHNjYWxlQ2lyY2xlKGNpcmNsZTogQ2lyY2xlLCBzY2FsZUZhY3RvcjogbnVtYmVyKTogQ2lyY2xlIHtcclxuICAgICAgICBsZXQgc2NhbGVkQ2lyY2xlID0gbmV3IENpcmNsZSgpO1xyXG4gICAgICAgIHNjYWxlZENpcmNsZS5jZW50ZXJYID0gY2lyY2xlLmNlbnRlclggKiBzY2FsZUZhY3RvcjtcclxuICAgICAgICBzY2FsZWRDaXJjbGUuY2VudGVyWSA9IGNpcmNsZS5jZW50ZXJZICogc2NhbGVGYWN0b3I7XHJcbiAgICAgICAgc2NhbGVkQ2lyY2xlLnJhZGl1cyA9IGNpcmNsZS5yYWRpdXMgKiBzY2FsZUZhY3RvcjtcclxuICAgICAgICByZXR1cm4gc2NhbGVkQ2lyY2xlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgc2NhbGVQb2x5Z29uKHBvbHlnb246IFBvbHlnb24sIHNjYWxlRmFjdG9yOiBudW1iZXIpOiBQb2x5Z29uIHtcclxuICAgICAgICBsZXQgc2NhbGVkUG9seWdvbiA9IG5ldyBQb2x5Z29uKCk7XHJcbiAgICAgICAgc2NhbGVkUG9seWdvbi5wb2ludHMgPSBwb2x5Z29uLnBvaW50cy5tYXAocCA9PiB0aGlzLnNjYWxlUG9pbnQocCwgc2NhbGVGYWN0b3IpKTtcclxuICAgICAgICByZXR1cm4gc2NhbGVkUG9seWdvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHNjYWxlUG9pbnQocG9pbnQ6IElQb2ludCwgc2NhbGVGYWN0b3I6IG51bWJlcik6IElQb2ludCB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgeDogcG9pbnQueCAqIHNjYWxlRmFjdG9yLFxyXG4gICAgICAgICAgICB5OiBwb2ludC55ICogc2NhbGVGYWN0b3JcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgc2NhbGVTaGFwZXMoc2hhcGVzOiBJU2hhcGVbXSwgc2NhbGVGYWN0b3I6IG51bWJlcik6IElTaGFwZVtdIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgc2hhcGUgb2Ygc2hhcGVzKSB7XHJcbiAgICAgICAgICAgIGlmIChzaGFwZS50eXBlID09IFNoYXBlVHlwZVtTaGFwZVR5cGUuUkVDVEFOR0xFXSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goU2NlbmVVdGlscy5zY2FsZVJlY3RhbmdsZSg8UmVjdGFuZ2xlPiBzaGFwZSwgc2NhbGVGYWN0b3IpKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZS50eXBlID09IFNoYXBlVHlwZVtTaGFwZVR5cGUuQ0lSQ0xFXSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goU2NlbmVVdGlscy5zY2FsZUNpcmNsZSg8Q2lyY2xlPiBzaGFwZSwgc2NhbGVGYWN0b3IpKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZS50eXBlID09IFNoYXBlVHlwZVtTaGFwZVR5cGUuUE9MWUdPTl0pIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFNjZW5lVXRpbHMuc2NhbGVQb2x5Z29uKDxQb2x5Z29uPiBzaGFwZSwgc2NhbGVGYWN0b3IpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TW91c2VDb29yZHMgPSAoY2FudmFzLCBldmVudCkgPT4ge1xyXG4gICAgICAgIGxldCBjYW52YXNDb29yZHMgPSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgeDogZXZlbnQuY2xpZW50WCAtIGNhbnZhc0Nvb3Jkcy5sZWZ0LFxyXG4gICAgICAgICAgICB5OiBldmVudC5jbGllbnRZIC0gY2FudmFzQ29vcmRzLnRvcFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBzZXJpYWxpemVTaGFwZXMoc2hhcGVzVG9TZXJpYWxpemU6IElTaGFwZVtdKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgc2hhcGVzID0gc2hhcGVzVG9TZXJpYWxpemUubWFwKHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocy50eXBlID09IFNoYXBlVHlwZVtTaGFwZVR5cGUuUkVDVEFOR0xFXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9wTGVmdFg6ICg8UmVjdGFuZ2xlPnMpLnRvcExlZnRYLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcExlZnRZOiAoPFJlY3RhbmdsZT5zKS50b3BMZWZ0WSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogKDxSZWN0YW5nbGU+cykud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAoPFJlY3RhbmdsZT5zKS5oZWlnaHRcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocy50eXBlID09IFNoYXBlVHlwZVtTaGFwZVR5cGUuQ0lSQ0xFXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyWDogKDxDaXJjbGU+cykuY2VudGVyWCxcclxuICAgICAgICAgICAgICAgICAgICBjZW50ZXJZOiAoPENpcmNsZT5zKS5jZW50ZXJZLFxyXG4gICAgICAgICAgICAgICAgICAgIHJhZGl1czogKDxDaXJjbGU+cykucmFkaXVzXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMudHlwZSA9PSBTaGFwZVR5cGVbU2hhcGVUeXBlLlBPTFlHT05dKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHMudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBwb2ludHM6ICg8UG9seWdvbj5zKS5wb2ludHMubWFwKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB4OiBwLngsIHk6IHAueSB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2hhcGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGxvYWRTaGFwZXMoanNvbkRhdGE6IHN0cmluZyk6IElTaGFwZVtdIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcbiAgICAgICAgbGV0IHNoYXBlcyA9IGpzb25EYXRhXHJcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShqc29uRGF0YSlcclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIGlmIChzaGFwZXMpIHtcclxuICAgICAgICAgICAgc2hhcGVzLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocy50eXBlID09PSBTaGFwZVR5cGVbU2hhcGVUeXBlLlJFQ1RBTkdMRV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVjdGFuZ2xlID0gbmV3IFJlY3RhbmdsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZS50b3BMZWZ0WCA9IHMudG9wTGVmdFg7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlLnRvcExlZnRZID0gcy50b3BMZWZ0WTtcclxuICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGUud2lkdGggPSBzLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgPSBzLmhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChyZWN0YW5nbGUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzLnR5cGUgPT09IFNoYXBlVHlwZVtTaGFwZVR5cGUuQ0lSQ0xFXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaXJjbGUgPSBuZXcgQ2lyY2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2lyY2xlLmNlbnRlclggPSBzLmNlbnRlclg7XHJcbiAgICAgICAgICAgICAgICAgICAgY2lyY2xlLmNlbnRlclkgPSBzLmNlbnRlclk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnJhZGl1cyA9IHMucmFkaXVzO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNpcmNsZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMudHlwZSA9PT0gU2hhcGVUeXBlW1NoYXBlVHlwZS5QT0xZR09OXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb2x5Z29uID0gbmV3IFBvbHlnb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBwb2x5Z29uLnBvaW50cyA9IHMucG9pbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBvbHlnb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgS2V5cyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEVTQ0FQRTogbnVtYmVyID0gMjc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEVOVEVSOiBudW1iZXIgPSAxMztcclxufSIsImltcG9ydCB7QXV0aFJvdXRlcn0gZnJvbSBcIi4uL3VybHMvQXV0aFJvdXRlclwiO1xyXG5pbXBvcnQge01haW5Sb3V0ZXJ9IGZyb20gXCIuLi91cmxzL01haW5Sb3V0ZXJcIjtcclxuZXhwb3J0IGNsYXNzIExvY2F0aW9uQ2hhbmdlSGVscGVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgaXNFbmFibGVQcmV2ZW50TG9jYXRpb25DaGFuZ2UobmV3TG9jYXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChuZXdMb2NhdGlvbiAmJiAobmV3TG9jYXRpb24uaW5kZXhPZihNYWluUm91dGVyLm1haW5Sb3V0ZSkgIT0gLTEgfHwgbmV3TG9jYXRpb24uaW5kZXhPZihBdXRoUm91dGVyLmFjY2Vzc0RlbmllZFJvdXRlKSAhPSAtMSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufSIsImltcG9ydCB7TWVudUhlbHBlcn0gZnJvbSBcIi4vTWVudUhlbHBlclwiO1xyXG5pbXBvcnQge01hdGVyaWFsc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTWF0ZXJpYWxzUm91dGVyXCI7XHJcbmltcG9ydCB7U3RhdGlzdGljc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvU3RhdGlzdGljc1JvdXRlclwiO1xyXG5pbXBvcnQge05ld3NSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL05ld3NSb3V0ZXJcIjtcclxuaW1wb3J0IHtJbmZvUm91dGVyfSBmcm9tIFwiLi4vdXJscy9JbmZvUm91dGVyXCI7XHJcbmltcG9ydCB7VXNlcnNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1VzZXJzUm91dGVyXCI7XHJcbmltcG9ydCB7Q291cnNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ291cnNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0xlYXJuaW5nUGF0aHNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0xlYXJuaW5nUGF0aHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtRdWl6emVzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9RdWl6emVzUm91dGVyXCI7XHJcbmltcG9ydCB7UGVyc29uYWxSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1BlcnNvbmFsUm91dGVyXCI7XHJcbmltcG9ydCB7U3lzdGVtU2V0dGluZ3NSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1N5c3RlbVNldHRpbmdzUm91dGVyXCI7XHJcbmltcG9ydCB7TG9nc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvTG9nc1JvdXRlclwiO1xyXG5pbXBvcnQge0pvYnNSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0pvYnNSb3V0ZXJcIjtcclxuaW1wb3J0IHtSZWZlcmVuY2VSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL1JlZmVyZW5jZVJvdXRlclwiO1xyXG5pbXBvcnQge01haW5Sb3V0ZXJ9IGZyb20gXCIuLi91cmxzL01haW5Sb3V0ZXJcIjtcclxuaW1wb3J0IHtDZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQ2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5nc1NlcnZpY2VcIjtcclxuaW1wb3J0IHtBc3Nlc3NtZW50c1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvQXNzZXNzbWVudHNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJU3lzdGVtUGVybWlzc2lvbnN9IGZyb20gXCIuLi9zZWN1cml0eS9wZXJtaXNzaW9ucy9JU3lzdGVtUGVybWlzc2lvbnNcIjtcclxuaW1wb3J0IHtCdXNpbmVzc1VuaXRzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9CdXNpbmVzc1VuaXRzUm91dGVyXCI7XHJcbmltcG9ydCB7Tm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9Ob3RpZmljYXRpb25UZW1wbGF0ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtGaW5hbmNlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvRmluYW5jZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtJbXBvcnRSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0ltcG9ydFJvdXRlclwiO1xyXG5pbXBvcnQge0V4dGVybmFsUmVzb3VyY2VzUm91dGVyfSBmcm9tIFwiLi4vdXJscy9FeHRlcm5hbFJlc291cmNlc1JvdXRlclwiO1xyXG5pbXBvcnQge0hvbWVSb3V0ZXJ9IGZyb20gXCIuLi91cmxzL0hvbWVSb3V0ZXJcIjtcclxuaW1wb3J0IHtVc2VyUm9sZX0gZnJvbSBcIi4uL3VzZXJzL21vZGVscy9Vc2VyUm9sZVwiO1xyXG5pbXBvcnQge0lNZW51SXRlbVNldHRpbmdzfSBmcm9tIFwiLi4vYnVzaW5lc3NVbml0cy9tb2RlbHMvSU1lbnVJdGVtU2V0dGluZ3NcIjtcclxuaW1wb3J0IHtTbGlkZVRlbXBsYXRlc1JvdXRlcn0gZnJvbSBcIi4uL3VybHMvU2xpZGVUZW1wbGF0ZXNSb3V0ZXJcIjtcclxuaW1wb3J0IHtBcHBQcm9wZXJ0aWVzfSBmcm9tIFwiLi9BcHBQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7R2FtaWZpY2F0aW9uUm91dGVyfSBmcm9tIFwiLi4vdXJscy9HYW1pZmljYXRpb25Sb3V0ZXJcIjtcclxuXHJcbmludGVyZmFjZSBJTWVudUl0ZW0ge1xyXG4gICAga2V5Pzogc3RyaW5nO1xyXG4gICAgbmFtZT86IHN0cmluZztcclxuICAgIHVybD86IHN0cmluZztcclxuICAgIHByZXZpZXdVcmw/OiBzdHJpbmc7XHJcbiAgICB1cmxGdW5jPzogRnVuY3Rpb247XHJcbiAgICByb3V0ZVBhcmFtS2V5Pzogc3RyaW5nO1xyXG4gICAgYWxsb3dlZD86IGJvb2xlYW47XHJcbiAgICBhbGxvd0Z1bmM/OiAocCkgPT4gYm9vbGVhbjtcclxuICAgIGl0ZW1zPzogQXJyYXk8SU1lbnVJdGVtPjtcclxufVxyXG5cclxuaW50ZXJmYWNlIElNZW51R3JvdXAge1xyXG4gICAga2V5Pzogc3RyaW5nO1xyXG4gICAgaW1nS2V5Pzogc3RyaW5nO1xyXG4gICAgbmFtZT86IHN0cmluZztcclxuICAgIHVybD86IHN0cmluZztcclxuICAgIGl0ZW1zPzogQXJyYXk8SU1lbnVJdGVtPjtcclxuICAgIGFsbG93ZWQ/OiBib29sZWFuO1xyXG4gICAgYWxsb3dlZEZvclN5c3RlbT86IGJvb2xlYW47XHJcbiAgICBkeW5hbWljVXJsPzogYm9vbGVhbjtcclxuICAgIGhhc093bkhvbWVJdGVtPzogYm9vbGVhbjtcclxuICAgIGluY2x1ZGVCcmVhZGNydW1ic1BhZ2VOYW1lPzogYm9vbGVhbjsgIC8vIGZhbHNlID0gZG8gbm90IGluY2x1ZGUgUGFnZUhlYWRlci5wYWdlTmFtZSBpbiBicmVhZGNydW1ic1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWVudUNvbmZpZ3VyYXRvclNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1dGlscy5NZW51Q29uZmlndXJhdG9yU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcclxuICAgICAgICBNYXRlcmlhbHNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBTdGF0aXN0aWNzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgTmV3c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEluZm9Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBVc2Vyc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIENvdXJzZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMZWFybmluZ1BhdGhzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgUXVpenplc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFBlcnNvbmFsUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU3lzdGVtU2V0dGluZ3NSb3V0ZXIuTkFNRSxcclxuICAgICAgICBMb2dzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgSm9ic1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFJlZmVyZW5jZVJvdXRlci5OQU1FLFxyXG4gICAgICAgIE1haW5Sb3V0ZXIuTkFNRSxcclxuICAgICAgICBDZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIFNldHRpbmdzU2VydmljZS5OQU1FLFxyXG4gICAgICAgIEFzc2Vzc21lbnRzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgQnVzaW5lc3NVbml0c1JvdXRlci5OQU1FLFxyXG4gICAgICAgIE5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlci5OQU1FLFxyXG4gICAgICAgIEZpbmFuY2VzUm91dGVyLk5BTUUsXHJcbiAgICAgICAgSW1wb3J0Um91dGVyLk5BTUUsXHJcbiAgICAgICAgRXh0ZXJuYWxSZXNvdXJjZXNSb3V0ZXIuTkFNRSxcclxuICAgICAgICBIb21lUm91dGVyLk5BTUUsXHJcbiAgICAgICAgR2FtaWZpY2F0aW9uUm91dGVyLk5BTUUsXHJcbiAgICAgICAgU2xpZGVUZW1wbGF0ZXNSb3V0ZXIuTkFNRVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1hdGVyaWFsc1JvdXRlcjogTWF0ZXJpYWxzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aXN0aWNzUm91dGVyOiBTdGF0aXN0aWNzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBuZXdzUm91dGVyOiBOZXdzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBpbmZvUm91dGVyOiBJbmZvUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1c2Vyc1JvdXRlcjogVXNlcnNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvdXJzZXNSb3V0ZXI6IENvdXJzZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGxlYXJuaW5nUGF0aHNSb3V0ZXI6IExlYXJuaW5nUGF0aHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHF1aXp6ZXNSb3V0ZXI6IFF1aXp6ZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHBlcnNvbmFsUm91dGVyOiBQZXJzb25hbFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgc3lzdGVtU2V0dGluZ3NSb3V0ZXI6IFN5c3RlbVNldHRpbmdzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsb2dzUm91dGVyOiBMb2dzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBqb2JzUm91dGVyOiBKb2JzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWZlcmVuY2VSb3V0ZXI6IFJlZmVyZW5jZVJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWFpblJvdXRlcjogTWFpblJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2VydGlmaWNhdGVUZW1wbGF0ZXNSb3V0ZXI6IENlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXNzZXNzbWVudHNSb3V0ZXI6IEFzc2Vzc21lbnRzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1VuaXRSb3V0ZXI6IEJ1c2luZXNzVW5pdHNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblRlbXBsYXRlc1JvdXRlcjogTm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbmNlc1JvdXRlcjogRmluYW5jZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGltcG9ydFJvdXRlcjogSW1wb3J0Um91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBleHRlcm5hbFJvdXRlcjogRXh0ZXJuYWxSZXNvdXJjZXNSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGhvbWVSb3V0ZXI6IEhvbWVSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGdhbWlmaWNhdGlvblJvdXRlcjogR2FtaWZpY2F0aW9uUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzbGlkZVRlbXBsYXRlc1JvdXRlcjogU2xpZGVUZW1wbGF0ZXNSb3V0ZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0b2RvOiBmaWxsIGFsbG93ZWQgZmllbGRzXHJcbiAgICBwdWJsaWMgZ2V0SG9tZU1lbnVCeVJvbGUoYXV0aGVudGljYXRlZDogYm9vbGVhbiwgdXNlckJ1c2luZXNzUm9sZTogc3RyaW5nLCBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zKTogSU1lbnVHcm91cCB7XHJcbiAgICAgICAgbGV0IGxlYXJuZXJNZW51R3JvdXA6IElNZW51R3JvdXAgPSB7XHJcbiAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0lOREVYX0tFWSxcclxuICAgICAgICAgICAgbmFtZTogXCJIb21lXCIsXHJcbiAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLmluZGV4VXJsKCksXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfQ09VUlNFU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb3Vyc2VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuaG9tZVJvdXRlci5jb3Vyc2VzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0xFQVJOSU5HX1BBVEhfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTGVhcm5pbmcgUGF0aHNcIixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLmxlYXJuaW5nUGF0aHNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfTUFURVJJQUxTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk1hdGVyaWFsc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmhvbWVSb3V0ZXIubWF0ZXJpYWxzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0ZMQVNIQ0FSRFNfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRmxhc2hjYXJkc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmhvbWVSb3V0ZXIuZmxhc2hjYXJkc1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuSE9NRV9SRVBPUlRTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlJlcG9ydHNcIixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLnJlcG9ydHNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgYWRtaW5pc3RyYXRvck1lbnVHcm91cDogSU1lbnVHcm91cCA9IHtcclxuICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfSU5ERVhfS0VZLFxyXG4gICAgICAgICAgICBuYW1lOiBcIkhvbWVcIixcclxuICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmhvbWVSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuSE9NRV9BRE1JTklTVFJBVElPTl9NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLmFkbWluaXN0cmF0aW9uTWVudVVybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuSE9NRV9BRE1JTklTVFJBVElPTl9SRVBPUlRTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlJlcG9ydHNcIixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdNeUFuYWx5dGljcyxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuaG9tZVJvdXRlci5hZG1pbmlzdHJhdGlvblJlcG9ydHNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBhdHRlbmRlZU1hbmFnZXJHcm91cDogSU1lbnVHcm91cCA9IHtcclxuICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfSU5ERVhfS0VZLFxyXG4gICAgICAgICAgICBuYW1lOiBcIkhvbWVcIixcclxuICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmhvbWVSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuSE9NRV9BVFRFTkRFRV9NQU5BR0VSX1BBUlRJQ0lQQU5UU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJQcm9ncmVzc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmhvbWVSb3V0ZXIucGFydGljaXBhbnRzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0FUVEVOREVFX01BTkFHRVJfQ09VUlNFU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb3Vyc2VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuaG9tZVJvdXRlci5hdHRlbmRlZU1hbmFnZXJDb3Vyc2VzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0FUVEVOREVFX01BTkFHRVJfTEVBUk5JTkdfUEFUSFNfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTGVhcm5pbmcgUGF0aHNcIixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLmF0dGVuZGVlTWFuYWdlckxlYXJuaW5nUGF0aHNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfQVRURU5ERUVfTUFOQUdFUl9VU0VSU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJVc2Vyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld1VzZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy51c2Vyc1JvdXRlci5pbmRleFVybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuSE9NRV9BVFRFTkRFRV9NQU5BR0VSX1JFUE9SVFNfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiUmVwb3J0c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld015QW5hbHl0aWNzLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLmF0dGVuZGVlTWFuYWdlclJlcG9ydHNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBpbnN0cnVjdG9yR3JvdXA6IElNZW51R3JvdXAgPSB7XHJcbiAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0lOREVYX0tFWSxcclxuICAgICAgICAgICAgbmFtZTogXCJIb21lXCIsXHJcbiAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLmluZGV4VXJsKCksXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfSU5TVFJVQ1RPUl9DT1VSU0VTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvdXJzZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLmluc3RydWN0b3JDb3Vyc2VzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0lOU1RSVUNUT1JfTEVBUk5JTkdfUEFUSFNfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTGVhcm5pbmcgUGF0aHNcIixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLmluc3RydWN0b3JMZWFybmluZ1BhdGhzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0lOU1RSVUNUT1JfQVNTRVNTTUVOVFNfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQXNzZXNzbWVudHNcIixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIChzeXN0ZW1QZXJtaXNzaW9ucy5zY29yZUFzc2Vzc21lbnRzIHx8IHN5c3RlbVBlcm1pc3Npb25zLnNjb3JlQW55QXNzZXNzbWVudHMpLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5hc3Nlc3NtZW50c1JvdXRlci5hc3Nlc3NtZW50c1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuSE9NRV9JTlNUUlVDVE9SX1BBUlRJQ0lQQU5UU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJQcm9ncmVzc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmhvbWVSb3V0ZXIucGFydGljaXBhbnRzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0lOU1RSVUNUT1JfUkVQT1JUU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJSZXBvcnRzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3TXlBbmFseXRpY3MsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmhvbWVSb3V0ZXIuaW5zdHJ1Y3RvclJlcG9ydHNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBhdXRob3JHcm91cDogSU1lbnVHcm91cCA9IHtcclxuICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfSU5ERVhfS0VZLFxyXG4gICAgICAgICAgICBuYW1lOiBcIkhvbWVcIixcclxuICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmhvbWVSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuSE9NRV9BVVRIT1JfQ09VUlNFU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb3Vyc2VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuaG9tZVJvdXRlci5hdXRob3JDb3Vyc2VzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0FVVEhPUl9MRUFSTklOR19QQVRIX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkxlYXJuaW5nIFBhdGhzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuaG9tZVJvdXRlci5hdXRob3JMZWFybmluZ1BhdGhzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0FVVEhPUl9RVUlaWkVTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlF1aXp6ZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLmF1dGhvclF1aXp6ZXNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfQVVUSE9SX1NVUlZFWVNfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3VydmV5c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmhvbWVSb3V0ZXIuYXV0aG9yU3VydmV5c1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuSE9NRV9BVVRIT1JfRkxBU0hDQVJEU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJGbGFzaGNhcmRzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuaG9tZVJvdXRlci5hdXRob3JGbGFzaGNhcmRzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5IT01FX0FVVEhPUl9NQVRFUklBTFNfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTWF0ZXJpYWxzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuaG9tZVJvdXRlci5hdXRob3JNYXRlcmlhbHNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfQVVUSE9SX1JFUE9SVFNfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiUmVwb3J0c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmhvbWVSb3V0ZXIuYXV0aG9yUmVwb3J0c1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXNlclJvbGVcclxuICAgICAgICBzd2l0Y2ggKHVzZXJCdXNpbmVzc1JvbGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIkFETUlOSVNUUkFUT1JcIjoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkbWluaXN0cmF0b3JNZW51R3JvdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIklOU1RSVUNUT1JcIjoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydWN0b3JHcm91cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiQVRURU5ERUVfTUFOQUdFUlwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXR0ZW5kZWVNYW5hZ2VyR3JvdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkFVVEhPUlwiOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yR3JvdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIkxFQVJORVJcIjoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlYXJuZXJNZW51R3JvdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlYXJuZXJNZW51R3JvdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFsbEhvbWVNZW51KGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4sIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnMpOiBBcnJheTxJTWVudUdyb3VwPiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBBcnJheTxJTWVudUdyb3VwPiA9IFtdO1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2V0SG9tZU1lbnVCeVJvbGUoYXV0aGVudGljYXRlZCwgVXNlclJvbGVbVXNlclJvbGUuQURNSU5JU1RSQVRPUl0sIHN5c3RlbVBlcm1pc3Npb25zKSk7XHJcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5nZXRIb21lTWVudUJ5Um9sZShhdXRoZW50aWNhdGVkLCBVc2VyUm9sZVtVc2VyUm9sZS5JTlNUUlVDVE9SXSwgc3lzdGVtUGVybWlzc2lvbnMpKTtcclxuICAgICAgICByZXN1bHQucHVzaCh0aGlzLmdldEhvbWVNZW51QnlSb2xlKGF1dGhlbnRpY2F0ZWQsIFVzZXJSb2xlW1VzZXJSb2xlLkFUVEVOREVFX01BTkFHRVJdLCBzeXN0ZW1QZXJtaXNzaW9ucykpO1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2V0SG9tZU1lbnVCeVJvbGUoYXV0aGVudGljYXRlZCwgVXNlclJvbGVbVXNlclJvbGUuQVVUSE9SXSwgc3lzdGVtUGVybWlzc2lvbnMpKTtcclxuICAgICAgICByZXN1bHQucHVzaCh0aGlzLmdldEhvbWVNZW51QnlSb2xlKGF1dGhlbnRpY2F0ZWQsIFVzZXJSb2xlW1VzZXJSb2xlLkxFQVJORVJdLCBzeXN0ZW1QZXJtaXNzaW9ucykpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFkbWluaXN0cmF0aW9uTWVudShhdXRoZW50aWNhdGVkOiBib29sZWFuLCBzeXN0ZW1QZXJtaXNzaW9uczogSVN5c3RlbVBlcm1pc3Npb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNBbGxCdXNpbmVzc1VuaXRzOiBib29sZWFuLCBidXNpbmVzc1VuaXRJZDogbnVtYmVyKTogSU1lbnVHcm91cCB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfQURNSU5JU1RSQVRJT05fTUVOVV9LRVksXHJcbiAgICAgICAgICAgIG5hbWU6ICdNZW51JyxcclxuICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoXHJcbiAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3VXNlcnMgfHxcclxuICAgICAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdHcm91cHMgfHxcclxuICAgICAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zLmVkaXRTdG9yYWdlUGxhY2VzIHx8XHJcbiAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3UmVmZXJlbmNlRGF0YSB8fFxyXG4gICAgICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnMudmlld1N5c3RlbUxvZyB8fFxyXG4gICAgICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnMuZWRpdFN5c3RlbUNvbmZpZ3VyYXRpb24gfHxcclxuICAgICAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdTZWN1cml0eUxvZyB8fFxyXG4gICAgICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnMudmlld0FueUxlYXJuaW5nT2JqZWN0IHx8XHJcbiAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlCdXNpbmVzc1VuaXQgfHxcclxuICAgICAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zLmNvbmZpZ3VyZUJ1c2luZXNzVW5pdFNldHRpbmdzIHx8XHJcbiAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy5lZGl0Tm90aWZpY2F0aW9uVGVtcGxhdGVzIHx8XHJcbiAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy5pbXBvcnRJbmZvcm1hdGlvbiB8fFxyXG4gICAgICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnMudmlld0NlcnRpZmljYXRlVGVtcGxhdGVzXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5ob21lUm91dGVyLmFkbWluaXN0cmF0aW9uTWVudVVybCgpLFxyXG4gICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9MRUFSTklOR19DT05URU5UX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTGVhcm5pbmcgQ29udGVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdVcmw6ICd0aGVtZXMvZGVmYXVsdC9pbWcvaWNvbnMvYWRtaW4tbWVudS1sZWFybmluZy1jb250ZW50LnN2ZycsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuRURVQ0FUSU9OX0NPVVJTRVNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvdXJzZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuY291cnNlc1JvdXRlci5pbmRleFVybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5FRFVDQVRJT05fTEVBUk5JTkdfUEFUSFNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkxlYXJuaW5nIFBhdGhzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmxlYXJuaW5nUGF0aHNSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuRURVQ0FUSU9OX1FVSVpaRVNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlF1aXp6ZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMucXVpenplc1JvdXRlci5xdWl6emVzSW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuRURVQ0FUSU9OX1NVUlZFWVNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN1cnZleXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMucXVpenplc1JvdXRlci5zdXJ2ZXlzSW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuRURVQ0FUSU9OX0ZMQVNIQ0FSRFNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkZsYXNoY2FyZHNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMucXVpenplc1JvdXRlci5mbGFzaGNhcmRzSW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuRURVQ0FUSU9OX01BVEVSSUFMU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTWF0ZXJpYWxzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLm1hdGVyaWFsc1JvdXRlci5pbmRleFVybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU1lTVEVNX0RJQ1RJT05BUklFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcmllc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5yZWZlcmVuY2VSb3V0ZXIuaW5kZXhVcmwoXCJsYW5ndWFnZXNcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1VybDogJ3RoZW1lcy9kZWZhdWx0L2ltZy9pY29ucy9hZG1pbi1tZW51LWRpY3Rpb25hcmllcy5zdmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld1JlZmVyZW5jZURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9URU1QTEFURV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZW1wbGF0ZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3VXJsOiAndGhlbWVzL2RlZmF1bHQvaW1nL2ljb25zL2FkbWluLW1lbnUtY2VydGlmaWNhdGUuc3ZnJyxcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIChzeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW55TGVhcm5pbmdPYmplY3QgfHwgc3lzdGVtUGVybWlzc2lvbnMudmlld0NlcnRpZmljYXRlVGVtcGxhdGVzKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fQ0VSVElGSUNBVEVfVEVNUExBVEVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDZXJ0aWZpY2F0ZSBUZW1wbGF0ZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5jZXJ0aWZpY2F0ZVRlbXBsYXRlc1JvdXRlci5pbmRleFVybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoc3lzdGVtUGVybWlzc2lvbnMudmlld0FueUxlYXJuaW5nT2JqZWN0IHx8IHN5c3RlbVBlcm1pc3Npb25zLnZpZXdDZXJ0aWZpY2F0ZVRlbXBsYXRlcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX1NMSURFX1RFTVBMQVRFX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2xpZGUgVGVtcGxhdGVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuc2xpZGVUZW1wbGF0ZXNSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld0FueUxlYXJuaW5nT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fQlVTSU5FU1NfVU5JVFNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCdXNpbmVzcyBVbml0c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5idXNpbmVzc1VuaXRSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3VXJsOiAndGhlbWVzL2RlZmF1bHQvaW1nL2ljb25zL2FkbWluLW1lbnUtYnVzaW5lc3MtdW5pdHMuc3ZnJyxcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIChzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlCdXNpbmVzc1VuaXQgfHwgc3lzdGVtUGVybWlzc2lvbnMuY29uZmlndXJlQnVzaW5lc3NVbml0U2V0dGluZ3MpLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5CVVNJTkVTU19VTklUX0dFTkVSQUxfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJHZW5lcmFsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuYnVzaW5lc3NVbml0Um91dGVyLmdlbmVyYWxVcmwoYnVzaW5lc3NVbml0SWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoc3lzdGVtUGVybWlzc2lvbnMubWFuYWdlQW55QnVzaW5lc3NVbml0IHx8IHN5c3RlbVBlcm1pc3Npb25zLmNvbmZpZ3VyZUJ1c2luZXNzVW5pdFNldHRpbmdzKSAmJiBidXNpbmVzc1VuaXRJZCAhPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5CVVNJTkVTU19VTklUX0JSQU5ESU5HX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnJhbmRpbmdcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5idXNpbmVzc1VuaXRSb3V0ZXIuYnJhbmRpbmdVcmwoYnVzaW5lc3NVbml0SWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoc3lzdGVtUGVybWlzc2lvbnMubWFuYWdlQW55QnVzaW5lc3NVbml0IHx8IHN5c3RlbVBlcm1pc3Npb25zLmNvbmZpZ3VyZUJ1c2luZXNzVW5pdFNldHRpbmdzKSAmJiBidXNpbmVzc1VuaXRJZCAhPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5CVVNJTkVTU19VTklUX1NVQlNDUklQVElPTl9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk1lbnUgaXRlbXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5idXNpbmVzc1VuaXRSb3V0ZXIubWVudUl0ZW1zVXJsKGJ1c2luZXNzVW5pdElkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgKHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUJ1c2luZXNzVW5pdCB8fCBzeXN0ZW1QZXJtaXNzaW9ucy5jb25maWd1cmVCdXNpbmVzc1VuaXRTZXR0aW5ncykgJiYgYnVzaW5lc3NVbml0SWQgIT0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQlVTSU5FU1NfVU5JVF9NRU5VX0lURU1TX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3Vic2NyaXB0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuYnVzaW5lc3NVbml0Um91dGVyLnN1YnNjcmlwdGlvblVybChidXNpbmVzc1VuaXRJZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIChzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlCdXNpbmVzc1VuaXQgfHwgc3lzdGVtUGVybWlzc2lvbnMuY29uZmlndXJlQnVzaW5lc3NVbml0U2V0dGluZ3MpICYmIGJ1c2luZXNzVW5pdElkICE9IG51bGwgJiYgQXBwUHJvcGVydGllcy5mcmVlUGxhbkxpbWl0cyA9PT0gJ3RydWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fVVNFUlNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJVc2Vyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy51c2Vyc1JvdXRlci5pbmRleFVybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdVcmw6ICd0aGVtZXMvZGVmYXVsdC9pbWcvaWNvbnMvYWRtaW4tbWVudS11c2VyLnN2ZycsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3VXNlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9HUk9VUFNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJVc2VyIEdyb3Vwc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy51c2Vyc1JvdXRlci5ncm91cHNJbmRleFVybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdVcmw6ICd0aGVtZXMvZGVmYXVsdC9pbWcvaWNvbnMvYWRtaW4tbWVudS11c2VyLWdyb3Vwcy5zdmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld0dyb3VwcyxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkhPTUVfSU5TVFJVQ1RPUl9BU1NFU1NNRU5UU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1VybDogJ3RoZW1lcy9kZWZhdWx0L2ltZy9pY29ucy9hZG1pbi1tZW51LWxlYXJuaW5nLWNvbnRlbnQuc3ZnJyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkFzc2Vzc21lbnRzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoc3lzdGVtUGVybWlzc2lvbnMuc2NvcmVBc3Nlc3NtZW50cyB8fCBzeXN0ZW1QZXJtaXNzaW9ucy5zY29yZUFueUFzc2Vzc21lbnRzKSxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuYXNzZXNzbWVudHNSb3V0ZXIuYXNzZXNzbWVudHNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFOQUxZVElDU19QT1dFUl9CSV9SRVBPUlRfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJBbmFseXRpY3NcIixcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuc3RhdGlzdGljc1JvdXRlci5wb3dlckJpUmVwb3J0VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1VybDogJ3RoZW1lcy9kZWZhdWx0L2ltZy9pY29ucy9hZG1pbi1tZW51LWFuYWx5dGljcy5zdmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld0FuYWx5dGljcyxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0lNUE9SVF9FWFBPUlRfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiSW1wb3J0IHwgRXhwb3J0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1VybDogJ3RoZW1lcy9kZWZhdWx0L2ltZy9pY29ucy9hZG1pbi1tZW51LWltcG9ydC5zdmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5pbXBvcnRSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLmltcG9ydEluZm9ybWF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fTk9USUZJQ0FUSU9OX1RFTVBMQVRFX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk5vdGlmaWNhdGlvbiBUZW1wbGF0ZXNcIixcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyLmluZGV4VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1VybDogJ3RoZW1lcy9kZWZhdWx0L2ltZy9pY29ucy9hZG1pbi1tZW51LW5vdGlmaWNhdGlvbi5zdmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMuZWRpdE5vdGlmaWNhdGlvblRlbXBsYXRlcyxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX1BST0dSRVNTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlByb2dyZXNzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuaG9tZVJvdXRlci5wYXJ0aWNpcGFudHNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3VXJsOiAndGhlbWVzL2RlZmF1bHQvaW1nL2ljb25zL2FkbWluLW1lbnUtcHJvZ3Jlc3Muc3ZnJyxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX1NZU1RFTV9NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN5c3RlbVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdVcmw6ICd0aGVtZXMvZGVmYXVsdC9pbWcvaWNvbnMvYWRtaW4tbWVudS1zeXN0ZW0uc3ZnJyxcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnMuZWRpdFN0b3JhZ2VQbGFjZXMgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHN5c3RlbVBlcm1pc3Npb25zLmVkaXRSZWZlcmVuY2VEYXRhICYmIGhhc0FsbEJ1c2luZXNzVW5pdHMpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUNyb25Kb2JzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zLmVkaXRTeXN0ZW1Db25maWd1cmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU1RPUkFHRV9QTEFDRVNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0b3JhZ2VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuc3lzdGVtU2V0dGluZ3NSb3V0ZXIuc3RvcmFnZVBsYWNlc0luZGV4VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLmVkaXRTdG9yYWdlUGxhY2VzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TWVNURU1fQlVORExFX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTeXN0ZW0gZmlsZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5zeXN0ZW1TZXR0aW5nc1JvdXRlci5zeXN0ZW1CdW5kbGVFZGl0VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLmVkaXRSZWZlcmVuY2VEYXRhICYmIGhhc0FsbEJ1c2luZXNzVW5pdHMsICAvL3RvZG86IHNlcGFyYXRlIHBlcm1pc3Npb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fQ1JPTl9KT0JTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQmFja2dyb3VuZCBKb2JzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuam9ic1JvdXRlci5qb2JzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUNyb25Kb2JzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TWVNURU1fU0VUVElOR19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN5c3RlbSBjb25maWd1cmF0aW9uc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnN5c3RlbVNldHRpbmdzUm91dGVyLnN5c3RlbVNldHRpbmdzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLmVkaXRTeXN0ZW1Db25maWd1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fTE9HU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkxvZ3NcIixcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3VXJsOiAndGhlbWVzL2RlZmF1bHQvaW1nL2ljb25zL2FkbWluLW1lbnUtbG9ncy5zdmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgKHN5c3RlbVBlcm1pc3Npb25zLnZpZXdTZWN1cml0eUxvZyB8fCBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3U3lzdGVtTG9nKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU1lTVEVNX0xPR1NfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTeXN0ZW0gTG9nc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmxvZ3NSb3V0ZXIuc3lzdGVtTG9nc1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3U3lzdGVtTG9nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TRUNVUklUWV9MT0dTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VjdXJpdHkgTG9nc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmxvZ3NSb3V0ZXIuc2VjdXJpdHlMb2dzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdTZWN1cml0eUxvZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fR0FNSUZJQ0FUSU9OX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHYW1pZmljYXRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdVcmw6ICd0aGVtZXMvZGVmYXVsdC9pbWcvaWNvbnMvYWRtaW4tbWVudS1nYW1pZmljYXRpb24uc3ZnJyxcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdBbnlMZWFybmluZ09iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fQkFER0VTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdCYWRnZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmdhbWlmaWNhdGlvblJvdXRlci5iYWRnZXNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld0FueUxlYXJuaW5nT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9HQU1FX1BST0dSQU1TX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIG5hbWU6ICdHYW1lIHByb2dyYW1zJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHVybDogJyMnICsgdGhpcy5nYW1pZmljYXRpb25Sb3V0ZXIucHJvZ3JhbXNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld0FueUxlYXJuaW5nT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBmaWxsTWVudUJ5UGVybWlzc2lvbnNJdGVtc0FycmF5KGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4sIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1BZG1pbmlzdHJhdG9yOiBib29sZWFuLCBCVVpvb21WaXNpYmlsaXR5OiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQWxsQnVzaW5lc3NVbml0czogYm9vbGVhbiwgdXNlckJ1c2luZXNzUm9sZTogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW1zQXZhaWxhYmlsaXR5OiBJTWVudUl0ZW1TZXR0aW5ncyk6IEFycmF5PElNZW51R3JvdXA+IHtcclxuICAgICAgICBsZXQgbWVudUJ5UGVybWlzc2lvbnM6IEFycmF5PElNZW51R3JvdXA+ID0gW1xyXG4gICAgICAgICAgICB0aGlzLmdldEhvbWVNZW51QnlSb2xlKGF1dGhlbnRpY2F0ZWQsIHVzZXJCdXNpbmVzc1JvbGUsIHN5c3RlbVBlcm1pc3Npb25zKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkNBVEFMT0dfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkNhdGFsb2dcIixcclxuICAgICAgICAgICAgICAgIGFsbG93ZWQ6IG1lbnVJdGVtc0F2YWlsYWJpbGl0eS5zaG93Q2F0YWxvZyxcclxuICAgICAgICAgICAgICAgIGFsbG93ZWRGb3JTeXN0ZW06IG1lbnVJdGVtc0F2YWlsYWJpbGl0eS5zaG93Q2F0YWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgIHx8IChzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCksXHJcbiAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuZmluYW5jZXNSb3V0ZXIucHJvZHVjdHNDYXRhbG9nVXJsKCksXHJcbiAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkVEVUNBVElPTl9DT1VSU0VTX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJDb3Vyc2VzXCIsXHJcbiAgICAgICAgICAgICAgICBhbGxvd2VkOiBtZW51SXRlbXNBdmFpbGFiaWxpdHkuc2hvd0NvdXJzZXMsXHJcbiAgICAgICAgICAgICAgICBhbGxvd2VkRm9yU3lzdGVtOiBtZW51SXRlbXNBdmFpbGFiaWxpdHkuc2hvd0NvdXJzZXNcclxuICAgICAgICAgICAgICAgICAgICB8fCAoc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMubWFuYWdlQW55TGVhcm5pbmdPYmplY3QpLFxyXG4gICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmNvdXJzZXNSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuRURVQ0FUSU9OX0xFQVJOSU5HX1BBVEhTX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJMZWFybmluZyBQYXRoc1wiLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dlZDogbWVudUl0ZW1zQXZhaWxhYmlsaXR5LnNob3dMZWFybmluZ1BhdGhzLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dlZEZvclN5c3RlbTogbWVudUl0ZW1zQXZhaWxhYmlsaXR5LnNob3dMZWFybmluZ1BhdGhzXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUxlYXJuaW5nT2JqZWN0KSxcclxuICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5sZWFybmluZ1BhdGhzUm91dGVyLmluZGV4VXJsKCksXHJcbiAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFOQUxZVElDU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQW5hbHl0aWNzXCIsXHJcbiAgICAgICAgICAgICAgICAvL2FsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgKHN5c3RlbVBlcm1pc3Npb25zLnZpZXdBbmFseXRpY3MgfHwgc3lzdGVtUGVybWlzc2lvbnMudmlld015QW5hbHl0aWNzKSxcclxuICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld0FuYWx5dGljcyxcclxuICAgICAgICAgICAgICAgIGR5bmFtaWNVcmw6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAga2V5OiBNZW51SGVscGVyLkFOQUxZVElDU19NQVRFUklBTF9TVEFUSVNUSUNTX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBuYW1lOiBcIk1hdGVyaWFsIFN0YXRpc3RpY3NcIixcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdXJsOiAnIycgKyB0aGlzLnN0YXRpc3RpY3NSb3V0ZXIubWF0ZXJpYWxWaWV3UmVwb3J0VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGFsbG93ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BTkFMWVRJQ1NfTUFURVJJQUxfVklFV19SRVBPUlRfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgbmFtZTogXCJUaGUgcmVwb3J0IG9uIG1hdGVyaWFsIHZpZXdzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnN0YXRpc3RpY3NSb3V0ZXIubWF0ZXJpYWxWaWV3UmVwb3J0VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoc3lzdGVtUGVybWlzc2lvbnMudmlld0FuYWx5dGljcyB8fCBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3TXlBbmFseXRpY3MpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BTkFMWVRJQ1NfTUFURVJJQUxfRE9XTkxPQURfUkVQT1JUX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIG5hbWU6IFwiVGhlIHJlcG9ydCBvbiBtYXRlcmlhbCBkb3dubG9hZHNcIixcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuc3RhdGlzdGljc1JvdXRlci5tYXRlcmlhbERvd25sb2FkUmVwb3J0VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoc3lzdGVtUGVybWlzc2lvbnMudmlld0FuYWx5dGljcyB8fCBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3TXlBbmFseXRpY3MpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BTkFMWVRJQ1NfTUFURVJJQUxfVVBMT0FEX1JFUE9SVF9NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBuYW1lOiBcIlRoZSByZXBvcnQgb24gbWF0ZXJpYWwgdXBsb2Fkc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5zdGF0aXN0aWNzUm91dGVyLm1hdGVyaWFsVXBsb2FkUmVwb3J0VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoc3lzdGVtUGVybWlzc2lvbnMudmlld0FuYWx5dGljcyB8fCBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3TXlBbmFseXRpY3MpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAvLyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFOQUxZVElDU19QT1dFUl9CSV9SRVBPUlRfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQW5hbHl0aWNzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5zdGF0aXN0aWNzUm91dGVyLnBvd2VyQmlSZXBvcnRVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW5hbHl0aWNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5TVFVERU5UU19PRkZFUlNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnRGlzY3Vzc2lvbiBCb2FyZCcsXHJcbiAgICAgICAgICAgICAgICBhbGxvd2VkOiBtZW51SXRlbXNBdmFpbGFiaWxpdHkuc2hvd0Rpc2N1c3Npb25Cb2FyZCxcclxuICAgICAgICAgICAgICAgIGFsbG93ZWRGb3JTeXN0ZW06IG1lbnVJdGVtc0F2YWlsYWJpbGl0eS5zaG93RGlzY3Vzc2lvbkJvYXJkLFxyXG4gICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLm5ld3NSb3V0ZXIubmV3c1NlYXJjaFVybCgnRElTQ1VTU0lPTicpLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5aT09NX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJab29tXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuZXh0ZXJuYWxSb3V0ZXIuem9vbVVybCgpLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBCVVpvb21WaXNpYmlsaXR5XHJcbiAgICAgICAgICAgICAgICAgICAgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgKHN5c3RlbVBlcm1pc3Npb25zLnNjb3JlQXNzZXNzbWVudHMgfHwgc3lzdGVtUGVybWlzc2lvbnMuc2NvcmVBbnlBc3Nlc3NtZW50cyksXHJcbiAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJBZG1pbmlzdHJhdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnMudmlld1VzZXJzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnMudmlld0dyb3VwcyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zLmVkaXRTdG9yYWdlUGxhY2VzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnMudmlld1JlZmVyZW5jZURhdGEgfHxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3U3lzdGVtTG9nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtUGVybWlzc2lvbnMuZWRpdFN5c3RlbUNvbmZpZ3VyYXRpb24gfHxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3U2VjdXJpdHlMb2cgfHxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW55TGVhcm5pbmdPYmplY3QgfHxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlCdXNpbmVzc1VuaXQgfHxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy5jb25maWd1cmVCdXNpbmVzc1VuaXRTZXR0aW5ncyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zLmVkaXROb3RpZmljYXRpb25UZW1wbGF0ZXMgfHxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1QZXJtaXNzaW9ucy5pbXBvcnRJbmZvcm1hdGlvbiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdDZXJ0aWZpY2F0ZVRlbXBsYXRlc1xyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIC8vIGR5bmFtaWNVcmw6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuaG9tZVJvdXRlci5hZG1pbmlzdHJhdGlvbk1lbnVVcmwoKSxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fVVNFUlNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVXNlcnNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnVzZXJzUm91dGVyLmluZGV4VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld1VzZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0dST1VQU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJVc2VyIEdyb3Vwc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMudXNlcnNSb3V0ZXIuZ3JvdXBzSW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3R3JvdXBzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0JVU0lORVNTX1VOSVRTX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ1c2luZXNzIFVuaXRzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5idXNpbmVzc1VuaXRSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoc3lzdGVtUGVybWlzc2lvbnMubWFuYWdlQW55QnVzaW5lc3NVbml0IHx8IHN5c3RlbVBlcm1pc3Npb25zLmNvbmZpZ3VyZUJ1c2luZXNzVW5pdFNldHRpbmdzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TVE9SQUdFX1BMQUNFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdG9yYWdlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuc3lzdGVtU2V0dGluZ3NSb3V0ZXIuc3RvcmFnZVBsYWNlc0luZGV4VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMuZWRpdFN0b3JhZ2VQbGFjZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU1lTVEVNX0JVTkRMRV9NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTeXN0ZW0gZmlsZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnN5c3RlbVNldHRpbmdzUm91dGVyLnN5c3RlbUJ1bmRsZUVkaXRVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy5lZGl0UmVmZXJlbmNlRGF0YSAmJiBoYXNBbGxCdXNpbmVzc1VuaXRzLCAgLy90b2RvOiBzZXBhcmF0ZSBwZXJtaXNzaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU1lTVEVNX0RJQ1RJT05BUklFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJpZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnJlZmVyZW5jZVJvdXRlci5pbmRleFVybChcImxhbmd1YWdlc1wiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3UmVmZXJlbmNlRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU1VCSkVDVFNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdWJqZWN0c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5yZWZlcmVuY2VSb3V0ZXIuaW5kZXhVcmwoXCJzdWJqZWN0c1wiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdSZWZlcmVuY2VEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fTEFOR1VBR0VTX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTGFuZ3VhZ2VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnJlZmVyZW5jZVJvdXRlci5pbmRleFVybChcImxhbmd1YWdlc1wiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdSZWZlcmVuY2VEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fTEVBUk5JTkdfUEFUSF9UWVBFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkxlYXJuaW5nIHBhdGggdHlwZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMucmVmZXJlbmNlUm91dGVyLmluZGV4VXJsKFwibGVhcm5pbmdQYXRoVHlwZXNcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3UmVmZXJlbmNlRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0NPVVJTRV9UWVBFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvdXJzZSB0eXBlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5yZWZlcmVuY2VSb3V0ZXIuaW5kZXhVcmwoXCJjb3Vyc2VUeXBlc1wiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdSZWZlcmVuY2VEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU09VUkNFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNvdXJjZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMucmVmZXJlbmNlUm91dGVyLmluZGV4VXJsKFwic291cmNlc1wiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdSZWZlcmVuY2VEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fU09VUkNFX1RZUEVTX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU291cmNlIHR5cGVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnJlZmVyZW5jZVJvdXRlci5pbmRleFVybChcInNvdXJjZVR5cGVzXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld1JlZmVyZW5jZURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9DT01QTEVYSVRZX0xFVkVMU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBsZXhpdHkgbGV2ZWxzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnJlZmVyZW5jZVJvdXRlci5pbmRleFVybChcImNvbXBsZXhpdHlMZXZlbHNcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3UmVmZXJlbmNlRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0NSRURJVF9UWVBFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNyZWRpdCB0eXBlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5yZWZlcmVuY2VSb3V0ZXIuaW5kZXhVcmwoXCJjcmVkaXRUeXBlc1wiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdSZWZlcmVuY2VEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fTE9DQVRJT05fVFlQRVNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJMb2NhdGlvbiB0eXBlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5yZWZlcmVuY2VSb3V0ZXIuaW5kZXhVcmwoXCJsb2NhdGlvblR5cGVzXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld1JlZmVyZW5jZURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9MT0NBVElPTlNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJMb2NhdGlvbnNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMucmVmZXJlbmNlUm91dGVyLmluZGV4VXJsKFwibG9jYXRpb25zXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMudmlld1JlZmVyZW5jZURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9FUVVJUE1FTlRTX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRXF1aXBtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnJlZmVyZW5jZVJvdXRlci5pbmRleFVybChcImVxdWlwbWVudFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdSZWZlcmVuY2VEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9URU1QTEFURV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVtcGxhdGVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXdVcmw6ICd0aGVtZXMvZGVmYXVsdC9pbWcvaWNvbnMvYWRtaW4tbWVudS1jZXJ0aWZpY2F0ZS5zdmcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIChzeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW55TGVhcm5pbmdPYmplY3QgfHwgc3lzdGVtUGVybWlzc2lvbnMudmlld0NlcnRpZmljYXRlVGVtcGxhdGVzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fQ0VSVElGSUNBVEVfVEVNUExBVEVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ2VydGlmaWNhdGUgVGVtcGxhdGVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmNlcnRpZmljYXRlVGVtcGxhdGVzUm91dGVyLmluZGV4VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoc3lzdGVtUGVybWlzc2lvbnMudmlld0FueUxlYXJuaW5nT2JqZWN0IHx8IHN5c3RlbVBlcm1pc3Npb25zLnZpZXdDZXJ0aWZpY2F0ZVRlbXBsYXRlcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TTElERV9URU1QTEFURV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTbGlkZSBUZW1wbGF0ZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMuc2xpZGVUZW1wbGF0ZXNSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdBbnlMZWFybmluZ09iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX05PVElGSUNBVElPTl9URU1QTEFURV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTm90aWZpY2F0aW9uIFRlbXBsYXRlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMubm90aWZpY2F0aW9uVGVtcGxhdGVzUm91dGVyLmluZGV4VXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMuZWRpdE5vdGlmaWNhdGlvblRlbXBsYXRlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TRUNVUklUWV9MT0dTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZWN1cml0eSBMb2dzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5sb2dzUm91dGVyLnNlY3VyaXR5TG9nc1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdTZWN1cml0eUxvZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9JTVBPUlRfRVhQT1JUX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJJbXBvcnQgfCBFeHBvcnRcIixcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5pbXBvcnRSb3V0ZXIuaW5kZXhVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy5pbXBvcnRJbmZvcm1hdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BRE1JTklTVFJBVElPTl9TWVNURU1fTE9HU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3lzdGVtIExvZ3NcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmxvZ3NSb3V0ZXIuc3lzdGVtTG9nc1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdTeXN0ZW1Mb2csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fQ1JPTl9KT0JTX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCYWNrZ3JvdW5kIEpvYnNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmpvYnNSb3V0ZXIuam9ic1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUNyb25Kb2JzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX1NZU1RFTV9TRVRUSU5HX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTeXN0ZW0gY29uZmlndXJhdGlvbnNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnN5c3RlbVNldHRpbmdzUm91dGVyLnN5c3RlbVNldHRpbmdzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMuZWRpdFN5c3RlbUNvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuQURNSU5JU1RSQVRJT05fR0FNSUZJQ0FUSU9OX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnR2FtaWZpY2F0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld1VybDogJ3RoZW1lcy9kZWZhdWx0L2ltZy9pY29ucy9hZG1pbi1tZW51LWxvZ3Muc3ZnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW55TGVhcm5pbmdPYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0JBREdFU19LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0JhZGdlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmdhbWlmaWNhdGlvblJvdXRlci5iYWRnZXNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLnZpZXdBbnlMZWFybmluZ09iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAga2V5OiBNZW51SGVscGVyLkFETUlOSVNUUkFUSU9OX0dBTUVfUFJPR1JBTVNfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIG5hbWU6ICdHYW1lIHByb2dyYW1zJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB1cmw6ICcjJyArIHRoaXMuZ2FtaWZpY2F0aW9uUm91dGVyLnByb2dyYW1zVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiBzeXN0ZW1QZXJtaXNzaW9ucy52aWV3QW55TGVhcm5pbmdPYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5GQVFfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkhlbHBcIixcclxuICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5uZXdzUm91dGVyLmhlbHBVcmwoMTAwMCksXHJcbiAgICAgICAgICAgICAgICBhbGxvd2VkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvLyBNZW51IEl0ZW1zIHN0dWJzIChmb3IgQnJlYWRjcnVtYnMgb25seSlcclxuXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5BU1NFU1NNRU5UU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQXNzZXNzbWVudHNcIixcclxuICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLmFzc2Vzc21lbnRzUm91dGVyLmFzc2Vzc21lbnRzVXJsKCksXHJcbiAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkFMTF9ORVdTX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJOZXdzXCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMubmV3c1JvdXRlci5uZXdzU2VhcmNoVXJsKCdORVdTJyksXHJcbiAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLlNUVURFTlRTX09GRkVSU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiRGlzY3Vzc2lvbiBib2FyZFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLm5ld3NSb3V0ZXIubmV3c1NlYXJjaFVybCgnRElTQ1VTU0lPTicpLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLkVEVUNBVElPTl9NQVRFUklBTFNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIk1hdGVyaWFsc1wiLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dlZDogbWVudUl0ZW1zQXZhaWxhYmlsaXR5LnNob3dNYXRlcmlhbHNcclxuICAgICAgICAgICAgICAgICAgICB8fCAoc3lzdGVtUGVybWlzc2lvbnMgJiYgc3lzdGVtUGVybWlzc2lvbnMubWFuYWdlQW55TGVhcm5pbmdPYmplY3QpLFxyXG4gICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLm1hdGVyaWFsc1JvdXRlci5pbmRleFVybCgpLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5FRFVDQVRJT05fUVVJWlpFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiUXVpenplc1wiLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dlZDogbWVudUl0ZW1zQXZhaWxhYmlsaXR5LnNob3dRdWl6emVzXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUxlYXJuaW5nT2JqZWN0KSxcclxuICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5xdWl6emVzUm91dGVyLnF1aXp6ZXNJbmRleFVybCgpLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5FRFVDQVRJT05fU1VSVkVZU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiU3VydmV5c1wiLFxyXG4gICAgICAgICAgICAgICAgLy8gdG9kbzogY3JlYXRlIG5ldyBwZXJtaXNzaW9ucyBmb3Igc3VydmV5c1xyXG4gICAgICAgICAgICAgICAgYWxsb3dlZDogbWVudUl0ZW1zQXZhaWxhYmlsaXR5LnNob3dRdWl6emVzXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUxlYXJuaW5nT2JqZWN0KSxcclxuICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5xdWl6emVzUm91dGVyLnN1cnZleXNJbmRleFVybCgpLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5FRFVDQVRJT05fRkxBU0hDQVJEU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiRmxhc2hjYXJkc1wiLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dlZDogbWVudUl0ZW1zQXZhaWxhYmlsaXR5LnNob3dRdWl6emVzXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUxlYXJuaW5nT2JqZWN0KSxcclxuICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5xdWl6emVzUm91dGVyLmZsYXNoY2FyZHNJbmRleFVybCgpLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgICAgIHJldHVybiBtZW51QnlQZXJtaXNzaW9ucztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmlsbFBlcnNvbmFsQWNjb3VudEl0ZW1zKGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4sIHN5c3RlbVBlcm1pc3Npb25zOiBJU3lzdGVtUGVybWlzc2lvbnMpOiBJTWVudUdyb3VwIHtcclxuICAgICAgICBsZXQgcGVyc29uYWxBY2NvdW50OiBJTWVudUdyb3VwID0ge1xyXG4gICAgICAgICAgICBrZXk6IE1lbnVIZWxwZXIuUEVSU09OQUxfQUNDT1VOVF9NRU5VX0tFWSxcclxuICAgICAgICAgICAgbmFtZTogXCJNeSBwcm9maWxlXCIsXHJcbiAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5wZXJzb25hbFJvdXRlci5zZXR0aW5nc1VybCgpLFxyXG4gICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGtleTogTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX1VQTE9BRFNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbmFtZTogXCJNeSB1cGxvYWRzXCIsXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdXJsOiAnIycgKyB0aGlzLnBlcnNvbmFsUm91dGVyLnVwbG9hZHNVcmwoKSxcclxuICAgICAgICAgICAgICAgIC8vICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkICYmIHN5c3RlbVBlcm1pc3Npb25zICYmIHN5c3RlbVBlcm1pc3Npb25zLmFkZE1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgLy8gfSxcclxuICAgICAgICAgICAgICAgIC8vIHtcclxuICAgICAgICAgICAgICAgIC8vICAgICBrZXk6IE1lbnVIZWxwZXIuUEVSU09OQUxfQUNDT1VOVF9DT1VSU0VTX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIG5hbWU6IFwiTXkgY291cnNlc1wiLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHVybDogJyMnICsgdGhpcy5wZXJzb25hbFJvdXRlci5jb3Vyc2VzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgIC8vICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAga2V5OiBNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfTEVBUk5JTkdfUEFUSFNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbmFtZTogXCJNeSBsZWFybmluZyBwYXRoc1wiLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHVybDogJyMnICsgdGhpcy5wZXJzb25hbFJvdXRlci5sZWFybmluZ1BhdGhzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgIC8vICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfQ09VUlNFU19DRVJUSUZJQ0FURVNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJNeSBjZXJ0aWZpY2F0ZXNcIixcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMucGVyc29uYWxSb3V0ZXIuY2VydGlmaWNhdGVzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfQ1JFRElUU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk15IGNyZWRpdHNcIixcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMucGVyc29uYWxSb3V0ZXIuY3JlZGl0c1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5QRVJTT05BTF9QVVJDSEFTRURfT1JERVJTX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTXkgcHVyY2hhc2VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnBlcnNvbmFsUm91dGVyLnB1cmNoYXNlZE9yZGVyc1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX0JBREdFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnTXkgYmFkZ2VzJyxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcjJyArIHRoaXMucGVyc29uYWxSb3V0ZXIuYmFkZ2VzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAga2V5OiBNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfUVVJWlpFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgIC8vICAgICBuYW1lOiBcIk15IHF1aXp6ZXMgLyBzdXJ2ZXlzXCIsXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdXJsOiAnIycgKyB0aGlzLnBlcnNvbmFsUm91dGVyLnF1aXp6ZXNVcmwoKSxcclxuICAgICAgICAgICAgICAgIC8vICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgLy8gfSxcclxuICAgICAgICAgICAgICAgIC8vIHtcclxuICAgICAgICAgICAgICAgIC8vICAgICBrZXk6IE1lbnVIZWxwZXIuUEVSU09OQUxfQUNDT1VOVF9QTEFZTElTVFNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbmFtZTogXCJNeSBwbGF5bGlzdHNcIixcclxuICAgICAgICAgICAgICAgIC8vICAgICB1cmw6ICcjJyArIHRoaXMucGVyc29uYWxSb3V0ZXIucGxheWxpc3RzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgIC8vICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAga2V5OiBNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfU1VCU0NSSVBUSU9OU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgIC8vICAgICBuYW1lOiBcIk15IHN1YnNjcmlwdGlvbnNcIixcclxuICAgICAgICAgICAgICAgIC8vICAgICB1cmw6ICcjJyArIHRoaXMucGVyc29uYWxSb3V0ZXIuc3Vic2NyaXB0aW9uc1VybCgpLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAvLyB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX05FV19DT01NRU5UU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk15IGNvbW1lbnRzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnBlcnNvbmFsUm91dGVyLm5ld0NvbW1lbnRzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBNZW51SGVscGVyLlBFUlNPTkFMX0FDQ09VTlRfU0VUVElOR1NfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJyMnICsgdGhpcy5wZXJzb25hbFJvdXRlci5zZXR0aW5nc1VybCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX1NVUFBPUlRfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdXBwb3J0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnBlcnNvbmFsUm91dGVyLnN1cHBvcnRVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8qe1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX0NPVVBPTlNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb3Vwb25zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnIycgKyB0aGlzLnBlcnNvbmFsUm91dGVyLmNvdXBvbnNVcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiB0aGlzLmF1dGhlbnRpY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICB9LCovXHJcblxyXG4gICAgICAgICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGtleTogTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX0VYUElSRURfQ09VUlNFU19NRU5VX0tFWSxcclxuICAgICAgICAgICAgICAgIC8vICAgICBuYW1lOiBcIkV4cGlyZWQgY291cnNlc1wiLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHVybDogJyMnICsgdGhpcy5wZXJzb25hbFJvdXRlci5leHBpcmVkQ291cnNlc1VybCgpLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGFsbG93ZWQ6IGF1dGhlbnRpY2F0ZWQgJiYgc3lzdGVtUGVybWlzc2lvbnMgJiYgKHN5c3RlbVBlcm1pc3Npb25zLnZpZXdBbnlMZWFybmluZ09iamVjdCB8fCBzeXN0ZW1QZXJtaXNzaW9ucy5tYW5hZ2VBbnlMZWFybmluZ09iamVjdCB8fCBzeXN0ZW1QZXJtaXNzaW9ucy5hdHRlbmRlZU1hbmFnZW1lbnRGb3JBbnlMZWFybmluZ09iamVjdCksXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgICAgICAvLyB9LFxyXG4gICAgICAgICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGtleTogTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX0VYUElSRURfTEVBUk5JTkdfUEFUSFNfTUVOVV9LRVksXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbmFtZTogXCJFeHBpcmVkIGxlYXJuaW5nIHBhdGhzXCIsXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdXJsOiAnIycgKyB0aGlzLnBlcnNvbmFsUm91dGVyLmV4cGlyZWRMZWFybmluZ1BhdGhzVXJsKCksXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgYWxsb3dlZDogYXV0aGVudGljYXRlZCAmJiBzeXN0ZW1QZXJtaXNzaW9ucyAmJiAoc3lzdGVtUGVybWlzc2lvbnMudmlld0FueUxlYXJuaW5nT2JqZWN0IHx8IHN5c3RlbVBlcm1pc3Npb25zLm1hbmFnZUFueUxlYXJuaW5nT2JqZWN0IHx8IHN5c3RlbVBlcm1pc3Npb25zLmF0dGVuZGVlTWFuYWdlbWVudEZvckFueUxlYXJuaW5nT2JqZWN0KSxcclxuICAgICAgICAgICAgICAgIC8vICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgICAgIC8vIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGtleTogTWVudUhlbHBlci5QRVJTT05BTF9BQ0NPVU5UX0NBTEVOREFSX01FTlVfS0VZLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIG5hbWU6IFwiQ2FsZW5kYXJcIixcclxuICAgICAgICAgICAgICAgIC8vICAgICB1cmw6ICcjJyArIHRoaXMucGVyc29uYWxSb3V0ZXIuY2FsZW5kYXJVcmwoKSxcclxuICAgICAgICAgICAgICAgIC8vICAgICBhbGxvd2VkOiBhdXRoZW50aWNhdGVkLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcGVyc29uYWxBY2NvdW50O1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgSU1lbnVVcGRhdGVMaXN0ZW5lciB7XHJcbiAgICBvbk1lbnVJdGVtVXBkYXRlKG5ld01lbnVJdGVtS2V5OiBzdHJpbmcsIG9sZE1lbnVJdGVtS2V5OiBzdHJpbmcpO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWVudUhlbHBlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX01FTlVfS0VZID0gJ2FkbWluaXN0cmF0aW9uJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fVVNFUlNfTUVOVV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fdXNlcnMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9HUk9VUFNfTUVOVV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fZ3JvdXBzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fQ09NTU9OX1NFVFRJTkdTX01FTlVfS0VZID0gJ2FkbWluaXN0cmF0aW9uX2NvbW1vblNldHRpbmdzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fU1RPUkFHRV9QTEFDRVNfTUVOVV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fc3RvcmFnZVBsYWNlcyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX1NZU1RFTV9CVU5ETEVfTUVOVV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fc3lzdGVtQnVuZGxlJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fU1lTVEVNX0RJQ1RJT05BUklFU19NRU5VX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9zeXN0ZW1EaWN0aW9uYXJpZXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9CVVNJTkVTU19VTklUU19NRU5VX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9idXNpbmVzc1VuaXRzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fU1VCSkVDVFNfTUVOVV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fc3ViamVjdHMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9MQU5HVUFHRVNfTUVOVV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fbGFuZ3VhZ2VzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fTEVBUk5JTkdfUEFUSF9UWVBFU19NRU5VX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9sZWFybmluZ1BhdGhUeXBlcyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX0NPVVJTRV9UWVBFU19NRU5VX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9jb3Vyc2VUeXBlcyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX0NFUlRJRklDQVRFX1RFTVBMQVRFX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9jZXJ0aWZpY2F0ZVRlbXBsYXRlcyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX05PVElGSUNBVElPTl9URU1QTEFURV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fbm90aWZpY2F0aW9uVGVtcGxhdGVzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fU09VUkNFU19NRU5VX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9zb3VyY2VzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fU09VUkNFX1RZUEVTX01FTlVfS0VZID0gJ2FkbWluaXN0cmF0aW9uX3NvdXJjZVR5cGVzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fQ09NUExFWElUWV9MRVZFTFNfTUVOVV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fY29tcGxleGl0eUxldmVscyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX0NSRURJVF9UWVBFU19NRU5VX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9jcmVkaXRUeXBlcyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX0xPQ0FUSU9OX1RZUEVTX01FTlVfS0VZID0gJ2FkbWluaXN0cmF0aW9uX2xvY2F0aW9uVHlwZXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9MT0NBVElPTlNfTUVOVV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fbG9jYXRpb25zJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fRVFVSVBNRU5UU19NRU5VX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9lcXVpcG1lbnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9TWVNURU1fTE9HU19LRVkgPSAnYWRtaW5pc3RyYXRpb25fX3N5c3RlbUxvZ3MnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9CQURHRVNfS0VZID0gJ2FkbWluaXN0cmF0aW9uX19iYWRnZXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9HQU1FX1BST0dSQU1TX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9fZ2FtZXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9DUk9OX0pPQlNfS0VZID0gJ2FkbWluaXN0cmF0aW9uX19jcm9uSm9icyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX1NZU1RFTV9TRVRUSU5HX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9fc3lzdGVtU2V0dGluZyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX1NFQ1VSSVRZX0xPR1NfS0VZID0gJ2FkbWluaXN0cmF0aW9uX3NlY3VyaXR5TG9ncyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX0lNUE9SVF9FWFBPUlRfS0VZID0gJ2FkbWluaXN0cmF0aW9uX2ltcG9ydEV4cG9ydCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX1NZU1RFTV9NRU5VX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9zeXN0ZW0nO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9MT0dTX01FTlVfS0VZID0gJ2FkbWluaXN0cmF0aW9uX2xvZ3MnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9HQU1JRklDQVRJT05fTUVOVV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fZ2FtaWZpY2F0aW9uJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQURNSU5JU1RSQVRJT05fTEVBUk5JTkdfQ09OVEVOVF9NRU5VX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9sZWFybmluZ0NvbnRlbnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9QUk9HUkVTU19LRVkgPSAnYWRtaW5pc3RyYXRpb25fcHJvZ3Jlc3MnXHJcbiAgICBwdWJsaWMgc3RhdGljIEFETUlOSVNUUkFUSU9OX1RFTVBMQVRFX0tFWSA9ICdhZG1pbmlzdHJhdGlvbl9sZWFybmluZ0NvbnRlbnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBRE1JTklTVFJBVElPTl9TTElERV9URU1QTEFURV9LRVkgPSAnYWRtaW5pc3RyYXRpb25fc2xpZGVUZW1wbGF0ZXMnO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgVVNFUl9QUk9GSUxFX01FTlVfS0VZID0gJ3VzZXJfcHJvZmlsZSc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBNQUlOX01FTlVfS0VZID0gJ21haW5wYWdlJztcclxuICAgIHB1YmxpYyBzdGF0aWMgUFJPRklMRV9NRU5VX0tFWSA9ICdwcm9maWxlJztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIENBVEFMT0dfTUVOVV9LRVkgPSBcImNhdGFsb2dcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEVEVUNBVElPTl9NRU5VX0tFWSA9ICdlZHVjYXRpb24nO1xyXG4gICAgcHVibGljIHN0YXRpYyBFRFVDQVRJT05fTEVBUk5JTkdfUEFUSFNfTUVOVV9LRVkgPSAnbGVhcm5pbmdfcGF0aHMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBFRFVDQVRJT05fQ09VUlNFU19NRU5VX0tFWSA9IFwiY291cnNlc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBFRFVDQVRJT05fTUFURVJJQUxTX01FTlVfS0VZID0gJ21hdGVyaWFscyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEVEVUNBVElPTl9RVUlaWkVTX01FTlVfS0VZID0gXCJxdWl6emVzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEVEVUNBVElPTl9TVVJWRVlTX01FTlVfS0VZID0gXCJzdXJ2ZXlzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEVEVUNBVElPTl9GTEFTSENBUkRTX01FTlVfS0VZID0gXCJmbGFzaGNhcmRzXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBNWV9MSUJSQVJZX01FTlVfS0VZID0gJ215X2xpYnJhcnknO1xyXG4gICAgcHVibGljIHN0YXRpYyBNWV9MSUJSQVJZX0ZBVk9SSVRFU19NRU5VX0tFWSA9ICdmYXZvcml0ZXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBNWV9MSUJSQVJZX1BMQVlMSVNUU19NRU5VX0tFWSA9IFwicGxheWxpc3RzXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBBTkFMWVRJQ1NfTUVOVV9LRVkgPSAnYW5hbHl0aWNzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQU5BTFlUSUNTX01BVEVSSUFMX1NUQVRJU1RJQ1NfTUVOVV9LRVkgPSAnbWF0ZXJpYWxfc3RhdGlzdGljcyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFOQUxZVElDU19VUExPQURTX01FTlVfS0VZID0gJ29wZXJhdGlvbnNfdXBsb2Fkcyc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBBTkFMWVRJQ1NfTUFURVJJQUxfVklFV19SRVBPUlRfTUVOVV9LRVkgPSAnYW5hbHl0aWNzX21hdGVyaWFsX3ZpZXdfcmVwb3J0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgQU5BTFlUSUNTX01BVEVSSUFMX0RPV05MT0FEX1JFUE9SVF9NRU5VX0tFWSA9ICdhbmFseXRpY3NfbWF0ZXJpYWxfZG93bmxvYWRfcmVwb3J0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgQU5BTFlUSUNTX01BVEVSSUFMX1VQTE9BRF9SRVBPUlRfTUVOVV9LRVkgPSAnYW5hbHl0aWNzX21hdGVyaWFsX3VwbG9hZF9yZXBvcnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBTkFMWVRJQ1NfUE9XRVJfQklfUkVQT1JUX01FTlVfS0VZID0gJ2FuYWx5dGljc19wb3dlcmJpX3JlcG9ydCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIE9QRVJBVElPTlNfQUNDT1VOVF9NQU5BR0VNRU5UX01FTlVfS0VZID0gJ29wZXJhdGlvbnNfYWNjb3VudE1hbmFnZW1lbnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBORVdTX01FTlVfS0VZID0gJ25ld3MnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBTExfTkVXU19NRU5VX0tFWSA9ICdhbGxfbmV3cyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNUVURFTlRTX09GRkVSU19NRU5VX0tFWSA9ICdzdHVkZW50c19vZmZlcnMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBaT09NX01FTlVfS0VZID0gJ3pvb20nO1xyXG4gICAgcHVibGljIHN0YXRpYyBJTkZPX01FTlVfS0VZID0gJ2luZm8nO1xyXG4gICAgcHVibGljIHN0YXRpYyBBQk9VVF9QUk9KRUNUX01FTlVfS0VZID0gJ2Fib3V0X3Byb2plY3QnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBQk9VVF9DT01QQU5ZX01FTlVfS0VZID0gJ2Fib3V0X2NvbXBhbnknO1xyXG4gICAgcHVibGljIHN0YXRpYyBGQVFfTUVOVV9LRVkgPSAnZmFxJztcclxuICAgIHB1YmxpYyBzdGF0aWMgQ09OVEFDVFNfTUVOVV9LRVkgPSAnY29udGFjdHMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBBU1NFU1NNRU5UU19NRU5VX0tFWSA9ICdhc3Nlc3NtZW50cyc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBQRVJTT05BTF9BQ0NPVU5UX01FTlVfS0VZID0gXCJwZXJzb25hbF9hY2NvdW50XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUlNPTkFMX0FDQ09VTlRfVVBMT0FEU19NRU5VX0tFWSA9IFwicGVyc29uYWxfYWNjb3VudF91cGxvYWRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUlNPTkFMX0FDQ09VTlRfQ09VUlNFU19NRU5VX0tFWSA9IFwicGVyc29uYWxfYWNjb3VudF9jb3Vyc2VzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUlNPTkFMX0FDQ09VTlRfTEVBUk5JTkdfUEFUSFNfTUVOVV9LRVkgPSBcInBlcnNvbmFsX2FjY291bnRfbGVhcm5pbmdfcGF0aHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUEVSU09OQUxfQUNDT1VOVF9DT1VSU0VTX0NFUlRJRklDQVRFU19NRU5VX0tFWSA9IFwicGVyc29uYWxfYWNjb3VudF9jb3Vyc2VzX2NlcnRpZmljYXRlc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBQRVJTT05BTF9BQ0NPVU5UX1FVSVpaRVNfTUVOVV9LRVkgPSBcInBlcnNvbmFsX2FjY291bnRfcXVpenplc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBQRVJTT05BTF9BQ0NPVU5UX1BMQVlMSVNUU19NRU5VX0tFWSA9IFwicGVyc29uYWxfYWNjb3VudF9wbGF5bGlzdHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUEVSU09OQUxfQUNDT1VOVF9TVUJTQ1JJUFRJT05TX01FTlVfS0VZID0gXCJwZXJzb25hbF9hY2NvdW50X3N1YnNjcmlwdGlvbnNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUEVSU09OQUxfQUNDT1VOVF9ORVdfQ09NTUVOVFNfTUVOVV9LRVkgPSBcInBlcnNvbmFsX2FjY291bnRfbmV3X2NvbW1lbnRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUlNPTkFMX0FDQ09VTlRfU1VQUE9SVF9NRU5VX0tFWSA9IFwicGVyc29uYWxfYWNjb3VudF9zdXBwb3J0XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUlNPTkFMX0FDQ09VTlRfQ09VUE9OU19NRU5VX0tFWSA9IFwicGVyc29uYWxfYWNjb3VudF9jb3Vwb25zXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUlNPTkFMX0FDQ09VTlRfU0VUVElOR1NfTUVOVV9LRVkgPSBcInBlcnNvbmFsX2FjY291bnRfc2V0dGluZ3NcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUEVSU09OQUxfQUNDT1VOVF9FWFBJUkVEX0NPVVJTRVNfTUVOVV9LRVkgPSBcInBlcnNvbmFsX2FjY291bnRfZXhwaXJlZF9jb3Vyc2VzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUlNPTkFMX0FDQ09VTlRfRVhQSVJFRF9MRUFSTklOR19QQVRIU19NRU5VX0tFWSA9IFwicGVyc29uYWxfYWNjb3VudF9leHBpcmVkX2xlYXJuaW5nX3BhdGhzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUlNPTkFMX1BVUkNIQVNFRF9PUkRFUlNfTUVOVV9LRVkgPSBcInBlcnNvbmFsX3B1cmNoYXNlZF9vcmRlcnNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgUEVSU09OQUxfQUNDT1VOVF9CQURHRVNfTUVOVV9LRVkgPSBcInBlcnNvbmFsX2FjY291bnRfYmFkZ2VzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUlNPTkFMX0FDQ09VTlRfQ1JFRElUU19NRU5VX0tFWSA9IFwicGVyc29uYWxfYWNjb3VudF9jcmVkaXRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBFUlNPTkFMX0FDQ09VTlRfQ0FMRU5EQVJfTUVOVV9LRVkgPSBcInBlcnNvbmFsX2FjY291bnRfY2FsZW5kYXJcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFBPTElDSUVTX1BSSVZBQ1lfUE9MSUNZX0xJTktfS0VZID0gXCJQT0xJQ0lFU19QUklWQUNZX1BPTElDWVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBQT0xJQ0lFU19DT09LSUVfUE9MSUNZX0xJTktfS0VZID0gXCJQT0xJQ0lFU19DT09LSUVfUE9MSUNZXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFBPTElDSUVTX1RFUk1TX09GX1VTRV9MSU5LX0tFWSA9IFwiUE9MSUNJRVNfVEVSTVNfT0ZfVVNFXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBBQ0NFU1NJQklMSVRZX0xJTktfS0VZID0gXCJhY2Nlc3NpYmlsaXR5XCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBIT01FX0lOREVYX0tFWSA9IFwiaG9tZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBIT01FX0NPVVJTRVNfS0VZID0gXCJob21lX2NvdXJzZXNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgSE9NRV9MRUFSTklOR19QQVRIX0tFWSA9IFwiaG9tZV9sZWFybmluZ1BhdGhzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfRkxBU0hDQVJEU19LRVkgPSBcImhvbWVfZmxhc2hjYXJkc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBIT01FX01BVEVSSUFMU19LRVkgPSBcImhvbWVfbWF0ZXJpYWxzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfUkVQT1JUU19LRVkgPSBcImhvbWVfcmVwb3J0c1wiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgSE9NRV9BRE1JTklTVFJBVElPTl9JTkRFWF9LRVkgPSBcImhvbWVfYWRtaW5pc3RyYXRpb25cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgSE9NRV9BRE1JTklTVFJBVElPTl9NRU5VX0tFWSA9IFwiaG9tZV9hZG1pbmlzdHJhdGlvbl9tZW51XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQURNSU5JU1RSQVRJT05fUkVQT1JUU19LRVkgPSBcImhvbWVfYWRtaW5pc3RyYXRpb25fcmVwb3J0c1wiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgSE9NRV9BVFRFTkRFRV9NQU5BR0VSX01FTlVfS0VZID0gXCJob21lX2F0dGVuZGVlTWFuYWdlcl9tZW51XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQVRURU5ERUVfTUFOQUdFUl9QQVJUSUNJUEFOVFNfS0VZID0gXCJob21lX2F0dGVuZGVlTWFuYWdlcl9wYXJ0aWNpcGFudHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgSE9NRV9BVFRFTkRFRV9NQU5BR0VSX0NPVVJTRVNfS0VZID0gXCJob21lX2F0dGVuZGVlTWFuYWdlcl9jb3Vyc2VzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQVRURU5ERUVfTUFOQUdFUl9MRUFSTklOR19QQVRIU19LRVkgPSBcImhvbWVfYXR0ZW5kZWVNYW5hZ2VyX2xlYXJuaW5nUGF0aHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgSE9NRV9BVFRFTkRFRV9NQU5BR0VSX1JFUE9SVFNfS0VZID0gXCJob21lX2F0dGVuZGVlTWFuYWdlcl9yZXBvcnRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQVRURU5ERUVfTUFOQUdFUl9VU0VSU19LRVkgPSBcImhvbWVfYXR0ZW5kZWVNYW5hZ2VyX3VzZXJzXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBIT01FX0lOU1RSVUNUT1JfTUVOVV9LRVkgPSBcImhvbWVfaW5zdHJ1Y3Rvcl9tZW51XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfSU5TVFJVQ1RPUl9QQVJUSUNJUEFOVFNfS0VZID0gXCJob21lX2luc3RydWN0b3JfcGFydGljaXBhbnRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfSU5TVFJVQ1RPUl9DT1VSU0VTX0tFWSA9IFwiaG9tZV9pbnN0cnVjdG9yX2NvdXJzZXNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgSE9NRV9JTlNUUlVDVE9SX0xFQVJOSU5HX1BBVEhTX0tFWSA9IFwiaG9tZV9pbnN0cnVjdG9yX2xlYXJuaW5nUGF0aHNcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgSE9NRV9JTlNUUlVDVE9SX0FTU0VTU01FTlRTX0tFWSA9IFwiaG9tZV9pbnN0cnVjdG9yX2Fzc2Vzc21lbnRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfSU5TVFJVQ1RPUl9SRVBPUlRTX0tFWSA9IFwiaG9tZV9pbnN0cnVjdG9yX3JlcG9ydHNcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQVVUSE9SX01FTlVfS0VZID0gXCJob21lX2F1dGhvcl9tZW51XCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQVVUSE9SX0NPVVJTRVNfS0VZID0gXCJob21lX2F1dGhvcl9jb3Vyc2VzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQVVUSE9SX0xFQVJOSU5HX1BBVEhfS0VZID0gXCJob21lX2F1dGhvcl9sZWFybmluZ1BhdGhzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQVVUSE9SX1FVSVpaRVNfS0VZID0gXCJob21lX2F1dGhvcl9xdWl6emVzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQVVUSE9SX1NVUlZFWVNfS0VZID0gXCJob21lX2F1dGhvcl9zdXJ2ZXlzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQVVUSE9SX0ZMQVNIQ0FSRFNfS0VZID0gXCJob21lX2F1dGhvcl9mbGFzaGNhcmRzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEhPTUVfQVVUSE9SX01BVEVSSUFMU19LRVkgPSBcImhvbWVfYXV0aG9yX21hdGVyaWFsc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBIT01FX0FVVEhPUl9SRVBPUlRTX0tFWSA9IFwiaG9tZV9hdXRob3JfcmVwb3J0c1wiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQlVTSU5FU1NfVU5JVF9HRU5FUkFMX0tFWSA9IFwiYnVzaW5lc3NVbml0X2dlbmVyYWxcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgQlVTSU5FU1NfVU5JVF9CUkFORElOR19LRVkgPSBcImJ1c2luZXNzVW5pdF9icmFuZGluZ1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBCVVNJTkVTU19VTklUX01FTlVfSVRFTVNfS0VZID0gXCJidXNpbmVzc1VuaXRfbWVudUl0ZW1zXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEJVU0lORVNTX1VOSVRfU1VCU0NSSVBUSU9OX0tFWSA9IFwiYnVzaW5lc3NVbml0X3N1YnNjcmlwdGlvblwiO1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGN1cnJlbnRNZW51SXRlbUtleTogc3RyaW5nID0gXCJcIjtcclxuICAgIHByaXZhdGUgc3RhdGljIHVwZGF0ZU1lbnVMaXN0ZW5lcnM6IEFycmF5PElNZW51VXBkYXRlTGlzdGVuZXI+ID0gW107XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBzZXRDdXJyZW50TWVudUl0ZW0obWVudUl0ZW1LZXk6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBvbGRNZW51SXRlbUtleSA9IHRoaXMuY3VycmVudE1lbnVJdGVtS2V5O1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1lbnVJdGVtS2V5ID0gbWVudUl0ZW1LZXk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVwZGF0ZU1lbnVMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNZW51TGlzdGVuZXJzW2ldLm9uTWVudUl0ZW1VcGRhdGUodGhpcy5jdXJyZW50TWVudUl0ZW1LZXksIG9sZE1lbnVJdGVtS2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBhZGRNZW51VXBkYXRlTGlzdGVuZXIobGlzdGVuZXI6IElNZW51VXBkYXRlTGlzdGVuZXIpIHtcclxuICAgICAgICBpZiAodGhpcy51cGRhdGVNZW51TGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpID09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWVudUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVNZW51VXBkYXRlTGlzdGVuZXIobGlzdGVuZXI6IElNZW51VXBkYXRlTGlzdGVuZXIpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnVwZGF0ZU1lbnVMaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNZW51TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q3VycmVudE1lbnVJdGVtS2V5KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1lbnVJdGVtS2V5O1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBNb21lbnQge1xyXG4gICAgcHVibGljIHN0YXRpYyBERUZBVUxUX0ZPUk1BVDogc3RyaW5nID0gXCJNL0QvWVlZWVwiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcGFyc2UodGV4dDogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCh0ZXh0LCBNb21lbnQuREVGQVVMVF9GT1JNQVQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgdGV4dFRvSmF2YURhdGUodGV4dDogc3RyaW5nLCBmb3JtYXQ/OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwgfHwgdGV4dCA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgTW9tZW50LkRFRkFVTFRfRk9STUFUO1xyXG4gICAgICAgIHJldHVybiBtb21lbnQodGV4dCwgZm9ybWF0KS51bml4KCkgKiAxMDAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaXNWYWxpZERhdGUoZGF0ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoZGF0ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChNb21lbnQuREVGQVVMVF9GT1JNQVQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaXNBZnRlcihmaXJzdERhdGU6IERhdGUsIHNlY29uZERhdGU6IERhdGUsIG1pbkludGVydmFsSW5TZWNvbmRzPzogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFmaXJzdERhdGUgfHwgIXNlY29uZERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW1pbkludGVydmFsSW5TZWNvbmRzKSB7XHJcbiAgICAgICAgICAgIG1pbkludGVydmFsSW5TZWNvbmRzID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudC51dGMoZmlyc3REYXRlKS5zdWJ0cmFjdChtaW5JbnRlcnZhbEluU2Vjb25kcywgXCJzXCIpLmlzQWZ0ZXIobW9tZW50LnV0YyhzZWNvbmREYXRlKSk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgY2xhc3MgT2JqZWN0RmllbGRSZXNvbHZlciB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGZpbmRGb3JQYXRoKHRhcmdldDogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHZhciBvYmogPSB0YXJnZXQ7XHJcbiAgICAgICAgdmFyIHBhdGhzOiBBcnJheTxzdHJpbmc+ID0gcGF0aC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcGF0aDogc3RyaW5nID0gcGF0aHNbaV07XHJcbiAgICAgICAgICAgIG9iaiA9IG9ialtwYXRoXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxufSIsImltcG9ydCB7TWF0ZXJpYWxUeXBlfSBmcm9tIFwiLi8uLi9tYXRlcmlhbHMvbW9kZWxzL01hdGVyaWFsVHlwZVwiO1xyXG5pbXBvcnQge01hdGVyaWFsVHlwZUtleUVudW19IGZyb20gXCIuLy4uL21hdGVyaWFscy9tb2RlbHMvTWF0ZXJpYWxUeXBlXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlZE9iamVjdFR5cGV9IGZyb20gXCIuLy4uL1JlZmVyZW5jZWRPYmplY3RUeXBlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgT2JqZWN0VHlwZVV0aWxzIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWF0ZXJpYWxUeXBlVGl0bGUodHlwZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZUlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxUeXBlLkFVRElPOiByZXR1cm4gJ0F1ZGlvJztcclxuICAgICAgICAgICAgY2FzZSBNYXRlcmlhbFR5cGUuVklERU86IHJldHVybiAnVmlkZW8nO1xyXG4gICAgICAgICAgICBjYXNlIE1hdGVyaWFsVHlwZS5MSU5LOiByZXR1cm4gJ0xpbmsnO1xyXG4gICAgICAgICAgICBjYXNlIE1hdGVyaWFsVHlwZS5QSE9UTzogcmV0dXJuICdJbWFnZSc7XHJcbiAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxUeXBlLkRPQ1VNRU5UUzogcmV0dXJuICdPdGhlciBkb2N1bWVudHMnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldE1hdGVyaWFsR2x5cGhpY29uQ2xhc3ModHlwZUlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZUlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxUeXBlLkFVRElPOiByZXR1cm4gXCJnbHlwaGljb24gZ2x5cGhpY29uLWhlYWRwaG9uZXNcIjtcclxuICAgICAgICAgICAgY2FzZSBNYXRlcmlhbFR5cGUuVklERU86IHJldHVybiBcImdseXBoaWNvbiBnbHlwaGljb24tcGxheVwiO1xyXG4gICAgICAgICAgICBjYXNlIE1hdGVyaWFsVHlwZS5MSU5LOiByZXR1cm4gXCJnbHlwaGljb24gZ2x5cGhpY29uLWxpbmtcIjtcclxuICAgICAgICAgICAgY2FzZSBNYXRlcmlhbFR5cGUuUEhPVE86IHJldHVybiBcImdseXBoaWNvbiBnbHlwaGljb24tcGljdHVyZVwiO1xyXG4gICAgICAgICAgICBjYXNlIE1hdGVyaWFsVHlwZS5ET0NVTUVOVFM6IHJldHVybiBcImdseXBoaWNvbiBnbHlwaGljb24tZmlsZVwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldE1hdGVyaWFsR2x5cGhpY29uQ2xhc3NGcm9tS2V5KHR5cGVLZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlS2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxUeXBlS2V5RW51bVtNYXRlcmlhbFR5cGVLZXlFbnVtLkFVRElPXTogcmV0dXJuIFwiZ2x5cGhpY29uIGdseXBoaWNvbi1oZWFkcGhvbmVzXCI7XHJcbiAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxUeXBlS2V5RW51bVtNYXRlcmlhbFR5cGVLZXlFbnVtLlZJREVPXTogcmV0dXJuIFwiZ2x5cGhpY29uIGdseXBoaWNvbi1wbGF5XCI7XHJcbiAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxUeXBlS2V5RW51bVtNYXRlcmlhbFR5cGVLZXlFbnVtLkxJTktdOiByZXR1cm4gXCJnbHlwaGljb24gZ2x5cGhpY29uLWxpbmtcIjtcclxuICAgICAgICAgICAgY2FzZSBNYXRlcmlhbFR5cGVLZXlFbnVtW01hdGVyaWFsVHlwZUtleUVudW0uUEhPVE9dOiByZXR1cm4gXCJnbHlwaGljb24gZ2x5cGhpY29uLXBpY3R1cmVcIjtcclxuICAgICAgICAgICAgY2FzZSBNYXRlcmlhbFR5cGVLZXlFbnVtW01hdGVyaWFsVHlwZUtleUVudW0uRE9DVU1FTlRTXTogcmV0dXJuIFwiZ2x5cGhpY29uIGdseXBoaWNvbi1maWxlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmV3c0dseXBoaWNvbkNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiZ2x5cGhpY29uIGdseXBoaWNvbi1pbmZvLXNpZ25cIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFJlZmVyZW5jZU9iamVjdFR5cGVUaXRsZShvYmplY3RUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAob2JqZWN0VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLk1BVEVSSUFMXTogcmV0dXJuICdNYXRlcmlhbCc7XHJcbiAgICAgICAgICAgIGNhc2UgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFXTogcmV0dXJuICdDb3Vyc2UnO1xyXG4gICAgICAgICAgICBjYXNlIFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLlBMQVlMSVNUXTogcmV0dXJuICdQbGF5bGlzdCc7XHJcbiAgICAgICAgICAgIGNhc2UgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTkVXU106IHJldHVybiAnTmV3cyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVmZXJlbmNlT2JqZWN0VHlwZUZyb21TdHJpbmcob2JqZWN0VHlwZTogc3RyaW5nKTogUmVmZXJlbmNlZE9iamVjdFR5cGUge1xyXG4gICAgICAgIHN3aXRjaCAob2JqZWN0VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLk1BVEVSSUFMXTogcmV0dXJuIFJlZmVyZW5jZWRPYmplY3RUeXBlLk1BVEVSSUFMO1xyXG4gICAgICAgICAgICBjYXNlIFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLkNPVVJTRV06IHJldHVybiBSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0U7XHJcbiAgICAgICAgICAgIGNhc2UgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuUExBWUxJU1RdOiByZXR1cm4gUmVmZXJlbmNlZE9iamVjdFR5cGUuUExBWUxJU1Q7XHJcbiAgICAgICAgICAgIGNhc2UgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTkVXU106IHJldHVybiBSZWZlcmVuY2VkT2JqZWN0VHlwZS5ORVdTO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldENvbnRlbnRUeXBlVGl0bGUoY29udGVudFR5cGVLZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoIChjb250ZW50VHlwZUtleSkge1xyXG4gICAgICAgICAgICBjYXNlIE1hdGVyaWFsVHlwZUtleUVudW1bTWF0ZXJpYWxUeXBlS2V5RW51bS5BVURJT106IHJldHVybiAnQXVkaW8nO1xyXG4gICAgICAgICAgICBjYXNlIE1hdGVyaWFsVHlwZUtleUVudW1bTWF0ZXJpYWxUeXBlS2V5RW51bS5WSURFT106IHJldHVybiAnVmlkZW8nO1xyXG4gICAgICAgICAgICBjYXNlIE1hdGVyaWFsVHlwZUtleUVudW1bTWF0ZXJpYWxUeXBlS2V5RW51bS5MSU5LXTogcmV0dXJuICdMaW5rJztcclxuICAgICAgICAgICAgY2FzZSBNYXRlcmlhbFR5cGVLZXlFbnVtW01hdGVyaWFsVHlwZUtleUVudW0uUEhPVE9dOiByZXR1cm4gJ0ltYWdlJztcclxuICAgICAgICAgICAgY2FzZSBNYXRlcmlhbFR5cGVLZXlFbnVtW01hdGVyaWFsVHlwZUtleUVudW0uRE9DVU1FTlRTXTogcmV0dXJuICdPdGhlciBkb2N1bWVudHMnO1xyXG4gICAgICAgICAgICBjYXNlIFJlZmVyZW5jZWRPYmplY3RUeXBlW1JlZmVyZW5jZWRPYmplY3RUeXBlLlBMQVlMSVNUXTogcmV0dXJuICdQbGF5bGlzdCc7XHJcbiAgICAgICAgICAgIGNhc2UgUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuQ09VUlNFXTogcmV0dXJuICdDb3Vyc2UnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGlzTWF0ZXJpYWxPYmplY3Qob2JqZWN0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTUFURVJJQUxdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaXNQbGF5bGlzdE9iamVjdChvYmplY3RUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gb2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5QTEFZTElTVF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpc0NvdXJzZU9iamVjdChvYmplY3RUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gb2JqZWN0VHlwZSA9PSBSZWZlcmVuY2VkT2JqZWN0VHlwZVtSZWZlcmVuY2VkT2JqZWN0VHlwZS5DT1VSU0VdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaXNOZXdPYmplY3Qob2JqZWN0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFR5cGUgPT0gUmVmZXJlbmNlZE9iamVjdFR5cGVbUmVmZXJlbmNlZE9iamVjdFR5cGUuTkVXU107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZWZlcmVuY2VkT2JqZWN0VHlwZUFzU3RyaW5nKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh2YWx1ZSBpbiBSZWZlcmVuY2VkT2JqZWN0VHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpID8gdmFsdWUgOlxyXG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpID8gUmVmZXJlbmNlZE9iamVjdFR5cGVbdmFsdWVdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVmZXJlbmNlZE9iamVjdFR5cGVBc051bWJlcih2YWx1ZTogYW55KTogUmVmZXJlbmNlZE9iamVjdFR5cGUge1xyXG4gICAgICAgIGlmICh2YWx1ZSBpbiBSZWZlcmVuY2VkT2JqZWN0VHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpID8gdmFsdWUgOlxyXG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpID8gUmVmZXJlbmNlZE9iamVjdFR5cGVbdmFsdWVdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaXNZb3V0dWJlVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHVybCAmJiAoXHJcbiAgICAgICAgICAgICAgICB1cmwuaW5kZXhPZihcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tXCIpID09IDAgfHxcclxuICAgICAgICAgICAgICAgIHVybC5pbmRleE9mKFwiaHR0cDovL3d3dy55b3V0dWJlLmNvbVwiKSA9PSAwIHx8XHJcbiAgICAgICAgICAgICAgICB1cmwuaW5kZXhPZihcImh0dHBzOi8veW91dHUuYmVcIikgPT0gMCB8fFxyXG4gICAgICAgICAgICAgICAgdXJsLmluZGV4T2YoXCJodHRwOi8veW91dHUuYmVcIikgPT0gMFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpc0F3c1VybCh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB1cmwgJiYgdXJsLmluZGV4T2YoXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vXCIpID09IDAgJiYgdXJsLmluZGV4T2YoXCIubXA0XCIpID49IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpc1ZpbWVvVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHVybCAmJiB1cmwuaW5kZXhPZihcImh0dHBzOi8vdmltZW8uY29tL1wiKSA9PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZXh0cmFjdFZpbWVvVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHJlID0gL3ZpbWVvLipcXC8oXFxkKykvaTtcclxuICAgICAgICBsZXQgbWF0Y2ggPSB1cmwubWF0Y2gocmUpO1xyXG4gICAgICAgIHJldHVybiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHx8IG51bGw7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgY2xhc3MgUGFnZUhlYWRlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBTVEFUVVNfVEVNUExBVEUgPSAnJXMgPHNwYW4gY2xhc3M9XCIlcy1zdGF0dXMtY29sb3ItJXNcIj4lcyZuYnNwOzwvc3Bhbj48c3BhbiBjbGFzcz1cIiVzLXN0YXR1cy0lc1wiPjwvc3Bhbj4nO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgU1RBVFVTX1dJVEhfVE9PTFRJUF9URU1QTEFURSA9ICclcyA8c3BhbiBjbGFzcz1cIiVzLXN0YXR1cy1jb2xvci0lc1wiPiVzJm5ic3A7PC9zcGFuPjxzcGFuIGNsYXNzPVwiJXMtc3RhdHVzLSVzXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgdG9vbHRpcCBkYXRhLXBsYWNlbWVudD1cInRvcFwiIHRpdGxlPVwiJXNcIj48L3NwYW4+JztcclxuICAgIHByaXZhdGUgc3RhdGljIExJTktfVEVNUExBVEUgPSAnPGEgcm9sZT1cImJ1dHRvblwiIGhyZWY9XCIjJXNcIiBjbGFzcz1cImJ0biB2aHMtYnRuLXByaW1hcnkgJXNcIj4lczwvYT4nO1xyXG5cclxuICAgIHB1YmxpYyBwYWdlTmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHN0YXR1c1BhbmVsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgYWN0aW9uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgcHVibGljIHByZXNlcnZlU3RhdHVzUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwcmVzZXJ2ZUFjdGlvbnNQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHByZXNlcnZlUGFnZU5hbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwYXJlbnROYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcGFyZW50TGluazogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgc2V0KCk6IFBhZ2VIZWFkZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgUGFnZUhlYWRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoZWFkZXIocGFnZU5hbWU6IHN0cmluZyk6IFBhZ2VIZWFkZXIge1xyXG4gICAgICAgIHRoaXMucGFnZU5hbWUgPSBwYWdlTmFtZTtcclxuICAgICAgICB0aGlzLnByZXNlcnZlUGFnZU5hbWUgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlc2VydmVIZWFkZXIoKTogUGFnZUhlYWRlciB7XHJcbiAgICAgICAgdGhpcy5wcmVzZXJ2ZVBhZ2VOYW1lID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkQWN0aW9uTGluayhuYW1lOiBzdHJpbmcsIGxpbms6IHN0cmluZywgaXNEaXNhYmxlZD86IGJvb2xlYW4pOiBQYWdlSGVhZGVyIHtcclxuICAgICAgICB2YXIgYSA9IFBhZ2VIZWFkZXIuZm9ybWF0KFBhZ2VIZWFkZXIuTElOS19URU1QTEFURSwgW2xpbmssIGlzRGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogJycsIG5hbWVdKTtcclxuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaChhKTtcclxuICAgICAgICB0aGlzLnByZXNlcnZlQWN0aW9uc1BhbmVsID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZEFjdGlvbkxpbmtJZihjb25kaXRpb246IGJvb2xlYW4sIG5hbWU6IHN0cmluZywgbGluazogc3RyaW5nLCBpc0Rpc2FibGVkPzogYm9vbGVhbik6IFBhZ2VIZWFkZXIge1xyXG4gICAgICAgIGlmIChjb25kaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkQWN0aW9uTGluayhuYW1lLCBsaW5rLCBpc0Rpc2FibGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFBhcmVudExpbmsobmFtZTogc3RyaW5nLCBsaW5rOiBzdHJpbmcpOiBQYWdlSGVhZGVyIHtcclxuICAgICAgICB0aGlzLnBhcmVudExpbmsgPSBsaW5rO1xyXG4gICAgICAgIHRoaXMucGFyZW50TmFtZSA9IG5hbWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByZXNlcnZlTGlua3MoKTogUGFnZUhlYWRlciB7XHJcbiAgICAgICAgdGhpcy5wcmVzZXJ2ZUFjdGlvbnNQYW5lbCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBQYWdlSGVhZGVySGVscGVyLnVwZGF0ZUhlYWRlcih0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBmb3JtYXQoc3RyOiBzdHJpbmcsIGFyZ3M6IEFycmF5PGFueT4pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBuZXdTdHIgPSBzdHI7XHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgIHdoaWxlICgvJXMvLnRlc3QobmV3U3RyKSkge1xyXG4gICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShcIiVzXCIsIGFyZ3NbaSsrXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdTdHI7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2VIZWFkZXJVcGRhdGVMaXN0ZW5lciB7XHJcbiAgICBvbkhlYWRlclVwZGF0ZShwYWdlSGVhZGVyOiBQYWdlSGVhZGVyKTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFBhZ2VIZWFkZXJIZWxwZXIge1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHBhZ2VIZWFkZXJMaXN0ZW5lcnM6IEFycmF5PElQYWdlSGVhZGVyVXBkYXRlTGlzdGVuZXI+ID0gW107XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyB1cGRhdGVIZWFkZXIoaGVhZGVySW5mbzogUGFnZUhlYWRlcikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlSGVhZGVyTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZUhlYWRlckxpc3RlbmVyc1tpXS5vbkhlYWRlclVwZGF0ZShoZWFkZXJJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBhZGRQYWdlSGVhZGVyVXBkYXRlTGlzdGVuZXIobGlzdGVuZXI6IElQYWdlSGVhZGVyVXBkYXRlTGlzdGVuZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5wYWdlSGVhZGVyTGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpID09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZUhlYWRlckxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVQYWdlSGVhZGVyVXBkYXRlTGlzdGVuZXIobGlzdGVuZXI6IElQYWdlSGVhZGVyVXBkYXRlTGlzdGVuZXIpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnBhZ2VIZWFkZXJMaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlSGVhZGVyTGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQcmVkZWZpbmVkTGFuZ3VhZ2VzVXRpbHMge1xyXG4gICAgcHVibGljIHN0YXRpYyBERUZBVUxUX0xBTkdVQUdFX0lEOiBudW1iZXIgPSAxO1xyXG4gICAgcHVibGljIHN0YXRpYyBFTkdMSVNIX0xBTkdVQUdFX0lEOiBudW1iZXIgPSAyO1xyXG4gICAgcHVibGljIHN0YXRpYyBTUEFOSVNIX0xBTkdVQUdFX0lEOiBudW1iZXIgPSAzO1xyXG4gICAgcHVibGljIHN0YXRpYyBGUkVOQ0hfTEFOR1VBR0VfSUQ6IG51bWJlciA9IDQ7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBkZXRlcm1pbmVSZWxhdGVkTGFuZ3VhZ2VJZChsb2NhbGU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGxvY2FsZSA9PSBcInJ1X1JVXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByZWRlZmluZWRMYW5ndWFnZXNVdGlscy5ERUZBVUxUX0xBTkdVQUdFX0lEO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlID09IFwiZW5fVVNcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzLkVOR0xJU0hfTEFOR1VBR0VfSUQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUgPT0gXCJmcl9GUlwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcmVkZWZpbmVkTGFuZ3VhZ2VzVXRpbHMuRlJFTkNIX0xBTkdVQUdFX0lEO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlID09IFwiZXNfRVNcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJlZGVmaW5lZExhbmd1YWdlc1V0aWxzLlNQQU5JU0hfTEFOR1VBR0VfSUQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiZXhwb3J0IGNsYXNzIFJhbmRvbVV0aWxzIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlUmFuZG9tSWQocHJlZml4OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gXCJcIiArIChwcmVmaXggPyBwcmVmaXggOiAnJykgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1ICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjYpKSArIERhdGUubm93KCk7XHJcbiAgICB9XHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFJlc2l6ZVZpZXdTZXJ2aWNlIHtcclxuXHJcbiAgICBwdWJsaWMgdmlld1R5cGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBvbGRWaWV3VHlwZTogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yICh2aWV3VHlwZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xyXG4gICAgICAgIHRoaXMub2xkVmlld1R5cGUgPSB2aWV3VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UmVzaXplVmlld1R5cGUodmlld1R5cGU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDk5Mikge1xyXG4gICAgICAgICAgICBpZiAoIXZpZXdUeXBlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2xkVmlld1R5cGUgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPj0gOTkyKSB7XHJcbiAgICAgICAgICAgIGlmKCF2aWV3VHlwZSAmJiAhdGhpcy5vbGRWaWV3VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3VHlwZSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sZFZpZXdUeXBlID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLm9sZFZpZXdUeXBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3VHlwZTtcclxuICAgIH1cclxufSIsImV4cG9ydCBjbGFzcyBTdHJpbmdCdWlsZGVyIHtcclxuICAgIHByaXZhdGUgYmFzZTogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJwb2xhdGUoYmFzZTogc3RyaW5nKTogU3RyaW5nQnVpbGRlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCdWlsZGVyKGJhc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGJhc2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuYmFzZSA9IGJhc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdpdGgocGFyYW06IHN0cmluZywgdmFsdWU6IGFueSk6IFN0cmluZ0J1aWxkZXIge1xyXG4gICAgICAgIHRoaXMuYmFzZSA9IHRoaXMuYmFzZS5yZXBsYWNlKHBhcmFtLCB2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZCguLi5zdHJpbmdzOiBzdHJpbmdbXSk6IFN0cmluZ0J1aWxkZXIge1xyXG4gICAgICAgIHN0cmluZ3MuZm9yRWFjaChzdHIgPT4gdGhpcy5iYXNlID0gdGhpcy5iYXNlLmNvbmNhdChzdHIpKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkSWYoY29uZGl0aW9uOiBib29sZWFuLCAuLi5zdHJpbmdzOiBzdHJpbmdbXSk6IFN0cmluZ0J1aWxkZXIge1xyXG4gICAgICAgIGlmIChjb25kaXRpb24pIHtcclxuICAgICAgICAgICAgc3RyaW5ncy5mb3JFYWNoKHN0ciA9PiB0aGlzLmJhc2UgPSB0aGlzLmJhc2UuY29uY2F0KHN0cikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYnVpbGQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlO1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGNsYXNzIFRpbWVvdXRVdGlscyB7XHJcbiAgICBwcml2YXRlIHNlbWFwaG9yZXM6IGFueSA9IHt9O1xyXG5cclxuICAgIHByaXZhdGUgY2hlY2tOZXcodWlkOiBhbnksIGhhbmRsZXI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIHNlbWFwaG9yZSA9IHRoaXMuZ2V0QnlVaWQodWlkKTtcclxuICAgICAgICBpZiAodW5kZWZpbmVkID09IHNlbWFwaG9yZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEJ5VWlkKHVpZCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc2g6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEJ5VWlkKHVpZDogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VtYXBob3Jlc1t1aWRdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0QnlVaWQodWlkLCBzZW1hcGhvcmUpIHtcclxuICAgICAgICB0aGlzLnNlbWFwaG9yZXNbdWlkXSA9IHNlbWFwaG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJvY2Vzc1dpdGhEZWxheSh1aWQ6IGFueSwgaGFuZGxlcjogRnVuY3Rpb24sIGRlbGF5OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmNoZWNrTmV3KHVpZCwgaGFuZGxlcik7XHJcbiAgICAgICAgdmFyIGhhc2ggPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICB0aGlzLnNldEJ5VWlkKHVpZCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcclxuICAgICAgICAgICAgICAgIGhhc2g6IGhhc2gsXHJcbiAgICAgICAgICAgICAgICBhY3RpdmU6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlV2l0aFRpbWVvdXQoaGFuZGxlciwgZGVsYXksIHVpZCwgaGFzaCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBleGVjdXRlV2l0aFRpbWVvdXQoaGFuZGxlcjogRnVuY3Rpb24sIHRpbWVvdXQ6IG51bWJlciwgdWlkOiBhbnksIGhhc2g6IGFueSkge1xyXG4gICAgICAgIHZhciAkc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICgkc2VsZi5nZXRCeVVpZCh1aWQpLmhhc2ggPT09IGhhc2gpIHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi8uLi91dGlscy9VcmxTZXJ2aWNlXCJcclxuaW1wb3J0IHtVcGxvYWRzU2VydmljZX0gZnJvbSBcIi4vLi4vc3RvcmFnZS9VcGxvYWRzU2VydmljZVwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXJ9IGZyb20gXCIuLy4uL3V0aWxzL1N0cmluZ0J1aWxkZXJcIjtcclxuaW1wb3J0IHtub3RpZmllcn0gZnJvbSBcIi4vLi4vSU5vdGlmaWVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVXBsb2FkVXRpbHMge1xyXG4gICAgcHVibGljIHN0YXRpYyBOQU1FID0gXCJ1dGlscy5VcGxvYWRVdGlsc1wiO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgTEVBUk5JTkdfUEFUSF9QUkVWSUVXX0tFWSA9IFwibGVhcm5pbmdfcGF0aF9wcmV2aWV3X1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBNQVRFUklBTF9QUkVWSUVXX0tFWSA9IFwibWF0ZXJpYWxfcHJldmlld19cIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgTUFURVJJQUxfU1VCVElUTEVTX0tFWSA9IFwibWF0ZXJpYWxfc3VidGl0bGVzXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE1BVEVSSUFMX0ZJTEVfS0VZID0gXCJtYXRlcmlhbF9maWxlX1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBDT1VSU0VfUFJFVklFV19LRVkgPSBcImNvdXJzZV9wcmV2aWV3X1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBCVU5ETEVfS0VZID0gXCJidW5kbGVfXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIEZJTEVfS0VZID0gXCJfZmlsZV9cIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXHJcbiAgICAgICAgXCIkaHR0cFwiLFxyXG4gICAgICAgIFVybFNlcnZpY2UuTkFNRSxcclxuICAgICAgICBVcGxvYWRzU2VydmljZS5OQU1FXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmw6IFVybFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVwbG9hZHNTZXJ2aWNlOiBVcGxvYWRzU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGxvYWRMZWFybmluZ1BhdGhCeUNodW5rcyhmaWxlOiBGaWxlLCBmaWxlSWQ6IG51bWJlciwgbGVhcm5pbmdQYXRoSWQ6IG51bWJlciwgdXJsOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHN1Y2Nlc3NGdW5jOiAoZmlsZTogRmlsZSkgPT4gdm9pZCA9IChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdWNjZXNzVXJsOiBzdHJpbmcgPSB0aGlzLnVybC5iYXNlKFwiL2FwaS9sZWFybmluZ1BhdGhzL3VwbG9hZC9jb21wbGV0ZWQ/ZmlsZUlkPTpmaWxlSWQmbGVhcm5pbmdQYXRoSWQ9OmxlYXJuaW5nUGF0aElkXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6ZmlsZUlkXCIsIGZpbGVJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCBsZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChzdWNjZXNzVXJsLCBudWxsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIlRoZSBmaWxlICg6ZmlsZU5hbWUpIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmZpbGVOYW1lXCIsIGZpbGUubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IGFib3J0RnVuYzogKGZpbGU6IEZpbGUpID0+IHZvaWQgPSAoZmlsZTogRmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgYWJvcnRVcmw6IHN0cmluZyA9IHRoaXMudXJsLmJhc2UoXCIvYXBpL2xlYXJuaW5nUGF0aHMvdXBsb2FkL25vdC9jb21wbGV0ZWQ/ZmlsZUlkPTpmaWxlSWQmbGVhcm5pbmdQYXRoSWQ9OmxlYXJuaW5nUGF0aElkXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6ZmlsZUlkXCIsIGZpbGVJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpsZWFybmluZ1BhdGhJZFwiLCBsZWFybmluZ1BhdGhJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChhYm9ydFVybCwgbnVsbCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiVXBsb2FkaW5nIG9mIHRoZSBmaWxlICg6ZmlsZU5hbWUpIGhhcyBiZWVuIGNhbmNlbGVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6ZmlsZU5hbWVcIiwgZmlsZS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgZXJyb3JGdW5jOiAoZmlsZTogRmlsZSkgPT4gdm9pZCA9IChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvclVybDogc3RyaW5nID0gdGhpcy51cmwuYmFzZShcIi9hcGkvbGVhcm5pbmdQYXRocy91cGxvYWQvbm90L2NvbXBsZXRlZD9maWxlSWQ9OmZpbGVJZCZsZWFybmluZ1BhdGhJZD06bGVhcm5pbmdQYXRoSWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpmaWxlSWRcIiwgZmlsZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmxlYXJuaW5nUGF0aElkXCIsIGxlYXJuaW5nUGF0aElkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKTtcclxuICAgICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KGVycm9yVXJsLCBudWxsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJVcGxvYWRpbmcgb2YgdGhlIGZpbGUgKDpmaWxlTmFtZSkgaGFzIGZhaWxlZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmZpbGVOYW1lXCIsIGZpbGUubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy51cGxvYWRzU2VydmljZS51cGxvYWQoZmlsZSwgVXBsb2FkVXRpbHMuTEVBUk5JTkdfUEFUSF9QUkVWSUVXX0tFWSArIGxlYXJuaW5nUGF0aElkLCB1cmwsIG1ldGhvZCwgc3VjY2Vzc0Z1bmMsIGFib3J0RnVuYywgZXJyb3JGdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBsb2FkTWF0ZXJpYWxCeUNodW5rcyhmaWxlOiBGaWxlLCBmaWxlSWQ6IG51bWJlciwgbWF0ZXJpYWxJZDogbnVtYmVyLCB1cmw6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgc3VjY2Vzc0Z1bmM6IChmaWxlOiBGaWxlKSA9PiB2b2lkID0gKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgICAgICAgbGV0IHN1Y2Nlc3NVcmw6IHN0cmluZyA9IHRoaXMudXJsLmJhc2UoXCIvYXBpL21hdGVyaWFscy91cGxvYWQvY29tcGxldGVkP2ZpbGVJZD06ZmlsZUlkJm1hdGVyaWFsSWQ9Om1hdGVyaWFsSWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpmaWxlSWRcIiwgZmlsZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOm1hdGVyaWFsSWRcIiwgbWF0ZXJpYWxJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChzdWNjZXNzVXJsLCBudWxsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIlRoZSBmaWxlICg6ZmlsZU5hbWUpIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmZpbGVOYW1lXCIsIHRpdGxlKVxyXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgYWJvcnRGdW5jOiAoZmlsZTogRmlsZSkgPT4gdm9pZCA9IChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBhYm9ydFVybDogc3RyaW5nID0gdGhpcy51cmwuYmFzZShcIi9hcGkvbWF0ZXJpYWxzL3VwbG9hZC9ub3QvY29tcGxldGVkP2ZpbGVJZD06ZmlsZUlkJm1hdGVyaWFsSWQ9Om1hdGVyaWFsSWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpmaWxlSWRcIiwgZmlsZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOm1hdGVyaWFsSWRcIiwgbWF0ZXJpYWxJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChhYm9ydFVybCwgbnVsbCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiVXBsb2FkaW5nIG9mIHRoZSBmaWxlICg6ZmlsZU5hbWUpIGhhcyBiZWVuIGNhbmNlbGVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6ZmlsZU5hbWVcIiwgZmlsZS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgZXJyb3JGdW5jOiAoZmlsZTogRmlsZSkgPT4gdm9pZCA9IChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvclVybDogc3RyaW5nID0gdGhpcy51cmwuYmFzZShcIi9hcGkvbWF0ZXJpYWxzL3VwbG9hZC9ub3QvY29tcGxldGVkP2ZpbGVJZD06ZmlsZUlkJm1hdGVyaWFsSWQ9Om1hdGVyaWFsSWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpmaWxlSWRcIiwgZmlsZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOm1hdGVyaWFsSWRcIiwgbWF0ZXJpYWxJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChlcnJvclVybCwgbnVsbCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiVXBsb2FkaW5nIG9mIHRoZSBmaWxlICg6ZmlsZU5hbWUpIGhhcyBmYWlsZWRcIilcclxuICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpmaWxlTmFtZVwiLCBmaWxlLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBsb2Fkc1NlcnZpY2UudXBsb2FkKGZpbGUsIFVwbG9hZFV0aWxzLk1BVEVSSUFMX1BSRVZJRVdfS0VZICsgbWF0ZXJpYWxJZCwgdXJsLCBtZXRob2QsIHN1Y2Nlc3NGdW5jLCBhYm9ydEZ1bmMsIGVycm9yRnVuYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwbG9hZENvdXJzZUJ5Q2h1bmtzKGZpbGU6IEZpbGUsIGZpbGVJZDogbnVtYmVyLCBjb3Vyc2VJZDogbnVtYmVyLCB1cmw6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgc3VjY2Vzc0Z1bmM6IChmaWxlOiBGaWxlKSA9PiB2b2lkID0gKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgICAgICAgbGV0IHN1Y2Nlc3NVcmw6IHN0cmluZyA9IHRoaXMudXJsLmJhc2UoXCIvYXBpL2NvdXJzZXMvdXBsb2FkL2NvbXBsZXRlZD9maWxlSWQ9OmZpbGVJZCZjb3Vyc2VJZD06Y291cnNlSWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpmaWxlSWRcIiwgZmlsZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKTtcclxuICAgICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KHN1Y2Nlc3NVcmwsIG51bGwpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuc3VjY2VzcyhTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiVGhlIGZpbGUgKDpmaWxlTmFtZSkgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6ZmlsZU5hbWVcIiwgZmlsZS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgYWJvcnRGdW5jOiAoZmlsZTogRmlsZSkgPT4gdm9pZCA9IChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBhYm9ydFVybDogc3RyaW5nID0gdGhpcy51cmwuYmFzZShcIi9hcGkvY291cnNlcy91cGxvYWQvbm90L2NvbXBsZXRlZD9maWxlSWQ9OmZpbGVJZCZjb3Vyc2VJZD06Y291cnNlSWRcIilcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpmaWxlSWRcIiwgZmlsZUlkKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmNvdXJzZUlkXCIsIGNvdXJzZUlkKVxyXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoKTtcclxuICAgICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KGFib3J0VXJsLCBudWxsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGlmaWVyLmVycm9yKFN0cmluZ0J1aWxkZXIuaW50ZXJwb2xhdGUoXCJVcGxvYWRpbmcgb2YgdGhlIGZpbGUgKDpmaWxlTmFtZSkgaGFzIGJlZW4gY2FuY2VsZWRcIilcclxuICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpmaWxlTmFtZVwiLCBmaWxlLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBlcnJvckZ1bmM6IChmaWxlOiBGaWxlKSA9PiB2b2lkID0gKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgICAgICAgbGV0IGVycm9yVXJsOiBzdHJpbmcgPSB0aGlzLnVybC5iYXNlKFwiL2FwaS9jb3Vyc2VzL3VwbG9hZC9ub3QvY29tcGxldGVkP2ZpbGVJZD06ZmlsZUlkJmNvdXJzZUlkPTpjb3Vyc2VJZFwiKVxyXG4gICAgICAgICAgICAgICAgLnBhcmFtKFwiOmZpbGVJZFwiLCBmaWxlSWQpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6Y291cnNlSWRcIiwgY291cnNlSWQpXHJcbiAgICAgICAgICAgICAgICAuc2VydmljZSgpO1xyXG4gICAgICAgICAgICB0aGlzLiRodHRwLnBvc3QoZXJyb3JVcmwsIG51bGwpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWZpZXIuZXJyb3IoU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIlVwbG9hZGluZyBvZiB0aGUgZmlsZSAoOmZpbGVOYW1lKSBoYXMgZmFpbGVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6ZmlsZU5hbWVcIiwgZmlsZS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVwbG9hZHNTZXJ2aWNlLnVwbG9hZChmaWxlLCBVcGxvYWRVdGlscy5DT1VSU0VfUFJFVklFV19LRVkgKyBjb3Vyc2VJZCwgdXJsLCBtZXRob2QsIHN1Y2Nlc3NGdW5jLCBhYm9ydEZ1bmMsIGVycm9yRnVuYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwbG9hZEJ1bmRsZUJ5Q2h1bmtzKGZpbGU6IEZpbGUsIGZpbGVJZDogbnVtYmVyLCBidW5kbGVJZDogbnVtYmVyLCB1cmw6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGNhbGxiYWNrRnVuYz86IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgbGV0IHN1Y2Nlc3NGdW5jOiAoZmlsZTogRmlsZSkgPT4gdm9pZCA9IChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdWNjZXNzVXJsOiBzdHJpbmcgPSB0aGlzLnVybC5iYXNlKFwiL2FwaS9idW5kbGVzL3VwbG9hZC9jb21wbGV0ZWQ/ZmlsZUlkPTpmaWxlSWQmYnVuZGxlSWQ9OmJ1bmRsZUlkXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6ZmlsZUlkXCIsIGZpbGVJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpidW5kbGVJZFwiLCBidW5kbGVJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChzdWNjZXNzVXJsLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGJhY2tGdW5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLnN1Y2Nlc3MoU3RyaW5nQnVpbGRlci5pbnRlcnBvbGF0ZShcIlRoZSBmaWxlICg6ZmlsZU5hbWUpIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGgoXCI6ZmlsZU5hbWVcIiwgZmlsZS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRnVuYyhcIlNVQ0NFU1NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrRnVuYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0Z1bmMoXCJFUlJPUl9PTl9QT1NUXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IGFib3J0RnVuYzogKGZpbGU6IEZpbGUpID0+IHZvaWQgPSAoZmlsZTogRmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgYWJvcnRVcmw6IHN0cmluZyA9IHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1bmRsZXMvdXBsb2FkL25vdC9jb21wbGV0ZWQ/ZmlsZUlkPTpmaWxlSWQmYnVuZGxlSWQ9OmJ1bmRsZUlkXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6ZmlsZUlkXCIsIGZpbGVJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpidW5kbGVJZFwiLCBidW5kbGVJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChhYm9ydFVybCwgbnVsbClcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxiYWNrRnVuYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiVXBsb2FkaW5nIG9mIHRoZSBmaWxlICg6ZmlsZU5hbWUpIGhhcyBiZWVuIGNhbmNlbGVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aChcIjpmaWxlTmFtZVwiLCBmaWxlLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tGdW5jKFwiQUJPUlRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrRnVuYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0Z1bmMoXCJFUlJPUl9PTl9QT1NUXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IGVycm9yRnVuYzogKGZpbGU6IEZpbGUpID0+IHZvaWQgPSAoZmlsZTogRmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JVcmw6IHN0cmluZyA9IHRoaXMudXJsLmJhc2UoXCIvYXBpL2J1bmRsZXMvdXBsb2FkL25vdC9jb21wbGV0ZWQ/ZmlsZUlkPTpmaWxlSWQmYnVuZGxlSWQ9OmJ1bmRsZUlkXCIpXHJcbiAgICAgICAgICAgICAgICAucGFyYW0oXCI6ZmlsZUlkXCIsIGZpbGVJZClcclxuICAgICAgICAgICAgICAgIC5wYXJhbShcIjpidW5kbGVJZFwiLCBidW5kbGVJZClcclxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChlcnJvclVybCwgbnVsbClcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxiYWNrRnVuYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5lcnJvcihTdHJpbmdCdWlsZGVyLmludGVycG9sYXRlKFwiVXBsb2FkaW5nIG9mIHRoZSBmaWxlICg6ZmlsZU5hbWUpIGhhcyBmYWlsZWRcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFwiOmZpbGVOYW1lXCIsIGZpbGUubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0Z1bmMoXCJFUlJPUlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tGdW5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRnVuYyhcIkVSUk9SX09OX1BPU1RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVwbG9hZHNTZXJ2aWNlLnVwbG9hZChmaWxlLCBVcGxvYWRVdGlscy5CVU5ETEVfS0VZICsgYnVuZGxlSWQgKyBVcGxvYWRVdGlscy5GSUxFX0tFWSArIGZpbGVJZCwgdXJsLCBtZXRob2QsIHN1Y2Nlc3NGdW5jLCBhYm9ydEZ1bmMsIGVycm9yRnVuYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbE1hdGVyaWFsUHJldmlld3MobWF0ZXJpYWxJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGxvYWRzU2VydmljZS5jYW5jZWxCeUtleShVcGxvYWRVdGlscy5NQVRFUklBTF9QUkVWSUVXX0tFWSArIG1hdGVyaWFsSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxNYXRlcmlhbFN1YnRpdGxlcyhtYXRlcmlhbElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVwbG9hZHNTZXJ2aWNlLmNhbmNlbEJ5S2V5KFVwbG9hZFV0aWxzLk1BVEVSSUFMX1NVQlRJVExFU19LRVkgKyBtYXRlcmlhbElkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsTWF0ZXJpYWxGaWxlcyhtYXRlcmlhbElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVwbG9hZHNTZXJ2aWNlLmNhbmNlbEJ5S2V5KFVwbG9hZFV0aWxzLk1BVEVSSUFMX0ZJTEVfS0VZICsgbWF0ZXJpYWxJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbExlYXJuaW5nUGF0aFByZXZpZXdzKGxlYXJuaW5nUGF0aElkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVwbG9hZHNTZXJ2aWNlLmNhbmNlbEJ5S2V5KFVwbG9hZFV0aWxzLkxFQVJOSU5HX1BBVEhfUFJFVklFV19LRVkgKyBsZWFybmluZ1BhdGhJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbENvdXJzZVByZXZpZXdzKGNvdXJzZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVwbG9hZHNTZXJ2aWNlLmNhbmNlbEJ5S2V5KFVwbG9hZFV0aWxzLkNPVVJTRV9QUkVWSUVXX0tFWSArIGNvdXJzZUlkKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBpbnRlcmZhY2UgSVVybEJ1aWxkZXIge1xyXG4gICAgcGFyYW0ocGFyYW06IHN0cmluZywgcmVwbGFjZW1lbnQ6IGFueSk6IElVcmxCdWlsZGVyO1xyXG4gICAgY2FjaGVhYmxlKCk6IElVcmxCdWlsZGVyO1xyXG4gICAgdGVtcGxhdGUoKTogc3RyaW5nO1xyXG4gICAgc2VydmljZSgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVcmxTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgTkFNRSA9IFwidXJscy5VcmxTZXJ2aWNlXCI7XHJcblxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlUm9vdCA9IFwiL1wiO1xyXG4gICAgcHJpdmF0ZSBhcHBWZXJzaW9uID0gXCIvXCI7XHJcbiAgICBwcml2YXRlIGRlZmF1bHRMb2NhbGUgPSBcImVuX1VTXCI7XHJcbiAgICBwcml2YXRlIGlkID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2VydmljZVJvb3Q6IHN0cmluZywgYXBwVmVyc2lvbjogc3RyaW5nLCBkZWZhdWx0TG9jYWxlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2VSb290ID0gc2VydmljZVJvb3Rbc2VydmljZVJvb3QubGVuZ3RoIC0gMV0gIT0gXCIvXCJcclxuICAgICAgICAgICAgPyBzZXJ2aWNlUm9vdCArIFwiL1wiXHJcbiAgICAgICAgICAgIDogc2VydmljZVJvb3Q7XHJcbiAgICAgICAgdGhpcy5hcHBWZXJzaW9uID0gYXBwVmVyc2lvbjtcclxuICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGUgPSBkZWZhdWx0TG9jYWxlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXJ2aWNlKGJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VVcmwoYmFzZVVybCwgdGhpcy5zZXJ2aWNlUm9vdCwgZmFsc2UgLyogY2FjaGUgKi8pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0ZW1wbGF0ZShiYXNlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZVVybChiYXNlVXJsLCB0aGlzLmFwcFZlcnNpb24sIHRoaXMuZGVmYXVsdExvY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGJhc2UoYmFzZVVybDogc3RyaW5nKTogSVVybEJ1aWxkZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgVXJsQnVpbGRlcihiYXNlVXJsLCB0aGlzLnNlcnZpY2VSb290LCB0aGlzLmFwcFZlcnNpb24sIHRoaXMuZGVmYXVsdExvY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpY1Jlc291cmNlVXJsKGJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0YXRpY1Jlc291cmNlVXJsKGJhc2VVcmwsIHRoaXMuYXBwVmVyc2lvbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFVybEJ1aWxkZXIgaW1wbGVtZW50cyBJVXJsQnVpbGRlciB7XHJcbiAgICBwcml2YXRlIGJhc2U6IHN0cmluZztcclxuICAgIHByaXZhdGUgc2VydmljZVJvb3Q6IHN0cmluZztcclxuICAgIHByaXZhdGUgYXBwVmVyc2lvbjogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjYWNoZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBkZWZhdWx0TG9jYWxlOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGJhc2U6IHN0cmluZywgc2VydmljZVJvb3Q6IHN0cmluZywgYXBwVmVyc2lvbjogc3RyaW5nLCBkZWZhdWx0TG9jYWxlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmJhc2UgPSBiYXNlO1xyXG4gICAgICAgIHRoaXMuYXBwVmVyc2lvbiA9IGFwcFZlcnNpb247XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlUm9vdCA9IHNlcnZpY2VSb290O1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdExvY2FsZSA9IGRlZmF1bHRMb2NhbGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBhcmFtKHBhcmFtOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBhbnkpOiBJVXJsQnVpbGRlciB7XHJcbiAgICAgICAgdGhpcy5iYXNlID0gdGhpcy5iYXNlLnJlcGxhY2UocGFyYW0sIHJlcGxhY2VtZW50KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FjaGVhYmxlKCk6IElVcmxCdWlsZGVyIHtcclxuICAgICAgICB0aGlzLmNhY2hlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdGVtcGxhdGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGVtcGxhdGVVcmwodGhpcy5iYXNlLCB0aGlzLmFwcFZlcnNpb24sIHRoaXMuZGVmYXVsdExvY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlcnZpY2UoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc2VydmljZVVybCh0aGlzLmJhc2UsIHRoaXMuc2VydmljZVJvb3QsIHRoaXMuY2FjaGUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIFZJRVdTX1VSTF9QUkVGSVggPSBcInZpZXdzL1wiO1xyXG5cclxuZnVuY3Rpb24gYXBwZW5kUXVlcnlQYXJhbSh1cmw6IHN0cmluZywgcGFyYW06IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHVybC5pbmRleE9mKFwiP1wiKSAhPSAtMVxyXG4gICAgICAgID8gdXJsICsgXCImXCIgKyBwYXJhbSArIFwiPVwiICsgdmFsdWVcclxuICAgICAgICA6IHVybCArIFwiP1wiICsgcGFyYW0gKyBcIj1cIiArIHZhbHVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0ZW1wbGF0ZVVybChiYXNlOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgZGVmYXVsdExvY2FsZTogc3RyaW5nKSB7XHJcbiAgICB2YXIgcGF0aCA9IGJhc2UucmVwbGFjZShcIi5odG1sXCIsIFwiLVwiICsgZGVmYXVsdExvY2FsZSArIFwiLmh0bWxcIik7XHJcbiAgICByZXR1cm4gVklFV1NfVVJMX1BSRUZJWCArIGFwcGVuZFF1ZXJ5UGFyYW0ocGF0aCwgXCJ2XCIsIHZlcnNpb24pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdGF0aWNSZXNvdXJjZVVybChiYXNlOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZykge1xyXG4gICAgdmFyIHBhdGggPSBiYXNlO1xyXG4gICAgcmV0dXJuIGFwcGVuZFF1ZXJ5UGFyYW0ocGF0aCwgXCJ2XCIsIHZlcnNpb24pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXJ2aWNlVXJsKGJhc2U6IHN0cmluZywgc2VydmljZVJvb3Q6IHN0cmluZywgY2FjaGU6IGJvb2xlYW4pIHtcclxuICAgIGlmICghY2FjaGUpIHtcclxuICAgICAgICBiYXNlID0gYXBwZW5kUXVlcnlQYXJhbShiYXNlLCBcIm5vLWNhY2hlXCIsIG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlcnZpY2VSb290ICsgKGJhc2VbMF0gPT09IFwiL1wiID8gYmFzZS5zdWJzdHJpbmcoMSkgOiBiYXNlKTtcclxufSIsImltcG9ydCB7VXBsb2FkVXRpbHN9IGZyb20gXCIuL1VwbG9hZFV0aWxzXCI7XHJcbmltcG9ydCB7TWVudUNvbmZpZ3VyYXRvclNlcnZpY2V9IGZyb20gXCIuL01lbnVDb25maWd1cmF0b3JTZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgdmFyIFV0aWxzTW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwidXRpbHNcIiwgW10pXHJcbiAgICAuc2VydmljZShVcGxvYWRVdGlscy5OQU1FLCBVcGxvYWRVdGlscylcclxuICAgIC5zZXJ2aWNlKE1lbnVDb25maWd1cmF0b3JTZXJ2aWNlLk5BTUUsIE1lbnVDb25maWd1cmF0b3JTZXJ2aWNlKTsiLCJleHBvcnQgZW51bSBUaW1lWm9uZVR5cGUge1xyXG4gICAgUEFDSUZJQ19EQVlMSUdIVF9USU1FLFxyXG4gICAgTU9VTlRBSU5fREFZTElHSFRfVElNRSxcclxuICAgIENFTlRSQUxfREFZTElHSFRfVElNRSxcclxuICAgIEVBU1RFUk5fREFZTElHSFRfVElNRVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgVGltZVpvbmUgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgbmFtZTogXCJQQUNJRklDX0RBWUxJR0hUX1RJTUVcIixcclxuICAgICAgICB2YWx1ZTogXCJBbWVyaWNhL0xvc19BbmdlbGVzXCIsXHJcbiAgICAgICAgYWJicmV2aWF0aW9uOiBcIlBhY2lmaWMgVGltZSAoVVMgYW5kIENhbmFkYSlcIixcclxuICAgICAgICBvZmZzZXQ6IC03XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIG5hbWU6IFwiTU9VTlRBSU5fREFZTElHSFRfVElNRVwiLFxyXG4gICAgICAgIHZhbHVlOiBcIkFtZXJpY2EvRGVudmVyXCIsXHJcbiAgICAgICAgYWJicmV2aWF0aW9uOiBcIk1vdW50YWluIFRpbWUgKFVTIGFuZCBDYW5hZGEpXCIsXHJcbiAgICAgICAgb2Zmc2V0OiAtNlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBuYW1lOiBcIkNFTlRSQUxfREFZTElHSFRfVElNRVwiLFxyXG4gICAgICAgIHZhbHVlOiBcIkFtZXJpY2EvQ2hpY2Fnb1wiLFxyXG4gICAgICAgIGFiYnJldmlhdGlvbjogXCJDZW50cmFsIFRpbWUgKFVTIGFuZCBDYW5hZGEpXCIsXHJcbiAgICAgICAgb2Zmc2V0OiAtNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBuYW1lOiBcIkVBU1RFUk5fREFZTElHSFRfVElNRVwiLFxyXG4gICAgICAgIHZhbHVlOiBcIkFtZXJpY2EvTmV3X1lvcmtcIixcclxuICAgICAgICBhYmJyZXZpYXRpb246IFwiRWFzdGVybiBUaW1lIChVUyBhbmQgQ2FuYWRhKVwiLFxyXG4gICAgICAgIG9mZnNldDogLTRcclxuICAgIH1cclxuXTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRMb2NhbERlZmF1bHRUaW1lem9uZSA9ICgpOiBzdHJpbmcgPT4ge1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgY3VycmVudFRpbWVab25lT2Zmc2V0ID0gLSh0b2RheS5nZXRUaW1lem9uZU9mZnNldCgpIC8gNjApO1xyXG5cclxuICAgIGNvbnN0IGphbiA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIDAsIDEpO1xyXG4gICAgY29uc3QganVsID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgNiwgMSk7XHJcbiAgICBjb25zdCBtYXhEYXRlID0gTWF0aC5tYXgoamFuLmdldFRpbWV6b25lT2Zmc2V0KCksIGp1bC5nZXRUaW1lem9uZU9mZnNldCgpKTtcclxuICAgIGNvbnN0IGlzU3VtbWVyVGltZSA9IHRvZGF5LmdldFRpbWV6b25lT2Zmc2V0KCkgPCBtYXhEYXRlO1xyXG5cclxuICAgIGxldCBtaW5UaW1lT2Zmc2V0RGlmZmVyZW5jZSA9IE51bWJlci5NQVhfVkFMVUU7XHJcbiAgICBsZXQgZGVmYXVsdFRpbWVab25lID0gMDtcclxuICAgIFRpbWVab25lLmZvckVhY2goKHRpbWVab25lLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCB0aW1lem9uZU9mZnNldCA9IHRpbWVab25lLm9mZnNldDtcclxuICAgICAgICBpZiAoIWlzU3VtbWVyVGltZSkge1xyXG4gICAgICAgICAgICB0aW1lem9uZU9mZnNldCAtPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKE1hdGguYWJzKChjdXJyZW50VGltZVpvbmVPZmZzZXQgLSB0aW1lem9uZU9mZnNldCkpIDwgbWluVGltZU9mZnNldERpZmZlcmVuY2UpIHtcclxuICAgICAgICAgICAgbWluVGltZU9mZnNldERpZmZlcmVuY2UgPSBNYXRoLmFicygoY3VycmVudFRpbWVab25lT2Zmc2V0IC0gdGltZXpvbmVPZmZzZXQpKTtcclxuICAgICAgICAgICAgZGVmYXVsdFRpbWVab25lID0gaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gVGltZVpvbmVUeXBlW2RlZmF1bHRUaW1lWm9uZV1cclxufVxyXG4iXX0=\n"],"sourceRoot":"/source/"}